[med-svn] [ugene] 01/04: New upstream version 1.28.1+dfsg

Andreas Tille tille at debian.org
Sun Dec 3 18:08:31 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository ugene.

commit 07b8965e425ecfd5ba2efbc3559e92998aa8d6fa
Author: Andreas Tille <tille at debian.org>
Date:   Sun Dec 3 19:06:03 2017 +0100

    New upstream version 1.28.1+dfsg
---
 .gitignore                                         |   46 +
 .gitmodules                                        |    4 +
 .travis.yml                                        |   14 +
 CMakeLists.txt                                     |   97 +
 COPYRIGHT                                          |   33 -
 LICENSE.3rd_party.txt                              |   28 +-
 README.md                                          |   74 +
 data/cmdline/align-to-reference.uwl                |  102 +
 data/cmdline/extract_consensus_sequence.uwl        |    2 +-
 data/samples/APR/DNA.apr                           | 1525 ++++++
 data/samples/APR/gyrA.apr                          |  459 ++
 .../Sanger sequencing/trim-and-align.uwl           |  177 +-
 installer/_common_data/Associate_files_to_UGENE.sh |    0
 installer/_common_data/LICENSE.3rd_party           |   28 +-
 installer/linux/X11/README                         |   27 +
 installer/linux/X11/create_bundle.sh               |  232 +
 installer/linux/X11/create_bundle_common.sh        |   71 +
 installer/linux/X11/i686/dump_syms                 |  Bin 0 -> 2723028 bytes
 installer/linux/X11/x86_64/dump_syms               |  Bin 0 -> 3287614 bytes
 installer/linux/fedora/devel/ugene.spec            |   75 -
 installer/linux/fedora/mkinstaller.sh              |    0
 installer/linux/fedora/ugene.spec                  |   67 +-
 installer/linux/ubuntu/build.sh                    |    0
 installer/linux/ubuntu/debian/copyright            |   28 +-
 installer/linux/ubuntu/debian/rules                |    7 +-
 installer/linux/ubuntu/pack.sh                     |    0
 installer/source/COPYRIGHT                         |   33 +
 installer/source/HeadC.txt                         |   10 +
 installer/source/HeadPro.txt                       |   11 +
 installer/source/config.sh                         |   78 +
 installer/source/pack.sh                           |  207 +
 installer/windows_x64/build.cmd                    |  108 +
 installer/windows_x64/bundle_binary_zip.cmd        |  156 +
 installer/windows_x64/bundle_ugene.vbs             |   30 +
 installer/windows_x64/copy_executable.cmd          |    4 +
 installer/windows_x64/copy_lib.cmd                 |    4 +
 installer/windows_x64/copy_plugin.cmd              |   13 +
 installer/windows_x64/images/header.bmp            |  Bin 0 -> 25818 bytes
 installer/windows_x64/images/install.ico           |  Bin 0 -> 25214 bytes
 installer/windows_x64/images/install2.ico          |  Bin 0 -> 11502 bytes
 installer/windows_x64/images/uninstall.ico         |  Bin 0 -> 766 bytes
 installer/windows_x64/images/welcome.bmp           |  Bin 0 -> 154050 bytes
 installer/windows_x64/resort_symbols.py            |   31 +
 installer/windows_x64/ugene.nsh                    |  337 ++
 installer/windows_x64/ugene_extensions.nsh         |  158 +
 src/Plugin.cmake                                   |   34 +
 src/corelibs/U2Algorithm/U2Algorithm.pri           |    2 +-
 src/corelibs/U2Algorithm/U2Algorithm.pro           |   15 +-
 .../U2Algorithm/src/misc/BinaryFindOpenCL.cpp      |    8 +-
 .../U2Algorithm/src/misc/BinaryFindOpenCL.h        |    2 +-
 src/corelibs/U2Algorithm/src/misc/BitsTable.cpp    |    2 +-
 src/corelibs/U2Algorithm/src/misc/BitsTable.h      |    2 +-
 .../U2Algorithm/src/misc/CDSearchTaskFactory.h     |    2 +-
 .../U2Algorithm/src/misc/DnaAssemblyMultiTask.cpp  |   15 +-
 .../U2Algorithm/src/misc/DnaAssemblyMultiTask.h    |    2 +-
 src/corelibs/U2Algorithm/src/misc/DynTable.h       |    2 +-
 src/corelibs/U2Algorithm/src/misc/EnzymeModel.h    |   10 +-
 .../U2Algorithm/src/misc/FindAlgorithm.cpp         |   17 +-
 src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h  |   11 +-
 .../U2Algorithm/src/misc/FindAlgorithmTask.cpp     |    5 +-
 .../U2Algorithm/src/misc/FindAlgorithmTask.h       |   12 +-
 .../src/misc/GenomeAssemblyMultiTask.cpp           |   11 +-
 .../U2Algorithm/src/misc/GenomeAssemblyMultiTask.h |    2 +-
 .../U2Algorithm/src/misc/RepeatFinderSettings.h    |    2 +-
 .../U2Algorithm/src/misc/RepeatFinderTaskFactory.h |    2 +-
 src/corelibs/U2Algorithm/src/misc/RollingArray.h   |    2 +-
 src/corelibs/U2Algorithm/src/misc/RollingMatrix.h  |    2 +-
 .../src/misc/SequenceContentFilterTask.cpp         |    2 +-
 .../src/misc/SequenceContentFilterTask.h           |    2 +-
 src/corelibs/U2Algorithm/src/misc/SyncSort.h       |    2 +-
 .../src/molecular_geometry/GeomUtils.cpp           |    3 +-
 .../U2Algorithm/src/molecular_geometry/GeomUtils.h |    7 +-
 .../src/molecular_geometry/MolecularSurface.cpp    |    2 +-
 .../src/molecular_geometry/MolecularSurface.h      |    8 +-
 .../MolecularSurfaceFactoryRegistry.cpp            |    2 +-
 .../MolecularSurfaceFactoryRegistry.h              |    2 +-
 .../src/molecular_geometry/VanDerWaalsSurface.cpp  |    2 +-
 .../src/molecular_geometry/VanDerWaalsSurface.h    |    2 +-
 .../src/msa_alignment/AbstractAlignmentTask.cpp    |    2 +-
 .../src/msa_alignment/AbstractAlignmentTask.h      |    8 +-
 .../AlignSequencesToAlignmentTaskSettings.cpp      |    2 +-
 .../AlignSequencesToAlignmentTaskSettings.h        |    2 +-
 .../msa_alignment/BaseAlignmentAlgorithmIds.cpp    |    2 +-
 .../src/msa_alignment/BaseAlignmentAlgorithmIds.h  |    2 +-
 .../src/msa_alignment/SimpleAddingToAlignment.cpp  |   59 +-
 .../src/msa_alignment/SimpleAddingToAlignment.h    |   10 +-
 .../src/pairwise_alignment/NWAligner.cpp           |   22 +-
 .../U2Algorithm/src/pairwise_alignment/NWAligner.h |    4 +-
 .../src/pairwise_alignment/PairwiseAligner.cpp     |    2 +-
 .../src/pairwise_alignment/PairwiseAligner.h       |    6 +-
 .../pairwise_alignment/PairwiseAlignmentTask.cpp   |    2 +-
 .../src/pairwise_alignment/PairwiseAlignmentTask.h |    2 +-
 .../src/phyltree/CreatePhyTreeSettings.cpp         |    2 +-
 .../src/phyltree/CreatePhyTreeSettings.h           |    8 +-
 .../U2Algorithm/src/phyltree/PhyTreeGenerator.h    |    8 +-
 .../src/phyltree/PhyTreeGeneratorRegistry.cpp      |    2 +-
 .../src/phyltree/PhyTreeGeneratorRegistry.h        |    2 +-
 .../src/phyltree/PhyTreeGeneratorTask.cpp          |   20 +-
 .../src/phyltree/PhyTreeGeneratorTask.h            |   14 +-
 .../src/registry/AlignmentAlgorithmsRegistry.cpp   |   12 +-
 .../src/registry/AlignmentAlgorithmsRegistry.h     |   14 +-
 .../src/registry/CDSearchTaskFactoryRegistry.h     |    2 +-
 .../U2Algorithm/src/registry/CudaGpuRegistry.cpp   |    3 +-
 .../U2Algorithm/src/registry/CudaGpuRegistry.h     |    4 +-
 .../src/registry/DnaAssemblyAlgRegistry.cpp        |    2 +-
 .../src/registry/DnaAssemblyAlgRegistry.h          |   12 +-
 .../U2Algorithm/src/registry/DnaAssemblyTask.cpp   |   18 +-
 .../U2Algorithm/src/registry/DnaAssemblyTask.h     |   22 +-
 .../src/registry/GenomeAssemblyRegistry.cpp        |    2 +-
 .../src/registry/GenomeAssemblyRegistry.h          |   14 +-
 .../U2Algorithm/src/registry/OpenCLGpuRegistry.cpp |    3 +-
 .../U2Algorithm/src/registry/OpenCLGpuRegistry.h   |    4 +-
 .../registry/RepeatFinderTaskFactoryRegistry.cpp   |    2 +-
 .../src/registry/RepeatFinderTaskFactoryRegistry.h |    2 +-
 .../src/registry/SecStructPredictAlgRegistry.cpp   |    4 +-
 .../src/registry/SecStructPredictAlgRegistry.h     |    5 +-
 .../src/registry/SecStructPredictTask.cpp          |    2 +-
 .../src/registry/SecStructPredictTask.h            |    2 +-
 .../src/registry/SplicedAlignmentTask.cpp          |    2 +-
 .../src/registry/SplicedAlignmentTask.h            |    2 +-
 .../src/registry/SplicedAlignmentTaskRegistry.cpp  |    2 +-
 .../src/registry/SplicedAlignmentTaskRegistry.h    |   12 +-
 .../src/registry/SubstMatrixRegistry.cpp           |    4 +-
 .../U2Algorithm/src/registry/SubstMatrixRegistry.h |    8 +-
 .../smith_waterman/SWMulAlignExternalPropTag.cpp   |    6 +-
 .../src/smith_waterman/SWMulAlignExternalPropTag.h |    2 +-
 .../src/smith_waterman/SWMulAlignResultNamesTag.h  |    6 +-
 .../SWMulAlignResultNamesTagsRegistry.cpp          |    2 +-
 .../SWMulAlignResultNamesTagsRegistry.h            |   22 +-
 .../src/smith_waterman/SWMulAlignSeqPrefixTag.cpp  |    2 +-
 .../src/smith_waterman/SWMulAlignSeqPrefixTag.h    |    2 +-
 .../src/smith_waterman/SWMulAlignSubseqPropTag.cpp |    2 +-
 .../src/smith_waterman/SWMulAlignSubseqPropTag.h   |    2 +-
 .../src/smith_waterman/SWResultFilterRegistry.cpp  |    4 +-
 .../src/smith_waterman/SWResultFilterRegistry.h    |    6 +-
 .../smith_waterman/SmithWatermanReportCallback.cpp |   36 +-
 .../smith_waterman/SmithWatermanReportCallback.h   |    2 +-
 .../src/smith_waterman/SmithWatermanResult.cpp     |    2 +-
 .../src/smith_waterman/SmithWatermanResult.h       |    2 +-
 .../smith_waterman/SmithWatermanResultFilters.cpp  |    2 +-
 .../smith_waterman/SmithWatermanResultFilters.h    |    2 +-
 .../src/smith_waterman/SmithWatermanSettings.h     |    4 +-
 .../src/smith_waterman/SmithWatermanTaskFactory.h  |    2 +-
 .../SmithWatermanTaskFactoryRegistry.cpp           |    2 +-
 .../SmithWatermanTaskFactoryRegistry.h             |    2 +-
 .../src/smith_waterman/SmithWatermanUtil.cpp       |    2 +-
 .../src/smith_waterman/SmithWatermanUtil.h         |    2 +-
 .../StructuralAlignmentAlgorithm.cpp               |    4 +-
 .../StructuralAlignmentAlgorithm.h                 |    2 +-
 .../StructuralAlignmentAlgorithmFactory.cpp        |    2 +-
 .../StructuralAlignmentAlgorithmFactory.h          |    2 +-
 .../StructuralAlignmentAlgorithmRegistry.cpp       |    2 +-
 .../StructuralAlignmentAlgorithmRegistry.h         |    4 +-
 .../AssemblyConsensusAlgorithm.cpp                 |    2 +-
 .../AssemblyConsensusAlgorithm.h                   |    2 +-
 .../AssemblyConsensusAlgorithmDefault.cpp          |    2 +-
 .../AssemblyConsensusAlgorithmDefault.h            |    2 +-
 .../AssemblyConsensusAlgorithmRegistry.cpp         |    2 +-
 .../AssemblyConsensusAlgorithmRegistry.h           |    6 +-
 .../AssemblyConsensusAlgorithmSamtools.cpp         |    2 +-
 .../AssemblyConsensusAlgorithmSamtools.h           |    2 +-
 .../AssemblyConsensusUtils.cpp                     |    2 +-
 .../AssemblyConsensusUtils.h                       |    2 +-
 .../BuiltInAssemblyConsensusAlgorithms.cpp         |    2 +-
 .../BuiltInAssemblyConsensusAlgorithms.h           |    4 +-
 .../U2Algorithm/src/util_gpu/opencl/BinaryFind.cl  |    2 +-
 .../src/util_gpu/opencl/OpenCLHelper.cpp           |    2 +-
 .../U2Algorithm/src/util_gpu/opencl/OpenCLHelper.h |    6 +-
 .../src/util_gpu/opencl/OpenCLUtils.cpp            |    6 +-
 .../U2Algorithm/src/util_gpu/opencl/OpenCLUtils.h  |    4 +-
 .../BuiltInConsensusAlgorithms.cpp                 |   13 +-
 .../BuiltInConsensusAlgorithms.h                   |   15 +-
 .../util_msa_consensus/MSAConsensusAlgorithm.cpp   |   39 +-
 .../src/util_msa_consensus/MSAConsensusAlgorithm.h |   27 +-
 .../MSAConsensusAlgorithmClustal.cpp               |   32 +-
 .../MSAConsensusAlgorithmClustal.h                 |    9 +-
 .../MSAConsensusAlgorithmDefault.cpp               |   22 +-
 .../MSAConsensusAlgorithmDefault.h                 |   12 +-
 .../MSAConsensusAlgorithmLevitsky.cpp              |   31 +-
 .../MSAConsensusAlgorithmLevitsky.h                |   10 +-
 .../MSAConsensusAlgorithmRegistry.cpp              |   11 +-
 .../MSAConsensusAlgorithmRegistry.h                |    4 +-
 .../MSAConsensusAlgorithmStrict.cpp                |   24 +-
 .../MSAConsensusAlgorithmStrict.h                  |    9 +-
 .../src/util_msa_consensus/MSAConsensusUtils.cpp   |   53 +-
 .../src/util_msa_consensus/MSAConsensusUtils.h     |   23 +-
 .../MaConsensusAlgorithmSimpleExtended.cpp         |  226 +
 .../MaConsensusAlgorithmSimpleExtended.h           |  139 +
 .../BuiltInDistanceAlgorithms.cpp                  |    2 +-
 .../util_msa_distance/BuiltInDistanceAlgorithms.h  |    4 +-
 .../src/util_msa_distance/MSADistanceAlgorithm.cpp |   88 +-
 .../src/util_msa_distance/MSADistanceAlgorithm.h   |   71 +-
 .../MSADistanceAlgorithmHamming.cpp                |   14 +-
 .../MSADistanceAlgorithmHamming.h                  |    6 +-
 .../MSADistanceAlgorithmHammingRevCompl.cpp        |   23 +-
 .../MSADistanceAlgorithmHammingRevCompl.h          |    6 +-
 .../MSADistanceAlgorithmRegistry.cpp               |    2 +-
 .../MSADistanceAlgorithmRegistry.h                 |    4 +-
 .../MSADistanceAlgorithmSimilarity.cpp             |   14 +-
 .../MSADistanceAlgorithmSimilarity.h               |    6 +-
 .../src/util_msaedit/CreateSubalignmentTask.cpp    |   21 +-
 .../src/util_msaedit/CreateSubalignmentTask.h      |   10 +-
 .../src/util_msaedit/MAlignmentUtilTasks.cpp       |  183 -
 .../src/util_msaedit/MAlignmentUtilTasks.h         |   98 -
 .../U2Algorithm/src/util_msaedit/MsaUtilTasks.cpp  |  182 +
 .../U2Algorithm/src/util_msaedit/MsaUtilTasks.h    |   97 +
 .../color_schemes/ColorSchemeUtils.cpp             |    4 +-
 .../util_msaedit/color_schemes/ColorSchemeUtils.h  |    2 +-
 .../util_msaedit/color_schemes/MsaColorScheme.cpp  |  172 +-
 .../util_msaedit/color_schemes/MsaColorScheme.h    |   49 +-
 .../color_schemes/MsaColorSchemeClustalX.cpp       |   21 +-
 .../color_schemes/MsaColorSchemeClustalX.h         |    8 +-
 .../color_schemes/MsaColorSchemeCustom.cpp         |   11 +-
 .../color_schemes/MsaColorSchemeCustom.h           |    4 +-
 ...saColorSchemePercentageIdententityGrayscale.cpp |   12 +-
 .../MsaColorSchemePercentageIdententityGrayscale.h |    8 +-
 .../MsaColorSchemePercentageIdentity.cpp           |   23 +-
 .../MsaColorSchemePercentageIdentity.h             |    8 +-
 .../color_schemes/MsaColorSchemeStatic.cpp         |   10 +-
 .../color_schemes/MsaColorSchemeStatic.h           |    8 +-
 .../highlighting_schemes/MsaHighlightingScheme.cpp |   93 +-
 .../highlighting_schemes/MsaHighlightingScheme.h   |   50 +-
 .../MsaHighlightingSchemeAgreements.cpp            |   12 +-
 .../MsaHighlightingSchemeAgreements.h              |    8 +-
 .../MsaHighlightingSchemeConservation.cpp          |   22 +-
 .../MsaHighlightingSchemeConservation.h            |   10 +-
 .../MsaHighlightingSchemeDisagreements.cpp         |   12 +-
 .../MsaHighlightingSchemeDisagreements.h           |    8 +-
 .../MsaHighlightingSchemeGaps.cpp                  |   14 +-
 .../MsaHighlightingSchemeGaps.h                    |    8 +-
 .../MsaHighlightingSchemeNoColors.cpp              |   10 +-
 .../MsaHighlightingSchemeNoColors.h                |    8 +-
 .../MsaHighlightingSchemeTransitions.cpp           |   10 +-
 .../MsaHighlightingSchemeTransitions.h             |    8 +-
 .../MsaHighlightingSchemeTransversions.cpp         |   10 +-
 .../MsaHighlightingSchemeTransversions.h           |    8 +-
 .../U2Algorithm/src/util_orf/ORFAlgorithmTask.cpp  |    2 +-
 .../U2Algorithm/src/util_orf/ORFAlgorithmTask.h    |    4 +-
 .../U2Algorithm/src/util_orf/ORFFinder.cpp         |    2 +-
 src/corelibs/U2Algorithm/src/util_orf/ORFFinder.h  |    4 +-
 .../src/util_sarray/SArrayBasedFindTask.cpp        |    2 +-
 .../src/util_sarray/SArrayBasedFindTask.h          |    4 +-
 .../U2Algorithm/src/util_sarray/SArrayIndex.cpp    |    4 +-
 .../U2Algorithm/src/util_sarray/SArrayIndex.h      |    2 +-
 .../src/util_sarray/SArrayIndexSerializer.cpp      |    4 +-
 .../src/util_sarray/SArrayIndexSerializer.h        |    4 +-
 .../BuiltInPWMConversionAlgorithms.cpp             |    2 +-
 .../BuiltInPWMConversionAlgorithms.h               |    4 +-
 .../util_weight_matrix/PWMConversionAlgorithm.cpp  |    2 +-
 .../util_weight_matrix/PWMConversionAlgorithm.h    |    2 +-
 .../PWMConversionAlgorithmBVH.cpp                  |    2 +-
 .../util_weight_matrix/PWMConversionAlgorithmBVH.h |    2 +-
 .../PWMConversionAlgorithmLOD.cpp                  |    2 +-
 .../util_weight_matrix/PWMConversionAlgorithmLOD.h |    2 +-
 .../PWMConversionAlgorithmMCH.cpp                  |    2 +-
 .../util_weight_matrix/PWMConversionAlgorithmMCH.h |    2 +-
 .../PWMConversionAlgorithmNLG.cpp                  |    2 +-
 .../util_weight_matrix/PWMConversionAlgorithmNLG.h |    2 +-
 .../PWMConversionAlgorithmRegistry.cpp             |    2 +-
 .../PWMConversionAlgorithmRegistry.h               |    4 +-
 src/corelibs/U2Algorithm/transl/english.ts         |  173 +-
 src/corelibs/U2Algorithm/transl/russian.ts         |  175 +-
 src/corelibs/U2Core/CMakeLists.txt                 |    2 +-
 src/corelibs/U2Core/U2Core.pri                     |    3 +-
 src/corelibs/U2Core/U2Core.pro                     |   68 +-
 .../U2Core/src/cmdline/CMDLineCoreOptions.cpp      |    2 +-
 .../U2Core/src/cmdline/CMDLineCoreOptions.h        |    6 +-
 .../U2Core/src/cmdline/CMDLineHelpProvider.h       |    2 +-
 .../U2Core/src/cmdline/CMDLineRegistry.cpp         |   12 +-
 src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h  |   13 +-
 src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp   |   12 +-
 src/corelibs/U2Core/src/cmdline/CMDLineUtils.h     |    8 +-
 src/corelibs/U2Core/src/datatype/Annotation.cpp    |   19 +-
 src/corelibs/U2Core/src/datatype/Annotation.h      |    2 +-
 .../U2Core/src/datatype/AnnotationData.cpp         |    2 +-
 src/corelibs/U2Core/src/datatype/AnnotationData.h  |    8 +-
 .../U2Core/src/datatype/AnnotationGroup.cpp        |    2 +-
 src/corelibs/U2Core/src/datatype/AnnotationGroup.h |    2 +-
 .../U2Core/src/datatype/AnnotationModification.cpp |    2 +-
 .../U2Core/src/datatype/AnnotationModification.h   |    2 +-
 .../U2Core/src/datatype/AnnotationSettings.cpp     |    4 +-
 .../U2Core/src/datatype/AnnotationSettings.h       |    2 +-
 .../datatype/AnnotationTableObjectConstraints.cpp  |    2 +-
 .../datatype/AnnotationTableObjectConstraints.h    |    2 +-
 src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp |    2 +-
 .../U2Core/src/datatype/BaseTranslations.cpp       |    8 +-
 src/corelibs/U2Core/src/datatype/BioStruct3D.cpp   |    2 +-
 src/corelibs/U2Core/src/datatype/BioStruct3D.h     |   12 +-
 src/corelibs/U2Core/src/datatype/DIProperties.h    |   13 +-
 src/corelibs/U2Core/src/datatype/DNAAlphabet.cpp   |    2 +-
 src/corelibs/U2Core/src/datatype/DNAAlphabet.h     |    4 +-
 .../src/datatype/DNAAlphabetRegistryImpl.cpp       |    2 +-
 .../U2Core/src/datatype/DNAAlphabetRegistryImpl.h  |    2 +-
 .../U2Core/src/datatype/DNAChromatogram.cpp        |   75 +
 src/corelibs/U2Core/src/datatype/DNAChromatogram.h |   22 +-
 src/corelibs/U2Core/src/datatype/DNAInfo.cpp       |    4 +-
 src/corelibs/U2Core/src/datatype/DNAInfo.h         |    8 +-
 src/corelibs/U2Core/src/datatype/DNAQuality.cpp    |   63 +-
 src/corelibs/U2Core/src/datatype/DNAQuality.h      |   36 +-
 src/corelibs/U2Core/src/datatype/DNASequence.cpp   |   17 +-
 src/corelibs/U2Core/src/datatype/DNASequence.h     |    6 +-
 .../U2Core/src/datatype/DNASequenceUtils.cpp       |   42 +-
 .../U2Core/src/datatype/DNASequenceUtils.h         |   16 +-
 .../U2Core/src/datatype/DNATranslation.cpp         |    2 +-
 src/corelibs/U2Core/src/datatype/DNATranslation.h  |    4 +-
 .../U2Core/src/datatype/DNATranslationImpl.cpp     |    4 +-
 .../U2Core/src/datatype/DNATranslationImpl.h       |    6 +-
 src/corelibs/U2Core/src/datatype/FeatureColors.cpp |    2 +-
 src/corelibs/U2Core/src/datatype/FeatureColors.h   |    4 +-
 src/corelibs/U2Core/src/datatype/MAlignment.cpp    | 1401 -----
 src/corelibs/U2Core/src/datatype/MAlignment.h      |  590 --
 .../U2Core/src/datatype/MAlignmentInfo.cpp         |  125 -
 src/corelibs/U2Core/src/datatype/MAlignmentInfo.h  |   79 -
 src/corelibs/U2Core/src/datatype/Matrix44.cpp      |    2 +-
 src/corelibs/U2Core/src/datatype/Matrix44.h        |    6 +-
 src/corelibs/U2Core/src/datatype/PFMatrix.cpp      |   16 +-
 src/corelibs/U2Core/src/datatype/PFMatrix.h        |   12 +-
 src/corelibs/U2Core/src/datatype/PWMatrix.cpp      |    4 +-
 src/corelibs/U2Core/src/datatype/PWMatrix.h        |    6 +-
 src/corelibs/U2Core/src/datatype/PhyTree.cpp       |    2 +-
 src/corelibs/U2Core/src/datatype/PhyTree.h         |   13 +-
 src/corelibs/U2Core/src/datatype/SMatrix.cpp       |   10 +-
 src/corelibs/U2Core/src/datatype/SMatrix.h         |    4 +-
 src/corelibs/U2Core/src/datatype/U2Alphabet.h      |    2 +-
 src/corelibs/U2Core/src/datatype/U2Assembly.h      |    4 +-
 src/corelibs/U2Core/src/datatype/U2Attribute.h     |    6 +-
 .../U2Core/src/datatype/U2CoreAttributes.cpp       |    4 +-
 .../U2Core/src/datatype/U2CoreAttributes.h         |    2 +-
 src/corelibs/U2Core/src/datatype/U2Feature.h       |    8 +-
 src/corelibs/U2Core/src/datatype/U2FeatureKeys.h   |    2 +-
 src/corelibs/U2Core/src/datatype/U2FeatureType.cpp |    2 +-
 src/corelibs/U2Core/src/datatype/U2FeatureType.h   |    2 +-
 src/corelibs/U2Core/src/datatype/U2IdTypes.h       |    2 +-
 src/corelibs/U2Core/src/datatype/U2Identity.h      |    6 +-
 src/corelibs/U2Core/src/datatype/U2Location.h      |    4 +-
 src/corelibs/U2Core/src/datatype/U2Mca.cpp         |   63 +
 src/corelibs/U2Core/src/datatype/U2Mca.h           |   53 +
 src/corelibs/U2Core/src/datatype/U2Mod.cpp         |   15 +-
 src/corelibs/U2Core/src/datatype/U2Mod.h           |   48 +-
 src/corelibs/U2Core/src/datatype/U2Msa.cpp         |  107 +
 src/corelibs/U2Core/src/datatype/U2Msa.h           |   48 +-
 src/corelibs/U2Core/src/datatype/U2Qualifier.cpp   |    4 +-
 src/corelibs/U2Core/src/datatype/U2Qualifier.h     |    2 +-
 src/corelibs/U2Core/src/datatype/U2Range.h         |    2 +-
 src/corelibs/U2Core/src/datatype/U2RawData.h       |    2 +-
 src/corelibs/U2Core/src/datatype/U2Region.cpp      |    4 +-
 src/corelibs/U2Core/src/datatype/U2Region.h        |   11 +-
 src/corelibs/U2Core/src/datatype/U2Sequence.h      |    2 +-
 src/corelibs/U2Core/src/datatype/U2Type.cpp        |    2 +-
 src/corelibs/U2Core/src/datatype/U2Type.h          |    5 +-
 src/corelibs/U2Core/src/datatype/U2TypeIds.h       |    2 +-
 src/corelibs/U2Core/src/datatype/U2Variant.cpp     |    2 +-
 src/corelibs/U2Core/src/datatype/U2Variant.h       |    5 +-
 src/corelibs/U2Core/src/datatype/UdrRecord.cpp     |    4 +-
 src/corelibs/U2Core/src/datatype/UdrRecord.h       |    2 +-
 src/corelibs/U2Core/src/datatype/UdrSchema.cpp     |    4 +-
 src/corelibs/U2Core/src/datatype/UdrSchema.h       |    2 +-
 .../U2Core/src/datatype/UdrSchemaRegistry.cpp      |    4 +-
 .../U2Core/src/datatype/UdrSchemaRegistry.h        |    4 +-
 src/corelibs/U2Core/src/datatype/Vector3D.cpp      |    2 +-
 src/corelibs/U2Core/src/datatype/Vector3D.h        |    2 +-
 .../U2Core/src/datatype/msa/MaStateCheck.cpp       |   41 +
 .../U2Core/src/datatype/msa/MaStateCheck.h         |   40 +
 .../U2Core/src/datatype/msa/MultipleAlignment.cpp  |  412 ++
 .../U2Core/src/datatype/msa/MultipleAlignment.h    |  231 +
 .../src/datatype/msa/MultipleAlignmentInfo.cpp     |  122 +
 .../src/datatype/msa/MultipleAlignmentInfo.h       |   79 +
 .../src/datatype/msa/MultipleAlignmentRow.cpp      |   89 +
 .../U2Core/src/datatype/msa/MultipleAlignmentRow.h |  157 +
 .../src/datatype/msa/MultipleAlignmentRowInfo.cpp  |   45 +
 .../src/datatype/msa/MultipleAlignmentRowInfo.h    |   45 +
 .../datatype/msa/MultipleChromatogramAlignment.cpp |  637 +++
 .../datatype/msa/MultipleChromatogramAlignment.h   |  255 +
 .../msa/MultipleChromatogramAlignmentRow.cpp       |  714 +++
 .../msa/MultipleChromatogramAlignmentRow.h         |  334 ++
 .../src/datatype/msa/MultipleSequenceAlignment.cpp |  613 +++
 .../src/datatype/msa/MultipleSequenceAlignment.h   |  259 +
 .../datatype/msa/MultipleSequenceAlignmentRow.cpp  |  617 +++
 .../datatype/msa/MultipleSequenceAlignmentRow.h    |  301 ++
 .../U2Core/src/datatype/udr/RawDataUdrSchema.cpp   |   22 +-
 .../U2Core/src/datatype/udr/RawDataUdrSchema.h     |    3 +-
 src/corelibs/U2Core/src/dbi/DbiConnection.cpp      |    2 +-
 src/corelibs/U2Core/src/dbi/DbiConnection.h        |    2 +-
 src/corelibs/U2Core/src/dbi/DbiDocumentFormat.cpp  |   66 +-
 src/corelibs/U2Core/src/dbi/DbiDocumentFormat.h    |    8 +-
 src/corelibs/U2Core/src/dbi/U2AbstractDbi.h        |    2 +-
 src/corelibs/U2Core/src/dbi/U2AssemblyDbi.h        |    3 +-
 src/corelibs/U2Core/src/dbi/U2AttributeDbi.h       |    2 +-
 .../U2Core/src/dbi/U2CrossDatabaseReferenceDbi.h   |    2 +-
 src/corelibs/U2Core/src/dbi/U2Dbi.cpp              |    2 +-
 src/corelibs/U2Core/src/dbi/U2Dbi.h                |   22 +-
 src/corelibs/U2Core/src/dbi/U2DbiPackUtils.cpp     |  300 +-
 src/corelibs/U2Core/src/dbi/U2DbiPackUtils.h       |   39 +-
 src/corelibs/U2Core/src/dbi/U2DbiRegistry.cpp      |    8 +-
 src/corelibs/U2Core/src/dbi/U2DbiRegistry.h        |    8 +-
 src/corelibs/U2Core/src/dbi/U2DbiUtils.cpp         |   84 +-
 src/corelibs/U2Core/src/dbi/U2DbiUtils.h           |    9 +-
 src/corelibs/U2Core/src/dbi/U2FeatureDbi.h         |    2 +-
 src/corelibs/U2Core/src/dbi/U2FormatCheckResult.h  |    4 +-
 src/corelibs/U2Core/src/dbi/U2ModDbi.h             |    2 +-
 src/corelibs/U2Core/src/dbi/U2MsaDbi.h             |    4 +-
 src/corelibs/U2Core/src/dbi/U2ObjectDbi.cpp        |    2 +-
 src/corelibs/U2Core/src/dbi/U2ObjectDbi.h          |   10 +-
 .../U2Core/src/dbi/U2ObjectRelationsDbi.cpp        |    2 +-
 src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.h |    2 +-
 .../U2Core/src/dbi/U2SQLiteTripleStore.cpp         |   28 +-
 src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.h  |    2 +-
 src/corelibs/U2Core/src/dbi/U2SequenceDbi.h        |    5 +-
 src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp       |   61 +-
 src/corelibs/U2Core/src/dbi/U2SqlHelpers.h         |   85 +-
 src/corelibs/U2Core/src/dbi/U2VariantDbi.h         |    2 +-
 src/corelibs/U2Core/src/dbi/UdrDbi.cpp             |    2 +-
 src/corelibs/U2Core/src/dbi/UdrDbi.h               |    4 +-
 src/corelibs/U2Core/src/globals/AppContext.cpp     |    2 +-
 src/corelibs/U2Core/src/globals/AppContext.h       |  112 +-
 src/corelibs/U2Core/src/globals/AppFileStorage.cpp |   18 +-
 src/corelibs/U2Core/src/globals/AppFileStorage.h   |    6 +-
 .../U2Core/src/globals/AppGlobalObject.cpp         |    2 +-
 src/corelibs/U2Core/src/globals/AppGlobalObject.h  |    4 +-
 src/corelibs/U2Core/src/globals/AppResources.cpp   |    6 +-
 src/corelibs/U2Core/src/globals/AppResources.h     |    8 +-
 src/corelibs/U2Core/src/globals/AppSettings.h      |    2 +-
 .../U2Core/src/globals/AutoAnnotationsSupport.cpp  |    2 +-
 .../U2Core/src/globals/AutoAnnotationsSupport.h    |    6 +-
 .../U2Core/src/globals/BaseDocumentFormats.cpp     |  121 +-
 .../U2Core/src/globals/BaseDocumentFormats.h       |    6 +-
 .../U2Core/src/globals/ClipboardController.cpp     |   15 +-
 .../U2Core/src/globals/ClipboardController.h       |    2 +-
 src/corelibs/U2Core/src/globals/Counter.cpp        |    2 +-
 src/corelibs/U2Core/src/globals/Counter.h          |   13 +-
 .../U2Core/src/globals/CredentialsAsker.cpp        |    2 +-
 src/corelibs/U2Core/src/globals/CredentialsAsker.h |    2 +-
 src/corelibs/U2Core/src/globals/DBXRefRegistry.cpp |   13 +-
 src/corelibs/U2Core/src/globals/DBXRefRegistry.h   |   12 +-
 .../U2Core/src/globals/DataBaseRegistry.cpp        |    2 +-
 src/corelibs/U2Core/src/globals/DataBaseRegistry.h |   10 +-
 .../U2Core/src/globals/DataPathRegistry.cpp        |    4 +-
 src/corelibs/U2Core/src/globals/DataPathRegistry.h |    6 +-
 .../U2Core/src/globals/ExternalToolRegistry.cpp    |   14 +-
 .../U2Core/src/globals/ExternalToolRegistry.h      |   35 +-
 src/corelibs/U2Core/src/globals/FormatSettings.cpp |    2 +-
 src/corelibs/U2Core/src/globals/FormatSettings.h   |    4 +-
 src/corelibs/U2Core/src/globals/GUrl.cpp           |   10 +-
 src/corelibs/U2Core/src/globals/GUrl.h             |    4 +-
 src/corelibs/U2Core/src/globals/Identifiable.h     |    2 +-
 src/corelibs/U2Core/src/globals/L10n.h             |    8 +-
 src/corelibs/U2Core/src/globals/Log.cpp            |    4 +-
 src/corelibs/U2Core/src/globals/Log.h              |   10 +-
 src/corelibs/U2Core/src/globals/LogCache.cpp       |    2 +-
 src/corelibs/U2Core/src/globals/LogCache.h         |    8 +-
 .../U2Core/src/globals/NetworkConfiguration.cpp    |    4 +-
 .../U2Core/src/globals/NetworkConfiguration.h      |   11 +-
 .../U2Core/src/globals/PasswordStorage.cpp         |    2 +-
 src/corelibs/U2Core/src/globals/PasswordStorage.h  |   10 +-
 src/corelibs/U2Core/src/globals/PluginModel.cpp    |    2 +-
 src/corelibs/U2Core/src/globals/PluginModel.h      |    9 +-
 .../src/globals/ProjectFilterTaskRegistry.cpp      |    2 +-
 .../U2Core/src/globals/ProjectFilterTaskRegistry.h |    2 +-
 src/corelibs/U2Core/src/globals/ProjectService.cpp |    2 +-
 src/corelibs/U2Core/src/globals/ProjectService.h   |    8 +-
 .../globals/ProjectTreeControllerModeSettings.cpp  |    2 +-
 .../globals/ProjectTreeControllerModeSettings.h    |    6 +-
 .../U2Core/src/globals/ResourceTracker.cpp         |    2 +-
 src/corelibs/U2Core/src/globals/ResourceTracker.h  |   10 +-
 .../U2Core/src/globals/ScriptingToolRegistry.cpp   |    2 +-
 .../U2Core/src/globals/ScriptingToolRegistry.h     |    7 +-
 src/corelibs/U2Core/src/globals/ServiceModel.cpp   |    2 +-
 src/corelibs/U2Core/src/globals/ServiceModel.h     |    8 +-
 src/corelibs/U2Core/src/globals/ServiceTypes.h     |    2 +-
 src/corelibs/U2Core/src/globals/Settings.h         |    6 +-
 src/corelibs/U2Core/src/globals/Task.cpp           |    2 +-
 src/corelibs/U2Core/src/globals/Task.h             |   15 +-
 src/corelibs/U2Core/src/globals/Timer.cpp          |    2 +-
 src/corelibs/U2Core/src/globals/Timer.h            |    4 +-
 src/corelibs/U2Core/src/globals/U2OpStatus.h       |    2 +-
 src/corelibs/U2Core/src/globals/U2SafePoints.h     |    7 +-
 .../U2Core/src/globals/UserActionsWriter.cpp       |    2 +-
 .../U2Core/src/globals/UserActionsWriter.h         |    2 +-
 .../src/globals/UserApplicationsSettings.cpp       |   39 +-
 .../U2Core/src/globals/UserApplicationsSettings.h  |    4 +-
 src/corelibs/U2Core/src/globals/Version.cpp        |    2 +-
 src/corelibs/U2Core/src/globals/Version.h          |    2 +-
 src/corelibs/U2Core/src/globals/global.h           |   31 +-
 .../U2Core/src/gobjects/AnnotationTableObject.cpp  |    2 +-
 .../U2Core/src/gobjects/AnnotationTableObject.h    |    2 +-
 .../U2Core/src/gobjects/AssemblyObject.cpp         |    2 +-
 src/corelibs/U2Core/src/gobjects/AssemblyObject.h  |    2 +-
 .../U2Core/src/gobjects/BioStruct3DObject.cpp      |    2 +-
 .../U2Core/src/gobjects/BioStruct3DObject.h        |    2 +-
 .../U2Core/src/gobjects/DNAChromatogramObject.cpp  |   30 +-
 .../U2Core/src/gobjects/DNAChromatogramObject.h    |    6 +-
 .../U2Core/src/gobjects/DNASequenceObject.cpp      |   17 +-
 .../U2Core/src/gobjects/DNASequenceObject.h        |    8 +-
 .../U2Core/src/gobjects/GObjectRelationRoles.cpp   |    7 +-
 .../U2Core/src/gobjects/GObjectRelationRoles.h     |    5 +-
 src/corelibs/U2Core/src/gobjects/GObjectTypes.cpp  |    6 +-
 src/corelibs/U2Core/src/gobjects/GObjectTypes.h    |    7 +-
 src/corelibs/U2Core/src/gobjects/GObjectUtils.cpp  |    9 +-
 src/corelibs/U2Core/src/gobjects/GObjectUtils.h    |    2 +-
 .../U2Core/src/gobjects/MAlignmentObject.cpp       |  813 ---
 .../U2Core/src/gobjects/MAlignmentObject.h         |  224 -
 .../src/gobjects/MultipleAlignmentObject.cpp       |  623 +++
 .../U2Core/src/gobjects/MultipleAlignmentObject.h  |  171 +
 .../MultipleChromatogramAlignmentObject.cpp        |  313 ++
 .../gobjects/MultipleChromatogramAlignmentObject.h |   90 +
 .../gobjects/MultipleSequenceAlignmentObject.cpp   |  261 +
 .../src/gobjects/MultipleSequenceAlignmentObject.h |   80 +
 .../U2Core/src/gobjects/PFMatrixObject.cpp         |    2 +-
 src/corelibs/U2Core/src/gobjects/PFMatrixObject.h  |    2 +-
 .../U2Core/src/gobjects/PWMatrixObject.cpp         |    2 +-
 src/corelibs/U2Core/src/gobjects/PWMatrixObject.h  |    2 +-
 src/corelibs/U2Core/src/gobjects/PhyTreeObject.cpp |    2 +-
 src/corelibs/U2Core/src/gobjects/PhyTreeObject.h   |    2 +-
 src/corelibs/U2Core/src/gobjects/TextObject.cpp    |    2 +-
 src/corelibs/U2Core/src/gobjects/TextObject.h      |    2 +-
 .../U2Core/src/gobjects/UnloadedObject.cpp         |    2 +-
 src/corelibs/U2Core/src/gobjects/UnloadedObject.h  |    2 +-
 .../U2Core/src/gobjects/VariantTrackObject.cpp     |    2 +-
 .../U2Core/src/gobjects/VariantTrackObject.h       |    2 +-
 .../U2Core/src/io/DatabaseConnectionAdapter.cpp    |    2 +-
 .../U2Core/src/io/DatabaseConnectionAdapter.h      |    2 +-
 src/corelibs/U2Core/src/io/HttpFileAdapter.cpp     |   21 +-
 src/corelibs/U2Core/src/io/HttpFileAdapter.h       |   15 +-
 src/corelibs/U2Core/src/io/IOAdapter.cpp           |    2 +-
 src/corelibs/U2Core/src/io/IOAdapter.h             |    6 +-
 src/corelibs/U2Core/src/io/InputStream.h           |    2 +-
 src/corelibs/U2Core/src/io/LocalFileAdapter.cpp    |    2 +-
 src/corelibs/U2Core/src/io/LocalFileAdapter.h      |    4 +-
 src/corelibs/U2Core/src/io/OutputStream.h          |    2 +-
 src/corelibs/U2Core/src/io/StringAdapter.cpp       |    2 +-
 src/corelibs/U2Core/src/io/StringAdapter.h         |    2 +-
 src/corelibs/U2Core/src/io/VFSAdapter.cpp          |    2 +-
 src/corelibs/U2Core/src/io/VFSAdapter.h            |    4 +-
 src/corelibs/U2Core/src/io/VirtualFileSystem.cpp   |    4 +-
 src/corelibs/U2Core/src/io/VirtualFileSystem.h     |   10 +-
 src/corelibs/U2Core/src/io/ZlibAdapter.cpp         |    2 +-
 src/corelibs/U2Core/src/io/ZlibAdapter.h           |    2 +-
 src/corelibs/U2Core/src/models/BunchMimeData.cpp   |    2 +-
 src/corelibs/U2Core/src/models/BunchMimeData.h     |    2 +-
 src/corelibs/U2Core/src/models/DocumentImport.cpp  |   21 +-
 src/corelibs/U2Core/src/models/DocumentImport.h    |   30 +-
 src/corelibs/U2Core/src/models/DocumentModel.cpp   |   29 +-
 src/corelibs/U2Core/src/models/DocumentModel.h     |   14 +-
 src/corelibs/U2Core/src/models/DocumentUtils.cpp   |    9 +-
 src/corelibs/U2Core/src/models/DocumentUtils.h     |    4 +-
 src/corelibs/U2Core/src/models/Folder.cpp          |    2 +-
 src/corelibs/U2Core/src/models/Folder.h            |    6 +-
 src/corelibs/U2Core/src/models/GHints.cpp          |    2 +-
 src/corelibs/U2Core/src/models/GHints.h            |    4 +-
 src/corelibs/U2Core/src/models/GObject.cpp         |    6 +-
 src/corelibs/U2Core/src/models/GObject.h           |    8 +-
 .../U2Core/src/models/GObjectReference.cpp         |    6 +-
 src/corelibs/U2Core/src/models/GObjectReference.h  |   10 +-
 .../U2Core/src/models/MimeDataIterator.cpp         |    2 +-
 src/corelibs/U2Core/src/models/MimeDataIterator.h  |    2 +-
 src/corelibs/U2Core/src/models/ProjectModel.cpp    |    4 +-
 src/corelibs/U2Core/src/models/ProjectModel.h      |    8 +-
 .../U2Core/src/models/StateLockableDataModel.cpp   |   34 +-
 .../U2Core/src/models/StateLockableDataModel.h     |   13 +-
 .../U2Core/src/selection/AnnotationSelection.cpp   |    2 +-
 .../U2Core/src/selection/AnnotationSelection.h     |    2 +-
 .../U2Core/src/selection/DNASequenceSelection.h    |    2 +-
 .../U2Core/src/selection/DocumentSelection.cpp     |    2 +-
 .../U2Core/src/selection/DocumentSelection.h       |    2 +-
 .../U2Core/src/selection/FolderSelection.cpp       |    2 +-
 .../U2Core/src/selection/FolderSelection.h         |    2 +-
 .../U2Core/src/selection/GObjectSelection.cpp      |    2 +-
 .../U2Core/src/selection/GObjectSelection.h        |    2 +-
 .../U2Core/src/selection/LRegionsSelection.cpp     |    5 +-
 .../U2Core/src/selection/LRegionsSelection.h       |    2 +-
 .../U2Core/src/selection/SelectionModel.cpp        |    2 +-
 src/corelibs/U2Core/src/selection/SelectionModel.h |    5 +-
 .../U2Core/src/selection/SelectionTypes.cpp        |    2 +-
 src/corelibs/U2Core/src/selection/SelectionTypes.h |    2 +-
 .../U2Core/src/selection/SelectionUtils.cpp        |    2 +-
 src/corelibs/U2Core/src/selection/SelectionUtils.h |    4 +-
 src/corelibs/U2Core/src/selection/TextSelection.h  |    2 +-
 .../U2Core/src/tasks/AbstractProjectFilterTask.cpp |    2 +-
 .../U2Core/src/tasks/AbstractProjectFilterTask.h   |    2 +-
 src/corelibs/U2Core/src/tasks/AddDocumentTask.cpp  |    2 +-
 src/corelibs/U2Core/src/tasks/AddDocumentTask.h    |    4 +-
 .../U2Core/src/tasks/AddObjectsToDocumentTask.cpp  |    2 +-
 .../U2Core/src/tasks/AddObjectsToDocumentTask.h    |    2 +-
 .../src/tasks/AddSequencesToAlignmentTask.cpp      |   20 +-
 .../U2Core/src/tasks/AddSequencesToAlignmentTask.h |   14 +-
 .../U2Core/src/tasks/BackgroundTaskRunner.h        |    4 +-
 .../U2Core/src/tasks/CleanupFileStorageTask.cpp    |    2 +-
 .../U2Core/src/tasks/CleanupFileStorageTask.h      |    2 +-
 src/corelibs/U2Core/src/tasks/CloneObjectTask.cpp  |    4 +-
 src/corelibs/U2Core/src/tasks/CloneObjectTask.h    |    4 +-
 .../U2Core/src/tasks/CmdlineInOutTaskRunner.cpp    |    2 +-
 .../U2Core/src/tasks/CmdlineInOutTaskRunner.h      |    2 +-
 .../U2Core/src/tasks/CmdlineTaskRunner.cpp         |    9 +-
 src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h  |    5 +-
 .../U2Core/src/tasks/ConnectSharedDatabaseTask.cpp |    2 +-
 .../U2Core/src/tasks/ConnectSharedDatabaseTask.h   |    2 +-
 .../U2Core/src/tasks/ConsoleShutdownTask.cpp       |    2 +-
 .../U2Core/src/tasks/ConsoleShutdownTask.h         |    4 +-
 src/corelibs/U2Core/src/tasks/CopyDataTask.cpp     |    4 +-
 src/corelibs/U2Core/src/tasks/CopyDataTask.h       |    2 +-
 src/corelibs/U2Core/src/tasks/CopyDocumentTask.cpp |    8 +-
 src/corelibs/U2Core/src/tasks/CopyDocumentTask.h   |    2 +-
 src/corelibs/U2Core/src/tasks/CopyFileTask.cpp     |   54 +
 src/corelibs/U2Core/src/tasks/CopyFileTask.h       |   46 +
 .../U2Core/src/tasks/CreateAnnotationTask.cpp      |    2 +-
 .../U2Core/src/tasks/CreateAnnotationTask.h        |    2 +-
 .../U2Core/src/tasks/DeleteObjectsTask.cpp         |    2 +-
 src/corelibs/U2Core/src/tasks/DeleteObjectsTask.h  |    2 +-
 .../U2Core/src/tasks/DocumentProviderTask.cpp      |    4 +-
 .../U2Core/src/tasks/DocumentProviderTask.h        |    2 +-
 .../U2Core/src/tasks/ExternalToolRunTask.cpp       |   16 +-
 .../U2Core/src/tasks/ExternalToolRunTask.h         |    6 +-
 .../src/tasks/ExtractAnnotatedRegionTask.cpp       |    2 +-
 .../U2Core/src/tasks/ExtractAnnotatedRegionTask.h  |    2 +-
 src/corelibs/U2Core/src/tasks/FailTask.h           |    2 +-
 src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp |   44 +-
 src/corelibs/U2Core/src/tasks/LoadDocumentTask.h   |   11 +-
 .../U2Core/src/tasks/LoadRemoteDocumentTask.cpp    |   18 +-
 .../U2Core/src/tasks/LoadRemoteDocumentTask.h      |   10 +-
 .../U2Core/src/tasks/ModifySequenceObjectTask.cpp  |   10 +-
 .../U2Core/src/tasks/ModifySequenceObjectTask.h    |    2 +-
 src/corelibs/U2Core/src/tasks/MultiTask.cpp        |    2 +-
 src/corelibs/U2Core/src/tasks/MultiTask.h          |    2 +-
 .../U2Core/src/tasks/RemoveAnnotationsTask.cpp     |    2 +-
 .../U2Core/src/tasks/RemoveAnnotationsTask.h       |    2 +-
 .../U2Core/src/tasks/RemoveDocumentTask.cpp        |    2 +-
 src/corelibs/U2Core/src/tasks/RemoveDocumentTask.h |    4 +-
 .../U2Core/src/tasks/ReverseSequenceTask.cpp       |    2 +-
 .../U2Core/src/tasks/ReverseSequenceTask.h         |    2 +-
 .../U2Core/src/tasks/SaveDocumentStreamingTask.cpp |    2 +-
 .../U2Core/src/tasks/SaveDocumentStreamingTask.h   |    2 +-
 src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp |    2 +-
 src/corelibs/U2Core/src/tasks/SaveDocumentTask.h   |   23 +-
 src/corelibs/U2Core/src/tasks/ScriptTask.cpp       |    4 +-
 src/corelibs/U2Core/src/tasks/ScriptTask.h         |    6 +-
 .../U2Core/src/tasks/SequenceDbiWalkerTask.cpp     |    2 +-
 .../U2Core/src/tasks/SequenceDbiWalkerTask.h       |    4 +-
 .../U2Core/src/tasks/SequenceWalkerTask.cpp        |    2 +-
 src/corelibs/U2Core/src/tasks/SequenceWalkerTask.h |    2 +-
 src/corelibs/U2Core/src/tasks/TLSTask.cpp          |    2 +-
 src/corelibs/U2Core/src/tasks/TLSTask.h            |    4 +-
 src/corelibs/U2Core/src/tasks/TaskSignalMapper.cpp |    2 +-
 src/corelibs/U2Core/src/tasks/TaskSignalMapper.h   |    4 +-
 src/corelibs/U2Core/src/tasks/TaskStarter.cpp      |    2 +-
 src/corelibs/U2Core/src/tasks/TaskStarter.h        |    2 +-
 src/corelibs/U2Core/src/tasks/TmpDirChecker.cpp    |    8 +-
 src/corelibs/U2Core/src/tasks/TmpDirChecker.h      |    4 +-
 .../tasks/shared_db/ImportDirToDatabaseTask.cpp    |   14 +-
 .../src/tasks/shared_db/ImportDirToDatabaseTask.h  |    5 +-
 .../shared_db/ImportDocumentToDatabaseTask.cpp     |    2 +-
 .../tasks/shared_db/ImportDocumentToDatabaseTask.h |    4 +-
 .../tasks/shared_db/ImportFileToDatabaseTask.cpp   |    4 +-
 .../src/tasks/shared_db/ImportFileToDatabaseTask.h |    2 +-
 .../tasks/shared_db/ImportObjectToDatabaseTask.cpp |    4 +-
 .../tasks/shared_db/ImportObjectToDatabaseTask.h   |    4 +-
 .../src/tasks/shared_db/ImportToDatabaseTask.cpp   |    4 +-
 .../src/tasks/shared_db/ImportToDatabaseTask.h     |    2 +-
 .../U2Core/src/util/AnnotationCreationPattern.cpp  |    2 +-
 .../U2Core/src/util/AnnotationCreationPattern.h    |    2 +-
 src/corelibs/U2Core/src/util/AssemblyImporter.cpp  |    2 +-
 src/corelibs/U2Core/src/util/AssemblyImporter.h    |    2 +-
 src/corelibs/U2Core/src/util/ChromatogramUtils.cpp |  343 ++
 src/corelibs/U2Core/src/util/ChromatogramUtils.h   |   60 +
 .../U2Core/src/util/DatatypeSerializeUtils.cpp     |   10 +-
 .../U2Core/src/util/DatatypeSerializeUtils.h       |    2 +-
 .../U2Core/src/util/DnaChromatogramUtils.cpp       |   57 +
 .../U2Core/src/util/DnaChromatogramUtils.h         |   39 +
 .../U2Core/src/util/FileAndDirectoryUtils.cpp      |    6 +-
 .../U2Core/src/util/FileAndDirectoryUtils.h        |    2 +-
 src/corelibs/U2Core/src/util/FileStorageUtils.cpp  |    2 +-
 src/corelibs/U2Core/src/util/FileStorageUtils.h    |    2 +-
 src/corelibs/U2Core/src/util/FilesIterator.cpp     |    2 +-
 src/corelibs/U2Core/src/util/FilesIterator.h       |    4 +-
 src/corelibs/U2Core/src/util/FormatUtils.cpp       |    2 +-
 src/corelibs/U2Core/src/util/FormatUtils.h         |    4 +-
 src/corelibs/U2Core/src/util/GAutoDeleteList.cpp   |    2 +-
 src/corelibs/U2Core/src/util/GAutoDeleteList.h     |    4 +-
 src/corelibs/U2Core/src/util/GUrlUtils.cpp         |   75 +-
 src/corelibs/U2Core/src/util/GUrlUtils.h           |   27 +-
 src/corelibs/U2Core/src/util/GenbankFeatures.cpp   |    8 +-
 src/corelibs/U2Core/src/util/GenbankFeatures.h     |   10 +-
 src/corelibs/U2Core/src/util/IOAdapterUtils.cpp    |    2 +-
 src/corelibs/U2Core/src/util/IOAdapterUtils.h      |    2 +-
 .../U2Core/src/util/ImportToDatabaseOptions.cpp    |    4 +-
 .../U2Core/src/util/ImportToDatabaseOptions.h      |    2 +-
 .../U2Core/src/util/MAlignmentExporter.cpp         |  187 -
 src/corelibs/U2Core/src/util/MAlignmentExporter.h  |   64 -
 .../U2Core/src/util/MAlignmentImporter.cpp         |  245 -
 src/corelibs/U2Core/src/util/MAlignmentImporter.h  |   58 -
 src/corelibs/U2Core/src/util/MAlignmentWalker.cpp  |  151 -
 src/corelibs/U2Core/src/util/MAlignmentWalker.h    |   48 -
 src/corelibs/U2Core/src/util/MSAUtils.cpp          |  207 +-
 src/corelibs/U2Core/src/util/MSAUtils.h            |   44 +-
 src/corelibs/U2Core/src/util/MaIterator.cpp        |  154 +
 src/corelibs/U2Core/src/util/MaIterator.h          |   74 +
 .../U2Core/src/util/MaModificationInfo.cpp         |   48 +
 src/corelibs/U2Core/src/util/MaModificationInfo.h  |   56 +
 src/corelibs/U2Core/src/util/McaDbiUtils.cpp       |  375 ++
 src/corelibs/U2Core/src/util/McaDbiUtils.h         |   52 +
 src/corelibs/U2Core/src/util/McaRowInnerData.cpp   |   38 +
 src/corelibs/U2Core/src/util/McaRowInnerData.h     |   56 +
 src/corelibs/U2Core/src/util/MsaDbiUtils.cpp       |  796 +--
 src/corelibs/U2Core/src/util/MsaDbiUtils.h         |  122 +-
 src/corelibs/U2Core/src/util/MsaRowUtils.cpp       |  550 +-
 src/corelibs/U2Core/src/util/MsaRowUtils.h         |   45 +-
 .../util/MultipleChromatogramAlignmentExporter.cpp |  196 +
 .../util/MultipleChromatogramAlignmentExporter.h   |   51 +
 .../util/MultipleChromatogramAlignmentImporter.cpp |  237 +
 .../util/MultipleChromatogramAlignmentImporter.h   |   51 +
 .../src/util/MultipleSequenceAlignmentExporter.cpp |  187 +
 .../src/util/MultipleSequenceAlignmentExporter.h   |   64 +
 .../src/util/MultipleSequenceAlignmentImporter.cpp |  245 +
 .../src/util/MultipleSequenceAlignmentImporter.h   |   58 +
 .../src/util/MultipleSequenceAlignmentWalker.cpp   |  153 +
 .../src/util/MultipleSequenceAlignmentWalker.h     |   48 +
 .../U2Core/src/util/PMatrixSerializeUtils.h        |    3 +-
 .../U2Core/src/util/QObjectScopedPointer.h         |    2 +-
 src/corelibs/U2Core/src/util/QVariantUtils.cpp     |    2 +-
 src/corelibs/U2Core/src/util/QVariantUtils.h       |    2 +-
 src/corelibs/U2Core/src/util/SequenceUtils.cpp     |    6 +-
 src/corelibs/U2Core/src/util/SequenceUtils.h       |    4 +-
 src/corelibs/U2Core/src/util/SignalBlocker.cpp     |   37 +
 src/corelibs/U2Core/src/util/SignalBlocker.h       |   41 +
 src/corelibs/U2Core/src/util/SnpeffDictionary.cpp  |    2 +-
 src/corelibs/U2Core/src/util/SnpeffDictionary.h    |    4 +-
 src/corelibs/U2Core/src/util/StrPackUtils.cpp      |  105 +
 src/corelibs/U2Core/src/util/StrPackUtils.h        |   75 +
 src/corelibs/U2Core/src/util/SyncHttp.cpp          |    6 +-
 src/corelibs/U2Core/src/util/SyncHttp.h            |   12 +-
 src/corelibs/U2Core/src/util/TaskWatchdog.cpp      |    2 +-
 src/corelibs/U2Core/src/util/TaskWatchdog.h        |    4 +-
 src/corelibs/U2Core/src/util/TextUtils.cpp         |    2 +-
 src/corelibs/U2Core/src/util/TextUtils.h           |   10 +-
 src/corelibs/U2Core/src/util/U1AnnotationUtils.cpp |    2 +-
 src/corelibs/U2Core/src/util/U1AnnotationUtils.h   |    2 +-
 src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp   |   30 +-
 src/corelibs/U2Core/src/util/U2AlphabetUtils.h     |   12 +-
 .../U2Core/src/util/U2AssemblyReadIterator.cpp     |    2 +-
 .../U2Core/src/util/U2AssemblyReadIterator.h       |    2 +-
 src/corelibs/U2Core/src/util/U2AssemblyUtils.cpp   |    4 +-
 src/corelibs/U2Core/src/util/U2AssemblyUtils.h     |    2 +-
 src/corelibs/U2Core/src/util/U2AttributeUtils.cpp  |   10 +-
 src/corelibs/U2Core/src/util/U2AttributeUtils.h    |    4 +-
 src/corelibs/U2Core/src/util/U2Bits.cpp            |    2 +-
 src/corelibs/U2Core/src/util/U2Bits.h              |    9 +-
 src/corelibs/U2Core/src/util/U2DbiUpgrader.cpp     |    2 +-
 src/corelibs/U2Core/src/util/U2DbiUpgrader.h       |    2 +-
 src/corelibs/U2Core/src/util/U2FeatureUtils.cpp    |    2 +-
 src/corelibs/U2Core/src/util/U2FeatureUtils.h      |    2 +-
 src/corelibs/U2Core/src/util/U2ObjectTypeUtils.cpp |   10 +-
 src/corelibs/U2Core/src/util/U2ObjectTypeUtils.h   |    2 +-
 src/corelibs/U2Core/src/util/U2OpStatusUtils.h     |    2 +-
 src/corelibs/U2Core/src/util/U2SequenceUtils.cpp   |   36 +-
 src/corelibs/U2Core/src/util/U2SequenceUtils.h     |    8 +-
 src/corelibs/U2Core/src/util/U2VariationUtils.cpp  |    2 +-
 src/corelibs/U2Core/src/util/U2VariationUtils.h    |    2 +-
 .../U2Core/src/util/VariationPropertiesUtils.h     |    6 +-
 src/corelibs/U2Core/transl/english.ts              |  390 +-
 src/corelibs/U2Core/transl/russian.ts              |  392 +-
 src/corelibs/U2Designer/U2Designer.pri             |    3 +-
 src/corelibs/U2Designer/html/Dashboard.css         |    2 +-
 src/corelibs/U2Designer/html/Dashboard.html        |    2 +-
 src/corelibs/U2Designer/html/EstimationReport.css  |    2 +-
 src/corelibs/U2Designer/html/EstimationReport.html |    2 +-
 src/corelibs/U2Designer/javascript/Common.js       |    2 +-
 src/corelibs/U2Designer/javascript/ContextMenu.js  |    2 +-
 .../U2Designer/javascript/ExternalToolsWidget.js   |    2 +-
 .../U2Designer/javascript/ParametersWidget.js      |    2 +-
 .../U2Designer/src/BreakpointHitCountDialog.cpp    |   16 +-
 .../U2Designer/src/BreakpointHitCountDialog.h      |    8 +-
 src/corelibs/U2Designer/src/DatasetWidget.cpp      |   25 +-
 src/corelibs/U2Designer/src/DatasetWidget.h        |    2 +-
 src/corelibs/U2Designer/src/DatasetsController.cpp |   15 +-
 src/corelibs/U2Designer/src/DatasetsController.h   |    2 +-
 src/corelibs/U2Designer/src/DatasetsListWidget.cpp |    2 +-
 src/corelibs/U2Designer/src/DatasetsListWidget.h   |    2 +-
 src/corelibs/U2Designer/src/DbFolderItem.cpp       |    2 +-
 src/corelibs/U2Designer/src/DbFolderItem.h         |    2 +-
 src/corelibs/U2Designer/src/DbObjectItem.cpp       |    2 +-
 src/corelibs/U2Designer/src/DbObjectItem.h         |    2 +-
 src/corelibs/U2Designer/src/DelegateEditors.cpp    |   22 +-
 src/corelibs/U2Designer/src/DelegateEditors.h      |   46 +-
 src/corelibs/U2Designer/src/DesignerUtils.cpp      |    2 +-
 src/corelibs/U2Designer/src/DesignerUtils.h        |    2 +-
 src/corelibs/U2Designer/src/DirectoryItem.cpp      |    2 +-
 src/corelibs/U2Designer/src/DirectoryItem.h        |    2 +-
 .../U2Designer/src/EditBreakpointLabelsDialog.cpp  |   14 +-
 .../U2Designer/src/EditBreakpointLabelsDialog.h    |    7 +-
 .../U2Designer/src/EditMarkerGroupDialog.cpp       |   15 +-
 .../U2Designer/src/EditMarkerGroupDialog.h         |    2 +-
 src/corelibs/U2Designer/src/EstimationReporter.cpp |   13 +-
 src/corelibs/U2Designer/src/EstimationReporter.h   |   10 +-
 src/corelibs/U2Designer/src/FileItem.cpp           |    2 +-
 src/corelibs/U2Designer/src/FileItem.h             |    2 +-
 src/corelibs/U2Designer/src/GrouperEditor.cpp      |    2 +-
 src/corelibs/U2Designer/src/GrouperEditor.h        |    2 +-
 .../U2Designer/src/GrouperEditorWidget.cpp         |   12 +-
 src/corelibs/U2Designer/src/GrouperEditorWidget.h  |    2 +-
 src/corelibs/U2Designer/src/MarkerEditor.cpp       |    4 +-
 src/corelibs/U2Designer/src/MarkerEditor.h         |    2 +-
 src/corelibs/U2Designer/src/MarkerEditorWidget.cpp |   12 +-
 src/corelibs/U2Designer/src/MarkerEditorWidget.h   |    2 +-
 .../U2Designer/src/NewBreakpointDialog.cpp         |    6 +-
 src/corelibs/U2Designer/src/NewBreakpointDialog.h  |    4 +-
 .../U2Designer/src/NewGrouperSlotDialog.cpp        |   12 +-
 src/corelibs/U2Designer/src/NewGrouperSlotDialog.h |    2 +-
 src/corelibs/U2Designer/src/OutputFileDialog.cpp   |    9 +-
 src/corelibs/U2Designer/src/OutputFileDialog.h     |    2 +-
 src/corelibs/U2Designer/src/PropertyWidget.cpp     |    7 +-
 src/corelibs/U2Designer/src/PropertyWidget.h       |   16 +-
 src/corelibs/U2Designer/src/QDScheduler.cpp        |    2 +-
 src/corelibs/U2Designer/src/QDScheduler.h          |    2 +-
 src/corelibs/U2Designer/src/UrlItem.cpp            |    2 +-
 src/corelibs/U2Designer/src/UrlItem.h              |    2 +-
 src/corelibs/U2Designer/src/WorkflowGUIUtils.cpp   |   16 +-
 src/corelibs/U2Designer/src/WorkflowGUIUtils.h     |    2 +-
 .../U2Designer/src/dashboard/Dashboard.cpp         |   34 +-
 src/corelibs/U2Designer/src/dashboard/Dashboard.h  |   10 +-
 .../src/dashboard/ExternalToolsWidget.cpp          |    5 +-
 .../U2Designer/src/dashboard/ExternalToolsWidget.h |    4 +-
 .../U2Designer/src/dashboard/OutputFilesWidget.cpp |   22 +-
 .../U2Designer/src/dashboard/OutputFilesWidget.h   |    4 +-
 .../U2Designer/src/dashboard/ParametersWidget.cpp  |    6 +-
 .../U2Designer/src/dashboard/ParametersWidget.h    |    4 +-
 .../U2Designer/src/dashboard/ProblemsWidget.cpp    |    6 +-
 .../U2Designer/src/dashboard/ProblemsWidget.h      |    4 +-
 .../U2Designer/src/dashboard/ResourcesWidget.cpp   |    7 +-
 .../U2Designer/src/dashboard/ResourcesWidget.h     |    4 +-
 .../U2Designer/src/dashboard/StatisticsWidget.cpp  |   11 +-
 .../U2Designer/src/dashboard/StatisticsWidget.h    |    4 +-
 .../U2Designer/src/dashboard/TableWidget.cpp       |   13 +-
 .../U2Designer/src/dashboard/TableWidget.h         |   13 +-
 .../src/support/OutputDirectoryWidget.cpp          |   31 +-
 .../U2Designer/src/support/OutputDirectoryWidget.h |   11 +-
 .../U2Designer/src/support/URLLineEdit.cpp         |   13 +-
 src/corelibs/U2Designer/src/support/URLLineEdit.h  |   10 +-
 .../src/wizard/BowtieWidgetController.cpp          |   11 +-
 .../U2Designer/src/wizard/BowtieWidgetController.h |    2 +-
 .../src/wizard/ElementSelectorController.cpp       |    2 +-
 .../src/wizard/ElementSelectorController.h         |    2 +-
 .../src/wizard/PairedDatasetsController.cpp        |    5 +-
 .../src/wizard/PairedDatasetsController.h          |    2 +-
 .../src/wizard/PropertyWizardController.cpp        |    2 +-
 .../src/wizard/PropertyWizardController.h          |    2 +-
 .../U2Designer/src/wizard/RadioController.cpp      |    2 +-
 .../U2Designer/src/wizard/RadioController.h        |    2 +-
 .../U2Designer/src/wizard/SelectorActors.cpp       |    2 +-
 .../U2Designer/src/wizard/SelectorActors.h         |    2 +-
 .../U2Designer/src/wizard/SettingsController.cpp   |   15 +-
 .../U2Designer/src/wizard/SettingsController.h     |    2 +-
 .../src/wizard/TophatSamplesWidgetController.cpp   |   29 +-
 .../src/wizard/TophatSamplesWidgetController.h     |    2 +-
 .../src/wizard/UrlAndDatasetWizardController.cpp   |    8 +-
 .../src/wizard/UrlAndDatasetWizardController.h     |    2 +-
 .../U2Designer/src/wizard/WDWizardPage.cpp         |    5 +-
 src/corelibs/U2Designer/src/wizard/WDWizardPage.h  |    2 +-
 .../U2Designer/src/wizard/WidgetController.cpp     |    2 +-
 .../U2Designer/src/wizard/WidgetController.h       |    2 +-
 .../U2Designer/src/wizard/WizardController.cpp     |    2 +-
 .../U2Designer/src/wizard/WizardController.h       |    2 +-
 .../U2Designer/src/wizard/WizardPageController.cpp |    2 +-
 .../U2Designer/src/wizard/WizardPageController.h   |    2 +-
 src/corelibs/U2Designer/transl/english.ts          |  338 +-
 src/corelibs/U2Designer/transl/russian.ts          |  340 +-
 src/corelibs/U2Formats/U2Formats.pri               |   11 +-
 src/corelibs/U2Formats/U2Formats.pro               |    4 +
 src/corelibs/U2Formats/src/ABIFormat.cpp           |    6 +-
 src/corelibs/U2Formats/src/ABIFormat.h             |    2 +-
 src/corelibs/U2Formats/src/ASNFormat.cpp           |    8 +-
 src/corelibs/U2Formats/src/ASNFormat.h             |    6 +-
 .../U2Formats/src/AbstractVariationFormat.cpp      |    8 +-
 .../U2Formats/src/AbstractVariationFormat.h        |    2 +-
 src/corelibs/U2Formats/src/BAMUtils.cpp            |    6 +-
 src/corelibs/U2Formats/src/BAMUtils.h              |    2 +-
 src/corelibs/U2Formats/src/BedFormat.cpp           |    6 +-
 src/corelibs/U2Formats/src/BedFormat.h             |    2 +-
 src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp   |   75 +-
 src/corelibs/U2Formats/src/ClustalWAlnFormat.h     |    2 +-
 src/corelibs/U2Formats/src/ColumnDataParser.cpp    |    2 +-
 src/corelibs/U2Formats/src/ColumnDataParser.h      |    2 +-
 src/corelibs/U2Formats/src/DNAQualityIOUtils.cpp   |    2 +-
 src/corelibs/U2Formats/src/DNAQualityIOUtils.h     |    2 +-
 src/corelibs/U2Formats/src/Database.cpp            |    4 +-
 src/corelibs/U2Formats/src/Database.h              |    2 +-
 .../U2Formats/src/DatabaseConnectionFormat.cpp     |    6 +-
 .../U2Formats/src/DatabaseConnectionFormat.h       |    2 +-
 src/corelibs/U2Formats/src/DifferentialFormat.cpp  |    2 +-
 src/corelibs/U2Formats/src/DifferentialFormat.h    |    2 +-
 src/corelibs/U2Formats/src/DocumentFormatUtils.cpp |   22 +-
 src/corelibs/U2Formats/src/DocumentFormatUtils.h   |    6 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.cpp  |    4 +-
 .../U2Formats/src/EMBLGenbankAbstractDocument.h    |    4 +-
 src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp |    2 +-
 src/corelibs/U2Formats/src/EMBLPlainTextFormat.h   |    2 +-
 src/corelibs/U2Formats/src/FastaFormat.cpp         |   14 +-
 src/corelibs/U2Formats/src/FastaFormat.h           |    2 +-
 src/corelibs/U2Formats/src/FastqFormat.cpp         |    6 +-
 src/corelibs/U2Formats/src/FastqFormat.h           |    4 +-
 src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp  |    4 +-
 src/corelibs/U2Formats/src/FpkmTrackingFormat.h    |    2 +-
 src/corelibs/U2Formats/src/GFFFormat.cpp           |    8 +-
 src/corelibs/U2Formats/src/GFFFormat.h             |    2 +-
 src/corelibs/U2Formats/src/GTFFormat.cpp           |    4 +-
 src/corelibs/U2Formats/src/GTFFormat.h             |    2 +-
 .../U2Formats/src/GenbankLocationParser.cpp        |    2 +-
 src/corelibs/U2Formats/src/GenbankLocationParser.h |    4 +-
 .../U2Formats/src/GenbankPlainTextFormat.cpp       |    4 +-
 .../U2Formats/src/GenbankPlainTextFormat.h         |    2 +-
 src/corelibs/U2Formats/src/MSFFormat.cpp           |  132 +-
 src/corelibs/U2Formats/src/MSFFormat.h             |    2 +-
 src/corelibs/U2Formats/src/MegaFormat.cpp          |   78 +-
 src/corelibs/U2Formats/src/MegaFormat.h            |    6 +-
 src/corelibs/U2Formats/src/NEXUSFormat.cpp         |   64 +-
 src/corelibs/U2Formats/src/NEXUSFormat.h           |    2 +-
 src/corelibs/U2Formats/src/NEXUSParser.h           |    4 +-
 src/corelibs/U2Formats/src/NewickFormat.cpp        |    2 +-
 src/corelibs/U2Formats/src/NewickFormat.h          |    2 +-
 src/corelibs/U2Formats/src/PDBFormat.cpp           |    7 +-
 src/corelibs/U2Formats/src/PDBFormat.h             |    4 +-
 src/corelibs/U2Formats/src/PDWFormat.cpp           |    4 +-
 src/corelibs/U2Formats/src/PDWFormat.h             |    2 +-
 src/corelibs/U2Formats/src/PhylipFormat.cpp        |  118 +-
 src/corelibs/U2Formats/src/PhylipFormat.h          |   14 +-
 src/corelibs/U2Formats/src/PlainTextFormat.cpp     |    2 +-
 src/corelibs/U2Formats/src/PlainTextFormat.h       |    2 +-
 .../U2Formats/src/RawDNASequenceFormat.cpp         |    6 +-
 src/corelibs/U2Formats/src/RawDNASequenceFormat.h  |    2 +-
 src/corelibs/U2Formats/src/SAMFormat.cpp           |   52 +-
 src/corelibs/U2Formats/src/SAMFormat.h             |    2 +-
 src/corelibs/U2Formats/src/SCFFormat.cpp           |   14 +-
 src/corelibs/U2Formats/src/SCFFormat.h             |    2 +-
 src/corelibs/U2Formats/src/SNPDatabaseUtils.cpp    |    4 +-
 src/corelibs/U2Formats/src/SNPDatabaseUtils.h      |    2 +-
 .../U2Formats/src/SimpleSNPVariationFormat.cpp     |    2 +-
 .../U2Formats/src/SimpleSNPVariationFormat.h       |    2 +-
 .../U2Formats/src/StdResidueDictionary.cpp         |    8 +-
 src/corelibs/U2Formats/src/StdResidueDictionary.h  |    8 +-
 src/corelibs/U2Formats/src/StockholmFormat.cpp     |  110 +-
 src/corelibs/U2Formats/src/StockholmFormat.h       |    4 +-
 .../U2Formats/src/StreamSequenceReader.cpp         |    2 +-
 src/corelibs/U2Formats/src/StreamSequenceReader.h  |    6 +-
 .../U2Formats/src/StreamSequenceWriter.cpp         |    2 +-
 src/corelibs/U2Formats/src/StreamSequenceWriter.h  |    6 +-
 .../U2Formats/src/SwissProtPlainTextFormat.cpp     |    4 +-
 .../U2Formats/src/SwissProtPlainTextFormat.h       |    2 +-
 src/corelibs/U2Formats/src/VCF4VariationFormat.cpp |    2 +-
 src/corelibs/U2Formats/src/VCF4VariationFormat.h   |    2 +-
 .../U2Formats/src/VectorNtiSequenceFormat.cpp      |   14 +-
 .../U2Formats/src/VectorNtiSequenceFormat.h        |    8 +-
 src/corelibs/U2Formats/src/ace/AceFormat.cpp       |   46 +-
 src/corelibs/U2Formats/src/ace/AceFormat.h         |    4 +-
 src/corelibs/U2Formats/src/ace/AceImportUtils.cpp  |   16 +-
 src/corelibs/U2Formats/src/ace/AceImportUtils.h    |    2 +-
 src/corelibs/U2Formats/src/ace/AceImporter.cpp     |   46 +-
 src/corelibs/U2Formats/src/ace/AceImporter.h       |    7 +-
 .../ace/CloneAssemblyWithReferenceToDbiTask.cpp    |    4 +-
 .../src/ace/CloneAssemblyWithReferenceToDbiTask.h  |    2 +-
 .../U2Formats/src/ace/ConvertAceToSqliteTask.cpp   |    2 +-
 .../U2Formats/src/ace/ConvertAceToSqliteTask.h     |    2 +-
 src/corelibs/U2Formats/src/apr/AprFormat.cpp       |  225 +
 src/corelibs/U2Formats/src/apr/AprFormat.h         |   57 +
 src/corelibs/U2Formats/src/apr/AprImporter.cpp     |  142 +
 src/corelibs/U2Formats/src/apr/AprImporter.h       |   69 +
 .../U2Formats/src/mysql_dbi/MysqlAssemblyDbi.cpp   |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlAssemblyDbi.h     |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlAttributeDbi.cpp  |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlAttributeDbi.h    |    2 +-
 .../src/mysql_dbi/MysqlBlobInputStream.cpp         |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlBlobInputStream.h |    2 +-
 .../src/mysql_dbi/MysqlBlobOutputStream.cpp        |    2 +-
 .../src/mysql_dbi/MysqlBlobOutputStream.h          |    2 +-
 .../mysql_dbi/MysqlCrossDatabaseReferenceDbi.cpp   |    2 +-
 .../src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.h |    2 +-
 src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.cpp  |    8 +-
 src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.h    |    4 +-
 .../U2Formats/src/mysql_dbi/MysqlFeatureDbi.cpp    |    4 +-
 .../U2Formats/src/mysql_dbi/MysqlFeatureDbi.h      |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlModDbi.cpp        |    4 +-
 src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.h |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp        |  102 +-
 src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h |   19 +-
 .../U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp     |   33 +-
 .../U2Formats/src/mysql_dbi/MysqlObjectDbi.h       |    5 +-
 .../src/mysql_dbi/MysqlObjectRelationsDbi.cpp      |    2 +-
 .../src/mysql_dbi/MysqlObjectRelationsDbi.h        |    2 +-
 .../U2Formats/src/mysql_dbi/MysqlSequenceDbi.cpp   |   14 +-
 .../U2Formats/src/mysql_dbi/MysqlSequenceDbi.h     |    4 +-
 .../U2Formats/src/mysql_dbi/MysqlUdrDbi.cpp        |   41 +-
 src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.h |    7 +-
 .../U2Formats/src/mysql_dbi/MysqlVariantDbi.cpp    |    6 +-
 .../U2Formats/src/mysql_dbi/MysqlVariantDbi.h      |    2 +-
 .../src/mysql_dbi/util/MysqlAssemblyAdapter.cpp    |    2 +-
 .../src/mysql_dbi/util/MysqlAssemblyAdapter.h      |    2 +-
 .../src/mysql_dbi/util/MysqlAssemblyUtils.cpp      |    3 +-
 .../src/mysql_dbi/util/MysqlAssemblyUtils.h        |    2 +-
 .../U2Formats/src/mysql_dbi/util/MysqlDbiUtils.cpp |    4 +-
 .../U2Formats/src/mysql_dbi/util/MysqlDbiUtils.h   |    4 +-
 .../U2Formats/src/mysql_dbi/util/MysqlHelpers.cpp  |   16 +-
 .../U2Formats/src/mysql_dbi/util/MysqlHelpers.h    |    7 +-
 .../src/mysql_dbi/util/MysqlModificationAction.cpp |   37 +-
 .../src/mysql_dbi/util/MysqlModificationAction.h   |   15 +-
 .../util/MysqlMultiTableAssemblyAdapter.cpp        |    2 +-
 .../util/MysqlMultiTableAssemblyAdapter.h          |    4 +-
 .../util/MysqlSingleTableAssemblyAdapter.cpp       |    2 +-
 .../util/MysqlSingleTableAssemblyAdapter.h         |    2 +-
 .../src/mysql_dbi/util/upgraders/MysqlUpgrader.cpp |    2 +-
 .../src/mysql_dbi/util/upgraders/MysqlUpgrader.h   |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_14_To_1_15.cpp   |    4 +-
 .../upgraders/MysqlUpgraderFrom_1_14_To_1_15.h     |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_15_To_1_16.cpp   |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_15_To_1_16.h     |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_16_To_1_17.cpp   |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_16_To_1_17.h     |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_16_To_1_24.cpp   |    8 +-
 .../upgraders/MysqlUpgraderFrom_1_16_To_1_24.h     |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_24_To_1_25.cpp   |    2 +-
 .../upgraders/MysqlUpgraderFrom_1_24_To_1_25.h     |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.cpp |   19 +-
 .../U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.h   |   12 +-
 .../src/sqlite_dbi/SQLiteAttributeDbi.cpp          |   44 +-
 .../U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.h  |    6 +-
 .../src/sqlite_dbi/SQLiteBlobInputStream.cpp       |    2 +-
 .../src/sqlite_dbi/SQLiteBlobInputStream.h         |    2 +-
 .../src/sqlite_dbi/SQLiteBlobOutputStream.cpp      |    4 +-
 .../src/sqlite_dbi/SQLiteBlobOutputStream.h        |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteDbi.cpp         |   28 +-
 src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.h  |   16 +-
 .../U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp  |   94 +-
 .../U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.h    |    4 +-
 .../U2Formats/src/sqlite_dbi/SQLiteModDbi.cpp      |   56 +-
 .../U2Formats/src/sqlite_dbi/SQLiteModDbi.h        |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp      |  197 +-
 .../U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h        |   25 +-
 .../U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp   |  173 +-
 .../U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h     |   20 +-
 .../src/sqlite_dbi/SQLiteObjectRelationsDbi.cpp    |   18 +-
 .../src/sqlite_dbi/SQLiteObjectRelationsDbi.h      |    2 +-
 .../U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.cpp |   26 +-
 .../U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.h   |    6 +-
 .../U2Formats/src/sqlite_dbi/SQLiteUdrDbi.cpp      |   46 +-
 .../U2Formats/src/sqlite_dbi/SQLiteUdrDbi.h        |    7 +-
 .../U2Formats/src/sqlite_dbi/SQLiteVariantDbi.cpp  |   58 +-
 .../U2Formats/src/sqlite_dbi/SQLiteVariantDbi.h    |    2 +-
 .../assembly/MultiTableAssemblyAdapter.cpp         |   28 +-
 .../assembly/MultiTableAssemblyAdapter.h           |    4 +-
 .../sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp   |   42 +-
 .../src/sqlite_dbi/assembly/RTreeAssemblyAdapter.h |    4 +-
 .../assembly/SingleTableAssemblyAdapter.cpp        |   46 +-
 .../assembly/SingleTableAssemblyAdapter.h          |    4 +-
 .../src/sqlite_dbi/util/SqliteUpgrader.cpp         |    2 +-
 .../U2Formats/src/sqlite_dbi/util/SqliteUpgrader.h |    2 +-
 .../util/SqliteUpgraderFrom_0_To_1_13.cpp          |   18 +-
 .../sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.h |    2 +-
 .../util/SqliteUpgraderFrom_1_13_To_1_25.cpp       |    2 +-
 .../util/SqliteUpgraderFrom_1_13_To_1_25.h         |    2 +-
 src/corelibs/U2Formats/src/tasks/BgzipTask.cpp     |    8 +-
 src/corelibs/U2Formats/src/tasks/BgzipTask.h       |    2 +-
 .../src/tasks/ConvertAssemblyToSamTask.cpp         |   10 +-
 .../U2Formats/src/tasks/ConvertAssemblyToSamTask.h |    2 +-
 .../U2Formats/src/tasks/ConvertFileTask.cpp        |   33 +-
 src/corelibs/U2Formats/src/tasks/ConvertFileTask.h |   10 +-
 .../ConvertSnpeffVariationsToAnnotationsTask.cpp   |    5 +-
 .../ConvertSnpeffVariationsToAnnotationsTask.h     |    5 +-
 src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp  |    2 +-
 src/corelibs/U2Formats/src/tasks/MergeBamTask.h    |    2 +-
 .../U2Formats/src/tasks/MysqlUpgradeTask.cpp       |    2 +-
 .../U2Formats/src/tasks/MysqlUpgradeTask.h         |    2 +-
 src/corelibs/U2Formats/src/util/AssemblyAdapter.h  |    2 +-
 .../U2Formats/src/util/AssemblyPackAlgorithm.cpp   |    2 +-
 .../U2Formats/src/util/AssemblyPackAlgorithm.h     |    2 +-
 .../U2Formats/src/util/PairedFastqComparator.cpp   |    3 +-
 .../U2Formats/src/util/PairedFastqComparator.h     |    3 +-
 .../U2Formats/src/util/SnpeffInfoParser.cpp        |    2 +-
 src/corelibs/U2Formats/src/util/SnpeffInfoParser.h |    6 +-
 src/corelibs/U2Formats/transl/english.ts           |  444 +-
 src/corelibs/U2Formats/transl/russian.ts           |  856 +--
 src/corelibs/U2Gui/U2Gui.pri                       |    3 +-
 src/corelibs/U2Gui/U2Gui.pro                       |   21 +-
 src/corelibs/U2Gui/U2Gui.qrc                       |    4 +
 src/corelibs/U2Gui/images/amb_backward.png         |  Bin 0 -> 1147 bytes
 src/corelibs/U2Gui/images/amb_forward.png          |  Bin 0 -> 1143 bytes
 src/corelibs/U2Gui/images/mismatch-backward.png    |  Bin 0 -> 788 bytes
 src/corelibs/U2Gui/images/mismatch-forward.png     |  Bin 0 -> 764 bytes
 src/corelibs/U2Gui/src/AppSettingsGUI.h            |    9 +-
 src/corelibs/U2Gui/src/MainWindow.cpp              |    2 +-
 src/corelibs/U2Gui/src/MainWindow.h                |   10 +-
 src/corelibs/U2Gui/src/Notification.cpp            |   39 +-
 src/corelibs/U2Gui/src/Notification.h              |   60 +-
 src/corelibs/U2Gui/src/NotificationWidget.cpp      |    2 +-
 src/corelibs/U2Gui/src/NotificationWidget.h        |   28 +-
 src/corelibs/U2Gui/src/NotificationsTypes.h        |    2 +-
 src/corelibs/U2Gui/src/ObjectViewModel.cpp         |    2 +-
 src/corelibs/U2Gui/src/ObjectViewModel.h           |   17 +-
 src/corelibs/U2Gui/src/ObjectViewTasks.cpp         |    4 +-
 src/corelibs/U2Gui/src/ObjectViewTasks.h           |    4 +-
 src/corelibs/U2Gui/src/OpenViewTask.cpp            |   48 +-
 src/corelibs/U2Gui/src/OpenViewTask.h              |   13 +-
 src/corelibs/U2Gui/src/PasteController.cpp         |    4 +-
 src/corelibs/U2Gui/src/PasteController.h           |    2 +-
 src/corelibs/U2Gui/src/PluginViewer.h              |    2 +-
 src/corelibs/U2Gui/src/ProjectParsing.cpp          |   24 +-
 src/corelibs/U2Gui/src/ProjectParsing.h            |    2 +-
 src/corelibs/U2Gui/src/ProjectView.h               |    2 +-
 src/corelibs/U2Gui/src/ToolsMenu.cpp               |   11 +-
 src/corelibs/U2Gui/src/ToolsMenu.h                 |    3 +-
 src/corelibs/U2Gui/src/U2SavableWidget.cpp         |    2 +-
 src/corelibs/U2Gui/src/U2SavableWidget.h           |    6 +-
 src/corelibs/U2Gui/src/U2WidgetStateStorage.cpp    |    2 +-
 src/corelibs/U2Gui/src/U2WidgetStateStorage.h      |    5 +-
 src/corelibs/U2Gui/src/UnloadDocumentTask.cpp      |    2 +-
 src/corelibs/U2Gui/src/UnloadDocumentTask.h        |    2 +-
 src/corelibs/U2Gui/src/WelcomePageAction.cpp       |    2 +-
 src/corelibs/U2Gui/src/WelcomePageAction.h         |    2 +-
 .../src/options_panel/GroupHeaderImageWidget.cpp   |    2 +-
 .../src/options_panel/GroupHeaderImageWidget.h     |    9 +-
 .../U2Gui/src/options_panel/GroupOptionsWidget.cpp |    4 +-
 .../U2Gui/src/options_panel/GroupOptionsWidget.h   |    3 +-
 .../U2Gui/src/options_panel/OPWidgetFactory.cpp    |    2 +-
 .../U2Gui/src/options_panel/OPWidgetFactory.h      |   12 +-
 .../src/options_panel/OPWidgetFactoryRegistry.cpp  |    2 +-
 .../src/options_panel/OPWidgetFactoryRegistry.h    |    4 +-
 .../U2Gui/src/options_panel/OptionsPanel.cpp       |    5 +-
 .../U2Gui/src/options_panel/OptionsPanel.h         |    4 +-
 .../U2Gui/src/options_panel/OptionsPanelGroup.cpp  |    2 +-
 .../U2Gui/src/options_panel/OptionsPanelGroup.h    |    2 +-
 .../U2Gui/src/options_panel/OptionsPanelWidget.cpp |    2 +-
 .../U2Gui/src/options_panel/OptionsPanelWidget.h   |    2 +-
 .../src/options_panel/ShowHideSubgroupWidget.cpp   |    2 +-
 .../src/options_panel/ShowHideSubgroupWidget.h     |    2 +-
 .../src/util/AddNewDocumentDialogController.h      |    2 +-
 .../U2Gui/src/util/AddNewDocumentDialogImpl.cpp    |    4 +-
 .../U2Gui/src/util/AddNewDocumentDialogImpl.h      |    2 +-
 .../U2Gui/src/util/AuthenticationDialog.cpp        |   11 +-
 src/corelibs/U2Gui/src/util/AuthenticationDialog.h |    8 +-
 .../U2Gui/src/util/AuthenticationWidget.cpp        |    2 +-
 src/corelibs/U2Gui/src/util/AuthenticationWidget.h |    9 +-
 .../src/util/BreakpointConditionEditDialog.cpp     |    4 +-
 .../U2Gui/src/util/BreakpointConditionEditDialog.h |    9 +-
 .../U2Gui/src/util/CreateAnnotationDialog.cpp      |    4 +-
 .../U2Gui/src/util/CreateAnnotationDialog.h        |    2 +-
 .../U2Gui/src/util/CreateAnnotationFullWidget.cpp  |    9 +-
 .../U2Gui/src/util/CreateAnnotationFullWidget.h    |    2 +-
 .../U2Gui/src/util/CreateAnnotationFullWidget.ui   |  199 +-
 .../src/util/CreateAnnotationNormalWidget.cpp      |    4 +-
 .../U2Gui/src/util/CreateAnnotationNormalWidget.h  |    2 +-
 .../U2Gui/src/util/CreateAnnotationNormalWidget.ui |   62 +-
 .../util/CreateAnnotationOptionsPanelWidget.cpp    |    2 +-
 .../src/util/CreateAnnotationOptionsPanelWidget.h  |    2 +-
 .../src/util/CreateAnnotationOptionsPanelWidget.ui |   62 +-
 .../U2Gui/src/util/CreateAnnotationWidget.cpp      |    2 +-
 .../U2Gui/src/util/CreateAnnotationWidget.h        |    2 +-
 .../src/util/CreateAnnotationWidgetController.cpp  |   39 +-
 .../src/util/CreateAnnotationWidgetController.h    |    3 +-
 .../CreateDocumentFromTextDialogController.cpp     |    4 +-
 .../util/CreateDocumentFromTextDialogController.h  |    2 +-
 .../util/CreateObjectRelationDialogController.cpp  |   10 +-
 .../util/CreateObjectRelationDialogController.h    |    8 +-
 .../util/CreateSequenceFromTextAndOpenViewTask.cpp |    2 +-
 .../util/CreateSequenceFromTextAndOpenViewTask.h   |    3 +-
 .../U2Gui/src/util/CredentialsAskerGui.cpp         |    2 +-
 src/corelibs/U2Gui/src/util/CredentialsAskerGui.h  |    2 +-
 src/corelibs/U2Gui/src/util/DialogUtils.cpp        |    4 +-
 src/corelibs/U2Gui/src/util/DialogUtils.h          |    2 +-
 .../src/util/DocumentFormatComboboxController.cpp  |    2 +-
 .../src/util/DocumentFormatComboboxController.h    |    8 +-
 .../U2Gui/src/util/DownloadRemoteFileDialog.cpp    |   41 +-
 .../U2Gui/src/util/DownloadRemoteFileDialog.h      |   13 +-
 .../U2Gui/src/util/DownloadRemoteFileDialog.ui     |   12 +-
 .../U2Gui/src/util/EditQualifierDialog.cpp         |   13 +-
 src/corelibs/U2Gui/src/util/EditQualifierDialog.h  |    8 +-
 .../src/util/EditSequenceDialogController.cpp      |    6 +-
 .../U2Gui/src/util/EditSequenceDialogController.h  |    2 +-
 .../U2Gui/src/util/ExportAnnotations2CSVTask.cpp   |    4 +-
 .../U2Gui/src/util/ExportAnnotations2CSVTask.h     |    2 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.cpp     |   32 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.h       |    7 +-
 .../U2Gui/src/util/ExportAnnotationsDialog.ui      |   12 +-
 .../src/util/ExportDocumentDialogController.cpp    |    8 +-
 .../src/util/ExportDocumentDialogController.h      |    2 +-
 src/corelibs/U2Gui/src/util/ExportImageDialog.cpp  |   51 +-
 src/corelibs/U2Gui/src/util/ExportImageDialog.h    |    8 +-
 src/corelibs/U2Gui/src/util/ExportObjectUtils.cpp  |   42 +-
 src/corelibs/U2Gui/src/util/ExportObjectUtils.h    |    7 +-
 .../U2Gui/src/util/GObjectComboBoxController.cpp   |   42 +-
 .../U2Gui/src/util/GObjectComboBoxController.h     |    8 +-
 src/corelibs/U2Gui/src/util/GScrollBar.cpp         |    2 +-
 src/corelibs/U2Gui/src/util/GScrollBar.h           |    9 +-
 src/corelibs/U2Gui/src/util/GUIUtils.cpp           |   49 +-
 src/corelibs/U2Gui/src/util/GUIUtils.h             |   28 +-
 .../U2Gui/src/util/GenbankLocationValidator.cpp    |   12 +-
 .../U2Gui/src/util/GenbankLocationValidator.h      |    4 +-
 src/corelibs/U2Gui/src/util/GlassView.cpp          |    8 +-
 src/corelibs/U2Gui/src/util/GlassView.h            |    8 +-
 src/corelibs/U2Gui/src/util/GraphUtils.cpp         |   96 +-
 src/corelibs/U2Gui/src/util/GraphUtils.h           |   59 +-
 .../U2Gui/src/util/GroupedComboBoxDelegate.cpp     |   75 +
 .../U2Gui/src/util/GroupedComboBoxDelegate.h       |   48 +
 src/corelibs/U2Gui/src/util/HelpButton.cpp         |   12 +-
 src/corelibs/U2Gui/src/util/HelpButton.h           |   18 +-
 .../src/util/ImportDialogs/AceImportDialog.cpp     |  142 -
 .../U2Gui/src/util/ImportDialogs/AceImportDialog.h |   50 -
 .../src/util/ImportDialogs/AceImportDialog.ui      |  132 -
 .../U2Gui/src/util/ImportDialogsFactories.cpp      |   47 -
 .../U2Gui/src/util/ImportDialogsFactories.h        |   45 -
 .../src/util/ImportSequenceFromRawDataTask.cpp     |    4 +-
 .../U2Gui/src/util/ImportSequenceFromRawDataTask.h |    2 +-
 .../src/util/ImportWidgets/AceImportWidget.cpp     |   67 +
 .../U2Gui/src/util/ImportWidgets/AceImportWidget.h |   49 +
 .../src/util/ImportWidgets/AceImportWidget.ui      |   92 +
 .../src/util/ImportWidgets/AprImportWidget.cpp     |   87 +
 .../U2Gui/src/util/ImportWidgets/AprImportWidget.h |   49 +
 .../src/util/ImportWidgets/AprImportWidget.ui      |  102 +
 .../U2Gui/src/util/ImportWidgets/ImportWidget.cpp  |   43 +
 .../U2Gui/src/util/ImportWidgets/ImportWidget.h    |   47 +
 .../U2Gui/src/util/ImportWidgetsFactories.cpp      |   58 +
 .../U2Gui/src/util/ImportWidgetsFactories.h        |   55 +
 .../U2Gui/src/util/InputWidgetsControllers.cpp     |   29 +-
 .../U2Gui/src/util/InputWidgetsControllers.h       |    6 +-
 .../U2Gui/src/util/LabelClickTransmitter.cpp       |    2 +-
 .../U2Gui/src/util/LabelClickTransmitter.h         |    2 +-
 src/corelibs/U2Gui/src/util/LastUsedDirHelper.cpp  |    4 +-
 src/corelibs/U2Gui/src/util/LastUsedDirHelper.h    |    2 +-
 src/corelibs/U2Gui/src/util/LocalToolbar.cpp       |    2 +-
 src/corelibs/U2Gui/src/util/LocalToolbar.h         |    2 +-
 src/corelibs/U2Gui/src/util/MultiClickMenu.cpp     |    2 +-
 src/corelibs/U2Gui/src/util/MultiClickMenu.h       |    2 +-
 .../U2Gui/src/util/ObjectViewTreeController.cpp    |   10 +-
 .../U2Gui/src/util/ObjectViewTreeController.h      |   11 +-
 src/corelibs/U2Gui/src/util/OrderedToolbar.cpp     |    2 +-
 src/corelibs/U2Gui/src/util/OrderedToolbar.h       |    2 +-
 src/corelibs/U2Gui/src/util/PositionSelector.cpp   |   21 +-
 src/corelibs/U2Gui/src/util/PositionSelector.h     |   13 +-
 .../src/util/ProjectDocumentComboBoxController.cpp |    2 +-
 .../src/util/ProjectDocumentComboBoxController.h   |   10 +-
 .../src/util/ProjectTreeItemSelectorDialog.cpp     |    2 +-
 .../U2Gui/src/util/ProjectTreeItemSelectorDialog.h |    2 +-
 .../src/util/ProjectTreeItemSelectorDialogImpl.h   |    2 +-
 src/corelibs/U2Gui/src/util/RangeSelector.cpp      |   40 +-
 src/corelibs/U2Gui/src/util/RangeSelector.h        |   25 +-
 src/corelibs/U2Gui/src/util/RegionSelector.cpp     |    8 +-
 src/corelibs/U2Gui/src/util/RegionSelector.h       |    2 +-
 .../U2Gui/src/util/RegionSelectorController.cpp    |    2 +-
 .../U2Gui/src/util/RegionSelectorController.h      |    2 +-
 .../src/util/RegionSelectorWithExcludedRegion.cpp  |    2 +-
 .../src/util/RegionSelectorWithExcludedRegion.h    |    2 +-
 .../RemovePartFromSequenceDialogController.cpp     |    4 +-
 .../util/RemovePartFromSequenceDialogController.h  |    2 +-
 .../U2Gui/src/util/SaveDocumentController.cpp      |    2 +-
 .../U2Gui/src/util/SaveDocumentController.h        |    4 +-
 src/corelibs/U2Gui/src/util/ScaleBar.cpp           |  154 +-
 src/corelibs/U2Gui/src/util/ScaleBar.h             |   48 +-
 .../U2Gui/src/util/ScriptEditorDelegate.cpp        |   15 +-
 src/corelibs/U2Gui/src/util/ScriptEditorDelegate.h |    9 +-
 src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp |   19 +-
 src/corelibs/U2Gui/src/util/ScriptEditorDialog.h   |    8 +-
 src/corelibs/U2Gui/src/util/ScriptEditorWidget.cpp |   18 +-
 src/corelibs/U2Gui/src/util/ScriptEditorWidget.h   |    9 +-
 src/corelibs/U2Gui/src/util/ScriptHighlighter.cpp  |    2 +-
 src/corelibs/U2Gui/src/util/ScriptHighlighter.h    |    4 +-
 src/corelibs/U2Gui/src/util/SearchBox.cpp          |  123 +
 src/corelibs/U2Gui/src/util/SearchBox.h            |   64 +
 .../util/SearchGenbankSequenceDialogController.cpp |    9 +-
 .../util/SearchGenbankSequenceDialogController.h   |   22 +-
 .../U2Gui/src/util/SeqPasterWidgetController.cpp   |    2 +-
 .../U2Gui/src/util/SeqPasterWidgetController.h     |    2 +-
 src/corelibs/U2Gui/src/util/SequenceTextEdit.cpp   |    2 +-
 src/corelibs/U2Gui/src/util/SequenceTextEdit.h     |    2 +-
 src/corelibs/U2Gui/src/util/SuggestCompleter.cpp   |   19 +-
 src/corelibs/U2Gui/src/util/SuggestCompleter.h     |    4 +-
 src/corelibs/U2Gui/src/util/TreeWidgetUtils.cpp    |    2 +-
 src/corelibs/U2Gui/src/util/TreeWidgetUtils.h      |    8 +-
 src/corelibs/U2Gui/src/util/U2FileDialog.cpp       |   12 +-
 src/corelibs/U2Gui/src/util/U2FileDialog.h         |    9 +-
 .../U2Gui/src/util/U2LongLongValidator.cpp         |    2 +-
 src/corelibs/U2Gui/src/util/U2LongLongValidator.h  |    4 +-
 .../U2Gui/src/util/WidgetWithLocalToolbar.cpp      |    2 +-
 .../U2Gui/src/util/WidgetWithLocalToolbar.h        |    2 +-
 .../U2Gui/src/util/imageExport/ImageExportTask.cpp |   15 +-
 .../U2Gui/src/util/imageExport/ImageExportTask.h   |    4 +-
 .../imageExport/WidgetScreenshotExportTask.cpp     |   20 +-
 .../util/imageExport/WidgetScreenshotExportTask.h  |    2 +-
 src/corelibs/U2Gui/src/util/logview/LogView.cpp    |   23 +-
 src/corelibs/U2Gui/src/util/logview/LogView.h      |   23 +-
 .../U2Gui/src/util/project/ConnectionHelper.cpp    |    2 +-
 .../U2Gui/src/util/project/ConnectionHelper.h      |    2 +-
 .../U2Gui/src/util/project/DocumentFolders.cpp     |    2 +-
 .../U2Gui/src/util/project/DocumentFolders.h       |    4 +-
 .../U2Gui/src/util/project/EditableTreeView.cpp    |    2 +-
 .../U2Gui/src/util/project/EditableTreeView.h      |    2 +-
 .../src/util/project/FilteredProjectGroup.cpp      |    2 +-
 .../U2Gui/src/util/project/FilteredProjectGroup.h  |    2 +-
 .../util/project/FilteredProjectItemDelegate.cpp   |   36 +-
 .../src/util/project/FilteredProjectItemDelegate.h |    2 +-
 .../U2Gui/src/util/project/FolderNameDialog.cpp    |   10 +-
 .../U2Gui/src/util/project/FolderNameDialog.h      |    9 +-
 .../src/util/project/LoadDocumentTaskProvider.h    |    2 +-
 .../U2Gui/src/util/project/ProjectFilterNames.cpp  |    2 +-
 .../U2Gui/src/util/project/ProjectFilterNames.h    |    2 +-
 .../src/util/project/ProjectFilterProxyModel.cpp   |    2 +-
 .../src/util/project/ProjectFilterProxyModel.h     |    2 +-
 .../util/project/ProjectFilteringController.cpp    |    2 +-
 .../src/util/project/ProjectFilteringController.h  |    2 +-
 .../src/util/project/ProjectTreeController.cpp     |   12 +-
 .../U2Gui/src/util/project/ProjectTreeController.h |    5 +-
 .../U2Gui/src/util/project/ProjectUpdater.cpp      |   11 +-
 .../U2Gui/src/util/project/ProjectUpdater.h        |    6 +-
 .../U2Gui/src/util/project/ProjectUtils.cpp        |    2 +-
 src/corelibs/U2Gui/src/util/project/ProjectUtils.h |    2 +-
 .../src/util/project/ProjectViewFilterModel.cpp    |    2 +-
 .../src/util/project/ProjectViewFilterModel.h      |    2 +-
 .../U2Gui/src/util/project/ProjectViewModel.cpp    |    2 +-
 .../U2Gui/src/util/project/ProjectViewModel.h      |    4 +-
 .../project/filter_tasks/FeatureKeyFilterTask.cpp  |    2 +-
 .../project/filter_tasks/FeatureKeyFilterTask.h    |    3 +-
 .../project/filter_tasks/MsaContentFilterTask.cpp  |   26 +-
 .../project/filter_tasks/MsaContentFilterTask.h    |    8 +-
 .../project/filter_tasks/MsaSeqNameFilterTask.cpp  |    9 +-
 .../project/filter_tasks/MsaSeqNameFilterTask.h    |    2 +-
 .../project/filter_tasks/ObjectNameFilterTask.cpp  |    2 +-
 .../project/filter_tasks/ObjectNameFilterTask.h    |    2 +-
 .../project/filter_tasks/SequenceAccFilterTask.cpp |    2 +-
 .../project/filter_tasks/SequenceAccFilterTask.h   |    2 +-
 .../project/filter_tasks/TextContentFilterTask.cpp |    2 +-
 .../project/filter_tasks/TextContentFilterTask.h   |    2 +-
 .../util/shared_db/CommonImportOptionsDialog.cpp   |    4 +-
 .../src/util/shared_db/CommonImportOptionsDialog.h |    9 +-
 .../src/util/shared_db/EditConnectionDialog.cpp    |   11 +-
 .../src/util/shared_db/EditConnectionDialog.h      |    9 +-
 .../src/util/shared_db/ImportOptionsWidget.cpp     |    2 +-
 .../U2Gui/src/util/shared_db/ImportOptionsWidget.h |    9 +-
 .../src/util/shared_db/ImportOptionsWidget.ui      |  167 +-
 .../src/util/shared_db/ImportToDatabaseDialog.cpp  |    8 +-
 .../src/util/shared_db/ImportToDatabaseDialog.h    |   13 +-
 .../src/util/shared_db/ItemToImportEditDialog.cpp  |    4 +-
 .../src/util/shared_db/ItemToImportEditDialog.h    |    9 +-
 .../src/util/shared_db/SharedConnectionsDialog.cpp |    6 +-
 .../src/util/shared_db/SharedConnectionsDialog.h   |   16 +-
 src/corelibs/U2Gui/transl/english.ts               |  847 +--
 src/corelibs/U2Gui/transl/russian.ts               |  843 +--
 src/corelibs/U2Lang/U2Lang.pri                     |    3 +-
 .../U2Lang/src/library/BaseActorCategories.cpp     |    2 +-
 .../U2Lang/src/library/BaseActorCategories.h       |    2 +-
 src/corelibs/U2Lang/src/library/BaseAttributes.cpp |    4 +-
 src/corelibs/U2Lang/src/library/BaseAttributes.h   |    2 +-
 .../U2Lang/src/library/BaseDatasetWorker.cpp       |    2 +-
 .../U2Lang/src/library/BaseDatasetWorker.h         |    2 +-
 .../U2Lang/src/library/BaseOneOneWorker.cpp        |    2 +-
 src/corelibs/U2Lang/src/library/BaseOneOneWorker.h |    2 +-
 src/corelibs/U2Lang/src/library/BasePorts.cpp      |    2 +-
 src/corelibs/U2Lang/src/library/BasePorts.h        |    4 +-
 src/corelibs/U2Lang/src/library/BaseSlots.cpp      |    2 +-
 src/corelibs/U2Lang/src/library/BaseSlots.h        |    2 +-
 .../U2Lang/src/library/BaseThroughWorker.cpp       |    2 +-
 .../U2Lang/src/library/BaseThroughWorker.h         |    2 +-
 src/corelibs/U2Lang/src/library/BaseTypes.cpp      |    2 +-
 src/corelibs/U2Lang/src/library/BaseTypes.h        |    2 +-
 .../U2Lang/src/library/LastReadyScheduler.cpp      |   10 +-
 .../U2Lang/src/library/LastReadyScheduler.h        |    2 +-
 src/corelibs/U2Lang/src/library/LocalDomain.cpp    |   21 +-
 src/corelibs/U2Lang/src/library/LocalDomain.h      |    4 +-
 .../U2Lang/src/library/script/ActorContext.cpp     |    2 +-
 .../U2Lang/src/library/script/ActorContext.h       |    4 +-
 .../src/library/script/DbiClassPrototype.cpp       |    2 +-
 .../U2Lang/src/library/script/DbiClassPrototype.h  |   10 +-
 .../src/library/script/ScriptEngineUtils.cpp       |    2 +-
 .../U2Lang/src/library/script/ScriptEngineUtils.h  |    4 +-
 .../U2Lang/src/library/script/ScriptLibrary.cpp    |   96 +-
 .../U2Lang/src/library/script/ScriptLibrary.h      |    6 +-
 .../src/library/script/SequencePrototype.cpp       |    2 +-
 .../U2Lang/src/library/script/SequencePrototype.h  |    4 +-
 .../U2Lang/src/model/ActorPrototypeRegistry.cpp    |    2 +-
 .../U2Lang/src/model/ActorPrototypeRegistry.h      |    2 +-
 src/corelibs/U2Lang/src/model/Aliasing.cpp         |    2 +-
 src/corelibs/U2Lang/src/model/Aliasing.h           |    2 +-
 src/corelibs/U2Lang/src/model/Attribute.cpp        |    4 +-
 src/corelibs/U2Lang/src/model/Attribute.h          |    8 +-
 .../U2Lang/src/model/AttributeRelation.cpp         |    2 +-
 src/corelibs/U2Lang/src/model/AttributeRelation.h  |    4 +-
 src/corelibs/U2Lang/src/model/Configuration.cpp    |    9 +-
 src/corelibs/U2Lang/src/model/Configuration.h      |    5 +-
 .../U2Lang/src/model/ConfigurationEditor.cpp       |   11 +-
 .../U2Lang/src/model/ConfigurationEditor.h         |    8 +-
 .../U2Lang/src/model/ConfigurationValidator.h      |    2 +-
 src/corelibs/U2Lang/src/model/Datatype.cpp         |    2 +-
 src/corelibs/U2Lang/src/model/Datatype.h           |    4 +-
 src/corelibs/U2Lang/src/model/DbiDataHandler.cpp   |    6 +-
 src/corelibs/U2Lang/src/model/DbiDataHandler.h     |    2 +-
 src/corelibs/U2Lang/src/model/DbiDataStorage.cpp   |   39 +-
 src/corelibs/U2Lang/src/model/DbiDataStorage.h     |    9 +-
 src/corelibs/U2Lang/src/model/Descriptor.cpp       |    2 +-
 src/corelibs/U2Lang/src/model/Descriptor.h         |   10 +-
 src/corelibs/U2Lang/src/model/ExternalToolCfg.cpp  |    2 +-
 src/corelibs/U2Lang/src/model/ExternalToolCfg.h    |   10 +-
 src/corelibs/U2Lang/src/model/GrouperOutSlot.cpp   |    4 +-
 src/corelibs/U2Lang/src/model/GrouperOutSlot.h     |    2 +-
 .../U2Lang/src/model/GrouperSlotAttribute.cpp      |    2 +-
 .../U2Lang/src/model/GrouperSlotAttribute.h        |    2 +-
 .../U2Lang/src/model/IncludedProtoFactory.cpp      |    2 +-
 .../U2Lang/src/model/IncludedProtoFactory.h        |    2 +-
 src/corelibs/U2Lang/src/model/IntegralBus.cpp      |   14 +-
 src/corelibs/U2Lang/src/model/IntegralBus.h        |    8 +-
 src/corelibs/U2Lang/src/model/IntegralBusModel.cpp |   52 +-
 src/corelibs/U2Lang/src/model/IntegralBusModel.h   |   12 +-
 src/corelibs/U2Lang/src/model/IntegralBusType.cpp  |    4 +-
 src/corelibs/U2Lang/src/model/IntegralBusType.h    |    4 +-
 src/corelibs/U2Lang/src/model/Marker.cpp           |    2 +-
 src/corelibs/U2Lang/src/model/Marker.h             |    2 +-
 src/corelibs/U2Lang/src/model/MarkerAttribute.cpp  |    2 +-
 src/corelibs/U2Lang/src/model/MarkerAttribute.h    |    2 +-
 src/corelibs/U2Lang/src/model/MessageMetadata.cpp  |    2 +-
 src/corelibs/U2Lang/src/model/MessageMetadata.h    |    2 +-
 src/corelibs/U2Lang/src/model/Peer.h               |    2 +-
 src/corelibs/U2Lang/src/model/Port.cpp             |    2 +-
 src/corelibs/U2Lang/src/model/Port.h               |    2 +-
 src/corelibs/U2Lang/src/model/PortRelation.h       |    2 +-
 src/corelibs/U2Lang/src/model/QDConstraint.cpp     |    2 +-
 src/corelibs/U2Lang/src/model/QDConstraint.h       |    2 +-
 src/corelibs/U2Lang/src/model/QDScheme.cpp         |   13 +-
 src/corelibs/U2Lang/src/model/QDScheme.h           |    8 +-
 .../U2Lang/src/model/QueryDesignerRegistry.cpp     |    2 +-
 .../U2Lang/src/model/QueryDesignerRegistry.h       |    2 +-
 .../U2Lang/src/model/ReadDbObjActorPrototype.cpp   |    2 +-
 .../U2Lang/src/model/ReadDbObjActorPrototype.h     |    2 +-
 src/corelibs/U2Lang/src/model/RunFileSystem.cpp    |    6 +-
 src/corelibs/U2Lang/src/model/RunFileSystem.h      |    8 +-
 src/corelibs/U2Lang/src/model/Schema.cpp           |   10 +-
 src/corelibs/U2Lang/src/model/Schema.h             |    7 +-
 .../U2Lang/src/model/SchemaActorsRegistry.cpp      |    2 +-
 .../U2Lang/src/model/SchemaActorsRegistry.h        |    2 +-
 src/corelibs/U2Lang/src/model/SchemaConfig.h       |    2 +-
 src/corelibs/U2Lang/src/model/WorkflowContext.cpp  |   27 +-
 src/corelibs/U2Lang/src/model/WorkflowContext.h    |    4 +-
 src/corelibs/U2Lang/src/model/WorkflowEnv.cpp      |    4 +-
 src/corelibs/U2Lang/src/model/WorkflowEnv.h        |    2 +-
 src/corelibs/U2Lang/src/model/WorkflowManager.h    |   22 +-
 .../U2Lang/src/model/WorkflowScriptEngine.cpp      |    2 +-
 .../U2Lang/src/model/WorkflowScriptEngine.h        |    5 +-
 .../U2Lang/src/model/WorkflowTransport.cpp         |    2 +-
 src/corelibs/U2Lang/src/model/WorkflowTransport.h  |    6 +-
 src/corelibs/U2Lang/src/model/actor/Actor.cpp      |    8 +-
 src/corelibs/U2Lang/src/model/actor/Actor.h        |    2 +-
 .../src/model/actor/ActorConfigurationEditor.cpp   |    2 +-
 .../src/model/actor/ActorConfigurationEditor.h     |    2 +-
 .../U2Lang/src/model/actor/ActorDocument.h         |    4 +-
 .../U2Lang/src/model/actor/ActorPrototype.cpp      |    4 +-
 .../U2Lang/src/model/actor/ActorPrototype.h        |    8 +-
 .../src/model/actor/ActorScriptValidator.cpp       |    2 +-
 .../U2Lang/src/model/actor/ActorScriptValidator.h  |    2 +-
 .../U2Lang/src/model/actor/ActorValidator.cpp      |    5 +-
 .../U2Lang/src/model/actor/ActorValidator.h        |    4 +-
 .../U2Lang/src/model/url_attribute/Dataset.cpp     |    2 +-
 .../U2Lang/src/model/url_attribute/Dataset.h       |    2 +-
 .../src/model/url_attribute/DbFolderScanner.cpp    |    2 +-
 .../src/model/url_attribute/DbFolderScanner.h      |    2 +-
 .../src/model/url_attribute/SharedDbUrlUtils.cpp   |    2 +-
 .../src/model/url_attribute/SharedDbUrlUtils.h     |    2 +-
 .../src/model/url_attribute/URLAttribute.cpp       |    2 +-
 .../U2Lang/src/model/url_attribute/URLAttribute.h  |    2 +-
 .../src/model/url_attribute/URLContainer.cpp       |    4 +-
 .../U2Lang/src/model/url_attribute/URLContainer.h  |    4 +-
 .../src/model/wizard/ElementSelectorWidget.cpp     |    2 +-
 .../src/model/wizard/ElementSelectorWidget.h       |    2 +-
 src/corelibs/U2Lang/src/model/wizard/IdMapping.cpp |    2 +-
 src/corelibs/U2Lang/src/model/wizard/IdMapping.h   |    2 +-
 .../U2Lang/src/model/wizard/PortMapping.cpp        |    2 +-
 src/corelibs/U2Lang/src/model/wizard/PortMapping.h |    2 +-
 .../U2Lang/src/model/wizard/SelectorValue.cpp      |    2 +-
 .../U2Lang/src/model/wizard/SelectorValue.h        |    2 +-
 .../U2Lang/src/model/wizard/SlotMapping.cpp        |    2 +-
 src/corelibs/U2Lang/src/model/wizard/SlotMapping.h |    2 +-
 src/corelibs/U2Lang/src/model/wizard/Variable.cpp  |    2 +-
 src/corelibs/U2Lang/src/model/wizard/Variable.h    |    5 +-
 src/corelibs/U2Lang/src/model/wizard/Wizard.cpp    |    2 +-
 src/corelibs/U2Lang/src/model/wizard/Wizard.h      |    2 +-
 .../U2Lang/src/model/wizard/WizardPage.cpp         |    2 +-
 src/corelibs/U2Lang/src/model/wizard/WizardPage.h  |    2 +-
 .../U2Lang/src/model/wizard/WizardWidget.cpp       |    2 +-
 .../U2Lang/src/model/wizard/WizardWidget.h         |    2 +-
 .../U2Lang/src/model/wizard/WizardWidgetVisitor.h  |    2 +-
 src/corelibs/U2Lang/src/run/WorkflowMonitor.cpp    |   33 +-
 src/corelibs/U2Lang/src/run/WorkflowMonitor.h      |   10 +-
 src/corelibs/U2Lang/src/support/AttributeInfo.cpp  |    2 +-
 src/corelibs/U2Lang/src/support/AttributeInfo.h    |    2 +-
 .../src/support/BaseBreakpointHitCounter.cpp       |    2 +-
 .../U2Lang/src/support/BaseBreakpointHitCounter.h  |    2 +-
 src/corelibs/U2Lang/src/support/BaseNGSWorker.cpp  |   29 +-
 src/corelibs/U2Lang/src/support/BaseNGSWorker.h    |    2 +-
 .../src/support/BreakpointConditionChecker.cpp     |    4 +-
 .../src/support/BreakpointConditionChecker.h       |    4 +-
 .../src/support/BreakpointEqualHitCounter.cpp      |    2 +-
 .../U2Lang/src/support/BreakpointEqualHitCounter.h |    4 +-
 .../support/BreakpointGreaterOrEqualHitCounter.cpp |    2 +-
 .../support/BreakpointGreaterOrEqualHitCounter.h   |    2 +-
 .../src/support/BreakpointMultipleHitCounter.cpp   |    4 +-
 .../src/support/BreakpointMultipleHitCounter.h     |    4 +-
 .../U2Lang/src/support/CoreLibConstants.cpp        |    2 +-
 src/corelibs/U2Lang/src/support/CoreLibConstants.h |    4 +-
 src/corelibs/U2Lang/src/support/DatasetFetcher.cpp |    2 +-
 src/corelibs/U2Lang/src/support/DatasetFetcher.h   |    2 +-
 .../U2Lang/src/support/ElapsedTimeUpdater.cpp      |    8 +-
 .../U2Lang/src/support/ElapsedTimeUpdater.h        |    2 +-
 .../U2Lang/src/support/IntegralBusUtils.cpp        |    4 +-
 src/corelibs/U2Lang/src/support/IntegralBusUtils.h |    4 +-
 .../U2Lang/src/support/MapDatatypeEditor.cpp       |   50 +-
 .../U2Lang/src/support/MapDatatypeEditor.h         |    2 +-
 src/corelibs/U2Lang/src/support/MarkerUtils.cpp    |    4 +-
 src/corelibs/U2Lang/src/support/MarkerUtils.h      |    2 +-
 .../U2Lang/src/support/NoFailTaskWrapper.cpp       |    2 +-
 .../U2Lang/src/support/NoFailTaskWrapper.h         |    2 +-
 .../U2Lang/src/support/SchemaSerializer.cpp        |   15 +-
 src/corelibs/U2Lang/src/support/SchemaSerializer.h |    2 +-
 .../U2Lang/src/support/ScriptWorkerSerializer.cpp  |    4 +-
 .../U2Lang/src/support/ScriptWorkerSerializer.h    |    2 +-
 .../U2Lang/src/support/SimpleWorkflowTask.cpp      |   32 +-
 .../U2Lang/src/support/SimpleWorkflowTask.h        |   16 +-
 src/corelibs/U2Lang/src/support/SupportClass.cpp   |    2 +-
 src/corelibs/U2Lang/src/support/SupportClass.h     |    9 +-
 .../U2Lang/src/support/SupportStructures.cpp       |    2 +-
 .../U2Lang/src/support/SupportStructures.h         |    4 +-
 .../U2Lang/src/support/WorkflowBreakpoint.cpp      |    2 +-
 .../U2Lang/src/support/WorkflowBreakpoint.h        |    2 +-
 .../src/support/WorkflowBreakpointSharedInfo.cpp   |    2 +-
 .../src/support/WorkflowBreakpointSharedInfo.h     |    7 +-
 .../src/support/WorkflowDebugMessageParser.cpp     |    6 +-
 .../src/support/WorkflowDebugMessageParser.h       |    2 +-
 .../U2Lang/src/support/WorkflowDebugStatus.cpp     |    6 +-
 .../U2Lang/src/support/WorkflowDebugStatus.h       |    4 +-
 .../U2Lang/src/support/WorkflowEnvImpl.cpp         |    4 +-
 src/corelibs/U2Lang/src/support/WorkflowEnvImpl.h  |    2 +-
 .../U2Lang/src/support/WorkflowIOTasks.cpp         |    8 +-
 src/corelibs/U2Lang/src/support/WorkflowIOTasks.h  |    4 +-
 .../U2Lang/src/support/WorkflowInvestigationData.h |    8 +-
 .../U2Lang/src/support/WorkflowRunTask.cpp         |   32 +-
 src/corelibs/U2Lang/src/support/WorkflowRunTask.h  |    6 +-
 .../U2Lang/src/support/WorkflowSettings.cpp        |   20 +-
 src/corelibs/U2Lang/src/support/WorkflowSettings.h |    8 +-
 src/corelibs/U2Lang/src/support/WorkflowUtils.cpp  |   42 +-
 src/corelibs/U2Lang/src/support/WorkflowUtils.h    |   27 +-
 .../src/support/external_script/ScriptContext.cpp  |    2 +-
 .../src/support/external_script/ScriptContext.h    |    2 +-
 .../external_script/ScriptableScheduler.cpp        |    2 +-
 .../support/external_script/ScriptableScheduler.h  |    2 +-
 .../WorkflowRunSerializedSchemeTask.cpp            |    2 +-
 .../WorkflowRunSerializedSchemeTask.h              |    2 +-
 .../U2Lang/src/support/serialize/Constants.cpp     |    4 +-
 .../U2Lang/src/support/serialize/Constants.h       |    2 +-
 .../src/support/serialize/HRSchemaSerializer.cpp   |   30 +-
 .../src/support/serialize/HRSchemaSerializer.h     |   12 +-
 .../src/support/serialize/HRVisualSerializer.cpp   |    2 +-
 .../src/support/serialize/HRVisualSerializer.h     |    2 +-
 .../src/support/serialize/HRWizardSerializer.cpp   |   20 +-
 .../src/support/serialize/HRWizardSerializer.h     |    2 +-
 .../U2Lang/src/support/serialize/OldUWL.cpp        |    7 +-
 src/corelibs/U2Lang/src/support/serialize/OldUWL.h |    2 +-
 .../U2Lang/src/support/serialize/Tokenizer.cpp     |    6 +-
 .../U2Lang/src/support/serialize/Tokenizer.h       |   12 +-
 .../U2Lang/src/support/serialize/Utils.cpp         |    2 +-
 src/corelibs/U2Lang/src/support/serialize/Utils.h  |    2 +-
 .../U2Lang/src/tasks/ReadDocumentTaskFactory.cpp   |    2 +-
 .../U2Lang/src/tasks/ReadDocumentTaskFactory.h     |    2 +-
 .../U2Lang/src/tasks/SchemaEstimationTask.cpp      |    2 +-
 .../U2Lang/src/tasks/SchemaEstimationTask.h        |    2 +-
 .../U2Lang/src/tasks/WorkflowTasksRegistry.cpp     |    2 +-
 .../U2Lang/src/tasks/WorkflowTasksRegistry.h       |    2 +-
 src/corelibs/U2Lang/transl/english.ts              |  529 +-
 src/corelibs/U2Lang/transl/russian.ts              |  531 +-
 src/corelibs/U2Private/U2Private.pri               |    2 +-
 src/corelibs/U2Private/src/AppContextImpl.cpp      |    2 +-
 src/corelibs/U2Private/src/AppContextImpl.h        |    2 +-
 src/corelibs/U2Private/src/AppSettingsImpl.cpp     |    2 +-
 src/corelibs/U2Private/src/AppSettingsImpl.h       |    2 +-
 src/corelibs/U2Private/src/ConsoleLogDriver.cpp    |    2 +-
 src/corelibs/U2Private/src/ConsoleLogDriver.h      |    2 +-
 src/corelibs/U2Private/src/CredentialsAskerCli.cpp |    4 +-
 src/corelibs/U2Private/src/CredentialsAskerCli.h   |    2 +-
 .../U2Private/src/DocumentFormatRegistryImpl.cpp   |   14 +-
 .../U2Private/src/DocumentFormatRegistryImpl.h     |    2 +-
 .../U2Private/src/IOAdapterRegistryImpl.cpp        |    2 +-
 src/corelibs/U2Private/src/IOAdapterRegistryImpl.h |    2 +-
 src/corelibs/U2Private/src/LogSettings.cpp         |    4 +-
 src/corelibs/U2Private/src/LogSettings.h           |    4 +-
 src/corelibs/U2Private/src/PluginDescriptor.cpp    |    6 +-
 src/corelibs/U2Private/src/PluginDescriptor.h      |    6 +-
 src/corelibs/U2Private/src/PluginSupportImpl.cpp   |   27 +-
 src/corelibs/U2Private/src/PluginSupportImpl.h     |    8 +-
 src/corelibs/U2Private/src/ServiceRegistryImpl.cpp |    4 +-
 src/corelibs/U2Private/src/ServiceRegistryImpl.h   |    4 +-
 src/corelibs/U2Private/src/SettingsImpl.cpp        |    6 +-
 src/corelibs/U2Private/src/SettingsImpl.h          |    6 +-
 src/corelibs/U2Private/src/SleepPreventerMac.cpp   |    2 +-
 src/corelibs/U2Private/src/SleepPreventerMac.h     |    2 +-
 src/corelibs/U2Private/src/TaskSchedulerImpl.cpp   |    6 +-
 src/corelibs/U2Private/src/TaskSchedulerImpl.h     |   11 +-
 .../U2Private/src/crash_handler/CrashHandler.cpp   |    2 +-
 .../U2Private/src/crash_handler/CrashHandler.h     |    2 +-
 .../src/crash_handler/CrashHandlerArgsHelper.cpp   |    2 +-
 .../src/crash_handler/CrashHandlerArgsHelper.h     |    2 +-
 .../src/crash_handler/CrashHandlerPrivate.cpp      |    2 +-
 .../src/crash_handler/CrashHandlerPrivate.h        |    2 +-
 .../src/crash_handler/CrashHandlerPrivateMac.cpp   |    2 +-
 .../src/crash_handler/CrashHandlerPrivateMac.h     |    2 +-
 .../CrashHandlerPrivateUnixNotMac.cpp              |    2 +-
 .../crash_handler/CrashHandlerPrivateUnixNotMac.h  |    2 +-
 .../src/crash_handler/CrashHandlerPrivateWin.cpp   |    2 +-
 .../src/crash_handler/CrashHandlerPrivateWin.h     |    2 +-
 .../U2Private/src/crash_handler/CrashLogCache.cpp  |    2 +-
 .../U2Private/src/crash_handler/CrashLogCache.h    |    2 +-
 .../U2Private/src/crash_handler/StackWalker.cpp    |   14 +-
 .../U2Private/src/crash_handler/StackWalker.h      |   10 +-
 src/corelibs/U2Private/transl/english.ts           |   16 +-
 src/corelibs/U2Private/transl/russian.ts           |   16 +-
 src/corelibs/U2Script/U2Script.pri                 |    2 +-
 src/corelibs/U2Script/src/CommonDbi.cpp            |   10 +-
 src/corelibs/U2Script/src/CommonDbi.h              |    2 +-
 src/corelibs/U2Script/src/FormatDetection.cpp      |    4 +-
 src/corelibs/U2Script/src/FormatDetection.h        |    4 +-
 src/corelibs/U2Script/src/SchemeHandle.cpp         |    2 +-
 src/corelibs/U2Script/src/SchemeHandle.h           |   10 +-
 src/corelibs/U2Script/src/SchemeWrapper.cpp        |   10 +-
 src/corelibs/U2Script/src/SchemeWrapper.h          |    6 +-
 src/corelibs/U2Script/src/TextConversionUtils.cpp  |    2 +-
 src/corelibs/U2Script/src/TextConversionUtils.h    |    4 +-
 src/corelibs/U2Script/src/U2Script.cpp             |    4 +-
 src/corelibs/U2Script/src/U2Script.h               |    4 +-
 src/corelibs/U2Script/src/UgeneContextWrapper.cpp  |    4 +-
 src/corelibs/U2Script/src/UgeneContextWrapper.h    |    4 +-
 .../U2Script/src/WorkflowElementFacade.cpp         |    4 +-
 src/corelibs/U2Script/src/WorkflowElementFacade.h  |    4 +-
 src/corelibs/U2Script/src/globals.cpp              |    4 +-
 src/corelibs/U2Script/src/globals.h                |    2 +-
 src/corelibs/U2Script/src/js/ActorWrap.cpp         |    2 +-
 src/corelibs/U2Script/src/js/ActorWrap.h           |    2 +-
 src/corelibs/U2Script/src/js/DebugStatusWrap.cpp   |    2 +-
 src/corelibs/U2Script/src/js/DebugStatusWrap.h     |    2 +-
 src/corelibs/U2Script/src/js/JsContext.cpp         |    2 +-
 src/corelibs/U2Script/src/js/JsContext.h           |    2 +-
 src/corelibs/U2Script/src/js/JsScheduler.cpp       |    2 +-
 src/corelibs/U2Script/src/js/JsScheduler.h         |    2 +-
 src/corelibs/U2Script/src/js/NodeApiUtils.cpp      |    2 +-
 src/corelibs/U2Script/src/js/NodeApiUtils.h        |    2 +-
 src/corelibs/U2Script/src/python/u2py_internals.c  |    2 +-
 src/corelibs/U2Test/U2Test.pri                     |    3 +-
 src/corelibs/U2Test/src/GTest.cpp                  |   13 +-
 src/corelibs/U2Test/src/GTest.h                    |   11 +-
 .../U2Test/src/GTestFrameworkComponents.cpp        |    4 +-
 src/corelibs/U2Test/src/GTestFrameworkComponents.h |    2 +-
 src/corelibs/U2Test/src/TestRunnerTask.cpp         |    9 +-
 src/corelibs/U2Test/src/TestRunnerTask.h           |    6 +-
 .../U2Test/src/gui_tests/GUITestLauncher.cpp       |   13 +-
 .../U2Test/src/gui_tests/GUITestLauncher.h         |    4 +-
 .../U2Test/src/gui_tests/GUITestService.cpp        |   26 +-
 src/corelibs/U2Test/src/gui_tests/GUITestService.h |    2 +-
 .../U2Test/src/gui_tests/GUITestTeamcityLogger.cpp |    2 +-
 .../U2Test/src/gui_tests/GUITestTeamcityLogger.h   |    4 +-
 .../U2Test/src/gui_tests/GUITestThread.cpp         |   25 +-
 src/corelibs/U2Test/src/gui_tests/GUITestThread.h  |    4 +-
 .../U2Test/src/gui_tests/GUITestWindow.cpp         |   24 +-
 src/corelibs/U2Test/src/gui_tests/GUITestWindow.h  |   17 +-
 src/corelibs/U2Test/src/gui_tests/UGUITest.cpp     |   41 +-
 src/corelibs/U2Test/src/gui_tests/UGUITest.h       |   31 +-
 src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp |    2 -
 src/corelibs/U2Test/src/gui_tests/UGUITestBase.h   |    1 -
 src/corelibs/U2Test/src/xmltest/XMLTestFormat.cpp  |    4 +-
 src/corelibs/U2Test/src/xmltest/XMLTestFormat.h    |    4 +-
 src/corelibs/U2Test/src/xmltest/XMLTestUtils.cpp   |    9 +-
 src/corelibs/U2Test/src/xmltest/XMLTestUtils.h     |    2 +-
 src/corelibs/U2Test/transl/english.ts              |   36 +-
 src/corelibs/U2Test/transl/russian.ts              |   36 +-
 src/corelibs/U2View/U2View.pri                     |    4 +-
 src/corelibs/U2View/U2View.pro                     |  142 +-
 src/corelibs/U2View/src/LicenseDialog.cpp          |    4 +-
 src/corelibs/U2View/src/LicenseDialog.h            |    8 +-
 src/corelibs/U2View/src/UndoRedoFramework.cpp      |   35 +-
 src/corelibs/U2View/src/UndoRedoFramework.h        |   19 +-
 src/corelibs/U2View/src/WebWindow.cpp              |   11 +-
 src/corelibs/U2View/src/WebWindow.h                |    2 +-
 .../src/ov_assembly/AddReadsToDocumentTask.cpp     |    2 +-
 .../src/ov_assembly/AddReadsToDocumentTask.h       |    2 +-
 .../src/ov_assembly/AssemblyAnnotationsArea.cpp    |    2 +-
 .../src/ov_assembly/AssemblyAnnotationsArea.h      |    2 +-
 .../U2View/src/ov_assembly/AssemblyBrowser.cpp     |    6 +-
 .../U2View/src/ov_assembly/AssemblyBrowser.h       |    8 +-
 .../src/ov_assembly/AssemblyBrowserFactory.h       |    2 +-
 .../src/ov_assembly/AssemblyBrowserSettings.cpp    |    4 +-
 .../src/ov_assembly/AssemblyBrowserSettings.h      |    2 +-
 .../src/ov_assembly/AssemblyBrowserState.cpp       |    2 +-
 .../U2View/src/ov_assembly/AssemblyBrowserState.h  |    4 +-
 .../src/ov_assembly/AssemblyBrowserTasks.cpp       |    2 +-
 .../U2View/src/ov_assembly/AssemblyBrowserTasks.h  |    2 +-
 .../src/ov_assembly/AssemblyCellRenderer.cpp       |  121 +-
 .../U2View/src/ov_assembly/AssemblyCellRenderer.h  |   20 +-
 .../src/ov_assembly/AssemblyConsensusArea.cpp      |    2 +-
 .../U2View/src/ov_assembly/AssemblyConsensusArea.h |    2 +-
 .../src/ov_assembly/AssemblyConsensusTask.cpp      |    2 +-
 .../U2View/src/ov_assembly/AssemblyConsensusTask.h |    2 +-
 .../src/ov_assembly/AssemblyCoverageGraph.cpp      |   11 +-
 .../U2View/src/ov_assembly/AssemblyCoverageGraph.h |   10 +-
 .../U2View/src/ov_assembly/AssemblyInfoWidget.cpp  |    7 +-
 .../U2View/src/ov_assembly/AssemblyInfoWidget.h    |    3 +-
 .../U2View/src/ov_assembly/AssemblyModel.cpp       |   12 +-
 .../U2View/src/ov_assembly/AssemblyModel.h         |   10 +-
 .../src/ov_assembly/AssemblyNavigationWidget.cpp   |    7 +-
 .../src/ov_assembly/AssemblyNavigationWidget.h     |    3 +-
 .../U2View/src/ov_assembly/AssemblyReadsArea.cpp   |   15 +-
 .../U2View/src/ov_assembly/AssemblyReadsArea.h     |    2 +-
 .../src/ov_assembly/AssemblyReadsAreaHint.cpp      |   20 +-
 .../U2View/src/ov_assembly/AssemblyReadsAreaHint.h |   12 +-
 .../src/ov_assembly/AssemblyReferenceArea.cpp      |   11 +-
 .../U2View/src/ov_assembly/AssemblyReferenceArea.h |   14 +-
 .../U2View/src/ov_assembly/AssemblyRuler.cpp       |   30 +-
 .../U2View/src/ov_assembly/AssemblyRuler.h         |   12 +-
 .../src/ov_assembly/AssemblySettingsWidget.cpp     |    7 +-
 .../src/ov_assembly/AssemblySettingsWidget.h       |    3 +-
 .../U2View/src/ov_assembly/AssemblyVariantHint.cpp |    2 +-
 .../U2View/src/ov_assembly/AssemblyVariantHint.h   |    2 +-
 .../U2View/src/ov_assembly/AssemblyVariantRow.cpp  |    9 +-
 .../U2View/src/ov_assembly/AssemblyVariantRow.h    |    2 +-
 .../ov_assembly/CalculateCoveragePerBaseTask.cpp   |    2 +-
 .../src/ov_assembly/CalculateCoveragePerBaseTask.h |    4 +-
 .../U2View/src/ov_assembly/CoverageInfo.cpp        |    2 +-
 src/corelibs/U2View/src/ov_assembly/CoverageInfo.h |    6 +-
 .../src/ov_assembly/CoveredRegionsManager.cpp      |    2 +-
 .../U2View/src/ov_assembly/CoveredRegionsManager.h |    4 +-
 .../src/ov_assembly/ExportConsensusDialog.cpp      |    4 +-
 .../U2View/src/ov_assembly/ExportConsensusDialog.h |    8 +-
 .../U2View/src/ov_assembly/ExportConsensusTask.cpp |    6 +-
 .../U2View/src/ov_assembly/ExportConsensusTask.h   |    4 +-
 .../ExportConsensusVariationsDialog.cpp            |    4 +-
 .../ov_assembly/ExportConsensusVariationsDialog.h  |    2 +-
 .../ov_assembly/ExportConsensusVariationsTask.cpp  |    4 +-
 .../ov_assembly/ExportConsensusVariationsTask.h    |    4 +-
 .../src/ov_assembly/ExportCoverageDialog.cpp       |    5 +-
 .../U2View/src/ov_assembly/ExportCoverageDialog.h  |    2 +-
 .../U2View/src/ov_assembly/ExportCoverageDialog.ui |   30 +-
 .../U2View/src/ov_assembly/ExportCoverageTask.cpp  |    4 +-
 .../U2View/src/ov_assembly/ExportCoverageTask.h    |    2 +-
 .../U2View/src/ov_assembly/ExportReadsDialog.cpp   |    4 +-
 .../U2View/src/ov_assembly/ExportReadsDialog.h     |    2 +-
 .../ov_assembly/ExtractAssemblyRegionDialog.cpp    |    4 +-
 .../src/ov_assembly/ExtractAssemblyRegionDialog.h  |    2 +-
 .../src/ov_assembly/ExtractAssemblyRegionTask.cpp  |    2 +-
 .../src/ov_assembly/ExtractAssemblyRegionTask.h    |    4 +-
 .../src/ov_assembly/ZoomableAssemblyOverview.cpp   |   33 +-
 .../src/ov_assembly/ZoomableAssemblyOverview.h     |   12 +-
 .../AlignSequencesToAlignmentTask.cpp              |   34 +-
 .../AlignSequencesToAlignmentTask.h                |   16 +-
 src/corelibs/U2View/src/ov_msa/AlignmentLogo.cpp   |   30 +-
 src/corelibs/U2View/src/ov_msa/AlignmentLogo.h     |   32 +-
 .../Clipboard/SubalignmentToClipboardTask.cpp      |   99 +-
 .../ov_msa/Clipboard/SubalignmentToClipboardTask.h |   14 +-
 .../src/ov_msa/ColorSchemaDialogController.cpp     |    8 +-
 .../src/ov_msa/ColorSchemaDialogController.h       |   15 +-
 .../src/ov_msa/ColorSchemaSettingsController.cpp   |    7 +-
 .../src/ov_msa/ColorSchemaSettingsController.h     |    2 +-
 .../src/ov_msa/Common/RefSeqCommonWidget.cpp       |    2 +-
 .../U2View/src/ov_msa/Common/RefSeqCommonWidget.h  |    2 +-
 .../U2View/src/ov_msa/CreateSubalignmentDialog.ui  |   15 +-
 .../ov_msa/CreateSubalignmentDialogController.cpp  |   60 +-
 .../ov_msa/CreateSubalignmentDialogController.h    |   15 +-
 .../U2View/src/ov_msa/DeleteGapsDialog.cpp         |    4 +-
 src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h  |    2 +-
 .../src/ov_msa/Export/MSAImageExportTask.cpp       |  205 +-
 .../U2View/src/ov_msa/Export/MSAImageExportTask.h  |   78 +-
 .../ExportConsensus/ExportConsensusWidget.ui       |   25 +-
 .../ExportConsensus/MSAExportConsensusTab.cpp      |  145 -
 .../ov_msa/ExportConsensus/MSAExportConsensusTab.h |   56 -
 .../MSAExportConsensusTabFactory.cpp               |   61 -
 .../ExportConsensus/MSAExportConsensusTabFactory.h |   46 -
 .../MaExportConsensusTabFactory.cpp                |  107 +
 .../ExportConsensus/MaExportConsensusTabFactory.h  |   56 +
 .../ExportConsensus/MaExportConsensusWidget.cpp    |  151 +
 .../ExportConsensus/MaExportConsensusWidget.h      |   56 +
 .../U2View/src/ov_msa/ExportHighlightedDialog.ui   |    4 +-
 .../ov_msa/ExportHighlightedDialogController.cpp   |   35 +-
 .../src/ov_msa/ExportHighlightedDialogController.h |    6 +-
 .../ov_msa/General/GeneralTabOptionsPanelWidget.ui |   97 +-
 .../U2View/src/ov_msa/General/MSAGeneralTab.cpp    |  135 +-
 .../U2View/src/ov_msa/General/MSAGeneralTab.h      |   18 +-
 .../src/ov_msa/General/MSAGeneralTabFactory.cpp    |    7 +-
 .../src/ov_msa/General/MSAGeneralTabFactory.h      |    3 +-
 .../src/ov_msa/General/MaConsensusModeWidget.cpp   |  177 +
 .../src/ov_msa/General/MaConsensusModeWidget.h     |   62 +
 .../src/ov_msa/General/MaConsensusModeWidget.ui    |  109 +
 .../U2View/src/ov_msa/General/McaGeneralTab.cpp    |   51 +
 .../U2View/src/ov_msa/General/McaGeneralTab.h      |   47 +
 .../src/ov_msa/General/McaGeneralTabFactory.cpp    |   62 +
 .../src/ov_msa/General/McaGeneralTabFactory.h      |   48 +
 .../General/McaGeneralTabOptionsPanelWidget.ui     |   70 +
 .../src/ov_msa/Highlighting/MSAHighlightingTab.cpp |  102 +-
 .../src/ov_msa/Highlighting/MSAHighlightingTab.h   |   18 +-
 .../Highlighting/MSAHighlightingTabFactory.cpp     |    7 +-
 .../Highlighting/MSAHighlightingTabFactory.h       |    3 +-
 .../Highlighting/MsaHighlightingSavableTab.cpp     |    2 +-
 .../Highlighting/MsaHighlightingSavableTab.h       |    4 +-
 .../Highlighting/MsaSchemeComboBoxController.h     |  141 +
 .../ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp  |  154 +
 .../ov_msa/Highlighting/MsaSchemesMenuBuilder.h    |   63 +
 .../U2View/src/ov_msa/MSACollapsibleModel.cpp      |  128 +-
 .../U2View/src/ov_msa/MSACollapsibleModel.h        |   63 +-
 src/corelibs/U2View/src/ov_msa/MSAEditor.cpp       |  920 +---
 src/corelibs/U2View/src/ov_msa/MSAEditor.h         |  341 +-
 .../U2View/src/ov_msa/MSAEditorConsensusArea.cpp   |  688 +--
 .../U2View/src/ov_msa/MSAEditorConsensusArea.h     |  129 +-
 .../U2View/src/ov_msa/MSAEditorConsensusCache.cpp  |   61 +-
 .../U2View/src/ov_msa/MSAEditorConsensusCache.h    |   43 +-
 .../U2View/src/ov_msa/MSAEditorFactory.cpp         |  138 -
 src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h  |   54 -
 .../U2View/src/ov_msa/MSAEditorNameList.cpp        |  928 ----
 src/corelibs/U2View/src/ov_msa/MSAEditorNameList.h |  156 -
 .../U2View/src/ov_msa/MSAEditorOffsetsView.cpp     |  179 +-
 .../U2View/src/ov_msa/MSAEditorOffsetsView.h       |   38 +-
 .../U2View/src/ov_msa/MSAEditorOverviewArea.cpp    |   80 +-
 .../U2View/src/ov_msa/MSAEditorOverviewArea.h      |   43 +-
 .../U2View/src/ov_msa/MSAEditorSequenceArea.cpp    | 2419 +--------
 .../U2View/src/ov_msa/MSAEditorSequenceArea.h      |  396 +-
 src/corelibs/U2View/src/ov_msa/MSAEditorState.cpp  |  104 -
 src/corelibs/U2View/src/ov_msa/MSAEditorState.h    |   66 -
 .../U2View/src/ov_msa/MSAEditorStatusBar.cpp       |  248 -
 .../U2View/src/ov_msa/MSAEditorStatusBar.h         |   87 -
 src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp  |  311 --
 src/corelibs/U2View/src/ov_msa/MSAEditorTasks.h    |  108 -
 .../U2View/src/ov_msa/MSAEditorUndoFramework.cpp   |  135 -
 .../U2View/src/ov_msa/MSAEditorUndoFramework.h     |   91 -
 .../src/ov_msa/MSASelectSubalignmentDialog.cpp     |   52 +-
 .../src/ov_msa/MSASelectSubalignmentDialog.h       |   16 +-
 .../src/ov_msa/MaConsensusMismatchController.cpp   |  147 +
 .../src/ov_msa/MaConsensusMismatchController.h     |   71 +
 src/corelibs/U2View/src/ov_msa/MaEditor.cpp        |  470 ++
 src/corelibs/U2View/src/ov_msa/MaEditor.h          |  202 +
 .../src/ov_msa/MaEditorConsensusAreaSettings.cpp   |   51 +
 .../src/ov_msa/MaEditorConsensusAreaSettings.h     |   60 +
 src/corelibs/U2View/src/ov_msa/MaEditorFactory.cpp |  195 +
 src/corelibs/U2View/src/ov_msa/MaEditorFactory.h   |  102 +
 .../U2View/src/ov_msa/MaEditorNameList.cpp         |  910 ++++
 src/corelibs/U2View/src/ov_msa/MaEditorNameList.h  |  171 +
 src/corelibs/U2View/src/ov_msa/MaEditorState.cpp   |  126 +
 src/corelibs/U2View/src/ov_msa/MaEditorState.h     |   64 +
 .../U2View/src/ov_msa/MaEditorStatusBar.cpp        |  173 +
 src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.h |   97 +
 src/corelibs/U2View/src/ov_msa/MaEditorTasks.cpp   |  374 ++
 src/corelibs/U2View/src/ov_msa/MaEditorTasks.h     |  146 +
 src/corelibs/U2View/src/ov_msa/McaEditor.cpp       |  315 ++
 src/corelibs/U2View/src/ov_msa/McaEditor.h         |  106 +
 .../U2View/src/ov_msa/McaEditorConsensusArea.cpp   |   73 +
 .../U2View/src/ov_msa/McaEditorConsensusArea.h     |   58 +
 .../U2View/src/ov_msa/McaEditorNameList.cpp        |  152 +
 src/corelibs/U2View/src/ov_msa/McaEditorNameList.h |   82 +
 .../U2View/src/ov_msa/McaEditorOverviewArea.cpp    |   40 +
 .../U2View/src/ov_msa/McaEditorOverviewArea.h      |   45 +
 .../U2View/src/ov_msa/McaEditorReferenceArea.cpp   |  369 ++
 .../U2View/src/ov_msa/McaEditorReferenceArea.h     |   96 +
 .../U2View/src/ov_msa/McaEditorSequenceArea.cpp    |  468 ++
 .../U2View/src/ov_msa/McaEditorSequenceArea.h      |  134 +
 .../U2View/src/ov_msa/McaEditorStatusBar.cpp       |   94 +
 .../U2View/src/ov_msa/McaEditorStatusBar.h         |   51 +
 src/corelibs/U2View/src/ov_msa/McaEditorWgt.cpp    |  178 +
 src/corelibs/U2View/src/ov_msa/McaEditorWgt.h      |   73 +
 .../src/ov_msa/McaReferenceCharController.cpp      |  161 +
 .../U2View/src/ov_msa/McaReferenceCharController.h |   77 +
 .../U2View/src/ov_msa/MsaEditorNameList.cpp        |   65 +
 src/corelibs/U2View/src/ov_msa/MsaEditorNameList.h |   46 +
 .../src/ov_msa/MsaEditorSimilarityColumn.cpp       |   83 +-
 .../U2View/src/ov_msa/MsaEditorSimilarityColumn.h  |   30 +-
 .../U2View/src/ov_msa/MsaEditorStatusBar.cpp       |  237 +
 .../U2View/src/ov_msa/MsaEditorStatusBar.h         |   73 +
 .../src/ov_msa/MsaEditorUserModStepController.cpp  |    2 +-
 .../src/ov_msa/MsaEditorUserModStepController.h    |    2 +-
 src/corelibs/U2View/src/ov_msa/MsaEditorWgt.cpp    |  159 +
 src/corelibs/U2View/src/ov_msa/MsaEditorWgt.h      |   90 +
 src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.cpp |    2 +-
 src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.h   |    2 +-
 .../U2View/src/ov_msa/MsaUpdatedWidgetInterface.h  |   12 +-
 .../ov_msa/Overview/MSAGraphCalculationTask.cpp    |  277 -
 .../src/ov_msa/Overview/MSAGraphCalculationTask.h  |  125 -
 .../src/ov_msa/Overview/MSAGraphOverview.cpp       |  369 --
 .../U2View/src/ov_msa/Overview/MSAGraphOverview.h  |  132 -
 .../U2View/src/ov_msa/Overview/MSAOverview.cpp     |   97 -
 .../U2View/src/ov_msa/Overview/MSAOverview.h       |   89 -
 .../src/ov_msa/Overview/MSAOverviewContextMenu.cpp |  245 -
 .../src/ov_msa/Overview/MSAOverviewContextMenu.h   |  103 -
 .../ov_msa/Overview/MSAOverviewImageExportTask.cpp |  137 -
 .../ov_msa/Overview/MSAOverviewImageExportTask.h   |   83 -
 .../src/ov_msa/Overview/MSASimpleOverview.cpp      |  267 -
 .../U2View/src/ov_msa/Overview/MSASimpleOverview.h |   77 -
 .../src/ov_msa/Overview/MaEditorOverviewArea.cpp   |   62 +
 .../src/ov_msa/Overview/MaEditorOverviewArea.h     |   58 +
 .../src/ov_msa/Overview/MaGraphCalculationTask.cpp |  277 +
 .../src/ov_msa/Overview/MaGraphCalculationTask.h   |  125 +
 .../U2View/src/ov_msa/Overview/MaGraphOverview.cpp |  357 ++
 .../U2View/src/ov_msa/Overview/MaGraphOverview.h   |  130 +
 .../U2View/src/ov_msa/Overview/MaOverview.cpp      |  120 +
 .../U2View/src/ov_msa/Overview/MaOverview.h        |   88 +
 .../src/ov_msa/Overview/MaOverviewContextMenu.cpp  |  250 +
 .../src/ov_msa/Overview/MaOverviewContextMenu.h    |   99 +
 .../ov_msa/Overview/MaOverviewImageExportTask.cpp  |  132 +
 .../ov_msa/Overview/MaOverviewImageExportTask.h    |   83 +
 .../src/ov_msa/Overview/MaSangerOverview.cpp       |  311 ++
 .../U2View/src/ov_msa/Overview/MaSangerOverview.h  |   87 +
 .../src/ov_msa/Overview/MaSimpleOverview.cpp       |  245 +
 .../U2View/src/ov_msa/Overview/MaSimpleOverview.h  |   75 +
 .../U2View/src/ov_msa/PairAlign/PairAlign.cpp      |  113 +-
 .../U2View/src/ov_msa/PairAlign/PairAlign.h        |   10 +-
 .../src/ov_msa/PairAlign/PairAlignFactory.cpp      |    7 +-
 .../U2View/src/ov_msa/PairAlign/PairAlignFactory.h |    3 +-
 .../PairwiseAlignmentOptionsPanelWidget.ui         |    2 +-
 .../ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp   |    8 +-
 .../src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h |   17 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp   |   22 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeManager.h     |   10 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp    |   56 +-
 .../src/ov_msa/PhyTrees/MSAEditorTreeViewer.h      |   15 +-
 .../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp   |    5 +-
 .../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h     |    2 +-
 ...SaveSelectedSequenceFromMSADialogController.cpp |   10 +-
 .../SaveSelectedSequenceFromMSADialogController.h  |    6 +-
 .../U2View/src/ov_msa/SelectSubalignmentDialog.ui  |    4 +-
 .../MSADistancesColumnSettingsWidget.ui            |   28 +-
 .../ov_msa/SeqStatistics/SeqStatisticsWidget.cpp   |    8 +-
 .../src/ov_msa/SeqStatistics/SeqStatisticsWidget.h |    6 +-
 .../SeqStatistics/SeqStatisticsWidgetFactory.cpp   |    7 +-
 .../SeqStatistics/SeqStatisticsWidgetFactory.h     |    3 +-
 .../ov_msa/SequenceSelectorWidgetController.cpp    |   48 +-
 .../src/ov_msa/SequenceSelectorWidgetController.h  |    4 +-
 .../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp   |   32 +-
 .../src/ov_msa/TreeOptions/TreeOptionsWidget.h     |    6 +-
 .../TreeOptions/TreeOptionsWidgetFactory.cpp       |   17 +-
 .../ov_msa/TreeOptions/TreeOptionsWidgetFactory.h  |    5 +-
 .../src/ov_msa/helpers/BaseWidthController.cpp     |  120 +
 .../src/ov_msa/helpers/BaseWidthController.h       |   73 +
 .../U2View/src/ov_msa/helpers/DrawHelper.cpp       |   91 +
 .../U2View/src/ov_msa/helpers/DrawHelper.h         |   56 +
 .../helpers/MaAmbiguousCharactersController.cpp    |  156 +
 .../helpers/MaAmbiguousCharactersController.h      |   69 +
 .../src/ov_msa/helpers/McaRowHeightController.cpp  |   45 +
 .../src/ov_msa/helpers/McaRowHeightController.h    |   40 +
 .../src/ov_msa/helpers/MsaRowHeightController.cpp  |   40 +
 .../src/ov_msa/helpers/MsaRowHeightController.h    |   40 +
 .../src/ov_msa/helpers/RowHeightController.cpp     |  184 +
 .../src/ov_msa/helpers/RowHeightController.h       |   80 +
 .../U2View/src/ov_msa/helpers/ScrollController.cpp |  457 ++
 .../U2View/src/ov_msa/helpers/ScrollController.h   |  130 +
 .../view_rendering/MaConsensusAreaRenderer.cpp     |  366 ++
 .../view_rendering/MaConsensusAreaRenderer.h       |  126 +
 .../view_rendering/MaEditorConsensusArea.cpp       |  442 ++
 .../ov_msa/view_rendering/MaEditorConsensusArea.h  |  151 +
 .../ov_msa/view_rendering/MaEditorSelection.cpp    |  110 +
 .../src/ov_msa/view_rendering/MaEditorSelection.h  |   72 +
 .../ov_msa/view_rendering/MaEditorSequenceArea.cpp | 1596 ++++++
 .../ov_msa/view_rendering/MaEditorSequenceArea.h   |  337 ++
 .../src/ov_msa/view_rendering/MaEditorUtils.cpp    |  180 +
 .../src/ov_msa/view_rendering/MaEditorUtils.h      |  106 +
 .../src/ov_msa/view_rendering/MaEditorWgt.cpp      |  289 +
 .../U2View/src/ov_msa/view_rendering/MaEditorWgt.h |  149 +
 .../view_rendering/McaConsensusAreaRenderer.cpp    |   58 +
 .../view_rendering/McaConsensusAreaRenderer.h      |   43 +
 .../view_rendering/McaReferenceAreaRenderer.cpp    |   96 +
 .../view_rendering/McaReferenceAreaRenderer.h      |   48 +
 .../ov_msa/view_rendering/SequenceAreaRenderer.cpp |  155 +
 .../ov_msa/view_rendering/SequenceAreaRenderer.h   |   56 +
 .../SequenceWithChromatogramAreaRenderer.cpp       |  497 ++
 .../SequenceWithChromatogramAreaRenderer.h         |   86 +
 .../U2View/src/ov_phyltree/CreateBranchesTask.h    |    2 +-
 .../src/ov_phyltree/CreateCircularBranchesTask.cpp |    4 +-
 .../src/ov_phyltree/CreateCircularBranchesTask.h   |    2 +-
 .../ov_phyltree/CreateRectangularBranchesTask.cpp  |    2 +-
 .../ov_phyltree/CreateRectangularBranchesTask.h    |    2 +-
 .../src/ov_phyltree/CreateUnrootedBranchesTask.cpp |    4 +-
 .../src/ov_phyltree/CreateUnrootedBranchesTask.h   |    2 +-
 .../U2View/src/ov_phyltree/GraphicsBranchItem.cpp  |    6 +-
 .../U2View/src/ov_phyltree/GraphicsBranchItem.h    |    2 +-
 .../U2View/src/ov_phyltree/GraphicsButtonItem.cpp  |    4 +-
 .../U2View/src/ov_phyltree/GraphicsButtonItem.h    |    2 +-
 .../src/ov_phyltree/GraphicsCircularBranchItem.cpp |   28 +-
 .../src/ov_phyltree/GraphicsCircularBranchItem.h   |    2 +-
 .../ov_phyltree/GraphicsRectangularBranchItem.cpp  |   22 +-
 .../ov_phyltree/GraphicsRectangularBranchItem.h    |    2 +-
 .../src/ov_phyltree/GraphicsUnrootedBranchItem.cpp |   30 +-
 .../src/ov_phyltree/GraphicsUnrootedBranchItem.h   |    2 +-
 src/corelibs/U2View/src/ov_phyltree/TreeSettings.h |    6 +-
 src/corelibs/U2View/src/ov_phyltree/TreeViewer.cpp |   14 +-
 src/corelibs/U2View/src/ov_phyltree/TreeViewer.h   |   12 +-
 .../U2View/src/ov_phyltree/TreeViewerFactory.cpp   |    2 +-
 .../U2View/src/ov_phyltree/TreeViewerFactory.h     |    2 +-
 .../U2View/src/ov_phyltree/TreeViewerState.cpp     |    2 +-
 .../U2View/src/ov_phyltree/TreeViewerState.h       |    4 +-
 .../U2View/src/ov_phyltree/TreeViewerTasks.cpp     |    4 +-
 .../U2View/src/ov_phyltree/TreeViewerTasks.h       |    2 +-
 .../U2View/src/ov_phyltree/TreeViewerUtils.cpp     |    9 +-
 .../U2View/src/ov_phyltree/TreeViewerUtils.h       |    4 +-
 .../src/ov_sequence/ADVAnnotationCreation.cpp      |    2 +-
 .../U2View/src/ov_sequence/ADVAnnotationCreation.h |    2 +-
 .../U2View/src/ov_sequence/ADVClipboard.cpp        |    2 +-
 src/corelibs/U2View/src/ov_sequence/ADVClipboard.h |    2 +-
 .../U2View/src/ov_sequence/ADVGraphModel.cpp       |    2 +-
 .../U2View/src/ov_sequence/ADVGraphModel.h         |    6 +-
 .../src/ov_sequence/ADVSequenceObjectContext.cpp   |  344 +-
 .../src/ov_sequence/ADVSequenceObjectContext.h     |   88 +-
 .../U2View/src/ov_sequence/ADVSequenceWidget.cpp   |    2 +-
 .../U2View/src/ov_sequence/ADVSequenceWidget.h     |   12 +-
 .../src/ov_sequence/ADVSingleSequenceWidget.cpp    |   12 +-
 .../src/ov_sequence/ADVSingleSequenceWidget.h      |    4 +-
 .../U2View/src/ov_sequence/ADVSplitWidget.h        |    2 +-
 .../U2View/src/ov_sequence/ADVSyncViewManager.cpp  |   11 +-
 .../U2View/src/ov_sequence/ADVSyncViewManager.h    |    2 +-
 src/corelibs/U2View/src/ov_sequence/ADVUtils.cpp   |    2 +-
 src/corelibs/U2View/src/ov_sequence/ADVUtils.h     |    4 +-
 .../U2View/src/ov_sequence/AnnotatedDNAView.cpp    |   39 +-
 .../U2View/src/ov_sequence/AnnotatedDNAView.h      |    4 +-
 .../src/ov_sequence/AnnotatedDNAViewFactory.cpp    |    2 +-
 .../src/ov_sequence/AnnotatedDNAViewFactory.h      |    2 +-
 .../src/ov_sequence/AnnotatedDNAViewState.cpp      |    2 +-
 .../U2View/src/ov_sequence/AnnotatedDNAViewState.h |    4 +-
 .../src/ov_sequence/AnnotatedDNAViewTasks.cpp      |   14 +-
 .../U2View/src/ov_sequence/AnnotatedDNAViewTasks.h |    2 +-
 .../U2View/src/ov_sequence/AnnotationsTreeView.cpp |    6 +-
 .../U2View/src/ov_sequence/AnnotationsTreeView.h   |    2 +-
 .../U2View/src/ov_sequence/AutoAnnotationUtils.cpp |    4 +-
 .../U2View/src/ov_sequence/AutoAnnotationUtils.h   |    2 +-
 .../ov_sequence/CreateRulerDialogController.cpp    |   32 +-
 .../src/ov_sequence/CreateRulerDialogController.h  |   18 +-
 src/corelibs/U2View/src/ov_sequence/DetView.cpp    |    4 +-
 src/corelibs/U2View/src/ov_sequence/DetView.h      |    4 +-
 .../U2View/src/ov_sequence/GSequenceGraphView.cpp  |   14 +-
 .../U2View/src/ov_sequence/GSequenceGraphView.h    |   10 +-
 .../ov_sequence/GSequenceGraphViewWithFactory.cpp  |    2 +-
 .../ov_sequence/GSequenceGraphViewWithFactory.h    |    2 +-
 .../U2View/src/ov_sequence/GSequenceLineView.cpp   |   16 +-
 .../U2View/src/ov_sequence/GSequenceLineView.h     |   29 +-
 .../src/ov_sequence/GSequenceLineViewAnnotated.cpp |    4 +-
 .../src/ov_sequence/GSequenceLineViewAnnotated.h   |    4 +-
 .../U2View/src/ov_sequence/GraphLabelModel.cpp     |    2 +-
 .../U2View/src/ov_sequence/GraphLabelModel.h       |    2 +-
 .../src/ov_sequence/GraphLabelsSelectDialog.cpp    |   28 +-
 .../src/ov_sequence/GraphLabelsSelectDialog.h      |    9 +-
 src/corelibs/U2View/src/ov_sequence/GraphMenu.cpp  |   25 +-
 src/corelibs/U2View/src/ov_sequence/GraphMenu.h    |    9 +-
 .../U2View/src/ov_sequence/GraphSettingsDialog.cpp |   54 +-
 .../U2View/src/ov_sequence/GraphSettingsDialog.h   |   10 +-
 src/corelibs/U2View/src/ov_sequence/Overview.cpp   |    4 +-
 src/corelibs/U2View/src/ov_sequence/Overview.h     |    9 +-
 src/corelibs/U2View/src/ov_sequence/PanView.cpp    |   43 +-
 src/corelibs/U2View/src/ov_sequence/PanView.h      |   16 +-
 .../U2View/src/ov_sequence/PanViewRows.cpp         |    4 +-
 src/corelibs/U2View/src/ov_sequence/PanViewRows.h  |    2 +-
 .../src/ov_sequence/SaveGraphCutoffsDialog.ui      |    6 +
 .../SaveGraphCutoffsDialogController.cpp           |   23 +-
 .../ov_sequence/SaveGraphCutoffsDialogController.h |   14 +-
 .../src/ov_sequence/SaveGraphCutoffsTask.cpp       |    2 +-
 .../U2View/src/ov_sequence/SaveGraphCutoffsTask.h  |    2 +-
 .../src/ov_sequence/SearchQualifierDialog.cpp      |    4 +-
 .../U2View/src/ov_sequence/SearchQualifierDialog.h |    2 +-
 .../src/ov_sequence/SequenceObjectContext.cpp      |  384 ++
 .../U2View/src/ov_sequence/SequenceObjectContext.h |  122 +
 .../src/ov_sequence/WindowStepSelectorWidget.cpp   |   74 +-
 .../src/ov_sequence/WindowStepSelectorWidget.h     |   25 +-
 .../annot_highlight/AnnotHighlightSettings.cpp     |    2 +-
 .../annot_highlight/AnnotHighlightSettings.h       |    5 +-
 .../annot_highlight/AnnotHighlightTree.cpp         |   17 +-
 .../annot_highlight/AnnotHighlightTree.h           |   13 +-
 .../annot_highlight/AnnotHighlightTreeItem.cpp     |    2 +-
 .../annot_highlight/AnnotHighlightTreeItem.h       |    2 +-
 .../annot_highlight/AnnotHighlightWidget.cpp       |   15 +-
 .../annot_highlight/AnnotHighlightWidget.h         |    7 +-
 .../AnnotHighlightWidgetFactory.cpp                |    7 +-
 .../annot_highlight/AnnotHighlightWidgetFactory.h  |    3 +-
 .../src/ov_sequence/codon_table/CodonTable.cpp     |   40 +-
 .../src/ov_sequence/codon_table/CodonTable.h       |   12 +-
 .../ov_sequence/find_pattern/FindPatternTask.cpp   |    2 +-
 .../src/ov_sequence/find_pattern/FindPatternTask.h |    4 +-
 .../ov_sequence/find_pattern/FindPatternWidget.cpp |   51 +-
 .../ov_sequence/find_pattern/FindPatternWidget.h   |    9 +-
 .../find_pattern/FindPatternWidgetFactory.cpp      |    7 +-
 .../find_pattern/FindPatternWidgetFactory.h        |    3 +-
 .../find_pattern/FindPatternWidgetSavableTab.cpp   |    2 +-
 .../find_pattern/FindPatternWidgetSavableTab.h     |    4 +-
 .../ov_sequence/image_export/ExportImagePainter.h  |    2 +-
 .../image_export/SequenceExportSettingsWidget.cpp  |    2 +-
 .../image_export/SequenceExportSettingsWidget.h    |    2 +-
 .../ov_sequence/image_export/SequencePainter.cpp   |    4 +-
 .../src/ov_sequence/image_export/SequencePainter.h |    2 +-
 .../SingleSequenceImageExportController.cpp        |    2 +-
 .../SingleSequenceImageExportController.h          |    2 +-
 .../image_export/SingleSequenceImageExportTask.cpp |    4 +-
 .../image_export/SingleSequenceImageExportTask.h   |    2 +-
 .../ov_sequence/sequence_info/CharOccurTask.cpp    |    2 +-
 .../src/ov_sequence/sequence_info/CharOccurTask.h  |    2 +-
 .../sequence_info/DNAStatisticsTask.cpp            |    2 +-
 .../ov_sequence/sequence_info/DNAStatisticsTask.h  |    6 +-
 .../ov_sequence/sequence_info/DinuclOccurTask.cpp  |    2 +-
 .../ov_sequence/sequence_info/DinuclOccurTask.h    |    2 +-
 .../src/ov_sequence/sequence_info/SequenceInfo.cpp |    2 +-
 .../src/ov_sequence/sequence_info/SequenceInfo.h   |    2 +-
 .../sequence_info/SequenceInfoFactory.cpp          |    7 +-
 .../sequence_info/SequenceInfoFactory.h            |    3 +-
 .../view_rendering/DetViewMultiLineRenderer.cpp    |    4 +-
 .../view_rendering/DetViewMultiLineRenderer.h      |    4 +-
 .../ov_sequence/view_rendering/DetViewRenderer.cpp |    6 +-
 .../ov_sequence/view_rendering/DetViewRenderer.h   |    6 +-
 .../view_rendering/DetViewSingleLineRenderer.cpp   |    4 +-
 .../view_rendering/DetViewSingleLineRenderer.h     |    4 +-
 .../ov_sequence/view_rendering/PanViewRenderer.cpp |   74 +-
 .../ov_sequence/view_rendering/PanViewRenderer.h   |   43 +-
 .../SequenceViewAnnotatedRenderer.cpp              |    4 +-
 .../view_rendering/SequenceViewAnnotatedRenderer.h |    4 +-
 .../view_rendering/SequenceViewRenderer.cpp        |    4 +-
 .../view_rendering/SequenceViewRenderer.h          |    8 +-
 .../U2View/src/ov_text/SimpleTextObjectView.cpp    |   11 +-
 .../U2View/src/ov_text/SimpleTextObjectView.h      |    8 +-
 .../src/ov_text/SimpleTextObjectViewTasks.cpp      |    2 +-
 .../U2View/src/ov_text/SimpleTextObjectViewTasks.h |    2 +-
 .../U2View/src/phyltree/BaseSettingsDialog.cpp     |    2 +-
 .../U2View/src/phyltree/BaseSettingsDialog.h       |    2 +-
 .../U2View/src/phyltree/BranchSettingsDialog.cpp   |   12 +-
 .../U2View/src/phyltree/BranchSettingsDialog.h     |    2 +-
 .../U2View/src/phyltree/CreatePhyTreeDialog.ui     |    8 +-
 .../src/phyltree/CreatePhyTreeDialogController.cpp |   35 +-
 .../src/phyltree/CreatePhyTreeDialogController.h   |   13 +-
 .../U2View/src/phyltree/CreatePhyTreeWidget.cpp    |    4 +-
 .../U2View/src/phyltree/CreatePhyTreeWidget.h      |    7 +-
 .../src/phyltree/PhyTreeDisplayOptionsWidget.cpp   |    2 +-
 .../src/phyltree/PhyTreeDisplayOptionsWidget.h     |    2 +-
 .../U2View/src/phyltree/TextSettingsDialog.cpp     |   12 +-
 .../U2View/src/phyltree/TextSettingsDialog.h       |    2 +-
 .../U2View/src/phyltree/TreeSettingsDialog.cpp     |    4 +-
 .../U2View/src/phyltree/TreeSettingsDialog.h       |    2 +-
 .../src/util_dna_assembly/AssemblyToRefDialog.ui   |   18 +-
 .../src/util_dna_assembly/BuildIndexDialog.cpp     |   27 +-
 .../src/util_dna_assembly/BuildIndexDialog.h       |    4 +-
 .../util_dna_assembly/BuildIndexFromRefDialog.ui   |    4 +-
 .../ConvertAssemblyToSamDialog.cpp                 |    4 +-
 .../util_dna_assembly/ConvertAssemblyToSamDialog.h |    2 +-
 .../src/util_dna_assembly/DnaAssemblyDialog.cpp    |   14 +-
 .../src/util_dna_assembly/DnaAssemblyDialog.h      |    2 +-
 .../util_dna_assembly/DnaAssemblyGUIExtension.cpp  |    2 +-
 .../util_dna_assembly/DnaAssemblyGUIExtension.h    |    9 +-
 .../src/util_dna_assembly/DnaAssemblyUtils.cpp     |   28 +-
 .../src/util_dna_assembly/DnaAssemblyUtils.h       |    2 +-
 .../src/util_dna_assembly/GenomeAssemblyDialog.cpp |   21 +-
 .../src/util_dna_assembly/GenomeAssemblyDialog.h   |   12 +-
 .../AlignmentAlgorithmGUIExtension.cpp             |    2 +-
 .../AlignmentAlgorithmGUIExtension.h               |   22 +-
 .../util_sec_struct_predict/SecStructDialog.cpp    |    6 +-
 .../src/util_sec_struct_predict/SecStructDialog.h  |    2 +-
 .../SecStructPredictUtils.cpp                      |    2 +-
 .../SecStructPredictUtils.h                        |    2 +-
 .../util_smith_waterman/SmithWatermanDialog.cpp    |    9 +-
 .../src/util_smith_waterman/SmithWatermanDialog.h  |    2 +-
 .../util_smith_waterman/SmithWatermanDialogBase.ui |   13 +-
 .../util_smith_waterman/SmithWatermanDialogImpl.h  |    2 +-
 .../src/util_smith_waterman/SubstMatrixDialog.cpp  |   23 +-
 .../src/util_smith_waterman/SubstMatrixDialog.h    |    8 +-
 src/corelibs/U2View/transl/english.ts              | 3251 ++++++-----
 src/corelibs/U2View/transl/russian.ts              | 3253 ++++++-----
 src/include/U2Algorithm/MAlignmentUtilTasks.h      |    1 -
 src/include/U2Algorithm/MsaUtilTasks.h             |    1 +
 src/include/U2Core/ChromatogramUtils.h             |    1 +
 src/include/U2Core/CopyFileTask.h                  |    1 +
 src/include/U2Core/DbiConnection.h                 |    0
 src/include/U2Core/DnaChromatogramUtils.h          |    1 +
 src/include/U2Core/MAlignment.h                    |    1 -
 src/include/U2Core/MAlignmentExporter.h            |    1 -
 src/include/U2Core/MAlignmentImporter.h            |    1 -
 src/include/U2Core/MAlignmentInfo.h                |    1 -
 src/include/U2Core/MAlignmentObject.h              |    1 -
 src/include/U2Core/MAlignmentWalker.h              |    1 -
 src/include/U2Core/MaIterator.h                    |    1 +
 src/include/U2Core/MaModificationInfo.h            |    1 +
 src/include/U2Core/McaDbiUtils.h                   |    1 +
 src/include/U2Core/McaRowInnerData.h               |    1 +
 src/include/U2Core/MultipleAlignment.h             |    1 +
 src/include/U2Core/MultipleAlignmentInfo.h         |    1 +
 src/include/U2Core/MultipleAlignmentObject.h       |    1 +
 src/include/U2Core/MultipleAlignmentRowInfo.h      |    1 +
 src/include/U2Core/MultipleChromatogramAlignment.h |    1 +
 .../U2Core/MultipleChromatogramAlignmentExporter.h |    1 +
 .../U2Core/MultipleChromatogramAlignmentImporter.h |    1 +
 .../U2Core/MultipleChromatogramAlignmentObject.h   |    1 +
 .../U2Core/MultipleChromatogramAlignmentRow.h      |    1 +
 src/include/U2Core/MultipleSequenceAlignment.h     |    1 +
 .../U2Core/MultipleSequenceAlignmentExporter.h     |    1 +
 .../U2Core/MultipleSequenceAlignmentImporter.h     |    1 +
 src/include/U2Core/MultipleSequenceAlignmentInfo.h |    1 +
 .../U2Core/MultipleSequenceAlignmentObject.h       |    1 +
 src/include/U2Core/MultipleSequenceAlignmentRow.h  |    1 +
 .../U2Core/MultipleSequenceAlignmentWalker.h       |    1 +
 src/include/U2Core/QObjectScopedPointer.h          |    0
 src/include/U2Core/SignalBlocker.h                 |    1 +
 src/include/U2Core/StrPackUtils.h                  |    1 +
 src/include/U2Core/U2Mca.h                         |    2 +
 src/include/U2Formats/AprFormat.h                  |    1 +
 src/include/U2Formats/AprImporter.h                |    1 +
 src/include/U2Gui/GroupedComboBoxDelegate.h        |    1 +
 src/include/U2Gui/ImportDialogsFactories.h         |    1 -
 src/include/U2Gui/ImportWidget.h                   |    1 +
 src/include/U2Gui/ImportWidgetsFactories.h         |    1 +
 src/include/U2Gui/SearchBox.h                      |    1 +
 src/include/U2View/BaseWidthController.h           |    1 +
 src/include/U2View/DrawHelper.h                    |    1 +
 src/include/U2View/MSAColorScheme.h                |    1 -
 src/include/U2View/MSAEditorFactory.h              |    1 -
 src/include/U2View/MSAEditorNameList.h             |    1 -
 src/include/U2View/MSAEditorStatusBar.h            |    1 -
 src/include/U2View/MSAEditorTasks.h                |    1 -
 src/include/U2View/MSAEditorTreeViewer.h           |    0
 src/include/U2View/MSAEditorUndoFramework.h        |    1 -
 src/include/U2View/MSAExportConsensusTabFactory.h  |    1 -
 src/include/U2View/MSAGraphOverview.h              |    1 -
 src/include/U2View/MSASimpleOverview.h             |    1 -
 src/include/U2View/MaEditorFactory.h               |    1 +
 src/include/U2View/MaEditorNameList.h              |    1 +
 src/include/U2View/MaEditorStatusBar.h             |    1 +
 src/include/U2View/MaEditorTasks.h                 |    1 +
 src/include/U2View/MaExportConsensusTabFactory.h   |    1 +
 src/include/U2View/MaGraphOverview.h               |    1 +
 src/include/U2View/MaSimpleOverview.h              |    1 +
 src/include/U2View/McaEditor.h                     |    1 +
 src/include/U2View/McaEditorConsensusArea.h        |    1 +
 src/include/U2View/McaEditorNameList.h             |    1 +
 src/include/U2View/McaEditorOverviewArea.h         |    1 +
 src/include/U2View/McaEditorReferenceArea.h        |    1 +
 src/include/U2View/McaEditorSequenceArea.h         |    1 +
 src/include/U2View/McaEditorWgt.h                  |    1 +
 src/include/U2View/McaGeneralTabFactory.h          |    1 +
 src/include/U2View/MsaEditorWgt.h                  |    1 +
 src/include/U2View/PanViewRenderer.h               |    1 +
 src/include/U2View/RowHeightController.h           |    1 +
 src/include/U2View/ScrollController.h              |    1 +
 src/include/U2View/SequenceObjectContext.h         |    1 +
 .../linux/dump_writer_common/ucontext_reader.cc    |   30 +-
 .../linux/dump_writer_common/ucontext_reader.h     |   10 +-
 .../src/client/linux/handler/exception_handler.cc  |    8 +-
 .../src/client/linux/handler/exception_handler.h   |    2 +-
 .../src/client/linux/handler/minidump_descriptor.h |    2 +-
 .../linux/microdump_writer/microdump_writer.cc     |    2 +-
 .../linux/minidump_writer/directory_reader.h       |    4 +-
 .../linux/minidump_writer/minidump_writer.cc       |    2 +-
 .../src/client/mac/handler/exception_handler.h     |    2 +-
 .../client/windows/handler/exception_handler.cc    |    4 +-
 .../src/client/windows/handler/exception_handler.h |    4 +-
 src/libs_3rdparty/qscore/src/QScoreAdapter.cpp     |   24 +-
 src/libs_3rdparty/qscore/src/QScoreAdapter.h       |    4 +-
 src/libs_3rdparty/qscore/src/qscore/qscore.h       |    5 +
 src/libs_3rdparty/qscore/src/qscore/sab_ids.h      |    2 +-
 src/libs_3rdparty/samtools/samtools.pri            |   10 +-
 src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp |    2 +-
 src/libs_3rdparty/samtools/src/SamtoolsAdapter.h   |    2 +-
 src/libs_3rdparty/samtools/src/samtools/khash.h    |    4 +-
 .../CoreTests/src/AnnotationTableObjectTest.cpp    |    4 +-
 .../CoreTests/src/AnnotationTableObjectTest.h      |    4 +-
 src/plugins/CoreTests/src/AsnParserTests.cpp       |    2 +-
 src/plugins/CoreTests/src/AsnParserTests.h         |    4 +-
 .../CoreTests/src/BinaryFindOpenCLTests.cpp        |    7 +-
 src/plugins/CoreTests/src/BinaryFindOpenCLTests.h  |    4 +-
 .../CoreTests/src/BioStruct3DObjectTests.cpp       |    8 +-
 src/plugins/CoreTests/src/BioStruct3DObjectTests.h |    6 +-
 src/plugins/CoreTests/src/CMDLineTests.cpp         |   17 +-
 src/plugins/CoreTests/src/CMDLineTests.h           |    4 +-
 src/plugins/CoreTests/src/CoreTests.cpp            |    2 +-
 src/plugins/CoreTests/src/CoreTests.h              |    2 +-
 .../CoreTests/src/DNASequenceObjectTests.cpp       |  116 +-
 src/plugins/CoreTests/src/DNASequenceObjectTests.h |    4 +-
 .../CoreTests/src/DNATranslationImplTests.cpp      |    2 +-
 .../CoreTests/src/DNATranslationImplTests.h        |    4 +-
 src/plugins/CoreTests/src/DnaAssemblyTests.cpp     |   17 +-
 src/plugins/CoreTests/src/DnaAssemblyTests.h       |    4 +-
 src/plugins/CoreTests/src/DocumentModelTests.cpp   |   37 +-
 src/plugins/CoreTests/src/DocumentModelTests.h     |    5 +-
 src/plugins/CoreTests/src/EditAlignmentTests.cpp   |   76 +-
 src/plugins/CoreTests/src/EditAlignmentTests.h     |   18 +-
 src/plugins/CoreTests/src/EditSequenceTests.cpp    |    2 +-
 src/plugins/CoreTests/src/EditSequenceTests.h      |    4 +-
 src/plugins/CoreTests/src/FindAlgorithmTests.cpp   |    6 +-
 src/plugins/CoreTests/src/FindAlgorithmTests.h     |    2 +-
 src/plugins/CoreTests/src/FormatDetectionTests.cpp |    2 +-
 src/plugins/CoreTests/src/FormatDetectionTests.h   |    2 +-
 src/plugins/CoreTests/src/GUrlTests.cpp            |   12 +-
 src/plugins/CoreTests/src/GUrlTests.h              |    4 +-
 .../CoreTests/src/LoadRemoteDocumentTests.cpp      |    6 +-
 .../CoreTests/src/LoadRemoteDocumentTests.h        |    2 +-
 src/plugins/CoreTests/src/PWMatrixTests.cpp        |   39 +-
 src/plugins/CoreTests/src/PWMatrixTests.h          |    4 +-
 src/plugins/CoreTests/src/PhyTreeObjectTests.cpp   |   18 +-
 src/plugins/CoreTests/src/PhyTreeObjectTests.h     |    6 +-
 src/plugins/CoreTests/src/SMatrixTests.cpp         |    9 +-
 src/plugins/CoreTests/src/SMatrixTests.h           |    2 +-
 .../CoreTests/src/SecStructPredictTests.cpp        |   13 +-
 src/plugins/CoreTests/src/SecStructPredictTests.h  |    2 +-
 src/plugins/CoreTests/src/SequenceWalkerTests.cpp  |    2 +-
 src/plugins/CoreTests/src/SequenceWalkerTests.h    |    4 +-
 src/plugins/CoreTests/src/TaskTests.cpp            |    6 +-
 src/plugins/CoreTests/src/TaskTests.h              |    4 +-
 src/plugins/CoreTests/src/TextObjectTests.cpp      |    4 +-
 src/plugins/CoreTests/src/TextObjectTests.h        |    2 +-
 src/plugins/CoreTests/src/UtilTestActions.cpp      |    4 +-
 src/plugins/CoreTests/src/UtilTestActions.h        |    4 +-
 src/plugins/GUITestBase/GUITestBase.pri            |    4 +-
 src/plugins/GUITestBase/GUITestBase.pro            |  143 +-
 src/plugins/GUITestBase/src/GTDatabaseConfig.cpp   |    4 +-
 src/plugins/GUITestBase/src/GTDatabaseConfig.h     |    4 +-
 .../src/GTUtilsAnnotationsHighlightingTreeView.cpp |    2 +-
 .../src/GTUtilsAnnotationsHighlightingTreeView.h   |    2 +-
 .../GUITestBase/src/GTUtilsAnnotationsTreeView.cpp |    2 +-
 .../GUITestBase/src/GTUtilsAnnotationsTreeView.h   |    2 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.cpp     |   12 +-
 .../GUITestBase/src/GTUtilsAssemblyBrowser.h       |    3 +-
 .../GUITestBase/src/GTUtilsBookmarksTreeView.cpp   |   64 +-
 .../GUITestBase/src/GTUtilsBookmarksTreeView.h     |   17 +-
 src/plugins/GUITestBase/src/GTUtilsDashboard.cpp   |   78 +-
 src/plugins/GUITestBase/src/GTUtilsDashboard.h     |   64 +-
 src/plugins/GUITestBase/src/GTUtilsDocument.cpp    |   12 +-
 src/plugins/GUITestBase/src/GTUtilsDocument.h      |    2 +-
 src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp  |    2 +-
 src/plugins/GUITestBase/src/GTUtilsEscClicker.h    |    2 +-
 .../GUITestBase/src/GTUtilsExternalTools.cpp       |    2 +-
 src/plugins/GUITestBase/src/GTUtilsExternalTools.h |    2 +-
 src/plugins/GUITestBase/src/GTUtilsLog.cpp         |   12 +-
 src/plugins/GUITestBase/src/GTUtilsLog.h           |    3 +-
 src/plugins/GUITestBase/src/GTUtilsMcaEditor.cpp   |  259 +
 src/plugins/GUITestBase/src/GTUtilsMcaEditor.h     |   74 +
 .../src/GTUtilsMcaEditorSequenceArea.cpp           |  515 ++
 .../GUITestBase/src/GTUtilsMcaEditorSequenceArea.h |   74 +
 src/plugins/GUITestBase/src/GTUtilsMdi.cpp         |   52 +-
 src/plugins/GUITestBase/src/GTUtilsMdi.h           |    5 +-
 src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp   |  234 +-
 src/plugins/GUITestBase/src/GTUtilsMsaEditor.h     |   33 +-
 .../src/GTUtilsMsaEditorSequenceArea.cpp           |  294 +-
 .../GUITestBase/src/GTUtilsMsaEditorSequenceArea.h |   94 +-
 .../GUITestBase/src/GTUtilsNotifications.cpp       |    2 +-
 src/plugins/GUITestBase/src/GTUtilsNotifications.h |    2 +-
 .../GUITestBase/src/GTUtilsOptionPanelMSA.cpp      |  119 +-
 .../GUITestBase/src/GTUtilsOptionPanelMSA.h        |   58 +-
 .../GUITestBase/src/GTUtilsOptionPanelMca.cpp      |  157 +
 .../GUITestBase/src/GTUtilsOptionPanelMca.h        |   61 +
 .../src/GTUtilsOptionPanelSequenceView.cpp         |   20 +-
 .../src/GTUtilsOptionPanelSequenceView.h           |    2 +-
 .../GUITestBase/src/GTUtilsOptionsPanel.cpp        |   14 +-
 src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h  |    2 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.cpp         |    2 +-
 src/plugins/GUITestBase/src/GTUtilsPcr.h           |    2 +-
 src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp     |   11 +-
 src/plugins/GUITestBase/src/GTUtilsPhyTree.h       |    2 +-
 .../GUITestBase/src/GTUtilsPrimerLibrary.cpp       |    2 +-
 src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h |    2 +-
 src/plugins/GUITestBase/src/GTUtilsProject.cpp     |   38 +-
 src/plugins/GUITestBase/src/GTUtilsProject.h       |   21 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.cpp     |   68 +-
 .../GUITestBase/src/GTUtilsProjectTreeView.h       |   15 +-
 .../GUITestBase/src/GTUtilsQueryDesigner.cpp       |    8 +-
 src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h |    2 +-
 .../GUITestBase/src/GTUtilsSequenceView.cpp        |   32 +-
 src/plugins/GUITestBase/src/GTUtilsSequenceView.h  |    2 +-
 .../src/GTUtilsSharedDatabaseDocument.cpp          |    2 +-
 .../src/GTUtilsSharedDatabaseDocument.h            |    4 +-
 src/plugins/GUITestBase/src/GTUtilsStartPage.cpp   |    2 +-
 src/plugins/GUITestBase/src/GTUtilsStartPage.h     |    2 +-
 src/plugins/GUITestBase/src/GTUtilsTask.cpp        |    2 +-
 src/plugins/GUITestBase/src/GTUtilsTask.h          |    2 +-
 .../GUITestBase/src/GTUtilsTaskTreeView.cpp        |   10 +-
 src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h  |    2 +-
 src/plugins/GUITestBase/src/GTUtilsWizard.cpp      |   34 +-
 src/plugins/GUITestBase/src/GTUtilsWizard.h        |   37 +-
 .../GUITestBase/src/GTUtilsWorkflowDesigner.cpp    |    8 +-
 .../GUITestBase/src/GTUtilsWorkflowDesigner.h      |   13 +-
 src/plugins/GUITestBase/src/GUITestBasePlugin.cpp  |  255 +-
 src/plugins/GUITestBase/src/GUITestBasePlugin.h    |    4 +-
 .../GUITestBase/src/api/GTBaseCompleter.cpp        |    9 +-
 src/plugins/GUITestBase/src/api/GTBaseCompleter.h  |    2 +-
 src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp |    9 +-
 src/plugins/GUITestBase/src/api/GTGraphicsItem.h   |    8 +-
 .../src/api/GTMSAEditorStatusWidget.cpp            |    2 +-
 .../GUITestBase/src/api/GTMSAEditorStatusWidget.h  |    4 +-
 .../GUITestBase/src/api/GTRegionSelector.cpp       |    2 +-
 src/plugins/GUITestBase/src/api/GTRegionSelector.h |    2 +-
 .../src/api/GTSequenceReadingModeDialog.cpp        |    2 +-
 .../src/api/GTSequenceReadingModeDialog.h          |    8 +-
 .../src/api/GTSequenceReadingModeDialogUtils.cpp   |   14 +-
 .../src/api/GTSequenceReadingModeDialogUtils.h     |    8 +-
 .../GUITestBase/src/runnables/qt/EscapeClicker.cpp |    2 +-
 .../GUITestBase/src/runnables/qt/EscapeClicker.h   |    2 +-
 .../ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp |    9 +-
 .../ugene/corelibs/U2Gui/AddFolderDialogFiller.h   |    2 +-
 .../corelibs/U2Gui/AddNewDocumentDialogFiller.cpp  |    2 +-
 .../corelibs/U2Gui/AddNewDocumentDialogFiller.h    |    2 +-
 .../corelibs/U2Gui/AlignShortReadsDialogFiller.cpp |    2 +-
 .../corelibs/U2Gui/AlignShortReadsDialogFiller.h   |    2 +-
 .../corelibs/U2Gui/AppSettingsDialogFiller.cpp     |   28 +-
 .../ugene/corelibs/U2Gui/AppSettingsDialogFiller.h |    2 +-
 .../corelibs/U2Gui/BuildIndexDialogFiller.cpp      |   18 +-
 .../ugene/corelibs/U2Gui/BuildIndexDialogFiller.h  |    2 +-
 .../U2Gui/CommonImportOptionsDialogFiller.cpp      |    9 +-
 .../U2Gui/CommonImportOptionsDialogFiller.h        |    2 +-
 .../U2Gui/ConvertAssemblyToSAMDialogFiller.cpp     |   14 +-
 .../U2Gui/ConvertAssemblyToSAMDialogFiller.h       |    2 +-
 .../U2Gui/CreateAnnotationWidgetFiller.cpp         |    2 +-
 .../corelibs/U2Gui/CreateAnnotationWidgetFiller.h  |    2 +-
 .../U2Gui/CreateDocumentFromTextDialogFiller.cpp   |    6 +-
 .../U2Gui/CreateDocumentFromTextDialogFiller.h     |    2 +-
 .../U2Gui/CreateObjectRelationDialogFiller.cpp     |    2 +-
 .../U2Gui/CreateObjectRelationDialogFiller.h       |    2 +-
 .../corelibs/U2Gui/CreateRulerDialogFiller.cpp     |    2 +-
 .../ugene/corelibs/U2Gui/CreateRulerDialogFiller.h |    2 +-
 .../U2Gui/DownloadRemoteFileDialogFiller.cpp       |   33 +-
 .../U2Gui/DownloadRemoteFileDialogFiller.h         |    6 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.cpp  |    2 +-
 .../corelibs/U2Gui/EditAnnotationDialogFiller.h    |    2 +-
 .../corelibs/U2Gui/EditConnectionDialogFiller.cpp  |   13 +-
 .../U2Gui/EditGroupAnnotationsDialogFiller.cpp     |   19 +-
 .../U2Gui/EditGroupAnnotationsDialogFiller.h       |    2 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.cpp   |   20 +-
 .../corelibs/U2Gui/EditQualifierDialogFiller.h     |    2 +-
 .../corelibs/U2Gui/EditSequenceDialogFiller.cpp    |    4 +-
 .../corelibs/U2Gui/EditSequenceDialogFiller.h      |    2 +-
 .../corelibs/U2Gui/ExportChromatogramFiller.cpp    |   16 +-
 .../corelibs/U2Gui/ExportChromatogramFiller.h      |    2 +-
 .../corelibs/U2Gui/ExportDocumentDialogFiller.cpp  |   19 +-
 .../corelibs/U2Gui/ExportDocumentDialogFiller.h    |    4 +-
 .../corelibs/U2Gui/ExportImageDialogFiller.cpp     |   14 +-
 .../ugene/corelibs/U2Gui/ExportImageDialogFiller.h |    2 +-
 .../corelibs/U2Gui/FindQualifierDialogFiller.cpp   |    2 +-
 .../corelibs/U2Gui/FindQualifierDialogFiller.h     |    2 +-
 .../corelibs/U2Gui/FindRepeatsDialogFiller.cpp     |   23 +-
 .../ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h |    2 +-
 .../corelibs/U2Gui/FindTandemsDialogFiller.cpp     |   17 +-
 .../ugene/corelibs/U2Gui/FindTandemsDialogFiller.h |    2 +-
 .../U2Gui/GraphLabelsSelectDialogFiller.cpp        |    2 +-
 .../corelibs/U2Gui/GraphLabelsSelectDialogFiller.h |    2 +-
 .../corelibs/U2Gui/GraphSettingsDialogFiller.cpp   |    2 +-
 .../corelibs/U2Gui/GraphSettingsDialogFiller.h     |    2 +-
 .../corelibs/U2Gui/ImportACEFileDialogFiller.cpp   |   82 +
 .../corelibs/U2Gui/ImportACEFileDialogFiller.h     |   49 +
 .../corelibs/U2Gui/ImportAPRFileDialogFiller.cpp   |   85 +
 .../corelibs/U2Gui/ImportAPRFileDialogFiller.h     |   49 +
 .../corelibs/U2Gui/ImportBAMFileDialogFiller.cpp   |   15 +-
 .../corelibs/U2Gui/ImportBAMFileDialogFiller.h     |    2 +-
 .../corelibs/U2Gui/ImportOptionsWidgetFiller.cpp   |   18 +-
 .../corelibs/U2Gui/ImportOptionsWidgetFiller.h     |    4 +-
 .../U2Gui/ImportToDatabaseDialogFiller.cpp         |   20 +-
 .../corelibs/U2Gui/ImportToDatabaseDialogFiller.h  |    4 +-
 .../U2Gui/ItemToImportEditDialogFiller.cpp         |    9 +-
 .../corelibs/U2Gui/ItemToImportEditDialogFiller.h  |    2 +-
 .../corelibs/U2Gui/PositionSelectorFiller.cpp      |   11 +-
 .../ugene/corelibs/U2Gui/PositionSelectorFiller.h  |    2 +-
 .../PredictSecondaryStructureDialogFiller.cpp      |    2 +-
 .../U2Gui/PredictSecondaryStructureDialogFiller.h  |    2 +-
 .../U2Gui/ProjectTreeItemSelectorDialogFiller.cpp  |   17 +-
 .../U2Gui/ProjectTreeItemSelectorDialogFiller.h    |    2 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.cpp  |   31 +-
 .../corelibs/U2Gui/RangeSelectionDialogFiller.h    |    6 +-
 .../ugene/corelibs/U2Gui/RangeSelectorFiller.cpp   |   11 +-
 .../ugene/corelibs/U2Gui/RangeSelectorFiller.h     |    2 +-
 .../U2Gui/RemovePartFromSequenceDialogFiller.cpp   |    4 +-
 .../U2Gui/RemovePartFromSequenceDialogFiller.h     |    2 +-
 .../U2Gui/ReplaceSubsequenceDialogFiller.cpp       |   22 +-
 .../U2Gui/ReplaceSubsequenceDialogFiller.h         |    2 +-
 .../U2Gui/SetSequenceOriginDialogFiller.cpp        |    2 +-
 .../corelibs/U2Gui/SetSequenceOriginDialogFiller.h |    2 +-
 .../U2Gui/SharedConnectionsDialogFiller.cpp        |   18 +-
 .../corelibs/U2Gui/SharedConnectionsDialogFiller.h |    4 +-
 .../corelibs/U2Gui/util/RenameSequenceFiller.cpp   |   11 +-
 .../corelibs/U2Gui/util/RenameSequenceFiller.h     |    2 +-
 .../ov_assembly/ExportConsensusDialogFiller.cpp    |    2 +-
 .../ov_assembly/ExportConsensusDialogFiller.h      |    2 +-
 .../ov_assembly/ExportCoverageDialogFiller.cpp     |    6 +-
 .../ov_assembly/ExportCoverageDialogFiller.h       |    2 +-
 .../U2View/ov_assembly/ExportReadsDialogFiller.cpp |   17 +-
 .../U2View/ov_assembly/ExportReadsDialogFiller.h   |    2 +-
 .../ExtractAssemblyRegionDialogFiller.cpp          |    2 +-
 .../ExtractAssemblyRegionDialogFiller.h            |    2 +-
 .../U2View/ov_msa/BranchSettingsDialogFiller.cpp   |   21 +-
 .../U2View/ov_msa/BranchSettingsDialogFiller.h     |    2 +-
 .../U2View/ov_msa/BuildTreeDialogFiller.cpp        |    4 +-
 .../corelibs/U2View/ov_msa/BuildTreeDialogFiller.h |    2 +-
 .../U2View/ov_msa/DeleteGapsDialogFiller.cpp       |   20 +-
 .../U2View/ov_msa/DeleteGapsDialogFiller.h         |    2 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.cpp   |    2 +-
 .../U2View/ov_msa/DistanceMatrixDialogFiller.h     |    2 +-
 .../ov_msa/ExportHighlightedDialogFiller.cpp       |    2 +-
 .../U2View/ov_msa/ExportHighlightedDialogFiller.h  |    2 +-
 .../ov_msa/ExtractSelectedAsMSADialogFiller.cpp    |   36 +-
 .../ov_msa/ExtractSelectedAsMSADialogFiller.h      |    2 +-
 .../GenerateAlignmentProfileDialogFiller.cpp       |   25 +-
 .../ov_msa/GenerateAlignmentProfileDialogFiller.h  |    2 +-
 .../U2View/ov_msa/LicenseAgreementDialogFiller.cpp |    2 +-
 .../U2View/ov_msa/LicenseAgreementDialogFiller.h   |    2 +-
 .../SmithWatermanDialogBaseFiller.cpp              |   34 +-
 .../SmithWatermanDialogBaseFiller.h                |    2 +-
 .../FindAnnotationCollocationsDialogFiller.cpp     |   14 +-
 .../FindAnnotationCollocationsDialogFiller.h       |    8 +-
 .../StructuralAlignmentDialogFiller.cpp            |    4 +-
 .../StructuralAlignmentDialogFiller.h              |    2 +-
 .../ugene/plugins/cap3/CAP3SupportDialogFiller.cpp |    2 +-
 .../ugene/plugins/cap3/CAP3SupportDialogFiller.h   |    2 +-
 .../dna_export/ExportAnnotationsDialogFiller.cpp   |   48 +-
 .../dna_export/ExportAnnotationsDialogFiller.h     |   54 +-
 .../dna_export/ExportBlastResultDialogFiller.cpp   |    2 +-
 .../dna_export/ExportBlastResultDialogFiller.h     |    2 +-
 .../dna_export/ExportMSA2MSADialogFiller.cpp       |   19 +-
 .../plugins/dna_export/ExportMSA2MSADialogFiller.h |    2 +-
 .../dna_export/ExportMSA2SequencesDialogFiller.cpp |   18 +-
 .../dna_export/ExportMSA2SequencesDialogFiller.h   |    2 +-
 ...rtSelectedSequenceFromAlignmentDialogFiller.cpp |   19 +-
 ...portSelectedSequenceFromAlignmentDialogFiller.h |    2 +-
 .../dna_export/ExportSequences2MSADialogFiller.cpp |    2 +-
 .../dna_export/ExportSequences2MSADialogFiller.h   |    2 +-
 .../dna_export/ExportSequencesDialogFiller.cpp     |    4 +-
 .../dna_export/ExportSequencesDialogFiller.h       |    2 +-
 .../dna_export/ImportAnnotationsToCsvFiller.cpp    |    4 +-
 .../dna_export/ImportAnnotationsToCsvFiller.h      |    2 +-
 .../plugins/dotplot/BuildDotPlotDialogFiller.cpp   |   14 +-
 .../plugins/dotplot/BuildDotPlotDialogFiller.h     |    2 +-
 .../ugene/plugins/dotplot/DotPlotDialogFiller.cpp  |   14 +-
 .../ugene/plugins/dotplot/DotPlotDialogFiller.h    |    2 +-
 .../enzymes/ConstructMoleculeDialogFiller.cpp      |    2 +-
 .../enzymes/ConstructMoleculeDialogFiller.h        |    2 +-
 .../plugins/enzymes/CreateFragmentDialogFiller.cpp |    2 +-
 .../plugins/enzymes/CreateFragmentDialogFiller.h   |    2 +-
 .../plugins/enzymes/DigestSequenceDialogFiller.cpp |    2 +-
 .../plugins/enzymes/DigestSequenceDialogFiller.h   |    2 +-
 .../plugins/enzymes/EditFragmentDialogFiller.cpp   |    2 +-
 .../plugins/enzymes/EditFragmentDialogFiller.h     |    2 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.cpp    |    4 +-
 .../plugins/enzymes/FindEnzymesDialogFiller.h      |    2 +-
 .../AlignToReferenceBlastDialogFiller.cpp          |  126 +
 .../AlignToReferenceBlastDialogFiller.h            |   65 +
 .../external_tools/BlastAllSupportDialogFiller.cpp |   12 +-
 .../external_tools/BlastAllSupportDialogFiller.h   |    2 +-
 .../ClustalOSupportRunDialogFiller.cpp             |    2 +-
 .../ClustalOSupportRunDialogFiller.h               |    2 +-
 .../external_tools/FormatDBDialogFiller.cpp        |   16 +-
 .../plugins/external_tools/FormatDBDialogFiller.h  |    2 +-
 .../external_tools/RemoteBLASTDialogFiller.cpp     |   17 +-
 .../external_tools/RemoteBLASTDialogFiller.h       |    2 +-
 .../external_tools/SnpEffDatabaseDialogFiller.cpp  |   85 +
 .../external_tools/SnpEffDatabaseDialogFiller.h    |   42 +
 .../SpadesGenomeAssemblyDialogFiller.cpp           |    2 +-
 .../SpadesGenomeAssemblyDialogFiller.h             |    2 +-
 .../plugins/external_tools/TCoffeeDailogFiller.cpp |   11 +-
 .../plugins/external_tools/TCoffeeDailogFiller.h   |    2 +-
 .../ugene/plugins/orf_marker/OrfDialogFiller.cpp   |    2 +-
 .../ugene/plugins/orf_marker/OrfDialogFiller.h     |    2 +-
 .../ugene/plugins/pcr/AddPrimerDialogFiller.cpp    |    2 +-
 .../ugene/plugins/pcr/AddPrimerDialogFiller.h      |    2 +-
 .../plugins/pcr/ExportPrimersDialogFiller.cpp      |    2 +-
 .../ugene/plugins/pcr/ExportPrimersDialogFiller.h  |    2 +-
 .../plugins/pcr/ImportPrimersDialogFiller.cpp      |    2 +-
 .../ugene/plugins/pcr/ImportPrimersDialogFiller.h  |    2 +-
 .../plugins/pcr/PrimerLibrarySelectorFiller.cpp    |    2 +-
 .../plugins/pcr/PrimerLibrarySelectorFiller.h      |    2 +-
 .../plugins/pcr/PrimersDetailsDialogFiller.cpp     |    2 +-
 .../ugene/plugins/pcr/PrimersDetailsDialogFiller.h |    2 +-
 .../plugins/weight_matrix/PwmBuildDialogFiller.cpp |    2 +-
 .../plugins/weight_matrix/PwmBuildDialogFiller.h   |    2 +-
 .../weight_matrix/PwmSearchDialogFiller.cpp        |    2 +-
 .../plugins/weight_matrix/PwmSearchDialogFiller.h  |    2 +-
 .../workflow_designer/AliasesDialogFiller.cpp      |   14 +-
 .../workflow_designer/AliasesDialogFiller.h        |    2 +-
 .../ConfigurationWizardFiller.cpp                  |    2 +-
 .../workflow_designer/ConfigurationWizardFiller.h  |    2 +-
 .../CreateElementWithCommandLineFiller.cpp         |    2 +-
 .../CreateElementWithCommandLineToolFiller.h       |    2 +-
 .../CreateElementWithScriptDialogFiller.cpp        |    2 +-
 .../CreateElementWithScriptDialogFiller.h          |    2 +-
 .../DashboardsManagerDialogFiller.cpp              |    2 +-
 .../DashboardsManagerDialogFiller.h                |    2 +-
 .../DatasetNameEditDialogFiller.cpp                |    2 +-
 .../DatasetNameEditDialogFiller.h                  |    2 +-
 .../workflow_designer/DefaultWizardFiller.cpp      |    2 +-
 .../workflow_designer/DefaultWizardFiller.h        |    2 +-
 .../workflow_designer/RPackageDialorFiller.cpp     |    2 +-
 .../workflow_designer/RPackageDialorFiller.h       |    2 +-
 .../workflow_designer/StartupDialogFiller.cpp      |    2 +-
 .../workflow_designer/StartupDialogFiller.h        |    2 +-
 .../plugins/workflow_designer/WizardFiller.cpp     |   26 +-
 .../ugene/plugins/workflow_designer/WizardFiller.h |   11 +-
 .../workflow_designer/WorkflowMetadialogFiller.cpp |   14 +-
 .../workflow_designer/WorkflowMetadialogFiller.h   |    2 +-
 .../MAFFT/MAFFTSupportRunDialogFiller.cpp          |   48 +-
 .../MAFFT/MAFFTSupportRunDialogFiller.h            |   32 +-
 .../clustalw/ClustalWDialogFiller.cpp              |   14 +-
 .../clustalw/ClustalWDialogFiller.h                |    2 +-
 .../hmm3/HmmerSearchDialogFiller.cpp               |   53 +
 .../hmm3/HmmerSearchDialogFiller.h                 |   41 +
 .../hmm3/UHMM3PhmmerDialogFiller.cpp               |    2 +-
 .../hmm3/UHMM3PhmmerDialogFiller.h                 |    4 +-
 .../hmm3/UHMM3SearchDialogFiller.cpp               |   48 -
 .../hmm3/UHMM3SearchDialogFiller.h                 |   41 -
 .../plugins_3rdparty/kalign/KalignDialogFiller.cpp |   14 +-
 .../plugins_3rdparty/kalign/KalignDialogFiller.h   |    2 +-
 .../primer3/Primer3DialogFiller.cpp                |    2 +-
 .../plugins_3rdparty/primer3/Primer3DialogFiller.h |    2 +-
 .../umuscle/MuscleDialogFiller.cpp                 |   20 +-
 .../plugins_3rdparty/umuscle/MuscleDialogFiller.h  |    2 +-
 .../ugeneui/ConvertAceToSqliteDialogFiller.cpp     |   13 +-
 .../ugene/ugeneui/ConvertAceToSqliteDialogFiller.h |    2 +-
 .../ugene/ugeneui/CreateNewProjectWidgetFiller.cpp |   17 +-
 .../ugene/ugeneui/CreateNewProjectWidgetFiller.h   |    2 +-
 .../ugeneui/DocumentFormatSelectorDialogFiller.cpp |   12 +-
 .../ugeneui/DocumentFormatSelectorDialogFiller.h   |    2 +-
 .../DocumentProviderSelectorDialogFiller.cpp       |    2 +-
 .../ugeneui/DocumentProviderSelectorDialogFiller.h |    2 +-
 .../ugene/ugeneui/ExportProjectDialogFiller.cpp    |   17 +-
 .../ugene/ugeneui/ExportProjectDialogFiller.h      |    2 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.cpp       |    4 +-
 .../ugene/ugeneui/NCBISearchDialogFiller.h         |    6 +-
 .../ugene/ugeneui/SaveProjectDialogFiller.cpp      |   11 +-
 .../ugene/ugeneui/SaveProjectDialogFiller.h        |    8 +-
 .../ugeneui/SelectDocumentFormatDialogFiller.cpp   |   14 +-
 .../ugeneui/SelectDocumentFormatDialogFiller.h     |    2 +-
 .../SequenceReadingModeSelectorDialogFiller.cpp    |   14 +-
 .../SequenceReadingModeSelectorDialogFiller.h      |    2 +-
 .../GUITestBase/src/test_runner/GUITestRunner.cpp  |    4 +-
 .../GUITestBase/src/test_runner/GUITestRunner.h    |    2 +-
 .../GUITestBase/src/tests/GUIInitialChecks.cpp     |  234 -
 .../GUITestBase/src/tests/GUIInitialChecks.h       |   57 -
 .../GUITestBase/src/tests/PosteriorActions.cpp     |  147 +
 .../GUITestBase/src/tests/PosteriorActions.h       |   47 +
 .../GUITestBase/src/tests/PosteriorChecks.cpp      |   52 +
 .../GUITestBase/src/tests/PosteriorChecks.h        |   44 +
 .../GUITestBase/src/tests/PreliminaryActions.cpp   |  125 +
 .../GUITestBase/src/tests/PreliminaryActions.h     |   49 +
 .../Assembly_browser/GTTestsAssemblyBrowser.cpp    |   13 +-
 .../Assembly_browser/GTTestsAssemblyBrowser.h      |    2 +-
 .../Assembling/bowtie2/GTTestsBowtie2.cpp          |    2 +-
 .../Assembling/bowtie2/GTTestsBowtie2.h            |    2 +-
 .../Assembling/dna_assembly/GTTestsDnaAssembly.cpp |    2 +-
 .../Assembling/dna_assembly/GTTestsDnaAssembly.h   |    2 +-
 .../Assembling/dna_assembly/GTTestsIndexReuse.cpp  |   18 +-
 .../Assembling/dna_assembly/GTTestsIndexReuse.h    |    2 +-
 .../conversions/GTTestsDnaAssemblyConversions.cpp  |    2 +-
 .../conversions/GTTestsDnaAssemblyConversions.h    |    2 +-
 .../common_scenarios/Assembling/sam/GTTestsSAM.cpp |    2 +-
 .../common_scenarios/Assembling/sam/GTTestsSAM.h   |    2 +-
 .../NIAID_pipelines/GTTestsNiaidPipelines.cpp      |   19 +-
 .../NIAID_pipelines/GTTestsNiaidPipelines.h        |    2 +-
 .../Query_Designer/GTTestsQuerryDesigner.cpp       |    8 +-
 .../Query_Designer/GTTestsQuerryDesigner.h         |    2 +-
 .../annotations/GTTestsAnnotations.cpp             |   15 +-
 .../annotations/GTTestsAnnotations.h               |    2 +-
 .../annotations/GTTestsCreateAnnotationWidget.cpp  |  230 +-
 .../annotations/GTTestsCreateAnnotationWidget.h    |    4 +-
 .../annotations/edit/GTTestsAnnotationsEdit.cpp    |    6 +-
 .../annotations/edit/GTTestsAnnotationsEdit.h      |    2 +-
 .../qualifiers/GTTestsAnnotationsQualifiers.cpp    |    2 +-
 .../qualifiers/GTTestsAnnotationsQualifiers.h      |    2 +-
 .../GTTestsAnnotationsImport.cpp                   |  139 +-
 .../annotations_import/GTTestsAnnotationsImport.h  |    2 +-
 .../circular_view/GTTestsCvGeneral.cpp             |    2 +-
 .../circular_view/GTTestsCvGeneral.h               |    2 +-
 .../common_scenarios/cloning/GTTestsCloning.cpp    |    2 +-
 .../common_scenarios/cloning/GTTestsCloning.h      |    2 +-
 .../document_from_text/GTTestsDocumentFromText.cpp |    2 +-
 .../document_from_text/GTTestsDocumentFromText.h   |    2 +-
 .../common_scenarios/dp_view/GTTestsDpView.cpp     |    2 +-
 .../tests/common_scenarios/dp_view/GTTestsDpView.h |    2 +-
 .../mca_editor/GTTestsMcaEditor.cpp                | 5647 ++++++++++++++++++++
 .../common_scenarios/mca_editor/GTTestsMcaEditor.h |   95 +
 .../msa_editor/GTTestsMsaEditor.cpp                | 1016 ++--
 .../common_scenarios/msa_editor/GTTestsMsaEditor.h |    7 +-
 .../msa_editor/align/GTTestsAlignSequenceToMsa.cpp |  259 +-
 .../msa_editor/align/GTTestsAlignSequenceToMsa.h   |    7 +-
 .../msa_editor/colors/GTTestsMSAEditorColors.cpp   |  223 +-
 .../msa_editor/colors/GTTestsMSAEditorColors.h     |    4 +-
 .../consensus/GTTestsMSAEditorConsensus.cpp        |    2 +-
 .../consensus/GTTestsMSAEditorConsensus.h          |    2 +-
 .../msa_editor/edit/GTTestsMSAEditorEdit.cpp       |  234 +-
 .../msa_editor/edit/GTTestsMSAEditorEdit.h         |    2 +-
 .../overview/GTTestsMSAEditorOverview.cpp          |  332 +-
 .../msa_editor/overview/GTTestsMSAEditorOverview.h |    2 +-
 .../GTTestsMSAEditorReplaceCharacter.cpp           |    4 +-
 .../GTTestsMSAEditorReplaceCharacter.h             |    2 +-
 .../options_panel/GTTestsOptionPanel.cpp           |    2 +-
 .../options_panel/GTTestsOptionPanel.h             |    2 +-
 .../options_panel/msa/GTTestsOptionPanelMSA.cpp    |  238 +-
 .../options_panel/msa/GTTestsOptionPanelMSA.h      |    2 +-
 .../GTTestsOptionPanelSequenceView.cpp             |   11 +-
 .../sequence_view/GTTestsOptionPanelSequenceView.h |    2 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.cpp    |   28 +-
 .../common_scenarios/pcr/GTTestsInSilicoPcr.h      |    3 +-
 .../common_scenarios/pcr/GTTestsPrimerLibrary.cpp  |   22 +-
 .../common_scenarios/pcr/GTTestsPrimerLibrary.h    |    2 +-
 .../phyml/GTTestsCommonScenariosPhyml.cpp          |  353 ++
 .../phyml/GTTestsCommonScenariosPhyml.h            |   45 +
 .../common_scenarios/project/GTTestsProject.cpp    |   88 +-
 .../common_scenarios/project/GTTestsProject.h      |    2 +-
 .../GTTestsProjectAnonymousProject.cpp             |    4 +-
 .../GTTestsProjectAnonymousProject.h               |    2 +-
 .../project/bookmarks/GTTestsBookmarks.cpp         |    4 +-
 .../project/bookmarks/GTTestsBookmarks.h           |    2 +-
 .../GTTestsProjectDocumentModifying.cpp            |    2 +-
 .../GTTestsProjectDocumentModifying.h              |    2 +-
 .../multiple_docs/GTTestsProjectMultipleDocs.cpp   |    2 +-
 .../multiple_docs/GTTestsProjectMultipleDocs.h     |    2 +-
 .../project_filtering/GTTestsProjectFiltering.cpp  |    2 +-
 .../project_filtering/GTTestsProjectFiltering.h    |    2 +-
 .../project/relations/GTTestsProjectRelations.cpp  |   22 +-
 .../project/relations/GTTestsProjectRelations.h    |    2 +-
 .../remote_request/GTTestsProjectRemoteRequest.cpp |  134 +-
 .../remote_request/GTTestsProjectRemoteRequest.h   |    4 +-
 .../GTTestsProjectSequenceExporting.cpp            |  112 +-
 .../GTTestsProjectSequenceExporting.h              |    2 +-
 .../from_project_view/GTTestsFromProjectView.cpp   |  163 +-
 .../from_project_view/GTTestsFromProjectView.h     |    2 +-
 .../user_locking/GTTestsProjectUserLocking.cpp     |   20 +-
 .../user_locking/GTTestsProjectUserLocking.h       |    2 +-
 .../repeat_finder/GTTestsRepeatFinder.cpp          |   11 +-
 .../repeat_finder/GTTestsRepeatFinder.h            |    2 +-
 .../common_scenarios/sanger/GTTestsSanger.cpp      |  480 ++
 .../tests/common_scenarios/sanger/GTTestsSanger.h  |   49 +
 .../sequence_edit/GTTestsSequenceEdit.cpp          |    4 +-
 .../sequence_edit/GTTestsSequenceEdit.h            |    2 +-
 .../sequence_view/GTTestsSequenceView.cpp          |    5 +-
 .../sequence_view/GTTestsSequenceView.h            |    2 +-
 .../shared_database/GTTestsSharedDatabase.cpp      |    8 +-
 .../shared_database/GTTestsSharedDatabase.h        |    2 +-
 .../smith_waterman_dialog/GTTestsSWDialog.cpp      |   13 +-
 .../smith_waterman_dialog/GTTestsSWDialog.h        |    2 +-
 .../start_page/GTTestsStartPage.cpp                |   10 +-
 .../common_scenarios/start_page/GTTestsStartPage.h |    2 +-
 .../toggle_view/GTTestsToggleView.cpp              |    4 +-
 .../toggle_view/GTTestsToggleView.h                |    2 +-
 .../GTTestsCommonScenariousTreeviewer.cpp          |   47 +-
 .../GTTestsCommonScenariousTreeviewer.h            |    2 +-
 .../common_scenarios/undo_redo/GTTestsUndoRedo.cpp |  508 +-
 .../common_scenarios/undo_redo/GTTestsUndoRedo.h   |    2 +-
 .../workflow_designer/GTTestsWorkflowDesigner.cpp  |  213 +-
 .../workflow_designer/GTTestsWorkflowDesigner.h    |    4 +-
 .../estimating/GTTestsWorkflowEstimating.cpp       |    6 +-
 .../estimating/GTTestsWorkflowEstimating.h         |    2 +-
 .../name_filter/GTTestsWorkflowNameFilter.cpp      |    8 +-
 .../name_filter/GTTestsWorkflowNameFilter.h        |    2 +-
 .../GTTestsWorkflowParameterValidation.cpp         |  320 ++
 .../GTTestsWorkflowParameterValidation.h           |   45 +
 .../GTTestsWorkflowParemeterValidation.cpp         |  319 --
 .../GTTestsWorkflowParemeterValidation.h           |   45 -
 .../scripting/GTTestsWorkflowScripting.cpp         |   13 +-
 .../scripting/GTTestsWorkflowScripting.h           |    2 +-
 .../shared_db/GTTestsSharedDbWd.cpp                |   70 +-
 .../shared_db/GTTestsSharedDbWd.h                  |    2 +-
 .../src/tests/crazy_user/GTAbstractGUIAction.cpp   |    2 +-
 .../src/tests/crazy_user/GTAbstractGUIAction.h     |    2 +-
 .../tests/crazy_user/GTRandomGUIActionFactory.cpp  |   10 +-
 .../tests/crazy_user/GTRandomGUIActionFactory.h    |    2 +-
 .../src/tests/crazy_user/GUICrazyUserTest.cpp      |    8 +-
 .../src/tests/crazy_user/GUICrazyUserTest.h        |    2 +-
 .../GTTestsRegressionScenarios_1001_2000.cpp       |  569 +-
 .../GTTestsRegressionScenarios_1001_2000.h         |    2 +-
 .../GTTestsRegressionScenarios_1_1000.cpp          |  139 +-
 .../GTTestsRegressionScenarios_1_1000.h            |    2 +-
 .../GTTestsRegressionScenarios_2001_3000.cpp       |  327 +-
 .../GTTestsRegressionScenarios_2001_3000.h         |    2 +-
 .../GTTestsRegressionScenarios_3001_4000.cpp       |  163 +-
 .../GTTestsRegressionScenarios_3001_4000.h         |    3 +-
 .../GTTestsRegressionScenarios_4001_5000.cpp       |  411 +-
 .../GTTestsRegressionScenarios_4001_5000.h         |    8 +-
 .../GTTestsRegressionScenarios_5001_6000.cpp       | 2830 +++++++++-
 .../GTTestsRegressionScenarios_5001_6000.h         |   63 +-
 src/plugins/annotator/src/AnnotatorPlugin.cpp      |    2 +-
 src/plugins/annotator/src/AnnotatorPlugin.h        |   11 +-
 src/plugins/annotator/src/AnnotatorTests.cpp       |   14 +-
 src/plugins/annotator/src/AnnotatorTests.h         |    4 +-
 src/plugins/annotator/src/CollocationWorker.cpp    |    7 +-
 src/plugins/annotator/src/CollocationWorker.h      |    4 +-
 .../annotator/src/CollocationsDialogController.cpp |    4 +-
 .../annotator/src/CollocationsDialogController.h   |   16 +-
 .../annotator/src/CollocationsSearchAlgorithm.cpp  |    2 +-
 .../annotator/src/CollocationsSearchAlgorithm.h    |    2 +-
 .../annotator/src/CustomAutoAnnotationDialog.cpp   |   11 +-
 .../annotator/src/CustomAutoAnnotationDialog.h     |    2 +-
 .../annotator/src/CustomPatternAnnotationTask.cpp  |    4 +-
 .../annotator/src/CustomPatternAnnotationTask.h    |    4 +-
 src/plugins/annotator/src/GeneByGeneReportTask.cpp |    6 +-
 src/plugins/annotator/src/GeneByGeneReportTask.h   |    2 +-
 .../annotator/src/GeneByGeneReportWorker.cpp       |    4 +-
 src/plugins/annotator/src/GeneByGeneReportWorker.h |    6 +-
 src/plugins/annotator/transl/english.ts            |   48 +-
 src/plugins/annotator/transl/russian.ts            |   48 +-
 src/plugins/api_tests/api_tests.pri                |    9 +-
 src/plugins/api_tests/api_tests.pro                |   37 +-
 src/plugins/api_tests/src/ApiTestsPlugin.cpp       |    2 +-
 src/plugins/api_tests/src/ApiTestsPlugin.h         |    2 +-
 src/plugins/api_tests/src/UnitTestSuite.cpp        |   13 +-
 src/plugins/api_tests/src/UnitTestSuite.h          |    2 +-
 .../annotations/AnnotationGroupUnitTests.cpp       |    4 +-
 .../annotations/AnnotationGroupUnitTests.h         |    2 +-
 .../datatype/annotations/AnnotationUnitTests.cpp   |    4 +-
 .../datatype/annotations/AnnotationUnitTests.h     |    2 +-
 .../core/datatype/msa/MAlignmentRowUnitTests.cpp   | 1605 ------
 .../src/core/datatype/msa/MAlignmentRowUnitTests.h |  462 --
 .../src/core/datatype/msa/MAlignmentUnitTests.cpp  | 1003 ----
 .../src/core/datatype/msa/MAlignmentUnitTests.h    |  347 --
 .../src/core/datatype/msa/MsaRowUnitTests.cpp      | 1537 ++++++
 .../src/core/datatype/msa/MsaRowUnitTests.h        |  462 ++
 .../src/core/datatype/msa/MsaUnitTests.cpp         |  919 ++++
 .../api_tests/src/core/datatype/msa/MsaUnitTests.h |  347 ++
 .../datatype/udr/RawDataUdrSchemaUnitTests.cpp     |    2 +-
 .../core/datatype/udr/RawDataUdrSchemaUnitTests.h  |    2 +-
 .../src/core/datatype/udr/UdrSchemaUnitTests.cpp   |    2 +-
 .../src/core/datatype/udr/UdrSchemaUnitTests.h     |    2 +-
 src/plugins/api_tests/src/core/dbi/DbiTest.cpp     |    4 +-
 .../src/core/dbi/assembly/AssemblyDbiUnitTests.cpp |    0
 .../src/core/dbi/assembly/AssemblyDbiUnitTests.h   |    0
 .../core/dbi/attribute/AttributeDbiUnitTests.cpp   |    0
 .../src/core/dbi/attribute/AttributeDbiUnitTests.h |    0
 .../src/core/dbi/features/FeatureDbiUnitTests.cpp  |    2 +-
 .../src/core/dbi/features/FeatureDbiUnitTests.h    |    2 +-
 .../api_tests/src/core/dbi/msa/MsaDbiUnitTests.cpp |    2 +-
 .../api_tests/src/core/dbi/msa/MsaDbiUnitTests.h   |    2 +-
 .../src/core/dbi/sequence/SequenceDbiUnitTests.cpp |    4 +-
 .../src/core/dbi/sequence/SequenceDbiUnitTests.h   |    0
 .../api_tests/src/core/dbi/udr/UdrDbiUnitTests.cpp |    2 +-
 .../api_tests/src/core/dbi/udr/UdrDbiUnitTests.h   |    2 +-
 .../CInterfaceManualTests.cpp                      |   48 +-
 .../base_scheme_interface/CInterfaceManualTests.h  |    2 +-
 .../base_scheme_interface/CInterfaceSasTests.cpp   |    7 +-
 .../base_scheme_interface/CInterfaceSasTests.h     |   58 +-
 .../SchemeSimilarityUtils.cpp                      |    4 +-
 .../base_scheme_interface/SchemeSimilarityUtils.h  |    4 +-
 .../src/core/format/fastq/FastqUnitTests.cpp       |    4 +-
 .../src/core/format/fastq/FastqUnitTests.h         |    0
 .../format/genbank/LocationParserUnitTests.cpp     |    2 +-
 .../core/format/genbank/LocationParserUnitTests.h  |    0
 .../ModDbiSQLiteSpecificUnitTests.cpp              |   40 +-
 .../sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h |    2 +-
 .../MsaDbiSQLiteSpecificUnitTests.cpp              |   40 +-
 .../sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h |    2 +-
 .../sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp |   38 +-
 .../sqlite_object_dbi/SQLiteObjectDbiUnitTests.h   |    2 +-
 .../SequenceDbiSQLiteSpecificUnitTests.cpp         |    4 +-
 .../SequenceDbiSQLiteSpecificUnitTests.h           |    2 +-
 .../core/gobjects/BioStruct3DObjectUnitTests.cpp   |    2 +-
 .../src/core/gobjects/BioStruct3DObjectUnitTests.h |    2 +-
 .../gobjects/DNAChromatogramObjectUnitTests.cpp    |    2 +-
 .../core/gobjects/DNAChromatogramObjectUnitTests.h |    2 +-
 .../core/gobjects/FeaturesTableObjectUnitTest.cpp  |    8 +-
 .../core/gobjects/FeaturesTableObjectUnitTest.h    |    2 +-
 .../core/gobjects/MAlignmentObjectUnitTests.cpp    |  214 -
 .../src/core/gobjects/MAlignmentObjectUnitTests.h  |   68 -
 .../src/core/gobjects/MsaObjectUnitTests.cpp       |  214 +
 .../src/core/gobjects/MsaObjectUnitTests.h         |   68 +
 .../src/core/gobjects/PhyTreeObjectUnitTests.cpp   |    2 +-
 .../src/core/gobjects/PhyTreeObjectUnitTests.h     |    2 +-
 .../src/core/gobjects/TextObjectUnitTests.cpp      |    2 +-
 .../src/core/gobjects/TextObjectUnitTests.h        |    2 +-
 .../core/util/DatatypeSerializeUtilsUnitTest.cpp   |    2 +-
 .../src/core/util/DatatypeSerializeUtilsUnitTest.h |    2 +-
 .../util/MAlignmentImporterExporterUnitTests.cpp   |   93 -
 .../util/MAlignmentImporterExporterUnitTests.h     |   52 -
 .../src/core/util/MsaDbiUtilsUnitTests.cpp         |  599 +--
 .../api_tests/src/core/util/MsaDbiUtilsUnitTests.h |   26 +-
 .../src/core/util/MsaImporterExporterUnitTests.cpp |   90 +
 .../src/core/util/MsaImporterExporterUnitTests.h   |   52 +
 .../api_tests/src/core/util/MsaUtilsUnitTests.cpp  |   94 +-
 .../api_tests/src/core/util/MsaUtilsUnitTests.h    |    2 +-
 src/plugins/api_tests/src/unittest.h               |    0
 src/plugins/biostruct3d_view/biostruct3d_view.pri  |    4 +
 .../biostruct3d_view/src/AnaglyphRenderer.cpp      |    2 +-
 .../biostruct3d_view/src/AnaglyphRenderer.h        |    2 +-
 .../src/BallAndStickGLRenderer.cpp                 |    2 +-
 .../biostruct3d_view/src/BallAndStickGLRenderer.h  |    2 +-
 .../src/BioStruct3DColorScheme.cpp                 |    5 +-
 .../biostruct3d_view/src/BioStruct3DColorScheme.h  |   12 +-
 .../src/BioStruct3DGLImageExportTask.cpp           |    2 +-
 .../src/BioStruct3DGLImageExportTask.h             |    2 +-
 .../biostruct3d_view/src/BioStruct3DGLRender.cpp   |    2 +-
 .../biostruct3d_view/src/BioStruct3DGLRender.h     |    6 +-
 .../biostruct3d_view/src/BioStruct3DGLWidget.cpp   |   11 +-
 .../biostruct3d_view/src/BioStruct3DGLWidget.h     |    2 +-
 .../biostruct3d_view/src/BioStruct3DSplitter.cpp   |   16 +-
 .../biostruct3d_view/src/BioStruct3DSplitter.h     |    2 +-
 .../src/BioStruct3DSubsetEditor.cpp                |    2 +-
 .../biostruct3d_view/src/BioStruct3DSubsetEditor.h |    2 +-
 .../biostruct3d_view/src/BioStruct3DViewPlugin.cpp |   11 +-
 .../biostruct3d_view/src/BioStruct3DViewPlugin.h   |   10 +-
 .../biostruct3d_view/src/GLFrameManager.cpp        |    2 +-
 src/plugins/biostruct3d_view/src/GLFrameManager.h  |    4 +-
 src/plugins/biostruct3d_view/src/GraphicUtils.cpp  |    2 +-
 src/plugins/biostruct3d_view/src/GraphicUtils.h    |    2 +-
 .../src/MolecularSurfaceRenderer.cpp               |    2 +-
 .../src/MolecularSurfaceRenderer.h                 |    6 +-
 .../biostruct3d_view/src/SelectModelsDialog.cpp    |   10 +-
 .../biostruct3d_view/src/SelectModelsDialog.h      |    2 +-
 .../biostruct3d_view/src/SettingsDialog.cpp        |    4 +-
 src/plugins/biostruct3d_view/src/SettingsDialog.h  |    8 +-
 .../src/StructuralAlignmentDialog.cpp              |    4 +-
 .../src/StructuralAlignmentDialog.h                |    2 +-
 .../biostruct3d_view/src/TubeGLRenderer.cpp        |    2 +-
 src/plugins/biostruct3d_view/src/TubeGLRenderer.h  |    6 +-
 .../biostruct3d_view/src/VanDerWaalsGLRenderer.cpp |    2 +-
 .../biostruct3d_view/src/VanDerWaalsGLRenderer.h   |    2 +-
 .../biostruct3d_view/src/WormsGLRenderer.cpp       |    2 +-
 src/plugins/biostruct3d_view/src/WormsGLRenderer.h |   10 +-
 .../src/deprecated/AnaglyphRenderer.cpp            |    2 +-
 .../src/deprecated/AnaglyphRenderer.h              |    2 +-
 .../src/deprecated/BallAndStickGLRenderer.cpp      |    2 +-
 .../src/deprecated/BallAndStickGLRenderer.h        |    2 +-
 .../src/deprecated/BioStruct3DColorScheme.cpp      |    5 +-
 .../src/deprecated/BioStruct3DColorScheme.h        |   12 +-
 .../deprecated/BioStruct3DGLImageExportTask.cpp    |    2 +-
 .../src/deprecated/BioStruct3DGLImageExportTask.h  |    2 +-
 .../src/deprecated/BioStruct3DGLRender.cpp         |    2 +-
 .../src/deprecated/BioStruct3DGLRender.h           |    6 +-
 .../src/deprecated/BioStruct3DGLWidget.cpp         |   14 +-
 .../src/deprecated/BioStruct3DGLWidget.h           |   25 +-
 .../src/deprecated/BioStruct3DSplitter.cpp         |   16 +-
 .../src/deprecated/BioStruct3DSplitter.h           |    2 +-
 .../src/deprecated/BioStruct3DSubsetEditor.cpp     |    2 +-
 .../src/deprecated/BioStruct3DSubsetEditor.h       |    2 +-
 .../src/deprecated/BioStruct3DViewPlugin.cpp       |   11 +-
 .../src/deprecated/BioStruct3DViewPlugin.h         |   10 +-
 .../src/deprecated/GLFrameManager.cpp              |    2 +-
 .../src/deprecated/GLFrameManager.h                |    6 +-
 .../src/deprecated/GraphicUtils.cpp                |    2 +-
 .../biostruct3d_view/src/deprecated/GraphicUtils.h |    2 +-
 .../src/deprecated/MolecularSurfaceRenderer.cpp    |    2 +-
 .../src/deprecated/MolecularSurfaceRenderer.h      |    6 +-
 .../src/deprecated/SelectModelsDialog.cpp          |   10 +-
 .../src/deprecated/SelectModelsDialog.h            |    2 +-
 .../src/deprecated/SettingsDialog.cpp              |    6 +-
 .../src/deprecated/SettingsDialog.h                |    8 +-
 .../src/deprecated/StructuralAlignmentDialog.cpp   |    9 +-
 .../src/deprecated/StructuralAlignmentDialog.h     |    2 +-
 .../src/deprecated/TubeGLRenderer.cpp              |    2 +-
 .../src/deprecated/TubeGLRenderer.h                |    6 +-
 .../src/deprecated/VanDerWaalsGLRenderer.cpp       |    2 +-
 .../src/deprecated/VanDerWaalsGLRenderer.h         |    2 +-
 .../src/deprecated/WormsGLRenderer.cpp             |    2 +-
 .../src/deprecated/WormsGLRenderer.h               |   10 +-
 src/plugins/biostruct3d_view/transl/english.ts     |  153 +-
 src/plugins/biostruct3d_view/transl/russian.ts     |  153 +-
 .../browser_support/src/BrowserSupportPlugin.cpp   |   16 +-
 .../browser_support/src/BrowserSupportPlugin.h     |    2 +-
 src/plugins/chroma_view/src/ChromaViewPlugin.cpp   |   15 +-
 src/plugins/chroma_view/src/ChromaViewPlugin.h     |   10 +-
 src/plugins/chroma_view/src/ChromatogramView.cpp   |   64 +-
 src/plugins/chroma_view/src/ChromatogramView.h     |   11 +-
 src/plugins/chroma_view/transl/english.ts          |   28 +-
 src/plugins/chroma_view/transl/russian.ts          |   30 +-
 src/plugins/circular_view/src/CircularItems.cpp    |    2 +-
 src/plugins/circular_view/src/CircularItems.h      |   10 +-
 src/plugins/circular_view/src/CircularView.cpp     |   26 +-
 src/plugins/circular_view/src/CircularView.h       |    2 +-
 .../src/CircularViewImageExportTask.cpp            |   24 +-
 .../src/CircularViewImageExportTask.h              |    2 +-
 .../circular_view/src/CircularViewPlugin.cpp       |    2 +-
 src/plugins/circular_view/src/CircularViewPlugin.h |   12 +-
 .../src/CircularViewSettingsWidget.cpp             |    4 +-
 .../circular_view/src/CircularViewSettingsWidget.h |    2 +-
 .../src/CircularViewSettingsWidgetFactory.cpp      |    7 +-
 .../src/CircularViewSettingsWidgetFactory.h        |    3 +-
 .../circular_view/src/CircularViewSplitter.cpp     |    8 +-
 .../circular_view/src/CircularViewSplitter.h       |    2 +-
 .../circular_view/src/RestrictionMapWidget.cpp     |    2 +-
 .../circular_view/src/RestrictionMapWidget.h       |    2 +-
 .../circular_view/src/SetSequenceOriginDialog.cpp  |    2 +-
 .../circular_view/src/SetSequenceOriginDialog.h    |    2 +-
 .../circular_view/src/ShiftSequenceStartTask.cpp   |    2 +-
 .../circular_view/src/ShiftSequenceStartTask.h     |    2 +-
 src/plugins/circular_view/transl/english.ts        |   52 +-
 src/plugins/circular_view/transl/russian.ts        |   52 +-
 src/plugins/cuda_support/src/CudaSupportPlugin.cpp |    2 +-
 src/plugins/cuda_support/src/CudaSupportPlugin.h   |    2 +-
 .../src/CudaSupportSettingsController.cpp          |    2 +-
 .../src/CudaSupportSettingsController.h            |   13 +-
 src/plugins/dbi_bam/dbi_bam.pri                    |    8 +-
 src/plugins/dbi_bam/src/Alignment.cpp              |    2 +-
 src/plugins/dbi_bam/src/Alignment.h                |   10 +-
 src/plugins/dbi_bam/src/BAMDbiPlugin.cpp           |    6 +-
 src/plugins/dbi_bam/src/BAMDbiPlugin.h             |    4 +-
 src/plugins/dbi_bam/src/BAMFormat.cpp              |    9 +-
 src/plugins/dbi_bam/src/BAMFormat.h                |    4 +-
 src/plugins/dbi_bam/src/BaiReader.cpp              |    2 +-
 src/plugins/dbi_bam/src/BaiReader.h                |    2 +-
 src/plugins/dbi_bam/src/BaiWriter.cpp              |    2 +-
 src/plugins/dbi_bam/src/BaiWriter.h                |    2 +-
 src/plugins/dbi_bam/src/BgzfReader.cpp             |    2 +-
 src/plugins/dbi_bam/src/BgzfReader.h               |    2 +-
 src/plugins/dbi_bam/src/BgzfWriter.cpp             |    2 +-
 src/plugins/dbi_bam/src/BgzfWriter.h               |    2 +-
 src/plugins/dbi_bam/src/CancelledException.cpp     |    2 +-
 src/plugins/dbi_bam/src/CancelledException.h       |    2 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp  |   17 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h    |    2 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteDialog.ui   |   21 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteTask.cpp    |    2 +-
 src/plugins/dbi_bam/src/ConvertToSQLiteTask.h      |    2 +-
 src/plugins/dbi_bam/src/Dbi.cpp                    |   49 +-
 src/plugins/dbi_bam/src/Dbi.h                      |    6 +-
 src/plugins/dbi_bam/src/Exception.cpp              |    2 +-
 src/plugins/dbi_bam/src/Exception.h                |    4 +-
 src/plugins/dbi_bam/src/Header.cpp                 |    2 +-
 src/plugins/dbi_bam/src/Header.h                   |    8 +-
 src/plugins/dbi_bam/src/IOException.cpp            |    2 +-
 src/plugins/dbi_bam/src/IOException.h              |    2 +-
 src/plugins/dbi_bam/src/Index.cpp                  |    2 +-
 src/plugins/dbi_bam/src/Index.h                    |    4 +-
 src/plugins/dbi_bam/src/InvalidFormatException.cpp |    2 +-
 src/plugins/dbi_bam/src/InvalidFormatException.h   |    2 +-
 src/plugins/dbi_bam/src/LoadBamInfoTask.cpp        |    2 +-
 src/plugins/dbi_bam/src/LoadBamInfoTask.h          |    2 +-
 src/plugins/dbi_bam/src/PrepareToImportTask.cpp    |    4 +-
 src/plugins/dbi_bam/src/PrepareToImportTask.h      |    2 +-
 src/plugins/dbi_bam/src/Reader.cpp                 |    2 +-
 src/plugins/dbi_bam/src/Reader.h                   |    2 +-
 src/plugins/dbi_bam/src/SamReader.cpp              |    6 +-
 src/plugins/dbi_bam/src/SamReader.h                |    2 +-
 src/plugins/dbi_bam/src/SamtoolsBasedDbi.cpp       |   15 +-
 src/plugins/dbi_bam/src/SamtoolsBasedDbi.h         |    4 +-
 src/plugins/dbi_bam/src/VirtualOffset.cpp          |    2 +-
 src/plugins/dbi_bam/src/VirtualOffset.h            |    2 +-
 src/plugins/dbi_bam/transl/english.ts              |    8 +-
 src/plugins/dbi_bam/transl/russian.ts              |    8 +-
 src/plugins/dna_export/dna_export.pro              |   21 +-
 src/plugins/dna_export/src/BaseContentDialog.ui    |  277 -
 .../dna_export/src/CSVColumnConfiguration.h        |    4 +-
 .../src/CSVColumnConfigurationDialog.cpp           |   13 +-
 .../dna_export/src/CSVColumnConfigurationDialog.h  |    2 +-
 src/plugins/dna_export/src/DNAExportPlugin.cpp     |   28 +-
 src/plugins/dna_export/src/DNAExportPlugin.h       |   13 +-
 .../dna_export/src/DNAExportPluginTests.cpp        |   71 +-
 src/plugins/dna_export/src/DNAExportPluginTests.h  |   10 +-
 .../dna_export/src/DNASequenceGenerator.cpp        |   37 +-
 src/plugins/dna_export/src/DNASequenceGenerator.h  |   12 +-
 .../dna_export/src/DNASequenceGeneratorDialog.cpp  |  263 +-
 .../dna_export/src/DNASequenceGeneratorDialog.h    |   23 +-
 .../dna_export/src/DNASequenceGeneratorDialog.ui   |  253 +-
 .../dna_export/src/ExportAlignmentViewItems.cpp    |   30 +-
 .../dna_export/src/ExportAlignmentViewItems.h      |    7 +-
 .../dna_export/src/ExportBlastResultDialog.cpp     |    6 +-
 .../dna_export/src/ExportBlastResultDialog.h       |    2 +-
 .../dna_export/src/ExportChromatogramDialog.cpp    |    4 +-
 .../dna_export/src/ExportChromatogramDialog.h      |    2 +-
 src/plugins/dna_export/src/ExportMSA2MSADialog.cpp |    6 +-
 src/plugins/dna_export/src/ExportMSA2MSADialog.h   |    2 +-
 .../dna_export/src/ExportMSA2SequencesDialog.cpp   |   11 +-
 .../dna_export/src/ExportMSA2SequencesDialog.h     |    6 +-
 .../dna_export/src/ExportProjectViewItems.cpp      |   79 +-
 .../dna_export/src/ExportProjectViewItems.h        |    4 +-
 .../dna_export/src/ExportQualityScoresTask.cpp     |    6 +-
 .../dna_export/src/ExportQualityScoresTask.h       |    4 +-
 .../dna_export/src/ExportQualityScoresWorker.cpp   |    2 +-
 .../dna_export/src/ExportQualityScoresWorker.h     |    2 +-
 .../src/ExportSelectedSeqRegionsTask.cpp           |    4 +-
 .../dna_export/src/ExportSelectedSeqRegionsTask.h  |    2 +-
 src/plugins/dna_export/src/ExportSequenceTask.cpp  |   12 +-
 src/plugins/dna_export/src/ExportSequenceTask.h    |    2 +-
 .../dna_export/src/ExportSequenceViewItems.cpp     |   58 +-
 .../dna_export/src/ExportSequenceViewItems.h       |   12 +-
 .../dna_export/src/ExportSequences2MSADialog.cpp   |    6 +-
 .../dna_export/src/ExportSequences2MSADialog.h     |    2 +-
 .../dna_export/src/ExportSequencesDialog.cpp       |    6 +-
 src/plugins/dna_export/src/ExportSequencesDialog.h |    2 +-
 .../dna_export/src/ExportSequencesDialog.ui        |   80 +-
 src/plugins/dna_export/src/ExportTasks.cpp         |   33 +-
 src/plugins/dna_export/src/ExportTasks.h           |   20 +-
 src/plugins/dna_export/src/ExportUtils.cpp         |   34 +-
 src/plugins/dna_export/src/ExportUtils.h           |    7 +-
 src/plugins/dna_export/src/GenerateDNAWorker.cpp   |   36 +-
 src/plugins/dna_export/src/GenerateDNAWorker.h     |    2 +-
 .../dna_export/src/GetSequenceByIdDialog.cpp       |   18 +-
 src/plugins/dna_export/src/GetSequenceByIdDialog.h |    2 +-
 .../dna_export/src/GetSequenceByIdDialog.ui        |   15 +-
 .../src/ImportAnnotationsFromCSVDialog.cpp         |    4 +-
 .../src/ImportAnnotationsFromCSVDialog.h           |    2 +-
 .../src/ImportAnnotationsFromCSVTask.cpp           |    8 +-
 .../dna_export/src/ImportAnnotationsFromCSVTask.h  |    8 +-
 .../dna_export/src/ImportQualityScoresTask.cpp     |    6 +-
 .../dna_export/src/ImportQualityScoresTask.h       |   10 +-
 .../dna_export/src/ImportQualityScoresWorker.cpp   |   33 +-
 .../dna_export/src/ImportQualityScoresWorker.h     |    2 +-
 src/plugins/dna_export/src/McaEditorContext.cpp    |   73 +
 src/plugins/dna_export/src/McaEditorContext.h      |   44 +
 .../dna_export/src/dialogs/ExportMca2MsaDialog.cpp |   81 +
 .../dna_export/src/dialogs/ExportMca2MsaDialog.h   |   52 +
 .../dna_export/src/dialogs/ExportMca2MsaDialog.ui  |  134 +
 .../dna_export/src/tasks/ConvertMca2MsaTask.cpp    |   66 +
 .../dna_export/src/tasks/ConvertMca2MsaTask.h      |   54 +
 .../dna_export/src/tasks/ExportMca2MsaTask.cpp     |   69 +
 .../dna_export/src/tasks/ExportMca2MsaTask.h       |   53 +
 src/plugins/dna_export/transl/english.ts           |  539 +-
 src/plugins/dna_export/transl/russian.ts           |  564 +-
 src/plugins/dna_flexibility/src/DNAFlexDialog.cpp  |   17 +-
 src/plugins/dna_flexibility/src/DNAFlexDialog.h    |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexGraph.cpp   |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexGraph.h     |    2 +-
 .../dna_flexibility/src/DNAFlexGraphAlgorithm.cpp  |    2 +-
 .../dna_flexibility/src/DNAFlexGraphAlgorithm.h    |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexPlugin.cpp  |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexPlugin.h    |    2 +-
 src/plugins/dna_flexibility/src/DNAFlexTask.cpp    |    4 +-
 src/plugins/dna_flexibility/src/DNAFlexTask.h      |    2 +-
 .../dna_flexibility/src/FindHighFlexRegions.cpp    |    2 +-
 .../dna_flexibility/src/FindHighFlexRegions.h      |    2 +-
 .../src/FindHighFlexRegionsAlgorithm.cpp           |    2 +-
 .../src/FindHighFlexRegionsAlgorithm.h             |    2 +-
 src/plugins/dna_flexibility/src/HighFlexResult.h   |    2 +-
 .../dna_flexibility/src/HighFlexSettings.cpp       |    2 +-
 src/plugins/dna_flexibility/src/HighFlexSettings.h |    2 +-
 src/plugins/dna_flexibility/transl/english.ts      |   10 +-
 src/plugins/dna_flexibility/transl/russian.ts      |   10 +-
 src/plugins/dna_graphpack/src/BaseContentGraph.cpp |    2 +-
 src/plugins/dna_graphpack/src/BaseContentGraph.h   |   12 +-
 src/plugins/dna_graphpack/src/CumulativeSkew.cpp   |    2 +-
 src/plugins/dna_graphpack/src/CumulativeSkew.h     |   12 +-
 .../dna_graphpack/src/DNAGraphPackPlugin.cpp       |    2 +-
 src/plugins/dna_graphpack/src/DNAGraphPackPlugin.h |   13 +-
 src/plugins/dna_graphpack/src/DeviationGraph.cpp   |    2 +-
 src/plugins/dna_graphpack/src/DeviationGraph.h     |   14 +-
 src/plugins/dna_graphpack/src/EntropyAlgorithm.cpp |    2 +-
 src/plugins/dna_graphpack/src/EntropyAlgorithm.h   |   12 +-
 src/plugins/dna_graphpack/src/GCFramePlot.cpp      |    2 +-
 src/plugins/dna_graphpack/src/GCFramePlot.h        |   12 +-
 .../src/KarlinSignatureDifferenceGraph.cpp         |    2 +-
 .../src/KarlinSignatureDifferenceGraph.h           |   12 +-
 src/plugins/dna_stat/dna_stat.pri                  |    2 +-
 .../dna_stat/src/DNAStatMSAProfileDialog.cpp       |   88 +-
 src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h |   12 +-
 .../dna_stat/src/DNAStatMSAProfileDialog.ui        |    6 +-
 src/plugins/dna_stat/src/DNAStatPlugin.cpp         |   20 +-
 src/plugins/dna_stat/src/DNAStatPlugin.h           |    2 +-
 src/plugins/dna_stat/src/DNAStatProfileTask.cpp    |    2 +-
 src/plugins/dna_stat/src/DNAStatProfileTask.h      |    4 +-
 src/plugins/dna_stat/src/DNAStatsWindow.cpp        |   19 +-
 src/plugins/dna_stat/src/DNAStatsWindow.h          |    9 +-
 .../src/DistanceMatrixMSAProfileDialog.cpp         |  101 +-
 .../dna_stat/src/DistanceMatrixMSAProfileDialog.h  |   10 +-
 .../dna_stat/src/DistanceMatrixMSAProfileDialog.ui |    6 +-
 src/plugins/dna_stat/transl/english.ts             |  178 +-
 src/plugins/dna_stat/transl/russian.ts             |  178 +-
 src/plugins/dotplot/src/DotPlotClasses.cpp         |   12 +-
 src/plugins/dotplot/src/DotPlotClasses.h           |   30 +-
 src/plugins/dotplot/src/DotPlotDialog.cpp          |   11 +-
 src/plugins/dotplot/src/DotPlotDialog.h            |    9 +-
 src/plugins/dotplot/src/DotPlotFilesDialog.cpp     |    6 +-
 src/plugins/dotplot/src/DotPlotFilesDialog.h       |    2 +-
 src/plugins/dotplot/src/DotPlotFilterDialog.cpp    |    7 +-
 src/plugins/dotplot/src/DotPlotFilterDialog.h      |    6 +-
 src/plugins/dotplot/src/DotPlotImageExportTask.cpp |    2 +-
 src/plugins/dotplot/src/DotPlotImageExportTask.h   |    2 +-
 src/plugins/dotplot/src/DotPlotPlugin.cpp          |   45 +-
 src/plugins/dotplot/src/DotPlotPlugin.h            |    5 +-
 src/plugins/dotplot/src/DotPlotSplitter.cpp        |   14 +-
 src/plugins/dotplot/src/DotPlotSplitter.h          |    4 +-
 src/plugins/dotplot/src/DotPlotTasks.cpp           |   12 +-
 src/plugins/dotplot/src/DotPlotTasks.h             |   74 +-
 src/plugins/dotplot/src/DotPlotWidget.cpp          |  113 +-
 src/plugins/dotplot/src/DotPlotWidget.h            |   25 +-
 src/plugins/dotplot/transl/english.ts              |  156 +-
 src/plugins/dotplot/transl/russian.ts              |  156 +-
 src/plugins/enzymes/src/CloningUtilTasks.cpp       |    4 +-
 src/plugins/enzymes/src/CloningUtilTasks.h         |    8 +-
 .../enzymes/src/ConstructMoleculeDialog.cpp        |   18 +-
 src/plugins/enzymes/src/ConstructMoleculeDialog.h  |    2 +-
 src/plugins/enzymes/src/CreateFragmentDialog.cpp   |   21 +-
 src/plugins/enzymes/src/CreateFragmentDialog.h     |   16 +-
 src/plugins/enzymes/src/DNAFragment.cpp            |    2 +-
 src/plugins/enzymes/src/DNAFragment.h              |    4 +-
 src/plugins/enzymes/src/DigestSequenceDialog.cpp   |   13 +-
 src/plugins/enzymes/src/DigestSequenceDialog.h     |   14 +-
 src/plugins/enzymes/src/DigestSequenceDialog.ui    |   26 -
 src/plugins/enzymes/src/EditFragmentDialog.cpp     |   15 +-
 src/plugins/enzymes/src/EditFragmentDialog.h       |    2 +-
 src/plugins/enzymes/src/EnzymesIO.cpp              |    4 +-
 src/plugins/enzymes/src/EnzymesIO.h                |    8 +-
 src/plugins/enzymes/src/EnzymesPlugin.cpp          |    2 +-
 src/plugins/enzymes/src/EnzymesPlugin.h            |    2 +-
 src/plugins/enzymes/src/EnzymesQuery.cpp           |   17 +-
 src/plugins/enzymes/src/EnzymesQuery.h             |    2 +-
 src/plugins/enzymes/src/EnzymesTests.cpp           |   14 +-
 src/plugins/enzymes/src/EnzymesTests.h             |    6 +-
 src/plugins/enzymes/src/FindEnzymesAlgorithm.h     |    6 +-
 src/plugins/enzymes/src/FindEnzymesDialog.cpp      |   12 +-
 src/plugins/enzymes/src/FindEnzymesDialog.h        |    2 +-
 src/plugins/enzymes/src/FindEnzymesTask.cpp        |    2 +-
 src/plugins/enzymes/src/FindEnzymesTask.h          |    8 +-
 src/plugins/enzymes/transl/english.ts              |  210 +-
 src/plugins/enzymes/transl/russian.ts              |  214 +-
 .../external_tool_support.pro                      |   33 +
 .../src/ETSProjectViewItemsContoller.cpp           |    4 +-
 .../src/ETSProjectViewItemsContoller.h             |   11 +-
 .../src/ExternalToolManager.cpp                    |   22 +-
 .../src/ExternalToolManager.h                      |   14 +-
 .../src/ExternalToolSupportL10N.h                  |    8 +-
 .../src/ExternalToolSupportPlugin.cpp              |   35 +-
 .../src/ExternalToolSupportPlugin.h                |    2 +-
 .../src/ExternalToolSupportSettings.cpp            |   38 +-
 .../src/ExternalToolSupportSettings.h              |   14 +-
 .../src/ExternalToolSupportSettingsController.cpp  |   40 +-
 .../src/ExternalToolSupportSettingsController.h    |    8 +-
 .../external_tool_support/src/R/RSupport.cpp       |    8 +-
 src/plugins/external_tool_support/src/R/RSupport.h |    2 +-
 .../external_tool_support/src/RnaSeqCommon.cpp     |    2 +-
 .../external_tool_support/src/RnaSeqCommon.h       |    2 +-
 .../external_tool_support/src/TaskLocalStorage.cpp |    2 +-
 .../external_tool_support/src/TaskLocalStorage.h   |    4 +-
 .../src/bedtools/BedToolsWorkersLibrary.cpp        |   31 +-
 .../src/bedtools/BedToolsWorkersLibrary.h          |    2 +-
 .../src/bedtools/BedtoolsIntersectTask.cpp         |    2 +-
 .../src/bedtools/BedtoolsIntersectTask.h           |    2 +-
 .../src/bedtools/BedtoolsSupport.cpp               |    2 +-
 .../src/bedtools/BedtoolsSupport.h                 |    2 +-
 .../src/bedtools/BedtoolsSupportTask.cpp           |    4 +-
 .../src/bedtools/BedtoolsSupportTask.h             |    2 +-
 .../src/bigWigTools/BedGraphToBigWigTask.cpp       |    6 +-
 .../src/bigWigTools/BedGraphToBigWigTask.h         |    2 +-
 .../src/bigWigTools/BedGraphToBigWigWorker.cpp     |   29 +-
 .../src/bigWigTools/BedGraphToBigWigWorker.h       |    2 +-
 .../src/bigWigTools/BigWigSupport.cpp              |    2 +-
 .../src/bigWigTools/BigWigSupport.h                |    2 +-
 .../src/blast/BlastAllSupport.cpp                  |   70 +-
 .../src/blast/BlastAllSupport.h                    |    5 +-
 .../src/blast/BlastAllSupportRunDialog.cpp         |   39 +-
 .../src/blast/BlastAllSupportRunDialog.h           |   17 +-
 .../src/blast/BlastAllSupportTask.cpp              |   18 +-
 .../src/blast/BlastAllSupportTask.h                |    6 +-
 .../src/blast/BlastAllWorker.cpp                   |    8 +-
 .../src/blast/BlastAllWorker.h                     |    2 +-
 .../src/blast/FormatDBSupport.cpp                  |   10 +-
 .../src/blast/FormatDBSupport.h                    |    2 +-
 .../src/blast/FormatDBSupportRunDialog.cpp         |   19 +-
 .../src/blast/FormatDBSupportRunDialog.h           |    2 +-
 .../src/blast/FormatDBSupportRunDialog.ui          |   35 +-
 .../src/blast/FormatDBSupportTask.cpp              |  116 +-
 .../src/blast/FormatDBSupportTask.h                |   26 +-
 .../src/blast/PrepareInputFastaFilesTask.cpp       |  107 +
 .../src/blast/PrepareInputFastaFilesTask.h         |   54 +
 .../src/blast_plus/AlignToReferenceBlastDialog.cpp |  403 ++
 .../src/blast_plus/AlignToReferenceBlastDialog.h   |  119 +
 .../src/blast_plus/AlignToReferenceBlastDialog.ui  |  235 +
 .../src/blast_plus/AlignToReferenceBlastWorker.cpp |  390 ++
 .../src/blast_plus/AlignToReferenceBlastWorker.h   |  132 +
 .../src/blast_plus/BlastDBCmdDialog.cpp            |    4 +-
 .../src/blast_plus/BlastDBCmdDialog.h              |    2 +-
 .../src/blast_plus/BlastDBCmdDialog.ui             |  196 +-
 .../src/blast_plus/BlastDBCmdSupport.cpp           |    6 +-
 .../src/blast_plus/BlastDBCmdSupport.h             |    2 +-
 .../src/blast_plus/BlastDBCmdSupportTask.cpp       |    2 +-
 .../src/blast_plus/BlastDBCmdSupportTask.h         |    4 +-
 .../src/blast_plus/BlastNPlusSupportTask.cpp       |    6 +-
 .../src/blast_plus/BlastNPlusSupportTask.h         |    2 +-
 .../src/blast_plus/BlastPPlusSupportTask.cpp       |    6 +-
 .../src/blast_plus/BlastPPlusSupportTask.h         |    2 +-
 .../src/blast_plus/BlastPlusSupport.cpp            |   29 +-
 .../src/blast_plus/BlastPlusSupport.h              |    7 +-
 .../src/blast_plus/BlastPlusSupportCommonTask.cpp  |   56 +-
 .../src/blast_plus/BlastPlusSupportCommonTask.h    |    3 +-
 .../src/blast_plus/BlastPlusSupportRunDialog.cpp   |   23 +-
 .../src/blast_plus/BlastPlusSupportRunDialog.h     |    7 +-
 .../src/blast_plus/BlastPlusWorker.cpp             |    8 +-
 .../src/blast_plus/BlastPlusWorker.h               |    2 +-
 .../src/blast_plus/BlastXPlusSupportTask.cpp       |    6 +-
 .../src/blast_plus/BlastXPlusSupportTask.h         |    2 +-
 .../src/blast_plus/RPSBlastSupportTask.cpp         |    4 +-
 .../src/blast_plus/RPSBlastSupportTask.h           |    2 +-
 .../src/blast_plus/TBlastNPlusSupportTask.cpp      |    6 +-
 .../src/blast_plus/TBlastNPlusSupportTask.h        |    2 +-
 .../src/blast_plus/TBlastXPlusSupportTask.cpp      |    6 +-
 .../src/blast_plus/TBlastXPlusSupportTask.h        |    2 +-
 .../align_worker_subtasks/BlastReadsSubTask.cpp    |  371 ++
 .../align_worker_subtasks/BlastReadsSubTask.h      |  134 +
 .../align_worker_subtasks/ComposeResultSubTask.cpp |  386 ++
 .../align_worker_subtasks/ComposeResultSubTask.h   |   83 +
 .../align_worker_subtasks/FormatDBSubTask.cpp      |  123 +
 .../align_worker_subtasks/FormatDBSubTask.h        |   56 +
 .../PrepareReferenceSequenceTask.cpp               |  110 +
 .../PrepareReferenceSequenceTask.h                 |   63 +
 .../RemoveGapsFromSequenceTask.cpp                 |   95 +
 .../RemoveGapsFromSequenceTask.h                   |   68 +
 .../src/bowtie/BowtieSettingsWidget.cpp            |    9 +-
 .../src/bowtie/BowtieSettingsWidget.h              |    2 +-
 .../src/bowtie/BowtieSupport.cpp                   |    2 +-
 .../src/bowtie/BowtieSupport.h                     |    2 +-
 .../src/bowtie/BowtieTask.cpp                      |   18 +-
 .../external_tool_support/src/bowtie/BowtieTask.h  |   10 +-
 .../src/bowtie/BowtieWorker.cpp                    |    2 +-
 .../src/bowtie/BowtieWorker.h                      |    2 +-
 .../src/bowtie/bowtie_tests/bowtieTests.cpp        |   10 +-
 .../src/bowtie/bowtie_tests/bowtieTests.h          |   13 +-
 .../src/bowtie2/Bowtie2SettingsWidget.cpp          |   11 +-
 .../src/bowtie2/Bowtie2SettingsWidget.h            |    2 +-
 .../src/bowtie2/Bowtie2Support.cpp                 |    2 +-
 .../src/bowtie2/Bowtie2Support.h                   |    2 +-
 .../src/bowtie2/Bowtie2Task.cpp                    |    6 +-
 .../src/bowtie2/Bowtie2Task.h                      |    4 +-
 .../src/bowtie2/Bowtie2Worker.cpp                  |    2 +-
 .../src/bowtie2/Bowtie2Worker.h                    |    2 +-
 .../src/bwa/BwaMemSettings.ui                      |  684 ++-
 .../external_tool_support/src/bwa/BwaMemWorker.cpp |   12 +-
 .../external_tool_support/src/bwa/BwaMemWorker.h   |    3 +-
 .../src/bwa/BwaSettingsWidget.cpp                  |    4 +-
 .../src/bwa/BwaSettingsWidget.h                    |    2 +-
 .../external_tool_support/src/bwa/BwaSupport.cpp   |    2 +-
 .../external_tool_support/src/bwa/BwaSupport.h     |    2 +-
 .../external_tool_support/src/bwa/BwaTask.cpp      |   30 +-
 .../external_tool_support/src/bwa/BwaTask.h        |    2 +-
 .../external_tool_support/src/bwa/BwaWorker.cpp    |    2 +-
 .../external_tool_support/src/bwa/BwaWorker.h      |    2 +-
 .../src/bwa/bwa_tests/bwaTests.cpp                 |   10 +-
 .../src/bwa/bwa_tests/bwaTests.h                   |   13 +-
 .../external_tool_support/src/cap3/CAP3Support.cpp |    8 +-
 .../external_tool_support/src/cap3/CAP3Support.h   |    2 +-
 .../src/cap3/CAP3SupportDialog.cpp                 |    4 +-
 .../src/cap3/CAP3SupportDialog.h                   |    3 +-
 .../src/cap3/CAP3SupportTask.cpp                   |    2 +-
 .../src/cap3/CAP3SupportTask.h                     |    6 +-
 .../external_tool_support/src/cap3/CAP3Worker.cpp  |   16 +-
 .../external_tool_support/src/cap3/CAP3Worker.h    |    4 +-
 .../src/ceas/CEASReportWorker.cpp                  |    2 +-
 .../src/ceas/CEASReportWorker.h                    |    2 +-
 .../src/ceas/CEASSettings.cpp                      |    2 +-
 .../external_tool_support/src/ceas/CEASSettings.h  |    2 +-
 .../external_tool_support/src/ceas/CEASSupport.cpp |    2 +-
 .../external_tool_support/src/ceas/CEASSupport.h   |    2 +-
 .../src/ceas/CEASSupportTask.cpp                   |    6 +-
 .../src/ceas/CEASSupportTask.h                     |    2 +-
 .../src/clustalo/ClustalOSupport.cpp               |   31 +-
 .../src/clustalo/ClustalOSupport.h                 |    2 +-
 .../src/clustalo/ClustalOSupportRunDialog.cpp      |   12 +-
 .../src/clustalo/ClustalOSupportRunDialog.h        |    6 +-
 .../src/clustalo/ClustalOSupportTask.cpp           |   80 +-
 .../src/clustalo/ClustalOSupportTask.h             |   14 +-
 .../src/clustalo/ClustalOWorker.cpp                |   16 +-
 .../src/clustalo/ClustalOWorker.h                  |    2 +-
 .../src/clustalw/ClustalWSupport.cpp               |   43 +-
 .../src/clustalw/ClustalWSupport.h                 |    2 +-
 .../src/clustalw/ClustalWSupportRunDialog.cpp      |   14 +-
 .../src/clustalw/ClustalWSupportRunDialog.h        |    6 +-
 .../src/clustalw/ClustalWSupportRunDialog.ui       |   82 +-
 .../src/clustalw/ClustalWSupportTask.cpp           |   80 +-
 .../src/clustalw/ClustalWSupportTask.h             |   14 +-
 .../src/clustalw/ClustalWWorker.cpp                |   53 +-
 .../src/clustalw/ClustalWWorker.h                  |    4 +-
 .../src/conduct_go/ConductGOSettings.cpp           |    2 +-
 .../src/conduct_go/ConductGOSettings.h             |    2 +-
 .../src/conduct_go/ConductGOSupport.cpp            |    2 +-
 .../src/conduct_go/ConductGOSupport.h              |    2 +-
 .../src/conduct_go/ConductGOTask.cpp               |    4 +-
 .../src/conduct_go/ConductGOTask.h                 |    2 +-
 .../src/conduct_go/ConductGOWorker.cpp             |    8 +-
 .../src/conduct_go/ConductGOWorker.h               |    2 +-
 .../conservation_plot/ConservationPlotSettings.cpp |    2 +-
 .../conservation_plot/ConservationPlotSettings.h   |    2 +-
 .../conservation_plot/ConservationPlotSupport.cpp  |    2 +-
 .../conservation_plot/ConservationPlotSupport.h    |    2 +-
 .../src/conservation_plot/ConservationPlotTask.cpp |    6 +-
 .../src/conservation_plot/ConservationPlotTask.h   |    2 +-
 .../conservation_plot/ConservationPlotWorker.cpp   |    4 +-
 .../src/conservation_plot/ConservationPlotWorker.h |    2 +-
 .../src/cufflinks/CuffdiffSupportTask.cpp          |    2 +-
 .../src/cufflinks/CuffdiffSupportTask.h            |    2 +-
 .../src/cufflinks/CuffdiffWorker.cpp               |   16 +-
 .../src/cufflinks/CuffdiffWorker.h                 |    2 +-
 .../src/cufflinks/CufflinksSettings.cpp            |    2 +-
 .../src/cufflinks/CufflinksSettings.h              |    2 +-
 .../src/cufflinks/CufflinksSupport.cpp             |    2 +-
 .../src/cufflinks/CufflinksSupport.h               |    2 +-
 .../src/cufflinks/CufflinksSupportTask.cpp         |    6 +-
 .../src/cufflinks/CufflinksSupportTask.h           |    2 +-
 .../src/cufflinks/CufflinksWorker.cpp              |   12 +-
 .../src/cufflinks/CufflinksWorker.h                |    2 +-
 .../src/cufflinks/CuffmergeSupportTask.cpp         |    4 +-
 .../src/cufflinks/CuffmergeSupportTask.h           |    2 +-
 .../src/cufflinks/CuffmergeWorker.cpp              |   10 +-
 .../src/cufflinks/CuffmergeWorker.h                |    2 +-
 .../src/cufflinks/GffreadSupportTask.cpp           |    2 +-
 .../src/cufflinks/GffreadSupportTask.h             |    2 +-
 .../src/cufflinks/GffreadWorker.cpp                |    8 +-
 .../src/cufflinks/GffreadWorker.h                  |    2 +-
 .../src/cutadapt/CutadaptSupport.cpp               |    2 +-
 .../src/cutadapt/CutadaptSupport.h                 |    2 +-
 .../src/cutadapt/CutadaptWorker.cpp                |   29 +-
 .../src/cutadapt/CutadaptWorker.h                  |    2 +-
 .../src/fastqc/FastqcSupport.cpp                   |    2 +-
 .../src/fastqc/FastqcSupport.h                     |    2 +-
 .../src/fastqc/FastqcTask.cpp                      |    6 +-
 .../external_tool_support/src/fastqc/FastqcTask.h  |    2 +-
 .../src/fastqc/FastqcWorker.cpp                    |   32 +-
 .../src/fastqc/FastqcWorker.h                      |    2 +-
 .../src/hmmer/ConvertAlignment2StockholmTask.cpp   |   12 +-
 .../src/hmmer/ConvertAlignment2StockholmTask.h     |    3 +-
 .../src/hmmer/HmmerBuildDialog.cpp                 |   19 +-
 .../src/hmmer/HmmerBuildDialog.h                   |   10 +-
 .../src/hmmer/HmmerBuildFromFileTask.cpp           |    2 +-
 .../src/hmmer/HmmerBuildFromFileTask.h             |    3 +-
 .../src/hmmer/HmmerBuildFromMsaTask.cpp            |    9 +-
 .../src/hmmer/HmmerBuildFromMsaTask.h              |    8 +-
 .../src/hmmer/HmmerBuildSettings.cpp               |    2 +-
 .../src/hmmer/HmmerBuildSettings.h                 |    2 +-
 .../src/hmmer/HmmerBuildTask.cpp                   |    2 +-
 .../src/hmmer/HmmerBuildTask.h                     |    3 +-
 .../src/hmmer/HmmerBuildTaskTest.cpp               |  464 ++
 .../src/hmmer/HmmerBuildTaskTest.h                 |  105 +
 .../src/hmmer/HmmerBuildWorker.cpp                 |   14 +-
 .../src/hmmer/HmmerBuildWorker.h                   |    2 +-
 .../src/hmmer/HmmerParseSearchResultsTask.cpp      |    2 +-
 .../src/hmmer/HmmerParseSearchResultsTask.h        |    3 +-
 .../src/hmmer/HmmerSearchDialog.cpp                |   22 +-
 .../src/hmmer/HmmerSearchDialog.h                  |    6 +-
 .../src/hmmer/HmmerSearchSettings.cpp              |    3 +-
 .../src/hmmer/HmmerSearchSettings.h                |    3 +-
 .../src/hmmer/HmmerSearchTask.cpp                  |   29 +-
 .../src/hmmer/HmmerSearchTask.h                    |    3 +-
 .../src/hmmer/HmmerSearchTaskTest.cpp              |  549 ++
 .../src/hmmer/HmmerSearchTaskTest.h                |  145 +
 .../src/hmmer/HmmerSearchWorker.cpp                |    3 +-
 .../src/hmmer/HmmerSearchWorker.h                  |    2 +-
 .../src/hmmer/HmmerSupport.cpp                     |   62 +-
 .../external_tool_support/src/hmmer/HmmerSupport.h |    2 +-
 .../external_tool_support/src/hmmer/HmmerTests.h   |   51 +
 .../src/hmmer/PhmmerSearchDialog.cpp               |   22 +-
 .../src/hmmer/PhmmerSearchDialog.h                 |    7 +-
 .../src/hmmer/PhmmerSearchSettings.cpp             |    2 +-
 .../src/hmmer/PhmmerSearchSettings.h               |    2 +-
 .../src/hmmer/PhmmerSearchTask.cpp                 |   34 +-
 .../src/hmmer/PhmmerSearchTask.h                   |    5 +-
 .../src/hmmer/PhmmerSearchTaskTest.cpp             |  273 +
 .../src/hmmer/PhmmerSearchTaskTest.h               |   96 +
 .../external_tool_support/src/java/JavaSupport.cpp |   36 +-
 .../external_tool_support/src/java/JavaSupport.h   |    9 +-
 .../src/macs/MACSSettings.cpp                      |    2 +-
 .../external_tool_support/src/macs/MACSSettings.h  |    2 +-
 .../external_tool_support/src/macs/MACSSupport.cpp |    2 +-
 .../external_tool_support/src/macs/MACSSupport.h   |    2 +-
 .../external_tool_support/src/macs/MACSTask.cpp    |    4 +-
 .../external_tool_support/src/macs/MACSTask.h      |    2 +-
 .../external_tool_support/src/macs/MACSWorker.cpp  |   16 +-
 .../external_tool_support/src/macs/MACSWorker.h    |    2 +-
 .../src/mafft/MAFFTSupport.cpp                     |   28 +-
 .../external_tool_support/src/mafft/MAFFTSupport.h |    2 +-
 .../src/mafft/MAFFTSupportRunDialog.cpp            |    8 +-
 .../src/mafft/MAFFTSupportRunDialog.h              |    2 +-
 .../src/mafft/MAFFTSupportTask.cpp                 |   64 +-
 .../src/mafft/MAFFTSupportTask.h                   |   16 +-
 .../src/mafft/MAFFTWorker.cpp                      |   51 +-
 .../external_tool_support/src/mafft/MAFFTWorker.h  |    4 +-
 .../src/mafft/MafftAddToAlignmentTask.cpp          |   76 +-
 .../src/mafft/MafftAddToAlignmentTask.h            |    6 +-
 .../src/mrbayes/MrBayesDialogWidget.cpp            |   10 +-
 .../src/mrbayes/MrBayesDialogWidget.h              |    6 +-
 .../src/mrbayes/MrBayesSupport.cpp                 |    6 +-
 .../src/mrbayes/MrBayesSupport.h                   |    6 +-
 .../src/mrbayes/MrBayesTask.cpp                    |   10 +-
 .../src/mrbayes/MrBayesTask.h                      |    8 +-
 .../src/mrbayes/MrBayesTests.cpp                   |   18 +-
 .../src/mrbayes/MrBayesTests.h                     |    8 +-
 .../src/peak2gene/Gene2PeakFormatLoader.cpp        |    2 +-
 .../src/peak2gene/Gene2PeakFormatLoader.h          |    3 +-
 .../src/peak2gene/Peak2GeneFormatLoader.cpp        |    2 +-
 .../src/peak2gene/Peak2GeneFormatLoader.h          |    3 +-
 .../src/peak2gene/Peak2GeneSettings.cpp            |    2 +-
 .../src/peak2gene/Peak2GeneSettings.h              |    2 +-
 .../src/peak2gene/Peak2GeneSupport.cpp             |    2 +-
 .../src/peak2gene/Peak2GeneSupport.h               |    2 +-
 .../src/peak2gene/Peak2GeneTask.cpp                |    4 +-
 .../src/peak2gene/Peak2GeneTask.h                  |    2 +-
 .../src/peak2gene/Peak2GeneWorker.cpp              |    2 +-
 .../src/peak2gene/Peak2GeneWorker.h                |    2 +-
 .../src/peak2gene/TabulatedFormatReader.cpp        |    2 +-
 .../src/peak2gene/TabulatedFormatReader.h          |    4 +-
 .../external_tool_support/src/perl/PerlSupport.cpp |    2 +-
 .../external_tool_support/src/perl/PerlSupport.h   |    2 +-
 .../external_tool_support/src/phyml/PhyMLDialog.ui |  613 ++-
 .../src/phyml/PhyMLDialogWidget.cpp                |  170 +-
 .../src/phyml/PhyMLDialogWidget.h                  |   18 +-
 .../src/phyml/PhyMLSupport.cpp                     |    6 +-
 .../external_tool_support/src/phyml/PhyMLSupport.h |    6 +-
 .../external_tool_support/src/phyml/PhyMLTask.cpp  |   10 +-
 .../external_tool_support/src/phyml/PhyMLTask.h    |    8 +-
 .../external_tool_support/src/phyml/PhyMLTests.cpp |   18 +-
 .../external_tool_support/src/phyml/PhyMLTests.h   |   12 +-
 .../src/python/PythonSupport.cpp                   |    9 +-
 .../src/python/PythonSupport.h                     |    2 +-
 .../src/samtools/BcfToolsSupport.cpp               |    2 +-
 .../src/samtools/BcfToolsSupport.h                 |    2 +-
 .../src/samtools/SamToolsExtToolSupport.cpp        |    2 +-
 .../src/samtools/SamToolsExtToolSupport.h          |    2 +-
 .../src/samtools/TabixSupport.cpp                  |    2 +-
 .../src/samtools/TabixSupport.h                    |    2 +-
 .../src/samtools/TabixSupportTask.cpp              |   63 +-
 .../src/samtools/TabixSupportTask.h                |   18 +-
 .../src/seqpos/SeqPosSettings.cpp                  |    2 +-
 .../src/seqpos/SeqPosSettings.h                    |    2 +-
 .../src/seqpos/SeqPosSupport.cpp                   |    2 +-
 .../src/seqpos/SeqPosSupport.h                     |    2 +-
 .../src/seqpos/SeqPosTask.cpp                      |    6 +-
 .../external_tool_support/src/seqpos/SeqPosTask.h  |    2 +-
 .../src/seqpos/SeqPosWorker.cpp                    |    8 +-
 .../src/seqpos/SeqPosWorker.h                      |    8 +-
 .../src/snpeff/SnpEffDatabaseDelegate.cpp          |  189 +
 .../src/snpeff/SnpEffDatabaseDelegate.h            |   96 +
 .../src/snpeff/SnpEffDatabaseDialog.ui             |   94 +
 .../src/snpeff/SnpEffDatabaseListModel.cpp         |  105 +
 .../src/snpeff/SnpEffDatabaseListModel.h           |   63 +
 .../src/snpeff/SnpEffDatabaseListTask.cpp          |   66 +
 .../src/snpeff/SnpEffDatabaseListTask.h            |   45 +
 .../src/snpeff/SnpEffSupport.cpp                   |   30 +-
 .../src/snpeff/SnpEffSupport.h                     |   10 +-
 .../src/snpeff/SnpEffTask.cpp                      |   18 +-
 .../external_tool_support/src/snpeff/SnpEffTask.h  |    6 +-
 .../src/snpeff/SnpEffWorker.cpp                    |   35 +-
 .../src/snpeff/SnpEffWorker.h                      |    7 +-
 .../src/spades/SpadesSettings.ui                   |    2 +-
 .../src/spades/SpadesSettingsWidget.cpp            |    4 +-
 .../src/spades/SpadesSettingsWidget.h              |    2 +-
 .../src/spades/SpadesSupport.cpp                   |    2 +-
 .../src/spades/SpadesSupport.h                     |    2 +-
 .../src/spades/SpadesTask.cpp                      |   15 +-
 .../external_tool_support/src/spades/SpadesTask.h  |    4 +-
 .../src/spades/SpadesWorker.cpp                    |   17 +-
 .../src/spades/SpadesWorker.h                      |    2 +-
 .../src/spidey/SpideySupport.cpp                   |    4 +-
 .../src/spidey/SpideySupport.h                     |    2 +-
 .../src/spidey/SpideySupportTask.cpp               |    2 +-
 .../src/spidey/SpideySupportTask.h                 |    6 +-
 .../src/tcoffee/TCoffeeSupport.cpp                 |   28 +-
 .../src/tcoffee/TCoffeeSupport.h                   |    2 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.cpp        |    8 +-
 .../src/tcoffee/TCoffeeSupportRunDialog.h          |    2 +-
 .../src/tcoffee/TCoffeeSupportTask.cpp             |   74 +-
 .../src/tcoffee/TCoffeeSupportTask.h               |   14 +-
 .../src/tcoffee/TCoffeeWorker.cpp                  |   50 +-
 .../src/tcoffee/TCoffeeWorker.h                    |    2 +-
 .../src/tophat/TopHatSettings.cpp                  |    2 +-
 .../src/tophat/TopHatSettings.h                    |    4 +-
 .../src/tophat/TopHatSupport.cpp                   |    2 +-
 .../src/tophat/TopHatSupport.h                     |    2 +-
 .../src/tophat/TopHatSupportTask.cpp               |    4 +-
 .../src/tophat/TopHatSupportTask.h                 |    2 +-
 .../src/tophat/TopHatWorker.cpp                    |   22 +-
 .../src/tophat/TopHatWorker.h                      |    2 +-
 .../src/utils/AlignMsaAction.cpp                   |    4 +-
 .../src/utils/AlignMsaAction.h                     |    2 +-
 .../src/utils/BaseShortReadsAlignerWorker.cpp      |   19 +-
 .../src/utils/BaseShortReadsAlignerWorker.h        |    3 +-
 .../src/utils/BlastAllSupportDialog.ui             |  375 +-
 .../src/utils/BlastDBSelectorWidget.ui             |   11 +-
 .../src/utils/BlastDBSelectorWidgetController.cpp  |    4 +-
 .../src/utils/BlastDBSelectorWidgetController.h    |    2 +-
 .../src/utils/BlastRunCommonDialog.cpp             |   20 +-
 .../src/utils/BlastRunCommonDialog.h               |    2 +-
 .../src/utils/BlastTaskSettings.cpp                |    2 +-
 .../src/utils/BlastTaskSettings.h                  |    2 +-
 .../src/utils/CistromeDelegate.cpp                 |    9 +-
 .../src/utils/CistromeDelegate.h                   |    2 +-
 .../src/utils/ExportTasks.cpp                      |   29 +-
 .../external_tool_support/src/utils/ExportTasks.h  |   14 +-
 .../src/utils/ExternalToolSearchTask.cpp           |    8 +-
 .../src/utils/ExternalToolSearchTask.h             |    2 +-
 .../src/utils/ExternalToolSupportAction.cpp        |    2 +-
 .../src/utils/ExternalToolSupportAction.h          |    2 +-
 .../src/utils/ExternalToolUtils.cpp                |   46 +-
 .../src/utils/ExternalToolUtils.h                  |    9 +-
 .../src/utils/ExternalToolValidateTask.cpp         |    6 +-
 .../src/utils/ExternalToolValidateTask.h           |    4 +-
 .../src/utils/OutputCollector.cpp                  |   41 +
 .../src/utils/OutputCollector.h                    |   43 +
 .../src/vcftools/VcfConsensusSupport.cpp           |    2 +-
 .../src/vcftools/VcfConsensusSupport.h             |    2 +-
 .../src/vcftools/VcfConsensusSupportTask.cpp       |   13 +-
 .../src/vcftools/VcfConsensusSupportTask.h         |    2 +-
 .../src/vcftools/VcfConsensusWorker.cpp            |    2 +-
 .../src/vcftools/VcfConsensusWorker.h              |    2 +-
 .../src/vcfutils/VcfutilsSupport.cpp               |    2 +-
 .../src/vcfutils/VcfutilsSupport.h                 |    2 +-
 .../external_tool_support/transl/english.ts        | 3084 +++++++----
 .../external_tool_support/transl/russian.ts        | 3089 ++++++-----
 .../src/BuildSArraySettingsWidget.cpp              |    2 +-
 .../genome_aligner/src/BuildSArraySettingsWidget.h |    2 +-
 .../genome_aligner/src/BuildSuffixArraySettings.ui |   36 +-
 src/plugins/genome_aligner/src/DataBunch.cpp       |    2 +-
 src/plugins/genome_aligner/src/DataBunch.h         |    2 +-
 .../src/GenomeAlignerCMDLineTask.cpp               |   10 +-
 .../genome_aligner/src/GenomeAlignerCMDLineTask.h  |    2 +-
 .../genome_aligner/src/GenomeAlignerFindTask.cpp   |    2 +-
 .../genome_aligner/src/GenomeAlignerFindTask.h     |   21 +-
 src/plugins/genome_aligner/src/GenomeAlignerIO.cpp |   26 +-
 src/plugins/genome_aligner/src/GenomeAlignerIO.h   |   12 +-
 .../genome_aligner/src/GenomeAlignerIndex.cpp      |    4 +-
 .../genome_aligner/src/GenomeAlignerIndex.h        |    4 +-
 .../genome_aligner/src/GenomeAlignerIndexPart.cpp  |    2 +-
 .../genome_aligner/src/GenomeAlignerIndexPart.h    |    2 +-
 .../genome_aligner/src/GenomeAlignerIndexTask.cpp  |    3 +-
 .../genome_aligner/src/GenomeAlignerIndexTask.h    |    2 +-
 .../src/GenomeAlignerIndexWorker.cpp               |    2 +-
 .../genome_aligner/src/GenomeAlignerIndexWorker.h  |    2 +-
 .../genome_aligner/src/GenomeAlignerPlugin.cpp     |    5 +-
 .../genome_aligner/src/GenomeAlignerPlugin.h       |    2 +-
 .../src/GenomeAlignerSearchQuery.cpp               |    2 +-
 .../genome_aligner/src/GenomeAlignerSearchQuery.h  |    2 +-
 .../genome_aligner/src/GenomeAlignerSettings.ui    |    6 +-
 .../src/GenomeAlignerSettingsController.cpp        |   54 +-
 .../src/GenomeAlignerSettingsController.h          |   42 +-
 .../src/GenomeAlignerSettingsWidget.cpp            |    8 +-
 .../src/GenomeAlignerSettingsWidget.h              |    2 +-
 .../src/GenomeAlignerSettingsWidget.ui             |   30 -
 .../genome_aligner/src/GenomeAlignerTask.cpp       |    8 +-
 src/plugins/genome_aligner/src/GenomeAlignerTask.h |    6 +-
 .../genome_aligner/src/GenomeAlignerWorker.cpp     |   12 +-
 .../genome_aligner/src/GenomeAlignerWorker.h       |    2 +-
 .../genome_aligner/src/GenomeAlignerWriteTask.cpp  |    2 +-
 .../genome_aligner/src/GenomeAlignerWriteTask.h    |    2 +-
 .../genome_aligner/src/ReadShortReadsSubTask.cpp   |    2 +-
 .../genome_aligner/src/ReadShortReadsSubTask.h     |    2 +-
 .../src/WriteAlignedReadsSubTask.cpp               |    2 +-
 .../genome_aligner/src/WriteAlignedReadsSubTask.h  |    2 +-
 src/plugins/genome_aligner/transl/english.ts       |   85 +-
 src/plugins/genome_aligner/transl/russian.ts       |   85 +-
 .../linkdata_support/src/LinkDataScriptLibrary.cpp |   14 +-
 .../linkdata_support/src/LinkDataScriptLibrary.h   |   11 +-
 .../linkdata_support/src/LinkDataSupportPlugin.cpp |    2 +-
 .../linkdata_support/src/LinkDataSupportPlugin.h   |    2 +-
 .../opencl_support/src/OpenCLSupportPlugin.cpp     |    6 +-
 .../opencl_support/src/OpenCLSupportPlugin.h       |    2 +-
 .../src/OpenCLSupportSettingsController.cpp        |   17 +-
 .../src/OpenCLSupportSettingsController.h          |   13 +-
 src/plugins/opencl_support/transl/english.ts       |    4 +-
 src/plugins/opencl_support/transl/russian.ts       |    4 +-
 src/plugins/orf_marker/src/ORFDialog.cpp           |   19 +-
 src/plugins/orf_marker/src/ORFDialog.h             |   17 +-
 src/plugins/orf_marker/src/ORFDialogUI.ui          |    2 +-
 src/plugins/orf_marker/src/ORFMarkerPlugin.cpp     |    2 +-
 src/plugins/orf_marker/src/ORFMarkerPlugin.h       |    2 +-
 src/plugins/orf_marker/src/ORFMarkerTask.cpp       |    2 +-
 src/plugins/orf_marker/src/ORFMarkerTask.h         |    4 +-
 src/plugins/orf_marker/src/ORFMarkerTests.cpp      |    2 +-
 src/plugins/orf_marker/src/ORFMarkerTests.h        |    4 +-
 src/plugins/orf_marker/src/ORFQuery.cpp            |    8 +-
 src/plugins/orf_marker/src/ORFQuery.h              |    2 +-
 src/plugins/orf_marker/src/ORFWorker.cpp           |    8 +-
 src/plugins/orf_marker/src/ORFWorker.h             |    2 +-
 src/plugins/orf_marker/transl/english.ts           |    8 +
 src/plugins/orf_marker/transl/russian.ts           |    8 +
 src/plugins/pcr/pcr.pri                            |    2 +-
 src/plugins/pcr/src/EditPrimerDialog.cpp           |    4 +-
 src/plugins/pcr/src/EditPrimerDialog.h             |    2 +-
 src/plugins/pcr/src/ExtractProductTask.cpp         |    4 +-
 src/plugins/pcr/src/ExtractProductTask.h           |    2 +-
 src/plugins/pcr/src/FindPrimerPairsWorker.cpp      |    2 +-
 src/plugins/pcr/src/FindPrimerPairsWorker.h        |    4 +-
 src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp |    4 +-
 src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.h   |    2 +-
 .../pcr/src/InSilicoPcrOptionPanelWidget.cpp       |    3 +-
 src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h |    2 +-
 src/plugins/pcr/src/InSilicoPcrProductsTable.cpp   |    2 +-
 src/plugins/pcr/src/InSilicoPcrProductsTable.h     |    2 +-
 src/plugins/pcr/src/InSilicoPcrTask.cpp            |    2 +-
 src/plugins/pcr/src/InSilicoPcrTask.h              |    2 +-
 src/plugins/pcr/src/InSilicoPcrWorker.cpp          |    7 +-
 src/plugins/pcr/src/InSilicoPcrWorker.h            |    2 +-
 src/plugins/pcr/src/InSilicoPcrWorkflowTask.cpp    |    2 +-
 src/plugins/pcr/src/InSilicoPcrWorkflowTask.h      |    2 +-
 src/plugins/pcr/src/PcrOptionsPanelSavableTab.cpp  |    2 +-
 src/plugins/pcr/src/PcrOptionsPanelSavableTab.h    |    2 +-
 src/plugins/pcr/src/PcrPlugin.cpp                  |    2 +-
 src/plugins/pcr/src/PcrPlugin.h                    |    2 +-
 src/plugins/pcr/src/Primer.cpp                     |    2 +-
 src/plugins/pcr/src/Primer.h                       |    2 +-
 src/plugins/pcr/src/PrimerDimersFinder.cpp         |    4 +-
 src/plugins/pcr/src/PrimerDimersFinder.h           |    2 +-
 src/plugins/pcr/src/PrimerGroupBox.cpp             |    2 +-
 src/plugins/pcr/src/PrimerGroupBox.h               |    2 +-
 src/plugins/pcr/src/PrimerLibrary.cpp              |    2 +-
 src/plugins/pcr/src/PrimerLibrary.h                |    2 +-
 src/plugins/pcr/src/PrimerLibraryMdiWindow.cpp     |    2 +-
 src/plugins/pcr/src/PrimerLibraryMdiWindow.h       |    2 +-
 src/plugins/pcr/src/PrimerLibrarySelector.cpp      |    4 +-
 src/plugins/pcr/src/PrimerLibrarySelector.h        |    2 +-
 src/plugins/pcr/src/PrimerLibraryTable.cpp         |    2 +-
 src/plugins/pcr/src/PrimerLibraryTable.h           |    2 +-
 .../pcr/src/PrimerLibraryTableController.cpp       |    2 +-
 src/plugins/pcr/src/PrimerLibraryTableController.h |    2 +-
 src/plugins/pcr/src/PrimerLibraryWidget.cpp        |    4 +-
 src/plugins/pcr/src/PrimerLibraryWidget.h          |    2 +-
 src/plugins/pcr/src/PrimerLineEdit.cpp             |    6 +-
 src/plugins/pcr/src/PrimerLineEdit.h               |    2 +-
 src/plugins/pcr/src/PrimerStatistics.cpp           |    2 +-
 src/plugins/pcr/src/PrimerStatistics.h             |    2 +-
 src/plugins/pcr/src/PrimersDetailsDialog.cpp       |    4 +-
 src/plugins/pcr/src/PrimersDetailsDialog.h         |    2 +-
 src/plugins/pcr/src/PrimersGrouperWorker.cpp       |    2 +-
 src/plugins/pcr/src/PrimersGrouperWorker.h         |    4 +-
 src/plugins/pcr/src/export/ExportPrimersDialog.cpp |    4 +-
 src/plugins/pcr/src/export/ExportPrimersDialog.h   |    2 +-
 .../pcr/src/export/ExportPrimersToDatabaseTask.cpp |    4 +-
 .../pcr/src/export/ExportPrimersToDatabaseTask.h   |    2 +-
 .../src/export/ExportPrimersToLocalFileTask.cpp    |    2 +-
 .../pcr/src/export/ExportPrimersToLocalFileTask.h  |    2 +-
 .../pcr/src/import/ImportPrimerFromObjectTask.cpp  |    2 +-
 .../pcr/src/import/ImportPrimerFromObjectTask.h    |    2 +-
 src/plugins/pcr/src/import/ImportPrimersDialog.cpp |    4 +-
 src/plugins/pcr/src/import/ImportPrimersDialog.h   |    2 +-
 .../pcr/src/import/ImportPrimersFromFileTask.cpp   |    2 +-
 .../pcr/src/import/ImportPrimersFromFileTask.h     |    2 +-
 .../pcr/src/import/ImportPrimersFromFolderTask.cpp |    2 +-
 .../pcr/src/import/ImportPrimersFromFolderTask.h   |    2 +-
 .../pcr/src/import/ImportPrimersMultiTask.cpp      |    2 +-
 .../pcr/src/import/ImportPrimersMultiTask.h        |    2 +-
 src/plugins/pcr/transl/english.ts                  |   88 +-
 src/plugins/pcr/transl/russian.ts                  |   88 +-
 src/plugins/perf_monitor/src/PerfMonitorPlugin.cpp |    8 +-
 src/plugins/perf_monitor/src/PerfMonitorPlugin.h   |    8 +-
 src/plugins/perf_monitor/src/PerfMonitorView.cpp   |    8 +-
 src/plugins/perf_monitor/src/PerfMonitorView.h     |   11 +-
 src/plugins/query_designer/src/QDDialog.ui         |   21 +-
 src/plugins/query_designer/src/QDDocument.cpp      |    6 +-
 src/plugins/query_designer/src/QDDocument.h        |    6 +-
 .../query_designer/src/QDDocumentFormat.cpp        |    2 +-
 src/plugins/query_designer/src/QDDocumentFormat.h  |    2 +-
 src/plugins/query_designer/src/QDGroupsEditor.cpp  |   10 +-
 src/plugins/query_designer/src/QDGroupsEditor.h    |    9 +-
 src/plugins/query_designer/src/QDRunDialog.cpp     |    7 +-
 src/plugins/query_designer/src/QDRunDialog.h       |    2 +-
 src/plugins/query_designer/src/QDSamples.cpp       |    8 +-
 src/plugins/query_designer/src/QDSamples.h         |    8 +-
 src/plugins/query_designer/src/QDSceneIOTasks.cpp  |    4 +-
 src/plugins/query_designer/src/QDSceneIOTasks.h    |    2 +-
 src/plugins/query_designer/src/QDTests.cpp         |    2 +-
 src/plugins/query_designer/src/QDTests.h           |    4 +-
 src/plugins/query_designer/src/QDWorker.cpp        |    3 +-
 src/plugins/query_designer/src/QDWorker.h          |    2 +-
 .../query_designer/src/QueryDesignerPlugin.cpp     |    2 +-
 .../query_designer/src/QueryDesignerPlugin.h       |    2 +-
 src/plugins/query_designer/src/QueryEditor.cpp     |    8 +-
 src/plugins/query_designer/src/QueryEditor.h       |    2 +-
 src/plugins/query_designer/src/QueryPalette.cpp    |    8 +-
 src/plugins/query_designer/src/QueryPalette.h      |   12 +-
 .../query_designer/src/QueryProcCfgDelegate.h      |    2 +-
 src/plugins/query_designer/src/QueryProcCfgModel.h |    4 +-
 .../query_designer/src/QueryViewAdapter.cpp        |    2 +-
 src/plugins/query_designer/src/QueryViewAdapter.h  |    6 +-
 .../query_designer/src/QueryViewController.cpp     |   11 +-
 .../query_designer/src/QueryViewController.h       |    8 +-
 src/plugins/query_designer/src/QueryViewItems.cpp  |   29 +-
 src/plugins/query_designer/src/QueryViewItems.h    |   21 +-
 .../query_designer/src/library/QDFindActor.cpp     |    2 +-
 .../query_designer/src/library/QDFindActor.h       |    2 +-
 .../src/library/QDFindPolyRegionsActor.cpp         |    2 +-
 .../src/library/QDFindPolyRegionsActor.h           |    2 +-
 .../src/library/QDGcContentActor.cpp               |    2 +-
 .../query_designer/src/library/QDGcContentActor.h  |    2 +-
 src/plugins/query_designer/transl/english.ts       |  203 +-
 src/plugins/query_designer/transl/russian.ts       |  215 +-
 src/plugins/remote_blast/src/BlastQuery.cpp        |    2 +-
 src/plugins/remote_blast/src/BlastQuery.h          |    2 +-
 src/plugins/remote_blast/src/DBRequestFactory.h    |    2 +-
 src/plugins/remote_blast/src/HttpRequest.h         |   16 +-
 src/plugins/remote_blast/src/HttpRequestBLAST.cpp  |    2 +-
 src/plugins/remote_blast/src/RemoteBLASTConsts.cpp |    2 +-
 src/plugins/remote_blast/src/RemoteBLASTConsts.h   |    4 +-
 src/plugins/remote_blast/src/RemoteBLASTDialog.ui  |   33 +-
 src/plugins/remote_blast/src/RemoteBLASTPlugin.cpp |    9 +-
 src/plugins/remote_blast/src/RemoteBLASTPlugin.h   |    2 +-
 .../remote_blast/src/RemoteBLASTPluginTests.cpp    |    2 +-
 .../remote_blast/src/RemoteBLASTPluginTests.h      |    2 +-
 src/plugins/remote_blast/src/RemoteBLASTTask.cpp   |   71 +-
 src/plugins/remote_blast/src/RemoteBLASTTask.h     |   11 +-
 src/plugins/remote_blast/src/RemoteBLASTWorker.cpp |    2 +-
 src/plugins/remote_blast/src/RemoteBLASTWorker.h   |    2 +-
 .../remote_blast/src/SendSelectionDialog.cpp       |   36 +-
 src/plugins/remote_blast/src/SendSelectionDialog.h |   14 +-
 src/plugins/remote_blast/transl/english.ts         |  238 +-
 src/plugins/remote_blast/transl/russian.ts         |  240 +-
 .../repeat_finder/src/FindRepeatsDialog.cpp        |    5 +-
 src/plugins/repeat_finder/src/FindRepeatsDialog.h  |    2 +-
 src/plugins/repeat_finder/src/FindRepeatsDialog.ui |   13 +
 src/plugins/repeat_finder/src/FindRepeatsTask.cpp  |    4 +-
 src/plugins/repeat_finder/src/FindRepeatsTask.h    |    4 +-
 .../repeat_finder/src/FindTandemsDialog.cpp        |    5 +-
 src/plugins/repeat_finder/src/FindTandemsDialog.h  |    2 +-
 src/plugins/repeat_finder/src/FindTandemsDialog.ui |   13 +
 src/plugins/repeat_finder/src/RFBase.cpp           |    2 +-
 src/plugins/repeat_finder/src/RFBase.h             |    4 +-
 src/plugins/repeat_finder/src/RFConstants.h        |    2 +-
 src/plugins/repeat_finder/src/RFDiagonal.cpp       |    4 +-
 src/plugins/repeat_finder/src/RFDiagonal.h         |    4 +-
 src/plugins/repeat_finder/src/RFSArray.cpp         |    4 +-
 src/plugins/repeat_finder/src/RFSArray.h           |    8 +-
 src/plugins/repeat_finder/src/RFSArrayWK.cpp       |    2 +-
 src/plugins/repeat_finder/src/RFSArrayWK.h         |    4 +-
 src/plugins/repeat_finder/src/RFTaskFactory.cpp    |    2 +-
 src/plugins/repeat_finder/src/RFTaskFactory.h      |    2 +-
 src/plugins/repeat_finder/src/RF_BitMask.h         |    5 +-
 .../repeat_finder/src/RF_SArray_TandemFinder.cpp   |    2 +-
 .../repeat_finder/src/RF_SArray_TandemFinder.h     |    6 +-
 src/plugins/repeat_finder/src/RF_SuffixArray.cpp   |    5 +-
 src/plugins/repeat_finder/src/RF_SuffixArray.h     |    3 +-
 .../repeat_finder/src/RepeatFinderPlugin.cpp       |    2 +-
 src/plugins/repeat_finder/src/RepeatFinderPlugin.h |    2 +-
 .../repeat_finder/src/RepeatFinderTests.cpp        |   20 +-
 src/plugins/repeat_finder/src/RepeatFinderTests.h  |    4 +-
 src/plugins/repeat_finder/src/RepeatQuery.cpp      |    2 +-
 src/plugins/repeat_finder/src/RepeatQuery.h        |    2 +-
 src/plugins/repeat_finder/src/RepeatWorker.cpp     |   38 +-
 src/plugins/repeat_finder/src/RepeatWorker.h       |    2 +-
 src/plugins/repeat_finder/src/TandemQuery.cpp      |    2 +-
 src/plugins/repeat_finder/src/TandemQuery.h        |    2 +-
 src/plugins/repeat_finder/transl/english.ts        |  134 +-
 src/plugins/repeat_finder/transl/russian.ts        |  138 +-
 .../smith_waterman/src/PairAlignSequences.cpp      |    2 +-
 .../smith_waterman/src/PairAlignSequences.h        |    2 +-
 .../PairwiseAlignmentSmithWatermanGUIExtension.cpp |   22 +-
 .../PairwiseAlignmentSmithWatermanGUIExtension.h   |   17 +-
 .../smith_waterman/src/SWAlgorithmPlugin.cpp       |    6 +-
 src/plugins/smith_waterman/src/SWAlgorithmPlugin.h |    2 +-
 src/plugins/smith_waterman/src/SWAlgorithmTask.cpp |    8 +-
 src/plugins/smith_waterman/src/SWAlgorithmTask.h   |    6 +-
 src/plugins/smith_waterman/src/SWQuery.cpp         |    4 +-
 src/plugins/smith_waterman/src/SWQuery.h           |    2 +-
 src/plugins/smith_waterman/src/SWTaskFactory.cpp   |    2 +-
 src/plugins/smith_waterman/src/SWTaskFactory.h     |    4 +-
 src/plugins/smith_waterman/src/SWWorker.cpp        |    4 +-
 src/plugins/smith_waterman/src/SWWorker.h          |    2 +-
 .../smith_waterman/src/SmithWatermanAlgorithm.cpp  |    2 +-
 .../smith_waterman/src/SmithWatermanAlgorithm.h    |    6 +-
 .../src/SmithWatermanAlgorithmCUDA.cpp             |    2 +-
 .../src/SmithWatermanAlgorithmCUDA.h               |    2 +-
 .../src/SmithWatermanAlgorithmOPENCL.cpp           |    8 +-
 .../src/SmithWatermanAlgorithmOPENCL.h             |    2 +-
 .../src/SmithWatermanAlgorithmSSE2.cpp             |    4 +-
 .../src/SmithWatermanAlgorithmSSE2.h               |    2 +-
 .../smith_waterman/src/SmithWatermanTests.cpp      |    2 +-
 .../smith_waterman/src/SmithWatermanTests.h        |    6 +-
 src/plugins/smith_waterman/src/sw_cuda.cu          |    2 +-
 src/plugins/smith_waterman/src/sw_cuda_cpp.cpp     |    2 +-
 src/plugins/smith_waterman/src/sw_cuda_cpp.h       |    2 +-
 src/plugins/smith_waterman/transl/english.ts       |   62 +-
 src/plugins/smith_waterman/transl/russian.ts       |   62 +-
 src/plugins/test_runner/src/ExcludeReasonDialog.h  |    2 +-
 src/plugins/test_runner/src/GTestScriptWrapper.cpp |    5 +-
 src/plugins/test_runner/src/GTestScriptWrapper.h   |    8 +-
 src/plugins/test_runner/src/TestRunnerPlugin.cpp   |   12 +-
 src/plugins/test_runner/src/TestRunnerPlugin.h     |    9 +-
 src/plugins/test_runner/src/TestViewController.cpp |   10 +-
 src/plugins/test_runner/src/TestViewController.h   |   13 +-
 src/plugins/test_runner/src/TestViewReporter.cpp   |   12 +-
 src/plugins/test_runner/src/TestViewReporter.h     |    9 +-
 src/plugins/test_runner/test_runner.pri            |    3 +-
 src/plugins/test_runner/transl/english.ts          |   86 +-
 src/plugins/test_runner/transl/russian.ts          |   86 +-
 src/plugins/weight_matrix/src/PMatrixFormat.cpp    |    4 +-
 src/plugins/weight_matrix/src/PMatrixFormat.h      |    2 +-
 .../weight_matrix/src/PWMBuildDialogController.cpp |   77 +-
 .../weight_matrix/src/PWMBuildDialogController.h   |   14 +-
 .../src/PWMJASPARDialogController.cpp              |   15 +-
 .../weight_matrix/src/PWMJASPARDialogController.h  |   14 +-
 .../src/PWMSearchDialogController.cpp              |   10 +-
 .../weight_matrix/src/PWMSearchDialogController.h  |   14 +-
 .../src/SetParametersDialogController.cpp          |   11 +-
 .../src/SetParametersDialogController.h            |    8 +-
 .../src/ViewMatrixDialogController.cpp             |   23 +-
 .../weight_matrix/src/ViewMatrixDialogController.h |    8 +-
 src/plugins/weight_matrix/src/WMQuery.cpp          |    9 +-
 src/plugins/weight_matrix/src/WMQuery.h            |    2 +-
 .../weight_matrix/src/WeightMatrixAlgorithm.cpp    |    2 +-
 .../weight_matrix/src/WeightMatrixAlgorithm.h      |    2 +-
 .../weight_matrix/src/WeightMatrixBuildWorker.cpp  |   45 +-
 src/plugins/weight_matrix/src/WeightMatrixIO.cpp   |   18 +-
 src/plugins/weight_matrix/src/WeightMatrixIO.h     |    6 +-
 .../weight_matrix/src/WeightMatrixIOWorkers.cpp    |    2 +-
 .../weight_matrix/src/WeightMatrixIOWorkers.h      |    2 +-
 .../weight_matrix/src/WeightMatrixPlugin.cpp       |    2 +-
 src/plugins/weight_matrix/src/WeightMatrixPlugin.h |    8 +-
 .../weight_matrix/src/WeightMatrixSearchTask.cpp   |    2 +-
 .../weight_matrix/src/WeightMatrixSearchTask.h     |    6 +-
 .../weight_matrix/src/WeightMatrixSearchWorker.cpp |   43 +-
 .../weight_matrix/src/WeightMatrixWorkers.h        |    2 +-
 src/plugins/weight_matrix/transl/english.ts        |  318 +-
 src/plugins/weight_matrix/transl/russian.ts        |  318 +-
 .../src/ActorCfgFilterProxyModel.cpp               |    5 +-
 .../src/ActorCfgFilterProxyModel.h                 |    2 +-
 .../workflow_designer/src/ActorCfgModel.cpp        |   18 +-
 src/plugins/workflow_designer/src/ActorCfgModel.h  |   12 +-
 .../src/BreakpointManagerView.cpp                  |    7 +-
 .../workflow_designer/src/BreakpointManagerView.h  |    9 +-
 .../workflow_designer/src/ChooseItemDialog.cpp     |    6 +-
 .../workflow_designer/src/ChooseItemDialog.h       |    2 +-
 .../workflow_designer/src/CreateScriptWorker.cpp   |   10 +-
 .../workflow_designer/src/CreateScriptWorker.h     |   15 +-
 .../src/DashboardsManagerDialog.cpp                |   12 +-
 .../src/DashboardsManagerDialog.h                  |    2 +-
 .../workflow_designer/src/EstimationDialog.cpp     |    2 +-
 .../workflow_designer/src/EstimationDialog.h       |    2 +-
 .../src/GalaxyConfigConfigurationDialogImpl.cpp    |   12 +-
 .../src/GalaxyConfigConfigurationDialogImpl.h      |    2 +-
 .../workflow_designer/src/ImportSchemaDialog.cpp   |    4 +-
 .../workflow_designer/src/ImportSchemaDialog.h     |    2 +-
 .../src/InvestigationDataModel.cpp                 |    2 +-
 .../workflow_designer/src/InvestigationDataModel.h |    3 +-
 .../workflow_designer/src/ItemViewStyle.cpp        |   48 +-
 src/plugins/workflow_designer/src/ItemViewStyle.h  |   16 +-
 .../src/PortAliasesConfigurationDialog.cpp         |   28 +-
 .../src/PortAliasesConfigurationDialog.h           |    3 +-
 .../src/PortAliasesConfigurationDialog.ui          |   18 +-
 .../workflow_designer/src/SampleActionsManager.cpp |    2 +-
 .../workflow_designer/src/SampleActionsManager.h   |    2 +-
 .../workflow_designer/src/SceneSerializer.cpp      |   14 +-
 .../workflow_designer/src/SceneSerializer.h        |    2 +-
 .../src/SchemaAliasesConfigurationDialog.ui        |   25 +-
 .../src/SchemaAliasesConfigurationDialogImpl.cpp   |   33 +-
 .../src/SchemaAliasesConfigurationDialogImpl.h     |    3 +-
 .../workflow_designer/src/StartupDialog.cpp        |    6 +-
 src/plugins/workflow_designer/src/StartupDialog.h  |    9 +-
 .../workflow_designer/src/TableViewTabKey.cpp      |    4 +-
 .../workflow_designer/src/TableViewTabKey.h        |    9 +-
 .../src/WorkflowDesignerPlugin.cpp                 |   69 +-
 .../workflow_designer/src/WorkflowDesignerPlugin.h |    2 +-
 .../workflow_designer/src/WorkflowDocument.cpp     |    5 +-
 .../workflow_designer/src/WorkflowDocument.h       |    5 +-
 .../workflow_designer/src/WorkflowEditor.cpp       |   51 +-
 src/plugins/workflow_designer/src/WorkflowEditor.h |    6 +-
 .../src/WorkflowEditorDelegates.cpp                |    2 +-
 .../src/WorkflowEditorDelegates.h                  |    8 +-
 .../workflow_designer/src/WorkflowEditorWidget.ui  |    3 +
 .../src/WorkflowInvestigationWidgetsController.cpp |   28 +-
 .../src/WorkflowInvestigationWidgetsController.h   |    6 +-
 .../workflow_designer/src/WorkflowMetaDialog.cpp   |    8 +-
 .../workflow_designer/src/WorkflowMetaDialog.h     |    2 +-
 .../workflow_designer/src/WorkflowPalette.cpp      |   39 +-
 .../workflow_designer/src/WorkflowPalette.h        |   17 +-
 .../workflow_designer/src/WorkflowSamples.cpp      |   72 +-
 .../workflow_designer/src/WorkflowSamples.h        |   22 +-
 .../workflow_designer/src/WorkflowSceneIOTasks.cpp |   11 +-
 .../workflow_designer/src/WorkflowSceneIOTasks.h   |    4 +-
 .../src/WorkflowSettingsController.cpp             |    4 +-
 .../src/WorkflowSettingsController.h               |    2 +-
 .../workflow_designer/src/WorkflowTabView.cpp      |    2 +-
 .../workflow_designer/src/WorkflowTabView.h        |    2 +-
 .../src/WorkflowViewController.cpp                 |   26 +-
 .../workflow_designer/src/WorkflowViewController.h |   10 +-
 .../workflow_designer/src/WorkflowViewItems.cpp    |   53 +-
 .../workflow_designer/src/WorkflowViewItems.h      |   17 +-
 .../src/cmdline/GalaxyConfigTask.cpp               |   28 +-
 .../src/cmdline/GalaxyConfigTask.h                 |    2 +-
 .../src/cmdline/WorkflowCMDLineTasks.cpp           |   34 +-
 .../src/cmdline/WorkflowCMDLineTasks.h             |    4 +-
 .../AnnotationsMessageTranslator.cpp               |    4 +-
 .../AnnotationsMessageTranslator.h                 |    2 +-
 .../AssemblyMessageTranslator.cpp                  |    8 +-
 .../AssemblyMessageTranslator.h                    |    2 +-
 .../BaseMessageTranslator.cpp                      |    2 +-
 .../BaseMessageTranslator.h                        |    6 +-
 .../MultipleAlignmentMessageTranslator.cpp         |   25 +-
 .../MultipleAlignmentMessageTranslator.h           |    8 +-
 .../SequenceMessageTranslator.cpp                  |    6 +-
 .../SequenceMessageTranslator.h                    |    2 +-
 .../VariationTrackMessageTranslator.cpp            |   10 +-
 .../VariationTrackMessageTranslator.h              |    2 +-
 .../WorkflowDebugMessageParserImpl.cpp             |   22 +-
 .../WorkflowDebugMessageParserImpl.h               |    2 +-
 .../src/library/AlignToReferenceWorker.cpp         |  855 ---
 .../src/library/AlignToReferenceWorker.h           |  204 -
 .../src/library/AminoTranslationWorker.cpp         |    4 +-
 .../src/library/AminoTranslationWorker.h           |    4 +-
 .../src/library/AssemblyToSequenceWorker.cpp       |    2 +-
 .../src/library/AssemblyToSequenceWorker.h         |    2 +-
 .../src/library/BaseDocWriter.cpp                  |    4 +-
 .../workflow_designer/src/library/BaseDocWriter.h  |    2 +-
 .../src/library/CDSearchWorker.cpp                 |   32 +-
 .../workflow_designer/src/library/CDSearchWorker.h |    2 +-
 .../src/library/CfgExternalToolModel.cpp           |    6 +-
 .../src/library/CfgExternalToolModel.h             |    4 +-
 .../src/library/ConvertFilesFormatWorker.cpp       |   24 +-
 .../src/library/ConvertFilesFormatWorker.h         |    2 +-
 .../ConvertSnpeffVariationsToAnnotationsWorker.cpp |    5 +-
 .../ConvertSnpeffVariationsToAnnotationsWorker.h   |    2 +-
 .../workflow_designer/src/library/CoreLib.cpp      |   22 +-
 .../workflow_designer/src/library/CoreLib.h        |    2 +-
 .../src/library/CreateExternalProcessDialog.cpp    |    3 +-
 .../src/library/CreateExternalProcessDialog.h      |    2 +-
 .../workflow_designer/src/library/DocActors.cpp    |   23 +-
 .../workflow_designer/src/library/DocActors.h      |    2 +-
 .../workflow_designer/src/library/DocWorkers.cpp   |   30 +-
 .../workflow_designer/src/library/DocWorkers.h     |    2 +-
 .../src/library/ExternalProcessWorker.cpp          |   20 +-
 .../src/library/ExternalProcessWorker.h            |    2 +-
 .../src/library/ExtractAssemblyCoverageWorker.cpp  |    3 +-
 .../src/library/ExtractAssemblyCoverageWorker.h    |    2 +-
 .../src/library/ExtractConsensusWorker.cpp         |    3 +-
 .../src/library/ExtractConsensusWorker.h           |    2 +-
 .../src/library/ExtractMSAConsensusWorker.cpp      |   29 +-
 .../src/library/ExtractMSAConsensusWorker.h        |   14 +-
 .../src/library/FASTQWorkersLibrary.cpp            |  218 +-
 .../src/library/FASTQWorkersLibrary.h              |   33 +-
 .../library/FilterAnnotationsByQualifierWorker.cpp |    2 +-
 .../library/FilterAnnotationsByQualifierWorker.h   |    2 +-
 .../src/library/FilterAnnotationsWorker.cpp        |    2 +-
 .../src/library/FilterAnnotationsWorker.h          |    2 +-
 .../src/library/FilterBamWorker.cpp                |   27 +-
 .../src/library/FilterBamWorker.h                  |    2 +-
 .../workflow_designer/src/library/FindWorker.cpp   |    5 +-
 .../workflow_designer/src/library/FindWorker.h     |    2 +-
 .../src/library/GenericReadActor.cpp               |   12 +-
 .../src/library/GenericReadActor.h                 |    2 +-
 .../src/library/GenericReadWorker.cpp              |   24 +-
 .../src/library/GenericReadWorker.h                |    4 +-
 .../src/library/GetFileListWorker.cpp              |    4 +-
 .../src/library/GetFileListWorker.h                |    2 +-
 .../workflow_designer/src/library/GroupWorker.cpp  |    4 +-
 .../workflow_designer/src/library/GroupWorker.h    |    2 +-
 .../src/library/ImportAnnotationsWorker.cpp        |    4 +-
 .../src/library/ImportAnnotationsWorker.h          |    2 +-
 .../src/library/IncludedProtoFactoryImpl.cpp       |    2 +-
 .../src/library/IncludedProtoFactoryImpl.h         |    2 +-
 .../src/library/MSA2SequenceWorker.cpp             |   30 +-
 .../src/library/MSA2SequenceWorker.h               |    2 +-
 .../src/library/MarkSequenceWorker.cpp             |    4 +-
 .../src/library/MarkSequenceWorker.h               |    2 +-
 .../src/library/MergeBamWorker.cpp                 |   24 +-
 .../workflow_designer/src/library/MergeBamWorker.h |    2 +-
 .../src/library/MultiplexerWorker.cpp              |    3 +-
 .../src/library/MultiplexerWorker.h                |    2 +-
 .../src/library/PassFilterWorker.cpp               |    2 +-
 .../src/library/PassFilterWorker.h                 |    2 +-
 .../src/library/ReadAnnotationsWorker.cpp          |    4 +-
 .../src/library/ReadAnnotationsWorker.h            |    2 +-
 .../src/library/ReadAssemblyWorker.cpp             |    4 +-
 .../src/library/ReadAssemblyWorker.h               |    2 +-
 .../src/library/ReadVariationWorker.cpp            |    4 +-
 .../src/library/ReadVariationWorker.h              |    2 +-
 .../src/library/RemoteDBFetcherWorker.cpp          |   19 +-
 .../src/library/RemoteDBFetcherWorker.h            |    2 +-
 .../library/RenameChromosomeInVariationWorker.cpp  |    6 +-
 .../library/RenameChromosomeInVariationWorker.h    |    2 +-
 .../src/library/ReverseComplementWorker.cpp        |   40 +-
 .../src/library/RmdupBamWorker.cpp                 |   26 +-
 .../workflow_designer/src/library/RmdupBamWorker.h |    2 +-
 .../workflow_designer/src/library/SchemaWorker.cpp |    2 +-
 .../workflow_designer/src/library/SchemaWorker.h   |    2 +-
 .../workflow_designer/src/library/ScriptWorker.cpp |   10 +-
 .../workflow_designer/src/library/ScriptWorker.h   |    2 +-
 .../src/library/SequenceQualityTrimWorker.cpp      |  170 +
 .../src/library/SequenceQualityTrimWorker.h        |   67 +
 .../src/library/SequenceSplitWorker.cpp            |    6 +-
 .../src/library/SequenceSplitWorker.h              |    2 +-
 .../src/library/SequencesToMSAWorker.cpp           |   20 +-
 .../src/library/SequencesToMSAWorker.h             |   10 +-
 .../src/library/SortBamWorker.cpp                  |   26 +-
 .../workflow_designer/src/library/SortBamWorker.h  |    2 +-
 .../src/library/StatisticWorkers.cpp               |   29 +-
 .../src/library/StatisticWorkers.h                 |    2 +-
 .../src/library/Text2SequenceWorker.cpp            |    2 +-
 .../src/library/Text2SequenceWorker.h              |    2 +-
 .../src/library/WriteAnnotationsWorker.cpp         |   23 +-
 .../src/library/WriteAnnotationsWorker.h           |    2 +-
 .../src/library/WriteAssemblyWorkers.cpp           |    6 +-
 .../src/library/WriteAssemblyWorkers.h             |    2 +-
 .../src/library/WriteVariationWorker.cpp           |    4 +-
 .../src/library/WriteVariationWorker.h             |    2 +-
 .../src/tasks/ReadAssemblyTask.cpp                 |    4 +-
 .../workflow_designer/src/tasks/ReadAssemblyTask.h |    2 +-
 .../src/tasks/RenameChromosomeInVariationTask.cpp  |    2 +-
 .../src/tasks/RenameChromosomeInVariationTask.h    |    2 +-
 .../src/tasks/SequenceQualityTrimTask.cpp          |  141 +
 .../src/tasks/SequenceQualityTrimTask.h            |   71 +
 .../src/util/DatasetValidator.cpp                  |    6 +-
 .../workflow_designer/src/util/DatasetValidator.h  |    2 +-
 .../src/util/DatasetsCountValidator.cpp            |    2 +-
 .../src/util/DatasetsCountValidator.h              |    2 +-
 .../src/util/GrouperActionUtils.cpp                |   61 +-
 .../src/util/GrouperActionUtils.h                  |    8 +-
 .../src/util/RequiredSlotsValidator.cpp            |    2 +-
 .../src/util/RequiredSlotsValidator.h              |    2 +-
 .../src/util/SaveSchemaImageUtils.cpp              |   20 +-
 .../src/util/SaveSchemaImageUtils.h                |    6 +-
 .../src/util/WorkerNameValidator.cpp               |    2 +-
 .../src/util/WorkerNameValidator.h                 |    2 +-
 .../src/util/WriteSequenceValidator.cpp            |    4 +-
 .../src/util/WriteSequenceValidator.h              |    2 +-
 src/plugins/workflow_designer/transl/english.ts    | 2327 ++++----
 src/plugins/workflow_designer/transl/russian.ts    | 2265 ++++----
 .../workflow_designer/workflow_designer.pri        |    3 +-
 .../workflow_designer/workflow_designer.pro        |    6 +-
 .../workflow_dump/src/WorkflowDumpPlugin.cpp       |    2 +-
 src/plugins/workflow_dump/src/WorkflowDumpPlugin.h |    2 +-
 src/plugins_3rdparty/ball/src/BallPlugin.cpp       |    2 +-
 src/plugins_3rdparty/ball/src/BallPlugin.h         |    2 +-
 src/plugins_3rdparty/ball/src/SAS.cpp              |    2 +-
 src/plugins_3rdparty/ball/src/SAS.h                |    2 +-
 src/plugins_3rdparty/ball/src/SES.cpp              |    2 +-
 src/plugins_3rdparty/ball/src/SES.h                |    2 +-
 .../ball/src/include/BALL/CONFIG/config.h          |    4 +-
 .../ball/src/source/DATATYPE/string.cpp            |    4 +-
 src/plugins_3rdparty/gor4/src/GorIVAlgTask.cpp     |   10 +-
 src/plugins_3rdparty/gor4/src/GorIVAlgTask.h       |    4 +-
 src/plugins_3rdparty/gor4/src/GorIVPlugin.cpp      |   19 +-
 src/plugins_3rdparty/gor4/src/GorIVPlugin.h        |    2 +-
 src/plugins_3rdparty/gor4/src/gor.cpp              |   45 +-
 src/plugins_3rdparty/gor4/src/gor.h                |   10 +-
 src/plugins_3rdparty/gor4/transl/english.ts        |   42 +-
 src/plugins_3rdparty/gor4/transl/russian.ts        |   42 +-
 src/plugins_3rdparty/hmm2/src/HMMIO.cpp            |    5 +-
 src/plugins_3rdparty/hmm2/src/HMMIO.h              |    6 +-
 src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp      |    2 +-
 src/plugins_3rdparty/hmm2/src/HMMIOWorker.h        |    2 +-
 src/plugins_3rdparty/hmm2/src/TaskLocalStorage.cpp |    2 +-
 src/plugins_3rdparty/hmm2/src/TaskLocalStorage.h   |    8 +-
 src/plugins_3rdparty/hmm2/src/uHMMPlugin.cpp       |   49 +-
 src/plugins_3rdparty/hmm2/src/uHMMPlugin.h         |    8 +-
 .../hmm2/src/u_build/HMMBuildDialogController.cpp  |   62 +-
 .../hmm2/src/u_build/HMMBuildDialogController.h    |   16 +-
 .../hmm2/src/u_build/HMMBuildWorker.cpp            |   61 +-
 .../hmm2/src/u_build/uhmmbuild.cpp                 |    6 +-
 src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.h  |    4 +-
 .../u_calibrate/HMMCalibrateDialogController.cpp   |    4 +-
 .../src/u_calibrate/HMMCalibrateDialogController.h |    2 +-
 .../hmm2/src/u_calibrate/HMMCalibrateTask.cpp      |    2 +-
 .../hmm2/src/u_calibrate/uhmmcalibrate.h           |    4 +-
 .../src/u_search/HMMSearchDialogController.cpp     |   28 +-
 .../hmm2/src/u_search/HMMSearchDialogController.h  |   16 +-
 .../hmm2/src/u_search/HMMSearchQDActor.cpp         |   20 +-
 .../hmm2/src/u_search/HMMSearchQDActor.h           |    2 +-
 .../hmm2/src/u_search/HMMSearchTask.cpp            |    2 +-
 .../hmm2/src/u_search/HMMSearchTask.h              |    4 +-
 .../hmm2/src/u_search/HMMSearchWorker.cpp          |   69 +-
 .../hmm2/src/u_search/uhmmsearch.cpp               |   80 +-
 .../hmm2/src/u_search/uhmmsearch.h                 |    2 +-
 .../hmm2/src/u_search/uhmmsearch_opt.cpp           |    2 +-
 .../hmm2/src/u_search/uhmmsearch_opt.h             |    2 +-
 .../hmm2/src/u_tests/uhmmerTests.cpp               |   41 +-
 .../hmm2/src/u_tests/uhmmerTests.h                 |    2 +-
 src/plugins_3rdparty/hmm2/transl/english.ts        |  344 +-
 src/plugins_3rdparty/hmm2/transl/russian.ts        |  348 +-
 src/plugins_3rdparty/kalign/src/KalignAdapter.cpp  |   37 +-
 src/plugins_3rdparty/kalign/src/KalignAdapter.h    |   11 +-
 src/plugins_3rdparty/kalign/src/KalignConstants.h  |    2 +-
 .../kalign/src/KalignDialogController.cpp          |   16 +-
 .../kalign/src/KalignDialogController.h            |    6 +-
 .../kalign/src/KalignException.cpp                 |    2 +-
 src/plugins_3rdparty/kalign/src/KalignException.h  |    2 +-
 src/plugins_3rdparty/kalign/src/KalignPlugin.cpp   |   27 +-
 src/plugins_3rdparty/kalign/src/KalignPlugin.h     |    8 +-
 src/plugins_3rdparty/kalign/src/KalignTask.cpp     |   66 +-
 src/plugins_3rdparty/kalign/src/KalignTask.h       |   29 +-
 src/plugins_3rdparty/kalign/src/KalignUtils.cpp    |    2 +-
 src/plugins_3rdparty/kalign/src/KalignUtils.h      |    2 +-
 src/plugins_3rdparty/kalign/src/KalignWorker.cpp   |   39 +-
 src/plugins_3rdparty/kalign/src/KalignWorker.h     |    4 +-
 ...rwiseAlignmentHirschbergGUIExtensionFactory.cpp |   17 +-
 ...airwiseAlignmentHirschbergGUIExtensionFactory.h |   19 +-
 .../kalign/src/PairwiseAlignmentHirschbergTask.cpp |   44 +-
 .../kalign/src/PairwiseAlignmentHirschbergTask.h   |   10 +-
 .../src/PairwiseAlignmentHirschbergTaskFactory.h   |    2 +-
 .../kalign/src/TaskLocalStorage.cpp                |    2 +-
 src/plugins_3rdparty/kalign/src/TaskLocalStorage.h |    4 +-
 .../kalign/src/kalign_tests/KalignTests.cpp        |  105 +-
 .../kalign/src/kalign_tests/KalignTests.h          |   26 +-
 src/plugins_3rdparty/kalign/transl/english.ts      |   64 +-
 src/plugins_3rdparty/kalign/transl/russian.ts      |   64 +-
 src/plugins_3rdparty/phylip/phylip.license         |   38 +-
 src/plugins_3rdparty/phylip/src/DistanceMatrix.cpp |   26 +-
 src/plugins_3rdparty/phylip/src/DistanceMatrix.h   |    8 +-
 .../phylip/src/NeighborJoinAdapter.cpp             |   28 +-
 .../phylip/src/NeighborJoinAdapter.h               |   16 +-
 .../phylip/src/NeighborJoinWidget.cpp              |   16 +-
 .../phylip/src/NeighborJoinWidget.h                |   10 +-
 .../phylip/src/PhylipCmdlineTask.cpp               |   12 +-
 .../phylip/src/PhylipCmdlineTask.h                 |    8 +-
 src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp   |    4 +-
 src/plugins_3rdparty/phylip/src/PhylipPlugin.h     |    2 +-
 .../phylip/src/PhylipPluginTests.cpp               |   18 +-
 .../phylip/src/PhylipPluginTests.h                 |    8 +-
 src/plugins_3rdparty/phylip/src/PhylipTask.cpp     |    8 +-
 src/plugins_3rdparty/phylip/src/PhylipTask.h       |    2 +-
 src/plugins_3rdparty/phylip/src/SeqBootAdapter.cpp |   38 +-
 src/plugins_3rdparty/phylip/src/SeqBootAdapter.h   |   12 +-
 src/plugins_3rdparty/phylip/src/cons.cpp           |   29 +-
 src/plugins_3rdparty/phylip/src/cons.h             |    2 +-
 src/plugins_3rdparty/phylip/src/dist.cpp           |   36 +-
 src/plugins_3rdparty/phylip/src/dist.h             |   32 +-
 src/plugins_3rdparty/phylip/src/dnadist.cpp        |   43 +-
 src/plugins_3rdparty/phylip/src/neighbor.cpp       |   36 +-
 src/plugins_3rdparty/phylip/src/phylip.cpp         |   41 +-
 src/plugins_3rdparty/phylip/src/phylip.h           |   94 +-
 src/plugins_3rdparty/phylip/src/protdist.cpp       |   33 +-
 src/plugins_3rdparty/phylip/src/seq.cpp            |   48 +-
 src/plugins_3rdparty/phylip/src/seq.h              |   32 +-
 src/plugins_3rdparty/phylip/src/seqboot.cpp        |   45 +-
 src/plugins_3rdparty/phylip/src/seqboot.h          |   42 +-
 src/plugins_3rdparty/phylip/transl/english.ts      |   34 +-
 src/plugins_3rdparty/phylip/transl/russian.ts      |   34 +-
 .../primer3/src/FindExonRegionsTask.cpp            |    4 +-
 .../primer3/src/FindExonRegionsTask.h              |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp |   15 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.h   |    9 +-
 src/plugins_3rdparty/primer3/src/Primer3Dialog.ui  |   36 +-
 src/plugins_3rdparty/primer3/src/Primer3Plugin.cpp |    5 +-
 src/plugins_3rdparty/primer3/src/Primer3Plugin.h   |    8 +-
 src/plugins_3rdparty/primer3/src/Primer3Query.cpp  |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Query.h    |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Task.cpp   |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Task.h     |    4 +-
 .../primer3/src/Primer3TaskSettings.cpp            |    2 +-
 .../primer3/src/Primer3TaskSettings.h              |   14 +-
 src/plugins_3rdparty/primer3/src/Primer3Tests.cpp  |    2 +-
 src/plugins_3rdparty/primer3/src/Primer3Tests.h    |    4 +-
 src/plugins_3rdparty/primer3/transl/english.ts     |  321 +-
 src/plugins_3rdparty/primer3/transl/russian.ts     |  321 +-
 .../psipred/src/PsipredAlgTask.cpp                 |    6 +-
 src/plugins_3rdparty/psipred/src/PsipredAlgTask.h  |    4 +-
 src/plugins_3rdparty/psipred/src/PsipredPlugin.cpp |   19 +-
 src/plugins_3rdparty/psipred/src/PsipredPlugin.h   |    2 +-
 src/plugins_3rdparty/psipred/src/seq2mtx.cpp       |    5 +-
 src/plugins_3rdparty/psipred/src/sspred_avpred.cpp |   11 +-
 src/plugins_3rdparty/psipred/src/sspred_avpred.h   |    6 +-
 src/plugins_3rdparty/psipred/src/sspred_hmulti.cpp |   11 +-
 src/plugins_3rdparty/psipred/src/sspred_hmulti.h   |    4 +-
 src/plugins_3rdparty/psipred/transl/english.ts     |    6 +-
 src/plugins_3rdparty/psipred/transl/russian.ts     |    6 +-
 src/plugins_3rdparty/ptools/src/PToolsAligner.cpp  |    2 +-
 src/plugins_3rdparty/ptools/src/PToolsAligner.h    |    2 +-
 src/plugins_3rdparty/ptools/src/PToolsPlugin.cpp   |    2 +-
 src/plugins_3rdparty/ptools/src/PToolsPlugin.h     |    2 +-
 src/plugins_3rdparty/ptools/src/PToolsTests.cpp    |    8 +-
 src/plugins_3rdparty/ptools/src/PToolsTests.h      |    2 +-
 src/plugins_3rdparty/ptools/src/ptools/basetypes.h |    2 +-
 .../sitecon/src/DIPropertiesSitecon.cpp            |    4 +-
 .../sitecon/src/DIPropertiesSitecon.h              |    8 +-
 .../sitecon/src/DIPropertiesTests.cpp              |    2 +-
 .../sitecon/src/DIPropertiesTests.h                |    4 +-
 .../sitecon/src/SiteconAlgorithm.cpp               |   64 +-
 .../sitecon/src/SiteconAlgorithm.h                 |   18 +-
 .../sitecon/src/SiteconAlgorithmTests.cpp          |   82 +-
 .../sitecon/src/SiteconAlgorithmTests.h            |   12 +-
 .../sitecon/src/SiteconBuildDialogController.cpp   |   42 +-
 .../sitecon/src/SiteconBuildDialogController.h     |    8 +-
 .../sitecon/src/SiteconBuildWorker.cpp             |   40 +-
 src/plugins_3rdparty/sitecon/src/SiteconIO.cpp     |   27 +-
 src/plugins_3rdparty/sitecon/src/SiteconIO.h       |    6 +-
 .../sitecon/src/SiteconIOWorkers.cpp               |    2 +-
 .../sitecon/src/SiteconIOWorkers.h                 |    2 +-
 src/plugins_3rdparty/sitecon/src/SiteconPlugin.cpp |    2 +-
 src/plugins_3rdparty/sitecon/src/SiteconPlugin.h   |    8 +-
 src/plugins_3rdparty/sitecon/src/SiteconQuery.cpp  |   12 +-
 src/plugins_3rdparty/sitecon/src/SiteconQuery.h    |    2 +-
 .../sitecon/src/SiteconSearchDialogController.cpp  |    5 +-
 .../sitecon/src/SiteconSearchDialogController.h    |   14 +-
 .../sitecon/src/SiteconSearchTask.cpp              |    2 +-
 .../sitecon/src/SiteconSearchTask.h                |    4 +-
 .../sitecon/src/SiteconSearchWorker.cpp            |   39 +-
 src/plugins_3rdparty/sitecon/src/SiteconWorkers.h  |    2 +-
 src/plugins_3rdparty/sitecon/transl/english.ts     |  216 +-
 src/plugins_3rdparty/sitecon/transl/russian.ts     |  228 +-
 src/plugins_3rdparty/umuscle/src/MuscleAdapter.cpp |   92 +-
 src/plugins_3rdparty/umuscle/src/MuscleAdapter.h   |   23 +-
 .../umuscle/src/MuscleAlignDialogController.cpp    |   20 +-
 .../umuscle/src/MuscleAlignDialogController.h      |    6 +-
 src/plugins_3rdparty/umuscle/src/MuscleConstants.h |    2 +-
 .../umuscle/src/MuscleParallel.cpp                 |   42 +-
 src/plugins_3rdparty/umuscle/src/MuscleParallel.h  |   10 +-
 src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp  |   61 +-
 src/plugins_3rdparty/umuscle/src/MusclePlugin.h    |    8 +-
 src/plugins_3rdparty/umuscle/src/MuscleTask.cpp    |  164 +-
 src/plugins_3rdparty/umuscle/src/MuscleTask.h      |   40 +-
 src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp   |   47 +-
 src/plugins_3rdparty/umuscle/src/MuscleUtils.h     |   12 +-
 .../umuscle/src/MuscleWorkPool.cpp                 |    8 +-
 src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h  |   14 +-
 src/plugins_3rdparty/umuscle/src/MuscleWorker.cpp  |   47 +-
 src/plugins_3rdparty/umuscle/src/MuscleWorker.h    |    2 +-
 .../umuscle/src/ProfileToProfileWorker.cpp         |   50 +-
 .../umuscle/src/ProfileToProfileWorker.h           |   19 +-
 .../umuscle/src/TaskLocalStorage.cpp               |    2 +-
 .../umuscle/src/TaskLocalStorage.h                 |    4 +-
 .../umuscle/src/muscle/globals.cpp                 |    2 +-
 src/plugins_3rdparty/umuscle/src/refinehorizP.cpp  |    2 +-
 src/plugins_3rdparty/umuscle/src/refinevertP.cpp   |    2 +-
 .../umuscle/src/umuscle_tests/umuscleTests.cpp     |  190 +-
 .../umuscle/src/umuscle_tests/umuscleTests.h       |   29 +-
 src/plugins_3rdparty/umuscle/transl/english.ts     |  140 +-
 src/plugins_3rdparty/umuscle/transl/russian.ts     |  140 +-
 .../variants/src/AssemblySamtoolsMpileup.cpp       |   24 +-
 .../variants/src/AssemblySamtoolsMpileup.h         |    2 +-
 .../variants/src/SamtoolMpileupWorker.cpp          |   42 +-
 .../variants/src/SamtoolMpileupWorker.h            |    2 +-
 .../variants/src/SamtoolsPlugin.cpp                |    2 +-
 src/plugins_3rdparty/variants/src/SamtoolsPlugin.h |    2 +-
 src/plugins_3rdparty/variants/transl/english.ts    |   38 +-
 src/plugins_3rdparty/variants/transl/russian.ts    |   38 +-
 src/plugins_3rdparty/variants/variants.pri         |   15 +-
 src/plugins_checker/src/Main.cpp                   |    2 +-
 src/qclean.cmd                                     |   27 +
 src/qmake_msvc_proj_x32.cmd                        |    3 +
 src/qmake_msvc_proj_x64.cmd                        |    3 +
 src/ugene_globals.pri                              |    8 +-
 src/ugene_version.pri                              |    4 +-
 src/ugenecl/src/DumpHelpTask.cpp                   |    8 +-
 src/ugenecl/src/DumpHelpTask.h                     |    2 +-
 src/ugenecl/src/DumpLicenseTask.cpp                |    4 +-
 src/ugenecl/src/DumpLicenseTask.h                  |    2 +-
 src/ugenecl/src/DumpVersionTask.cpp                |    2 +-
 src/ugenecl/src/DumpVersionTask.h                  |    2 +-
 src/ugenecl/src/ForeverTask.cpp                    |    6 +-
 src/ugenecl/src/ForeverTask.h                      |    2 +-
 src/ugenecl/src/Main.cpp                           |    9 +-
 src/ugenecl/src/TaskStatusBar.cpp                  |    6 +-
 src/ugenecl/src/TaskStatusBar.h                    |    2 +-
 src/ugenecl/src/TestStarter.cpp                    |    5 +-
 src/ugenecl/src/TestStarter.h                      |    2 +-
 src/ugenecl/ugenecl.pri                            |    2 +-
 src/ugenem/src/DetectWin10.cpp                     |    2 +-
 src/ugenem/src/DetectWin10.h                       |    2 +-
 src/ugenem/src/SendReportDialog.cpp                |    2 +-
 src/ugenem/src/SendReportDialog.h                  |    2 +-
 src/ugenem/src/Utils.cpp                           |   10 +-
 src/ugenem/src/Utils.h                             |    4 +-
 src/ugenem/src/main.cpp                            |    2 +-
 src/ugeneui/html/version_news.html                 |   50 +-
 src/ugeneui/html/welcome_page.css                  |    2 +-
 src/ugeneui/html/welcome_page.html                 |    2 +-
 src/ugeneui/src/Main.cpp                           |   25 +-
 .../app_settings/AppSettingsDialogController.cpp   |    2 +-
 .../src/app_settings/AppSettingsDialogController.h |   10 +-
 .../src/app_settings/AppSettingsDialogTree.h       |    9 +-
 .../src/app_settings/AppSettingsGUIImpl.cpp        |    2 +-
 src/ugeneui/src/app_settings/AppSettingsGUIImpl.h  |    2 +-
 .../DirectoriesSettingsGUIController.cpp           |   80 +-
 .../DirectoriesSettingsGUIController.h             |   15 +-
 .../DirectoriesSettingsWidget.ui                   |  315 +-
 .../FormatSettingsGUIController.cpp                |    4 +-
 .../format_settings/FormatSettingsGUIController.h  |    2 +-
 .../logview_settings/LogSettingsGUIController.cpp  |    4 +-
 .../logview_settings/LogSettingsGUIController.h    |    2 +-
 .../NetworkSettingsGUIController.cpp               |    6 +-
 .../NetworkSettingsGUIController.h                 |    4 +-
 .../ResourceSettingsGUIController.cpp              |    4 +-
 .../ResourceSettingsGUIController.h                |    4 +-
 .../UserApplicationsSettingsGUIController.cpp      |   23 +-
 .../UserApplicationsSettingsGUIController.h        |    4 +-
 .../UserApplicationsSettingsWidget.ui              |   31 +-
 .../src/main_window/AboutDialogController.cpp      |   18 +-
 .../src/main_window/AboutDialogController.h        |   23 +-
 src/ugeneui/src/main_window/CheckUpdatesTask.cpp   |    2 +-
 src/ugeneui/src/main_window/CheckUpdatesTask.h     |    2 +-
 src/ugeneui/src/main_window/DockManagerImpl.cpp    |  129 +-
 src/ugeneui/src/main_window/DockManagerImpl.h      |   10 +-
 src/ugeneui/src/main_window/DockWidgetPainter.cpp  |  201 +
 src/ugeneui/src/main_window/DockWidgetPainter.h    |   75 +
 src/ugeneui/src/main_window/MDIManagerImpl.cpp     |   64 +-
 src/ugeneui/src/main_window/MDIManagerImpl.h       |   22 +-
 src/ugeneui/src/main_window/MainWindowImpl.cpp     |    8 +-
 src/ugeneui/src/main_window/MainWindowImpl.h       |   17 +-
 src/ugeneui/src/main_window/MenuManager.cpp        |    2 +-
 src/ugeneui/src/main_window/MenuManager.h          |   13 +-
 src/ugeneui/src/main_window/ShutdownTask.cpp       |    2 +-
 src/ugeneui/src/main_window/ShutdownTask.h         |    4 +-
 src/ugeneui/src/main_window/SplashScreen.cpp       |   25 +-
 src/ugeneui/src/main_window/SplashScreen.h         |    9 +-
 .../main_window/TmpDirChangeDialogController.cpp   |    8 +-
 .../src/main_window/TmpDirChangeDialogController.h |   12 +-
 src/ugeneui/src/main_window/ToolBarManager.cpp     |    4 +-
 src/ugeneui/src/main_window/ToolBarManager.h       |   11 +-
 .../src/plugin_viewer/PluginViewerController.cpp   |   10 +-
 .../src/plugin_viewer/PluginViewerController.h     |    8 +-
 src/ugeneui/src/plugin_viewer/PluginViewerImpl.cpp |    8 +-
 src/ugeneui/src/plugin_viewer/PluginViewerImpl.h   |    2 +-
 .../DocumentFormatSelectorController.cpp           |   20 +-
 .../DocumentFormatSelectorController.h             |   14 +-
 .../DocumentProviderSelectorController.cpp         |  195 +-
 .../DocumentProviderSelectorController.h           |   33 +-
 .../DocumentReadingModeSelectorController.cpp      |    4 +-
 .../DocumentReadingModeSelectorController.h        |    2 +-
 .../ExportProjectDialogController.cpp              |   17 +-
 .../ExportProjectDialogController.h                |    2 +-
 ...tipleDocumentsReadingModeSelectorController.cpp |    6 +-
 ...ultipleDocumentsReadingModeSelectorController.h |    2 +-
 src/ugeneui/src/project_support/ProjectImpl.cpp    |    2 +-
 src/ugeneui/src/project_support/ProjectImpl.h      |    4 +-
 .../src/project_support/ProjectLoaderImpl.cpp      |   44 +-
 .../src/project_support/ProjectLoaderImpl.h        |    8 +-
 .../src/project_support/ProjectServiceImpl.cpp     |    6 +-
 .../src/project_support/ProjectServiceImpl.h       |    8 +-
 .../src/project_support/ProjectTasksGui.cpp        |    9 +-
 src/ugeneui/src/project_support/ProjectTasksGui.h  |   15 +-
 .../src/project_view/BuiltInObjectViews.cpp        |   11 +-
 src/ugeneui/src/project_view/ProjectViewImpl.cpp   |   11 +-
 src/ugeneui/src/project_view/ProjectViewImpl.h     |    2 +-
 .../src/project_view/ProjectViewSearchBox.cpp      |  124 -
 .../src/project_view/ProjectViewSearchBox.h        |   63 -
 src/ugeneui/src/project_view/ProjectViewWidget.ui  |   12 +-
 src/ugeneui/src/shtirlitz/Shtirlitz.cpp            |    2 +-
 src/ugeneui/src/shtirlitz/Shtirlitz.h              |    4 +-
 src/ugeneui/src/shtirlitz/StatisticalReport.ui     |   15 +-
 .../src/shtirlitz/StatisticalReportController.cpp  |    7 +-
 .../src/shtirlitz/StatisticalReportController.h    |    4 +-
 src/ugeneui/src/task_view/TaskStatusBar.cpp        |    8 +-
 src/ugeneui/src/task_view/TaskStatusBar.h          |   20 +-
 src/ugeneui/src/task_view/TaskViewController.cpp   |    4 +-
 src/ugeneui/src/task_view/TaskViewController.h     |   21 +-
 src/ugeneui/src/update/UgeneUpdater.cpp            |    2 +-
 src/ugeneui/src/update/UgeneUpdater.h              |    2 +-
 src/ugeneui/src/utils/MultilingualHtmlView.cpp     |    2 +-
 src/ugeneui/src/utils/MultilingualHtmlView.h       |    2 +-
 .../src/welcome_page/WelcomePageController.cpp     |    7 +-
 .../src/welcome_page/WelcomePageController.h       |    4 +-
 src/ugeneui/src/welcome_page/WelcomePageMdi.cpp    |    2 +-
 src/ugeneui/src/welcome_page/WelcomePageMdi.h      |    2 +-
 src/ugeneui/src/welcome_page/WelcomePageWidget.cpp |    2 +-
 src/ugeneui/src/welcome_page/WelcomePageWidget.h   |    2 +-
 src/ugeneui/transl/english.ts                      |  625 ++-
 src/ugeneui/transl/russian.ts                      |  637 ++-
 src/ugeneui/ugeneui.pro                            |    4 +-
 ugene.pro                                          |    9 +-
 4401 files changed, 101058 insertions(+), 57718 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..920e38c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,46 @@
+# qmake build folders
+**/_tmp
+src/_debug
+src/_release
+
+# Makefiles generated by qmake
+Makefile
+Makefile.Release
+Makefile.Debug
+
+# Linux generated files
+*.[oa]
+*.so
+*.so.*
+
+# Doxygen generated files
+/html
+
+# VS project files
+*.sdf
+*.opensdf
+*.suo
+*.vcxproj*
+*.tmp
+*.sln
+
+# MacOS generated files
+.DS_Store
+.qmake.stash
+*.xcodeproj/
+
+# Generated ugene shell launcher
+/ugene
+
+# Jetbrains tools (CLion, etc..)
+.idea
+
+# Directories with tests
+/test
+
+
+# QtCreator files
+ugene.pro.user
+
+# CLion build dir
+cmake-build-*
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..9a648fc
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "QSpec"]
+	path = src/libs_3rdparty/QSpec
+	url = https://github.com/ugeneunipro/QSpec.git
+	branch = ugene
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..2f07ca8
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,14 @@
+sudo: required
+dist: trusty
+
+install:
+  - sudo add-apt-repository --yes ppa:ubuntu-sdk-team/ppa
+  - sudo add-apt-repository --yes ppa:canonical-qt5-edgers/qt5-proper
+  - sudo apt-get update -qq
+  - sudo apt-get install qtbase5-dev qtdeclarative5-dev libqt5webkit5-dev libsqlite3-dev libqt5svg5-dev
+  - sudo apt-get install qt5-default qttools5-dev-tools qtscript5-dev
+  - sudo apt-get install libxtst-dev libprocps3-dev
+
+script:
+  - qmake ugene.pro CONFIG+=x64 UGENE_EXCLUDE_LIST_ENABLED=1 UGENE_USE_BUNDLED_ZLIB=0
+  - make -j 3 | sed -n 'p;n;n;n;n;'
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..a8b6907
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,97 @@
+# CMake build is not officially supported by UGENE and
+# can only be used for developement (for example to enable CLion IDE integration)
+#
+# For CLion developers:
+#   * add Qt5_DIR variable to File->Settings->Build,Execution,Deployment->CMake pointing to valid QT dir.
+#   * add UGENE_TRANSLATION_FILE environment variable to the RUN configuration and point it to *.qm file produced by qmake build
+
+cmake_minimum_required(VERSION 3.4)
+project(ugene)
+
+#set(CMAKE_VERBOSE_MAKEFILE ON)
+
+set(UGENE_VERSION 1.25.0-dev)
+set(UGENE_VER_MAJOR 1)
+set(UGENE_VER_MINOR 25)
+set(UGENE_VER_PATCH 0)
+
+set(UGENE_MIN_VERSION_SQLITE 1.13.0)
+set(UGENE_MIN_VERSION_MYSQL 1.16.0)
+
+add_definitions(
+        -DUGENE_VERSION=${UGENE_VERSION}
+        -DUGENE_VER_MAJOR=${UGENE_VER_MAJOR}
+        -DUGENE_VER_MINOR=${UGENE_VER_MINOR}
+        -DUGENE_VER_PATCH=${UGENE_VER_PATCH}
+
+        -DUGENE_USE_BUNDLED_ZLIB
+
+        -DQT_FATAL_ASSERT
+)
+
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG")
+
+# 3rd party libs
+add_subdirectory(src/libs_3rdparty/breakpad)
+add_subdirectory(src/libs_3rdparty/samtools)
+add_subdirectory(src/libs_3rdparty/sqlite3)
+add_subdirectory(src/libs_3rdparty/zlib)
+
+# Core libs
+add_subdirectory(src/corelibs/U2Core)
+add_subdirectory(src/corelibs/U2Algorithm)
+add_subdirectory(src/corelibs/U2Formats)
+add_subdirectory(src/corelibs/U2Lang)
+add_subdirectory(src/corelibs/U2Private)
+add_subdirectory(src/corelibs/U2Gui)
+add_subdirectory(src/corelibs/U2Test)
+add_subdirectory(src/corelibs/U2Designer)
+add_subdirectory(src/corelibs/U2View)
+
+# launchers
+add_subdirectory(src/ugeneui)
+add_subdirectory(src/ugenecl)
+
+# local plugins
+add_subdirectory(src/plugins/annotator)
+add_subdirectory(src/plugins/api_tests)
+add_subdirectory(src/plugins/biostruct3d_view)
+add_subdirectory(src/plugins/browser_support)
+add_subdirectory(src/plugins/chroma_view)
+add_subdirectory(src/plugins/circular_view)
+add_subdirectory(src/plugins/CoreTests)
+add_subdirectory(src/plugins/dbi_bam)
+add_subdirectory(src/plugins/dna_export)
+add_subdirectory(src/plugins/dna_flexibility)
+add_subdirectory(src/plugins/dna_graphpack)
+add_subdirectory(src/plugins/dna_stat)
+add_subdirectory(src/plugins/dotplot)
+add_subdirectory(src/plugins/enzymes)
+add_subdirectory(src/plugins/external_tool_support)
+add_subdirectory(src/plugins/genome_aligner)
+# never tried: add_subdirectory(src/plugins/GUITestBase)
+add_subdirectory(src/plugins/linkdata_support)
+add_subdirectory(src/plugins/orf_marker)
+add_subdirectory(src/plugins/pcr)
+add_subdirectory(src/plugins/perf_monitor)
+add_subdirectory(src/plugins/query_designer)
+add_subdirectory(src/plugins/remote_blast)
+add_subdirectory(src/plugins/repeat_finder)
+add_subdirectory(src/plugins/smith_waterman)
+add_subdirectory(src/plugins/test_runner)
+add_subdirectory(src/plugins/weight_matrix)
+add_subdirectory(src/plugins/workflow_designer)
+
+# 3rd party plugins
+add_subdirectory(src/plugins_3rdparty/ball)
+add_subdirectory(src/plugins_3rdparty/gor4)
+add_subdirectory(src/plugins_3rdparty/hmm2)
+add_subdirectory(src/plugins_3rdparty/kalign)
+add_subdirectory(src/plugins_3rdparty/phylip)
+add_subdirectory(src/plugins_3rdparty/primer3)
+add_subdirectory(src/plugins_3rdparty/psipred)
+add_subdirectory(src/plugins_3rdparty/ptools)
+add_subdirectory(src/plugins_3rdparty/sitecon)
+add_subdirectory(src/plugins_3rdparty/umuscle)
+add_subdirectory(src/plugins_3rdparty/variants)
diff --git a/COPYRIGHT b/COPYRIGHT
deleted file mode 100644
index 36be159..0000000
--- a/COPYRIGHT
+++ /dev/null
@@ -1,33 +0,0 @@
-Unipro UGENE - Integrated Bioinformatics Suite
-Copyright (C) 2008-2016 Unipro, Novosibirsk, Russia
-
-This suite of programs is free software. You can redistribute it
-and/or modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-In other words, you are free to modify, copy, or redistribute this
-source code and its documentation in any way you like, but you must
-distribute all derivative versions as free software under the same
-terms that I've provided my code to you (i.e. the GNU General Public
-License). This precludes any use of the code in proprietary or
-commercial software unless your source code is made freely available.
-
-If you wish to use Unipro UGENE code under a different Open Source 
-license that's not compatible with the GPL (like the Artistic License, BSD
-license, or the Netscape Public License), please contact us
-(ugene at unipro.ru) for permission.
-
-Incorporation into commercial software under non-GPL terms is possible
-by obtaining a specially licensed version from Unipro.
-Contact 'ugene at unipro.ru' to arrange licensing terms.
-
-This software is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this Unipro UGENE release, in the file LICENSE; 
-if not, write to the Free Software Foundation, Inc., 
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/LICENSE.3rd_party.txt b/LICENSE.3rd_party.txt
index d2fa173..039c16e 100644
--- a/LICENSE.3rd_party.txt
+++ b/LICENSE.3rd_party.txt
@@ -182,10 +182,32 @@ The Files in src/plugins_3rdparty/ball/include and
 
 
 The Files in src/plugins_3rdparty/phylyp/src
-   version 3.6. (c) Copyright 1993-2004 by the University of Washington.
    Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed.
+
+   Copyright (c) 1993-2014, Joseph Felsenstein
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+	this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright notice,
+	this list of conditions and the following disclaimer in the documentation
+	and/or other materials provided with the distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+   POSSIBILITY OF SUCH DAMAGE. 
 
 
 The Files in src/plugins_3rdparty/kalign/src
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..474358a
--- /dev/null
+++ b/README.md
@@ -0,0 +1,74 @@
+# UGENE
+
+## Building UGENE
+
+### Prerequisites
+
+Make sure the Qt (>= 5.2.1 and < 5.6) development libraries are installed:
+
+* Ubuntu 16.04: `sudo apt-get install qt5-default qttools5-dev-tools qtscript5-dev libqt5svg5-dev libqt5webkit5-dev libprocps4-dev`
+* Ubuntu 14.04: `sudo apt-get install qt5-default qttools5-dev-tools qtscript5-dev libqt5svg5-dev libqt5webkit5-dev libprocps3-dev`
+* Ubuntu 12.04:
+    * Download and install Qt 5.5.1: www.qt.io/download-open-source/
+    * Set the system variable: export PATH=$PATH:~/Qt5.5.1/5.5/gcc_64/bin
+    * `sudo apt-get install g++ libgl1-mesa-dev libproc-dev libglu1-mesa-dev`
+    * `sudo ln -s /usr/lib/libproc.so /usr/lib/libprocps.so`
+* Fedora:       `sudo yum install qt5-qtscript-devel qt5-qtbase-devel qt5-qtsvg-devel qt5-linguist qt5-qtwebkit-devel gcc-c++ redhat-rpm-config procps-ng-devel mesa-libGLU-devel`
+* Arch Linux:   `sudo pacman -S qt`
+* Mac OS X: download from Qt official site (http://www.qt.io/download/)
+* Windows: download from Qt official site (http://www.qt.io/download/)
+
+### For Windows users:
+
+To build with devenv (Visual Studio)
+
+1. `qmake -r -tp vc ugene.pro`
+   1.1. add "CONFIG+=x64" to qmake command for 64-bit build
+2. open ugene.sln from Visual Studio or run `devenv.exe ugene.sln /Build` from MSVC command line
+
+To build with nmake.exe:
+
+1. `qmake -r ugene.pro`
+   1.1. add "CONFIG+=x64" to qmake command for 64-bit build
+2. run `nmake`, `nmake debug` or `nmake release` to build UGENE
+
+Also you need to add "libeay.dll" and "ssleay.dll" from OpenSSL ToolKit to "../ugene/src/_debug" folder
+
+### For *nix users:
+
+0. installation paths may be set up in ugene_globals.pri
+1. `qmake -r` (Fedora: `qmake-qt5 -r`)
+2. `make -j 4`
+3. `sudo make install`
+4. `ugene -ui`
+
+> Note: usually, `make` builds a release version of UGENE.
+   However, on certain platforms default target is debug.
+   To enforce release build use `make release` or `make all`.
+
+Some more information you can see in installer/_common_data/README file.
+
+### Build with CUDA
+
+1. Download and install required software from http://www.nvidia.com/object/cuda_get.html for your OS
+2. Make sure that some system variable are set:
+   ```
+   CUDA_LIB_PATH=/path_where_cuda_installed/lib
+   CUDA_INC_PATH=/path_where_cuda_installed/include
+   PATH=$PATH:/path_where_cuda_installed/bin
+   ```
+   
+   for *nix: `LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CUDA_LIB_PATH`
+
+3. cd ./src and open ugene_globals.pri, find and set variable UGENE_CUDA_DETECTED = 1
+
+### Build with OpenCL
+
+1. Download and install video driver wich supports OpenCL
+2. Download OpenCL headers from http://www.khronos.org/registry/cl/
+   or find them in video vendor SDK directory.
+3. make sure that you have system variable is set correctly:
+          `OPENCL_INC_PATH=/path_where_open_cl_installed`
+4. cd ./src and open ugene_globals.pri, find and set variable `UGENE_OPENCL_DETECTED = 1`
+
+> Notes: UGENE_CELL flag in ugene_globals should be uncommented when building on Cell BE platform
diff --git a/data/cmdline/align-to-reference.uwl b/data/cmdline/align-to-reference.uwl
new file mode 100644
index 0000000..10e055b
--- /dev/null
+++ b/data/cmdline/align-to-reference.uwl
@@ -0,0 +1,102 @@
+#@UGENE_WORKFLOW
+#The workflow does the following things:
+#1) Reads a set of Sanger sequencing reads from ABI files.
+#2) Trims ends of the reads by the quality value.
+#3) Filter the short trimmed reads.
+#4) Aligns the filtered trimmed reads to a reference sequence.
+#
+#You can change the workflow parameters:
+#1) Quality threshold for the trimming.
+#2) Minimum read length. If length of a trimmed read is less than the minimum value than the read is filtered.
+#
+#The output data are:
+#1) Multiple sequence alignment file. The first sequence of the alignment is the reference and other ones are the reads.
+#2) Annotated reference sequence file. The annotations are the aligned reads.
+
+
+
+workflow "Trim and map Sanger reads"{
+
+    SequenceQualityTrim {
+        type:SequenceQualityTrim;
+        name:"Sequence Quality Trimmer";
+    }
+    read-sequence {
+        type:read-sequence;
+        name:"Read Sequence";
+        url-in {
+            dataset:"Dataset 1";
+        }
+    }
+    align-to-reference {
+        type:align-to-reference;
+        name:"Map to Reference";
+        result-url:alignment.ugenedb;
+    }
+
+    .actor-bindings {
+        SequenceQualityTrim.out-sequence->align-to-reference.in-sequence
+        read-sequence.out-sequence->SequenceQualityTrim.in-sequence
+    }
+
+    read-sequence.sequence->SequenceQualityTrim.in-sequence.sequence
+    SequenceQualityTrim.sequence->align-to-reference.in-sequence.sequence
+
+    .meta {
+        parameter-aliases {
+            SequenceQualityTrim.both-ends {
+                alias:trim-both-ends;
+            }
+            SequenceQualityTrim.len-id {
+                alias:min-length;
+            }
+            SequenceQualityTrim.qual-id {
+                alias:threshold;
+            }
+            read-sequence.url-in {
+                alias:reads;
+            }
+            align-to-reference.identity {
+                alias:min-identity;
+            }
+            align-to-reference.reference {
+                alias:reference;
+            }
+            align-to-reference.result-url {
+                alias:result-url;
+            }
+            align-to-reference.row-naming-policy {
+                alias:row-naming-policy;
+            }
+        }
+        visual {
+            SequenceQualityTrim {
+                pos:"-675 -525";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                in-sequence.angle:180;
+                out-sequence.angle:360;
+            }
+            align-to-reference {
+                pos:"-375 -510";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                in-sequence.angle:180;
+                out.angle:360;
+            }
+            read-sequence {
+                pos:"-930 -510";
+                style:ext;
+                bg-color-ext:"0 128 128 64";
+                out-sequence.angle:360;
+            }
+            SequenceQualityTrim.out-sequence->align-to-reference.in-sequence {
+                text-pos:"-45 -43";
+            }
+            read-sequence.out-sequence->SequenceQualityTrim.in-sequence {
+                text-pos:"-33.8281 -27";
+            }
+        }
+    }
+}
+
diff --git a/data/cmdline/extract_consensus_sequence.uwl b/data/cmdline/extract_consensus_sequence.uwl
index 372e7c7..18655e5 100644
--- a/data/cmdline/extract_consensus_sequence.uwl
+++ b/data/cmdline/extract_consensus_sequence.uwl
@@ -57,7 +57,7 @@ workflow "New workflow"{
                 alias:keep_gaps;
             }
             extract-msa-consensus-sequence.threshold {
-                alias:threshhold;
+                alias:threshold;
             }
         }
         visual {
diff --git a/data/samples/APR/DNA.apr b/data/samples/APR/DNA.apr
new file mode 100644
index 0000000..e745a31
--- /dev/null
+++ b/data/samples/APR/DNA.apr
@@ -0,0 +1,1525 @@
+|AlignmentProject
+	obj|Project|0
+		obj|MolList|0
+			obj|Object*|24
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||CA40430|||||0|0
+						end|1|0|\60:Candida albicans cyclin B homolog (CYB1) mRNA, complete cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|13|RN   [1]|RP   1-1752|\30:RA   Damagnez V., Cottarel G.;|\75:RT   "Candida albicans CDK1 and CYB1: cDNA homologues of the cdc2/CDC28 and|\47:RT   cdc13/CLB1/CLB2 cell cycle control genes";|\28:RL   Gene 172:137-141(1996).|RN   [2]|RP   1-1752|\30:RA   Damagnez V., Cottarel G.;|RT   ;|\64:RL   Submitted (09-NOV-1995) to the EMBL/GenBank/DDBJ databases.|\76:RL   Veronique Damagnez, Biology, Mitotix Inc., 1 Kendall Square, Cambridge,|RL   MA 02139, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1752
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1752|1|0|1|1|1. .1752
+							obj|String*|1|\28:/organism="Candida albicans"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CYB1)_1|cyclin B homolog|0|184|1662|1|1|1|1|184. .1662
+							obj|String*|6|/codon_start=1|\23:/db_xref="PID:g1103928"|\28:/db_xref="SWISS-PROT:P47829"|/transl_table=12|/gene="CYB1"|/product="Cyb1"
+							end|0||
+						end
+					end|\1752:gctattccccccttttccttttttttatagagaaacttattccaattactcatcgaacaagatcttactagacttgtagactcacgacacgataaattttaattcattaatcaaccaacgaaccagccaaaccaaaattaattcacatttatactcactgtttgtcattttcatctcatagtaatgccacaagtcactaaaactaataatgaaaatgagtttagacttactagatcaaaagtacagcatcaagagtcgataagtaccatcaaaaatacgaccatatccaattctcagcataaacaacaaacacaacaacaaatttcatcaccacctcaagtctctgtaacatcatctgaaggagtttcacatgtcaatacacgtcaatatttgggtgatgtttcaaatcaatacataacaaatgctaaaccaacaaataaaagaaaaccattgggtggagacaatgcccctctacaa [...]
+					obj|String*|1|U40430
+					end|g1103927|16-OCT-1996|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P47829; CG21_CANAL.
+					end|FUN
+					obj|String*|1| CYB1
+					end
+					obj|String*|1|Candida albicans
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Hemiascomycetes|Saccharomycetales|\28:mitosporic Saccharomycetales|Candida
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||CGCYC1|||||0|0
+						end|1|0|\45:C.gloeosporioides mRNA for dispensible cyclin
+						obj|String*|2|CYC1 gene|cyclin
+						end
+						obj|String*|0
+						end
+						obj|String*|13|RN   [1]|RP   1-809|RA   Manners J.M.;|RT   ;|\64:RL   Submitted (26-OCT-1992) to the EMBL/GenBank/DDBJ databases.|\77:RL   J.M. Manners, Cooperative Research Centre for, Tropical Plant Pathology,|\68:RL   University of Queensland, St. Lucia, Queensland 4072, AUSTRALIA|RN   [2]|\23:RX   MEDLINE; 94040789.|\73:RA   Masel A.M., Struijk N., McIntyre C.L.M., Irwin J.A.G., Manners J.M.;|\72:RT   "A transcribed dispensible DNA sequence in the fungal phytopathogen|\37:RT    [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|809
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|809|1|0|1|1|1. .809
+							obj|String*|7|\32:/organism="Glomerella cingulata"|\36:/chromosome="1.2 Mb mini-chromosome"|/strain="type B"|\24:/clone_lib="lambda gt10"|/clone="Cg1.2Mb-6"|/sub_strain="race 3"|/isolate="UQ62"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CYC1)_1||0|44|781|1|1|1|1|44. .781
+							obj|String*|4|/db_xref="PID:g2577"|\28:/db_xref="SWISS-PROT:Q06374"|/gene="CYC1"|\29:/product="dispensible cyclin"
+							end|0||
+						end
+					end|\809:cttcagtcttggtgtcttcgcttcgttggcgacaacgctgaagatgctcaaacgagctactgtcgacgtttcgagtcccgcagacgtaccccaaccaaaaagacggaaagcgtacctgacaggcgcggaccaggcgcgtgacgagtatgcagaagatgccatcaaacatatggaatacatagagtccgaaaccacgcctgataagcgctgtataccagctagcgtactagaaatgagaccagaagttatccggtctcttatcaagatccacaaggagctcaatctgcttcctcagaccctgttgttgtccgtcaacctccttgaccgattctgctgcaagaaggatttcctcgggcaagtttattacagagtgttcagctgcgccgcgctttggattgcctccaaattcgttgaggacaaagatcgagtaccatctgtctgccgtgttttggattatgttcctagcggaatgtattgc [...]
+					obj|String*|1|X69099
+					end|g2576|10-JAN-1994|
+					obj|String*|0
+					end|0
+					obj|String*|1|\30:SWISS-PROT; Q06374; CG1_COLGL.
+					end|FUN
+					obj|String*|1| CYC1
+					end
+					obj|String*|1|Glomerella cingulata
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|8|Eukaryota|Fungi|Ascomycota|Euascomycetes|Pyrenomycetes|Phyllachorales|Phyllachoraceae|Glomerella
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||S59895|||||0|0
+						end|1|0|\65:mcs2=cyclin homolog [Schizosaccharomyces pombe, Genomic, 1301 nt]
+						obj|String*|0
+						end
+						obj|String*|3|\67:This entry [NCBI gibbsq 130436] was created by the journal scanning|\67:component of NCBI/GenBank at the National Library of Medicine. This|\28:sequence comes from Fig. 1B.
+						end
+						obj|String*|7|RN   [1]|RP   1-1301|\23:RX   MEDLINE; 93223713.|\23:RA   Molz L., Beach D.;|\74:RT   "Characterization of the fission yeast mcs2 cyclin and its associated|\31:RT   protein kinase activity.";|\32:RL   EMBO J. 12:1723-1732(1993).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|1301
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(mcs2)_1|\160:Description: cyclin homolog; For the protein sequence (NCBI gibbsq 130437): Method: conceptual translation supplied by author. This sequence comes from Fig. 1B.|0|136|1242|1|1|1|1|\36:join(136. .408,495. .568,621. .1242)
+							obj|String*|4|/codon_start=1|\22:/db_xref="PID:g299547"|\28:/db_xref="SWISS-PROT:P36613"|/gene="mcs2"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1301|1|0|1|1|1. .1301
+							obj|String*|1|\37:/organism="Schizosaccharomyces pombe"
+							end|0||
+						end
+					end|\1301:atttgggtttttcatagcagagaagtatccaaatttcaaaaatattattattttactggctttatagagaagtatttaaatttttgcataaccctcaattgatagagtgctgtaaattctacttacattattcacatgtctgccgataaatttcgtgattccacgcattacagagattggatttttacggaagaagacctttcaaaaacacgtgctaaagtaaatgaaaaatttacgaatattgtacgtgagcgaatgctggaagagttgtctttacaaaacaaggaagcatccttagaagttttgcctccaactcttaccgttgaagaagaacttgaacttgtaaattattatagtttccagttgaacgcactttcttccgctctttccttaccaactcatattcgcgtatgtttagacatggtcggatttccttcaattacttggaaactgtactcaatataaacattccgactt [...]
+					obj|String*|1|S59895
+					end|g299546|12-JUL-1993|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P36613; CGM2_SCHPO.
+					end|FUN
+					obj|String*|1| mcs2
+					end
+					obj|String*|1|\25:Schizosaccharomyces pombe
+					end
+					obj|String*|1|fission yeast
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Archiascomycetes|\23:Schizosaccharomycetales|\24:Schizosaccharomycetaceae|Schizosaccharomyces
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||S67490|||||0|0
+						end|1|0|\75:cig2=B-type cyclin [Schizosaccharomyces pombe=fission yeast, mRNA, 1610 nt]
+						obj|String*|0
+						end
+						obj|String*|3|\62:GenBank staff at the National Library of Medicine created this|\66:entry [NCBI gibbsq 140739] from the original journal article. This|\43:sequence comes from Fig. 2. NCBI gi: 456943
+						end
+						obj|String*|7|RN   [1]|RP   1-1610|\23:RX   MEDLINE; 94088577.|\27:RA   Connolly T., Beach D.;|\73:RT   "Interaction between the Cig1 and Cig2 B-type cyclins in the fission|\23:RT   yeast cell cycle";|\39:RL   Mol. Cell. Biol. 14:768-776(1994).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1610
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(cig2)_1|\381:mismatches(184,230,370,386,387,388). Cig2; Method: conceptual translation supplied by author. Authors indicate that this amino acid sequence is different from that previously published in Mol. Cell. Biol., Vol. 13, Bueno and Russell, 1993, p. 2286-2297. This sequence comes from Fig. 2. Author-given protein sequence is in conflict with the conceptual translation. NCBI gi: 456944.|0|319|1554|1|1|1|1|319. .1554
+							obj|String*|5|/codon_start=1|\22:/db_xref="PID:g456944"|\28:/db_xref="SWISS-PROT:P36630"|/gene="cig2"|\24:/product="B-type cyclin"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1|fission yeast|0|1|1610|1|0|1|1|1. .1610
+							obj|String*|1|\37:/organism="Schizosaccharomyces pombe"
+							end|0||
+						end
+					end|\1610:cccacaacagtaggttggtttggttgtttacacaattcattgtttatgtttggacgattcttncccttcctcctatcaacaacaatagaataattcgacccattgatttattctcatttaaaagagaaactttaaaaattcgctataagtgctttctgtttctcgatcgctcaatttccctaatttatcctatctaattgagattaatttaccaaaaacagtttccttattttaataaaaagaagacatttttggttacaaacaatcagatatatttctatacgttgataaaagggaatttatcaatccatatttcatatggctctctattcaatttcaaagcctgttggttctaaaatcaataagcatagttatcaagatgaaaacacacttgttggcaaacaagctttatcaaaagggactgagaagacaaaattatctacaaattttgaaattaatctgccacgtcgaactgtc [...]
+					obj|String*|1|S67490
+					end|g456943|26-FEB-1994|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P36630; CG22_SCHPO.
+					end|FUN
+					obj|String*|1| cig2
+					end
+					obj|String*|1|\25:Schizosaccharomyces pombe
+					end
+					obj|String*|1|fission yeast
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Archiascomycetes|\23:Schizosaccharomycetales|\24:Schizosaccharomycetaceae|Schizosaccharomyces
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||SC20221|||||0|0
+						end|1|0|\101:Saccharomyces cerevisiae RNA polymerase II holoenzyme cyclin-like subunit (SRB11) gene, complete cds.
+						obj|String*|0
+						end
+						obj|String*|1|NCBI gi: 699505
+						end
+						obj|String*|14|RN   [1]|RP   1-1608|\23:RX   MEDLINE; 95183147.|\68:RA   Liao S.M., Zhang J., Jeffery D.A., Koleske A.J., Thompson C.M.,|\56:RA   Chao D.M., Viljoen M., van Vuuren H.J., Young R.A.;|\64:RT   "A kinase-cyclin pair in the RNA polymerase II holoenzyme";|\30:RL   Nature 374:193-196(1995).|RN   [2]|RP   1-1608|RA   Zhang J.;|RT   ;|\64:RL   Submitted (24-JAN-1995) to the EMBL/GenBank/DDBJ databases.|\69:RL   Jianhua Zhang, Whitehead Institute for Biomedical Research, Nin [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|1608
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1608|1|0|1|1|1. .1608
+							obj|String*|4|\36:/organism="Saccharomyces cerevisiae"|/chromosome="XIV"|/map="14L"|/strain="S288C"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(SRB11)_1|\175:Srb11p; cyclin-like subunit in a cyclin-dependent kinase component of RNA polymerase II holoenzyme; required for responses to positive and negative regulators; NCBI gi: 699506|0|493|1464|1|1|1|1|493. .1464
+							obj|String*|5|/codon_start=1|\22:/db_xref="PID:g699506"|\28:/db_xref="SWISS-PROT:P47821"|/gene="SRB11"|\59:/product="RNA polymerase II holoenzyme cyclin-like subunit"
+							end|0||
+						end
+					end|\1608:taccaggtcaagaagcagaatacccaagggcatcctccttaatgagttgatttaaacaatttaaaatttttaaatctcattacgttttccgcatacgaattggtgggagactttcaacccaaagcatattactgagtaaaaaaaattttactccattttgtaagcttcgatttgtgacgattctttggtcatggattgaagaactttaaacgagaagaaattagaaaacaggtgaagaccactatttagttctttaccgcaacataggataaacaaagttattttcttactcctttatatatttgaaaaaatataaaatccacggaaaaacatcgaaaattcatttttcatgaaggaaaattagggttcatacaggagtagagttcattgatgtggtagcaaccttgttagcactcatattgttcgaacaaaaaatgccctctcaaactttagttgaagagcgataaggcatctgaa [...]
+					obj|String*|1|U20221
+					end|g699505|17-JUL-1995|
+					obj|String*|0
+					end|0
+					obj|String*|3|SGD; L0002796; ssn8.|\31:SWISS-PROT; P47821; UME3_YEAST.|\25:TRANSFAC; T02155; T02155.
+					end|FUN
+					obj|String*|1| SRB11
+					end
+					obj|String*|1|\24:Saccharomyces cerevisiae
+					end
+					obj|String*|1|baker's yeast
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Hemiascomycetes|Saccharomycetales|Saccharomycetaceae|Saccharomyces
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||SC20635|||||0|0
+						end|1|0|\72:Saccharomyces cerevisiae cyclin homolog Ssn8p (SSN8) gene, complete cds.
+						obj|String*|0
+						end
+						obj|String*|1|NCBI gi: 676866
+						end
+						obj|String*|14|RN   [1]|RP   1-1290|\23:RX   MEDLINE; 95249601.|\41:RA   Kuchin S., Yeghiayan P., Carlson M.;|\71:RT   "Cyclin-dependent protein kinase and cyclin homologs SSN3 and SSN8|\53:RT   contribute to transcriptional control in yeast";|\54:RL   Proc. Natl. Acad. Sci. U.S.A. 92:4006-4010(1995).|RN   [2]|RP   1-1290|RA   Kuchin S.;|RT   ;|\64:RL   Submitted (03-FEB-1995) to the EMBL/GenBank/DDBJ databases.|\75:RL   Sergei Kuchin, Genetics and Development, Columbia University, [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|1290
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1290|1|0|1|1|1. .1290
+							obj|String*|5|\36:/organism="Saccharomyces cerevisiae"|/chromosome="XIV"|\53:/clone_lib="YCp50-based genomic library from M. Rose"|/strain="S288C"|\21:/map="14R; near NME1"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(SSN8)_1||0|175|1146|1|1|1|1|175. .1146
+							obj|String*|5|/codon_start=1|\22:/db_xref="PID:g676867"|\28:/db_xref="SWISS-PROT:P47821"|/gene="SSN8"|/product="Ssn8p"
+							end|0||
+						end
+					end|\1290:tccacggaaaaacatcgaaaattcatttttcatgaaggaaaattagggttcatacaggagtagagttcattgatgtggtagcaaccttgttagcactcatattgttcgaacaaaaaatgccctctcaaactttagttgaagagcgataaggcatctgaatctcaaaagttagacatgtcggggagcttctggacatctacacaaaggcatcattggcaatataccaaggcatcattggctaaagagaggcagaagttatggctattggagtgccagctgtttcctcaaggtttgaatattgtaatggattcgaagcaaaacggcatcgaacaatccatcacaaagaatataccaataactcaccgagacttacactatgataaagattataatctaaggatctactgctatttcctgataatgaagcttggaaggagactaaatataagacagtatgcactggctacagcacatatt [...]
+					obj|String*|1|U20635
+					end|g676866|29-JAN-1996|
+					obj|String*|0
+					end|0
+					obj|String*|3|SGD; L0002796; ssn8.|\31:SWISS-PROT; P47821; UME3_YEAST.|\25:TRANSFAC; T02155; T02155.
+					end|FUN
+					obj|String*|1| SSN8
+					end
+					obj|String*|1|\24:Saccharomyces cerevisiae
+					end
+					obj|String*|1|baker's yeast
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Hemiascomycetes|Saccharomycetales|Saccharomycetaceae|Saccharomyces
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||SCCLB1|||||0|0
+						end|1|0|\78:S.cerevisiae G2-specific B-type cyclin-like protein (CLB1) gene, complete cds.
+						obj|String*|1|\38:G2-specific B-type cyclin-like protein
+						end
+						obj|String*|1|NCBI gi: 171234
+						end
+						obj|String*|8|RN   [1]|RP   1-1866|\23:RX   MEDLINE; 91191554.|\77:RA   Surana U.C., Robitsch H., Clive P., Schuster T., Fitch I., Futcher A.B.,|RA   Nasmyth K.;|\71:RT   "The role of CDC28 and cyclins during mitosis in the budding yeast|RT   S.cerevisiae";|\27:RL   Cell 65:145-161(1991).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|1866
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CLB1)_1|NCBI gi: 171235|0|301|1716|1|1|1|1|301. .1716
+							obj|String*|5|/codon_start=1|\22:/db_xref="PID:g171235"|\28:/db_xref="SWISS-PROT:P24868"|/gene="CLB1"|\49:/product="G2-specific B-type cyclin-like protein"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1866|1|0|1|1|1. .1866
+							obj|String*|1|\36:/organism="Saccharomyces cerevisiae"
+							end|0||
+						end
+					end|\1866:attgcacttctgtgtaagaagaagatactagggtgatctattctaggcaattttggttgtattgtgttttttacattcggccaaacttgagcaggctgcaattttagtgtcttcggtttttccagcgacagttttacttgtggctcttggtatagtttcttaaaactattaaagttgctaactggtgcagctgtttagatcacaaaagcgtaattaagaataagatctaccaacaagaacagagccaaaatattttcgtccgttatatcaaccatcaaaggaagctttaatcttctcataatgtcacgatcccttttggtagagaatagtagaaccattaatagtaatgaagagaagggggtaaacgaaagtcaatatatcttacaaaagagaaacgtcccaaggaccattctcggtaatgtcacaaataatgcaaatatcctgcaagagatttctatgaacagaaaaattgggatg [...]
+					obj|String*|1|M65069
+					end|g171234|11-MAY-1994|
+					obj|String*|0
+					end|0
+					obj|String*|2|SGD; L0000349; CLB1.|\31:SWISS-PROT; P24868; CG21_YEAST.
+					end|FUN
+					obj|String*|1| CLB1
+					end
+					obj|String*|1|\24:Saccharomyces cerevisiae
+					end
+					obj|String*|1|baker's yeast
+					end
+					obj|String*|0
+					end
+					obj|String*|7|Eukaryota|Fungi|Ascomycota|Hemiascomycetes|Saccharomycetales|Saccharomycetaceae|Saccharomyces
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HS11791|||||0|0
+						end|1|0|\34:Human cyclin H mRNA, complete cds.
+						obj|String*|0
+						end
+						obj|String*|1|NCBI gi: 536919
+						end
+						obj|String*|14|RN   [1]|RP   1-1203|\23:RX   MEDLINE; 94359612.|\63:RA   Makela T.P., Tassan J.P., Nigg E., Frutiger S., Hughes G.,|RA   Weinberg R.A.;|\63:RT   "A cyclin associated with the CDK-activating kinase MO15";|\30:RL   Nature 371:254-257(1994).|RN   [2]|RP   1-1203|RA   Makela T.P.;|RT   ;|\64:RL   Submitted (05-JUL-1994) to the EMBL/GenBank/DDBJ databases.|\77:RL   Tomi P. Makela, Whitehead Institute for Biomedical Research, 9 Cambridge|\37:RL   Center, Cambridge, MA 02142, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1203
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1203|1|0|1|1|1. .1203
+							obj|String*|5|\24:/organism="Homo sapiens"|/clone="F11-1"|\54:/clone_lib=" Clontech HL1151x 5' stretch cDNA library"|/dev_stage="fetus"|/tissue_type="liver"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1|NCBI gi: 536920|0|61|1032|1|1|1|1|61. .1032
+							obj|String*|4|/codon_start=1|\22:/db_xref="PID:g536920"|\28:/db_xref="SWISS-PROT:P51946"|/product="cyclin H"
+							end|0||
+						end
+					end|\1203:ggacgctgatgcgtttgggttctcgtctgcagaccctctggacctggtcacgattccataatgtaccacaacagtagtcagaagcggcactggaccttctccagcgaggagcagctggcaagactgcgggctgacgccaaccgcaaattcagatgcaaagccgtggccaacgggaaggttcttccgaatgatccagtctttcttgagcctcatgaagaaatgacactctgcaaatactatgagaaaaggttattggaattctgttcggtgtttaagccagcaatgccaagatctgttgtgggtacggcttgtatgtatttcaaacgtttttatcttaataactcagtaatggaatatcaccccaggataataatgctcacttgtgcatttttggcctgcaaagtagatgaattcaatgtatctagtcctcagtttgttggaaacctccgggagagtcctcttggacaggagaaggca [...]
+					obj|String*|1|U11791
+					end|g536919|16-FEB-1995|
+					obj|String*|0
+					end|0
+					obj|String*|2|\31:SWISS-PROT; P51946; CYCH_HUMAN.|\25:TRANSFAC; T02184; T02184.
+					end|HUM
+					obj|String*|0
+					end
+					obj|String*|1|Homo sapiens
+					end
+					obj|String*|1|human
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Primates|Catarrhini|Hominidae|Homo
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HS12685|||||0|0
+						end|1|0|\34:Human cyclin H mRNA, complete cds.
+						obj|String*|0
+						end
+						obj|String*|1|NCBI gi: 532560
+						end
+						obj|String*|14|RN   [1]|RP   1-1150|\23:RX   MEDLINE; 94349374.|\30:RA   Fisher R.p., Morgan D.O.;|\73:RT   "A novel cyclin associates with MO15/CDK7 to form the CDK-activating|RT   kinase";|\27:RL   Cell 78:713-724(1994).|RN   [2]|RP   1-1150|RA   Fisher R.p.;|RT   ;|\64:RL   Submitted (27-JUL-1994) to the EMBL/GenBank/DDBJ databases.|\75:RL   Robert P. Fisher, Physiology, University of California, San Francisco,|\57:RL   513 Parnassus Ave, San Francisco, CA 94143-0444, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1150
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1150|1|0|1|1|1. .1150
+							obj|String*|4|\24:/organism="Homo sapiens"|\30:/clone="pBluescript SK-/Cyc H"|\48:/clone_lib="lambdaZAP II-HeLa cDNA (Stratagene)"|/cell_line="HeLa"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1|NCBI gi: 532561|0|13|984|1|1|1|1|13. .984
+							obj|String*|4|/codon_start=1|\22:/db_xref="PID:g532561"|\28:/db_xref="SWISS-PROT:P51946"|/product="cyclin H"
+							end|0||
+						end
+					end|\1150:cacgattccataatgtaccacaacagtagtcagaagcggcactggaccttctccagcgaggagcagctggcaagactgcgggctgacgccaaccgcaaattcagatgcaaagccgtggccaacgggaaggttcttccgaatgatccagtctttcttgagcctcatgaagaaatgacactctgcaaatactatgagaaaaggttattggaattctgttcggtgtttaagccagcaatgccaagatctgttgtgggtacggcttgtatgtatttcaaacgtttttatcttaataactcagtaatggaatatcaccccaggataataatgctcacttgtgcatttttggcctgcaaagtagatgaattcaatgtatctagtcctcagtttgttggaaacctccgggagagtcctcttggacaggagaaggcacttgaacagatactggaatatgaactacttcttatacagcaacttaat [...]
+					obj|String*|1|U12685
+					end|g532560|17-DEC-1994|
+					obj|String*|0
+					end|0
+					obj|String*|2|\31:SWISS-PROT; P51946; CYCH_HUMAN.|\25:TRANSFAC; T02184; T02184.
+					end|HUM
+					obj|String*|0
+					end
+					obj|String*|1|Homo sapiens
+					end
+					obj|String*|1|human
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Primates|Catarrhini|Hominidae|Homo
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HS4741310|||||0|0
+						end|1|0|\35:Human cyclin G1 mRNA, complete cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|14|RN   [1]|RP   1-1207|\38:RA   Bates S., Rowan S., Vousden K.H.;|\70:RT   "Characterization of human cyclin G1 and G2: DNA damage inducible|RT   genes";|\33:RL   Oncogene 13:1103-1109(1996).|RN   [2]|RP   1-1207|\40:RA   Bates S.A., Rowan S., Vousden K.H.;|RT   ;|\64:RL   Submitted (29-JAN-1996) to the EMBL/GenBank/DDBJ databases.|\58:RL   Stewart A. Bates, Molecular Carcinogenesis, ABL Basic|\74:RL   Research/NCI-FCRDC, Room 222, Building 539, Frederick, MD 21702-120 [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1207
+					obj|Object*|4
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1207|1|0|1|1|1. .1207
+							obj|String*|3|\24:/organism="Homo sapiens"|/dev_stage="fetus"|\21:/tissue_type="spleen"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|52|52|5'UTR_1||0|1|213|1|1|1|1|1. .213
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1||0|214|1101|1|1|1|1|214. .1101
+							obj|String*|4|/codon_start=1|\23:/db_xref="PID:g1236913"|\28:/db_xref="SWISS-PROT:P51959"|/product="cyclin G1"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|50|50|3'UTR_1||0|1102|1207|1|1|1|1|1102. .1207
+							obj|String*|0
+							end|0||
+						end
+					end|\1207:cccgggctgcaggaattcggcacgaggatcagggccgagttgtttcggcggcgctgccgaggcctccacccaggacagtccccctccccgggcctctctcctcttgcctacgagtcccctctcctcgtaggcctctcggatctgatatcgtggggtgaggtgagcaggcccggggagggtggttaccgctgaggagctgcagtctctgtcaagatgatagaggtactgacaacaactgactctcagaaactgctacaccagctgaatgccctgttggaacaggagtctagatgtcagccaaaggtctgtggtttgagactaattgagtctgcacacgataatggcctcagaatgactgcaagactaagggactttgaagtaaaagatcttcttagtctaactcagttctttggctttgacacagagacattttctctagctgtgaatttactggacagattcctgtctaaaatgaag [...]
+					obj|String*|1|U47413
+					end|g1236912|13-SEP-1996|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P51959; CG2G_HUMAN.
+					end|HUM
+					obj|String*|0
+					end
+					obj|String*|1|Homo sapiens
+					end
+					obj|String*|1|human
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Primates|Catarrhini|Hominidae|Homo
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HSCCNA|||||0|0
+						end|1|0|\36:Human cyclin A (CCNA) gene sequence.
+						obj|String*|1|cyclin A
+						end
+						obj|String*|1|NCBI gi: 306492
+						end
+						obj|String*|9|RN   [1]|RP   1-1181|\23:RX   MEDLINE; 94094909.|\76:RA   Yamamoto M., Yoshida M., Ono K., Fujita T., Ohtani-Fujita N., Sakai T.,|RA   Nikaido T.;|\68:RT   "Effect of tumor suppressors on cell cycle-regulatory genes: RB|\69:RT   suppresses p34cdc2 expression and normal p53 suppresses cyclin A|RT   expression";|\37:RL   Exp. Cell Res. 210:94-101(1994).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|1181
+					obj|Object*|1
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1181|1|0|1|1|1. .1181
+							obj|String*|3|\24:/organism="Homo sapiens"|/sequenced_mol="DNA"|\26:/cell_type="T lymphocytes"
+							end|0||
+						end
+					end|\1181:aagctttgtatattcttatatttatatataaatataaaaatttgttaaaggcacgtatagttaagagagttttattttaataaggtcatattgtttttactatgtttaaaaaactttactctgaaaggaacataattatatctaggtcactagaacgtcattgtgttttttgttggttgcacagcttggggaaaaatagaaaaaaattaatgactgatttgaatattttgtaatgcactgctatttattatatatatcaacagtagttcaaggtgccatcttaaattaattgcatcttcattaggaaaaataaaaagcataaaacacaatttctggttactatgaataaacgcctaaatgttaagatgacattacagtcttgacacttgagtactgtattactatgtgagctccgtgttaaataatttatgcacattatttaatcctaacaaccatatgactgtagttattagtccc [...]
+					obj|String*|1|M96390
+					end|g306492|07-APR-1994|
+					obj|String*|0
+					end|0
+					obj|String*|0
+					end|HUM
+					obj|String*|0
+					end
+					obj|String*|1|Homo sapiens
+					end
+					obj|String*|1|human
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Primates|Catarrhini|Hominidae|Homo
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HSCLNB|||||0|0
+						end|1|0|Human cyclin mRNA.
+						obj|String*|1|cyclin
+						end
+						obj|String*|0
+						end
+						obj|String*|7|RN   [1]|RP   1-1245|\23:RX   MEDLINE; 92005671.|\35:RA   Lew D.J., Dulic V., Reed S.I.;|\73:RT   "Isolation of three novel human cyclins by rescue of G1 cyclin (Cln)|\24:RT   function in yeast";|\29:RL   Cell 66:1197-1206(1991).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1245
+					obj|Object*|1
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1245|1|0|1|1|1. .1245
+							obj|String*|1|\24:/organism="Homo sapiens"
+							end|0||
+						end
+					end|\1245:gccgccgcagtagcagcgaagcagcagagtccgcacgctccgggcaggggcagaagagcgcgagggacgcgggcagcagaagcgagagccgagcgcggacccagccaggacccacagccctccccagctgcccaggaagagccccagccatggaacaccagctcctgtgctgcgaagtggaaaccatccgccgcgcgtaccccgatgccaacctcctcaacgaccgggtgctgcgggccatgctgaaggcggaggagacctgcgcgccctcggtgtcctacttcaaatgtgtgcagaaggaggtcctgccgtccatgcggaagatcgtcgccacctggatgctggaggtctgcgaggaacagaagtgcgaggaggaggtcttcccgctggccatgaactacctggaccgcttcctgtcgctggagcccgtgaaaaagagccgcctgcagctgctgggggccacttgcatgttcgtgg [...]
+					obj|String*|1|M74092
+					end|g180628|30-OCT-1991|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P24385; CGD1_HUMAN.
+					end|HUM
+					obj|String*|0
+					end
+					obj|String*|1|Homo sapiens
+					end
+					obj|String*|1|human
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Primates|Catarrhini|Hominidae|Homo
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||AF024618|||||0|0
+						end|1|0|\59:Drosophila melanogaster cyclin H (CycH) mRNA, complete cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|12|RN   [1]|RP   1-1041|\26:RA   Barrier K., Xiong Y.;|\27:RT   "Drosophila cyclin H";|RL   Unpublished.|RN   [2]|RP   1-1041|\26:RA   Barrier K., Xiong Y.;|RT   ;|\64:RL   Submitted (11-SEP-1997) to the EMBL/GenBank/DDBJ databases.|\72:RL   Biochemistry and Biophysics, University of North Carolina at Chapel|\55:RL   Hill, 216 Fordham Hall, Chapel Hill, NC 27599, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1041
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1041|1|0|1|1|1. .1041
+							obj|String*|1|\35:/organism="Drosophila melanogaster"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CycH)_1||0|1|980|1|1|0|1|<1. .980
+							obj|String*|6|/codon_start=3|\23:/db_xref="PID:g2570798"|\30:/db_xref="FLYBASE:FBgn0022936"|\26:/db_xref="SPTREMBL:O17144"|/gene="CycH"|/product="cyclin H"
+							end|0||
+						end
+					end|\1041:agttcacgtatcctgtgagctcgcaaaagaggtcctggacattcgccaatgagggccagctcatggagttccgcgtggagcagaacagcaagtacatcgagtcgcacgaggaggaggcgcagggtcgcgacctcaatgagcactttctcacgtcggcggaggagcgcctgttgctgaagcagtacgagatctacctgttcgatttctgccgccgcttcgaaccgacgatgcccaagtgcgttgtgggcacggccttccactacttcaagcggttctatctgaacaactcccccatggactatcaccccaaggagattctagccacatgcgtgttcgttgcctgcaaagttgaggagttcaacgtgtccatcaaccagttcgtgaacaacatcaagggcgacaggaacaaggccaccgacatagtgttgtccaatgaattactgctgattggacagctcaactactacctcaccatac [...]
+					obj|String*|1|AF024618
+					end|g2570797|05-NOV-1997|
+					obj|String*|0
+					end|0
+					obj|String*|2|\27:FLYBASE; FBgn0022936; CycH.|\25:SPTREMBL; O17144; O17144.
+					end|INV
+					obj|String*|1| CycH
+					end
+					obj|String*|1|\23:Drosophila melanogaster
+					end
+					obj|String*|1|fruit fly
+					end
+					obj|String*|0
+					end
+					obj|String*|13|Eukaryota|Metazoa|Arthropoda|Tracheata|Hexapoda|Insecta|Pterygota|Diptera|Brachycera|Muscomorpha|Ephydroidea|Drosophilidae|Drosophila
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||AF036314|||||0|0
+						end|1|0|\54:Alexandrium tamarense cyclin (CYCL) gene, partial cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|12|RN   [1]|RP   1-188|\28:RA   Lin S., Carpenter E.J.;|\64:RT   "A partial gene sequence of the putative cyclin B in marine|RT   phytoplankton";|RL   Unpublished.|RN   [2]|RP   1-188|\28:RA   Lin S., Carpenter E.J.;|RT   ;|\64:RL   Submitted (02-DEC-1997) to the EMBL/GenBank/DDBJ databases.|\67:RL   MSRC, State University of New York, Stony Brook, NY 11794, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|188
+					obj|Object*|3
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|188|1|0|1|1|1. .188
+							obj|String*|2|\33:/organism="Alexandrium tamarense"|/strain="CCMP 118"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|54|54|mRNA(CYCL)_1||0|1|188|1|1|1|0|1. .>188
+							obj|String*|2|/gene="CYCL"|/product="cyclin"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CYCL)_1|\82:regulatory protein of the cell cycle control CDK-cyclin complex; cyclin box region|0|1|188|1|1|1|0|1. .>188
+							obj|String*|5|/codon_start=1|\23:/db_xref="PID:g2707282"|/gene="CYCL"|\46:/function="required for cell cycle transition"|/product="cyclin"
+							end|0||
+						end
+					end|\188:atgcgggggatcttggcggattggctagtggaggtggcagaggagtacaagctgtgtgccgacaccttgtacctgtctgtcaactatatcgaccgcttcctctccatccacccagtccagcgcagcaatctgcagctggttggcatcgcttgcatgtggatcgcatccaagtacgaagaaatctaccc|EMBL|standard
+					obj|String*|1|AF036314
+					end|g2707281|22-DEC-1997|
+					obj|String*|0
+					end|0
+					obj|String*|0
+					end|INV
+					obj|String*|1| CYCL
+					end
+					obj|String*|1|\21:Alexandrium tamarense
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|6|Eukaryota|Alveolata|Dinophyceae|Gonyaulacales|Gonyaulacaceae|Alexandrium
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||AF036315|||||0|0
+						end|1|0|\51:Isochrysis galbana cyclin (CYCL) gene, partial cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|11|RN   [1]|RP   1-191|\28:RA   Lin S., Carpenter E.J.;|\67:RT   "A partial gene sequence of a cyclin in marine phytoplankton";|RL   Unpublished.|RN   [2]|RP   1-191|\28:RA   Lin S., Carpenter E.J.;|RT   ;|\64:RL   Submitted (02-DEC-1997) to the EMBL/GenBank/DDBJ databases.|\67:RL   MSRC, State University of New York, Stony Brook, NY 11794, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|191
+					obj|Object*|3
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|191|1|0|1|1|1. .191
+							obj|String*|2|\30:/organism="Isochrysis galbana"|/strain="CCMP 1324"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|54|54|mRNA(CYCL)_1||0|1|191|1|1|1|0|1. .>191
+							obj|String*|2|/gene="CYCL"|/product="cyclin"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CYCL)_1|\82:regulatory protein of the cell cycle control CDK-cyclin complex; cyclin box region|0|1|191|1|1|1|0|1. .>191
+							obj|String*|5|/codon_start=1|\23:/db_xref="PID:g2707284"|/gene="CYCL"|\46:/function="required for cell cycle transition"|/product="cyclin"
+							end|0||
+						end
+					end|\191:atgcgggggatactggcggactggctgattgaggtgcaccacaagttcaagctacacatagagacgttgtatggctctgtggatctcatcgaccgctatctctccaagtgcgcgccgatcactcgctcaaagctacagctggtgggggttgcagctatgttcatcgcatcaaagtacgaagaaatctaccc|EMBL|standard
+					obj|String*|1|AF036315
+					end|g2707283|22-DEC-1997|
+					obj|String*|0
+					end|0
+					obj|String*|0
+					end|INV
+					obj|String*|1| CYCL
+					end
+					obj|String*|1|Isochrysis galbana
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|4|Eukaryota|Haptophyceae|Isochrysidales|Isochrysis
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||AF036316|||||0|0
+						end|1|0|\54:Prorocentrum minimum cyclin (CYCL1) gene, partial cds.
+						obj|String*|0
+						end
+						obj|String*|0
+						end
+						obj|String*|11|RN   [1]|RP   1-188|\28:RA   Lin S., Carpenter E.J.;|\67:RT   "A partial gene sequence of a cyclin in marine phytoplankton";|RL   Unpublished.|RN   [2]|RP   1-188|\28:RA   Lin S., Carpenter E.J.;|RT   ;|\64:RL   Submitted (02-DEC-1997) to the EMBL/GenBank/DDBJ databases.|\67:RL   MSRC, State University of New York, Stony Brook, NY 11794, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|188
+					obj|Object*|3
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|188|1|0|1|1|1. .188
+							obj|String*|2|\32:/organism="Prorocentrum minimum"|/strain="CCMP 696"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|54|54|mRNA(CYCL1)_1||0|1|188|1|1|1|0|1. .>188
+							obj|String*|2|/gene="CYCL1"|/product="cyclin"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(CYCL1)_1|\82:regulatory protein of the cell cycle control CDK-cyclin complex; cyclin box region|0|1|188|1|1|1|0|1. .>188
+							obj|String*|5|/codon_start=1|\23:/db_xref="PID:g2707286"|/gene="CYCL1"|\46:/function="required for cell cycle transition"|/product="cyclin"
+							end|0||
+						end
+					end|\188:atgcgggggatcttgacggattggctagtggaggtggcagaggagtacaagctgtgtgccgacaccttgtacctgtctgtcaactatatcgaccgcttcctctccatccacccagtccagcgcagcaatctgcagctggttggcatcgcttgcatgtggatcgcatccaagtacgaagaaatctaccc|EMBL|standard
+					obj|String*|1|AF036316
+					end|g2707285|22-DEC-1997|
+					obj|String*|0
+					end|0
+					obj|String*|0
+					end|INV
+					obj|String*|1| CYCL1
+					end
+					obj|String*|1|Prorocentrum minimum
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|6|Eukaryota|Alveolata|Dinophyceae|Prorocentrales|Prorocentraceae|Prorocentrum
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||APCYCL|||||0|0
+						end|1|0|\42:Sea urchin (A. punctulata) mRNA for cyclin
+						obj|String*|1|cyclin
+						end
+						obj|String*|0
+						end
+						obj|String*|12|RN   [1]|RP   11-1491|RA   Hunt T.;|RT   ;|\64:RL   Submitted (11-FEB-1988) to the EMBL/GenBank/DDBJ databases.|RN   [2]|RP   1-1634|\23:RX   MEDLINE; 88082670.|\23:RA   Pines J., Hunt T.;|\77:RT   "Molecular cloning and characterization of the mRNA for cyclin frokm sea|RT   urchin eggs";|\31:RL   EMBO J. 6:2987-2995(1987).
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1634
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1634|1|0|1|1|1. .1634
+							obj|String*|1|\30:/organism="Arbacia punctulata"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1|cyclin|0|85|1314|1|1|1|1|85. .1314
+							obj|String*|2|/db_xref="PID:g5645"|\28:/db_xref="SWISS-PROT:P07818"
+							end|0||
+						end
+					end|\1634:acaagtctttcctgctgatcctgctgactgttcagtgtttctgtcgcgcacacacgtcatcaggcttcactcgtcaatttcatcatggctcttggaacaagaaatatgaacatgaatctccatggtgagagcaaacacacattcaacaatgaaaatgtcagtgcaaggctcgggggaaagagcattgctgtgcaaaagccagcacaacgggcagcccttggcaacatcagtaatgtggttcgaactgctcaggcaggaagcaagaaggttgtgaaaaaggacacgagacaaaaggctatgaccaagacaaaggccacatcgtctctccatgctgttgttggtctccctgtagaagatctccctacagagatgaggtcaacatcaccagatgtcctagatgctatggaggttgatcaagcaattgaagccttttcgcaacaattgatagcgctccaggtagaggacattgacaaagat [...]
+					obj|String*|1|Y00608
+					end|g5644|12-SEP-1993|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P07818; CG2B_ARBPU.
+					end|INV
+					obj|String*|0
+					end
+					obj|String*|1|Arbacia punctulata
+					end
+					obj|String*|1|punctuate urchin
+					end
+					obj|String*|0
+					end
+					obj|String*|10|Eukaryota|Metazoa|Echinodermata|Echinozoa|Echinoidea|Euechinoidea|Echinacea|Arbacoida|Arbaciidae|Arbacia
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||CVRNACYCA|||||0|0
+						end|1|0|\31:C.viridissima mRNA for cyclin A
+						obj|String*|1|cyclin B
+						end
+						obj|String*|0
+						end
+						obj|String*|11|RN   [1]|\49:RA   Scheurlen I., Hoffmeister S., Schaller H.C.;|\72:RT   "Presence and expression of G2 cyclins in the coelenterate hydra.";|\38:RL   J. Cell Sci. 109:1063-1069(1996).|RN   [2]|RP   1-1520|RA   Schaller C.H.;|RT   ;|\64:RL   Submitted (24-AUG-1995) to the EMBL/GenBank/DDBJ databases.|\75:RL   C.H. Schaller, Center for Molecular Neurobiology, Martinistr. 52, Haus|\30:RL   42, D- 20246 Hamburg, FRG
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1520
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1|multiheaded mutant|0|1|1520|1|0|1|1|1. .1520
+							obj|String*|1|\35:/organism="Chlorohydra viridissima"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(cyclin A)_1||0|1|1263|1|1|0|1|<1. .1263
+							obj|String*|4|/codon_start=1|\22:/db_xref="PID:g984659"|\28:/db_xref="SWISS-PROT:P51986"|/gene="cyclin A"
+							end|0||
+						end
+					end|\1520:cttttttttcagaaaaaatattttttggacaaacagctgaatcaaaatgctatacaaatttaccaagataatttaactaatcaaaataacaatattggaaaaaaagccaagctagaagacgaaaaacatgcacataataagtcaattacatcaaagtataaaagagtccctcttgcatcgatttcgaatgttcaagggagcagaatacaaccaactagagctgcaaaagaaaaacttaaacctcctcaaaatatatctgatagtcaattagtaaatgattctctgaaaagttctaattctatacaagcgcacaacacaaaaaatgatttacacaaagaaaacttatataatgaatcagcactcgatacatttaaagaatctcctatggttttttcaccattcctatctgatagtagttgcaaaaaatattcttctctaaatggaatacaagacatagattctaagctacatgaggtt [...]
+					obj|String*|1|X90983
+					end|g984658|13-MAR-1997|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P51986; CG2A_CHLVR.
+					end|INV
+					obj|String*|1| cyclin A
+					end
+					obj|String*|1|\23:Chlorohydra viridissima
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|8|Eukaryota|Metazoa|Cnidaria|Hydrozoa|Hydroida|Anthomedusae|Hydridae|Chlorohydra
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||CVRNACYCB|||||0|0
+						end|1|0|\31:C.viridissima mRNA for cyclin B
+						obj|String*|1|cyclin B
+						end
+						obj|String*|0
+						end
+						obj|String*|11|RN   [1]|\49:RA   Scheurlen I., Hoffmeister S., Schaller H.C.;|\72:RT   "Presence and expression of G2 cyclins in the coelenterate hydra.";|\38:RL   J. Cell Sci. 109:1063-1069(1996).|RN   [2]|RP   1-1558|RA   Schaller C.H.;|RT   ;|\64:RL   Submitted (24-AUG-1995) to the EMBL/GenBank/DDBJ databases.|\75:RL   C.H. Schaller, Center for Molecular Neurobiology, Martinistr. 52, Haus|\30:RL   42, D- 20246 Hamburg, FRG
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1558
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1|multiheaded mutant|0|1|1558|1|0|1|1|1. .1558
+							obj|String*|1|\35:/organism="Chlorohydra viridissima"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(cyclin B)_1||0|67|1245|1|1|1|1|67. .1245
+							obj|String*|3|\22:/db_xref="PID:g984661"|\28:/db_xref="SWISS-PROT:P51987"|/gene="cyclin B"
+							end|0||
+						end
+					end|\1558:acggccacatttctttcttgaagttgtgtgtttcctgacagtaattctctttaaaaaaatcttaatatggctggtgttcagcgaagaatattgatatctcgaaacgaagaaaatcttcttaataaaggaataggtaccaaaaatgtacttggtggcaaaactactagcactagaactgcactctcaaacatttcaaatattcaaagaagacctcaactaggtgggaaagtaaagaaagaagatgtaggtgccttagaagaaaaagctccaacaaataaaagtttagggagaatgatttctcaaactaatctcttaaacgaagttcagatgaaaaaaaatatccagaatcttgaagatatggctgaggtggacctgccaatcaactctatgatagactcctttactgacttggaggtggatgatattgatctagaagatttagggaatccaaccctttgtgctgaatatgttaaagac [...]
+					obj|String*|1|X90984
+					end|g984660|13-MAR-1997|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P51987; CG2B_CHLVR.
+					end|INV
+					obj|String*|1| cyclin B
+					end
+					obj|String*|1|\23:Chlorohydra viridissima
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|8|Eukaryota|Metazoa|Cnidaria|Hydrozoa|Hydroida|Anthomedusae|Hydridae|Chlorohydra
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||DMCYCA1|||||0|0
+						end|1|0|\30:D. melanogaster cyclin A gene.
+						obj|String*|1|cyclin A
+						end
+						obj|String*|0
+						end
+						obj|String*|26|RN   [1]|RP   1-2100|RA   Takahisa M.;|RT   ;|\64:RL   Submitted (01-APR-1992) to the EMBL/GenBank/DDBJ databases.|\77:RL   Manabu Takahisa, Mitsubishi Kasei Institute of Life Sciences, Laboratory|\66:RL   of Cell Biology; 11 Minamiooya, Machida-shi, Tokyo 194, Japan|\41:RL   (Tel:0427-24-6249, Fax:0427-29-1252)|RN   [2]|\23:RX   MEDLINE; 89168447.|\33:RA   Lehner C.F., O'Farrell P.H.;|\74:RT   "Expression and function of drosophila cyclin A during embryonic cell|\24 [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|0|2100
+					obj|Object*|12
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|2100|1|0|1|1|1. .2100
+							obj|String*|4|\35:/organism="Drosophila melanogaster"|/sequenced_mol="DNA"|/dev_stage="adult"|\21:/strain="hari mutant"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|41|41|TATA_Signal_1||0|145|150|1|1|1|1|145. .150
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|61|61|Exon_1|\32:one of possible sites for exon 1|0|204|905|1|1|1|1|204. .905
+							obj|String*|1|/number=1
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|21|21|Misc_Feature_1|\29:transcription initiation site|0|204|204|1|1|1|1|204
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|41|41|TATA_Signal_2||0|216|224|1|1|1|1|216. .224
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|61|61|Exon_1|\32:one of possible sites for exon 1|0|261|905|1|1|1|1|261. .905
+							obj|String*|1|/number=1
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|21|21|Misc_Feature_2|\29:transcription initiation site|0|261|261|1|1|1|1|261
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|15|15|Intron_1||0|906|1532|1|1|1|1|906. .1532
+							obj|String*|1|/number=1
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|61|61|Exon_2||0|1533|1726|1|1|1|1|1533. .1726
+							obj|String*|1|/number=2
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|15|15|Intron_2||0|1727|1796|1|1|1|1|1727. .1796
+							obj|String*|1|/number=2
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|61|61|Exon_4||0|1797|2052|1|1|1|1|1797. .2052
+							obj|String*|0
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|15|15|Intron_3||0|2053|2100|1|1|1|0|2053. .>2100
+							obj|String*|1|/number=3
+							end|0||
+						end
+					end|\2100:aagcttagaactaaataaatatgcactcatttttaaaaactatgcaaaaacaatggacttcggcaaaaataaaaattaacgttatacacatttttaaattttgcgcactgctggagttgccagtcctaaaaaacaaacttctgacatatatggccacactgtcggcaaatgtcgatagacgccacgacctatcgatagctggacagtgtcatctctaacatttacgacgtgttgaccgggaaaaaatcaaaagaagccagcaattgcttttaaaccacgaaccgctgaacaagtacggagtttgtaaaatacttaatattagctaagtccgtgcgagcgtagccaaacaaggaaactaattccaacgctgccgtgacacaaacttccgtacgaaattgaaagtcaaatgaattctgtacaaaactgtgtgtgtgcgtgtaattcaagcgtcaatttgtcgatgataaaatttgcctg [...]
+					obj|String*|1|D10856
+					end|g407196|14-MAY-1997|
+					obj|String*|0
+					end|0
+					obj|String*|3|\27:FLYBASE; FBgn0000404; CycA.|\46:FLYBASE; FBgn0000404[FBal0002204]; CycA[hari].|\31:SWISS-PROT; P14785; CG2A_DROME.
+					end|INV
+					obj|String*|0
+					end
+					obj|String*|1|\23:Drosophila melanogaster
+					end
+					obj|String*|1|fruit fly
+					end
+					obj|String*|0
+					end
+					obj|String*|13|Eukaryota|Metazoa|Arthropoda|Tracheata|Hexapoda|Insecta|Pterygota|Diptera|Brachycera|Muscomorpha|Ephydroidea|Drosophilidae|Drosophila
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||HR25177|||||0|0
+						end|1|0|\46:Helobdella robusta cyclin A mRNA, partial cds.
+						obj|String*|0
+						end
+						obj|String*|1|NCBI gi: 802009
+						end
+						obj|String*|7|RN   [1]|RP   1-1410|\26:RA   Chen Y., Bissen S.T.;|RT   ;|\64:RL   Submitted (18-APR-1995) to the EMBL/GenBank/DDBJ databases.|\74:RL   Shriley T. Bissen, Biology, University of Missouri at St. Louis, 8001|\50:RL   Natural Bridge Road, St. Louis, MO 63121, USA
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1410
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1410|1|0|1|1|1. .1410
+							obj|String*|1|\30:/organism="Helobdella robusta"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1|\66:Method: conceptual translation supplied by author. NCBI gi: 802010|0|1|1131|1|1|0|0|<1. .>1131
+							obj|String*|4|/codon_start=1|\22:/db_xref="PID:g802010"|\26:/db_xref="SPTREMBL:Q25123"|/product="cyclin A"
+							end|0||
+						end
+					end|\1410:ggcacgagagtaactgctgccaacagcagaagttttaaatccaacaacaacgccagcagtattagtaatagtagtagtattggtaggagtcattatgacatttatgatgatgatgacgacgacgacgacaatgatattccttcaacgtttaatgatctcgacatctcctttgaaggacgacgaatgagttctacgaccatcttcgaacatcatcaacagcagcagcagaaacagcacatccctacagaggtggccgccaggcagcatcgtcgatccctaatcaatcaacaaattgcgttgttggatgtctattccttgccagaatatagagatgatattctcacctatggtaaagaggcagagcaacggtatatggcaaaggccaattacatggaaaggcagtcggacatcaatcactcgatgaggtccatcttagtggactggctggtcgaagttgcagacgagtacaaactgaag [...]
+					obj|String*|1|U25177
+					end|g802009|13-MAY-1995|
+					obj|String*|0
+					end|0
+					obj|String*|1|\25:SPTREMBL; Q25123; Q25123.
+					end|INV
+					obj|String*|0
+					end
+					obj|String*|1|Helobdella robusta
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|9|Eukaryota|Metazoa|Annelida|Clitellata|Hirudinida|Hirudinea|Rhynchobdellida|Glossiphoniidae|Helobdella
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||SMCYCLNRM|||||0|0
+						end|1|0|\25:S.mansoni mRNA for cyclin
+						obj|String*|1|cyclin
+						end
+						obj|String*|0
+						end
+						obj|String*|12|RN   [1]|RP   1-648|\43:RA   Ridgers I.L., Rollinson D., Kane R.A.;|\56:RT   "Characterization of the Schistosoma Cyclin gene.";|RL   Unpublished.|RN   [2]|RP   1-648|RA   Ridgers I.L.;|RT   ;|\64:RL   Submitted (25-JUL-1995) to the EMBL/GenBank/DDBJ databases.|\72:RL   Ian L. Ridgers, Zoology, The Natural History Museum, Cromwell Road,|\44:RL   South Kensington, London, SW7 5BD, U.K.
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|648
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|648|1|0|1|1|1. .648
+							obj|String*|7|\31:/organism="Schistosoma mansoni"|/strain="Egyptian"|\24:/clone="SMNHADA020037SK"|/dev_stage="adult"|\29:/tissue_type="whole organism"|\58:/clone_lib="SMNHADA (ADULT) - M. Saber Egyptian Lambda Zap|II"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|54|54|mRNA_1|\77:generated by single pass automated sequencing of randomly selected cDNA clone|0|1|648|1|1|0|0|<1. .>648
+							obj|String*|1|\28:/product="cyclin (putative)"
+							end|0||
+						end
+					end|\648:gaagaagatatcagaaagtgatgntttnctttactgatgtcattcaggcattcggnaagagcgttgaagtccgtcaacaagtaattgnaaccgctttagtatatttcaaaagattttacagtcgcaattcatttaagactattgacccatggttaatggctccatcttgtctgtttttagcatctaaagttgaggaatttggtgtagtttctcaaaaaaatctaatgacatcatgtcgtaatgtggttcatagtcattatttaatctattttcctgatggttacggttatccatatcgtgctcaagatgtactggaatgtgaatttattttacttgaagcaatggatngttcattagtcgtctttcatccttatcgtccgntggtacagtttggngacgaacttcgccccccaaatgcatgagtatgctgatgtactgntaggaacgtnctgggtggctagtgaatgatagttttcga [...]
+					obj|String*|1|Z50160
+					end|e984798|20-AUG-1996|
+					obj|String*|0
+					end|0
+					obj|String*|0
+					end|INV
+					obj|String*|0
+					end
+					obj|String*|1|Schistosoma mansoni
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|9|Eukaryota|Metazoa|Platyhelminthes|Trematoda|Digenea|Strigeidida|Schistosomatoidea|Schistosomatidae|Schistosoma
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||TBCYC1|||||0|0
+						end|1|0|\30:T.brucei mRNA cyc1 for cyclin1
+						obj|String*|2|CYC1 gene|cyclin
+						end
+						obj|String*|0
+						end
+						obj|String*|13|RN   [1]|RP   1-1323|\22:RA   Affranchino J.L.;|RT   ;|\64:RL   Submitted (30-MAR-1992) to the EMBL/GenBank/DDBJ databases.|\77:RL   J.L. Affranchino, Dept of Molecular Biology, University of Brussels, Rue|\51:RL   des Cheveaux 67, 1640 Rhode St Genese, BELGIUM|RN   [2]|\23:RX   MEDLINE; 94010348.|\46:RA   Affranchino J.L., Gonzalez S.A., Pays E.;|\67:RT   "Isolation of a mitotic-like cyclin homolog from the protozoan|\25:RT   Trypanosoma brucei";|\26:RL   Gene 132:7 [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1323
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1323|1|0|1|1|1. .1323
+							obj|String*|3|\30:/organism="Trypanosoma brucei"|/strain="EATRO 1125"|\28:/dev_stage="procyclic forms"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS(cyc1)_1||0|46|1050|1|1|1|1|46. .1050
+							obj|String*|4|\22:/db_xref="PID:g414916"|\28:/db_xref="SWISS-PROT:P41179"|/gene="cyc1"|/product="cyclin 1"
+							end|0||
+						end
+					end|\1323:gaacagtttctgtactatattgggcgcactgcatcttgtagcacgatgatgacaaacttgaatgtgcggaccattaagggctgcttccccggttccttacctgatgcactcaacgacatgtccgtcatcaatcacattctttccctgactggacgcttcgacgagggtcaggctgcgctggcgtcaactgtcaacgtggtttatgttggtaccgcggtctacgatattccacgctatcgtgaagagtacacgaagaatttcatagcgcgcggttgcggaataagtgaggtttgcgttgcagaagcgcggtcgaccggagcgacaccgtgtgcggctgctaccatggttacgccagaccagcttcagcacttagcggaggcacatatcattttactaccggaggtaacacccttttcgctatacgacgctgggaggaaacgggcctcgatgcgtgtctccgggcaagttgcagctcgt [...]
+					obj|String*|1|X65625
+					end|g414915|09-NOV-1993|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P41179; CG21_TRYBB.
+					end|INV
+					obj|String*|1| cyc1
+					end
+					obj|String*|1|Trypanosoma brucei
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|5|Eukaryota|Euglenozoa|Kinetoplastida|Trypanosomatidae|Trypanosoma
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+				obj|Molecule
+					obj|BioObject
+						obj|DBObj||BBCA|||||0|0
+						end|1|0|\26:B.taurus mRNA for cyclin A
+						obj|String*|2|cyclin A|\25:protein kinase activation
+						end
+						obj|String*|6|\62:In the 'Structure' publication: The 5'end of clone A3 was made|\57:by PCR, and introduced a methionine in place of a valine,|\61:followed by a glycine to make an NcoI site. At the 3' end, an|\60:XhoI site was engineered in to allow subcloning into pET21d,|\61:which also puts 6 histidines at the C-terminus that were used|for purification.
+						end
+						obj|String*|19|RN   [1]|RP   1-1512|RA   Hunt T.;|RT   ;|\64:RL   Submitted (08-SEP-1992) to the EMBL/GenBank/DDBJ databases.|\74:RL   T. Hunt, ICRF Clare Hall Laboratories, South Mimms, Herts EN6 3LD, UK|RN   [2]|RP   1-1512|\23:RX   MEDLINE; 93091274.|\77:RA   Kobayashi H., Stewart E., Poon R., Adamczewski J.P., Gannon J., Hunt T.;|\76:RT   "Identification of the domains in cyclin-A required for binding to, and|\69:RT   activation of, p34(cdc2) and p32(cdk2) protein-kinase subuni [...]
+						end
+						obj|Object*|0
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+						obj|CreatorData||||||||UNKNOWN||
+						end
+					end|1|1|1512
+					obj|Object*|2
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|98|98|Source_1||0|1|1512|1|0|1|1|1. .1512
+							obj|String*|3|\22:/organism="Bos taurus"|/dev_stage="adult"|\25:/tissue_type="lymphocyte"
+							end|0||
+						end
+						obj|Feature
+							obj|DBObj|||||||0|0
+							end|4|4|CDS_1|\47:subunit structure=cyclin A /p34cdc2 or cyclin A|0|1|1221|1|1|0|1|<1. .1221
+							obj|String*|5|/codon_start=1|\21:/db_xref="PID:e54213"|\28:/db_xref="SWISS-PROT:P30274"|/p33cdk2"|\21:/product="Cyclin A-3"
+							end|0||
+						end
+					end|\1512:gaattccaggaggaccaggagaacgtcaatcccgagaaggcggcgcccgcccagcagccccggacccgggctggactggcggtactgagggccggaaactcgcggggtccagctccccagaggcctaagacgcgacgggttgcacctcttaaggatcttcctataaatgatgagtatgtccctgttcctccctggaaagcaaacaataaacagcctgcatttaccatacatgtggatgaagcagaagaaattcaaaagaggccaactgaatctaaaaaatcagaaagtgaagatgtcttggcctttaattcagctgttactttaccaggaccaagaaagccactggcacctcttgattacccaatggatggtagttttgagtctccacatactatggaaatgtcagttgtattggaagatgaaaagccagtgagtgttaatgaagtaccagactaccatgaggacattcacacgtac [...]
+					obj|String*|1|X68321
+					end|g9|19-JUL-1996|
+					obj|String*|0
+					end|0
+					obj|String*|1|\31:SWISS-PROT; P30274; CG2A_BOVIN.
+					end|MAM
+					obj|String*|0
+					end
+					obj|String*|1|Bos taurus
+					end
+					obj|String*|1|
+					end
+					obj|String*|0
+					end
+					obj|String*|13|Eukaryota|Metazoa|Chordata|Vertebrata|Mammalia|Eutheria|Artiodactyla|Ruminantia|Pecora|Bovoidea|Bovidae|Bovinae|Bos
+					end
+					obj|Object*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+					obj|String*|0
+					end
+				end
+			end
+		end
+		obj|Features|0|0|2|4|4|5|0|iub|15|6.66|0|0|4|4|2|1|3|0|1|1|iub|15|6.66|0|8|0|0|GPSNQEKR|40|0|0|0|0|||1|1|0|1|0.5|0.2|0.5|0
+		end
+		obj|AlnList|\2139:                                                                                                                                                                                                                                                                                                     T            AA                                             A                                   A               A                                                               TT  [...]
+			obj|String*|47|(|(|S59895|:0.23338|,|(|SC20635|:0.20834|,|(|HS11791|:0.02506|,|HS12685|:0.02473|)|:0.18910|)|:0.03981|)|:0.00789|,|(|AF036316|:0.26919|,|HS4741310|:0.24246|)|:0.05024|,|(|APCYCL|:0.27445|,|(|DMCYCA1|:0.46203|,|S67490|:0.29266|)|:0.02157|)|:0.06750|)|;
+			end|2139
+			obj|Number*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0| [...]
+			end
+			obj|Number*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|-0.25|-0.25|0.277778|0|0.277778|0|-0.25|-0.25|-0.25|0|0|-0.25|-0.25|5.58333|5.58333|0|0|5.58333|0|0|-0.25|-0.25|0|0|0|0|5.58333|0|-0.25|-0.25|0.277778|-0.25|0.277778|0.277778|0|0|-0.25|0|0|0|-0.25|0|5.58333|5.58333|-0.25|0|0.277778|0|0|0|-0.25|-0.25|0.277778|0|-0.25|0.277778|0|0|-0.25|5.58333|5.58333|-0.25|-0.25|0.277778|-0.25|5.58333|5.58333|-0.25|0|0|0.277778|-0.25|0|0.277778|5.58333|0|0|0|0|0.277778|0.277778|-0.25|0|0|5.58333|0|0.277 [...]
+			end
+			obj|Object*|9
+				obj|IxAlignment|\2139:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ATTTGGGTTTTTCATAGCAGAGAAGTATCCAAATTTCAAAAATATTATTATTTTACTGGCTTTATAGAGAAGTATTTAAATTTTTGCATAACCCTCAATTGATAGAGT-GCTGTAAATTCTACTTACA--TTATTCACATGTCTGCCGATAAATTTCGTGATTCCACGCATTACAGAGATTG [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------TCCACGGAAAAACATCGAAA-ATTCATTTTTCATGAAGGAAAATTA---GGGTTCATACAGGAGTAGAGTTC-ATTGATGTGGTAGCAAC---CTTGTTAGCACTCATATTGTT--CGAACAAAA---AATGCCCTCTCAAACTTT-----AGTTGAAGAGCGATAAGGCATCTGAATCTCAAAAGTTAGACATGTCGGGG [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------GGACGCTGATGCGTTT [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ACAAGTCTTTCCTGCTGATCCTGCTGACTGTTCAGTGTTTCTGTCGCGCACACACGTCATCAGGCTTCACTCGTCAATTTCATCATGGCTCTTGGAACAAGAAATATGAACATGAATCTCCATGGTGAG-AGCAAACACACATTCAACAATGAAAATGTCAGTGCAAGGCTCGGGGGAAAGAGCATTGCTGTGCAAAAGCCAGCACAACGGGCAGCCCTTGGCAACATCAGTAATGTGGTTCGAACTGCTCAGGCAGG [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:AAGCTTAGAACTAAATAAATATGCACTCATTTTTAAAAACTATGCAAAAACAATGGACTTCGGCAAAAATAAAAATTAACGTTATACACATTTTTAAATTTTGCGCACTGCTGGAGTTGCCAGTCCTAAAAAACAAACTTCTGACATATATGGCCACACTGTCGGCAAATGTCGATAGACGCCACGACCTATCGATAGCTGGACAGTGTCATCTCTAACATTTACGACGTGTTGACCGGGAAAAAATCAAAAGAAGCCAGCAATTGCTTTTAAACCACGAACCGCTGAACAAGTACGGAGTTTGTAAAATACTTAATATTAGCTAAGTCCGTGCGAGCGTAGCCAAACAAGGAAACTAATTCCAACGCTGCCGTGACACAAACTTCCGTACGAAATTGAAAGTCAAATGAATTCTGTACAAAACTGTGTGTGTGCGTGTAATTCAAGCGTCAATTTGTCGATGATA [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:---------------CCCACAACAGTAGGTTGGTTTGGTTGTTTACACAATTCATTGTTTATGTTTGGACGATTCTTNCCCTTCCTCCTATCAACAACAATAGAATAATTCGACCCATTGATTTATTCTCATTTAAAAGAGAAACTTTAAAAATTCGCTATAAGTGCTTTCTGTTTCTCGATCGCTCAATTTCCCTAATTTATCCTATCTAATTGAGATTAATTTACCAAAAACAGTTTCCTTATTTTAATAAAAAGAAGACATTTTTGGTTACAAACAATCAGATATATTTCTATACGTTGATAAAAGGG-----AATTTATCAATCCATATTTCATATGGCTCTCTATTCAATTTCAAAGCCTGTTGGTTCTAAAATCAATAAGCATAG--TTATCAAGATGAAAACACACTTGTTGGCAAACAAGCTTTATCAAAAGGGACTGAGAAGACAAAATTATCTACA [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+				obj|IxAlignment|\2139:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...]
+					obj|Integer*|2139|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+					end
+				end
+			end
+		end|swgapdnamt
+	end
\ No newline at end of file
diff --git a/data/samples/APR/gyrA.apr b/data/samples/APR/gyrA.apr
new file mode 100644
index 0000000..5972399
--- /dev/null
+++ b/data/samples/APR/gyrA.apr
@@ -0,0 +1,459 @@
+|AlignmentProject
+obj|Project|0
+obj|MolList|0
+obj|Object*|8
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\26:gi_15617929:c308353-305849|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2505
+obj|Object*|0
+end|\2505:atgttcaataaagatgaaattatagtccctaaaaatcttgaagaagagatgaaggaaagttaccttcgttattcgatgtctgtgattatatctcgggctcttccagatatccgggatggactcaagccttcacaaagaagagttctttatgccatgaagcagctaagtctttctccaggagctaagcatcgtaaatgtgcaaaaatttgtggggatacctctggagactaccatccacatggtgagagcgtcatttatcctacgcttgtccgtatggctcagaactgggcgatgcgttatcctttggtggacggacaaggaaacttcggctccatagacggagatccacctgctgctatgcgatacacagaagctcgtcttacccatagtgctatgtatcttatggaagacttggacaaagatactgtggatattgttccaaactatgatgaaacaaaacacgagcctgtagtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C2B318
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\26:gi_15835535:c307975-305471|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2505
+obj|Object*|0
+end|\2505:atgttcaataaagatgaaattatagtccctaaaaatcttgaagaagagatgaaggaaagttaccttcgttattcgatgtctgtgattatatctcgggctcttccagatatccgggatggactcaagccttcacaaagaagagttctttatgccatgaagcagctaagtctttctccaggagctaagcatcgtaaatgtgcaaaaatttgtggggatacctctggagactaccatccacatggtgagagcgtcatttatcctacgcttgtccgtatggctcagaactgggcgatgcgttatcctttggtggacggacaaggaaacttcggctccatagacggagatccacctgctgctatgcgatacacagaagctcgtcttacccatagtgctatgtatcttatggaagacttggacaaagatactgtggatattgttccaaactatgatgaaacaaaacacgagcctgtagtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C3D9F0
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\27:gi_237802433:c215104-212594|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2511
+obj|Object*|0
+end|\2511:atgctaaataaagaagaaatcatcgtccctaaaaatcttgaagaggaaatgaaggagagctaccttcgttattccatgtcggtaattatttcccgcgctttgcctgatgctagggacggattaaaaccttctcagcgacgtattttatacgctatgaaacaattaaatctgactccaggagtaaagcacagaaaatgcgcaaaaatttgcggtgatacttccggagattatcaccctcatggggaaagtgtcatttatcctactttagtaaggatggcacaggattgggccatgcgataccctcttgttgatggtcaagggaattttggatccatcgacggggatccagctgctgccatgcgatatacagaggctcgcctgactcacagcgctatctttttgttagaggacctagataaagatactgtagatatggtccctaactacgatgaaactaaatatgaacctgtagtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C27BA0
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\27:gi_237804348:c215028-212518|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2511
+obj|Object*|0
+end|\2511:atgctaaataaagaagaaatcatcgtccctaaaaatcttgaagaggaaatgaaggagagctaccttcgttattccatgtcggtaattatttcccgcgctttgcctgatgctagggacggattaaaaccttctcagcgacgtattttatacgctatgaaacaattaaatctgactccaggagtaaagcacagaaaatgcgcaaaaatttgcggtgatacttccggagattatcaccctcatggagaaagtgtcatttatcctactttagtaaggatggcacaggattgggccatgcgataccctcttgttgatggtcaagggaattttggatccatcgacggggatccagctgctgccatgcgatatacagaggctcgcctgactcacagcgctatctttttgttagaggacctagataaagatactgtagatatggtccctaactacgatgaaactaaatatgaacctgtagtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C25A90
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\26:gi_29337300:c561235-558734|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2502
+obj|Object*|0
+end|\2502:atgctaaataaagaagaaatcatcgtccctaaaaatcttgaagaggagatgaaggagagctaccttcgctactctatgtctgtaattatttcccgagctttgcctgatgttagggatggattaaagccttctcagcggcgtattttatacgctatgaaacaattgaatttgactccaggagcgaaacacagaaagtgcgcaaaaatttgtggagacacttctggggattatcaccctcatggtgaggctgttatttatcctacattggtgcgaatggctcaagactgggcgatgcgatatccgctagttgacggtcaagggaattttggatccatcgatggagatcctgctgctgcgatgcgatatacagaggcccggttgactcatagttcgatctttttattagaggacctagataaagatactgtagacatggtccctaactatgacgaaacaaagtatgagcctgtcgttttcccctc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C4F9F0
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\26:gi_330443755:853593-856082|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2490
+obj|Object*|0
+end|\2490:atgttgcacaatgaagaaattattgttcctaagaatctagaagaggaaatgaaggagagctaccttcgttattctatgtctgtgattatttctcgggcacttccagatattcgagatggattaaagccttcgcagaggcgtattctatatgctatgaggcagttaagcttaactccgggagcaaaacatagaaagtgtgcaaagatctgcggagatacttctggagattaccatccccatggggaaagtgtaatctatcctaccttggtaagaatggctcagccttgggcaatgcgttatcctcttgtagatggccaagggaactttggttctttggatggagatccagctgctgctatgcgatatacagaagctaggctcactcatagtgcgattttccttatggaagatcttgataaagacactgtagatatggtttcgaactatgacgaaacaaaacatgagcctacagtattccctgc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C61A50
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\26:gi_332286959:577450-579942|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2493
+obj|Object*|0
+end|\2493:atgttgaacaaagaagaaatcattgtccctaaaaatctagaagaagagatgaaggaaagttaccttcgttactctatgtcggtaattatttctcgagcgcttcctgatgtcagggatggtttgaaaccttcgcaaaggcgtattctttatgcaatgaagcaattaaacctcactcctggtgcgaagcatcgtaaatgcgctaaaatttgcggtgatacttccggagattaccatcctcatggagagagcgttatttatcctacgttagtgcgtatggctcaaaactgggcgatgcgttatccactggtcgatggtcaaggaaactttggctctattgatggggaccctgcggctgctatgcgttatacggaagctcgtttaacccatagtgcgatcttcctaatggaagatttagataaagatactgtagatatggtatctaactatgacgaaacgaagcacgagcctgttgtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C5ECD0
+end
+obj|IxMolX
+obj|Molecule
+obj|BioObject
+obj|DBObj||\27:gi_339625373:c531067-528557|||||0|0|
+end|1|0|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+obj|CreatorData||||||||UNKNOWN||
+end
+end|1|0|2511
+obj|Object*|0
+end|\2511:atgctaaataaagaagaaatcatcgtccctaaaaatcttgaagaggaaatgaaggagagctaccttcgttattccatgtcggtaattatttcccgcgctttgcctgatgctagggacggattaaaaccttctcagcgacgtattttatacgctatgaaacaattaaatctgactccaggagtaaagcacagaaaatgcgcaaaaatttgcggtgatacttccggagattatcacccccatggagaaagtgtcatttatcctactttagtaaggatggcacaggattgggccatgcgataccctcttgttgatggtcaagggaattttggatccatcgacggggatccagctgctgccatgcgatatacagaggctcgcctgactcacagcgctatctttttgttagaggacctagataaagatactgtagatatggtccctaactacgatgaaactaaatatgaacctgtagtttttccttc [...]
+obj|String*|0
+end|||
+obj|String*|0
+end|0
+obj|String*|0
+end|
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|Object*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+obj|String*|0
+end
+end|C09E08
+end
+end
+end
+obj|Features|0|0|2|4|4|5|0|iub|15|6.66|0|0|4|4|2|1|3|0|1|1|iub|15|6.66|0|8|0|0|GPSNQEKR|40|0|0|0|0|||1|1|0|1|0.5|0.2|0.5|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0 [...]
+obj|ScoreMatrix|swgapdnamt|ABCDGHKMNRSTUVWXY|10|-9|-9|10|-9|10|-9|10|10|10|-9|-9|-9|10|10|10|-9|-9|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|-9|10|10|-9|-9|10|-9|10|10|-9|10|-9|-9|10|-9|10|10|10|10|-9|10|10|10|10|10|10|10|10|10|10|10|10|10|10|-9|10|-9|10|10|-9|10|-9|10|10|10|-9|-9|10|-9|10|-9|10|10|10|10|-9|10|10|10|10|10|10|10|10|10|10|10|10|-9|10|-9|10|10|10|10|-9|10|10|10|10|10|10|10|10|10|10|10|10|10|-9|10|-9|10|10|10|10|-9|-9|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10| [...]
+end
+end
+obj|AlnList|\2511:ATGCTAAATAAAGAAGAAATCATCGTCCCTAAAAATCTTGAAGAGGAAATGAAGGAGAGCTACCTTCGTTATTCCATGTCGGTAATTATTTCCCGCGCTTTGCCTGATGCTAGGGACGGATTAAAACCTTCTCAGCGACGTATTTTATACGCTATGAAACAATTAAATCTGACTCCAGGAGTAAAGCACAGAAAATGCGCAAAAATTTGCGGTGATACTTCCGGAGATTATCACCCTCATGGAGAAAGTGTCATTTATCCTACTTTAGTAAGGATGGCACAGGATTGGGCCATGCGATACCCTCTTGTTGATGGTCAAGGGAATTTTGGATCCATCGACGGGGATCCAGCTGCTGCCATGCGATATACAGAGGCTCGCCTGACTCACAGCGCTATCTTTTTGTTAGAGGACCTAGATAAAGATACTGTAGATATGGTCCCTAACTACGATGAAACTAAATATGAACCTGTAGTT [...]
+obj|String*|0
+end|2511
+obj|Number*|2511|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|1|0.6 [...]
+end
+obj|Number*|2511|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|10|1 [...]
+end
+obj|Object*|3
+obj|IxAlignment|\2511:ATGCTAAATAAAGAAGAAATCATCGTCCCTAAAAATCTTGAAGAGGAAATGAAGGAGAGCTACCTTCGTTATTCCATGTCGGTAATTATTTCCCGCGCTTTGCCTGATGCTAGGGACGGATTAAAACCTTCTCAGCGACGTATTTTATACGCTATGAAACAATTAAATCTGACTCCAGGAGTAAAGCACAGAAAATGCGCAAAAATTTGCGGTGATACTTCCGGAGATTATCACCCTCATGGGGAAAGTGTCATTTATCCTACTTTAGTAAGGATGGCACAGGATTGGGCCATGCGATACCCTCTTGTTGATGGTCAAGGGAATTTTGGATCCATCGACGGGGATCCAGCTGCTGCCATGCGATATACAGAGGCTCGCCTGACTCACAGCGCTATCTTTTTGTTAGAGGACCTAGATAAAGATACTGTAGATATGGTCCCTAACTACGATGAAACTAAATATGAACCTGT [...]
+obj|Integer*|2511|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|1| [...]
+end
+end
+obj|IxAlignment|\2511:ATGCTAAATAAAGAAGAAATCATCGTCCCTAAAAATCTTGAAGAGGAAATGAAGGAGAGCTACCTTCGTTATTCCATGTCGGTAATTATTTCCCGCGCTTTGCCTGATGCTAGGGACGGATTAAAACCTTCTCAGCGACGTATTTTATACGCTATGAAACAATTAAATCTGACTCCAGGAGTAAAGCACAGAAAATGCGCAAAAATTTGCGGTGATACTTCCGGAGATTATCACCCTCATGGAGAAAGTGTCATTTATCCTACTTTAGTAAGGATGGCACAGGATTGGGCCATGCGATACCCTCTTGTTGATGGTCAAGGGAATTTTGGATCCATCGACGGGGATCCAGCTGCTGCCATGCGATATACAGAGGCTCGCCTGACTCACAGCGCTATCTTTTTGTTAGAGGACCTAGATAAAGATACTGTAGATATGGTCCCTAACTACGATGAAACTAAATATGAACCTGT [...]
+obj|Integer*|2511|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|1| [...]
+end
+end
+obj|IxAlignment|\2511:ATGCTAAATAAAGAAGAAATCATCGTCCCTAAAAATCTTGAAGAGGAAATGAAGGAGAGCTACCTTCGTTATTCCATGTCGGTAATTATTTCCCGCGCTTTGCCTGATGCTAGGGACGGATTAAAACCTTCTCAGCGACGTATTTTATACGCTATGAAACAATTAAATCTGACTCCAGGAGTAAAGCACAGAAAATGCGCAAAAATTTGCGGTGATACTTCCGGAGATTATCACCCCCATGGAGAAAGTGTCATTTATCCTACTTTAGTAAGGATGGCACAGGATTGGGCCATGCGATACCCTCTTGTTGATGGTCAAGGGAATTTTGGATCCATCGACGGGGATCCAGCTGCTGCCATGCGATATACAGAGGCTCGCCTGACTCACAGCGCTATCTTTTTGTTAGAGGACCTAGATAAAGATACTGTAGATATGGTCCCTAACTACGATGAAACTAAATATGAACCTGT [...]
+obj|Integer*|2511|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|3|0| [...]
+end
+end
+end
+end||{({0,1},2),3}
+obj|AlnxActiveList|80|1|0|0|1|1|0
+obj|Object*|3
+obj|AlnxActiveAnlz|alnx1_7|[5]|4|50266112|1|0|100|0.5|4|0|Similarity
+end
+obj|AlnxActiveAnlz|alnx1_8|[5]|4|50266112|1|0|100|0.5|4|0|Absolute Complexity
+end
+obj|AlnxActiveAnlz|alnx1_8|[5]|4|50266112|1|0|100|0.5|4|1|Absolute Complexity
+end
+end
+end|0
+end
\ No newline at end of file
diff --git a/data/workflow_samples/Sanger sequencing/trim-and-align.uwl b/data/workflow_samples/Sanger sequencing/trim-and-align.uwl
index 4218def..a2628aa 100644
--- a/data/workflow_samples/Sanger sequencing/trim-and-align.uwl	
+++ b/data/workflow_samples/Sanger sequencing/trim-and-align.uwl	
@@ -15,173 +15,85 @@
 
 include "Read one sequence.usa" as "Script-Read one sequence"
 
-workflow "Trim and align Sanger reads"{
+workflow "Trim and map Sanger reads"{
 
-    QualityTrim {
-        type:QualityTrim;
-        name:"FASTQ Quality Trimmer";
+    SequenceQualityTrim {
+        type:SequenceQualityTrim;
+        name:"Sequence Quality Trimmer";
         both-ends:true;
         out-mode:1;
     }
-    get-file-list {
-        type:get-file-list;
-        name:"File List";
+    read-sequence {
+        type:read-sequence;
+        name:"Read Sequence";
         url-in {
             dataset:"Dataset 1";
         }
     }
-    files-conversion {
-        type:files-conversion;
-        name:"To FASTQ";
-        document-format:fastq;
-        out-mode:1;
-    }
-    Script-Read-sequence {
-        type:"Script-Read one sequence";
-        name:"Read sequence";
-        script {
-out_sequence = null;
-try {
-    var sequences = readSequences(in_text);
-    if (1 == sequences.length) {
-        out_sequence = sequences[0];
-    }
-} catch (e) {
-    print(e.toString());
-}
-        };
-    }
     align-to-reference {
         type:align-to-reference;
-        name:"Align to Reference";
-    }
-    write-msa {
-        type:write-msa;
-        name:"Write Alignment";
-        url-out:"alignment.aln";
-    }
-    write-sequence {
-        type:write-sequence;
-        name:"Write Sequence";
-        accumulate:false;
-        document-format:genbank;
-        url-out:"sequence.gb";
+        name:"Map to Reference";
+        result-url:alignment.ugenedb;
     }
 
     .actor-bindings {
-        get-file-list.out-url->files-conversion.in-file
-        QualityTrim.out-file->Script-Read-sequence.in
-        files-conversion.out-file->QualityTrim.in-file
-        Script-Read-sequence.out->align-to-reference.in-sequence
-        align-to-reference.out->write-msa.in-msa
-        align-to-reference.out->write-sequence.in-sequence
+        SequenceQualityTrim.out-sequence->align-to-reference.in-sequence
+        read-sequence.out-sequence->SequenceQualityTrim.in-sequence
     }
 
-    files-conversion.url->QualityTrim.in-file.url
-    get-file-list.url->files-conversion.in-file.url
-    QualityTrim.url->Script-Read-sequence.in.text
-    Script-Read-sequence.sequence->align-to-reference.in-sequence.sequence
-    align-to-reference.msa->write-msa.in-msa.msa
-    align-to-reference.annotations->write-sequence.in-sequence.annotations
-    align-to-reference.sequence->write-sequence.in-sequence.sequence
+    read-sequence.sequence->SequenceQualityTrim.in-sequence.sequence
+    SequenceQualityTrim.sequence->align-to-reference.in-sequence.sequence
 
     .meta {
         parameter-aliases {
-            QualityTrim.len-id {
+            SequenceQualityTrim.len-id {
                 alias:min-length;
             }
-            QualityTrim.qual-id {
+            SequenceQualityTrim.qual-id {
                 alias:threshold;
             }
-            get-file-list.url-in {
+            read-sequence.url-in {
                 alias:reads;
             }
             align-to-reference.reference {
                 alias:reference;
             }
-            write-msa.url-out {
-                alias:out-alignemnt;
-            }
-            write-msa.url-suffix {
-                alias:alignment-suffix;
-            }
-            write-sequence.url-out {
-                alias:out-seq;
-            }
-            write-sequence.url-suffix {
-                alias:seq-suffix;
+            align-to-reference.result-url {
+                alias:result-url;
             }
         }
         visual {
-            QualityTrim {
-                pos:"-585 -510";
+            SequenceQualityTrim {
+                pos:"-720 -570";
                 style:ext;
-                bg-color-ext:"208 69 0 64";
-                in-file.angle:180;
-                out-file.angle:296.206;
-            }
-            Script-Read-sequence {
-                pos:"-540 -300";
-                style:simple;
-                bg-color-simple:"84 84 84 255";
-                in.angle:93.6914;
-                out.angle:360;
+                bg-color-ext:"0 128 128 64";
+                in-sequence.angle:180;
+                out-sequence.angle:360;
             }
             align-to-reference {
-                pos:"-390 -300";
+                pos:"-420 -555";
                 style:ext;
-                bg-color-ext:"0 128 0 64";
+                bg-color-ext:"0 128 128 64";
                 in-sequence.angle:180;
                 out.angle:360;
             }
-            files-conversion {
-                pos:"-750 -510";
-                style:simple;
-                bg-color-simple:"84 84 84 255";
-                in-file.angle:177.917;
-                out-file.angle:360;
-            }
-            get-file-list {
-                pos:"-930 -510";
-                style:ext;
-                bg-color-ext:"24 102 175 64";
-                out-url.angle:353.118;
-            }
-            write-msa {
-                pos:"-120 -300";
+            read-sequence {
+                pos:"-975 -555";
                 style:ext;
-                bg-color-ext:"64 26 96 64";
-                in-msa.angle:180;
-            }
-            write-sequence {
-                pos:"-120 -510";
-                style:ext;
-                bg-color-ext:"64 26 96 64";
-                in-sequence.angle:180;
-            }
-            QualityTrim.out-file->Script-Read-sequence.in {
-                text-pos:"-31.5 -15";
+                bg-color-ext:"0 128 128 64";
+                out-sequence.angle:360;
             }
-            Script-Read-sequence.out->align-to-reference.in-sequence {
-                text-pos:"-30.5 -28";
+            SequenceQualityTrim.out-sequence->align-to-reference.in-sequence {
+                text-pos:"-45 -43";
             }
-            align-to-reference.out->write-msa.in-msa {
-                text-pos:"-34 -24";
-            }
-            align-to-reference.out->write-sequence.in-sequence {
-                text-pos:"-31 -11";
-            }
-            files-conversion.out-file->QualityTrim.in-file {
-                text-pos:"-12 -24";
-            }
-            get-file-list.out-url->files-conversion.in-file {
-                text-pos:"-31 -24";
+            read-sequence.out-sequence->SequenceQualityTrim.in-sequence {
+                text-pos:"-33.8281 -27";
             }
         }
         wizard {
-            help-page-id:16122701;    
+            help-page-id:16122701;
 	    auto-run: true;
-            name:"Trim and Align Sanger Reads";
+            name:"Map Sanger Reads to Reference";
             page {
                 id:1;
                 next:2;
@@ -201,7 +113,7 @@ try {
                 next:3;
                 title:"Input Sanger Reads (ABI Files)";
                 parameters-area {
-                    get-file-list.url-in {
+                    read-sequence.url-in {
                         type:datasets;
                     }
                 }
@@ -209,14 +121,16 @@ try {
             page {
                 id:3;
                 next:4;
-                title:"Trimming and Filtering";
+                title:"Mapping Settings";
                 parameters-area {
                     group {
                         title:"Settings";
-                        label-size:120;
-                        QualityTrim.qual-id {
+                        label-size:220;
+                        SequenceQualityTrim.qual-id {
+                        }
+                        align-to-reference.identity {
                         }
-                        QualityTrim.len-id {
+                        align-to-reference.row-naming-policy {
                         }
                     }
                 }
@@ -228,11 +142,8 @@ try {
                     group {
                         title:"Output files";
                         label-size:120;
-                        write-msa.url-out {
-                            label:"Aligned reads file";
-                        }
-                        write-sequence.url-out {
-                            label:"Annotated sequence file";
+                        align-to-reference.result-url {
+                            label:"Mapped reads file";
                         }
                     }
                 }
diff --git a/installer/_common_data/Associate_files_to_UGENE.sh b/installer/_common_data/Associate_files_to_UGENE.sh
old mode 100644
new mode 100755
diff --git a/installer/_common_data/LICENSE.3rd_party b/installer/_common_data/LICENSE.3rd_party
index 17a01f8..cdc9dbc 100644
--- a/installer/_common_data/LICENSE.3rd_party
+++ b/installer/_common_data/LICENSE.3rd_party
@@ -182,11 +182,33 @@ The Files in src/plugins_3rdparty/ball/include and
 
 
 The Files in src/plugins_3rdparty/phylyp/src
-   version 3.6. (c) Copyright 1993-2004 by the University of Washington.
    Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed.
 
+   Copyright (c) 1993-2014, Joseph Felsenstein
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+	this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright notice,
+	this list of conditions and the following disclaimer in the documentation
+	and/or other materials provided with the distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+   POSSIBILITY OF SUCH DAMAGE. 
+   
 
 The Files in src/plugins_3rdparty/kalign/src
 
diff --git a/installer/linux/X11/README b/installer/linux/X11/README
new file mode 100644
index 0000000..5e25d51
--- /dev/null
+++ b/installer/linux/X11/README
@@ -0,0 +1,27 @@
+Creating a binary snapshot for Linux
+
+1) Build Qt 
+
+Set correct configuration for qt
+./configure -release -opensource -no-qt3support -no-phonon -nomake demos -nomake examples -nomake docs -sm -openssl -gtkstyle
+
+Probably you will have to install some additional libraries to enable this configuration.
+For example: to build on Ubuntu 8.10 you have to install the following packages
+libxext-dev
+libglu1-mesa-dev
+libgtk2.0-dev
+xlibs-dev
+libsm-dev
+libssl-dev
+
+2) Build UGENE in release mode
+
+Set UGENE_EXCLUDE_LIST_ENABLED=1  
+
+3) launch ./create_bundle.sh from trunk/installer/linux/X11/
+
+Remember: for std c++ lib compatibility you have to build on the lowest system which you would like to support since std lib doesn't have backward compatibility.
+
+4) To run console version of UGENE use 'ugene' command.
+   To run GUI version of UGENE use 'ugene -ui' command.
+
diff --git a/installer/linux/X11/create_bundle.sh b/installer/linux/X11/create_bundle.sh
new file mode 100755
index 0000000..29c5d05
--- /dev/null
+++ b/installer/linux/X11/create_bundle.sh
@@ -0,0 +1,232 @@
+# this script's home dir is trunk/installer/linux/X11
+
+PRODUCT_NAME="ugene"
+VERSION=`cat ../../../src/ugene_version.pri | grep UGENE_VERSION | awk -F'=' '{print $2}'`
+RELEASE_DIR=../../../src/_release
+SYMBOLS_DIR=symbols
+DUMP_SYMBOLS_LOG=dump_symbols_log.txt
+DATA_DIR=../../../data
+TARGET_APP_DIR="${PRODUCT_NAME}-${VERSION}"
+PACKAGE_TYPE="linux"
+ARCH=`uname -m`
+
+source create_bundle_common.sh
+
+if [ -z "$PATH_TO_QT_LIBS" ]; then 
+   echo PATH_TO_QT_LIBS environment variable is not set!
+   exit -1
+fi
+
+if [ -z "$PATH_TO_LIBPNG12" ]; then 
+   echo PATH_TO_LIBPNG12 environment variable is not set!
+fi
+
+echo cleaning previous bundle
+rm -rf ${TARGET_APP_DIR}
+rm -rf "${SYMBOLS_DIR}"
+rm -f "${DUMP_SYMBOLS_LOG}"
+rm -rf *.tar.gz
+mkdir $TARGET_APP_DIR
+mkdir "${SYMBOLS_DIR}"
+
+
+echo
+echo copying ugenecl
+add-binary ugenecl
+
+echo copying ugeneui
+add-binary ugeneui
+
+echo copying ugenem
+add-binary ugenem
+
+echo copying plugins_checker
+add-binary plugins_checker
+
+echo copying ugene startup script
+cp -v $RELEASE_DIR/ugene "$TARGET_APP_DIR"
+
+echo copying man page for UGENE
+mkdir -v "$TARGET_APP_DIR/man1"
+cp -v ../../_common_data/ugene.1.gz "$TARGET_APP_DIR/man1"
+
+echo copying README file
+cp -v ../../_common_data/README "$TARGET_APP_DIR"
+
+echo copying LICENSE file
+cp -v ../../_common_data/LICENSE "$TARGET_APP_DIR"
+echo copying LICENSE.3rd_party file
+cp -v ../../_common_data/LICENSE.3rd_party "$TARGET_APP_DIR"
+
+echo copying file association script files
+cp -v ../../_common_data/Associate_files_to_UGENE.sh "$TARGET_APP_DIR"
+cp -v ../../_common_data/icons.tar.gz "$TARGET_APP_DIR"
+cp -v ../../_common_data/application-x-ugene.xml "$TARGET_APP_DIR"
+cp -v ../../_common_data/ugene.desktop "$TARGET_APP_DIR"
+cp -v ../../_common_data/ugene.png "$TARGET_APP_DIR"
+
+mkdir "${TARGET_APP_DIR}/plugins"
+
+echo copying translations
+cp -v $RELEASE_DIR/transl_en.qm "$TARGET_APP_DIR"
+cp -v $RELEASE_DIR/transl_ru.qm "$TARGET_APP_DIR"
+
+echo copying data dir
+cp -R "$RELEASE_DIR/../../data"  "${TARGET_APP_DIR}"
+if [ ! -z $UGENE_CISTROME_PATH ]; then
+  echo "Copying cistrome data"
+  mkdir -p "${TARGET_APP_DIR}/data/cistrome"
+  mv $UGENE_CISTROME_PATH/* ${TARGET_APP_DIR}/data/cistrome/
+fi
+echo
+
+#include external tools package if applicable
+echo copying tools dir
+if [ -e "$RELEASE_DIR/../../tools" ]; then
+    cp -R "$RELEASE_DIR/../../tools" "${TARGET_APP_DIR}/"
+    find $TARGET_APP_DIR -name ".svn" | xargs rm -rf
+    PACKAGE_TYPE="linux-full" 
+    if [ ! -z $UGENE_R_DIST_PATH ]; then
+      echo "Copying R tool"
+      cp -R $UGENE_R_DIST_PATH "${TARGET_APP_DIR}/tools"
+    fi
+fi
+
+echo
+echo copying core shared libs
+add-core-library U2Algorithm
+add-core-library U2Core
+add-core-library U2Designer
+add-core-library U2Formats
+add-core-library U2Gui
+add-core-library U2Lang
+add-core-library U2Private
+add-core-library U2Test
+add-core-library U2View
+add-core-library ugenedb
+add-core-library breakpad
+
+echo
+echo copying qt libraries
+add-qt-library Qt5Core
+add-qt-library Qt5DBus
+add-qt-library Qt5Gui
+add-qt-library Qt5Multimedia
+add-qt-library Qt5MultimediaWidgets
+add-qt-library Qt5Network
+add-qt-library Qt5OpenGL
+add-qt-library Qt5Positioning
+add-qt-library Qt5PrintSupport
+add-qt-library Qt5Qml
+add-qt-library Qt5Quick
+add-qt-library Qt5Script
+add-qt-library Qt5ScriptTools
+add-qt-library Qt5Sensors
+add-qt-library Qt5Sql
+add-qt-library Qt5Svg
+add-qt-library Qt5Test
+add-qt-library Qt5WebChannel
+add-qt-library Qt5WebKit
+add-qt-library Qt5WebKitWidgets
+add-qt-library Qt5Widgets
+add-qt-library Qt5Xml
+if [ ! -z "$PATH_TO_LIBPNG12" ]; then 
+   cp -v "$PATH_TO_LIBPNG12/libpng12.so.0" "${TARGET_APP_DIR}"
+   strip -v "${TARGET_APP_DIR}/libpng12.so.0"
+fi
+if [ ! -z "$PATH_TO_LIBPROC" ]; then 
+   cp -v "$PATH_TO_LIBPROC" "${TARGET_APP_DIR}"
+   strip -v "${TARGET_APP_DIR}"
+fi
+if [ ! -z "$PATH_TO_INCLUDE_LIBS" ]; then
+   cp -v "$PATH_TO_INCLUDE_LIBS"/* "${TARGET_APP_DIR}"
+fi
+
+mkdir "${TARGET_APP_DIR}/sqldrivers"
+cp -v "$PATH_TO_QT_LIBS/../plugins/sqldrivers/libqsqlmysql.so" "${TARGET_APP_DIR}/sqldrivers"
+strip -v "${TARGET_APP_DIR}/sqldrivers/libqsqlmysql.so"
+
+cp -r -v "$PATH_TO_QT_LIBS/../plugins/platforms" "${TARGET_APP_DIR}"
+strip -v "${TARGET_APP_DIR}/platforms"/*.so
+
+cp -r -v "$PATH_TO_QT_LIBS/../plugins/imageformats" "${TARGET_APP_DIR}"
+strip -v ${TARGET_APP_DIR}/imageformats/*.so
+
+PATH_TO_MYSQL_CLIENT_LIB=`ldd "${TARGET_APP_DIR}/sqldrivers/libqsqlmysql.so" |grep libmysqlclient |cut -d " " -f3`
+cp -v "$PATH_TO_MYSQL_CLIENT_LIB" "${TARGET_APP_DIR}"
+
+PATH_TO_ICU_DATA_LIB=`ldd "${PATH_TO_QT_LIBS}/libQt5Widgets.so.5" |grep libicudata.so |cut -d " " -f3`
+cp -v -L "$PATH_TO_ICU_DATA_LIB" "${TARGET_APP_DIR}"
+PATH_TO_ICU_I18N_LIB=`ldd "${PATH_TO_QT_LIBS}/libQt5Widgets.so.5" |grep libicui18n.so |cut -d " " -f3`
+cp -v -L "$PATH_TO_ICU_I18N_LIB" "${TARGET_APP_DIR}"
+PATH_TO_ICU_UUC_LIB=`ldd "${PATH_TO_QT_LIBS}/libQt5Widgets.so.5" |grep libicuuc.so |cut -d " " -f3`
+cp -v -L "$PATH_TO_ICU_UUC_LIB" "${TARGET_APP_DIR}"
+
+if [ "$1" == "-test" ]
+    then
+        cp "$PATH_TO_QT_LIBS/libQtTest.so.4" "${TARGET_APP_DIR}"
+fi
+
+echo copying plugins
+add-plugin annotator
+add-plugin ball
+add-plugin biostruct3d_view
+add-plugin browser_support
+add-plugin chroma_view
+add-plugin circular_view
+add-plugin dbi_bam
+add-plugin dna_export
+add-plugin dna_flexibility
+add-plugin dna_graphpack
+add-plugin dna_stat
+add-plugin dotplot
+add-plugin enzymes
+add-plugin external_tool_support
+add-plugin genome_aligner
+add-plugin gor4
+add-plugin hmm2
+add-plugin kalign
+add-plugin linkdata_support
+add-plugin orf_marker
+add-plugin opencl_support
+add-plugin pcr
+add-plugin phylip
+add-plugin primer3
+add-plugin psipred
+add-plugin ptools
+add-plugin query_designer
+add-plugin remote_blast
+add-plugin repeat_finder
+add-plugin sitecon
+add-plugin smith_waterman
+add-plugin umuscle
+add-plugin workflow_designer
+add-plugin weight_matrix
+add-plugin variants
+
+if [ "$1" == "-test" ]; then
+  add-plugin test_runner
+fi
+
+# remove svn dirs
+find $TARGET_APP_DIR -name ".svn" | xargs rm -rf
+
+REVISION=$BUILD_VCS_NUMBER_new_trunk
+if [ -z "$REVISION" ]; then
+    REVISION=`svn status -u | sed -n -e '/revision/p' | awk '{print $4}'`
+fi
+
+DATE=`date '+%d_%m_%H-%M'`
+
+if [ "$1" == "-test" ]; then
+   TEST="-test"
+fi
+
+PACKAGE_NAME=$PRODUCT_NAME"-"$VERSION"-$PACKAGE_TYPE-"$ARCH"-r"$REVISION$TEST
+
+tar -czf ${SYMBOLS_DIR}.tar.gz $SYMBOLS_DIR/
+tar -czf $PACKAGE_NAME.tar.gz $TARGET_APP_DIR/
+if [ ! -z $UGENE_CISTROME_PATH ]; then
+  echo "Copying cistrome data"
+  mv ${TARGET_APP_DIR}/data/cistrome/* $UGENE_CISTROME_PATH
+fi
diff --git a/installer/linux/X11/create_bundle_common.sh b/installer/linux/X11/create_bundle_common.sh
new file mode 100755
index 0000000..ef1da04
--- /dev/null
+++ b/installer/linux/X11/create_bundle_common.sh
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+function dump_symbols {
+    filename=`basename "${1}"`
+    SYMBOL_FILE="${SYMBOLS_DIR}/${filename}.sym";
+    "${ARCH}/dump_syms" "${1}" > "${SYMBOLS_DIR}/${filename}.sym" 2>> "${DUMP_SYMBOLS_LOG}"
+
+    FILE_HEAD=`head -n 1 "${SYMBOL_FILE}"`
+    FILE_HASH=`echo ${FILE_HEAD} | awk '{ print $4 }'`
+    FILE_NAME=`echo ${FILE_HEAD} | awk '{ print $5 }'`
+
+    DEST_PATH="${SYMBOLS_DIR}/${FILE_NAME}/${FILE_HASH}";
+    mkdir -p "${DEST_PATH}"
+    mv "${SYMBOL_FILE}" "${DEST_PATH}/${FILE_NAME}.sym"
+}
+
+function add-qt-library {
+    library=lib${1}.so.5
+    cp -v "$PATH_TO_QT_LIBS/${library}" "${TARGET_APP_DIR}"
+    strip -v "${TARGET_APP_DIR}/${library}"
+}
+
+function add-binary {
+    binary=$1
+    cp -v "$RELEASE_DIR/${binary}" "$TARGET_APP_DIR"
+    dump_symbols "${TARGET_APP_DIR}/${binary}"
+    strip -v "${TARGET_APP_DIR}/${binary}"
+}
+
+function add-core-library {
+    library=lib${1}.so.1
+    cp -v "$RELEASE_DIR/${library}" "${TARGET_APP_DIR}"
+    dump_symbols "${TARGET_APP_DIR}/${library}"
+    strip -v "${TARGET_APP_DIR}/${library}"
+}
+
+function add-plugin {
+    plugin=$1
+    echo "Registering plugin: ${plugin}"
+
+    PLUGIN_LIB="lib${plugin}.so"
+    PLUGIN_DESC="${plugin}.plugin"
+    PLUGIN_LICENSE="${plugin}.license"
+
+    echo $PLUGIN_LIB
+    echo
+
+    if [ ! -f ${RELEASE_DIR}/plugins/${PLUGIN_LIB} ] ;
+    then
+        echo "Plugin library file not found: ${PLUGIN_LIB} !"
+        exit 1
+    fi
+
+    if [ ! -f ${RELEASE_DIR}/plugins/${PLUGIN_DESC} ] ;
+    then
+        echo "Plugin descriptor file not found: ${PLUGIN_DESC} !"
+        exit 1
+    fi
+
+    if [ ! -f ${RELEASE_DIR}/plugins/${PLUGIN_LICENSE} ] ;
+    then
+        echo "Plugin descriptor file not found: ${PLUGIN_LICENSE} !"
+        exit 1
+    fi
+
+    cp -v "${RELEASE_DIR}/plugins/${PLUGIN_LIB}"  "${TARGET_APP_DIR}/plugins/"
+    cp -v "${RELEASE_DIR}/plugins/${PLUGIN_DESC}" "${TARGET_APP_DIR}/plugins/"
+    cp -v "${RELEASE_DIR}/plugins/${PLUGIN_LICENSE}" "${TARGET_APP_DIR}/plugins/"
+    dump_symbols "${TARGET_APP_DIR}/plugins/${PLUGIN_LIB}"
+    strip -v "${TARGET_APP_DIR}/plugins/${PLUGIN_LIB}"
+}
diff --git a/installer/linux/X11/i686/dump_syms b/installer/linux/X11/i686/dump_syms
new file mode 100755
index 0000000..156fb3b
Binary files /dev/null and b/installer/linux/X11/i686/dump_syms differ
diff --git a/installer/linux/X11/x86_64/dump_syms b/installer/linux/X11/x86_64/dump_syms
new file mode 100755
index 0000000..b00d4e6
Binary files /dev/null and b/installer/linux/X11/x86_64/dump_syms differ
diff --git a/installer/linux/fedora/devel/ugene.spec b/installer/linux/fedora/devel/ugene.spec
deleted file mode 100644
index bf08b9d..0000000
--- a/installer/linux/fedora/devel/ugene.spec
+++ /dev/null
@@ -1,75 +0,0 @@
-Name:    ugene
-Summary: Integrated bioinformatics toolkit
-Version: 1.5.1
-Release: 1%{?dist}
-#The entire source code is GPLv2+ except:
-#file src/libs_3rdparty/qtbindings_core/src/qtscriptconcurrent.h which is GPLv2
-#files in src/plugins_3rdparty/script_debuger/src/qtscriptdebug/ which are GPLv2
-License: GPLv2+ and GPLv2
-Group:   Applications/Engineering
-URL:     http://ugene.unipro.ru
-Source0: http://ugene.unipro.ru/downloads/%{name}-%{version}.tar.gz
-
-Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-BuildRequires: qt-devel >= 4.5.0 zlib-devel desktop-file-utils
-#We need strict versions of qt for correct work of src/libs_3rdparty/qtbindings_*
-Requires:  qt >= 4.5.0 qt-x11 >= 4.5.0
-
-%description
-Unipro UGENE is a cross-platform visual environment for DNA and protein
-sequence analysis. UGENE integrates the most important bioinformatics
-computational algorithms and provides an easy-to-use GUI for performing
-complex analysis of the genomic data. One of the main features of UGENE
-is a designer for custom bioinformatics workflows.
-
-%prep
-%setup -q
-
-%build
-%_bindir/qmake-qt4 -r \
-        INSTALL_BINDIR=%{_bindir} \
-        INSTALL_LIBDIR=%{_libdir} \
-        INSTALL_DATADIR=%{_datadir} \
-        INSTALL_MANDIR=%{_mandir}
-
-make %{?_smp_mflags}
-
-%install
-rm -rf %{buildroot}
-make install INSTALL_ROOT=%{buildroot}
-desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
-
-%clean
-rm -rf %{buildroot}
-
-%files
-%defattr(-,root,root,-)
-%{_bindir}/*
-%{_libdir}/%{name}/
-%{_datadir}/applications/*
-%{_datadir}/pixmaps/*
-%{_datadir}/%{name}/
-%{_mandir}/man1/*
-%doc COPYRIGHT LICENSE
-
-%changelog
-* Fri Jul 17 2009 Ivan Efremov <iefremov at unipro.ru> - 1.5.1-1 
-- Upstream version change
-- Fix for lrelease removed due to upstream package changes
-
-* Fri Jul 10 2009 Ivan Efremov <iefremov at unipro.ru> - 1.5.0-3
-- desktop-file-utils added to dependencies
-
-* Mon Jul 06 2009 Ivan Efremov <iefremov at unipro.ru> - 1.5.0-1
-- Upstream version change
-- Needed Qt versions bumped up
-- Fix for lrelease updated due to upstream package changes
-
-* Tue Mar 24 2009 Ivan Efremov <iefremov at unipro.ru> - 1.4.1-1
-- Upstream version change
-
-* Fri Mar 06 2009 Ivan Efremov <iefremov at unipro.ru> - 1.4.0-1
-- Upstream version change
-
-* Mon Feb 02 2009 Ivan Efremov <iefremov at unipro.ru> - 1.3.3-1
-- Initial release of rpm
diff --git a/installer/linux/fedora/mkinstaller.sh b/installer/linux/fedora/mkinstaller.sh
old mode 100644
new mode 100755
diff --git a/installer/linux/fedora/ugene.spec b/installer/linux/fedora/ugene.spec
index 20a9690..b029107 100644
--- a/installer/linux/fedora/ugene.spec
+++ b/installer/linux/fedora/ugene.spec
@@ -1,22 +1,21 @@
 Name:    ugene
 Summary: Integrated bioinformatics toolkit
-Version: 1.22.0
-Release: 5%{?dist}
+Version: 1.28.0
+Release: 7%{?dist}
 #The entire source code is GPLv2+ except:
 #file src/libs_3rdparty/qtbindings_core/src/qtscriptconcurrent.h which is GPLv2
 #files in src/plugins_3rdparty/script_debuger/src/qtscriptdebug/ which are GPLv2
 License: GPLv2+ and GPLv2
 Group:   Applications/Engineering
-URL:     http://ugene.unipro.ru
-Source0: http://ugene.unipro.ru/downloads/%{name}-%{version}.tar.gz
+URL:     http://ugene.net
+Source0: http://ugene.net/downloads/%{name}-%{version}.tar.gz
 
 BuildRequires: desktop-file-utils
 BuildRequires: mesa-libGLU-devel
 BuildRequires: procps-devel
-BuildRequires: qt5-qtbase-devel
+BuildRequires: qt5-qtbase-devel qt5-qtbase-private-devel
 BuildRequires: qt5-qtbase-mysql
 BuildRequires: qt5-qtmultimedia-devel
-BuildRequires: qt5-qtquick1-devel
 BuildRequires: qt5-qtscript-devel
 BuildRequires: qt5-qtsensors-devel
 BuildRequires: qt5-qtsvg-devel
@@ -27,8 +26,9 @@ BuildRequires: qt5-qtxmlpatterns-devel
 BuildRequires: zlib-devel
 
 BuildConflicts: qt-devel
+
 #We need strict versions of qt for correct work of src/libs_3rdparty/qtbindings_*
-%{?_qt5_version:Requires: qt5%{?_isa} >= %{_qt5_version}}
+%{?_qt5:Requires: %{_qt5}%{?_isa} = %{_qt5_version}}
 
 Provides: bundled(sqlite)
 Provides: bundled(samtools)
@@ -45,7 +45,7 @@ is a designer for custom bioinformatics workflows.
 %setup -q
 
 %build
-%_bindir/qmake-qt5 -r -spec linux-g++\
+%{qmake_qt5} -r \
         INSTALL_BINDIR=%{_bindir} \
         INSTALL_LIBDIR=%{_libdir} \
         INSTALL_DATADIR=%{_datadir} \
@@ -55,12 +55,8 @@ is a designer for custom bioinformatics workflows.
 %else
         UGENE_WITHOUT_NON_FREE=1 \
 %endif
-        UGENE_EXCLUDE_LIST_ENABLED=1\
-        QMAKE_CFLAGS_RELEASE="${CFLAGS}"\
-        QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}"\
-        QMAKE_LFLAGS_RELEASE="${LDFLAGS}"\
-        QMAKE_STRIP=\
-        QMAKE_CFLAGS_ISYSTEM=\
+        UGENE_EXCLUDE_LIST_ENABLED=1
+
 
 make %{?_smp_mflags}
 
@@ -68,28 +64,39 @@ make %{?_smp_mflags}
 make install INSTALL_ROOT=%{buildroot}
 desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop
 
+%post
+touch --no-create %{_datadir}/icons/hicolor &> /dev/null || :
+touch --no-create %{_datadir}/mime/packages &> /dev/null || :
+
+%posttrans
+gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || :
+update-desktop-database -q &> /dev/null ||:
+update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
+
+%postun
+if [ $1 -eq 0 ] ; then
+touch --no-create %{_datadir}/icons/hicolor &> /dev/null || :
+gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || :
+update-desktop-database -q &> /dev/null ||:
+touch --no-create %{_datadir}/mime/packages &> /dev/null || :
+update-mime-database %{?fedora:-n} %{_datadir}/mime &> /dev/null || :
+fi
+
 %files
 %{!?_licensedir:%global license %%doc}
-%license COPYRIGHT LICENSE LICENSE.3rd_party
+%license COPYRIGHT LICENSE.txt LICENSE.3rd_party.txt
 %{_bindir}/*
 %{_libdir}/%{name}/
-%{_datadir}/applications/*
-%{_datadir}/pixmaps/*
-%{_datadir}/icons/*
-%{_datadir}/mime/*
+%{_datadir}/applications/%{name}.desktop
+%{_datadir}/pixmaps/ugene.*
+%{_datadir}/icons/hicolor/*/*/*
+%{_datadir}/mime/packages/*.xml
 %{_datadir}/%{name}/
 %{_mandir}/man1/*
 
 %changelog
-* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-5
-- Push latest version to F-24+ too
-
-* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-4
-- Push latest version to F-24+ too
-
-* Mon May 30 2016 Yuliya Algaer <yalgaer at gmail.com> 1.22.0-3
-- Push latest version to F-24+ too
+* Mon Aug 28 2017 Yuliya Algaer <yalgaer at fedoraproject.org> - 1.27.0-7
+- New upstream release
 
-* Sun May  8 2016 Peter Robinson <pbrobinson at fedoraproject.org> 1.22.0-2
-- Push latest version to F-24+ too
-- Use %%license
\ No newline at end of file
+* Thu Aug 03 2017 Fedora Release Engineering <releng at fedoraproject.org> - 1.26.3-4
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/installer/linux/ubuntu/build.sh b/installer/linux/ubuntu/build.sh
old mode 100644
new mode 100755
diff --git a/installer/linux/ubuntu/debian/copyright b/installer/linux/ubuntu/debian/copyright
index c1df623..95ef761 100644
--- a/installer/linux/ubuntu/debian/copyright
+++ b/installer/linux/ubuntu/debian/copyright
@@ -232,11 +232,33 @@ The Files in src/plugins_3rdparty/ball/include and
 
 
 The Files in src/plugins_3rdparty/phylyp/src
-   version 3.6. (c) Copyright 1993-2004 by the University of Washington.
    Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed.
 
+   Copyright (c) 1993-2014, Joseph Felsenstein
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+	this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright notice,
+	this list of conditions and the following disclaimer in the documentation
+	and/or other materials provided with the distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+   POSSIBILITY OF SUCH DAMAGE. 
+   
 
 The Files in src/plugins_3rdparty/kalign/src
 
diff --git a/installer/linux/ubuntu/debian/rules b/installer/linux/ubuntu/debian/rules
index 4873321..dcd1e33 100644
--- a/installer/linux/ubuntu/debian/rules
+++ b/installer/linux/ubuntu/debian/rules
@@ -54,11 +54,8 @@ install-arch:
 	rm debian/ugene/usr/lib/ugene/plugins/psipred.plugin
 	rm debian/ugene/usr/lib/ugene/plugins/psipred.license
 	rm debian/ugene/usr/lib/ugene/plugins/libpsipred.so
-	rm debian/ugene/usr/lib/ugene/plugins/phylip.plugin
-	rm debian/ugene/usr/lib/ugene/plugins/phylip.license
-	rm debian/ugene/usr/lib/ugene/plugins/libphylip.so
 ##Create ugene-non-free package
-	$(MAKE) INSTALL_ROOT=$$(pwd)/debian/ugene-non-free sub-src-plugins_3rdparty-psipred-install_subtargets sub-src-plugins_3rdparty-phylip-install_subtargets install_plugins
+	$(MAKE) INSTALL_ROOT=$$(pwd)/debian/ugene-non-free sub-src-plugins_3rdparty-psipred-install_subtargets install_plugins
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/annotator.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/annotator.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/ball.license
@@ -105,6 +102,8 @@ install-arch:
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/orf_marker.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/pcr.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/pcr.plugin
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/phylip.plugin
+	rm debian/ugene-non-free/usr/lib/ugene/plugins/phylip.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/primer3.license
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/primer3.plugin
 	rm debian/ugene-non-free/usr/lib/ugene/plugins/ptools.license
diff --git a/installer/linux/ubuntu/pack.sh b/installer/linux/ubuntu/pack.sh
old mode 100644
new mode 100755
diff --git a/installer/source/COPYRIGHT b/installer/source/COPYRIGHT
new file mode 100644
index 0000000..f744dc9
--- /dev/null
+++ b/installer/source/COPYRIGHT
@@ -0,0 +1,33 @@
+Unipro UGENE - Integrated Bioinformatics Suite
+Copyright (C) 2008-2017 Unipro, Novosibirsk, Russia
+
+This suite of programs is free software. You can redistribute it
+and/or modify it under the terms of the GNU General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+In other words, you are free to modify, copy, or redistribute this
+source code and its documentation in any way you like, but you must
+distribute all derivative versions as free software under the same
+terms that I've provided my code to you (i.e. the GNU General Public
+License). This precludes any use of the code in proprietary or
+commercial software unless your source code is made freely available.
+
+If you wish to use Unipro UGENE code under a different Open Source 
+license that's not compatible with the GPL (like the Artistic License, BSD
+license, or the Netscape Public License), please contact us
+(ugene at unipro.ru) for permission.
+
+Incorporation into commercial software under non-GPL terms is possible
+by obtaining a specially licensed version from Unipro.
+Contact 'ugene at unipro.ru' to arrange licensing terms.
+
+This software is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this Unipro UGENE release, in the file LICENSE; 
+if not, write to the Free Software Foundation, Inc., 
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
diff --git a/installer/source/HeadC.txt b/installer/source/HeadC.txt
new file mode 100644
index 0000000..7373701
--- /dev/null
+++ b/installer/source/HeadC.txt
@@ -0,0 +1,10 @@
+/*****************************************************************
+* Unipro UGENE - Integrated Bioinformatics Suite
+* Copyright (C) 2008-2017 Unipro, Russia (http://ugene.net)
+* All Rights Reserved
+* 
+*     This source code is distributed under the terms of the
+*     GNU General Public License. See the files COPYING and LICENSE
+*     for details.
+*****************************************************************/
+
diff --git a/installer/source/HeadPro.txt b/installer/source/HeadPro.txt
new file mode 100644
index 0000000..9440915
--- /dev/null
+++ b/installer/source/HeadPro.txt
@@ -0,0 +1,11 @@
+##################################################################
+# Unipro UGENE - Integrated Bioinformatics Suite
+# Copyright (C) 2008-2017 Unipro, Russia (http://ugene.net)
+# All Rights Reserved
+# 
+#
+#     This source code is distributed under the terms of the
+#     GNU General Public License. See the files COPYING and LICENSE
+#     for details.
+##################################################################
+
diff --git a/installer/source/config.sh b/installer/source/config.sh
new file mode 100755
index 0000000..8bda109
--- /dev/null
+++ b/installer/source/config.sh
@@ -0,0 +1,78 @@
+U_NAME=ugene
+U_VERSION=`cat ../../src/ugene_version.pri | grep UGENE_VERSION | awk -F'=' '{print $2}'`
+##U_REVISION=`svn status -u | sed -n -e '/revision/p' | awk '{print $4}'`
+svn upgrade ../../
+U_REVISION=`svn info|grep "Revision:"|cut -d " " -f2`
+DST_NAME=$U_NAME-$U_VERSION
+
+#Files to include into distribution bundle
+
+#warning!   if in SRC_FILES file path(no directory) before file name must be stay ./ ;for example: "../.././ugene"
+SRC_FILES=(
+    "./COPYRIGHT"
+    "../.././LICENSE.txt"
+    "../.././LICENSE.3rd_party.txt"
+    "../.././ugene.pro"
+    "../../src/gen_bin_script.cmd"
+    "../../src/ugene_globals.pri"
+    "../../src/ugene_plugin_common.pri"
+    "../../src/ugene_plugin_descriptor.pri"
+    "../../src/ugene_lib_common.pri"
+    "../../src/ugene_version.pri"
+    "../.././build.txt"
+    "../../src/libs_3rdparty"
+    "../../src/plugins_3rdparty"
+    "../../src/plugins"
+    "../../installer/_common_data"
+    "../../installer/linux/fedora"
+    "../../installer/linux/ubuntu"
+    "../../installer/macosx"
+    "../../installer/windows/images"
+    "../../installer/windows/ugene.nsh"
+    "../../installer/windows/ugene_extensions.nsh"
+    "../../src/corelibs/"
+    "../../src/include/"
+    "../../src/ugeneui/"
+    "../../src/ugenecl/"
+    "../../src/ugenem/"
+    "../../data/"
+)
+
+DST_DIR=./$DST_NAME/
+
+if [[ "$1" == "bzip2" ]]
+then
+    DST_FILE="$DST_NAME-src-r$U_REVISION.tar.bz2"
+    TAR_ARG='pvcjf'
+else
+    DST_FILE="$DST_NAME-src-r$U_REVISION.tar.gz"
+    TAR_ARG='pvczf'
+fi
+
+EXCLUDE_LIST=(
+    "*.svn"
+    "*.vcproj"
+    "*_tmp*"
+    "*vcproj*"
+    "*.pdb"
+    "*.idb"
+    "*Makefile*"
+    "*.user"
+    "../../src/plugins/atistream_support"
+    "../../src/libs_3rdparty/libssh"
+    "../../src/libs_3rdparty/openssl"
+)
+
+MAP_LIST=(
+    "*.cpp" "HeadC.txt"
+    "*.h"   "HeadC.txt"
+    "*.c"   "HeadC.txt"
+    "*.cu"  "HeadC.txt"
+    "*.qs"  "HeadC.txt"
+    "*.js"  "HeadC.txt"
+    "*.pro" "HeadPro.txt"
+    "*.pri" "HeadPro.txt"
+    "*.sh"  "HeadPro.txt"
+)
+
+REMOVE_FLAG=1
diff --git a/installer/source/pack.sh b/installer/source/pack.sh
new file mode 100755
index 0000000..fb9af6d
--- /dev/null
+++ b/installer/source/pack.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+. ./config.sh $1
+
+echo "------------"
+echo "work set:" ${SRC_FILES[@]}
+echo "dst file:" $DST_DIR
+echo "exl list:" ${EXCLUDE_LIST[@]}
+echo "------------"
+
+
+
+LIMIT=0
+copy_Function_for_file()
+{
+CUR_FILENAME="$1"
+flag=0
+    for EXCLUDE_FILENAME in "${EXCLUDE_LIST[@]}"
+    do
+        if [[ "$CUR_FILENAME" == $EXCLUDE_FILENAME ]]
+        then    
+        flag=1
+        fi
+    done
+    #------------------------------------------------
+    
+    if [[ $flag == 0 ]]
+    then
+            #if file is in the list -> add header
+            flag_to_copy=1
+            for i in ${LIMIT[@]}
+            do
+                CUR_FILENAME_FORMATED="${CUR_FILENAME##*../}"
+				CUR_FILEPATH="${CUR_FILENAME_FORMATED%/*}"
+				mkdir -p "$DST_DIR$CUR_FILEPATH"
+            done
+                    if [[ $flag_to_copy == 1 ]]
+                    then
+                        #������ �����������
+					   cp "$CUR_FILENAME" "$DST_DIR$CUR_FILENAME_FORMATED"              
+                    fi  
+    fi
+}
+copy_Function()
+{
+for CUR_FILENAME in "$1"*
+do
+    flag=0
+    for EXCLUDE_FILENAME in "${EXCLUDE_LIST[@]}"
+    do
+
+        if [[ "$CUR_FILENAME" == $EXCLUDE_FILENAME ]]
+        then    
+        flag=1
+        fi
+    done
+    #------------------------------------------------
+    
+    if [[ $flag == 0 ]]
+    then
+        if [[ -d "$CUR_FILENAME" ]]
+        then # if its dir
+           CUR_FILENAME_FORMATED="${CUR_FILENAME##*../}"
+			mkdir -p  "$DST_DIR$CUR_FILENAME_FORMATED"   
+		   copy_Function "$CUR_FILENAME/"
+        else # if its file
+            #if file is in list -> add header
+            flag_to_copy=1
+            for i in ${LIMIT[@]}
+            do
+                if [[ $CUR_FILENAME == ${FILE_TYPE[$i]} ]]
+                then
+                    #echo "head: $CUR_FILENAME --> $DST_DIR$CUR_FILENAME"
+					CUR_FILENAME_FORMATED="${CUR_FILENAME##*../}"
+                    cat "$CUR_FILENAME" > "$DST_DIR$CUR_FILENAME_FORMATED" 
+                fi
+            done
+                    if [[ $flag_to_copy == 1 ]]
+                    then
+                        #just copy
+						CUR_FILENAME_FORMATED="${CUR_FILENAME##*../}"
+                        cp "$CUR_FILENAME" "$DST_DIR$CUR_FILENAME_FORMATED"              
+                    fi  
+
+        fi
+    fi
+done    
+}
+#------------------------------------------------------------------------------------------------------------------------------------------------
+
+#TODO: check for svn, sed, awk
+echo "---checking that all required tools installed"
+
+TEMP_PAPKA_NAME="tmpdir/"
+TEMP_ARHIV_NAME="temparch.tgz"
+
+FILE_FOR_TESTING="config.sh"
+FILE_FOR_TESTING_TWO="gogi.sh"
+
+rm -rf $TEMP_PAPKA_NAME
+mkdir -p  $TEMP_PAPKA_NAME
+    if [[ ! -d $TEMP_PAPKA_NAME ]]
+    then
+        echo "mkdir -p  - failed"
+        exit 1
+    fi  
+cp "$FILE_FOR_TESTING" "$TEMP_PAPKA_NAME$FILE_FOR_TESTING"      
+    if [[ ! -s $TEMP_PAPKA_NAME$FILE_FOR_TESTING ]]
+    then
+        echo "cp - failed"
+        exit 1
+    fi
+cat "$FILE_FOR_TESTING" > "$TEMP_PAPKA_NAME$FILE_FOR_TESTING_TWO"   
+    if [[ ! -s $TEMP_PAPKA_NAME$FILE_FOR_TESTING_TWO ]]
+    then
+        echo "cat - failed"
+        exit 1
+    fi
+tar -${TAR_ARG} $TEMP_ARHIV_NAME $TEMP_PAPKA_NAME
+    if [[ ! -s $TEMP_ARHIV_NAME ]]
+    then
+        echo "tar - failed"
+        exit 1
+    fi
+rm -irf $TEMP_PAPKA_NAME
+rm -irf $TEMP_ARHIV_NAME
+    if [[ -s $TEMP_ARHIV_NAME ]]
+    then
+        echo "rm - failed"
+        exit 1
+    fi
+echo "---check for required tools finished succesfully"
+
+#------------------------------------------------------------------------------------------------------------------------------------------------
+#read headers mapping
+list_flag=0
+temp_per=1
+for TEMP_LIST in "${MAP_LIST[@]}"
+    do  
+    if [[ $list_flag == 0 ]]
+        then
+            #FILE_TYPE=( "$FILE_TYPE" "$TEMP_LIST" )    
+            FILE_TYPE[temp_per]="$TEMP_LIST"
+            list_flag=1
+        else
+            HEADER_FILE_NAME[temp_per]="$TEMP_LIST"
+            list_flag=0
+            if [[ ! -s "${HEADER_FILE_NAME[$temp_per]}" ]] #if header file found..
+                then
+                echo "${HEADER_FILE_NAME[$temp_per]} not found"
+                exit
+            fi
+        #----------------------------------------------------------------------------
+            LIMIT[$temp_per]=$temp_per
+            let "temp_per += 1"
+        #----------------------------------------------------------------------------
+        fi
+    done
+    
+echo "--------------------------------------------"
+
+for FILENAME in "${SRC_FILES[@]}"
+#iterate over all files in dir
+    do 
+    #echo $FILENAME*
+        if [[ ! -d "$FILENAME" ]] #if dir found..
+        then
+            if [[ ! -s "$FILENAME" ]]
+            then
+            echo "not found $FILENAME"
+            exit 1
+            fi
+        fi
+    done
+
+mkdir -p  "$DST_DIR"    
+    
+for FILENAME in "${SRC_FILES[@]}"
+#iterate over all files in dir
+    do 
+    #echo $FILENAME*
+        if [[ -d "$FILENAME" ]] # if dir found..
+        then
+			FILENAME_FORMATED="${FILENAME##*../}"
+            mkdir -p  "$DST_DIR$FILENAME_FORMATED"
+            copy_Function "$FILENAME"   
+        else
+            if [[ -s "$FILENAME" ]]
+            then
+            copy_Function_for_file "$FILENAME"
+            fi
+        fi
+    done
+    
+    # set ugene exclude list enabled for qmake configuration	
+    sed -i 's/UGENE_EXCLUDE_LIST_ENABLED = 0/UGENE_EXCLUDE_LIST_ENABLED = 1/g' "$DST_DIR/src/ugene_globals.pri"    
+    # delete previous src tar
+    rm -rf *.tar.gz
+   
+    # add dst file
+    tar -${TAR_ARG} "$DST_FILE" "$DST_DIR" #add to archive
+    if [[ $REMOVE_FLAG == 1 ]]
+    then
+        rm -irf "$DST_DIR"
+    fi
+    #mv "$DST_FILE" "$DST_DIR" # move archive to dst folder
+    
diff --git a/installer/windows_x64/build.cmd b/installer/windows_x64/build.cmd
new file mode 100644
index 0000000..3ba4a6f
--- /dev/null
+++ b/installer/windows_x64/build.cmd
@@ -0,0 +1,108 @@
+ at ECHO OFF
+echo "##teamcity[blockOpened name='Conf build']"
+set U_ROOT=%cd%
+IF NOT DEFINED U_NAME (set U_NAME=ugene)
+IF NOT DEFINED U_VERSION (set U_VERSION=1_5_2)
+set U_FULLNAME=%U_NAME%_%U_VERSION%
+IF NOT DEFINED TARGET_ARCH (set TARGET_ARCH=x86)
+REM TODO: extract the values above.
+set UGENE_PRINT_TO_CONSOLE=true
+set UGENE_USE_NATIVE_DIALOGS=false
+IF NOT DEFINED U_BTYPE (set U_BTYPE=Release)
+IF "%U_BTYPE%"=="Debug" (
+  set UGENE_INI=UGENED.ini
+  set UGENE_EXE=ugened.exe
+  set TEST_RUNNER_DLL=test_runnerd.dll
+  set BIN_DIR_NAME=_debug
+) ELSE (
+  set UGENE_INI=UGENE.ini
+  set UGENE_EXE=ugene.exe
+  set TEST_RUNNER_DLL=test_runner.dll
+  set BIN_DIR_NAME=_release
+)
+REM IF NOT DEFINED
+
+REM set PATH=%PATH%;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\tools\Qt\4.5.2\bin\;
+set Path=%Path%;C:/Program Files/NSIS
+call "C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"
+set
+echo "##teamcity[blockClosed name='Conf build']"
+
+
+
+IF NOT "%UGENE_DISTR_SKIP_BUILD%"==1 (
+echo ##teamcity[blockOpened name='qmake msvc project']
+echo "cd %U_ROOT%\src"
+cd %U_ROOT%\src
+echo "call qmake_msvc_proj.cmd"
+call qmake_msvc_proj.cmd 
+echo ##teamcity[blockClosed name='qmake msvc project']
+
+
+echo ##teamcity[blockOpened name='Build Solution ugene.sln']
+echo "cd %U_ROOT%"
+cd %U_ROOT%
+echo "devenv.exe ugene.sln /build "%U_BTYPE%^|Win32"
+devenv.exe ugene.sln /build "%U_BTYPE%|Win32" /out "build.log"
+echo "Checking errorlevel status ..."
+IF ERRORLEVEL 1 GOTO END_WITH_COMPL_ERR
+echo ##teamcity[blockClosed name='Build Solution ugene.sln']
+
+
+echo "##teamcity[blockOpened name='Building distr']"
+echo "cd %U_ROOT%\installer\windows"
+cd %U_ROOT%\installer\windows
+echo "makensis ugene.nsh"
+makensis ugene.nsh
+IF ERRORLEVEL 1 GOTO END_WITH_COMPL_ERR
+echo "##teamcity[blockClosed name='Building distr']"
+)
+
+
+
+IF NOT "%UGENE_DISTR_SKIP_INSTALL%"==1 (
+echo "##teamcity[blockOpened name='Installing distr']"
+echo "IF EXIST "%PROGRAMFILES%\Unipro uGene\Uninst.exe" ("%PROGRAMFILES%\Unipro uGene\Uninst.exe" /S)"
+IF EXIST "%PROGRAMFILES%\Unipro uGene\Uninst.exe" (%PROGRAMFILES%\Unipro uGene\Uninst.exe /S)
+echo "build\%U_FULLNAME%_win_%TARGET_ARCH%.exe /S /D C:/Program Files/Unipro uGENE"
+build\%U_FULLNAME%_win_%TARGET_ARCH%.exe /S /D C:/Program Files/Unipro uGENE
+echo "##teamcity[blockOpened name='Installing distr']"
+)
+
+
+IF NOT "%UGENE_DISTR_SKIP_TESTRUNNER%"==1 (
+echo "##teamcity[blockOpened name='Installing %TEST_RUNNER_DLL%']"
+echo "copy ..\..\src\%BIN_DIR_NAME%\plugins\%TEST_RUNNER_DLL% "%PROGRAMFILES%\Unipro uGENE\plugins""
+copy ..\..\src\%BIN_DIR_NAME%\plugins\%TEST_RUNNER_DLL% "%PROGRAMFILES%\Unipro uGENE\plugins"
+echo "copy ..\..\scripts\libTestHelper.js "%PROGRAMFILES%\Unipro uGENE\scripts"
+copy ..\..\scripts\libTestHelper.js "%PROGRAMFILES%\Unipro uGENE\scripts"
+echo "##teamcity[blockClosed name='Installing %TEST_RUNNER_DLL%']"
+)
+
+
+echo "##teamcity[blockOpened name='Running tests']"
+echo "set Path=%Path%;C:/Program Files/Unipro uGENE"
+set Path=%Path%;C:/Program Files/Unipro uGENE
+echo "set TEST_PATH=%U_ROOT%\test\"
+set TEST_PATH=%U_ROOT%\test\
+IF NOT DEFINED TEST_SUITE ( set TEST_SUITE=nightlyExcludeTests.list)
+IF EXIST ../test/test_report.html del /F ../test/test_report.html
+IF EXIST "%USERPROFILE%\Application Data\Unipro\%UGENE_INI%" del /F "%USERPROFILE%\Application Data\Unipro\%UGENE_INI%"
+IF EXIST "C:\Documents and Settings\NetworkService\Application Data\Unipro\%UGENE_INI%" del /F "C:\Documents and Settings\NetworkService\Application Data\Unipro\%UGENE_INI%"
+IF EXIST "C:\Documents and Settings\LocalService\Application Data\Unipro\%UGENE_INI%" del /F "C:\Documents and Settings\LocalService\Application Data\Unipro\%UGENE_INI%"
+REM cd ..\..\src\_release
+echo "%UGENE_EXE% ../../test/gui/component/plugins/TestRunner/run_suites.js"
+%UGENE_EXE% ../../test/gui/component/plugins/TestRunner/run_suites.js
+IF ERRORLEVEL 1 GOTO END_WITH_RUN_ERR
+
+IF EXIST ../../test/test_report.html del /F ../../test/test_report.html
+echo ##teamcity[blockClosed name='Runing Tests'] 
+
+exit 0
+
+:END_WITH_COMPL_ERR
+echo ##teamcity[buildStatus status='FAILURE' text='{build.status.text}. Solution building failed.'] 
+exit 0
+:END_WITH_RUN_ERR
+echo ##teamcity[buildStatus status='SUCCESS' text='{build.status.text}. Testing failed.'] 
+exit 0
diff --git a/installer/windows_x64/bundle_binary_zip.cmd b/installer/windows_x64/bundle_binary_zip.cmd
new file mode 100644
index 0000000..114341a
--- /dev/null
+++ b/installer/windows_x64/bundle_binary_zip.cmd
@@ -0,0 +1,156 @@
+REM the root dir for this scirpt is svn trunk
+set U_ROOT=%cd%
+set U_VERSION=%1
+set OUTPUT_DIR=%U_ROOT%\installer\windows_x64\ugene-%U_VERSION%
+set INSTALL_DIR=%U_ROOT%\installer\windows_x64
+set BINARY_ZIPFILE=%INSTALL_DIR%\ugene-%U_VERSION%-win-x64-r%BUILD_VCS_NUMBER_new_trunk%.zip
+set SYMBOLS_DIR_NAME=symbols
+set SYMBOLS_DIR=%U_ROOT%\installer\windows_x64\%SYMBOLS_DIR_NAME%
+set SYMBOLS_DIR_ZIPFILE=%SYMBOLS_DIR%.zip
+set DUMP_SYMBOLS_LOG=%INSTALL_DIR%\dump_symbols_log.txt
+
+IF EXIST %OUTPUT_DIR% del /F /S /Q %OUTPUT_DIR%
+IF EXIST %SYMBOLS_DIR% del /F /S /Q %SYMBOLS_DIR%
+IF EXIST %SYMBOLS_DIR% del /F /S /Q %DUMP_SYMBOLS_LOG%
+IF EXIST %SYMBOLS_DIR% del /F /S /Q %SYMBOLS_DIR_ZIPFILE%
+IF EXIST %BINARY_ZIPFILE% del /F /Q %BINARY_ZIPFILE%
+set RELEASE_DIR=src\_release
+
+REM create release dir
+mkdir %OUTPUT_DIR%
+mkdir "%OUTPUT_DIR%\plugins"
+mkdir %SYMBOLS_DIR%
+
+REM copy includes
+copy %U_ROOT%\LICENSE.txt %OUTPUT_DIR%
+copy %U_ROOT%\LICENSE.3rd_party.txt %OUTPUT_DIR%
+copy "%PATH_TO_VS_BIN%\msvcp120.dll" %OUTPUT_DIR%
+copy "%PATH_TO_VS_BIN%\msvcr120.dll" %OUTPUT_DIR%
+xcopy /E %PATH_TO_INCLUDE_LIBS%\* %OUTPUT_DIR%
+REM copy Qt libraries
+copy %PATH_TO_QT_LIBS%\Qt5Core.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Gui.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Multimedia.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5MultimediaWidgets.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Network.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5OpenGL.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Positioning.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5PrintSupport.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Qml.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Quick.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Script.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5ScriptTools.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Sensors.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Sql.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Svg.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Test.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5WebChannel.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5WebKit.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5WebKitWidgets.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Widgets.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\Qt5Xml.dll %OUTPUT_DIR%
+copy %PATH_TO_QT_LIBS%\icu* %OUTPUT_DIR%
+mkdir "%OUTPUT_DIR%\sqldrivers"
+copy %PATH_TO_QT_LIBS%\..\plugins\sqldrivers\qsqlmysql.dll %OUTPUT_DIR%\sqldrivers\
+mkdir "%OUTPUT_DIR%\imageformats"
+copy %PATH_TO_QT_LIBS%\..\plugins\imageformats\qgif.dll %OUTPUT_DIR%\imageformats\
+copy %PATH_TO_QT_LIBS%\..\plugins\imageformats\qjpeg.dll %OUTPUT_DIR%\imageformats\
+copy %PATH_TO_QT_LIBS%\..\plugins\imageformats\qsvg.dll %OUTPUT_DIR%\imageformats\
+copy %PATH_TO_QT_LIBS%\..\plugins\imageformats\qtiff.dll %OUTPUT_DIR%\imageformats\
+mkdir "%OUTPUT_DIR%\platforms"
+copy %PATH_TO_QT_LIBS%\..\plugins\platforms\qwindows.dll %OUTPUT_DIR%\platforms\
+
+REM copy external tools if exists
+xcopy /E /Y %RELEASE_DIR%\tools\* %OUTPUT_DIR%\tools\
+if DEFINED UGENE_R_DIST_PATH (
+    xcopy /E %UGENE_R_DIST_PATH% %OUTPUT_DIR%\tools\
+)
+
+REM copy executables
+call %INSTALL_DIR%\copy_executable.cmd ugeneui
+call %INSTALL_DIR%\copy_executable.cmd ugenecl
+call %INSTALL_DIR%\copy_executable.cmd ugenem
+call %INSTALL_DIR%\copy_executable.cmd plugins_checker
+echo. > %OUTPUT_DIR%\UGENE.ini
+
+REM copy translations
+copy %RELEASE_DIR%\transl_en.qm %OUTPUT_DIR%
+copy %RELEASE_DIR%\transl_ru.qm %OUTPUT_DIR%
+
+REM copy data
+xcopy /I /S %U_ROOT%\data %OUTPUT_DIR%\data
+copy %U_ROOT%\data\manuals\*.pdf %OUTPUT_DIR%\data\manuals\
+if DEFINED UGENE_CISTROME_PATH (
+    move %UGENE_CISTROME_PATH% %OUTPUT_DIR%\data\
+)
+
+REM copy libs 
+call %INSTALL_DIR%\copy_lib.cmd ugenedb
+call %INSTALL_DIR%\copy_lib.cmd humimit
+call %INSTALL_DIR%\copy_lib.cmd breakpad
+call %INSTALL_DIR%\copy_lib.cmd U2Algorithm
+call %INSTALL_DIR%\copy_lib.cmd U2Core
+call %INSTALL_DIR%\copy_lib.cmd U2Designer
+call %INSTALL_DIR%\copy_lib.cmd U2Formats
+call %INSTALL_DIR%\copy_lib.cmd U2Gui
+call %INSTALL_DIR%\copy_lib.cmd U2Lang
+call %INSTALL_DIR%\copy_lib.cmd U2Private
+call %INSTALL_DIR%\copy_lib.cmd U2Script
+call %INSTALL_DIR%\copy_lib.cmd U2Test
+call %INSTALL_DIR%\copy_lib.cmd U2View
+
+REM copy plugins
+call %INSTALL_DIR%\copy_plugin.cmd annotator
+call %INSTALL_DIR%\copy_plugin.cmd ball
+call %INSTALL_DIR%\copy_plugin.cmd biostruct3d_view
+call %INSTALL_DIR%\copy_plugin.cmd browser_support
+call %INSTALL_DIR%\copy_plugin.cmd chroma_view
+call %INSTALL_DIR%\copy_plugin.cmd circular_view
+call %INSTALL_DIR%\copy_plugin.cmd cuda_support
+call %INSTALL_DIR%\copy_plugin.cmd dna_export
+call %INSTALL_DIR%\copy_plugin.cmd dna_graphpack
+call %INSTALL_DIR%\copy_plugin.cmd dna_stat
+call %INSTALL_DIR%\copy_plugin.cmd dotplot
+call %INSTALL_DIR%\copy_plugin.cmd enzymes
+call %INSTALL_DIR%\copy_plugin.cmd external_tool_support
+call %INSTALL_DIR%\copy_plugin.cmd genome_aligner
+call %INSTALL_DIR%\copy_plugin.cmd gor4
+call %INSTALL_DIR%\copy_plugin.cmd hmm2
+call %INSTALL_DIR%\copy_plugin.cmd kalign
+call %INSTALL_DIR%\copy_plugin.cmd linkdata_support
+call %INSTALL_DIR%\copy_plugin.cmd opencl_support
+call %INSTALL_DIR%\copy_plugin.cmd orf_marker
+call %INSTALL_DIR%\copy_plugin.cmd phylip
+call %INSTALL_DIR%\copy_plugin.cmd primer3
+call %INSTALL_DIR%\copy_plugin.cmd psipred
+call %INSTALL_DIR%\copy_plugin.cmd query_designer
+call %INSTALL_DIR%\copy_plugin.cmd remote_blast
+call %INSTALL_DIR%\copy_plugin.cmd repeat_finder
+call %INSTALL_DIR%\copy_plugin.cmd sitecon
+call %INSTALL_DIR%\copy_plugin.cmd smith_waterman
+call %INSTALL_DIR%\copy_plugin.cmd umuscle
+call %INSTALL_DIR%\copy_plugin.cmd weight_matrix
+call %INSTALL_DIR%\copy_plugin.cmd workflow_designer
+call %INSTALL_DIR%\copy_plugin.cmd dbi_bam
+call %INSTALL_DIR%\copy_plugin.cmd pcr
+call %INSTALL_DIR%\copy_plugin.cmd ptools
+call %INSTALL_DIR%\copy_plugin.cmd dna_flexibility
+call %INSTALL_DIR%\copy_plugin.cmd variants
+
+
+cd %INSTALL_DIR%
+
+resort_symbols.py %SYMBOLS_DIR% >> %DUMP_SYMBOLS_LOG% 2>&1
+REM zip -r %SYMBOLS_DIR_ZIPFILE% %SYMBOLS_DIR_NAME%\*
+7z a -r %SYMBOLS_DIR_ZIPFILE% %SYMBOLS_DIR_NAME%/*
+
+if NOT DEFINED UGENE_CISTROME_PATH (
+REM zip -r %BINARY_ZIPFILE% ugene-%U_VERSION%\*
+7z a -r %BINARY_ZIPFILE% ugene-%U_VERSION%/*
+)
+
+if DEFINED UGENE_CISTROME_PATH (
+    7z a -r %BINARY_ZIPFILE% ugene-%U_VERSION%/*
+    move %OUTPUT_DIR%\data\cistrome %UGENE_CISTROME_PATH%
+)
+cd %U_ROOT%
diff --git a/installer/windows_x64/bundle_ugene.vbs b/installer/windows_x64/bundle_ugene.vbs
new file mode 100644
index 0000000..eac7f46
--- /dev/null
+++ b/installer/windows_x64/bundle_ugene.vbs
@@ -0,0 +1,30 @@
+Const ForReading = 1
+
+Set objFSO = CreateObject("Scripting.FileSystemObject")
+Set objFile = objFSO.OpenTextFile("src\\ugene_version.pri", ForReading)
+
+i = 0
+verStr = ""
+Do Until objFile.AtEndOfStream
+    strLine = objFile.ReadLine
+    If InStr(strLine, "UGENE_VERSION=") > 0 Then
+        cutPos = InStr(strLine,"=")
+        verLen = Len(strLine) - cutPos + 1
+        verStr = Mid(strLine, cutPos + 1, verLen)
+    End If
+Loop
+
+Wscript.Echo verStr
+
+Set WshShell = CreateObject("WScript.Shell")
+curDir = objFSO.GetParentFolderName(Wscript.ScriptFullName)
+Wscript.Echo curDir
+
+
+runStr = curDir & "\\bundle_binary_zip.cmd " & verStr
+Wscript.Echo runStr
+WshShell.Run runStr,1,True
+   
+objFile.Close
+
+
diff --git a/installer/windows_x64/copy_executable.cmd b/installer/windows_x64/copy_executable.cmd
new file mode 100755
index 0000000..5eaec85
--- /dev/null
+++ b/installer/windows_x64/copy_executable.cmd
@@ -0,0 +1,4 @@
+copy %RELEASE_DIR%\%1.exe %OUTPUT_DIR%
+copy %RELEASE_DIR%\%1.map %OUTPUT_DIR%
+
+dump_syms.exe %RELEASE_DIR%\%1.exe > %SYMBOLS_DIR%\%1.sym 2>>%DUMP_SYMBOLS_LOG%
diff --git a/installer/windows_x64/copy_lib.cmd b/installer/windows_x64/copy_lib.cmd
new file mode 100755
index 0000000..baba332
--- /dev/null
+++ b/installer/windows_x64/copy_lib.cmd
@@ -0,0 +1,4 @@
+copy %RELEASE_DIR%\%1.dll %OUTPUT_DIR%
+copy %RELEASE_DIR%\%1.map %OUTPUT_DIR%
+
+dump_syms.exe %RELEASE_DIR%\%1.dll > %SYMBOLS_DIR%\%1.sym 2>>%DUMP_SYMBOLS_LOG%
\ No newline at end of file
diff --git a/installer/windows_x64/copy_plugin.cmd b/installer/windows_x64/copy_plugin.cmd
new file mode 100644
index 0000000..25f7024
--- /dev/null
+++ b/installer/windows_x64/copy_plugin.cmd
@@ -0,0 +1,13 @@
+ at echo off
+
+IF NOT EXIST %RELEASE_DIR%\plugins\%1.dll echo "%RELEASE_DIR%\plugins\%1.dll" doesn't exist, skipped 
+IF NOT EXIST %RELEASE_DIR%\plugins\%1.dll exit /B 0
+
+echo Copying plugin %1...
+copy %RELEASE_DIR%\plugins\%1.dll %OUTPUT_DIR%\plugins
+copy %RELEASE_DIR%\plugins\%1.plugin %OUTPUT_DIR%\plugins
+copy %RELEASE_DIR%\plugins\%1.license %OUTPUT_DIR%\plugins
+copy %RELEASE_DIR%\plugins\%1.map %OUTPUT_DIR%\plugins
+
+dump_syms.exe %RELEASE_DIR%\plugins\%1.dll > %SYMBOLS_DIR%\%1.sym 2>>%DUMP_SYMBOLS_LOG%
+ at echo on
\ No newline at end of file
diff --git a/installer/windows_x64/images/header.bmp b/installer/windows_x64/images/header.bmp
new file mode 100644
index 0000000..68c1d2d
Binary files /dev/null and b/installer/windows_x64/images/header.bmp differ
diff --git a/installer/windows_x64/images/install.ico b/installer/windows_x64/images/install.ico
new file mode 100644
index 0000000..29db80a
Binary files /dev/null and b/installer/windows_x64/images/install.ico differ
diff --git a/installer/windows_x64/images/install2.ico b/installer/windows_x64/images/install2.ico
new file mode 100644
index 0000000..a2a2857
Binary files /dev/null and b/installer/windows_x64/images/install2.ico differ
diff --git a/installer/windows_x64/images/uninstall.ico b/installer/windows_x64/images/uninstall.ico
new file mode 100644
index 0000000..2755e87
Binary files /dev/null and b/installer/windows_x64/images/uninstall.ico differ
diff --git a/installer/windows_x64/images/welcome.bmp b/installer/windows_x64/images/welcome.bmp
new file mode 100644
index 0000000..e619d24
Binary files /dev/null and b/installer/windows_x64/images/welcome.bmp differ
diff --git a/installer/windows_x64/resort_symbols.py b/installer/windows_x64/resort_symbols.py
new file mode 100644
index 0000000..0d7d378
--- /dev/null
+++ b/installer/windows_x64/resort_symbols.py
@@ -0,0 +1,31 @@
+#!python
+
+import errno
+import os
+import sys
+
+def mkdir_p(path):
+    try:
+        os.makedirs(path)
+    except OSError as exc: # Python >2.5
+        if exc.errno == errno.EEXIST and os.path.isdir(path):
+            pass
+        else: raise
+
+symbols_dir = sys.argv[1]
+
+for root, subdirs, files in os.walk(symbols_dir):
+    for filename in files:
+        file_path = os.path.join(root, filename)
+        with open (file_path, 'rb') as f:
+            first_line = f.readline()
+            if not first_line:
+                print("Symbols file is empty %s" % filename)
+                continue
+            hash_line = first_line.split()[3];
+            module_name= first_line.split()[4];
+            #print(module_name)
+        dest_sym_dir = os.path.join(symbols_dir, module_name, hash_line)
+        #print(dest_sym_dir)
+        mkdir_p(dest_sym_dir)
+        os.rename(file_path, os.path.join(dest_sym_dir, filename))
diff --git a/installer/windows_x64/ugene.nsh b/installer/windows_x64/ugene.nsh
new file mode 100644
index 0000000..0f0ab5a
--- /dev/null
+++ b/installer/windows_x64/ugene.nsh
@@ -0,0 +1,337 @@
+# NSIS Script For Unipro UGENE
+
+################################################################
+# Modern UI
+!include "MUI2.nsh"
+!verbose 4
+
+!define CompanyName "Unipro"
+!define ProductName "UGENE"
+!define FullProductName "${CompanyName} ${ProductName}"
+!define TargetPlatform x64
+
+# Compressor
+    SetCompressor /SOLID /FINAL lzma
+    SetCompressorDictSize 64
+
+# Interface Settings
+    !define MUI_ABORTWARNING
+    !define MUI_LANGDLL_ALLLANGUAGES        
+    !define MUI_HEADERIMAGE
+    !define MUI_HEADERIMAGE_BITMAP "images\header.bmp"
+    !define MUI_SPECIALIMAGE
+    !define MUI_WELCOMEFINISHPAGE_BITMAP "images\welcome.bmp"
+    !define MUI_FINISHPAGE_RUN "$INSTDIR\ugeneui.exe"
+
+;--------------------------------
+;Language Selection Dialog Settings
+
+  ;Remember the installer language
+  !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
+  !define MUI_LANGDLL_REGISTRY_KEY "Software\${CompanyName}\${ProductName}" 
+  !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
+
+# Pages
+    !insertmacro MUI_PAGE_WELCOME
+    !insertmacro MUI_PAGE_LICENSE ../_common_data/LICENSE
+    !define MUI_PAGE_CUSTOMFUNCTION_LEAVE checkInstDir
+    !insertmacro MUI_PAGE_DIRECTORY
+    !insertmacro MUI_PAGE_INSTFILES
+    !insertmacro MUI_PAGE_FINISH
+
+    !insertmacro MUI_UNPAGE_CONFIRM
+    !insertmacro MUI_UNPAGE_INSTFILES
+
+# Languages
+    !insertmacro MUI_LANGUAGE "English"
+    !insertmacro MUI_LANGUAGE "Russian"
+
+;--------------------------------
+;Reserve Files
+  
+  ;If you are using solid compression, files that are required before
+  ;the actual installation should be stored first in the data block,
+  ;because this will make your installer start faster.
+  
+  !insertmacro MUI_RESERVEFILE_LANGDLL
+
+Function "checkInstDir"
+   CreateDirectory $INSTDIR
+   ClearErrors
+   CreateDirectory $INSTDIR
+   Iferrors 0 +3
+   MessageBox MB_ICONEXCLAMATION 'The directory "$INSTDIR" is not available for writing. Please choose another directory.'
+   Abort
+FunctionEnd
+
+!include ugene_extensions.nsh
+!include "x64.nsh"
+!define MUI_LANGDLL_WINDOWTITLE "Select Language"
+
+Function .onInit
+${IfNot} ${RunningX64}
+    MessageBox MB_OK|MB_ICONEXCLAMATION "This installer can only be run on 64-bit windows"
+    Abort
+${EndIf}
+
+    !insertmacro MUI_LANGDLL_DISPLAY
+FunctionEnd
+
+
+################################################################
+# Installer options
+    !define ReleaseBuildDir "..\..\src\_release"
+    !include ${ReleaseBuildDir}\version.nsis
+    !ifndef ProductVersion
+    !define ProductVersion "unknown"
+    !endif
+
+
+    Name    "${FullProductName}"
+    InstallDir "$PROGRAMFILES64\${FullProductName}"
+    InstallDirRegKey HKCU "Software\${CompanyName}\${ProductName}" ""
+    DirText "Please select the folder below"
+    BrandingText "${FullProductName}"
+    UninstallText "This will uninstall ${FullProductName} from your system"
+    Icon "images/install.ico"
+    UninstallIcon "images/uninstall.ico"
+    ;BGGradient 000000 400040 FFFFFF
+    SetFont "Tahoma" 9
+    CRCCheck On
+
+    !ifndef UGENE_DISTRIB_FILE_NAME
+        OutFile "ugene_${ProductVersion}_win_${TargetPlatform}.exe"
+    !else
+        OutFile "${UGENE_DISTRIB_FILE_NAME}"
+    !endif
+
+
+Function languageUGENEIni
+    CreateDirectory "$APPDATA\${CompanyName}\"
+    ClearErrors
+
+    FileOpen $4 "$APPDATA\${CompanyName}\${ProductName}.ini" a
+    FileWrite $4 "[user_apps]$\r$\n"
+    FileWrite $4 "translation_file=transl_"
+
+        StrCmp $LANGUAGE ${LANG_RUSSIAN} 0 +2
+            FileWrite $4 "ru"
+        StrCmp $LANGUAGE ${LANG_ENGLISH} 0 +2
+            FileWrite $4 "en"
+
+    FileWrite $4 "$\r$\n"
+    FileClose $4
+FunctionEnd
+
+
+################################################################
+Section "Build"
+    !include "FileFunc.nsh"
+
+SetRegView 64
+    SectionIn 1 2 RO
+    SetOutPath $INSTDIR
+    
+    # Remove old install
+    RMDir /r "$INSTDIR\plugins"
+    Delete "$INSTDIR\ugene.exe"
+
+    !insertmacro AddExecutable ugeneui
+    !insertmacro AddExecutable ugenecl
+    !insertmacro AddExecutable ugenem
+    !insertmacro AddExecutable plugins_checker
+    Rename ugenecl.exe ugene.exe
+
+    !insertmacro AddLibrary U2Algorithm
+    !insertmacro AddLibrary U2Core
+    !insertmacro AddLibrary U2Designer
+    !insertmacro AddLibrary U2Formats
+    !insertmacro AddLibrary U2Gui
+    !insertmacro AddLibrary U2Lang
+    !insertmacro AddLibrary U2Private
+    !insertmacro AddLibrary U2Script
+    !insertmacro AddLibrary U2Test
+    !insertmacro AddLibrary U2View
+    !insertmacro AddLibrary ugenedb
+    !insertmacro AddLibrary breakpad
+
+    File "${ReleaseBuildDir}\transl_en.qm"
+    File "${ReleaseBuildDir}\transl_ru.qm"
+    File "..\..\LICENSE.txt"
+    File "..\..\LICENSE.3rd_party.txt"
+    File "${PATH_TO_VS_BIN}\msvcp120.dll"
+    File "${PATH_TO_VS_BIN}\msvcr120.dll"
+    File "${PATH_TO_INCLUDE_LIBS}\*.*"
+    File "${PATH_TO_QT_LIBS}\Qt5Core.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Gui.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Multimedia.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5MultimediaWidgets.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Network.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5OpenGL.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Positioning.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5PrintSupport.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Qml.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Quick.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Script.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5ScriptTools.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Sensors.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Sql.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Svg.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Test.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5WebChannel.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5WebKit.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5WebKitWidgets.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Widgets.dll"
+    File "${PATH_TO_QT_LIBS}\Qt5Xml.dll"
+    File "${PATH_TO_QT_LIBS}\icu*"
+
+    SetOutPath $INSTDIR\sqldrivers
+    File "${PATH_TO_QT_LIBS}\..\plugins\sqldrivers\qsqlmysql.dll"
+
+    SetOutPath $INSTDIR\imageformats
+    File "${PATH_TO_QT_LIBS}\..\plugins\imageformats\qgif.dll"
+    File "${PATH_TO_QT_LIBS}\..\plugins\imageformats\qjpeg.dll"
+    File "${PATH_TO_QT_LIBS}\..\plugins\imageformats\qsvg.dll"
+    File "${PATH_TO_QT_LIBS}\..\plugins\imageformats\qtiff.dll"
+
+    SetOutPath $INSTDIR\platforms
+    File "${PATH_TO_QT_LIBS}\..\plugins\platforms\qwindows.dll"
+
+    SetOutPath $INSTDIR\data
+    File /r /x .svn "..\..\data\*.*"
+
+    !ifdef ExternalTools
+    SetOutPath $INSTDIR\tools
+    File /r /x .svn "..\..\src\_release\tools\*.*"
+    !endif
+
+    SetOutPath $INSTDIR\plugins
+    !insertmacro AddPlugin annotator
+    !insertmacro AddPlugin ball
+    !insertmacro AddPlugin biostruct3d_view
+    !insertmacro AddPlugin browser_support
+    !insertmacro AddPlugin chroma_view
+    !insertmacro AddPlugin circular_view
+    !insertmacro AddPlugin cuda_support
+    !insertmacro AddPlugin dbi_bam
+    !insertmacro AddPlugin dna_export
+    !insertmacro AddPlugin dna_flexibility
+    !insertmacro AddPlugin dna_graphpack
+    !insertmacro AddPlugin dna_stat
+    !insertmacro AddPlugin dotplot
+    !insertmacro AddPlugin enzymes
+    !insertmacro AddPlugin external_tool_support
+    !insertmacro AddPlugin genome_aligner
+    !insertmacro AddPlugin gor4
+    !insertmacro AddPlugin hmm2
+    !insertmacro AddPlugin kalign
+    !insertmacro AddPlugin linkdata_support
+    !insertmacro AddPlugin opencl_support
+    !insertmacro AddPlugin orf_marker
+    !insertmacro AddPlugin pcr
+    !insertmacro AddPlugin phylip
+    !insertmacro AddPlugin primer3
+    !insertmacro AddPlugin psipred
+    !insertmacro AddPlugin ptools
+    !insertmacro AddPlugin query_designer
+    !insertmacro AddPlugin remote_blast
+    !insertmacro AddPlugin repeat_finder
+    !insertmacro AddPlugin smith_waterman
+    !insertmacro AddPlugin sitecon
+    !insertmacro AddPlugin umuscle
+    !insertmacro AddPlugin weight_matrix
+    !insertmacro AddPlugin workflow_designer
+    !insertmacro AddPlugin variants
+
+    SetOutPath $INSTDIR
+    
+    ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
+    IntFmt $0 "0x%08X" $0
+
+    var /GLOBAL warnText #collects warnings during the installation
+    Iferrors 0 +2
+    StrCpy $warnText "Warning: not all files were copied successfully!"
+    
+    # Write the uninstall keys for Windows
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}" "DisplayName" "${FullProductName} ${PrintableVersion}"
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}" "UninstallString" "$INSTDIR\Uninst.exe"
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}" "Publisher" "Unipro"
+    WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}" "DisplayVersion" "${PrintableVersion}"
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}" "EstimatedSize" "$0"
+
+    Iferrors 0 +2
+    StrCpy $warnText "$warnText$\r$\nWarning: cannot create registry entries!"
+
+    WriteUninstaller "$INSTDIR\Uninst.exe"
+
+
+    Iferrors 0 +2
+    StrCpy $warnText "$warnText$\r$\nWarning: cannot create uninstaller!"
+
+    # Write language param in ini file
+    Call languageUGENEIni
+
+    # Remove old config
+    # Delete $APPDATA\${CompanyName}\${ProductName}.ini
+
+
+SectionEnd
+
+################################################################
+; Register extensions
+!insertmacro AssociateExtSectionGroup ''
+
+################################################################
+Section "Add Shortcuts"
+    SectionIn 1
+    SetShellVarContext all
+    RMDir /r "$SMPROGRAMS\${FullProductName}"
+    ClearErrors
+    CreateDirectory "$SMPROGRAMS\${FullProductName}"
+    CreateShortCut "$SMPROGRAMS\${FullProductName}\Launch UGENE.lnk" "$INSTDIR\ugeneui.exe" "" "$INSTDIR\ugeneui.exe" 0
+    CreateShortCut "$SMPROGRAMS\${FullProductName}\Download User Manual.lnk" "$INSTDIR\download_manual.url" "" "$INSTDIR\download_manual.url" 0
+    # make sure uninstall shortcut will be last item in Start menu
+#    nsisStartMenu::RegenerateFolder "${FullProductName}"
+    CreateShortCut "$SMPROGRAMS\${FullProductName}\Uninstall.lnk" "$INSTDIR\Uninst.exe" "" "$INSTDIR\Uninst.exe" 0
+    CreateShortCut "$DESKTOP\${FullProductName}.lnk" "$INSTDIR\ugeneui.exe" "" "$INSTDIR\ugeneui.exe" 0
+
+    Iferrors 0 +2
+    StrCpy $warnText "$warnText$\r$\nWarning: cannot create program shortcuts!"
+#Display all of collected warnings  
+    var /GLOBAL warnTextLen
+    StrLen $warnTextLen "$warnText"
+    IntCmp $warnTextLen 0 +2
+    MessageBox MB_ICONEXCLAMATION "$warnText"
+SectionEnd
+
+################################################################
+Section Uninstall
+    # Delete shortcuts
+    SetShellVarContext all
+    Delete "$DESKTOP\${FullProductName}.lnk"
+    Delete "$SMPROGRAMS\${FullProductName}\*.*"
+    RmDir /r "$SMPROGRAMS\${FullProductName}"
+
+    # Delete Uninstaller And Unistall Registry Entries
+    Delete "$INSTDIR\Uninst.exe"
+    RMDir /r "$INSTDIR"
+	SetRegView 64
+    DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${FullProductName}"
+    DeleteRegKey HKCU "Software\${CompanyName}\${ProductName}"
+SectionEnd
+
+################################################################
+; Unregister extensions
+!insertmacro AssociateExtSectionGroup 'un.'
+
+
+################################################################
+
+;--------------------------------
+;Uninstaller Functions
+
+Function un.onInit
+
+  !insertmacro MUI_UNGETLANGUAGE
+  
+FunctionEnd
diff --git a/installer/windows_x64/ugene_extensions.nsh b/installer/windows_x64/ugene_extensions.nsh
new file mode 100644
index 0000000..619c87d
--- /dev/null
+++ b/installer/windows_x64/ugene_extensions.nsh
@@ -0,0 +1,158 @@
+# Associate file extensions
+!macro AssociateExtSection un Ext Str IcoNum
+Section "${un}${Ext}"
+  SectionIn 1
+  Push $1
+  Push $2
+  Push $3
+  Push "${Ext}"
+  Push "${Str}"
+  Push "${IcoNum}"
+  Call "${un}AssociateExtSectionGroup"
+  Pop $3
+  Pop $2
+  Pop $1
+SectionEnd
+!macroend
+
+!macro AssociateExtSectionGroup un
+SectionGroup "${un}Associate file extensions"
+
+
+;Project file
+  !insertmacro AssociateExtSection "${un}" ".uprj"   "Unipro UGENE project file"    "0"
+
+;ABIF format
+  !insertmacro AssociateExtSection "${un}" ".ab1"    "ABIF file"                    "1"
+  !insertmacro AssociateExtSection "${un}" ".abi"    "ABIF file"                    "1"
+  !insertmacro AssociateExtSection "${un}" ".abif"   "ABIF file"                    "1"
+
+;CLUSTAL format
+  !insertmacro AssociateExtSection "${un}" ".aln"    "Clustal alignment file"       "1"
+
+;EMBL format
+  !insertmacro AssociateExtSection "${un}" ".em"     "EMBL file"                    "1"
+  !insertmacro AssociateExtSection "${un}" ".emb"    "EMBL file"                    "1"
+  !insertmacro AssociateExtSection "${un}" ".embl"   "EMBL file"                    "1"
+;Swiss-Prot format
+  !insertmacro AssociateExtSection "${un}" ".sw"     "Swiss-Prot file"              "1"
+
+;FASTA format
+  !insertmacro AssociateExtSection "${un}" ".fa"     "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".mpfa"   "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".fna"    "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".fsa"    "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".fas"    "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".fasta"  "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".seq"    "FASTA sequence file"          "1"
+  !insertmacro AssociateExtSection "${un}" ".seqs"   "FASTA sequence file"          "1"
+
+;FASTQ format
+  !insertmacro AssociateExtSection "${un}" ".fastq"   "FASTQ file"                  "1"
+
+;Genbank format
+  !insertmacro AssociateExtSection "${un}" ".gb"      "Genbank plain text file"     "1"
+  !insertmacro AssociateExtSection "${un}" ".gbk"     "Genbank plain text file"     "1"
+  !insertmacro AssociateExtSection "${un}" ".gen"     "Genbank plain text file"     "1"
+  !insertmacro AssociateExtSection "${un}" ".genbank" "Genbank plain text file"     "1"
+
+;GFF format
+  !insertmacro AssociateExtSection "${un}" ".gff"     "GFF format"                  "1"
+
+;MSF format
+  !insertmacro AssociateExtSection "${un}" ".msf"     "MSF multiple sequence file"  "1"
+
+;NEWICK format
+  !insertmacro AssociateExtSection "${un}" ".newick"  "NEWICK tree file"            "1"
+
+;PDB format
+  !insertmacro AssociateExtSection "${un}" ".pdb"     "Protein Data Bank file"      "1"
+
+;SAM/BAM format
+  !insertmacro AssociateExtSection "${un}" ".sam"   "SAM genome assembly"           "1"
+  !insertmacro AssociateExtSection "${un}" ".bam"   "BAM genome assembly"           "1"
+
+;SCF format -> DISABLED: overrides show desktop icon!!
+;  !insertmacro AssociateExtSection "${un}" ".scf"    "SCF file"                    "1"
+
+;Short Reads FASTA format
+  !insertmacro AssociateExtSection "${un}" ".srfa"   "FASTA short reads file"       "1"
+  !insertmacro AssociateExtSection "${un}" ".srfasta" "FASTA short reads file"      "1"
+
+;STOCKHOLM format
+  !insertmacro AssociateExtSection "${un}" ".sto"    "Stockholm alignment file"     "1"
+
+;UGENE Database format
+  !insertmacro AssociateExtSection "${un}" ".ugenedb" "UGENE Database"              "1"
+
+;UGENE Query format
+  !insertmacro AssociateExtSection "${un}" ".uql"    "UGENE Query Language"         "1"
+
+;UGENE Workflow format
+  !insertmacro AssociateExtSection "${un}" ".uwl"    "UGENE Workflow Language"         "1"
+
+SectionGroupEnd
+!MACROEND
+
+Function AssociateExtSectionGroup ; (ext name)
+  Pop $4 ; icon num in exe
+  Pop $3 ; name
+  Pop $2 ; ext
+  ReadRegStr $1 HKCR $2 ""
+  StrCmp $1 "" NoBackup
+  StrCmp $1 $3 NoBackup
+  WriteRegStr HKCR $2 "backup_val" $1
+NoBackup:
+  WriteRegStr HKCR $2 "" $3
+  ReadRegStr $0 HKCR $3 ""
+  StrCmp $0 "" 0 Skip
+  WriteRegStr HKCR $3 "" $3
+  WriteRegStr HKCR "$3\shell" "" "open"
+  WriteRegStr HKCR "$3\DefaultIcon" "" "$INSTDIR\ugeneui.exe,$4"
+Skip:
+  WriteRegStr HKCR "$3\shell\open\command" "" \
+    '$INSTDIR\ugeneui.exe "%1"'
+FunctionEnd
+
+Function un.AssociateExtSectionGroup ; ext name
+  Pop $4 ; icon num in exe
+  Pop $3 ; name
+  Pop $2 ; ext
+  ReadRegStr $1 HKCR $2 ""
+  StrCmp $1 $3 0 NoOwn ; only do this if we own it
+  ReadRegStr $1 HKCR $2 "backup_val"
+  StrCmp $1 "" 0 Restore ; if backup="" then delete the whole k
+  DeleteRegKey HKCR $2
+  DeleteRegKey HKCR $3 ;Delete key with association settings
+  Goto NoOwn
+Restore:
+  WriteRegStr HKCR $2 "" $1
+  DeleteRegValue HKCR $2 "backup_val"
+  DeleteRegKey HKCR $3 ;Delete key with association settings
+NoOwn:
+FunctionEnd
+
+
+!macro DumpSymbols binary filename
+    !system '"dump_syms.exe" "${binary}" > "${SYMBOLS_DIR}/${filename}.sym" 2>> ${DUMP_SYMBOLS_LOG}'
+!macroend
+
+!macro AddExecutable executable
+    File "${ReleaseBuildDir}\${executable}.exe"
+    File "${ReleaseBuildDir}\${executable}.map"
+    !insertmacro DumpSymbols "${ReleaseBuildDir}\${executable}.exe" ${executable}
+!macroend
+
+!macro AddLibrary library
+    File "${ReleaseBuildDir}\${library}.dll"
+    File "${ReleaseBuildDir}\${library}.map"
+    !insertmacro DumpSymbols "${ReleaseBuildDir}\${library}.dll" ${library}
+!macroend
+
+!macro AddPlugin plugin
+    File "${ReleaseBuildDir}\plugins\${plugin}.dll"
+    File "${ReleaseBuildDir}\plugins\${plugin}.plugin"
+    File "${ReleaseBuildDir}\plugins\${plugin}.license"
+    File "${ReleaseBuildDir}\plugins\${plugin}.map"
+    !insertmacro DumpSymbols "${ReleaseBuildDir}\plugins\${plugin}.dll" ${plugin}
+!macroend
diff --git a/src/Plugin.cmake b/src/Plugin.cmake
new file mode 100644
index 0000000..9aca573
--- /dev/null
+++ b/src/Plugin.cmake
@@ -0,0 +1,34 @@
+project(${UGENE_PLUGIN_NAME})
+
+cmake_minimum_required(VERSION 3.4)
+
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTORCC ON)
+set(CMAKE_AUTOMOC ON)
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+find_package(Qt5 REQUIRED Core Gui Widgets Xml Network PrintSupport Test ScriptTools)
+
+include_directories(src)
+include_directories(../../include)
+
+add_definitions(
+        -DPLUGIN_ID="${UGENE_PLUGIN_NAME}"
+)
+
+if (NOT DEFINED SRCS)
+    file(GLOB_RECURSE SRCS src/*.cpp src/*.c src/*.h)
+endif ()
+
+if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${UGENE_PLUGIN_NAME}.qrc)
+    qt5_add_resources(RCC_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/${UGENE_PLUGIN_NAME}.qrc)
+endif ()
+
+add_library(${UGENE_PLUGIN_NAME} SHARED ${SRCS} ${RCC_SRCS})
+
+set(UGENE_PLUGIN_LIBS
+        Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Xml Qt5::Network Qt5::PrintSupport Qt5::Test Qt5::ScriptTools
+        U2Core U2Algorithm U2Formats U2Gui U2View U2Lang U2Designer)
+
+target_link_libraries(${UGENE_PLUGIN_NAME} ${UGENE_PLUGIN_LIBS})
+
diff --git a/src/corelibs/U2Algorithm/U2Algorithm.pri b/src/corelibs/U2Algorithm/U2Algorithm.pri
index 46248dd..e93630f 100644
--- a/src/corelibs/U2Algorithm/U2Algorithm.pri
+++ b/src/corelibs/U2Algorithm/U2Algorithm.pri
@@ -3,7 +3,7 @@
 MODULE_ID=U2Algorithm
 include( ../../ugene_lib_common.pri )
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+QT += widgets
 
 use_opencl(){
     DEFINES += OPENCL_SUPPORT
diff --git a/src/corelibs/U2Algorithm/U2Algorithm.pro b/src/corelibs/U2Algorithm/U2Algorithm.pro
index 9e5df46..1c48910 100644
--- a/src/corelibs/U2Algorithm/U2Algorithm.pro
+++ b/src/corelibs/U2Algorithm/U2Algorithm.pro
@@ -67,6 +67,7 @@ HEADERS += src/misc/BinaryFindOpenCL.h \
            src/util_assembly_consensus/AssemblyConsensusUtils.h \
            src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.h \
            src/util_msa_consensus/BuiltInConsensusAlgorithms.h \
+           src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.h \
            src/util_msa_consensus/MSAConsensusAlgorithm.h \
            src/util_msa_consensus/MSAConsensusAlgorithmClustal.h \
            src/util_msa_consensus/MSAConsensusAlgorithmDefault.h \
@@ -81,7 +82,7 @@ HEADERS += src/misc/BinaryFindOpenCL.h \
            src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.h \
            src/util_msa_distance/MSADistanceAlgorithmRegistry.h \
            src/util_msaedit/CreateSubalignmentTask.h \
-           src/util_msaedit/MAlignmentUtilTasks.h \
+           src/util_msaedit/MsaUtilTasks.h \
            src/util_msaedit/color_schemes/ColorSchemeUtils.h \
            src/util_msaedit/color_schemes/MsaColorScheme.h \
            src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h \
@@ -166,6 +167,7 @@ SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/util_assembly_consensus/AssemblyConsensusUtils.cpp \
            src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.cpp \
            src/util_msa_consensus/BuiltInConsensusAlgorithms.cpp \
+           src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp \
            src/util_msa_consensus/MSAConsensusAlgorithm.cpp \
            src/util_msa_consensus/MSAConsensusAlgorithmClustal.cpp \
            src/util_msa_consensus/MSAConsensusAlgorithmDefault.cpp \
@@ -180,7 +182,7 @@ SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp \
            src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp \
            src/util_msaedit/CreateSubalignmentTask.cpp \
-           src/util_msaedit/MAlignmentUtilTasks.cpp \
+           src/util_msaedit/MsaUtilTasks.cpp \
            src/util_msaedit/color_schemes/ColorSchemeUtils.cpp \
            src/util_msaedit/color_schemes/MsaColorScheme.cpp \
            src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp \
@@ -210,13 +212,6 @@ SOURCES += src/misc/BinaryFindOpenCL.cpp \
            src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp \
            src/util_gpu/opencl/OpenCLHelper.cpp \
            src/util_gpu/opencl/OpenCLUtils.cpp
+
 RESOURCES += U2Algorithm.qrc
 TRANSLATIONS += transl/english.ts transl/russian.ts
-
-
-
-
-
-
-
-
diff --git a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
index bf6e79c..ea5635a 100644
--- a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,9 +29,9 @@
 
 #include <U2Algorithm/OpenCLUtils.h>
 
-#include <QtCore/QString>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QString>
+#include <QFile>
+#include <QTextStream>
 
 #include <ctime>
 #include <math.h>
diff --git a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.h b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.h
index 9204afc..7a10631 100644
--- a/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.h
+++ b/src/corelibs/U2Algorithm/src/misc/BinaryFindOpenCL.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/BitsTable.cpp b/src/corelibs/U2Algorithm/src/misc/BitsTable.cpp
index cedfebc..ad6d68c 100644
--- a/src/corelibs/U2Algorithm/src/misc/BitsTable.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/BitsTable.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/BitsTable.h b/src/corelibs/U2Algorithm/src/misc/BitsTable.h
index 6e4c11f..076960a 100644
--- a/src/corelibs/U2Algorithm/src/misc/BitsTable.h
+++ b/src/corelibs/U2Algorithm/src/misc/BitsTable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/CDSearchTaskFactory.h b/src/corelibs/U2Algorithm/src/misc/CDSearchTaskFactory.h
index a5c299c..b257441 100644
--- a/src/corelibs/U2Algorithm/src/misc/CDSearchTaskFactory.h
+++ b/src/corelibs/U2Algorithm/src/misc/CDSearchTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.cpp b/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.cpp
index 00a3a34..f9a114d 100644
--- a/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,13 +31,8 @@
 #include <U2Gui/OpenViewTask.h>
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMainWindow>
+#include <QMessageBox>
 
 namespace U2 {
 
@@ -75,7 +70,7 @@ QList<Task*> DnaAssemblyMultiTask::onSubTaskFinished( Task* subTask ) {
     }
 
     if ( subTask == assemblyToRefTask && settings.openView ) {
-        if (assemblyToRefTask->isHaveResult()) {
+        if (assemblyToRefTask->hasResult()) {
             Task* openTask = AppContext::getProjectLoader()->openWithProjectTask(settings.resultFileName);
             if (openTask != NULL) {
                 subTasks << openTask;
@@ -102,7 +97,7 @@ QString DnaAssemblyMultiTask::generateReport() const {
     if (justBuildIndex) {
         res = settings.algName + QString(" index-file for %1 was built successfully")
         .arg(settings.refSeqUrl.fileName());
-    } else if (assemblyToRefTask->isHaveResult()) {
+    } else if (assemblyToRefTask->hasResult()) {
         res = QString("Alignment to reference %1 was finished successfully")
         .arg(settings.refSeqUrl.fileName());
     } else {
diff --git a/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.h b/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.h
index c681840..bb5e858 100644
--- a/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.h
+++ b/src/corelibs/U2Algorithm/src/misc/DnaAssemblyMultiTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/DynTable.h b/src/corelibs/U2Algorithm/src/misc/DynTable.h
index 6267d09..0f3a3f8 100644
--- a/src/corelibs/U2Algorithm/src/misc/DynTable.h
+++ b/src/corelibs/U2Algorithm/src/misc/DynTable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
index b72daa5..df26f24 100644
--- a/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
+++ b/src/corelibs/U2Algorithm/src/misc/EnzymeModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_ENZYME_MODEL_H_
 #define _U2_ENZYME_MODEL_H_
 
-#include <QtCore/QSharedData>
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QString>
-#include <QtCore/QByteArray>
+#include <QSharedData>
+#include <QSharedDataPointer>
+#include <QString>
+#include <QByteArray>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
index e8a36ff..10b9aa0 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QRegExp>
+#include <QRegExp>
 
 #include <U2Core/DNATranslation.h>
 #include <U2Core/DNAAlphabet.h>
@@ -29,6 +29,7 @@
 
 #include <U2Algorithm/DynTable.h>
 #include <U2Algorithm/RollingArray.h>
+#include <U2Core/U2AlphabetUtils.h>
 
 #include "FindAlgorithm.h"
 
@@ -112,10 +113,10 @@ static bool isComplement(FindAlgorithmStrand s) {
 }
 
 FindAlgorithmSettings::FindAlgorithmSettings(const QByteArray &pattern, FindAlgorithmStrand strand,
-    DNATranslation *complementTT, DNATranslation *proteinTT, const U2Region &searchRegion,
+    DNATranslation *complementTT, DNATranslation *proteinTT, const DNAAlphabet* sequenceAlphabet, const U2Region &searchRegion,
     int maxErr, FindAlgorithmPatternSettings _patternSettings, bool ambBases, int _maxRegExpResult,
     int _maxResult2Find )
-    : pattern( pattern ), strand( strand ), complementTT( complementTT ), proteinTT( proteinTT ),
+    : pattern( pattern ), strand( strand ), complementTT( complementTT ), proteinTT( proteinTT ), sequenceAlphabet(sequenceAlphabet),
     searchRegion( searchRegion ), maxErr( maxErr ), patternSettings( _patternSettings ),
     useAmbiguousBases( ambBases ), maxRegExpResult( _maxRegExpResult ),
     maxResult2Find( _maxResult2Find )
@@ -794,6 +795,7 @@ void FindAlgorithm::find(
                          bool useAmbiguousBases,
                          const char* seq,
                          int seqLen,
+                         const DNAAlphabet* sequenceAlphabet,
                          bool searchIsCircular,
                          const U2Region& range,
                          const char* pattern,
@@ -829,6 +831,13 @@ void FindAlgorithm::find(
 
     bool insDel = (patternSettings == FindAlgorithmPatternSettings_InsDel);
 
+    if (patternSettings == FindAlgorithmPatternSettings_Exact && sequenceAlphabet != NULL && aminoTT == NULL) {
+        // exact search -> do not run any search if pattern has illegal symbols
+        if (!U2AlphabetUtils::matches(sequenceAlphabet, pattern, patternLen)) {
+            return;
+        }
+    }
+
     if (aminoTT != NULL) {
         findInAmino(rl, aminoTT, complTT, strand, insDel, seq, range, searchIsCircular, pattern, patternLen, maxErr,
             stopFlag, percentsCompleted );
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
index d95615b..8960bb9 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,10 +26,12 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QList>
+#include <QList>
 
 namespace U2 {
 
+class DNAAlphabet;
+
 class U2ALGORITHM_EXPORT FindAlgorithmResult {
 public:
     static const int NOT_ENOUGH_MEMORY_ERROR;
@@ -90,6 +92,7 @@ public:
         FindAlgorithmStrand strand = FindAlgorithmStrand_Direct,
         DNATranslation* complementTT = NULL,
         DNATranslation* proteinTT = NULL,
+        const DNAAlphabet* sequenceAlphabet = NULL,
         const U2Region& searchRegion = U2Region(),
         int maxErr = 0,
         FindAlgorithmPatternSettings _patternSettings = FindAlgorithmPatternSettings_Subst,
@@ -101,6 +104,8 @@ public:
     FindAlgorithmStrand                 strand;
     DNATranslation*                     complementTT;
     DNATranslation*                     proteinTT;
+    /** Alphabet of the sequence. May be NULL if unknown */
+    const DNAAlphabet*                  sequenceAlphabet;
     U2Region                            searchRegion;
     int                                 maxErr;
     FindAlgorithmPatternSettings        patternSettings;
@@ -124,6 +129,7 @@ public:
         bool supportAmbigiousBases,
         const char* sequence,
         int seqLen,
+        const DNAAlphabet* sequenceAlphabet, // Sequence alphabet. May be NULL if not known.
         bool searchIsCircular,
         const U2Region& range,
         const char* pattern,
@@ -149,6 +155,7 @@ public:
                 config.useAmbiguousBases,
                 sequence,
                 seqLen,
+                config.sequenceAlphabet,
                 searchIsCircular,
                 config.searchRegion,
                 config.pattern.constData(),
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.cpp b/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.cpp
index eab458e..c392358 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Core/TextUtils.h>
 #include <U2Core/DNATranslation.h>
@@ -64,6 +64,7 @@ void FindAlgorithmTask::run() {
         config.useAmbiguousBases,
         config.sequence.constData(),
         config.sequence.size(),
+        config.sequenceAlphabet,
         config.searchIsCircular,
         config.searchRegion,
         config.pattern.constData(),
diff --git a/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.h b/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.h
index 901c3d2..b694f31 100644
--- a/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.h
+++ b/src/corelibs/U2Algorithm/src/misc/FindAlgorithmTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 #include "FindAlgorithm.h"
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
@@ -36,9 +36,13 @@ class DNATranslation;
 class U2ALGORITHM_EXPORT FindAlgorithmTaskSettings : public FindAlgorithmSettings {
 public:
     FindAlgorithmTaskSettings()
-        : searchIsCircular(false) {}
-    FindAlgorithmTaskSettings(const FindAlgorithmSettings& f) : FindAlgorithmSettings(f), searchIsCircular(false),countTask(true) {}
+        : sequenceAlphabet(NULL), searchIsCircular(false) {}
+    FindAlgorithmTaskSettings(const FindAlgorithmSettings& f)
+            : FindAlgorithmSettings(f), sequenceAlphabet(f.sequenceAlphabet), searchIsCircular(false),countTask(true) {}
+
     QByteArray  sequence;
+    /** Alphabet of the sequence. May be NULL if unknown */
+    const DNAAlphabet* sequenceAlphabet;
     bool        searchIsCircular;
     QString     name;
     bool        countTask;
diff --git a/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.cpp b/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.cpp
index bf94e61..610ff4e 100644
--- a/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,13 +31,8 @@
 #include <U2Gui/OpenViewTask.h>
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMainWindow>
+#include <QMessageBox>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.h b/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.h
index 41aa256..ea97492 100644
--- a/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.h
+++ b/src/corelibs/U2Algorithm/src/misc/GenomeAssemblyMultiTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/RepeatFinderSettings.h b/src/corelibs/U2Algorithm/src/misc/RepeatFinderSettings.h
index a60c14a..9cda1cf 100644
--- a/src/corelibs/U2Algorithm/src/misc/RepeatFinderSettings.h
+++ b/src/corelibs/U2Algorithm/src/misc/RepeatFinderSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/RepeatFinderTaskFactory.h b/src/corelibs/U2Algorithm/src/misc/RepeatFinderTaskFactory.h
index 0eaa4d2..446f482 100644
--- a/src/corelibs/U2Algorithm/src/misc/RepeatFinderTaskFactory.h
+++ b/src/corelibs/U2Algorithm/src/misc/RepeatFinderTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/RollingArray.h b/src/corelibs/U2Algorithm/src/misc/RollingArray.h
index d266107..699d769 100644
--- a/src/corelibs/U2Algorithm/src/misc/RollingArray.h
+++ b/src/corelibs/U2Algorithm/src/misc/RollingArray.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/RollingMatrix.h b/src/corelibs/U2Algorithm/src/misc/RollingMatrix.h
index 7131645..64437fb 100644
--- a/src/corelibs/U2Algorithm/src/misc/RollingMatrix.h
+++ b/src/corelibs/U2Algorithm/src/misc/RollingMatrix.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.cpp b/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.cpp
index d18f444..9738e99 100644
--- a/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.cpp
+++ b/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.h b/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.h
index 9cf92c2..110c034 100644
--- a/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.h
+++ b/src/corelibs/U2Algorithm/src/misc/SequenceContentFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/misc/SyncSort.h b/src/corelibs/U2Algorithm/src/misc/SyncSort.h
index acd847a..7c58e2e 100644
--- a/src/corelibs/U2Algorithm/src/misc/SyncSort.h
+++ b/src/corelibs/U2Algorithm/src/misc/SyncSort.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.cpp b/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.cpp
index 4c1771b..f2da4a7 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.cpp
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtAlgorithms>
 #include "GeomUtils.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.h b/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.h
index 0d64a98..1264804 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.h
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/GeomUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,9 @@
 #ifndef _U2_GEOM_UTILS_H_
 #define _U2_GEOM_UTILS_H_
 
-#include <QtCore/QVector>
+#include <QScopedPointer>
+#include <QVector>
+
 #include <U2Core/Vector3D.h>
 
 namespace U2 {
@@ -31,7 +33,6 @@ const float PI = 3.14159265f;
 const float Rad2Deg = 57.2957795f;
 const float Deg2Rad = 0.017453293f;
 
-
 struct U2ALGORITHM_EXPORT Face {
     Face() {}
     Vector3D v[3];
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.cpp b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.cpp
index 8048e0e..e416882 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.cpp
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.h b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.h
index c082606..1b553b9 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.h
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurface.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_BIOSTRUCT3D_MOLECULAR_SURFACE_H_
 #define _U2_BIOSTRUCT3D_MOLECULAR_SURFACE_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QVector>
-#include <QtCore/QString>
+#include <QObject>
+#include <QVector>
+#include <QString>
 #include <limits>
 
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.cpp b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.cpp
index f7054db..f7d00b5 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.h b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.h
index f6138e4..fd74aa4 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.h
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/MolecularSurfaceFactoryRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.cpp b/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.cpp
index d22adce..80d7a33 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.cpp
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.h b/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.h
index 7c7b56a..2a6d619 100644
--- a/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.h
+++ b/src/corelibs/U2Algorithm/src/molecular_geometry/VanDerWaalsSurface.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.cpp b/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.cpp
index cc3e5ec..4ddf957 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.cpp
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.h b/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.h
index 1addf5c..ae08996 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.h
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/AbstractAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,9 +28,9 @@
 #include <U2Core/GUrl.h>
 #include <U2Core/U2Alphabet.h>
 
-#include <QtCore/QByteArray>
-#include <QtCore/QString>
-#include <QtCore/QVariantMap>
+#include <QByteArray>
+#include <QString>
+#include <QVariantMap>
 
 #include <U2Core/DNASequence.h>
 
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.cpp b/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.cpp
index c867625..16d64a4 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.cpp
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.h b/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.h
index 74b7f5d..b6f3162 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.h
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/AlignSequencesToAlignmentTaskSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.cpp b/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.cpp
index 23018a2..f75b741 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.cpp
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.h b/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.h
index 911af63..147e473 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.h
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/BaseAlignmentAlgorithmIds.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
index da3882f..4807f11 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,18 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
+
 #include <U2Core/Counter.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MsaDbiUtils.h>
 #include <U2Core/MSAUtils.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
 #include "SimpleAddingToAlignment.h"
-#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
 
 namespace U2 {
 
@@ -36,18 +39,19 @@ namespace U2 {
 /************************************************************************/
 SimpleAddToAlignmentTask::SimpleAddToAlignmentTask(const AlignSequencesToAlignmentTaskSettings& settings)
     : AbstractAlignmentTask("Simple add to alignment task", TaskFlags_NR_FOSCOE), settings(settings) {
-        GCOUNTER(cvar, tvar, "SimpleAddToAlignmentTask" );
+    GCOUNTER(cvar, tvar, "SimpleAddToAlignmentTask" );
 
-        SAFE_POINT_EXT(settings.isValid(), setError("Incorrect settings were passed into SimpleAddToAlignmentTask"),);
+    SAFE_POINT_EXT(settings.isValid(), setError("Incorrect settings were passed into SimpleAddToAlignmentTask"),);
 
-        MAlignmentExporter alnExporter;
-        inputMsa = alnExporter.getAlignment(settings.msaRef.dbiRef, settings.msaRef.entityId, stateInfo);
+    MultipleSequenceAlignmentExporter alnExporter;
+    inputMsa = alnExporter.getAlignment(settings.msaRef.dbiRef, settings.msaRef.entityId, stateInfo);
 }
 
-void SimpleAddToAlignmentTask::prepare()
-{
+void SimpleAddToAlignmentTask::prepare() {
     algoLog.info(tr("Align sequences to an existing alignment by UGENE started"));
 
+    MSAUtils::removeColumnsWithGaps(inputMsa, inputMsa->getNumRows());
+
     QListIterator<QString> namesIterator(settings.addedSequencesNames);
     foreach(const U2EntityRef& sequence, settings.addedSequencesRefs) {
         if(hasError() || isCanceled()) {
@@ -70,12 +74,20 @@ Task::ReportResult SimpleAddToAlignmentTask::report() {
     U2UseCommonUserModStep modStep(settings.msaRef, stateInfo);
     CHECK_OP(stateInfo, ReportResult_Finished);
     U2MsaDbi *dbi = modStep.getDbi()->getMsaDbi();
-    int posInMsa = inputMsa.getNumRows();
+    int posInMsa = inputMsa->getNumRows();
 
 
     dbi->updateMsaAlphabet(settings.msaRef.entityId, settings.alphabet, stateInfo);
     CHECK_OP(stateInfo, ReportResult_Finished);
     QListIterator<QString> namesIterator(settings.addedSequencesNames);
+
+    const QList<qint64> rowsIds = inputMsa->getRowsIds();
+    const U2MsaListGapModel msaGapModel = inputMsa->getGapModel();
+    for (int i = 0; i < inputMsa->getNumRows(); i++) {
+        MaDbiUtils::updateRowGapModel(settings.msaRef, rowsIds[i], msaGapModel[i], stateInfo);
+        CHECK_OP(stateInfo, ReportResult_Finished);
+    }
+
     foreach(const U2EntityRef& sequence, settings.addedSequencesRefs) {
         QString seqName = namesIterator.peekNext();
         U2SequenceObject seqObject(seqName, sequence);
@@ -93,6 +105,9 @@ Task::ReportResult SimpleAddToAlignmentTask::report() {
         namesIterator.next();
     }
 
+    MsaDbiUtils::trim(settings.msaRef, stateInfo);
+    CHECK_OP(stateInfo, ReportResult_Finished);
+
     return ReportResult_Finished;
 }
 
@@ -101,7 +116,7 @@ Task::ReportResult SimpleAddToAlignmentTask::report() {
 /* BestPositionFindTask */
 /************************************************************************/
 
-BestPositionFindTask::BestPositionFindTask(const MAlignment& alignment, const U2EntityRef& sequenceRef, const QString& sequenceId, int referenceRowId)
+BestPositionFindTask::BestPositionFindTask(const MultipleSequenceAlignment& alignment, const U2EntityRef& sequenceRef, const QString& sequenceId, int referenceRowId)
 : Task(tr("Best position find task"), TaskFlag_None), inputMsa(alignment), sequenceRef(sequenceRef), sequenceId(sequenceId), bestPosition(0), referenceRowId(referenceRowId) {
 
 }
@@ -113,36 +128,36 @@ void BestPositionFindTask::run() {
     if(sequence.isEmpty()) {
         return;
     }
-    if(!inputMsa.getAlphabet()->isCaseSensitive()) {
+    if(!inputMsa->getAlphabet()->isCaseSensitive()) {
         sequence = sequence.toUpper();
     }
-    const int aliLen = inputMsa.getLength();
-    const int nSeq = inputMsa.getNumRows();
+    const int aliLen = inputMsa->getLength();
+    const int nSeq = inputMsa->getNumRows();
 
     int similarity = 0;
 
     if(referenceRowId >= 0) {
-        const MAlignmentRow &row = inputMsa.getRow(referenceRowId);
+        const MultipleSequenceAlignmentRow row = inputMsa->getMsaRow(referenceRowId);
         int iterationsNum = aliLen - sequence.length() + 1;
         for (int p = 0; p < iterationsNum; p++ ) {
             stateInfo.setProgress(100 * p / iterationsNum);
-            char c = row.charAt(p);
+            char c = row->charAt(p);
             int selLength = 0;
             int patternSimilarity = MSAUtils::getPatternSimilarityIgnoreGaps(row, p, sequence, selLength);
-            if (MAlignment_GapChar != c && patternSimilarity > similarity) {
+            if (U2Msa::GAP_CHAR != c && patternSimilarity > similarity) {
                 similarity = patternSimilarity;
                 bestPosition = p;
             }
         }
     } else {
         int processedRows = 0;
-        foreach(const MAlignmentRow &row, inputMsa.getRows()) {
+        foreach(const MultipleSequenceAlignmentRow &row, inputMsa->getMsaRows()) {
             stateInfo.setProgress(100 * processedRows / nSeq);
             for (int p = 0; p < ( aliLen - sequence.length() + 1 ); p++ ) {
-                char c = row.charAt(p);
+                char c = row->charAt(p);
                 int selLength = 0;
                 int patternSimilarity = MSAUtils::getPatternSimilarityIgnoreGaps(row, p, sequence, selLength);
-                if (MAlignment_GapChar != c && patternSimilarity > similarity) {
+                if (U2Msa::GAP_CHAR != c && patternSimilarity > similarity) {
                     similarity = patternSimilarity;
                     bestPosition = p;
                 }
diff --git a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.h b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.h
index 47a8642..247f17c 100644
--- a/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.h
+++ b/src/corelibs/U2Algorithm/src/msa_alignment/SimpleAddingToAlignment.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_SIMPLE_ADDING_TO_ALIGNMENT_H_
 #define _U2_SIMPLE_ADDING_TO_ALIGNMENT_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Algorithm/AlignSequencesToAlignmentTaskSettings.h>
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
@@ -41,19 +41,19 @@ private:
     AlignSequencesToAlignmentTaskSettings settings;
     QMap<QString, int>            sequencePositions;
 
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
 };
 
 class BestPositionFindTask : public Task{
     Q_OBJECT
 public:
-    BestPositionFindTask(const MAlignment& alignment, const U2EntityRef& sequenceRef, const QString& sequenceId, int referenceRowId);
+    BestPositionFindTask(const MultipleSequenceAlignment& alignment, const U2EntityRef& sequenceRef, const QString& sequenceId, int referenceRowId);
     void run();
 
     int getPosition() const;
     const QString& getSequenceId() const;
 private:
-    const MAlignment& inputMsa;
+    const MultipleSequenceAlignment& inputMsa;
     U2EntityRef sequenceRef;
     QString sequenceId;
     int bestPosition;
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.cpp b/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.cpp
index 2e218fe..425c71d 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.cpp
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -77,7 +77,7 @@ void NWAligner::setSeqs(const QByteArray &value1, const QByteArray &value2) {
     reassignSMatrixByAlphabet(value1 + value2);
 }
 
-MAlignment NWAligner::align() {
+MultipleSequenceAlignment NWAligner::align() {
     GTIMER(cvar, tvar, "NWAligner::align");
     float gapPenalty = -5;
 
@@ -103,11 +103,11 @@ MAlignment NWAligner::align() {
             i--; j--;
         } else if (score == scoreLeft + gapPenalty) {
             aligned1.prepend(seq1[i-1]);
-            aligned2.prepend(MAlignment_GapChar);
+            aligned2.prepend(U2Msa::GAP_CHAR);
             i--;
         } else {
             assert(score == scoreUp + gapPenalty);
-            aligned1.prepend(MAlignment_GapChar);
+            aligned1.prepend(U2Msa::GAP_CHAR);
             aligned2.prepend(seq2[j-1]);
             j--;
         }
@@ -115,23 +115,19 @@ MAlignment NWAligner::align() {
 
     while (i>0) {
         aligned1.prepend(seq1[i-1]);
-        aligned2.prepend(MAlignment_GapChar);
+        aligned2.prepend(U2Msa::GAP_CHAR);
         i--;
     }
 
     while (j>0) {
-        aligned1.prepend(MAlignment_GapChar);
+        aligned1.prepend(U2Msa::GAP_CHAR);
         aligned2.prepend(seq2[j-1]);
         j--;
     }
 
-    MAlignment result(MA_OBJECT_NAME, sMatrix.getAlphabet());
-    U2OpStatus2Log os;
-    result.addRow("seq1", aligned1, os);
-    CHECK_OP(os, MAlignment());
-
-    result.addRow("seq2", aligned2, os);
-    CHECK_OP(os, MAlignment());
+    MultipleSequenceAlignment result(MA_OBJECT_NAME, sMatrix.getAlphabet());
+    result->addRow("seq1", aligned1);
+    result->addRow("seq2", aligned2);
 
     return result;
 }
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.h b/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.h
index b3fc963..f791c13 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.h
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/NWAligner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@ public:
     virtual void setSeq2(const QByteArray &value);
     virtual void setSeqs(const QByteArray &value1, const QByteArray &value2);
 
-    MAlignment align();
+    MultipleSequenceAlignment align();
 
 private:
     SMatrix sMatrix;
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.cpp b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.cpp
index 6f0e995..1825e36 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.cpp
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.h b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.h
index c8c4bf4..1465f3f 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.h
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAligner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_PAIRWISE_ALIGNER_H_
 #define _U2_PAIRWISE_ALIGNER_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -31,7 +31,7 @@ public:
     PairwiseAligner(const QByteArray &seq1, const QByteArray &seq2);
     virtual ~PairwiseAligner();
 
-    virtual MAlignment align() = 0;
+    virtual MultipleSequenceAlignment align() = 0;
     virtual void setSeq1(const QByteArray &value);
     virtual void setSeq2(const QByteArray &value);
     virtual void setSeqs(const QByteArray &value1, const QByteArray &value2);
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.cpp b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.cpp
index 7457f42..79ee473 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.cpp
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.h b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.h
index 87c8328..4ebff51 100644
--- a/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.h
+++ b/src/corelibs/U2Algorithm/src/pairwise_alignment/PairwiseAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.cpp b/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.cpp
index 2308d50..6f9475e 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.cpp
+++ b/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.h b/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.h
index 2df03d1..c5a0c05 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.h
+++ b/src/corelibs/U2Algorithm/src/phyltree/CreatePhyTreeSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QStringList>
+#include <QString>
+#include <QList>
+#include <QStringList>
 
 namespace U2{
 
diff --git a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGenerator.h b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGenerator.h
index 421a40e..eaa5b19 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGenerator.h
+++ b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGenerator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/Task.h>
 #include <U2Core/PhyTree.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "CreatePhyTreeSettings.h"
 
@@ -37,8 +37,8 @@ class U2ALGORITHM_EXPORT PhyTreeGenerator {
 public:
     virtual ~PhyTreeGenerator() {}
 
-    virtual Task * createCalculatePhyTreeTask(const MAlignment &ma, const CreatePhyTreeSettings &s) = 0;
-    virtual CreatePhyTreeWidget * createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent = NULL) = 0;
+    virtual Task * createCalculatePhyTreeTask(const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &s) = 0;
+    virtual CreatePhyTreeWidget * createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent = NULL) = 0;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.cpp b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.cpp
index a6dd13e..95636a2 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.h b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.h
index 08c3ea7..878afed 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.h
+++ b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.cpp b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.cpp
index e09951c..8d50b39 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.cpp
+++ b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 
 namespace U2 {
 
-PhyTreeGeneratorTask::PhyTreeGeneratorTask(const MAlignment& ma, const CreatePhyTreeSettings& _settings)
+PhyTreeGeneratorTask::PhyTreeGeneratorTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& _settings)
 : Task(PhyTreeGeneratorTask::tr("Calculating Phylogenetic Tree"), TaskFlag_FailOnSubtaskError), inputMA(ma), settings(_settings)
 {
     tpm = Task::Progress_Manual;
@@ -41,8 +41,8 @@ Task::ReportResult PhyTreeGeneratorTask::report() {
     return ReportResult_Finished;
 }
 
-PhyTreeGeneratorLauncherTask::PhyTreeGeneratorLauncherTask(const MAlignment& ma, const CreatePhyTreeSettings& _settings)
-:Task(PhyTreeGeneratorLauncherTask::tr("Calculating Phylogenetic Tree"), TaskFlag_FailOnSubtaskError), inputMA(ma), settings(_settings), task(NULL){
+PhyTreeGeneratorLauncherTask::PhyTreeGeneratorLauncherTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& _settings)
+:Task(PhyTreeGeneratorLauncherTask::tr("Calculating Phylogenetic Tree"), TaskFlag_FailOnSubtaskError), inputMA(ma->getCopy()), settings(_settings), task(NULL){
     tpm = Task::Progress_SubTasksBased;
 }
 void PhyTreeGeneratorLauncherTask::prepare(){
@@ -54,8 +54,8 @@ void PhyTreeGeneratorLauncherTask::prepare(){
         stateInfo.setError(PhyTreeGeneratorLauncherTask::tr("Tree construction algorithm %1 not found").arg(algId));
     }else{
         const QStringList& rowsOrder = settings.rowsOrder;
-        if(rowsOrder.size() >= inputMA.getRowNames().size()) {
-            inputMA.sortRowsByList(rowsOrder);
+        if(rowsOrder.size() >= inputMA->getRowNames().size()) {
+            inputMA->sortRowsByList(rowsOrder);
         }
 
         namesConvertor.replaceNamesWithAlphabeticIds(inputMA);
@@ -77,13 +77,13 @@ void PhyTreeGeneratorLauncherTask::sl_onCalculationCanceled() {
     cancel();
 }
 
-void SeqNamesConvertor::replaceNamesWithAlphabeticIds(MAlignment& ma) {
-    QStringList rows = ma.getRowNames();
+void SeqNamesConvertor::replaceNamesWithAlphabeticIds(MultipleSequenceAlignment& ma) {
+    QStringList rows = ma->getRowNames();
 
-    int rowsNum = ma.getNumRows();
+    int rowsNum = ma->getNumRows();
     for(int i = 0; i < rowsNum; i++) {
         namesMap[generateNewAlphabeticId()] = rows.at(i);
-        ma.renameRow(i, lastIdStr);
+        ma->renameRow(i, lastIdStr);
     }
 }
 void SeqNamesConvertor::restoreNames(const PhyTree& tree) {
diff --git a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.h b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.h
index 8921702..e0def75 100644
--- a/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.h
+++ b/src/corelibs/U2Algorithm/src/phyltree/PhyTreeGeneratorTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,14 +31,14 @@ namespace U2{
 class U2ALGORITHM_EXPORT PhyTreeGeneratorTask: public Task{
     Q_OBJECT
 public:
-    PhyTreeGeneratorTask(const MAlignment& ma, const CreatePhyTreeSettings& _settings);
-    ~PhyTreeGeneratorTask(){};
+    PhyTreeGeneratorTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& _settings);
+    ~PhyTreeGeneratorTask(){}
     void run();
     PhyTree getResult() { return result; }
     const CreatePhyTreeSettings& getSettings() { return settings; }
     ReportResult report();
 protected:
-    const MAlignment&           inputMA;
+    const MultipleSequenceAlignment inputMA;
     PhyTree                     result;
     CreatePhyTreeSettings       settings;
 };
@@ -47,7 +47,7 @@ class SeqNamesConvertor {
 public:
     SeqNamesConvertor() : lastIdStr("a") {}
 
-    void replaceNamesWithAlphabeticIds(MAlignment& ma);
+    void replaceNamesWithAlphabeticIds(MultipleSequenceAlignment& ma);
     void restoreNames(const PhyTree& tree);
 
 private:
@@ -60,7 +60,7 @@ private:
 class U2ALGORITHM_EXPORT PhyTreeGeneratorLauncherTask: public Task{
     Q_OBJECT
 public:
-    PhyTreeGeneratorLauncherTask(const MAlignment& ma, const CreatePhyTreeSettings& _settings);
+    PhyTreeGeneratorLauncherTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& _settings);
     ~PhyTreeGeneratorLauncherTask(){};
     PhyTree getResult() { return result; }
     void prepare();
@@ -69,7 +69,7 @@ public:
 private slots:
     void sl_onCalculationCanceled();
 private:
-    MAlignment                  inputMA;
+    MultipleSequenceAlignment                  inputMA;
     PhyTree                     result;
     CreatePhyTreeSettings       settings;
     PhyTreeGeneratorTask*       task;
diff --git a/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.cpp
index 2efb09c..ea1f76b 100644
--- a/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "AlignmentAlgorithmsRegistry.h"
+#include <QMutexLocker>
+
+#include <U2Core/U2SafePoints.h>
 
-#include "U2View/AlignmentAlgorithmGUIExtension.h"
-#include "../msa_alignment/SimpleAddingToAlignment.h"
+#include <U2View/AlignmentAlgorithmGUIExtension.h>
 
-#include <QtCore/QMutexLocker>
+#include "AlignmentAlgorithmsRegistry.h"
+#include "msa_alignment/SimpleAddingToAlignment.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.h b/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.h
index 21a79bb..46fa923 100644
--- a/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/AlignmentAlgorithmsRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,11 @@
 #ifndef _U2_ALIGNMENT_ALGORITHMS_REGISTRY_H_
 #define _U2_ALIGNMENT_ALGORITHMS_REGISTRY_H_
 
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QMutex>
-#include <QtCore/QObject>
+#include <QList>
+#include <QMap>
+#include <QMutex>
+#include <QObject>
+#include <QStringList>
 
 #include "U2Core/global.h"
 
@@ -39,7 +39,7 @@ class AlgorithmRealization;
 class DNAAlphabet;
 
 enum AlignmentAlgorithmType {
-    MultipleAlignment,
+    MultipleAlignmentType,
     AddToAlignment,
     PairwiseAlignment
 };
diff --git a/src/corelibs/U2Algorithm/src/registry/CDSearchTaskFactoryRegistry.h b/src/corelibs/U2Algorithm/src/registry/CDSearchTaskFactoryRegistry.h
index 919e346..47056fa 100644
--- a/src/corelibs/U2Algorithm/src/registry/CDSearchTaskFactoryRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/CDSearchTaskFactoryRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.cpp
index 85618bb..e58549f 100644
--- a/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,6 @@
 
 #include <algorithm>
 #include <functional>
-#include <QtCore/QtAlgorithms>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
diff --git a/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.h b/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.h
index e286e4b..f13d2e9 100644
--- a/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/CudaGpuRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef __CUDA_GPU_REGISTRY_H__
 #define __CUDA_GPU_REGISTRY_H__
 
-#include <QtCore/QHash>
+#include <QHash>
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.cpp
index c462697..6a92e7a 100644
--- a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.h b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.h
index 3244feb..0da6b35 100644
--- a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyAlgRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,11 @@
 #ifndef _U2_DNA_ASSEMBLY_ALG_REGISTRY_H_
 #define _U2_DNA_ASSEMBLY_ALG_REGISTRY_H_
 
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QMutex>
-#include <QtCore/QObject>
+#include <QList>
+#include <QMap>
+#include <QMutex>
+#include <QObject>
+#include <QStringList>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.cpp b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.cpp
index 810d766..a695c8c 100644
--- a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,10 @@
 #include <QDir>
 #include <QFileInfo>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/UserApplicationsSettings.h>
+
 #include "DnaAssemblyTask.h"
 
 namespace U2 {
@@ -106,7 +110,17 @@ QList<GUrl> DnaAssemblyToRefTaskSettings::getShortReadUrls() const
     return res;
 }
 
-void DnaAssemblyToRefTaskSettings::setCustomSettings( const QMap<QString, QVariant>& settings ) {
+DnaAssemblyToRefTaskSettings::DnaAssemblyToRefTaskSettings() 
+    : pairedReads(false),
+    filterUnpaired(false),
+    prebuiltIndex(false),
+    openView(false),
+    samOutput(true),
+    tmpDirPath(AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath()),
+    cleanTmpDir(true) {
+}
+
+void DnaAssemblyToRefTaskSettings::setCustomSettings(const QMap<QString, QVariant>& settings) {
     customSettings = settings;
 }
 } // U2
diff --git a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.h b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.h
index 2f01fff..decd780 100644
--- a/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.h
+++ b/src/corelibs/U2Algorithm/src/registry/DnaAssemblyTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,18 +22,15 @@
 #ifndef _U2_DNA_ASSEMBLY_TASK_H_
 #define _U2_DNA_ASSEMBLY_TASK_H_
 
-#include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/GUrl.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/Task.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
 class Document;
 
-
-
 class U2ALGORITHM_EXPORT ShortReadSet {
 public:
     enum LibraryType {
@@ -52,14 +49,9 @@ public:
 
 };
 
-
 class U2ALGORITHM_EXPORT DnaAssemblyToRefTaskSettings {
 public:
-    DnaAssemblyToRefTaskSettings()
-        : filterUnpaired(false),
-          prebuiltIndex(false),
-          openView(false),
-          samOutput(true) {}
+    DnaAssemblyToRefTaskSettings();
 
     void setCustomSettings(const QMap<QString, QVariant>& settings);
     QVariant getCustomValue(const QString& optionName, const QVariant& defaultVal) const;
@@ -79,6 +71,8 @@ public:
     bool prebuiltIndex;
     bool openView;
     bool samOutput;
+    QString tmpDirPath;
+    bool cleanTmpDir;
 
 private:
     QMap<QString, QVariant> customSettings;
@@ -89,7 +83,7 @@ class U2ALGORITHM_EXPORT DnaAssemblyToReferenceTask : public ExternalToolSupport
 public:
     DnaAssemblyToReferenceTask(const DnaAssemblyToRefTaskSettings &settings, TaskFlags flags = TaskFlags_FOSCOE, bool justBuildIndex = false);
 
-    bool isHaveResult() const {return haveResults;}
+    bool hasResult() const {return hasResults;}
     const DnaAssemblyToRefTaskSettings& getSettings() const{return settings;}
 
     static bool isIndexUrl(const QString &url, const QStringList &indexSuffixes);
@@ -101,7 +95,7 @@ protected:
 
     DnaAssemblyToRefTaskSettings settings;
     bool justBuildIndex;
-    bool haveResults;
+    bool hasResults;
 };
 
 class U2ALGORITHM_EXPORT DnaAssemblyToRefTaskFactory {
diff --git a/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.cpp
index 95b8e54..46acc58 100644
--- a/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.h b/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.h
index cc58d5b..e696b04 100644
--- a/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/GenomeAssemblyRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,13 @@
 #ifndef GENOMEASSEMBLYREGISTRY_H
 #define GENOMEASSEMBLYREGISTRY_H
 
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QMutex>
-#include <QtCore/QObject>
+#include <QList>
+#include <QString>
+#include <QStringList>
+#include <QMutex>
+#include <QObject>
 
+#include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/Task.h>
@@ -109,6 +110,7 @@ public:
     GUrl outDir;
     QString algName;
     bool openView;
+    QList<ExternalToolListener*> listeners;
 
 private:
     QMap<QString, QVariant> customSettings;
diff --git a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
index fca5dfb..1ffb5ed 100644
--- a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,6 @@
 
 #include <algorithm>
 #include <functional>
-#include <QtCore/QtAlgorithms>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
diff --git a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
index c4d1dc2..0de7bff 100644
--- a/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/OpenCLGpuRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #ifdef OPENCL_SUPPORT
 
-#include <QtCore/QHash>
+#include <QHash>
 
 #include <U2Algorithm/OpenCLHelper.h>
 #include <U2Core/global.h>
diff --git a/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.cpp
index 1223135..b6a18a1 100644
--- a/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.h b/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.h
index 5a43f92..063058f 100644
--- a/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/RepeatFinderTaskFactoryRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.cpp
index 6b6bcd5..ca244e3 100644
--- a/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include <U2Algorithm/SecStructPredictTask.h>
 #include "SecStructPredictAlgRegistry.h"
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.h b/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.h
index 33970f4..8ad6466 100644
--- a/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/SecStructPredictAlgRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,9 +23,10 @@
 #define _U2_SEC_STRUCT_PREDICT_ALG_REGISTRY_H_
 
 #include <QList>
-#include <QString>
+#include <QMap>
 #include <QMutex>
 #include <QObject>
+#include <QString>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.cpp b/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.cpp
index 74d5aa9..600e06a 100644
--- a/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.h b/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.h
index d901de6..6f5b56a 100644
--- a/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.h
+++ b/src/corelibs/U2Algorithm/src/registry/SecStructPredictTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.cpp b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.cpp
index 52dabb0..3da0844 100644
--- a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.h b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.h
index 5231d0b..371378a 100644
--- a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.h
+++ b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.cpp
index fc78bbd..4bd6c49 100644
--- a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.h b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.h
index fbd8f7f..20a9ba1 100644
--- a/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/SplicedAlignmentTaskRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,10 @@
 #ifndef _U2_SPLICED_ALIGNMENT_TASK_REGISTRY_H_
 #define _U2_SPLICED_ALIGNMENT_TASK_REGISTRY_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QMutex>
-#include <QtCore/QString>
+#include <QMap>
+#include <QMutex>
+#include <QObject>
+#include <QString>
 
 #include <U2Core/global.h>
 
@@ -46,10 +47,9 @@ public:
 private:
     QMutex mutex;
     QMap<QString, SplicedAlignmentTaskFactory*> algMap;
-    Q_DISABLE_COPY(SplicedAlignmentTaskRegistry);
+    Q_DISABLE_COPY(SplicedAlignmentTaskRegistry)
 };
 
-
 } // namespace
 
 #endif // _U2_SPLICED_ALIGNMENT_TASK_REGISTRY_H_
diff --git a/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.cpp b/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.cpp
index 8849b79..8cdf583 100644
--- a/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/U2AlphabetUtils.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.h b/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.h
index 9b39b2e..0eab239 100644
--- a/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.h
+++ b/src/corelibs/U2Algorithm/src/registry/SubstMatrixRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,9 +25,9 @@
 #include <U2Core/global.h>
 #include <U2Core/SMatrix.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QMap>
-#include <QtCore/QStringList>
+#include <QMutex>
+#include <QMap>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.cpp
index 8bed344..a630fb1 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include "SWMulAlignExternalPropTag.h"
 
-#include <QtCore/QDate>
-#include <QtCore/QTime>
+#include <QDate>
+#include <QTime>
 
 const QString timeFormat = "hh.mm.ss";
 
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.h
index 018d7f7..14e3788 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignExternalPropTag.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTag.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTag.h
index 56f5121..192203a 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTag.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTag.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Algorithm/SmithWatermanResult.h>
 
-#include <QtCore/QString>
-#include <QtCore/QVariant>
+#include <QString>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.cpp
index 4ae60f8..cdd9a79 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.h
index 25e2e97..fc91e0f 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignResultNamesTagsRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,18 +27,14 @@
 #include "SWMulAlignExternalPropTag.h"
 #include "SmithWatermanReportCallback.h"
 
-#include <QtCore/QObject>
-#include <QtCore/QMutex>
-#include <QtCore/QHash>
-#include <QtCore/QString>
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
-#include <QtCore/QBitArray>
-#include <QtCore/QStringList>
+#include <QBitArray>
+#include <QHash>
+#include <QList>
+#include <QMutex>
+#include <QObject>
+#include <QPushButton>
+#include <QString>
+#include <QStringList>
 
 const char OPEN_SQUARE_BRACKET = '[';
 const char CLOSE_SQUARE_BRACKET = ']';
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.cpp
index 912ee02..6488c85 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.h
index a966f4b..50dcce5 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSeqPrefixTag.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.cpp
index 46c7864..7c8167f 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.h
index 2fbaf1b..7f878a7 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWMulAlignSubseqPropTag.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.cpp
index 98c022d..f9094e2 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "SWResultFilterRegistry.h"
 
-#include <QtCore/QMutexLocker>
+#include <QMutexLocker>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.h b/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.h
index db5ddcd..878316c 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SWResultFilterRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_SW_RESULT_FILTER_REGISTRY_H_
 #define _U2_SW_RESULT_FILTER_REGISTRY_H_
 
-#include <QtCore/QStringList>
-#include <QtCore/QMutex>
+#include <QStringList>
+#include <QMutex>
 
 #include <U2Algorithm/SmithWatermanResultFilters.h>
 
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.cpp
index 3c26b9c..1513ff3 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,10 +25,10 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/MsaDbiUtils.h>
 #include <U2Core/ProjectModel.h>
@@ -208,17 +208,17 @@ QString SmithWatermanReportCallbackMAImpl::planFor_SequenceView_Search(const QLi
         QByteArray curResultPtrnSubseq = ptrnSequenceData.mid(pairAlignSeqs.ptrnSubseq.startPos, pairAlignSeqs.ptrnSubseq.length);
         alignSequences(curResultRefSubseq, curResultPtrnSubseq, pairAlignSeqs.pairAlignment);
 
-        MAlignment msa(newFileName, alphabet);
+        MultipleSequenceAlignment msa(newFileName, alphabet);
 
         expansionInfo.curProcessingSubseq = &pairAlignSeqs.refSubseq;
-        msa.addRow(tagsRegistry->parseStringWithTags(refSubseqTemplate, expansionInfo), curResultRefSubseq, stateInfo);
+        msa->addRow(tagsRegistry->parseStringWithTags(refSubseqTemplate, expansionInfo), curResultRefSubseq);
         CHECK_OP(stateInfo, tr("Failed to add a reference subsequence row."));
 
         expansionInfo.curProcessingSubseq = &pairAlignSeqs.ptrnSubseq;
-        msa.addRow(tagsRegistry->parseStringWithTags(ptrnSubseqTemplate, expansionInfo), curResultPtrnSubseq, stateInfo);
+        msa->addRow(tagsRegistry->parseStringWithTags(ptrnSubseqTemplate, expansionInfo), curResultPtrnSubseq);
         CHECK_OP(stateInfo, tr("Failed to add a pattern subsequence row."));
 
-        MAlignmentObject *docObject = MAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), msa, stateInfo);
+        MultipleSequenceAlignmentObject *docObject = MultipleSequenceAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), msa, stateInfo);
         CHECK_OP(stateInfo, tr("Failed to create an alignment."));
         alignmentDoc->addObject(docObject);
         currentProject->addDocument(alignmentDoc);
@@ -298,13 +298,11 @@ QString SmithWatermanReportCallbackMAImpl::planFor_MSA_Alignment_InNewWindow(
     SAFE_POINT(refSequenceData.length() > 0 && ptrnSequenceData.length() > 0, "Invalid sequence length detected!", QString::null);
     alignSequences(refSequenceData, ptrnSequenceData, pairAlignSeqs.pairAlignment);
 
-    MAlignment msa(refSequence->visualName + " vs. " + ptrnSequence->visualName, alphabet);
-    msa.addRow(refSequence->visualName, refSequenceData, stateInfo);
-    CHECK_OP(stateInfo, tr("Failed to add row to result msa."));
-    msa.addRow(ptrnSequence->visualName, ptrnSequenceData, stateInfo);
-    CHECK_OP(stateInfo, tr("Failed to add row to result msa."));
+    MultipleSequenceAlignment msa(refSequence->visualName + " vs. " + ptrnSequence->visualName, alphabet);
+    msa->addRow(refSequence->visualName, refSequenceData);
+    msa->addRow(ptrnSequence->visualName, ptrnSequenceData);
 
-    MAlignmentObject *docObject = MAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), msa, stateInfo);
+    MultipleSequenceAlignmentObject *docObject = MultipleSequenceAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), msa, stateInfo);
     CHECK_OP(stateInfo, tr("Failed to create an alignment."));
     alignmentDoc->addObject(docObject);
 
@@ -386,8 +384,8 @@ QString SmithWatermanReportCallbackMAImpl::planFor_MSA_Alignment_InCurrentWindow
     QByteArray notUsedOutputParam;
     refRow->gaps.clear();
     ptrnRow->gaps.clear();
-    MsaDbiUtils::splitBytesToCharsAndGaps(refSequenceData, notUsedOutputParam, refRow->gaps);
-    MsaDbiUtils::splitBytesToCharsAndGaps(ptrnSequenceData, notUsedOutputParam, ptrnRow->gaps);
+    MaDbiUtils::splitBytesToCharsAndGaps(refSequenceData, notUsedOutputParam, refRow->gaps);
+    MaDbiUtils::splitBytesToCharsAndGaps(ptrnSequenceData, notUsedOutputParam, ptrnRow->gaps);
 
     U2UseCommonUserModStep userModStep(sourceMsaRef, os);
     Q_UNUSED(userModStep);
@@ -412,11 +410,11 @@ void SmithWatermanReportCallbackMAImpl::alignSequences(QByteArray &refSequence,
                 continue;
                 break;
             case SmithWatermanResult::UP:
-                ptrnSequence.insert(ptrnSeqCurrentPosition, MAlignment_GapChar);
+                ptrnSequence.insert(ptrnSeqCurrentPosition, U2Msa::GAP_CHAR);
                 --refSeqCurrentPosition;
                 break;
             case SmithWatermanResult::LEFT:
-                refSequence.insert(refSeqCurrentPosition, MAlignment_GapChar);
+                refSequence.insert(refSeqCurrentPosition, U2Msa::GAP_CHAR);
                 --ptrnSeqCurrentPosition;
                 break;
             default:
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.h
index 123b09b..311308a 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanReportCallback.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.cpp
index ad9c1c8..519b261 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.h
index 335441a..b612c87 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResult.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.cpp
index 3c89aea..7510847 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.h
index ff7c7bf..c10e0a8 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanResultFilters.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanSettings.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanSettings.h
index 65280aa..a238b9e 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanSettings.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 #include <U2Algorithm/SmithWatermanResult.h>
 #include <U2Core/SequenceWalkerTask.h>
 
-#include <QtCore/QHash>
+#include <QHash>
 
 static const char * ANNOTATION_RESULT_VIEW = "Annotations";
 static const char * MULTIPLE_ALIGNMENT_RESULT_VIEW = "Multiple alignment";
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactory.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactory.h
index b5b26d2..41cb79b 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactory.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.cpp
index 2807a19..090d0b6 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.h
index 8b6298d..0b50128 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanTaskFactoryRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.cpp b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.cpp
index 2d14617..ecc57d4 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.cpp
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.h b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.h
index 1f940fd..9b13de9 100644
--- a/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.h
+++ b/src/corelibs/U2Algorithm/src/smith_waterman/SmithWatermanUtil.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.cpp b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.cpp
index ee2add0..2b91306 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,7 +47,7 @@ QString BioStruct3DReference::print() const {
 
 /* class U2ALGORITHM_EXPORT StructuralAlignmentTask : public Task */
 StructuralAlignmentTask::StructuralAlignmentTask(StructuralAlignmentAlgorithm *_algorithm, const StructuralAlignmentTaskSettings &_settings)
-        : Task("StructuralAlignmentTask", TaskFlag(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)), algorithm(_algorithm), settings(_settings), result()
+        : Task("StructuralAlignmentTask", TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled), algorithm(_algorithm), settings(_settings), result()
 {}
 
 void StructuralAlignmentTask::run() {
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.h b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.h
index 4a6734f..6bf8499 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.cpp b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.cpp
index 0b4a6e3..b693655 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.cpp
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.h b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.h
index 545cde8..697af50 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.h
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.cpp b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.cpp
index 91f4ac5..f51b881 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.h b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.h
index e71b9a5..3095266 100644
--- a/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.h
+++ b/src/corelibs/U2Algorithm/src/structural_alignment/StructuralAlignmentAlgorithmRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,9 @@
 #ifndef _U2_STRUCTURAL_ALIGNMENT_ALGORITHM_REGISTRY_H_
 #define _U2_STRUCTURAL_ALIGNMENT_ALGORITHM_REGISTRY_H_
 
+#include <QMap>
 #include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.cpp
index 55c44e0..c5dbdfd 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.h
index 46f6928..d9b1aec 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.cpp
index 93d77f7..509c174 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.h
index d9a90f1..e2a68ad 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmDefault.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.cpp
index f911b3f..24d5616 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.h
index 0e9745d..26ffec0 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,10 @@
 #ifndef _U2_ASSEMBLY_CONSENSUS_ALGORITHM_REGISTRY_H_
 #define _U2_ASSEMBLY_CONSENSUS_ALGORITHM_REGISTRY_H_
 
+#include <QMap>
+#include <QStringList>
+
 #include "AssemblyConsensusAlgorithm.h"
-#include <QtCore/QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp
index 3bbb552..41f627a 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.h
index 57afe3d..66fc93b 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusAlgorithmSamtools.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.cpp
index d1e2510..8a32e5f 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.h
index c9ba00c..2da14b8 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/AssemblyConsensusUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.cpp b/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.cpp
index 6b9d70d..ec15292 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.cpp
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.h b/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.h
index 0c3c393..9856cda 100644
--- a/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.h
+++ b/src/corelibs/U2Algorithm/src/util_assembly_consensus/BuiltInAssemblyConsensusAlgorithms.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_BUILT_IN_ASSEMBLY_CONSENSUS_ALGORITHMS_H_
 
 #include <U2Core/global.h>
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_gpu/opencl/BinaryFind.cl b/src/corelibs/U2Algorithm/src/util_gpu/opencl/BinaryFind.cl
index d548cf1..feb82d4 100755
--- a/src/corelibs/U2Algorithm/src/util_gpu/opencl/BinaryFind.cl
+++ b/src/corelibs/U2Algorithm/src/util_gpu/opencl/BinaryFind.cl
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.cpp b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.cpp
index bddb8cf..ee9ae8a 100644
--- a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.cpp
+++ b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.h b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.h
index 150ca56..6fbc165 100644
--- a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.h
+++ b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLHelper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,8 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QLibrary>
-#include <QtCore/QString>
+#include <QLibrary>
+#include <QString>
 
 #include <opencl/legacy/cl.h>
 
diff --git a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.cpp b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.cpp
index 04e6a05..2689693 100644
--- a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.cpp
+++ b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 
 #include "OpenCLUtils.h"
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QFile>
+#include <QTextStream>
 #include <U2Core/GAutoDeleteList.h>
 
 #include <U2Core/Log.h>
diff --git a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.h b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.h
index 94cdd6a..6e42cce 100644
--- a/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.h
+++ b/src/corelibs/U2Algorithm/src/util_gpu/opencl/OpenCLUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include "OpenCLHelper.h"
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.cpp
index 2fc4df8..b6f775c 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,9 +23,10 @@
 
 namespace U2 {
 
-const QString BuiltInConsensusAlgorithms::DEFAULT_ALGO("Default");
-const QString BuiltInConsensusAlgorithms::CLUSTAL_ALGO("Clustal");
-const QString BuiltInConsensusAlgorithms::STRICT_ALGO("Strict");
-const QString BuiltInConsensusAlgorithms::LEVITSKY_ALGO("Levitsky");
+const QString BuiltInConsensusAlgorithms::DEFAULT_ALGO = "Default";
+const QString BuiltInConsensusAlgorithms::CLUSTAL_ALGO = "Clustal";
+const QString BuiltInConsensusAlgorithms::STRICT_ALGO = "Strict";
+const QString BuiltInConsensusAlgorithms::LEVITSKY_ALGO = "Levitsky";
+const QString BuiltInConsensusAlgorithms::SIMPLE_EXTENDED_ALGO = "Simple extended";
 
-}//namespace
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.h
index 5f3b4ce..ae51f8b 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/BuiltInConsensusAlgorithms.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,18 +24,19 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
 class U2ALGORITHM_EXPORT BuiltInConsensusAlgorithms {
 public:
-	static const QString DEFAULT_ALGO;
-	static const QString CLUSTAL_ALGO;
-	static const QString STRICT_ALGO;
+    static const QString DEFAULT_ALGO;
+    static const QString CLUSTAL_ALGO;
+    static const QString STRICT_ALGO;
     static const QString LEVITSKY_ALGO;
+    static const QString SIMPLE_EXTENDED_ALGO;
 };
 
-}//namespace
+}   // namespace U2
 
-#endif
+#endif // _U2_BUILT_IN_CONSENSUS_ALGORITHMS_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.cpp
index 36da890..f5f1a37 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,9 +23,10 @@
 #include "MSAConsensusUtils.h"
 
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2OpStatusUtils.h>
 
-#include <QtCore/QVector>
+#include <QVector>
 
 namespace U2 {
 
@@ -50,13 +51,16 @@ ConsensusAlgorithmFlags MSAConsensusAlgorithmFactory::getAphabetFlags(const DNAA
 //////////////////////////////////////////////////////////////////////////
 // Algorithm
 
-MSAConsensusAlgorithm::MSAConsensusAlgorithm(MSAConsensusAlgorithmFactory* _factory, QObject* p)
-: QObject(p), factory(_factory) , threshold(0)
-{
+char MSAConsensusAlgorithm::INVALID_CONS_CHAR = '\0';
+MSAConsensusAlgorithm::MSAConsensusAlgorithm(MSAConsensusAlgorithmFactory* _factory, bool ignoreTrailingLeadingGaps, QObject* p)
+    : QObject(p), factory(_factory),
+      threshold(0),
+      ignoreTrailingAndLeadingGaps(ignoreTrailingLeadingGaps) {
+
 }
 
-char MSAConsensusAlgorithm::getConsensusCharAndScore(const MAlignment& ma, int column, int& score,
-                                                     const QVector<qint64>& seqIdx) const {
+char MSAConsensusAlgorithm::getConsensusCharAndScore(const MultipleAlignment& ma, int column, int& score,
+                                                     QVector<int> seqIdx) const {
     char consensusChar = getConsensusChar(ma, column, seqIdx);
 
     //now compute score using most freq character
@@ -77,4 +81,23 @@ void MSAConsensusAlgorithm::setThreshold(int val) {
     emit si_thresholdChanged(newThreshold);
 }
 
+bool MSAConsensusAlgorithm::filterIdx(QVector<int> &seqIdx, const MultipleAlignment& ma, const int pos) const {
+    CHECK(ignoreTrailingAndLeadingGaps, true);
+
+    QVector<int> tmp;
+    int nSeq = seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size();
+    for (int seq = 0; seq < nSeq; seq++) {
+        int rowNum = seqIdx.isEmpty() ? seq : seqIdx[ seq ];
+        const MultipleAlignmentRow& row = ma->getRow(rowNum);
+        if (row->isTrailingOrLeadingGap(pos)) {
+            continue;
+        }
+        tmp << rowNum;
+    }
+    if (tmp.size() != nSeq) {
+        seqIdx = tmp;
+    }
+    return !tmp.isEmpty();
+}
+
 } //namespace
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.h
index 7b7f90e..48b6caf 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,11 @@
 #ifndef _U2_MSA_CONSENSUS_ALGORITHM_H_
 #define _U2_MSA_CONSENSUS_ALGORITHM_H_
 
-#include <U2Core/global.h>
+#include <U2Core/MultipleAlignment.h>
 #include <U2Core/U2Region.h>
 
 namespace U2 {
 
-class MAlignment;
 class MSAConsensusAlgorithm;
 class DNAAlphabet;
 
@@ -36,9 +35,12 @@ enum ConsensusAlgorithmFlag {
     ConsensusAlgorithmFlag_Amino = 1 << 1,
     ConsensusAlgorithmFlag_Raw = 1 << 2,
     ConsensusAlgorithmFlag_SupportThreshold = 1 << 3,
+    ConsensusAlgorithmFlag_AvailableForChromatogram = 1 << 4
 };
 
-typedef QFlags<ConsensusAlgorithmFlag> ConsensusAlgorithmFlags;
+Q_DECLARE_FLAGS(ConsensusAlgorithmFlags, ConsensusAlgorithmFlag)
+Q_DECLARE_OPERATORS_FOR_FLAGS(ConsensusAlgorithmFlags)
+
 #define ConsensusAlgorithmFlags_AllAlphabets (ConsensusAlgorithmFlags(ConsensusAlgorithmFlag_Nucleic) | ConsensusAlgorithmFlag_Amino | ConsensusAlgorithmFlag_Raw)
 #define ConsensusAlgorithmFlags_NuclAmino    (ConsensusAlgorithmFlags(ConsensusAlgorithmFlag_Nucleic) | ConsensusAlgorithmFlag_Amino)
 
@@ -47,7 +49,7 @@ class U2ALGORITHM_EXPORT MSAConsensusAlgorithmFactory : public QObject {
 public:
     MSAConsensusAlgorithmFactory(const QString& algoId, ConsensusAlgorithmFlags flags, QObject* p = NULL);
 
-    virtual MSAConsensusAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent = NULL) = 0;
+    virtual MSAConsensusAlgorithm* createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps = false, QObject* parent = NULL) = 0;
 
     QString getId() const {return algorithmId;}
 
@@ -81,16 +83,16 @@ private:
 class U2ALGORITHM_EXPORT MSAConsensusAlgorithm : public QObject {
     Q_OBJECT
 public:
-    MSAConsensusAlgorithm(MSAConsensusAlgorithmFactory* factory, QObject* p = NULL);
+    MSAConsensusAlgorithm(MSAConsensusAlgorithmFactory* factory, bool ignoreTrailingLeadingGaps, QObject* p = NULL);
 
     /**
         Returns consensus char and score for the given row
         Score is a number: [0, num] sequences. Usually is means count of the char in the row
         Note that consensus character may be out of the to MSA alphabet symbols range
     */
-    virtual char getConsensusCharAndScore(const MAlignment& ma, int column, int& score, const QVector<qint64> &seqIdx = QVector<qint64>()) const;
+    virtual char getConsensusCharAndScore(const MultipleAlignment& ma, int column, int& score, QVector<int> seqIdx = QVector<int>()) const;
 
-    virtual char getConsensusChar(const MAlignment& ma, int column, const QVector<qint64> &seqIdx = QVector<qint64>()) const = 0;
+    virtual char getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx = QVector<int>()) const = 0;
 
     virtual QString getDescription() const {return factory->getDescription();}
 
@@ -114,12 +116,19 @@ public:
 
     MSAConsensusAlgorithmFactory* getFactory() const {return factory;}
 
+    static char INVALID_CONS_CHAR;
+
 signals:
     void si_thresholdChanged(int);
 
+protected:
+    // returns true if there are meaningful symbols on @pos, depending on @ignoreTrailingleadingGaps flag
+    bool filterIdx(QVector<int> &seqIdx, const MultipleAlignment& ma, const int pos) const;
+
 private:
     MSAConsensusAlgorithmFactory* factory;
-    int threshold;
+    int     threshold;
+    bool    ignoreTrailingAndLeadingGaps;
 
 };
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.cpp
index 033ba1c..64d1ee4 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "MSAConsensusAlgorithmClustal.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/DNAAlphabet.h>
 
 namespace U2 {
@@ -35,25 +35,26 @@ QString MSAConsensusAlgorithmFactoryClustal::getName() const {
 }
 
 
-MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryClustal::createAlgorithm(const MAlignment&, QObject* p) {
-    return new MSAConsensusAlgorithmClustal(this, p);
+MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryClustal::createAlgorithm(const MultipleAlignment&, bool ignoreTrailingLeadingGaps, QObject* p) {
+    return new MSAConsensusAlgorithmClustal(this, ignoreTrailingLeadingGaps, p);
 }
 
 //////////////////////////////////////////////////////////////////////////
 //Algorithm
 
-char MSAConsensusAlgorithmClustal::getConsensusChar(const MAlignment& msa, int pos, const QVector<qint64> &seqIdx) const {
-    if (!msa.getAlphabet()->isAmino()) {
+char MSAConsensusAlgorithmClustal::getConsensusChar(const MultipleAlignment& ma, int pos, QVector<int> seqIdx) const {
+    CHECK(filterIdx(seqIdx, ma, pos), INVALID_CONS_CHAR);
+
+    if (!ma->getAlphabet()->isAmino()) {
         // for nucleic alphabet work as strict algorithm but use ' ' as default
         char  defChar = ' ';
-        char pc = ( seqIdx.isEmpty() ? msa.getRows().first() : msa.getRows()[ seqIdx[0] ] ).charAt(pos);
-        if (pc == MAlignment_GapChar) {
+        char pc = ( seqIdx.isEmpty() ? ma->getRows().first() : ma->getRows()[ seqIdx[0] ] )->charAt(pos);
+        if (pc == U2Msa::GAP_CHAR) {
             pc = defChar;
         }
-        int nSeq =( seqIdx.isEmpty() ? msa.getNumRows() : seqIdx.size());
+        int nSeq =( seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size());
         for (int s = 1; s < nSeq; s++) {
-            const MAlignmentRow& row = msa.getRow( seqIdx.isEmpty() ? s : seqIdx [s] );
-            char c = row.charAt(pos);
+            char c = ma->getRow(seqIdx.isEmpty() ? s : seqIdx[s])->charAt(pos);
             if (c != pc) {
                 pc = defChar;
                 break;
@@ -75,17 +76,16 @@ char MSAConsensusAlgorithmClustal::getConsensusChar(const MAlignment& msa, int p
         static int maxWeakGroupLen = 6;
 
         QByteArray currentGroup; //TODO: optimize 'currentGroup' related code!
-        int nSeq =( seqIdx.isEmpty() ? msa.getNumRows() : seqIdx.size());
+        int nSeq =( seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size());
         for (int s = 0; s < nSeq; s++) {
-            const MAlignmentRow& row = msa.getRow( seqIdx.isEmpty() ? s : seqIdx [s] );
-            char c = row.charAt(pos);
+            char c = ma->getRow(seqIdx.isEmpty() ? s : seqIdx[s])->charAt(pos);
             if (!currentGroup.contains(c)) {
                 currentGroup.append(c);
             }
         }
-        char consChar = MAlignment_GapChar;
+        char consChar = U2Msa::GAP_CHAR;
         if (currentGroup.size() == 1) {
-            consChar = (currentGroup[0] == MAlignment_GapChar) ? ' ' : '*';
+            consChar = (currentGroup[0] == U2Msa::GAP_CHAR) ? ' ' : '*';
         } else  {
             bool ok = false;
             int currentLen = currentGroup.length();
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.h
index 3222781..0b57589 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmClustal.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ public:
     MSAConsensusAlgorithmFactoryClustal(QObject* p = NULL)
             : MSAConsensusAlgorithmFactory(BuiltInConsensusAlgorithms::CLUSTAL_ALGO, ConsensusAlgorithmFlags_AllAlphabets, p){}
 
-    virtual MSAConsensusAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSAConsensusAlgorithm* createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -51,9 +51,10 @@ public:
 class U2ALGORITHM_EXPORT MSAConsensusAlgorithmClustal : public MSAConsensusAlgorithm {
     Q_OBJECT
 public:
-    MSAConsensusAlgorithmClustal(MSAConsensusAlgorithmFactoryClustal* f, QObject* p = NULL) : MSAConsensusAlgorithm(f, p){}
+    MSAConsensusAlgorithmClustal(MSAConsensusAlgorithmFactoryClustal* f, bool ignoreTrailingLeadingGaps, QObject* p = NULL)
+        : MSAConsensusAlgorithm(f, ignoreTrailingLeadingGaps, p) {}
 
-    virtual char getConsensusChar(const MAlignment& ma, int column, const QVector<qint64> &seqIdx = QVector<qint64>()) const;
+    virtual char getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx = QVector<int>()) const;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.cpp
index 97bad5c..ab8dc50 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include "MSAConsensusAlgorithmDefault.h"
 
-#include <U2Core/MAlignment.h>
-#include <QtCore/QVector>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <QVector>
 
 namespace U2 {
 
@@ -42,20 +42,22 @@ QString MSAConsensusAlgorithmFactoryDefault::getName() const {
 }
 
 
-MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryDefault::createAlgorithm(const MAlignment&, QObject* p) {
-    return new MSAConsensusAlgorithmDefault(this, p);
+MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryDefault::createAlgorithm(const MultipleAlignment&, bool ignoreTrailingLeadingGaps, QObject* p) {
+    return new MSAConsensusAlgorithmDefault(this, ignoreTrailingLeadingGaps, p);
 }
 
 //////////////////////////////////////////////////////////////////////////
 // Algorithm
 
-char MSAConsensusAlgorithmDefault::getConsensusCharAndScore(const MAlignment& msa, int pos, int& cnt, const QVector<qint64> &seqIdx) const {
+char MSAConsensusAlgorithmDefault::getConsensusCharAndScore(const MultipleAlignment& msa, int pos, int& cnt, QVector<int> seqIdx) const {
+    CHECK(filterIdx(seqIdx, msa, pos), INVALID_CONS_CHAR);
+
     //TODO: use var-length array!
     QVector<QPair<int, char> > freqs(32);
-    int ch = MAlignment_GapChar;
-    int nSeq = seqIdx.isEmpty() ? msa.getNumRows() : seqIdx.size();
+    int ch = U2Msa::GAP_CHAR;
+    int nSeq = seqIdx.isEmpty() ? msa->getNumRows() : seqIdx.size();
     for (int seq = 0; seq < nSeq; seq++) {
-        uchar c = (uchar)msa.charAt( seqIdx.isEmpty() ? seq : seqIdx[ seq ],
+        uchar c = (uchar)msa->charAt( seqIdx.isEmpty() ? seq : seqIdx[ seq ],
                                      pos);
         if (c >= 'A' && c <= 'Z') {
             int idx = c - 'A';
@@ -68,7 +70,7 @@ char MSAConsensusAlgorithmDefault::getConsensusCharAndScore(const MAlignment& ms
     int p1 = freqs[freqs.size()-1].first;
     int p2 = freqs[freqs.size()-2].first;
     if (p1 == 0 || (p1 == 1 && nSeq > 1)) {
-        ch = MAlignment_GapChar;
+        ch = U2Msa::GAP_CHAR;
         cnt = 0;
     } else {
         int c1 = freqs[freqs.size()-1].second;
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.h
index 65b0e10..9843ed7 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmDefault.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ class U2ALGORITHM_EXPORT MSAConsensusAlgorithmFactoryDefault: public MSAConsensu
 public:
     MSAConsensusAlgorithmFactoryDefault(QObject* p = NULL);
 
-    virtual MSAConsensusAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSAConsensusAlgorithm* createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -54,15 +54,15 @@ public:
 class U2ALGORITHM_EXPORT MSAConsensusAlgorithmDefault : public MSAConsensusAlgorithm {
     Q_OBJECT
 public:
-    MSAConsensusAlgorithmDefault(MSAConsensusAlgorithmFactoryDefault* f, QObject* p = NULL)
-        : MSAConsensusAlgorithm(f, p){}
+    MSAConsensusAlgorithmDefault(MSAConsensusAlgorithmFactoryDefault* f, bool ignoreTrailingLeadingGaps, QObject* p = NULL)
+        : MSAConsensusAlgorithm(f, ignoreTrailingLeadingGaps, p) {}
 
-    virtual char getConsensusChar(const MAlignment& ma, int column, const QVector<qint64> &seqIdx) const {
+    virtual char getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx = QVector<int>()) const {
         int countStub = 0;
         return getConsensusCharAndScore(ma, column, countStub, seqIdx);
     }
 
-    virtual char getConsensusCharAndScore(const MAlignment& ma, int column, int& score, const QVector<qint64> &seqIdx = QVector<qint64>()) const;
+    virtual char getConsensusCharAndScore(const MultipleAlignment& ma, int column, int& score, QVector<int> seqIdx = QVector<int>()) const;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.cpp
index afa12cc..23ae3c4 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,13 @@
 
 #include "MSAConsensusAlgorithmLevitsky.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
 MSAConsensusAlgorithmFactoryLevitsky::MSAConsensusAlgorithmFactoryLevitsky(QObject* p)
 : MSAConsensusAlgorithmFactory(BuiltInConsensusAlgorithms::LEVITSKY_ALGO,
-                               ConsensusAlgorithmFlags(ConsensusAlgorithmFlag_Nucleic ) | ConsensusAlgorithmFlag_SupportThreshold,
+                               ConsensusAlgorithmFlag_Nucleic | ConsensusAlgorithmFlag_SupportThreshold,
                                p)
 {
 }
@@ -44,8 +44,8 @@ QString MSAConsensusAlgorithmFactoryLevitsky::getName() const  {
     return tr("Levitsky");
 }
 
-MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryLevitsky::createAlgorithm(const MAlignment& ma, QObject* p) {
-    return new MSAConsensusAlgorithmLevitsky(this, ma, p);
+MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryLevitsky::createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* p) {
+    return new MSAConsensusAlgorithmLevitsky(this, ma, ignoreTrailingLeadingGaps, p);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -115,38 +115,39 @@ static void registerHit(int* data, char c) {
     }
 }
 
-MSAConsensusAlgorithmLevitsky::MSAConsensusAlgorithmLevitsky(MSAConsensusAlgorithmFactoryLevitsky* f, const MAlignment& ma,  QObject* p)
-: MSAConsensusAlgorithm(f, p)
+MSAConsensusAlgorithmLevitsky::MSAConsensusAlgorithmLevitsky(MSAConsensusAlgorithmFactoryLevitsky* f, const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* p)
+: MSAConsensusAlgorithm(f, ignoreTrailingLeadingGaps, p)
 {
     globalFreqs.resize(256);
     memset(globalFreqs.data(), 0, globalFreqs.size() * 4);
 
     int* freqsData = globalFreqs.data();
-    int len = ma.getLength();
-    foreach (const MAlignmentRow& row, ma.getRows()) {
+    int len = ma->getLength();
+    foreach (const MultipleAlignmentRow& row, ma->getRows()) {
         for (int i = 0; i < len; i++) {
-            char c = row.charAt(i);
+            char c = row->charAt(i);
             registerHit(freqsData, c);
         }
     }
 }
 
+char MSAConsensusAlgorithmLevitsky::getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx) const {
+    CHECK(filterIdx(seqIdx, ma, column), INVALID_CONS_CHAR);
 
-char MSAConsensusAlgorithmLevitsky::getConsensusChar(const MAlignment& msa, int column, const QVector<qint64> &seqIdx) const {
     // count local freqs first
     QVarLengthArray<int> localFreqs(256);
     memset(localFreqs.data(), 0, localFreqs.size() * 4);
 
     int* freqsData = localFreqs.data();
-    int nSeq =( seqIdx.isEmpty() ? msa.getNumRows() : seqIdx.size());
+    int nSeq =( seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size());
     for (int seq = 0; seq < nSeq; seq++) {
-        char c = msa.charAt( seqIdx.isEmpty() ? seq : seqIdx [seq] , column);
+        char c = ma->charAt( seqIdx.isEmpty() ? seq : seqIdx [seq] , column);
         registerHit(freqsData, c);
     }
 
     //find all symbols with freq > threshold, select one with the lowest global freq
-    char selectedChar = MAlignment_GapChar;
-    int selectedGlobalFreq = nSeq * msa.getLength();
+    char selectedChar = U2Msa::GAP_CHAR;
+    int selectedGlobalFreq = nSeq * ma->getLength();
     int thresholdScore = getThreshold();
     int minFreq = int(float(nSeq) * thresholdScore / 100);
     for (int c = 'A'; c <= 'Y'; c++) {
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.h
index db27de3..d32ded3 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmLevitsky.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include "MSAConsensusAlgorithm.h"
 #include "BuiltInConsensusAlgorithms.h"
 
-#include <QtCore/QVarLengthArray>
+#include <QVarLengthArray>
 
 namespace U2 {
 
@@ -37,7 +37,7 @@ class U2ALGORITHM_EXPORT MSAConsensusAlgorithmFactoryLevitsky: public MSAConsens
 public:
     MSAConsensusAlgorithmFactoryLevitsky(QObject* p = NULL);
 
-    virtual MSAConsensusAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSAConsensusAlgorithm* createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -58,9 +58,9 @@ public:
 class U2ALGORITHM_EXPORT MSAConsensusAlgorithmLevitsky: public MSAConsensusAlgorithm {
     Q_OBJECT
 public:
-    MSAConsensusAlgorithmLevitsky(MSAConsensusAlgorithmFactoryLevitsky* f, const MAlignment& ma,  QObject* p = NULL);
+    MSAConsensusAlgorithmLevitsky(MSAConsensusAlgorithmFactoryLevitsky* f, const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* p = NULL);
 
-    virtual char getConsensusChar(const MAlignment& ma, int column, const QVector<qint64> &seqIdx = QVector<qint64>()) const;
+    virtual char getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx = QVector<int>()) const;
 
 private:
     QVarLengthArray<int> globalFreqs;
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.cpp
index b66f97b..356b931 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSAConsensusAlgorithmRegistry.h"
-
-#include "MSAConsensusAlgorithmDefault.h"
-#include "MSAConsensusAlgorithmStrict.h"
+#include "MaConsensusAlgorithmSimpleExtended.h"
 #include "MSAConsensusAlgorithmClustal.h"
+#include "MSAConsensusAlgorithmDefault.h"
 #include "MSAConsensusAlgorithmLevitsky.h"
+#include "MSAConsensusAlgorithmRegistry.h"
+#include "MSAConsensusAlgorithmStrict.h"
 
 namespace U2 {
 
@@ -33,6 +33,7 @@ MSAConsensusAlgorithmRegistry::MSAConsensusAlgorithmRegistry(QObject* p) : QObje
     addAlgorithm(new MSAConsensusAlgorithmFactoryStrict());
     addAlgorithm(new MSAConsensusAlgorithmFactoryClustal());
     addAlgorithm(new MSAConsensusAlgorithmFactoryLevitsky());
+    addAlgorithm(new MaConsensusAlgorithmFactorySimpleExtended());
 }
 
 MSAConsensusAlgorithmRegistry::~MSAConsensusAlgorithmRegistry() {
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.h
index 21511d5..b1da8cf 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "MSAConsensusAlgorithm.h"
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp
index a39dea9..c9fa4b0 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,16 +21,18 @@
 
 #include "MSAConsensusAlgorithmStrict.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include "MSAConsensusUtils.h"
 
-#include <QtCore/QVector>
+#include <QVector>
 
 namespace U2 {
 
 
 MSAConsensusAlgorithmFactoryStrict::MSAConsensusAlgorithmFactoryStrict(QObject* p)
-: MSAConsensusAlgorithmFactory(BuiltInConsensusAlgorithms::STRICT_ALGO, ConsensusAlgorithmFlags_AllAlphabets | ConsensusAlgorithmFlag_SupportThreshold, p)
+: MSAConsensusAlgorithmFactory(BuiltInConsensusAlgorithms::STRICT_ALGO, ConsensusAlgorithmFlags_AllAlphabets
+                               | ConsensusAlgorithmFlag_SupportThreshold
+                               | ConsensusAlgorithmFlag_AvailableForChromatogram, p)
 {
 }
 
@@ -43,24 +45,26 @@ QString MSAConsensusAlgorithmFactoryStrict::getName() const  {
     return tr("Strict");
 }
 
-MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryStrict::createAlgorithm(const MAlignment&, QObject* p) {
-    return new MSAConsensusAlgorithmStrict(this, p);
+MSAConsensusAlgorithm* MSAConsensusAlgorithmFactoryStrict::createAlgorithm(const MultipleAlignment&, bool ignoreTrailingLeadingGaps, QObject* p) {
+    return new MSAConsensusAlgorithmStrict(this, ignoreTrailingLeadingGaps, p);
 }
 
 //////////////////////////////////////////////////////////////////////////
 // Algorithm
 
-char MSAConsensusAlgorithmStrict::getConsensusChar(const MAlignment& msa, int column, const QVector<qint64> &seqIdx) const {
+char MSAConsensusAlgorithmStrict::getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx) const {
+    CHECK(filterIdx(seqIdx, ma, column), INVALID_CONS_CHAR);
+
     QVector<int> freqsByChar(256, 0);
     int nonGaps = 0;
-    uchar topChar = MSAConsensusUtils::getColumnFreqs(msa, column, freqsByChar, nonGaps, seqIdx);
+    uchar topChar = MSAConsensusUtils::getColumnFreqs(ma, column, freqsByChar, nonGaps, seqIdx);
 
     //use gap is top char frequency is lower than threshold
-    int nSeq =( seqIdx.isEmpty() ? msa.getNumRows() : seqIdx.size());
+    int nSeq =( seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size());
     int currentThreshold = getThreshold();
     int cntToUseGap = int(currentThreshold / 100.0 * nSeq);
     int topFreq = freqsByChar[topChar];
-    char res = topFreq < cntToUseGap ? MAlignment_GapChar : (char)topChar;
+    char res = topFreq < cntToUseGap ? U2Msa::GAP_CHAR : (char)topChar;
     return res;
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.h
index 9fe7052..4b82cbb 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusAlgorithmStrict.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ class U2ALGORITHM_EXPORT MSAConsensusAlgorithmFactoryStrict: public MSAConsensus
 public:
     MSAConsensusAlgorithmFactoryStrict(QObject* p = NULL);
 
-    virtual MSAConsensusAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSAConsensusAlgorithm* createAlgorithm(const MultipleAlignment& ma, bool ignoreTrailingLeadingGaps, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -53,9 +53,10 @@ public:
 class U2ALGORITHM_EXPORT MSAConsensusAlgorithmStrict : public MSAConsensusAlgorithm {
     Q_OBJECT
 public:
-    MSAConsensusAlgorithmStrict(MSAConsensusAlgorithmFactoryStrict* f, QObject* p = NULL) : MSAConsensusAlgorithm(f, p){}
+    MSAConsensusAlgorithmStrict(MSAConsensusAlgorithmFactoryStrict* f, bool ignoreTrailingLeadingGaps, QObject* p = NULL)
+        : MSAConsensusAlgorithm(f, ignoreTrailingLeadingGaps, p) {}
 
-    virtual char getConsensusChar(const MAlignment& ma, int column, const QVector<qint64> &seqIdx = QVector<qint64>()) const;
+    virtual char getConsensusChar(const MultipleAlignment& ma, int column, QVector<int> seqIdx = QVector<int>()) const;
 };
 
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.cpp
index 71ea3f1..5f82736 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,51 +22,50 @@
 #include "MSAConsensusUtils.h"
 #include "MSAConsensusAlgorithm.h"
 
-#include <U2Core/MAlignment.h>
-
-#include <QtCore/QVector>
-#include <QtCore/QPair>
+#include <QVector>
+#include <QPair>
 
 namespace U2 {
 
-void MSAConsensusUtils::updateConsensus(const MAlignment& msa, QByteArray& cons, MSAConsensusAlgorithm* algo) {
-    U2Region r(0, msa.getLength());
-    updateConsensus(msa, r, cons, algo);
+void MSAConsensusUtils::updateConsensus(const MultipleAlignment& ma, QByteArray& cons, MSAConsensusAlgorithm* algo) {
+    U2Region r(0, ma->getLength());
+    updateConsensus(ma, r, cons, algo);
 }
 
-void MSAConsensusUtils::updateConsensus(const MAlignment& msa, const U2Region& region, QByteArray& cons, MSAConsensusAlgorithm* algo) {
+void MSAConsensusUtils::updateConsensus(const MultipleAlignment& ma, const U2Region& region, QByteArray& cons, MSAConsensusAlgorithm* algo) {
     QVector<U2Region> l;
     l.append(region);
-    updateConsensus(msa, l, cons, algo);
+    updateConsensus(ma, l, cons, algo);
 }
 
-void MSAConsensusUtils::updateConsensus(const MAlignment& msa, const QVector<U2Region>& regions, QByteArray& cons, MSAConsensusAlgorithm* algo) {
-    if (msa.isEmpty()) {
+void MSAConsensusUtils::updateConsensus(const MultipleAlignment& ma, const QVector<U2Region>& regions, QByteArray& cons, MSAConsensusAlgorithm* algo) {
+    if (ma->isEmpty()) {
         return;
     }
-    int aliLen = msa.getLength();
+    int aliLen = ma->getLength();
     if (cons.length()!=aliLen) {
         cons.resize(aliLen);
     }
+
     foreach(const U2Region& r, regions) {
         for (int i = r.startPos, n = r.endPos(); i < n ; i++) {
-            cons[i] = algo->getConsensusChar(msa, i);
+            cons[i] = algo->getConsensusChar(ma, i);
         }
     }
 }
 
 
-QString MSAConsensusUtils::getConsensusPercentTip(const MAlignment& msa, int pos, int minReportPercent, int maxReportChars) {
+QString MSAConsensusUtils::getConsensusPercentTip(const MultipleAlignment& ma, int pos, int minReportPercent, int maxReportChars) {
     QVector<QPair<int, char> > freqs(32); //TODO: try QVarLengthArray?
-    assert(pos>=0 && pos < msa.getLength());
-    int nSeq = msa.getNumRows();
+    assert(pos>=0 && pos < ma->getLength());
+    int nSeq = ma->getNumRows();
     assert(nSeq > 0);
     if (nSeq == 0) {
         return QString();
     }
     int gaps = 0;
     for (int seq = 0; seq < nSeq; seq++) {
-        uchar c = (uchar)msa.charAt(seq, pos);
+        uchar c = (uchar)ma->charAt(seq, pos);
         if (c >= 'A' && c <= 'Z') {
             int idx = c - 'A';
             freqs[idx].first++;
@@ -125,36 +124,36 @@ void MSAConsensusUtils::unpackConsensusCharsFromInt(quint32 val, char* charVal,
     }
 }
 
-uchar MSAConsensusUtils::getColumnFreqs(const MAlignment& ma, int pos, QVector<int>& freqsByChar,
-                                        int& nonGapChars, const QVector<qint64>& seqIdx) {
+uchar MSAConsensusUtils::getColumnFreqs(const MultipleAlignment& ma, int pos, QVector<int>& freqsByChar,
+                                        int& nonGapChars, const QVector<int>& seqIdx) {
     assert(freqsByChar.size() == 256);
     freqsByChar.fill(0);
     nonGapChars = 0;
     uchar maxC = 0;
     int  maxCFreq = 0;
     int* freqs = freqsByChar.data();
-    int nSeq = seqIdx.isEmpty() ? ma.getNumRows() : seqIdx.size();
+    int nSeq = seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size();
     for (qint64 seq = 0; seq < nSeq; seq++) {
-        uchar c = (uchar)ma.charAt( seqIdx.isEmpty() ? seq : seqIdx[ seq ],
+        uchar c = (uchar)ma->charAt( seqIdx.isEmpty() ? seq : seqIdx[ seq ],
                                     pos);
         freqs[c]++;
-        if (c!=MAlignment_GapChar && freqs[c] > maxCFreq) {
+        if (c!=U2Msa::GAP_CHAR && freqs[c] > maxCFreq) {
             maxCFreq = freqs[c];
             maxC = c;
         }
-        if (c!=MAlignment_GapChar) {
+        if (c!=U2Msa::GAP_CHAR) {
             nonGapChars++;
         }
     }
     return maxC;
 }
 
-quint32 MSAConsensusUtils::packConsensusCharsToInt(const MAlignment& msa, int pos, const int* mask4, bool gapsAffectPercents) {
+quint32 MSAConsensusUtils::packConsensusCharsToInt(const MultipleAlignment& ma, int pos, const int* mask4, bool gapsAffectPercents) {
     QVector<QPair<int, char> > freqs(32);
     int numNoGaps = 0;
-    int nSeq = msa.getNumRows();
+    int nSeq = ma->getNumRows();
     for (int seq = 0; seq < nSeq; seq++) {
-        uchar c = (uchar)msa.charAt(seq, pos);
+        uchar c = (uchar)ma->charAt(seq, pos);
         if (c >= 'A' && c <= 'Z') {
             int idx = c - 'A';
             freqs[idx].first++;
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.h
index 95a4b8e..58ab12e 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MSAConsensusUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,35 +22,34 @@
 #ifndef _U2_MSA_CONSENSUS_UTILS_H_
 #define _U2_MSA_CONSENSUS_UTILS_H_
 
-#include <U2Core/global.h>
-#include <U2Core/U2Region.h>
+#include <QByteArray>
 
-#include <QtCore/QByteArray>
+#include <U2Core/MultipleAlignment.h>
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 
 class MSAConsensusAlgorithm;
-class MAlignment;
 
 
 class U2ALGORITHM_EXPORT MSAConsensusUtils : public QObject {
     Q_OBJECT
 public:
 
-    static void updateConsensus(const MAlignment& msa, QByteArray& cons, MSAConsensusAlgorithm* algo);
+    static void updateConsensus(const MultipleAlignment& msa, QByteArray& cons, MSAConsensusAlgorithm* algo);
 
-    static void updateConsensus(const MAlignment& msa, const U2Region& region, QByteArray& cons, MSAConsensusAlgorithm* algo);
+    static void updateConsensus(const MultipleAlignment& msa, const U2Region& region, QByteArray& cons, MSAConsensusAlgorithm* algo);
 
-    static void updateConsensus(const MAlignment& msa, const QVector<U2Region>& region, QByteArray& cons, MSAConsensusAlgorithm* algo);
+    static void updateConsensus(const MultipleAlignment& msa, const QVector<U2Region>& region, QByteArray& cons, MSAConsensusAlgorithm* algo);
 
-    static QString getConsensusPercentTip(const MAlignment& msa, int pos, int minReportPercent, int maxReportChars);
+    static QString getConsensusPercentTip(const MultipleAlignment& msa, int pos, int minReportPercent, int maxReportChars);
 
     // mask4 must contain 4 descending percent values (>= used), example: 100, 75, 50, 33
     // countGaps tells if to include gaps into percent computation
     // result: up to 4 most used chars (from 'A' to 'Z') are packed into return value
     // WARN: the lowest val in mask must be >= 25
     // WARN: works only for alphabet chars (A - Z)
-    static quint32 packConsensusCharsToInt(const MAlignment& msa, int pos, const int* mask4, bool gapsAffectPercents);
+    static quint32 packConsensusCharsToInt(const MultipleAlignment& msa, int pos, const int* mask4, bool gapsAffectPercents);
 
     // up to 4 chars can be unpacked to charVal values, their percent ranges are saved to mark3Pos
     static void unpackConsensusCharsFromInt(quint32 val, char* charVal, int* maskPos);
@@ -58,8 +57,8 @@ public:
     // computes frequency by char. Returns the most frequent char that is not gap.
     // nonGapChars = sum of all non-gap characters
     // TODO: use var-length array instead of the vector!
-    static uchar getColumnFreqs(const MAlignment& ma, int pos, QVector<int>& freqsByChar,
-                                int &nonGapChars, const QVector <qint64>& seqIdx = QVector<qint64>());
+    static uchar getColumnFreqs(const MultipleAlignment& ma, int pos, QVector<int>& freqsByChar,
+                                int &nonGapChars, const QVector<int> &seqIdx = QVector<int>());
 
 };
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp b/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp
new file mode 100644
index 0000000..b5543d0
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp
@@ -0,0 +1,226 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QMetaEnum>
+
+#include <U2Core/U2SafePoints.h>
+
+#include "BuiltInConsensusAlgorithms.h"
+#include "MaConsensusAlgorithmSimpleExtended.h"
+
+namespace U2 {
+
+MaConsensusAlgorithmSimpleExtended::MaConsensusAlgorithmSimpleExtended(MaConsensusAlgorithmFactorySimpleExtended *factory, bool ignoreTrailingLeadingGaps, QObject *parent)
+    : MSAConsensusAlgorithm(factory, ignoreTrailingLeadingGaps, parent)
+{
+
+}
+
+MaConsensusAlgorithmSimpleExtended::Character MaConsensusAlgorithmSimpleExtended::character2Flag(char character) {
+    switch (character) {
+    case '-':
+        return Gap;
+    case 'A':
+        return A;
+    case 'C':
+        return C;
+    case 'G':
+        return G;
+    case 'T':
+        return T;
+    case 'W':
+        return W;
+    case 'R':
+        return R;
+    case 'M':
+        return M;
+    case 'K':
+        return K;
+    case 'Y':
+        return Y;
+    case 'S':
+        return S;
+    case 'B':
+        return B;
+    case 'V':
+        return V;
+    case 'H':
+        return H;
+    case 'D':
+        return D;
+    case 'N':
+        return N;
+    default:
+        return None;
+    }
+}
+
+char MaConsensusAlgorithmSimpleExtended::flag2Character(Character flag) {
+    switch (flag) {
+    case Gap:
+        return '-';
+    case A:
+        return 'A';
+    case C:
+        return 'C';
+    case G:
+        return 'G';
+    case T:
+        return 'T';
+    case W:
+        return 'W';
+    case R:
+        return 'R';
+    case M:
+        return 'M';
+    case K:
+        return 'K';
+    case Y:
+        return 'Y';
+    case S:
+        return 'S';
+    case B:
+        return 'B';
+    case V:
+        return 'V';
+    case H:
+        return 'H';
+    case D:
+        return 'D';
+    case N:
+        return 'N';
+    default:
+        return MaConsensusAlgorithmSimpleExtended::INVALID_CONS_CHAR;
+    }
+}
+
+char MaConsensusAlgorithmSimpleExtended::flags2Character(Characters flags) {
+    const QMetaEnum characterMetaEnum = MaConsensusAlgorithmSimpleExtended::staticMetaObject.enumerator(0);
+    for (int i = 0; i < characterMetaEnum.keyCount(); i++) {
+        const Characters currentFlags =  static_cast<Characters>(characterMetaEnum.value(i));
+        if ((flags & currentFlags) == flags) {
+            return flag2Character(static_cast<Character>(characterMetaEnum.value(i)));
+        }
+    }
+
+    return MaConsensusAlgorithmSimpleExtended::INVALID_CONS_CHAR;
+}
+
+char MaConsensusAlgorithmSimpleExtended::mergeCharacters(const QVector<char> &characters) {
+    Characters mergedFlag = None;
+    foreach (const char character, characters) {
+        mergedFlag |= character2Flag(character);
+    }
+    return flags2Character(mergedFlag);
+}
+
+QVector<QVector<char> > getFrequences(const MultipleAlignment &ma, int column, QVector<int> seqIdx) {
+    QVarLengthArray<int> frequencies(256);
+    memset(frequencies.data(), 0, frequencies.size() * sizeof(int));
+
+    const int nSeq = (seqIdx.isEmpty() ? ma->getNumRows() : seqIdx.size());
+    for (int seq = 0; seq < nSeq; seq++) {
+        const char c = ma->charAt(seqIdx.isEmpty() ? seq : seqIdx[seq], column);
+        frequencies[static_cast<int>(c)]++;
+    }
+
+    QVector<QVector<char> > sortedFrequencies(seqIdx.isEmpty() ? ma->getNumRows() + 1 : seqIdx.size() + 1);
+    for (int c = 'A'; c <= 'Y'; c++) {
+        sortedFrequencies[frequencies[c]] << static_cast<char>(c);
+    }
+    sortedFrequencies[frequencies['-']] << static_cast<char>('-');
+    return sortedFrequencies;
+}
+
+char MaConsensusAlgorithmSimpleExtended::getConsensusChar(const MultipleAlignment &ma, int column, QVector<int> seqIdx) const {
+    CHECK(filterIdx(seqIdx, ma, column), INVALID_CONS_CHAR);
+
+    QVector<QVector<char> > frequencies = getFrequences(ma, column, seqIdx);
+
+    char bestCharacter = INVALID_CONS_CHAR;
+    const int thresholdCount = qRound(static_cast<double>((frequencies.size() - 1) * getThreshold()) / 100);
+
+    for (int frequency = frequencies.size() - 1; frequency > 0; frequency--) {
+        CHECK_CONTINUE(0 < frequencies[frequency].size());
+        if (frequency >= thresholdCount && frequencies[frequency].size() == 1) {
+            // A single character that fits the threshold found
+            return frequencies[frequency].first();
+        }
+        if (frequency >= thresholdCount && frequencies[frequency].size() > 1) {
+            // Two characters that fit the threshold found
+            return mergeCharacters(frequencies[frequency]);
+        }
+        if (frequencies[frequency].size() > 1 || (frequencies[frequency].size() == 1 && bestCharacter != INVALID_CONS_CHAR)) {
+            // There are no characters that fit the threshold, but we can merge a bit less popular characters
+            return mergeCharacters(frequencies[frequency] << bestCharacter);
+        }
+        if (frequencies[frequency].size() == 1) {
+            // There are no characters that fit the threshold and we found a single the most popular character.
+            // We need more characters to merge them with this one.
+            bestCharacter = frequencies[frequency].first();
+        }
+    }
+
+    return INVALID_CONS_CHAR;
+}
+
+MaConsensusAlgorithmFactorySimpleExtended::MaConsensusAlgorithmFactorySimpleExtended(QObject *parent)
+    : MSAConsensusAlgorithmFactory(BuiltInConsensusAlgorithms::SIMPLE_EXTENDED_ALGO,
+                                   ConsensusAlgorithmFlag_Nucleic | ConsensusAlgorithmFlag_SupportThreshold | ConsensusAlgorithmFlag_AvailableForChromatogram,
+                                   parent)
+{
+
+}
+
+MSAConsensusAlgorithm *MaConsensusAlgorithmFactorySimpleExtended::createAlgorithm(const MultipleAlignment & /*ma*/, bool ignoreTrailingLeadingGaps, QObject *parent) {
+    return new MaConsensusAlgorithmSimpleExtended(this, ignoreTrailingLeadingGaps, parent);
+}
+
+QString MaConsensusAlgorithmFactorySimpleExtended::getDescription() const {
+    return tr("The algorithm selects the best character from the extended DNA alphabet. "
+              "Only bases with frequences which are greater than a threshold value are taken into account.");
+}
+
+QString MaConsensusAlgorithmFactorySimpleExtended::getName() const {
+    return tr("Simple extended");
+}
+
+int MaConsensusAlgorithmFactorySimpleExtended::getMinThreshold() const {
+    return 50;
+}
+
+int MaConsensusAlgorithmFactorySimpleExtended::getMaxThreshold() const {
+    return 100;
+}
+
+int MaConsensusAlgorithmFactorySimpleExtended::getDefaultThreshold() const {
+    return 100;
+}
+
+QString MaConsensusAlgorithmFactorySimpleExtended::getThresholdSuffix() const {
+    return "%";
+}
+
+bool MaConsensusAlgorithmFactorySimpleExtended::isSequenceLikeResult() const {
+    return true;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.h b/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.h
new file mode 100644
index 0000000..2ded3af
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.h
@@ -0,0 +1,139 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_CONSENSUS_ALGORITHM_SIMPLE_EXTENDED_H_
+#define _U2_MA_CONSENSUS_ALGORITHM_SIMPLE_EXTENDED_H_
+
+#include "MSAConsensusAlgorithm.h"
+
+namespace U2 {
+
+class MaConsensusAlgorithmFactorySimpleExtended;
+
+/**
+ * Characters calculation rules:
+ * 1. Threshold can be from 50% to 100%.
+ * 2. Meaningful (not gap) characters merge with each other by the rules of the extended DNA alphabet: A + C = M, C + S = S, G + Y = B.
+ * 3. Gap merges with any meaningful character to symbol 'N'.
+ * 4. If there is the only one character that fits the threshold, the it is the result.
+ * 5. If there are two characters that fit the threshold, the the merged character from these two characters is the result.
+ *    It can be in case of threshold is equal 50%, and both characters are spotted in 50% of rows.
+ * 6. If there are no characters that fit the threshold, then most popular symbols are involved to the calculations:
+ *    - The most popular characters are taken (with equal popularity).
+ *    - If there are several characters, then they are merged and the merged character is the result.
+ *    - If there is only one character, then a bit less popular characters are involved to the calculations.
+ *    - A set of "a bit less popular" characters and the most popular character are merged into a single character. This merged character is the result.
+ *    - Other not-so-popular-characters are ignored.
+ *
+ * Examples:
+ *
+ * threshold = 100%, Column = AAAAAAAAAA
+ *      The result character: A - it is spotted in 100% of rows, it fits the threshold
+ *
+ * threshold = 60%, Column = ------AAAA
+ *      The result character: '-' - it is spotted in 60% of rows, it fits the threshold
+ *
+ * threshold = 80%, Column = AAAAAAAAAC
+ *      The result character: A - it is spotted in 90% of rows, it fits the threshold
+ *
+ * threshold = 80%, Column = AAAAAAACCC
+ *      The result character: M - both A and C are spotted too seldom, the most popular character A is taken, it merges with a bit less popular C
+ *
+ * threshold = 80%, Column = AAAAGGGCCC
+ *      The result character: V - all A, C and G are spotted too seldom, the most popular character A is taken, it merges with a bit less popular C and G. Both C and G are taken, because they have the same popularity
+ *
+ * threshold = 80%, Column = AAAAAGGGGG
+ *      The result character: R - both A and G are spotted too seldom, the most popular characters A and G are taken, they merges together to a result. Both A and G are taken, because they have the same popularity
+ *
+ * threshold = 50%, Column = AAAAAGGGGG
+ *      The result character: R - both A and G fit the threshold, the result is the merged character
+ *
+ * threshold = 50%, Column = AAAAA-----
+ *      The result character: N - both A and '-' fit the threshold, the result is the merged character. Gap with a meaningful character A merges to N
+ *
+ * threshold = 50%, Column = AAAMMMMCCC
+ *      The result character: M - M is the most popular character, it is merged with A and C to M.
+ *
+ * threshold = 50%, Column = AAAMMMMTTT
+ *      The result character: V - M is the most popular character, it is merged with A and T to V.
+ */
+
+class MaConsensusAlgorithmSimpleExtended : public MSAConsensusAlgorithm {
+    Q_OBJECT
+public:
+    MaConsensusAlgorithmSimpleExtended(MaConsensusAlgorithmFactorySimpleExtended *factory, bool ignoreTrailingLeadingGaps, QObject *parent);
+
+    char getConsensusChar(const MultipleAlignment &ma, int column, QVector<int> seqIdx = QVector<int>()) const;
+
+    enum Character {
+        None = 0,
+        Gap = 1 << 0,
+        A = 1 << 1,
+        C = 1 << 2,
+        G = 1 << 3,
+        T = 1 << 4,
+        W = A + T,
+        R = A + G,
+        M = A + C,
+        K = T + G,
+        Y = T + C,
+        S = G + C,
+        B = C + G + T,
+        V = A + C + G,
+        H = A + C + T,
+        D = A + G + T,
+        N = A + C + G + T + Gap
+    };
+    Q_DECLARE_FLAGS(Characters, Character)
+
+private:
+    Q_ENUMS(Character)
+
+    static Character character2Flag(char character);
+    static char flag2Character(Character flag);
+    static char flags2Character(Characters flags);
+    static char mergeCharacters(const QVector<char> &characters);
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(MaConsensusAlgorithmSimpleExtended::Characters)
+
+class MaConsensusAlgorithmFactorySimpleExtended : public MSAConsensusAlgorithmFactory {
+    Q_OBJECT
+public:
+    MaConsensusAlgorithmFactorySimpleExtended(QObject *parent = NULL);
+
+    MSAConsensusAlgorithm *createAlgorithm(const MultipleAlignment &ma, bool ignoreTrailingLeadingGaps, QObject *parent);
+
+    QString getDescription() const;
+    QString getName() const;
+
+    int getMinThreshold() const;
+    int getMaxThreshold() const;
+    int getDefaultThreshold() const;
+
+    QString getThresholdSuffix() const;
+
+    bool isSequenceLikeResult() const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_CONSENSUS_ALGORITHM_SIMPLE_EXTENDED_H_
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.cpp
index e30308b..74b2453 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.h b/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.h
index 2984064..f0e286d 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/BuiltInDistanceAlgorithms.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.cpp
index 4165b26..9c34262 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.cpp
@@ -1,6 +1,6 @@
-/**
+/**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,49 +56,42 @@ void MSADistanceAlgorithmFactory::resetFlag( DistanceAlgorithmFlag flag ){
 //////////////////////////////////////////////////////////////////////////
 // Algorithm
 
-MSADistanceAlgorithm::MSADistanceAlgorithm(MSADistanceAlgorithmFactory* _factory, const MAlignment& _ma)
+MSADistanceAlgorithm::MSADistanceAlgorithm(MSADistanceAlgorithmFactory* _factory, const MultipleSequenceAlignment& _ma)
 : Task(tr("MSA distance algorithm \"%1\" task").arg(_factory->getName()), TaskFlag_None)
 , factory(_factory)
-, ma(_ma)
+, ma(_ma->getCopy())
 , excludeGaps(true)
 , isSimilarity(true)
 {
-    int rowsNumber = ma.getNumRows();
+    int rowsNumber = ma->getNumRows();
     qint64 requiredMemory = sizeof(int) * rowsNumber * rowsNumber / 2 + sizeof(QVarLengthArray<int>) * rowsNumber;
     bool memoryAcquired = memoryLocker.tryAcquire(requiredMemory);
     CHECK_EXT(memoryAcquired, setError(QString("There is not enough memory to calculating distances matrix, required %1 megabytes").arg(requiredMemory / 1024 / 1024)), );
-    distanceTable.reserve(rowsNumber);
-    for (int i = 0; i < rowsNumber; i++) {
-        if (isCanceled()) {
-            break;
-        }
-        distanceTable.append(QVarLengthArray<int>(i + 1));
-        memset(distanceTable[i].data(), 0, (i + 1) * sizeof(int));
-    }
+    distanceMatrix = MSADistanceMatrix(ma, getExcludeGapsFlag(), false);
 }
 
-int MSADistanceAlgorithm::getSimilarity(int row1, int row2) {
+int MSADistanceAlgorithm::getSimilarity (int row1, int row2, bool _usePercents) {
     lock.lock();
-    int res = 0;
-    if(row2 > row1) {
-        res = distanceTable[row2][row1];
-    } else {
-        res = distanceTable[row1][row2];
-    }
+    int res = distanceMatrix.getSimilarity(row1, row2, _usePercents);
     lock.unlock();
     return res;
 }
 
+const MSADistanceMatrix& MSADistanceAlgorithm::getMatrix() const{
+    QMutexLocker locker(&lock);
+    return distanceMatrix;
+}
+
 void MSADistanceAlgorithm::setDistanceValue(int row1, int row2, int distance) {
-    if(row2 > row1) {
-        distanceTable[row2][row1] = distance;
+    if (row2 > row1) {
+        distanceMatrix.table[row2][row1] = distance;
     } else {
-        distanceTable[row1][row2] = distance;
+        distanceMatrix.table[row1][row2] = distance;
     }
 }
 
 void MSADistanceAlgorithm::fillTable() {
-    int nSeq = ma.getNumRows();
+    int nSeq = ma->getNumRows();
     for (int i = 0; i < nSeq; i++) {
         for (int j = i; j < nSeq; j++) {
             if (isCanceled()) {
@@ -112,35 +105,46 @@ void MSADistanceAlgorithm::fillTable() {
     }
 }
 
+void MSADistanceAlgorithm::setExcludeGaps(bool _excludeGaps) {
+    excludeGaps = _excludeGaps;
+    distanceMatrix.excludeGaps = _excludeGaps;
+}
 
-MSADistanceMatrix::MSADistanceMatrix(const MSADistanceAlgorithm *algo, bool _usePercents)
-: distanceTable(algo->distanceTable), usePercents(_usePercents), excludeGaps(false) {
-    excludeGaps = algo->getExcludeGapsFlag();
-    int nSeq = algo->ma.getNumRows();
-    alignmentLength = algo->ma.getLength();
+MSADistanceMatrix::MSADistanceMatrix() 
+: usePercents(true), excludeGaps(false), alignmentLength(0) {
+}
+
+MSADistanceMatrix::MSADistanceMatrix(const MultipleSequenceAlignment& ma, bool _excludeGaps, bool _usePercents)
+: usePercents(_usePercents), excludeGaps(_excludeGaps), alignmentLength(ma->getLength()) {
+    int nSeq = ma->getNumRows();
+    table.reserve(nSeq);
     for (int i = 0; i < nSeq; i++) {
-        const MAlignmentRow& row = algo->ma.getRow(i);
-        seqsUngappedLenghts.append(row.getUngappedLength());
+        table.append(QVarLengthArray<int>(i + 1));
+        memset(table[i].data(), 0, (i + 1) * sizeof(int));
+        seqsUngappedLenghts.append(ma->getMsaRow(i)->getUngappedLength());
     }
 }
 
-int MSADistanceMatrix::getSimilarity(int refRow, int row) {
-    if (refRow >= distanceTable.size() || row >= distanceTable.size()) {
+int  MSADistanceMatrix::getSimilarity(int row1, int row2) const {
+    return getSimilarity(row1, row2, usePercents);
+}
+
+int MSADistanceMatrix::getSimilarity (int refRow, int row, bool _usePercents) const {
+    if (refRow >= table.size() || row >= table.size()) {
         return -1;
     }
-    if(usePercents) {
+    if (_usePercents) {
         int refSeqLength = excludeGaps ? seqsUngappedLenghts.at(refRow) : alignmentLength;
-        if(refRow > row) {
-            return distanceTable[refRow][row] * 100 / refSeqLength;
+        if (refRow > row) {
+            return qRound((double)table[refRow][row] * 100 / refSeqLength);
         } else {
-            return distanceTable[row][refRow] * 100 / refSeqLength;
+            return qRound((double)table[row][refRow] * 100 / refSeqLength);
         }
-    }
-    else {
-        if(refRow > row) {
-            return distanceTable[refRow][row];
+    } else {
+        if (refRow > row) {
+            return table[refRow][row];
         } else {
-            return distanceTable[row][refRow];
+            return table[row][refRow];
         }
     }
 }
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.h b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.h
index 211ed2c..f7a3eec 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithm.h
@@ -1,6 +1,6 @@
-/**
+/**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,17 +22,18 @@
 #ifndef _U2_MSA_DISTANCE_ALGORITHM_H_
 #define _U2_MSA_DISTANCE_ALGORITHM_H_
 
+#include <QMutex>
+#include <QVarLengthArray>
+#include <QVector>
+
 #include <U2Core/AppResources.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
-#include <QtCore/QVarLengthArray>
-#include <QtCore/QMutex>
 
 namespace U2 {
 
-class MAlignment;
-class MSADistanceAlgorithm;
 class DNAAlphabet;
+class MSADistanceAlgorithm;
 class MSADistanceMatrix;
 
 enum DistanceAlgorithmFlag {
@@ -51,7 +52,7 @@ class U2ALGORITHM_EXPORT MSADistanceAlgorithmFactory : public QObject {
 public:
     MSADistanceAlgorithmFactory(const QString& algoId, DistanceAlgorithmFlags flags, QObject* p = NULL);
 
-    virtual MSADistanceAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent = NULL) = 0;
+    virtual MSADistanceAlgorithm* createAlgorithm(const MultipleSequenceAlignment& ma, QObject* parent = NULL) = 0;
 
     QString getId() const {return algorithmId;}
 
@@ -75,15 +76,37 @@ protected:
 
 typedef QVarLengthArray<QVarLengthArray<int> > varLengthMatrix;
 
+class U2ALGORITHM_EXPORT MSADistanceMatrix {
+    friend class MSADistanceAlgorithm;
+private:
+    MSADistanceMatrix();
+    MSADistanceMatrix(const MultipleSequenceAlignment& ma, bool _excludeGaps, bool _usePercents);
+
+public:
+    bool isEmpty(){ return table.isEmpty(); }
+    int getSimilarity(int row1, int row2) const;
+    int getSimilarity(int row1, int row2, bool _usePercents) const;
+    void setPercentSimilarity(bool _usePercents) { usePercents = _usePercents; }
+    bool isPercentSimilarity() { return usePercents; }
+
+protected:
+    varLengthMatrix                             table;
+    bool                                        usePercents;
+    bool                                        excludeGaps;
+    QVector<int>                                seqsUngappedLenghts;
+    int                                         alignmentLength;
+};
+
 class U2ALGORITHM_EXPORT MSADistanceAlgorithm : public Task {
     Q_OBJECT
 
-    friend class MSADistanceMatrix;
 public:
-    MSADistanceAlgorithm(MSADistanceAlgorithmFactory* factory, const MAlignment& ma);
+    MSADistanceAlgorithm(MSADistanceAlgorithmFactory* factory, const MultipleSequenceAlignment& ma);
 
-    int getSimilarity(int row1, int row2);
+    int getSimilarity(int row1, int row2, bool usePercents);
 
+    const MSADistanceMatrix& getMatrix() const;
+        
     virtual QString getDescription() const {return factory->getDescription();}
 
     virtual QString getName() const {return factory->getName();}
@@ -92,7 +115,7 @@ public:
 
     bool isSimilarityMeasure() const {return isSimilarity;}
 
-    void setExcludeGaps(bool _excludeGaps) {excludeGaps = _excludeGaps;}
+    void setExcludeGaps(bool _excludeGaps);
 
     MSADistanceAlgorithmFactory* getFactory() const {return factory;}
 
@@ -101,36 +124,18 @@ public:
     void setDistanceValue(int row1, int row2, int distance);
 
 private:
-    varLengthMatrix              distanceTable;
+    MSADistanceMatrix            distanceMatrix;
     MSADistanceAlgorithmFactory* factory;
     MemoryLocker                 memoryLocker;
 
 protected:
     virtual void fillTable();
     virtual int calculateSimilarity(int , int ){return 0;}
-    MAlignment                                  ma;
-    QMutex                                      lock;
+    MultipleSequenceAlignment                   ma;
+    mutable QMutex                              lock;
     bool                                        excludeGaps;
     bool                                        isSimilarity;
 };
-class U2ALGORITHM_EXPORT MSADistanceMatrix : public QObject{
-    Q_OBJECT
-public:
-    MSADistanceMatrix(const MSADistanceAlgorithm *algo, bool _usePercents);
-    ~MSADistanceMatrix() {}
-    bool isEmpty(){ return distanceTable.isEmpty();}
-    int getSimilarity(int row1, int row2);
-    void showSimilarityInPercents(bool _usePercents) {usePercents = _usePercents;}
-    bool areUsePercents() {return usePercents;}
-
-protected:
-    varLengthMatrix                             distanceTable;
-    bool                                        usePercents;
-    bool                                        excludeGaps;
-    QVector<int>                                seqsUngappedLenghts;
-    int                                         alignmentLength;
-};
-
 
 }//namespace
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.cpp
index fd0f839..c21eb04 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "MSADistanceAlgorithmHamming.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -41,7 +41,7 @@ QString MSADistanceAlgorithmFactoryHamming::getName() const {
 }
 
 
-MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHamming::createAlgorithm(const MAlignment& ma, QObject* ) {
+MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHamming::createAlgorithm(const MultipleSequenceAlignment& ma, QObject* ) {
     MSADistanceAlgorithm* res = new MSADistanceAlgorithmHamming(this, ma);
      if(flags.testFlag(DistanceAlgorithmFlag_ExcludeGaps)){
         res->setExcludeGaps(true);
@@ -55,20 +55,20 @@ MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHamming::createAlgorithm(const
 // Algorithm
 
 void MSADistanceAlgorithmHamming::run() {
-    int nSeq = ma.getNumRows();
+    int nSeq = ma->getNumRows();
     for (int i = 0; i < nSeq; i++) {
         for (int j = i; j < nSeq; j++) {
             int sim = 0;
-            for (int k = 0; k < ma.getLength(); k++) {
+            for (int k = 0; k < ma->getLength(); k++) {
                 if (isCanceled()) {
                     return;
                 }
-                bool dissimilar = (ma.charAt(i, k) != ma.charAt(j, k));
+                bool dissimilar = (ma->charAt(i, k) != ma->charAt(j, k));
 
                 if(!excludeGaps){
                     if (dissimilar) sim++;
                 }else{
-                    if (dissimilar && (ma.charAt(i, k)!=MAlignment_GapChar && ma.charAt(j, k)!=MAlignment_GapChar)) sim++;
+                    if (dissimilar && (ma->charAt(i, k)!=U2Msa::GAP_CHAR && ma->charAt(j, k)!=U2Msa::GAP_CHAR)) sim++;
                 }
             }
             lock.lock();
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.h b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.h
index 66f572f..31cff41 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHamming.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ class U2ALGORITHM_EXPORT MSADistanceAlgorithmFactoryHamming: public MSADistanceA
 public:
     MSADistanceAlgorithmFactoryHamming(QObject* p = NULL);
 
-    virtual MSADistanceAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSADistanceAlgorithm* createAlgorithm(const MultipleSequenceAlignment& ma, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -51,7 +51,7 @@ public:
 class U2ALGORITHM_EXPORT MSADistanceAlgorithmHamming : public MSADistanceAlgorithm {
     Q_OBJECT
 public:
-    MSADistanceAlgorithmHamming(MSADistanceAlgorithmFactoryHamming* f, const MAlignment& ma)
+    MSADistanceAlgorithmHamming(MSADistanceAlgorithmFactoryHamming* f, const MultipleSequenceAlignment& ma)
         : MSADistanceAlgorithm(f, ma){ isSimilarity = false;}
 
     virtual void run();
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp
index 6cada18..5fbd13c 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -47,7 +47,7 @@ QString MSADistanceAlgorithmFactoryHammingRevCompl::getName() const {
 }
 
 
-MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHammingRevCompl::createAlgorithm(const MAlignment& ma, QObject* ) {
+MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHammingRevCompl::createAlgorithm(const MultipleSequenceAlignment& ma, QObject* ) {
     return new MSADistanceAlgorithmHammingRevCompl(this, ma);
 }
 
@@ -55,25 +55,24 @@ MSADistanceAlgorithm* MSADistanceAlgorithmFactoryHammingRevCompl::createAlgorith
 // Algorithm
 
 void MSADistanceAlgorithmHammingRevCompl::run() {
-    DNATranslation* compTT = AppContext::getDNATranslationRegistry()->
-        lookupComplementTranslation(ma.getAlphabet());
+    DNATranslation* compTT = AppContext::getDNATranslationRegistry()->lookupComplementTranslation(ma->getAlphabet());
 
     assert (compTT != NULL);
 
     DNATranslation* trans = compTT ;
-    int nSeq = ma.getNumRows();
-    MAlignment revtransl;
-    revtransl.setAlphabet(ma.getAlphabet());
+    int nSeq = ma->getNumRows();
+    MultipleSequenceAlignment revtransl;
+    revtransl->setAlphabet(ma->getAlphabet());
     U2OpStatus2Log os;
     for (int i = 0; i < nSeq; i++) {
         if (isCanceled()) {
             return;
         }
-        QByteArray arr = ma.getRow(i).toByteArray(ma.getLength(), os);
+        QByteArray arr = ma->getMsaRow(i)->toByteArray(os, ma->getLength());
         trans->translate(arr.data(), arr.length());
         TextUtils::reverse(arr.data(), arr.length());
 
-        revtransl.addRow(ma.getRow(i).getName(), arr, os);
+        revtransl->addRow(ma->getMsaRow(i)->getName(), arr);
 
         CHECK_OP_EXT(os, setError(tr("An unexpected error has occurred during running"
                                       " the Hamming reverse-complement algorithm.")),);
@@ -82,11 +81,11 @@ void MSADistanceAlgorithmHammingRevCompl::run() {
     for (int i = 0; i < nSeq; i++) {
         for (int j = i; j < nSeq; j++) {
             int sim = 0;
-            for (int k = 0; k < ma.getLength(); k++) {
+            for (int k = 0; k < ma->getLength(); k++) {
                 if (isCanceled()) {
                     return;
                 }
-                if (ma.charAt(i, k) == revtransl.charAt(j, k)) {
+                if (ma->charAt(i, k) == revtransl->charAt(j, k)) {
                     sim++;
                 }
             }
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.h b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.h
index 93a93bb..ce2d973 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ class U2ALGORITHM_EXPORT MSADistanceAlgorithmFactoryHammingRevCompl: public MSAD
 public:
     MSADistanceAlgorithmFactoryHammingRevCompl(QObject* p = NULL);
 
-    virtual MSADistanceAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSADistanceAlgorithm* createAlgorithm(const MultipleSequenceAlignment& ma, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -45,7 +45,7 @@ public:
 class U2ALGORITHM_EXPORT MSADistanceAlgorithmHammingRevCompl : public MSADistanceAlgorithm {
     Q_OBJECT
 public:
-    MSADistanceAlgorithmHammingRevCompl(MSADistanceAlgorithmFactoryHammingRevCompl* f, const MAlignment& ma)
+    MSADistanceAlgorithmHammingRevCompl(MSADistanceAlgorithmFactoryHammingRevCompl* f, const MultipleSequenceAlignment& ma)
         : MSADistanceAlgorithm(f, ma){}
 
     virtual void run();
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp
index 03e3bfb..f86fcbf 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.h b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.h
index 9a85402..912a081 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "MSADistanceAlgorithm.h"
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.cpp b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.cpp
index 6183bcb..d82179c 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "MSADistanceAlgorithmSimilarity.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -41,7 +41,7 @@ QString MSADistanceAlgorithmFactorySimilarity::getName() const {
 }
 
 
-MSADistanceAlgorithm* MSADistanceAlgorithmFactorySimilarity::createAlgorithm(const MAlignment& ma, QObject* ) {
+MSADistanceAlgorithm* MSADistanceAlgorithmFactorySimilarity::createAlgorithm(const MultipleSequenceAlignment& ma, QObject* ) {
     MSADistanceAlgorithm* res = new MSADistanceAlgorithmSimilarity(this, ma);
     if(flags.testFlag(DistanceAlgorithmFlag_ExcludeGaps)){
         res->setExcludeGaps(true);
@@ -55,20 +55,20 @@ MSADistanceAlgorithm* MSADistanceAlgorithmFactorySimilarity::createAlgorithm(con
 // Algorithm
 
 void MSADistanceAlgorithmSimilarity::run() {
-    int nSeq = ma.getNumRows();
+    int nSeq = ma->getNumRows();
     for (int i = 0; i < nSeq; i++) {
         for (int j = i; j < nSeq; j++) {
             int sim = 0;
-            for (int k = 0; k < ma.getLength(); k++) {
+            for (int k = 0; k < ma->getLength(); k++) {
                 if (isCanceled()) {
                     return;
                 }
-                bool similar = (ma.charAt(i, k) == ma.charAt(j, k));
+                bool similar = (ma->charAt(i, k) == ma->charAt(j, k));
 
                 if(!excludeGaps){
                     if (similar) sim++;
                 }else{
-                    if (similar && ma.charAt(i, k)!=MAlignment_GapChar) sim++;
+                    if (similar && ma->charAt(i, k)!=U2Msa::GAP_CHAR) sim++;
                 }
 
             }
diff --git a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.h b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.h
index 82b6cc7..e478781 100644
--- a/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.h
+++ b/src/corelibs/U2Algorithm/src/util_msa_distance/MSADistanceAlgorithmSimilarity.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ class U2ALGORITHM_EXPORT MSADistanceAlgorithmFactorySimilarity: public MSADistan
 public:
     MSADistanceAlgorithmFactorySimilarity(QObject* p = NULL);
 
-    virtual MSADistanceAlgorithm* createAlgorithm(const MAlignment& ma, QObject* parent);
+    virtual MSADistanceAlgorithm* createAlgorithm(const MultipleSequenceAlignment& ma, QObject* parent);
 
     virtual QString getDescription() const;
 
@@ -51,7 +51,7 @@ public:
 class U2ALGORITHM_EXPORT MSADistanceAlgorithmSimilarity : public MSADistanceAlgorithm {
     Q_OBJECT
 public:
-    MSADistanceAlgorithmSimilarity(MSADistanceAlgorithmFactorySimilarity* f, const MAlignment& ma)
+    MSADistanceAlgorithmSimilarity(MSADistanceAlgorithmFactorySimilarity* f, const MultipleSequenceAlignment& ma)
         : MSADistanceAlgorithm(f, ma){isSimilarity = true;}
 
     virtual void run();
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.cpp
index 58955f9..b102a2c 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QClipboard>
+#include <QApplication>
+#include <QClipboard>
 #include <QMimeData>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -40,7 +35,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LocalFileAdapter.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -51,7 +46,7 @@
 
 namespace U2{
 
-CreateSubalignmentTask::CreateSubalignmentTask(MAlignmentObject *maObj, const CreateSubalignmentSettings &settings)
+CreateSubalignmentTask::CreateSubalignmentTask(MultipleSequenceAlignmentObject *maObj, const CreateSubalignmentSettings &settings)
     : DocumentProviderTask(tr("Create sub-alignment: %1").arg(maObj->getDocument()->getName()), TaskFlags_NR_FOSCOE),
     origMAObj(maObj), cfg(settings)
 {
@@ -60,8 +55,6 @@ CreateSubalignmentTask::CreateSubalignmentTask(MAlignmentObject *maObj, const Cr
 }
 
 void CreateSubalignmentTask::prepare() {
-    QString ext = cfg.url.completeFileSuffix();
-
     DocumentFormatRegistry *dfr = AppContext::getDocumentFormatRegistry();
     DocumentFormat *dfd = dfr->getFormatById(cfg.formatIdToSave);
 
@@ -74,8 +67,8 @@ void CreateSubalignmentTask::prepare() {
         resultDocument = dfd->createNewLoadedDocument(iof, cfg.url, stateInfo, hints);
         CHECK_OP(stateInfo, );
 
-        MAlignment msa = origMAObj->getMAlignment();
-        resultMAObj = MAlignmentImporter::createAlignment(resultDocument->getDbiRef(), msa, stateInfo);
+        MultipleSequenceAlignment msa = origMAObj->getMsaCopy();
+        resultMAObj = MultipleSequenceAlignmentImporter::createAlignment(resultDocument->getDbiRef(), msa, stateInfo);
         CHECK_OP(stateInfo, );
         resultMAObj->setGHints(new GHintsDefaultImpl(origMAObj->getGHintsMap()));
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.h b/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.h
index d98f5f4..471fc54 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/CreateSubalignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/U2Region.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentProviderTask.h>
 
@@ -49,15 +49,15 @@ public:
 class U2ALGORITHM_EXPORT CreateSubalignmentTask : public DocumentProviderTask {
     Q_OBJECT
 public:
-    CreateSubalignmentTask(MAlignmentObject* _maObj, const CreateSubalignmentSettings& settings );
+    CreateSubalignmentTask(MultipleSequenceAlignmentObject* _maObj, const CreateSubalignmentSettings& settings );
 
     virtual void prepare();
     const CreateSubalignmentSettings& getSettings() { return cfg; }
 
 private:
     Document*                   origDoc;
-    MAlignmentObject*           origMAObj;
-    MAlignmentObject*           resultMAObj;
+    MultipleSequenceAlignmentObject*           origMAObj;
+    MultipleSequenceAlignmentObject*           resultMAObj;
 
     CreateSubalignmentSettings  cfg;
     bool                        createCopy;
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.cpp
deleted file mode 100644
index 0bf1454..0000000
--- a/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/GHints.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MSAUtils.h>
-#include <U2Core/U2Mod.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/UserApplicationsSettings.h>
-
-#include "MAlignmentUtilTasks.h"
-
-
-namespace U2 {
-
-//////////////////////////////////////////////////////////////////////////
-/// TranslateMSA2AminoTask
-
-TranslateMSA2AminoTask::TranslateMSA2AminoTask( MAlignmentObject* obj )
-: Task(tr("Translate nucleic alignment to amino"), TaskFlags_FOSE_COSC), maObj(obj)
-{
-    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
-    SAFE_POINT_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("Multiple alignment already has amino-acid alphabet")),);
-
-    QList<DNATranslation*> translations =
-        AppContext::getDNATranslationRegistry()->lookupTranslation(maObj->getAlphabet(), DNATranslationType_NUCL_2_AMINO);
-    CHECK_EXT(translations.isEmpty(), setError(tr("Unable to find suitable translation for %1").arg(maObj->getGObjectName())), );
-
-    translation = AppContext::getDNATranslationRegistry()->getStandardGeneticCodeTranslation(maObj->getAlphabet());
-}
-
-TranslateMSA2AminoTask::TranslateMSA2AminoTask( MAlignmentObject* obj, const QString& translationId )
-: Task(tr("Translate nucleic alignment to amino"), TaskFlags_FOSE_COSC), maObj(obj)
-{
-    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
-    SAFE_POINT_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("Multiple alignment already has amino-acid alphabet")),);
-
-    translation = AppContext::getDNATranslationRegistry()->lookupTranslation(translationId);
-}
-
-
-void TranslateMSA2AminoTask::run() {
-    SAFE_POINT_EXT(NULL != translation, setError(tr("Invalid translation object")),);
-
-    QList<DNASequence> lst = MSAUtils::ma2seq(maObj->getMAlignment(), true);
-    resultMA = MAlignment(maObj->getMAlignment().getName(),translation->getDstAlphabet()) ;
-
-    foreach (const DNASequence& dna, lst) {
-        int buflen = dna.length() / 3;
-        QByteArray buf(buflen,'\0');
-        translation->translate(dna.seq.constData(), dna.length(), buf.data(), buflen);
-        buf.replace("*","X");
-        resultMA.addRow(dna.getName(), buf, stateInfo);
-    }
-}
-
-
-Task::ReportResult TranslateMSA2AminoTask::report() {
-    if (!resultMA.isEmpty()) {
-        maObj->setMAlignment(resultMA);
-    }
-
-    return ReportResult_Finished;
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-/// AlignInAminoFormTask
-
-AlignInAminoFormTask::AlignInAminoFormTask( MAlignmentObject* obj, AlignGObjectTask* t, const QString& trId )
-: Task (tr("Align in amino form"), TaskFlags_FOSE_COSC), alignTask(t), maObj(obj), clonedObj(NULL), traslId(trId), tmpDoc(NULL)
-{
-    setMaxParallelSubtasks(1);
-}
-
-AlignInAminoFormTask::~AlignInAminoFormTask() {
-    delete tmpDoc;
-}
-
-void AlignInAminoFormTask::prepare() {
-    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
-    CHECK_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("AlignInAminoFormTask: Input alphabet is not nucleic!")), );
-    CHECK_EXT(!maObj->getMAlignment().isEmpty(), setError(tr("AlignInAminoFormTask: Input alignment is empty!")), );
-
-    MAlignment msa = maObj->getMAlignment();
-    const U2DbiRef& dbiRef = maObj->getEntityRef().dbiRef;
-
-    //Create temporal document for the workflow run task
-    const AppSettings* appSettings = AppContext::getAppSettings();
-    SAFE_POINT_EXT(NULL != appSettings, setError(tr("Invalid applications settings detected")), );
-
-    UserAppsSettings* usersSettings = appSettings->getUserAppsSettings();
-    SAFE_POINT_EXT(NULL != usersSettings, setError(tr("Invalid users applications settings detected")), );
-    const QString tmpDirPath = usersSettings->getCurrentProcessTemporaryDirPath();
-    U2OpStatus2Log os;
-    const QString fileName = GUrlUtils::prepareTmpFileLocation(tmpDirPath, "tmpAlignment", "fasta", os);
-
-    IOAdapterFactory * iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(fileName));
-    const Document* maDocument = maObj->getDocument();
-    SAFE_POINT_EXT(NULL != maDocument, setError(tr("Invalid MSA document detected")), );
-    DocumentFormat* docFormat = maDocument->getDocumentFormat();
-    tmpDoc = docFormat->createNewLoadedDocument(iof, fileName, os);
-    CHECK_OP(os, );
-
-    //Create copy of multiple alignment object
-    clonedObj = MAlignmentImporter::createAlignment(dbiRef, msa, stateInfo);
-    CHECK_OP(stateInfo, );
-    clonedObj->setGHints(new GHintsDefaultImpl(maObj->getGHintsMap()));
-
-    tmpDoc->addObject(clonedObj);
-
-    alignTask->setMAObject(clonedObj);
-    addSubTask(new TranslateMSA2AminoTask(clonedObj,traslId));
-    addSubTask(alignTask);
-}
-
-void AlignInAminoFormTask::run() {
-    CHECK_OP(stateInfo, );
-
-    SAFE_POINT_EXT(NULL != clonedObj, setError(tr("NULL clonedObj in AlignInAminoFormTask::prepare!")),);
-
-    const MAlignment &newMA = clonedObj->getMAlignment();
-    const QList<MAlignmentRow>& rows = newMA.getRows();
-
-    //Create gap map from amino-acid alignment
-    U2OpStatus2Log os;
-    foreach (const MAlignmentRow& row, rows) {
-        const int rowIdx = MSAUtils::getRowIndexByName(maObj->getMAlignment(), row.getName());
-        const MAlignmentRow curRow = maObj->getMAlignment().getRow(row.getName());
-        SAFE_POINT_EXT(rowIdx >= 0, setError(tr("Can not find row %1 in original alignment.").arg(row.getName())),);
-
-        QList<U2MsaGap> gapsList;
-        foreach(const U2MsaGap& gap, row.getGapModel()) {
-            gapsList << U2MsaGap(gap.offset * 3, gap.gap * 3);
-        }
-        rowsGapModel[curRow.getRowId()] = gapsList;
-    }
-}
-
-Task::ReportResult AlignInAminoFormTask::report() {
-    CHECK_OP(stateInfo, Task::ReportResult_Finished);
-
-    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), stateInfo);
-    CHECK_OP(stateInfo, Task::ReportResult_Finished);
-    maObj->updateGapModel(emptyGapModel, stateInfo);
-    CHECK_OP(stateInfo, Task::ReportResult_Finished);
-    maObj->updateGapModel(rowsGapModel, stateInfo);
-    CHECK_OP(stateInfo, Task::ReportResult_Finished);
-
-    return ReportResult_Finished;
-}
-
-
-} // U2
-
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.h b/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.h
deleted file mode 100644
index b96028c..0000000
--- a/src/corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_UTIL_TASKS
-#define _U2_MALIGNMENT_UTIL_TASKS
-
-#include <U2Core/global.h>
-#include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
-
-namespace U2 {
-
-class DNATranslation;
-
-/**
- Performs in-place translation of malignment object
-*/
-
-class U2ALGORITHM_EXPORT TranslateMSA2AminoTask : public Task {
-    Q_OBJECT
-public:
-    TranslateMSA2AminoTask(MAlignmentObject* obj);
-    TranslateMSA2AminoTask(MAlignmentObject* obj, const QString& trId );
-    const MAlignment& getTaskResult() { return resultMA; }
-    void run();
-    ReportResult report();
-private:
-    MAlignment resultMA;
-    MAlignmentObject* maObj;
-    DNATranslation* translation;
-};
-
-
-/**
- Wrapper for multiple alignment task
-*/
-
-class U2ALGORITHM_EXPORT AlignGObjectTask : public Task {
-    Q_OBJECT
-public:
-    AlignGObjectTask(const QString& taskName, TaskFlags f, MAlignmentObject* maobj)
-        : Task(taskName, f), obj(maobj) {}
-    virtual void setMAObject(MAlignmentObject* maobj) { obj = maobj; }
-    MAlignmentObject* getMAObject() { return obj; }
-protected:
-    QPointer<MAlignmentObject> obj;
-};
-
-
-/**
- Multi task converts alignment object to amino representation if possible.
- This allows to:
- 1) speed up alignment
- 2) avoid errors of inserting gaps within codon boundaries
-*/
-
-class U2ALGORITHM_EXPORT AlignInAminoFormTask : public Task {
-    Q_OBJECT
-    Q_DISABLE_COPY(AlignInAminoFormTask)
-public:
-    AlignInAminoFormTask(MAlignmentObject* obj, AlignGObjectTask* alignTask, const QString& traslId);
-    ~AlignInAminoFormTask();
-
-    virtual void prepare();
-    virtual void run();
-    virtual ReportResult report();
-protected:
-    AlignGObjectTask* alignTask;
-    MAlignmentObject *maObj, *clonedObj;
-    //MAlignment bufMA;
-    QString traslId;
-    Document* tmpDoc;
-    QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-    QMap<qint64, QList<U2MsaGap> > emptyGapModel;
-};
-
-
-} // U2
-
-#endif // _U2_MALIGNMENT_UTIL_TASKS
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.cpp
new file mode 100644
index 0000000..fc6ae56
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.cpp
@@ -0,0 +1,182 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/GHints.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/U2Mod.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include "MsaUtilTasks.h"
+
+
+namespace U2 {
+
+//////////////////////////////////////////////////////////////////////////
+/// TranslateMsa2AminoTask
+
+TranslateMsa2AminoTask::TranslateMsa2AminoTask( MultipleSequenceAlignmentObject* obj )
+: Task(tr("Translate nucleic alignment to amino"), TaskFlags_FOSE_COSC), maObj(obj)
+{
+    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
+    SAFE_POINT_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("Multiple alignment already has amino-acid alphabet")),);
+
+    QList<DNATranslation*> translations =
+        AppContext::getDNATranslationRegistry()->lookupTranslation(maObj->getAlphabet(), DNATranslationType_NUCL_2_AMINO);
+    CHECK_EXT(translations.isEmpty(), setError(tr("Unable to find suitable translation for %1").arg(maObj->getGObjectName())), );
+
+    translation = AppContext::getDNATranslationRegistry()->getStandardGeneticCodeTranslation(maObj->getAlphabet());
+}
+
+TranslateMsa2AminoTask::TranslateMsa2AminoTask( MultipleSequenceAlignmentObject* obj, const QString& translationId )
+: Task(tr("Translate nucleic alignment to amino"), TaskFlags_FOSE_COSC), maObj(obj)
+{
+    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
+    SAFE_POINT_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("Multiple alignment already has amino-acid alphabet")),);
+
+    translation = AppContext::getDNATranslationRegistry()->lookupTranslation(translationId);
+}
+
+
+void TranslateMsa2AminoTask::run() {
+    SAFE_POINT_EXT(NULL != translation, setError(tr("Invalid translation object")),);
+
+    QList<DNASequence> lst = MSAUtils::ma2seq(maObj->getMultipleAlignment(), true);
+    resultMA = MultipleSequenceAlignment(maObj->getMultipleAlignment()->getName(), translation->getDstAlphabet());
+
+    foreach (const DNASequence& dna, lst) {
+        int buflen = dna.length() / 3;
+        QByteArray buf(buflen,'\0');
+        translation->translate(dna.seq.constData(), dna.length(), buf.data(), buflen);
+        buf.replace("*","X");
+        resultMA->addRow(dna.getName(), buf);
+    }
+}
+
+
+Task::ReportResult TranslateMsa2AminoTask::report() {
+    if (!resultMA->isEmpty()) {
+        maObj->setMultipleAlignment(resultMA);
+    }
+
+    return ReportResult_Finished;
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+/// AlignInAminoFormTask
+
+AlignInAminoFormTask::AlignInAminoFormTask( MultipleSequenceAlignmentObject* obj, AlignGObjectTask* t, const QString& trId )
+: Task (tr("Align in amino form"), TaskFlags_FOSE_COSC), alignTask(t), maObj(obj), clonedObj(NULL), traslId(trId), tmpDoc(NULL)
+{
+    setMaxParallelSubtasks(1);
+}
+
+AlignInAminoFormTask::~AlignInAminoFormTask() {
+    delete tmpDoc;
+}
+
+void AlignInAminoFormTask::prepare() {
+    SAFE_POINT_EXT(NULL != maObj, setError(tr("Invalid MSA object detected")),);
+    CHECK_EXT(maObj->getAlphabet()->isNucleic(), setError(tr("AlignInAminoFormTask: Input alphabet is not nucleic!")), );
+    CHECK_EXT(!maObj->getMultipleAlignment()->isEmpty(), setError(tr("AlignInAminoFormTask: Input alignment is empty!")), );
+
+    MultipleSequenceAlignment msa = maObj->getMsaCopy();
+    const U2DbiRef& dbiRef = maObj->getEntityRef().dbiRef;
+
+    //Create temporal document for the workflow run task
+    const AppSettings* appSettings = AppContext::getAppSettings();
+    SAFE_POINT_EXT(NULL != appSettings, setError(tr("Invalid applications settings detected")), );
+
+    UserAppsSettings* usersSettings = appSettings->getUserAppsSettings();
+    SAFE_POINT_EXT(NULL != usersSettings, setError(tr("Invalid users applications settings detected")), );
+    const QString tmpDirPath = usersSettings->getCurrentProcessTemporaryDirPath();
+    U2OpStatus2Log os;
+    const QString fileName = GUrlUtils::prepareTmpFileLocation(tmpDirPath, "tmpAlignment", "fasta", os);
+
+    IOAdapterFactory * iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(fileName));
+    const Document* maDocument = maObj->getDocument();
+    SAFE_POINT_EXT(NULL != maDocument, setError(tr("Invalid MSA document detected")), );
+    DocumentFormat* docFormat = maDocument->getDocumentFormat();
+    tmpDoc = docFormat->createNewLoadedDocument(iof, fileName, os);
+    CHECK_OP(os, );
+
+    //Create copy of multiple alignment object
+    clonedObj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, msa, stateInfo);
+    CHECK_OP(stateInfo, );
+    clonedObj->setGHints(new GHintsDefaultImpl(maObj->getGHintsMap()));
+
+    tmpDoc->addObject(clonedObj);
+
+    alignTask->setMAObject(clonedObj);
+    addSubTask(new TranslateMsa2AminoTask(clonedObj,traslId));
+    addSubTask(alignTask);
+}
+
+void AlignInAminoFormTask::run() {
+    CHECK_OP(stateInfo, );
+
+    SAFE_POINT_EXT(NULL != clonedObj, setError(tr("NULL clonedObj in AlignInAminoFormTask::prepare!")),);
+
+    const MultipleSequenceAlignment newMsa = clonedObj->getMsa();
+    const QList<MultipleSequenceAlignmentRow> rows = newMsa->getMsaRows();
+
+    //Create gap map from amino-acid alignment
+    foreach (const MultipleSequenceAlignmentRow &row, rows) {
+        const int rowIdx = MSAUtils::getRowIndexByName(maObj->getMsa(), row->getName());
+        const MultipleSequenceAlignmentRow curRow = maObj->getMsa()->getMsaRow(row->getName());
+        SAFE_POINT_EXT(rowIdx >= 0, setError(tr("Can not find row %1 in original alignment.").arg(row->getName())),);
+
+        QList<U2MsaGap> gapsList;
+        foreach(const U2MsaGap& gap, row->getGapModel()) {
+            gapsList << U2MsaGap(gap.offset * 3, gap.gap * 3);
+        }
+        rowsGapModel[curRow->getRowId()] = gapsList;
+    }
+}
+
+Task::ReportResult AlignInAminoFormTask::report() {
+    CHECK_OP(stateInfo, Task::ReportResult_Finished);
+
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), stateInfo);
+    CHECK_OP(stateInfo, Task::ReportResult_Finished);
+    maObj->updateGapModel(stateInfo, emptyGapModel);
+    CHECK_OP(stateInfo, Task::ReportResult_Finished);
+    maObj->updateGapModel(stateInfo, rowsGapModel);
+    CHECK_OP(stateInfo, Task::ReportResult_Finished);
+
+    return ReportResult_Finished;
+}
+
+
+} // U2
+
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.h b/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.h
new file mode 100644
index 0000000..6178531
--- /dev/null
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.h
@@ -0,0 +1,97 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_UTIL_TASKS
+#define _U2_MSA_UTIL_TASKS
+
+#include <U2Core/global.h>
+#include <U2Core/Task.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+
+namespace U2 {
+
+class DNATranslation;
+
+/**
+ Performs in-place translation of multiple sequence alignment object
+*/
+
+class U2ALGORITHM_EXPORT TranslateMsa2AminoTask : public Task {
+    Q_OBJECT
+public:
+    TranslateMsa2AminoTask(MultipleSequenceAlignmentObject* obj);
+    TranslateMsa2AminoTask(MultipleSequenceAlignmentObject* obj, const QString& trId );
+    const MultipleSequenceAlignment& getTaskResult() { return resultMA; }
+    void run();
+    ReportResult report();
+private:
+    MultipleSequenceAlignment resultMA;
+    MultipleSequenceAlignmentObject* maObj;
+    DNATranslation* translation;
+};
+
+
+/**
+ Wrapper for multiple alignment task
+*/
+
+class U2ALGORITHM_EXPORT AlignGObjectTask : public Task {
+    Q_OBJECT
+public:
+    AlignGObjectTask(const QString& taskName, TaskFlags f, MultipleSequenceAlignmentObject* maobj)
+        : Task(taskName, f), obj(maobj) {}
+    virtual void setMAObject(MultipleSequenceAlignmentObject* maobj) { obj = maobj; }
+    MultipleSequenceAlignmentObject* getMAObject() { return obj; }
+protected:
+    QPointer<MultipleSequenceAlignmentObject> obj;
+};
+
+
+/**
+ Multi task converts alignment object to amino representation if possible.
+ This allows to:
+ 1) speed up alignment
+ 2) avoid errors of inserting gaps within codon boundaries
+*/
+
+class U2ALGORITHM_EXPORT AlignInAminoFormTask : public Task {
+    Q_OBJECT
+    Q_DISABLE_COPY(AlignInAminoFormTask)
+public:
+    AlignInAminoFormTask(MultipleSequenceAlignmentObject* obj, AlignGObjectTask* alignTask, const QString& traslId);
+    ~AlignInAminoFormTask();
+
+    virtual void prepare();
+    virtual void run();
+    virtual ReportResult report();
+protected:
+    AlignGObjectTask* alignTask;
+    MultipleSequenceAlignmentObject *maObj, *clonedObj;
+    QString traslId;
+    Document* tmpDoc;
+    QMap<qint64, QList<U2MsaGap> > rowsGapModel;
+    QMap<qint64, QList<U2MsaGap> > emptyGapModel;
+};
+
+
+} // U2
+
+#endif // _U2_MSA_UTIL_TASKS
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp
index 2c0aaed..34b9b11 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -82,7 +82,7 @@ bool ColorSchemeUtils::getSchemaColors(ColorSchemeData &customScheme) {
     QString dirPath = getColorsDir();
     QDir dir(dirPath);
     if (!dir.exists()) {
-        coreLog.info(QString("%1: no such directory").arg(dirPath));
+        coreLog.info(QString("%1: no such folder").arg(dirPath));
         return false;
     }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h
index 3dedce3..ba56b42 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/ColorSchemeUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp
index 9d37636..c95484d 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include <QColor>
 
 #include <U2Core/FeatureColors.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "ColorSchemeUtils.h"
@@ -35,14 +35,15 @@
 
 namespace U2 {
 
-const QString MsaColorScheme::EMPTY_NUCL            = "COLOR_SCHEME_EMPTY_NUCL";
+const QString MsaColorScheme::EMPTY                 = "COLOR_SCHEME_EMPTY";
+
 const QString MsaColorScheme::UGENE_NUCL            = "COLOR_SCHEME_UGENE_NUCL";
+const QString MsaColorScheme::UGENE_SANGER_NUCL     = "COLOR_SCHEME_UGENE_SANGER_NUCL";
 const QString MsaColorScheme::JALVIEW_NUCL          = "COLOR_SCHEME_JALVIEW_NUCL";
 const QString MsaColorScheme::IDENTPERC_NUCL        = "COLOR_SCHEME_IDENTPERC_NUCL";
 const QString MsaColorScheme::IDENTPERC_NUCL_GRAY   = "COLOR_SCHEME_IDENTPERC_NUCL_GRAY";
 const QString MsaColorScheme::CUSTOM_NUCL           = "COLOR_SCHEME_CUSTOM_NUCL";
 
-const QString MsaColorScheme::EMPTY_AMINO           = "COLOR_SCHEME_EMPTY_AMINO";
 const QString MsaColorScheme::UGENE_AMINO           = "COLOR_SCHEME_UGENE_AMINO";
 const QString MsaColorScheme::ZAPPO_AMINO           = "COLOR_SCHEME_ZAPPO_AMINO";
 const QString MsaColorScheme::TAILOR_AMINO          = "COLOR_SCHEME_TAILOR_AMINO";
@@ -56,9 +57,7 @@ const QString MsaColorScheme::IDENTPERC_AMINO_GRAY  = "COLOR_SCHEME_IDENTPERC_AM
 const QString MsaColorScheme::CLUSTALX_AMINO        = "COLOR_SCHEME_CLUSTALX_AMINO";
 const QString MsaColorScheme::CUSTOM_AMINO          = "COLOR_SCHEME_CUSTOM_AMINO";
 
-const QString MsaColorScheme::EMPTY_RAW             = "COLOR_SCHEME_EMPTY_RAW";
-
-MsaColorScheme::MsaColorScheme(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+MsaColorScheme::MsaColorScheme(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : QObject(parent),
       factory(factory),
       maObj(maObj) {
@@ -69,24 +68,27 @@ const MsaColorSchemeFactory * MsaColorScheme::getFactory() const {
     return factory;
 }
 
-MsaColorSchemeFactory::MsaColorSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
+MsaColorSchemeFactory::MsaColorSchemeFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
     : QObject(parent),
       id(id),
       name(name),
-      alphabetType(alphabetType) {
-
+      supportedAlphabets(supportedAlphabets){
 }
 
 const QString & MsaColorSchemeFactory::getId() const {
     return id;
 }
 
-const QString & MsaColorSchemeFactory::getName() const {
+const QString MsaColorSchemeFactory::getName() const {
     return name;
 }
 
-DNAAlphabetType MsaColorSchemeFactory::getAlphabetType() const {
-    return alphabetType;
+bool MsaColorSchemeFactory::isAlphabetTypeSupported(const DNAAlphabetType& alphabetType) const {
+    return supportedAlphabets.testFlag(alphabetType);
+}
+
+const AlphabetFlags MsaColorSchemeFactory::getSupportedAlphabets() const {
+    return supportedAlphabets;
 }
 
 MsaColorSchemeRegistry::MsaColorSchemeRegistry() {
@@ -98,7 +100,7 @@ MsaColorSchemeRegistry::~MsaColorSchemeRegistry(){
     deleteOldCustomFactories();
 }
 
-const QList<MsaColorSchemeFactory *> & MsaColorSchemeRegistry::getMsaColorSchemes() const {
+const QList<MsaColorSchemeFactory *> & MsaColorSchemeRegistry::getSchemes() const {
     return colorers;
 }
 
@@ -106,27 +108,65 @@ const QList<MsaColorSchemeCustomFactory *> & MsaColorSchemeRegistry::getCustomCo
     return customColorers;
 }
 
-QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getMsaColorSchemes(DNAAlphabetType alphabetType) const {
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getAllSchemes(DNAAlphabetType alphabet) const {
+    return QList<MsaColorSchemeFactory *>() << getSchemes(alphabet) << getCustomSchemes(alphabet);
+}
+
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getSchemes(DNAAlphabetType alphabetType) const {
     QList<MsaColorSchemeFactory *> res;
-    foreach (MsaColorSchemeFactory *factory, colorers) {
-        if (factory->getAlphabetType() == alphabetType) {
+    foreach(MsaColorSchemeFactory *factory, colorers) {
+        if (factory->isAlphabetTypeSupported(alphabetType)) {
             res.append(factory);
         }
     }
     return res;
 }
 
-QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getMsaCustomColorSchemes(DNAAlphabetType alphabetType) const {
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::getCustomSchemes(DNAAlphabetType alphabetType) const {
     QList<MsaColorSchemeFactory *> res;
-    foreach (MsaColorSchemeFactory *factory, customColorers) {
-        if (factory->getAlphabetType() == alphabetType) {
+    foreach(MsaColorSchemeFactory *factory, customColorers) {
+        if (factory->isAlphabetTypeSupported(alphabetType)) {
             res.append(factory);
         }
     }
     return res;
 }
 
-MsaColorSchemeCustomFactory * MsaColorSchemeRegistry::getMsaCustomColorSchemeFactoryById(const QString &id) const {
+QList<MsaColorSchemeFactory *> MsaColorSchemeRegistry::customSchemesToCommon() const {
+    QList<MsaColorSchemeFactory *> res;
+    foreach(MsaColorSchemeFactory *factory, customColorers) {
+        res.append(factory);
+    }
+    return res;
+}
+
+QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > MsaColorSchemeRegistry::getAllSchemesGrouped() const {
+    QList<MsaColorSchemeFactory *> allSchemes;
+    allSchemes << colorers << customSchemesToCommon();
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > result;
+    foreach(MsaColorSchemeFactory *factory, allSchemes) {
+        result[factory->getSupportedAlphabets()].append(factory);
+    }
+    return result;
+}
+
+QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > MsaColorSchemeRegistry::getSchemesGrouped() const {
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > result;
+    foreach(MsaColorSchemeFactory *factory, colorers) {
+        result[factory->getSupportedAlphabets()].append(factory);
+    }
+    return result;
+}
+
+QMap<AlphabetFlags, QList<MsaColorSchemeFactory *> > MsaColorSchemeRegistry::getCustomSchemesGrouped() const {
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory *> > result;
+    foreach(MsaColorSchemeFactory *factory, customColorers) {
+        result[factory->getSupportedAlphabets()].append(factory);
+    }
+    return result;
+}
+
+MsaColorSchemeCustomFactory * MsaColorSchemeRegistry::getCustomSchemeFactoryById(const QString &id) const {
     foreach (MsaColorSchemeCustomFactory *customFactory, customColorers) {
         if (customFactory->getId() == id) {
             return customFactory;
@@ -136,14 +176,18 @@ MsaColorSchemeCustomFactory * MsaColorSchemeRegistry::getMsaCustomColorSchemeFac
     return NULL;
 }
 
-MsaColorSchemeFactory * MsaColorSchemeRegistry::getMsaColorSchemeFactoryById(const QString& id) const {
+MsaColorSchemeFactory * MsaColorSchemeRegistry::getSchemeFactoryById(const QString& id) const {
     foreach (MsaColorSchemeFactory *commonFactory, colorers) {
         if (commonFactory->getId() == id) {
             return commonFactory;
         }
     }
 
-    return getMsaCustomColorSchemeFactoryById(id);
+    return getCustomSchemeFactoryById(id);
+}
+
+MsaColorSchemeFactory * MsaColorSchemeRegistry::getEmptySchemeFactory() const {
+    return getSchemeFactoryById(MsaColorScheme::EMPTY);
 }
 
 void MsaColorSchemeRegistry::addCustomScheme(const ColorSchemeData &scheme) {
@@ -153,37 +197,19 @@ void MsaColorSchemeRegistry::addCustomScheme(const ColorSchemeData &scheme) {
 namespace {
 
 bool compareNames(const MsaColorSchemeFactory* a1, const MsaColorSchemeFactory* a2) {
-    if (a1->getId() == MsaColorScheme::EMPTY_NUCL) {
-        return true;
-    }
-    if (a2->getId() == MsaColorScheme::EMPTY_NUCL) {
-        return false;
-    }
-    if (a1->getId() == MsaColorScheme::EMPTY_AMINO) {
-        return true;
-    }
-    if (a2->getId() == MsaColorScheme::EMPTY_AMINO) {
-        return false;
-    }
-    if (a1->getId() == MsaColorScheme::EMPTY_RAW) {
-        return true;
-    }
-    if (a2->getId() == MsaColorScheme::EMPTY_RAW) {
-        return false;
-    }
     return a1->getName() < a2->getName();
 }
 
 }
 
 void MsaColorSchemeRegistry::addMsaColorSchemeFactory(MsaColorSchemeFactory *commonFactory) {
-    assert(getMsaColorSchemeFactoryById(commonFactory->getId()) == NULL);
+    assert(getSchemeFactoryById(commonFactory->getId()) == NULL);
     colorers.append(commonFactory);
     qStableSort(colorers.begin(), colorers.end(), compareNames);
 }
 
 void MsaColorSchemeRegistry::addMsaCustomColorSchemeFactory(MsaColorSchemeCustomFactory *customFactory) {
-    assert(getMsaColorSchemeFactoryById(customFactory->getId()) == NULL);
+    assert(getSchemeFactoryById(customFactory->getId()) == NULL);
     customColorers.append(customFactory);
     qStableSort(colorers.begin(), colorers.end(), compareNames);
 }
@@ -193,7 +219,7 @@ void MsaColorSchemeRegistry::sl_onCustomSettingsChanged() {
 
     QList<MsaColorSchemeCustomFactory *> factoriesToRemove = customColorers;
     foreach (const ColorSchemeData &scheme, ColorSchemeUtils::getSchemas()) {
-        MsaColorSchemeCustomFactory *customSchemeFactory = getMsaCustomColorSchemeFactoryById(scheme.name);
+        MsaColorSchemeCustomFactory *customSchemeFactory = getCustomSchemeFactoryById(scheme.name);
         if (NULL == customSchemeFactory) {
             addCustomScheme(scheme);
             schemesListChanged |= true;
@@ -227,7 +253,7 @@ void fillLightColorsColorScheme(QVector<QColor> &colorsPerChar) {
     for (int i = 0; i < 256; i++) {
         colorsPerChar[i] = FeatureColors::genLightColor(QString((char)i));
     }
-    colorsPerChar[MAlignment_GapChar] = QColor(); //invalid color -> no color at all
+    colorsPerChar[U2Msa::GAP_CHAR] = QColor(); //invalid color -> no color at all
 }
 
 void addUgeneAmino(QVector<QColor> &colorsPerChar) {
@@ -272,6 +298,17 @@ void addUgeneNucleotide(QVector<QColor> &colorsPerChar) {
     SET_C('N', "#FCFCFC");
 }
 
+void addUgeneSangerNucleotide(QVector<QColor> &colorsPerChar) {
+    Q_UNUSED(colorsPerChar);
+
+    SET_C('A', "#36D695");
+    SET_C('C', "#3C9DD0");
+    SET_C('G', "#DADADA");
+    SET_C('T', "#FE7276");
+    SET_C('N', Qt::magenta);
+    SET_C(U2Msa::GAP_CHAR, "#FF9700");
+}
+
 void addZappoAmino(QVector<QColor> &colorsPerChar) {
     Q_UNUSED(colorsPerChar);
 
@@ -493,63 +530,62 @@ void MsaColorSchemeRegistry::initBuiltInSchemes() {
 
     //nucleic
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::EMPTY_NUCL, tr("No colors"), DNAAlphabet_NUCL, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::EMPTY, tr("No colors"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     fillLightColorsColorScheme(colorsPerChar);
     addUgeneNucleotide(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_NUCL, U2_APP_TITLE, DNAAlphabet_NUCL, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_NUCL, U2_APP_TITLE, DNAAlphabet_NUCL | DNAAlphabet_RAW, colorsPerChar));
+
+    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
+    addUgeneSangerNucleotide(colorsPerChar);
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_SANGER_NUCL, tr("UGENE Sanger"), DNAAlphabet_NUCL | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addJalviewNucleotide(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::JALVIEW_NUCL, tr("Jalview"), DNAAlphabet_NUCL, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::JALVIEW_NUCL, tr("Jalview"), DNAAlphabet_NUCL | DNAAlphabet_RAW, colorsPerChar));
 
-    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdentityFactory(this, MsaColorScheme::IDENTPERC_NUCL, tr("Percentage Identity"), DNAAlphabet_NUCL));
-    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdententityGrayscaleFactory(this, MsaColorScheme::IDENTPERC_NUCL_GRAY, tr("Percentage Identity (gray)"), DNAAlphabet_NUCL));
+    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdentityFactory(this, MsaColorScheme::IDENTPERC_NUCL, tr("Percentage Identity"), DNAAlphabet_NUCL | DNAAlphabet_RAW));
+    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdententityGrayscaleFactory(this, MsaColorScheme::IDENTPERC_NUCL_GRAY, tr("Percentage Identity (gray)"), DNAAlphabet_NUCL | DNAAlphabet_RAW));
 
     //amino
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::EMPTY_AMINO, tr("No colors"), DNAAlphabet_AMINO, colorsPerChar));
 
     fillLightColorsColorScheme(colorsPerChar);
     addUgeneAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_AMINO, U2_APP_TITLE, DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::UGENE_AMINO, U2_APP_TITLE, DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addZappoAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::ZAPPO_AMINO, tr("Zappo"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::ZAPPO_AMINO, tr("Zappo"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addTailorAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TAILOR_AMINO, tr("Tailor"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TAILOR_AMINO, tr("Tailor"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addHydroAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HYDRO_AMINO, tr("Hydrophobicity"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HYDRO_AMINO, tr("Hydrophobicity"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addHelixAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HELIX_AMINO, tr("Helix propensity"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::HELIX_AMINO, tr("Helix propensity"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addStrandAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::STRAND_AMINO, tr("Strand propensity"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::STRAND_AMINO, tr("Strand propensity"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addTurnAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TURN_AMINO, tr("Turn propensity"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::TURN_AMINO, tr("Turn propensity"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
     ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
     addBuriedAmino(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::BURIED_AMINO, tr("Buried index"), DNAAlphabet_AMINO, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::BURIED_AMINO, tr("Buried index"), DNAAlphabet_AMINO | DNAAlphabet_RAW, colorsPerChar));
 
-    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdentityFactory(this, MsaColorScheme::IDENTPERC_AMINO, tr("Percentage Identity"), DNAAlphabet_AMINO));
-    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdententityGrayscaleFactory(this, MsaColorScheme::IDENTPERC_AMINO_GRAY, tr("Percentage Identity (gray)"), DNAAlphabet_AMINO));
+    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdentityFactory(this, MsaColorScheme::IDENTPERC_AMINO, tr("Percentage Identity"), DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    addMsaColorSchemeFactory(new MsaColorSchemePercentageIdententityGrayscaleFactory(this, MsaColorScheme::IDENTPERC_AMINO_GRAY, tr("Percentage Identity (gray)"), DNAAlphabet_AMINO | DNAAlphabet_RAW));
 
-    addMsaColorSchemeFactory(new MsaColorSchemeClustalXFactory(this, MsaColorScheme::CLUSTALX_AMINO,  tr("Clustal X"), DNAAlphabet_AMINO));
-
-    //raw
-    ColorSchemeUtils::fillEmptyColorScheme(colorsPerChar);
-    addMsaColorSchemeFactory(new MsaColorSchemeStaticFactory(this, MsaColorScheme::EMPTY_RAW, tr("No colors"), DNAAlphabet_RAW, colorsPerChar));
+    addMsaColorSchemeFactory(new MsaColorSchemeClustalXFactory(this, MsaColorScheme::CLUSTALX_AMINO, tr("Clustal X"), DNAAlphabet_AMINO | DNAAlphabet_RAW));
 }
 
 void MsaColorSchemeRegistry::initCustomSchema(){
@@ -559,8 +595,8 @@ void MsaColorSchemeRegistry::initCustomSchema(){
 }
 
 ColorSchemeData::ColorSchemeData() :
-    type(DNAAlphabet_RAW),
-    defaultAlpType(false)
+    defaultAlpType(false),
+    type(DNAAlphabet_RAW)
 {
 
 }
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h
index 856dbe9..21d1120 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorScheme.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,13 @@
 #define _U2_MSA_COLOR_SCHEME_H_
 
 #include <QColor>
+#include <QMap>
+
 #include <U2Core/global.h>
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleAlignmentObject;
 class MsaColorSchemeCustomFactory;
 class MsaColorSchemeFactory;
 
@@ -36,29 +38,30 @@ public:
     ColorSchemeData();
 
     QString name;
-    DNAAlphabetType type;
     bool defaultAlpType;
     QMap<char, QColor> alpColors;
+    DNAAlphabetType type;
 };
 
 class U2ALGORITHM_EXPORT MsaColorScheme : public QObject {
     Q_OBJECT
 public:
-    MsaColorScheme(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaColorScheme(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     //Get color for symbol "c" on position [seq, pos]. Variable "c" has been added for optimization.
     virtual QColor getColor(int seq, int pos, char c) const = 0;
 
     const MsaColorSchemeFactory * getFactory() const;
 
-    static const QString EMPTY_NUCL;
+    static const QString EMPTY;
+
     static const QString UGENE_NUCL;
+    static const QString UGENE_SANGER_NUCL;
     static const QString JALVIEW_NUCL;
     static const QString IDENTPERC_NUCL;
     static const QString IDENTPERC_NUCL_GRAY;
     static const QString CUSTOM_NUCL;
 
-    static const QString EMPTY_AMINO;
     static const QString UGENE_AMINO;
     static const QString ZAPPO_AMINO;
     static const QString TAILOR_AMINO;
@@ -72,30 +75,29 @@ public:
     static const QString CLUSTALX_AMINO;
     static const QString CUSTOM_AMINO;
 
-    static const QString EMPTY_RAW;
-
 protected:
-    const MsaColorSchemeFactory * factory;
-    MAlignmentObject *      maObj;
+    const MsaColorSchemeFactory *   factory;
+    MultipleAlignmentObject *       maObj;
 };
 
 class U2ALGORITHM_EXPORT MsaColorSchemeFactory : public QObject {
     Q_OBJECT
 public:
-    MsaColorSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
-    virtual MsaColorScheme * create(QObject *p, MAlignmentObject *obj) const = 0;
+    MsaColorSchemeFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
+    virtual MsaColorScheme * create(QObject *p, MultipleAlignmentObject *obj) const = 0;
 
     const QString & getId() const;
-    const QString & getName() const;
-    DNAAlphabetType getAlphabetType() const;
+    const QString getName() const;
 
+    bool isAlphabetTypeSupported(const DNAAlphabetType& alphabetType) const;
+    const AlphabetFlags getSupportedAlphabets() const;
 signals:
     void si_factoryChanged();
 
 protected:
     QString         id;
     QString         name;
-    DNAAlphabetType alphabetType;
+    AlphabetFlags supportedAlphabets;
 };
 
 class U2ALGORITHM_EXPORT MsaColorSchemeRegistry : public QObject {
@@ -104,14 +106,20 @@ public:
     MsaColorSchemeRegistry();
     ~MsaColorSchemeRegistry();
 
-    const QList<MsaColorSchemeFactory *> & getMsaColorSchemes() const;
+    const QList<MsaColorSchemeFactory *> & getSchemes() const;
     const QList<MsaColorSchemeCustomFactory *> &getCustomColorSchemes() const;
 
-    QList<MsaColorSchemeFactory *> getMsaColorSchemes(DNAAlphabetType alphabetType) const;
-    QList<MsaColorSchemeFactory *> getMsaCustomColorSchemes(DNAAlphabetType alphabetType) const;
+    QList<MsaColorSchemeFactory *> getAllSchemes(DNAAlphabetType alphabetType) const;
+    QList<MsaColorSchemeFactory *> getSchemes(DNAAlphabetType alphabetType) const;
+    QList<MsaColorSchemeFactory *> getCustomSchemes(DNAAlphabetType alphabetType) const;
+
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > getAllSchemesGrouped() const;
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > getSchemesGrouped() const;
+    QMap<AlphabetFlags, QList<MsaColorSchemeFactory *> > getCustomSchemesGrouped() const;
 
-    MsaColorSchemeCustomFactory * getMsaCustomColorSchemeFactoryById(const QString &id) const;
-    MsaColorSchemeFactory * getMsaColorSchemeFactoryById(const QString &id) const;
+    MsaColorSchemeCustomFactory * getCustomSchemeFactoryById(const QString &id) const;
+    MsaColorSchemeFactory * getSchemeFactoryById(const QString &id) const;
+    MsaColorSchemeFactory * getEmptySchemeFactory() const;
 
 signals:
     void si_customSettingsChanged();
@@ -120,6 +128,7 @@ private slots:
     void sl_onCustomSettingsChanged();
 
 private:
+    QList<MsaColorSchemeFactory *> customSchemesToCommon() const;
     void addCustomScheme(const ColorSchemeData& scheme);
     void addMsaColorSchemeFactory(MsaColorSchemeFactory *commonFactory);
     void addMsaCustomColorSchemeFactory(MsaColorSchemeCustomFactory *customFactory);
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp
index de14305..86123f3 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,13 @@
 
 #include <U2Algorithm/MSAConsensusUtils.h>
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleAlignmentObject.h>
 
 #include "MsaColorSchemeClustalX.h"
 
 namespace U2 {
 
-MsaColorSchemeClustalX::MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+MsaColorSchemeClustalX::MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaColorScheme(parent, factory, maObj),
       objVersion(1),
       cacheVersion(0),
@@ -42,7 +42,7 @@ MsaColorSchemeClustalX::MsaColorSchemeClustalX(QObject *parent, const MsaColorSc
     colorByIdx[ClustalColor_CYAN]    = "#15a4a4";
     colorByIdx[ClustalColor_YELLOW]  = "#c0c000";
 
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_alignmentChanged()));
+    connect(maObj, SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)), SLOT(sl_alignmentChanged()));
 }
 
 QColor MsaColorSchemeClustalX::getColor(int seq, int pos, char) const {
@@ -79,8 +79,8 @@ void MsaColorSchemeClustalX::updateCache() const {
 
     // compute colors for whole ali
     // use 4 bits per color
-    const MAlignment &ma = maObj->getMAlignment();
-    int nSeq = ma.getNumRows();
+    const MultipleAlignment msa = maObj->getMultipleAlignment();
+    int nSeq = msa->getNumRows();
     aliLen = maObj->getLength();
     cacheVersion = objVersion;
 
@@ -121,14 +121,14 @@ void MsaColorSchemeClustalX::updateCache() const {
 
     for (int pos = 0; pos < aliLen; pos++) {
         int nonGapChars = 0;
-        MSAConsensusUtils::getColumnFreqs(ma, pos, freqsByChar, nonGapChars);
+        MSAConsensusUtils::getColumnFreqs(msa, pos, freqsByChar, nonGapChars);
         int content50 = int(nonGapChars * 50.0 / 100);
         int content60 = int(nonGapChars * 60.0 / 100);
         int content80 = int(nonGapChars * 80.0 / 100);
         int content85 = int(nonGapChars * 85.0 / 100);
 
         for (int seq = 0; seq < nSeq; seq++) {
-            char c = ma.charAt(seq, pos);
+            char c = msa->charAt(seq, pos);
             int colorIdx = ClustalColor_NO_COLOR;
             switch(c) {
             case 'W': //(W,L,V,I,M,F): {50%, P}{60%, WLVIMAFCYHP} -> BLUE
@@ -251,13 +251,12 @@ void MsaColorSchemeClustalX::setColorIdx(int seq, int pos, int colorIdx) const {
     colorsCache[cacheIdx] = val;
 }
 
-MsaColorSchemeClustalXFactory::MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaColorSchemeFactory(parent, id, name, alphabetType)
+MsaColorSchemeClustalXFactory::MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets) : MsaColorSchemeFactory(parent, id, name, supportedAlphabets)
 {
 
 }
 
-MsaColorScheme * MsaColorSchemeClustalXFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaColorScheme * MsaColorSchemeClustalXFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaColorSchemeClustalX(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h
index f21a59e..a0ad6f2 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeClustalX.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ namespace U2 {
 class U2ALGORITHM_EXPORT MsaColorSchemeClustalX : public MsaColorScheme {
     Q_OBJECT
 public:
-    MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaColorSchemeClustalX(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     QColor getColor(int seq, int pos, char c) const;
 
@@ -70,9 +70,9 @@ private:
 class MsaColorSchemeClustalXFactory : public MsaColorSchemeFactory {
     Q_OBJECT
 public:
-    MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaColorSchemeClustalXFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaColorScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp
index 7a2601c..c37083a 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,20 +28,20 @@
 namespace U2 {
 
 MsaColorSchemeCustomFactory::MsaColorSchemeCustomFactory(QObject *parent, const ColorSchemeData &scheme)
-    : MsaColorSchemeFactory(parent, scheme.name, scheme.name, scheme.type),
+    : MsaColorSchemeFactory(parent, scheme.name, scheme.name, scheme.type | DNAAlphabet_RAW),
       colorsPerChar(colorMapToColorVector(scheme.alpColors))
 {
 
 }
 
-MsaColorScheme * MsaColorSchemeCustomFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaColorScheme * MsaColorSchemeCustomFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaColorSchemeStatic(parent, this, maObj, colorsPerChar);
 }
 
 bool MsaColorSchemeCustomFactory::isEqualTo(const ColorSchemeData &scheme) const {
     bool result = true;
     result &= getName() == scheme.name;
-    result &= getAlphabetType() == scheme.type;
+    result &= isAlphabetTypeSupported(scheme.type);
     result &= colorsPerChar == colorMapToColorVector(scheme.alpColors);
     return result;
 }
@@ -49,7 +49,8 @@ bool MsaColorSchemeCustomFactory::isEqualTo(const ColorSchemeData &scheme) const
 void MsaColorSchemeCustomFactory::setScheme(const ColorSchemeData &scheme) {
     CHECK(!isEqualTo(scheme), );
     name = scheme.name;
-    alphabetType = scheme.type;
+    supportedAlphabets &= ~supportedAlphabets;
+    supportedAlphabets |= scheme.type;
     colorsPerChar = colorMapToColorVector(scheme.alpColors);
     emit si_factoryChanged();
 }
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h
index 27e3ecf..bab6b35 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeCustom.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@ class U2ALGORITHM_EXPORT MsaColorSchemeCustomFactory : public MsaColorSchemeFact
 public:
     MsaColorSchemeCustomFactory(QObject *parent, const ColorSchemeData& scheme);
 
-    MsaColorScheme * create(QObject *p, MAlignmentObject *obj) const;
+    MsaColorScheme * create(QObject *p, MultipleAlignmentObject *obj) const;
     bool isEqualTo(const ColorSchemeData& scheme) const;
 
     void setScheme(const ColorSchemeData& scheme);
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp
index 725b4d5..d6f77a2 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 namespace U2 {
 
-MsaColorSchemePercentageIdententityGrayscale::MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+MsaColorSchemePercentageIdententityGrayscale::MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaColorSchemePercentageIdentity(parent, factory, maObj)
 {
     colorsByRange[0] = QColor("#646464");
@@ -31,13 +31,11 @@ MsaColorSchemePercentageIdententityGrayscale::MsaColorSchemePercentageIdententit
     colorsByRange[2] = QColor("#CCCCCC");
 }
 
-MsaColorSchemePercentageIdententityGrayscaleFactory::MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaColorSchemeFactory(parent, id, name, alphabetType)
-{
-
+MsaColorSchemePercentageIdententityGrayscaleFactory::MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaColorSchemeFactory(parent, id, name, supportedAlphabets) {
 }
 
-MsaColorScheme * MsaColorSchemePercentageIdententityGrayscaleFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaColorScheme * MsaColorSchemePercentageIdententityGrayscaleFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaColorSchemePercentageIdententityGrayscale(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h
index 714b533..451b463 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdententityGrayscale.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,15 +28,15 @@ namespace U2 {
 
 class U2ALGORITHM_EXPORT MsaColorSchemePercentageIdententityGrayscale : public MsaColorSchemePercentageIdentity {
 public:
-    MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaColorSchemePercentageIdententityGrayscale(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj);
 };
 
 class MsaColorSchemePercentageIdententityGrayscaleFactory : public MsaColorSchemeFactory {
     Q_OBJECT
 public:
-    MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaColorSchemePercentageIdententityGrayscaleFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaColorScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp
index 4e5339f..4a5b55c 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,14 +23,14 @@
 
 #include <U2Algorithm/MSAConsensusUtils.h>
 
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleAlignment.h>
+#include <U2Core/MultipleAlignmentObject.h>
 
 #include "MsaColorSchemePercentageIdentity.h"
 
 namespace U2 {
 
-MsaColorSchemePercentageIdentity::MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj)
+MsaColorSchemePercentageIdentity::MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaColorScheme(parent, factory, maObj),
       cacheVersion(0),
       objVersion(1)
@@ -45,12 +45,12 @@ MsaColorSchemePercentageIdentity::MsaColorSchemePercentageIdentity(QObject *pare
     colorsByRange[2] = QColor("#CCCCFF");
     colorsByRange[3] = QColor();
 
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_alignmentChanged()));
+    connect(maObj, SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)), SLOT(sl_alignmentChanged()));
 }
 
 QColor MsaColorSchemePercentageIdentity::getColor(int /*seq*/, int pos, char c) const {
     updateCache();
-    if (c == MAlignment_GapChar) {
+    if (c == U2Msa::GAP_CHAR) {
         return QColor();
     }
     quint32 packedVal = indentCache[pos];
@@ -72,22 +72,21 @@ void MsaColorSchemePercentageIdentity::updateCache() const {
     if (cacheVersion == objVersion) {
         return;
     }
-    const MAlignment& ma = maObj->getMAlignment();
-    int aliLen = ma.getLength();
+    const MultipleAlignment msa = maObj->getMultipleAlignment();
+    int aliLen = msa->getLength();
     indentCache.resize(aliLen);
     for (int i = 0; i < aliLen; i++) {
-        indentCache[i] = MSAConsensusUtils::packConsensusCharsToInt(ma, i, mask4, true);
+        indentCache[i] = MSAConsensusUtils::packConsensusCharsToInt(msa, i, mask4, true);
     }
     cacheVersion = objVersion;
 }
 
-MsaColorSchemePercentageIdentityFactory::MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaColorSchemeFactory(parent, id, name, alphabetType)
+MsaColorSchemePercentageIdentityFactory::MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets) : MsaColorSchemeFactory(parent, id, name, supportedAlphabets)
 {
 
 }
 
-MsaColorScheme * MsaColorSchemePercentageIdentityFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaColorScheme * MsaColorSchemePercentageIdentityFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaColorSchemePercentageIdentity(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h
index df9b96a..6b5f6f9 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemePercentageIdentity.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@ namespace U2 {
 class U2ALGORITHM_EXPORT MsaColorSchemePercentageIdentity : public MsaColorScheme {
     Q_OBJECT
 public:
-    MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaColorSchemePercentageIdentity(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     QColor getColor(int seq, int pos, char c) const;
 
@@ -54,9 +54,9 @@ protected:
 class MsaColorSchemePercentageIdentityFactory : public MsaColorSchemeFactory {
     Q_OBJECT
 public:
-    MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaColorSchemePercentageIdentityFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaColorScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaColorScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp
index 6690ed3..9a44338 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 namespace U2 {
 
-MsaColorSchemeStatic::MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj, const QVector<QColor> &colorsPerChar)
+MsaColorSchemeStatic::MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj, const QVector<QColor> &colorsPerChar)
     : MsaColorScheme(parent, factory, maObj),
       colorsPerChar(colorsPerChar)
 {
@@ -34,14 +34,14 @@ QColor MsaColorSchemeStatic::getColor(int /*seq*/, int /*pos*/, char c) const {
     return colorsPerChar[(quint8)c];
 }
 
-MsaColorSchemeStaticFactory::MsaColorSchemeStaticFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType, const QVector<QColor> &colorsPerChar)
-    : MsaColorSchemeFactory(parent, id, name, alphabetType),
+MsaColorSchemeStaticFactory::MsaColorSchemeStaticFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets, const QVector<QColor> &colorsPerChar)
+    : MsaColorSchemeFactory(parent, id, name, supportedAlphabets),
       colorsPerChar(colorsPerChar)
 {
 
 }
 
-MsaColorScheme * MsaColorSchemeStaticFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaColorScheme * MsaColorSchemeStaticFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaColorSchemeStatic(parent, this, maObj, colorsPerChar);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h
index 8fe5b0d..1762d69 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/color_schemes/MsaColorSchemeStatic.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@ namespace U2 {
 class U2ALGORITHM_EXPORT MsaColorSchemeStatic : public MsaColorScheme {
     Q_OBJECT
 public:
-    MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MAlignmentObject *maObj, const QVector<QColor> &colorsPerChar);
+    MsaColorSchemeStatic(QObject *parent, const MsaColorSchemeFactory *factory, MultipleAlignmentObject *maObj, const QVector<QColor> &colorsPerChar);
 
     QColor getColor(int seq, int pos, char c) const;
 
@@ -43,9 +43,9 @@ private:
 class MsaColorSchemeStaticFactory : public MsaColorSchemeFactory {
     Q_OBJECT
 public:
-    MsaColorSchemeStaticFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType, const QVector<QColor> &colorsPerChar);
+    MsaColorSchemeStaticFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets, const QVector<QColor> &colorsPerChar);
 
-    MsaColorScheme * create(QObject* parent, MAlignmentObject * maObj) const;
+    MsaColorScheme * create(QObject* parent, MultipleAlignmentObject * maObj) const;
 
 private:
     QVector<QColor> colorsPerChar;
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp
index 7287423..c978bbc 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QColor>
+#include <QVariantMap>
 
 #include "MsaHighlightingScheme.h"
 #include "MsaHighlightingSchemeAgreements.h"
@@ -32,25 +33,18 @@
 
 namespace U2 {
 
-const QString MsaHighlightingScheme::EMPTY_NUCL             = "HIGHLIGHT_SCHEME_EMPTY_NUCL";
-const QString MsaHighlightingScheme::EMPTY_AMINO            = "HIGHLIGHT_SCHEME_EMPTY_AMINO";
-const QString MsaHighlightingScheme::EMPTY_RAW              = "HIGHLIGHT_SCHEME_EMPTY_RAW";
-const QString MsaHighlightingScheme::AGREEMENTS_NUCL        = "HIGHLIGHT_SCHEME_AGREEMENTS_NUCL";
-const QString MsaHighlightingScheme::AGREEMENTS_AMINO       = "HIGHLIGHT_SCHEME_AGREEMENTS_AMINO";
-const QString MsaHighlightingScheme::DISAGREEMENTS_NUCL     = "HIGHLIGHT_SCHEME_DISAGREEMENTS_NUCL";
-const QString MsaHighlightingScheme::DISAGREEMENTS_AMINO    = "HIGHLIGHT_SCHEME_DISAGREEMENTS_AMINO";
-const QString MsaHighlightingScheme::TRANSITIONS_NUCL       = "HIGHLIGHT_SCHEME_TRANSITIONS_AMINO";
-const QString MsaHighlightingScheme::TRANSVERSIONS_NUCL     = "HIGHLIGHT_SCHEME_TRANSVERSIONS_AMINO";
-const QString MsaHighlightingScheme::GAPS_AMINO             = "HIGHLIGHT_SCHEME_GAPS_AMINO";
-const QString MsaHighlightingScheme::GAPS_NUCL              = "HIGHLIGHT_SCHEME_GAPS_NUCL";
-const QString MsaHighlightingScheme::GAPS_RAW               = "HIGHLIGHT_SCHEME_GAPS_RAW";
-const QString MsaHighlightingScheme::CONSERVATION_AMINO     = "CONSERVATION_SCHEME_GAPS_AMINO";
-const QString MsaHighlightingScheme::CONSERVATION_NUCL      = "CONSERVATION_SCHEME_GAPS_NUCL";
+const QString MsaHighlightingScheme::EMPTY          = "HIGHLIGHT_SCHEME_EMPTY";
+const QString MsaHighlightingScheme::AGREEMENTS     = "HIGHLIGHT_SCHEME_AGREEMENTS";
+const QString MsaHighlightingScheme::DISAGREEMENTS  = "HIGHLIGHT_SCHEME_DISAGREEMENTS";
+const QString MsaHighlightingScheme::TRANSITIONS    = "HIGHLIGHT_SCHEME_TRANSITIONS";
+const QString MsaHighlightingScheme::TRANSVERSIONS  = "HIGHLIGHT_SCHEME_TRANSVERSIONS";
+const QString MsaHighlightingScheme::GAPS           = "HIGHLIGHT_SCHEME_GAPS";
+const QString MsaHighlightingScheme::CONSERVATION   = "CONSERVATION_SCHEME_GAPS";
 
 const QString MsaHighlightingScheme::THRESHOLD_PARAMETER_NAME           = "threshold";
 const QString MsaHighlightingScheme::LESS_THAN_THRESHOLD_PARAMETER_NAME = "less_than_threshold";
 
-MsaHighlightingScheme::MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingScheme::MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : QObject(parent),
       factory(factory),
       maObj(maObj),
@@ -85,29 +79,23 @@ QVariantMap MsaHighlightingScheme::getSettings() const {
     return QVariantMap();
 }
 
-MsaHighlightingSchemeFactory::MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType, bool refFree, bool needThreshold)
+MsaHighlightingSchemeFactory::MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets, bool refFree, bool needThreshold)
     : QObject(parent),
       id(id),
       name(name),
-      alphabetType(alphabetType),
       refFree(refFree),
-      needThreshold(needThreshold)
-{
-
+      needThreshold(needThreshold),
+      supportedAlphabets(supportedAlphabets) {
 }
 
 const QString & MsaHighlightingSchemeFactory::getId() const {
     return id;
 }
 
-const QString & MsaHighlightingSchemeFactory::getName() const {
+const QString& MsaHighlightingSchemeFactory::getName() const {
     return name;
 }
 
-DNAAlphabetType MsaHighlightingSchemeFactory::getAlphabetType() const {
-    return alphabetType;
-}
-
 bool MsaHighlightingSchemeFactory::isRefFree() const {
     return refFree;
 }
@@ -116,33 +104,30 @@ bool MsaHighlightingSchemeFactory::isNeedThreshold() const {
     return needThreshold;
 }
 
-MsaHighlightingSchemeRegistry::MsaHighlightingSchemeRegistry(){
-    schemes.append(new MsaHighlightingSchemeNoColorsFactory(this, MsaHighlightingScheme::EMPTY_NUCL, tr("No highlighting"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeNoColorsFactory(this, MsaHighlightingScheme::EMPTY_AMINO, tr("No highlighting"), DNAAlphabet_AMINO));
-    schemes.append(new MsaHighlightingSchemeNoColorsFactory(this, MsaHighlightingScheme::EMPTY_RAW, tr("No highlighting"), DNAAlphabet_RAW));
-
-    schemes.append(new MsaHighlightingSchemeAgreementsFactory(this, MsaHighlightingScheme::AGREEMENTS_NUCL, tr("Agreements"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeAgreementsFactory(this, MsaHighlightingScheme::AGREEMENTS_AMINO, tr("Agreements"), DNAAlphabet_AMINO));
-
-    schemes.append(new MsaHighlightingSchemeDisagreementsFactory(this, MsaHighlightingScheme::DISAGREEMENTS_NUCL, tr("Disagreements"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeDisagreementsFactory(this, MsaHighlightingScheme::DISAGREEMENTS_AMINO, tr("Disagreements"), DNAAlphabet_AMINO));
-
-    schemes.append(new MsaHighlightingSchemeGapsFactory(this, MsaHighlightingScheme::GAPS_NUCL, tr("Gaps"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeGapsFactory(this, MsaHighlightingScheme::GAPS_AMINO, tr("Gaps"), DNAAlphabet_AMINO));
-    schemes.append(new MsaHighlightingSchemeGapsFactory(this, MsaHighlightingScheme::GAPS_RAW, tr("Gaps"), DNAAlphabet_RAW));
+bool MsaHighlightingSchemeFactory::isAlphabetTypeSupported(DNAAlphabetType alphabetType) const {
+    return supportedAlphabets.testFlag(alphabetType);
+}
 
-    schemes.append(new MsaHighlightingSchemeConservationFactory(this, MsaHighlightingScheme::CONSERVATION_NUCL, tr("Conservation level"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeConservationFactory(this, MsaHighlightingScheme::CONSERVATION_AMINO, tr("Conservation level"), DNAAlphabet_AMINO));
+const AlphabetFlags& MsaHighlightingSchemeFactory::getSupportedAlphabets() const
+{
+    return supportedAlphabets;
+}
 
-    schemes.append(new MsaHighlightingSchemeTransitionsFactory(this, MsaHighlightingScheme::TRANSITIONS_NUCL, tr("Transitions"), DNAAlphabet_NUCL));
-    schemes.append(new MsaHighlightingSchemeTransversionsFactory(this, MsaHighlightingScheme::TRANSVERSIONS_NUCL, tr("Transversions"), DNAAlphabet_NUCL));
+MsaHighlightingSchemeRegistry::MsaHighlightingSchemeRegistry() {
+    schemes.append(new MsaHighlightingSchemeNoColorsFactory(this, MsaHighlightingScheme::EMPTY, tr("No highlighting"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeAgreementsFactory(this, MsaHighlightingScheme::AGREEMENTS, tr("Agreements"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeDisagreementsFactory(this, MsaHighlightingScheme::DISAGREEMENTS, tr("Disagreements"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeGapsFactory(this, MsaHighlightingScheme::GAPS, tr("Gaps"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeConservationFactory(this, MsaHighlightingScheme::CONSERVATION, tr("Conservation level"), DNAAlphabet_NUCL | DNAAlphabet_AMINO | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeTransitionsFactory(this, MsaHighlightingScheme::TRANSITIONS, tr("Transitions"), DNAAlphabet_NUCL | DNAAlphabet_RAW));
+    schemes.append(new MsaHighlightingSchemeTransversionsFactory(this, MsaHighlightingScheme::TRANSVERSIONS, tr("Transversions"), DNAAlphabet_NUCL | DNAAlphabet_RAW));
 }
 
 MsaHighlightingSchemeRegistry::~MsaHighlightingSchemeRegistry() {
     qDeleteAll(schemes);
 }
 
-MsaHighlightingSchemeFactory * MsaHighlightingSchemeRegistry::getMsaHighlightingSchemeFactoryById(const QString& id) const {
+MsaHighlightingSchemeFactory * MsaHighlightingSchemeRegistry::getSchemeFactoryById(const QString& id) const {
     foreach (MsaHighlightingSchemeFactory *factory, schemes) {
         if (factory->getId() == id) {
             return factory;
@@ -151,14 +136,26 @@ MsaHighlightingSchemeFactory * MsaHighlightingSchemeRegistry::getMsaHighlighting
     return NULL;
 }
 
-QList<MsaHighlightingSchemeFactory *> MsaHighlightingSchemeRegistry::getMsaHighlightingSchemes(DNAAlphabetType alphabetType) const {
+MsaHighlightingSchemeFactory * MsaHighlightingSchemeRegistry::getEmptySchemeFactory() const {
+    return getSchemeFactoryById(MsaHighlightingScheme::EMPTY);
+}
+
+QList<MsaHighlightingSchemeFactory *> MsaHighlightingSchemeRegistry::getAllSchemes(DNAAlphabetType alphabetType) const {
     QList<MsaHighlightingSchemeFactory *> res;
-    foreach (MsaHighlightingSchemeFactory *factory, schemes) {
-        if (factory->getAlphabetType() == alphabetType) {
+    foreach(MsaHighlightingSchemeFactory *factory, schemes) {
+        if (factory->isAlphabetTypeSupported(alphabetType)) {
             res.append(factory);
         }
     }
     return res;
 }
 
+QMap<AlphabetFlags, QList<MsaHighlightingSchemeFactory*> > MsaHighlightingSchemeRegistry::getAllSchemesGrouped() const {
+    QMap<AlphabetFlags, QList<MsaHighlightingSchemeFactory*> > result;
+    foreach(MsaHighlightingSchemeFactory *factory, schemes) {
+        result[factory->getSupportedAlphabets()].append(factory);
+    }
+    return result;
+}
+
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h
index 966ff2e..b79f2ef 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,19 +22,21 @@
 #ifndef _U2_MSA_HIGHLIGHTING_SCHEME_H_
 #define _U2_MSA_HIGHLIGHTING_SCHEME_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 class QColor;
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleAlignmentObject;
 class MsaHighlightingSchemeFactory;
 
 class U2ALGORITHM_EXPORT MsaHighlightingScheme : public QObject {
     Q_OBJECT
 public:
-    MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingScheme(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     virtual void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
     const MsaHighlightingSchemeFactory * getFactory() const;
@@ -45,50 +47,43 @@ public:
     virtual void applySettings(const QVariantMap &settings);
     virtual QVariantMap getSettings() const;
 
-    static const QString EMPTY_NUCL;
-    static const QString EMPTY_AMINO;
-    static const QString EMPTY_RAW;
-    static const QString AGREEMENTS_NUCL;
-    static const QString AGREEMENTS_AMINO;
-    static const QString DISAGREEMENTS_NUCL;
-    static const QString DISAGREEMENTS_AMINO;
-    static const QString TRANSITIONS_NUCL;
-    static const QString TRANSVERSIONS_NUCL;
-    static const QString GAPS_NUCL;
-    static const QString GAPS_AMINO;
-    static const QString GAPS_RAW;
-    static const QString CONSERVATION_NUCL;
-    static const QString CONSERVATION_AMINO;
+    static const QString EMPTY;
+    static const QString AGREEMENTS;
+    static const QString DISAGREEMENTS;
+    static const QString TRANSITIONS;
+    static const QString TRANSVERSIONS;
+    static const QString GAPS;
+    static const QString CONSERVATION;
 
     static const QString THRESHOLD_PARAMETER_NAME;
     static const QString LESS_THAN_THRESHOLD_PARAMETER_NAME;
 
 protected:
     const MsaHighlightingSchemeFactory *factory;
-    MAlignmentObject *maObj;
+    MultipleAlignmentObject *maObj;
     bool useDots;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeFactory : public QObject {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType,
+    MsaHighlightingSchemeFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets,
                                  bool refFree = false, bool needThreshold = false);
 
-    virtual MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const = 0;
+    virtual MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const = 0;
 
     const QString & getId() const;
-    const QString & getName() const;
-    DNAAlphabetType getAlphabetType() const;
+    const QString& getName() const;
     bool isRefFree() const;
     bool isNeedThreshold() const;
-
+    bool isAlphabetTypeSupported(DNAAlphabetType alphabetType) const;
+    const AlphabetFlags& getSupportedAlphabets() const;
 private:
     QString         id;
     QString         name;
-    DNAAlphabetType alphabetType;
     bool            refFree;
     bool            needThreshold;
+    AlphabetFlags supportedAlphabets;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeRegistry : public QObject {
@@ -97,9 +92,10 @@ public:
     MsaHighlightingSchemeRegistry();
     ~MsaHighlightingSchemeRegistry();
 
-    MsaHighlightingSchemeFactory * getMsaHighlightingSchemeFactoryById(const QString &id) const;
-    QList<MsaHighlightingSchemeFactory *> getMsaHighlightingSchemes(DNAAlphabetType alphabetType) const;
-
+    MsaHighlightingSchemeFactory * getSchemeFactoryById(const QString &id) const;
+    MsaHighlightingSchemeFactory *getEmptySchemeFactory() const;
+    QList<MsaHighlightingSchemeFactory *> getAllSchemes(DNAAlphabetType alphabetType) const;
+    QMap<AlphabetFlags, QList<MsaHighlightingSchemeFactory*> > getAllSchemesGrouped() const;
 private:
     QList<MsaHighlightingSchemeFactory *> schemes;
 };
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp
index 136863f..3f93231 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 namespace U2 {
 
-MsaHighlightingSchemeAgreements::MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeAgreements::MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
@@ -39,13 +39,11 @@ void MsaHighlightingSchemeAgreements::process(const char refChar, char &seqChar,
     MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
 }
 
-MsaHighlightingSchemeAgreementsFactory::MsaHighlightingSchemeAgreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType)
-{
-
+MsaHighlightingSchemeAgreementsFactory::MsaHighlightingSchemeAgreementsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets) {
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeAgreementsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+MsaHighlightingScheme * MsaHighlightingSchemeAgreementsFactory::create(QObject *parent, MultipleAlignmentObject *maObj ) const {
     return new MsaHighlightingSchemeAgreements(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h
index be24a39..b16a8f3 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeAgreements.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@ namespace U2 {
 class MsaHighlightingSchemeAgreements : public MsaHighlightingScheme{
     Q_OBJECT
 public:
-    MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeAgreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
 };
@@ -37,9 +37,9 @@ public:
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeAgreementsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeAgreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeAgreementsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject * maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject * maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp
index 2751106..069045f 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/MAlignmentObject.h>
+#include <QColor>
+
+#include <U2Core/MultipleAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "MsaHighlightingSchemeConservation.h"
 
 namespace U2 {
 
-MsaHighlightingSchemeConservation::MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeConservation::MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj),
       threshold(50),
       lessThenThreshold(false)
 {
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)), SLOT(sl_resetMap()));
+    connect(maObj, SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)), SLOT(sl_resetMap()));
 }
 
 void MsaHighlightingSchemeConservation::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
@@ -76,9 +78,9 @@ void MsaHighlightingSchemeConservation::sl_resetMap() {
 void MsaHighlightingSchemeConservation::calculateStatisticForColumn(int refCharColumn) const {
     CHECK(!msaCharCountMap.contains(refCharColumn), );
     CharCountMap columnStatistic;
-    const MAlignment &m = maObj->getMAlignment();
-    for (int row = m.getNumRows() - 1; row >= 0; row--) {
-        char seqChar = m.charAt(row, refCharColumn);
+    const MultipleAlignment ma = maObj->getMultipleAlignment();
+    for (int row = ma->getNumRows() - 1; row >= 0; row--) {
+        char seqChar = ma->charAt(row, refCharColumn);
         if (columnStatistic.contains(seqChar)) {
             columnStatistic[seqChar] += 1;
         } else {
@@ -88,13 +90,13 @@ void MsaHighlightingSchemeConservation::calculateStatisticForColumn(int refCharC
     msaCharCountMap[refCharColumn] = columnStatistic;
 }
 
-MsaHighlightingSchemeConservationFactory::MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType, true, true)
+MsaHighlightingSchemeConservationFactory::MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets, true, true)
 {
 
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeConservationFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaHighlightingScheme * MsaHighlightingSchemeConservationFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaHighlightingSchemeConservation(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h
index b839616..f666fc8 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeConservation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_MSA_HIGHLIGHTING_SCHEME_CONSERVATION_H_
 #define _U2_MSA_HIGHLIGHTING_SCHEME_CONSERVATION_H_
 
+#include <QMap>
+
 #include "MsaHighlightingScheme.h"
 
 namespace U2 {
@@ -31,7 +33,7 @@ typedef QMap<char, int> CharCountMap;
 class MsaHighlightingSchemeConservation : public MsaHighlightingScheme {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeConservation(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
     void applySettings(const QVariantMap &settings);
@@ -50,9 +52,9 @@ private:
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeConservationFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeConservationFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp
index 2a041c4..a32b472 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 namespace U2 {
 
-MsaHighlightingSchemeDisagreements::MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeDisagreements::MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
@@ -40,13 +40,11 @@ void MsaHighlightingSchemeDisagreements::process(const char refChar, char &seqCh
 }
 
 
-MsaHighlightingSchemeDisagreementsFactory::MsaHighlightingSchemeDisagreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType)
-{
-
+MsaHighlightingSchemeDisagreementsFactory::MsaHighlightingSchemeDisagreementsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets) {
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeDisagreementsFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaHighlightingScheme * MsaHighlightingSchemeDisagreementsFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaHighlightingSchemeDisagreements(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h
index 058baba..b86b29a 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeDisagreements.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,16 +29,16 @@ namespace U2 {
 class MsaHighlightingSchemeDisagreements : public MsaHighlightingScheme{
     Q_OBJECT
 public:
-    MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeDisagreements(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &hightlight, int refCharColumn, int refCharRow) const;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeDisagreementsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeDisagreementsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeDisagreementsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // nmaespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp
index efe2c31..816939d 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include <QColor>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "MsaHighlightingSchemeGaps.h"
 
@@ -29,14 +29,14 @@ namespace U2 {
 
 const QColor MsaHighlightingSchemeGaps::gapColor = QColor(192, 192, 192);
 
-MsaHighlightingSchemeGaps::MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeGaps::MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
 }
 
 void MsaHighlightingSchemeGaps::process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const {
-    if (seqChar == MAlignment_GapChar) {
+    if (seqChar == U2Msa::GAP_CHAR) {
         color = gapColor;
         highlight = true;
     } else {
@@ -46,13 +46,13 @@ void MsaHighlightingSchemeGaps::process(const char refChar, char &seqChar, QColo
     MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
 }
 
-MsaHighlightingSchemeGapsFactory::MsaHighlightingSchemeGapsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType, true)
+MsaHighlightingSchemeGapsFactory::MsaHighlightingSchemeGapsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets, true)
 {
 
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeGapsFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaHighlightingScheme * MsaHighlightingSchemeGapsFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaHighlightingSchemeGaps(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h
index 9f3a9d4..2433f3c 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeGaps.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@ namespace U2 {
 class MsaHighlightingSchemeGaps : public MsaHighlightingScheme {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeGaps(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
 
@@ -38,9 +38,9 @@ public:
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeGapsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeGapsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeGapsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp
index 0c691dc..9978351 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 namespace U2 {
 
-MsaHighlightingSchemeNoColors::MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeNoColors::MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
@@ -34,13 +34,13 @@ void MsaHighlightingSchemeNoColors::process(const char refChar, char &seqChar, Q
     MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
 }
 
-MsaHighlightingSchemeNoColorsFactory::MsaHighlightingSchemeNoColorsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType, true)
+MsaHighlightingSchemeNoColorsFactory::MsaHighlightingSchemeNoColorsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets, true)
 {
 
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeNoColorsFactory::create(QObject *parent, MAlignmentObject *maObj) const {
+MsaHighlightingScheme * MsaHighlightingSchemeNoColorsFactory::create(QObject *parent, MultipleAlignmentObject *maObj) const {
     return new MsaHighlightingSchemeNoColors(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h
index 67609a1..360a41f 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeNoColors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,16 +29,16 @@ namespace U2 {
 class MsaHighlightingSchemeNoColors : public MsaHighlightingScheme {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeNoColors(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeNoColorsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeNoColorsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeNoColorsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp
index ebdeee7..1073cb6 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 namespace U2 {
 
-MsaHighlightingSchemeTransitions::MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeTransitions::MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
@@ -60,13 +60,13 @@ void MsaHighlightingSchemeTransitions::process(const char refChar, char &seqChar
     MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
 }
 
-MsaHighlightingSchemeTransitionsFactory::MsaHighlightingSchemeTransitionsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType)
+MsaHighlightingSchemeTransitionsFactory::MsaHighlightingSchemeTransitionsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets)
 {
 
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeTransitionsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+MsaHighlightingScheme * MsaHighlightingSchemeTransitionsFactory::create(QObject *parent, MultipleAlignmentObject *maObj ) const {
     return new MsaHighlightingSchemeTransitions(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h
index 9326ef8..557c9a3 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransitions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,16 +29,16 @@ namespace U2 {
 class MsaHighlightingSchemeTransitions : public MsaHighlightingScheme {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeTransitions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeTransitionsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeTransitionsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeTransitionsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp
index c1986be..806caaa 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 namespace U2 {
 
-MsaHighlightingSchemeTransversions::MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj)
+MsaHighlightingSchemeTransversions::MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj)
     : MsaHighlightingScheme(parent, factory, maObj)
 {
 
@@ -60,13 +60,13 @@ void MsaHighlightingSchemeTransversions::process(const char refChar, char &seqCh
     MsaHighlightingScheme::process(refChar, seqChar, color, highlight, refCharColumn, refCharRow);
 }
 
-MsaHighlightingSchemeTransversionsFactory::MsaHighlightingSchemeTransversionsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType)
-    : MsaHighlightingSchemeFactory(parent, id, name, alphabetType)
+MsaHighlightingSchemeTransversionsFactory::MsaHighlightingSchemeTransversionsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets)
+    : MsaHighlightingSchemeFactory(parent, id, name, supportedAlphabets)
 {
 
 }
 
-MsaHighlightingScheme * MsaHighlightingSchemeTransversionsFactory::create(QObject *parent, MAlignmentObject *maObj ) const {
+MsaHighlightingScheme * MsaHighlightingSchemeTransversionsFactory::create(QObject *parent, MultipleAlignmentObject *maObj ) const {
     return new MsaHighlightingSchemeTransversions(parent, this, maObj);
 }
 
diff --git a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h
index 17f8d54..75f29ab 100644
--- a/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h
+++ b/src/corelibs/U2Algorithm/src/util_msaedit/highlighting_schemes/MsaHighlightingSchemeTransversions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,16 +29,16 @@ namespace U2 {
 class MsaHighlightingSchemeTransversions : public MsaHighlightingScheme {
     Q_OBJECT
 public:
-    MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MAlignmentObject *maObj);
+    MsaHighlightingSchemeTransversions(QObject *parent, const MsaHighlightingSchemeFactory *factory, MultipleAlignmentObject *maObj);
 
     void process(const char refChar, char &seqChar, QColor &color, bool &highlight, int refCharColumn, int refCharRow) const;
 };
 
 class U2ALGORITHM_EXPORT MsaHighlightingSchemeTransversionsFactory : public MsaHighlightingSchemeFactory {
 public:
-    MsaHighlightingSchemeTransversionsFactory(QObject *parent, const QString &id, const QString &name, DNAAlphabetType alphabetType);
+    MsaHighlightingSchemeTransversionsFactory(QObject *parent, const QString &id, const QString &name, const AlphabetFlags &supportedAlphabets);
 
-    MsaHighlightingScheme * create(QObject *parent, MAlignmentObject *maObj) const;
+    MsaHighlightingScheme * create(QObject *parent, MultipleAlignmentObject *maObj) const;
 };
 
 
diff --git a/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.cpp b/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.cpp
index cc21c90..e4c5e3f 100644
--- a/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.cpp
+++ b/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.h b/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.h
index 41c8540..bc90871 100644
--- a/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.h
+++ b/src/corelibs/U2Algorithm/src/util_orf/ORFAlgorithmTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 
 #include "ORFFinder.h"
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
index b4f8036..e129b31 100644
--- a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
+++ b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.h b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.h
index fb27f91..d4e2c26 100644
--- a/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.h
+++ b/src/corelibs/U2Algorithm/src/util_orf/ORFFinder.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/DNASequenceObject.h>
 
-#include <QtCore/QList>
+#include <QList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.cpp b/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.cpp
index dd5577b..a99d948 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.cpp
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.h b/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.h
index 3943a6f..bbd6ad8 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.h
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayBasedFindTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 #include <U2Algorithm/BitsTable.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.cpp b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.cpp
index 15495ab..2d9534c 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.cpp
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 
 #include <U2Core/DNASequenceObject.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.h b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.h
index 807aa61..ee1a235 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.h
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndex.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.cpp b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.cpp
index b8e29aa..880a714 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.cpp
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include "SArrayIndexSerializer.h"
 
diff --git a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.h b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.h
index d86a892..7d4649d 100644
--- a/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.h
+++ b/src/corelibs/U2Algorithm/src/util_sarray/SArrayIndexSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "SArrayIndex.h"
 #include <U2Core/global.h>
-#include <QtCore/QFile>
+#include <QFile>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.cpp
index f6acf6f..b60ae03 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.h
index d72c2be..962bbcb 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/BuiltInPWMConversionAlgorithms.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.cpp
index 10ffb3d..07e4412 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.h
index a6a8454..ad9ab83 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.cpp
index 128c97a..a13a372 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.h
index 3f9e0ac..86012f9 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmBVH.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.cpp
index 2f50006..e7ce062 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.h
index 6c58fa0..c9ae624 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmLOD.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.cpp
index c68bb7d..9242396 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.h
index 353502a..93ba950 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmMCH.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.cpp
index 381dca1..6e473d9 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.h
index 0d8094a..5cf4b70 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmNLG.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp
index 1a9e703..42a586a 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.h b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.h
index f463c04..e060ac4 100644
--- a/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.h
+++ b/src/corelibs/U2Algorithm/src/util_weight_matrix/PWMConversionAlgorithmRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "PWMConversionAlgorithm.h"
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Algorithm/transl/english.ts b/src/corelibs/U2Algorithm/transl/english.ts
index 57b79f7..f63eb02 100644
--- a/src/corelibs/U2Algorithm/transl/english.ts
+++ b/src/corelibs/U2Algorithm/transl/english.ts
@@ -53,7 +53,7 @@
         <translation>Some errors occurs in library: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusUtils.cpp" line="109"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusUtils.cpp" line="108"/>
         <source>Gaps:</source>
         <translation>Gaps:</translation>
     </message>
@@ -92,47 +92,47 @@
 <context>
     <name>U2::AlignInAminoFormTask</name>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="99"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="99"/>
         <source>Align in amino form</source>
         <translation>Align in amino form</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="109"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="109"/>
         <source>Invalid MSA object detected</source>
         <translation>Invalid MSA object detected</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="110"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="110"/>
         <source>AlignInAminoFormTask: Input alphabet is not nucleic!</source>
         <translation>AlignInAminoFormTask: Input alphabet is not nucleic!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="111"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="111"/>
         <source>AlignInAminoFormTask: Input alignment is empty!</source>
         <translation>AlignInAminoFormTask: Input alignment is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="118"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="118"/>
         <source>Invalid applications settings detected</source>
         <translation>Invalid applications settings detected</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="121"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="121"/>
         <source>Invalid users applications settings detected</source>
         <translation>Invalid users applications settings detected</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="128"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="128"/>
         <source>Invalid MSA document detected</source>
         <translation>Invalid MSA document detected</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="148"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="148"/>
         <source>NULL clonedObj in AlignInAminoFormTask::prepare!</source>
         <translation>NULL clonedObj in AlignInAminoFormTask::prepare!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="158"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="157"/>
         <source>Can not find row %1 in original alignment.</source>
         <translation>Can not find row %1 in original alignment.</translation>
     </message>
@@ -181,7 +181,7 @@
 <context>
     <name>U2::BestPositionFindTask</name>
     <message>
-        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="105"/>
+        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="120"/>
         <source>Best position find task</source>
         <translation>Best position find task</translation>
     </message>
@@ -189,12 +189,12 @@
 <context>
     <name>U2::CreateSubalignmentTask</name>
     <message>
-        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="55"/>
+        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="50"/>
         <source>Create sub-alignment: %1</source>
         <translation>Create sub-alignment: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="89"/>
+        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="82"/>
         <source>Document is locked: %1</source>
         <translation>Document is locked: %1</translation>
     </message>
@@ -202,7 +202,7 @@
 <context>
     <name>U2::DnaAssemblyMultiTask</name>
     <message>
-        <location filename="../src/misc/DnaAssemblyMultiTask.cpp" line="84"/>
+        <location filename="../src/misc/DnaAssemblyMultiTask.cpp" line="79"/>
         <source>The short reads can't be mapped to the reference sequence!</source>
         <translation>The short reads can't be mapped to the reference sequence!</translation>
     </message>
@@ -210,7 +210,7 @@
 <context>
     <name>U2::DnaAssemblyToReferenceTask</name>
     <message>
-        <location filename="../src/registry/DnaAssemblyTask.cpp" line="30"/>
+        <location filename="../src/registry/DnaAssemblyTask.cpp" line="34"/>
         <source>Align short reads</source>
         <translation>Align short reads</translation>
     </message>
@@ -226,7 +226,7 @@
 <context>
     <name>U2::GenomeAssemblyMultiTask</name>
     <message>
-        <location filename="../src/misc/GenomeAssemblyMultiTask.cpp" line="86"/>
+        <location filename="../src/misc/GenomeAssemblyMultiTask.cpp" line="81"/>
         <source>Assembly cannot be performed.</source>
         <translation>Assembly cannot be performed.</translation>
     </message>
@@ -234,12 +234,12 @@
 <context>
     <name>U2::LoadPatternsFileTask</name>
     <message>
-        <location filename="../src/misc/FindAlgorithmTask.cpp" line="107"/>
+        <location filename="../src/misc/FindAlgorithmTask.cpp" line="108"/>
         <source>Load pattern from file</source>
         <translation>Load pattern from file</translation>
     </message>
     <message>
-        <location filename="../src/misc/FindAlgorithmTask.cpp" line="128"/>
+        <location filename="../src/misc/FindAlgorithmTask.cpp" line="129"/>
         <source>Detecting format error for file %1</source>
         <translation>Detecting format error for file %1</translation>
     </message>
@@ -288,12 +288,12 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSAConsensusAlgorithmFactoryStrict</name>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="39"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="41"/>
         <source>The algorithm returns gap character ('-') if symbol frequency in a column is lower than threshold specified.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="43"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="45"/>
         <source>Strict</source>
         <translation></translation>
     </message>
@@ -348,12 +348,25 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSADistanceAlgorithmHammingRevCompl</name>
     <message>
-        <location filename="../src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp" line="78"/>
+        <location filename="../src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp" line="77"/>
         <source>An unexpected error has occurred during running the Hamming reverse-complement algorithm.</source>
         <translation>An unexpected error has occurred during running the Hamming reverse-complement algorithm.</translation>
     </message>
 </context>
 <context>
+    <name>U2::MaConsensusAlgorithmFactorySimpleExtended</name>
+    <message>
+        <location filename="../src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp" line="198"/>
+        <source>The algorithm selects the best character from the extended DNA alphabet. Only bases with frequences which are greater than a threshold value are taken into account.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp" line="203"/>
+        <source>Simple extended</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::MolecularSurfaceCalcTask</name>
     <message>
         <location filename="../src/molecular_geometry/MolecularSurface.cpp" line="126"/>
@@ -362,113 +375,131 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
 </context>
 <context>
+    <name>U2::MsaColorSchemeFactory</name>
+    <message>
+        <source>Nucleotide</source>
+        <translation type="vanished">Nucleotide</translation>
+    </message>
+    <message>
+        <source>Amino</source>
+        <translation type="vanished">Amino</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="496"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="511"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="552"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="533"/>
         <source>No colors</source>
         <translation>No colors</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="504"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="541"/>
+        <source>UGENE Sanger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="545"/>
         <source>Jalview</source>
         <translation>Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="506"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="545"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="547"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="585"/>
         <source>Percentage Identity</source>
         <translation>Percentage Identity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="507"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="546"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="586"/>
         <source>Percentage Identity (gray)</source>
         <translation>Percentage Identity (gray)</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="519"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="559"/>
         <source>Zappo</source>
         <translation>Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="523"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="563"/>
         <source>Tailor</source>
         <translation>Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="527"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="567"/>
         <source>Hydrophobicity</source>
         <translation>Hydrophobicity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="531"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="571"/>
         <source>Helix propensity</source>
         <translation>Helix propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="535"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="575"/>
         <source>Strand propensity</source>
         <translation>Strand propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="539"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="579"/>
         <source>Turn propensity</source>
         <translation>Turn propensity</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="543"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="583"/>
         <source>Buried index</source>
         <translation>Buried index</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="588"/>
         <source>Clustal X</source>
         <translation>Clustal X</translation>
     </message>
 </context>
 <context>
+    <name>U2::MsaHighlightingSchemeFactory</name>
+    <message>
+        <source>Nucleotide</source>
+        <translation type="vanished">Nucleotide</translation>
+    </message>
+    <message>
+        <source>Amino</source>
+        <translation type="vanished">Amino</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaHighlightingSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="120"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="121"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="122"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="117"/>
         <source>No highlighting</source>
         <translation>No highlighting</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="124"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="125"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="118"/>
         <source>Agreements</source>
         <translation>Agreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="127"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="128"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="119"/>
         <source>Disagreements</source>
         <translation>Disagreements</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="130"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="131"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="132"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="120"/>
         <source>Gaps</source>
         <translation>Gaps</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="134"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="135"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="121"/>
         <source>Conservation level</source>
         <translation>Conservation level</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="137"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="122"/>
         <source>Transitions</source>
         <translation>Transitions</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="138"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="123"/>
         <source>Transversions</source>
         <translation>Transversions</translation>
     </message>
@@ -576,7 +607,7 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::SimpleAddToAlignmentTask</name>
     <message>
-        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="49"/>
+        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="51"/>
         <source>Align sequences to an existing alignment by UGENE started</source>
         <translation>Align sequences to an existing alignment by UGENE started</translation>
     </message>
@@ -613,19 +644,19 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="222"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="308"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="306"/>
         <source>Failed to create an alignment.</source>
         <translation>Failed to create an alignment.</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="251"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="328"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="326"/>
         <source>Smith-Waterman pairwise alignment: no results</source>
         <translation>Smith-Waterman pairwise alignment: no results</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="258"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="334"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="332"/>
         <source>Sequences aren't stored in the source msa dbi</source>
         <translation>Sequences aren't stored in the source msa dbi</translation>
     </message>
@@ -637,33 +668,31 @@ For every column selects the most rare symbol in the whole alignment with percen
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="278"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="280"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="342"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="344"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="346"/>
         <source>Failed to get the sequence object.</source>
         <translation>Failed to get the sequence object.</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="294"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="296"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="360"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="363"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="358"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="361"/>
         <source>Failed to get the sequence data.</source>
         <translation>Failed to get the sequence data.</translation>
     </message>
     <message>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="303"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="305"/>
         <source>Failed to add row to result msa.</source>
-        <translation>Failed to add row to result msa.</translation>
+        <translation type="vanished">Failed to add row to result msa.</translation>
     </message>
     <message>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="372"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="370"/>
         <source>Failed to get msa from dbi</source>
         <translation>Failed to get msa from dbi</translation>
     </message>
     <message>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="394"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="396"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="398"/>
         <source>Failed to update row gap model</source>
         <translation>Failed to update row gap model</translation>
     </message>
@@ -746,32 +775,32 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
 </context>
 <context>
-    <name>U2::TranslateMSA2AminoTask</name>
+    <name>U2::TranslateMsa2AminoTask</name>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="48"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="61"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="48"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="61"/>
         <source>Translate nucleic alignment to amino</source>
         <translation>Translate nucleic alignment to amino</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="50"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="63"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="50"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="63"/>
         <source>Invalid MSA object detected</source>
         <translation>Invalid MSA object detected</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="51"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="64"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="51"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="64"/>
         <source>Multiple alignment already has amino-acid alphabet</source>
         <translation>Multiple alignment already has amino-acid alphabet</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="55"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="55"/>
         <source>Unable to find suitable translation for %1</source>
         <translation>Unable to find suitable translation for %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="71"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="71"/>
         <source>Invalid translation object</source>
         <translation>Invalid translation object</translation>
     </message>
diff --git a/src/corelibs/U2Algorithm/transl/russian.ts b/src/corelibs/U2Algorithm/transl/russian.ts
index eccb7de..78d6f48 100644
--- a/src/corelibs/U2Algorithm/transl/russian.ts
+++ b/src/corelibs/U2Algorithm/transl/russian.ts
@@ -53,7 +53,7 @@
         <translation>Найдены ошибки в библиотеке: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusUtils.cpp" line="109"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusUtils.cpp" line="108"/>
         <source>Gaps:</source>
         <translation>Пробелы:</translation>
     </message>
@@ -92,47 +92,47 @@
 <context>
     <name>U2::AlignInAminoFormTask</name>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="99"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="99"/>
         <source>Align in amino form</source>
         <translation>Выравнивание в амино форму</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="109"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="109"/>
         <source>Invalid MSA object detected</source>
         <translation>Обнаружен некорректный MSA объект</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="110"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="110"/>
         <source>AlignInAminoFormTask: Input alphabet is not nucleic!</source>
         <translation>AlignInAminoFormTask: Входной алфавит не является нуклеотидным!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="111"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="111"/>
         <source>AlignInAminoFormTask: Input alignment is empty!</source>
         <translation>AlignInAminoFormTask: Входное выравнивание пустое!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="118"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="118"/>
         <source>Invalid applications settings detected</source>
         <translation>Обнаружены некорректные настройки приложений</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="121"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="121"/>
         <source>Invalid users applications settings detected</source>
         <translation>Обнаружены некорректные настройки приложений</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="128"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="128"/>
         <source>Invalid MSA document detected</source>
         <translation>Обнаружен некорректный MSA документ</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="148"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="148"/>
         <source>NULL clonedObj in AlignInAminoFormTask::prepare!</source>
         <translation>NULL clonedObj in AlignInAminoFormTask::prepare!</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="158"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="157"/>
         <source>Can not find row %1 in original alignment.</source>
         <translation>Строка %1 не может быть найдена в исходном выравнивании.</translation>
     </message>
@@ -181,7 +181,7 @@
 <context>
     <name>U2::BestPositionFindTask</name>
     <message>
-        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="105"/>
+        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="120"/>
         <source>Best position find task</source>
         <translation>Best position find task</translation>
     </message>
@@ -189,12 +189,12 @@
 <context>
     <name>U2::CreateSubalignmentTask</name>
     <message>
-        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="55"/>
+        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="50"/>
         <source>Create sub-alignment: %1</source>
         <translation>Создание участка выравнивания: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="89"/>
+        <location filename="../src/util_msaedit/CreateSubalignmentTask.cpp" line="82"/>
         <source>Document is locked: %1</source>
         <translation>Документ заблокирован: %1</translation>
     </message>
@@ -202,7 +202,7 @@
 <context>
     <name>U2::DnaAssemblyMultiTask</name>
     <message>
-        <location filename="../src/misc/DnaAssemblyMultiTask.cpp" line="84"/>
+        <location filename="../src/misc/DnaAssemblyMultiTask.cpp" line="79"/>
         <source>The short reads can't be mapped to the reference sequence!</source>
         <translation>Короткие риды не могут быть отражены в референсной последовательности!</translation>
     </message>
@@ -210,7 +210,7 @@
 <context>
     <name>U2::DnaAssemblyToReferenceTask</name>
     <message>
-        <location filename="../src/registry/DnaAssemblyTask.cpp" line="30"/>
+        <location filename="../src/registry/DnaAssemblyTask.cpp" line="34"/>
         <source>Align short reads</source>
         <translation>Align short reads</translation>
     </message>
@@ -226,7 +226,7 @@
 <context>
     <name>U2::GenomeAssemblyMultiTask</name>
     <message>
-        <location filename="../src/misc/GenomeAssemblyMultiTask.cpp" line="86"/>
+        <location filename="../src/misc/GenomeAssemblyMultiTask.cpp" line="81"/>
         <source>Assembly cannot be performed.</source>
         <translation>Assembly cannot be performed.</translation>
     </message>
@@ -234,12 +234,12 @@
 <context>
     <name>U2::LoadPatternsFileTask</name>
     <message>
-        <location filename="../src/misc/FindAlgorithmTask.cpp" line="107"/>
+        <location filename="../src/misc/FindAlgorithmTask.cpp" line="108"/>
         <source>Load pattern from file</source>
         <translation>Загрузить паттерн из файла</translation>
     </message>
     <message>
-        <location filename="../src/misc/FindAlgorithmTask.cpp" line="128"/>
+        <location filename="../src/misc/FindAlgorithmTask.cpp" line="129"/>
         <source>Detecting format error for file %1</source>
         <translation>Ошибка распознавания формата для файла %1</translation>
     </message>
@@ -290,14 +290,14 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSAConsensusAlgorithmFactoryStrict</name>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="39"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="41"/>
         <source>The algorithm returns gap character ('-') if symbol frequency in a column is lower than threshold specified.</source>
         <translation>Алгоритм возвращает символ пробела ('-'), если частота появления символа в столбце меньше, чем величина, заданная в пороге.</translation>
     </message>
     <message>
-        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="43"/>
+        <location filename="../src/util_msa_consensus/MSAConsensusAlgorithmStrict.cpp" line="45"/>
         <source>Strict</source>
-        <translation>Строгая схема</translation>
+        <translation>Строгий</translation>
     </message>
 </context>
 <context>
@@ -350,12 +350,25 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::MSADistanceAlgorithmHammingRevCompl</name>
     <message>
-        <location filename="../src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp" line="78"/>
+        <location filename="../src/util_msa_distance/MSADistanceAlgorithmHammingRevCompl.cpp" line="77"/>
         <source>An unexpected error has occurred during running the Hamming reverse-complement algorithm.</source>
         <translation>Произошла ошибка во время запуска обратно-комплементарного алгоритма Хэмминга.</translation>
     </message>
 </context>
 <context>
+    <name>U2::MaConsensusAlgorithmFactorySimpleExtended</name>
+    <message>
+        <location filename="../src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp" line="198"/>
+        <source>The algorithm selects the best character from the extended DNA alphabet. Only bases with frequences which are greater than a threshold value are taken into account.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util_msa_consensus/MaConsensusAlgorithmSimpleExtended.cpp" line="203"/>
+        <source>Simple extended</source>
+        <translation>Простой с расширенным алфавитом</translation>
+    </message>
+</context>
+<context>
     <name>U2::MolecularSurfaceCalcTask</name>
     <message>
         <location filename="../src/molecular_geometry/MolecularSurface.cpp" line="126"/>
@@ -364,113 +377,131 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
 </context>
 <context>
+    <name>U2::MsaColorSchemeFactory</name>
+    <message>
+        <source>Nucleotide</source>
+        <translation type="vanished">Нуклеотидная</translation>
+    </message>
+    <message>
+        <source>Amino</source>
+        <translation type="vanished">Аминокислотная</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaColorSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="496"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="511"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="552"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="533"/>
         <source>No colors</source>
         <translation>Без цвета</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="504"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="541"/>
+        <source>UGENE Sanger</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="545"/>
         <source>Jalview</source>
         <translation>Раскраска Jalview</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="506"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="545"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="547"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="585"/>
         <source>Percentage Identity</source>
         <translation>По процентному соотношению</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="507"/>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="546"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="586"/>
         <source>Percentage Identity (gray)</source>
         <translation>По процентному соотношению (серый)</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="519"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="559"/>
         <source>Zappo</source>
         <translation>Zappo</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="523"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="563"/>
         <source>Tailor</source>
         <translation>Tailor</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="527"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="567"/>
         <source>Hydrophobicity</source>
         <translation>Гидрофобность</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="531"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="571"/>
         <source>Helix propensity</source>
         <translation>Склонность к спиральности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="535"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="575"/>
         <source>Strand propensity</source>
         <translation>Склонность к линейности</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="539"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="579"/>
         <source>Turn propensity</source>
         <translation>Склонность к сворачиванию</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="543"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="583"/>
         <source>Buried index</source>
         <translation>Индекс</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="548"/>
+        <location filename="../src/util_msaedit/color_schemes/MsaColorScheme.cpp" line="588"/>
         <source>Clustal X</source>
         <translation>Clustal X</translation>
     </message>
 </context>
 <context>
+    <name>U2::MsaHighlightingSchemeFactory</name>
+    <message>
+        <source>Nucleotide</source>
+        <translation type="vanished">Нуклеотидная</translation>
+    </message>
+    <message>
+        <source>Amino</source>
+        <translation type="vanished">Аминокислотная</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaHighlightingSchemeRegistry</name>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="120"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="121"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="122"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="117"/>
         <source>No highlighting</source>
         <translation>Без выделения</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="124"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="125"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="118"/>
         <source>Agreements</source>
         <translation>Совпадающие нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="127"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="128"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="119"/>
         <source>Disagreements</source>
         <translation>Различающиеся нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="130"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="131"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="132"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="120"/>
         <source>Gaps</source>
         <translation>Пробелы</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="134"/>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="135"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="121"/>
         <source>Conservation level</source>
         <translation>Уровень сохранения</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="137"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="122"/>
         <source>Transitions</source>
         <translation>Транзиции</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="138"/>
+        <location filename="../src/util_msaedit/highlighting_schemes/MsaHighlightingScheme.cpp" line="123"/>
         <source>Transversions</source>
         <translation>Трансверсии</translation>
     </message>
@@ -578,7 +609,7 @@ For every column selects the most rare symbol in the whole alignment with percen
 <context>
     <name>U2::SimpleAddToAlignmentTask</name>
     <message>
-        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="49"/>
+        <location filename="../src/msa_alignment/SimpleAddingToAlignment.cpp" line="51"/>
         <source>Align sequences to an existing alignment by UGENE started</source>
         <translation>Align sequences to an existing alignment by UGENE started</translation>
     </message>
@@ -615,19 +646,19 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="222"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="308"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="306"/>
         <source>Failed to create an alignment.</source>
         <translation>Неудачная попытка создания выравнивания.</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="251"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="328"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="326"/>
         <source>Smith-Waterman pairwise alignment: no results</source>
         <translation>Парное выравнивание Smith-Waterman: нет результатов</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="258"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="334"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="332"/>
         <source>Sequences aren't stored in the source msa dbi</source>
         <translation>Последовательности не хранятся в источнике msa dbi</translation>
     </message>
@@ -639,33 +670,31 @@ For every column selects the most rare symbol in the whole alignment with percen
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="278"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="280"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="342"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="344"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="346"/>
         <source>Failed to get the sequence object.</source>
         <translation>Неудачная попытка получения объекта последовательности.</translation>
     </message>
     <message>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="294"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="296"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="360"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="363"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="358"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="361"/>
         <source>Failed to get the sequence data.</source>
         <translation>Неудачная попытка получения данных последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="303"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="305"/>
         <source>Failed to add row to result msa.</source>
-        <translation>Неудачная попытка добавления строки в результирующее выравнивание.</translation>
+        <translation type="vanished">Неудачная попытка добавления строки в результирующее выравнивание.</translation>
     </message>
     <message>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="372"/>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="370"/>
         <source>Failed to get msa from dbi</source>
         <translation>Неудачная попытка получения msa из dbi</translation>
     </message>
     <message>
+        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="394"/>
         <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="396"/>
-        <location filename="../src/smith_waterman/SmithWatermanReportCallback.cpp" line="398"/>
         <source>Failed to update row gap model</source>
         <translation>Неудачная попытка обновить модель пробелов строк</translation>
     </message>
@@ -748,32 +777,32 @@ For every column selects the most rare symbol in the whole alignment with percen
     </message>
 </context>
 <context>
-    <name>U2::TranslateMSA2AminoTask</name>
+    <name>U2::TranslateMsa2AminoTask</name>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="48"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="61"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="48"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="61"/>
         <source>Translate nucleic alignment to amino</source>
         <translation>Трансляция нуклеотидного выравнивания в амино</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="50"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="63"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="50"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="63"/>
         <source>Invalid MSA object detected</source>
         <translation>Обнаружен некорректный MSA объект</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="51"/>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="64"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="51"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="64"/>
         <source>Multiple alignment already has amino-acid alphabet</source>
         <translation>Выравнивание уже имеет аминокислотный алфавит</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="55"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="55"/>
         <source>Unable to find suitable translation for %1</source>
         <translation>Невозможно найти подходящую трансляцию для %1</translation>
     </message>
     <message>
-        <location filename="../src/util_msaedit/MAlignmentUtilTasks.cpp" line="71"/>
+        <location filename="../src/util_msaedit/MsaUtilTasks.cpp" line="71"/>
         <source>Invalid translation object</source>
         <translation>Некорректный объект трансляции</translation>
     </message>
diff --git a/src/corelibs/U2Core/CMakeLists.txt b/src/corelibs/U2Core/CMakeLists.txt
index d618379..8d0e27d 100644
--- a/src/corelibs/U2Core/CMakeLists.txt
+++ b/src/corelibs/U2Core/CMakeLists.txt
@@ -20,6 +20,6 @@ file(GLOB_RECURSE HDRS src/*.h)
 add_library(U2Core SHARED ${HDRS} ${SRCS})
 
 target_link_libraries(U2Core
-        proc
+        procps
         Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network Qt5::Script Qt5::Xml
         ugenedb zlib)
diff --git a/src/corelibs/U2Core/U2Core.pri b/src/corelibs/U2Core/U2Core.pri
index 8aa5b58..7db5fde 100644
--- a/src/corelibs/U2Core/U2Core.pri
+++ b/src/corelibs/U2Core/U2Core.pri
@@ -5,8 +5,7 @@ include( ../../ugene_lib_common.pri )
 
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += network xml
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+QT += network xml widgets
 
 DEFINES+=UGENE_MIN_VERSION_SQLITE=$${UGENE_MIN_VERSION_SQLITE}
 DEFINES+=UGENE_MIN_VERSION_MYSQL=$${UGENE_MIN_VERSION_MYSQL}
diff --git a/src/corelibs/U2Core/U2Core.pro b/src/corelibs/U2Core/U2Core.pro
index c8226f6..b3aeaf9 100644
--- a/src/corelibs/U2Core/U2Core.pro
+++ b/src/corelibs/U2Core/U2Core.pro
@@ -23,8 +23,6 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/datatype/DNATranslation.h \
            src/datatype/DNATranslationImpl.h \
            src/datatype/FeatureColors.h \
-           src/datatype/MAlignment.h \
-           src/datatype/MAlignmentInfo.h \
            src/datatype/Matrix44.h \
            src/datatype/PFMatrix.h \
            src/datatype/PhyTree.h \
@@ -40,7 +38,6 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/datatype/U2IdTypes.h \
            src/datatype/U2Location.h \
            src/datatype/U2Mod.h \
-           src/datatype/U2Msa.h \
            src/datatype/U2Qualifier.h \
            src/datatype/U2Range.h \
            src/datatype/U2RawData.h \
@@ -54,6 +51,17 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/datatype/UdrSchemaRegistry.h \
            src/datatype/Vector3D.h \
            src/datatype/udr/RawDataUdrSchema.h \
+           src/datatype/U2Msa.h \
+           src/datatype/U2Mca.h \
+           src/datatype/msa/MaStateCheck.h \
+           src/datatype/msa/MultipleAlignment.h \
+           src/datatype/msa/MultipleAlignmentInfo.h \
+           src/datatype/msa/MultipleAlignmentRow.h \
+           src/datatype/msa/MultipleAlignmentRowInfo.h \
+           src/datatype/msa/MultipleChromatogramAlignment.h \
+           src/datatype/msa/MultipleChromatogramAlignmentRow.h \
+           src/datatype/msa/MultipleSequenceAlignment.h \
+           src/datatype/msa/MultipleSequenceAlignmentRow.h \
            src/dbi/DbiConnection.h \
            src/dbi/DbiDocumentFormat.h \
            src/dbi/U2AbstractDbi.h \
@@ -123,7 +131,9 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/gobjects/GObjectRelationRoles.h \
            src/gobjects/GObjectTypes.h \
            src/gobjects/GObjectUtils.h \
-           src/gobjects/MAlignmentObject.h \
+           src/gobjects/MultipleAlignmentObject.h \
+           src/gobjects/MultipleChromatogramAlignmentObject.h \
+           src/gobjects/MultipleSequenceAlignmentObject.h \
            src/gobjects/PFMatrixObject.h \
            src/gobjects/PhyTreeObject.h \
            src/gobjects/PWMatrixObject.h \
@@ -175,6 +185,7 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/tasks/ConsoleShutdownTask.h \
            src/tasks/CopyDataTask.h \
            src/tasks/CopyDocumentTask.h \
+           src/tasks/CopyFileTask.h \
            src/tasks/CreateAnnotationTask.h \
            src/tasks/DeleteObjectsTask.h \
            src/tasks/DocumentProviderTask.h \
@@ -204,6 +215,7 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/tasks/shared_db/ImportToDatabaseTask.h \
            src/util/AnnotationCreationPattern.h \
            src/util/AssemblyImporter.h \
+           src/util/ChromatogramUtils.h \
            src/util/DatatypeSerializeUtils.h \
            src/util/FileAndDirectoryUtils.h \
            src/util/FilesIterator.h \
@@ -214,17 +226,25 @@ HEADERS += src/cmdline/CMDLineCoreOptions.h \
            src/util/GUrlUtils.h \
            src/util/ImportToDatabaseOptions.h \
            src/util/IOAdapterUtils.h \
-           src/util/MAlignmentExporter.h \
-           src/util/MAlignmentImporter.h \
-           src/util/MAlignmentWalker.h \
+           src/util/MaIterator.h \
+           src/util/MaModificationInfo.h \
+           src/util/McaDbiUtils.h \
            src/util/MsaDbiUtils.h \
+           src/util/McaRowInnerData.h \
            src/util/MsaRowUtils.h \
            src/util/MSAUtils.h \
+           src/util/MultipleChromatogramAlignmentExporter.h \
+           src/util/MultipleChromatogramAlignmentImporter.h \
+           src/util/MultipleSequenceAlignmentExporter.h \
+           src/util/MultipleSequenceAlignmentImporter.h \
+           src/util/MultipleSequenceAlignmentWalker.h \
            src/util/PMatrixSerializeUtils.h \
            src/util/QObjectScopedPointer.h \
            src/util/QVariantUtils.h \
            src/util/SequenceUtils.h \
+           src/util/SignalBlocker.h \
            src/util/SnpeffDictionary.h \
+           src/util/StrPackUtils.h \
            src/util/SyncHttp.h \
            src/util/TextUtils.h \
            src/util/TaskWatchdog.h \
@@ -263,8 +283,6 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/datatype/DNATranslation.cpp \
            src/datatype/DNATranslationImpl.cpp \
            src/datatype/FeatureColors.cpp \
-           src/datatype/MAlignment.cpp \
-           src/datatype/MAlignmentInfo.cpp \
            src/datatype/Matrix44.cpp \
            src/datatype/PFMatrix.cpp \
            src/datatype/PhyTree.cpp \
@@ -281,6 +299,18 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/datatype/UdrSchema.cpp \
            src/datatype/UdrSchemaRegistry.cpp \
            src/datatype/Vector3D.cpp \
+           src/datatype/U2Mca.cpp \
+           src/datatype/U2Msa.cpp \
+           src/datatype/DNAChromatogram.cpp \
+           src/datatype/msa/MaStateCheck.cpp \
+           src/datatype/msa/MultipleAlignment.cpp \
+           src/datatype/msa/MultipleAlignmentInfo.cpp \
+           src/datatype/msa/MultipleAlignmentRow.cpp \
+           src/datatype/msa/MultipleAlignmentRowInfo.cpp \
+           src/datatype/msa/MultipleChromatogramAlignmentRow.cpp \
+           src/datatype/msa/MultipleChromatogramAlignment.cpp \
+           src/datatype/msa/MultipleSequenceAlignment.cpp \
+           src/datatype/msa/MultipleSequenceAlignmentRow.cpp \
            src/datatype/udr/RawDataUdrSchema.cpp \
            src/dbi/DbiConnection.cpp \
            src/dbi/DbiDocumentFormat.cpp \
@@ -332,7 +362,9 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/gobjects/GObjectRelationRoles.cpp \
            src/gobjects/GObjectTypes.cpp \
            src/gobjects/GObjectUtils.cpp \
-           src/gobjects/MAlignmentObject.cpp \
+           src/gobjects/MultipleAlignmentObject.cpp \
+           src/gobjects/MultipleChromatogramAlignmentObject.cpp \
+           src/gobjects/MultipleSequenceAlignmentObject.cpp \
            src/gobjects/PFMatrixObject.cpp \
            src/gobjects/PhyTreeObject.cpp \
            src/gobjects/PWMatrixObject.cpp \
@@ -379,6 +411,7 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/tasks/ConsoleShutdownTask.cpp \
            src/tasks/CopyDataTask.cpp \
            src/tasks/CopyDocumentTask.cpp \
+           src/tasks/CopyFileTask.cpp \
            src/tasks/CreateAnnotationTask.cpp \
            src/tasks/DeleteObjectsTask.cpp \
            src/tasks/DocumentProviderTask.cpp \
@@ -407,6 +440,7 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/tasks/shared_db/ImportToDatabaseTask.cpp \
            src/util/AnnotationCreationPattern.cpp \
            src/util/AssemblyImporter.cpp \
+           src/util/ChromatogramUtils.cpp \
            src/util/DatatypeSerializeUtils.cpp \
            src/util/FileAndDirectoryUtils.cpp \
            src/util/FilesIterator.cpp \
@@ -417,15 +451,23 @@ SOURCES += src/cmdline/CMDLineCoreOptions.cpp \
            src/util/GUrlUtils.cpp \
            src/util/ImportToDatabaseOptions.cpp \
            src/util/IOAdapterUtils.cpp \
-           src/util/MAlignmentExporter.cpp \
-           src/util/MAlignmentImporter.cpp \
-           src/util/MAlignmentWalker.cpp \
+           src/util/MaIterator.cpp \
+           src/util/MaModificationInfo.cpp \
+           src/util/McaDbiUtils.cpp \
+           src/util/McaRowInnerData.cpp \
            src/util/MsaDbiUtils.cpp \
            src/util/MsaRowUtils.cpp \
            src/util/MSAUtils.cpp \
+           src/util/MultipleChromatogramAlignmentExporter.cpp \
+           src/util/MultipleChromatogramAlignmentImporter.cpp \
+           src/util/MultipleSequenceAlignmentExporter.cpp \
+           src/util/MultipleSequenceAlignmentImporter.cpp \
+           src/util/MultipleSequenceAlignmentWalker.cpp \
            src/util/QVariantUtils.cpp \
            src/util/SequenceUtils.cpp \
+           src/util/SignalBlocker.cpp \
            src/util/SnpeffDictionary.cpp \
+           src/util/StrPackUtils.cpp \
            src/util/SyncHttp.cpp \
            src/util/TextUtils.cpp \
            src/util/TaskWatchdog.cpp \
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.cpp b/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.cpp
index d3e26f2..844501d 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.cpp
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.h b/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.h
index 978c225..249bfa2 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineCoreOptions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_CMDLINE_OPTIONS_H_
 #define _U2_CMDLINE_OPTIONS_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QString>
+#include <QObject>
+#include <QString>
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineHelpProvider.h b/src/corelibs/U2Core/src/cmdline/CMDLineHelpProvider.h
index 06239bc..0e9f70d 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineHelpProvider.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineHelpProvider.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
index 6c17fad..5921f13 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -72,7 +72,7 @@ CMDLineRegistry::CMDLineRegistry(const QStringList& arguments) {
     int sz = arguments.size();
     for( int i = 0; i < sz; i++ ) {
         const QString& argument = arguments.at( i );
-        StringPair pair;
+        StrStrPair pair;
         if ( !tryParseDoubleDashParameter(argument, pair.first, pair.second) ) {
             QString nextArgument;
             if (i < sz - 1) {
@@ -99,13 +99,13 @@ CMDLineRegistry::~CMDLineRegistry() {
     qDeleteAll( helpProviders );
 }
 
-const QList<StringPair> & CMDLineRegistry::getParameters() const {
+const QList<StrStrPair> & CMDLineRegistry::getParameters() const {
     return params;
 }
 
 QStringList CMDLineRegistry::getOrderedParameterNames() const {
     QStringList res;
-    QList<StringPair>::const_iterator it = params.constBegin();
+    QList<StrStrPair>::const_iterator it = params.constBegin();
     while( it != params.constEnd() ) {
         res << it->first;
         ++it;
@@ -116,7 +116,7 @@ QStringList CMDLineRegistry::getOrderedParameterNames() const {
 bool CMDLineRegistry::hasParameter( const QString & paramName, int startWithIdx ) const {
     int sz = params.size();
     for( int i = qMax(0, startWithIdx); i < sz; ++i ) {
-        const StringPair& param = params[i];
+        const StrStrPair& param = params[i];
         if( param.first == paramName ) {
             return true;
         }
@@ -127,7 +127,7 @@ bool CMDLineRegistry::hasParameter( const QString & paramName, int startWithIdx
 QString CMDLineRegistry::getParameterValue( const QString & paramName, int startWithIdx ) const {
     int sz = params.size();
     for( int i = qMax(0, startWithIdx); i < sz; ++i ) {
-        const StringPair& param = params[i];
+        const StrStrPair& param = params[i];
         if( param.first == paramName ) {
             return param.second;
         }
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
index 3bf8580..a4be507 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,11 @@
 #ifndef _U2_CMD_LINE_REGISTRY_
 #define _U2_CMD_LINE_REGISTRY_
 
-#include <U2Core/global.h>
+#include <QMap>
+#include <QStringList>
 
-#include <QtCore/QStringList>
-#include <QtCore/QMap>
+#include <U2Core/global.h>
+#include <U2Core/StrPackUtils.h>
 
 namespace U2 {
 
@@ -47,7 +48,7 @@ public:
     CMDLineRegistry(const QStringList& arguments);
     virtual ~CMDLineRegistry();
 
-    const QList<StringPair> & getParameters() const;
+    const QList<StrStrPair> & getParameters() const;
     // as they were in cmdline. Empty keys also here
     QStringList getOrderedParameterNames() const;
 
@@ -62,7 +63,7 @@ public:
     const QList<CMDLineHelpProvider* >& listCMDLineHelpProviders() const { return helpProviders; }
 
 private:
-    QList<StringPair>                   params; // pairs (paramName, paramValue) ordered as in the cmdline
+    QList<StrStrPair>                   params; // pairs (paramName, paramValue) ordered as in the cmdline
     QList<CMDLineHelpProvider* >        helpProviders; // sorted by section name
 
 }; // CMDLineRegistry
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
index b70ced7..a9d4a79 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@ namespace U2 {
 * CMDLineRegistryUtils
 ***************************************************/
 int CMDLineRegistryUtils::getParameterIndex( const QString & paramName, int startWith ) {
-    QList<StringPair> params;
+    QList<StrStrPair> params;
     setCMDLineParams( params );
     int sz = params.size();
     for( int i = qMax( 0, startWith ); i < sz; ++i ) {
@@ -42,7 +42,7 @@ int CMDLineRegistryUtils::getParameterIndex( const QString & paramName, int star
 }
 
 QStringList CMDLineRegistryUtils::getParameterValues( const QString & paramName, int startWith ) {
-    QList<StringPair> params;
+    QList<StrStrPair> params;
     setCMDLineParams( params );
     QStringList res;
     int sz = params.size();
@@ -71,12 +71,12 @@ QStringList CMDLineRegistryUtils::getParameterValuesByWords( const QString & par
 }
 
 QStringList CMDLineRegistryUtils::getPureValues( int startWithIdx ) {
-    QList<StringPair> params;
+    QList<StrStrPair> params;
     setCMDLineParams( params );
     QStringList res;
     int sz = params.size();
     for( int i = qMax( 0, startWithIdx ); i < sz; ++i ) {
-        const StringPair & currentPair = params[i];
+        const StrStrPair & currentPair = params[i];
         if( currentPair.first.isEmpty() ) {
             res << currentPair.second;
         } else {
@@ -115,7 +115,7 @@ QString CMDLineRegistryUtils::getCmdlineUgenePath() {
     return "";
 }
 
-void CMDLineRegistryUtils::setCMDLineParams( QList<StringPair> & to ) {
+void CMDLineRegistryUtils::setCMDLineParams( QList<StrStrPair> & to ) {
     CMDLineRegistry * cmdlineRegistry = AppContext::getCMDLineRegistry();
     if( cmdlineRegistry != NULL ) {
         to = cmdlineRegistry->getParameters();
diff --git a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
index 7050b88..ad15c86 100644
--- a/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
+++ b/src/corelibs/U2Core/src/cmdline/CMDLineUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_CMDLINE_UTILS_H_
 #define _U2_CMDLINE_UTILS_H_
 
-#include <QtCore/QString>
-#include <QtCore/QList>
+#include <QString>
+#include <QList>
 
 #include <U2Core/CMDLineRegistry.h>
 
@@ -45,7 +45,7 @@ public:
     static QString getCmdlineUgenePath();
 
 private:
-    static void setCMDLineParams( QList<StringPair> & to );
+    static void setCMDLineParams( QList<StrStrPair> & to );
 
 }; // CMDLineRegistryUtils
 
diff --git a/src/corelibs/U2Core/src/datatype/Annotation.cpp b/src/corelibs/U2Core/src/datatype/Annotation.cpp
index 0b52e70..ebb3988 100644
--- a/src/corelibs/U2Core/src/datatype/Annotation.cpp
+++ b/src/corelibs/U2Core/src/datatype/Annotation.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
 #include <QTextDocument>
-#endif
 
 #include <U2Core/AnnotationModification.h>
 #include <U2Core/AnnotationTableObject.h>
@@ -524,11 +521,7 @@ QString Annotation::getQualifiersTip(const SharedAnnotationData &data, int maxRo
             } else {
                 tip += "<br>";
             }
-#if (QT_VERSION >= 0x050000)
             tip += "<b>" + q.name.toHtmlEscaped() + "</b> = " + val.toHtmlEscaped();
-#else
-            tip += "<b>" + Qt::escape(q.name) + "</b> = " + Qt::escape(val);
-#endif
         }
         tip += "</nobr>";
     }
@@ -602,24 +595,14 @@ QString Annotation::getQualifiersTip(const SharedAnnotationData &data, int maxRo
             tip += "<br>";
         }
         SAFE_POINT(!seqVal.isEmpty(), "Empty sequence detected!", QString());
-#if (QT_VERSION >= 0x050000)
         tip += "<nobr><b>" + QObject::tr("Sequence") + "</b> = " + seqVal.toHtmlEscaped()
             + "</nobr>";
-#else
-        tip += "<nobr><b>" + QObject::tr("Sequence") + "</b> = " + Qt::escape(seqVal)
-            + "</nobr>";
-#endif
         rows++;
 
         if (rows <= maxRows && NULL != aminoTT) {
             tip += "<br>";
-#if (QT_VERSION >= 0x050000)
             tip += "<nobr><b>" + QObject::tr("Translation") + "</b> = "
                 + aminoVal.toHtmlEscaped() + "</nobr>";
-#else
-            tip += "<nobr><b>" + QObject::tr("Translation") + "</b> = " + Qt::escape(aminoVal)
-                + "</nobr>";
-#endif
         }
     }
     return tip;
diff --git a/src/corelibs/U2Core/src/datatype/Annotation.h b/src/corelibs/U2Core/src/datatype/Annotation.h
index efdd6b4..ebb1749 100644
--- a/src/corelibs/U2Core/src/datatype/Annotation.h
+++ b/src/corelibs/U2Core/src/datatype/Annotation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationData.cpp b/src/corelibs/U2Core/src/datatype/AnnotationData.cpp
index e1fba6c..7b6355a 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationData.cpp
+++ b/src/corelibs/U2Core/src/datatype/AnnotationData.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationData.h b/src/corelibs/U2Core/src/datatype/AnnotationData.h
index a18516c..07a496e 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationData.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationData.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,9 +26,9 @@
 #include <U2Core/U2Location.h>
 #include <U2Core/U2Qualifier.h>
 
-#include <QtCore/QSharedData>
-#include <QtCore/QVector>
-#include <QtCore/QStringList>
+#include <QSharedData>
+#include <QVector>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationGroup.cpp b/src/corelibs/U2Core/src/datatype/AnnotationGroup.cpp
index b5a5fd7..b768308 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationGroup.cpp
+++ b/src/corelibs/U2Core/src/datatype/AnnotationGroup.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationGroup.h b/src/corelibs/U2Core/src/datatype/AnnotationGroup.h
index 8ed457f..994d6ed 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationGroup.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationGroup.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationModification.cpp b/src/corelibs/U2Core/src/datatype/AnnotationModification.cpp
index a2537c0..4c209dd 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationModification.cpp
+++ b/src/corelibs/U2Core/src/datatype/AnnotationModification.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationModification.h b/src/corelibs/U2Core/src/datatype/AnnotationModification.h
index a8c408b..8ccad88 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationModification.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationModification.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationSettings.cpp b/src/corelibs/U2Core/src/datatype/AnnotationSettings.cpp
index 8bc7c07..7abaa15 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationSettings.cpp
+++ b/src/corelibs/U2Core/src/datatype/AnnotationSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/FeatureColors.h>
 #include <U2Core/AnnotationTableObject.h>
 
-#include <QtCore/QSet>
+#include <QSet>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationSettings.h b/src/corelibs/U2Core/src/datatype/AnnotationSettings.h
index ad64f3a..90ce9b6 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationSettings.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.cpp b/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.cpp
index 38c9d9b..eb7e9ac 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.cpp
+++ b/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.h b/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.h
index da6e96b..8aa8564 100644
--- a/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.h
+++ b/src/corelibs/U2Core/src/datatype/AnnotationTableObjectConstraints.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp b/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
index 94d2e1f..f1e93c2 100644
--- a/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
+++ b/src/corelibs/U2Core/src/datatype/BaseAlphabets.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/BaseTranslations.cpp b/src/corelibs/U2Core/src/datatype/BaseTranslations.cpp
index e9474b7..82f7d5e 100644
--- a/src/corelibs/U2Core/src/datatype/BaseTranslations.cpp
+++ b/src/corelibs/U2Core/src/datatype/BaseTranslations.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,10 +27,10 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QTextStream>
+#include <QDir>
+#include <QTextStream>
 
-#include <QtCore/QXmlStreamReader>
+#include <QXmlStreamReader>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp b/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
index b1cd489..e263d65 100644
--- a/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
+++ b/src/corelibs/U2Core/src/datatype/BioStruct3D.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/BioStruct3D.h b/src/corelibs/U2Core/src/datatype/BioStruct3D.h
index 48ec1da..b4b5afc 100644
--- a/src/corelibs/U2Core/src/datatype/BioStruct3D.h
+++ b/src/corelibs/U2Core/src/datatype/BioStruct3D.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,11 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/Matrix44.h>
 
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QMap>
-#include <QtCore/QSharedData>
-#include <QtCore/QMultiMap>
+#include <QString>
+#include <QList>
+#include <QMap>
+#include <QSharedData>
+#include <QMultiMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/DIProperties.h b/src/corelibs/U2Core/src/datatype/DIProperties.h
index 408451a..3d8dfc7 100644
--- a/src/corelibs/U2Core/src/datatype/DIProperties.h
+++ b/src/corelibs/U2Core/src/datatype/DIProperties.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,14 @@
 #ifndef _U2_DI_PROPERTIES_H_
 #define _U2_DI_PROPERTIES_H_
 
-#include <U2Core/global.h>
+#include <assert.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QList>
+#include <QMap>
+#include <QObject>
+#include <QString>
 
-#include <assert.h>
+#include <U2Core/global.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/DNAAlphabet.cpp b/src/corelibs/U2Core/src/datatype/DNAAlphabet.cpp
index 11fb8f3..ba6b88e 100644
--- a/src/corelibs/U2Core/src/datatype/DNAAlphabet.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNAAlphabet.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/DNAAlphabet.h b/src/corelibs/U2Core/src/datatype/DNAAlphabet.h
index e02fff6..08fd6bc 100644
--- a/src/corelibs/U2Core/src/datatype/DNAAlphabet.h
+++ b/src/corelibs/U2Core/src/datatype/DNAAlphabet.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QBitArray>
+#include <QBitArray>
 namespace U2 {
 
 class U2CORE_EXPORT BaseDNAAlphabetIds : public QObject {
diff --git a/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.cpp b/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.cpp
index 3aab1be..d970425 100644
--- a/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.h b/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.h
index c800350..85724ba 100644
--- a/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.h
+++ b/src/corelibs/U2Core/src/datatype/DNAAlphabetRegistryImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/DNAChromatogram.cpp b/src/corelibs/U2Core/src/datatype/DNAChromatogram.cpp
new file mode 100644
index 0000000..c98bb9f
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/DNAChromatogram.cpp
@@ -0,0 +1,75 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/U2SafePoints.h>
+
+#include "DNAChromatogram.h"
+
+namespace U2 {
+
+const ushort DNAChromatogram::INVALID_VALUE = 0;
+const char DNAChromatogram::DEFAULT_PROBABILITY = 0; // SANGER_TODO: 100?
+
+DNAChromatogram::DNAChromatogram()
+    : name("chromatogram"),
+      traceLength(0),
+      seqLength(0),
+      hasQV(false)
+{
+
+}
+
+ushort DNAChromatogram::getValue(Trace trace, qint64 position) const {
+    SAFE_POINT(0 <= position && position <= traceLength, "The position is out of trace boundaries", 0);
+    switch (trace) {
+    case Trace_A:
+        SAFE_POINT(0 <= position && position <= A.length(), "The position is out of trace A boundaries", 0);
+        return A[position];
+    case Trace_C:
+        SAFE_POINT(0 <= position && position <= C.length(), "The position is out of trace C boundaries", 0);
+        return C[position];
+    case Trace_G:
+        SAFE_POINT(0 <= position && position <= G.length(), "The position is out of trace G boundaries", 0);
+        return G[position];
+    case Trace_T:
+        SAFE_POINT(0 <= position && position <= T.length(), "The position is out of trace T boundaries", 0);
+        return T[position];
+    default:
+        FAIL("An unknown trace", 0);
+    }
+}
+
+bool DNAChromatogram::operator ==(const DNAChromatogram &otherChromatogram) const {
+    return traceLength == otherChromatogram.traceLength &&
+            seqLength == otherChromatogram.seqLength &&
+            baseCalls == otherChromatogram.baseCalls &&
+            A == otherChromatogram.A &&
+            C == otherChromatogram.C &&
+            G == otherChromatogram.G &&
+            T == otherChromatogram.T &&
+            prob_A == otherChromatogram.prob_A &&
+            prob_C == otherChromatogram.prob_C &&
+            prob_G == otherChromatogram.prob_G &&
+            prob_T == otherChromatogram.prob_T &&
+            hasQV == otherChromatogram.hasQV;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/DNAChromatogram.h b/src/corelibs/U2Core/src/datatype/DNAChromatogram.h
index 2573cab..4445fd2 100644
--- a/src/corelibs/U2Core/src/datatype/DNAChromatogram.h
+++ b/src/corelibs/U2Core/src/datatype/DNAChromatogram.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,23 @@
 #ifndef _U2_DNA_CHROMATOGRAM_H_
 #define _U2_DNA_CHROMATOGRAM_H_
 
-#include <QtCore/QVector>
+#include <QVector>
 #include <U2Core/global.h>
 
 namespace U2 {
 
 class U2CORE_EXPORT DNAChromatogram {
 public:
-    DNAChromatogram() : traceLength(0), seqLength(0), hasQV(false) {}
+    enum Trace {
+        Trace_A,
+        Trace_C,
+        Trace_G,
+        Trace_T,
+    };
+
+    DNAChromatogram();
+
+    QString name;
     int traceLength;
     int seqLength;
     QVector<ushort> baseCalls;
@@ -42,6 +51,13 @@ public:
     QVector<char> prob_G;
     QVector<char> prob_T;
     bool hasQV;
+
+    ushort getValue(Trace trace, qint64 position) const;
+
+    bool operator ==(const DNAChromatogram &otherChromatogram) const;
+
+    static const ushort INVALID_VALUE;
+    static const char   DEFAULT_PROBABILITY;
 };
 
 } //namespace
diff --git a/src/corelibs/U2Core/src/datatype/DNAInfo.cpp b/src/corelibs/U2Core/src/datatype/DNAInfo.cpp
index 0828309..96bf17c 100644
--- a/src/corelibs/U2Core/src/datatype/DNAInfo.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNAInfo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QVariantMap>
+
 #include "DNAInfo.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/datatype/DNAInfo.h b/src/corelibs/U2Core/src/datatype/DNAInfo.h
index ca45dba..0e51e7c 100644
--- a/src/corelibs/U2Core/src/datatype/DNAInfo.h
+++ b/src/corelibs/U2Core/src/datatype/DNAInfo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QPair>
+#include <QString>
+#include <QStringList>
+#include <QPair>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/DNAQuality.cpp b/src/corelibs/U2Core/src/datatype/DNAQuality.cpp
index f5b953b..69bf470 100644
--- a/src/corelibs/U2Core/src/datatype/DNAQuality.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNAQuality.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,10 +30,18 @@ static const QString SOLEXA("Solexa/Illumina 1.0");
 
 const QString DNAQuality::QUAL_FORMAT("PHRED");
 const QString DNAQuality::ENCODED("Encoded");
+const int DNAQuality::MAX_PHRED33_VALUE = 74;
+const int DNAQuality::MIN_PHRED64_VALUE = 59;
 
-DNAQuality::DNAQuality( const QByteArray& qualScore, DNAQualityType t /* = DNAQualityType_Sanger*/ )
-: qualCodes(qualScore), type(t)
-{
+DNAQuality::DNAQuality(const QByteArray &qualScore)
+    : qualCodes(qualScore),
+      type(detectTypeByCodes(qualCodes)) {
+
+}
+
+DNAQuality::DNAQuality( const QByteArray& qualScore, DNAQualityType t)
+    : qualCodes(qualScore),
+      type(t) {
 
 }
 
@@ -44,15 +52,31 @@ qint64 DNAQuality::memoryHint() const {
     return m;
 }
 
-int DNAQuality::getValue( int pos ) const
-{
+void DNAQuality::setQualCodes(const QByteArray& qualCodes) {
+    bool zeroQuality = true;
+    int prev = -1;
+    for (uint i  = 0; i < qualCodes.size(); i++) {
+        if (i > 0) {
+            if (prev != qualCodes[i]) {
+                zeroQuality = false;
+            }
+        }
+        prev = qualCodes[i];
+    }
+    if (!zeroQuality) {
+        this->qualCodes = qualCodes;
+    } else {
+        this->qualCodes = QByteArray();
+    }
+}
+
+int DNAQuality::getValue( int pos ) const {
     assert(pos >=0 && pos < qualCodes.count());
     return  type == DNAQualityType_Sanger ?
         ( (int)qualCodes.at(pos) - 33 ) : ( (int)qualCodes.at(pos) - 64 );
 }
 
-char DNAQuality::encode( int val, DNAQualityType type )
-{
+char DNAQuality::encode( int val, DNAQualityType type ) {
     if (type == DNAQualityType_Sanger ) {
         return (char) ( (val <= 93 ? val : 93) + 33 );
     } else {
@@ -60,8 +84,7 @@ char DNAQuality::encode( int val, DNAQualityType type )
     }
 }
 
-QString DNAQuality::getDNAQualityNameByType( DNAQualityType t )
-{
+QString DNAQuality::getDNAQualityNameByType( DNAQualityType t ) {
     switch(t){
         case DnaQualityType_Solexa:
             return SOLEXA;
@@ -72,8 +95,7 @@ QString DNAQuality::getDNAQualityNameByType( DNAQualityType t )
     }
 }
 
-DNAQualityType DNAQuality::getDNAQualityTypeByName( const QString& name )
-{
+DNAQualityType DNAQuality::getDNAQualityTypeByName( const QString& name ) {
     if ( name == SOLEXA) {
         return DNAQualityType_Illumina;
     } else if (name == ILLUMINA) {
@@ -83,11 +105,24 @@ DNAQualityType DNAQuality::getDNAQualityTypeByName( const QString& name )
     }
 }
 
-QStringList DNAQuality::getDNAQualityTypeNames()
-{
+QStringList DNAQuality::getDNAQualityTypeNames() {
     QStringList res;
     res << SANGER << ILLUMINA << SOLEXA;
     return res;
 }
 
+DNAQualityType DNAQuality::detectTypeByCodes(const QByteArray &qualCodes) {
+    int maxQualityValue = 33;
+    int minQualityValue = 126;
+    for (int i = 0; i < qualCodes.size(); i++) {
+        maxQualityValue = qMax(static_cast<int>(qualCodes.at(i)), maxQualityValue);
+        minQualityValue = qMin(static_cast<int>(qualCodes.at(i)), minQualityValue);
+    }
+    return detectTypeByMinMaxQualityValues(minQualityValue, maxQualityValue);
+}
+
+DNAQualityType DNAQuality::detectTypeByMinMaxQualityValues(int minQualityValue, int maxQualityValue) {
+    return ( maxQualityValue >= MAX_PHRED33_VALUE && minQualityValue >= MIN_PHRED64_VALUE ) ? DNAQualityType_Illumina : DNAQualityType_Sanger;
+}
+
 } // U2
diff --git a/src/corelibs/U2Core/src/datatype/DNAQuality.h b/src/corelibs/U2Core/src/datatype/DNAQuality.h
index 51e40a3..dc9af84 100644
--- a/src/corelibs/U2Core/src/datatype/DNAQuality.h
+++ b/src/corelibs/U2Core/src/datatype/DNAQuality.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QByteArray>
-#include <QtCore/QStringList>
+#include <QByteArray>
+#include <QStringList>
 
 namespace U2 {
 
@@ -37,10 +37,32 @@ enum DNAQualityType {
 
 typedef QString DNAQualityFormat;
 
+// diagnose
+//   SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.....................................................
+//   ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
+//   ...............................IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII......................
+//   .................................JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ......................
+//   LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................................................
+//   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+//   |                         |    |        |                              |                     |
+//  33                        59   64       73                            104                   126 <- maxValue is value from here
+// S 0........................26...31.......40
+// X                          -5....0........9.............................40
+// I                                0........9.............................40
+// J                                   3.....9.............................40
+// L 0.2......................26...31........41
+//
+//  S - Sanger        Phred+33,  raw reads typically (0, 40)
+//  X - Solexa        Solexa+64, raw reads typically (-5, 40)
+//  I - Illumina 1.3+ Phred+64,  raw reads typically (0, 40)
+//  J - Illumina 1.5+ Phred+64,  raw reads typically (3, 40) with 0=unused, 1=unused, 2=Read Segment Quality Control Indicator (bold)
+//  L - Illumina 1.8+ Phred+33,  raw reads typically (0, 41)
+
 class U2CORE_EXPORT DNAQuality {
 public:
     DNAQuality() : type (DNAQualityType_Sanger) {}
-    DNAQuality(const QByteArray& qualScore, DNAQualityType type = DNAQualityType_Sanger);
+    DNAQuality(const QByteArray &qualScore);
+    DNAQuality(const QByteArray &qualScore, DNAQualityType type);
 
     bool isEmpty() const { return qualCodes.isEmpty(); }
     int getValue(int pos) const;
@@ -49,14 +71,20 @@ public:
     static QString getDNAQualityNameByType(DNAQualityType t);
     static DNAQualityType getDNAQualityTypeByName(const QString& name);
     static QStringList getDNAQualityTypeNames();
+    static DNAQualityType detectTypeByCodes(const QByteArray &qualCodes);
+    static DNAQualityType detectTypeByMinMaxQualityValues(int minQualityValue, int maxQualityValue);
 
     qint64 memoryHint() const;
 
     QByteArray      qualCodes;
+    void setQualCodes(const QByteArray& qualCodes);
+
     DNAQualityType  type;
 
     static const DNAQualityFormat QUAL_FORMAT;
     static const DNAQualityFormat ENCODED;
+    static const int MAX_PHRED33_VALUE;
+    static const int MIN_PHRED64_VALUE;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Core/src/datatype/DNASequence.cpp b/src/corelibs/U2Core/src/datatype/DNASequence.cpp
index 906b394..7505e15 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequence.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNASequence.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,14 +23,23 @@
 
 namespace U2 {
 
-DNASequence::DNASequence(const QString& name, const QByteArray& s, const DNAAlphabet* a) : seq(s), alphabet(a), circular(false) {
+DNASequence::DNASequence(const QString& name, const QByteArray& s, const DNAAlphabet* a)
+    : seq(s),
+      alphabet(a),
+      circular(false) {
     if (!name.isEmpty()) {
         info.insert(DNAInfo::ID, name);
     }
 }
 
-void DNASequence::setName( const QString& name )
-{
+DNASequence::DNASequence(const QByteArray& s, const DNAAlphabet* a)
+    : seq(s),
+      alphabet(a),
+      circular(false)  {
+
+}
+
+void DNASequence::setName( const QString& name ) {
     info.insert(DNAInfo::ID, name);
 }
 
diff --git a/src/corelibs/U2Core/src/datatype/DNASequence.h b/src/corelibs/U2Core/src/datatype/DNASequence.h
index 62a5ea1..34566a7 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequence.h
+++ b/src/corelibs/U2Core/src/datatype/DNASequence.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_DNA_SEQUENCE_H_
 #define _U2_DNA_SEQUENCE_H_
 
+#include <QVariantMap>
+
 #include "DNAInfo.h"
 #include "DNAQuality.h"
 
@@ -32,7 +34,7 @@ class DNAAlphabet;
 class U2CORE_EXPORT DNASequence {
 public:
     DNASequence(const QString& name, const QByteArray& s = QByteArray(), const DNAAlphabet* a = NULL);
-    DNASequence(const QByteArray& s = QByteArray(), const DNAAlphabet* a = NULL) : seq(s), alphabet(a), circular(false), quality(NULL) {}
+    DNASequence(const QByteArray& s = QByteArray(), const DNAAlphabet* a = NULL);
 
     QVariantMap     info;
     QByteArray      seq;
diff --git a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
index 89e05a2..cf7aaec 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 
 namespace U2 {
 
-void DNASequenceUtils::append(DNASequence& sequence, const DNASequence& appendedSequence, U2OpStatus& /* os */) {
+void DNASequenceUtils::append(DNASequence& sequence, const DNASequence& appendedSequence) {
     sequence.seq += appendedSequence.constSequence();
 }
 
@@ -51,8 +51,8 @@ void DNASequenceUtils::removeChars(DNASequence& sequence, int startPos, int endP
 
 void DNASequenceUtils::removeChars(QByteArray& sequence, int startPos, int endPos, U2OpStatus& os) {
     if ((endPos <= startPos) || (startPos < 0) || (endPos > sequence.length())) {
-        coreLog.trace(L10N::internalError("incorrect parameters was passed to DNASequenceUtils::removeChars,"
-            "startPos '%1', endPos '%2', sequence length '%3'!").arg(startPos).arg(endPos).arg(sequence.length()));
+        coreLog.trace(L10N::internalError("incorrect parameters was passed to DNASequenceUtils::removeChars, "
+            "startPos '%1', endPos '%2', sequence length '%3'").arg(startPos).arg(endPos).arg(sequence.length()));
         os.setError("Can't remove chars from a sequence.");
         return;
     }
@@ -63,7 +63,7 @@ void DNASequenceUtils::removeChars(QByteArray& sequence, int startPos, int endPo
 void DNASequenceUtils::insertChars(QByteArray& sequence, int startPos, const QByteArray& newChars, U2OpStatus& os) {
     int endPos = startPos + newChars.length();
     CHECK_EXT(newChars.length() > 0, os.setError("Array of chars for replacing is empty!"), );
-    if ((startPos < 0) || (endPos > sequence.length())) {
+    if ((startPos < 0) || (startPos > sequence.length())) {
         coreLog.trace(L10N::internalError("incorrect parameters was passed to DNASequenceUtils::insertChars, "
             "startPos '%1', endPos '%2', sequence length '%3'!").arg(startPos).arg(endPos).arg(sequence.length()));
         os.setError("Can't remove chars from a sequence.");
@@ -116,4 +116,36 @@ QByteArray DNASequenceUtils::reverseComplement(const QByteArray &sequence) {
     return reverse(complement(sequence));
 }
 
+void DNASequenceUtils::crop(DNASequence &sequence, int startPos, int length) {
+    sequence.quality.qualCodes = sequence.quality.qualCodes.mid(startPos, length);
+    sequence.seq = sequence.seq.mid(startPos, length);
+}
+
+U2Region DNASequenceUtils::trimByQuality(DNASequence &sequence, int qualityThreshold, int minSequenceLength, bool trimBothEnds) {
+    const int sequenceLength = sequence.length();
+    CHECK_EXT(sequenceLength <= sequence.quality.qualCodes.length(), crop(sequence, 0, 0), U2Region());
+
+    int endPosition = sequenceLength - 1;
+    for (; endPosition >= 0; endPosition--) {
+        if (sequence.quality.getValue(endPosition) >= qualityThreshold) {
+            break;
+        }
+    }
+
+    int beginPosition = 0;
+    if (trimBothEnds) {
+        for (; beginPosition <= endPosition; beginPosition++) {
+            if (sequence.quality.getValue(beginPosition) >= qualityThreshold) {
+                break;
+            }
+        }
+    }
+
+    const bool isRegionAcceptable = (endPosition >= beginPosition && endPosition - beginPosition + 1 >= minSequenceLength);
+    CHECK_EXT(isRegionAcceptable, crop(sequence, 0, 0), U2Region());
+
+    crop(sequence, beginPosition, endPosition - beginPosition + 1);
+    return U2Region(beginPosition, endPosition - beginPosition + 1);
+}
+
 } // namespace
diff --git a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
index 60f28b0..30c273a 100644
--- a/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
+++ b/src/corelibs/U2Core/src/datatype/DNASequenceUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,18 +24,20 @@
 
 #include <U2Core/DNASequence.h>
 #include <U2Core/U2OpStatus.h>
-
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 
-enum DnaSequencesMatchStatus {MatchExactly, DoNotMatch};
-
+enum DnaSequencesMatchStatus {
+    MatchExactly,
+    DoNotMatch
+};
 
 /** Utilities for DNASequences */
 class U2CORE_EXPORT DNASequenceUtils {
 public:
     /** Appends "appendedSequence" to "sequence" */
-    static void append(DNASequence& sequence, const DNASequence& appendedSequence, U2OpStatus& os);
+    static void append(DNASequence& sequence, const DNASequence& appendedSequence);
 
     /** Compares two sequences */
     static DnaSequencesMatchStatus compare(const DNASequence& firstSeq, const DNASequence& secondSec);
@@ -64,6 +66,10 @@ public:
 
     /** Returns the reverse-complement DNA sequence */
     static QByteArray reverseComplement(const QByteArray &sequence);
+
+    static void crop(DNASequence &sequence, int startPos, int length);
+
+    static U2Region trimByQuality(DNASequence &sequence, int qualityThreshold, int minSequenceLength, bool trimBothEnds);
 };
 
 } // namespace
diff --git a/src/corelibs/U2Core/src/datatype/DNATranslation.cpp b/src/corelibs/U2Core/src/datatype/DNATranslation.cpp
index 1705410..22d73cd 100644
--- a/src/corelibs/U2Core/src/datatype/DNATranslation.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNATranslation.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/DNATranslation.h b/src/corelibs/U2Core/src/datatype/DNATranslation.h
index 8819dd0..5031172 100644
--- a/src/corelibs/U2Core/src/datatype/DNATranslation.h
+++ b/src/corelibs/U2Core/src/datatype/DNATranslation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_DNA_TRANSLATION_H_
 
 #include <U2Core/global.h>
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/DNATranslationImpl.cpp b/src/corelibs/U2Core/src/datatype/DNATranslationImpl.cpp
index 99b0790..9a76db1 100644
--- a/src/corelibs/U2Core/src/datatype/DNATranslationImpl.cpp
+++ b/src/corelibs/U2Core/src/datatype/DNATranslationImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 #include <U2Core/TextUtils.h>
 #include <U2Core/DNAAlphabet.h>
-#include <QtCore/QDateTime>
+#include <QDateTime>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/DNATranslationImpl.h b/src/corelibs/U2Core/src/datatype/DNATranslationImpl.h
index 6fb8b9f..eaf41c2 100644
--- a/src/corelibs/U2Core/src/datatype/DNATranslationImpl.h
+++ b/src/corelibs/U2Core/src/datatype/DNATranslationImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,10 @@
 #ifndef _U2_DNA_TRANSLATION_IMPL_H_
 #define _U2_DNA_TRANSLATION_IMPL_H_
 
+#include <QMap>
+#include <QVarLengthArray>
+
 #include <U2Core/DNATranslation.h>
-#include <QtCore/QVarLengthArray>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/FeatureColors.cpp b/src/corelibs/U2Core/src/datatype/FeatureColors.cpp
index 094fbe4..bb35018 100644
--- a/src/corelibs/U2Core/src/datatype/FeatureColors.cpp
+++ b/src/corelibs/U2Core/src/datatype/FeatureColors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/FeatureColors.h b/src/corelibs/U2Core/src/datatype/FeatureColors.h
index 8da5034..bd14f4b 100644
--- a/src/corelibs/U2Core/src/datatype/FeatureColors.h
+++ b/src/corelibs/U2Core/src/datatype/FeatureColors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtGui/QColor>
+#include <QColor>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/MAlignment.cpp b/src/corelibs/U2Core/src/datatype/MAlignment.cpp
deleted file mode 100644
index 2b537bb..0000000
--- a/src/corelibs/U2Core/src/datatype/MAlignment.cpp
+++ /dev/null
@@ -1,1401 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QtCore/QStack>
-
-#include "MAlignment.h"
-
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequenceUtils.h>
-#include <U2Core/Log.h>
-#include <U2Core/MsaDbiUtils.h>
-#include <U2Core/TextUtils.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-
-namespace U2 {
-
-//////////////////////////////////////////////////////////////////////////
-// MAlignmentRow
-MAlignmentRow::MAlignmentRow(const U2MsaRow& _rowInDb,
-                             const DNASequence& _sequence,
-                             const QList<U2MsaGap>& _gaps,
-                             MAlignment* _alignment)
-    : alignment(_alignment),
-      sequence(_sequence),
-      gaps(_gaps),
-      initialRowInDb(_rowInDb)
-{
-    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", );
-    removeTrailingGaps();
-}
-
-MAlignmentRow::MAlignmentRow(MAlignment* al)
-    : alignment(al),
-      sequence(DNASequence()),
-      initialRowInDb(U2MsaRow())
-{
-    initialRowInDb.rowId = invalidRowId();
-    removeTrailingGaps();
-}
-
-MAlignmentRow::MAlignmentRow(const MAlignmentRow &r, MAlignment* al)
-    : alignment(al),
-      sequence(r.sequence),
-      gaps(r.gaps),
-      initialRowInDb(r.initialRowInDb)
-{
-    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", );
-}
-
-QByteArray MAlignmentRow::toByteArray(int length, U2OpStatus& os) const {
-    if (length < getCoreEnd()) {
-        coreLog.trace("Incorrect length was passed to MAlignmentRow::toByteArray!");
-        os.setError("Failed to get row data!");
-        return QByteArray();
-    }
-
-    if (gaps.isEmpty() && sequence.length() == length) {
-        return sequence.constSequence();
-    }
-
-    QByteArray bytes = joinCharsAndGaps(true, true);
-
-    // Append additional gaps, if necessary
-    if (length > bytes.count()) {
-        QByteArray gapsBytes;
-        gapsBytes.fill(MAlignment_GapChar, length - bytes.count());
-        bytes.append(gapsBytes);
-    }
-    if (length < bytes.count()) {
-        // cut extra trailing gaps
-        bytes = bytes.left(length);
-    }
-
-    return bytes;
-}
-
-int MAlignmentRow::getRowLength() const {
-    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", getRowLengthWithoutTrailing());
-    return alignment->getLength();
-}
-
-QByteArray MAlignmentRow::getCore() const {
-    return joinCharsAndGaps(false, false);
-}
-
-QByteArray MAlignmentRow::getData() const {
-    return joinCharsAndGaps(true, true);
-}
-
-void MAlignmentRow::splitBytesToCharsAndGaps(const QByteArray& input, QByteArray& seqBytes, QList<U2MsaGap>& gapsModel) {
-    MsaDbiUtils::splitBytesToCharsAndGaps(input, seqBytes, gapsModel);
-}
-
-void MAlignmentRow::addOffsetToGapModel(QList<U2MsaGap>& gapModel, int offset) {
-    if (0 == offset) {
-        return;
-    }
-
-    if (!gapModel.isEmpty()) {
-
-        U2MsaGap& firstGap = gapModel[0];
-        if (0 == firstGap.offset) {
-            firstGap.gap += offset;
-        }
-        else {
-            SAFE_POINT(offset >= 0, "Negative gap offset!", );
-            U2MsaGap beginningGap(0, offset);
-            gapModel.insert(0, beginningGap);
-        }
-
-        // Shift other gaps
-        if (gapModel.count() > 1) {
-            for (int i = 1; i < gapModel.count(); ++i) {
-                qint64 newOffset = gapModel[i].offset + offset;
-                SAFE_POINT(newOffset >= 0, "Negative gap offset!", );
-                gapModel[i].offset = newOffset;
-            }
-        }
-    }
-    else {
-        SAFE_POINT(offset >= 0, "Negative gap offset!", );
-        U2MsaGap gap(0, offset);
-        gapModel.append(gap);
-    }
-}
-
-QByteArray MAlignmentRow::joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const {
-    QByteArray bytes = sequence.constSequence();
-    int beginningOffset = 0;
-
-    if (gaps.isEmpty()) {
-        return bytes;
-    }
-
-    for (int i = 0; i < gaps.size(); ++i) {
-        QByteArray gapsBytes;
-        if (!keepOffset && (0 == gaps[i].offset)) {
-            beginningOffset = gaps[i].gap;
-            continue;
-        }
-
-        gapsBytes.fill(MAlignment_GapChar, gaps[i].gap);
-        bytes.insert(gaps[i].offset - beginningOffset, gapsBytes);
-    }
-    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", QByteArray());
-    if (keepTrailingGaps && bytes.size() < alignment->getLength()) {
-        QByteArray gapsBytes;
-        gapsBytes.fill(MAlignment_GapChar, alignment->getLength() - bytes.size());
-        bytes.append(gapsBytes);
-    }
-
-    return bytes;
-}
-
-int MAlignmentRow::getCoreLength() const {
-    int coreStart = getCoreStart();
-    int coreEnd = getCoreEnd();
-    int length = coreEnd - coreStart;
-    SAFE_POINT(length >= 0, QString("Internal error in MAlignamentRow:"
-        " coreEnd is %1, coreStart is %2!").arg(coreEnd).arg(coreStart), length);
-    return length;
-}
-
-void MAlignmentRow::append(const MAlignmentRow& anotherRow, int lengthBefore, U2OpStatus& os) {
-    int rowLength = getRowLengthWithoutTrailing();
-
-    if (lengthBefore < rowLength/*getRowLengthWithoutTrailing()*/) {
-        coreLog.trace(QString("Internal error: incorrect length '%1' were passed to MAlignmentRow::append,"
-            "coreEnd is '%2'").arg(lengthBefore).arg(getCoreEnd()));
-        os.setError("Failed to append one row to another!");
-        return;
-    }
-
-    // Gap between rows
-    if (lengthBefore > rowLength) {
-        gaps.append(U2MsaGap(getRowLengthWithoutTrailing(),
-                             lengthBefore - getRowLengthWithoutTrailing()));
-    }
-
-    // Merge gaps
-    QList<U2MsaGap> anotherRowGaps = anotherRow.getGapModel();
-    for (int i = 0; i < anotherRowGaps.count(); ++i) {
-        anotherRowGaps[i].offset += lengthBefore;
-    }
-    gaps.append(anotherRowGaps);
-    mergeConsecutiveGaps();
-
-    // Merge sequences
-    DNASequenceUtils::append(sequence, anotherRow.sequence, os);
-}
-
-U2MsaRow MAlignmentRow::getRowDBInfo() const {
-    U2MsaRow row;
-    row.rowId = initialRowInDb.rowId;
-    row.sequenceId = initialRowInDb.sequenceId;
-    row.gstart = 0;
-    row.gend = sequence.length();
-    row.gaps = gaps;
-    row.length = getRowLengthWithoutTrailing();
-    return row;
-}
-
-void MAlignmentRow::setRowDbInfo(const U2MsaRow &dbRow) {
-    initialRowInDb = dbRow;
-}
-
-void MAlignmentRow::setRowContent(const QByteArray& bytes, int offset, U2OpStatus& /* os */) {
-    QByteArray newSequenceBytes;
-    QList<U2MsaGap> newGapsModel;
-
-    splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapsModel);
-    DNASequence newSequence(getName(), newSequenceBytes);
-
-    addOffsetToGapModel(newGapsModel, offset);
-
-    sequence = newSequence;
-    gaps = newGapsModel;
-    removeTrailingGaps();
-}
-
-void MAlignmentRow::setGapModel(const QList<U2MsaGap> &newGapModel) {
-    gaps = newGapModel;
-    removeTrailingGaps();
-}
-
-void MAlignmentRow::setSequence(const DNASequence& newSequence) {
-    SAFE_POINT(!newSequence.constSequence().contains(MAlignment_GapChar),
-        "The sequence must be without gaps!", );
-    sequence = newSequence;
-}
-
-char MAlignmentRow::charAt(int pos) const {
-    return MsaRowUtils::charAt(sequence.seq, gaps, pos);
-}
-
-void MAlignmentRow::insertGaps(int pos, int count, U2OpStatus& os) {
-    if (count < 0) {
-        coreLog.trace(QString("Internal error: incorrect parameters were passed to MAlignmentRow::insertGaps,"
-            "pos '%1', count '%2'!").arg(pos).arg(count));
-        os.setError("Failed to insert gaps into a row!");
-        return;
-    }
-
-    if (pos < 0 || pos >= getRowLengthWithoutTrailing()) {
-        return;
-    }
-
-    if (0 == pos) {
-        addOffsetToGapModel(gaps, count);
-    }
-    else {
-        // A gap is near
-        if (MAlignment_GapChar == charAt(pos) ||
-            MAlignment_GapChar == charAt(pos - 1))
-        {
-            // Find the gaps and append 'count' gaps to it
-            // Shift all gaps that further in the row
-            for (int i = 0; i < gaps.count(); ++i) {
-                if (pos >= gaps[i].offset) {
-                    if (pos <= gaps[i].offset + gaps[i].gap) {
-                        gaps[i].gap += count;
-                    }
-                }
-                else {
-                    gaps[i].offset += count;
-                }
-            }
-        }
-        // Insert between chars
-        else {
-            bool found = false;
-
-            int indexGreaterGaps = 0;
-            for (int i = 0; i < gaps.count(); ++i) {
-                if (pos > gaps[i].offset + gaps[i].gap) {
-                    continue;
-                }
-                else {
-                    found = true;
-                    U2MsaGap newGap(pos, count);
-                    gaps.insert(i, newGap);
-                    indexGreaterGaps = i;
-                    break;
-                }
-            }
-
-            // If found somewhere between existent gaps
-            if (found) {
-                // Shift further gaps
-                for (int i = indexGreaterGaps + 1; i < gaps.count(); ++i) {
-                    gaps[i].offset += count;
-                }
-            }
-            // This is the last gap
-            else {
-                U2MsaGap newGap(pos, count);
-                gaps.append(newGap);
-                return;
-            }
-        }
-    }
-}
-
-void MAlignmentRow::mergeConsecutiveGaps() {
-    QList<U2MsaGap> newGapModel;
-    if (gaps.isEmpty()) {
-        return;
-    }
-
-    newGapModel << gaps[0];
-    int indexInNewGapModel = 0;
-    for (int i = 1; i < gaps.count(); ++i) {
-        int previousGapEnd = newGapModel[indexInNewGapModel].offset +
-            newGapModel[indexInNewGapModel].gap - 1;
-        int currectGapStart = gaps[i].offset;
-        SAFE_POINT(currectGapStart > previousGapEnd,
-            "Incorrect gap model during merging consecutive gaps!",);
-        if (currectGapStart == previousGapEnd + 1) {
-            // Merge gaps
-            qint64 newGapLength = newGapModel[indexInNewGapModel].gap + gaps[i].gap;
-            SAFE_POINT(newGapLength > 0, "Non-positive gap length!", )
-            newGapModel[indexInNewGapModel].gap = newGapLength;
-        }
-        else {
-            // Add the gap to the list
-            newGapModel << gaps[i];
-            indexInNewGapModel++;
-        }
-    }
-    gaps = newGapModel;
-}
-
-void MAlignmentRow::removeTrailingGaps() {
-    if (gaps.isEmpty()) {
-        return;
-    }
-
-    // If the last char in the row is gap, remove the last gap
-    if (MAlignment_GapChar == charAt(MsaRowUtils::getRowLength(sequence.constData(), gaps) - 1)) {
-        gaps.removeLast();
-    }
-}
-
-void MAlignmentRow::removeChars(int pos, int count, U2OpStatus& os) {
-    if (pos < 0 || count < 0) {
-        coreLog.trace(QString("Internal error: incorrect parameters were passed to MAlignmentRow::removeChars,"
-            "pos '%1', count '%2'!").arg(pos).arg(count));
-        os.setError("Can't remove chars from a row!");
-        return;
-    }
-
-    if (pos >= getRowLengthWithoutTrailing()) {
-        return;
-    }
-
-    if (pos < getRowLengthWithoutTrailing()) {
-        int startPosInSeq = -1;
-        int endPosInSeq = -1;
-        getStartAndEndSequencePositions(pos, count, startPosInSeq, endPosInSeq);
-
-        // Remove inside a gap
-        if ((startPosInSeq < endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq)) {
-            DNASequenceUtils::removeChars(sequence, startPosInSeq, endPosInSeq, os);
-            CHECK_OP(os, );
-        }
-    }
-
-    // Remove gaps from the gaps model
-    removeGapsFromGapModel(pos, count);
-
-    removeTrailingGaps();
-    mergeConsecutiveGaps();
-}
-
-bool MAlignmentRow::isRowContentEqual(const MAlignmentRow& row) const {
-    if (MatchExactly == DNASequenceUtils::compare(sequence, row.getSequence())) {
-        if (sequence.length() == 0) {
-            return true;
-        }
-        else {
-            QList<U2MsaGap> firstRowGaps = gaps;
-            if  (!firstRowGaps.isEmpty() &&
-                (MAlignment_GapChar == charAt(0)))
-            {
-                firstRowGaps.removeFirst();
-            }
-
-            QList<U2MsaGap> secondRowGaps = row.getGapModel();
-            if (!secondRowGaps.isEmpty() &&
-                (MAlignment_GapChar == row.charAt(0)))
-            {
-                secondRowGaps.removeFirst();
-            }
-
-            if (firstRowGaps == secondRowGaps) {
-                return true;
-            }
-        }
-    }
-
-    return false;
-}
-
-int MAlignmentRow::getUngappedPosition(int pos) const {
-    return MsaRowUtils::getUngappedPosition(sequence.seq, gaps, pos);
-}
-
-int MAlignmentRow::getBaseCount(int before) const {
-    const int rowLength = MsaRowUtils::getRowLength(sequence.seq, gaps);
-    const int trimmedRowPos = before < rowLength ? before : rowLength;
-    return MsaRowUtils::getUngappedPosition(sequence.seq, gaps, trimmedRowPos, true);
-}
-
-void MAlignmentRow::getStartAndEndSequencePositions(int pos, int count, int& startPosInSeq, int& endPosInSeq) {
-    int rowLengthWithoutTrailingGap = getRowLengthWithoutTrailing();
-    SAFE_POINT(pos < rowLengthWithoutTrailingGap,
-        QString("Incorrect position '%1' in MAlignmentRow::getStartAndEndSequencePosition,"
-        " row length without trailing gaps is '%2'!").arg(pos).arg(rowLengthWithoutTrailingGap),);
-
-    // Remove chars from the sequence
-    // Calculate start position in the sequence
-    if (MAlignment_GapChar == charAt(pos)) {
-        int i = 1;
-        while (MAlignment_GapChar == charAt(pos + i)) {
-            if (getRowLength() == pos + i) {
-                break;
-            }
-            i++;
-        }
-        startPosInSeq = getUngappedPosition(pos + i);
-    }
-    else {
-        startPosInSeq = getUngappedPosition(pos);
-    }
-
-    // Calculate end position in the sequence
-    int endRegionPos = pos + count; // non-inclusive
-
-    if (endRegionPos > rowLengthWithoutTrailingGap) {
-        endRegionPos = rowLengthWithoutTrailingGap;
-    }
-
-    if (endRegionPos == rowLengthWithoutTrailingGap) {
-        endPosInSeq = getUngappedLength();
-    }
-    else {
-        if (MAlignment_GapChar == charAt(endRegionPos)) {
-            int i = 1;
-            while (MAlignment_GapChar == charAt(endRegionPos + i)) {
-                if (getRowLength() == endRegionPos + i) {
-                    break;
-                }
-                i++;
-            }
-            endPosInSeq = getUngappedPosition(endRegionPos + i);
-        }
-        else {
-            endPosInSeq = getUngappedPosition(endRegionPos);
-        }
-    }
-}
-
-void MAlignmentRow::removeGapsFromGapModel(int pos, int count) {
-    QList<U2MsaGap> newGapModel;
-    int endRegionPos = pos + count; // non-inclusive
-    foreach (U2MsaGap gap, gaps)
-    {
-        qint64 gapEnd = gap.offset + gap.gap;
-        if (gapEnd < pos) {
-            newGapModel << gap;
-        }
-        else if (gapEnd <= endRegionPos) {
-            if (gap.offset < pos) {
-                gap.gap = pos - gap.offset;
-                newGapModel << gap;
-            }
-            // Otherwise just remove the gap (do not write to the new gap model)
-        }
-        else {
-            if (gap.offset < pos) {
-                gap.gap -= count;
-                SAFE_POINT(gap.gap >= 0, "Non-positive gap length!", );
-                newGapModel << gap;
-            }
-            else if (gap.offset < endRegionPos) {
-                gap.gap = gapEnd - endRegionPos;
-                gap.offset = pos;
-                SAFE_POINT(gap.gap > 0, "Non-positive gap length!", );
-                SAFE_POINT(gap.offset >= 0, "Negative gap offset!", );
-                newGapModel << gap;
-            }
-            else {
-                // Shift the gap
-                gap.offset -= count;
-                SAFE_POINT(gap.offset >= 0, "Negative gap offset!", );
-                newGapModel << gap;
-            }
-        }
-    }
-
-    gaps = newGapModel;
-}
-
-void MAlignmentRow::crop(int pos, int count, U2OpStatus& os) {
-    if (pos < 0 || count < 0) {
-        coreLog.trace(QString("Internal error: incorrect parameters were passed to MAlignmentRow::crop,"
-            "startPos '%1', length '%2', row length '%3'!").arg(pos).arg(count).arg(getRowLength()));
-        os.setError("Can't crop a row!");
-        return;
-    }
-
-    int initialRowLength = getRowLength();
-    int initialSeqLength = getUngappedLength();
-
-    if (pos >= getRowLengthWithoutTrailing()) {
-        // Clear the row content
-        DNASequenceUtils::makeEmpty(sequence);
-    }
-    else {
-        int startPosInSeq = -1;
-        int endPosInSeq = -1;
-        getStartAndEndSequencePositions(pos, count, startPosInSeq, endPosInSeq);
-
-        // Remove inside a gap
-        if ((startPosInSeq <= endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq))
-        {
-            if (endPosInSeq < initialSeqLength){
-                DNASequenceUtils::removeChars(sequence, endPosInSeq, getUngappedLength(), os);
-                CHECK_OP(os, );
-            }
-
-            if (startPosInSeq > 0) {
-                DNASequenceUtils::removeChars(sequence, 0, startPosInSeq, os);
-                CHECK_OP(os, );
-            }
-        }
-    }
-
-    if (pos + count < initialRowLength) {
-        removeGapsFromGapModel(pos + count, initialRowLength - pos - count);
-    }
-
-    if (pos > 0) {
-        removeGapsFromGapModel(0, pos);
-    }
-    removeTrailingGaps();
-}
-
-MAlignmentRow MAlignmentRow::mid(int pos, int count, U2OpStatus& os) const {
-    MAlignmentRow row = *this;
-    row.crop(pos, count, os);
-    return row;
-}
-
-bool MAlignmentRow::operator==(const MAlignmentRow& row) const {
-    return isRowContentEqual(row);
-}
-
-void MAlignmentRow::toUpperCase() {
-    DNASequenceUtils::toUpperCase(sequence);
-}
-
-bool gapLessThan(const U2MsaGap& gap1, const U2MsaGap& gap2) {
-    return gap1.offset < gap2.offset;
-}
-
-void MAlignmentRow::replaceChars(char origChar, char resultChar, U2OpStatus& os) {
-    if (MAlignment_GapChar == origChar) {
-        coreLog.trace("The original char can't be a gap in MAlignmentRow::replaceChars!");
-        os.setError("Failed to replace chars in an alignment row!");
-        return;
-    }
-
-    if (MAlignment_GapChar == resultChar) {
-        // Get indexes of all 'origChar' characters in the row sequence
-        QList<int> gapsIndexes;
-        for (int i = 0; i < getRowLength(); i++) {
-            if (origChar == charAt(i)) {
-                gapsIndexes.append(i);
-            }
-        }
-
-        if (gapsIndexes.isEmpty()) {
-            return; // There is nothing to replace
-        }
-
-        // Remove all 'origChar' characters from the row sequence
-        sequence.seq.replace(origChar, "");
-
-        // Re-calculate the gaps model
-        QList<U2MsaGap> newGapsModel = gaps;
-        for (int i = 0; i < gapsIndexes.size(); ++i) {
-            int index = gapsIndexes[i];
-            U2MsaGap gap(index, 1);
-            newGapsModel.append(gap);
-        }
-        qSort(newGapsModel.begin(), newGapsModel.end(), gapLessThan);
-
-        // Replace the gaps model with the new one
-        gaps = newGapsModel;
-        mergeConsecutiveGaps();
-    }
-    else {
-        // Just replace all occurrences of 'origChar' by 'resultChar'
-        sequence.seq.replace(origChar, resultChar);
-    }
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// MAlignment
-
-// Helper class to call MAlignment state check
-class MAStateCheck {
-public:
-    MAStateCheck(const MAlignment* _ma) : ma(_ma) {}
-
-    ~MAStateCheck() {
-#ifdef _DEBUG
-        ma->check();
-#endif
-    }
-    const MAlignment* ma;
-};
-
-MAlignment::MAlignment(const QString& _name, const DNAAlphabet* al, const QList<MAlignmentRow>& r)
-: alphabet(al), rows(r)
-{
-    MAStateCheck check(this);
-
-    SAFE_POINT(al==NULL || !_name.isEmpty(), "Incorrect parameters in MAlignment ctor!", );
-
-    setName(_name );
-    length = 0;
-    for (int i = 0, n = rows.size(); i < n; i++) {
-        const MAlignmentRow& r = rows.at(i);
-        length = qMax(length, r.getCoreEnd());
-    }
-}
-
-MAlignment::MAlignment(const MAlignment &m)
-    : alphabet(m.alphabet),
-      length(m.length),
-      info(m.info)
-{
-    U2OpStatusImpl os;
-    for (int i = 0; i < m.rows.size(); i++) {
-        MAlignmentRow r = createRow( m.rows.at(i), os);
-        addRow(r, m.length, i, os);
-        SAFE_POINT_OP(os, );
-    }
-}
-
-MAlignment & MAlignment::operator=(const MAlignment &other) {
-    clear();
-
-    alphabet = other.alphabet;
-    length = other.length;
-    info = other.info;
-
-    U2OpStatusImpl os;
-    for (int i = 0; i < other.rows.size(); i++) {
-        const MAlignmentRow r = createRow(other.rows.at(i), os);
-        addRow(r, other.length, i, os);
-        SAFE_POINT_OP(os, *this);
-    }
-
-    return *this;
-}
-
-void MAlignment::setAlphabet(const DNAAlphabet* al) {
-    SAFE_POINT(NULL != al, "Internal error: attempted to set NULL alphabet fro an alignment!",);
-    alphabet = al;
-}
-
-bool MAlignment::trim( bool removeLeadingGaps ) {
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    bool result = false;
-
-    if ( removeLeadingGaps ) {
-        // Verify if there are leading columns of gaps
-        // by checking the first gap in each row
-        qint64 leadingGapColumnsNum = 0;
-        foreach (MAlignmentRow row, rows) {
-            if (row.getGapModel().count() > 0) {
-                U2MsaGap firstGap = row.getGapModel().first();
-                if (firstGap.offset > 0) {
-                    leadingGapColumnsNum = 0;
-                    break;
-                }
-                else {
-                    if (leadingGapColumnsNum == 0) {
-                        leadingGapColumnsNum = firstGap.gap;
-                    }
-                    else {
-                        leadingGapColumnsNum = qMin(leadingGapColumnsNum, firstGap.gap);
-                    }
-                }
-            }
-            else {
-                leadingGapColumnsNum = 0;
-                break;
-            }
-        }
-
-        // If there are leading gap columns, remove them
-        U2OpStatus2Log os;
-        if (leadingGapColumnsNum > 0) {
-            for (int i = 0; i < rows.count(); ++i) {
-                rows[i].removeChars(0, leadingGapColumnsNum, os);
-                CHECK_OP(os, true);
-                result = true;
-            }
-        }
-    }
-
-    // Verify right side of the alignment (trailing gaps and rows' lengths)
-    int newLength = 0;
-    foreach (MAlignmentRow row, rows) {
-        if (newLength == 0) {
-            newLength = row.getRowLengthWithoutTrailing();
-        }
-        else {
-            newLength = qMax(row.getRowLengthWithoutTrailing(), newLength);
-        }
-    }
-
-    if (newLength != length) {
-        length = newLength;
-        result = true;
-    }
-
-    return result;
-}
-
-bool MAlignment::simplify() {
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    int newLen = 0;
-    bool changed = false;
-    for (int i=0, n = rows.size(); i < n; i++) {
-        MAlignmentRow& r = rows[i];
-        changed = r.simplify() || changed;
-        newLen = qMax(newLen, r.getCoreEnd());
-    }
-    if (!changed) {
-        assert(length == newLen);
-        return false;
-    }
-    length = newLen;
-    return true;
-}
-
-bool MAlignment::hasEmptyGapModel( ) const {
-    for ( int i = 0, n = rows.size( ); i < n; ++i ) {
-        const MAlignmentRow &row = rows.at( i );
-        if ( !row.getGapModel( ).isEmpty( ) ) {
-            return false;
-        }
-    }
-    return true;
-}
-
-bool MAlignment::hasEqualLength() const {
-    const int defaultSequenceLength = -1;
-    int sequenceLength = defaultSequenceLength;
-    for ( int i = 0, n = rows.size( ); i < n; ++i ) {
-        const MAlignmentRow &row = rows.at( i );
-        if ( defaultSequenceLength != sequenceLength
-            && sequenceLength != row.getUngappedLength() )
-        {
-            return false;
-        } else {
-            sequenceLength = row.getUngappedLength();
-        }
-    }
-    return true;
-}
-
-void MAlignment::clear() {
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    rows.clear();
-    length = 0;
-}
-
-MAlignment MAlignment::mid(int start, int len) const {
-    static MAlignment emptyAlignment;
-    SAFE_POINT(start >= 0 && start + len <= length,
-        QString("Incorrect parameters were passed to MAlignment::mid:"
-        "start '%1', len '%2', the alignment length is '%3'!").arg(start).arg(len).arg(length),
-        emptyAlignment);
-
-    MAlignment res(getName(), alphabet);
-    MAStateCheck check(&res);
-    Q_UNUSED(check);
-
-    U2OpStatus2Log os;
-    foreach(const MAlignmentRow& r, rows) {
-        MAlignmentRow mRow = r.mid(start, len, os);
-        mRow.setParentAlignment(&res);
-        res.rows.append(mRow);
-    }
-    res.length = len;
-    return res;
-}
-
-U2MsaGapModel MAlignment::getGapModel() const {
-    U2MsaGapModel gapModel;
-    foreach (const MAlignmentRow &row, rows) {
-        gapModel << row.getGapModel();
-    }
-    return gapModel;
-}
-
-MAlignment& MAlignment::operator+=(const MAlignment& ma) {
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    SAFE_POINT(ma.alphabet == alphabet, "Different alphabets in MAlignment::operator+= !", *this);
-
-    int nSeq = getNumRows();
-    SAFE_POINT(ma.getNumRows() == nSeq, "Different number of rows in MAlignment::operator+= !", *this);
-
-    U2OpStatus2Log os;
-    for (int i=0; i < nSeq; i++) {
-        MAlignmentRow& myRow = rows[i];
-        const MAlignmentRow& anotherRow = ma.rows.at(i);
-        myRow.append(anotherRow, length, os);
-    }
-
-    length += ma.length;
-    return *this;
-}
-
-bool MAlignment::operator==(const MAlignment& other) const {
-    bool lengthsAreEqual = (length==other.length);
-    bool alphabetsAreEqual = (alphabet == other.alphabet);
-    bool rowsAreEqual = (rows == other.rows);
-//    bool infosAreEqual = (info == other.info);
-
-    return lengthsAreEqual && alphabetsAreEqual && rowsAreEqual;// && infosAreEqual;
-}
-
-bool MAlignment::operator!=(const MAlignment& other) const {
-    return !operator==(other);
-}
-
-int MAlignment::estimateMemorySize() const {
-    int result = info.size() * 20; //approximate info size estimation
-    foreach(const MAlignmentRow& r, rows) {
-        result += r.getCoreLength() + getName().length() * 2  + 12; //+12 -> overhead for byte array
-    }
-    return result;
-}
-
-bool MAlignment::crop(const U2Region& region, const QSet<QString>& rowNames, U2OpStatus& os) {
-    if (!(region.startPos >= 0 && region.length > 0 && region.length < length && region.startPos < length)) {
-        os.setError(QString("Incorrect region was passed to MAlignment::crop,"
-                            "startPos '%1', length '%2'!").arg(region.startPos).arg(region.length));
-        return false;
-    }
-
-    int cropLen = region.length;
-    if (region.endPos() > length) {
-        cropLen -=  (region.endPos() - length);
-    }
-
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    QList<MAlignmentRow> newList;
-    for (int i = 0 ; i < rows.size(); i++) {
-        MAlignmentRow row = rows[i];
-        const QString& rowName = row.getName();
-        if (rowNames.contains(rowName)){
-            row.crop(region.startPos, cropLen, os);
-            CHECK_OP(os, false);
-            newList.append(row);
-        }
-    }
-    rows = newList;
-
-    length = cropLen;
-    return true;
-}
-
-bool MAlignment::crop(const U2Region &region, U2OpStatus& os) {
-    return crop(region, getRowNames().toSet(), os);
-}
-
-bool MAlignment::crop(int start, int count, U2OpStatus& os) {
-    return crop(U2Region(start, count), os);
-}
-
-MAlignmentRow MAlignment::createRow(const QString& name, const QByteArray& bytes, U2OpStatus& /* os */) {
-    QByteArray newSequenceBytes;
-    QList<U2MsaGap> newGapsModel;
-
-    MAlignmentRow::splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapsModel);
-    DNASequence newSequence(name, newSequenceBytes);
-
-    U2MsaRow row;
-    row.rowId = MAlignmentRow::invalidRowId();
-
-    return MAlignmentRow(row, newSequence, newGapsModel, this);
-}
-
-MAlignmentRow MAlignment::createRow(const U2MsaRow& rowInDb, const DNASequence& sequence, const QList<U2MsaGap>& gaps, U2OpStatus& os) {
-    QString errorDescr = "Failed to create a multiple alignment row!";
-    if (-1 != sequence.constSequence().indexOf(MAlignment_GapChar)) {
-        coreLog.trace("Attempted to create an alignment row from a sequence with gaps!");
-        os.setError(errorDescr);
-        return MAlignmentRow();
-    }
-
-    int length = sequence.length();
-    foreach (const U2MsaGap& gap, gaps) {
-        if (gap.offset > length || !gap.isValid()) {
-            coreLog.trace("Incorrect gap model was passed to MAlignmentRow::createRow!");
-            os.setError(errorDescr);
-            return MAlignmentRow();
-        }
-        length += gap.gap;
-    }
-
-    return MAlignmentRow(rowInDb, sequence, gaps, this);
-}
-
-MAlignmentRow MAlignment::createRow(const MAlignmentRow &r, U2OpStatus &/*os*/) {
-    return MAlignmentRow(r, this);
-}
-
-
-void MAlignment::addRow(const MAlignmentRow& row, int rowLenWithTrailingGaps, int rowIndex, U2OpStatus& /* os */) {
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    length = qMax(rowLenWithTrailingGaps, length);
-    int idx = rowIndex == -1 ? getNumRows() : qBound(0, rowIndex, getNumRows());
-    rows.insert(idx, row);
-}
-
-void MAlignment::addRow(const QString& name, const QByteArray& bytes, U2OpStatus& os) {
-    MAlignmentRow newRow = createRow(name, bytes, os);
-    CHECK_OP(os, );
-
-    addRow(newRow, bytes.size(), -1, os);
-}
-
-void MAlignment::addRow(const QString& name, const QByteArray& bytes, int rowIndex, U2OpStatus& os) {
-    MAlignmentRow newRow = createRow(name, bytes, os);
-    CHECK_OP(os, );
-
-    addRow(newRow, bytes.size(), rowIndex, os);
-}
-
-void MAlignment::addRow(const U2MsaRow& rowInDb, const DNASequence& sequence, U2OpStatus& os) {
-    MAlignmentRow newRow = createRow(rowInDb, sequence, rowInDb.gaps, os);
-    CHECK_OP(os, );
-
-    addRow(newRow, rowInDb.length, -1, os);
-}
-
-void MAlignment::addRow(const QString& name, const DNASequence &sequence, const QList<U2MsaGap> &gaps, U2OpStatus &os) {
-    U2MsaRow row;
-    row.rowId = MAlignmentRow::invalidRowId();
-
-    MAlignmentRow newRow = createRow(row, sequence, gaps, os);
-    CHECK_OP(os, );
-
-    int len = sequence.length();
-    foreach (const U2MsaGap& gap, gaps) {
-        len += gap.gap;
-    }
-
-    newRow.setName(name);
-    addRow(newRow, len, -1, os);
-}
-
-void MAlignment::removeRow(int rowIndex, U2OpStatus& os) {
-    if (rowIndex < 0 || rowIndex >= getNumRows()) {
-        coreLog.trace(QString("Internal error: incorrect parameters was passed to MAlignment::removeRow,"
-            "rowIndex '%1', the number of rows is '%2'!").arg(rowIndex).arg(getNumRows()));
-        os.setError("Failed to remove a row!");
-        return;
-    }
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    rows.removeAt(rowIndex);
-
-    if (rows.isEmpty()) {
-        length = 0;
-    }
-}
-
-void MAlignment::insertGaps(int row, int pos, int count, U2OpStatus& os) {
-    if (row >= getNumRows() || row < 0 || pos > length || pos < 0 || count < 0) {
-        coreLog.trace(QString("Internal error: incorrect parameters were passed"
-            " to MAlignment::insertGaps: row index '%1', pos '%2', count '%3'!").arg(row).arg(pos).arg(count));
-        os.setError("Failed to insert gaps into an alignment!");
-        return;
-    }
-
-    if (pos == length) {
-        // add trailing gaps --> just increase alignment len
-        length += count;
-        return;
-    }
-
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    MAlignmentRow& r = rows[row];
-    if (pos >= r.getRowLengthWithoutTrailing()) {
-        length += count;
-        return;
-    }
-    r.insertGaps(pos, count, os);
-
-    int rowLength = r.getRowLengthWithoutTrailing();
-    length = qMax(length, rowLength);
-}
-
-void MAlignment::appendChars(int row, const char* str, int len) {
-    SAFE_POINT(0 <= row && row < getNumRows(),
-        QString("Incorrect row index '%1' in MAlignment::appendChars!").arg(row),);
-
-    U2OpStatus2Log os;
-    MAlignmentRow appendedRow = createRow("", QByteArray(str, len), os);
-    CHECK_OP(os, );
-
-    int rowLength = rows[row].getRowLength();;
-
-    rows[row].append(appendedRow, rowLength, os);
-    CHECK_OP(os, );
-
-    length = qMax(length, rowLength + len);
-}
-
-void MAlignment::appendChars(int row, int afterPos, const char *str, int len) {
-    SAFE_POINT(0 <= row && row < getNumRows(),
-        QString("Incorrect row index '%1' in MAlignment::appendChars!").arg(row),);
-
-    U2OpStatus2Log os;
-    MAlignmentRow appendedRow = createRow("", QByteArray(str, len), os);
-    CHECK_OP(os, );
-
-    rows[row].append(appendedRow, afterPos, os);
-    CHECK_OP(os, );
-
-    length = qMax(length, afterPos + len);
-
-}
-
-void MAlignment::appendRow(int row, const MAlignmentRow &r, bool ignoreTrailingGaps, U2OpStatus& os) {
-    appendRow(row, ignoreTrailingGaps ? rows[row].getRowLengthWithoutTrailing()
-                                      : rows[row].getRowLength(), r, os);
-}
-
-void MAlignment::appendRow(int row, int afterPos, const MAlignmentRow &r, U2OpStatus& os) {
-    SAFE_POINT(0 <= row && row < getNumRows(),
-        QString("Incorrect row index '%1' in MAlignment::appendRow!").arg(row),);
-
-    rows[row].append(r, afterPos, os);
-    CHECK_OP(os, );
-
-    length = qMax(length, afterPos + r.getRowLength());
-}
-
-void MAlignment::removeChars(int row, int pos, int count, U2OpStatus& os) {
-    if (row >= getNumRows() || row < 0 || pos > length || pos < 0 || count < 0) {
-        coreLog.trace(QString("Internal error: incorrect parameters were passed"
-            " to MAlignment::removeChars: row index '%1', pos '%2', count '%3'!").arg(row).arg(pos).arg(count));
-        os.setError("Failed to remove chars from an alignment!");
-        return;
-    }
-
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    MAlignmentRow& r = rows[row];
-    r.removeChars(pos, count, os);
-}
-
-void MAlignment::removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows) {
-    SAFE_POINT(startPos >= 0 && startPos + nBases <= length && nBases > 0,
-        QString("Incorrect parameters were passed to MAlignment::removeRegion: startPos '%1',"
-        " nBases '%2', the length is '%3'!").arg(startPos).arg(nBases).arg(length),);
-    SAFE_POINT(startRow >= 0 && startRow + nRows <= getNumRows() && nRows > 0,
-        QString("Incorrect parameters were passed to MAlignment::removeRegion: startRow '%1',"
-        " nRows '%2', the number of rows is '%3'!").arg(startRow).arg(nRows).arg(getNumRows()),);
-
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    U2OpStatus2Log os;
-    for (int i = startRow + nRows; --i >= startRow;) {
-        MAlignmentRow& r = rows[i];
-
-        r.removeChars(startPos, nBases, os);
-        SAFE_POINT_OP(os, );
-
-        if (removeEmptyRows && (0 == r.getSequence().length())) {
-            rows.removeAt(i);
-        }
-    }
-
-    if (nRows == rows.size()) {
-        // full columns were removed
-        length -= nBases;
-        if (length == 0) {
-            rows.clear();
-        }
-    }
-}
-
-void MAlignment::setLength(int newLength) {
-    SAFE_POINT(newLength >=0, QString("Internal error: attempted to set length '%1' for an alignment!").arg(newLength),);
-
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    if (newLength >= length) {
-        length = newLength;
-        return;
-    }
-
-    U2OpStatus2Log os;
-    for (int i=0, n = getNumRows(); i < n; i++) {
-        MAlignmentRow& row = rows[i];
-        row.crop(0, newLength, os);
-        CHECK_OP(os, );
-    }
-    length = newLength;
-}
-
-void MAlignment::renameRow(int row, const QString& name) {
-    SAFE_POINT(row >= 0 && row < getNumRows(),
-        QString("Incorrect row index '%1' was passed to MAlignment::renameRow: "
-        " the number of rows is '%2'!").arg(row).arg(getNumRows()),);
-    SAFE_POINT(!name.isEmpty(),
-        "Incorrect parameter 'name' was passed to MAlignment::renameRow: "
-        " Can't set the name of a row to an empty string!",);
-    MAlignmentRow& r = rows[row];
-    r.setName(name);
-}
-
-
-void MAlignment::replaceChars(int row, char origChar, char resultChar) {
-    SAFE_POINT(row >= 0 && row < getNumRows(),
-        QString("Incorrect row index '%1' in MAlignment::replaceChars").arg(row),);
-
-    if (origChar == resultChar) {
-        return;
-    }
-    MAlignmentRow& r = rows[row];
-    U2OpStatus2Log os;
-    r.replaceChars(origChar, resultChar, os);
-}
-
-void MAlignment::setRowContent(int row, const QByteArray& sequence, int offset) {
-    SAFE_POINT(row >= 0 && row < getNumRows(),
-        QString("Incorrect row index '%1' was passed to MAlignment::setRowContent: "
-        " the number of rows is '%2'!").arg(row).arg(getNumRows()),);
-    MAStateCheck check(this);
-    Q_UNUSED(check);
-
-    MAlignmentRow& r = rows[row];
-
-    U2OpStatus2Log os;
-    r.setRowContent(sequence, offset, os);
-    SAFE_POINT_OP(os, );
-
-    length = qMax(length, sequence.size() + offset);
-}
-
-void MAlignment::toUpperCase() {
-    for (int i = 0, n = getNumRows(); i < n; i++) {
-        MAlignmentRow& row = rows[i];
-        row.toUpperCase();
-    }
-}
-
-class CompareMARowsByName {
-public:
-    CompareMARowsByName(bool _asc = true) : asc(_asc){}
-    bool operator()(const MAlignmentRow& row1, const MAlignmentRow& row2) const {
-        bool res = QString::compare(row1.getName(), row2.getName(), Qt::CaseInsensitive) > 0;
-        return asc ? !res : res;
-    }
-
-    bool asc;
-};
-
-void MAlignment::sortRowsByName(bool asc) {
-    MAStateCheck check(this);
-
-    qStableSort(rows.begin(), rows.end(), CompareMARowsByName(asc));
-}
-
-bool MAlignment::sortRowsBySimilarity(QVector<U2Region>& united) {
-    QList<MAlignmentRow> oldRows = rows;
-    QList<MAlignmentRow> sortedRows;
-    while (!oldRows.isEmpty()) {
-        const MAlignmentRow& r = oldRows.takeFirst();
-        sortedRows.append(r);
-        int start = sortedRows.size() - 1;
-        int len = 1;
-        QMutableListIterator<MAlignmentRow> iter(oldRows);
-        while (iter.hasNext()) {
-            const MAlignmentRow& next = iter.next();
-            if(next.isRowContentEqual(r)) {
-                sortedRows.append(next);
-                iter.remove();
-                ++len;
-            }
-        }
-        if (len > 1) {
-            united.append(U2Region(start, len));
-        }
-    }
-    if(rows != sortedRows) {
-        rows = sortedRows;
-        return true;
-    }
-    return false;
-}
-
-void MAlignment::moveRowsBlock(int startRow, int numRows, int delta)
-{
-    MAStateCheck check(this);
-
-    // Assumption: numRows is rather big, delta is small (1~2)
-    // It's more optimal to move abs(delta) of rows then the block itself
-
-    int i = 0;
-    int k = qAbs(delta);
-
-    SAFE_POINT(( delta > 0 && startRow + numRows + delta - 1 < rows.length())
-        || (delta < 0 && startRow + delta >= 0),
-        QString("Incorrect parameters in MAlignment::moveRowsBlock: "
-        "startRow: '%1', numRows: '%2', delta: '%3'").arg(startRow).arg(numRows).arg(delta),);
-
-    QList<MAlignmentRow> toMove;
-    int fromRow = delta > 0 ? startRow + numRows  : startRow + delta;
-
-    while (i <  k) {
-        MAlignmentRow row = rows.takeAt(fromRow);
-        toMove.append(row);
-        i++;
-    }
-
-    int toRow = delta > 0 ? startRow : startRow + numRows - k;
-
-    while (toMove.count() > 0) {
-        int n = toMove.count();
-        MAlignmentRow row = toMove.at(n - 1);
-        toMove.removeAt(n - 1);
-        rows.insert(toRow, row);
-    }
-}
-
-QStringList MAlignment::getRowNames() const {
-    QStringList rowNames;
-    foreach (const MAlignmentRow& r, rows) {
-        rowNames.append(r.getName());
-    }
-    return rowNames;
-}
-
-QList<qint64> MAlignment::getRowsIds() const {
-    QList<qint64> rowIds;
-    foreach (const MAlignmentRow& row, rows) {
-        rowIds.append(row.getRowId());
-    }
-    return rowIds;
-}
-
-MAlignmentRow MAlignment::getRowByRowId(qint64 rowId, U2OpStatus& os) const {
-    foreach (const MAlignmentRow& row, rows) {
-        if (row.getRowId() == rowId) {
-            return row;
-        }
-    }
-    os.setError("Failed to find a row in an alignment!");
-    return MAlignmentRow();
-}
-
-int MAlignment::getRowIndexByRowId( qint64 rowId, U2OpStatus &os ) const {
-    for ( int rowIndex = 0; rowIndex < rows.size( ); ++rowIndex ) {
-        if ( rows.at( rowIndex ).getRowId( ) == rowId ) {
-            return rowIndex;
-        }
-    }
-    os.setError("Invalid row id!");
-    return MAlignmentRow::invalidRowId();
-}
-
-char MAlignment::charAt(int rowIndex, int pos) const {
-    const MAlignmentRow& mai = rows[rowIndex];
-    char c = mai.charAt(pos);
-    return c;
-}
-
-void MAlignment::setRowGapModel(int rowIndex, const QList<U2MsaGap>& gapModel) {
-    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index!", );
-    MAlignmentRow& row = rows[rowIndex];
-    length = qMax(length, MsaRowUtils::getGapsLength(gapModel) + row.sequence.length());
-    row.setGapModel(gapModel);
-}
-
-void MAlignment::setRowId(int rowIndex, qint64 rowId) {
-    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index!", );
-
-    MAlignmentRow& row = rows[rowIndex];
-    row.setRowId(rowId);
-}
-
-void MAlignment::setSequenceId(int rowIndex, U2DataId sequenceId) {
-    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index!", );
-
-    MAlignmentRow& row = rows[rowIndex];
-    row.setSequenceId(sequenceId);
-}
-
-void MAlignment::check() const {
-#ifdef DEBUG
-    assert(getNumRows() != 0 || length == 0);
-    for (int i = 0, n = getNumRows(); i < n; i++) {
-        const MAlignmentRow& row = rows.at(i);
-        assert(row.getCoreEnd() <= length);
-    }
-#endif
-}
-
-bool MAlignment::sortRowsByList(const QStringList& rowsOrder) {
-    MAStateCheck check(this);
-
-    const QStringList& rowNames = getRowNames();
-    foreach(const QString& rowName, rowNames) {
-        CHECK(rowsOrder.contains(rowName), false);
-    }
-
-    QList<MAlignmentRow> sortedRows;
-    foreach(const QString& rowName, rowsOrder) {
-        int rowIndex = rowNames.indexOf(rowName);
-        if(rowIndex >= 0) {
-            const MAlignmentRow& curRow = rows.at(rowIndex);
-            sortedRows.append(curRow);
-        }
-    }
-
-    rows = sortedRows;
-    return true;
-}
-
-const MAlignmentRow& MAlignment::getRow( QString name ) const{
-    static MAlignmentRow emptyRow;
-    for(int i = 0;i < rows.count();i++){
-        if(rows.at(i).getName() == name){
-            return rows.at(i);
-        }
-    }
-    SAFE_POINT(false,
-        "Internal error: row name passed to MAlignmnet::getRow function not exists!",
-        emptyRow);
-}
-
-static bool _registerMeta() {
-    qRegisterMetaType<MAlignment>("MAlignment");
-    return true;
-}
-
-bool MAlignment::registerMeta = _registerMeta();
-
-} // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/MAlignment.h b/src/corelibs/U2Core/src/datatype/MAlignment.h
deleted file mode 100644
index d668038..0000000
--- a/src/corelibs/U2Core/src/datatype/MAlignment.h
+++ /dev/null
@@ -1,590 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_H_
-#define _U2_MALIGNMENT_H_
-
-#include "MAlignmentInfo.h"
-
-#include <U2Core/DNASequence.h>
-#include <U2Core/MsaRowUtils.h>
-#include <U2Core/U2Msa.h>
-#include <U2Core/U2OpStatus.h>
-#include <U2Core/U2Region.h>
-#include <U2Core/U2SafePoints.h>
-
-
-namespace U2 {
-
-/** Default name for a multiple alignment */
-#define MA_OBJECT_NAME QString("Multiple alignment")
-
-/** Gap character */
-#define MAlignment_GapChar '-'
-#define MAlignment_TailedGapsPattern "\\-+$"
-
-class DNAAlphabet;
-class MAlignment;
-
-/**
- * A row in a multiple alignment structure.
- * The row consists of a sequence without gaps
- * and a gap model.
- * A row core is an obsolete concept. Currently,
- * it exactly equals to the row (offset always equals to zero).
- */
-class U2CORE_EXPORT MAlignmentRow {
-    friend class MAlignment;
-
-public:
-    /** Name of the row (equals to the sequence name), can be empty */
-    QString getName() const { return sequence.getName(); }
-    void setName(const QString& name) { sequence.setName(name); }
-
-    /** Returns the list of gaps for the row */
-    inline const QList<U2MsaGap>& getGapModel() const;
-
-    /** Careful, the new gap model is not validated! */
-    void setGapModel(const QList<U2MsaGap>& newGapModel);
-
-    /** Returns the row sequence (without gaps) */
-    inline const DNASequence& getSequence() const;
-
-    /**
-     * Sets a new sequence. Be careful, gap model validity is not verified.
-     * The sequence must not contain gaps.
-     */
-    void setSequence(const DNASequence& newSequence);
-
-    /** Returns ID of the row in the database. */
-    qint64 getRowId() const { return initialRowInDb.rowId; }
-
-    void setRowId(qint64 rowId) { initialRowInDb.rowId = rowId; }
-
-    void setSequenceId(U2DataId sequenceId) { initialRowInDb.sequenceId = sequenceId; }
-
-    /** Returns ID of the row sequence in the database. */
-    U2MsaRow getRowDBInfo() const;
-
-    /** Sets database IDs for row and sequence */
-    void setRowDbInfo(const U2MsaRow &dbRow);
-
-    /**
-     * The length must be greater or equal to the row length.
-     * When the specified length is greater, an appropriate number of
-     * trailing gaps are appended to the end of the byte array.
-     */
-    QByteArray toByteArray(int length, U2OpStatus& os) const;
-
-    /** Returns length of the sequence + number of gaps including trailing gaps (if any) */
-    int getRowLength() const;
-
-    /** Returns length of the sequence + number of gaps. Doesn't include trailing gaps. */
-    inline int getRowLengthWithoutTrailing() const;
-
-    /** Packed version: returns the row without leading and trailing gaps */
-    QByteArray getCore() const;
-
-    /** Returns the row the way it is -- with leading and trailing gaps */
-    QByteArray getData() const;
-
-    /** Obsolete. Always return the row length (non-inclusive!) */
-    inline int getCoreEnd() const;
-
-    /** Obsolete. Always returns zero. */
-    inline int getCoreStart() const;
-
-    /** Obsolete. The length of the row core */
-    int getCoreLength() const;
-
-    /** Removes all gaps. Returns true if changed. */
-    inline bool simplify();
-
-    /** Adds anotherRow data to this row(ingores trailing gaps), "lengthBefore" must be greater than this row's length. */
-    void append(const MAlignmentRow& anotherRow, int lengthBefore, U2OpStatus& os);
-
-    /**
-     * Sets new sequence and gap model.
-     * If the sequence is empty, the offset is ignored (if any).
-     */
-    void setRowContent(const QByteArray& bytes, int offset, U2OpStatus& os);
-
-    /**
-     * Inserts 'count' gaps into the specified position, if possible.
-     * If position is bigger than the row length or negative, does nothing.
-     * Returns incorrect status if 'count' is negative.
-     */
-    void insertGaps(int pos, int count, U2OpStatus& os);
-
-    /**
-     * Removes up to 'count' characters starting from the specified position
-     * If position is bigger than the row length, does nothing.
-     * Returns incorrect status if 'pos' or 'count' is negative.
-     */
-    void removeChars(int pos, int count, U2OpStatus& os);
-
-    /**
-     * Returns a character in row at the specified position.
-     * If the specified position is outside the row bounds, returns a gap.
-     */
-    char charAt(int pos) const;
-
-    /** Length of the sequence without gaps */
-    inline int getUngappedLength() const;
-
-    /**
-     * If character at 'pos' position is not a gap, returns the char position in sequence.
-     * Otherwise returns '-1'.
-     */
-    int getUngappedPosition(int pos) const;
-
-    /**
-     * Returns base count located leftward to the 'before' position in the alignment.
-     */
-    int getBaseCount(int before) const;
-
-    /**
-     * Exactly compares the rows. Sequences and gap models must match.
-     * However, the rows are considered equal if they differ by trailing gaps only.
-     */
-    bool isRowContentEqual(const MAlignmentRow& row) const;
-
-    /** Compares 2 rows. Rows are equal if their contents and names are equal. */
-    inline bool operator!=(const MAlignmentRow& r) const;
-    bool operator==(const MAlignmentRow& r) const;
-
-    /**
-     * Crops the row -> keeps only specified region in the row.
-     * 'pos' and 'pos + count' can be greater than the row length.
-     * Keeps trailing gaps.
-     */
-    void crop(int pos, int count, U2OpStatus& os);
-
-    /**
-     * Returns new row of the specified 'count' length, started from 'pos'.
-     * 'pos' and 'pos + count' can be greater than the row length.
-     * Keeps trailing gaps.
-     */
-    MAlignmentRow mid(int pos, int count, U2OpStatus& os) const;
-
-    /** Converts the row sequence to upper case */
-    void toUpperCase();
-
-    /**
-     * Replaces all occurrences of 'origChar' by 'resultChar'.
-     * The 'origChar' must be a non-gap character.
-     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
-     */
-    void replaceChars(char origChar, char resultChar, U2OpStatus& os);
-
-    inline static qint64 invalidRowId() { return -1; }
-
-private:
-    /** Do NOT create a row without an alignment! */
-    MAlignmentRow(MAlignment* al = NULL);
-
-    /** Creates a row in memory. */
-    MAlignmentRow(const U2MsaRow& rowInDb, const DNASequence& sequence, const QList<U2MsaGap>& gaps, MAlignment* al);
-
-    MAlignmentRow(const MAlignmentRow& r, MAlignment* al);
-
-    /** Splits input to sequence bytes and gaps model */
-    static void splitBytesToCharsAndGaps(const QByteArray& input, QByteArray& seqBytes, QList<U2MsaGap>& gapModel);
-
-    /**
-     * Add "offset" of gaps to the beginning of the row
-     * Warning: it is not verified that the row sequence is not empty.
-     */
-    static void addOffsetToGapModel(QList<U2MsaGap>& gapModel, int offset);
-
-    /**
-     * Joins sequence chars and gaps into one byte array.
-     * "keepOffset" specifies to take into account gaps at the beginning of the row.
-     */
-    QByteArray joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const;
-
-    /** Gets the length of all gaps */
-    inline int getGapsLength() const;
-
-    /** If there are consecutive gaps in the gaps model, merges them into one gap */
-    void mergeConsecutiveGaps();
-
-    /** The row must not contain trailing gaps, this method is used to assure it after the row modification */
-    void removeTrailingGaps();
-
-    /**
-     * Calculates start and end position in the sequence,
-     * depending on the start position in the row and the 'count' character from it
-     */
-    void getStartAndEndSequencePositions(int pos, int count, int& startPosInSeq, int& endPosInSeq);
-
-    /** Removing gaps from the row between position 'pos' and 'pos + count' */
-    void removeGapsFromGapModel(int pos, int count);
-
-    void setParentAlignment(MAlignment* newAl) { alignment = newAl; }
-
-    MAlignment*         alignment;
-
-    /** The sequence of the row without gaps (cached) */
-    DNASequence         sequence;
-
-    /**
-     * Gaps model of the row
-     * There should be no trailing gaps!
-     * Trailing gaps are 'Virtual': they are stored 'inside' the alignment length
-     */
-    QList<U2MsaGap>     gaps;
-
-    /** The row in the database */
-    U2MsaRow            initialRowInDb;
-};
-
-
-inline int MAlignmentRow::getGapsLength() const {
-    return MsaRowUtils::getGapsLength(gaps);
-}
-
-inline int MAlignmentRow::getCoreStart() const {
-    return MsaRowUtils::getCoreStart(gaps);
-}
-
-inline int MAlignmentRow::getCoreEnd() const {
-    return getRowLengthWithoutTrailing();
-}
-
-inline int MAlignmentRow::getRowLengthWithoutTrailing() const {
-    return MsaRowUtils::getRowLength(sequence.seq, gaps);
-}
-
-inline int MAlignmentRow::getUngappedLength() const {
-    return sequence.length();
-}
-
-inline bool MAlignmentRow::simplify() {
-    if (gaps.count() > 0) {
-        gaps.clear();
-        return true;
-    }
-    return false;
-}
-
-inline const QList<U2MsaGap>& MAlignmentRow::getGapModel() const {
-    return gaps;
-}
-
-inline const DNASequence& MAlignmentRow::getSequence() const {
-    return sequence;
-}
-
-inline bool MAlignmentRow::operator!=(const MAlignmentRow& row) const {
-    return !(*this == row);
-}
-
-
-/**
- * Multiple sequence alignment
- * The length of the alignment is the maximum length of its rows.
- * There are minimal checks on the alignment's alphabet, but the client of the class
- * is expected to keep the conformance of the data and the alphabet.
- */
-class U2CORE_EXPORT MAlignment {
-public:
-    /**
-     * Creates a new alignment.
-     * The name must be provided if this is not default alignment.
-     */
-    MAlignment(const QString& name = QString(),
-               const DNAAlphabet* alphabet = NULL,
-               const QList<MAlignmentRow>& rows = QList<MAlignmentRow>());
-    MAlignment(const MAlignment& m);
-
-    MAlignment & operator=(const MAlignment &other);
-
-    /**
-     * Clears the alignment. Makes alignment length == 0.
-     * Doesn't change alphabet or name
-     */
-    void clear();
-
-    /** Returns  the name of the alignment */
-    QString getName() const { return MAlignmentInfo::getName(info); }
-
-    /** Sets the name of the alignment */
-    void setName(const QString& newName) { MAlignmentInfo::setName(info, newName); }
-
-    /** Returns the alphabet of the alignment */
-    const DNAAlphabet* getAlphabet() const { return alphabet; }
-
-    /**
-     * Sets the alphabet of the alignment, the value can't be NULL.
-     * Warning: rows already present in the alignment are not verified to correspond to this alphabet
-     */
-    void setAlphabet(const DNAAlphabet* al);
-
-    /** Returns the alignment info */
-    QVariantMap getInfo() const { return info; }
-
-    /** Sets the alignment info */
-    void setInfo(const QVariantMap& _info) { info = _info; }
-
-    /** Returns true if the length of the alignment is 0 */
-    bool isEmpty() const { return getLength() == 0; }
-
-    /** Returns the length of the alignment */
-    int getLength() const { return length; }
-
-    /** Sets the length of the alignment. The length must be >= 0. */
-    void setLength(int len);
-
-    /** Returns the number of rows in the alignment */
-    int getNumRows() const { return rows.size(); }
-
-    /**
-     * Recomputes the length of the alignment and makes it as minimal
-     * as possible. All leading gaps columns are removed by default.
-     * Returns "true" if the alignment has been modified.
-     */
-    bool trim( bool removeLeadingGaps = true );
-
-    /**
-     * Removes all gaps from all columns in the alignment.
-     * Returns "true" if the alignment has been changed.
-     */
-    bool simplify();
-
-    /** Sorts rows by name */
-    void sortRowsByName(bool asc = true);
-
-    /**
-     * Sorts rows by similarity making identical rows sequential.
-     * Returns 'true' if the rows were resorted, and 'false' otherwise.
-     */
-    bool sortRowsBySimilarity(QVector<U2Region>& united);
-
-    /** Returns row of the alignment */
-    inline MAlignmentRow& getRow(int row);
-    inline const MAlignmentRow& getRow(int row) const;
-
-    const MAlignmentRow& getRow(QString name) const;
-
-    /** Returns all rows in the alignment */
-    const QList<MAlignmentRow>& getRows() const { return rows; }
-
-    /** Returns IDs of the alignment rows in the database */
-    QList<qint64> getRowsIds() const;
-
-    MAlignmentRow getRowByRowId(qint64 rowId, U2OpStatus& os) const;
-
-    /** Returns all rows' names in the alignment */
-    QStringList getRowNames() const;
-
-    int getRowIndexByRowId(qint64 rowId, U2OpStatus &os) const;
-
-    /** Returns a character (a gap or a non-gap) in the specified row and position */
-    char charAt(int rowIndex, int pos) const;
-
-    /**
-     * Inserts 'count' gaps into the specified position.
-     * Can increase the overall alignment length.
-     */
-    void insertGaps(int row, int pos, int count, U2OpStatus& os);
-
-    /**
-     * Removes up to n characters starting from the specified position.
-     * Can decrease the overall alignment length.
-     */
-    void removeChars(int row, int pos, int count, U2OpStatus& os);
-
-    /**
-     * Removes a region from the alignment.
-     * If "removeEmptyRows" is "true", removes all empty rows from the processed region.
-     * The alignment is trimmed after removing the region.
-     * Can decrease the overall alignment length.
-     */
-    void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows);
-
-    /**
-     * Renames the row with the specified index.
-     * Assumes that the row index is valid and the name is not empty.
-     */
-    void renameRow(int row, const QString& name);
-
-    /**
-     * Sets the new content for the row with the specified index.
-     * Assumes that the row index is valid.
-     * Can modify the overall alignment length (increase or decrease).
-     */
-    void setRowContent(int row, const QByteArray& sequence, int offset = 0);
-
-    /** Converts all rows' sequences to upper case */
-    void toUpperCase();
-
-    /**
-     * Modifies the alignment by keeping data from the specified region and rows only.
-     * Assumes that the region start is not negative, but it can be greater than a row length.
-     */
-    bool crop(const U2Region& region, const QSet<QString>& rowNames, U2OpStatus& os);
-    bool crop(const U2Region &region, U2OpStatus& os);
-    bool crop(int start, int count, U2OpStatus& os);
-
-    /**
-     * Creates a new alignment from the sub-alignment. Do not trims the result.
-     * Assumes that 'start' >= 0, and 'start + len' is less or equal than the alignment length.
-     */
-    MAlignment mid(int start, int len) const;
-
-    U2MsaGapModel getGapModel() const;
-
-    void setRowGapModel(int rowIndex, const QList<U2MsaGap>& gapModel);
-
-    /** Updates row ID of the row at 'rowIndex' position */
-    void setRowId(int rowIndex, qint64 rowId);
-
-    void setSequenceId(int rowIndex, U2DataId sequenceId);
-
-    /**
-     * Adds a new row to the alignment.
-     * If rowIndex == -1 -> appends the row to the alignment.
-     * Otherwise, if rowIndex is incorrect, the closer bound is used (the first or the last row).
-     * Does not trim the original alignment.
-     * Can increase the overall alignment length.
-     */
-    void addRow(const QString& name, const QByteArray& bytes, U2OpStatus& os);
-    void addRow(const QString& name, const QByteArray& bytes, int rowIndex, U2OpStatus& os);
-    void addRow(const U2MsaRow& rowInDb, const DNASequence& sequence, U2OpStatus& os);
-    void addRow(const QString& name, const DNASequence& sequence, const QList<U2MsaGap>& gaps, U2OpStatus& os);
-
-    /**
-     * Removes a row from alignment.
-     * The alignment is changed only (to zero) if the alignment becomes empty.
-     */
-    void removeRow(int rowIndex, U2OpStatus& os);
-
-    /**
-     * Shifts a selection of consequent rows.
-     * 'delta' can be positive or negative.
-     * It is assumed that indexes of shifted rows are within the bounds of the [0, number of rows).
-     */
-    void moveRowsBlock(int startRow, int numRows, int delta);
-
-    /**
-     * Replaces all occurrences of 'origChar' by 'resultChar' in the row with the specified index.
-     * The 'origChar' must be a non-gap character.
-     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
-     * The index must be valid as well.
-     */
-    void replaceChars(int row, char origChar, char resultChar);
-
-    /**
-     * Appends chars to the row with the specified index.
-     * The chars are appended to the alignment end, not to the row end
-     * (i.e. the alignment length is taken into account).
-     * Does NOT recalculate the alignment length!
-     * The index must be valid.
-     */
-    void appendChars(int row, const char* str, int len);
-
-    void appendChars(int row, int afterPos, const char *str, int len);
-
-    void appendRow(int rowIdx, const MAlignmentRow& r, bool ignoreTrailingGaps, U2OpStatus& os);
-
-    void appendRow(int rowIdx, int afterPos, const MAlignmentRow &r, U2OpStatus& os);
-
-    /** returns "True" if there are no gaps in the alignment */
-    bool hasEmptyGapModel() const;
-
-    /**  returns "True" if all sequences in the alignment have equal lengths */
-    bool hasEqualLength() const;
-
-    /**
-     * Joins two alignments. Alignments must have the same size and alphabet.
-     * Increases the alignment length.
-     */
-    MAlignment& operator+=(const MAlignment& ma);
-
-    /**
-     * Compares two alignments: lengths, alphabets, rows and infos (that include names).
-     */
-    bool operator==(const MAlignment& ma) const;
-    bool operator!=(const MAlignment& ma) const;
-
-
-    /** Estimates memory size consumed by alignment structure in bytes */
-    int estimateMemorySize() const;
-
-    /** Checks model consistency */
-    void check() const;
-
-    /** Arranges rows in lists order*/
-    bool sortRowsByList(const QStringList& order);
-
-private:
-    /** Create a new row (sequence + gap model) from the bytes */
-    MAlignmentRow createRow(const QString& name, const QByteArray& bytes, U2OpStatus& os);
-
-    /**
-     * Sequence must not contain gaps.
-     * All gaps in the gaps model (in 'rowInDb') must be valid and have an offset within the bound of the sequence.
-     */
-    MAlignmentRow createRow(const U2MsaRow& rowInDb, const DNASequence& sequence, const QList<U2MsaGap>& gaps, U2OpStatus& os);
-
-    MAlignmentRow createRow(const MAlignmentRow& r, U2OpStatus& os);
-
-    /** Helper-method for adding a row to the alignment */
-    void addRow(const MAlignmentRow& row, int rowLenWithTrailingGaps, int rowIndex, U2OpStatus& os);
-
-    /** Alphabet for all sequences in the alignment */
-    const DNAAlphabet*            alphabet;
-
-    /** Alignment rows (each row = sequence + gap model) */
-    QList<MAlignmentRow>    rows;
-
-    /** The length of the longest row in the alignment */
-    int                     length;
-
-    /** Additional alignment info */
-    QVariantMap             info;
-
-private:
-    static bool registerMeta;
-};
-
-inline MAlignmentRow& MAlignment::getRow(int rowIndex) {
-    static MAlignmentRow emptyRow;
-    int rowsCount = rows.count();
-    SAFE_POINT(0 != rowsCount, "No rows!", emptyRow);
-    SAFE_POINT(rowIndex >= 0 && (rowIndex < rowsCount), "Internal error: unexpected row index was passed to MAlignmnet::getRow!", emptyRow);
-    return rows[rowIndex];
-}
-
-inline const MAlignmentRow& MAlignment::getRow(int rowIndex) const {
-    static MAlignmentRow emptyRow;
-    int rowsCount = rows.count();
-    SAFE_POINT(0 != rowsCount, "No rows!", emptyRow);
-    SAFE_POINT(rowIndex >= 0 && (rowIndex < rowsCount), "Internal error: unexpected row index was passed to MAlignmnet::getRow!", emptyRow);
-    return rows.at(rowIndex);
-}
-
-}//namespace
-
-Q_DECLARE_METATYPE(U2::MAlignment)
-
-#endif
diff --git a/src/corelibs/U2Core/src/datatype/MAlignmentInfo.cpp b/src/corelibs/U2Core/src/datatype/MAlignmentInfo.cpp
deleted file mode 100644
index f20610a..0000000
--- a/src/corelibs/U2Core/src/datatype/MAlignmentInfo.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-
-#include <QtCore/QStringList>
-
-#include "MAlignmentInfo.h"
-
-namespace U2 {
-
-const QString MAlignmentInfo::NAME                  = "NAME";
-const QString MAlignmentInfo::ACCESSION             = "ACCESSION";
-const QString MAlignmentInfo::DESCRIPTION           = "DESCRIPTION";
-const QString MAlignmentInfo::SS_CONSENSUS          = "SS_CONSENSUS";
-const QString MAlignmentInfo::REFERENCE_LINE        = "REFERENCE_LINE";
-const QString MAlignmentInfo::CUTOFFS               = "CUTOFFS";
-
-bool MAlignmentInfo::isValid( const QVariantMap& map ) {
-    return hasName( map );
-}
-
-static QVariant getValue( const QString& tag, const QVariantMap& map ) {
-    return map.value( tag );
-}
-
-static void setValue( QVariantMap& map, const QString& tag, const QVariant& val ) {
-    assert( !tag.isEmpty() );
-    if( !val.isNull() ) {
-        map.insert( tag, val );
-    }
-}
-
-QString MAlignmentInfo::getName( const QVariantMap& map ) {
-    return getValue( NAME, map ).toString();
-}
-
-void MAlignmentInfo::setName( QVariantMap& map, const QString& name ) {
-    setValue( map, NAME, name );
-}
-
-bool MAlignmentInfo::hasName( const QVariantMap& map ) {
-    return !getName( map ).isEmpty();
-}
-
-QString MAlignmentInfo::getAccession( const QVariantMap& map ) {
-    return getValue( ACCESSION, map ).toString();
-}
-
-void MAlignmentInfo::setAccession( QVariantMap& map, const QString& acc ) {
-    setValue( map, ACCESSION, acc );
-}
-
-bool MAlignmentInfo::hasAccession( const QVariantMap& map ) {
-    return !getAccession( map ).isEmpty();
-}
-
-QString MAlignmentInfo::getDescription( const QVariantMap& map ) {
-    return getValue( DESCRIPTION, map ).toString();
-}
-
-void MAlignmentInfo::setDescription( QVariantMap& map, const QString& desc ) {
-    setValue( map, DESCRIPTION, desc );
-}
-
-bool MAlignmentInfo::hasDescription( const QVariantMap& map ) {
-    return !getDescription( map ).isEmpty();
-}
-
-QString MAlignmentInfo::getSSConsensus( const QVariantMap& map ) {
-    return getValue( SS_CONSENSUS, map ).toString();
-}
-
-void MAlignmentInfo::setSSConsensus( QVariantMap& map, const QString& cs ) {
-    setValue( map, SS_CONSENSUS, cs );
-}
-
-bool MAlignmentInfo::hasSSConsensus( const QVariantMap& map ) {
-    return !getSSConsensus( map ).isEmpty();
-}
-
-QString MAlignmentInfo::getReferenceLine( const QVariantMap& map ) {
-    return getValue( REFERENCE_LINE, map ).toString();
-}
-
-void MAlignmentInfo::setReferenceLine( QVariantMap& map ,const QString& rf ) {
-    setValue( map, REFERENCE_LINE, rf );
-}
-
-bool MAlignmentInfo::hasReferenceLine( const QVariantMap& map ) {
-    return !getReferenceLine( map ).isEmpty();
-}
-
-void MAlignmentInfo::setCutoff( QVariantMap& map, Cutoffs coff, float val ) {
-    setValue( map, CUTOFFS + QString::number( static_cast< int >( coff ) ), val );
-}
-
-float MAlignmentInfo::getCutoff( const QVariantMap& map, Cutoffs coff ) {
-    return static_cast< float >( getValue( CUTOFFS + QString::number( static_cast< int >( coff ) ), map ).toDouble() );
-}
-
-bool MAlignmentInfo::hasCutoff( const QVariantMap& map, Cutoffs coff ) {
-    bool ok = false;
-    getValue( CUTOFFS + QString::number( static_cast< int >( coff ) ), map ).toDouble( &ok );
-    return ok;
-}
-
-} // U2
diff --git a/src/corelibs/U2Core/src/datatype/MAlignmentInfo.h b/src/corelibs/U2Core/src/datatype/MAlignmentInfo.h
deleted file mode 100644
index 8eba88d..0000000
--- a/src/corelibs/U2Core/src/datatype/MAlignmentInfo.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_INFO_H_
-#define _U2_MALIGNMENT_INFO_H_
-
-#include <QtCore/QString>
-
-#include <U2Core/global.h>
-
-namespace U2 {
-
-class U2CORE_EXPORT MAlignmentInfo {
-public:
-    static const QString NAME;
-    static const QString ACCESSION;
-    static const QString DESCRIPTION;
-    static const QString SS_CONSENSUS;          /* Secondary structure consensus */
-    static const QString REFERENCE_LINE;        /* #=GC RF annotation in Stockholm markup */
-    static const QString CUTOFFS;               /* #=GF GA, NC, TC annotation in Stockholm markup */
-
-    enum Cutoffs { /* Should be same as in esl_msa.h( uhmmer plugin ) */
-        CUTOFF_TC1,
-        CUTOFF_TC2,
-        CUTOFF_GA1,
-        CUTOFF_GA2,
-        CUTOFF_NC1,
-        CUTOFF_NC2
-    };
-
-    static bool     isValid( const QVariantMap& map ); /* Checks obligatory fields in info */
-
-    static QString  getName( const QVariantMap& map );
-    static void     setName( QVariantMap& map, const QString& name );
-    static bool     hasName( const QVariantMap& map );
-
-    static QString  getAccession( const QVariantMap& map );
-    static void     setAccession( QVariantMap& map, const QString& acc );
-    static bool     hasAccession( const QVariantMap& map );
-
-    static QString  getDescription( const QVariantMap& map );
-    static void     setDescription( QVariantMap& map, const QString& desc );
-    static bool     hasDescription( const QVariantMap& map );
-
-    static QString  getSSConsensus( const QVariantMap& map );
-    static void     setSSConsensus( QVariantMap& map, const QString& cs );
-    static bool     hasSSConsensus( const QVariantMap& map );
-
-    static QString  getReferenceLine( const QVariantMap& map );
-    static void     setReferenceLine( QVariantMap& map ,const QString& rf );
-    static bool     hasReferenceLine( const QVariantMap& map );
-
-    static float    getCutoff( const QVariantMap& map, Cutoffs coff );
-    static bool     hasCutoff( const QVariantMap& map, Cutoffs coff );
-    static void     setCutoff( QVariantMap& map, Cutoffs coff, float val );
-
-}; // MAlignmentInfo
-
-} // U2
-
-#endif // _U2_MALIGNMENT_INFO_H_
diff --git a/src/corelibs/U2Core/src/datatype/Matrix44.cpp b/src/corelibs/U2Core/src/datatype/Matrix44.cpp
index 6f07271..e39ea4d 100644
--- a/src/corelibs/U2Core/src/datatype/Matrix44.cpp
+++ b/src/corelibs/U2Core/src/datatype/Matrix44.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/Matrix44.h b/src/corelibs/U2Core/src/datatype/Matrix44.h
index 8c7a42d..3f58ca6 100644
--- a/src/corelibs/U2Core/src/datatype/Matrix44.h
+++ b/src/corelibs/U2Core/src/datatype/Matrix44.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,10 @@
 #ifndef _U2_MATRIX_44_H_
 #define _U2_MATRIX_44_H_
 
-#include <U2Core/global.h>
 #include <QVector>
+#include <QVariantList>
+
+#include <U2Core/global.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/PFMatrix.cpp b/src/corelibs/U2Core/src/datatype/PFMatrix.cpp
index 7467c91..be82cff 100644
--- a/src/corelibs/U2Core/src/datatype/PFMatrix.cpp
+++ b/src/corelibs/U2Core/src/datatype/PFMatrix.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -65,9 +65,9 @@ QMap<QString, QString> JasparInfo::getProperties() const {
     return properties;
 }
 
-PFMatrix::PFMatrix(const MAlignment &align, PFMatrixType _type): type(_type) {
-    assert(align.hasEqualLength());
-    const int sequenceLength = align.getRows().first().getUngappedLength();
+PFMatrix::PFMatrix(const MultipleSequenceAlignment &align, PFMatrixType _type): type(_type) {
+    assert(align->hasEqualLength());
+    const int sequenceLength = align->getMsaRows().first()->getUngappedLength();
     length = (type == PFM_MONONUCLEOTIDE) ? sequenceLength : sequenceLength - 1;
     assert (length > 0);
     int size = (type == PFM_MONONUCLEOTIDE) ? 4 : 16;
@@ -75,16 +75,16 @@ PFMatrix::PFMatrix(const MAlignment &align, PFMatrixType _type): type(_type) {
     memset(data.data(), 0, size*length*sizeof(int));
     U2OpStatus2Log os;
     if (type == PFM_MONONUCLEOTIDE) {
-        for (int i = 0, n = align.getNumRows(); i < n; i++) {
-            const QByteArray row = align.getRow(i).getSequence().seq;
+        for (int i = 0, n = align->getNumRows(); i < n; i++) {
+            const QByteArray row = align->getMsaRow(i)->getSequence().seq;
             for (int j = 0; j < length; j++) {
                 char curr = row[j];
                 data[DiProperty::index(curr) * length + j]++;
             }
         }
     } else {
-        for (int i = 0, n = align.getNumRows(); i < n; i++) {
-            const QByteArray row = align.getRow(i).getSequence().seq;
+        for (int i = 0, n = align->getNumRows(); i < n; i++) {
+            const QByteArray row = align->getMsaRow(i)->getSequence().seq;
             for (int j = 0; j < length; j++) {
                 char curr = row[j];
                 char next = row[j+1];
diff --git a/src/corelibs/U2Core/src/datatype/PFMatrix.h b/src/corelibs/U2Core/src/datatype/PFMatrix.h
index 0d794df..8f41b65 100644
--- a/src/corelibs/U2Core/src/datatype/PFMatrix.h
+++ b/src/corelibs/U2Core/src/datatype/PFMatrix.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,12 @@
 
 #include <U2Core/global.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/DNASequence.h>
 
-#include <QtCore/QVarLengthArray>
-#include <QtCore/QList>
-#include <QtCore/QMap>
+#include <QVarLengthArray>
+#include <QList>
+#include <QMap>
 
 namespace U2 {
 
@@ -70,7 +70,7 @@ public:
     PFMatrix(const QVarLengthArray<int>& data, const PFMatrixType type);
 
     //create matrix from alignment (without gaps)
-    PFMatrix(const MAlignment& data, const PFMatrixType type);
+    PFMatrix(const MultipleSequenceAlignment& data, const PFMatrixType type);
 
     //create matrix from set of sequences with equal length
     PFMatrix(const QList<DNASequence*>& data, const PFMatrixType type);
diff --git a/src/corelibs/U2Core/src/datatype/PWMatrix.cpp b/src/corelibs/U2Core/src/datatype/PWMatrix.cpp
index 879bcaa..eeb3f44 100644
--- a/src/corelibs/U2Core/src/datatype/PWMatrix.cpp
+++ b/src/corelibs/U2Core/src/datatype/PWMatrix.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "PWMatrix.h"
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/PWMatrix.h b/src/corelibs/U2Core/src/datatype/PWMatrix.h
index 5fe013a..9bdfabc 100644
--- a/src/corelibs/U2Core/src/datatype/PWMatrix.h
+++ b/src/corelibs/U2Core/src/datatype/PWMatrix.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,10 @@
 #ifndef _U2_POSITION_WEIGHT_MATRIX_H_
 #define _U2_POSITION_WEIGHT_MATRIX_H_
 
+#include <QMap>
+#include <QVarLengthArray>
+
 #include <U2Core/global.h>
-#include <QtCore/QVarLengthArray>
 
 namespace U2 {
 //Type of Weight matrix
diff --git a/src/corelibs/U2Core/src/datatype/PhyTree.cpp b/src/corelibs/U2Core/src/datatype/PhyTree.cpp
index d169981..0a3fc45 100644
--- a/src/corelibs/U2Core/src/datatype/PhyTree.cpp
+++ b/src/corelibs/U2Core/src/datatype/PhyTree.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/PhyTree.h b/src/corelibs/U2Core/src/datatype/PhyTree.h
index 76b544a..390d795 100644
--- a/src/corelibs/U2Core/src/datatype/PhyTree.h
+++ b/src/corelibs/U2Core/src/datatype/PhyTree.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,13 @@
 #ifndef _U2_PHYTREE_H_
 #define _U2_PHYTREE_H_
 
-#include <U2Core/global.h>
+#include <QMap>
+#include <QObject>
+#include <QSet>
+#include <QSharedData>
+#include <QVector>
 
-#include <QtCore/QSet>
-#include <QtCore/QMap>
-#include <QtCore/QVector>
-#include <QtCore/QSharedData>
+#include <U2Core/global.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/SMatrix.cpp b/src/corelibs/U2Core/src/datatype/SMatrix.cpp
index e086cdd..8011f2d 100644
--- a/src/corelibs/U2Core/src/datatype/SMatrix.cpp
+++ b/src/corelibs/U2Core/src/datatype/SMatrix.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include "SMatrix.h"
+#include <QVariant>
 
-#include <U2Core/TextUtils.h>
-#include <U2Core/Log.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/Log.h>
+#include <U2Core/TextUtils.h>
+
+#include "SMatrix.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/SMatrix.h b/src/corelibs/U2Core/src/datatype/SMatrix.h
index 783b77d..32ce9ee 100644
--- a/src/corelibs/U2Core/src/datatype/SMatrix.h
+++ b/src/corelibs/U2Core/src/datatype/SMatrix.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/DNAAlphabet.h>
 
-#include <QtCore/QVarLengthArray>
+#include <QVarLengthArray>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/U2Alphabet.h b/src/corelibs/U2Core/src/datatype/U2Alphabet.h
index 7351c45..63b16e8 100644
--- a/src/corelibs/U2Core/src/datatype/U2Alphabet.h
+++ b/src/corelibs/U2Core/src/datatype/U2Alphabet.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Assembly.h b/src/corelibs/U2Core/src/datatype/U2Assembly.h
index 7bb46c3..bf01021 100644
--- a/src/corelibs/U2Core/src/datatype/U2Assembly.h
+++ b/src/corelibs/U2Core/src/datatype/U2Assembly.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/U2Sequence.h>
 #include <U2Core/U2Range.h>
-#include <QtCore/QSharedData>
+#include <QSharedData>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/datatype/U2Attribute.h b/src/corelibs/U2Core/src/datatype/U2Attribute.h
index 82a8a2c..dec30a9 100644
--- a/src/corelibs/U2Core/src/datatype/U2Attribute.h
+++ b/src/corelibs/U2Core/src/datatype/U2Attribute.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/U2Type.h>
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QDateTime>
-#include <QtCore/QVector>
+#include <QDateTime>
+#include <QVector>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
index 729ee14..ae5dbfa 100644
--- a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QStringList>
+
 #include "U2CoreAttributes.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
index 70469b0..061eef7 100644
--- a/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
+++ b/src/corelibs/U2Core/src/datatype/U2CoreAttributes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Feature.h b/src/corelibs/U2Core/src/datatype/U2Feature.h
index 8e7fa75..a9e80bf 100644
--- a/src/corelibs/U2Core/src/datatype/U2Feature.h
+++ b/src/corelibs/U2Core/src/datatype/U2Feature.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_FEATURE_H_
 #define _U2_FEATURE_H_
 
-#include <QtCore/QSharedData>
-#include <QtCore/QStringList>
-#include <QtCore/QVector>
+#include <QSharedData>
+#include <QStringList>
+#include <QVector>
 
 #include <U2Core/U2FeatureType.h>
 #include <U2Core/U2Region.h>
diff --git a/src/corelibs/U2Core/src/datatype/U2FeatureKeys.h b/src/corelibs/U2Core/src/datatype/U2FeatureKeys.h
index aba6e17..00cef0e 100644
--- a/src/corelibs/U2Core/src/datatype/U2FeatureKeys.h
+++ b/src/corelibs/U2Core/src/datatype/U2FeatureKeys.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp b/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
index b9dfe80..6e0a633 100644
--- a/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2FeatureType.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2FeatureType.h b/src/corelibs/U2Core/src/datatype/U2FeatureType.h
index 4c780b0..6416912 100644
--- a/src/corelibs/U2Core/src/datatype/U2FeatureType.h
+++ b/src/corelibs/U2Core/src/datatype/U2FeatureType.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2IdTypes.h b/src/corelibs/U2Core/src/datatype/U2IdTypes.h
index 0bc7cd2..7faaaf5 100644
--- a/src/corelibs/U2Core/src/datatype/U2IdTypes.h
+++ b/src/corelibs/U2Core/src/datatype/U2IdTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Identity.h b/src/corelibs/U2Core/src/datatype/U2Identity.h
index afd66e6..c21a832 100644
--- a/src/corelibs/U2Core/src/datatype/U2Identity.h
+++ b/src/corelibs/U2Core/src/datatype/U2Identity.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_IDENTITY_H_
 #define _U2_IDENTITY_H_
 
-#include <QtCore/QHash>
-#include <QtCore/QString>
+#include <QHash>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/datatype/U2Location.h b/src/corelibs/U2Core/src/datatype/U2Location.h
index 169175d..67d915d 100644
--- a/src/corelibs/U2Core/src/datatype/U2Location.h
+++ b/src/corelibs/U2Core/src/datatype/U2Location.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/U2Type.h>
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QSharedData>
+#include <QSharedData>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/datatype/U2Mca.cpp b/src/corelibs/U2Core/src/datatype/U2Mca.cpp
new file mode 100644
index 0000000..c9b673a
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/U2Mca.cpp
@@ -0,0 +1,63 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "U2Mca.h"
+
+namespace U2 {
+
+U2McaRow::U2McaRow()
+    : U2MsaRow()
+{
+
+}
+
+U2McaRow::U2McaRow(const U2MsaRow &msaRow)
+    : U2MsaRow(msaRow)
+{
+
+}
+
+bool U2McaRow::hasValidChildObjectIds() const {
+    return !chromatogramId.isEmpty();
+}
+
+U2Mca::U2Mca()
+{
+
+}
+
+U2Mca::U2Mca(const U2Msa &dbMsa)
+    : U2Msa(dbMsa)
+{
+
+}
+
+U2Mca::U2Mca(const U2DataId &id, const QString &dbId, qint64 version)
+    : U2Msa(id, dbId, version)
+{
+
+}
+
+U2DataType U2Mca::getType() const {
+    return U2Type::Mca;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/U2Mca.h b/src/corelibs/U2Core/src/datatype/U2Mca.h
new file mode 100644
index 0000000..3a00720
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/U2Mca.h
@@ -0,0 +1,53 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_H_
+#define _U2_MCA_H_
+
+#include "U2Msa.h"
+
+namespace U2 {
+
+/**
+    Row of multiple chromatogram alignment: gaps map and sequence id
+*/
+class U2CORE_EXPORT U2McaRow : public U2MsaRow {
+public:
+    U2McaRow();
+    U2McaRow(const U2MsaRow &msaRow);
+
+    bool hasValidChildObjectIds() const;
+
+    U2DataId chromatogramId;
+};
+
+class U2CORE_EXPORT U2Mca : public U2Msa {
+public:
+    U2Mca();
+    U2Mca(const U2Msa &dbMsa);
+    U2Mca(const U2DataId &id, const QString &dbId, qint64 version);
+
+    U2DataType getType() const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_H_
diff --git a/src/corelibs/U2Core/src/datatype/U2Mod.cpp b/src/corelibs/U2Core/src/datatype/U2Mod.cpp
index e23aed1..f2bdb98 100644
--- a/src/corelibs/U2Core/src/datatype/U2Mod.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2Mod.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,6 +42,8 @@ const qint64 U2ModType::msaUpdatedGapModel    = 3007;
 const qint64 U2ModType::msaSetNewRowsOrder    = 3008;
 const qint64 U2ModType::msaLengthChanged      = 3009;
 
+const qint64 U2ModType::udrUpdated            = 4001;
+
 
 U2UseCommonUserModStep::U2UseCommonUserModStep(const U2EntityRef &entity, U2OpStatus &os)
 : dbi(NULL), valid(false), con(NULL), masterObjId(entity.entityId)
@@ -82,5 +84,16 @@ U2Dbi * U2UseCommonUserModStep::getDbi() const {
     return dbi;
 }
 
+ModificationAction::ModificationAction(U2AbstractDbi* _dbi, const U2DataId& _masterObjId)
+    : dbi(_dbi),
+      masterObjId(_masterObjId),
+      trackMod(NoTrack)
+{
+    objIds.insert(masterObjId);
+}
+
+ModificationAction::~ModificationAction() {
+
+}
 
 } // namespace
diff --git a/src/corelibs/U2Core/src/datatype/U2Mod.h b/src/corelibs/U2Core/src/datatype/U2Mod.h
index 7307d8b..cf93bca 100644
--- a/src/corelibs/U2Core/src/datatype/U2Mod.h
+++ b/src/corelibs/U2Core/src/datatype/U2Mod.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,12 @@
 #include <U2Core/DbiConnection.h>
 #include <U2Core/U2Type.h>
 
+#include <QSet>
+
 namespace U2 {
 
+class U2AbstractDbi;
+
 /** Modification types */
 class U2CORE_EXPORT U2ModType {
 public:
@@ -48,9 +52,13 @@ public:
     static const qint64 msaSetNewRowsOrder;
     static const qint64 msaLengthChanged;
 
+    /** UDR modification types */
+    static const qint64 udrUpdated;
+
     static bool isObjectModType(qint64 modType) { return modType > 0 && modType < 999; }
     static bool isSequenceModType(qint64 modType) { return modType >= 1000 && modType < 1100; }
     static bool isMsaModType(qint64 modType) { return modType >= 3000 && modType < 3100; }
+    static bool isUdrModType(qint64 modType) { return modType >= 4000 && modType < 4100; }
 };
 
 /** Single modification of a dbi object */
@@ -103,6 +111,44 @@ private:
     void init(U2OpStatus &os);
 };
 
+/** Helper class to track info about an object */
+class U2CORE_EXPORT ModificationAction {
+public:
+    ModificationAction(U2AbstractDbi* dbi, const U2DataId& masterObjId);
+    virtual ~ModificationAction();
+
+    /**
+        Verifies if modification tracking is enabled for the object.
+        If it is, gets the object version.
+        If there are tracking steps with greater or equal version (e.g. left from "undo"), removes these records.
+        Returns the type of modifications  tracking for the object.
+     */
+    virtual U2TrackModType prepare(U2OpStatus& os) = 0;
+
+    /**
+        Adds the object ID to the object IDs set.
+        If tracking is enabled, adds a new single step to the list.
+     */
+    virtual void addModification(const U2DataId& objId, qint64 modType, const QByteArray& modDetails, U2OpStatus& os) = 0;
+
+    /**
+        If tracking is enabled, creates modification steps in the database.
+        Increments version of all objects in the set.
+     */
+    virtual void complete(U2OpStatus& os) = 0;
+
+    /** Returns modification tracking type of the master object. */
+    U2TrackModType getTrackModType() const { return trackMod; }
+
+protected:
+    U2AbstractDbi* dbi;
+
+    U2DataId masterObjId;
+    U2TrackModType trackMod;
+    QSet<U2DataId> objIds;
+    QList<U2SingleModStep> singleSteps;
+};
+
 } // namespace
 
 #endif
diff --git a/src/corelibs/U2Core/src/datatype/U2Msa.cpp b/src/corelibs/U2Core/src/datatype/U2Msa.cpp
new file mode 100644
index 0000000..4fa8a55
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/U2Msa.cpp
@@ -0,0 +1,107 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "U2Msa.h"
+
+namespace U2 {
+
+U2MsaGap::U2MsaGap()
+    : offset(0),
+      gap(0)
+{
+
+}
+
+U2MsaGap::U2MsaGap(qint64 off, qint64 gap)
+    : offset(off),
+      gap(gap)
+{
+
+}
+
+qint64 U2MsaGap::endPos() const {
+    return offset + gap;
+}
+
+void U2MsaGap::setEndPos(qint64 newEndPos) {
+    gap = newEndPos - offset;
+}
+
+bool U2MsaGap::isValid() const {
+    return ((offset >= 0) && (gap > 0));
+}
+
+bool U2MsaGap::operator==(const U2MsaGap &g) const {
+    return ((offset == g.offset) && (gap == g.gap));
+}
+
+bool U2MsaGap::lessThan(const U2MsaGap &first, const U2MsaGap &second) {
+    return first.offset < second.offset;
+}
+
+U2MsaGap U2MsaGap::intersect(const U2MsaGap &anotherGap) const {
+    const qint64 newOffset = qMax(offset, anotherGap.offset);
+    const qint64 newEnd = qMin(endPos(), anotherGap.endPos());
+    if (newOffset > newEnd) {
+        return U2MsaGap();
+    }
+    return U2MsaGap(newOffset, newEnd - newOffset);
+}
+
+U2MsaGap::operator U2Region() const {
+    return U2Region(offset, gap);
+}
+
+const qint64 U2MsaRow::INVALID_ROW_ID = -1;
+
+U2MsaRow::U2MsaRow()
+    : rowId(INVALID_ROW_ID),
+      gstart(0),
+      gend(0),
+      length(0)
+{
+
+}
+
+U2MsaRow::~U2MsaRow() {
+
+}
+
+const char U2Msa::GAP_CHAR = '-';
+const char U2Msa::INVALID_CHAR = '\0';
+
+U2Msa::U2Msa()
+    : length(0)
+{
+
+}
+
+U2Msa::U2Msa(const U2DataId &id, const QString &dbId, qint64 version)
+    : U2Object(id, dbId, version)
+{
+
+}
+
+U2DataType U2Msa::getType() const {
+    return U2Type::Msa;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/U2Msa.h b/src/corelibs/U2Core/src/datatype/U2Msa.h
index 21b4449..205c5fc 100644
--- a/src/corelibs/U2Core/src/datatype/U2Msa.h
+++ b/src/corelibs/U2Core/src/datatype/U2Msa.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,27 +23,38 @@
 #define _U2_MSA_H_
 
 #include <U2Core/U2Alphabet.h>
+#include <U2Core/U2Region.h>
 #include <U2Core/U2Type.h>
 
 namespace U2 {
 
 /**
-    Gap model for Msa: for every sequence it keeps gaps map
+    Gap model for Multiple Alignment: for every row it keeps gaps map
 */
 
 class U2MsaGap;
 
 typedef QList<U2MsaGap> U2MsaRowGapModel;
-typedef QList<U2MsaRowGapModel> U2MsaGapModel;
+typedef QList<U2MsaRowGapModel> U2MsaListGapModel;
+typedef QMap<qint64, U2MsaRowGapModel> U2MsaMapGapModel;
 
 class U2CORE_EXPORT U2MsaGap  {
 public:
-    U2MsaGap() : offset(0), gap(0){}
-    U2MsaGap(qint64 off, qint64 g) : offset(off), gap(g){}
+    U2MsaGap();
+    U2MsaGap(qint64 off, qint64 gap);
 
-    bool isValid() const { return ((offset >= 0) && (gap > 0)); }
+    qint64 endPos() const;    // not inclusive
+    void setEndPos(qint64 endPos);    // not inclusive
 
-    bool operator==(const U2MsaGap& g) const { return ((offset == g.offset) && (gap == g.gap)); }
+    bool isValid() const;
+
+    bool operator==(const U2MsaGap &g) const;
+
+    static bool lessThan(const U2MsaGap &first, const U2MsaGap &second);
+
+    U2MsaGap intersect(const U2MsaGap &anotherGap) const;
+
+    operator U2Region() const;
 
     /** Offset of the gap in sequence*/
     qint64 offset;
@@ -57,6 +68,11 @@ public:
 */
 class U2CORE_EXPORT U2MsaRow {
 public:
+    U2MsaRow();
+    virtual ~U2MsaRow();
+
+    bool isValid() const;
+
     /** Id of the row in the database */
     qint64          rowId;
 
@@ -64,7 +80,7 @@ public:
     U2DataId        sequenceId;
 
     /** Start of the row in the sequence */
-    qint64          gstart;
+    qint64          gstart;         // TODO: rename or remove, if it is not used
 
     /** End of the row in the sequence */
     qint64          gend;
@@ -74,6 +90,8 @@ public:
 
     /** Length of the sequence characters and gaps of the row (without trailing) */
     qint64          length;
+
+    static const qint64 INVALID_ROW_ID;
 };
 
 /**
@@ -81,8 +99,10 @@ public:
 */
 class U2CORE_EXPORT U2Msa : public U2Object {
 public:
-    U2Msa(){}
-    U2Msa(U2DataId id, QString dbId, qint64 version) : U2Object(id, dbId, version) {}
+    U2Msa();
+    U2Msa(const U2DataId &id, const QString &dbId, qint64 version);
+
+    U2DataType getType() const;
 
     /** Alignment alphabet. All sequence in alignment must have alphabet that fits into alignment alphabet */
     U2AlphabetId    alphabet;
@@ -90,10 +110,10 @@ public:
     /** Length of the alignment */
     qint64          length;
 
-    U2DataType getType() const { return U2Type::Msa; }
+    static const char GAP_CHAR;
+    static const char INVALID_CHAR;
 };
 
+}   // namespace U2
 
-} //namespace
-
-#endif
+#endif // _U2_MSA_H_
diff --git a/src/corelibs/U2Core/src/datatype/U2Qualifier.cpp b/src/corelibs/U2Core/src/datatype/U2Qualifier.cpp
index 46035d4..1fb879f 100644
--- a/src/corelibs/U2Core/src/datatype/U2Qualifier.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2Qualifier.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ U2Qualifier::U2Qualifier(const QString &name, const QString &value)
     : name(name),
       value(value)
 {
-    SAFE_POINT(isValid(), "An attempt to create an invalid qualifier", );
+//    SAFE_POINT(isValid(), "An attempt to create an invalid qualifier", );
 }
 
 bool U2Qualifier::isValid() const {
diff --git a/src/corelibs/U2Core/src/datatype/U2Qualifier.h b/src/corelibs/U2Core/src/datatype/U2Qualifier.h
index b93d64f..f0c730f 100644
--- a/src/corelibs/U2Core/src/datatype/U2Qualifier.h
+++ b/src/corelibs/U2Core/src/datatype/U2Qualifier.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Range.h b/src/corelibs/U2Core/src/datatype/U2Range.h
index f8fbfdb..77357fa 100644
--- a/src/corelibs/U2Core/src/datatype/U2Range.h
+++ b/src/corelibs/U2Core/src/datatype/U2Range.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2RawData.h b/src/corelibs/U2Core/src/datatype/U2RawData.h
index 24773d7..1344be8 100644
--- a/src/corelibs/U2Core/src/datatype/U2RawData.h
+++ b/src/corelibs/U2Core/src/datatype/U2RawData.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Region.cpp b/src/corelibs/U2Core/src/datatype/U2Region.cpp
index 74221ef..81bdcd5 100644
--- a/src/corelibs/U2Core/src/datatype/U2Region.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2Region.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,6 +39,8 @@ QString U2Region::toString(Format format) const {
         return QString("%1 - %2").arg(start, end);
     case FormatPlusMinus:
         return QString("%1 ± %2").arg(middle, halfLength);
+    case FormatDots:
+        return QString("%1..%2").arg(start, FormatUtils::splitThousands(endPos() - 1));
     case FormatBrackets:
     default:
         return QString("[%1, %2)").arg(start, end);
diff --git a/src/corelibs/U2Core/src/datatype/U2Region.h b/src/corelibs/U2Core/src/datatype/U2Region.h
index f68bc7a..4cc5fff 100644
--- a/src/corelibs/U2Core/src/datatype/U2Region.h
+++ b/src/corelibs/U2Core/src/datatype/U2Region.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@
 #endif
 #endif
 
+#include <QObject>
 #include <QVector>
 
 #include <U2Core/global.h>
@@ -112,11 +113,13 @@ public:
             FormatBrackets  "[100, 200)"
             FormatDash      "100 - 200"
             FormatPlusMinus "150 ± 50" - for html only
+            FormatDots      "100..199"
     */
     enum Format {
         FormatBrackets,
         FormatDash,
-        FormatPlusMinus
+        FormatPlusMinus,
+        FormatDots
     };
 
     /** Converts region to its string represenation using given format. */
@@ -202,7 +205,7 @@ U2CORE_EXPORT QDataStream &operator>>(QDataStream &in, U2Region &myObj);
 }//namespace
 
 Q_DECLARE_TYPEINFO(U2::U2Region, Q_PRIMITIVE_TYPE);
-Q_DECLARE_METATYPE( U2::U2Region)
-Q_DECLARE_METATYPE( QVector< U2::U2Region >)
+Q_DECLARE_METATYPE(U2::U2Region)
+Q_DECLARE_METATYPE(QVector< U2::U2Region >)
 
 #endif
diff --git a/src/corelibs/U2Core/src/datatype/U2Sequence.h b/src/corelibs/U2Core/src/datatype/U2Sequence.h
index 08d7377..366dcd1 100644
--- a/src/corelibs/U2Core/src/datatype/U2Sequence.h
+++ b/src/corelibs/U2Core/src/datatype/U2Sequence.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Type.cpp b/src/corelibs/U2Core/src/datatype/U2Type.cpp
index a3ac3fe..4367e2e 100644
--- a/src/corelibs/U2Core/src/datatype/U2Type.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2Type.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Type.h b/src/corelibs/U2Core/src/datatype/U2Type.h
index 8ef6067..cc6cac6 100644
--- a/src/corelibs/U2Core/src/datatype/U2Type.h
+++ b/src/corelibs/U2Core/src/datatype/U2Type.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_TYPE_H_
 #define _U2_TYPE_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
@@ -72,6 +74,7 @@ public:
     static const U2DataType FilterTableType             = 7;
     static const U2DataType KnownMutationsTrackType     = 8;
     static const U2DataType AnnotationTable             = 10;
+    static const U2DataType Mca                         = 11;
     /** UDR object types 101..199 */
     static const U2DataType Text                        = 101;
     static const U2DataType PhyTree                     = 102;
diff --git a/src/corelibs/U2Core/src/datatype/U2TypeIds.h b/src/corelibs/U2Core/src/datatype/U2TypeIds.h
index 5c3a767..ab3bc88 100644
--- a/src/corelibs/U2Core/src/datatype/U2TypeIds.h
+++ b/src/corelibs/U2Core/src/datatype/U2TypeIds.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Variant.cpp b/src/corelibs/U2Core/src/datatype/U2Variant.cpp
index b91ad5f..7f95c87 100644
--- a/src/corelibs/U2Core/src/datatype/U2Variant.cpp
+++ b/src/corelibs/U2Core/src/datatype/U2Variant.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/U2Variant.h b/src/corelibs/U2Core/src/datatype/U2Variant.h
index c0cccc2..20fb76b 100644
--- a/src/corelibs/U2Core/src/datatype/U2Variant.h
+++ b/src/corelibs/U2Core/src/datatype/U2Variant.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,7 @@
 #ifndef _U2_VARIANT_H_
 #define _U2_VARIANT_H_
 
+#include <U2Core/StrPackUtils.h>
 #include <U2Core/U2Type.h>
 
 namespace U2 {
@@ -74,7 +75,7 @@ public:
     QByteArray  refData;
     QByteArray  obsData;
     QString     publicId;
-    QStrStrMap  additionalInfo;
+    StrStrMap   additionalInfo;
 
     static const QString VCF4_QUAL;
     static const QString VCF4_FILTER;
diff --git a/src/corelibs/U2Core/src/datatype/UdrRecord.cpp b/src/corelibs/U2Core/src/datatype/UdrRecord.cpp
index c34a25c..09a448c 100644
--- a/src/corelibs/U2Core/src/datatype/UdrRecord.cpp
+++ b/src/corelibs/U2Core/src/datatype/UdrRecord.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QSet>
+#include <QSet>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Core/src/datatype/UdrRecord.h b/src/corelibs/U2Core/src/datatype/UdrRecord.h
index 76fbe9b..d52760e 100644
--- a/src/corelibs/U2Core/src/datatype/UdrRecord.h
+++ b/src/corelibs/U2Core/src/datatype/UdrRecord.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/UdrSchema.cpp b/src/corelibs/U2Core/src/datatype/UdrSchema.cpp
index 75e3b97..73bfd83 100644
--- a/src/corelibs/U2Core/src/datatype/UdrSchema.cpp
+++ b/src/corelibs/U2Core/src/datatype/UdrSchema.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QSet>
+#include <QSet>
 
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Core/src/datatype/UdrSchema.h b/src/corelibs/U2Core/src/datatype/UdrSchema.h
index 6be57ce..4ef9570 100644
--- a/src/corelibs/U2Core/src/datatype/UdrSchema.h
+++ b/src/corelibs/U2Core/src/datatype/UdrSchema.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.cpp b/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.cpp
index 1684317..a0b963c 100644
--- a/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.cpp
+++ b/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QRegExp>
+#include <QRegExp>
 
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.h b/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.h
index fbcfad2..2c58d87 100644
--- a/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.h
+++ b/src/corelibs/U2Core/src/datatype/UdrSchemaRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_UDRSCHEMAREGISTRY_H_
 #define _U2_UDRSCHEMAREGISTRY_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 #include <U2Core/UdrSchema.h>
 
diff --git a/src/corelibs/U2Core/src/datatype/Vector3D.cpp b/src/corelibs/U2Core/src/datatype/Vector3D.cpp
index 43c1f56..20f4db6 100644
--- a/src/corelibs/U2Core/src/datatype/Vector3D.cpp
+++ b/src/corelibs/U2Core/src/datatype/Vector3D.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/Vector3D.h b/src/corelibs/U2Core/src/datatype/Vector3D.h
index e705644..7b66e11 100644
--- a/src/corelibs/U2Core/src/datatype/Vector3D.h
+++ b/src/corelibs/U2Core/src/datatype/Vector3D.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.cpp b/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.cpp
new file mode 100644
index 0000000..91cb1b6
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.cpp
@@ -0,0 +1,41 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaStateCheck.h"
+#include "MultipleAlignment.h"
+
+namespace U2 {
+
+MaStateCheck::MaStateCheck(const MultipleAlignmentData *maData)
+    : maData(maData)
+{
+
+}
+
+MaStateCheck::~MaStateCheck() {
+#ifdef _DEBUG
+    maData->check();
+#else
+    Q_UNUSED(maData);
+#endif
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.h b/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.h
new file mode 100644
index 0000000..7aac1f5
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MaStateCheck.h
@@ -0,0 +1,40 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_STATE_CHECK_H_
+#define _U2_MA_STATE_CHECK_H_
+
+namespace U2 {
+
+class MultipleAlignmentData;
+
+class MaStateCheck {
+public:
+    MaStateCheck(const MultipleAlignmentData *maData);
+    ~MaStateCheck();
+
+private:
+    const MultipleAlignmentData *maData;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_STATE_CHECK_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.cpp
new file mode 100644
index 0000000..9bfe40d
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.cpp
@@ -0,0 +1,412 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QSet>
+
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MaStateCheck.h"
+#include "MultipleAlignment.h"
+#include "MultipleAlignmentInfo.h"
+
+namespace U2 {
+
+MultipleAlignment::MultipleAlignment(MultipleAlignmentData *maData)
+    : maData(maData)
+{
+
+}
+
+MultipleAlignment::~MultipleAlignment() {
+
+}
+
+MultipleAlignmentData * MultipleAlignment::data() const {
+    return maData.data();
+}
+
+MultipleAlignmentData & MultipleAlignment::operator*() {
+    return *maData;
+}
+
+const MultipleAlignmentData & MultipleAlignment::operator*() const {
+    return *maData;
+}
+
+MultipleAlignmentData *MultipleAlignment::operator->() {
+    return maData.data();
+}
+
+const MultipleAlignmentData * MultipleAlignment::operator->() const {
+    return maData.data();
+}
+
+MultipleAlignmentData::MultipleAlignmentData(const QString &name, const DNAAlphabet *alphabet, const QList<MultipleAlignmentRow> &rows)
+    : alphabet(alphabet),
+      rows(rows),
+      length(0)
+{
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    SAFE_POINT(NULL == alphabet || !name.isEmpty(), "Incorrect parameters in MultipleAlignmentData ctor", );        // TODO: check the condition, it is strange
+
+    setName(name);
+    for (int i = 0, n = rows.size(); i < n; i++) {
+        length = qMax(length, rows[i]->getRowLengthWithoutTrailing());   // TODO: implement or replace the method for row length
+    }
+}
+
+MultipleAlignmentData::MultipleAlignmentData(const MultipleAlignmentData &ma)
+    : alphabet(NULL),
+      length(0)
+{
+    // TODO: implement copying
+//    copy(ma);
+}
+
+MultipleAlignmentData::~MultipleAlignmentData() {
+
+}
+
+// TODO: marked to remove (if it is not used)
+//const MultipleAlignmentData & MultipleAlignmentData::operator=(const MultipleAlignmentData &other) {
+//    copy(other);
+//    return *this;
+//}
+
+void MultipleAlignmentData::clear() {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+    rows.clear();
+    length = 0;
+}
+
+QString MultipleAlignmentData::getName() const {
+    return MultipleAlignmentInfo::getName(info);
+}
+
+void MultipleAlignmentData::setName(const QString &newName) {
+    MultipleAlignmentInfo::setName(info, newName);
+}
+
+const DNAAlphabet * MultipleAlignmentData::getAlphabet() const {
+    return alphabet;
+}
+
+void MultipleAlignmentData::setAlphabet(const DNAAlphabet *newAlphabet) {
+    SAFE_POINT(NULL != newAlphabet, "Internal error: attempted to set NULL alphabet for the alignment",);
+    alphabet = newAlphabet;
+}
+
+QVariantMap MultipleAlignmentData::getInfo() const {
+    return info;
+}
+
+void MultipleAlignmentData::setInfo(const QVariantMap &newInfo) {
+    info = newInfo;
+}
+
+bool MultipleAlignmentData::isEmpty() const {
+    return getLength() == 0 || rows.isEmpty();
+}
+
+int MultipleAlignmentData::getLength() const {
+    return length;
+}
+
+void MultipleAlignmentData::setLength(int newLength) {
+    SAFE_POINT(newLength >= 0, QString("Internal error: attempted to set length '%1' for an alignment").arg(newLength), );
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    if (newLength >= length) {
+        length = newLength;
+        return;
+    }
+
+    U2OpStatus2Log os;
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        rows[i]->crop(os, 0, newLength);
+        CHECK_OP(os, );
+    }
+    length = newLength;
+}
+
+int MultipleAlignmentData::getNumRows() const {
+    return rows.size();
+}
+
+U2MsaMapGapModel MultipleAlignmentData::getMapGapModel() const {
+    U2MsaMapGapModel mapGapModel;
+    U2MsaListGapModel listGapModel = getGapModel();
+    for (int i = 0; i < rows.size(); i++) {
+        mapGapModel[rows[i]->getRowId()] = listGapModel[i];
+    }
+    return mapGapModel;
+}
+
+U2MsaListGapModel MultipleAlignmentData::getGapModel() const {
+    U2MsaListGapModel gapModel;
+    const int length = getLength();
+    foreach (const MultipleAlignmentRow &row, rows) {
+        gapModel << row->getGapModel();
+        const int rowPureLength = row->getRowLengthWithoutTrailing();
+        if (rowPureLength < length) {
+            gapModel.last() << U2MsaGap(rowPureLength, length - rowPureLength);
+        }
+    }
+    return gapModel;
+}
+
+class CompareMaRowsByName {
+public:
+    CompareMaRowsByName(MultipleAlignment::Order order = MultipleAlignment::Ascending)
+        : order(order)
+    {
+
+    }
+
+    bool operator()(const MultipleAlignmentRow &row1, const MultipleAlignmentRow &row2) const {
+        const bool res = QString::compare(row1->getName(), row2->getName(), Qt::CaseInsensitive) > 0;
+        return order == MultipleAlignment::Ascending ? !res : res;
+    }
+
+private:
+    MultipleAlignment::Order order;
+};
+
+void MultipleAlignmentData::sortRowsByName(MultipleAlignment::Order order) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+    qStableSort(rows.begin(), rows.end(), CompareMaRowsByName(order));
+}
+
+MultipleAlignmentRow MultipleAlignmentData::getRow(int rowIndex) {
+    int rowsCount = rows.count();
+    SAFE_POINT(0 != rowsCount, "No rows", getEmptyRow());
+    SAFE_POINT(rowIndex >= 0 && (rowIndex < rowsCount), "Internal error: unexpected row index was passed to MAlignmnet::getRow", getEmptyRow());
+    return rows[rowIndex];
+}
+
+const MultipleAlignmentRow & MultipleAlignmentData::getRow(int rowIndex) const {
+    static MultipleAlignmentRow emptyRow = getEmptyRow();
+    int rowsCount = rows.count();
+    SAFE_POINT(0 != rowsCount, "No rows", emptyRow);
+    SAFE_POINT(rowIndex >= 0 && (rowIndex < rowsCount), "Internal error: unexpected row index was passed to MAlignmnet::getRow", emptyRow);
+    return rows[rowIndex];
+}
+
+const MultipleAlignmentRow & MultipleAlignmentData::getRow(const QString &name) const {
+    static MultipleAlignmentRow emptyRow = getEmptyRow();
+    for (int i = 0; i < rows.count(); i++) {
+        if (rows[i]->getName() == name) {
+            return rows[i];
+        }
+    }
+    SAFE_POINT(false, "Internal error: row name passed to MAlignmnet::getRow function not exists", emptyRow);
+}
+
+const QList<MultipleAlignmentRow> & MultipleAlignmentData::getRows() const {
+    return rows;
+}
+
+QList<qint64> MultipleAlignmentData::getRowsIds() const {
+    QList<qint64> rowIds;
+    foreach (const MultipleAlignmentRow &row, rows) {
+        rowIds.append(row->getRowId());
+    }
+    return rowIds;
+}
+
+MultipleAlignmentRow MultipleAlignmentData::getRowByRowId(qint64 rowId, U2OpStatus &os) const {
+    static MultipleAlignmentRow emptyRow = getEmptyRow();
+    foreach (const MultipleAlignmentRow &row, rows) {
+        if (row->getRowId() == rowId) {
+            return row;
+        }
+    }
+    os.setError("Failed to find a row in an alignment");
+    return emptyRow;
+}
+
+char MultipleAlignmentData::charAt(int rowNumber, qint64 position) const {
+    return getRow(rowNumber)->charAt(position);
+}
+
+bool MultipleAlignmentData::isGap(int rowNumber, qint64 pos) const {
+    return getRow(rowNumber)->isGap(pos);
+}
+
+QStringList MultipleAlignmentData::getRowNames() const {
+    QStringList rowNames;
+    foreach (const MultipleAlignmentRow &row, rows) {
+        rowNames.append(row->getName());
+    }
+    return rowNames;
+}
+
+int MultipleAlignmentData::getRowIndexByRowId(qint64 rowId, U2OpStatus &os) const {
+    for (int rowIndex = 0; rowIndex < rows.size(); ++rowIndex) {
+        if (rows.at(rowIndex)->getRowId() == rowId) {
+            return rowIndex;
+        }
+    }
+    os.setError("Invalid row id");
+    return U2MsaRow::INVALID_ROW_ID;
+}
+
+void MultipleAlignmentData::renameRow(int rowIndex, const QString &name) {
+    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleAlignmentData::renameRow: "
+        "the number of rows is '%2'").arg(rowIndex).arg(getNumRows()), );
+    SAFE_POINT(!name.isEmpty(),
+        "Incorrect parameter 'name' was passed to MultipleAlignmentData::renameRow: "
+        "Can't set the name of a row to an empty string", );
+    rows[rowIndex]->setName(name);
+}
+
+void MultipleAlignmentData::setRowId(int rowIndex, qint64 rowId) {
+    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index", );
+    rows[rowIndex]->setRowId(rowId);
+}
+
+void MultipleAlignmentData::removeRow(int rowIndex, U2OpStatus &os) {
+    if (rowIndex < 0 || rowIndex >= getNumRows()) {
+        coreLog.trace(QString("Internal error: incorrect parameters was passed to MultipleAlignmentData::removeRow, "
+                              "rowIndex '%1', the number of rows is '%2'").arg(rowIndex).arg(getNumRows()));
+        os.setError("Failed to remove a row");
+        return;
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    rows.removeAt(rowIndex);
+
+    if (rows.isEmpty()) {
+        length = 0;
+    }
+}
+
+void MultipleAlignmentData::removeChars(int rowNumber, int pos, int n, U2OpStatus &os) {
+    if (rowNumber >= getNumRows() || rowNumber < 0 || pos > length || pos < 0 || n < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed "
+            "to MultipleAlignmentData::removeChars: row index '%1', pos '%2', count '%3'").arg(rowNumber).arg(pos).arg(n));
+        os.setError("Failed to remove chars from an alignment");
+        return;
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    getRow(rowNumber)->removeChars(pos, n, os);
+}
+
+void MultipleAlignmentData::moveRowsBlock(int startRow, int numRows, int delta) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    // Assumption: numRows is rather big, delta is small (1~2)
+    // It's more optimal to move abs(delta) of rows then the block itself
+
+    int i = 0;
+    int k = qAbs(delta);
+
+    SAFE_POINT((delta > 0 && startRow + numRows + delta - 1 < rows.length())
+               || (delta < 0 && startRow + delta >= 0),
+               QString("Incorrect parameters in MultipleAlignmentData::moveRowsBlock: "
+                       "startRow: '%1', numRows: '%2', delta: '%3'").arg(startRow).arg(numRows).arg(delta),);
+
+    QList<MultipleAlignmentRow> toMove;
+    int fromRow = delta > 0 ? startRow + numRows  : startRow + delta;
+
+    while (i <  k) {
+        const MultipleAlignmentRow row = rows.takeAt(fromRow);
+        toMove.append(row);
+        i++;
+    }
+
+    int toRow = delta > 0 ? startRow : startRow + numRows - k;
+
+    while (toMove.count() > 0) {
+        int n = toMove.count();
+        const MultipleAlignmentRow row = toMove.takeAt(n - 1);
+        rows.insert(toRow, row);
+    }
+}
+
+bool MultipleAlignmentData::operator==(const MultipleAlignmentData &other) const {
+    const bool lengthsAreEqual = (length == other.length);
+    const bool alphabetsAreEqual = (alphabet == other.alphabet);
+    bool rowsAreEqual = (rows.size() == other.rows.size());
+    for (int i = 0; i < rows.size() && rowsAreEqual; i++) {
+     rowsAreEqual &= (*rows[i] == *other.rows[i]);
+    }
+    return lengthsAreEqual && alphabetsAreEqual && rowsAreEqual;
+}
+
+bool MultipleAlignmentData::operator!=(const MultipleAlignmentData &other) const {
+    return !operator==(other);
+}
+
+void MultipleAlignmentData::check() const {
+#ifdef DEBUG
+    assert(getNumRows() != 0 || length == 0);
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        assert(rows[i].getCoreEnd() <= length);
+    }
+#endif
+}
+
+bool MultipleAlignmentData::sortRowsByList(const QStringList &rowsOrder) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    const QStringList rowNames = getRowNames();
+    foreach (const QString &rowName, rowNames) {
+        CHECK(rowsOrder.contains(rowName), false);
+    }
+
+    QList<MultipleAlignmentRow> sortedRows;
+    foreach (const QString &rowName, rowsOrder) {
+        int rowIndex = rowNames.indexOf(rowName);
+        if (rowIndex >= 0) {
+            sortedRows.append(rows[rowIndex]);
+        }
+    }
+
+    rows = sortedRows;
+    return true;
+}
+
+void MultipleAlignmentData::addRowPrivate(const MultipleAlignmentRow &row, qint64 rowLenWithTrailingGaps, int rowIndex) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    length = qMax(rowLenWithTrailingGaps, length);
+    int idx = rowIndex == -1 ? getNumRows() : qBound(0, rowIndex, getNumRows());
+    rows.insert(idx, row);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.h b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.h
new file mode 100644
index 0000000..aca0a48
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignment.h
@@ -0,0 +1,231 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_ALIGNMENT_H_
+#define _U2_MULTIPLE_ALIGNMENT_H_
+
+#include <QVariantMap>
+
+#include <U2Core/U2Region.h>
+
+#include "MultipleAlignmentRow.h"
+
+namespace U2 {
+
+class DNAAlphabet;
+
+/** Default name for a multiple alignment */
+#define MA_OBJECT_NAME QString("Multiple alignment")
+
+#define MAlignment_TailedGapsPattern "\\-+$"
+
+class MultipleAlignmentData;
+
+class U2CORE_EXPORT MultipleAlignment {
+protected:
+    MultipleAlignment(MultipleAlignmentData *maData);
+
+public:
+    enum Order {
+        Ascending,
+        Descending
+    };
+
+    virtual ~MultipleAlignment();
+
+    MultipleAlignmentData * data() const;
+    template <class Derived> inline Derived dynamicCast() const;
+
+    MultipleAlignmentData & operator*();
+    const MultipleAlignmentData & operator*() const;
+
+    MultipleAlignmentData * operator->();
+    const MultipleAlignmentData * operator->() const;
+
+protected:
+    QSharedPointer<MultipleAlignmentData> maData;
+};
+
+template <class Derived>
+Derived MultipleAlignment::dynamicCast() const {
+    return Derived(*this);
+}
+
+/**
+ * Multiple alignment
+ * The length of the alignment is the maximum length of its rows.
+ * There are minimal checks on the alignment's alphabet, but the client of the class
+ * is expected to keep the conformance of the data and the alphabet.
+ */
+class U2CORE_EXPORT MultipleAlignmentData {
+protected:
+    /**
+     * Creates a new alignment.
+     * The name must be provided if this is not default alignment.
+     */
+    MultipleAlignmentData(const QString &name = QString(),
+                          const DNAAlphabet *alphabet = NULL,
+                          const QList<MultipleAlignmentRow> &rows = QList<MultipleAlignmentRow>());
+    MultipleAlignmentData(const MultipleAlignmentData &multipleAlignment);
+
+public:
+    virtual ~MultipleAlignmentData();
+
+    // TODO: marked to remove (if it is not used)
+//    const MultipleAlignmentData & operator=(const MultipleAlignmentData &other);
+
+    /**
+     * Clears the alignment. Makes alignment length == 0.
+     * Doesn't change alphabet or name
+     */
+    void clear();
+
+    /** Returns  the name of the alignment */
+    QString getName() const;
+
+    /** Sets the name of the alignment */
+    void setName(const QString &newName);
+
+    /** Returns the alphabet of the alignment */
+    const DNAAlphabet * getAlphabet() const;
+
+    /**
+     * Sets the alphabet of the alignment, the value can't be NULL.
+     * Warning: rows already present in the alignment are not verified to correspond to this alphabet
+     */
+    void setAlphabet(const DNAAlphabet *alphabet);
+
+    /** Returns the alignment info */
+    QVariantMap getInfo() const;
+
+    /** Sets the alignment info */
+    void setInfo(const QVariantMap &info);
+
+    /** Returns true if the length of the alignment is 0 */
+    bool isEmpty() const;
+
+    /** Returns the length of the alignment */
+    int getLength() const;
+
+    /** Sets the length of the alignment. The length must be >= 0. */
+    void setLength(int length);
+
+    /** Returns the number of rows in the alignment */
+    int getNumRows() const;
+
+    U2MsaMapGapModel getMapGapModel() const;
+    U2MsaListGapModel getGapModel() const;
+
+    /** Sorts rows by name */
+    void sortRowsByName(MultipleAlignment::Order order = MultipleAlignment::Ascending);
+
+    /** Returns row of the alignment */
+    MultipleAlignmentRow getRow(int row);
+    const MultipleAlignmentRow & getRow(int row) const;
+    const MultipleAlignmentRow & getRow(const QString &name) const;
+
+    /** Returns all rows in the alignment */
+    const QList<MultipleAlignmentRow> & getRows() const;
+
+    /** Returns IDs of the alignment rows in the database */
+    QList<qint64> getRowsIds() const;
+
+    MultipleAlignmentRow getRowByRowId(qint64 rowId, U2OpStatus &os) const;
+
+    char charAt(int rowNumber, qint64 position) const;
+    bool isGap(int rowNumber, qint64 pos) const;
+
+    /** Returns all rows' names in the alignment */
+    QStringList getRowNames() const;
+
+    int getRowIndexByRowId(qint64 rowId, U2OpStatus &os) const;
+
+    /**
+     * Renames the row with the specified index.
+     * Assumes that the row index is valid and the name is not empty.
+     */
+    void renameRow(int rowIndex, const QString &name);
+
+    /** Updates row ID of the row at 'rowIndex' position */
+    void setRowId(int rowIndex, qint64 rowId);
+
+    /**
+     * Removes a row from alignment.
+     * The alignment is changed only (to zero) if the alignment becomes empty.
+     */
+    void removeRow(int rowIndex, U2OpStatus &os);
+
+    /**
+     * Removes up to n characters starting from the specified position.
+     * Can decrease the overall alignment length.
+     */
+    void removeChars(int row, int pos, int n, U2OpStatus &os);
+
+    /**
+     * Shifts a selection of consequent rows.
+     * 'delta' can be positive or negative.
+     * It is assumed that indexes of shifted rows are within the bounds of the [0, number of rows).
+     */
+    void moveRowsBlock(int startRow, int numRows, int delta);
+
+    /**
+     * Compares two alignments: lengths, alphabets, rows and infos (that include names).
+     */
+    bool operator==(const MultipleAlignmentData &ma) const;
+    bool operator!=(const MultipleAlignmentData &ma) const;
+
+    /** Checks model consistency */
+    virtual void check() const;
+
+    /** Arranges rows in lists order*/
+    bool sortRowsByList(const QStringList &order);
+
+    virtual MultipleAlignment getCopy() const = 0;
+
+protected:
+    virtual MultipleAlignmentRow getEmptyRow() const = 0;
+
+    /** Helper-method for adding a row to the alignment */
+    void addRowPrivate(const MultipleAlignmentRow &row, qint64 rowLenWithTrailingGaps, int rowIndex);
+
+    /** Alphabet for all sequences in the alignment */
+    const DNAAlphabet *alphabet;
+
+    /** Alignment rows (each row = sequence + gap model) */
+    QList<MultipleAlignmentRow> rows;
+
+    /** The length of the longest row in the alignment */
+    qint64 length;
+
+    /** Additional alignment info */
+    QVariantMap info;
+};
+
+inline bool	operator!=(const MultipleAlignment &ptr1, const MultipleAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleAlignment &ptr1, const MultipleAlignmentData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleAlignmentData *ptr1, const MultipleAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleAlignment &ptr1, const MultipleAlignment &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleAlignment &ptr1, const MultipleAlignmentData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleAlignmentData *ptr1, const MultipleAlignment &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_ALIGNMENT_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.cpp
new file mode 100644
index 0000000..b56df24
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.cpp
@@ -0,0 +1,122 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MultipleAlignmentInfo.h"
+
+namespace U2 {
+
+const QString MultipleAlignmentInfo::NAME                  = "NAME";
+const QString MultipleAlignmentInfo::ACCESSION             = "ACCESSION";
+const QString MultipleAlignmentInfo::DESCRIPTION           = "DESCRIPTION";
+const QString MultipleAlignmentInfo::SS_CONSENSUS          = "SS_CONSENSUS";
+const QString MultipleAlignmentInfo::REFERENCE_LINE        = "REFERENCE_LINE";
+const QString MultipleAlignmentInfo::CUTOFFS               = "CUTOFFS";
+
+bool MultipleAlignmentInfo::isValid( const QVariantMap& map ) {
+    return hasName( map );
+}
+
+static QVariant getValue( const QString& tag, const QVariantMap& map ) {
+    return map.value( tag );
+}
+
+static void setValue( QVariantMap& map, const QString& tag, const QVariant& val ) {
+    assert( !tag.isEmpty() );
+    if( !val.isNull() ) {
+        map.insert( tag, val );
+    }
+}
+
+QString MultipleAlignmentInfo::getName( const QVariantMap& map ) {
+    return getValue( NAME, map ).toString();
+}
+
+void MultipleAlignmentInfo::setName( QVariantMap& map, const QString& name ) {
+    setValue( map, NAME, name );
+}
+
+bool MultipleAlignmentInfo::hasName( const QVariantMap& map ) {
+    return !getName( map ).isEmpty();
+}
+
+QString MultipleAlignmentInfo::getAccession( const QVariantMap& map ) {
+    return getValue( ACCESSION, map ).toString();
+}
+
+void MultipleAlignmentInfo::setAccession( QVariantMap& map, const QString& acc ) {
+    setValue( map, ACCESSION, acc );
+}
+
+bool MultipleAlignmentInfo::hasAccession( const QVariantMap& map ) {
+    return !getAccession( map ).isEmpty();
+}
+
+QString MultipleAlignmentInfo::getDescription( const QVariantMap& map ) {
+    return getValue( DESCRIPTION, map ).toString();
+}
+
+void MultipleAlignmentInfo::setDescription( QVariantMap& map, const QString& desc ) {
+    setValue( map, DESCRIPTION, desc );
+}
+
+bool MultipleAlignmentInfo::hasDescription( const QVariantMap& map ) {
+    return !getDescription( map ).isEmpty();
+}
+
+QString MultipleAlignmentInfo::getSSConsensus( const QVariantMap& map ) {
+    return getValue( SS_CONSENSUS, map ).toString();
+}
+
+void MultipleAlignmentInfo::setSSConsensus( QVariantMap& map, const QString& cs ) {
+    setValue( map, SS_CONSENSUS, cs );
+}
+
+bool MultipleAlignmentInfo::hasSSConsensus( const QVariantMap& map ) {
+    return !getSSConsensus( map ).isEmpty();
+}
+
+QString MultipleAlignmentInfo::getReferenceLine( const QVariantMap& map ) {
+    return getValue( REFERENCE_LINE, map ).toString();
+}
+
+void MultipleAlignmentInfo::setReferenceLine( QVariantMap& map ,const QString& rf ) {
+    setValue( map, REFERENCE_LINE, rf );
+}
+
+bool MultipleAlignmentInfo::hasReferenceLine( const QVariantMap& map ) {
+    return !getReferenceLine( map ).isEmpty();
+}
+
+void MultipleAlignmentInfo::setCutoff( QVariantMap& map, Cutoffs coff, float val ) {
+    setValue( map, CUTOFFS + QString::number( static_cast< int >( coff ) ), val );
+}
+
+float MultipleAlignmentInfo::getCutoff( const QVariantMap& map, Cutoffs coff ) {
+    return static_cast< float >( getValue( CUTOFFS + QString::number( static_cast< int >( coff ) ), map ).toDouble() );
+}
+
+bool MultipleAlignmentInfo::hasCutoff( const QVariantMap& map, Cutoffs coff ) {
+    bool ok = false;
+    getValue( CUTOFFS + QString::number( static_cast< int >( coff ) ), map ).toDouble( &ok );
+    return ok;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.h b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.h
new file mode 100644
index 0000000..8f174a1
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.h
@@ -0,0 +1,79 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_ALIGNMENT_INFO_H_
+#define _U2_MULTIPLE_ALIGNMENT_INFO_H_
+
+#include <QString>
+#include <QVariantMap>
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT MultipleAlignmentInfo {
+public:
+    static const QString NAME;
+    static const QString ACCESSION;
+    static const QString DESCRIPTION;
+    static const QString SS_CONSENSUS;          /* Secondary structure consensus */
+    static const QString REFERENCE_LINE;        /* #=GC RF annotation in Stockholm markup */
+    static const QString CUTOFFS;               /* #=GF GA, NC, TC annotation in Stockholm markup */
+
+    enum Cutoffs { /* Should be same as in esl_msa.h( uhmmer plugin ) */
+        CUTOFF_TC1,
+        CUTOFF_TC2,
+        CUTOFF_GA1,
+        CUTOFF_GA2,
+        CUTOFF_NC1,
+        CUTOFF_NC2
+    };
+
+    static bool     isValid( const QVariantMap& map ); /* Checks obligatory fields in info */
+
+    static QString  getName( const QVariantMap& map );
+    static void     setName( QVariantMap& map, const QString& name );
+    static bool     hasName( const QVariantMap& map );
+
+    static QString  getAccession( const QVariantMap& map );
+    static void     setAccession( QVariantMap& map, const QString& acc );
+    static bool     hasAccession( const QVariantMap& map );
+
+    static QString  getDescription( const QVariantMap& map );
+    static void     setDescription( QVariantMap& map, const QString& desc );
+    static bool     hasDescription( const QVariantMap& map );
+
+    static QString  getSSConsensus( const QVariantMap& map );
+    static void     setSSConsensus( QVariantMap& map, const QString& cs );
+    static bool     hasSSConsensus( const QVariantMap& map );
+
+    static QString  getReferenceLine( const QVariantMap& map );
+    static void     setReferenceLine( QVariantMap& map ,const QString& rf );
+    static bool     hasReferenceLine( const QVariantMap& map );
+
+    static float    getCutoff( const QVariantMap& map, Cutoffs coff );
+    static bool     hasCutoff( const QVariantMap& map, Cutoffs coff );
+    static void     setCutoff( QVariantMap& map, Cutoffs coff, float val );
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_ALIGNMENT_INFO_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.cpp
new file mode 100644
index 0000000..9442e0a
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.cpp
@@ -0,0 +1,89 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleAlignmentRow.h"
+#include "MultipleAlignment.h"
+
+namespace U2 {
+
+MultipleAlignmentRow::MultipleAlignmentRow(MultipleAlignmentRowData *ma)
+    : maRowData(ma)
+{
+
+}
+
+MultipleAlignmentRow::~MultipleAlignmentRow() {
+
+}
+
+MultipleAlignmentRowData * MultipleAlignmentRow::data() const {
+    return maRowData.data();
+}
+
+MultipleAlignmentRowData & MultipleAlignmentRow::operator*() {
+    return *maRowData;
+}
+
+const MultipleAlignmentRowData & MultipleAlignmentRow::operator*() const {
+    return *maRowData;
+}
+
+MultipleAlignmentRowData * MultipleAlignmentRow::operator->() {
+    return maRowData.data();
+}
+
+const MultipleAlignmentRowData * MultipleAlignmentRow::operator->() const {
+    return maRowData.data();
+}
+
+MultipleAlignmentRowData::MultipleAlignmentRowData() {
+
+}
+
+MultipleAlignmentRowData::MultipleAlignmentRowData(const DNASequence &sequence, const QList<U2MsaGap> &gaps)
+    : sequence(sequence),
+      gaps(gaps) {
+
+}
+
+int MultipleAlignmentRowData::getUngappedPosition(int pos) const {
+    return MsaRowUtils::getUngappedPosition(gaps, sequence.length(), pos);
+}
+
+bool MultipleAlignmentRowData::isTrailingOrLeadingGap(qint64 position) const {
+    CHECK(isGap(position), false);
+    if (position < getCoreStart() || position > getCoreEnd() - 1) {
+        return true;
+    }
+    return false;
+}
+
+U2Region MultipleAlignmentRowData::getCoreRegion() const {
+    return U2Region(getCoreStart(), getCoreLength());
+}
+
+MultipleAlignmentRowData::~MultipleAlignmentRowData() {
+
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.h b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.h
new file mode 100644
index 0000000..fbeac89
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRow.h
@@ -0,0 +1,157 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_ALIGNMENT_ROW_H_
+#define _U2_MULTIPLE_ALIGNMENT_ROW_H_
+
+#include <QSharedPointer>
+
+#include <U2Core/DNASequence.h>
+#include <U2Core/MsaRowUtils.h>
+#include <U2Core/U2Msa.h>
+#include <U2Core/U2OpStatus.h>
+
+namespace U2 {
+
+class MultipleAlignment;
+class MultipleAlignmentData;
+class MultipleAlignmentRowData;
+class U2OpStatus;
+
+class U2CORE_EXPORT MultipleAlignmentRow {
+    friend class MultipleAlignmentData;
+
+protected:
+    MultipleAlignmentRow(MultipleAlignmentRowData *maRowData);
+
+public:
+    virtual ~MultipleAlignmentRow();
+
+    MultipleAlignmentRowData * data() const;
+    template <class Derived> inline Derived dynamicCast() const;
+    template <class Derived> inline Derived dynamicCast(U2OpStatus &os) const;
+
+    MultipleAlignmentRowData & operator*();
+    const MultipleAlignmentRowData & operator*() const;
+
+    MultipleAlignmentRowData * operator->();
+    const MultipleAlignmentRowData * operator->() const;
+
+protected:
+    QSharedPointer<MultipleAlignmentRowData> maRowData;
+};
+
+template <class Derived>
+Derived MultipleAlignmentRow::dynamicCast() const {
+    return Derived(*this);
+}
+
+template <class Derived>
+Derived MultipleAlignmentRow::dynamicCast(U2OpStatus &os) const {
+    Derived derived(*this);
+    if (NULL == derived.maRowData) {
+        assert(false);
+        os.setError("Can't cast MultipleAlignmentRow to a derived class");
+    }
+    return derived;
+}
+
+/**
+ * A row in a multiple alignment structure.
+ * The row consists of a sequence without gaps
+ * and a gap model.
+ * A row core is an obsolete concept. Currently,
+ * it exactly equals to the row (offset always equals to zero).
+ */
+class U2CORE_EXPORT MultipleAlignmentRowData {
+public:
+    MultipleAlignmentRowData();
+    MultipleAlignmentRowData(const DNASequence &sequence, const QList<U2MsaGap> &gaps);
+
+    /** Length of the sequence without gaps */
+    inline int getUngappedLength() const;
+
+    /**
+     * If character at 'pos' position is not a gap, returns the char position in sequence.
+     * Otherwise returns '-1'.
+     */
+    int getUngappedPosition(int pos) const;
+
+    bool isTrailingOrLeadingGap(qint64 position) const;
+
+    U2Region getCoreRegion() const;
+
+    virtual ~MultipleAlignmentRowData();
+
+    /** Returns the list of gaps for the row */
+    virtual const U2MsaRowGapModel &getGapModel() const = 0;
+    virtual void removeChars(int pos, int count, U2OpStatus& os) = 0;
+
+    /** Name of the row, can be empty */
+    virtual QString getName() const = 0;
+    virtual void setName(const QString &name) = 0;
+
+    /** Returns ID of the row in the database. */
+    virtual qint64 getRowId() const = 0;
+    virtual void setRowId(qint64 rowId) = 0;
+
+    virtual char charAt(qint64 position) const = 0;
+    virtual bool isGap(qint64 position) const = 0;
+
+    virtual QByteArray toByteArray(U2OpStatus &os, qint64 length) const = 0;
+
+    virtual qint64 getRowLengthWithoutTrailing() const = 0;
+    virtual int getCoreStart() const = 0;
+    virtual int getCoreEnd() const = 0;
+    virtual qint64 getCoreLength() const = 0;
+    virtual qint64 getBaseCount(qint64 beforePosition) const = 0;
+
+    virtual void crop(U2OpStatus &os, qint64 startPosition, qint64 count) = 0;
+
+    virtual bool operator !=(const MultipleAlignmentRowData &other) const = 0;
+    virtual bool operator ==(const MultipleAlignmentRowData &other) const = 0;
+
+protected:
+    /** The sequence of the row without gaps (cached) */
+    DNASequence sequence;
+
+    /**
+     * Gaps model of the row
+     * There should be no trailing gaps!
+     * Trailing gaps are 'Virtual': they are stored 'inside' the alignment length
+     */
+    QList<U2MsaGap> gaps;
+};
+
+inline int MultipleAlignmentRowData::getUngappedLength() const {
+    return sequence.length();
+}
+
+inline bool	operator!=(const MultipleAlignmentRow &ptr1, const MultipleAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleAlignmentRow &ptr1, const MultipleAlignmentRowData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleAlignmentRowData *ptr1, const MultipleAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleAlignmentRow &ptr1, const MultipleAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleAlignmentRow &ptr1, const MultipleAlignmentRowData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleAlignmentRowData *ptr1, const MultipleAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_ALIGNMENT_ROW_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.cpp
new file mode 100644
index 0000000..cc1abef
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.cpp
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MultipleAlignmentRowInfo.h"
+
+namespace U2 {
+
+const QString MultipleAlignmentRowInfo::REVERSED = "reversed";
+const QString MultipleAlignmentRowInfo::COMPLEMENTED = "complemented";
+
+void MultipleAlignmentRowInfo::setReversed(QVariantMap &info, bool reversed) {
+    info[REVERSED] = reversed;
+}
+
+bool MultipleAlignmentRowInfo::getReversed(const QVariantMap &info) {
+    return info.value(REVERSED, false).toBool();
+}
+
+void MultipleAlignmentRowInfo::setComplemented(QVariantMap &info, bool complemented) {
+    info[COMPLEMENTED] = complemented;
+}
+
+bool MultipleAlignmentRowInfo::getComplemented(const QVariantMap &info) {
+    return info.value(COMPLEMENTED, false).toBool();
+}
+
+}
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.h b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.h
new file mode 100644
index 0000000..b7753b4
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.h
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_ALIGNMENT_ROW_INFO_H_
+#define _U2_MULTIPLE_ALIGNMENT_ROW_INFO_H_
+
+#include <QVariantMap>
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT MultipleAlignmentRowInfo {
+public:
+    static void setReversed(QVariantMap &info, bool reversed);
+    static bool getReversed(const QVariantMap &info);
+
+    static void setComplemented(QVariantMap &info, bool complemented);
+    static bool getComplemented(const QVariantMap &info);
+
+    static const QString REVERSED;
+    static const QString COMPLEMENTED;
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_ALIGNMENT_ROW_INFO_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.cpp
new file mode 100644
index 0000000..a5f4c44
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.cpp
@@ -0,0 +1,637 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <typeinfo>
+
+#include <QSet>
+
+#include <U2Core/McaRowInnerData.h>
+#include <U2Core/MsaRowUtils.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MaStateCheck.h"
+#include "MultipleChromatogramAlignment.h"
+#include "MultipleAlignmentInfo.h"
+
+namespace U2 {
+
+MultipleChromatogramAlignment::MultipleChromatogramAlignment()
+    : MultipleAlignment(new MultipleChromatogramAlignmentData())
+{
+
+}
+
+MultipleChromatogramAlignment::MultipleChromatogramAlignment(const MultipleAlignment &ma)
+    : MultipleAlignment(ma)
+{
+    SAFE_POINT(NULL != maData.dynamicCast<MultipleChromatogramAlignmentData>(), "Can't cast MultipleAlignment to MultipleChromatogramAlignment", );
+}
+
+MultipleChromatogramAlignment::MultipleChromatogramAlignment(MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignment(mcaData)
+{
+
+}
+
+MultipleChromatogramAlignment::MultipleChromatogramAlignment(const QString &name, const DNAAlphabet *alphabet, const QList<MultipleChromatogramAlignmentRow> &rows)
+    : MultipleAlignment(new MultipleChromatogramAlignmentData(name, alphabet, rows))
+{
+
+}
+
+MultipleChromatogramAlignmentData * MultipleChromatogramAlignment::data() const {
+    return getMcaData().data();
+}
+
+MultipleChromatogramAlignmentData &MultipleChromatogramAlignment::operator*() {
+    return *getMcaData();
+}
+
+const MultipleChromatogramAlignmentData &MultipleChromatogramAlignment::operator*() const {
+    return *getMcaData();
+}
+
+MultipleChromatogramAlignmentData * MultipleChromatogramAlignment::operator->() {
+    return getMcaData().data();
+}
+
+const MultipleChromatogramAlignmentData * MultipleChromatogramAlignment::operator->() const {
+    return getMcaData().data();
+}
+
+MultipleChromatogramAlignment MultipleChromatogramAlignment::clone() const {
+    return getMcaData()->getCopy();
+}
+
+QSharedPointer<MultipleChromatogramAlignmentData> MultipleChromatogramAlignment::getMcaData() const {
+    return maData.dynamicCast<MultipleChromatogramAlignmentData>();
+}
+
+namespace {
+
+QList<MultipleAlignmentRow> convertToMaRows(const QList<MultipleChromatogramAlignmentRow> &mcaRows) {
+    QList<MultipleAlignmentRow> maRows;
+    foreach (const MultipleChromatogramAlignmentRow &mcaRow, mcaRows) {
+        maRows << mcaRow;
+    }
+    return maRows;
+}
+
+}
+
+MultipleChromatogramAlignmentData::MultipleChromatogramAlignmentData(const QString &name, const DNAAlphabet *alphabet, const QList<MultipleChromatogramAlignmentRow> &rows)
+    : MultipleAlignmentData(name, alphabet, convertToMaRows(rows))
+{
+
+}
+
+MultipleChromatogramAlignmentData::MultipleChromatogramAlignmentData(const MultipleChromatogramAlignmentData &mcaData)
+    : MultipleAlignmentData()
+{
+    copy(mcaData);
+}
+
+MultipleChromatogramAlignmentData &MultipleChromatogramAlignmentData::operator=(const MultipleChromatogramAlignment &mca) {
+    return *this = *mca;
+}
+
+MultipleChromatogramAlignmentData &MultipleChromatogramAlignmentData::operator=(const MultipleChromatogramAlignmentData &mcaData) {
+    copy(mcaData);
+    return *this;
+}
+
+bool MultipleChromatogramAlignmentData::trim(bool removeLeadingGaps) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    bool result = false;
+
+    if ( removeLeadingGaps ) {
+        // Verify if there are leading columns of gaps
+        // by checking the first gap in each row
+        qint64 leadingGapColumnsNum = 0;
+        foreach (const MultipleChromatogramAlignmentRow &row, rows) {
+            if (row->getGapModel().count() > 0) {
+                const U2MsaGap firstGap = row->getGapModel().first();
+                if (firstGap.offset > 0) {
+                    leadingGapColumnsNum = 0;
+                    break;
+                } else {
+                    if (leadingGapColumnsNum == 0) {
+                        leadingGapColumnsNum = firstGap.gap;
+                    } else {
+                        leadingGapColumnsNum = qMin(leadingGapColumnsNum, firstGap.gap);
+                    }
+                }
+            } else {
+                leadingGapColumnsNum = 0;
+                break;
+            }
+        }
+
+        // If there are leading gap columns, remove them
+        U2OpStatus2Log os;
+        if (leadingGapColumnsNum > 0) {
+            for (int i = 0; i < getNumRows(); ++i) {
+                getMcaRow(i)->removeChars(0, leadingGapColumnsNum, os);
+                CHECK_OP(os, true);
+                result = true;
+            }
+        }
+    }
+
+    // Verify right side of the alignment (trailing gaps and rows' lengths)
+    qint64 newLength = 0;
+    foreach (const MultipleChromatogramAlignmentRow &row, rows) {
+        if (newLength == 0) {
+            newLength = row->getRowLengthWithoutTrailing();
+        } else {
+            newLength = qMax(row->getRowLengthWithoutTrailing(), newLength);
+        }
+    }
+
+    if (newLength != length) {
+        length = newLength;
+        result = true;
+    }
+
+    return result;
+}
+
+bool MultipleChromatogramAlignmentData::simplify() {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    int newLen = 0;
+    bool changed = false;
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        changed |= getMcaRow(i)->simplify();
+        newLen = qMax(newLen, getMcaRow(i)->getCoreEnd());
+    }
+
+    if (!changed) {
+        assert(length == newLen);
+        return false;
+    }
+    length = newLen;
+    return true;
+}
+
+bool MultipleChromatogramAlignmentData::hasEmptyGapModel() const {
+    foreach (const MultipleChromatogramAlignmentRow &row, rows) {
+        if (!row->getGapModel().isEmpty()) {
+            return false;
+        }
+    }
+    return true;
+}
+
+bool MultipleChromatogramAlignmentData::hasEqualLength() const {
+    const int defaultSequenceLength = -1;
+    int sequenceLength = defaultSequenceLength;
+    for (int i = 0, n = rows.size(); i < n; ++i) {
+        if (defaultSequenceLength != sequenceLength && sequenceLength != getMcaRow(i)->getUngappedLength()) {
+            return false;
+        } else {
+            sequenceLength = getMcaRow(i)->getUngappedLength();
+        }
+    }
+    return true;
+}
+
+MultipleChromatogramAlignment MultipleChromatogramAlignmentData::mid(int start, int len) const {
+    SAFE_POINT(start >= 0 && start + len <= length,
+               QString("Incorrect parameters were passed to MultipleChromatogramAlignmentData::mid: "
+                       "start '%1', len '%2', the alignment length is '%3'").arg(start).arg(len).arg(length),
+               MultipleChromatogramAlignment());
+
+    MultipleChromatogramAlignment res(getName(), alphabet);
+    MaStateCheck check(res.data());
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    foreach (const MultipleChromatogramAlignmentRow &row, rows) {
+        MultipleChromatogramAlignmentRow mRow = row->mid(start, len, os);
+        mRow->setParentAlignment(res);
+        res->rows << mRow;
+    }
+    res->length = len;
+    return res;
+}
+
+MultipleChromatogramAlignmentData &MultipleChromatogramAlignmentData::operator+=(const MultipleChromatogramAlignmentData &mcaData) {
+    // TODO: it is used in MUSCLE alignment and it should be something like this. But this emthod is incorrect for the MCA
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    SAFE_POINT(mcaData.alphabet == alphabet, "Different alphabets in MultipleChromatogramAlignmentData::operator+=", *this);
+
+    int nSeq = getNumRows();
+    SAFE_POINT(mcaData.getNumRows() == nSeq, "Different number of rows in MultipleChromatogramAlignmentData::operator+=", *this);
+
+    U2OpStatus2Log os;
+    for (int i = 0; i < nSeq; i++) {
+        getMcaRow(i)->append(mcaData.getMcaRow(i), length, os);
+    }
+
+    length += mcaData.length;
+    return *this;
+}
+
+bool MultipleChromatogramAlignmentData::operator==(const MultipleChromatogramAlignmentData &other) const {
+    bool lengthsAreEqual = (length == other.length);
+    bool alphabetsAreEqual = (alphabet == other.alphabet);
+    bool rowsAreEqual = (rows == other.rows);
+    return lengthsAreEqual && alphabetsAreEqual && rowsAreEqual;
+}
+
+bool MultipleChromatogramAlignmentData::operator!=(const MultipleChromatogramAlignmentData &other) const {
+    return !operator==(other);
+}
+
+bool MultipleChromatogramAlignmentData::crop(const U2Region &region, const QSet<QString> &rowNames, U2OpStatus &os) {
+    if (!(region.startPos >= 0 && region.length > 0 && region.length < length && region.startPos < length)) {
+        os.setError(QString("Incorrect region was passed to MultipleChromatogramAlignmentData::crop, "
+                            "startPos '%1', length '%2'").arg(region.startPos).arg(region.length));
+        return false;
+    }
+
+    int cropLen = region.length;
+    if (region.endPos() > length) {
+        cropLen -= (region.endPos() - length);
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    QList<MultipleChromatogramAlignmentRow> newList;
+    for (int i = 0 ; i < rows.size(); i++) {
+        MultipleChromatogramAlignmentRow row = getMcaRow(i).clone();
+        const QString rowName = row->getName();
+        if (rowNames.contains(rowName)){
+            row->crop(os, region.startPos, cropLen);
+            CHECK_OP(os, false);
+            newList << row;
+        }
+    }
+    setRows(newList);
+
+    length = cropLen;
+    return true;
+}
+
+bool MultipleChromatogramAlignmentData::crop(const U2Region &region, U2OpStatus &os) {
+    return crop(region, getRowNames().toSet(), os);
+}
+
+bool MultipleChromatogramAlignmentData::crop(int start, int count, U2OpStatus &os) {
+    return crop(U2Region(start, count), os);
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::createRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes) {
+    QByteArray newSequenceBytes;
+    QList<U2MsaGap> newGapsModel;
+
+    MultipleChromatogramAlignmentRowData::splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapsModel);
+    DNASequence newSequence(name, newSequenceBytes);
+
+    U2MsaRow row;
+    return MultipleChromatogramAlignmentRow(row, chromatogram, newSequence, newGapsModel, this);
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::createRow(const U2MsaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gaps, U2OpStatus &os) {
+    QString errorDescr = "Failed to create a multiple alignment row";
+    if (-1 != sequence.constSequence().indexOf(U2Msa::GAP_CHAR)) {
+        coreLog.trace("Attempted to create an alignment row from a sequence with gaps");
+        os.setError(errorDescr);
+        return MultipleChromatogramAlignmentRow();
+    }
+
+    int length = sequence.length();
+    foreach (const U2MsaGap &gap, gaps) {
+        if (gap.offset > length || !gap.isValid()) {
+            coreLog.trace("Incorrect gap model was passed to MultipleChromatogramAlignmentData::createRow");
+            os.setError(errorDescr);
+            return MultipleChromatogramAlignmentRow();
+        }
+        length += gap.gap;
+    }
+
+    return MultipleChromatogramAlignmentRow(rowInDb, chromatogram, sequence, gaps, this);
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::createRow(const MultipleChromatogramAlignmentRow &row) {
+    return MultipleChromatogramAlignmentRow(row, this);
+}
+
+void MultipleChromatogramAlignmentData::setRows(const QList<MultipleChromatogramAlignmentRow> &mcaRows) {
+    rows = convertToMaRows(mcaRows);
+}
+
+void MultipleChromatogramAlignmentData::addRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes) {
+    MultipleChromatogramAlignmentRow newRow = createRow(name, chromatogram, bytes);
+    addRowPrivate(newRow, bytes.size(), -1);
+}
+
+void MultipleChromatogramAlignmentData::addRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes, int rowIndex) {
+    MultipleChromatogramAlignmentRow newRow = createRow(name, chromatogram, bytes);
+    addRowPrivate(newRow, bytes.size(), rowIndex);
+}
+
+void MultipleChromatogramAlignmentData::addRow(const U2MsaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, U2OpStatus &os) {
+    MultipleChromatogramAlignmentRow newRow = createRow(rowInDb, chromatogram, sequence, rowInDb.gaps, os);
+    CHECK_OP(os, );
+    addRowPrivate(newRow, rowInDb.length, -1);
+}
+
+void MultipleChromatogramAlignmentData::addRow(const QString &name, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gaps, U2OpStatus &os) {
+    U2MsaRow row;
+    MultipleChromatogramAlignmentRow newRow = createRow(row, chromatogram, sequence, gaps, os);
+    CHECK_OP(os, );
+
+    int len = sequence.length();
+    foreach (const U2MsaGap &gap, gaps) {
+        len += gap.gap;
+    }
+
+    newRow->setName(name);
+    addRowPrivate(newRow, len, -1);
+}
+
+void MultipleChromatogramAlignmentData::addRow(const U2MsaRow &rowInDb, const McaRowMemoryData &mcaRowMemoryData, U2OpStatus &os) {
+    addRow(rowInDb, mcaRowMemoryData.chromatogram, mcaRowMemoryData.sequence, os);
+}
+
+void MultipleChromatogramAlignmentData::insertGaps(int row, int pos, int count, U2OpStatus &os) {
+    if (pos > length) {
+        length = pos + count;
+        return;
+    }
+    if (row >= getNumRows() || row < 0 || pos < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed "
+            "to MultipleChromatogramAlignmentData::insertGaps: row index '%1', pos '%2', count '%3'").arg(row).arg(pos).arg(count));
+        os.setError("Failed to insert gaps into an alignment");
+        return;
+    }
+
+    if (pos == length) {
+        // add trailing gaps --> just increase alignment len
+        length += count;
+        return;
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    if (pos >= rows[row]->getRowLengthWithoutTrailing()) {
+        length += count;
+        return;
+    }
+    getMcaRow(row)->insertGaps(pos, count, os);
+
+    qint64 rowLength = rows[row]->getRowLengthWithoutTrailing();
+    length = qMax(length, rowLength);
+}
+
+void MultipleChromatogramAlignmentData::appendChars(int row, const char *str, int len) {
+    SAFE_POINT(0 <= row && row < getNumRows(),
+        QString("Incorrect row index '%1' in MultipleChromatogramAlignmentData::appendChars").arg(row), );
+
+    MultipleChromatogramAlignmentRow appendedRow = createRow("", DNAChromatogram(), QByteArray(str, len));
+
+    qint64 rowLength = getMcaRow(row)->getRowLength();
+
+    U2OpStatus2Log os;
+    getMcaRow(row)->append(appendedRow, rowLength, os);
+    CHECK_OP(os, );
+
+    length = qMax(length, rowLength + len);
+}
+
+void MultipleChromatogramAlignmentData::appendChars(int row, qint64 afterPos, const char *str, int len) {
+    SAFE_POINT(0 <= row && row < getNumRows(),
+        QString("Incorrect row index '%1' in MultipleChromatogramAlignmentData::appendChars").arg(row), );
+
+    MultipleChromatogramAlignmentRow appendedRow = createRow("", DNAChromatogram(), QByteArray(str, len));
+
+    U2OpStatus2Log os;
+    getMcaRow(row)->append(appendedRow, afterPos, os);
+    CHECK_OP(os, );
+
+    length = qMax(length, afterPos + len);
+}
+
+void MultipleChromatogramAlignmentData::removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows) {
+    SAFE_POINT(startPos >= 0 && startPos + nBases <= length && nBases > 0,
+        QString("Incorrect parameters were passed to MultipleChromatogramAlignmentData::removeRegion: startPos '%1', "
+        "nBases '%2', the length is '%3'").arg(startPos).arg(nBases).arg(length),);
+    SAFE_POINT(startRow >= 0 && startRow + nRows <= getNumRows() && nRows > 0,
+        QString("Incorrect parameters were passed to MultipleChromatogramAlignmentData::removeRegion: startRow '%1', "
+        "nRows '%2', the number of rows is '%3'").arg(startRow).arg(nRows).arg(getNumRows()),);
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    for (int i = startRow + nRows; --i >= startRow;) {
+        getMcaRow(i)->removeChars(startPos, nBases, os);
+        SAFE_POINT_OP(os, );
+
+        if (removeEmptyRows && (0 == getMcaRow(i)->getSequence().length())) {
+            rows.removeAt(i);
+        }
+    }
+
+    if (nRows == rows.size()) {
+        // full columns were removed
+        length -= nBases;
+        if (length == 0) {
+            rows.clear();
+        }
+    }
+}
+
+int MultipleChromatogramAlignmentData::getNumRows() const {
+    return rows.size();
+}
+
+void MultipleChromatogramAlignmentData::renameRow(int row, const QString &name) {
+    SAFE_POINT(row >= 0 && row < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleChromatogramAlignmentData::renameRow: "
+        "the number of rows is '%2'").arg(row).arg(getNumRows()), );
+    SAFE_POINT(!name.isEmpty(),
+        "Incorrect parameter 'name' was passed to MultipleChromatogramAlignmentData::renameRow: "
+        "Can't set the name of a row to an empty string", );
+    rows[row]->setName(name);
+}
+
+
+void MultipleChromatogramAlignmentData::replaceChars(int row, char origChar, char resultChar) {
+    SAFE_POINT(row >= 0 && row < getNumRows(), QString("Incorrect row index '%1' in MultipleChromatogramAlignmentData::replaceChars").arg(row), );
+
+    if (origChar == resultChar) {
+        return;
+    }
+
+    U2OpStatus2Log os;
+    getMcaRow(row)->replaceChars(origChar, resultChar, os);
+}
+
+void MultipleChromatogramAlignmentData::setRowContent(int rowNumber, const DNAChromatogram &chromatogram, const QByteArray &sequence, int offset) {
+    SAFE_POINT(rowNumber >= 0 && rowNumber < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleChromatogramAlignmentData::setRowContent: "
+        "the number of rows is '%2'").arg(rowNumber).arg(getNumRows()), );
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    getMcaRow(rowNumber)->setRowContent(chromatogram, sequence, offset, os);
+    SAFE_POINT_OP(os, );
+
+    length = qMax(length, (qint64)sequence.size() + offset);
+}
+
+void MultipleChromatogramAlignmentData::setRowContent(int rowNumber, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gapModel) {
+    SAFE_POINT(rowNumber >= 0 && rowNumber < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleChromatogramAlignmentData::setRowContent: "
+        "the number of rows is '%2'").arg(rowNumber).arg(getNumRows()), );
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    getMcaRow(rowNumber)->setRowContent(chromatogram, sequence, gapModel, os);
+    SAFE_POINT_OP(os, );
+
+    length = qMax(length, (qint64)MsaRowUtils::getRowLength(sequence.seq, gapModel));
+}
+
+void MultipleChromatogramAlignmentData::setRowContent(int rowNumber, const McaRowMemoryData &mcaRowMemoryData) {
+    setRowContent(rowNumber, mcaRowMemoryData.chromatogram, mcaRowMemoryData.sequence, mcaRowMemoryData.gapModel);
+}
+
+void MultipleChromatogramAlignmentData::toUpperCase() {
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        getMcaRow(i)->toUpperCase();
+    }
+}
+
+bool MultipleChromatogramAlignmentData::sortRowsBySimilarity(QVector<U2Region> &united) {
+    QList<MultipleChromatogramAlignmentRow> oldRows = getMcaRows();
+    QList<MultipleChromatogramAlignmentRow> sortedRows;
+    while (!oldRows.isEmpty()) {
+        const MultipleChromatogramAlignmentRow row = oldRows.takeFirst();
+        sortedRows << row;
+        int start = sortedRows.size() - 1;
+        int len = 1;
+        QMutableListIterator<MultipleChromatogramAlignmentRow> iter(oldRows);
+        while (iter.hasNext()) {
+            const MultipleChromatogramAlignmentRow &next = iter.next();
+            if (next->isRowContentEqual(row)) {
+                sortedRows << next;
+                iter.remove();
+                ++len;
+            }
+        }
+        if (len > 1) {
+            united.append(U2Region(start, len));
+        }
+    }
+    if (getMcaRows() != sortedRows) {
+        setRows(sortedRows);
+        return true;
+    }
+    return false;
+}
+
+const QList<MultipleChromatogramAlignmentRow> MultipleChromatogramAlignmentData::getMcaRows() const {
+    QList<MultipleChromatogramAlignmentRow> mcaRows;
+    foreach (const MultipleAlignmentRow &maRow, rows) {
+        mcaRows << maRow.dynamicCast<MultipleChromatogramAlignmentRow>();
+    }
+    return mcaRows;
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::getMcaRowByRowId(qint64 rowId, U2OpStatus &os) const {
+    return getRowByRowId(rowId, os).dynamicCast<MultipleChromatogramAlignmentRow>(os);
+}
+
+char MultipleChromatogramAlignmentData::charAt(int rowNumber, int pos) const {
+    return getMcaRow(rowNumber)->charAt(pos);
+}
+
+bool MultipleChromatogramAlignmentData::isGap(int rowNumber, int pos) const {
+    return getMcaRow(rowNumber)->isGap(pos);
+}
+
+bool MultipleChromatogramAlignmentData::isTrailingOrLeadingGap(int rowNumber, int pos) const {
+    return getMcaRow(rowNumber)->isTrailingOrLeadingGap(pos);
+}
+
+void MultipleChromatogramAlignmentData::setRowGapModel(int rowNumber, const QList<U2MsaGap> &gapModel) {
+    SAFE_POINT(rowNumber >= 0 && rowNumber < getNumRows(), "Invalid row index", );
+    length = qMax(length, (qint64)MsaRowUtils::getGapsLength(gapModel) + getMcaRow(rowNumber)->sequence.length());
+    getMcaRow(rowNumber)->setGapModel(gapModel);
+}
+
+void MultipleChromatogramAlignmentData::setSequenceId(int rowIndex, const U2DataId &sequenceId) {
+    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index", );
+    getMcaRow(rowIndex)->setSequenceId(sequenceId);
+}
+
+const MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::getMcaRow(const QString &name) const {
+    return getRow(name).dynamicCast<const MultipleChromatogramAlignmentRow>();
+}
+
+MultipleAlignment MultipleChromatogramAlignmentData::getCopy() const {
+    return getExplicitCopy();
+}
+
+MultipleChromatogramAlignment MultipleChromatogramAlignmentData::getExplicitCopy() const {
+    return MultipleChromatogramAlignment(new MultipleChromatogramAlignmentData(*this));
+}
+
+void MultipleChromatogramAlignmentData::copy(const MultipleAlignmentData &other) {
+    try {
+        copy(dynamic_cast<const MultipleChromatogramAlignmentData &>(other));
+    } catch (std::bad_cast) {
+        FAIL("Can't cast MultipleAlignmentData to MultipleChromatogramAlignmentData", );
+    }
+}
+
+void MultipleChromatogramAlignmentData::copy(const MultipleChromatogramAlignmentData &other) {
+    clear();
+
+    alphabet = other.alphabet;
+    length = other.length;
+    info = other.info;
+
+    for (int i = 0; i < other.rows.size(); i++) {
+        const MultipleChromatogramAlignmentRow row = createRow(other.rows[i]);
+        addRowPrivate(row, other.length, i);
+    }
+}
+
+MultipleAlignmentRow MultipleChromatogramAlignmentData::getEmptyRow() const {
+    return MultipleChromatogramAlignmentRow();
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.h b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.h
new file mode 100644
index 0000000..a91b57f
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.h
@@ -0,0 +1,255 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_H_
+#define _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_H_
+
+#include "MultipleAlignment.h"
+#include "MultipleChromatogramAlignmentRow.h"
+
+namespace U2 {
+
+class McaRowMemoryData;
+class MultipleChromatogramAlignmentData;
+
+class U2CORE_EXPORT MultipleChromatogramAlignment : public MultipleAlignment {
+public:
+    MultipleChromatogramAlignment();
+    MultipleChromatogramAlignment(const MultipleAlignment &ma);
+    MultipleChromatogramAlignment(MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignment(const QString &name,
+                                  const DNAAlphabet *alphabet = NULL,
+                                  const QList<MultipleChromatogramAlignmentRow> &rows = QList<MultipleChromatogramAlignmentRow>());
+
+    MultipleChromatogramAlignmentData *data() const;
+
+    MultipleChromatogramAlignmentData &operator*();
+    const MultipleChromatogramAlignmentData &operator*() const;
+
+    MultipleChromatogramAlignmentData *operator->();
+    const MultipleChromatogramAlignmentData *operator->() const;
+
+    MultipleChromatogramAlignment clone() const;
+
+private:
+    QSharedPointer<MultipleChromatogramAlignmentData> getMcaData() const;
+};
+
+/**
+ * Multiple chromatogram alignment
+ * The length of the alignment is the maximum length of its rows.
+ * There are minimal checks on the alignment's alphabet, but the client of the class
+ * is expected to keep the conformance of the data and the alphabet.
+ */
+class U2CORE_EXPORT MultipleChromatogramAlignmentData : public MultipleAlignmentData {
+    friend class MultipleChromatogramAlignment;
+
+protected:
+    /**
+     * Creates a new alignment.
+     * The name must be provided if this is not default alignment.
+     */
+    MultipleChromatogramAlignmentData(const QString &name = QString(),
+                                      const DNAAlphabet *alphabet = NULL,
+                                      const QList<MultipleChromatogramAlignmentRow> &rows = QList<MultipleChromatogramAlignmentRow>());
+    MultipleChromatogramAlignmentData(const MultipleChromatogramAlignmentData &mcaData);
+
+public:
+    MultipleChromatogramAlignmentData &operator=(const MultipleChromatogramAlignment &mca);
+    MultipleChromatogramAlignmentData &operator=(const MultipleChromatogramAlignmentData &mcaData);
+
+    /** Returns the number of rows in the alignment */
+    int getNumRows() const;
+
+    /**
+     * Recomputes the length of the alignment and makes it as minimal
+     * as possible. All leading gaps columns are removed by default.
+     * Returns "true" if the alignment has been modified.
+     */
+    bool trim(bool removeLeadingGaps = true);
+
+    /**
+     * Removes all gaps from all columns in the alignment.
+     * Returns "true" if the alignment has been changed.
+     */
+    bool simplify();
+
+    /**
+     * Sorts rows by similarity making identical rows sequential.
+     * Returns 'true' if the rows were resorted, and 'false' otherwise.
+     */
+    bool sortRowsBySimilarity(QVector<U2Region> &united);
+
+    /** Returns row of the alignment */
+    inline MultipleChromatogramAlignmentRow getMcaRow(int row);
+    inline const MultipleChromatogramAlignmentRow getMcaRow(int row) const;
+    const MultipleChromatogramAlignmentRow getMcaRow(const QString &name) const;
+
+    /** Returns all rows in the alignment */
+    const QList<MultipleChromatogramAlignmentRow> getMcaRows() const;
+
+    MultipleChromatogramAlignmentRow getMcaRowByRowId(qint64 rowId, U2OpStatus &os) const;
+
+    /** Returns a character (a gap or a non-gap) in the specified row and position */
+    char charAt(int rowNumber, int pos) const;
+    bool isGap(int rowNumber, int pos) const;
+    bool isTrailingOrLeadingGap(int rowNumber, int pos) const;
+
+    /**
+     * Inserts 'count' gaps into the specified position.
+     * Can increase the overall alignment length.
+     */
+    void insertGaps(int row, int pos, int count, U2OpStatus &os);
+
+    /**
+     * Removes a region from the alignment.
+     * If "removeEmptyRows" is "true", removes all empty rows from the processed region.
+     * The alignment is trimmed after removing the region.
+     * Can decrease the overall alignment length.
+     */
+    void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows);
+
+    /**
+     * Renames the row with the specified index.
+     * Assumes that the row index is valid and the name is not empty.
+     */
+    void renameRow(int row, const QString &name);
+
+    /**
+     * Sets the new content for the row with the specified index.
+     * Assumes that the row index is valid.
+     * Can modify the overall alignment length (increase or decrease).
+     */
+    void setRowContent(int rowNumber, const DNAChromatogram &chromatogram, const QByteArray &sequence, int offset = 0);
+    void setRowContent(int rowNumber, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gapModel);
+    void setRowContent(int rowNumber, const McaRowMemoryData &mcaRowMemoryData);
+
+    /** Converts all rows' sequences to upper case */
+    void toUpperCase();
+
+    /**
+     * Modifies the alignment by keeping data from the specified region and rows only.
+     * Assumes that the region start is not negative, but it can be greater than a row length.
+     */
+    bool crop(const U2Region &region, const QSet<QString> &rowNames, U2OpStatus &os);
+    bool crop(const U2Region &region, U2OpStatus &os);
+    bool crop(int start, int count, U2OpStatus &os);
+
+    /**
+     * Creates a new alignment from the sub-alignment. Do not trims the result.
+     * Assumes that 'start' >= 0, and 'start + len' is less or equal than the alignment length.
+     */
+    MultipleChromatogramAlignment mid(int start, int len) const;
+
+    void setRowGapModel(int rowNumber, const QList<U2MsaGap> &gapModel);
+
+    void setSequenceId(int rowIndex, const U2DataId &sequenceId);
+
+    /**
+     * Adds a new row to the alignment.
+     * If rowIndex == -1 -> appends the row to the alignment.
+     * Otherwise, if rowIndex is incorrect, the closer bound is used (the first or the last row).
+     * Does not trim the original alignment.
+     * Can increase the overall alignment length.
+     */
+    void addRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes);
+    void addRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes, int rowIndex);
+    void addRow(const U2MsaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, U2OpStatus &os);
+    void addRow(const QString &name, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gaps, U2OpStatus &os);
+    void addRow(const U2MsaRow &rowInDb, const McaRowMemoryData &mcaRowMemoryData, U2OpStatus &os);
+
+    /**
+     * Replaces all occurrences of 'origChar' by 'resultChar' in the row with the specified index.
+     * The 'origChar' must be a non-gap character.
+     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
+     * The index must be valid as well.
+     */
+    void replaceChars(int row, char origChar, char resultChar);
+
+    /**
+     * Appends chars to the row with the specified index.
+     * The chars are appended to the alignment end, not to the row end
+     * (i.e. the alignment length is taken into account).
+     * Does NOT recalculate the alignment length!
+     * The index must be valid.
+     */
+    void appendChars(int row, const char *str, int len);
+
+    void appendChars(int row, qint64 afterPos, const char *str, int len);
+
+    /** returns "True" if there are no gaps in the alignment */
+    bool hasEmptyGapModel() const;
+
+    /**  returns "True" if all sequences in the alignment have equal lengths */
+    bool hasEqualLength() const;
+
+    /**
+     * Joins two alignments. Alignments must have the same size and alphabet.
+     * Increases the alignment length.
+     */
+    MultipleChromatogramAlignmentData &operator+=(const MultipleChromatogramAlignmentData &mcaData);
+
+    /**
+     * Compares two alignments: lengths, alphabets, rows and infos (that include names).
+     */
+    bool operator==(const MultipleChromatogramAlignmentData &mcaData) const;
+    bool operator!=(const MultipleChromatogramAlignmentData &mcaData) const;
+
+    MultipleAlignment getCopy() const;
+    MultipleChromatogramAlignment getExplicitCopy() const;
+
+private:
+    void copy(const MultipleAlignmentData &other);
+    void copy(const MultipleChromatogramAlignmentData &other);
+    MultipleAlignmentRow getEmptyRow() const;
+
+    /** Create a new row (sequence + gap model) from the bytes */
+    MultipleChromatogramAlignmentRow createRow(const QString &name, const DNAChromatogram &chromatogram, const QByteArray &bytes);
+
+    /**
+     * Sequence must not contain gaps.
+     * All gaps in the gaps model (in 'rowInDb') must be valid and have an offset within the bound of the sequence.
+     */
+    MultipleChromatogramAlignmentRow createRow(const U2MsaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gaps, U2OpStatus &os);
+
+    MultipleChromatogramAlignmentRow createRow(const MultipleChromatogramAlignmentRow &row);
+
+    void setRows(const QList<MultipleChromatogramAlignmentRow> &mcaRows);
+};
+
+inline MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::getMcaRow(int rowIndex) {
+    return getRow(rowIndex).dynamicCast<MultipleChromatogramAlignmentRow>();
+}
+
+inline const MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentData::getMcaRow(int rowIndex) const {
+    return getRow(rowIndex).dynamicCast<const MultipleChromatogramAlignmentRow>();
+}
+
+inline bool	operator!=(const MultipleChromatogramAlignment &ptr1, const MultipleChromatogramAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleChromatogramAlignment &ptr1, const MultipleChromatogramAlignmentData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleChromatogramAlignmentData *ptr1, const MultipleChromatogramAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignment &ptr1, const MultipleChromatogramAlignment &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignment &ptr1, const MultipleChromatogramAlignmentData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignmentData *ptr1, const MultipleChromatogramAlignment &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.cpp
new file mode 100644
index 0000000..b4eea21
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.cpp
@@ -0,0 +1,714 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <typeinfo>
+
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DNAChromatogram.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MultipleAlignmentRowInfo.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleChromatogramAlignment.h"
+#include "MultipleChromatogramAlignmentRow.h"
+
+namespace U2 {
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow()
+    : MultipleAlignmentRow(new MultipleChromatogramAlignmentRowData)
+{
+
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(const MultipleAlignmentRow &maRow)
+    : MultipleAlignmentRow(maRow)
+{
+    SAFE_POINT(NULL != maRowData.dynamicCast<MultipleChromatogramAlignmentRowData>(), "Can't cast MultipleAlignmentRow to MultipleChromatogramAlignmentRow", );
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRow(new MultipleChromatogramAlignmentRowData(mcaData))
+{
+
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(MultipleChromatogramAlignmentRowData *mcaRowData)
+    : MultipleAlignmentRow(mcaRowData)
+{
+
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(const U2McaRow &rowInDb,
+                                                                   const DNAChromatogram &chromatogram,
+                                                                   const DNASequence &sequence,
+                                                                   const U2MsaRowGapModel &gaps,
+                                                                   MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRow(new MultipleChromatogramAlignmentRowData(rowInDb, chromatogram, sequence, gaps, mcaData))
+{
+
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(const U2McaRow &rowInDb,
+                                                                   const QString &rowName,
+                                                                   const DNAChromatogram &chromatogram,
+                                                                   const QByteArray &rawData,
+                                                                   MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRow(new MultipleChromatogramAlignmentRowData(rowInDb, rowName, chromatogram, rawData, mcaData))
+{
+
+}
+
+MultipleChromatogramAlignmentRow::MultipleChromatogramAlignmentRow(const MultipleChromatogramAlignmentRow &row, MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRow(new MultipleChromatogramAlignmentRowData(row, mcaData))
+{
+
+}
+
+MultipleChromatogramAlignmentRowData *MultipleChromatogramAlignmentRow::data() const {
+    return getMcaRowData().data();
+}
+
+MultipleChromatogramAlignmentRowData &MultipleChromatogramAlignmentRow::operator*() {
+    return *getMcaRowData();
+}
+
+const MultipleChromatogramAlignmentRowData &MultipleChromatogramAlignmentRow::operator*() const {
+    return *getMcaRowData();
+}
+
+MultipleChromatogramAlignmentRowData *MultipleChromatogramAlignmentRow::operator->() {
+    return getMcaRowData().data();
+}
+
+const MultipleChromatogramAlignmentRowData *MultipleChromatogramAlignmentRow::operator->() const {
+    return getMcaRowData().data();
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentRow::clone() const {
+    return getMcaRowData()->getExplicitCopy();
+}
+
+QSharedPointer<MultipleChromatogramAlignmentRowData> MultipleChromatogramAlignmentRow::getMcaRowData() const {
+    return maRowData.dynamicCast<MultipleChromatogramAlignmentRowData>();
+}
+
+MultipleChromatogramAlignmentRowData::MultipleChromatogramAlignmentRowData(MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRowData(),
+      alignment(mcaData)
+{
+    removeTrailingGaps();
+}
+
+MultipleChromatogramAlignmentRowData::MultipleChromatogramAlignmentRowData(const U2McaRow &rowInDb,
+                                                                           const DNAChromatogram &chromatogram,
+                                                                           const DNASequence &sequence,
+                                                                           const QList<U2MsaGap> &gaps,
+                                                                           MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRowData(sequence, gaps),
+      alignment(mcaData),
+      chromatogram(chromatogram),
+      initialRowInDb(rowInDb)
+{
+    SAFE_POINT(alignment != NULL, "Parent MultipleChromatogramAlignmentData is NULL", );
+    removeTrailingGaps();
+}
+
+MultipleChromatogramAlignmentRowData::MultipleChromatogramAlignmentRowData(const U2McaRow &rowInDb,
+                                                                           const QString &rowName,
+                                                                           const DNAChromatogram &chromatogram,
+                                                                           const QByteArray &rawData,
+                                                                           MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRowData(),
+      alignment(mcaData),
+      chromatogram(chromatogram),
+      initialRowInDb(rowInDb)
+{
+    QByteArray sequenceData;
+    U2MsaRowGapModel gapModel;
+    MaDbiUtils::splitBytesToCharsAndGaps(rawData, sequenceData, gapModel);
+    sequence = DNASequence(rowName, sequenceData);
+    setGapModel(gapModel);
+}
+
+MultipleChromatogramAlignmentRowData::MultipleChromatogramAlignmentRowData(const MultipleChromatogramAlignmentRow &row, MultipleChromatogramAlignmentData *mcaData)
+    : MultipleAlignmentRowData(row->sequence, row->gaps),
+      alignment(mcaData),
+      chromatogram(row->chromatogram),
+      initialRowInDb(row->initialRowInDb),
+      additionalInfo(row->additionalInfo)
+{
+    SAFE_POINT(alignment != NULL, "Parent MultipleChromatogramAlignmentData is NULL", );
+}
+
+QString MultipleChromatogramAlignmentRowData::getName() const {
+    return sequence.getName();
+}
+
+void MultipleChromatogramAlignmentRowData::setName(const QString &name) {
+    sequence.setName(name);
+}
+
+void MultipleChromatogramAlignmentRowData::setGapModel(const QList<U2MsaGap> &newGapModel) {
+    gaps = newGapModel;
+    removeTrailingGaps();
+}
+
+const DNAChromatogram &MultipleChromatogramAlignmentRowData::getChromatogram() const {
+    return chromatogram;
+}
+
+DNAChromatogram MultipleChromatogramAlignmentRowData::getGappedChromatogram() const {
+    return ChromatogramUtils::getGappedChromatogram(chromatogram, gaps);
+}
+
+qint64 MultipleChromatogramAlignmentRowData::getRowId() const {
+    return initialRowInDb.rowId;
+}
+
+void MultipleChromatogramAlignmentRowData::setRowId(qint64 rowId) {
+    initialRowInDb.rowId = rowId;
+}
+
+void MultipleChromatogramAlignmentRowData::setSequenceId(const U2DataId &sequenceId) {
+    initialRowInDb.sequenceId = sequenceId;
+}
+
+U2McaRow MultipleChromatogramAlignmentRowData::getRowDbInfo() const {
+    U2McaRow row;
+    row.rowId = initialRowInDb.rowId;
+    row.chromatogramId = initialRowInDb.chromatogramId;
+    row.sequenceId = initialRowInDb.sequenceId;
+    row.gstart = 0;
+    row.gend = sequence.length();
+    row.gaps = gaps;
+    row.length = getRowLengthWithoutTrailing();
+    return row;
+}
+
+void MultipleChromatogramAlignmentRowData::setRowDbInfo(const U2McaRow &dbRow) {
+    initialRowInDb = dbRow;
+}
+
+QByteArray MultipleChromatogramAlignmentRowData::toByteArray(U2OpStatus &os, qint64 length) const {
+    if (length < getCoreEnd()) {
+        coreLog.trace("Incorrect length was passed to MultipleChromatogramAlignmentRowData::toByteArray");
+        os.setError("Failed to get row data");
+        return QByteArray();
+    }
+
+    if (gaps.isEmpty() && sequence.length() == length) {
+        return sequence.constSequence();
+    }
+
+    QByteArray bytes = joinCharsAndGaps(true, true);
+
+    // Append additional gaps, if necessary
+    if (length > bytes.count()) {
+        QByteArray gapsBytes;
+        gapsBytes.fill(U2Msa::GAP_CHAR, length - bytes.count());
+        bytes.append(gapsBytes);
+    }
+    if (length < bytes.count()) {
+        // cut extra trailing gaps
+        bytes = bytes.left(length);
+    }
+
+    return bytes;
+}
+
+int MultipleChromatogramAlignmentRowData::getRowLength() const {
+    SAFE_POINT(alignment != NULL, "Parent MultipleAlignment is NULL", getRowLengthWithoutTrailing());
+    return alignment->getLength();
+}
+
+QByteArray MultipleChromatogramAlignmentRowData::getCore() const {
+    return joinCharsAndGaps(false, false);
+}
+
+QByteArray MultipleChromatogramAlignmentRowData::getData() const {
+    return joinCharsAndGaps(true, true);
+}
+
+qint64 MultipleChromatogramAlignmentRowData::getCoreLength() const {
+    int coreStart = getCoreStart();
+    int coreEnd = getCoreEnd();
+    int length = coreEnd - coreStart;
+    SAFE_POINT(length >= 0, QString("Internal error in MultipleChromatogramAlignmentRowData: coreEnd is %1, coreStart is %2!").arg(coreEnd).arg(coreStart), length);
+    return length;
+}
+
+void MultipleChromatogramAlignmentRowData::append(const MultipleChromatogramAlignmentRow &anotherRow, int lengthBefore, U2OpStatus &os) {
+    // TODO: remove
+    append(*anotherRow, lengthBefore, os);
+}
+
+void MultipleChromatogramAlignmentRowData::append(const MultipleChromatogramAlignmentRowData &anotherRow, int lengthBefore, U2OpStatus &os) {
+    int rowLength = getRowLengthWithoutTrailing();
+
+    if (lengthBefore < rowLength) {
+        coreLog.trace(QString("Internal error: incorrect length '%1' were passed to MultipleChromatogramAlignmentRowData::append,"
+                              "coreEnd is '%2'").arg(lengthBefore).arg(getCoreEnd()));
+        os.setError("Failed to append one row to another");
+        return;
+    }
+
+    // Gap between rows
+    if (lengthBefore > rowLength) {
+        gaps.append(U2MsaGap(getRowLengthWithoutTrailing(), lengthBefore - getRowLengthWithoutTrailing()));
+    }
+
+    // Merge gaps
+    QList<U2MsaGap> anotherRowGaps = anotherRow.getGapModel();
+    for (int i = 0; i < anotherRowGaps.count(); ++i) {
+        anotherRowGaps[i].offset += lengthBefore;
+    }
+    gaps.append(anotherRowGaps);
+    mergeConsecutiveGaps();
+
+    // Merge sequences
+    DNASequenceUtils::append(sequence, anotherRow.sequence);
+
+    // Merge chromatograms
+    ChromatogramUtils::append(chromatogram, anotherRow.chromatogram);
+}
+
+void MultipleChromatogramAlignmentRowData::setRowContent(const DNAChromatogram &newChromatogram, const DNASequence &newSequence, const U2MsaRowGapModel &newGapModel, U2OpStatus &os) {
+    // TODO: this method is strange. It is hard to synchronize a chromatogram with a sequence. I think, it should be removed.
+    SAFE_POINT_EXT(!newSequence.constSequence().contains(U2Msa::GAP_CHAR), os.setError("The sequence must be without gaps"), );
+    chromatogram = newChromatogram;
+    sequence = newSequence;
+    setGapModel(newGapModel);
+    syncLengths();
+}
+
+void MultipleChromatogramAlignmentRowData::setRowContent(const DNAChromatogram &newChromatogram, const QByteArray &bytes, int offset, U2OpStatus &os) {
+    // TODO: this method is strange. It is hard to synchronize a chromatogram with a sequence. I think, it should be removed.
+    QByteArray newSequenceBytes;
+    U2MsaRowGapModel newGapModel;
+
+    splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapModel);
+    DNASequence newSequence(getName(), newSequenceBytes);
+
+    addOffsetToGapModel(newGapModel, offset);
+
+    setRowContent(chromatogram, newSequence, newGapModel, os);
+}
+
+void MultipleChromatogramAlignmentRowData::insertGaps(int position, int count, U2OpStatus &os) {
+    MsaRowUtils::insertGaps(os, gaps, getRowLengthWithoutTrailing(), position, count);
+}
+
+void MultipleChromatogramAlignmentRowData::removeChars(int pos, int count, U2OpStatus &os) {
+    if (pos < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed to MultipleChromatogramAlignmentRowData::removeChars, "
+            "pos '%1', count '%2'").arg(pos).arg(count));
+        os.setError("Can't remove chars from a row");
+        return;
+    }
+
+    if (pos >= getRowLengthWithoutTrailing()) {
+        return;
+    }
+
+    if (pos < getRowLengthWithoutTrailing()) {
+        int startPosInSeq = -1;
+        int endPosInSeq = -1;
+        getStartAndEndSequencePositions(pos, count, startPosInSeq, endPosInSeq);
+
+        // Remove inside a gap
+        if ((startPosInSeq < endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq)) {
+            DNASequenceUtils::removeChars(sequence, startPosInSeq, endPosInSeq, os);
+            CHECK_OP(os, );
+            chromatogram.baseCalls.remove(startPosInSeq, endPosInSeq - startPosInSeq);
+        }
+    }
+
+    // Remove gaps from the gaps model
+    removeGapsFromGapModel(os, pos, count);
+
+    removeTrailingGaps();
+    mergeConsecutiveGaps();
+}
+
+char MultipleChromatogramAlignmentRowData::charAt(qint64 position) const {
+    return MsaRowUtils::charAt(sequence.seq, gaps, position);
+}
+
+bool MultipleChromatogramAlignmentRowData::isGap(qint64 position) const {
+    return MsaRowUtils::isGap(sequence.length(), gaps, position);
+}
+
+int MultipleChromatogramAlignmentRowData::getUngappedPosition(int pos) const {
+    return MsaRowUtils::getUngappedPosition(gaps, sequence.length(), pos);
+}
+
+qint64 MultipleChromatogramAlignmentRowData::getBaseCount(qint64 before) const {
+    const int rowLength = MsaRowUtils::getRowLength(sequence.seq, gaps);
+    const int trimmedRowPos = before < rowLength ? before : rowLength;
+    return MsaRowUtils::getUngappedPosition(gaps, sequence.length(), trimmedRowPos, true);
+}
+
+bool MultipleChromatogramAlignmentRowData::isRowContentEqual(const MultipleChromatogramAlignmentRow &row) const {
+    return isRowContentEqual(*row);
+}
+
+bool MultipleChromatogramAlignmentRowData::isRowContentEqual(const MultipleChromatogramAlignmentRowData &row) const {
+    if (MatchExactly == DNASequenceUtils::compare(sequence, row.getSequence())) {
+        if (sequence.length() == 0) {
+            return true;
+        } else {
+            U2MsaRowGapModel firstRowGaps = gaps;
+            if  (!firstRowGaps.isEmpty() && (U2Msa::GAP_CHAR == charAt(0))) {
+                firstRowGaps.removeFirst();
+            }
+
+            U2MsaRowGapModel secondRowGaps = row.getGapModel();
+            if (!secondRowGaps.isEmpty() && (U2Msa::GAP_CHAR == row.charAt(0))) {
+                secondRowGaps.removeFirst();
+            }
+
+            if (firstRowGaps == secondRowGaps) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+bool MultipleChromatogramAlignmentRowData::operator!=(const MultipleChromatogramAlignmentRowData &mcaRowData) const {
+    return !(*this == mcaRowData);
+}
+
+bool MultipleChromatogramAlignmentRowData::operator!=(const MultipleAlignmentRowData &maRowData) const {
+    return !(*this == maRowData);
+}
+
+bool MultipleChromatogramAlignmentRowData::operator==(const MultipleChromatogramAlignmentRowData &mcaRowData) const {
+    return isRowContentEqual(mcaRowData);
+}
+
+bool MultipleChromatogramAlignmentRowData::operator==(const MultipleAlignmentRowData &maRowData) const {
+    try {
+        return  (*this == dynamic_cast<const MultipleChromatogramAlignmentRowData &>(maRowData));
+    } catch (std::bad_cast) {
+        FAIL("Can't cast MultipleAlignmentRowData to MultipleChromatogramAlignmentRowData", true);
+    }
+}
+
+void MultipleChromatogramAlignmentRowData::crop(U2OpStatus &os, qint64 startPosition, qint64 count) {
+    if (startPosition < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed to MultipleChromatogramAlignmentRowData::crop, "
+            "startPos '%1', length '%2', row length '%3'").arg(startPosition).arg(count).arg(getRowLength()));
+        os.setError("Can't crop a row!");
+        return;
+    }
+
+    int initialRowLength = getRowLength();
+    int initialSeqLength = getUngappedLength();
+
+    if (startPosition >= getRowLengthWithoutTrailing()) {
+        // Clear the row content
+        DNASequenceUtils::makeEmpty(sequence);
+    } else {
+        int startPosInSeq = -1;
+        int endPosInSeq = -1;
+        getStartAndEndSequencePositions(startPosition, count, startPosInSeq, endPosInSeq);
+
+        // Remove inside a gap
+        if ((startPosInSeq <= endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq)) {
+            if (endPosInSeq < initialSeqLength) {
+                DNASequenceUtils::removeChars(sequence, endPosInSeq, getUngappedLength(), os);
+                CHECK_OP(os, );
+            }
+
+            if (startPosInSeq > 0) {
+                DNASequenceUtils::removeChars(sequence, 0, startPosInSeq, os);
+                CHECK_OP(os, );
+            }
+        }
+    }
+
+    ChromatogramUtils::crop(chromatogram, startPosition, count);
+
+    if (startPosition + count < initialRowLength) {
+        removeGapsFromGapModel(os, startPosition + count, initialRowLength - startPosition - count);
+    }
+
+    if (startPosition > 0) {
+        removeGapsFromGapModel(os, 0, startPosition);
+    }
+    removeTrailingGaps();
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentRowData::mid(int pos, int count, U2OpStatus &os) const {
+    MultipleChromatogramAlignmentRow row = getExplicitCopy();
+    row->crop(os, pos, count);
+    return row;
+}
+
+void MultipleChromatogramAlignmentRowData::toUpperCase() {
+    DNASequenceUtils::toUpperCase(sequence);
+}
+
+void MultipleChromatogramAlignmentRowData::replaceChars(char origChar, char resultChar, U2OpStatus &os) {
+    if (U2Msa::GAP_CHAR == origChar) {
+        coreLog.trace("The original char can't be a gap in MultipleChromatogramAlignmentRowData::replaceChars");
+        os.setError("Failed to replace chars in an alignment row");
+        return;
+    }
+
+    if (U2Msa::GAP_CHAR == resultChar) {
+        // Get indexes of all 'origChar' characters in the row sequence
+        QList<int> gapsIndexes;
+        for (int i = 0; i < getRowLength(); i++) {
+            if (origChar == charAt(i)) {
+                gapsIndexes.append(i);
+            }
+        }
+
+        if (gapsIndexes.isEmpty()) {
+            return; // There is nothing to replace
+        }
+
+        // Remove all 'origChar' characters from the row sequence
+        sequence.seq.replace(origChar, "");
+
+        // Re-calculate the gaps model
+        QList<U2MsaGap> newGapsModel = gaps;
+        for (int i = 0; i < gapsIndexes.size(); ++i) {
+            int index = gapsIndexes[i];
+            U2MsaGap gap(index, 1);
+            newGapsModel.append(gap);
+        }
+        qSort(newGapsModel.begin(), newGapsModel.end(), U2MsaGap::lessThan);
+
+        // Replace the gaps model with the new one
+        gaps = newGapsModel;
+        mergeConsecutiveGaps();
+
+        foreach (int index, gapsIndexes) {
+            chromatogram.baseCalls.removeAt(index);
+        }
+        chromatogram.seqLength -= gapsIndexes.size();
+    } else {
+        // Just replace all occurrences of 'origChar' by 'resultChar'
+        sequence.seq.replace(origChar, resultChar);
+    }
+}
+
+MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentRowData::getExplicitCopy() const {
+    return MultipleChromatogramAlignmentRow(new MultipleChromatogramAlignmentRowData(*this));
+}
+
+void MultipleChromatogramAlignmentRowData::setAdditionalInfo(const QVariantMap &newAdditionalInfo) {
+    additionalInfo = newAdditionalInfo;
+}
+
+QVariantMap MultipleChromatogramAlignmentRowData::getAdditionalInfo() const {
+    return additionalInfo;
+}
+
+McaRowMemoryData MultipleChromatogramAlignmentRowData::getRowMemoryData() const {
+    McaRowMemoryData mcaRowMemoryData;
+    mcaRowMemoryData.chromatogram = chromatogram;
+    mcaRowMemoryData.gapModel = gaps;
+    mcaRowMemoryData.sequence = sequence;
+    mcaRowMemoryData.rowLength = getRowLengthWithoutTrailing();
+    mcaRowMemoryData.additionalInfo = additionalInfo;
+    return mcaRowMemoryData;
+}
+
+void MultipleChromatogramAlignmentRowData::reverse() {
+    sequence.seq = DNASequenceUtils::reverse(sequence.seq);
+    chromatogram = ChromatogramUtils::reverse(chromatogram);
+    gaps = MsaRowUtils::reverseGapModel(gaps, getRowLengthWithoutTrailing());
+    MultipleAlignmentRowInfo::setReversed(additionalInfo, !isReversed());
+}
+
+void MultipleChromatogramAlignmentRowData::complement() {
+    sequence.seq = DNASequenceUtils::complement(sequence.seq);
+    chromatogram = ChromatogramUtils::complement(chromatogram);
+    MultipleAlignmentRowInfo::setComplemented(additionalInfo, !isComplemented());
+}
+
+void MultipleChromatogramAlignmentRowData::reverseComplement() {
+    reverse();
+    complement();
+}
+
+bool MultipleChromatogramAlignmentRowData::isReversed() const {
+    return MultipleAlignmentRowInfo::getReversed(additionalInfo);
+}
+
+bool MultipleChromatogramAlignmentRowData::isComplemented() const {
+    return MultipleAlignmentRowInfo::getComplemented(additionalInfo);
+}
+
+void MultipleChromatogramAlignmentRowData::splitBytesToCharsAndGaps(const QByteArray &input, QByteArray &seqBytes, QList<U2MsaGap> &gapsModel) {
+    MaDbiUtils::splitBytesToCharsAndGaps(input, seqBytes, gapsModel);
+}
+
+void MultipleChromatogramAlignmentRowData::addOffsetToGapModel(QList<U2MsaGap> &gapModel, int offset) {
+    if (0 == offset) {
+        return;
+    }
+
+    if (!gapModel.isEmpty()) {
+        U2MsaGap &firstGap = gapModel[0];
+        if (0 == firstGap.offset) {
+            firstGap.gap += offset;
+        } else {
+            SAFE_POINT(offset >= 0, "Negative gap offset", );
+            U2MsaGap beginningGap(0, offset);
+            gapModel.insert(0, beginningGap);
+        }
+
+        // Shift other gaps
+        if (gapModel.count() > 1) {
+            for (int i = 1; i < gapModel.count(); ++i) {
+                qint64 newOffset = gapModel[i].offset + offset;
+                SAFE_POINT(newOffset >= 0, "Negative gap offset", );
+                gapModel[i].offset = newOffset;
+            }
+        }
+    } else {
+        SAFE_POINT(offset >= 0, "Negative gap offset", );
+        U2MsaGap gap(0, offset);
+        gapModel.append(gap);
+    }
+}
+
+QByteArray MultipleChromatogramAlignmentRowData::joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const {
+    QByteArray bytes = sequence.constSequence();
+    int beginningOffset = 0;
+
+    if (gaps.isEmpty()) {
+        return bytes;
+    }
+
+    for (int i = 0; i < gaps.size(); ++i) {
+        QByteArray gapsBytes;
+        if (!keepOffset && (0 == gaps[i].offset)) {
+            beginningOffset = gaps[i].gap;
+            continue;
+        }
+
+        gapsBytes.fill(U2Msa::GAP_CHAR, gaps[i].gap);
+        bytes.insert(gaps[i].offset - beginningOffset, gapsBytes);
+    }
+    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", QByteArray());
+    if (keepTrailingGaps && bytes.size() < alignment->getLength()) {
+        QByteArray gapsBytes;
+        gapsBytes.fill(U2Msa::GAP_CHAR, alignment->getLength() - bytes.size());
+        bytes.append(gapsBytes);
+    }
+
+    return bytes;
+}
+
+void MultipleChromatogramAlignmentRowData::mergeConsecutiveGaps() {
+    MsaRowUtils::mergeConsecutiveGaps(gaps);
+}
+
+void MultipleChromatogramAlignmentRowData::removeTrailingGaps() {
+    if (gaps.isEmpty()) {
+        return;
+    }
+
+    // If the last char in the row is gap, remove the last gap
+    if (U2Msa::GAP_CHAR == charAt(MsaRowUtils::getRowLength(sequence.constData(), gaps) - 1)) {
+        gaps.removeLast();
+    }
+}
+
+void MultipleChromatogramAlignmentRowData::syncLengths() {
+    if (sequence.length() > chromatogram.seqLength) {
+        const ushort baseCall = chromatogram.baseCalls.isEmpty() ? 0 : chromatogram.baseCalls.last();
+        chromatogram.baseCalls.insert(chromatogram.seqLength, sequence.length() - chromatogram.seqLength, baseCall);
+    }
+}
+
+void MultipleChromatogramAlignmentRowData::getStartAndEndSequencePositions(int pos, int count, int &startPosInSeq, int &endPosInSeq) {
+    int rowLengthWithoutTrailingGap = getRowLengthWithoutTrailing();
+    SAFE_POINT(pos < rowLengthWithoutTrailingGap,
+        QString("Incorrect position '%1' in MultipleChromatogramAlignmentRowData::getStartAndEndSequencePosition, "
+        "row length without trailing gaps is '%2'").arg(pos).arg(rowLengthWithoutTrailingGap),);
+
+    // Remove chars from the sequence
+    // Calculate start position in the sequence
+    if (U2Msa::GAP_CHAR == charAt(pos)) {
+        int i = 1;
+        while (U2Msa::GAP_CHAR == charAt(pos + i)) {
+            if (getRowLength() == pos + i) {
+                break;
+            }
+            i++;
+        }
+        startPosInSeq = getUngappedPosition(pos + i);
+    } else {
+        startPosInSeq = getUngappedPosition(pos);
+    }
+
+    // Calculate end position in the sequence
+    int endRegionPos = pos + count; // non-inclusive
+
+    if (endRegionPos > rowLengthWithoutTrailingGap) {
+        endRegionPos = rowLengthWithoutTrailingGap;
+    }
+
+    if (endRegionPos == rowLengthWithoutTrailingGap) {
+        endPosInSeq = getUngappedLength();
+    } else {
+        if (U2Msa::GAP_CHAR == charAt(endRegionPos)) {
+            int i = 1;
+            while (U2Msa::GAP_CHAR == charAt(endRegionPos + i)) {
+                if (getRowLength() == endRegionPos + i) {
+                    break;
+                }
+                i++;
+            }
+            endPosInSeq = getUngappedPosition(endRegionPos + i);
+        } else {
+            endPosInSeq = getUngappedPosition(endRegionPos);
+        }
+    }
+}
+
+void MultipleChromatogramAlignmentRowData::removeGapsFromGapModel(U2OpStatus &os, int pos, int count) {
+    MsaRowUtils::removeGaps(os, gaps, getRowLengthWithoutTrailing(), pos, count);
+}
+
+void MultipleChromatogramAlignmentRowData::setParentAlignment(const MultipleChromatogramAlignment &msa) {
+    setParentAlignment(msa.data());
+}
+
+void MultipleChromatogramAlignmentRowData::setParentAlignment(MultipleChromatogramAlignmentData *mcaData) {
+    alignment = mcaData;
+}
+
+int MultipleChromatogramAlignmentRowData::getCoreStart() const {
+    return MsaRowUtils::getCoreStart(gaps);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.h b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.h
new file mode 100644
index 0000000..4f85a6c
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.h
@@ -0,0 +1,334 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_ROW_H_
+#define _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_ROW_H_
+
+#include <U2Core/DNAChromatogram.h>
+#include <U2Core/DNASequence.h>
+#include <U2Core/McaRowInnerData.h>
+#include <U2Core/MsaRowUtils.h>
+#include <U2Core/U2Msa.h>
+
+#include "MultipleAlignmentRow.h"
+
+namespace U2 {
+
+class MultipleChromatogramAlignment;
+class MultipleChromatogramAlignmentData;
+class MultipleChromatogramAlignmentRowData;
+class U2OpStatus;
+
+class U2CORE_EXPORT MultipleChromatogramAlignmentRow : public MultipleAlignmentRow {
+public:
+    MultipleChromatogramAlignmentRow();
+    MultipleChromatogramAlignmentRow(const MultipleAlignmentRow &maRow);
+    MultipleChromatogramAlignmentRow(MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignmentRow(MultipleChromatogramAlignmentRowData *mcaRowData);
+
+    /** Creates a row in memory. */
+    MultipleChromatogramAlignmentRow(const U2McaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gaps, MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignmentRow(const U2McaRow &rowInDb, const QString &rowName, const DNAChromatogram &chromatogram, const QByteArray &rawData, MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignmentRow(const MultipleChromatogramAlignmentRow &row, MultipleChromatogramAlignmentData *mcaData);
+
+    MultipleChromatogramAlignmentRowData *data() const;
+
+    MultipleChromatogramAlignmentRowData &operator*();
+    const MultipleChromatogramAlignmentRowData &operator*() const;
+
+    MultipleChromatogramAlignmentRowData *operator->();
+    const MultipleChromatogramAlignmentRowData *operator->() const;
+
+    MultipleChromatogramAlignmentRow clone() const;
+
+private:
+    QSharedPointer<MultipleChromatogramAlignmentRowData> getMcaRowData() const;
+};
+
+/**
+ * A row in a multiple alignment structure.
+ * The row consists of a sequence without gaps
+ * and a gap model.
+ * A row core is an obsolete concept. Currently,
+ * it exactly equals to the row (offset always equals to zero).
+ */
+class U2CORE_EXPORT MultipleChromatogramAlignmentRowData : public MultipleAlignmentRowData {
+    friend class MultipleChromatogramAlignmentData;
+    friend class MultipleChromatogramAlignmentRow;
+
+protected:
+    /** Do NOT create a row without an alignment! */
+    MultipleChromatogramAlignmentRowData(MultipleChromatogramAlignmentData *mcaData = NULL);
+
+    /** Creates a row in memory. */
+    MultipleChromatogramAlignmentRowData(const U2McaRow &rowInDb, const DNAChromatogram &chromatogram, const DNASequence &sequence, const QList<U2MsaGap> &gaps, MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignmentRowData(const U2McaRow &rowInDb, const QString &rowName, const DNAChromatogram &chromatogram, const QByteArray &rawData, MultipleChromatogramAlignmentData *mcaData);
+    MultipleChromatogramAlignmentRowData(const MultipleChromatogramAlignmentRow &row, MultipleChromatogramAlignmentData *mcaData);
+
+public:
+    /** Name of the row (equals to the sequence name), can be empty */
+    QString getName() const;
+    void setName(const QString &name);
+
+    /** Returns the list of gaps for the row */
+    inline const U2MsaRowGapModel &getGapModel() const;
+
+    /** Careful, the new gap model is not validated! */
+    void setGapModel(const QList<U2MsaGap> &newGapModel);
+
+    /** Returns the row sequence (without gaps) */
+    inline const DNASequence &getSequence() const;
+
+    const DNAChromatogram &getChromatogram() const;
+    DNAChromatogram getGappedChromatogram() const;
+
+    /** Returns ID of the row in the database. */
+    qint64 getRowId() const;
+
+    void setRowId(qint64 rowId);
+
+    void setSequenceId(const U2DataId &sequenceId);
+
+    /** Returns ID of the row sequence in the database. */
+    U2McaRow getRowDbInfo() const;
+
+    /** Sets database IDs for row and sequence */
+    void setRowDbInfo(const U2McaRow &dbRow);
+
+    /**
+     * The length must be greater or equal to the row length.
+     * When the specified length is greater, an appropriate number of
+     * trailing gaps are appended to the end of the byte array.
+     */
+    QByteArray toByteArray(U2OpStatus &os, qint64 length) const;
+
+    /** Returns length of the sequence + number of gaps including trailing gaps (if any) */
+    int getRowLength() const;
+
+    /** Returns length of the sequence + number of gaps. Doesn't include trailing gaps. */
+    inline qint64 getRowLengthWithoutTrailing() const;
+
+    /** Packed version: returns the row without leading and trailing gaps */
+    QByteArray getCore() const;
+
+    /** Returns the row the way it is -- with leading and trailing gaps */
+    QByteArray getData() const;
+
+    /** Obsolete. Always return the row length (non-inclusive!) */
+    inline int getCoreEnd() const;
+
+    /** Obsolete. Always returns zero. */
+    int getCoreStart() const;
+
+    /** Obsolete. The length of the row core */
+    qint64 getCoreLength() const;
+
+    /** Removes all gaps. Returns true if changed. */
+    inline bool simplify();
+
+    /** Adds anotherRow data to this row(ingores trailing gaps), "lengthBefore" must be greater than this row's length. */
+    void append(const MultipleChromatogramAlignmentRow &anotherRow, int lengthBefore, U2OpStatus &os);
+    void append(const MultipleChromatogramAlignmentRowData &anotherRow, int lengthBefore, U2OpStatus &os);
+
+    /**
+     * Sets new sequence and gap model.
+     * If the sequence is empty, the offset is ignored (if any).
+     */
+    void setRowContent(const DNAChromatogram &chromatogram, const DNASequence &sequence, const U2MsaRowGapModel &gapModel, U2OpStatus &os);
+    void setRowContent(const DNAChromatogram &chromatogram, const QByteArray &bytes, int offset, U2OpStatus &os);
+
+    /**
+     * Inserts 'count' gaps into the specified position, if possible.
+     * If position is bigger than the row length or negative, does nothing.
+     * Returns incorrect status if 'count' is negative.
+     */
+    void insertGaps(int pos, int count, U2OpStatus &os);
+
+    /**
+     * Removes up to 'count' characters starting from the specified position
+     * If position is bigger than the row length, does nothing.
+     * Returns incorrect status if 'pos' or 'count' is negative.
+     */
+    void removeChars(int pos, int count, U2OpStatus& os);
+
+    /**
+     * Returns a character in row at the specified position.
+     * If the specified position is outside the row bounds, returns a gap.
+     */
+    char charAt(qint64 position) const;
+    bool isGap(qint64 position) const;
+
+    /** Length of the sequence without gaps */
+    inline int getUngappedLength() const;
+
+    /**
+     * If character at 'pos' position is not a gap, returns the char position in sequence.
+     * Otherwise returns '-1'.
+     */
+    int getUngappedPosition(int pos) const;
+
+    /**
+     * Returns base count located leftward to the 'before' position in the alignment.
+     */
+    qint64 getBaseCount(qint64 before) const;
+
+    /**
+     * Exactly compares the rows. Sequences and gap models must match.
+     * However, the rows are considered equal if they differ by trailing gaps only.
+     */
+    bool isRowContentEqual(const MultipleChromatogramAlignmentRow &row) const;
+    bool isRowContentEqual(const MultipleChromatogramAlignmentRowData &rowData) const;
+
+    /** Compares 2 rows. Rows are equal if their contents and names are equal. */
+    bool operator!=(const MultipleChromatogramAlignmentRowData &mcaRowData) const;
+    bool operator!=(const MultipleAlignmentRowData &maRowData) const;
+    bool operator==(const MultipleChromatogramAlignmentRowData &mcaRowData) const;
+    bool operator==(const MultipleAlignmentRowData &maRowData) const;
+
+    /**
+     * Crops the row -> keeps only specified region in the row.
+     * 'pos' and 'pos + count' can be greater than the row length.
+     * Keeps trailing gaps.
+     */
+    void crop(U2OpStatus &os, qint64 startPosition, qint64 count);
+
+    /**
+     * Returns new row of the specified 'count' length, started from 'pos'.
+     * 'pos' and 'pos + count' can be greater than the row length.
+     * Keeps trailing gaps.
+     */
+    MultipleChromatogramAlignmentRow mid(int pos, int count, U2OpStatus &os) const;
+
+    /** Converts the row sequence to upper case */
+    void toUpperCase();
+
+    /**
+     * Replaces all occurrences of 'origChar' by 'resultChar'.
+     * The 'origChar' must be a non-gap character.
+     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
+     */
+    void replaceChars(char origChar, char resultChar, U2OpStatus &os);
+
+    MultipleChromatogramAlignmentRow getExplicitCopy() const;
+
+    void setAdditionalInfo(const QVariantMap &additionalInfo);
+    QVariantMap getAdditionalInfo() const;
+
+    McaRowMemoryData getRowMemoryData() const;
+
+    void reverse();
+    void complement();
+    void reverseComplement();
+
+    bool isReversed() const;
+    bool isComplemented() const;
+
+private:
+    /** Splits input to sequence bytes and gaps model */
+    static void splitBytesToCharsAndGaps(const QByteArray &input, QByteArray &seqBytes, QList<U2MsaGap> &gapModel);
+
+    /**
+     * Add "offset" of gaps to the beginning of the row
+     * Warning: it is not verified that the row sequence is not empty.
+     */
+    static void addOffsetToGapModel(QList<U2MsaGap> &gapModel, int offset);
+
+    /**
+     * Joins sequence chars and gaps into one byte array.
+     * "keepOffset" specifies to take into account gaps at the beginning of the row.
+     */
+    QByteArray joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const;
+
+    /** Gets the length of all gaps */
+    inline int getGapsLength() const;
+
+    /** If there are consecutive gaps in the gaps model, merges them into one gap */
+    void mergeConsecutiveGaps();
+
+    /** The row must not contain trailing gaps, this method is used to assure it after the row modification */
+    void removeTrailingGaps();
+
+    void syncLengths();
+
+    /**
+     * Calculates start and end position in the sequence,
+     * depending on the start position in the row and the 'count' character from it
+     */
+    void getStartAndEndSequencePositions(int pos, int count, int &startPosInSeq, int &endPosInSeq);
+
+    /** Removing gaps from the row between position 'pos' and 'pos + count' */
+    void removeGapsFromGapModel(U2OpStatus &os, int pos, int count);
+
+    void setParentAlignment(const MultipleChromatogramAlignment &msa);
+    void setParentAlignment(MultipleChromatogramAlignmentData *mcaData);
+
+    MultipleChromatogramAlignmentData *alignment;
+
+    DNAChromatogram chromatogram;
+
+    /** The row in the database */
+    U2McaRow initialRowInDb;
+
+    QVariantMap additionalInfo;
+};
+
+inline const U2MsaRowGapModel &MultipleChromatogramAlignmentRowData::getGapModel() const {
+    return gaps;
+}
+
+inline const DNASequence &MultipleChromatogramAlignmentRowData::getSequence() const {
+    return sequence;
+}
+
+inline qint64 MultipleChromatogramAlignmentRowData::getRowLengthWithoutTrailing() const {
+    return MsaRowUtils::getRowLength(sequence.seq, gaps);
+}
+
+inline int MultipleChromatogramAlignmentRowData::getCoreEnd() const {
+    return getRowLengthWithoutTrailing();
+}
+
+inline bool MultipleChromatogramAlignmentRowData::simplify() {
+    if (gaps.count() > 0) {
+        gaps.clear();
+        return true;
+    }
+    return false;
+}
+
+inline int MultipleChromatogramAlignmentRowData::getUngappedLength() const {
+    return sequence.length();
+}
+
+inline int MultipleChromatogramAlignmentRowData::getGapsLength() const {
+    return MsaRowUtils::getGapsLength(gaps);
+}
+
+inline bool	operator!=(const MultipleChromatogramAlignmentRow &ptr1, const MultipleChromatogramAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleChromatogramAlignmentRow &ptr1, const MultipleChromatogramAlignmentRowData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleChromatogramAlignmentRowData *ptr1, const MultipleChromatogramAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignmentRow &ptr1, const MultipleChromatogramAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignmentRow &ptr1, const MultipleChromatogramAlignmentRowData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleChromatogramAlignmentRowData *ptr1, const MultipleChromatogramAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_ROW_H_
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.cpp
new file mode 100644
index 0000000..1a00659
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.cpp
@@ -0,0 +1,613 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <typeinfo>
+
+#include <QSet>
+
+#include <U2Core/MsaRowUtils.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2Region.h>
+
+#include "MaStateCheck.h"
+#include "MultipleSequenceAlignment.h"
+#include "MultipleAlignmentInfo.h"
+
+namespace U2 {
+
+MultipleSequenceAlignment::MultipleSequenceAlignment(const QString &name, const DNAAlphabet *alphabet, const QList<MultipleSequenceAlignmentRow> &rows)
+    : MultipleAlignment(new MultipleSequenceAlignmentData(name, alphabet, rows))
+{
+
+}
+
+MultipleSequenceAlignment::MultipleSequenceAlignment(const MultipleAlignment &ma)
+    : MultipleAlignment(ma)
+{
+    SAFE_POINT(NULL != maData.dynamicCast<MultipleSequenceAlignmentData>(), "Can't cast MultipleAlignment to MultipleSequenceAlignment", );
+}
+
+MultipleSequenceAlignment::MultipleSequenceAlignment(MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignment(msaData)
+{
+
+}
+
+MultipleSequenceAlignmentData * MultipleSequenceAlignment::data() const {
+    return getMsaData().data();
+}
+
+MultipleSequenceAlignmentData & MultipleSequenceAlignment::operator*() {
+    return *getMsaData();
+}
+
+const MultipleSequenceAlignmentData & MultipleSequenceAlignment::operator*() const {
+    return *getMsaData();
+}
+
+MultipleSequenceAlignmentData * MultipleSequenceAlignment::operator->() {
+    return getMsaData().data();
+}
+
+const MultipleSequenceAlignmentData * MultipleSequenceAlignment::operator->() const {
+    return getMsaData().data();
+}
+
+MultipleSequenceAlignment MultipleSequenceAlignment::clone() const {
+    return getMsaData()->getExplicitCopy();
+}
+
+QSharedPointer<MultipleSequenceAlignmentData> MultipleSequenceAlignment::getMsaData() const {
+    return maData.dynamicCast<MultipleSequenceAlignmentData>();
+}
+
+namespace {
+
+QList<MultipleAlignmentRow> convertToMaRows(const QList<MultipleSequenceAlignmentRow> &msaRows) {
+    QList<MultipleAlignmentRow> maRows;
+    foreach (const MultipleSequenceAlignmentRow &msaRow, msaRows) {
+        maRows << msaRow;
+    }
+    return maRows;
+}
+
+}
+
+MultipleSequenceAlignmentData::MultipleSequenceAlignmentData(const QString &name, const DNAAlphabet *alphabet, const QList<MultipleSequenceAlignmentRow> &rows)
+    : MultipleAlignmentData(name, alphabet, convertToMaRows(rows))
+{
+
+}
+
+MultipleSequenceAlignmentData::MultipleSequenceAlignmentData(const MultipleSequenceAlignmentData &msaData)
+    : MultipleAlignmentData()
+{
+    copy(msaData);
+}
+
+MultipleSequenceAlignmentData & MultipleSequenceAlignmentData::operator=(const MultipleSequenceAlignment &msa) {
+    return *this = *msa;
+}
+
+MultipleSequenceAlignmentData & MultipleSequenceAlignmentData::operator=(const MultipleSequenceAlignmentData &msaData) {
+    copy(msaData);
+    return *this;
+}
+
+bool MultipleSequenceAlignmentData::trim(bool removeLeadingGaps) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    bool result = false;
+
+    if ( removeLeadingGaps ) {
+        // Verify if there are leading columns of gaps
+        // by checking the first gap in each row
+        qint64 leadingGapColumnsNum = 0;
+        foreach (const MultipleSequenceAlignmentRow &row, rows) {
+            if (row->getGapModel().count() > 0) {
+                const U2MsaGap firstGap = row->getGapModel().first();
+                if (firstGap.offset > 0) {
+                    leadingGapColumnsNum = 0;
+                    break;
+                } else {
+                    if (leadingGapColumnsNum == 0) {
+                        leadingGapColumnsNum = firstGap.gap;
+                    } else {
+                        leadingGapColumnsNum = qMin(leadingGapColumnsNum, firstGap.gap);
+                    }
+                }
+            } else {
+                leadingGapColumnsNum = 0;
+                break;
+            }
+        }
+
+        // If there are leading gap columns, remove them
+        U2OpStatus2Log os;
+        if (leadingGapColumnsNum > 0) {
+            for (int i = 0; i < getNumRows(); ++i) {
+                getMsaRow(i)->removeChars(0, leadingGapColumnsNum, os);
+                CHECK_OP(os, true);
+                result = true;
+            }
+        }
+    }
+
+    // Verify right side of the alignment (trailing gaps and rows' lengths)
+    qint64 newLength = 0;
+    foreach (const MultipleSequenceAlignmentRow &row, rows) {
+        if (newLength == 0) {
+            newLength = row->getRowLengthWithoutTrailing();
+        } else {
+            newLength = qMax(row->getRowLengthWithoutTrailing(), newLength);
+        }
+    }
+
+    if (newLength != length) {
+        length = newLength;
+        result = true;
+    }
+
+    return result;
+}
+
+bool MultipleSequenceAlignmentData::simplify() {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    int newLen = 0;
+    bool changed = false;
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        changed |= getMsaRow(i)->simplify();
+        newLen = qMax(newLen, getMsaRow(i)->getCoreEnd());
+    }
+
+    if (!changed) {
+        assert(length == newLen);
+        return false;
+    }
+    length = newLen;
+    return true;
+}
+
+bool MultipleSequenceAlignmentData::hasEmptyGapModel() const {
+    foreach (const MultipleSequenceAlignmentRow &row, rows) {
+        if (!row->getGapModel().isEmpty()) {
+            return false;
+        }
+    }
+    return true;
+}
+
+bool MultipleSequenceAlignmentData::hasEqualLength() const {
+    const int defaultSequenceLength = -1;
+    int sequenceLength = defaultSequenceLength;
+    for (int i = 0, n = rows.size(); i < n; ++i) {
+        if (defaultSequenceLength != sequenceLength && sequenceLength != getMsaRow(i)->getUngappedLength()) {
+            return false;
+        } else {
+            sequenceLength = getMsaRow(i)->getUngappedLength();
+        }
+    }
+    return true;
+}
+
+MultipleSequenceAlignment MultipleSequenceAlignmentData::mid(int start, int len) const {
+    SAFE_POINT(start >= 0 && start + len <= length,
+               QString("Incorrect parameters were passed to MultipleSequenceAlignmentData::mid: "
+                       "start '%1', len '%2', the alignment length is '%3'").arg(start).arg(len).arg(length),
+               MultipleSequenceAlignment());
+
+    MultipleSequenceAlignment res(getName(), alphabet);
+    MaStateCheck check(res.data());
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    foreach (const MultipleSequenceAlignmentRow &row, rows) {
+        MultipleSequenceAlignmentRow mRow = row->mid(start, len, os);
+        mRow->setParentAlignment(res);
+        res->rows << mRow;
+    }
+    res->length = len;
+    return res;
+}
+
+MultipleSequenceAlignmentData & MultipleSequenceAlignmentData::operator+=(const MultipleSequenceAlignmentData &msaData) {
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    SAFE_POINT(msaData.alphabet == alphabet, "Different alphabets in MultipleSequenceAlignmentData::operator+=", *this);
+
+    int nSeq = getNumRows();
+    SAFE_POINT(msaData.getNumRows() == nSeq, "Different number of rows in MultipleSequenceAlignmentData::operator+=", *this);
+
+    U2OpStatus2Log os;
+    for (int i = 0; i < nSeq; i++) {
+        getMsaRow(i)->append(msaData.getMsaRow(i), length, os);
+    }
+
+    length += msaData.length;
+    return *this;
+}
+
+bool MultipleSequenceAlignmentData::operator==(const MultipleSequenceAlignmentData &other) const {
+    bool lengthsAreEqual = (length == other.length);
+    bool alphabetsAreEqual = (alphabet == other.alphabet);
+    bool rowsAreEqual = (rows == other.rows);
+    return lengthsAreEqual && alphabetsAreEqual && rowsAreEqual;
+}
+
+bool MultipleSequenceAlignmentData::operator!=(const MultipleSequenceAlignmentData &other) const {
+    return !operator==(other);
+}
+
+bool MultipleSequenceAlignmentData::crop(const U2Region &region, const QSet<QString> &rowNames, U2OpStatus &os) {
+    if (!(region.startPos >= 0 && region.length > 0 && region.length < length && region.startPos < length)) {
+        os.setError(QString("Incorrect region was passed to MultipleSequenceAlignmentData::crop, "
+                            "startPos '%1', length '%2'").arg(region.startPos).arg(region.length));
+        return false;
+    }
+
+    int cropLen = region.length;
+    if (region.endPos() > length) {
+        cropLen -= (region.endPos() - length);
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    QList<MultipleSequenceAlignmentRow> newList;
+    for (int i = 0 ; i < rows.size(); i++) {
+        MultipleSequenceAlignmentRow row = getMsaRow(i).clone();
+        const QString rowName = row->getName();
+        if (rowNames.contains(rowName)){
+            row->crop(os, region.startPos, cropLen);
+            CHECK_OP(os, false);
+            newList << row;
+        }
+    }
+    setRows(newList);
+
+    length = cropLen;
+    return true;
+}
+
+bool MultipleSequenceAlignmentData::crop(const U2Region &region, U2OpStatus &os) {
+    return crop(region, getRowNames().toSet(), os);
+}
+
+bool MultipleSequenceAlignmentData::crop(int start, int count, U2OpStatus &os) {
+    return crop(U2Region(start, count), os);
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::createRow(const QString &name, const QByteArray &bytes) {
+    QByteArray newSequenceBytes;
+    QList<U2MsaGap> newGapsModel;
+
+    MultipleSequenceAlignmentRowData::splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapsModel);
+    DNASequence newSequence(name, newSequenceBytes);
+
+    U2MsaRow row;
+    return MultipleSequenceAlignmentRow(row, newSequence, newGapsModel, this);
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::createRow(const U2MsaRow &rowInDb, const DNASequence &sequence, const QList<U2MsaGap> &gaps, U2OpStatus &os) {
+    QString errorDescr = "Failed to create a multiple alignment row";
+    if (-1 != sequence.constSequence().indexOf(U2Msa::GAP_CHAR)) {
+        coreLog.trace("Attempted to create an alignment row from a sequence with gaps");
+        os.setError(errorDescr);
+        return MultipleSequenceAlignmentRow();
+    }
+
+    int length = sequence.length();
+    foreach (const U2MsaGap &gap, gaps) {
+        if (gap.offset > length || !gap.isValid()) {
+            coreLog.trace("Incorrect gap model was passed to MultipleSequenceAlignmentData::createRow");
+            os.setError(errorDescr);
+            return MultipleSequenceAlignmentRow();
+        }
+        length += gap.gap;
+    }
+
+    return MultipleSequenceAlignmentRow(rowInDb, sequence, gaps, this);
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::createRow(const MultipleSequenceAlignmentRow &row) {
+    return MultipleSequenceAlignmentRow(row, this);
+}
+
+void MultipleSequenceAlignmentData::setRows(const QList<MultipleSequenceAlignmentRow> &msaRows) {
+    rows = convertToMaRows(msaRows);
+}
+
+void MultipleSequenceAlignmentData::addRow(const QString &name, const QByteArray &bytes) {
+    MultipleSequenceAlignmentRow newRow = createRow(name, bytes);
+    addRowPrivate(newRow, bytes.size(), -1);
+}
+
+void MultipleSequenceAlignmentData::addRow(const QString &name, const QByteArray &bytes, int rowIndex) {
+    MultipleSequenceAlignmentRow newRow = createRow(name, bytes);
+    addRowPrivate(newRow, bytes.size(), rowIndex);
+}
+
+void MultipleSequenceAlignmentData::addRow(const U2MsaRow &rowInDb, const DNASequence &sequence, U2OpStatus &os) {
+    MultipleSequenceAlignmentRow newRow = createRow(rowInDb, sequence, rowInDb.gaps, os);
+    CHECK_OP(os, );
+    addRowPrivate(newRow, rowInDb.length, -1);
+}
+
+void MultipleSequenceAlignmentData::addRow(const QString &name, const DNASequence &sequence, const QList<U2MsaGap> &gaps, U2OpStatus &os) {
+    U2MsaRow row;
+    MultipleSequenceAlignmentRow newRow = createRow(row, sequence, gaps, os);
+    CHECK_OP(os, );
+
+    int len = sequence.length();
+    foreach (const U2MsaGap &gap, gaps) {
+        len += gap.gap;
+    }
+
+    newRow->setName(name);
+    addRowPrivate(newRow, len, -1);
+}
+
+void MultipleSequenceAlignmentData::insertGaps(int row, int pos, int count, U2OpStatus &os) {
+    if (row >= getNumRows() || row < 0 || pos > length || pos < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed "
+            "to MultipleSequenceAlignmentData::insertGaps: row index '%1', pos '%2', count '%3'").arg(row).arg(pos).arg(count));
+        os.setError("Failed to insert gaps into an alignment");
+        return;
+    }
+
+    if (pos == length) {
+        // add trailing gaps --> just increase alignment len
+        length += count;
+        return;
+    }
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    if (pos >= rows[row]->getRowLengthWithoutTrailing()) {
+        length += count;
+        return;
+    }
+    getMsaRow(row)->insertGaps(pos, count, os);
+
+    qint64 rowLength = rows[row]->getRowLengthWithoutTrailing();
+    length = qMax(length, rowLength);
+}
+
+void MultipleSequenceAlignmentData::appendChars(int row, const char *str, int len) {
+    SAFE_POINT(0 <= row && row < getNumRows(),
+        QString("Incorrect row index '%1' in MultipleSequenceAlignmentData::appendChars").arg(row), );
+
+    MultipleSequenceAlignmentRow appendedRow = createRow("", QByteArray(str, len));
+
+    qint64 rowLength = getMsaRow(row)->getRowLength();
+
+    U2OpStatus2Log os;
+    getMsaRow(row)->append(appendedRow, rowLength, os);
+    CHECK_OP(os, );
+
+    length = qMax(length, rowLength + len);
+}
+
+void MultipleSequenceAlignmentData::appendChars(int row, qint64 afterPos, const char *str, int len) {
+    SAFE_POINT(0 <= row && row < getNumRows(),
+        QString("Incorrect row index '%1' in MultipleSequenceAlignmentData::appendChars").arg(row), );
+
+    MultipleSequenceAlignmentRow appendedRow = createRow("", QByteArray(str, len));
+
+    U2OpStatus2Log os;
+    getMsaRow(row)->append(appendedRow, afterPos, os);
+    CHECK_OP(os, );
+
+    length = qMax(length, afterPos + len);
+}
+
+void MultipleSequenceAlignmentData::appendRow(int rowNumber, const MultipleSequenceAlignmentRow &row, bool ignoreTrailingGaps, U2OpStatus &os) {
+    appendRow(rowNumber, ignoreTrailingGaps ? getMsaRow(rowNumber)->getRowLengthWithoutTrailing() : getMsaRow(rowNumber)->getRowLength(), row, os);
+}
+
+void MultipleSequenceAlignmentData::appendRow(int rowNumber, qint64 afterPos, const MultipleSequenceAlignmentRow &row, U2OpStatus &os) {
+    SAFE_POINT(0 <= rowNumber && rowNumber < getNumRows(),
+        QString("Incorrect row index '%1' in MultipleSequenceAlignmentData::appendRow").arg(rowNumber), );
+
+    getMsaRow(rowNumber)->append(row, afterPos, os);
+    CHECK_OP(os, );
+
+    length = qMax(length, afterPos + row->getRowLength());
+}
+
+void MultipleSequenceAlignmentData::removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows) {
+    SAFE_POINT(startPos >= 0 && startPos + nBases <= length && nBases > 0,
+        QString("Incorrect parameters were passed to MultipleSequenceAlignmentData::removeRegion: startPos '%1', "
+        "nBases '%2', the length is '%3'").arg(startPos).arg(nBases).arg(length),);
+    SAFE_POINT(startRow >= 0 && startRow + nRows <= getNumRows() && (nRows > 0 || (nRows == 0 && getNumRows() == 0)),
+        QString("Incorrect parameters were passed to MultipleSequenceAlignmentData::removeRegion: startRow '%1', "
+        "nRows '%2', the number of rows is '%3'").arg(startRow).arg(nRows).arg(getNumRows()),);
+
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    for (int i = startRow + nRows; --i >= startRow;) {
+        getMsaRow(i)->removeChars(startPos, nBases, os);
+        SAFE_POINT_OP(os, );
+
+        if (removeEmptyRows && (0 == getMsaRow(i)->getSequence().length())) {
+            rows.removeAt(i);
+        }
+    }
+
+    if (nRows == rows.size()) {
+        // full columns were removed
+        length -= nBases;
+        if (length == 0) {
+            rows.clear();
+        }
+    }
+}
+
+int MultipleSequenceAlignmentData::getNumRows() const {
+    return rows.size();
+}
+
+void MultipleSequenceAlignmentData::renameRow(int row, const QString &name) {
+    SAFE_POINT(row >= 0 && row < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleSequenceAlignmentData::renameRow: "
+        "the number of rows is '%2'").arg(row).arg(getNumRows()), );
+    SAFE_POINT(!name.isEmpty(),
+        "Incorrect parameter 'name' was passed to MultipleSequenceAlignmentData::renameRow: "
+        "Can't set the name of a row to an empty string", );
+    rows[row]->setName(name);
+}
+
+
+void MultipleSequenceAlignmentData::replaceChars(int row, char origChar, char resultChar) {
+    SAFE_POINT(row >= 0 && row < getNumRows(), QString("Incorrect row index '%1' in MultipleSequenceAlignmentData::replaceChars").arg(row), );
+
+    if (origChar == resultChar) {
+        return;
+    }
+
+    U2OpStatus2Log os;
+    getMsaRow(row)->replaceChars(origChar, resultChar, os);
+}
+
+void MultipleSequenceAlignmentData::setRowContent(int rowNumber, const QByteArray &sequence, int offset) {
+    SAFE_POINT(rowNumber >= 0 && rowNumber < getNumRows(),
+        QString("Incorrect row index '%1' was passed to MultipleSequenceAlignmentData::setRowContent: "
+        "the number of rows is '%2'").arg(rowNumber).arg(getNumRows()), );
+    MaStateCheck check(this);
+    Q_UNUSED(check);
+
+    U2OpStatus2Log os;
+    getMsaRow(rowNumber)->setRowContent(sequence, offset, os);
+    SAFE_POINT_OP(os, );
+
+    length = qMax(length, (qint64)sequence.size() + offset);
+}
+
+void MultipleSequenceAlignmentData::toUpperCase() {
+    for (int i = 0, n = getNumRows(); i < n; i++) {
+        getMsaRow(i)->toUpperCase();
+    }
+}
+
+bool MultipleSequenceAlignmentData::sortRowsBySimilarity(QVector<U2Region> &united) {
+    QList<MultipleSequenceAlignmentRow> oldRows = getMsaRows();
+    QList<MultipleSequenceAlignmentRow> sortedRows;
+    while (!oldRows.isEmpty()) {
+        const MultipleSequenceAlignmentRow row = oldRows.takeFirst();
+        sortedRows << row;
+        int start = sortedRows.size() - 1;
+        int len = 1;
+        QMutableListIterator<MultipleSequenceAlignmentRow> iter(oldRows);
+        while (iter.hasNext()) {
+            const MultipleSequenceAlignmentRow &next = iter.next();
+            if (next->isRowContentEqual(row)) {
+                sortedRows << next;
+                iter.remove();
+                ++len;
+            }
+        }
+        if (len > 1) {
+            united.append(U2Region(start, len));
+        }
+    }
+    if (getMsaRows() != sortedRows) {
+        setRows(sortedRows);
+        return true;
+    }
+    return false;
+}
+
+const QList<MultipleSequenceAlignmentRow> MultipleSequenceAlignmentData::getMsaRows() const {
+    QList<MultipleSequenceAlignmentRow> msaRows;
+    foreach (const MultipleAlignmentRow &maRow, rows) {
+        msaRows << maRow.dynamicCast<MultipleSequenceAlignmentRow>();
+    }
+    return msaRows;
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::getMsaRowByRowId(qint64 rowId, U2OpStatus &os) const {
+    return getRowByRowId(rowId, os).dynamicCast<MultipleSequenceAlignmentRow>(os);
+}
+
+char MultipleSequenceAlignmentData::charAt(int rowNumber, int pos) const {
+    return getMsaRow(rowNumber)->charAt(pos);
+}
+
+bool MultipleSequenceAlignmentData::isGap(int rowNumber, int pos) const {
+    return getMsaRow(rowNumber)->isGap(pos);
+}
+
+void MultipleSequenceAlignmentData::setRowGapModel(int rowNumber, const QList<U2MsaGap> &gapModel) {
+    SAFE_POINT(rowNumber >= 0 && rowNumber < getNumRows(), "Invalid row index", );
+    length = qMax(length, (qint64)MsaRowUtils::getGapsLength(gapModel) + getMsaRow(rowNumber)->sequence.length());
+    getMsaRow(rowNumber)->setGapModel(gapModel);
+}
+
+void MultipleSequenceAlignmentData::setSequenceId(int rowIndex, const U2DataId &sequenceId) {
+    SAFE_POINT(rowIndex >= 0 && rowIndex < getNumRows(), "Invalid row index", );
+    getMsaRow(rowIndex)->setSequenceId(sequenceId);
+}
+
+const MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::getMsaRow(const QString &name) const {
+    return getRow(name).dynamicCast<const MultipleSequenceAlignmentRow>();
+}
+
+MultipleAlignment MultipleSequenceAlignmentData::getCopy() const {
+    return getExplicitCopy();
+}
+
+MultipleSequenceAlignment MultipleSequenceAlignmentData::getExplicitCopy() const {
+    return MultipleSequenceAlignment(new MultipleSequenceAlignmentData(*this));
+}
+
+void MultipleSequenceAlignmentData::copy(const MultipleAlignmentData &other) {
+    try {
+        copy(dynamic_cast<const MultipleSequenceAlignmentData &>(other));
+    } catch (std::bad_cast) {
+        FAIL("Can't cast MultipleAlignmentData to MultipleSequenceAlignmentData", );
+    }
+}
+
+void MultipleSequenceAlignmentData::copy(const MultipleSequenceAlignmentData &other) {
+    clear();
+
+    alphabet = other.alphabet;
+    length = other.length;
+    info = other.info;
+
+    for (int i = 0; i < other.rows.size(); i++) {
+        const MultipleSequenceAlignmentRow row = createRow(other.rows[i]);
+        addRowPrivate(row, other.length, i);
+    }
+}
+
+MultipleAlignmentRow MultipleSequenceAlignmentData::getEmptyRow() const {
+    return MultipleSequenceAlignmentRow();
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.h b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.h
new file mode 100644
index 0000000..35dd1b4
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.h
@@ -0,0 +1,259 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_H_
+
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleAlignment.h"
+#include "MultipleSequenceAlignmentRow.h"
+
+namespace U2 {
+
+class MultipleSequenceAlignmentData;
+class U2Region;
+
+#define MA_OBJECT_NAME QString("Multiple alignment")
+
+class U2CORE_EXPORT MultipleSequenceAlignment : public MultipleAlignment {
+public:
+    MultipleSequenceAlignment(const QString &name = QString(),
+                              const DNAAlphabet *alphabet = NULL,
+                              const QList<MultipleSequenceAlignmentRow> &rows = QList<MultipleSequenceAlignmentRow>());
+    MultipleSequenceAlignment(const MultipleAlignment &ma);
+    MultipleSequenceAlignment(MultipleSequenceAlignmentData *msaData);
+
+    MultipleSequenceAlignmentData * data() const;
+
+    MultipleSequenceAlignmentData & operator*();
+    const MultipleSequenceAlignmentData & operator*() const;
+
+    MultipleSequenceAlignmentData * operator->();
+    const MultipleSequenceAlignmentData * operator->() const;
+
+    MultipleSequenceAlignment clone() const;
+    template <class Derived> inline Derived dynamicCast() const;
+
+private:
+    QSharedPointer<MultipleSequenceAlignmentData> getMsaData() const;
+};
+
+/**
+ * Multiple sequence alignment
+ * The length of the alignment is the maximum length of its rows.
+ * There are minimal checks on the alignment's alphabet, but the client of the class
+ * is expected to keep the conformance of the data and the alphabet.
+ */
+class U2CORE_EXPORT MultipleSequenceAlignmentData : public MultipleAlignmentData {
+    friend class MultipleSequenceAlignment;
+
+protected:
+    /**
+     * Creates a new alignment.
+     * The name must be provided if this is not default alignment.
+     */
+    MultipleSequenceAlignmentData(const QString &name = QString(),
+                                  const DNAAlphabet *alphabet = NULL,
+                                  const QList<MultipleSequenceAlignmentRow> &rows = QList<MultipleSequenceAlignmentRow>());
+    MultipleSequenceAlignmentData(const MultipleSequenceAlignmentData &msaData);
+
+public:
+    MultipleSequenceAlignmentData & operator=(const MultipleSequenceAlignment &msa);
+    MultipleSequenceAlignmentData & operator=(const MultipleSequenceAlignmentData &msaData);
+
+    /** Returns the number of rows in the alignment */
+    int getNumRows() const;
+
+    /**
+     * Recomputes the length of the alignment and makes it as minimal
+     * as possible. All leading gaps columns are removed by default.
+     * Returns "true" if the alignment has been modified.
+     */
+    bool trim(bool removeLeadingGaps = true);
+
+    /**
+     * Removes all gaps from all columns in the alignment.
+     * Returns "true" if the alignment has been changed.
+     */
+    bool simplify();
+
+    /**
+     * Sorts rows by similarity making identical rows sequential.
+     * Returns 'true' if the rows were resorted, and 'false' otherwise.
+     */
+    bool sortRowsBySimilarity(QVector<U2Region> &united);
+
+    /** Returns row of the alignment */
+    inline MultipleSequenceAlignmentRow getMsaRow(int row);
+    inline const MultipleSequenceAlignmentRow getMsaRow(int row) const;
+    const MultipleSequenceAlignmentRow getMsaRow(const QString &name) const;
+
+    /** Returns all rows in the alignment */
+    const QList<MultipleSequenceAlignmentRow> getMsaRows() const;
+
+    MultipleSequenceAlignmentRow getMsaRowByRowId(qint64 rowId, U2OpStatus &os) const;
+
+    /** Returns a character (a gap or a non-gap) in the specified row and position */
+    char charAt(int rowNumber, int pos) const;
+    bool isGap(int rowNumber, int pos) const;
+
+    /**
+     * Inserts 'count' gaps into the specified position.
+     * Can increase the overall alignment length.
+     */
+    void insertGaps(int row, int pos, int count, U2OpStatus &os);
+
+    /**
+     * Removes a region from the alignment.
+     * If "removeEmptyRows" is "true", removes all empty rows from the processed region.
+     * The alignment is trimmed after removing the region.
+     * Can decrease the overall alignment length.
+     */
+    void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows);
+
+    /**
+     * Renames the row with the specified index.
+     * Assumes that the row index is valid and the name is not empty.
+     */
+    void renameRow(int row, const QString &name);
+
+    /**
+     * Sets the new content for the row with the specified index.
+     * Assumes that the row index is valid.
+     * Can modify the overall alignment length (increase or decrease).
+     */
+    void setRowContent(int rowNumber, const QByteArray &sequence, int offset = 0);
+
+    /** Converts all rows' sequences to upper case */
+    void toUpperCase();
+
+    /**
+     * Modifies the alignment by keeping data from the specified region and rows only.
+     * Assumes that the region start is not negative, but it can be greater than a row length.
+     */
+    bool crop(const U2Region &region, const QSet<QString> &rowNames, U2OpStatus &os);
+    bool crop(const U2Region &region, U2OpStatus &os);
+    bool crop(int start, int count, U2OpStatus &os);
+
+    /**
+     * Creates a new alignment from the sub-alignment. Do not trims the result.
+     * Assumes that 'start' >= 0, and 'start + len' is less or equal than the alignment length.
+     */
+    MultipleSequenceAlignment mid(int start, int len) const;
+
+    virtual void setRowGapModel(int rowNumber, const QList<U2MsaGap> &gapModel);
+
+    void setSequenceId(int rowIndex, const U2DataId &sequenceId);
+
+    /**
+     * Adds a new row to the alignment.
+     * If rowIndex == -1 -> appends the row to the alignment.
+     * Otherwise, if rowIndex is incorrect, the closer bound is used (the first or the last row).
+     * Does not trim the original alignment.
+     * Can increase the overall alignment length.
+     */
+    void addRow(const QString &name, const QByteArray &bytes);
+    void addRow(const QString &name, const QByteArray &bytes, int rowIndex);
+    void addRow(const U2MsaRow &rowInDb, const DNASequence &sequence, U2OpStatus &os);
+    void addRow(const QString &name, const DNASequence &sequence, const QList<U2MsaGap> &gaps, U2OpStatus &os);
+
+    /**
+     * Replaces all occurrences of 'origChar' by 'resultChar' in the row with the specified index.
+     * The 'origChar' must be a non-gap character.
+     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
+     * The index must be valid as well.
+     */
+    void replaceChars(int row, char origChar, char resultChar);
+
+    /**
+     * Appends chars to the row with the specified index.
+     * The chars are appended to the alignment end, not to the row end
+     * (i.e. the alignment length is taken into account).
+     * Does NOT recalculate the alignment length!
+     * The index must be valid.
+     */
+    void appendChars(int row, const char *str, int len);
+
+    void appendChars(int row, qint64 afterPos, const char *str, int len);
+
+    void appendRow(int rowNumber, const MultipleSequenceAlignmentRow &rowIdx, bool ignoreTrailingGaps, U2OpStatus &os);
+
+    void appendRow(int rowNumber, qint64 afterPos, const MultipleSequenceAlignmentRow &rowIdx, U2OpStatus &os);
+
+    /** returns "True" if there are no gaps in the alignment */
+    bool hasEmptyGapModel() const;
+
+    /**  returns "True" if all sequences in the alignment have equal lengths */
+    bool hasEqualLength() const;
+
+    /**
+     * Joins two alignments. Alignments must have the same size and alphabet.
+     * Increases the alignment length.
+     */
+    MultipleSequenceAlignmentData & operator+=(const MultipleSequenceAlignmentData &ma);
+
+    /**
+     * Compares two alignments: lengths, alphabets, rows and infos (that include names).
+     */
+    bool operator==(const MultipleSequenceAlignmentData &msaData) const;
+    bool operator!=(const MultipleSequenceAlignmentData &msaData) const;
+
+    MultipleAlignment getCopy() const;
+    MultipleSequenceAlignment getExplicitCopy() const;
+
+private:
+    void copy(const MultipleAlignmentData &other);
+    void copy(const MultipleSequenceAlignmentData &other);
+    MultipleAlignmentRow getEmptyRow() const;
+
+    /** Create a new row (sequence + gap model) from the bytes */
+    MultipleSequenceAlignmentRow createRow(const QString &name, const QByteArray &bytes);
+
+    /**
+     * Sequence must not contain gaps.
+     * All gaps in the gaps model (in 'rowInDb') must be valid and have an offset within the bound of the sequence.
+     */
+    MultipleSequenceAlignmentRow createRow(const U2MsaRow &rowInDb, const DNASequence &sequence, const QList<U2MsaGap> &gaps, U2OpStatus &os);
+
+    MultipleSequenceAlignmentRow createRow(const MultipleSequenceAlignmentRow &row);
+
+    void setRows(const QList<MultipleSequenceAlignmentRow> &msaRows);
+};
+
+inline MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::getMsaRow(int rowIndex) {
+    return getRow(rowIndex).dynamicCast<MultipleSequenceAlignmentRow>();
+}
+
+inline const MultipleSequenceAlignmentRow MultipleSequenceAlignmentData::getMsaRow(int rowIndex) const {
+    return getRow(rowIndex).dynamicCast<const MultipleSequenceAlignmentRow>();
+}
+
+inline bool	operator!=(const MultipleSequenceAlignment &ptr1, const MultipleSequenceAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleSequenceAlignment &ptr1, const MultipleSequenceAlignmentData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleSequenceAlignmentData *ptr1, const MultipleSequenceAlignment &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignment &ptr1, const MultipleSequenceAlignment &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignment &ptr1, const MultipleSequenceAlignmentData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignmentData *ptr1, const MultipleSequenceAlignment &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.cpp b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.cpp
new file mode 100644
index 0000000..6e4af3a
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.cpp
@@ -0,0 +1,617 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <typeinfo>
+
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleSequenceAlignmentRow.h"
+
+namespace U2 {
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow()
+    : MultipleAlignmentRow(new MultipleSequenceAlignmentRowData)
+{
+
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(const MultipleAlignmentRow &maRow)
+    : MultipleAlignmentRow(maRow)
+{
+    SAFE_POINT(NULL != maRowData.dynamicCast<MultipleSequenceAlignmentRowData>(), "Can't cast MultipleAlignmentRow to MultipleSequenceAlignmentRow", );
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRow(new MultipleSequenceAlignmentRowData(msaData))
+{
+
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(MultipleSequenceAlignmentRowData *msaRowData)
+    : MultipleAlignmentRow(msaRowData)
+{
+
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(const U2MsaRow &rowInDb, const DNASequence &sequence, const U2MsaRowGapModel &gaps, MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRow(new MultipleSequenceAlignmentRowData(rowInDb, sequence, gaps, msaData))
+{
+
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(const U2MsaRow &rowInDb, const QString &rowName, const QByteArray &rawData, MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRow(new MultipleSequenceAlignmentRowData(rowInDb, rowName, rawData, msaData))
+{
+
+}
+
+MultipleSequenceAlignmentRow::MultipleSequenceAlignmentRow(const MultipleSequenceAlignmentRow &row, MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRow(new MultipleSequenceAlignmentRowData(row, msaData))
+{
+
+}
+
+MultipleSequenceAlignmentRowData * MultipleSequenceAlignmentRow::data() const {
+    return getMsaRowData().data();
+}
+
+MultipleSequenceAlignmentRowData & MultipleSequenceAlignmentRow::operator*() {
+    return *getMsaRowData();
+}
+
+const MultipleSequenceAlignmentRowData & MultipleSequenceAlignmentRow::operator*() const {
+    return *getMsaRowData();
+}
+
+MultipleSequenceAlignmentRowData * MultipleSequenceAlignmentRow::operator->() {
+    return getMsaRowData().data();
+}
+
+const MultipleSequenceAlignmentRowData * MultipleSequenceAlignmentRow::operator->() const {
+    return getMsaRowData().data();
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentRow::clone() const {
+    return getMsaRowData()->getExplicitCopy();
+}
+
+QSharedPointer<MultipleSequenceAlignmentRowData> MultipleSequenceAlignmentRow::getMsaRowData() const {
+    return maRowData.dynamicCast<MultipleSequenceAlignmentRowData>();
+}
+
+MultipleSequenceAlignmentRowData::MultipleSequenceAlignmentRowData(MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRowData(),
+      alignment(msaData)
+{
+    removeTrailingGaps();
+}
+
+MultipleSequenceAlignmentRowData::MultipleSequenceAlignmentRowData(const U2MsaRow &rowInDb,
+                                                                   const DNASequence &sequence,
+                                                                   const QList<U2MsaGap> &gaps,
+                                                                   MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRowData(sequence, gaps),
+      alignment(msaData),
+      initialRowInDb(rowInDb)
+{
+    SAFE_POINT(alignment != NULL, "Parent MultipleSequenceAlignmentData is NULL", );
+    removeTrailingGaps();
+}
+
+MultipleSequenceAlignmentRowData::MultipleSequenceAlignmentRowData(const U2MsaRow &rowInDb, const QString &rowName, const QByteArray &rawData, MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRowData(),
+      alignment(msaData),
+      initialRowInDb(rowInDb)
+{
+    QByteArray sequenceData;
+    U2MsaRowGapModel gapModel;
+    MaDbiUtils::splitBytesToCharsAndGaps(rawData, sequenceData, gapModel);
+    sequence = DNASequence(rowName, sequenceData);
+    setGapModel(gapModel);
+}
+
+MultipleSequenceAlignmentRowData::MultipleSequenceAlignmentRowData(const MultipleSequenceAlignmentRow &row, MultipleSequenceAlignmentData *msaData)
+    : MultipleAlignmentRowData(row->sequence, row->gaps),
+      alignment(msaData),
+      initialRowInDb(row->initialRowInDb)
+{
+    SAFE_POINT(alignment != NULL, "Parent MultipleSequenceAlignmentData is NULL", );
+}
+
+MultipleSequenceAlignmentRowData::~MultipleSequenceAlignmentRowData() {
+
+}
+
+QString MultipleSequenceAlignmentRowData::getName() const {
+    return sequence.getName();
+}
+
+void MultipleSequenceAlignmentRowData::setName(const QString &name) {
+    sequence.setName(name);
+}
+
+void MultipleSequenceAlignmentRowData::setGapModel(const QList<U2MsaGap> &newGapModel) {
+    gaps = newGapModel;
+    removeTrailingGaps();
+}
+
+qint64 MultipleSequenceAlignmentRowData::getRowId() const {
+    return initialRowInDb.rowId;
+}
+
+void MultipleSequenceAlignmentRowData::setRowId(qint64 rowId) {
+    initialRowInDb.rowId = rowId;
+}
+
+void MultipleSequenceAlignmentRowData::setSequenceId(const U2DataId &sequenceId) {
+    initialRowInDb.sequenceId = sequenceId;
+}
+
+U2MsaRow MultipleSequenceAlignmentRowData::getRowDbInfo() const {
+    U2MsaRow row;
+    row.rowId = initialRowInDb.rowId;
+    row.sequenceId = initialRowInDb.sequenceId;
+    row.gstart = 0;
+    row.gend = sequence.length();
+    row.gaps = gaps;
+    row.length = getRowLengthWithoutTrailing();
+    return row;
+}
+
+void MultipleSequenceAlignmentRowData::setRowDbInfo(const U2MsaRow &dbRow) {
+    initialRowInDb = dbRow;
+}
+
+QByteArray MultipleSequenceAlignmentRowData::toByteArray(U2OpStatus &os, qint64 length) const {
+    if (length < getCoreEnd()) {
+        coreLog.trace("Incorrect length was passed to MultipleSequenceAlignmentRowData::toByteArray");
+        os.setError("Failed to get row data");
+        return QByteArray();
+    }
+
+    if (gaps.isEmpty() && sequence.length() == length) {
+        return sequence.constSequence();
+    }
+
+    QByteArray bytes = joinCharsAndGaps(true, true);
+
+    // Append additional gaps, if necessary
+    if (length > bytes.count()) {
+        QByteArray gapsBytes;
+        gapsBytes.fill(U2Msa::GAP_CHAR, length - bytes.count());
+        bytes.append(gapsBytes);
+    }
+    if (length < bytes.count()) {
+        // cut extra trailing gaps
+        bytes = bytes.left(length);
+    }
+
+    return bytes;
+}
+
+int MultipleSequenceAlignmentRowData::getRowLength() const {
+    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", getRowLengthWithoutTrailing());
+    return alignment->getLength();
+}
+
+QByteArray MultipleSequenceAlignmentRowData::getCore() const {
+    return joinCharsAndGaps(false, false);
+}
+
+QByteArray MultipleSequenceAlignmentRowData::getData() const {
+    return joinCharsAndGaps(true, true);
+}
+
+qint64 MultipleSequenceAlignmentRowData::getCoreLength() const {
+    int coreStart = getCoreStart();
+    int coreEnd = getCoreEnd();
+    int length = coreEnd - coreStart;
+    SAFE_POINT(length >= 0, QString("Internal error in MultipleSequenceAlignmentRowData: coreEnd is %1, coreStart is %2!").arg(coreEnd).arg(coreStart), length);
+    return length;
+}
+
+void MultipleSequenceAlignmentRowData::append(const MultipleSequenceAlignmentRow &anotherRow, int lengthBefore, U2OpStatus &os) {
+    append(*anotherRow, lengthBefore, os);
+}
+
+void MultipleSequenceAlignmentRowData::append(const MultipleSequenceAlignmentRowData &anotherRow, int lengthBefore, U2OpStatus &os) {
+    int rowLength = getRowLengthWithoutTrailing();
+
+    if (lengthBefore < rowLength) {
+        coreLog.trace(QString("Internal error: incorrect length '%1' were passed to MultipleSequenceAlignmentRowData::append,"
+                              "coreEnd is '%2'").arg(lengthBefore).arg(getCoreEnd()));
+        os.setError("Failed to append one row to another");
+        return;
+    }
+
+    // Gap between rows
+    if (lengthBefore > rowLength) {
+        gaps.append(U2MsaGap(getRowLengthWithoutTrailing(), lengthBefore - getRowLengthWithoutTrailing()));
+    }
+
+    // Merge gaps
+    QList<U2MsaGap> anotherRowGaps = anotherRow.getGapModel();
+    for (int i = 0; i < anotherRowGaps.count(); ++i) {
+        anotherRowGaps[i].offset += lengthBefore;
+    }
+    gaps.append(anotherRowGaps);
+    mergeConsecutiveGaps();
+
+    // Merge sequences
+    DNASequenceUtils::append(sequence, anotherRow.sequence);
+}
+
+void MultipleSequenceAlignmentRowData::setRowContent(const DNASequence &newSequence, const U2MsaRowGapModel &newGapModel, U2OpStatus &os) {
+    SAFE_POINT_EXT(!newSequence.constSequence().contains(U2Msa::GAP_CHAR), os.setError("The sequence must be without gaps"), );
+    sequence = newSequence;
+    setGapModel(newGapModel);
+}
+
+void MultipleSequenceAlignmentRowData::setRowContent(const QByteArray &bytes, int offset, U2OpStatus &) {
+    QByteArray newSequenceBytes;
+    QList<U2MsaGap> newGapsModel;
+
+    splitBytesToCharsAndGaps(bytes, newSequenceBytes, newGapsModel);
+    DNASequence newSequence(getName(), newSequenceBytes);
+
+    addOffsetToGapModel(newGapsModel, offset);
+
+    sequence = newSequence;
+    gaps = newGapsModel;
+    removeTrailingGaps();
+}
+
+void MultipleSequenceAlignmentRowData::insertGaps(int pos, int count, U2OpStatus &os) {
+    MsaRowUtils::insertGaps(os, gaps, getRowLengthWithoutTrailing(), pos, count);
+}
+
+void MultipleSequenceAlignmentRowData::removeChars(int pos, int count, U2OpStatus &os) {
+    if (pos < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed to MultipleSequenceAlignmentRowData::removeChars, "
+            "pos '%1', count '%2'").arg(pos).arg(count));
+        os.setError("Can't remove chars from a row");
+        return;
+    }
+
+    if (pos >= getRowLengthWithoutTrailing()) {
+        return;
+    }
+
+    if (pos < getRowLengthWithoutTrailing()) {
+        int startPosInSeq = -1;
+        int endPosInSeq = -1;
+        getStartAndEndSequencePositions(pos, count, startPosInSeq, endPosInSeq);
+
+        // Remove inside a gap
+        if ((startPosInSeq < endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq)) {
+            DNASequenceUtils::removeChars(sequence, startPosInSeq, endPosInSeq, os);
+            CHECK_OP(os, );
+        }
+    }
+
+    // Remove gaps from the gaps model
+    removeGapsFromGapModel(os, pos, count);
+
+    removeTrailingGaps();
+    mergeConsecutiveGaps();
+}
+
+char MultipleSequenceAlignmentRowData::charAt(qint64 position) const {
+    return MsaRowUtils::charAt(sequence.seq, gaps, position);
+}
+
+bool MultipleSequenceAlignmentRowData::isGap(qint64 pos) const {
+    return MsaRowUtils::isGap(sequence.length(), gaps, pos);
+}
+
+qint64 MultipleSequenceAlignmentRowData::getBaseCount(qint64 before) const {
+    const int rowLength = MsaRowUtils::getRowLength(sequence.seq, gaps);
+    const int trimmedRowPos = before < rowLength ? before : rowLength;
+    return MsaRowUtils::getUngappedPosition(gaps, sequence.length(), trimmedRowPos, true);
+}
+
+bool MultipleSequenceAlignmentRowData::isRowContentEqual(const MultipleSequenceAlignmentRow &row) const {
+    return isRowContentEqual(*row);
+}
+
+bool MultipleSequenceAlignmentRowData::isRowContentEqual(const MultipleSequenceAlignmentRowData &row) const {
+    if (MatchExactly == DNASequenceUtils::compare(sequence, row.getSequence())) {
+        if (sequence.length() == 0) {
+            return true;
+        } else {
+            QList<U2MsaGap> firstRowGaps = gaps;
+            if  (!firstRowGaps.isEmpty() && (U2Msa::GAP_CHAR == charAt(0))) {
+                firstRowGaps.removeFirst();
+            }
+
+            QList<U2MsaGap> secondRowGaps = row.getGapModel();
+            if (!secondRowGaps.isEmpty() && (U2Msa::GAP_CHAR == row.charAt(0))) {
+                secondRowGaps.removeFirst();
+            }
+
+            if (firstRowGaps == secondRowGaps) {
+                return true;
+            }
+        }
+    }
+
+    return false;
+}
+
+bool MultipleSequenceAlignmentRowData::operator!=(const MultipleSequenceAlignmentRowData &msaRowData) const {
+    return !(*this == msaRowData);
+}
+
+bool MultipleSequenceAlignmentRowData::operator!=(const MultipleAlignmentRowData &maRowData) const {
+    return !(*this == maRowData);
+}
+
+bool MultipleSequenceAlignmentRowData::operator==(const MultipleSequenceAlignmentRowData &msaRowData) const {
+    return isRowContentEqual(msaRowData);
+}
+
+bool MultipleSequenceAlignmentRowData::operator==(const MultipleAlignmentRowData &maRowData) const {
+    try {
+        return  (*this == dynamic_cast<const MultipleSequenceAlignmentRowData &>(maRowData));
+    } catch (std::bad_cast) {
+        FAIL("Can't cast MultipleAlignmentRowData to MultipleSequenceAlignmentRowData", true);
+    }
+}
+
+void MultipleSequenceAlignmentRowData::crop(U2OpStatus &os, qint64 startPosition, qint64 count) {
+    if (startPosition < 0 || count < 0) {
+        coreLog.trace(QString("Internal error: incorrect parameters were passed to MultipleSequenceAlignmentRowData::crop, "
+            "startPos '%1', length '%2', row length '%3'").arg(startPosition).arg(count).arg(getRowLength()));
+        os.setError("Can't crop a row!");
+        return;
+    }
+
+    int initialRowLength = getRowLength();
+    int initialSeqLength = getUngappedLength();
+
+    if (startPosition >= getRowLengthWithoutTrailing()) {
+        // Clear the row content
+        DNASequenceUtils::makeEmpty(sequence);
+    } else {
+        int startPosInSeq = -1;
+        int endPosInSeq = -1;
+        getStartAndEndSequencePositions(startPosition, count, startPosInSeq, endPosInSeq);
+
+        // Remove inside a gap
+        if ((startPosInSeq <= endPosInSeq) && (-1 != startPosInSeq) && (-1 != endPosInSeq)) {
+            if (endPosInSeq < initialSeqLength) {
+                DNASequenceUtils::removeChars(sequence, endPosInSeq, getUngappedLength(), os);
+                CHECK_OP(os, );
+            }
+
+            if (startPosInSeq > 0) {
+                DNASequenceUtils::removeChars(sequence, 0, startPosInSeq, os);
+                CHECK_OP(os, );
+            }
+        }
+    }
+
+    if (startPosition + count < initialRowLength) {
+        removeGapsFromGapModel(os, startPosition + count, initialRowLength - startPosition - count);
+    }
+
+    if (startPosition > 0) {
+        removeGapsFromGapModel(os, 0, startPosition);
+    }
+    removeTrailingGaps();
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentRowData::mid(int pos, int count, U2OpStatus &os) const {
+    MultipleSequenceAlignmentRow row = getExplicitCopy();
+    row->crop(os, pos, count);
+    return row;
+}
+
+void MultipleSequenceAlignmentRowData::toUpperCase() {
+    DNASequenceUtils::toUpperCase(sequence);
+}
+
+void MultipleSequenceAlignmentRowData::replaceChars(char origChar, char resultChar, U2OpStatus &os) {
+    if (U2Msa::GAP_CHAR == origChar) {
+        coreLog.trace("The original char can't be a gap in MultipleSequenceAlignmentRowData::replaceChars");
+        os.setError("Failed to replace chars in an alignment row");
+        return;
+    }
+
+    if (U2Msa::GAP_CHAR == resultChar) {
+        // Get indexes of all 'origChar' characters in the row sequence
+        QList<int> gapsIndexes;
+        for (int i = 0; i < getRowLength(); i++) {
+            if (origChar == charAt(i)) {
+                gapsIndexes.append(i);
+            }
+        }
+
+        if (gapsIndexes.isEmpty()) {
+            return; // There is nothing to replace
+        }
+
+        // Remove all 'origChar' characters from the row sequence
+        sequence.seq.replace(origChar, "");
+
+        // Re-calculate the gaps model
+        QList<U2MsaGap> newGapsModel = gaps;
+        for (int i = 0; i < gapsIndexes.size(); ++i) {
+            int index = gapsIndexes[i];
+            U2MsaGap gap(index, 1);
+            newGapsModel.append(gap);
+        }
+        qSort(newGapsModel.begin(), newGapsModel.end(), U2MsaGap::lessThan);
+
+        // Replace the gaps model with the new one
+        gaps = newGapsModel;
+        mergeConsecutiveGaps();
+    } else {
+        // Just replace all occurrences of 'origChar' by 'resultChar'
+        sequence.seq.replace(origChar, resultChar);
+    }
+}
+
+MultipleSequenceAlignmentRow MultipleSequenceAlignmentRowData::getExplicitCopy() const {
+    return MultipleSequenceAlignmentRow(new MultipleSequenceAlignmentRowData(*this));
+}
+
+void MultipleSequenceAlignmentRowData::splitBytesToCharsAndGaps(const QByteArray &input, QByteArray &seqBytes, QList<U2MsaGap> &gapsModel) {
+    MaDbiUtils::splitBytesToCharsAndGaps(input, seqBytes, gapsModel);
+}
+
+void MultipleSequenceAlignmentRowData::addOffsetToGapModel(QList<U2MsaGap> &gapModel, int offset) {
+    if (0 == offset) {
+        return;
+    }
+
+    if (!gapModel.isEmpty()) {
+        U2MsaGap &firstGap = gapModel[0];
+        if (0 == firstGap.offset) {
+            firstGap.gap += offset;
+        } else {
+            SAFE_POINT(offset >= 0, "Negative gap offset", );
+            U2MsaGap beginningGap(0, offset);
+            gapModel.insert(0, beginningGap);
+        }
+
+        // Shift other gaps
+        if (gapModel.count() > 1) {
+            for (int i = 1; i < gapModel.count(); ++i) {
+                qint64 newOffset = gapModel[i].offset + offset;
+                SAFE_POINT(newOffset >= 0, "Negative gap offset", );
+                gapModel[i].offset = newOffset;
+            }
+        }
+    } else {
+        SAFE_POINT(offset >= 0, "Negative gap offset", );
+        U2MsaGap gap(0, offset);
+        gapModel.append(gap);
+    }
+}
+
+QByteArray MultipleSequenceAlignmentRowData::joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const {
+    QByteArray bytes = sequence.constSequence();
+    int beginningOffset = 0;
+
+    if (gaps.isEmpty()) {
+        return bytes;
+    }
+
+    for (int i = 0; i < gaps.size(); ++i) {
+        QByteArray gapsBytes;
+        if (!keepOffset && (0 == gaps[i].offset)) {
+            beginningOffset = gaps[i].gap;
+            continue;
+        }
+
+        gapsBytes.fill(U2Msa::GAP_CHAR, gaps[i].gap);
+        bytes.insert(gaps[i].offset - beginningOffset, gapsBytes);
+    }
+    SAFE_POINT(alignment != NULL, "Parent MAlignment is NULL", QByteArray());
+    if (keepTrailingGaps && bytes.size() < alignment->getLength()) {
+        QByteArray gapsBytes;
+        gapsBytes.fill(U2Msa::GAP_CHAR, alignment->getLength() - bytes.size());
+        bytes.append(gapsBytes);
+    }
+
+    return bytes;
+}
+
+void MultipleSequenceAlignmentRowData::mergeConsecutiveGaps() {
+    MsaRowUtils::mergeConsecutiveGaps(gaps);
+}
+
+void MultipleSequenceAlignmentRowData::removeTrailingGaps() {
+    if (gaps.isEmpty()) {
+        return;
+    }
+
+    // If the last char in the row is gap, remove the last gap
+    MsaRowUtils::removeTrailingGapsFromModel(sequence.length(), gaps);
+}
+
+void MultipleSequenceAlignmentRowData::getStartAndEndSequencePositions(int pos, int count, int &startPosInSeq, int &endPosInSeq) {
+    int rowLengthWithoutTrailingGap = getRowLengthWithoutTrailing();
+    SAFE_POINT(pos < rowLengthWithoutTrailingGap,
+        QString("Incorrect position '%1' in MultipleSequenceAlignmentRowData::getStartAndEndSequencePosition, "
+        "row length without trailing gaps is '%2'").arg(pos).arg(rowLengthWithoutTrailingGap),);
+
+    // Remove chars from the sequence
+    // Calculate start position in the sequence
+    if (U2Msa::GAP_CHAR == charAt(pos)) {
+        int i = 1;
+        while (U2Msa::GAP_CHAR == charAt(pos + i)) {
+            if (getRowLength() == pos + i) {
+                break;
+            }
+            i++;
+        }
+        startPosInSeq = getUngappedPosition(pos + i);
+    } else {
+        startPosInSeq = getUngappedPosition(pos);
+    }
+
+    // Calculate end position in the sequence
+    int endRegionPos = pos + count; // non-inclusive
+
+    if (endRegionPos > rowLengthWithoutTrailingGap) {
+        endRegionPos = rowLengthWithoutTrailingGap;
+    }
+
+    if (endRegionPos == rowLengthWithoutTrailingGap) {
+        endPosInSeq = getUngappedLength();
+    } else {
+        if (U2Msa::GAP_CHAR == charAt(endRegionPos)) {
+            int i = 1;
+            while (U2Msa::GAP_CHAR == charAt(endRegionPos + i)) {
+                if (getRowLength() == endRegionPos + i) {
+                    break;
+                }
+                i++;
+            }
+            endPosInSeq = getUngappedPosition(endRegionPos + i);
+        } else {
+            endPosInSeq = getUngappedPosition(endRegionPos);
+        }
+    }
+}
+
+void MultipleSequenceAlignmentRowData::removeGapsFromGapModel(U2OpStatus &os, int pos, int count) {
+    MsaRowUtils::removeGaps(os, gaps, getRowLengthWithoutTrailing(), pos, count);
+}
+
+void MultipleSequenceAlignmentRowData::setParentAlignment(const MultipleSequenceAlignment &msa) {
+    setParentAlignment(msa.data());
+}
+
+void MultipleSequenceAlignmentRowData::setParentAlignment(MultipleSequenceAlignmentData *msaData) {
+    alignment = msaData;
+}
+
+int MultipleSequenceAlignmentRowData::getCoreStart() const {
+    return MsaRowUtils::getCoreStart(gaps);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.h b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.h
new file mode 100644
index 0000000..e61a483
--- /dev/null
+++ b/src/corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.h
@@ -0,0 +1,301 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_ROW_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_ROW_H_
+
+#include <U2Core/DNASequence.h>
+#include <U2Core/MsaRowUtils.h>
+#include <U2Core/U2Msa.h>
+
+#include "MultipleAlignmentRow.h"
+
+namespace U2 {
+
+class DNASequence;
+class MultipleSequenceAlignment;
+class MultipleSequenceAlignmentData;
+class MultipleSequenceAlignmentRowData;
+class U2OpStatus;
+
+class U2CORE_EXPORT MultipleSequenceAlignmentRow : public MultipleAlignmentRow {
+public:
+    MultipleSequenceAlignmentRow();
+    MultipleSequenceAlignmentRow(const MultipleAlignmentRow &maRow);
+    MultipleSequenceAlignmentRow(MultipleSequenceAlignmentData *msaData);
+    MultipleSequenceAlignmentRow(MultipleSequenceAlignmentRowData *msaRowData);
+
+    /** Creates a row in memory. */
+    MultipleSequenceAlignmentRow(const U2MsaRow &rowInDb, const DNASequence &sequence, const U2MsaRowGapModel &gaps, MultipleSequenceAlignmentData *msaData);
+    MultipleSequenceAlignmentRow(const U2MsaRow &rowInDb, const QString &rowName, const QByteArray &rawData, MultipleSequenceAlignmentData *msaData);
+    MultipleSequenceAlignmentRow(const MultipleSequenceAlignmentRow &row, MultipleSequenceAlignmentData *msaData);
+
+    MultipleSequenceAlignmentRowData * data() const;
+
+    MultipleSequenceAlignmentRowData & operator*();
+    const MultipleSequenceAlignmentRowData & operator*() const;
+
+    MultipleSequenceAlignmentRowData * operator->();
+    const MultipleSequenceAlignmentRowData * operator->() const;
+
+    MultipleSequenceAlignmentRow clone() const;
+
+private:
+    QSharedPointer<MultipleSequenceAlignmentRowData> getMsaRowData() const;
+};
+
+/**
+ * A row in a multiple alignment structure.
+ * The row consists of a sequence without gaps
+ * and a gap model.
+ * A row core is an obsolete concept. Currently,
+ * it exactly equals to the row (offset always equals to zero).
+ */
+class U2CORE_EXPORT MultipleSequenceAlignmentRowData : public MultipleAlignmentRowData {
+    friend class MultipleSequenceAlignmentData;
+    friend class MultipleSequenceAlignmentRow;
+
+protected:
+    /** Do NOT create a row without an alignment! */
+    MultipleSequenceAlignmentRowData(MultipleSequenceAlignmentData *msaData = NULL);
+
+    /** Creates a row in memory. */
+    MultipleSequenceAlignmentRowData(const U2MsaRow &rowInDb, const DNASequence &sequence, const QList<U2MsaGap> &gaps, MultipleSequenceAlignmentData *msaData);
+    MultipleSequenceAlignmentRowData(const U2MsaRow &rowInDb, const QString &rowName, const QByteArray &rawData, MultipleSequenceAlignmentData *msaData);
+    MultipleSequenceAlignmentRowData(const MultipleSequenceAlignmentRow &row, MultipleSequenceAlignmentData *msaData);
+
+public:
+    virtual ~MultipleSequenceAlignmentRowData();
+
+    /** Name of the row (equals to the sequence name), can be empty */
+    QString getName() const;
+    void setName(const QString& name);
+
+    /** Returns the list of gaps for the row */
+    inline const U2MsaRowGapModel & getGapModel() const;
+
+    /** Careful, the new gap model is not validated! */
+    void setGapModel(const QList<U2MsaGap> &newGapModel);
+
+    /** Returns the row sequence (without gaps) */
+    inline const DNASequence & getSequence() const;
+
+    /** Returns ID of the row in the database. */
+    qint64 getRowId() const;
+
+    void setRowId(qint64 rowId);
+
+    void setSequenceId(const U2DataId &sequenceId);
+
+    /** Returns ID of the row sequence in the database. */
+    U2MsaRow getRowDbInfo() const;
+
+    /** Sets database IDs for row and sequence */
+    void setRowDbInfo(const U2MsaRow &dbRow);
+
+    /**
+     * The length must be greater or equal to the row length.
+     * When the specified length is greater, an appropriate number of
+     * trailing gaps are appended to the end of the byte array.
+     */
+    QByteArray toByteArray(U2OpStatus &os, qint64 length) const;
+
+    /** Returns length of the sequence + number of gaps including trailing gaps (if any) */
+    int getRowLength() const;
+
+    /** Returns length of the sequence + number of gaps. Doesn't include trailing gaps. */
+    inline qint64 getRowLengthWithoutTrailing() const;
+
+    /** Packed version: returns the row without leading and trailing gaps */
+    QByteArray getCore() const;
+
+    /** Returns the row the way it is -- with leading and trailing gaps */
+    QByteArray getData() const;
+
+    /** Obsolete. Always return the row length (non-inclusive!) */
+    inline int getCoreEnd() const;
+
+    /** Obsolete. Always returns zero. */
+    int getCoreStart() const;
+
+    /** Obsolete. The length of the row core */
+    qint64 getCoreLength() const;
+
+    /** Removes all gaps. Returns true if changed. */
+    virtual inline bool simplify();
+
+    /** Adds anotherRow data to this row(ingores trailing gaps), "lengthBefore" must be greater than this row's length. */
+    virtual void append(const MultipleSequenceAlignmentRow &anotherRow, int lengthBefore, U2OpStatus &os);
+    virtual void append(const MultipleSequenceAlignmentRowData &anotherRow, int lengthBefore, U2OpStatus &os);
+
+    /**
+     * Sets new sequence and gap model.
+     * If the sequence is empty, the offset is ignored (if any).
+     */
+    void setRowContent(const DNASequence &sequence, const U2MsaRowGapModel &gapModel, U2OpStatus &os);
+    void setRowContent(const QByteArray &bytes, int offset, U2OpStatus &os);
+
+    /**
+     * Inserts 'count' gaps into the specified position, if possible.
+     * If position is bigger than the row length or negative, does nothing.
+     * Returns incorrect status if 'count' is negative.
+     */
+    virtual void insertGaps(int pos, int count, U2OpStatus &os);
+
+    /**
+     * Removes up to 'count' characters starting from the specified position
+     * If position is bigger than the row length, does nothing.
+     * Returns incorrect status if 'pos' or 'count' is negative.
+     */
+    virtual void removeChars(int pos, int count, U2OpStatus& os);
+
+    /**
+     * Returns a character in row at the specified position.
+     * If the specified position is outside the row bounds, returns a gap.
+     */
+    char charAt(qint64 position) const;
+    bool isGap(qint64 pos) const;
+
+    /**
+     * Returns base count located leftward to the 'before' position in the alignment.
+     */
+    qint64 getBaseCount(qint64 before) const;
+
+    /**
+     * Exactly compares the rows. Sequences and gap models must match.
+     * However, the rows are considered equal if they differ by trailing gaps only.
+     */
+    virtual bool isRowContentEqual(const MultipleSequenceAlignmentRow &row) const;
+    virtual bool isRowContentEqual(const MultipleSequenceAlignmentRowData &rowData) const;
+
+    /** Compares 2 rows. Rows are equal if their contents and names are equal. */
+    bool operator!=(const MultipleSequenceAlignmentRowData &msaRowData) const;
+    bool operator!=(const MultipleAlignmentRowData &maRowData) const;
+    bool operator==(const MultipleSequenceAlignmentRowData &msaRowData) const;
+    bool operator==(const MultipleAlignmentRowData &maRowData) const;
+
+    /**
+     * Crops the row -> keeps only specified region in the row.
+     * 'pos' and 'pos + count' can be greater than the row length.
+     * Keeps trailing gaps.
+     */
+    virtual void crop(U2OpStatus &os, qint64 startPosition, qint64 count);
+
+    /**
+     * Returns new row of the specified 'count' length, started from 'pos'.
+     * 'pos' and 'pos + count' can be greater than the row length.
+     * Keeps trailing gaps.
+     */
+    MultipleSequenceAlignmentRow mid(int pos, int count, U2OpStatus &os) const;
+
+    /** Converts the row sequence to upper case */
+    virtual void toUpperCase();
+
+    /**
+     * Replaces all occurrences of 'origChar' by 'resultChar'.
+     * The 'origChar' must be a non-gap character.
+     * The 'resultChar' can be a gap, gaps model is recalculated in this case.
+     */
+    virtual void replaceChars(char origChar, char resultChar, U2OpStatus &os);
+
+    MultipleSequenceAlignmentRow getExplicitCopy() const;
+
+private:
+    /** Splits input to sequence bytes and gaps model */
+    static void splitBytesToCharsAndGaps(const QByteArray &input, QByteArray &seqBytes, QList<U2MsaGap> &gapModel);
+
+    /**
+     * Add "offset" of gaps to the beginning of the row
+     * Warning: it is not verified that the row sequence is not empty.
+     */
+    static void addOffsetToGapModel(QList<U2MsaGap> &gapModel, int offset);
+
+    /**
+     * Joins sequence chars and gaps into one byte array.
+     * "keepOffset" specifies to take into account gaps at the beginning of the row.
+     */
+    QByteArray joinCharsAndGaps(bool keepOffset, bool keepTrailingGaps) const;
+
+    /** Gets the length of all gaps */
+    inline int getGapsLength() const;
+
+    /** If there are consecutive gaps in the gaps model, merges them into one gap */
+    void mergeConsecutiveGaps();
+
+    /** The row must not contain trailing gaps, this method is used to assure it after the row modification */
+    void removeTrailingGaps();
+
+    /**
+     * Calculates start and end position in the sequence,
+     * depending on the start position in the row and the 'count' character from it
+     */
+    void getStartAndEndSequencePositions(int pos, int count, int &startPosInSeq, int &endPosInSeq);
+
+    /** Removing gaps from the row between position 'pos' and 'pos + count' */
+    void removeGapsFromGapModel(U2OpStatus &os, int pos, int count);
+
+    void setParentAlignment(const MultipleSequenceAlignment &msa);
+    void setParentAlignment(MultipleSequenceAlignmentData *msaData);
+
+    MultipleSequenceAlignmentData *alignment;
+
+    /** The row in the database */
+    U2MsaRow initialRowInDb;
+};
+
+inline const U2MsaRowGapModel & MultipleSequenceAlignmentRowData::getGapModel() const {
+    return gaps;
+}
+
+inline const DNASequence & MultipleSequenceAlignmentRowData::getSequence() const {
+    return sequence;
+}
+
+inline qint64 MultipleSequenceAlignmentRowData::getRowLengthWithoutTrailing() const {
+    return MsaRowUtils::getRowLength(sequence.seq, gaps);
+}
+
+inline int MultipleSequenceAlignmentRowData::getCoreEnd() const {
+    return getRowLengthWithoutTrailing();
+}
+
+inline bool MultipleSequenceAlignmentRowData::simplify() {
+    if (gaps.count() > 0) {
+        gaps.clear();
+        return true;
+    }
+    return false;
+}
+
+inline int MultipleSequenceAlignmentRowData::getGapsLength() const {
+    return MsaRowUtils::getGapsLength(gaps);
+}
+
+inline bool	operator!=(const MultipleSequenceAlignmentRow &ptr1, const MultipleSequenceAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleSequenceAlignmentRow &ptr1, const MultipleSequenceAlignmentRowData *ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator!=(const MultipleSequenceAlignmentRowData *ptr1, const MultipleSequenceAlignmentRow &ptr2) { return *ptr1 != *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignmentRow &ptr1, const MultipleSequenceAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignmentRow &ptr1, const MultipleSequenceAlignmentRowData *ptr2) { return *ptr1 == *ptr2; }
+inline bool	operator==(const MultipleSequenceAlignmentRowData *ptr1, const MultipleSequenceAlignmentRow &ptr2) { return *ptr1 == *ptr2; }
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_SEQUENCE_ALIGNMENT_ROW_H_
diff --git a/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.cpp b/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.cpp
index 3262eba..879c5ee 100644
--- a/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.cpp
+++ b/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <U2Core/AppContext.h>
+#include <U2Core/U2DbiPackUtils.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2SafePoints.h>
@@ -149,6 +150,25 @@ void RawDataUdrSchema::writeContent(const QByteArray &data, const U2EntityRef &o
     oStream->write(data.data(), data.size(), os);
 }
 
+void RawDataUdrSchema::writeContent(const U2DataId &masterId, const QByteArray &data, const U2EntityRef &objRef, U2OpStatus &os) {
+    DbiHelper con(objRef.dbiRef, os);
+    CHECK_OP(os, );
+    QScopedPointer<ModificationAction> updateAction(con.dbi->getModificationAction(masterId));
+    U2TrackModType trackMod = updateAction->prepare(os);
+    CHECK_OP(os, );
+
+    QByteArray modDetails;
+    if (trackMod == TrackOnUpdate) {
+        QByteArray olderData = readAllContent(objRef, os);
+        modDetails = U2DbiPackUtils::packUdr(olderData, data);
+    }
+
+    writeContent(data, objRef, os);
+
+    updateAction->addModification(objRef.entityId, U2ModType::udrUpdated, modDetails, os);
+    updateAction->complete(os);
+}
+
 QByteArray RawDataUdrSchema::readAllContent(const U2EntityRef &objRef, U2OpStatus &os) {
     DbiHelper con(objRef.dbiRef, os);
     CHECK_OP(os, "");
diff --git a/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.h b/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.h
index 9e18f0c..653aa55 100644
--- a/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.h
+++ b/src/corelibs/U2Core/src/datatype/udr/RawDataUdrSchema.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,6 +69,7 @@ public:
      * Updates the data of the object by provided @objRef.
      */
     static void writeContent(const QByteArray &data, const U2EntityRef &objRef, U2OpStatus &os);
+    static void writeContent(const U2DataId& masterId, const QByteArray &data, const U2EntityRef &objRef, U2OpStatus &os);
 
     /**
      * Returns the data of the object by provided @objRef.
diff --git a/src/corelibs/U2Core/src/dbi/DbiConnection.cpp b/src/corelibs/U2Core/src/dbi/DbiConnection.cpp
index 5a44782..e30faa2 100644
--- a/src/corelibs/U2Core/src/dbi/DbiConnection.cpp
+++ b/src/corelibs/U2Core/src/dbi/DbiConnection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/DbiConnection.h b/src/corelibs/U2Core/src/dbi/DbiConnection.h
index f7ebfde..9047a3f 100644
--- a/src/corelibs/U2Core/src/dbi/DbiConnection.h
+++ b/src/corelibs/U2Core/src/dbi/DbiConnection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.cpp b/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.cpp
index 3c418ba..0b6d046 100644
--- a/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.cpp
+++ b/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AssemblyObject.h>
+#include <U2Core/Counter.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/IOAdapter.h>
@@ -28,6 +29,7 @@
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2ObjectRelationsDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceDbi.h>
@@ -44,14 +46,15 @@ DbiDocumentFormat::DbiDocumentFormat(const U2DbiFactoryId& _id, const DocumentFo
     formatId = _formatId;
     formatName = _formatName;
     formatDescription = tr("ugenedb is a internal UGENE database file format");
-    supportedObjectTypes+=GObjectTypes::ASSEMBLY;
+    supportedObjectTypes += GObjectTypes::ASSEMBLY;
+    supportedObjectTypes += GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT;
+    supportedObjectTypes += GObjectTypes::SEQUENCE;
+    supportedObjectTypes += GObjectTypes::ANNOTATION_TABLE;
     formatFlags|=DocumentFormatFlag_NoPack;
     formatFlags|=DocumentFormatFlag_NoFullMemoryLoad;
     formatFlags|=DocumentFormatFlag_DirectWriteOperations;
 }
 
-
-
 static void renameObjectsIfNamesEqual(QList<GObject*> & objs) {
     for(int i = 0; i < objs.size(); ++i) {
         int howManyEquals = 0;
@@ -95,6 +98,7 @@ Document* DbiDocumentFormat::loadDocument(IOAdapter* io, const U2DbiRef& dstDbiR
     QString lockReason = handle.dbi->isReadOnly() ? "The database is read-only" : "";
     Document* d = new Document(this, io->getFactory(), io->getURL(), dstDbiRef, objects, fs, lockReason);
     d->setDocumentOwnsDbiResources(false);
+    d->setModificationTrack(false);
 
     return d;
 }
@@ -104,6 +108,10 @@ QList<GObject *> DbiDocumentFormat::prepareObjects(DbiConnection &handle, const
     U2EntityRef ref;
     ref.dbiRef = handle.dbi->getDbiRef();
 
+    QMap<U2DataId, GObject*> match;
+
+    bool hasMca = false;
+
     foreach(const U2DataId &id, objectIds) {
         U2OpStatus2Log status;
         ref.entityId = id;
@@ -112,18 +120,44 @@ QList<GObject *> DbiDocumentFormat::prepareObjects(DbiConnection &handle, const
         handle.dbi->getObjectDbi()->getObject(object, id, status);
         CHECK_OPERATION(!status.isCoR(), continue);
 
+
         if (object.visualName.isEmpty()) {
             object.visualName = "Unnamed object";
         }
 
         GObject *gobject = GObjectUtils::createObject(ref.dbiRef, id, object.visualName);
         CHECK_OPERATION(NULL != gobject, continue);
+        hasMca |= (gobject->getGObjectType() == GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT);
+
+        match[id] = gobject;
         objects << gobject;
     }
 
+    GRUNTIME_NAMED_CONDITION_COUNTER(tvar, cvar, hasMca, "The number of opening of the ugenedb files with Sanger data", "");
+
+    if (handle.dbi->getObjectRelationsDbi() != NULL) {
+        foreach(const U2DataId &id, match.keys()) {
+            U2OpStatus2Log status;
+            GObject* srcObj = match.value(id, NULL);
+            SAFE_POINT(srcObj != NULL, "Source object is NULL", QList<GObject *>());
+            QList<GObjectRelation> gRelations;
+            QList<U2ObjectRelation> relations = handle.dbi->getObjectRelationsDbi()->getObjectRelations(id, status);
+            foreach (const U2ObjectRelation& r, relations) {
+                GObject* relatedObject = match[r.referencedObject];
+                if (relatedObject == NULL) {
+                    continue;
+                }
+                // SANGER_TODO: dbiId - url, should not be left like this
+                GObjectReference relatedRef(handle.dbi->getDbiId(), relatedObject->getGObjectName(), relatedObject->getGObjectType(), relatedObject->getEntityRef());
+                GObjectRelation gRelation(relatedRef, r.relationRole);
+                gRelations << gRelation;
+            }
+            srcObj->setObjectRelations(gRelations);
+        }
+    }
+
     return objects;
 }
-
 QList<GObject *> DbiDocumentFormat::cloneObjects(const QList<GObject *> &srcObjects, const U2DbiRef &dstDbiRef, const QVariantMap &hints, U2OpStatus &os) {
     QList<GObject *> clonedObjects;
     CHECK_EXT(dstDbiRef.isValid(), os.setError(tr("Invalid destination database reference")), clonedObjects);
@@ -150,6 +184,10 @@ void DbiDocumentFormat::storeDocument(Document* d, IOAdapter* ioAdapter, U2OpSta
     CHECK_OP(os, );
     Q_UNUSED(dstCon);
 
+    // The relations should be saved
+    QMap<GObject*, GObject*> clonedObjects;
+    QMap<GObjectReference, GObjectReference> match;
+
     foreach (GObject *object, d->getObjects()) {
         if (!supportedObjectTypes.contains(object->getGObjectType())) {
             continue;
@@ -164,8 +202,24 @@ void DbiDocumentFormat::storeDocument(Document* d, IOAdapter* ioAdapter, U2OpSta
         GObject *resultObject = object->clone(dstDbiRef, os);
         CHECK_OP(os, );
 
-        delete resultObject;
+        clonedObjects[object] = resultObject;
+        match[GObjectReference(object, false)] = GObjectReference(url, resultObject->getGObjectName(),
+                                                                  resultObject->getGObjectType(), resultObject->getEntityRef());
     }
+
+    foreach (GObject* initialObj, clonedObjects.keys()) {
+       GObject* cloned = clonedObjects[initialObj];
+       QList<GObjectRelation> relations;
+       foreach (const GObjectRelation& r, initialObj->getObjectRelations()) {
+           if (match.contains(r.ref)) {
+               relations << GObjectRelation(match[r.ref], r.role);
+           }
+       }
+       cloned->setObjectRelations(relations);
+    }
+
+    qDeleteAll(clonedObjects);
+    clonedObjects.clear();
 }
 
 FormatCheckResult DbiDocumentFormat::checkRawData(const QByteArray& rawData, const GUrl& url) const {
diff --git a/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.h b/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.h
index 72ad4c5..1d291eb 100644
--- a/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.h
+++ b/src/corelibs/U2Core/src/dbi/DbiDocumentFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,9 +50,9 @@ protected:
     QList<GObject *> cloneObjects(const QList<GObject *> &srcObjects, const U2DbiRef &dstDbiRef, const QVariantMap &hints, U2OpStatus &os);
 
 private:
-    QString             formatName;
-    U2DbiFactoryId      id;
-    DocumentFormatId    formatId;
+    QString                  formatName;
+    U2DbiFactoryId           id;
+    DocumentFormatId         formatId;
 };
 
 }//namespace
diff --git a/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h b/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
index 352a127..27879e2 100644
--- a/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2AbstractDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2AssemblyDbi.h b/src/corelibs/U2Core/src/dbi/U2AssemblyDbi.h
index 3cd5acf..15aaf53 100644
--- a/src/corelibs/U2Core/src/dbi/U2AssemblyDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2AssemblyDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,6 +56,7 @@ public:
 class U2AssemblyReadsImportInfo {
 public:
     U2AssemblyReadsImportInfo(U2AssemblyReadsImportInfo *parentInfo = NULL) : nReads(0), packed(false), parentInfo(parentInfo) {}
+    virtual ~U2AssemblyReadsImportInfo() {}
 
     /** Number of reads added during import */
     qint64 nReads;
diff --git a/src/corelibs/U2Core/src/dbi/U2AttributeDbi.h b/src/corelibs/U2Core/src/dbi/U2AttributeDbi.h
index e31de3e..91ecc65 100644
--- a/src/corelibs/U2Core/src/dbi/U2AttributeDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2AttributeDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2CrossDatabaseReferenceDbi.h b/src/corelibs/U2Core/src/dbi/U2CrossDatabaseReferenceDbi.h
index d09adfa..5a1574d 100644
--- a/src/corelibs/U2Core/src/dbi/U2CrossDatabaseReferenceDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2CrossDatabaseReferenceDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2Dbi.cpp b/src/corelibs/U2Core/src/dbi/U2Dbi.cpp
index 4b3f248..b5fdd4d 100644
--- a/src/corelibs/U2Core/src/dbi/U2Dbi.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2Dbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2Dbi.h b/src/corelibs/U2Core/src/dbi/U2Dbi.h
index 160a290..72a5a26 100644
--- a/src/corelibs/U2Core/src/dbi/U2Dbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2Dbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,26 +32,26 @@
 #include <U2Core/U2Sequence.h>
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QHash>
-#include <QtCore/QSet>
+#include <QHash>
+#include <QSet>
 
 class QMutex;
 
 namespace U2 {
 
 // For the classes below, see description in class definition
-class U2ObjectDbi;
-class U2ObjectRelationsDbi;
-class U2SequenceDbi;
-class U2FeatureDbi;
-class U2CrossDatabaseReferenceDbi;
-class U2MsaDbi;
 class U2AssemblyDbi;
 class U2AttributeDbi;
-class U2VariantDbi;
+class U2CrossDatabaseReferenceDbi;
+class U2Dbi;
+class U2FeatureDbi;
 class U2ModDbi;
+class U2MsaDbi;
+class U2ObjectDbi;
+class U2ObjectRelationsDbi;
 class U2OpStatus;
-class U2Dbi;
+class U2SequenceDbi;
+class U2VariantDbi;
 class UdrDbi;
 class Version;
 
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.cpp b/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.cpp
index c693676..ec09a43 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,20 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/DatatypeSerializeUtils.h>
 #include <U2Core/U2Region.h>
+#include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "U2DbiPackUtils.h"
 
 namespace U2 {
 
-const QByteArray PackUtils::VERSION("0");
-const char PackUtils::SEP = '\t';
-const char PackUtils::SECOND_SEP = 11;
+const QByteArray U2DbiPackUtils::VERSION("0");
+const char U2DbiPackUtils::SEP = '\t';
+const char U2DbiPackUtils::SECOND_SEP = 11;
 
-QByteArray PackUtils::packGaps(const QList<U2MsaGap> &gaps) {
+QByteArray U2DbiPackUtils::packGaps(const QList<U2MsaGap> &gaps) {
     QByteArray result;
     foreach (const U2MsaGap &gap, gaps) {
         if (!result.isEmpty()) {
@@ -43,7 +45,7 @@ QByteArray PackUtils::packGaps(const QList<U2MsaGap> &gaps) {
     return "\"" + result + "\"";
 }
 
-bool PackUtils::unpackGaps(const QByteArray &str, QList<U2MsaGap> &gaps) {
+bool U2DbiPackUtils::unpackGaps(const QByteArray &str, QList<U2MsaGap> &gaps) {
     CHECK(str.startsWith('\"') && str.endsWith('\"'), false);
     QByteArray gapsStr = str.mid(1, str.length() - 2);
     if (gapsStr.isEmpty()) {
@@ -65,7 +67,7 @@ bool PackUtils::unpackGaps(const QByteArray &str, QList<U2MsaGap> &gaps) {
     return true;
 }
 
-QByteArray PackUtils::packGapDetails(qint64 rowId, const QList<U2MsaGap> &oldGaps, const QList<U2MsaGap> &newGaps) {
+QByteArray U2DbiPackUtils::packGapDetails(qint64 rowId, const QList<U2MsaGap> &oldGaps, const QList<U2MsaGap> &newGaps) {
     QByteArray result = VERSION;
     result += SEP;
     result += QByteArray::number(rowId);
@@ -76,7 +78,7 @@ QByteArray PackUtils::packGapDetails(qint64 rowId, const QList<U2MsaGap> &oldGap
     return result;
 }
 
-bool PackUtils::unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, QList<U2MsaGap> &oldGaps, QList<U2MsaGap> &newGaps) {
+bool U2DbiPackUtils::unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, QList<U2MsaGap> &oldGaps, QList<U2MsaGap> &newGaps) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(4 == tokens.size(), QString("Invalid gap modDetails string '%1'").arg(QString(modDetails)), false);
     { // version
@@ -98,7 +100,45 @@ bool PackUtils::unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, QL
     return true;
 }
 
-QByteArray PackUtils::packRowOrder(const QList<qint64>& rowIds) {
+QByteArray U2DbiPackUtils::packGapDetails(qint64 rowId, const U2DataId &relatedObjectId, const QList<U2MsaGap> &oldGaps, const QList<U2MsaGap> &newGaps) {
+    QByteArray result = VERSION;
+    result += SEP;
+    result += QByteArray::number(rowId);
+    result += SEP;
+    result += relatedObjectId.toHex();
+    result += SEP;
+    result += packGaps(oldGaps);
+    result += SEP;
+    result += packGaps(newGaps);
+    return result;
+}
+
+bool U2DbiPackUtils::unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, U2DataId &relatedObjectId, QList<U2MsaGap> &oldGaps, QList<U2MsaGap> &newGaps) {
+    QList<QByteArray> tokens = modDetails.split(SEP);
+    SAFE_POINT(5 == tokens.size(), QString("Invalid gap modDetails string '%1'").arg(QString(modDetails)), false);
+    { // version
+        SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(tokens[0].data()), false);
+    }
+    { // rowId
+        bool ok = false;
+        rowId = tokens[1].toLongLong(&ok);
+        SAFE_POINT(ok, QString("Invalid gap modDetails rowId '%1'").arg(tokens[1].data()), false);
+    }
+    { // relatedObjectId
+        relatedObjectId = QByteArray::fromHex(tokens[2]);
+    }
+    { // oldGaps
+        bool ok = unpackGaps(tokens[3], oldGaps);
+        SAFE_POINT(ok, QString("Invalid gap string '%1'").arg(tokens[3].data()), false);
+    }
+    { // newGaps
+        bool ok = unpackGaps(tokens[4], newGaps);
+        SAFE_POINT(ok, QString("Invalid gap string '%1'").arg(tokens[4].data()), false);
+    }
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packRowOrder(const QList<qint64>& rowIds) {
     QByteArray result;
     foreach (qint64 rowId, rowIds) {
         if (!result.isEmpty()) {
@@ -109,7 +149,7 @@ QByteArray PackUtils::packRowOrder(const QList<qint64>& rowIds) {
     return "\"" + result + "\"";
 }
 
-bool PackUtils::unpackRowOrder(const QByteArray& str, QList<qint64>& rowsIds) {
+bool U2DbiPackUtils::unpackRowOrder(const QByteArray& str, QList<qint64>& rowsIds) {
     CHECK(str.startsWith('\"') && str.endsWith('\"'), false);
     QByteArray orderStr = str.mid(1, str.length() - 2);
     if (orderStr.isEmpty()) {
@@ -125,7 +165,7 @@ bool PackUtils::unpackRowOrder(const QByteArray& str, QList<qint64>& rowsIds) {
     return true;
 }
 
-QByteArray PackUtils::packRowOrderDetails(const QList<qint64>& oldOrder, const QList<qint64>& newOrder) {
+QByteArray U2DbiPackUtils::packRowOrderDetails(const QList<qint64>& oldOrder, const QList<qint64>& newOrder) {
     QByteArray result = VERSION;
     result += SEP;
     result += packRowOrder(oldOrder);
@@ -134,7 +174,7 @@ QByteArray PackUtils::packRowOrderDetails(const QList<qint64>& oldOrder, const Q
     return result;
 }
 
-bool PackUtils::unpackRowOrderDetails(const QByteArray &modDetails, QList<qint64>& oldOrder, QList<qint64>& newOrder) {
+bool U2DbiPackUtils::unpackRowOrderDetails(const QByteArray &modDetails, QList<qint64>& oldOrder, QList<qint64>& newOrder) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(3 == tokens.size(), QString("Invalid rows order modDetails string '%1'").arg(QString(modDetails)), false);
     { // version
@@ -152,7 +192,7 @@ bool PackUtils::unpackRowOrderDetails(const QByteArray &modDetails, QList<qint64
     return true;
 }
 
-QByteArray PackUtils::packRowNameDetails(qint64 rowId, const QString &oldName, const QString &newName) {
+QByteArray U2DbiPackUtils::packRowNameDetails(qint64 rowId, const QString &oldName, const QString &newName) {
     QByteArray result = VERSION;
     result += SEP;
     result += QByteArray::number(rowId);
@@ -163,7 +203,7 @@ QByteArray PackUtils::packRowNameDetails(qint64 rowId, const QString &oldName, c
     return result;
 }
 
-bool PackUtils::unpackRowNameDetails(const QByteArray &modDetails, qint64 &rowId, QString &oldName, QString &newName) {
+bool U2DbiPackUtils::unpackRowNameDetails(const QByteArray &modDetails, qint64 &rowId, QString &oldName, QString &newName) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(4 == tokens.size(), QString("Invalid row name modDetails string '%1'").arg(QString(modDetails)), false);
     { // version
@@ -183,7 +223,7 @@ bool PackUtils::unpackRowNameDetails(const QByteArray &modDetails, qint64 &rowId
     return true;
 }
 
-QByteArray PackUtils::packRow(qint64 posInMsa, const U2MsaRow& row) {
+QByteArray U2DbiPackUtils::packRow(qint64 posInMsa, const U2MsaRow& row) {
     QByteArray result = VERSION;
     result += SEP;
     result += QByteArray::number(posInMsa);
@@ -200,7 +240,7 @@ QByteArray PackUtils::packRow(qint64 posInMsa, const U2MsaRow& row) {
     return result;
 }
 
-bool PackUtils::unpackRow(const QByteArray &modDetails, qint64& posInMsa, U2MsaRow& row) {
+bool U2DbiPackUtils::unpackRow(const QByteArray &modDetails, qint64& posInMsa, U2MsaRow& row) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(7 == tokens.size(), QString("Invalid added row modDetails string '%1'").arg(QString(modDetails)), false);
     { // version
@@ -236,7 +276,65 @@ bool PackUtils::unpackRow(const QByteArray &modDetails, qint64& posInMsa, U2MsaR
     return true;
 }
 
-QByteArray PackUtils::packRowInfo(const U2MsaRow &row) {
+QByteArray U2DbiPackUtils::packRow(qint64 posInMca, const U2McaRow &row) {
+    QByteArray result = VERSION;
+    result += SEP;
+    result += QByteArray::number(posInMca);
+    result += SEP;
+    result += QByteArray::number(row.rowId);
+    result += SEP;
+    result += row.chromatogramId.toHex();
+    result += SEP;
+    result += row.sequenceId.toHex();
+    result += SEP;
+    result += QByteArray::number(row.gstart);
+    result += SEP;
+    result += QByteArray::number(row.gend);
+    result += SEP;
+    result += packGaps(row.gaps);
+    return result;
+}
+
+bool U2DbiPackUtils::unpackRow(const QByteArray &modDetails, qint64 &posInMca, U2McaRow &row) {
+    QList<QByteArray> tokens = modDetails.split(SEP);
+    SAFE_POINT(8 == tokens.size(), QString("Invalid added row modDetails string '%1'").arg(QString(modDetails)), false);
+    { // version
+        SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(tokens[0].data()), false);
+    }
+    { // posInMsa
+        bool ok = false;
+        posInMca = tokens[1].toLongLong(&ok);
+        SAFE_POINT(ok, QString("Invalid added row modDetails posInMsa '%1'").arg(tokens[1].data()), false);
+    }
+    { // rowId
+        bool ok = false;
+        row.rowId = tokens[2].toLongLong(&ok);
+        SAFE_POINT(ok, QString("Invalid added row modDetails rowId '%1'").arg(tokens[2].data()), false);
+    }
+    { // chromatogramId
+        row.chromatogramId = QByteArray::fromHex(tokens[3]);
+    }
+    { // sequenceId
+        row.sequenceId = QByteArray::fromHex(tokens[4]);
+    }
+    { // gstart
+        bool ok = false;
+        row.gstart = tokens[5].toLongLong(&ok);
+        SAFE_POINT(ok, QString("Invalid added row modDetails gstart '%1'").arg(tokens[5].data()), false);
+    }
+    { // gend
+        bool ok = false;
+        row.gend = tokens[6].toLongLong(&ok);
+        SAFE_POINT(ok, QString("Invalid added row modDetails gend '%1'").arg(tokens[6].data()), false);
+    }
+    { // sequence gaps
+        bool ok = unpackGaps(tokens[7], row.gaps);
+        SAFE_POINT(ok, QString("Invalid added row modDetails gaps '%1'").arg(tokens[7].data()), false);
+    }
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packRowInfo(const U2MsaRow &row) {
     QByteArray result;
     result += QByteArray::number(row.rowId);
     result += SECOND_SEP;
@@ -250,7 +348,7 @@ QByteArray PackUtils::packRowInfo(const U2MsaRow &row) {
     return result;
 }
 
-bool PackUtils::unpackRowInfo(const QByteArray &str, U2MsaRow& row) {
+bool U2DbiPackUtils::unpackRowInfo(const QByteArray &str, U2MsaRow& row) {
     QList<QByteArray> tokens = str.split(SECOND_SEP);
     CHECK(5 == tokens.count(), false);
 
@@ -269,7 +367,43 @@ bool PackUtils::unpackRowInfo(const QByteArray &str, U2MsaRow& row) {
     return true;
 }
 
-QByteArray PackUtils::packRowInfoDetails(const U2MsaRow &oldRow, const U2MsaRow &newRow) {
+QByteArray U2DbiPackUtils::packRowInfo(const U2McaRow &row) {
+    QByteArray result;
+    result += QByteArray::number(row.rowId);
+    result += SECOND_SEP;
+    result += row.chromatogramId.toHex();
+    result += SECOND_SEP;
+    result += row.sequenceId.toHex();
+    result += SECOND_SEP;
+    result += QByteArray::number(row.gstart);
+    result += SECOND_SEP;
+    result += QByteArray::number(row.gend);
+    result += SECOND_SEP;
+    result += QByteArray::number(row.length);
+    return result;
+}
+
+bool U2DbiPackUtils::unpackRowInfo(const QByteArray &str, U2McaRow &row) {
+    QList<QByteArray> tokens = str.split(SECOND_SEP);
+    CHECK(5 == tokens.count(), false);
+
+    bool ok = false;
+
+    row.rowId = tokens[0].toLongLong(&ok);
+    CHECK(ok, false);
+    row.chromatogramId = QByteArray::fromHex(tokens[1]);
+    row.sequenceId = QByteArray::fromHex(tokens[2]);
+    row.gstart = tokens[3].toLongLong(&ok);
+    CHECK(ok, false);
+    row.gend = tokens[4].toLongLong(&ok);
+    CHECK(ok, false);
+    row.length = tokens[5].toLongLong(&ok);
+    CHECK(ok, false);
+
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packRowInfoDetails(const U2MsaRow &oldRow, const U2MsaRow &newRow) {
     QByteArray result = VERSION;
     result += SEP;
     result += packRowInfo(oldRow);
@@ -278,7 +412,7 @@ QByteArray PackUtils::packRowInfoDetails(const U2MsaRow &oldRow, const U2MsaRow
     return result;
 }
 
-bool PackUtils::unpackRowInfoDetails(const QByteArray &modDetails, U2MsaRow &oldRow, U2MsaRow &newRow) {
+bool U2DbiPackUtils::unpackRowInfoDetails(const QByteArray &modDetails, U2MsaRow &oldRow, U2MsaRow &newRow) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(3 == tokens.count(), QString("Invalid modDetails '%1'!").arg(QString(modDetails)), false);
     SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(QString(tokens[0])), false);
@@ -292,7 +426,30 @@ bool PackUtils::unpackRowInfoDetails(const QByteArray &modDetails, U2MsaRow &old
     return true;
 }
 
-QByteArray PackUtils::packAlphabetDetails(const U2AlphabetId &oldAlphabet, const U2AlphabetId &newAlphabet) {
+QByteArray U2DbiPackUtils::packRowInfoDetails(const U2McaRow &oldRow, const U2McaRow &newRow) {
+    QByteArray result = VERSION;
+    result += SEP;
+    result += packRowInfo(oldRow);
+    result += SEP;
+    result += packRowInfo(newRow);
+    return result;
+}
+
+bool U2DbiPackUtils::unpackRowInfoDetails(const QByteArray &modDetails, U2McaRow &oldRow, U2McaRow &newRow) {
+    QList<QByteArray> tokens = modDetails.split(SEP);
+    SAFE_POINT(3 == tokens.count(), QString("Invalid modDetails '%1'").arg(QString(modDetails)), false);
+    SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(QString(tokens[0])), false);
+
+    bool ok = false;
+    ok = unpackRowInfo(tokens[1], oldRow);
+    CHECK(ok, false);
+    ok = unpackRowInfo(tokens[2], newRow);
+    CHECK(ok, false);
+
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packAlphabetDetails(const U2AlphabetId &oldAlphabet, const U2AlphabetId &newAlphabet) {
     QByteArray result = VERSION;
     result += SEP;
     result += oldAlphabet.id.toLatin1();
@@ -301,7 +458,7 @@ QByteArray PackUtils::packAlphabetDetails(const U2AlphabetId &oldAlphabet, const
     return result;
 }
 
-bool PackUtils::unpackAlphabetDetails(const QByteArray &modDetails, U2AlphabetId &oldAlphabet, U2AlphabetId &newAlphabet) {
+bool U2DbiPackUtils::unpackAlphabetDetails(const QByteArray &modDetails, U2AlphabetId &oldAlphabet, U2AlphabetId &newAlphabet) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(3 == tokens.count(), QString("Invalid modDetails '%1'!").arg(QString(modDetails)), false);
     SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(QString(tokens[0])), false);
@@ -316,7 +473,7 @@ bool PackUtils::unpackAlphabetDetails(const QByteArray &modDetails, U2AlphabetId
     return true;
 }
 
-QByteArray PackUtils::packObjectNameDetails(const QString &oldName, const QString &newName) {
+QByteArray U2DbiPackUtils::packObjectNameDetails(const QString &oldName, const QString &newName) {
     QByteArray result = VERSION;
     result += SEP;
     result += oldName.toUtf8();
@@ -325,7 +482,7 @@ QByteArray PackUtils::packObjectNameDetails(const QString &oldName, const QStrin
     return result;
 }
 
-bool PackUtils::unpackObjectNameDetails(const QByteArray &modDetails, QString &oldName, QString &newName) {
+bool U2DbiPackUtils::unpackObjectNameDetails(const QByteArray &modDetails, QString &oldName, QString &newName) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(3 == tokens.count(), "Invalid modDetails!", false);
     SAFE_POINT(VERSION == tokens[0], "Invalid modDetails version!", false);
@@ -337,7 +494,7 @@ bool PackUtils::unpackObjectNameDetails(const QByteArray &modDetails, QString &o
     return true;
 }
 
-QByteArray PackUtils::packRows(const QList<qint64> &posInMsa, const QList<U2MsaRow> &rows) {
+QByteArray U2DbiPackUtils::packRows(const QList<qint64> &posInMsa, const QList<U2MsaRow> &rows) {
     SAFE_POINT(posInMsa.size() == rows.size(), "Different lists sizes", "");
     QByteArray result = VERSION;
     QList<qint64>::ConstIterator pi = posInMsa.begin();
@@ -348,7 +505,7 @@ QByteArray PackUtils::packRows(const QList<qint64> &posInMsa, const QList<U2MsaR
     return result;
 }
 
-bool PackUtils::unpackRows(const QByteArray &modDetails, QList<qint64> &posInMsa, QList<U2MsaRow> &rows) {
+bool U2DbiPackUtils::unpackRows(const QByteArray &modDetails, QList<qint64> &posInMsa, QList<U2MsaRow> &rows) {
     QList<QByteArray> tokens = modDetails.split(SECOND_SEP);
     SAFE_POINT(tokens.count() > 0, QString("Invalid modDetails '%1'!").arg(QString(modDetails)), false);
     QByteArray modDetailsVersion = tokens.takeFirst();
@@ -364,7 +521,34 @@ bool PackUtils::unpackRows(const QByteArray &modDetails, QList<qint64> &posInMsa
     return true;
 }
 
-QByteArray PackUtils::packSequenceDataDetails(const U2Region &replacedRegion, const QByteArray &oldData,
+QByteArray U2DbiPackUtils::packRows(const QList<qint64> &posInMca, const QList<U2McaRow> &rows) {
+    SAFE_POINT(posInMca.size() == rows.size(), "Different lists sizes", "");
+    QByteArray result = VERSION;
+    QList<qint64>::ConstIterator pi = posInMca.begin();
+    QList<U2McaRow>::ConstIterator ri = rows.begin();
+    for (; ri != rows.end(); ri++, pi++) {
+        result += SECOND_SEP + packRow(*pi, *ri);
+    }
+    return result;
+}
+
+bool U2DbiPackUtils::unpackRows(const QByteArray &modDetails, QList<qint64> &posInMca, QList<U2McaRow> &rows) {
+    QList<QByteArray> tokens = modDetails.split(SECOND_SEP);
+    SAFE_POINT(tokens.count() > 0, QString("Invalid modDetails '%1'").arg(QString(modDetails)), false);
+    QByteArray modDetailsVersion = tokens.takeFirst();
+    SAFE_POINT(VERSION == modDetailsVersion, QString("Invalid modDetails version '%1'").arg(QString(modDetailsVersion)), false);
+    foreach (const QByteArray &token, tokens) {
+        qint64 pos = 0;
+        U2McaRow row;
+        bool ok = unpackRow(token, pos, row);
+        CHECK(ok, false);
+        posInMca << pos;
+        rows << row;
+    }
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packSequenceDataDetails(const U2Region &replacedRegion, const QByteArray &oldData,
                                               const QByteArray &newData, const QVariantMap &hints) {
     // replacedRegion length is used only for check, it is not stored
     SAFE_POINT(replacedRegion.length >= oldData.length(), "oldData length does not match to the region length.", QByteArray());
@@ -380,7 +564,7 @@ QByteArray PackUtils::packSequenceDataDetails(const U2Region &replacedRegion, co
     return result;
 }
 
-bool PackUtils::unpackSequenceDataDetails(const QByteArray &modDetails, U2Region &replacedRegion, QByteArray &oldData,
+bool U2DbiPackUtils::unpackSequenceDataDetails(const QByteArray &modDetails, U2Region &replacedRegion, QByteArray &oldData,
                                           QByteArray &newData, QVariantMap &hints) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(tokens.count() == 5, QString("Invalid modDetails '%1'!").arg(QString(modDetails)), false);
@@ -399,7 +583,41 @@ bool PackUtils::unpackSequenceDataDetails(const QByteArray &modDetails, U2Region
     return true;
 }
 
-QByteArray PackUtils::packSequenceDataHints(const QVariantMap &hints) {
+QByteArray U2DbiPackUtils::packChromatogramData(const DNAChromatogram &chromatogram) {
+    return DNAChromatogramSerializer::serialize(chromatogram).toHex();
+}
+
+bool U2DbiPackUtils::unpackChromatogramData(const QByteArray &modDetails, DNAChromatogram &chromatogram) {
+    U2OpStatusImpl os;
+    chromatogram = DNAChromatogramSerializer::deserialize(QByteArray::fromHex(modDetails), os);
+    return !os.hasError();
+}
+
+QByteArray U2DbiPackUtils::packChromatogramDetails(const DNAChromatogram &oldChromatogram, const DNAChromatogram &newChromatogram) {
+    QByteArray result = VERSION;
+    result += SEP;
+    result += packChromatogramData(oldChromatogram);
+    result += SEP;
+    result += packChromatogramData(newChromatogram);
+    return result;
+}
+
+bool U2DbiPackUtils::unpackChromatogramDetails(const QByteArray &modDetails, DNAChromatogram &oldChromatogram, DNAChromatogram &newChromatogram) {
+    QList<QByteArray> tokens = modDetails.split(SEP);
+    SAFE_POINT(tokens.count() == 3, QString("Invalid modDetails '%1'").arg(QString(modDetails)), false);
+    SAFE_POINT(VERSION == tokens[0], QString("Invalid modDetails version '%1'").arg(QString(tokens[0])), false);
+
+    bool ok = false;
+    ok = unpackChromatogramData(tokens[1], oldChromatogram);
+    CHECK(ok, false);
+
+    ok = unpackChromatogramData(tokens[2], newChromatogram);
+    CHECK(ok, false);
+
+    return true;
+}
+
+QByteArray U2DbiPackUtils::packSequenceDataHints(const QVariantMap &hints) {
     QByteArray result;
     foreach (QString key, hints.keys()) {
         if (false == result.isEmpty()) {
@@ -410,7 +628,7 @@ QByteArray PackUtils::packSequenceDataHints(const QVariantMap &hints) {
     return "\"" + result + "\"";
 }
 
-bool PackUtils::unpackSequenceDataHints(const QByteArray &str, QVariantMap &hints) {
+bool U2DbiPackUtils::unpackSequenceDataHints(const QByteArray &str, QVariantMap &hints) {
     CHECK(str.startsWith('\"') && str.endsWith('\"'), false);
     QByteArray hintsStr = str.mid(1, str.length() - 2);
     if (hintsStr.isEmpty()) {
@@ -426,7 +644,7 @@ bool PackUtils::unpackSequenceDataHints(const QByteArray &str, QVariantMap &hint
     return true;
 }
 
-QByteArray PackUtils::packAlignmentLength(const qint64 oldLen, const qint64 newLen) {
+QByteArray U2DbiPackUtils::packAlignmentLength(const qint64 oldLen, const qint64 newLen) {
     QByteArray result;
     result += QByteArray::number(oldLen);
     result += SEP;
@@ -434,7 +652,7 @@ QByteArray PackUtils::packAlignmentLength(const qint64 oldLen, const qint64 newL
     return result;
 }
 
-bool PackUtils::unpackAlignmentLength(const QByteArray &modDetails, qint64 &oldLen, qint64 &newLen) {
+bool U2DbiPackUtils::unpackAlignmentLength(const QByteArray &modDetails, qint64 &oldLen, qint64 &newLen) {
     QList<QByteArray> tokens = modDetails.split(SEP);
     SAFE_POINT(tokens.count() == 2, QString("Invalid modDetails '%1'!").arg(QString(modDetails)), false);
 
@@ -447,4 +665,22 @@ bool PackUtils::unpackAlignmentLength(const QByteArray &modDetails, qint64 &oldL
     return true;
 }
 
+QByteArray U2DbiPackUtils::packUdr(const QByteArray& oldData, const QByteArray& newData) {
+    QByteArray result;
+    result += oldData.toHex();
+    result += SEP;
+    result += newData.toHex();
+    return result;
+}
+
+bool U2DbiPackUtils::unpackUdr(const QByteArray& modDetails, QByteArray& oldData, QByteArray& newData) {
+    QList<QByteArray> tokens = modDetails.split(SEP);
+    SAFE_POINT(tokens.count() == 2, QString("Invalid modDetails, wrong tokens count: %1. Expected - 2.").arg(tokens.size()), false);
+
+    oldData = QByteArray::fromHex(tokens.first());
+    newData = QByteArray::fromHex(tokens.last());
+
+    return true;
+}
+
 } // U2
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.h b/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.h
index 25658ab..6f22838 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.h
+++ b/src/corelibs/U2Core/src/dbi/U2DbiPackUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef _U2_DBI_PACKUTILS_H_
-#define _U2_DBI_PACKUTILS_H_
+#ifndef _U2_DBI_PACK_UTILS_H_
+#define _U2_DBI_PACK_UTILS_H_
 
-#include <U2Core/U2Msa.h>
+#include <U2Core/U2Mca.h>
 
 namespace U2 {
 
+class DNAChromatogram;
 class U2Region;
 
-class U2CORE_EXPORT PackUtils {
+class U2CORE_EXPORT U2DbiPackUtils {
 public:
     /** Pack utils version */
     static const QByteArray VERSION;
@@ -41,6 +42,9 @@ public:
     static QByteArray packGapDetails(qint64 rowId, const QList<U2MsaGap> &oldGaps, const QList<U2MsaGap> &newGaps);
     static bool unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, QList<U2MsaGap> &oldGaps, QList<U2MsaGap> &newGaps);
 
+    static QByteArray packGapDetails(qint64 rowId, const U2DataId &relatedObjectId, const QList<U2MsaGap> &oldGaps, const QList<U2MsaGap> &newGaps);
+    static bool unpackGapDetails(const QByteArray &modDetails, qint64 &rowId, U2DataId &relatedObjectId, QList<U2MsaGap> &oldGaps, QList<U2MsaGap> &newGaps);
+
     /** Row order */
     static QByteArray packRowOrder(const QList<qint64>& rowIds);
     static bool unpackRowOrder(const QByteArray& str, QList<qint64>& rowsIds);
@@ -57,18 +61,30 @@ public:
     static QByteArray packRow(qint64 posInMsa, const U2MsaRow& row);
     static bool unpackRow(const QByteArray &modDetails, qint64& posInMsa, U2MsaRow& row);
 
+    static QByteArray packRow(qint64 posInMca, const U2McaRow &row);
+    static bool unpackRow(const QByteArray &modDetails, qint64 &posInMca, U2McaRow &row);
+
     /** Row info details */
     static QByteArray packRowInfoDetails(const U2MsaRow &oldRow, const U2MsaRow &newRow);
     static bool unpackRowInfoDetails(const QByteArray &modDetails, U2MsaRow &oldRow, U2MsaRow &newRow);
 
+    static QByteArray packRowInfoDetails(const U2McaRow &oldRow, const U2McaRow &newRow);
+    static bool unpackRowInfoDetails(const QByteArray &modDetails, U2McaRow &oldRow, U2McaRow &newRow);
+
     /** Row info */
     static QByteArray packRowInfo(const U2MsaRow &row);
     static bool unpackRowInfo(const QByteArray &str, U2MsaRow& row);
 
+    static QByteArray packRowInfo(const U2McaRow &row);
+    static bool unpackRowInfo(const QByteArray &str, U2McaRow& row);
+
     /** Rows */
     static QByteArray packRows(const QList<qint64> &posInMsa, const QList<U2MsaRow> &rows);
     static bool unpackRows(const QByteArray &modDetails, QList<qint64> &posInMsa, QList<U2MsaRow> &rows);
 
+    static QByteArray packRows(const QList<qint64> &posInMca, const QList<U2McaRow> &rows);
+    static bool unpackRows(const QByteArray &modDetails, QList<qint64> &posInMca, QList<U2McaRow> &rows);
+
     /** Alphabet details*/
     static QByteArray packAlphabetDetails(const U2AlphabetId &oldAlphabet, const U2AlphabetId &newAlphabet);
     static bool unpackAlphabetDetails(const QByteArray &modDetails, U2AlphabetId &oldAlphabet, U2AlphabetId &newAlphabet);
@@ -83,6 +99,14 @@ public:
     static bool unpackSequenceDataDetails(const QByteArray &modDetails, U2Region &replacedRegion,
                                           QByteArray &oldData, QByteArray &newData, QVariantMap& hints);
 
+    /** Chromatogram */
+    static QByteArray packChromatogramData(const DNAChromatogram &chromatogram);
+    static bool unpackChromatogramData(const QByteArray &modDetails, DNAChromatogram &chromatogram);
+
+    /** Chromatogram details */
+    static QByteArray packChromatogramDetails(const DNAChromatogram &oldChromatogram, const DNAChromatogram &newChromatogram);
+    static bool unpackChromatogramDetails(const QByteArray &modDetails, DNAChromatogram &oldChromatogram, DNAChromatogram &newChromatogram);
+
     /** Sequence data hints */
     static QByteArray packSequenceDataHints(const QVariantMap &hints);
     static bool unpackSequenceDataHints(const QByteArray &str, QVariantMap &hints);
@@ -91,6 +115,9 @@ public:
     static QByteArray packAlignmentLength(const qint64 oldLen, const qint64 newLen);
     static bool unpackAlignmentLength(const QByteArray &modDetails, qint64 &oldLen, qint64 &newLen);
 
+    static QByteArray packUdr(const QByteArray& oldData, const QByteArray& newData);
+    static bool unpackUdr(const QByteArray& modDetails, QByteArray& oldData, QByteArray& newData);
+
 private:
     static const char SEP;
     static const char SECOND_SEP;
@@ -98,4 +125,4 @@ private:
 
 } // U2
 
-#endif // _U2_DBI_PACKUTILS_H_
+#endif // _U2_DBI_PACK_UTILS_H_
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiRegistry.cpp b/src/corelibs/U2Core/src/dbi/U2DbiRegistry.cpp
index 17cef52..f2c5c9c 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiRegistry.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2DbiRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,9 +35,9 @@
 
 #include <U2Formats/MysqlDbiUtils.h>
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QFile>
-#include <QtCore/QThread>
+#include <QCoreApplication>
+#include <QFile>
+#include <QThread>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiRegistry.h b/src/corelibs/U2Core/src/dbi/U2DbiRegistry.h
index 2a7e0ea..1d18cdf 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiRegistry.h
+++ b/src/corelibs/U2Core/src/dbi/U2DbiRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/U2Dbi.h>
 
-#include <QtCore/QHash>
-#include <QtCore/QMutex>
-#include <QtCore/QTimer>
+#include <QHash>
+#include <QMutex>
+#include <QTimer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiUtils.cpp b/src/corelibs/U2Core/src/dbi/U2DbiUtils.cpp
index 0785b99..eda1b5e 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiUtils.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2DbiUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -239,88 +239,6 @@ bool U2DbiUtils::isDatabaseTooOld(const U2DbiRef &dbiRef, const Version &ugeneVe
     return minRequiredVersion < ugeneVersion;
 }
 
-namespace {
-
-const QString LIST_SEPARATOR = ",";
-const QString MAP_SEPARATOR = ";";
-const QString PAIR_CONNECTOR = "=";
-const QRegExp listSeparatorRegExp(QString("^\\\"|(?!\\\\)\\\"%1\\\"|\\\"$").arg(LIST_SEPARATOR));
-const QRegExp mapSeparatorRegExp(QString("(?!\\\\)\\\"%1\\\"").arg(MAP_SEPARATOR));
-const QRegExp pairSeparatorRegExp(QString("^\\\"|(?!\\\\)\\\"%1\\\"|\\\"$").arg(PAIR_CONNECTOR));
-
-QBitArray initCharactersToEscape() {
-    QBitArray map(pow(2, 8 * sizeof(char)));
-    map[(int)'\\'] = true;
-    map[(int)'\"'] = true;
-    return map;
-}
-
-const QBitArray charactersToEscape = initCharactersToEscape();
-
-QString escapeCharacters(QString string) {
-    for (int i = 0; i < charactersToEscape.size(); i++) {
-        if (charactersToEscape[i]) {
-            const char c = (char)i;
-            string.replace(c, QString("\\") + c);
-        }
-    }
-
-    return string;
-}
-
-QString unescapeCharacters(QString string) {
-    for (int i = 0; i < charactersToEscape.size(); i++) {
-        if (charactersToEscape[i]) {
-            const char c = (char)i;
-            string.replace(QString("\\") + c, QString(1, c));
-        }
-    }
-
-    return string;
-}
-
-QString wrapString(const QString &string) {
-    return "\"" + string + "\"";
-}
-
-}
-
-QString U2DbiUtils::packStringList(const QStringList &list) {
-    QString packedList;
-    foreach (const QString &string, list) {
-        packedList += wrapString(escapeCharacters(string)) + LIST_SEPARATOR;
-    }
-    packedList.chop(LIST_SEPARATOR.size());
-    return packedList;
-}
-
-QStringList U2DbiUtils::unpackStringList(const QString &string) {
-    QStringList unpackedList;
-    foreach (const QString &escapedString, string.split(listSeparatorRegExp, QString::SkipEmptyParts)) {
-        unpackedList << unescapeCharacters(escapedString);
-    }
-    return unpackedList;
-}
-
-QString U2DbiUtils::packMap(const QStrStrMap &map) {
-    QString string;
-    foreach (const QString &key, map.keys()) {
-        string += wrapString(escapeCharacters(key)) + PAIR_CONNECTOR + wrapString(escapeCharacters(map[key])) + MAP_SEPARATOR;
-    }
-    string.chop(MAP_SEPARATOR.size());
-    return string;
-}
-
-QStrStrMap U2DbiUtils::unpackMap(const QString &string) {
-    QStrStrMap map;
-    foreach (const QString &pair, string.split(mapSeparatorRegExp, QString::SkipEmptyParts)) {
-        const QStringList splittedPair = pair.split(pairSeparatorRegExp, QString::SkipEmptyParts);
-        Q_ASSERT(splittedPair.size() <= 2);
-        map.insert(splittedPair.first(), splittedPair.size() > 1 ? splittedPair[1] : "");
-    }
-    return map;
-}
-
 //////////////////////////////////////////////////////////////////////////
 // TmpDbiHandle
 
diff --git a/src/corelibs/U2Core/src/dbi/U2DbiUtils.h b/src/corelibs/U2Core/src/dbi/U2DbiUtils.h
index 135b33e..a8a0c0e 100644
--- a/src/corelibs/U2Core/src/dbi/U2DbiUtils.h
+++ b/src/corelibs/U2Core/src/dbi/U2DbiUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,7 @@
 #ifndef _U2_DBI_UTILS_H_
 #define _U2_DBI_UTILS_H_
 
+#include <U2Core/StrPackUtils.h>
 #include <U2Core/U2Dbi.h>
 #include <U2Core/U2DbiRegistry.h>
 
@@ -164,12 +165,6 @@ public:
     static bool isDatabaseTooNew(const U2DbiRef &dbiRef, const Version &ugeneVersion, QString &minRequiredVersionString, U2OpStatus &os);
     static bool isDatabaseTooOld(const U2DbiRef &dbiRef, const Version &ugeneVersion, U2OpStatus &os);
 
-    static QString packStringList(const QStringList &list);
-    static QStringList unpackStringList(const QString &string);
-
-    static QString packMap(const QStrStrMap &map);
-    static QStrStrMap unpackMap(const QString &string);
-
     static const QString PUBLIC_DATABASE_NAME;
     static const QString PUBLIC_DATABASE_URL;
     static const QString PUBLIC_DATABASE_LOGIN;
diff --git a/src/corelibs/U2Core/src/dbi/U2FeatureDbi.h b/src/corelibs/U2Core/src/dbi/U2FeatureDbi.h
index 795e357..6c88632 100644
--- a/src/corelibs/U2Core/src/dbi/U2FeatureDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2FeatureDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2FormatCheckResult.h b/src/corelibs/U2Core/src/dbi/U2FormatCheckResult.h
index a40309f..bba9a83 100644
--- a/src/corelibs/U2Core/src/dbi/U2FormatCheckResult.h
+++ b/src/corelibs/U2Core/src/dbi/U2FormatCheckResult.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_RAW_DATA_CHECK_H_
 #define _U2_RAW_DATA_CHECK_H_
 
+#include <QVariantMap>
+
 namespace U2 {
 
 // Result of the format detection algorithm
diff --git a/src/corelibs/U2Core/src/dbi/U2ModDbi.h b/src/corelibs/U2Core/src/dbi/U2ModDbi.h
index e8cafa3..fa265dc 100644
--- a/src/corelibs/U2Core/src/dbi/U2ModDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2ModDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2MsaDbi.h b/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
index af701da..b21c233 100644
--- a/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2MsaDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -61,6 +61,8 @@ public:
      * Creates a new empty MSA object
      * Requires: U2DbiFeature_WriteMsa feature support
      */
+    virtual U2DataId createMcaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os) = 0;
+    virtual U2DataId createMcaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, int length, U2OpStatus& os) = 0;
     virtual U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os) = 0;
     virtual U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, int length, U2OpStatus& os) = 0;
 
diff --git a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.cpp b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.cpp
index 0fac786..3b96853 100644
--- a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
index a7a9611..762a42a 100644
--- a/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2ObjectDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -127,6 +127,12 @@ public:
     /** Updates object rank, e.g. a top-level object can be transmuted into a child object */
     virtual void setObjectRank(const U2DataId &objectId, U2DbiObjectRank newRank, U2OpStatus& os) = 0;
 
+    /** Adds a record, representing parent-child relationship between entities, to a DB */
+    virtual void setParent(const U2DataId& parentId, const U2DataId& childId, U2OpStatus& os) = 0;
+
+    /** Returns object rank of the given object */
+    virtual U2DbiObjectRank getObjectRank(const U2DataId &objectId, U2OpStatus& os) = 0;
+
     /** Gets the trackMod value for the object */
     virtual U2TrackModType getTrackModType(const U2DataId& objectId, U2OpStatus& os) = 0;
 
@@ -186,7 +192,7 @@ public:
         Otherwise, moves the specified objects between the specified folders, omitting duplicates.
 
         'saveFromFolder' parameter specifies whether the 'fromFolder' path has to be stored
-        for further usage. For instance, when the object is moved to the recycle bin its previous directory
+        for further usage. For instance, when the object is moved to the recycle bin its previous folder
         is needed in order to restore the object afterwards.
 
         Requires: U2DbiFeature_ChangeFolders feature support
diff --git a/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.cpp b/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.cpp
index 030e9fb..e18445c 100644
--- a/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.h b/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.h
index e37827f..5747ddb 100644
--- a/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2ObjectRelationsDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
index 0a90755..8a9dbd1 100644
--- a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -112,11 +112,11 @@ void U2SQLiteTripleStore::init(const QString &url, U2OpStatus &os) {
             break;
         }
 
-        SQLiteQuery("PRAGMA synchronous = OFF", db, os).execute();
-        SQLiteQuery("PRAGMA main.locking_mode = NORMAL", db, os).execute();
-        SQLiteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
-        SQLiteQuery("PRAGMA journal_mode = MEMORY", db, os).execute();
-        SQLiteQuery("PRAGMA cache_size = 10000", db, os).execute();
+        SQLiteWriteQuery("PRAGMA synchronous = OFF", db, os).execute();
+        SQLiteWriteQuery("PRAGMA main.locking_mode = NORMAL", db, os).execute();
+        SQLiteWriteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
+        SQLiteWriteQuery("PRAGMA journal_mode = MEMORY", db, os).execute();
+        SQLiteWriteQuery("PRAGMA cache_size = 10000", db, os).execute();
 
         // check if the opened database is valid sqlite dbi
         if (isEmpty(os)) {
@@ -163,7 +163,7 @@ bool U2SQLiteTripleStore::isEmpty(U2OpStatus &os) const {
 
 void U2SQLiteTripleStore::createTables(U2OpStatus &os) {
     QMutexLocker lock(&db->lock);
-    SQLiteQuery("CREATE TABLE Triplets (id INTEGER PRIMARY KEY AUTOINCREMENT, "
+    SQLiteWriteQuery("CREATE TABLE Triplets (id INTEGER PRIMARY KEY AUTOINCREMENT, "
         "key TEXT NOT NULL, role TEXT NOT NULL, value TEXT NOT NULL)", db, os).execute();
 }
 
@@ -214,7 +214,7 @@ bool U2SQLiteTripleStore::contains(const QString &key, const QString &role, U2Op
 bool U2SQLiteTripleStore::contains(const U2Triplet &value, U2OpStatus &os) const {
     QMutexLocker lock(&db->lock);
     static const QString queryString("SELECT t.id FROM Triplets t WHERE t.key = ?1 AND t.role = ?2 AND t.value = ?3");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindString(1, value.getKey());
     q.bindString(2, value.getRole());
     q.bindString(3, value.getValue());
@@ -230,7 +230,7 @@ bool U2SQLiteTripleStore::contains(const U2Triplet &value, U2OpStatus &os) const
 QString U2SQLiteTripleStore::getValue(const QString &key, const QString &role, U2OpStatus &os) const {
     QMutexLocker lock(&db->lock);
     static const QString queryString("SELECT t.value FROM Triplets t WHERE t.key = ?1 AND t.role = ?2 ORDER BY t.id");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindString(1, key);
     q.bindString(2, role);
 
@@ -244,7 +244,7 @@ QString U2SQLiteTripleStore::getValue(const QString &key, const QString &role, U
 qint64 U2SQLiteTripleStore::getTripletId(const U2Triplet &triplet, bool &found, U2OpStatus &os) const {
     QMutexLocker lock(&db->lock);
     static const QString queryString("SELECT t.id FROM Triplets t WHERE t.key = ?1 AND t.role = ?2 AND t.value = ?3");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindString(1, triplet.getKey());
     q.bindString(2, triplet.getRole());
     q.bindString(3, triplet.getValue());
@@ -262,7 +262,7 @@ qint64 U2SQLiteTripleStore::getTripletId(const U2Triplet &triplet, bool &found,
 qint64 U2SQLiteTripleStore::insertTriplet(const U2Triplet &triplet, U2OpStatus &os) {
     QMutexLocker lock(&db->lock);
     static const QString queryString("INSERT INTO Triplets(key, role, value) VALUES(?1, ?2, ?3)");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     q.bindString(1, triplet.getKey());
     q.bindString(2, triplet.getRole());
     q.bindString(3, triplet.getValue());
@@ -273,7 +273,7 @@ qint64 U2SQLiteTripleStore::insertTriplet(const U2Triplet &triplet, U2OpStatus &
 void U2SQLiteTripleStore::removeTriplet(qint64 tripletId, U2OpStatus &os) {
     QMutexLocker lock(&db->lock);
     static const QString queryString("DELETE FROM Triplets WHERE id = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     q.bindInt64(1, tripletId);
 
     q.execute();
@@ -282,7 +282,7 @@ void U2SQLiteTripleStore::removeTriplet(qint64 tripletId, U2OpStatus &os) {
 QList<U2Triplet> U2SQLiteTripleStore::getTriplets(U2OpStatus &os) const {
     QMutexLocker lock(&db->lock);
     static const QString queryString("SELECT t.id, t.key, t.role, t.value FROM Triplets t");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
 
     QList<U2Triplet> result;
     while (q.step()) {
@@ -296,7 +296,7 @@ QList<U2Triplet> U2SQLiteTripleStore::getTriplets(U2OpStatus &os) const {
 void U2SQLiteTripleStore::removeValue(const U2Triplet &value, U2OpStatus &os) {
     QMutexLocker lock(&db->lock);
     static const QString queryString("DELETE FROM Triplets WHERE id = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     q.bindInt64(1, value.id);
 
     q.execute();
diff --git a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.h b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.h
index d98433e..1f0640e 100644
--- a/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.h
+++ b/src/corelibs/U2Core/src/dbi/U2SQLiteTripleStore.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/U2SequenceDbi.h b/src/corelibs/U2Core/src/dbi/U2SequenceDbi.h
index cfa2549..2e5c71c 100644
--- a/src/corelibs/U2Core/src/dbi/U2SequenceDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2SequenceDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -87,6 +87,9 @@ public:
         Hint: if @emptySequence is set then the start position of the inserting data is not calculated
     */
     virtual void updateSequenceData(const U2DataId& sequenceId, const U2Region& regionToReplace, const QByteArray& dataToInsert, const QVariantMap &hints, U2OpStatus& os) = 0;
+    virtual void updateSequenceData(const U2DataId &masterId, const U2DataId &sequenceId,
+                                    const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os) = 0;
+
 };
 
 } //namespace
diff --git a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
index ead9f30..1bb6df1 100644
--- a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
+++ b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,13 +36,13 @@ static QString      emptyString;
 qint64 SQLiteUtils::remove(const QString& table, const QString& field, const U2DataId& id, qint64 expectedRows, DbRef* db, U2OpStatus& os) {
     QMutexLocker m(&db->lock); // lock db in order to retrieve valid row id for insert
 
-    SQLiteQuery q(QString("DELETE FROM %1 WHERE %2 = ?1").arg(table).arg(field), db, os);
+    SQLiteWriteQuery q(QString("DELETE FROM %1 WHERE %2 = ?1").arg(table).arg(field), db, os);
     q.bindDataId(1, id);
     return q.update(expectedRows);
 }
 
 bool SQLiteUtils::isTableExists(const QString& tableName, DbRef* db, U2OpStatus& os) {
-    SQLiteQuery q("SELECT name FROM sqlite_master WHERE type='table' AND name=?1", db, os);
+    SQLiteReadQuery q("SELECT name FROM sqlite_master WHERE type='table' AND name=?1", db, os);
     q.bindString(1, tableName);
     return q.step();
 }
@@ -68,7 +68,7 @@ QString U2DbiL10n::tooManyResults() {
 }
 
 //////////////////////////////////////////////////////////////////////////
-// SQLiteQuery
+// SQLiteReadOnlyQuery
 
 //#define U2_TRACE_SQLITE_QUERIES
 
@@ -87,7 +87,7 @@ static void traceQueryDestroy(const QString& q) {
 #endif
 
 SQLiteQuery::SQLiteQuery(const QString& _sql, DbRef* d, U2OpStatus& _os)
-: db(d), os(&_os), st(NULL), sql(_sql), locker(&d->lock)
+: db(d), os(&_os), st(NULL), sql(_sql)
 {
     prepare();
 
@@ -97,7 +97,7 @@ SQLiteQuery::SQLiteQuery(const QString& _sql, DbRef* d, U2OpStatus& _os)
 }
 
 SQLiteQuery::SQLiteQuery(const QString& _sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& _os)
-: db(d), os(&_os), st(NULL), sql(_sql), locker(&d->lock)
+: db(d), os(&_os), st(NULL), sql(_sql)
 {
     U2DbiUtils::addLimit(sql, offset, count);
     prepare();
@@ -160,12 +160,11 @@ bool SQLiteQuery::reset(bool clearBindings) {
     return true;
 }
 
-bool SQLiteQuery::step() {
+bool SQLiteQuery::stepImpl() {
     if (hasError()) {
         return false;
     }
     assert(st != NULL);
-
     int rc = sqlite3_step(st);
     if (rc == SQLITE_DONE || rc == SQLITE_READONLY) {
         return false;
@@ -416,6 +415,13 @@ U2DataId SQLiteQuery::insert(U2DataType type, const QByteArray& dbExtra) {
     return U2DbiUtils::toU2DataId(lastRowId, type, dbExtra);
 }
 
+qint32 SQLiteQuery::selectInt32() {
+    if (step()) {
+        return getInt32(0);
+    }
+    return -1;
+}
+
 qint64 SQLiteQuery::selectInt64() {
     if (step()) {
         return getInt64(0);
@@ -464,6 +470,41 @@ qint64 SQLiteQuery::getLastRowId() {
 }
 
 //////////////////////////////////////////////////////////////////////////
+///SQLiteReadQuery
+SQLiteReadQuery::SQLiteReadQuery(const QString& _sql, DbRef* d, U2OpStatus& _os)
+: SQLiteQuery(_sql, d, _os)
+{
+}
+
+SQLiteReadQuery::SQLiteReadQuery(const QString& _sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& _os)
+: SQLiteQuery(_sql, offset, count, d, _os)
+{
+}
+
+bool SQLiteReadQuery::step(){
+    QReadLocker locker(&db->rwLock);
+    return stepImpl();
+}
+
+//////////////////////////////////////////////////////////////////////////
+///SQLiteWriteQuery
+SQLiteWriteQuery::SQLiteWriteQuery(const QString& _sql, DbRef* d, U2OpStatus& _os)
+: SQLiteQuery(_sql, d, _os)
+{
+}
+
+SQLiteWriteQuery::SQLiteWriteQuery(const QString& _sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& _os)
+: SQLiteQuery(_sql, offset, count, d, _os)
+{
+}
+
+bool SQLiteWriteQuery::step(){
+    QMutexLocker mutexLocker(&db->lock);
+    QWriteLocker writeLocker(&db->rwLock);
+    return stepImpl();
+}
+
+//////////////////////////////////////////////////////////////////////////
 // SQLite transaction helper
 
 static void checkStack(const QVector<SQLiteTransaction*>& stack) {
@@ -540,7 +581,7 @@ QSharedPointer<SQLiteQuery> SQLiteTransaction::getPreparedQuery(const QString &s
         result->reset(false);
         return result;
     }
-    QSharedPointer<SQLiteQuery> result (new SQLiteQuery(sql, d, os));
+    QSharedPointer<SQLiteQuery> result (new SQLiteWriteQuery(sql, d, os));
     CHECK_OP(os, QSharedPointer<SQLiteQuery>());
     if(cacheQueries){
         db->preparedQueries[sql] = result;
@@ -555,7 +596,7 @@ QSharedPointer<SQLiteQuery> SQLiteTransaction::getPreparedQuery(const QString &s
         result->reset(false);
         return result;
     }
-    QSharedPointer<SQLiteQuery> result (new SQLiteQuery(sql, offset, count, d, os));
+    QSharedPointer<SQLiteWriteQuery> result (new SQLiteWriteQuery(sql, offset, count, d, os));
     CHECK_OP(os, QSharedPointer<SQLiteQuery>());
     if(cacheQueries){
         db->preparedQueries[sql] = result;
diff --git a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.h b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.h
index 787fec5..6719354 100644
--- a/src/corelibs/U2Core/src/dbi/U2SqlHelpers.h
+++ b/src/corelibs/U2Core/src/dbi/U2SqlHelpers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,18 +25,20 @@
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/U2Type.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QStringList>
-#include <QtCore/QVector>
-#include <QtCore/QThread>
-#include <QtCore/QHash>
-#include <QtCore/QSharedPointer>
+#include <QMutex>
+#include <QStringList>
+#include <QVector>
+#include <QThread>
+#include <QHash>
+#include <QSharedPointer>
+#include <QReadWriteLock>
 
 struct sqlite3;
 struct sqlite3_stmt;
 
 namespace U2 {
 
+class SQLiteWriteQuery;
 class SQLiteQuery;
 class SQLiteTransaction;
 
@@ -46,6 +48,7 @@ public:
 
     sqlite3*                     handle;
     QMutex                       lock;
+    QReadWriteLock               rwLock;
     bool                         useTransaction;
     bool                         useCache;
     QVector<SQLiteTransaction*>  transactionStack;
@@ -96,7 +99,7 @@ public:
     SQLiteQuery(const QString& sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& os);
 
     /** Releases all resources associated with the statement */
-    ~SQLiteQuery();
+    virtual ~SQLiteQuery();
 
     //////////////////////////////////////////////////////////////////////////
     // Statement/query state manipulation methods
@@ -108,7 +111,7 @@ public:
         Executes next step of the statement
         Returns true there are more results to fetch and no error occurs
     */
-    bool step();
+    virtual bool step() = 0;
 
     /**
         Ensures that there are no more results in result set
@@ -190,6 +193,8 @@ public:
     */
     qint64 update(qint64 expectedRows = -1);
 
+    /** Selects a single int32 value */
+    qint32 selectInt32();
 
     /** Selects a single int64 value */
     qint64 selectInt64();
@@ -222,18 +227,48 @@ public:
 
     DbRef*          getDb() const {return db;}
 
+protected:
+    bool stepImpl();
+
+    DbRef*          db;
+
 private:
     /** Returns last insert row*/
     qint64 getLastRowId();
 
     void prepare();
 
-
-    DbRef*          db;
     U2OpStatus*     os;
     sqlite3_stmt*   st;
     QString         sql;
-    QMutexLocker    locker;
+};
+
+class U2CORE_EXPORT SQLiteReadQuery : public SQLiteQuery {
+public:
+    /**
+        Constructs prepared statement for SQLiteDB
+        If failed the error message is written to 'os'
+        It's desirable to release this object as soon as possible because it locks
+        the database for concurrent modifications from other threads
+    */
+    SQLiteReadQuery(const QString& sql, DbRef* d, U2OpStatus& os);
+    SQLiteReadQuery(const QString& sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& os);
+
+    bool step();
+};
+
+class U2CORE_EXPORT SQLiteWriteQuery : public SQLiteQuery {
+public:
+    /**
+        Constructs prepared statement for SQLiteDB
+        If failed the error message is written to 'os'
+        It's desirable to release this object as soon as possible because it locks
+        the database for concurrent modifications from other threads
+    */
+    SQLiteWriteQuery(const QString& sql, DbRef* d, U2OpStatus& os);
+    SQLiteWriteQuery(const QString& sql, qint64 offset, qint64 count, DbRef* d, U2OpStatus& os);
+
+    bool step();
 };
 
 /** Helper class to mark transaction regions */
@@ -262,29 +297,29 @@ public:
 };
 
 /** Data loader adapter for SqlQueryIterator */
-template <class T> class SqlRSLoader {
+template <class T> class SQLiteResultSetLoader {
 public:
-    virtual ~SqlRSLoader(){}
+    virtual ~SQLiteResultSetLoader(){}
     virtual T load(SQLiteQuery* q) = 0;
 };
 
 /** Filter for SqlRSIterator. Checks if value must be filtered out from the result */
-template <class T> class SqlRSFilter {
+template <class T> class SQLiteResultSetFilter {
 public:
-    virtual ~SqlRSFilter(){}
+    virtual ~SQLiteResultSetFilter(){}
     virtual bool filter(const T&) = 0;
 };
 
 /** SQL query result set iterator */
-template<class T> class SqlRSIterator : public U2DbiIterator<T> {
+template<class T> class SQLiteResultSetIterator : public U2DbiIterator<T> {
 public:
-    SqlRSIterator(QSharedPointer<SQLiteQuery> q, SqlRSLoader<T>* l, SqlRSFilter<T>* f, const T& d, U2OpStatus& o)
+    SQLiteResultSetIterator(QSharedPointer<SQLiteQuery> q, SQLiteResultSetLoader<T>* l, SQLiteResultSetFilter<T>* f, const T& d, U2OpStatus& o)
         : query(q), loader(l), filter(f), defaultValue(d), os(o), endOfStream(false)
     {
         fetchNext();
     }
 
-    virtual ~SqlRSIterator() {
+    virtual ~SQLiteResultSetIterator() {
         delete filter;
         delete loader;
         query.clear();
@@ -324,8 +359,8 @@ private:
     }
 
     QSharedPointer<SQLiteQuery>    query;
-    SqlRSLoader<T>* loader;
-    SqlRSFilter<T>* filter;
+    SQLiteResultSetLoader<T>* loader;
+    SQLiteResultSetFilter<T>* filter;
     T               defaultValue;
     U2OpStatus&     os;
     bool            endOfStream;
@@ -334,9 +369,9 @@ private:
     bool            deleteQuery;
 };
 
-class SqlDataIdRSLoader : public SqlRSLoader<U2DataId> {
+class SQLiteDataIdResultSetLoader : public SQLiteResultSetLoader<U2DataId> {
 public:
-    SqlDataIdRSLoader(U2DataType _type, const QByteArray& _dbExra = QByteArray()) : type(_type), dbExtra(_dbExra){}
+    SQLiteDataIdResultSetLoader(U2DataType _type, const QByteArray& _dbExra = QByteArray()) : type(_type), dbExtra(_dbExra){}
     U2DataId load(SQLiteQuery* q) { return q->getDataId(0, type, dbExtra);}
 
 protected:
@@ -344,9 +379,9 @@ protected:
     QByteArray dbExtra;
 };
 
-class SqlDataIdRSLoaderEx : public SqlRSLoader<U2DataId> {
+class SQLiteDataIdResultSetLoaderEx : public SQLiteResultSetLoader<U2DataId> {
 public:
-    SqlDataIdRSLoaderEx(const QByteArray& _dbExra = QByteArray()) : dbExtra(_dbExra){}
+    SQLiteDataIdResultSetLoaderEx(const QByteArray& _dbExra = QByteArray()) : dbExtra(_dbExra){}
     U2DataId load(SQLiteQuery* q) { return q->getDataId(0, q->getDataType(1), dbExtra);}
 
 protected:
diff --git a/src/corelibs/U2Core/src/dbi/U2VariantDbi.h b/src/corelibs/U2Core/src/dbi/U2VariantDbi.h
index 4c4e98c..96ce06b 100644
--- a/src/corelibs/U2Core/src/dbi/U2VariantDbi.h
+++ b/src/corelibs/U2Core/src/dbi/U2VariantDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/UdrDbi.cpp b/src/corelibs/U2Core/src/dbi/UdrDbi.cpp
index 6289f20..5928ef2 100644
--- a/src/corelibs/U2Core/src/dbi/UdrDbi.cpp
+++ b/src/corelibs/U2Core/src/dbi/UdrDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/dbi/UdrDbi.h b/src/corelibs/U2Core/src/dbi/UdrDbi.h
index 2998bf5..c27cb20 100644
--- a/src/corelibs/U2Core/src/dbi/UdrDbi.h
+++ b/src/corelibs/U2Core/src/dbi/UdrDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -90,6 +90,8 @@ public:
      * Do not forget to release the memory.
      */
     virtual OutputStream * createOutputStream(const UdrRecordId &recordId, int fieldNum, qint64 size, U2OpStatus &os) = 0;
+
+    virtual ModificationAction* getModificationAction(const U2DataId& id) = 0;
 };
 
 } // U2
diff --git a/src/corelibs/U2Core/src/globals/AppContext.cpp b/src/corelibs/U2Core/src/globals/AppContext.cpp
index 96736a7..61240bc 100644
--- a/src/corelibs/U2Core/src/globals/AppContext.cpp
+++ b/src/corelibs/U2Core/src/globals/AppContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/AppContext.h b/src/corelibs/U2Core/src/globals/AppContext.h
index 6ae596f..2c06ae0 100644
--- a/src/corelibs/U2Core/src/globals/AppContext.h
+++ b/src/corelibs/U2Core/src/globals/AppContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,79 +22,81 @@
 #ifndef _U2_APPCONTEXT_H_
 #define _U2_APPCONTEXT_H_
 
+#include <QObject>
+
 #include "global.h"
 
 namespace U2 {
 
 template<class T> class IdRegistry;
-class PluginSupport;
-class ServiceRegistry;
-class ProjectLoader;
-class MainWindow;
-class ProjectView;
-class Project;
-class ProjectService;
-class PluginViewer;
-class Settings;
+class AlignmentAlgorithmsRegistry;
+class AnnotationSettingsRegistry;
+class AppFileStorage;
+class AppGlobalObject;
 class AppSettings;
 class AppSettingsGUI;
-class DocumentFormatRegistry;
-class IOAdapterRegistry;
-class DNATranslationRegistry;
+class AssemblyConsensusAlgorithmRegistry;
+class AutoAnnotationsSupport;
+class CDSearchFactoryRegistry;
+class CMDLineRegistry;
+class ConvertFactoryRegistry;
+class CredentialsAsker;
+class CudaGpuRegistry;
+class DBXRefRegistry;
 class DNAAlphabetRegistry;
+class DNATranslationRegistry;
+class DataBaseRegistry;
+class DnaAssemblyAlgRegistry;
+class DocumentFormatRegistry;
+class ExternalToolRegistry;
 class GObjectViewFactoryRegistry;
-class ResourceTracker;
-class TaskScheduler;
-class AnnotationSettingsRegistry;
-class TestFramework;
-class DBXRefRegistry;
-class SubstMatrixRegistry;
-class SmithWatermanTaskFactoryRegistry;
-class SWMulAlignResultNamesTagsRegistry;
+class GenomeAssemblyAlgRegistry;
+class IOAdapterRegistry;
+class MSAConsensusAlgorithmRegistry;
+class MSADistanceAlgorithmRegistry;
+class MainWindow;
 class MolecularSurfaceFactoryRegistry;
-class SWResultFilterRegistry;
 class MsaColorSchemeRegistry;
 class MsaHighlightingSchemeRegistry;
-class SecStructPredictAlgRegistry;
-class CudaGpuRegistry;
+class OPCommonWidgetFactoryRegistry;
+class OPWidgetFactoryRegistry;
 class OpenCLGpuRegistry;
-class RecentlyDownloadedCache;
+class PWMConversionAlgorithmRegistry;
+class PasswordStorage;
+class PasteFactory;
+class PhyTreeGeneratorRegistry;
+class PluginSupport;
+class PluginViewer;
+class Project;
+class ProjectFilterTaskRegistry;
+class ProjectLoader;
+class ProjectService;
+class ProjectView;
 class ProtocolInfoRegistry;
+class QDActorPrototypeRegistry;
+class RecentlyDownloadedCache;
 class RemoteMachineMonitor;
-class PhyTreeGeneratorRegistry;
-class CMDLineRegistry;
-class MSAConsensusAlgorithmRegistry;
-class AssemblyConsensusAlgorithmRegistry;
-class MSADistanceAlgorithmRegistry;
-class PWMConversionAlgorithmRegistry;
-class VirtualFileSystemRegistry;
-class DnaAssemblyAlgRegistry;
-class GenomeAssemblyAlgRegistry;
-class AppGlobalObject;
-class DataBaseRegistry;
-class ExternalToolRegistry;
 class RepeatFinderTaskFactoryRegistry;
-class U2DbiRegistry;
-class UdrSchemaRegistry;
-class QDActorPrototypeRegistry;
-class StructuralAlignmentAlgorithmRegistry;
-class AutoAnnotationsSupport;
-class CDSearchFactoryRegistry;
-class UGUITestBase;
+class ResourceTracker;
+class SWMulAlignResultNamesTagsRegistry;
+class SWResultFilterRegistry;
+class ScriptingToolRegistry;
+class SecStructPredictAlgRegistry;
+class ServiceRegistry;
+class Settings;
+class SmithWatermanTaskFactoryRegistry;
 class SplicedAlignmentTaskRegistry;
-class OPCommonWidgetFactoryRegistry;
-class OPWidgetFactoryRegistry;
-class WorkflowScriptRegistry;
-class AppFileStorage;
+class StructuralAlignmentAlgorithmRegistry;
+class SubstMatrixRegistry;
+class TaskScheduler;
+class TestFramework;
 class U2DataPathRegistry;
-class AlignmentAlgorithmsRegistry;
-class ScriptingToolRegistry;
-class CredentialsAsker;
-class PasswordStorage;
-class ConvertFactoryRegistry;
+class U2DbiRegistry;
+class UGUITestBase;
+class UdrSchemaRegistry;
+class VirtualFileSystemRegistry;
 class WelcomePageAction;
-class ProjectFilterTaskRegistry;
-class PasteFactory;
+class WorkflowScriptRegistry;
 
 class U2CORE_EXPORT AppContext  : public QObject {
     Q_OBJECT
diff --git a/src/corelibs/U2Core/src/globals/AppFileStorage.cpp b/src/corelibs/U2Core/src/globals/AppFileStorage.cpp
index d1486f6..7e5fabe 100644
--- a/src/corelibs/U2Core/src/globals/AppFileStorage.cpp
+++ b/src/corelibs/U2Core/src/globals/AppFileStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
+#include <QApplication>
 #include <QDir>
 
 #include <U2Core/AppContext.h>
@@ -99,7 +93,7 @@ QString WorkflowProcess::getTempDirectory() const {
     if (!dir.exists()) {
         bool created = dir.mkpath(tempDirectory);
         if (!created) {
-            coreLog.error(QString("Can not create a directory: %1").arg(tempDirectory));
+            coreLog.error(QString("Can not create a folder: %1").arg(tempDirectory));
         }
     }
     return tempDirectory;
@@ -143,7 +137,7 @@ void AppFileStorage::init(U2OpStatus &os) {
     QDir dir(storageDir);
     if (!dir.exists()) {
         bool created = dir.mkpath(storageDir);
-        CHECK_EXT(created, os.setError(QString("Can not create a directory: %1").arg(storageDir)), );
+        CHECK_EXT(created, os.setError(QString("Can not create a folder: %1").arg(storageDir)), );
     }
     QString storageUrl = storageDir + "/" + DB_FILE_NAME;
 
@@ -207,7 +201,7 @@ void AppFileStorage::registerWorkflowProcess(FileStorage::WorkflowProcess &proce
     QDir wdDir(wdDirPath);
     bool created = wdDir.mkpath(wdDirPath);
     if (!created) {
-        os.setError(QString("Can not create a directory: %1").arg(wdDirPath));
+        os.setError(QString("Can not create a folder: %1").arg(wdDirPath));
         return;
     }
 
@@ -299,7 +293,7 @@ QString AppFileStorage::createDirectory() const {
     QDir storageRoot(storageDir + "/" + WD_DIR_NAME);
     if (!storageRoot.exists()) {
         bool created = storageRoot.mkpath(storageRoot.path());
-        SAFE_POINT(created, QString("Can not create a directory: %1").arg(storageRoot.path()), "");
+        SAFE_POINT(created, QString("Can not create a folder: %1").arg(storageRoot.path()), "");
     }
     uint time = QDateTime::currentDateTime().toTime_t();
     QString baseDirName = QByteArray::number(time);
diff --git a/src/corelibs/U2Core/src/globals/AppFileStorage.h b/src/corelibs/U2Core/src/globals/AppFileStorage.h
index 340d5ae..49584aa 100644
--- a/src/corelibs/U2Core/src/globals/AppFileStorage.h
+++ b/src/corelibs/U2Core/src/globals/AppFileStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -92,7 +92,7 @@ public:
     void unregisterWorkflowProcess(FileStorage::WorkflowProcess &process, U2OpStatus &os);
 
     /**
-     * Removes all files from the storage directory and all records from the storage
+     * Removes all files from the storage folder and all records from the storage
      * which are not used by registered workflow processes (active owners)
      * These active owners could be created not only by current process,
      * but by some other UGENE processes
@@ -100,7 +100,7 @@ public:
     void cleanup(U2OpStatus &os);
 
     /**
-     * Returns the absolute path to the new directory in the storage directory.
+     * Returns the absolute path to the new folder in the storage folder.
      * The result path does not contain "/" symbol in the end
      */
     QString createDirectory() const;
diff --git a/src/corelibs/U2Core/src/globals/AppGlobalObject.cpp b/src/corelibs/U2Core/src/globals/AppGlobalObject.cpp
index 790fc85..8bb5cec 100644
--- a/src/corelibs/U2Core/src/globals/AppGlobalObject.cpp
+++ b/src/corelibs/U2Core/src/globals/AppGlobalObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/AppGlobalObject.h b/src/corelibs/U2Core/src/globals/AppGlobalObject.h
index a66482a..440ffcb 100644
--- a/src/corelibs/U2Core/src/globals/AppGlobalObject.h
+++ b/src/corelibs/U2Core/src/globals/AppGlobalObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_APP_GLOBAL_OBJECT_H_
 #define _U2_APP_GLOBAL_OBJECT_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 #include <U2Core/Identifiable.h>
 
diff --git a/src/corelibs/U2Core/src/globals/AppResources.cpp b/src/corelibs/U2Core/src/globals/AppResources.cpp
index 18f4cd1..4924854 100644
--- a/src/corelibs/U2Core/src/globals/AppResources.cpp
+++ b/src/corelibs/U2Core/src/globals/AppResources.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Test/GTest.h>
 
-#include <QtCore/QThread>
-#include <QtCore/QProcess>
+#include <QThread>
+#include <QProcess>
 
 #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD)
 #include <stdio.h>
diff --git a/src/corelibs/U2Core/src/globals/AppResources.h b/src/corelibs/U2Core/src/globals/AppResources.h
index 56a6815..0c26b5b 100644
--- a/src/corelibs/U2Core/src/globals/AppResources.h
+++ b/src/corelibs/U2Core/src/globals/AppResources.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/global.h>
 #include <U2Core/U2SafePoints.h>
-#include <QtCore/QHash>
-#include <QtCore/QSemaphore>
-#include <QtCore/QReadWriteLock>
+#include <QHash>
+#include <QSemaphore>
+#include <QReadWriteLock>
 #include <U2Core/U2OpStatus.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/globals/AppSettings.h b/src/corelibs/U2Core/src/globals/AppSettings.h
index fb2c96d..8a8aae3 100644
--- a/src/corelibs/U2Core/src/globals/AppSettings.h
+++ b/src/corelibs/U2Core/src/globals/AppSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
index 9076173..d063565 100644
--- a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
+++ b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
index 6e21c65..653e51d 100644
--- a/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
+++ b/src/corelibs/U2Core/src/globals/AutoAnnotationsSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_AUTO_ANNOTATIONS_SUPPORT_H_
 #define _U2_AUTO_ANNOTATIONS_SUPPORT_H_
 
-#include <QtCore/QMutex>
-#include <QtCore/QSet>
+#include <QMutex>
+#include <QSet>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
index 9c4496c..9228a8e 100644
--- a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
+++ b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include "BaseDocumentFormats.h"
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/StrPackUtils.h>
+
+#include "BaseDocumentFormats.h"
 
 namespace U2 {
 
@@ -59,11 +61,124 @@ const DocumentFormatId BaseDocumentFormats::SRF("srfasta");
 const DocumentFormatId BaseDocumentFormats::STOCKHOLM("stockholm");
 const DocumentFormatId BaseDocumentFormats::UGENEDB("usqlite");
 const DocumentFormatId BaseDocumentFormats::VCF4("vcf");
+const DocumentFormatId BaseDocumentFormats::VECTOR_NTI_ALIGNX("Vector_nti_alignx");
 const DocumentFormatId BaseDocumentFormats::VECTOR_NTI_SEQUENCE("vector_nti_sequence");
 
 DocumentFormat* BaseDocumentFormats::get(const DocumentFormatId& formatId) {
     return AppContext::getDocumentFormatRegistry()->getFormatById(formatId);
 }
 
+namespace {
+
+StrStrMap initInvalidFormatIdsMap() {
+    StrStrMap invalidIds2trueIds;
+
+    // IDs from 1.26.0
+    invalidIds2trueIds.insert("ABI", BaseDocumentFormats::ABIF);
+    invalidIds2trueIds.insert("ACE", BaseDocumentFormats::ACE);
+    invalidIds2trueIds.insert("BAM", BaseDocumentFormats::BAM);
+    invalidIds2trueIds.insert("BED", BaseDocumentFormats::BED);
+    invalidIds2trueIds.insert("CLUSTAL", BaseDocumentFormats::CLUSTAL_ALN);
+    invalidIds2trueIds.insert("database_connection", BaseDocumentFormats::DATABASE_CONNECTION);
+    invalidIds2trueIds.insert("Diff", BaseDocumentFormats::DIFF);
+    invalidIds2trueIds.insert("FASTA", BaseDocumentFormats::FASTA);
+    invalidIds2trueIds.insert("FASTQ", BaseDocumentFormats::FASTQ);
+    invalidIds2trueIds.insert("FPKM-Tracking", BaseDocumentFormats::FPKM_TRACKING_FORMAT);
+    invalidIds2trueIds.insert("GFF", BaseDocumentFormats::GFF);
+    invalidIds2trueIds.insert("GTF", BaseDocumentFormats::GTF);
+    invalidIds2trueIds.insert("Index", BaseDocumentFormats::INDEX);
+    invalidIds2trueIds.insert("MEGA", BaseDocumentFormats::MEGA);
+    invalidIds2trueIds.insert("MSF", BaseDocumentFormats::MSF);
+    invalidIds2trueIds.insert("Newick", BaseDocumentFormats::NEWICK);
+    invalidIds2trueIds.insert("Nexus", BaseDocumentFormats::NEXUS);
+    invalidIds2trueIds.insert("PDW", BaseDocumentFormats::PDW);
+    invalidIds2trueIds.insert("PHYLIP-Interleaved", BaseDocumentFormats::PHYLIP_INTERLEAVED);
+    invalidIds2trueIds.insert("PHYLIP-Sequential", BaseDocumentFormats::PHYLIP_SEQUENTIAL);
+    invalidIds2trueIds.insert("MMDB", BaseDocumentFormats::PLAIN_ASN);
+    invalidIds2trueIds.insert("EMBL", BaseDocumentFormats::PLAIN_EMBL);
+    invalidIds2trueIds.insert("Genbank", BaseDocumentFormats::PLAIN_GENBANK);
+    invalidIds2trueIds.insert("GenBank", BaseDocumentFormats::PLAIN_GENBANK);
+    invalidIds2trueIds.insert("PDB", BaseDocumentFormats::PLAIN_PDB);
+    invalidIds2trueIds.insert("Swiss-Prot", BaseDocumentFormats::PLAIN_SWISS_PROT);
+    invalidIds2trueIds.insert("Text", BaseDocumentFormats::PLAIN_TEXT);
+    invalidIds2trueIds.insert("Raw", BaseDocumentFormats::RAW_DNA_SEQUENCE);
+    invalidIds2trueIds.insert("SAM", BaseDocumentFormats::SAM);
+    invalidIds2trueIds.insert("SCF", BaseDocumentFormats::SCF);
+    invalidIds2trueIds.insert("SNP", BaseDocumentFormats::SNP);
+    invalidIds2trueIds.insert("SRFASTA", BaseDocumentFormats::SRF);
+    invalidIds2trueIds.insert("Stockholm", BaseDocumentFormats::STOCKHOLM);
+    invalidIds2trueIds.insert("Usqlite", BaseDocumentFormats::UGENEDB);
+    invalidIds2trueIds.insert("VCF", BaseDocumentFormats::VCF4);
+    invalidIds2trueIds.insert("Vector NTI/AlignX", BaseDocumentFormats::VECTOR_NTI_ALIGNX);
+    invalidIds2trueIds.insert("Vector NTI Sequence", BaseDocumentFormats::VECTOR_NTI_SEQUENCE);
+
+    return invalidIds2trueIds;
+}
+
+StrStrMap initFormatIdsMap() {
+    StrStrMap anyIds2trueIds;
+
+    // IDs from 1.25.0 and lower
+    anyIds2trueIds.insert(BaseDocumentFormats::ABIF, BaseDocumentFormats::ABIF);
+    anyIds2trueIds.insert(BaseDocumentFormats::ACE, BaseDocumentFormats::ACE);
+    anyIds2trueIds.insert(BaseDocumentFormats::BAM, BaseDocumentFormats::BAM);
+    anyIds2trueIds.insert(BaseDocumentFormats::BED, BaseDocumentFormats::BED);
+    anyIds2trueIds.insert(BaseDocumentFormats::CLUSTAL_ALN, BaseDocumentFormats::CLUSTAL_ALN);
+    anyIds2trueIds.insert(BaseDocumentFormats::DATABASE_CONNECTION, BaseDocumentFormats::DATABASE_CONNECTION);
+    anyIds2trueIds.insert(BaseDocumentFormats::DIFF, BaseDocumentFormats::DIFF);
+    anyIds2trueIds.insert(BaseDocumentFormats::FASTA, BaseDocumentFormats::FASTA);
+    anyIds2trueIds.insert(BaseDocumentFormats::FASTQ, BaseDocumentFormats::FASTQ);
+    anyIds2trueIds.insert(BaseDocumentFormats::FPKM_TRACKING_FORMAT, BaseDocumentFormats::FPKM_TRACKING_FORMAT);
+    anyIds2trueIds.insert(BaseDocumentFormats::GFF, BaseDocumentFormats::GFF);
+    anyIds2trueIds.insert(BaseDocumentFormats::GTF, BaseDocumentFormats::GTF);
+    anyIds2trueIds.insert(BaseDocumentFormats::INDEX, BaseDocumentFormats::INDEX);
+    anyIds2trueIds.insert(BaseDocumentFormats::MEGA, BaseDocumentFormats::MEGA);
+    anyIds2trueIds.insert(BaseDocumentFormats::MSF, BaseDocumentFormats::MSF);
+    anyIds2trueIds.insert(BaseDocumentFormats::NEWICK, BaseDocumentFormats::NEWICK);
+    anyIds2trueIds.insert(BaseDocumentFormats::NEXUS, BaseDocumentFormats::NEXUS);
+    anyIds2trueIds.insert(BaseDocumentFormats::PDW, BaseDocumentFormats::PDW);
+    anyIds2trueIds.insert(BaseDocumentFormats::PHYLIP_INTERLEAVED, BaseDocumentFormats::PHYLIP_INTERLEAVED);
+    anyIds2trueIds.insert(BaseDocumentFormats::PHYLIP_SEQUENTIAL, BaseDocumentFormats::PHYLIP_SEQUENTIAL);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_ASN, BaseDocumentFormats::PLAIN_ASN);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_EMBL, BaseDocumentFormats::PLAIN_EMBL);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_GENBANK, BaseDocumentFormats::PLAIN_GENBANK);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_PDB, BaseDocumentFormats::PLAIN_PDB);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_SWISS_PROT, BaseDocumentFormats::PLAIN_SWISS_PROT);
+    anyIds2trueIds.insert(BaseDocumentFormats::PLAIN_TEXT, BaseDocumentFormats::PLAIN_TEXT);
+    anyIds2trueIds.insert(BaseDocumentFormats::RAW_DNA_SEQUENCE, BaseDocumentFormats::RAW_DNA_SEQUENCE);
+    anyIds2trueIds.insert(BaseDocumentFormats::SAM, BaseDocumentFormats::SAM);
+    anyIds2trueIds.insert(BaseDocumentFormats::SCF, BaseDocumentFormats::SCF);
+    anyIds2trueIds.insert(BaseDocumentFormats::SNP, BaseDocumentFormats::SNP);
+    anyIds2trueIds.insert(BaseDocumentFormats::SRF, BaseDocumentFormats::SRF);
+    anyIds2trueIds.insert(BaseDocumentFormats::STOCKHOLM, BaseDocumentFormats::STOCKHOLM);
+    anyIds2trueIds.insert(BaseDocumentFormats::UGENEDB, BaseDocumentFormats::UGENEDB);
+    anyIds2trueIds.insert(BaseDocumentFormats::VCF4, BaseDocumentFormats::VCF4);
+    anyIds2trueIds.insert(BaseDocumentFormats::VECTOR_NTI_ALIGNX, BaseDocumentFormats::VECTOR_NTI_ALIGNX);
+    anyIds2trueIds.insert(BaseDocumentFormats::VECTOR_NTI_SEQUENCE, BaseDocumentFormats::VECTOR_NTI_SEQUENCE);
+
+    // IDs from 1.26.0
+    anyIds2trueIds.unite(initInvalidFormatIdsMap());
+
+    return anyIds2trueIds;
+}
+
+}
+
+bool BaseDocumentFormats::equal(const DocumentFormatId &first, const DocumentFormatId &second) {
+    // After UGENE-5719 fix format IDs were occasionally changed
+    // Case insensitive comparison grants a correct comparison result
+    static const StrStrMap formatIds = initFormatIdsMap();
+    return formatIds.value(first, first) == formatIds.value(second, second);
+}
+
+bool BaseDocumentFormats::isInvalidId(const DocumentFormatId &formatId) {
+    static const QStringList invalidIdsList = initInvalidFormatIdsMap().keys();
+    return invalidIdsList.contains(formatId);
+}
+
+DocumentFormatId BaseDocumentFormats::toValidId(const DocumentFormatId &invalidFormatId) {
+    static const StrStrMap invalidIds = initInvalidFormatIdsMap();
+    return invalidIds.value(invalidFormatId, invalidFormatId);
+}
 
-}//namespace
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.h b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.h
index eebf6e8..c71f55d 100644
--- a/src/corelibs/U2Core/src/globals/BaseDocumentFormats.h
+++ b/src/corelibs/U2Core/src/globals/BaseDocumentFormats.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -67,9 +67,13 @@ public:
     static const DocumentFormatId STOCKHOLM;
     static const DocumentFormatId UGENEDB;
     static const DocumentFormatId VCF4;
+    static const DocumentFormatId VECTOR_NTI_ALIGNX;
     static const DocumentFormatId VECTOR_NTI_SEQUENCE;
 
     static DocumentFormat* get(const DocumentFormatId& formatId);
+    static bool equal(const DocumentFormatId &first, const DocumentFormatId &second);   // a workaround for UGENE-5521, use this method to compare format IDs
+    static bool isInvalidId(const DocumentFormatId &formatId);
+    static DocumentFormatId toValidId(const DocumentFormatId &invalidFormatId);
 };
 
 
diff --git a/src/corelibs/U2Core/src/globals/ClipboardController.cpp b/src/corelibs/U2Core/src/globals/ClipboardController.cpp
index 321d0b2..a83e4b7 100644
--- a/src/corelibs/U2Core/src/globals/ClipboardController.cpp
+++ b/src/corelibs/U2Core/src/globals/ClipboardController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "ClipboardController.h"
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 
 namespace U2 {
@@ -61,15 +61,14 @@ QList<DNASequence> PasteUtils::getSequences(const QList<Document*>& docs, U2OpSt
             res.append(seq);
 
         }
-
-        foreach(GObject *msaObj, doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT)) {
-            MAlignmentObject* casted = qobject_cast<MAlignmentObject*>(msaObj);
+        foreach(GObject *msaObj, doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
+            MultipleSequenceAlignmentObject* casted = qobject_cast<MultipleSequenceAlignmentObject*>(msaObj);
             if (casted == NULL){
                 continue;
             }
-            foreach(const MAlignmentRow& row, casted->getMAlignment().getRows()) {
-                DNASequence seq = row.getSequence();
-                seq.seq = row.getData();
+            foreach (const MultipleSequenceAlignmentRow &row, casted->getMsa()->getMsaRows()) {
+                DNASequence seq = row->getSequence();
+                seq.seq = row->getData();
                 seq.alphabet = casted->getAlphabet();
                 res.append(seq);
             }
diff --git a/src/corelibs/U2Core/src/globals/ClipboardController.h b/src/corelibs/U2Core/src/globals/ClipboardController.h
index 9e18dd6..983c68c 100644
--- a/src/corelibs/U2Core/src/globals/ClipboardController.h
+++ b/src/corelibs/U2Core/src/globals/ClipboardController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Counter.cpp b/src/corelibs/U2Core/src/globals/Counter.cpp
index 478faca..44dccab 100644
--- a/src/corelibs/U2Core/src/globals/Counter.cpp
+++ b/src/corelibs/U2Core/src/globals/Counter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Counter.h b/src/corelibs/U2Core/src/globals/Counter.h
index bdde402..deefa01 100644
--- a/src/corelibs/U2Core/src/globals/Counter.h
+++ b/src/corelibs/U2Core/src/globals/Counter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,10 @@
 #ifndef _U2_COUNTER_H_
 #define _U2_COUNTER_H_
 
-#include <U2Core/global.h>
+#include <QList>
+#include <QObject>
 
-#include <QtCore/QList>
+#include <U2Core/global.h>
 
 namespace U2 {
 
@@ -85,9 +86,13 @@ private:
     if (NULL == cvar) { \
         cvar = new GReportableCounter(name, suffix, 1); \
         cvar->destroyMe = true; \
-    } \
+            } \
     SimpleEventCounter tvar(cvar)
 
+#define GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, condition, name, suffix) \
+    if(condition) {\
+        GRUNTIME_NAMED_COUNTER(cvar, tvar, name, suffix); \
+    }
 
 } //namespace
 
diff --git a/src/corelibs/U2Core/src/globals/CredentialsAsker.cpp b/src/corelibs/U2Core/src/globals/CredentialsAsker.cpp
index 363c3b7..d629b3f 100644
--- a/src/corelibs/U2Core/src/globals/CredentialsAsker.cpp
+++ b/src/corelibs/U2Core/src/globals/CredentialsAsker.cpp
@@ -1,5 +1,5 @@
 /**
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  * UGENE - Integrated Bioinformatics Tools.
  *
diff --git a/src/corelibs/U2Core/src/globals/CredentialsAsker.h b/src/corelibs/U2Core/src/globals/CredentialsAsker.h
index d0ceb9a..f67c458 100644
--- a/src/corelibs/U2Core/src/globals/CredentialsAsker.h
+++ b/src/corelibs/U2Core/src/globals/CredentialsAsker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/DBXRefRegistry.cpp b/src/corelibs/U2Core/src/globals/DBXRefRegistry.cpp
index 018423f..23d6257 100644
--- a/src/corelibs/U2Core/src/globals/DBXRefRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/DBXRefRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,9 @@
 #include "DBXRefRegistry.h"
 #include <U2Core/Log.h>
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
+#include <QFile>
+#include <QTextStream>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/DBXRefRegistry.h b/src/corelibs/U2Core/src/globals/DBXRefRegistry.h
index 1b3b46c..9d650db 100644
--- a/src/corelibs/U2Core/src/globals/DBXRefRegistry.h
+++ b/src/corelibs/U2Core/src/globals/DBXRefRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,11 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QObject>
-#include <QtScript/QScriptValue>
-#include <QtScript/QScriptEngine>
-#include <QtCore/QStringList>
+#include <QMap>
+#include <QObject>
+#include <QScriptValue>
+#include <QScriptEngine>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/DataBaseRegistry.cpp b/src/corelibs/U2Core/src/globals/DataBaseRegistry.cpp
index 066751d..074ee47 100644
--- a/src/corelibs/U2Core/src/globals/DataBaseRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/DataBaseRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/DataBaseRegistry.h b/src/corelibs/U2Core/src/globals/DataBaseRegistry.h
index 25a5afd..d9142ac 100644
--- a/src/corelibs/U2Core/src/globals/DataBaseRegistry.h
+++ b/src/corelibs/U2Core/src/globals/DataBaseRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _DATABASE_REGISTRY_
 #define _DATABASE_REGISTRY_
 
-#include <QtCore/QMap>
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QObject>
+#include <QMap>
+#include <QString>
+#include <QList>
+#include <QObject>
 
 #include <U2Core/global.h>
 #include <U2Core/AnnotationData.h>
diff --git a/src/corelibs/U2Core/src/globals/DataPathRegistry.cpp b/src/corelibs/U2Core/src/globals/DataPathRegistry.cpp
index c56e507..d291813 100644
--- a/src/corelibs/U2Core/src/globals/DataPathRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/DataPathRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/DataPathRegistry.h b/src/corelibs/U2Core/src/globals/DataPathRegistry.h
index cccecd8..d17fdc1 100644
--- a/src/corelibs/U2Core/src/globals/DataPathRegistry.h
+++ b/src/corelibs/U2Core/src/globals/DataPathRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QDir>
+#include <QMap>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.cpp b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.cpp
index 2ffadc3..40f5328 100644
--- a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,10 @@ ExternalTool::ExternalTool(QString _name, QString _path) : name(_name), path(_pa
 ExternalTool::~ExternalTool() {
 }
 
+const StrStrMap &ExternalTool::getAdditionalInfo() const {
+    return additionalInfo;
+}
+
 void ExternalTool::setPath(const QString& _path) {
     if (path!=_path) {
         path=_path;
@@ -55,6 +59,10 @@ void ExternalTool::setVersion(const QString& _version) {
     version=_version;
 }
 
+void ExternalTool::setAdditionalInfo(const StrStrMap &newAdditionalInfo) {
+    additionalInfo = newAdditionalInfo;
+}
+
 ExternalToolValidation ExternalTool::getToolValidation() {
     ExternalToolValidation result(toolRunnerProgramm, executableFileName, validationArguments, validMessage, errorDescriptions);
     return result;
@@ -161,7 +169,7 @@ ExternalToolValidation DefaultExternalToolValidations::pythonValidation(){
     QStringList pythonArgs;
     pythonArgs << "--version";
     QString pmsg = "Python";
-    QStrStrMap perrMsgs;
+    StrStrMap perrMsgs;
     perrMsgs.insert(ExternalToolValidation::DEFAULT_DESCR_KEY, "Python 2 required for this tool. Please install Python or set your PATH variable if you have it installed.");
 
     ExternalToolValidation pythonValidation("", pythonExecutable, pythonArgs, pmsg, perrMsgs);
@@ -173,7 +181,7 @@ ExternalToolValidation DefaultExternalToolValidations::rValidation(){
     QStringList rArgs;
     rArgs << "--version";
     QString rmsg = "R";
-    QStrStrMap rerrMsgs;
+    StrStrMap rerrMsgs;
     rerrMsgs.insert(ExternalToolValidation::DEFAULT_DESCR_KEY, "R Script required for this tool. Please install R Script or set your PATH variable if you have it installed.");
 
     ExternalToolValidation rValidation("", rExecutable, rArgs, rmsg, rerrMsgs);
diff --git a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
index 102591d..c282f37 100644
--- a/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
+++ b/src/corelibs/U2Core/src/globals/ExternalToolRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,16 @@
 #ifndef _U2_EXTERNAL_TOOL_REGISTRY_H
 #define _U2_EXTERNAL_TOOL_REGISTRY_H
 
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QList>
-#include <QtCore/QMap>
-#include <QtCore/QVariant>
-#include <QtGui/QIcon>
+#include <QIcon>
+#include <QList>
+#include <QMap>
+#include <QString>
+#include <QStringList>
+#include <QVariant>
 
 #include <U2Core/IdRegistry.h>
 #include <U2Core/global.h>
+#include <U2Core/StrPackUtils.h>
 
 namespace U2 {
 
@@ -38,7 +39,7 @@ namespace U2 {
 class U2CORE_EXPORT ExternalToolValidation {
 public:
 
-    ExternalToolValidation(const QString& _toolRunnerProgram, const QString& _executableFile, const QStringList& _arguments, const QString& _expectedMsg, const QStrStrMap& _possibleErrorsDescr = QStrStrMap())
+    ExternalToolValidation(const QString& _toolRunnerProgram, const QString& _executableFile, const QStringList& _arguments, const QString& _expectedMsg, const StrStrMap& _possibleErrorsDescr = StrStrMap())
         :toolRunnerProgram(_toolRunnerProgram)
         ,executableFile(_executableFile)
         ,arguments(_arguments)
@@ -51,7 +52,7 @@ public:
     QString executableFile;
     QStringList arguments;
     QString expectedMsg;
-    QStrStrMap possibleErrorsDescr;
+    StrStrMap possibleErrorsDescr;
 
     static const QString DEFAULT_DESCR_KEY;
 };
@@ -69,16 +70,17 @@ public:
     const QIcon&        getWarnIcon()  const { return warnIcon; }
     const QString&      getDescription()  const { return description; }
     const QString&      getToolRunnerProgram()  const { return toolRunnerProgramm; }
-    const virtual QStringList  getToolRunnerAdditionalOptions() { return QStringList();};
+    const virtual QStringList  getToolRunnerAdditionalOptions() { return QStringList();}
     const QString&      getExecutableFileName()  const { return executableFileName; }
     const QStringList&  getValidationArguments()  const { return validationArguments; }
     const QString&      getValidMessage()  const { return validMessage; }
     const QString&      getVersion()  const { return version; }
     const QRegExp&      getVersionRegExp()  const { return versionRegExp; }
     const QString&      getToolKitName()  const { return toolKitName; }
-    const QStrStrMap&   getErrorDescriptions()  const { return errorDescriptions; }
+    const StrStrMap&    getErrorDescriptions()  const { return errorDescriptions; }
+    const StrStrMap&    getAdditionalInfo() const;
 
-    virtual void        getAdditionalParameters(const QString& output) { Q_UNUSED(output) };
+    virtual void        getAdditionalParameters(const QString& output) { Q_UNUSED(output) }
 
     ExternalToolValidation getToolValidation();
     const QList<ExternalToolValidation>& getToolAdditionalValidations() const { return additionalValidators; }
@@ -87,10 +89,12 @@ public:
     void setPath(const QString& _path);
     void setValid(bool _isValid);
     void setVersion(const QString& _version);
+    void setAdditionalInfo(const StrStrMap &additionalInfo);
 
     bool isValid() const { return isValidTool; }
     bool isMuted() const;
     bool isModule() const { return isModuleTool; }
+
 signals:
     void si_pathChanged();
     void si_toolValidationStatusChanged(bool isValid);
@@ -110,7 +114,8 @@ protected:
     QRegExp     versionRegExp;          // RegExp to get the version from the validation run output
     bool        isValidTool;            // tool state
     QString     toolKitName;            // toolkit which includes the tool
-    QStrStrMap  errorDescriptions;      // error messages for the tool's standard errors
+    StrStrMap   errorDescriptions;      // error messages for the tool's standard errors
+    StrStrMap   additionalInfo;         // any additional info, it is specific for the extenal tool
     QList<ExternalToolValidation> additionalValidators;     // validators for the environment state (e.g. some external program should be installed)
     QStringList dependencies;           // a list of dependencies for the tool of another external tools (e.g. python for python scripts).
     bool        muted;                  // a muted tool doesn't write its validation error to the log
@@ -169,12 +174,12 @@ public:
     virtual void stop() = 0;
 
     virtual void check(const QString& toolName, const QString& toolPath, ExternalToolValidationListener* listener) = 0;
-    virtual void check(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener) = 0;
+    virtual void check(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener) = 0;
 
     virtual void validate(const QString& toolName, ExternalToolValidationListener* listener = NULL) = 0;
     virtual void validate(const QString& toolName, const QString& path, ExternalToolValidationListener* listener = NULL) = 0;
     virtual void validate(const QStringList& toolNames, ExternalToolValidationListener* listener = NULL) = 0;
-    virtual void validate(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener = NULL) = 0;
+    virtual void validate(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener = NULL) = 0;
 
     virtual bool isValid(const QString& toolName) const = 0;
     virtual ExternalToolState getToolState(const QString& toolName) const = 0;
diff --git a/src/corelibs/U2Core/src/globals/FormatSettings.cpp b/src/corelibs/U2Core/src/globals/FormatSettings.cpp
index 8d2880c..c22fc5c 100644
--- a/src/corelibs/U2Core/src/globals/FormatSettings.cpp
+++ b/src/corelibs/U2Core/src/globals/FormatSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/FormatSettings.h b/src/corelibs/U2Core/src/globals/FormatSettings.h
index a8dad65..baaa969 100644
--- a/src/corelibs/U2Core/src/globals/FormatSettings.h
+++ b/src/corelibs/U2Core/src/globals/FormatSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_ADVANCED_APPLICATIONS_SETTINGS_H_
 #define _U2_ADVANCED_APPLICATIONS_SETTINGS_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/globals/GUrl.cpp b/src/corelibs/U2Core/src/globals/GUrl.cpp
index ab68ceb..0b78fd1 100644
--- a/src/corelibs/U2Core/src/globals/GUrl.cpp
+++ b/src/corelibs/U2Core/src/globals/GUrl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,8 +36,12 @@ static QString makeFilePathCanonical(const QString& originalUrl) {
         result = result.mid(fileUrlPrefix.length());
 #ifdef Q_OS_WIN
         // on Windows, all slashes after "file:" can be trimmed, on Unix/Mac one must be kept to specify that it's an absolute path
-        while(result.startsWith("/")) {
-            result = result.mid(1);
+        if (result.startsWith("/")) {
+            while (result.startsWith("/")) {
+                result = result.mid(1);
+            }
+        } else {
+            result.prepend("//");
         }
 #endif
     }
diff --git a/src/corelibs/U2Core/src/globals/GUrl.h b/src/corelibs/U2Core/src/globals/GUrl.h
index 7ee0b9c..5da1b38 100644
--- a/src/corelibs/U2Core/src/globals/GUrl.h
+++ b/src/corelibs/U2Core/src/globals/GUrl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_GURL_H_
 #define _U2_GURL_H_
 
+#include <QMetaType>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/globals/Identifiable.h b/src/corelibs/U2Core/src/globals/Identifiable.h
index e0144dc..6139012 100644
--- a/src/corelibs/U2Core/src/globals/Identifiable.h
+++ b/src/corelibs/U2Core/src/globals/Identifiable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/L10n.h b/src/corelibs/U2Core/src/globals/L10n.h
index b423c11..089014d 100644
--- a/src/corelibs/U2Core/src/globals/L10n.h
+++ b/src/corelibs/U2Core/src/globals/L10n.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,9 +50,9 @@ public:
     static QString errorFileTooLarge(const GUrl &url) { return tr("File is too large: '%1'").arg(url.getURLString()); }
     static QString errorFileNotFound(const GUrl &url) { return tr("File not found: '%1'").arg(url.getURLString()); }
     static QString errorIsNotAFile(const GUrl &url) { return tr("'%1' is not a file").arg(url.getURLString()); }
-    static QString errorDirNotFound(const GUrl &url) { return tr("Directory not found: '%1'").arg(url.getURLString()); }
-    static QString errorOpeningDir(const GUrl &url) { return tr("Error opening directory: '%1'").arg(url.getURLString()); }
-    static QString errorIsNotADir(const GUrl &url) { return tr("'%1' is not a directory").arg(url.getURLString()); }
+    static QString errorDirNotFound(const GUrl &url) { return tr("Folder not found: '%1'").arg(url.getURLString()); }
+    static QString errorOpeningDir(const GUrl &url) { return tr("Error opening folder: '%1'").arg(url.getURLString()); }
+    static QString errorIsNotADir(const GUrl &url) { return tr("'%1' is not a folder").arg(url.getURLString()); }
 
     // messages to work with a shared database
     static QString errorWrongDbObjUrlFormat(const QString &url) { return tr("'%1' does not match database object URL format").arg(url); }
diff --git a/src/corelibs/U2Core/src/globals/Log.cpp b/src/corelibs/U2Core/src/globals/Log.cpp
index 2a1278b..f58cbf2 100644
--- a/src/corelibs/U2Core/src/globals/Log.cpp
+++ b/src/corelibs/U2Core/src/globals/Log.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/LogCache.h>
 
-#include <QtCore/QSet>
+#include <QSet>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/Log.h b/src/corelibs/U2Core/src/globals/Log.h
index cad948a..0fd2f42 100644
--- a/src/corelibs/U2Core/src/globals/Log.h
+++ b/src/corelibs/U2Core/src/globals/Log.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,10 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QMetaType>
-#include <QtCore/QMutex>
-#include <QtCore/QTime>
-#include <QtCore/QStringList>
+#include <QMetaType>
+#include <QMutex>
+#include <QTime>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/LogCache.cpp b/src/corelibs/U2Core/src/globals/LogCache.cpp
index f2aa5b6..c6e0d54 100644
--- a/src/corelibs/U2Core/src/globals/LogCache.cpp
+++ b/src/corelibs/U2Core/src/globals/LogCache.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/LogCache.h b/src/corelibs/U2Core/src/globals/LogCache.h
index d3c10be..8aad3d2 100644
--- a/src/corelibs/U2Core/src/globals/LogCache.h
+++ b/src/corelibs/U2Core/src/globals/LogCache.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/Log.h>
 
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QReadWriteLock>
+#include <QFile>
+#include <QFileInfo>
+#include <QReadWriteLock>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/NetworkConfiguration.cpp b/src/corelibs/U2Core/src/globals/NetworkConfiguration.cpp
index 4f302c3..4533604 100644
--- a/src/corelibs/U2Core/src/globals/NetworkConfiguration.cpp
+++ b/src/corelibs/U2Core/src/globals/NetworkConfiguration.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QUrl>
+#include <QUrl>
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 #include "NetworkConfiguration.h"
diff --git a/src/corelibs/U2Core/src/globals/NetworkConfiguration.h b/src/corelibs/U2Core/src/globals/NetworkConfiguration.h
index 25bc151..a819b9b 100644
--- a/src/corelibs/U2Core/src/globals/NetworkConfiguration.h
+++ b/src/corelibs/U2Core/src/globals/NetworkConfiguration.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,17 +22,16 @@
 #ifndef _U2_NETWORK_CONFIGURATION_H_
 #define _U2_NETWORK_CONFIGURATION_H_
 
+#include <QMap>
+#include <QNetworkProxy>
+#include <QStringList>
 
-#include <QtNetwork/QNetworkProxy>
-#include <QtCore/QStringList>
-#include <QtCore/QMap>
 #include <U2Core/global.h>
 
 #ifndef QT_NO_OPENSSL
-#include <QtNetwork/QSslConfiguration>
+#include <QSslConfiguration>
 #endif
 
-
 namespace U2
 {
 typedef QNetworkProxy::ProxyType Proxy_t;
diff --git a/src/corelibs/U2Core/src/globals/PasswordStorage.cpp b/src/corelibs/U2Core/src/globals/PasswordStorage.cpp
index 843ce16..b4930e5 100644
--- a/src/corelibs/U2Core/src/globals/PasswordStorage.cpp
+++ b/src/corelibs/U2Core/src/globals/PasswordStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/PasswordStorage.h b/src/corelibs/U2Core/src/globals/PasswordStorage.h
index ed6b5eb..08486eb 100644
--- a/src/corelibs/U2Core/src/globals/PasswordStorage.h
+++ b/src/corelibs/U2Core/src/globals/PasswordStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_PASSWORD_STORAGE_H_
 #define _U2_PASSWORD_STORAGE_H_
 
-#include <QtCore/QMap>
-#include <QtCore/QString>
+#include <QMap>
+#include <QString>
 
-#include <U2Core/global.h>
+#include <U2Core/StrPackUtils.h>
 
 namespace U2 {
 
@@ -46,7 +46,7 @@ private:
     static QByteArray serialize(const QString &password);
     static QString deserialize(const QByteArray &data);
 
-    QStrStrMap registry;
+    StrStrMap registry;
 
     static const QString SETTINGS_PATH;
 };
diff --git a/src/corelibs/U2Core/src/globals/PluginModel.cpp b/src/corelibs/U2Core/src/globals/PluginModel.cpp
index c862f96..a582dda 100644
--- a/src/corelibs/U2Core/src/globals/PluginModel.cpp
+++ b/src/corelibs/U2Core/src/globals/PluginModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/PluginModel.h b/src/corelibs/U2Core/src/globals/PluginModel.h
index 17b2b7c..5264f27 100644
--- a/src/corelibs/U2Core/src/globals/PluginModel.h
+++ b/src/corelibs/U2Core/src/globals/PluginModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,13 @@
 #ifndef _U2_PLUGINMODEL_H_
 #define _U2_PLUGINMODEL_H_
 
+#include <QList>
+#include <QObject>
+#include <QString>
+
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QString>
-#include <QtCore/QList>
-
 namespace U2 {
 //BUG:417: add API version check
 
diff --git a/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.cpp b/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.cpp
index 5165cdc..c869f21 100644
--- a/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.h b/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.h
index d6a91b4..08d4519 100644
--- a/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.h
+++ b/src/corelibs/U2Core/src/globals/ProjectFilterTaskRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ProjectService.cpp b/src/corelibs/U2Core/src/globals/ProjectService.cpp
index 46fd631..32c2f23 100644
--- a/src/corelibs/U2Core/src/globals/ProjectService.cpp
+++ b/src/corelibs/U2Core/src/globals/ProjectService.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ProjectService.h b/src/corelibs/U2Core/src/globals/ProjectService.h
index 5c13164..537bf1c 100644
--- a/src/corelibs/U2Core/src/globals/ProjectService.h
+++ b/src/corelibs/U2Core/src/globals/ProjectService.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Core/ServiceTypes.h>
 #include <U2Core/Task.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.cpp b/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.cpp
index 7064b16..bb9a1d4 100644
--- a/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.cpp
+++ b/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.h b/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.h
index f17c051..26dd27d 100644
--- a/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.h
+++ b/src/corelibs/U2Core/src/globals/ProjectTreeControllerModeSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_PROJECT_TREE_CONTROLLER_MODE_SETTINGS_H_
 #define _U2_PROJECT_TREE_CONTROLLER_MODE_SETTINGS_H_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
-#include <QtGui/QFont>
+#include <QFont>
 
 #include <U2Core/GObject.h>
 
diff --git a/src/corelibs/U2Core/src/globals/ResourceTracker.cpp b/src/corelibs/U2Core/src/globals/ResourceTracker.cpp
index ccc4a84..3c874c3 100644
--- a/src/corelibs/U2Core/src/globals/ResourceTracker.cpp
+++ b/src/corelibs/U2Core/src/globals/ResourceTracker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ResourceTracker.h b/src/corelibs/U2Core/src/globals/ResourceTracker.h
index 9d5d08a..5f082ee 100644
--- a/src/corelibs/U2Core/src/globals/ResourceTracker.h
+++ b/src/corelibs/U2Core/src/globals/ResourceTracker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,14 @@
 #ifndef _U2_RESOURCE_TRACKER_H_
 #define _U2_RESOURCE_TRACKER_H_
 
-#include <U2Core/global.h>
+#include <QList>
+#include <QMap>
+#include <QObject>
 
-#include <QtCore/QList>
-#include <QtCore/QMap>
+#include <U2Core/global.h>
 
 namespace U2 {
 
-
 class Task;
 
 class U2CORE_EXPORT ResourceTracker : public QObject {
diff --git a/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.cpp b/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.cpp
index 556cf90..b08766e 100644
--- a/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.cpp
+++ b/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.h b/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.h
index b5aafeb..85c4924 100644
--- a/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.h
+++ b/src/corelibs/U2Core/src/globals/ScriptingToolRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,10 @@
 #ifndef _U2_SCRIPTING_TOOL_REGISTRY_H
 #define _U2_SCRIPTING_TOOL_REGISTRY_H
 
-#include <U2Core/global.h>
+#include <QMap>
+#include <QStringList>
 
-#include <QtCore/QStringList>
+#include <U2Core/global.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/ServiceModel.cpp b/src/corelibs/U2Core/src/globals/ServiceModel.cpp
index 0ddf8e7..22217f1 100644
--- a/src/corelibs/U2Core/src/globals/ServiceModel.cpp
+++ b/src/corelibs/U2Core/src/globals/ServiceModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/ServiceModel.h b/src/corelibs/U2Core/src/globals/ServiceModel.h
index 7ee9d7e..ca4cd33 100644
--- a/src/corelibs/U2Core/src/globals/ServiceModel.h
+++ b/src/corelibs/U2Core/src/globals/ServiceModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QPointer>
+#include <QString>
+#include <QList>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/ServiceTypes.h b/src/corelibs/U2Core/src/globals/ServiceTypes.h
index 5fbf08b..3c2304f 100644
--- a/src/corelibs/U2Core/src/globals/ServiceTypes.h
+++ b/src/corelibs/U2Core/src/globals/ServiceTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Settings.h b/src/corelibs/U2Core/src/globals/Settings.h
index 60bd165..93d63f2 100644
--- a/src/corelibs/U2Core/src/globals/Settings.h
+++ b/src/corelibs/U2Core/src/globals/Settings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QVariant>
-#include <QtCore/QStringList>
+#include <QVariant>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/globals/Task.cpp b/src/corelibs/U2Core/src/globals/Task.cpp
index 19b88d8..7ec9365 100644
--- a/src/corelibs/U2Core/src/globals/Task.cpp
+++ b/src/corelibs/U2Core/src/globals/Task.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Task.h b/src/corelibs/U2Core/src/globals/Task.h
index c9d65e4..68a6be8 100644
--- a/src/corelibs/U2Core/src/globals/Task.h
+++ b/src/corelibs/U2Core/src/globals/Task.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,10 +26,10 @@
 #include <U2Core/Log.h>
 #include <U2Core/U2OpStatus.h>
 
-#include <QtCore/QDateTime>
-#include <QtCore/QStringList>
-#include <QtCore/QVarLengthArray>
-#include <QtCore/QReadWriteLock>
+#include <QDateTime>
+#include <QStringList>
+#include <QVarLengthArray>
+#include <QReadWriteLock>
 
 namespace U2 {
 
@@ -159,7 +159,6 @@ enum TaskFlag {
     TaskFlag_OnlyNotificationReport = 1 << 26, // task is asked to generate report
 
     TaskFlag_CollectChildrenWarnings = 1 << 27
-
 };
 
 #define TaskFlags_FOSCOE                (TaskFlags(TaskFlag_FailOnSubtaskError) | TaskFlag_FailOnSubtaskCancel)
@@ -171,7 +170,7 @@ enum TaskFlag {
 #define TaskFlags_NR_FOSE_COSC          (TaskFlags_FOSE_COSC | TaskFlag_NoRun)
 #define TaskFlags_RBSF_FOSE_COSC        (TaskFlags_FOSE_COSC | TaskFlag_RunBeforeSubtasksFinished)
 
-typedef QFlags<TaskFlag> TaskFlags;
+Q_DECLARE_FLAGS(TaskFlags, TaskFlag)
 typedef QVarLengthArray<TaskResourceUsage, 1> TaskResources;
 
 class U2CORE_EXPORT Task : public QObject {
@@ -444,4 +443,6 @@ signals:
 
 } //namespace
 
+Q_DECLARE_OPERATORS_FOR_FLAGS(U2::TaskFlags)
+
 #endif
diff --git a/src/corelibs/U2Core/src/globals/Timer.cpp b/src/corelibs/U2Core/src/globals/Timer.cpp
index e631050..d2be635 100644
--- a/src/corelibs/U2Core/src/globals/Timer.cpp
+++ b/src/corelibs/U2Core/src/globals/Timer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Timer.h b/src/corelibs/U2Core/src/globals/Timer.h
index f0c3162..a224f24 100644
--- a/src/corelibs/U2Core/src/globals/Timer.h
+++ b/src/corelibs/U2Core/src/globals/Timer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/Counter.h>
 
-#include <QtCore/QDateTime>
+#include <QDateTime>
 
 #ifdef Q_OS_WIN
 #include <windows.h>
diff --git a/src/corelibs/U2Core/src/globals/U2OpStatus.h b/src/corelibs/U2Core/src/globals/U2OpStatus.h
index ef678a7..96b37c6 100644
--- a/src/corelibs/U2Core/src/globals/U2OpStatus.h
+++ b/src/corelibs/U2Core/src/globals/U2OpStatus.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/U2SafePoints.h b/src/corelibs/U2Core/src/globals/U2SafePoints.h
index 21071f7..2c506cc 100644
--- a/src/corelibs/U2Core/src/globals/U2SafePoints.h
+++ b/src/corelibs/U2Core/src/globals/U2SafePoints.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -127,6 +127,11 @@
 #define CHECK_BREAK(condition) CHECK_OPERATION(condition, break)
 
 /**
+    Checks condition is false and continue the cycle if it is.
+*/
+#define CHECK_CONTINUE(condition) CHECK_OPERATION(condition, continue)
+
+/**
     Checks condition is false and breaks if it is.
     Before breaking the 'extraOp' operation is performed (for example logging)
 
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
index 6c65866..b89aa3a 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/UserActionsWriter.h b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
index 0f9d6f2..6bb293e 100644
--- a/src/corelibs/U2Core/src/globals/UserActionsWriter.h
+++ b/src/corelibs/U2Core/src/globals/UserActionsWriter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
index eea9e55..44fb7e1 100644
--- a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
+++ b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,25 +26,15 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/GUrlUtils.h>
 
-#include <QtCore/QSettings>
-#include <QtCore/QDir>
-#include <QtCore/QProcessEnvironment>
-
-#include <QtGui/QDesktopServices>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QStyle>
-#include <QtGui/QStyleFactory>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QStyleFactory>
-#include <QtWidgets/QDialogButtonBox>
+#include <QApplication>
+#include <QDesktopServices>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QProcessEnvironment>
+#include <QSettings>
 #include <QStandardPaths>
-#endif
-
-
+#include <QStyle>
+#include <QStyleFactory>
 
 namespace U2 {
 
@@ -169,12 +159,7 @@ void UserAppsSettings::setRecentlyDownloadedFileNames(const QStringList& fileNam
 }
 
 QString UserAppsSettings::getUserTemporaryDirPath() const {
-#if (QT_VERSION >= 0x050000)
     return AppContext::getSettings()->getValue(SETTINGS_ROOT + TEMPORARY_DIR, QStandardPaths::writableLocation(QStandardPaths::TempLocation)).toString();
-#else
-    return AppContext::getSettings()->getValue(SETTINGS_ROOT + TEMPORARY_DIR, QDesktopServices::storageLocation(QDesktopServices::TempLocation)).toString();
-#endif
-
 }
 
 void UserAppsSettings::setUserTemporaryDirPath(const QString& newPath) {
@@ -205,7 +190,7 @@ void UserAppsSettings::setEnableCollectingStatistics(bool b) {
 }
 
 bool UserAppsSettings::tabbedWindowLayout() const {
-    return AppContext::getSettings()->getValue(SETTINGS_ROOT + WINDOW_LAYOUT, false, true).toBool();
+    return AppContext::getSettings()->getValue(SETTINGS_ROOT + WINDOW_LAYOUT, true, true).toBool();
 }
 
 void UserAppsSettings::setTabbedWindowLayout(bool b) {
@@ -230,7 +215,7 @@ QString UserAppsSettings::createCurrentProcessTemporarySubDir(U2OpStatus &os, co
     if (!baseDir.exists()) {
         bool created = baseDir.mkpath(baseDir.absolutePath());
         if (!created) {
-            os.setError(QString("Can not create the directory: %1").arg(baseDir.absolutePath()));
+            os.setError(QString("Can not create the folder: %1").arg(baseDir.absolutePath()));
             return "";
         }
     }
@@ -248,7 +233,7 @@ QString UserAppsSettings::createCurrentProcessTemporarySubDir(U2OpStatus &os, co
         idx++;
 
         if (idx > MAX_ATTEMPTS) {
-            os.setError(QString("Can not create a sub-directory in: %1").arg(baseDir.absolutePath()));
+            os.setError(QString("Can not create a sub-folder in: %1").arg(baseDir.absolutePath()));
             return "";
         }
     } while (!created);
diff --git a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
index 6b53b49..45444f0 100644
--- a/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
+++ b/src/corelibs/U2Core/src/globals/UserApplicationsSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_USER_APPLICATIONS_SETTINGS_H_
 #define _U2_USER_APPLICATIONS_SETTINGS_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 #include <U2Core/U2OpStatus.h>
 
diff --git a/src/corelibs/U2Core/src/globals/Version.cpp b/src/corelibs/U2Core/src/globals/Version.cpp
index a0c625b..17a541e 100644
--- a/src/corelibs/U2Core/src/globals/Version.cpp
+++ b/src/corelibs/U2Core/src/globals/Version.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/Version.h b/src/corelibs/U2Core/src/globals/Version.h
index 3dd6c6f..8529fa1 100644
--- a/src/corelibs/U2Core/src/globals/Version.h
+++ b/src/corelibs/U2Core/src/globals/Version.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/globals/global.h b/src/corelibs/U2Core/src/globals/global.h
index 2264d61..755b172 100644
--- a/src/corelibs/U2Core/src/globals/global.h
+++ b/src/corelibs/U2Core/src/globals/global.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,13 @@
 #ifndef _U2_COREAPI_H_
 #define _U2_COREAPI_H_
 
-#include <U2Core/U2IdTypes.h>
+#include <assert.h>
 
-#include <QtCore/qglobal.h>
-#include <QtCore/QVariantMap>
-#include <QtCore/QObject>
+#include <QObject>
+#include <QVariantMap>
+#include <QtGlobal>
 
-#include <assert.h>
+#include <U2Core/U2IdTypes.h>
 
 #ifdef _DEBUG
 #   define U2_PRODUCT_NAME      "UGENED"
@@ -121,12 +121,8 @@
 #define PATH_PREFIX_DATA "data"
 #define PATH_PREFIX_SCRIPTS "scripts"
 
-typedef QMap<QString, QString> QStrStrMap;
-typedef QPair<QString, QString> StringPair;
-
 namespace U2 {
 
-
 enum TriState {
     TriState_Unknown,
     TriState_Yes,
@@ -138,12 +134,21 @@ enum UnloadedObjectFilter { //used as a separate type but not 'bool' to improve
     UOF_LoadedOnly
 };
 
+enum NavigationDirection {
+    Forward,
+    Backward
+};
+
 }
 
 enum DNAAlphabetType {
-    DNAAlphabet_RAW,
-    DNAAlphabet_NUCL,
-    DNAAlphabet_AMINO
+    DNAAlphabet_UNDEFINED = 0x0,
+    DNAAlphabet_RAW     = 0x1,
+    DNAAlphabet_NUCL    = 0x2,
+    DNAAlphabet_AMINO   = 0x4
 };
 
+Q_DECLARE_FLAGS(AlphabetFlags, DNAAlphabetType)
+Q_DECLARE_OPERATORS_FOR_FLAGS(AlphabetFlags)
+
 #endif
diff --git a/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.cpp b/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.cpp
index 60e9832..230d859 100644
--- a/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.h b/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.h
index 1762a90..62bdb62 100644
--- a/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.h
+++ b/src/corelibs/U2Core/src/gobjects/AnnotationTableObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp b/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
index d7f4092..e0c102c 100644
--- a/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/AssemblyObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/AssemblyObject.h b/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
index 99adaa0..96b090e 100644
--- a/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
+++ b/src/corelibs/U2Core/src/gobjects/AssemblyObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.cpp b/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.cpp
index 5474d0f..7785166 100644
--- a/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.h b/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.h
index ff82191..f708e20 100644
--- a/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.h
+++ b/src/corelibs/U2Core/src/gobjects/BioStruct3DObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.cpp b/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.cpp
index b8d2d24..e950df3 100644
--- a/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/ChromatogramUtils.h>
 #include <U2Core/DatatypeSerializeUtils.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GHints.h>
@@ -42,6 +43,12 @@ U2Chromatogram::U2Chromatogram(const U2DbiRef &dbiRef) : U2RawData(dbiRef) {
 
 }
 
+U2Chromatogram::U2Chromatogram(const U2RawData &rawData)
+    : U2RawData(rawData)
+{
+
+}
+
 U2DataType U2Chromatogram::getType() const {
     return U2Type::Chromatogram;
 }
@@ -51,20 +58,9 @@ U2DataType U2Chromatogram::getType() const {
 DNAChromatogramObject * DNAChromatogramObject::createInstance(const DNAChromatogram &chroma,
     const QString &objectName, const U2DbiRef &dbiRef, U2OpStatus &os, const QVariantMap &hintsMap)
 {
-    U2Chromatogram object(dbiRef);
-    object.visualName = objectName;
-    object.serializer = DNAChromatogramSerializer::ID;
-
     const QString folder = hintsMap.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    RawDataUdrSchema::createObject(dbiRef, folder, object, os);
-    CHECK_OP(os, NULL);
-
-    U2EntityRef entRef(dbiRef, object.id);
-    QByteArray data = DNAChromatogramSerializer::serialize(chroma);
-    RawDataUdrSchema::writeContent(data, entRef, os);
-    CHECK_OP(os, NULL);
-
-    return new DNAChromatogramObject(objectName, entRef, hintsMap);
+    const U2EntityRef chromatogramRef = ChromatogramUtils::import(os, dbiRef, folder, chroma);
+    return new DNAChromatogramObject(objectName, chromatogramRef, hintsMap);
 }
 
 DNAChromatogramObject::DNAChromatogramObject(const QString &objectName, const U2EntityRef &chromaRef, const QVariantMap &hintsMap)
@@ -78,6 +74,12 @@ const DNAChromatogram & DNAChromatogramObject::getChromatogram() const {
     return cache;
 }
 
+void DNAChromatogramObject::setChromatogram(U2OpStatus &os, const DNAChromatogram &chromatogram) {
+    ChromatogramUtils::updateChromatogramData(os, getEntityRef(), chromatogram);
+    CHECK_OP(os, );
+    cache = chromatogram;
+}
+
 void DNAChromatogramObject::loadDataCore(U2OpStatus &os) {
     const QString serializer = RawDataUdrSchema::getObject(entityRef, os).serializer;
     CHECK_OP(os, );
diff --git a/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.h b/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.h
index 019d19f..7351b1f 100644
--- a/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.h
+++ b/src/corelibs/U2Core/src/gobjects/DNAChromatogramObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DNA_CHROMATOGRAM_OBJECT_H_
 #define _U2_DNA_CHROMATOGRAM_OBJECT_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 #include <U2Core/GObject.h>
 #include <U2Core/DNAChromatogram.h>
@@ -34,6 +34,7 @@ class U2CORE_EXPORT U2Chromatogram : public U2RawData {
 public:
                         U2Chromatogram();
                         U2Chromatogram(const U2DbiRef &dbiRef);
+                        U2Chromatogram(const U2RawData &rawData);
 
     U2DataType          getType() const;
 };
@@ -50,6 +51,7 @@ public:
                                         const QVariantMap &hintsMap = QVariantMap());
 
     const DNAChromatogram &         getChromatogram() const;
+    void                            setChromatogram(U2OpStatus &os, const DNAChromatogram &chromatogram);
 
     GObject *                       clone(const U2DbiRef &dstRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap()) const;
 
diff --git a/src/corelibs/U2Core/src/gobjects/DNASequenceObject.cpp b/src/corelibs/U2Core/src/gobjects/DNASequenceObject.cpp
index 26c1bcb..b4e6328 100644
--- a/src/corelibs/U2Core/src/gobjects/DNASequenceObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/DNASequenceObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -204,6 +204,10 @@ bool U2SequenceObject::isValidDbiObject(U2OpStatus &os) {
 }
 
 void U2SequenceObject::replaceRegion(const U2Region& region, const DNASequence& seq, U2OpStatus& os) {
+    replaceRegion(entityRef.entityId, region, seq, os);
+}
+
+void U2SequenceObject::replaceRegion(const U2DataId &masterId, const U2Region &region, const DNASequence &seq, U2OpStatus &os) {
     // seq.alphabet == NULL - for tests.
     CHECK_EXT(seq.alphabet == getAlphabet() || seq.seq.isEmpty() || seq.alphabet == NULL,
         os.setError(tr("Modified sequence & region have different alphabet")), );
@@ -211,7 +215,7 @@ void U2SequenceObject::replaceRegion(const U2Region& region, const DNASequence&
     DbiConnection con(entityRef.dbiRef, os);
     CHECK_OP(os, );
     QVariantMap hints;
-    con.dbi->getSequenceDbi()->updateSequenceData(entityRef.entityId, region, seq.seq, hints, os);
+    con.dbi->getSequenceDbi()->updateSequenceData(masterId, entityRef.entityId, region, seq.seq, hints, os);
     cachedLength = -1;
     if (region.intersects(cachedLastAccessedRegion.first)) {
         cachedLastAccessedRegion = QPair<U2Region, QByteArray>();
@@ -220,6 +224,10 @@ void U2SequenceObject::replaceRegion(const U2Region& region, const DNASequence&
     emit si_sequenceChanged();
 }
 
+void U2SequenceObject::removeRegion(U2OpStatus &os, const U2Region &region) {
+    replaceRegion(region, DNASequence(), os);
+}
+
 GObject * U2SequenceObject::clone(const U2DbiRef &dbiRef, U2OpStatus &os, const QVariantMap &hints) const {
     DbiOperationsBlock opBlock(dbiRef, os);
     Q_UNUSED(opBlock);
@@ -457,6 +465,11 @@ void U2SequenceObject::updateCachedValues() const {
     SAFE_POINT(cachedAlphabet != NULL, "Invalid sequence alphabet", );
 }
 
+void U2SequenceObject::sl_resetDataCaches() {
+    cachedLastAccessedRegion = QPair<U2Region, QByteArray>();
+    cachedLength = -1;
+}
+
 void U2SequenceObject::setGObjectName(const QString &newName) {
     CHECK(cachedName != newName, );
 
diff --git a/src/corelibs/U2Core/src/gobjects/DNASequenceObject.h b/src/corelibs/U2Core/src/gobjects/DNASequenceObject.h
index 0ae04f9..373d9c2 100644
--- a/src/corelibs/U2Core/src/gobjects/DNASequenceObject.h
+++ b/src/corelibs/U2Core/src/gobjects/DNASequenceObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -67,6 +67,9 @@ public:
     const DNAAlphabet* getAlphabet() const;
 
     void replaceRegion(const U2Region& region, const DNASequence& seq, U2OpStatus& os);
+    void replaceRegion(const U2DataId &masterId, const U2Region &region, const DNASequence &seq, U2OpStatus &os);
+
+    void removeRegion(U2OpStatus &os, const U2Region &region);
 
     GObject* clone(const U2DbiRef& ref, U2OpStatus& os, const QVariantMap &hints = QVariantMap()) const;
 
@@ -98,6 +101,9 @@ public:
 
     static bool lessThan( const U2SequenceObject *one, const U2SequenceObject *two){return one->name < two->name;}
 
+private slots:
+    void sl_resetDataCaches();
+
 signals:
     void si_sequenceChanged();
     void si_sequenceCircularStateChanged();
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.cpp b/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.cpp
index 5522b8e..b131355 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.cpp
+++ b/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@ namespace {
     const QString SEQUENCE("sequence");
     const QString ANNOTATION_TABLE("annotation_table");
     const QString PHYLOGENETIC_TREE("phylogenetic_tree");
+    const QString REFERENCE_SEQUENCE("reference_sequence");
 }
 
 QString GObjectRelationRoleCompatibility::toString(GObjectRelationRole role) {
@@ -39,6 +40,8 @@ QString GObjectRelationRoleCompatibility::toString(GObjectRelationRole role) {
             return ANNOTATION_TABLE;
         case ObjectRole_PhylogeneticTree:
             return PHYLOGENETIC_TREE;
+        case ObjectRole_ReferenceSequence:
+            return REFERENCE_SEQUENCE;
         default:
             FAIL("Unknown role", "");
     }
@@ -51,6 +54,8 @@ GObjectRelationRole GObjectRelationRoleCompatibility::fromString(const QString &
         return ObjectRole_AnnotationTable;
     } else if (PHYLOGENETIC_TREE == str) {
         return ObjectRole_PhylogeneticTree;
+    } else if (REFERENCE_SEQUENCE == str) {
+        return ObjectRole_ReferenceSequence;
     } else {
         FAIL("Unknown role string", ObjectRole_Sequence);
     }
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.h b/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.h
index 3947879..d12e110 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.h
+++ b/src/corelibs/U2Core/src/gobjects/GObjectRelationRoles.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,8 @@ namespace U2 {
 enum GObjectRelationRole {
     ObjectRole_Sequence = 1,
     ObjectRole_AnnotationTable,
-    ObjectRole_PhylogeneticTree
+    ObjectRole_PhylogeneticTree,
+    ObjectRole_ReferenceSequence
 };
 
 /**
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectTypes.cpp b/src/corelibs/U2Core/src/gobjects/GObjectTypes.cpp
index f39c561..3412389 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectTypes.cpp
+++ b/src/corelibs/U2Core/src/gobjects/GObjectTypes.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,7 +46,9 @@ REGISTER_TYPE_EX(SEQUENCE,          "OT_SEQUENCE",      GObject::tr("Sequence"),
 REGISTER_TYPE(ANNOTATION_TABLE,     "OT_ANNOTATIONS",   GObject::tr("Annotation"),      GObject::tr("Annotations"),    "a");
 REGISTER_TYPE(VARIANT_TRACK,        "OT_VARIATIONS",    GObject::tr("Variation"),       GObject::tr("Variations"),     "v");
 REGISTER_TYPE(CHROMATOGRAM,         "OT_CHROMATOGRAM",  GObject::tr("Chromatogram"),    GObject::tr("Chromatograms"),  "c");
-REGISTER_TYPE_EX(MULTIPLE_ALIGNMENT,   "OT_MSA",        GObject::tr("Alignment"),       GObject::tr("Alignments"),     "m",     ":core/images/msa.png",         ":core/images/ro_msa.png");
+// SANGER_TODO: icons!!
+REGISTER_TYPE_EX(MULTIPLE_CHROMATOGRAM_ALIGNMENT,   "OT_MCA",    GObject::tr("Alignment"),       GObject::tr("Alignments"),     "mc",     ":core/images/msa.png",         ":core/images/ro_msa.png");
+REGISTER_TYPE_EX(MULTIPLE_SEQUENCE_ALIGNMENT,   "OT_MSA",        GObject::tr("Alignment"),       GObject::tr("Alignments"),     "m",     ":core/images/msa.png",         ":core/images/ro_msa.png");
 REGISTER_TYPE_EX(PHYLOGENETIC_TREE, "OT_PTREE",         GObject::tr("Tree"),            GObject::tr("Trees"),          "tr",    ":core/images/tree.png",        ":core/images/ro_tree.png");
 REGISTER_TYPE_EX(BIOSTRUCTURE_3D,   "OT_BIOSTRUCT3D",   GObject::tr("3D model"),        GObject::tr("3D models"),      "3d",    ":core/images/biostruct3d.png", ":core/images/ro_biostruct3d.png");
 REGISTER_TYPE(ASSEMBLY,             "OT_ASSEMBLY",      GObject::tr("Assembly"),        GObject::tr("Assemblies"),     "as");
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectTypes.h b/src/corelibs/U2Core/src/gobjects/GObjectTypes.h
index 275e835..f72c78c 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectTypes.h
+++ b/src/corelibs/U2Core/src/gobjects/GObjectTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtGui/QIcon>
+#include <QIcon>
 
 namespace U2 {
 
@@ -52,7 +52,8 @@ public:
     static const GObjectType ANNOTATION_TABLE;
     static const GObjectType VARIANT_TRACK;
     static const GObjectType CHROMATOGRAM;
-    static const GObjectType MULTIPLE_ALIGNMENT;
+    static const GObjectType MULTIPLE_CHROMATOGRAM_ALIGNMENT;
+    static const GObjectType MULTIPLE_SEQUENCE_ALIGNMENT;
     static const GObjectType PHYLOGENETIC_TREE;
     static const GObjectType BIOSTRUCTURE_3D;
     static const GObjectType UINDEX;
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectUtils.cpp b/src/corelibs/U2Core/src/gobjects/GObjectUtils.cpp
index efff930..3fc7fc5 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectUtils.cpp
+++ b/src/corelibs/U2Core/src/gobjects/GObjectUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,8 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrl.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PFMatrixObject.h>
 #include <U2Core/PWMatrixObject.h>
 #include <U2Core/PhyTreeObject.h>
@@ -401,8 +402,10 @@ GObject *GObjectUtils::createObject(const U2DbiRef &ref, const U2DataId &id, con
     switch (type) {
     case U2Type::Sequence:
         return new U2SequenceObject(name, entityRef);
+    case U2Type::Mca:
+        return new MultipleChromatogramAlignmentObject(name, entityRef);
     case U2Type::Msa:
-        return new MAlignmentObject(name, entityRef);
+        return new MultipleSequenceAlignmentObject(name, entityRef);
     case U2Type::Assembly:
         return new AssemblyObject(name, entityRef);
     case U2Type::VariantTrack:
diff --git a/src/corelibs/U2Core/src/gobjects/GObjectUtils.h b/src/corelibs/U2Core/src/gobjects/GObjectUtils.h
index 4a564e0..7d09d00 100644
--- a/src/corelibs/U2Core/src/gobjects/GObjectUtils.h
+++ b/src/corelibs/U2Core/src/gobjects/GObjectUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp
deleted file mode 100644
index a1b8e58..0000000
--- a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.cpp
+++ /dev/null
@@ -1,813 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentObject.h"
-
-#include <U2Core/DNASequence.h>
-#include <U2Core/GHints.h>
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MSAUtils.h>
-#include <U2Core/MsaDbiUtils.h>
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2Mod.h>
-#include <U2Core/U2MsaDbi.h>
-#include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-
-namespace U2 {
-
-MSAMemento::MSAMemento():lastState(MAlignment()){}
-
-MAlignment MSAMemento::getState() const{
-    return lastState;
-}
-
-void MSAMemento::setState(const MAlignment& state){
-    lastState = state;
-}
-
-MAlignmentObject::MAlignmentObject(const QString& name, const U2EntityRef& msaRef, const QVariantMap& hintsMap, const MAlignment &alnData)
-    : GObject(GObjectTypes::MULTIPLE_ALIGNMENT, name, hintsMap), cachedMAlignment(alnData), memento(new MSAMemento)
-{
-    entityRef = msaRef;
-
-    if (!cachedMAlignment.isEmpty()) {
-        dataLoaded = true;
-    }
-}
-
-MAlignmentObject::~MAlignmentObject(){
-    emit si_invalidateAlignmentObject();
-    delete memento;
-}
-
-void MAlignmentObject::setTrackMod(U2TrackModType trackMod, U2OpStatus& os) {
-    // Prepare the connection
-    DbiConnection con(entityRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2ObjectDbi* objDbi = con.dbi->getObjectDbi();
-    SAFE_POINT(NULL != objDbi, "NULL Object Dbi!",);
-
-    // Set the new status
-    objDbi->setTrackModType(entityRef.entityId, trackMod, os);
-}
-
-const MAlignment & MAlignmentObject::getMAlignment() const {
-    ensureDataLoaded();
-    return cachedMAlignment;
-}
-
-void MAlignmentObject::updateCachedMAlignment(const MAlignmentModInfo &mi, const QList<qint64> &removedRowIds)
-{
-    ensureDataLoaded();
-    emit si_startMsaUpdating();
-
-    MAlignment maBefore = cachedMAlignment;
-    QString oldName = maBefore.getName();
-
-    U2OpStatus2Log os;
-
-    if (mi.alignmentLengthChanged) {
-        qint64 msaLength = MsaDbiUtils::getMsaLength(entityRef, os);
-        SAFE_POINT_OP(os, );
-        if (msaLength != cachedMAlignment.getLength()) {
-            cachedMAlignment.setLength(msaLength);
-        }
-    }
-
-    if (mi.alphabetChanged) {
-        U2AlphabetId alphabet = MsaDbiUtils::getMsaAlphabet(entityRef, os);
-        SAFE_POINT_OP(os, );
-        if (alphabet.id != cachedMAlignment.getAlphabet()->getId() && !alphabet.id.isEmpty()) {
-            const DNAAlphabet* newAlphabet = U2AlphabetUtils::getById(alphabet);
-            cachedMAlignment.setAlphabet(newAlphabet);
-        }
-    }
-
-     if (mi.modifiedRowIds.isEmpty() && removedRowIds.isEmpty()) { // suppose that in this case all the alignment has changed
-        loadAlignment(os);
-        SAFE_POINT_OP(os, );
-    } else { // only specified rows were changed
-        if (!removedRowIds.isEmpty()) {
-            foreach (qint64 rowId, removedRowIds) {
-                const int rowIndex = cachedMAlignment.getRowIndexByRowId(rowId, os);
-                SAFE_POINT_OP(os, );
-                cachedMAlignment.removeRow(rowIndex, os);
-                SAFE_POINT_OP(os, );
-            }
-        }
-        if (!mi.modifiedRowIds.isEmpty()) {
-            MAlignmentExporter alExporter;
-            QList<MAlignmentRowReplacementData> rowsAndSeqs = alExporter.getAlignmentRows(entityRef.dbiRef, entityRef.entityId,
-                mi.modifiedRowIds, os);
-            SAFE_POINT_OP(os, );
-            foreach (const MAlignmentRowReplacementData &data, rowsAndSeqs) {
-                const int rowIndex = cachedMAlignment.getRowIndexByRowId(data.row.rowId, os);
-                SAFE_POINT_OP(os, );
-                cachedMAlignment.setRowContent(rowIndex, data.sequence.seq);
-                cachedMAlignment.setRowGapModel(rowIndex, data.row.gaps);
-                cachedMAlignment.renameRow(rowIndex, data.sequence.getName());
-            }
-        }
-    }
-
-    setModified(true);
-    if (!mi.middleState) {
-        emit si_alignmentChanged(maBefore, mi);
-
-        if (cachedMAlignment.isEmpty() && !maBefore.isEmpty()) {
-            emit si_alignmentBecomesEmpty(true);
-        } else if (!cachedMAlignment.isEmpty() && maBefore.isEmpty()) {
-            emit si_alignmentBecomesEmpty(false);
-        }
-
-        const QString newName = cachedMAlignment.getName();
-        if (oldName != newName) {
-            setGObjectNameNotDbi(newName);
-        }
-    }
-    if (!removedRowIds.isEmpty()) {
-        emit si_rowsRemoved(removedRowIds);
-    }
-    if (cachedMAlignment.getAlphabet()->getId() != maBefore.getAlphabet()->getId()) {
-        emit si_alphabetChanged(mi, maBefore.getAlphabet());
-    }
-}
-
-void MAlignmentObject::setMAlignment(const MAlignment& newMa, MAlignmentModInfo mi, const QVariantMap& hints) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::updateMsa(entityRef, newMa, os);
-    SAFE_POINT_OP(os, );
-
-    mi.hints = hints;
-    updateCachedMAlignment(mi);
-}
-
-void MAlignmentObject::copyGapModel(const QList<MAlignmentRow> &copyRows) {
-    const MAlignment &tmp = getMAlignment();
-    const QList<MAlignmentRow> &oldRows = tmp.getRows();
-
-    SAFE_POINT(oldRows.count() == copyRows.count(), "Different rows count", );
-
-    QMap<qint64, QList<U2MsaGap> > newGapModel;
-    QList<MAlignmentRow>::ConstIterator ori = oldRows.begin();
-    QList<MAlignmentRow>::ConstIterator cri = copyRows.begin();
-    for (; ori != oldRows.end(); ori++, cri++) {
-        newGapModel[ori->getRowId()] = cri->getGapModel();
-    }
-
-    U2OpStatus2Log os;
-    updateGapModel(newGapModel, os);
-}
-
-char MAlignmentObject::charAt(int seqNum, int pos) const {
-    const MAlignment &msa = getMAlignment();
-    return msa.charAt(seqNum, pos);
-}
-
-void MAlignmentObject::saveState(){
-    const MAlignment &msa = getMAlignment();
-    emit si_completeStateChanged(false);
-    memento->setState(msa);
-}
-
-void MAlignmentObject::releaseState() {
-    if(!isStateLocked()) {
-        emit si_completeStateChanged(true);
-
-        MAlignment maBefore = memento->getState();
-        CHECK(maBefore != getMAlignment(), );
-        setModified(true);
-
-        MAlignmentModInfo mi;
-        emit si_alignmentChanged(maBefore, mi);
-
-        if (cachedMAlignment.isEmpty() && !maBefore.isEmpty()) {
-            emit si_alignmentBecomesEmpty(true);
-        } else if (!cachedMAlignment.isEmpty() && maBefore.isEmpty()) {
-            emit si_alignmentBecomesEmpty(false);
-        }
-    }
-}
-
-GObject* MAlignmentObject::clone(const U2DbiRef& dstDbiRef, U2OpStatus& os, const QVariantMap &hints) const {
-    DbiOperationsBlock opBlock(dstDbiRef, os);
-    Q_UNUSED(opBlock);
-    CHECK_OP(os, NULL);
-
-    GHintsDefaultImpl *gHints = new GHintsDefaultImpl(getGHintsMap());
-    gHints->setAll(hints);
-    const QString dstFolder = gHints->get(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-
-    MAlignment msa = getMAlignment();
-    MAlignmentObject *clonedObj = MAlignmentImporter::createAlignment(dstDbiRef, dstFolder, msa, os);
-    CHECK_OP_EXT(os, delete gHints, NULL);
-
-    clonedObj->setGHints(gHints);
-    clonedObj->setIndexInfo(getIndexInfo());
-    return clonedObj;
-}
-
-void MAlignmentObject::insertGap(U2Region rows, int pos, int count) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-    const MAlignment &msa = getMAlignment();
-    int startSeq = rows.startPos;
-    int endSeq = startSeq + rows.length;
-
-    QList<qint64> rowIdsToInsert;
-    for (int i = startSeq; i < endSeq; ++i) {
-        qint64 rowId = msa.getRow(i).getRowId();
-        rowIdsToInsert.append(rowId);
-    }
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::insertGaps(entityRef, rowIdsToInsert, pos, count, os);
-    SAFE_POINT_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.sequenceListChanged = false;
-    mi.modifiedRowIds = rowIdsToInsert;
-    updateCachedMAlignment(mi);
-}
-
-int MAlignmentObject::getMaxWidthOfGapRegion( const U2Region &rows, int pos, int maxGaps,
-    U2OpStatus &os )
-{
-    const MAlignment &msa = getMAlignment( );
-    SAFE_POINT_EXT( U2Region( 0, msa.getNumRows( ) ).contains( rows ) && 0 <= pos && 0 <= maxGaps
-        && msa.getLength( ) > pos, os.setError( "Illegal parameters of the gap region!" ), 0 );
-
-    const int maxRemovedGaps = qBound(0, maxGaps, msa.getLength() - pos);
-    // check if there is nothing to remove
-    if ( 0 == maxRemovedGaps ) {
-        return 0;
-    }
-
-    int removingGapColumnCount = maxRemovedGaps;
-    bool isRegionInRowTrailingGaps = true;
-    // iterate through given rows to determine the width of the continuous gap region
-    for ( int rowCount = rows.startPos; rowCount < rows.endPos( ); ++rowCount ) {
-        int gapCountInCurrentRow = 0;
-        // iterate through current row bases to determine gap count
-        while ( gapCountInCurrentRow < maxRemovedGaps ) {
-            const char currentSymbol = msa.charAt( rowCount,
-                pos + maxGaps - gapCountInCurrentRow - 1 );
-            if ( MAlignment_GapChar != currentSymbol ) {
-                break;
-            }
-            gapCountInCurrentRow++;
-        }
-
-        // determine if the given area intersects a row in the area of trailing gaps
-        if ( 0 != gapCountInCurrentRow && isRegionInRowTrailingGaps ) {
-            int trailingPosition = pos + maxRemovedGaps - gapCountInCurrentRow;
-            if ( msa.getLength( ) != trailingPosition ) {
-                while ( msa.getLength( ) > trailingPosition && isRegionInRowTrailingGaps ) {
-                    isRegionInRowTrailingGaps &= ( MAlignment_GapChar == msa.charAt( rowCount,
-                        trailingPosition ) );
-                    ++trailingPosition;
-                }
-            }
-        } else if ( isRegionInRowTrailingGaps ) {
-            isRegionInRowTrailingGaps = false;
-        }
-
-        if ( 0 == gapCountInCurrentRow ) {
-            // don't do anything if there is a row without gaps
-            return 0;
-        }
-        removingGapColumnCount = qMin( removingGapColumnCount, gapCountInCurrentRow );
-    }
-
-    if ( isRegionInRowTrailingGaps ) {
-        if (rows.length == getNumRows() && rows.startPos == 0) {
-            return qMin(getLength() - pos, (qint64)maxGaps);
-        } else {
-            return 0;
-        }
-    }
-
-    return removingGapColumnCount;
-}
-
-int MAlignmentObject::deleteGap( const U2Region &rows, int pos, int maxGaps, U2OpStatus &os ) {
-    SAFE_POINT( !isStateLocked( ), "Alignment state is locked!", 0 );
-
-    const int removingGapColumnCount = getMaxWidthOfGapRegion( rows, pos, maxGaps, os );
-    SAFE_POINT_OP( os, 0 );
-    if ( 0 == removingGapColumnCount ) {
-        return 0;
-    } else if ( removingGapColumnCount < maxGaps ) {
-        pos += maxGaps - removingGapColumnCount;
-    }
-    QList<qint64> modifiedRowIds;
-    modifiedRowIds.reserve( rows.length );
-
-    MAlignment msa = getMAlignment( );
-    // iterate through given rows to update each of them in DB
-    for ( int rowCount = rows.startPos; rowCount < rows.endPos( ); ++rowCount ) {
-        msa.removeChars( rowCount, pos, removingGapColumnCount, os );
-        CHECK_OP( os, 0 );
-
-        const MAlignmentRow &row = msa.getRow( rowCount );
-        MsaDbiUtils::updateRowGapModel( entityRef, row.getRowId( ), row.getGapModel( ), os );
-        CHECK_OP( os, 0 );
-        modifiedRowIds << row.getRowId( );
-    }
-    if (rows.startPos == 0 && rows.length == getNumRows()) {
-        // delete columns
-        MsaDbiUtils::updateMsaLength( entityRef, getLength() - removingGapColumnCount, os);
-        CHECK_OP( os, 0);
-    }
-
-    MAlignmentModInfo mi;
-    mi.sequenceListChanged = false;
-    mi.modifiedRowIds = modifiedRowIds;
-    updateCachedMAlignment(mi);
-    return removingGapColumnCount;
-}
-
-void MAlignmentObject::removeRow(int rowIdx) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    const MAlignment &msa = getMAlignment();
-    SAFE_POINT(rowIdx >= 0 && rowIdx < msa.getNumRows(), "Invalid row index!", );
-    const MAlignmentRow& row = msa.getRow(rowIdx);
-    qint64 rowId = row.getRowDBInfo().rowId;
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::removeRow(entityRef, rowId, os);
-    SAFE_POINT_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.sequenceContentChanged = false;
-    mi.alignmentLengthChanged = false;
-
-    QList<qint64> removedRowIds;
-    removedRowIds << rowId;
-
-    updateCachedMAlignment(mi, removedRowIds);
-}
-
-void MAlignmentObject::updateRow(int rowIdx, const QString& name, const QByteArray& seqBytes, const QList<U2MsaGap>& gapModel, U2OpStatus& os) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    const MAlignment &msa = getMAlignment();
-    SAFE_POINT(rowIdx >= 0 && rowIdx < msa.getNumRows(), "Invalid row index!", );
-    const MAlignmentRow& row = msa.getRow(rowIdx);
-    qint64 rowId = row.getRowDBInfo().rowId;
-
-    MsaDbiUtils::updateRowContent(entityRef, rowId, seqBytes, gapModel, os);
-    CHECK_OP(os, );
-
-    MsaDbiUtils::renameRow(entityRef, rowId, name, os);
-    CHECK_OP(os, );
-}
-
-void MAlignmentObject::setGObjectName(const QString& newName) {
-    ensureDataLoaded();
-    CHECK(cachedMAlignment.getName() != newName, );
-
-    if (!isStateLocked()) {
-        U2OpStatus2Log os;
-        MsaDbiUtils::renameMsa(entityRef, newName, os);
-        CHECK_OP(os, );
-
-        updateCachedMAlignment();
-    } else {
-        GObject::setGObjectName(newName);
-        cachedMAlignment.setName(newName);
-    }
-}
-
-QList<qint64> getRowsAffectedByDeletion( const MAlignment &msa,
-    const QList<qint64> &removedRowIds )
-{
-    QList<qint64> rowIdsAffectedByDeletion;
-    U2OpStatus2Log os;
-    const QList<qint64> msaRows = msa.getRowsIds( );
-    int previousRemovedRowIndex = -1;
-    foreach ( qint64 removedRowId, removedRowIds ) {
-        if ( -1 != previousRemovedRowIndex ) {
-            const int currentRemovedRowIndex = msa.getRowIndexByRowId( removedRowId, os );
-            SAFE_POINT_OP(os, QList<qint64>( ) );
-            SAFE_POINT( currentRemovedRowIndex > previousRemovedRowIndex,
-                "Rows order violation!", QList<qint64>( ) );
-            const int countOfUnchangedRowsBetween = currentRemovedRowIndex
-                - previousRemovedRowIndex - 1;
-            if ( 0 < countOfUnchangedRowsBetween ) {
-                for ( int middleRowIndex = previousRemovedRowIndex + 1;
-                    middleRowIndex < currentRemovedRowIndex; ++middleRowIndex )
-                {
-                    rowIdsAffectedByDeletion += msaRows[middleRowIndex];
-                }
-            }
-        }
-        previousRemovedRowIndex = msa.getRowIndexByRowId( removedRowId, os );
-        SAFE_POINT_OP(os, QList<qint64>( ) );
-    }
-    const int lastDeletedRowIndex = msa.getRowIndexByRowId( removedRowIds.last( ), os );
-    SAFE_POINT_OP(os, QList<qint64>( ) );
-    if ( lastDeletedRowIndex < msaRows.size( ) - 1 ) { // if the last removed row was not in the bottom of the msa
-        rowIdsAffectedByDeletion += msaRows.mid( lastDeletedRowIndex + 1 );
-    }
-    return rowIdsAffectedByDeletion;
-}
-
-template<typename T>
-inline QList<T> mergeLists( const QList<T> &first, const QList<T> &second ) {
-    QList<T> result = first;
-    foreach ( const T &item, second ) {
-        if ( !result.contains( item ) ) {
-            result.append( item );
-        }
-    }
-    return result;
-}
-
-void MAlignmentObject::removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows, bool track) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-    QList<qint64> modifiedRowIds;
-    const MAlignment &msa = getMAlignment();
-    const QList<MAlignmentRow> &msaRows = msa.getRows();
-    SAFE_POINT(nRows > 0 && startRow >= 0 && startRow + nRows <= msaRows.size() && startPos + nBases <= msa.getLength(), "Invalid parameters!", );
-    QList<MAlignmentRow>::ConstIterator it = msaRows.begin() + startRow;
-    QList<MAlignmentRow>::ConstIterator end = it + nRows;
-    for (; it != end; it++) {
-        modifiedRowIds << it->getRowId();
-    }
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::removeRegion(entityRef, modifiedRowIds, startPos, nBases, os);
-    SAFE_POINT_OP(os, );
-
-    QList<qint64> removedRows;
-    if (removeEmptyRows) {
-        removedRows = MsaDbiUtils::removeEmptyRows(entityRef, modifiedRowIds, os);
-        SAFE_POINT_OP(os, );
-        if ( !removedRows.isEmpty( ) ) { // suppose that if at least one row in msa was removed then
-            // all the rows below it were changed
-            const QList<qint64> rowIdsAffectedByDeletion = getRowsAffectedByDeletion( msa,
-                removedRows );
-            foreach ( qint64 removedRowId, removedRows ) { // removed rows ain't need to be update
-                modifiedRowIds.removeAll( removedRowId );
-            }
-            modifiedRowIds = mergeLists( modifiedRowIds, rowIdsAffectedByDeletion );
-        }
-    }
-    if (track || !removedRows.isEmpty()) {
-        MAlignmentModInfo mi;
-        mi.modifiedRowIds = modifiedRowIds;
-        updateCachedMAlignment(mi, removedRows);
-    }
-    if (!removedRows.isEmpty()) {
-        emit si_rowsRemoved(removedRows);
-    }
-}
-
-void MAlignmentObject::replaceCharacter(int startPos, int rowIndex, char newChar) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-    const MAlignment &msa = getMAlignment();
-    SAFE_POINT(rowIndex >= 0 && startPos + 1 <= msa.getLength(), "Invalid parameters!", );
-    qint64 modifiedRowId = msa.getRow(rowIndex).getRowId();
-
-    //msa.setAlphabet(newAlphabet);
-
-    U2OpStatus2Log os;
-    if (newChar != MAlignment_GapChar) {
-        MsaDbiUtils::replaceCharacterInRow(entityRef, modifiedRowId, startPos, newChar, os);
-    } else {
-        MsaDbiUtils::removeRegion(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
-        MsaDbiUtils::insertGaps(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
-    }
-    SAFE_POINT_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.sequenceContentChanged = true;
-    mi.sequenceListChanged = false;
-    mi.alignmentLengthChanged = false;
-    mi.modifiedRowIds << modifiedRowId;
-
-    if (newChar != ' ' && !msa.getAlphabet()->contains(newChar)) {
-        const DNAAlphabet *alp = U2AlphabetUtils::findBestAlphabet(QByteArray(1, newChar));
-        const DNAAlphabet *newAlphabet = U2AlphabetUtils::deriveCommonAlphabet(alp, msa.getAlphabet());
-        SAFE_POINT(NULL != newAlphabet, "Common alphabet is NULL!", );
-
-        if (newAlphabet->getId() != msa.getAlphabet()->getId()) {
-            MsaDbiUtils::updateMsaAlphabet(entityRef, newAlphabet->getId(), os);
-            mi.alphabetChanged = true;
-            SAFE_POINT_OP(os, );
-        }
-    }
-
-    updateCachedMAlignment(mi, QList<qint64>());
-}
-
-void MAlignmentObject::renameRow(int rowIdx, const QString& newName) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    const MAlignment &msa = getMAlignment();
-    SAFE_POINT(rowIdx >= 0 && rowIdx < msa.getNumRows(), "Invalid row index!", );
-    const MAlignmentRow& row = msa.getRow(rowIdx);
-    qint64 rowId = row.getRowDBInfo().rowId;
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::renameRow(entityRef, rowId, newName, os);
-    SAFE_POINT_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.alignmentLengthChanged = false;
-    updateCachedMAlignment(mi);
-}
-
-void MAlignmentObject::crop(U2Region window, const QSet<QString>& rowNames) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-    const MAlignment &msa = getMAlignment();
-
-    QList<qint64> rowIds;
-    for (int i = 0; i < msa.getNumRows(); ++i) {
-        QString rowName = msa.getRow(i).getName();
-        if (rowNames.contains(rowName)) {
-            qint64 rowId = msa.getRow(i).getRowId();
-            rowIds.append(rowId);
-        }
-    }
-
-    U2OpStatus2Log os;
-    MsaDbiUtils::crop(entityRef, rowIds, window.startPos, window.length, os);
-    SAFE_POINT_OP(os, );
-
-    updateCachedMAlignment();
-}
-
-QList<qint64> MAlignmentObject::getColumnsWithGaps(int requiredGapCount) const {
-    const MAlignment &msa = getMAlignment();
-    const int length = msa.getLength();
-    if (GAP_COLUMN_ONLY == requiredGapCount) {
-        requiredGapCount = msa.getNumRows();
-    }
-    QList<qint64> colsForDelete;
-    for (int i = 0; i < length; i++) { //columns
-        int gapCount = 0;
-        for (int j = 0; j < msa.getNumRows(); j++) { //sequences
-            if (charAt(j, i) == MAlignment_GapChar) {
-                gapCount++;
-            }
-        }
-
-        if (gapCount >= requiredGapCount) {
-            colsForDelete.prepend(i); //invert order
-        }
-    }
-    return colsForDelete;
-}
-
-void MAlignmentObject::deleteColumnWithGaps(int requiredGapCount, U2OpStatus &os) {
-    QList<qint64> colsForDelete = getColumnsWithGaps(requiredGapCount);
-    if (getLength() == colsForDelete.count()) {
-        return;
-    }
-
-    QList<U2Region> horizontalRegionsToDelete;
-    foreach (qint64 columnNumber, colsForDelete) {
-        bool columnMergedWithPrevious = false;
-        if (!horizontalRegionsToDelete.isEmpty()) {
-            U2Region &lastRegion = horizontalRegionsToDelete.last();
-            if (lastRegion.startPos == columnNumber + 1) {
-                --lastRegion.startPos;
-                ++lastRegion.length;
-                columnMergedWithPrevious = true;
-            } else if (lastRegion.endPos() == columnNumber) {
-                ++lastRegion.length;
-                columnMergedWithPrevious = true;
-            }
-        }
-
-        if (!columnMergedWithPrevious) {
-            horizontalRegionsToDelete.append(U2Region(columnNumber, 1));
-        }
-    }
-
-    QList<U2Region>::const_iterator columns = horizontalRegionsToDelete.constBegin();
-    const QList<U2Region>::const_iterator end = horizontalRegionsToDelete.constEnd();
-
-    for (int counter = 0; columns != end; ++columns, counter++) {
-        removeRegion((*columns).startPos, 0, (*columns).length, getNumRows(), true, (end - 1 == columns));
-        os.setProgress(100 * counter / horizontalRegionsToDelete.size());
-    }
-    updateCachedMAlignment();
-}
-
-void MAlignmentObject::deleteColumnWithGaps(int requiredGapCount) {
-    U2OpStatusImpl os;
-    deleteColumnWithGaps(requiredGapCount, os);
-    SAFE_POINT_OP(os, );
-}
-
-void MAlignmentObject::updateGapModel(QMap<qint64, QList<U2MsaGap> > rowsGapModel, U2OpStatus& os) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    const MAlignment &msa = getMAlignment();
-
-    QList<qint64> modifiedRowIds;
-    foreach (qint64 rowId, rowsGapModel.keys()) {
-        if (!msa.getRowsIds().contains(rowId)) {
-            os.setError("Can't update gaps of a multiple alignment!");
-            return;
-        }
-
-        MsaDbiUtils::updateRowGapModel(entityRef, rowId, rowsGapModel.value(rowId), os);
-        CHECK_OP(os, );
-        modifiedRowIds.append(rowId);
-    }
-
-    MAlignmentModInfo mi;
-    mi.sequenceListChanged = false;
-    updateCachedMAlignment(mi);
-}
-
-QMap<qint64, QList<U2MsaGap> > MAlignmentObject::getGapModel() const {
-    QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-    const MAlignment &msa = getMAlignment();
-    foreach (const MAlignmentRow& curRow, msa.getRows()) {
-        rowsGapModel[curRow.getRowId()] = curRow.getGapModel();
-    }
-    return rowsGapModel;
-}
-
-void MAlignmentObject::moveRowsBlock(int firstRow, int numRows, int shift)
-{
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    const MAlignment &msa = getMAlignment();
-    QList<qint64> rowIds = msa.getRowsIds();
-    QList<qint64> rowsToMove;
-
-    for (int i = 0; i < numRows; ++i) {
-        rowsToMove << rowIds[firstRow + i];
-    }
-
-    U2OpStatusImpl os;
-    MsaDbiUtils::moveRows(entityRef, rowsToMove, shift, os);
-    CHECK_OP(os, );
-
-    updateCachedMAlignment();
-}
-
-void MAlignmentObject::updateRowsOrder(const QList<qint64>& rowIds, U2OpStatus& os) {
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    MsaDbiUtils::updateRowsOrder(entityRef, rowIds, os);
-    CHECK_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.alignmentLengthChanged = false;
-    updateCachedMAlignment(mi);
-}
-
-int MAlignmentObject::shiftRegion( int startPos, int startRow, int nBases, int nRows, int shift )
-{
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", 0 );
-    SAFE_POINT(!isRegionEmpty(startPos, startRow, nBases, nRows), "Region is empty!", 0 );
-    SAFE_POINT( 0 <= startPos && 0 <= startRow && 0 < nBases && 0 < nRows,
-        "Invalid parameters of selected region encountered", 0 );
-    U2OpStatusImpl os;
-
-    int n = 0;
-    if (shift > 0) {
-        //if last symbol selected - do not add gaps at the end
-        if (!(startPos + nBases == getLength())) {
-            // if some trailing gaps are selected --> save them!
-            if (startPos + nBases + shift > getLength()) {
-                bool increaseAlignmentLen = true;
-                for (int i = startRow; i < startRow + nRows; i++) {
-                    const MAlignmentRow& row = getRow(i);
-                    int rowLen = row.getRowLengthWithoutTrailing();
-                    if (rowLen >= startPos + nBases + shift) {
-                        increaseAlignmentLen = false;
-                        break;
-                    }
-                }
-                if (increaseAlignmentLen) {
-                    MsaDbiUtils::updateMsaLength(entityRef, startPos + nBases + shift, os);
-                    SAFE_POINT_OP(os, 0);
-                    updateCachedMAlignment();
-                }
-            }
-        }
-        insertGap(U2Region(startRow, nRows), startPos, shift);
-        n = shift;
-    } else if ( 0 < startPos ) {
-        if (0 > startPos + shift) {
-            shift = -startPos;
-        }
-        n = -deleteGap(U2Region(startRow, nRows), startPos + shift, -shift, os);
-        SAFE_POINT_OP( os, 0 );
-    }
-    return n;
-}
-
-bool MAlignmentObject::isRegionEmpty(int startPos, int startRow, int numChars, int numRows) const
-{
-    const MAlignment &msa = getMAlignment();
-    bool isBlockEmpty = true;
-    for (int row = startRow; row < startRow + numRows && isBlockEmpty; ++row ) {
-        for( int pos = startPos; pos < startPos + numChars; ++pos ) {
-            const MAlignmentRow& r = msa.getRows().at(row);
-            if (r.charAt(pos) != MAlignment_GapChar) {
-                isBlockEmpty = false;
-                break;
-            }
-        }
-    }
-    return isBlockEmpty;
-}
-
-const DNAAlphabet* MAlignmentObject::getAlphabet() const {
-    const MAlignment &msa = getMAlignment();
-    return msa.getAlphabet();
-}
-
-qint64 MAlignmentObject::getLength() const {
-    const MAlignment &msa = getMAlignment();
-    return msa.getLength();
-}
-
-qint64 MAlignmentObject::getNumRows() const {
-    const MAlignment &msa = getMAlignment();
-    return msa.getNumRows();
-}
-
-const MAlignmentRow& MAlignmentObject::getRow(int row) const {
-//    MAlignment msa = getMAlignment();
-//    return msa.getRow(row);
-    ensureDataLoaded();
-    return cachedMAlignment.getRow(row);
-}
-
-int MAlignmentObject::getRowPosById(qint64 rowId) const {
-    const MAlignment &msa = getMAlignment();
-    return msa.getRowsIds().indexOf(rowId);
-}
-
-static bool _registerMeta() {
-    qRegisterMetaType<MAlignmentModInfo>("MAlignmentModInfo");
-    return true;
-}
-
-bool MAlignmentModInfo::registerMeta = _registerMeta();
-
-void MAlignmentObject::sortRowsByList(const QStringList& order) {
-    GTIMER(c, t, "MAlignmentObject::sortRowsByList");
-    SAFE_POINT(!isStateLocked(), "Alignment state is locked!", );
-
-    MAlignment msa = getMAlignment();
-    msa.sortRowsByList(order);
-    CHECK(msa.getRowsIds() != cachedMAlignment.getRowsIds(), );
-
-    U2OpStatusImpl os;
-    MsaDbiUtils::updateRowsOrder(entityRef, msa.getRowsIds(), os);
-    SAFE_POINT_OP(os, );
-
-    MAlignmentModInfo mi;
-    mi.alignmentLengthChanged = false;
-    mi.sequenceContentChanged = false;
-    mi.sequenceListChanged = false;
-    updateCachedMAlignment(mi);
-}
-
-void MAlignmentObject::loadDataCore(U2OpStatus &os) {
-    DbiConnection con(entityRef.dbiRef, os);
-    CHECK_OP(os,);
-    loadAlignment(os);
-}
-
-void MAlignmentObject::loadAlignment(U2OpStatus &os) {
-    MAlignmentExporter alExporter;
-    cachedMAlignment = alExporter.getAlignment(entityRef.dbiRef, entityRef.entityId, os);
-}
-
-}//namespace
diff --git a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h b/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h
deleted file mode 100644
index ce74ee7..0000000
--- a/src/corelibs/U2Core/src/gobjects/MAlignmentObject.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_OBJECT_H_
-#define _U2_MALIGNMENT_OBJECT_H_
-
-#include <U2Core/GObject.h>
-#include <U2Core/U2Region.h>
-#include <U2Core/MAlignment.h>
-
-#include "GObjectTypes.h"
-
-const int GAP_COLUMN_ONLY = -1;
-
-namespace U2 {
-
-class GHints;
-class DNASequence;
-
-enum MAlignmentModType {
-    MAlignmentModType_User,
-    MAlignmentModType_Undo,
-    MAlignmentModType_Redo
-};
-
-class MAlignmentModInfo {
-public:
-    MAlignmentModInfo()
-        : sequenceContentChanged(true),
-          sequenceListChanged(true),
-          alignmentLengthChanged(true),
-          middleState(false),
-          alphabetChanged(false),
-          type(MAlignmentModType_User) {}
-
-    bool sequenceContentChanged;
-    bool sequenceListChanged;
-    bool alignmentLengthChanged;
-    bool middleState;
-    bool alphabetChanged;
-    QVariantMap hints;
-    QList<qint64> modifiedRowIds;
-    MAlignmentModType type;
-
-private:
-    static bool registerMeta;
-};
-
-#define MOBJECT_MIN_FONT_SIZE 8
-#define MOBJECT_MAX_FONT_SIZE 18
-#define MOBJECT_MIN_COLUMN_WIDTH 1
-
-#define MOBJECT_SETTINGS_ROOT QString("msaeditor/")
-#define MOBJECT_SETTINGS_COLOR_NUCL     "color_nucl"
-#define MOBJECT_SETTINGS_COLOR_AMINO    "color_amino"
-#define MOBJECT_SETTINGS_FONT_FAMILY    "font_family"
-#define MOBJECT_SETTINGS_FONT_SIZE      "font_size"
-#define MOBJECT_SETTINGS_FONT_ITALIC    "font_italic"
-#define MOBJECT_SETTINGS_FONT_BOLD      "font_bold"
-#define MOBJECT_SETTINGS_ZOOM_FACTOR    "zoom_factor"
-
-#define MOBJECT_DEFAULT_FONT_FAMILY "Verdana"
-#define MOBJECT_DEFAULT_FONT_SIZE 10
-#define MOBJECT_DEFAULT_ZOOM_FACTOR 1.0f
-
-class MSAMemento{
-public:
-    ~MSAMemento(){}
-private:
-    friend class MAlignmentObject;
-    MSAMemento();
-    MAlignment getState() const;
-    void setState(const MAlignment&);
-private:
-    MAlignment lastState;
-};
-
-class U2CORE_EXPORT MAlignmentObject : public GObject {
-    Q_OBJECT
-
-public:
-    MAlignmentObject(const QString& name, const U2EntityRef& msaRef, const QVariantMap& hintsMap = QVariantMap(),
-        const MAlignment &alnData = MAlignment());
-    ~MAlignmentObject();
-
-    /** Sets type of modifications tracking for the alignment */
-    void setTrackMod(U2TrackModType trackMod, U2OpStatus& os);
-
-    const MAlignment & getMAlignment() const;
-    void setMAlignment(const MAlignment& ma, MAlignmentModInfo mi = MAlignmentModInfo(), const QVariantMap& hints = QVariantMap());
-    void copyGapModel(const QList<MAlignmentRow> &copyRows);
-
-    /** GObject methods */
-    virtual GObject* clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap()) const;
-    virtual void setGObjectName(const QString& newName);
-
-    /** Const getters */
-    char charAt(int seqNum, int pos) const;
-    bool isRegionEmpty(int x, int y, int width, int height) const;
-    const DNAAlphabet* getAlphabet() const;
-    qint64 getLength() const;
-    qint64 getNumRows() const;
-    const MAlignmentRow& getRow(int row) const;
-    int getRowPosById(qint64 rowId) const;
-
-    /** Methods that modify the gap model only */
-    void insertGap(U2Region rows, int pos, int nGaps);
-
-    /**
-     * Removes gap region that extends from the @pos column and is no longer than @maxGaps.
-     * If the region starting from @pos and having width of @maxGaps includes any non-gap symbols
-     * then its longest subset starting from @pos and containing gaps only is removed.
-     *
-     * If the given region is a subset of a trailing gaps area then nothing happens.
-     */
-    int deleteGap(const U2Region &rows, int pos, int maxGaps, U2OpStatus &os);
-
-    /**
-     * Updates a gap model of the alignment.
-     * The map must contain valid row IDs and corresponding gap models.
-     */
-    void updateGapModel(QMap<qint64, QList<U2MsaGap> > rowsGapModel, U2OpStatus& os);
-
-    QMap<qint64, QList<U2MsaGap> > getGapModel() const;
-
-    /** Methods to work with rows */
-    void removeRow(int rowIdx);
-    void updateRow(int rowIdx, const QString& name, const QByteArray& seqBytes, const QList<U2MsaGap>& gapModel, U2OpStatus& os);
-    void renameRow(int rowIdx, const QString& newName);
-    void moveRowsBlock(int firstRow, int numRows, int delta);
-
-    /**
-     * Updates the rows order.
-     * There must be one-to-one correspondence between the specified rows IDs
-     * and rows IDs of the alignment.
-     */
-    void updateRowsOrder(const QList<qint64>& rowIds, U2OpStatus& os);
-
-
-    /** Method that affect the whole alignment, including sequences
-     */
-    void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows, bool track = true);
-
-    /** Replace character in row and change alphabet, if it does not contain the character
-    */
-    void replaceCharacter(int startPos, int rowIndex, char newChar);
-
-    void crop(U2Region window, const QSet<QString>& rowNames);
-    /**
-     * Performs shift of the region specified by parameters @startPos (leftmost column number),
-     * @startRow (top row number), @nBases (region width), @nRows (region height) in no more
-     * than @shift bases.
-     *
-     * @startPos and @startRow must be non-negative numbers, @nBases and @nRows - strictly
-     * positive. The sign of @shift parameter specifies the direction of shifting: positive
-     * for right direction, negative for left one. If 0 == @shift nothing happens.
-     *
-     * Shifting to the left may be performed only if a region preceding the selection
-     * and having the same height consists of gaps only. In this case selected region
-     * is moved to the left in the width of the preceding gap region but no more
-     * than |@shift| bases.
-     *
-     * Returns shift size, besides sign of the returning value specifies direction of the shift
-     */
-    int shiftRegion(int startPos, int startRow, int nBases, int nRows, int shift);
-    void deleteColumnWithGaps(int requiredGapCount, U2OpStatus &os);
-    void deleteColumnWithGaps(int requiredGapCount = GAP_COLUMN_ONLY);
-    QList<qint64> getColumnsWithGaps(int requiredGapCount = GAP_COLUMN_ONLY) const;
-    void updateCachedMAlignment(const MAlignmentModInfo &mi = MAlignmentModInfo(),
-        const QList<qint64> &removedRowIds = QList<qint64>());
-    void sortRowsByList(const QStringList& order);
-
-    void saveState();
-    void releaseState();
-
-signals:
-    void si_startMsaUpdating();
-    void si_alignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
-    void si_alignmentBecomesEmpty(bool isEmpty);
-    void si_completeStateChanged(bool complete);
-    void si_rowsRemoved(const QList<qint64> &rowIds);
-    void si_invalidateAlignmentObject();
-    void si_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet);
-
-protected:
-    void loadDataCore(U2OpStatus &os);
-    void loadAlignment(U2OpStatus &os);
-
-private:
-    /**
-     * Returns maximum count of subsequent gap columns in the region that starts from column
-     * with @pos number, has width of @maxGaps and includes the rows specified by @rows.
-     * @maxGaps, @pos are to be non-negative numbers. Gap columns should finish in column
-     * having @pos + @maxGaps number, otherwise 0 is returned. If the region is located
-     * in the MSA trailing gaps area, then 0 is returned.
-     */
-    int getMaxWidthOfGapRegion( const U2Region &rows, int pos, int maxGaps, U2OpStatus &os );
-
-    MAlignment      cachedMAlignment;
-    MSAMemento*     memento;
-};
-
-
-}//namespace
-
-#endif
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.cpp b/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.cpp
new file mode 100644
index 0000000..9737b46
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.cpp
@@ -0,0 +1,623 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DbiConnection.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GHints.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleAlignmentObject.h"
+
+namespace U2 {
+
+MaSavedState::MaSavedState()
+    : lastState(NULL)
+{
+
+}
+
+MaSavedState::~MaSavedState() {
+    delete lastState;
+}
+
+bool MaSavedState::hasState() const {
+    return NULL != lastState;
+}
+
+const MultipleAlignment MaSavedState::takeState() {
+    const MultipleAlignment state = *lastState;
+    delete lastState;
+    lastState = NULL;
+    return state;
+}
+
+void MaSavedState::setState(const MultipleAlignment &ma) {
+    if (NULL != lastState) {
+        delete lastState;
+    }
+    lastState = new MultipleAlignment(ma->getCopy());
+}
+
+MultipleAlignmentObject::MultipleAlignmentObject(const QString &gobjectType,
+                                                 const QString &name,
+                                                 const U2EntityRef &maRef,
+                                                 const QVariantMap &hintsMap,
+                                                 const MultipleAlignment &alignment)
+    : GObject(gobjectType, name, hintsMap),
+      cachedMa(alignment->getCopy())
+{
+    entityRef = maRef;
+    dataLoaded = false;
+
+    if (!cachedMa->isEmpty()) {
+        dataLoaded = true;
+    }
+}
+
+MultipleAlignmentObject::~MultipleAlignmentObject(){
+    emit si_invalidateAlignmentObject();
+}
+
+void MultipleAlignmentObject::setTrackMod(U2OpStatus &os, U2TrackModType trackMod) {
+    // Prepare the connection
+    DbiConnection con(entityRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2ObjectDbi *objectDbi = con.dbi->getObjectDbi();
+    SAFE_POINT(NULL != objectDbi, "NULL Object Dbi", );
+
+    // Set the new status
+    objectDbi->setTrackModType(entityRef.entityId, trackMod, os);
+}
+
+const MultipleAlignment& MultipleAlignmentObject::getMultipleAlignment() const {
+    ensureDataLoaded();
+    return cachedMa;
+}
+
+void MultipleAlignmentObject::setMultipleAlignment(const MultipleAlignment &newMa, MaModificationInfo mi, const QVariantMap &hints) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    U2OpStatus2Log os;
+    updateDatabase(os, newMa);
+    SAFE_POINT_OP(os, );
+
+    mi.hints = hints;
+    updateCachedMultipleAlignment(mi);
+}
+
+const MultipleAlignment MultipleAlignmentObject::getMultipleAlignmentCopy() const {
+    return getMultipleAlignment()->getCopy();
+}
+
+void MultipleAlignmentObject::setGObjectName(const QString &newName) {
+    ensureDataLoaded();
+    CHECK(cachedMa->getName() != newName, );
+
+    if (!isStateLocked()) {
+        U2OpStatus2Log os;
+        MaDbiUtils::renameMa(entityRef, newName, os);
+        CHECK_OP(os, );
+
+        updateCachedMultipleAlignment();
+    } else {
+        GObject::setGObjectName(newName);
+        cachedMa->setName(newName);
+    }
+}
+
+const DNAAlphabet* MultipleAlignmentObject::getAlphabet() const {
+    return getMultipleAlignment()->getAlphabet();
+}
+
+qint64 MultipleAlignmentObject::getLength() const {
+    return getMultipleAlignment()->getLength();
+}
+
+qint64 MultipleAlignmentObject::getNumRows() const {
+    return getMultipleAlignment()->getNumRows();
+}
+
+const MultipleAlignmentRow MultipleAlignmentObject::getRow(int row) const {
+    return getMultipleAlignment()->getRow(row);
+}
+
+int MultipleAlignmentObject::getRowPosById(qint64 rowId) const {
+    return getMultipleAlignment()->getRowsIds().indexOf(rowId);
+}
+
+U2MsaMapGapModel MultipleAlignmentObject::getMapGapModel() const {
+    return getMultipleAlignment()->getMapGapModel();
+}
+
+U2MsaListGapModel MultipleAlignmentObject::getGapModel() const {
+    return getMultipleAlignment()->getGapModel();
+}
+
+void MultipleAlignmentObject::removeRow(int rowIdx) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    const MultipleAlignment &ma = getMultipleAlignment();
+    SAFE_POINT(rowIdx >= 0 && rowIdx < ma->getNumRows(), "Invalid row index", );
+    qint64 rowId = ma->getRow(rowIdx)->getRowId();
+
+    U2OpStatus2Log os;
+    removeRowPrivate(os, entityRef, rowId);
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    mi.rowContentChanged = false;
+    mi.alignmentLengthChanged = false;
+
+    QList<qint64> removedRowIds;
+    removedRowIds << rowId;
+
+    updateCachedMultipleAlignment(mi, removedRowIds);
+}
+
+void MultipleAlignmentObject::renameRow(int rowIdx, const QString &newName) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    const MultipleAlignment &ma = getMultipleAlignment();
+    SAFE_POINT(rowIdx >= 0 && rowIdx < ma->getNumRows(), "Invalid row index", );
+    qint64 rowId = ma->getRow(rowIdx)->getRowId();
+
+    U2OpStatus2Log os;
+    MaDbiUtils::renameRow(entityRef, rowId, newName, os);
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    mi.alignmentLengthChanged = false;
+    updateCachedMultipleAlignment(mi);
+}
+
+bool MultipleAlignmentObject::isRegionEmpty(int startPos, int startRow, int numChars, int numRows) const {
+    const MultipleAlignment ma = getMultipleAlignment();
+    bool isBlockEmpty = true;
+    for (int row = startRow; row < startRow + numRows && isBlockEmpty; ++row) {
+        for (int pos = startPos; pos < startPos + numChars; ++pos) {
+            if (!ma->isGap(row, pos)) {
+                isBlockEmpty = false;
+                break;
+            }
+        }
+    }
+    return isBlockEmpty;
+}
+
+void MultipleAlignmentObject::moveRowsBlock(int firstRow, int numRows, int shift) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    QList<qint64> rowIds = getMultipleAlignment()->getRowsIds();
+    QList<qint64> rowsToMove;
+
+    for (int i = 0; i < numRows; ++i) {
+        rowsToMove << rowIds[firstRow + i];
+    }
+
+    U2OpStatusImpl os;
+    MaDbiUtils::moveRows(entityRef, rowsToMove, shift, os);
+    CHECK_OP(os, );
+
+    updateCachedMultipleAlignment();
+}
+
+void MultipleAlignmentObject::updateRowsOrder(U2OpStatus &os, const QList<qint64> &rowIds) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    MaDbiUtils::updateRowsOrder(entityRef, rowIds, os);
+    CHECK_OP(os, );
+
+    MaModificationInfo mi;
+    mi.alignmentLengthChanged = false;
+    updateCachedMultipleAlignment(mi);
+}
+
+void MultipleAlignmentObject::changeLength(U2OpStatus &os, qint64 newLength) {
+    const qint64 length = getLength();
+    CHECK(length != newLength, );
+
+    MaDbiUtils::updateMaLength(getEntityRef(), newLength, os);
+    CHECK_OP(os, );
+
+    bool rowContentChangeStatus = false;
+    if (newLength < length) {
+        const qint64 numRows = getNumRows();
+        for (int i = 0; i < numRows; i++) {
+            MultipleAlignmentRow row = getRow(i);
+            qint64 rowLengthWithoutTrailing = row->getRowLengthWithoutTrailing();
+            if (rowLengthWithoutTrailing > newLength) {
+                U2OpStatus2Log os;
+                row->crop(os, 0, newLength);
+                rowContentChangeStatus = true;
+            }
+        }
+    }
+
+    MaModificationInfo modificationInfo;
+    modificationInfo.rowContentChanged = rowContentChangeStatus;
+    modificationInfo.rowListChanged = false;
+    updateCachedMultipleAlignment(modificationInfo);
+}
+
+void MultipleAlignmentObject::updateCachedMultipleAlignment(const MaModificationInfo &mi, const QList<qint64> &removedRowIds) {
+    ensureDataLoaded();
+    emit si_startMaUpdating();
+
+    MultipleAlignment maBefore = cachedMa->getCopy();
+    QString oldName = maBefore->getName();
+
+    U2OpStatus2Log os;
+
+    if (mi.alignmentLengthChanged) {
+        qint64 msaLength = MaDbiUtils::getMaLength(entityRef, os);
+        SAFE_POINT_OP(os, );
+        if (msaLength != cachedMa->getLength()) {
+            cachedMa->setLength(msaLength);
+        }
+    }
+
+    if (mi.alphabetChanged) {
+        U2AlphabetId alphabet = MaDbiUtils::getMaAlphabet(entityRef, os);
+        SAFE_POINT_OP(os, );
+        if (alphabet.id != cachedMa->getAlphabet()->getId() && !alphabet.id.isEmpty()) {
+            const DNAAlphabet *newAlphabet = U2AlphabetUtils::getById(alphabet);
+            cachedMa->setAlphabet(newAlphabet);
+        }
+    }
+
+     if (mi.modifiedRowIds.isEmpty() && removedRowIds.isEmpty()) { // suppose that in this case all the alignment has changed
+        loadAlignment(os);
+        SAFE_POINT_OP(os, );
+    } else { // only specified rows were changed
+        if (!removedRowIds.isEmpty()) {
+            foreach (qint64 rowId, removedRowIds) {
+                const int rowIndex = cachedMa->getRowIndexByRowId(rowId, os);
+                SAFE_POINT_OP(os, );
+                cachedMa->removeRow(rowIndex, os);
+                SAFE_POINT_OP(os, );
+            }
+        }
+        if (!mi.modifiedRowIds.isEmpty()) {
+            updateCachedRows(os, mi.modifiedRowIds);
+        }
+    }
+
+    setModified(true);
+    if (!mi.middleState) {
+        emit si_alignmentChanged(maBefore, mi);
+
+        if (cachedMa->isEmpty() && !maBefore->isEmpty()) {
+            emit si_alignmentBecomesEmpty(true);
+        } else if (!cachedMa->isEmpty() && maBefore->isEmpty()) {
+            emit si_alignmentBecomesEmpty(false);
+        }
+
+        const QString newName = cachedMa->getName();
+        if (oldName != newName) {
+            setGObjectNameNotDbi(newName);
+        }
+    }
+    if (!removedRowIds.isEmpty()) {
+        emit si_rowsRemoved(removedRowIds);
+    }
+    if (cachedMa->getAlphabet()->getId() != maBefore->getAlphabet()->getId()) {
+        emit si_alphabetChanged(mi, maBefore->getAlphabet());
+    }
+}
+
+void MultipleAlignmentObject::sortRowsByList(const QStringList &order) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    MultipleSequenceAlignment ma = getMultipleAlignment()->getCopy();
+    ma->sortRowsByList(order);
+    CHECK(ma->getRowsIds() != cachedMa->getRowsIds(), );
+
+    U2OpStatusImpl os;
+    MaDbiUtils::updateRowsOrder(entityRef, ma->getRowsIds(), os);
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    mi.alignmentLengthChanged = false;
+    mi.rowContentChanged = false;
+    mi.rowListChanged = false;
+    updateCachedMultipleAlignment(mi);
+}
+
+void MultipleAlignmentObject::insertGap(const U2Region &rows, int pos, int nGaps, bool collapseTrailingGaps) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+    const MultipleAlignment &ma = getMultipleAlignment();
+    int startSeq = rows.startPos;
+    int endSeq = startSeq + rows.length;
+
+    QList<qint64> rowIdsToInsert;
+    for (int i = startSeq; i < endSeq; ++i) {
+        qint64 rowId = ma->getRow(i)->getRowId();
+        rowIdsToInsert.append(rowId);
+    }
+
+    U2OpStatus2Log os;
+    MsaDbiUtils::insertGaps(entityRef, rowIdsToInsert, pos, nGaps, os, collapseTrailingGaps);
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    mi.rowListChanged = false;
+    mi.modifiedRowIds = rowIdsToInsert;
+    updateCachedMultipleAlignment(mi);
+}
+
+namespace {
+
+template<typename T>
+inline QList<T> mergeLists(const QList<T> &first, const QList<T> &second) {
+    QList<T> result = first;
+    foreach (const T &item, second) {
+        if (!result.contains(item)) {
+            result.append(item);
+        }
+    }
+    return result;
+}
+
+QList<qint64> getRowsAffectedByDeletion(const MultipleAlignment &ma, const QList<qint64> &removedRowIds) {
+    QList<qint64> rowIdsAffectedByDeletion;
+    U2OpStatus2Log os;
+    const QList<qint64> maRows = ma->getRowsIds();
+    int previousRemovedRowIndex = -1;
+    foreach (qint64 removedRowId, removedRowIds) {
+        if (-1 != previousRemovedRowIndex) {
+            const int currentRemovedRowIndex = ma->getRowIndexByRowId(removedRowId, os);
+            SAFE_POINT_OP(os, QList<qint64>());
+            SAFE_POINT(currentRemovedRowIndex > previousRemovedRowIndex, "Rows order violation", QList<qint64>());
+            const int countOfUnchangedRowsBetween = currentRemovedRowIndex - previousRemovedRowIndex - 1;
+            if (0 < countOfUnchangedRowsBetween) {
+                for (int middleRowIndex = previousRemovedRowIndex + 1; middleRowIndex < currentRemovedRowIndex; ++middleRowIndex) {
+                    rowIdsAffectedByDeletion += maRows[middleRowIndex];
+                }
+            }
+        }
+        previousRemovedRowIndex = ma->getRowIndexByRowId(removedRowId, os);
+        SAFE_POINT_OP(os, QList<qint64>());
+    }
+    const int lastDeletedRowIndex = ma->getRowIndexByRowId(removedRowIds.last(), os);
+    SAFE_POINT_OP(os, QList<qint64>());
+    if (lastDeletedRowIndex < maRows.size() - 1) { // if the last removed row was not in the bottom of the msa
+        rowIdsAffectedByDeletion += maRows.mid(lastDeletedRowIndex + 1);
+    }
+    return rowIdsAffectedByDeletion;
+}
+
+}
+
+void MultipleAlignmentObject::removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows, bool track) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    QList<qint64> modifiedRowIds;
+    const MultipleAlignment &ma = getMultipleAlignment();
+    const QList<MultipleAlignmentRow> &maRows = ma->getRows();
+    SAFE_POINT(nRows > 0 && startRow >= 0 && startRow + nRows <= maRows.size() && startPos + nBases <= ma->getLength(), "Invalid parameters", );
+    QList<MultipleAlignmentRow>::ConstIterator it = maRows.begin() + startRow;
+    QList<MultipleAlignmentRow>::ConstIterator end = it + nRows;
+    for (; it != end; it++) {
+        modifiedRowIds << (*it)->getRowId();
+    }
+
+    U2OpStatus2Log os;
+    removeRegionPrivate(os, entityRef, modifiedRowIds, startPos, nBases);
+    SAFE_POINT_OP(os, );
+
+    QList<qint64> removedRows;
+    if (removeEmptyRows) {
+        removedRows = MsaDbiUtils::removeEmptyRows(entityRef, modifiedRowIds, os);
+        SAFE_POINT_OP(os, );
+        if (!removedRows.isEmpty()) { // suppose that if at least one row in msa was removed then
+            // all the rows below it were changed
+            const QList<qint64> rowIdsAffectedByDeletion = getRowsAffectedByDeletion(ma, removedRows);
+            foreach (qint64 removedRowId, removedRows) { // removed rows ain't need to be update
+                modifiedRowIds.removeAll(removedRowId);
+            }
+            modifiedRowIds = mergeLists(modifiedRowIds, rowIdsAffectedByDeletion);
+        }
+    }
+
+    if (track || !removedRows.isEmpty()) {
+        MaModificationInfo mi;
+        mi.modifiedRowIds = modifiedRowIds;
+        updateCachedMultipleAlignment(mi, removedRows);
+    }
+
+    if (!removedRows.isEmpty()) {
+        emit si_rowsRemoved(removedRows);
+    }
+}
+
+int MultipleAlignmentObject::deleteGap(U2OpStatus &os, const U2Region &rows, int pos, int maxGaps) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", 0);
+
+    const int removingGapColumnCount = getMaxWidthOfGapRegion(os, rows, pos, maxGaps);
+    SAFE_POINT_OP(os, 0);
+    if (0 == removingGapColumnCount) {
+        return 0;
+    } else if (removingGapColumnCount < maxGaps) {
+        pos += maxGaps - removingGapColumnCount;
+    }
+    QList<qint64> modifiedRowIds;
+    modifiedRowIds.reserve(rows.length);
+
+    MultipleAlignment msa = getMultipleAlignmentCopy();
+    // iterate through given rows to update each of them in DB
+    for (int rowCount = rows.startPos; rowCount < rows.endPos(); ++rowCount) {
+        msa->removeChars(rowCount, pos, removingGapColumnCount, os);
+        CHECK_OP(os, 0);
+
+        const MultipleAlignmentRow row = msa->getRow(rowCount);
+        MaDbiUtils::updateRowGapModel(entityRef, row->getRowId(), row->getGapModel(), os);
+        CHECK_OP(os, 0);
+        modifiedRowIds << row->getRowId();
+    }
+    if (rows.startPos == 0 && rows.length == getNumRows()) {
+        // delete columns
+        MaDbiUtils::updateMaLength(entityRef, getLength() - removingGapColumnCount, os);
+        CHECK_OP(os, 0);
+    }
+
+    MaModificationInfo mi;
+    mi.rowListChanged = false;
+    mi.modifiedRowIds = modifiedRowIds;
+    updateCachedMultipleAlignment(mi);
+    return removingGapColumnCount;
+}
+
+int MultipleAlignmentObject::shiftRegion(int startPos, int startRow, int nBases, int nRows, int shift) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", 0);
+    SAFE_POINT(!isRegionEmpty(startPos, startRow, nBases, nRows), "Region is empty", 0);
+    SAFE_POINT(0 <= startPos && 0 <= startRow && 0 < nBases && 0 < nRows, "Invalid parameters of selected region encountered", 0);
+    U2OpStatusImpl os;
+
+    int n = 0;
+    if (shift > 0) {
+        //if last symbol selected - do not add gaps at the end
+        if (!(startPos + nBases == getLength())) {
+            // if some trailing gaps are selected --> save them!
+            if (startPos + nBases + shift > getLength()) {
+                bool increaseAlignmentLen = true;
+                for (int i = startRow; i < startRow + nRows; i++) {
+                    int rowLen = getRow(i)->getRowLengthWithoutTrailing();
+                    if (rowLen >= startPos + nBases + shift) {
+                        increaseAlignmentLen = false;
+                        break;
+                    }
+                }
+                if (increaseAlignmentLen) {
+                    MaDbiUtils::updateMaLength(entityRef, startPos + nBases + shift, os);
+                    SAFE_POINT_OP(os, 0);
+                    updateCachedMultipleAlignment();
+                }
+            }
+        }
+
+        insertGap(U2Region(startRow, nRows), startPos, shift);
+        n = shift;
+    } else if (0 < startPos) {
+        if (0 > startPos + shift) {
+            shift = -startPos;
+        }
+        n = -deleteGap(os, U2Region(startRow, nRows), startPos + shift, -shift);
+        SAFE_POINT_OP(os, 0);
+    }
+    return n;
+}
+
+void MultipleAlignmentObject::saveState(){
+    const MultipleAlignment &ma = getMultipleAlignment();
+    emit si_completeStateChanged(false);
+    savedState.setState(ma);
+}
+
+void MultipleAlignmentObject::releaseState() {
+    if (!isStateLocked()) {
+        emit si_completeStateChanged(true);
+
+        CHECK(savedState.hasState(), );
+        MultipleAlignment maBefore = savedState.takeState();
+        CHECK(*maBefore != *getMultipleAlignment(), );
+        setModified(true);
+
+        MaModificationInfo mi;
+        emit si_alignmentChanged(maBefore, mi);
+
+        if (cachedMa->isEmpty() && !maBefore->isEmpty()) {
+            emit si_alignmentBecomesEmpty(true);
+        } else if (!cachedMa->isEmpty() && maBefore->isEmpty()) {
+            emit si_alignmentBecomesEmpty(false);
+        }
+    }
+}
+
+void MultipleAlignmentObject::loadDataCore(U2OpStatus &os) {
+    DbiConnection con(entityRef.dbiRef, os);
+    Q_UNUSED(con);
+    CHECK_OP(os, );
+    loadAlignment(os);
+}
+
+int MultipleAlignmentObject::getMaxWidthOfGapRegion(U2OpStatus &os, const U2Region &rows, int pos, int maxGaps) {
+    const MultipleAlignment &ma = getMultipleAlignment();
+    SAFE_POINT_EXT(U2Region(0, ma->getNumRows()).contains(rows) && 0 <= pos && 0 <= maxGaps && ma->getLength() > pos,
+                   os.setError("Illegal parameters of the gap region"), 0);
+
+    const int maxRemovedGaps = qBound(0, maxGaps, ma->getLength() - pos);
+    // check if there is nothing to remove
+    if (0 == maxRemovedGaps) {
+        return 0;
+    }
+
+    int removingGapColumnCount = maxRemovedGaps;
+    bool isRegionInRowTrailingGaps = true;
+    // iterate through given rows to determine the width of the continuous gap region
+    for (int rowCount = rows.startPos; rowCount < rows.endPos(); ++rowCount) {
+        int gapCountInCurrentRow = 0;
+        // iterate through current row bases to determine gap count
+        while (gapCountInCurrentRow < maxRemovedGaps) {
+            if (!ma->isGap(rowCount, pos + maxGaps - gapCountInCurrentRow - 1)) {
+                break;
+            }
+            gapCountInCurrentRow++;
+        }
+
+        // determine if the given area intersects a row in the area of trailing gaps
+        if (0 != gapCountInCurrentRow && isRegionInRowTrailingGaps) {
+            int trailingPosition = pos + maxRemovedGaps - gapCountInCurrentRow;
+            if (ma->getLength() != trailingPosition) {
+                while (ma->getLength() > trailingPosition && isRegionInRowTrailingGaps) {
+                    isRegionInRowTrailingGaps &= ma->isGap(rowCount, trailingPosition);
+                    ++trailingPosition;
+                }
+            }
+        } else if (isRegionInRowTrailingGaps) {
+            isRegionInRowTrailingGaps = false;
+        }
+
+        if (0 == gapCountInCurrentRow) {
+            // don't do anything if there is a row without gaps
+            return 0;
+        }
+        removingGapColumnCount = qMin(removingGapColumnCount, gapCountInCurrentRow);
+    }
+
+    if (isRegionInRowTrailingGaps) {
+        if (rows.length == getNumRows() && rows.startPos == 0) {
+            return qMin(getLength() - pos, (qint64)maxGaps);
+        } else {
+            return 0;
+        }
+    }
+
+    return removingGapColumnCount;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.h b/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.h
new file mode 100644
index 0000000..888b811
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleAlignmentObject.h
@@ -0,0 +1,171 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_ALIGNMENT_OBJECT_H_
+#define _U2_MULTIPLE_ALIGNMENT_OBJECT_H_
+
+#include <U2Core/GObject.h>
+#include <U2Core/MaModificationInfo.h>
+#include <U2Core/MultipleAlignment.h>
+
+namespace U2 {
+
+class MaSavedState {
+public:
+    MaSavedState();
+    ~MaSavedState();
+
+    bool hasState() const;
+    const MultipleAlignment takeState();
+    void setState(const MultipleAlignment &ma);
+
+private:
+    MultipleAlignment *lastState;
+};
+
+class U2CORE_EXPORT MultipleAlignmentObject : public GObject {
+    Q_OBJECT
+public:
+    MultipleAlignmentObject(const QString &gobjectType,
+                            const QString &name,
+                            const U2EntityRef &maRef,
+                            const QVariantMap &hintsMap,
+                            const MultipleAlignment &alignment);
+    ~MultipleAlignmentObject();
+
+    /** Sets type of modifications tracking for the alignment */
+    void setTrackMod(U2OpStatus &os, U2TrackModType trackMod);
+
+    const MultipleAlignment& getMultipleAlignment() const;
+    void setMultipleAlignment(const MultipleAlignment &ma, MaModificationInfo mi = MaModificationInfo(), const QVariantMap &hints = QVariantMap());
+
+    const MultipleAlignment getMultipleAlignmentCopy() const;
+
+    /** GObject methods */
+    void setGObjectName(const QString &newName);
+
+    /** Const getters */
+    const DNAAlphabet * getAlphabet() const;
+    qint64 getLength() const;
+    qint64 getNumRows() const;
+    const MultipleAlignmentRow getRow(int row) const;
+    int getRowPosById(qint64 rowId) const;
+    virtual char charAt(int seqNum, qint64 position) const = 0;
+    U2MsaMapGapModel getMapGapModel() const;
+    U2MsaListGapModel getGapModel() const;
+
+    /** Methods to work with rows */
+    void removeRow(int rowIdx);
+    void renameRow(int rowIdx, const QString &newName);
+    void moveRowsBlock(int firstRow, int numRows, int delta);
+
+    bool isRegionEmpty(int x, int y, int width, int height) const;
+
+    /**
+     * Updates the rows order.
+     * There must be one-to-one correspondence between the specified rows IDs
+     * and rows IDs of the alignment.
+     */
+    void updateRowsOrder(U2OpStatus &os, const QList<qint64> &rowIds);
+
+    void changeLength(U2OpStatus &os, qint64 newLength);
+
+    void updateCachedMultipleAlignment(const MaModificationInfo &mi = MaModificationInfo(), const QList<qint64> &removedRowIds = QList<qint64>());
+    void sortRowsByList(const QStringList &order);
+
+    virtual void replaceCharacter(int startPos, int rowIndex, char newChar) = 0;
+    /** Methods that modify the gap model only */
+    virtual void insertGap(const U2Region &rows, int pos, int nGaps) = 0;
+
+    /** Method that affect the whole alignment, including sequences
+     */
+    void removeRegion(int startPos, int startRow, int nBases, int nRows, bool removeEmptyRows, bool track = true);
+
+    /**
+     * Removes gap region that extends from the @pos column and is no longer than @maxGaps.
+     * If the region starting from @pos and having width of @maxGaps includes any non-gap symbols
+     * then its longest subset starting from @pos and containing gaps only is removed.
+     *
+     * If the given region is a subset of a trailing gaps area then nothing happens.
+     */
+    int deleteGap(U2OpStatus &os, const U2Region &rows, int pos, int maxGaps);
+
+    virtual void deleteColumnsWithGaps(U2OpStatus &os, int requiredGapsCount = -1) = 0;
+
+    /**
+     * Performs shift of the region specified by parameters @startPos (leftmost column number),
+     * @startRow (top row number), @nBases (region width), @nRows (region height) in no more
+     * than @shift bases.
+     *
+     * @startPos and @startRow must be non-negative numbers, @nBases and @nRows - strictly
+     * positive. The sign of @shift parameter specifies the direction of shifting: positive
+     * for right direction, negative for left one. If 0 == @shift nothing happens.
+     *
+     * Shifting to the left may be performed only if a region preceding the selection
+     * and having the same height consists of gaps only. In this case selected region
+     * is moved to the left in the width of the preceding gap region but no more
+     * than |@shift| bases.
+     *
+     * Returns shift size, besides sign of the returning value specifies direction of the shift
+     */
+    int shiftRegion(int startPos, int startRow, int nBases, int nRows, int shift);
+
+    void saveState();
+    void releaseState();
+
+signals:
+    void si_startMaUpdating();
+    void si_alignmentChanged(const MultipleAlignment &maBefore, const MaModificationInfo &modInfo);
+    void si_alignmentBecomesEmpty(bool isEmpty);
+    void si_completeStateChanged(bool complete);
+    void si_rowsRemoved(const QList<qint64> &rowIds);
+    void si_invalidateAlignmentObject();
+    void si_alphabetChanged(const MaModificationInfo &mi, const DNAAlphabet *prevAlphabet);
+
+protected:
+    virtual void loadAlignment(U2OpStatus &os) = 0;
+    virtual void updateCachedRows(U2OpStatus &os, const QList<qint64> &rowIds) = 0;
+    virtual void updateDatabase(U2OpStatus &os, const MultipleAlignment &ma) = 0;
+    virtual void removeRowPrivate(U2OpStatus &os, const U2EntityRef &maRef, qint64 rowId) = 0;
+    virtual void removeRegionPrivate(U2OpStatus &os, const U2EntityRef &maRef, const QList<qint64> &rows,
+                                     int startPos, int nBases) = 0;
+    void insertGap(const U2Region &rows, int pos, int nGaps, bool collapseTrailingGaps);
+
+    MultipleAlignment cachedMa;
+
+private:
+    void loadDataCore(U2OpStatus &os);
+
+    /**
+     * Returns maximum count of subsequent gap columns in the region that starts from column
+     * with @pos number, has width of @maxGaps and includes the rows specified by @rows.
+     * @maxGaps, @pos are to be non-negative numbers. Gap columns should finish in column
+     * having @pos + @maxGaps number, otherwise 0 is returned. If the region is located
+     * in the MSA trailing gaps area, then 0 is returned.
+     */
+    int getMaxWidthOfGapRegion(U2OpStatus &os, const U2Region &rows, int pos, int maxGaps);
+
+    MaSavedState savedState;
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_ALIGNMENT_OBJECT_H_
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.cpp b/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.cpp
new file mode 100644
index 0000000..aa9c8d1
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.cpp
@@ -0,0 +1,313 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DbiConnection.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GHints.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/GObjectUtils.h>
+#include <U2Core/McaDbiUtils.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleChromatogramAlignmentExporter.h>
+#include <U2Core/MultipleChromatogramAlignmentImporter.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2AttributeUtils.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2SequenceUtils.h>
+
+#include "MultipleChromatogramAlignmentObject.h"
+
+namespace U2 {
+
+const QString MultipleChromatogramAlignmentObject::MCAOBJECT_REFERENCE = "MCAOBJECT_REFERENCE";
+
+MultipleChromatogramAlignmentObject::MultipleChromatogramAlignmentObject(const QString &name,
+                                                                         const U2EntityRef &mcaRef,
+                                                                         const QVariantMap &hintsMap,
+                                                                         const MultipleChromatogramAlignment &mca)
+ : MultipleAlignmentObject(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT, name, mcaRef, hintsMap, mca), referenceObj(NULL)
+{
+}
+
+MultipleChromatogramAlignmentObject::~MultipleChromatogramAlignmentObject() {
+    delete referenceObj;
+}
+
+GObject * MultipleChromatogramAlignmentObject::clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints) const {
+    DbiOperationsBlock opBlock(dstDbiRef, os);
+    Q_UNUSED(opBlock);
+    CHECK_OP(os, NULL);
+
+    QScopedPointer<GHintsDefaultImpl> gHints(new GHintsDefaultImpl(getGHintsMap()));
+    gHints->setAll(hints);
+    const QString dstFolder = gHints->get(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
+
+    MultipleChromatogramAlignment mca = getMcaCopy();
+    MultipleChromatogramAlignmentObject *clonedObject = MultipleChromatogramAlignmentImporter::createAlignment(os, dstDbiRef, dstFolder, mca);
+    CHECK_OP(os, NULL);
+
+    QScopedPointer<MultipleChromatogramAlignmentObject> p(clonedObject);
+
+    DbiConnection srcCon(getEntityRef().dbiRef, os);
+    CHECK_OP(os, NULL);
+
+    DbiConnection dstCon(dstDbiRef, os);
+    CHECK_OP(os, NULL);
+
+    U2Sequence referenceCopy = U2SequenceUtils::copySequence(getReferenceObj()->getEntityRef(), dstDbiRef, dstFolder, os);
+    CHECK_OP(os, NULL);
+
+    U2ByteArrayAttribute attribute;
+    U2Object obj;
+    obj.dbiId = dstDbiRef.dbiId;
+    obj.id = clonedObject->getEntityRef().entityId;
+    obj.version = clonedObject->getModificationVersion();
+    U2AttributeUtils::init(attribute, obj, MultipleChromatogramAlignmentObject::MCAOBJECT_REFERENCE);
+    attribute.value = referenceCopy.id;
+    dstCon.dbi->getAttributeDbi()->createByteArrayAttribute(attribute, os);
+    CHECK_OP(os, NULL);
+
+    clonedObject->setGHints(gHints.take());
+    clonedObject->setIndexInfo(getIndexInfo());
+    return p.take();
+}
+
+U2SequenceObject* MultipleChromatogramAlignmentObject::getReferenceObj() const {
+    if (referenceObj == NULL) {
+        U2OpStatus2Log status;
+        DbiConnection con(getEntityRef().dbiRef, status);
+        CHECK_OP(status, NULL);
+
+        U2ByteArrayAttribute attribute = U2AttributeUtils::findByteArrayAttribute(con.dbi->getAttributeDbi(), getEntityRef().entityId, MCAOBJECT_REFERENCE, status);
+        CHECK_OP(status, NULL);
+
+        GObject* obj = GObjectUtils::createObject(con.dbi->getDbiRef(), attribute.value, "reference object");
+
+        referenceObj = qobject_cast<U2SequenceObject*> (obj);
+        connect(this, SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)), referenceObj, SLOT(sl_resetDataCaches()));
+        connect(this, SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)), referenceObj, SIGNAL(si_sequenceChanged()));
+    }
+
+    return referenceObj;
+}
+
+char MultipleChromatogramAlignmentObject::charAt(int seqNum, qint64 position) const {
+    SAFE_POINT(seqNum >= 0 && seqNum < getNumRows(), QString("Invalid sequence num: %1").arg(seqNum), U2Msa::GAP_CHAR);
+    SAFE_POINT(position >= 0 && position < getLength(), QString("Invalid position: %1").arg(position), U2Msa::GAP_CHAR);
+    return getMcaRow(seqNum)->charAt(position);
+}
+
+const MultipleChromatogramAlignment MultipleChromatogramAlignmentObject::getMca() const {
+    return getMultipleAlignment().dynamicCast<MultipleChromatogramAlignment>();
+}
+
+const MultipleChromatogramAlignment MultipleChromatogramAlignmentObject::getMcaCopy() const {
+    return getMca()->getCopy();
+}
+
+const MultipleChromatogramAlignmentRow MultipleChromatogramAlignmentObject::getMcaRow(int row) const {
+    return getRow(row).dynamicCast<MultipleChromatogramAlignmentRow>();
+}
+
+void MultipleChromatogramAlignmentObject::replaceCharacter(int startPos, int rowIndex, char newChar) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+    const MultipleAlignment msa = getMultipleAlignment();
+    SAFE_POINT(rowIndex >= 0 && startPos + 1 <= msa->getLength(), "Invalid parameters", );
+    qint64 modifiedRowId = msa->getRow(rowIndex)->getRowId();
+    qint64 rowLength = msa->getRow(rowIndex)->getCoreLength();
+
+    U2OpStatus2Log os;
+    bool wasRowRemoved = false;
+    if (newChar != U2Msa::GAP_CHAR) {
+        McaDbiUtils::replaceCharacterInRow(entityRef, modifiedRowId, startPos, newChar, os);
+    } else {
+        if (rowLength == 1) {
+            McaDbiUtils::removeRow(entityRef, modifiedRowId, os);
+            wasRowRemoved = true;
+        } else {
+            McaDbiUtils::removeCharacters(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
+            MsaDbiUtils::insertGaps(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os, true);
+        }
+    }
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    if (wasRowRemoved) {
+        mi.rowListChanged = true;
+    } else {
+        mi.rowContentChanged = true;
+        mi.rowListChanged = false;
+        mi.alignmentLengthChanged = false;
+        mi.modifiedRowIds << modifiedRowId;
+    }
+
+    if (newChar != ' ' && !msa->getAlphabet()->contains(newChar)) {
+        const DNAAlphabet *alp = U2AlphabetUtils::findBestAlphabet(QByteArray(1, newChar));
+        const DNAAlphabet *newAlphabet = U2AlphabetUtils::deriveCommonAlphabet(alp, msa->getAlphabet());
+        SAFE_POINT(NULL != newAlphabet, "Common alphabet is NULL", );
+
+        if (newAlphabet->getId() != msa->getAlphabet()->getId()) {
+            MaDbiUtils::updateMaAlphabet(entityRef, newAlphabet->getId(), os);
+            mi.alphabetChanged = true;
+            SAFE_POINT_OP(os, );
+        }
+    }
+
+    if (wasRowRemoved) {
+        updateCachedMultipleAlignment(mi, QList<qint64>() << modifiedRowId);
+    } else {
+        updateCachedMultipleAlignment(mi);
+    }
+}
+
+void MultipleChromatogramAlignmentObject::insertGap(const U2Region &rows, int pos, int nGaps) {
+    MultipleAlignmentObject::insertGap(rows, pos, nGaps, true);
+}
+
+QList<U2Region> MultipleChromatogramAlignmentObject::getColumnsWithGaps(int requiredGapsCount) const {
+    assert(-1 == requiredGapsCount || requiredGapsCount == getNumRows() + 1);
+    U2MsaListGapModel gapModel = getGapModel();
+    gapModel.prepend(getReferenceGapModel());
+    return MSAUtils::getColumnsWithGaps(gapModel, getLength());
+}
+
+U2MsaRowGapModel MultipleChromatogramAlignmentObject::getReferenceGapModel() const {
+    QByteArray unusedSequence;
+    U2MsaRowGapModel referenceGapModel;
+    MaDbiUtils::splitBytesToCharsAndGaps(getReferenceObj()->getSequenceData(U2_REGION_MAX), unusedSequence, referenceGapModel);
+    return referenceGapModel;
+}
+
+void MultipleChromatogramAlignmentObject::insertCharacter(int rowIndex, int pos, char newChar) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+    insertGap(U2Region(0, getNumRows()), pos, 1);
+    replaceCharacter(pos, rowIndex, newChar);
+}
+
+void MultipleChromatogramAlignmentObject::deleteColumnsWithGaps(U2OpStatus &os, int requiredGapsCount) {
+    assert(-1 == requiredGapsCount || requiredGapsCount == getNumRows() + 1);
+    const QList<U2Region> regionsToDelete = getColumnsWithGaps(requiredGapsCount);
+    CHECK(!regionsToDelete.isEmpty(), );
+    CHECK(regionsToDelete.first().length != getLength(), );
+
+    for (int n = regionsToDelete.size(), i = n - 1; i >= 0; i--) {
+        removeRegion(regionsToDelete[i].startPos, 0, regionsToDelete[i].length, getNumRows(), true, false);
+        getReferenceObj()->replaceRegion(getEntityRef().entityId, regionsToDelete[i], DNASequence(), os);
+        os.setProgress(100 * (n - i) / n);
+    }
+
+    const int length = getLength();
+    int coloumnsRemoved = 0;
+    for (int i = 0; i < regionsToDelete.size(); i++) {
+        coloumnsRemoved += regionsToDelete[i].length;
+    }
+    const int newLength = length - coloumnsRemoved;
+    changeLength(os, newLength);
+    CHECK_OP(os, );
+
+    updateCachedMultipleAlignment();
+}
+
+void MultipleChromatogramAlignmentObject::trimRow(const int rowIndex, int currentPos, U2OpStatus& os, TrimEdge edge) {
+    U2EntityRef entityRef = getEntityRef();
+    MultipleAlignmentRow row = getRow(rowIndex);
+    int rowId = row->getRowId();
+    int pos = 0;
+    int count = 0;
+    switch (edge) {
+        case Left:
+            pos = row->getCoreStart();
+            count = currentPos - pos;
+            break;
+            case Right:
+                pos = currentPos + 1;
+                int lengthWithoutTrailing = row->getRowLengthWithoutTrailing();
+                count = lengthWithoutTrailing - currentPos;
+                break;
+    }
+    McaDbiUtils::removeRegion(entityRef, rowId, pos, count, os);
+    U2Region region(rowIndex, 1);
+    if (edge == Left) {
+        insertGap(region, 0, count);
+
+    }
+
+    MaModificationInfo modificationInfo;
+    modificationInfo.rowContentChanged = true;
+    modificationInfo.rowListChanged = false;
+    updateCachedMultipleAlignment(modificationInfo);
+}
+
+void MultipleChromatogramAlignmentObject::loadAlignment(U2OpStatus &os) {
+    MultipleChromatogramAlignmentExporter mcaExporter;
+    cachedMa = mcaExporter.getAlignment(os, entityRef.dbiRef, entityRef.entityId);
+}
+
+void MultipleChromatogramAlignmentObject::updateCachedRows(U2OpStatus &os, const QList<qint64> &rowIds) {
+    MultipleChromatogramAlignment cachedMca = cachedMa.dynamicCast<MultipleChromatogramAlignment>();
+
+    MultipleChromatogramAlignmentExporter mcaExporter;
+    QMap<qint64, McaRowMemoryData> mcaRowsMemoryData = mcaExporter.getMcaRowMemoryData(os, entityRef.dbiRef, entityRef.entityId, rowIds);
+    SAFE_POINT_OP(os, );
+    foreach (const qint64 rowId, mcaRowsMemoryData.keys()) {
+        const int rowIndex = cachedMca->getRowIndexByRowId(rowId, os);
+        SAFE_POINT_OP(os, );
+        cachedMca->setRowContent(rowIndex, mcaRowsMemoryData[rowId]);
+        SAFE_POINT_OP(os, );
+        cachedMca->renameRow(rowIndex, mcaRowsMemoryData[rowId].sequence.getName());
+    }
+}
+
+void MultipleChromatogramAlignmentObject::updateDatabase(U2OpStatus &os, const MultipleAlignment &ma) {
+    const MultipleChromatogramAlignment mca = ma.dynamicCast<MultipleChromatogramAlignment>();
+    McaDbiUtils::updateMca(os, entityRef, mca);
+}
+
+void MultipleChromatogramAlignmentObject::removeRowPrivate(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 rowId) {
+    McaDbiUtils::removeRow(mcaRef, rowId, os);
+}
+
+void MultipleChromatogramAlignmentObject::removeRegionPrivate(U2OpStatus &os, const U2EntityRef &maRef,
+                                                              const QList<qint64> &rows, int startPos, int nBases) {
+    McaDbiUtils::removeCharacters(maRef, rows, startPos, nBases, os);
+}
+
+
+int MultipleChromatogramAlignmentObject::getReferenceLengthWithGaps() const {
+    int lengthWithoutGaps = getLength();
+
+    U2MsaRowGapModel refGapModel = getReferenceGapModel();
+    int gapLength = 0;
+    foreach(const U2MsaGap gap, refGapModel) {
+        gapLength += gap.gap;
+    }
+
+    return lengthWithoutGaps + gapLength;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.h b/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.h
new file mode 100644
index 0000000..8cb1a7a
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.h
@@ -0,0 +1,90 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_OBJECT_H_
+#define _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_OBJECT_H_
+
+#include <U2Core/MaModificationInfo.h>
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignment.h>
+#include <U2Core/GObject.h>
+
+namespace U2 {
+
+class MultipleAlignment;
+class U2SequenceObject;
+
+class U2CORE_EXPORT MultipleChromatogramAlignmentObject : public MultipleAlignmentObject {
+    Q_OBJECT
+public:
+    enum TrimEdge {
+        Left,
+        Right
+
+    };
+
+    static const QString MCAOBJECT_REFERENCE;
+
+    MultipleChromatogramAlignmentObject(const QString &name,
+                                        const U2EntityRef &mcaRef,
+                                        const QVariantMap &hintsMap = QVariantMap(),
+                                        const MultipleChromatogramAlignment &mca = MultipleChromatogramAlignment());
+
+    virtual ~MultipleChromatogramAlignmentObject();
+
+    GObject * clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap()) const;
+
+    char charAt(int seqNum, qint64 position) const;
+
+    const MultipleChromatogramAlignment getMca() const;
+    const MultipleChromatogramAlignment getMcaCopy() const;
+
+    const MultipleChromatogramAlignmentRow getMcaRow(int row) const;
+    U2SequenceObject* getReferenceObj() const;
+
+    void replaceCharacter(int startPos, int rowIndex, char newChar);
+    // inserts column of gaps with newChar at rowIndex row
+    void insertCharacter(int rowIndex, int pos, char newChar);
+
+    void deleteColumnsWithGaps(U2OpStatus &os, int requiredGapsCount = -1);
+
+    void trimRow(const int rowIndex, int currentPos, U2OpStatus& os, TrimEdge edge);
+    void saveState();
+    void releaseState();
+    int getReferenceLengthWithGaps() const;
+
+private:
+    void loadAlignment(U2OpStatus &os);
+    void updateCachedRows(U2OpStatus &os, const QList<qint64> &rowIds);
+    void updateDatabase(U2OpStatus &os, const MultipleAlignment &ma);
+    void removeRowPrivate(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 rowId);
+    void removeRegionPrivate(U2OpStatus &os, const U2EntityRef &maRef, const QList<qint64> &rows,
+                             int startPos, int nBases);
+    virtual void insertGap(const U2Region &rows, int pos, int nGaps);
+    QList<U2Region> getColumnsWithGaps(int requiredGapsCount) const;
+    U2MsaRowGapModel getReferenceGapModel() const;
+
+    mutable U2SequenceObject* referenceObj;
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_OBJECT_H_
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.cpp b/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.cpp
new file mode 100644
index 0000000..3688a11
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.cpp
@@ -0,0 +1,261 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GHints.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleSequenceAlignmentObject.h"
+
+namespace U2 {
+
+MultipleSequenceAlignmentObject::MultipleSequenceAlignmentObject(const QString &name,
+                                                                 const U2EntityRef &msaRef,
+                                                                 const QVariantMap &hintsMap,
+                                                                 const MultipleSequenceAlignment &alnData)
+    : MultipleAlignmentObject(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, name, msaRef, hintsMap, alnData)
+{
+
+}
+
+const MultipleSequenceAlignment MultipleSequenceAlignmentObject::getMsa() const {
+    return getMultipleAlignment().dynamicCast<MultipleSequenceAlignment>();
+}
+
+const MultipleSequenceAlignment MultipleSequenceAlignmentObject::getMsaCopy() const {
+    return getMsa()->getExplicitCopy();
+}
+
+GObject * MultipleSequenceAlignmentObject::clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints) const {
+    DbiOperationsBlock opBlock(dstDbiRef, os);
+    Q_UNUSED(opBlock);
+    CHECK_OP(os, NULL);
+
+    QScopedPointer<GHintsDefaultImpl> gHints(new GHintsDefaultImpl(getGHintsMap()));
+    gHints->setAll(hints);
+    const QString dstFolder = gHints->get(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
+
+    MultipleSequenceAlignment msa = getMsa()->getExplicitCopy();
+    MultipleSequenceAlignmentObject *clonedObj = MultipleSequenceAlignmentImporter::createAlignment(dstDbiRef, dstFolder, msa, os);
+    CHECK_OP(os, NULL);
+
+    clonedObj->setGHints(gHints.take());
+    clonedObj->setIndexInfo(getIndexInfo());
+    return clonedObj;
+}
+
+char MultipleSequenceAlignmentObject::charAt(int seqNum, qint64 position) const {
+    return getMultipleAlignment()->charAt(seqNum, position);
+}
+
+const MultipleSequenceAlignmentRow MultipleSequenceAlignmentObject::getMsaRow(int row) const {
+    return getRow(row).dynamicCast<MultipleSequenceAlignmentRow>();
+}
+
+void MultipleSequenceAlignmentObject::updateGapModel(U2OpStatus &os, const U2MsaMapGapModel &rowsGapModel) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    const MultipleSequenceAlignment msa = getMultipleAlignment();
+
+    const QList<qint64> rowIds = msa->getRowsIds();
+    QList<qint64> modifiedRowIds;
+    foreach (qint64 rowId, rowsGapModel.keys()) {
+        if (!rowIds.contains(rowId)) {
+            os.setError(QString("Can't update gaps of a multiple alignment: cannot find a row with the id %1").arg(rowId));
+            return;
+        }
+
+        MaDbiUtils::updateRowGapModel(entityRef, rowId, rowsGapModel.value(rowId), os);
+        CHECK_OP(os, );
+        modifiedRowIds.append(rowId);
+    }
+
+    MaModificationInfo mi;
+    mi.rowListChanged = false;
+    mi.modifiedRowIds = modifiedRowIds;
+    updateCachedMultipleAlignment(mi);
+}
+
+void MultipleSequenceAlignmentObject::updateGapModel(const QList<MultipleSequenceAlignmentRow> &sourceRows) {
+    const QList<MultipleSequenceAlignmentRow> oldRows = getMsa()->getMsaRows();
+
+    SAFE_POINT(oldRows.count() == sourceRows.count(), "Different rows count", );
+
+    U2MsaMapGapModel newGapModel;
+    QList<MultipleSequenceAlignmentRow>::ConstIterator oldRowsIterator = oldRows.begin();
+    QList<MultipleSequenceAlignmentRow>::ConstIterator sourceRowsIterator = sourceRows.begin();
+    for (; oldRowsIterator != oldRows.end(); oldRowsIterator++, sourceRowsIterator++) {
+        newGapModel[(*oldRowsIterator)->getRowId()] = (*sourceRowsIterator)->getGapModel();
+    }
+
+    U2OpStatus2Log os;
+    updateGapModel(os, newGapModel);
+}
+
+void MultipleSequenceAlignmentObject::insertGap(const U2Region &rows, int pos, int nGaps) {
+    MultipleAlignmentObject::insertGap(rows, pos, nGaps, false);
+}
+
+void MultipleSequenceAlignmentObject::crop(const U2Region &window, const QSet<QString> &rowNames) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+    const MultipleSequenceAlignment &ma = getMultipleAlignment();
+
+    QList<qint64> rowIds;
+    for (int i = 0; i < ma->getNumRows(); ++i) {
+        QString rowName = ma->getRow(i)->getName();
+        if (rowNames.isEmpty() || rowNames.contains(rowName)) {
+            qint64 rowId = ma->getRow(i)->getRowId();
+            rowIds.append(rowId);
+        }
+    }
+
+    U2OpStatus2Log os;
+    MsaDbiUtils::crop(entityRef, rowIds, window.startPos, window.length, os);
+    SAFE_POINT_OP(os, );
+
+    updateCachedMultipleAlignment();
+}
+
+void MultipleSequenceAlignmentObject::crop(const U2Region &window) {
+    crop(window, QSet<QString>());
+}
+
+void MultipleSequenceAlignmentObject::updateRow(U2OpStatus &os, int rowIdx, const QString &name, const QByteArray &seqBytes, const U2MsaRowGapModel &gapModel) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+
+    const MultipleSequenceAlignment msa = getMultipleAlignment();
+    SAFE_POINT(rowIdx >= 0 && rowIdx < msa->getNumRows(), "Invalid row index", );
+    qint64 rowId = msa->getRow(rowIdx)->getRowId();
+
+    MsaDbiUtils::updateRowContent(entityRef, rowId, seqBytes, gapModel, os);
+    CHECK_OP(os, );
+
+    MaDbiUtils::renameRow(entityRef, rowId, name, os);
+    CHECK_OP(os, );
+}
+
+void MultipleSequenceAlignmentObject::replaceCharacter(int startPos, int rowIndex, char newChar) {
+    SAFE_POINT(!isStateLocked(), "Alignment state is locked", );
+    const MultipleSequenceAlignment msa = getMultipleAlignment();
+    SAFE_POINT(rowIndex >= 0 && startPos + 1 <= msa->getLength(), "Invalid parameters", );
+    qint64 modifiedRowId = msa->getRow(rowIndex)->getRowId();
+    qint64 rowLength = msa->getRow(rowIndex)->getCoreLength();
+
+    U2OpStatus2Log os;
+    bool wasRowRemoved = false;
+    if (newChar != U2Msa::GAP_CHAR) {
+        MsaDbiUtils::replaceCharacterInRow(entityRef, modifiedRowId, startPos, newChar, os);
+    } else {
+        if (rowLength == 1) {
+            MsaDbiUtils::removeRow(entityRef, modifiedRowId, os);
+            wasRowRemoved = true;
+        } else {
+            MsaDbiUtils::removeRegion(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os);
+            MsaDbiUtils::insertGaps(entityRef, QList<qint64>() << modifiedRowId, startPos, 1, os, false);
+        }
+    }
+    SAFE_POINT_OP(os, );
+
+    MaModificationInfo mi;
+    if (wasRowRemoved) {
+        mi.rowListChanged = true;
+    } else {
+        mi.rowContentChanged = true;
+        mi.rowListChanged = false;
+        mi.alignmentLengthChanged = false;
+        mi.modifiedRowIds << modifiedRowId;
+    }
+
+    if (newChar != ' ' && !msa->getAlphabet()->contains(newChar)) {
+        const DNAAlphabet *alp = U2AlphabetUtils::findBestAlphabet(QByteArray(1, newChar));
+        const DNAAlphabet *newAlphabet = U2AlphabetUtils::deriveCommonAlphabet(alp, msa->getAlphabet());
+        SAFE_POINT(NULL != newAlphabet, "Common alphabet is NULL", );
+
+        if (newAlphabet->getId() != msa->getAlphabet()->getId()) {
+            MaDbiUtils::updateMaAlphabet(entityRef, newAlphabet->getId(), os);
+            mi.alphabetChanged = true;
+            SAFE_POINT_OP(os, );
+        }
+    }
+
+    if (wasRowRemoved) {
+        updateCachedMultipleAlignment(mi, QList<qint64>() << modifiedRowId);
+    } else {
+        updateCachedMultipleAlignment(mi);
+    }
+}
+
+void MultipleSequenceAlignmentObject::deleteColumnsWithGaps(U2OpStatus &os, int requiredGapsCount) {
+    const QList<U2Region> regionsToDelete = MSAUtils::getColumnsWithGaps(getGapModel(), getLength(), requiredGapsCount);
+    CHECK(!regionsToDelete.isEmpty(), );
+    CHECK(regionsToDelete.first().length != getLength(), );
+
+    for (int n = regionsToDelete.size(), i = n - 1; i >= 0; i--) {
+        removeRegion(regionsToDelete[i].startPos, 0, regionsToDelete[i].length, getNumRows(), true, false);
+        os.setProgress(100 * (n - i) / n);
+    }
+    updateCachedMultipleAlignment();
+}
+
+void MultipleSequenceAlignmentObject::loadAlignment(U2OpStatus &os) {
+    MultipleSequenceAlignmentExporter msaExporter;
+    cachedMa = msaExporter.getAlignment(entityRef.dbiRef, entityRef.entityId, os);
+}
+
+void MultipleSequenceAlignmentObject::updateCachedRows(U2OpStatus &os, const QList<qint64> &rowIds) {
+    MultipleSequenceAlignment cachedMsa = cachedMa.dynamicCast<MultipleSequenceAlignment>();
+
+    MultipleSequenceAlignmentExporter msaExporter;
+    QList<MsaRowReplacementData> rowsAndSeqs = msaExporter.getAlignmentRows(entityRef.dbiRef, entityRef.entityId, rowIds, os);
+    SAFE_POINT_OP(os, );
+    foreach (const MsaRowReplacementData &data, rowsAndSeqs) {
+        const int rowIndex = cachedMsa->getRowIndexByRowId(data.row.rowId, os);
+        SAFE_POINT_OP(os, );
+        cachedMsa->setRowContent(rowIndex, data.sequence.seq);
+        cachedMsa->setRowGapModel(rowIndex, data.row.gaps);
+        cachedMsa->renameRow(rowIndex, data.sequence.getName());
+    }
+}
+
+void MultipleSequenceAlignmentObject::updateDatabase(U2OpStatus &os, const MultipleAlignment &ma) {
+    const MultipleSequenceAlignment msa = ma.dynamicCast<MultipleSequenceAlignment>();
+    MsaDbiUtils::updateMsa(entityRef, msa, os);
+}
+
+void MultipleSequenceAlignmentObject::removeRowPrivate(U2OpStatus &os, const U2EntityRef &msaRef, qint64 rowId) {
+    MsaDbiUtils::removeRow(msaRef, rowId, os);
+}
+
+void MultipleSequenceAlignmentObject::removeRegionPrivate(U2OpStatus &os, const U2EntityRef &maRef, const QList<qint64> &rows,
+                                                          int startPos, int nBases) {
+    MsaDbiUtils::removeRegion(maRef, rows, startPos, nBases, os);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.h b/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.h
new file mode 100644
index 0000000..ed46c8e
--- /dev/null
+++ b/src/corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.h
@@ -0,0 +1,80 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_OBJECT_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_OBJECT_H_
+
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT MultipleSequenceAlignmentObject : public MultipleAlignmentObject {
+    Q_OBJECT
+public:
+    MultipleSequenceAlignmentObject(const QString &name,
+                                    const U2EntityRef &msaRef,
+                                    const QVariantMap &hintsMap = QVariantMap(),
+                                    const MultipleSequenceAlignment &msaData = MultipleSequenceAlignment());
+
+    const MultipleSequenceAlignment getMsa() const;
+    const MultipleSequenceAlignment getMsaCopy() const;
+
+    /** GObject methods */
+    virtual GObject * clone(const U2DbiRef &dstDbiRef, U2OpStatus &os, const QVariantMap &hints = QVariantMap()) const;
+
+    /** Const getters */
+    char charAt(int seqNum, qint64 position) const;
+    const MultipleSequenceAlignmentRow getMsaRow(int row) const;
+
+    /**
+     * Updates a gap model of the alignment.
+     * The map must contain valid row IDs and corresponding gap models.
+     */
+    void updateGapModel(U2OpStatus &os, const U2MsaMapGapModel &rowsGapModel);
+    void updateGapModel(const QList<MultipleSequenceAlignmentRow> &sourceRows);
+
+    void crop(const U2Region &window, const QSet<QString> &rowNames);
+    void crop(const U2Region &window);
+
+    /** Methods to work with rows */
+    void updateRow(U2OpStatus &os, int rowIdx, const QString &name, const QByteArray &seqBytes, const U2MsaRowGapModel &gapModel);
+
+    /** Replace character in row and change alphabet, if it does not contain the character
+    */
+    void replaceCharacter(int startPos, int rowIndex, char newChar);
+
+    void deleteColumnsWithGaps(U2OpStatus &os, int requiredGapsCount = -1);
+
+private:
+    void loadAlignment(U2OpStatus &os);
+    void updateCachedRows(U2OpStatus &os, const QList<qint64> &rowIds);
+    void updateDatabase(U2OpStatus &os, const MultipleAlignment &ma);
+
+    void removeRowPrivate(U2OpStatus &os, const U2EntityRef &msaRef, qint64 rowId);
+    void removeRegionPrivate(U2OpStatus &os, const U2EntityRef &maRef, const QList<qint64> &rows,
+                             int startPos, int nBases);
+    void insertGap(const U2Region &rows, int pos, int nGaps);
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_SEQUENCE_ALIGNMENT_OBJECT_H_
diff --git a/src/corelibs/U2Core/src/gobjects/PFMatrixObject.cpp b/src/corelibs/U2Core/src/gobjects/PFMatrixObject.cpp
index 618dd6e..f2a2e87 100644
--- a/src/corelibs/U2Core/src/gobjects/PFMatrixObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/PFMatrixObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/PFMatrixObject.h b/src/corelibs/U2Core/src/gobjects/PFMatrixObject.h
index 482a695..de02ff3 100644
--- a/src/corelibs/U2Core/src/gobjects/PFMatrixObject.h
+++ b/src/corelibs/U2Core/src/gobjects/PFMatrixObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/PWMatrixObject.cpp b/src/corelibs/U2Core/src/gobjects/PWMatrixObject.cpp
index 29aa453..f7484ce 100644
--- a/src/corelibs/U2Core/src/gobjects/PWMatrixObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/PWMatrixObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/PWMatrixObject.h b/src/corelibs/U2Core/src/gobjects/PWMatrixObject.h
index 5cea5c8..b11e44c 100644
--- a/src/corelibs/U2Core/src/gobjects/PWMatrixObject.h
+++ b/src/corelibs/U2Core/src/gobjects/PWMatrixObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/PhyTreeObject.cpp b/src/corelibs/U2Core/src/gobjects/PhyTreeObject.cpp
index 208adc7..68e163c 100644
--- a/src/corelibs/U2Core/src/gobjects/PhyTreeObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/PhyTreeObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/PhyTreeObject.h b/src/corelibs/U2Core/src/gobjects/PhyTreeObject.h
index 31d9fbe..0b686a3 100644
--- a/src/corelibs/U2Core/src/gobjects/PhyTreeObject.h
+++ b/src/corelibs/U2Core/src/gobjects/PhyTreeObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/TextObject.cpp b/src/corelibs/U2Core/src/gobjects/TextObject.cpp
index 613a39d..538626f 100644
--- a/src/corelibs/U2Core/src/gobjects/TextObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/TextObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/TextObject.h b/src/corelibs/U2Core/src/gobjects/TextObject.h
index 475adf9..156770a 100644
--- a/src/corelibs/U2Core/src/gobjects/TextObject.h
+++ b/src/corelibs/U2Core/src/gobjects/TextObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/UnloadedObject.cpp b/src/corelibs/U2Core/src/gobjects/UnloadedObject.cpp
index 1b7ad8b..ae06586 100644
--- a/src/corelibs/U2Core/src/gobjects/UnloadedObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/UnloadedObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/UnloadedObject.h b/src/corelibs/U2Core/src/gobjects/UnloadedObject.h
index 53148b1..46ca3d3 100644
--- a/src/corelibs/U2Core/src/gobjects/UnloadedObject.h
+++ b/src/corelibs/U2Core/src/gobjects/UnloadedObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/VariantTrackObject.cpp b/src/corelibs/U2Core/src/gobjects/VariantTrackObject.cpp
index 8d6aade..a748c9e 100644
--- a/src/corelibs/U2Core/src/gobjects/VariantTrackObject.cpp
+++ b/src/corelibs/U2Core/src/gobjects/VariantTrackObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/gobjects/VariantTrackObject.h b/src/corelibs/U2Core/src/gobjects/VariantTrackObject.h
index ca37af1..09c3e41 100644
--- a/src/corelibs/U2Core/src/gobjects/VariantTrackObject.h
+++ b/src/corelibs/U2Core/src/gobjects/VariantTrackObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.cpp b/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.cpp
index 0cb3296..874ceaf 100644
--- a/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.h b/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.h
index 3e2ccf5..29dc67d 100644
--- a/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.h
+++ b/src/corelibs/U2Core/src/io/DatabaseConnectionAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp b/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
index 8cea7d2..e7fd3c3 100644
--- a/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/HttpFileAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "HttpFileAdapter.h"
-#include "ZlibAdapter.h"
+#include <QUrl>
+#include <QMutex>
+#include <QWaitCondition>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QNetworkRequest>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/NetworkConfiguration.h>
 
-#include <QtCore/QUrl>
-#include <QtCore/QMutex>
-#include <QtCore/QWaitCondition>
-
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QNetworkRequest>
-#include <QtNetwork/QNetworkProxy>
+#include "HttpFileAdapter.h"
+#include "ZlibAdapter.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/io/HttpFileAdapter.h b/src/corelibs/U2Core/src/io/HttpFileAdapter.h
index bcabc1d..641cb9c 100644
--- a/src/corelibs/U2Core/src/io/HttpFileAdapter.h
+++ b/src/corelibs/U2Core/src/io/HttpFileAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,13 @@
 #ifndef _U2_HTTP_FILE_ADAPTER_H_
 #define _U2_HTTP_FILE_ADAPTER_H_
 
-#include <U2Core/IOAdapter.h>
-#include <U2Core/NetworkConfiguration.h>
-
-#include <QtCore/QEventLoop>
-#include <QtCore/QLinkedList>
-#include <QtCore/QMutex>
-#include <QtNetwork/QAuthenticator>
+#include <QAuthenticator>
+#include <QEventLoop>
+#include <QLinkedList>
+#include <QMutex>
+#include <QNetworkProxy>
 
+#include <U2Core/IOAdapter.h>
 
 class QNetworkAccessManager;
 class QNetworkReply;
diff --git a/src/corelibs/U2Core/src/io/IOAdapter.cpp b/src/corelibs/U2Core/src/io/IOAdapter.cpp
index 465b9ed..e23e1ce 100644
--- a/src/corelibs/U2Core/src/io/IOAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/IOAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/IOAdapter.h b/src/corelibs/U2Core/src/io/IOAdapter.h
index ec9a70a..52229b7 100644
--- a/src/corelibs/U2Core/src/io/IOAdapter.h
+++ b/src/corelibs/U2Core/src/io/IOAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_IOADAPTER_H_
 #define _U2_IOADAPTER_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
 
@@ -52,8 +54,6 @@ public:
 
 };
 
-
-
 class U2CORE_EXPORT IOAdapter : public QObject {
     Q_OBJECT
 public:
diff --git a/src/corelibs/U2Core/src/io/InputStream.h b/src/corelibs/U2Core/src/io/InputStream.h
index 1410dca..beb0c33 100644
--- a/src/corelibs/U2Core/src/io/InputStream.h
+++ b/src/corelibs/U2Core/src/io/InputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp b/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
index 934e6ea..cb9275a 100644
--- a/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/LocalFileAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/LocalFileAdapter.h b/src/corelibs/U2Core/src/io/LocalFileAdapter.h
index f7cf867..12ab007 100644
--- a/src/corelibs/U2Core/src/io/LocalFileAdapter.h
+++ b/src/corelibs/U2Core/src/io/LocalFileAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/IOAdapter.h>
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/io/OutputStream.h b/src/corelibs/U2Core/src/io/OutputStream.h
index f5ae1bc..7ada2c0 100644
--- a/src/corelibs/U2Core/src/io/OutputStream.h
+++ b/src/corelibs/U2Core/src/io/OutputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/StringAdapter.cpp b/src/corelibs/U2Core/src/io/StringAdapter.cpp
index 01e4ba9..727e8c9 100644
--- a/src/corelibs/U2Core/src/io/StringAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/StringAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/StringAdapter.h b/src/corelibs/U2Core/src/io/StringAdapter.h
index 6e46c8d..581d1ff 100644
--- a/src/corelibs/U2Core/src/io/StringAdapter.h
+++ b/src/corelibs/U2Core/src/io/StringAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/VFSAdapter.cpp b/src/corelibs/U2Core/src/io/VFSAdapter.cpp
index 510dfd3..f5c07ae 100644
--- a/src/corelibs/U2Core/src/io/VFSAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/VFSAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/VFSAdapter.h b/src/corelibs/U2Core/src/io/VFSAdapter.h
index 9a32a9d..cb696b6 100644
--- a/src/corelibs/U2Core/src/io/VFSAdapter.h
+++ b/src/corelibs/U2Core/src/io/VFSAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/IOAdapter.h>
 
-#include <QtCore/QBuffer>
+#include <QBuffer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/io/VirtualFileSystem.cpp b/src/corelibs/U2Core/src/io/VirtualFileSystem.cpp
index 450b22f..6c104a9 100644
--- a/src/corelibs/U2Core/src/io/VirtualFileSystem.cpp
+++ b/src/corelibs/U2Core/src/io/VirtualFileSystem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <cassert>
 
diff --git a/src/corelibs/U2Core/src/io/VirtualFileSystem.h b/src/corelibs/U2Core/src/io/VirtualFileSystem.h
index afee4cf..df67cc4 100644
--- a/src/corelibs/U2Core/src/io/VirtualFileSystem.h
+++ b/src/corelibs/U2Core/src/io/VirtualFileSystem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,10 +26,10 @@
 #include <U2Core/global.h>
 
 
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QByteArray>
-#include <QtCore/QMap>
+#include <QString>
+#include <QStringList>
+#include <QByteArray>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/io/ZlibAdapter.cpp b/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
index 13c8107..3c9d121 100644
--- a/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
+++ b/src/corelibs/U2Core/src/io/ZlibAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/io/ZlibAdapter.h b/src/corelibs/U2Core/src/io/ZlibAdapter.h
index 3ee8fce..202852b 100644
--- a/src/corelibs/U2Core/src/io/ZlibAdapter.h
+++ b/src/corelibs/U2Core/src/io/ZlibAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/BunchMimeData.cpp b/src/corelibs/U2Core/src/models/BunchMimeData.cpp
index 29755ce..0f26e56 100644
--- a/src/corelibs/U2Core/src/models/BunchMimeData.cpp
+++ b/src/corelibs/U2Core/src/models/BunchMimeData.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/BunchMimeData.h b/src/corelibs/U2Core/src/models/BunchMimeData.h
index 32d278b..7f68a8c 100644
--- a/src/corelibs/U2Core/src/models/BunchMimeData.h
+++ b/src/corelibs/U2Core/src/models/BunchMimeData.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/DocumentImport.cpp b/src/corelibs/U2Core/src/models/DocumentImport.cpp
index 35748ac..77a402d 100644
--- a/src/corelibs/U2Core/src/models/DocumentImport.cpp
+++ b/src/corelibs/U2Core/src/models/DocumentImport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #include <U2Core/DocumentImport.h>
 #include <U2Core/Log.h>
 
+#include <U2Gui/ImportWidget.h>
+
 namespace U2 {
 
 DocumentImportersRegistry::~DocumentImportersRegistry() {
@@ -47,11 +49,11 @@ void DocumentImportersRegistry::addDocumentImporter(DocumentImporter* i) {
 
 const QString DocumentImporter::LOAD_RESULT_DOCUMENT = "load_result_document";
 
-void DocumentImporter::setDialogFactory(ImportDialogFactory* factory) {
-    if (dialogFactory) {
-        delete dialogFactory;
+void DocumentImporter::setWidgetFactory(ImportWidgetFactory* factory) {
+    if (widgetFactory) {
+        delete widgetFactory;
     }
-    dialogFactory = factory;
+    widgetFactory = factory;
 }
 
 const QSet<GObjectType> &DocumentImporter::getSupportedObjectTypes() const {
@@ -66,4 +68,13 @@ void ImportDialog::accept() {
     QDialog::accept();
 }
 
+QString DocumentImporter::getRadioButtonText() const {
+    return QString();
+}
+
+ImportWidget* DocumentImporter::createImportWidget(const GUrl& url, const QVariantMap& settings) const {
+    ImportWidget* res = widgetFactory->getWidget(url, settings);
+    return res;
+}
+
 } //namespace
diff --git a/src/corelibs/U2Core/src/models/DocumentImport.h b/src/corelibs/U2Core/src/models/DocumentImport.h
index 58645b6..d974b57 100644
--- a/src/corelibs/U2Core/src/models/DocumentImport.h
+++ b/src/corelibs/U2Core/src/models/DocumentImport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,18 +24,14 @@
 
 #include <U2Core/DocumentModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
+#include <QDialog>
 
 namespace U2 {
 
 class DocumentImporter;
 class DocumentProviderTask;
 class FormatDetectionResult;
+class ImportWidget;
 
 class U2CORE_EXPORT ImportDialog : public QDialog {
     Q_OBJECT
@@ -54,11 +50,11 @@ protected:
     QVariantMap settings;
 };
 
-class ImportDialogFactory {
+class ImportWidgetFactory {
 public:
-    virtual ~ImportDialogFactory() {}
+    virtual ~ImportWidgetFactory() {}
 
-    virtual ImportDialog* getDialog(const QVariantMap& settings) const = 0;
+    virtual ImportWidget* getWidget(const GUrl& url, const QVariantMap& settings) const = 0;
 };
 
 /** Registry for all DocumentImportHandlers */
@@ -86,13 +82,17 @@ class U2CORE_EXPORT DocumentImporter : public QObject {
     Q_OBJECT
     Q_DISABLE_COPY(DocumentImporter)
 public:
-    DocumentImporter(const QString& _id, const QString& _name, QObject* o = NULL) : QObject(o), id(_id), name(_name), dialogFactory(NULL) {}
+    DocumentImporter(const QString& _id, const QString& _name, QObject* o = NULL) : QObject(o), id(_id), name(_name), widgetFactory(NULL) {}
 
-    virtual ~DocumentImporter() { delete dialogFactory; }
+    virtual ~DocumentImporter() { delete widgetFactory; }
 
     virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& url) = 0;
 
-    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showWizard, const QVariantMap &hints) = 0;
+    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showGui, const QVariantMap &hints) = 0;
+
+    virtual QString getRadioButtonText() const;
+
+    virtual ImportWidget* createImportWidget(const GUrl& url, const QVariantMap& settings) const;
 
     virtual QString getImporterDescription() const {return importerDescription;}
 
@@ -104,7 +104,7 @@ public:
 
     const QList<QString>& getSupportedFileExtensions() const {return extensions;}
 
-    void setDialogFactory(ImportDialogFactory* factory);
+    void setWidgetFactory(ImportWidgetFactory* factory);
 
     const QSet<GObjectType> &getSupportedObjectTypes() const;
 
@@ -117,7 +117,7 @@ protected:
     QStringList             formatIds;
     QList<QString>          extensions;
     QString                 importerDescription;
-    ImportDialogFactory*    dialogFactory;
+    ImportWidgetFactory*    widgetFactory;
     QSet<GObjectType>       supportedObjectTypes;
 };
 
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.cpp b/src/corelibs/U2Core/src/models/DocumentModel.cpp
index 8647e57..18b3fc3 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.cpp
+++ b/src/corelibs/U2Core/src/models/DocumentModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QFileInfo>
-#include <QtCore/QScopedPointer>
-#include <QtCore/QThread>
+#include <QCoreApplication>
+#include <QFileInfo>
+#include <QScopedPointer>
+#include <QThread>
 
-#include <QtScript/QScriptEngine>
+#include <QScriptEngine>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -68,6 +68,7 @@ Document* DocumentFormat::createNewLoadedDocument(IOAdapterFactory* iof, const G
         hints, QString());
     doc->setLoaded(true);
     doc->setDocumentOwnsDbiResources(true);
+    doc->setModificationTrack(!checkFlags(DocumentFormatFlag_DirectWriteOperations));
     return doc;
 }
 
@@ -79,6 +80,7 @@ Document* DocumentFormat::createNewUnloadedDocument(IOAdapterFactory* iof, const
     Q_UNUSED(os);
     U2DbiRef dbiRef = (hints[DocumentFormat::DBI_REF_HINT]).value<U2DbiRef>();
     Document* doc = new Document(this, iof, url, dbiRef, info, hints, instanceModLockDesc);
+    doc->setModificationTrack(!checkFlags(DocumentFormatFlag_DirectWriteOperations));
     return doc;
 }
 
@@ -190,6 +192,10 @@ void DocumentFormat::storeEntry(IOAdapter *, const QMap< GObjectType, QList<GObj
     os.setError("This document format does not support streaming mode");
 }
 
+QString DocumentFormat::getRadioButtonText() const {
+    return QString();
+}
+
 bool DocumentFormat::isObjectOpSupported(const Document* d, DocObjectOp op, GObjectType t) const {
     assert(d->getDocumentFormat() == this);
 
@@ -369,6 +375,15 @@ void Document::makeClean() {
     }
 }
 
+void Document::setModificationTrack(bool track) {
+    DocumentFormatFlags ugenedbFlags( DocumentFormatFlag_DirectWriteOperations);
+    if (df != NULL && df->checkFlags(ugenedbFlags)) {
+        StateLockableTreeItem::setModificationTrack(false);
+    } else {
+        StateLockableTreeItem::setModificationTrack(track);
+    }
+}
+
 GObject * Document::findGObjectByNameInDb(const QString &name) const {
     U2OpStatusImpl os;
     DbiConnection con(dbiRef, os);
@@ -505,6 +520,7 @@ void Document::loadFrom(Document* sourceDoc) {
 
     dbiRef = sourceDoc->dbiRef;
     documentOwnsDbiResources = sourceDoc->isDocumentOwnsDbiResources();
+    trackModifications = sourceDoc->isModificationTracked();
     sourceDoc->dbiRef = U2DbiRef();
     sourceDoc->setDocumentOwnsDbiResources(false);
 
@@ -831,4 +847,3 @@ DocumentMimeData::DocumentMimeData(Document* obj)
 }
 
 }//namespace
-
diff --git a/src/corelibs/U2Core/src/models/DocumentModel.h b/src/corelibs/U2Core/src/models/DocumentModel.h
index 5176445..5feaca1 100644
--- a/src/corelibs/U2Core/src/models/DocumentModel.h
+++ b/src/corelibs/U2Core/src/models/DocumentModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,10 +30,10 @@
 
 #include "StateLockableDataModel.h"
 
-#include <QtCore/QDateTime>
-#include <QtCore/QMimeData>
-#include <QtCore/QPointer>
-#include <QtScript/QScriptValue>
+#include <QDateTime>
+#include <QMimeData>
+#include <QPointer>
+#include <QScriptValue>
 
 namespace U2 {
 
@@ -228,6 +228,8 @@ public:
 
     virtual void storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &os);
 
+    virtual QString getRadioButtonText() const;
+
 protected:
 
    /* io - opened IOAdapter.
@@ -390,6 +392,8 @@ public:
 
     void makeClean();
 
+    void setModificationTrack(bool track);
+
     // avoid using this method against shared databases documents,
     // since databases allow many objects with the same name. The method returns
     // first matched GObject. Use `getObjectById` instead.
diff --git a/src/corelibs/U2Core/src/models/DocumentUtils.cpp b/src/corelibs/U2Core/src/models/DocumentUtils.cpp
index 6fd6085..9a95d24 100644
--- a/src/corelibs/U2Core/src/models/DocumentUtils.cpp
+++ b/src/corelibs/U2Core/src/models/DocumentUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,10 +26,11 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/SequenceUtils.h>
+#include <U2Core/U2OpStatus.h>
 #include <U2Core/U2SafePoints.h>
 
 namespace U2 {
@@ -246,14 +247,14 @@ Document* DocumentUtils::createCopyRestructuredWithHints(Document* doc, U2OpStat
     }
 
     if (hints.value(DocumentReadingMode_SequenceAsAlignmentHint, false).toBool()) {
-        MAlignmentObject* maObj = MSAUtils::seqObjs2msaObj(doc->getObjects(), hints, os, shallowCopy);
+        MultipleSequenceAlignmentObject* maObj = MSAUtils::seqObjs2msaObj(doc->getObjects(), hints, os, shallowCopy);
         CHECK_OP(os, NULL);
         CHECK(maObj != NULL, resultDoc);
         QList<GObject*> objects;
         objects << maObj;
 
         DocumentFormatConstraints objTypeConstraints;
-        objTypeConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+        objTypeConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
         bool makeReadOnly = !doc->getDocumentFormat()->checkConstraints(objTypeConstraints);
 
         resultDoc = new Document(doc->getDocumentFormat(), doc->getIOAdapterFactory(), doc->getURL(), doc->getDbiRef(), objects, hints,
diff --git a/src/corelibs/U2Core/src/models/DocumentUtils.h b/src/corelibs/U2Core/src/models/DocumentUtils.h
index a276867..d182562 100644
--- a/src/corelibs/U2Core/src/models/DocumentUtils.h
+++ b/src/corelibs/U2Core/src/models/DocumentUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DOCUMENT_UTILS_H_
 #define _U2_DOCUMENT_UTILS_H_
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Core/src/models/Folder.cpp b/src/corelibs/U2Core/src/models/Folder.cpp
index b0d25c0..ed18ac2 100644
--- a/src/corelibs/U2Core/src/models/Folder.cpp
+++ b/src/corelibs/U2Core/src/models/Folder.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/Folder.h b/src/corelibs/U2Core/src/models/Folder.h
index aec8fc8..3cc4989 100644
--- a/src/corelibs/U2Core/src/models/Folder.h
+++ b/src/corelibs/U2Core/src/models/Folder.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_FOLDER_H_
 #define _U2_FOLDER_H_
 
-#include <QtCore/QMimeData>
-#include <QtCore/QPointer>
+#include <QMimeData>
+#include <QPointer>
 
 #include <U2Core/DocumentModel.h>
 
diff --git a/src/corelibs/U2Core/src/models/GHints.cpp b/src/corelibs/U2Core/src/models/GHints.cpp
index 968d5c6..3c42d6e 100644
--- a/src/corelibs/U2Core/src/models/GHints.cpp
+++ b/src/corelibs/U2Core/src/models/GHints.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/GHints.h b/src/corelibs/U2Core/src/models/GHints.h
index 5a100e1..c947066 100644
--- a/src/corelibs/U2Core/src/models/GHints.h
+++ b/src/corelibs/U2Core/src/models/GHints.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QVariantMap>
+#include <QVariantMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/models/GObject.cpp b/src/corelibs/U2Core/src/models/GObject.cpp
index cdd517c..aac7859 100644
--- a/src/corelibs/U2Core/src/models/GObject.cpp
+++ b/src/corelibs/U2Core/src/models/GObject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QMutexLocker>
+#include <QMutexLocker>
 
 #include "GObject.h"
 #include "DocumentModel.h"
@@ -340,7 +340,7 @@ void GObject::updateDocInRelations(const QString& oldDocUrl, const QString& newD
 }
 
 void GObject::ensureDataLoaded() const {
-    U2OpStatusImpl os;
+    U2OpStatus2Log os;
     ensureDataLoaded(os);
 }
 
diff --git a/src/corelibs/U2Core/src/models/GObject.h b/src/corelibs/U2Core/src/models/GObject.h
index dbf5a6c..50e4581 100644
--- a/src/corelibs/U2Core/src/models/GObject.h
+++ b/src/corelibs/U2Core/src/models/GObject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_GOBJECT_H_
 #define _U2_GOBJECT_H_
 
-#include <QtCore/QMimeData>
-#include <QtCore/QMutex>
-#include <QtCore/QPointer>
+#include <QMimeData>
+#include <QMutex>
+#include <QPointer>
 
 #include <U2Core/global.h>
 #include "StateLockableDataModel.h"
diff --git a/src/corelibs/U2Core/src/models/GObjectReference.cpp b/src/corelibs/U2Core/src/models/GObjectReference.cpp
index 7f4dd46..7b7485e 100644
--- a/src/corelibs/U2Core/src/models/GObjectReference.cpp
+++ b/src/corelibs/U2Core/src/models/GObjectReference.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,6 +50,10 @@ bool GObjectRelation::operator ==(const GObjectRelation& r) const {
     return ref == r.ref && role == r.role;
 }
 
+bool GObjectReference::operator < (const GObjectReference& r) const {
+    return U2::qHash(this) < U2::qHash(r);
+}
+
 QDataStream &operator<<(QDataStream &out, const GObjectReference &myObj) {
     out << myObj.docUrl << myObj.objName << myObj.objType;
     return out;
diff --git a/src/corelibs/U2Core/src/models/GObjectReference.h b/src/corelibs/U2Core/src/models/GObjectReference.h
index 0d97e9f..63c5eaf 100644
--- a/src/corelibs/U2Core/src/models/GObjectReference.h
+++ b/src/corelibs/U2Core/src/models/GObjectReference.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/U2Type.h>
 
-#include <QtCore/QDataStream>
+#include <QDataStream>
 
 namespace U2 {
 
@@ -44,6 +44,8 @@ public:
 
     bool operator ==(const GObjectReference& o) const;
 
+    bool operator <(const GObjectReference& o) const;
+
     /** GObject reference keeps only string path of the document url.
         This must be enough to find document in the project
         while allows not to keep a complete url data here (for example username/password, etc...)
@@ -69,6 +71,10 @@ inline uint qHash(const GObjectReference& key) {
     return ::qHash(key.docUrl) + ::qHash(key.objName) + ::qHash(key.objType);
 }
 
+inline uint qHash(const GObjectReference* key) {
+    return ::qHash(key->docUrl) + ::qHash(key->objName) + ::qHash(key->objType);
+}
+
 //TODO: add constraints on relation roles
 
 class U2CORE_EXPORT GObjectRelation {
diff --git a/src/corelibs/U2Core/src/models/MimeDataIterator.cpp b/src/corelibs/U2Core/src/models/MimeDataIterator.cpp
index 5b743d7..3552ce7 100644
--- a/src/corelibs/U2Core/src/models/MimeDataIterator.cpp
+++ b/src/corelibs/U2Core/src/models/MimeDataIterator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/MimeDataIterator.h b/src/corelibs/U2Core/src/models/MimeDataIterator.h
index 43a4c93..a75ec9d 100644
--- a/src/corelibs/U2Core/src/models/MimeDataIterator.h
+++ b/src/corelibs/U2Core/src/models/MimeDataIterator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/models/ProjectModel.cpp b/src/corelibs/U2Core/src/models/ProjectModel.cpp
index 90f1eed..ed78bf0 100644
--- a/src/corelibs/U2Core/src/models/ProjectModel.cpp
+++ b/src/corelibs/U2Core/src/models/ProjectModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtScript/QScriptEngine>
+#include <QScriptEngine>
 
 #include <U2Core/AppContext.h>
 #include "ProjectModel.h"
diff --git a/src/corelibs/U2Core/src/models/ProjectModel.h b/src/corelibs/U2Core/src/models/ProjectModel.h
index 9ca0552..36bbab9 100644
--- a/src/corelibs/U2Core/src/models/ProjectModel.h
+++ b/src/corelibs/U2Core/src/models/ProjectModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,7 @@
 #ifndef _U2_PROJECT_MODEL_H_
 #define _U2_PROJECT_MODEL_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
 #include <QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-
 
 #include "DocumentModel.h"
 #include "StateLockableDataModel.h"
diff --git a/src/corelibs/U2Core/src/models/StateLockableDataModel.cpp b/src/corelibs/U2Core/src/models/StateLockableDataModel.cpp
index 9353ce5..727c5b0 100644
--- a/src/corelibs/U2Core/src/models/StateLockableDataModel.cpp
+++ b/src/corelibs/U2Core/src/models/StateLockableDataModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,13 +29,17 @@
 
 namespace U2 {
 
-StateLockableItem::StateLockableItem(QObject* p)  : QObject(p), itemIsModified(false), mainThreadModificationOnly(false),  modificationVersion(0)
+StateLockableItem::StateLockableItem(QObject* p)
+    : QObject(p),
+      itemIsModified(false),
+      trackModifications(true),
+      mainThreadModificationOnly(false),
+      modificationVersion(0)
 {
     QThread* appThread = QCoreApplication::instance()->thread();
     QThread* objectThread = thread();
     bool mainThread = appThread == objectThread;
     setMainThreadModificationOnly(mainThread);
-
 }
 
 StateLockableItem::~StateLockableItem(){
@@ -85,6 +89,7 @@ void StateLockableItem::unlockState(StateLock* lock) {
 
 void StateLockableItem::setModified(bool newModifiedState, const QString& modType) {
     SAFE_POINT(newModifiedState == false || isModificationAllowed(modType), "Item modification not allowed", );
+    CHECK(isModificationTracked(), );
     checkThread(this);
     if (newModifiedState) {
         modificationVersion++;
@@ -96,6 +101,14 @@ void StateLockableItem::setModified(bool newModifiedState, const QString& modTyp
     emit si_modifiedStateChanged();
 }
 
+bool StateLockableItem::isModificationAllowed(const QString& ) {
+    return !isStateLocked();
+}
+
+void StateLockableItem::setModificationTrack(bool track) {
+    trackModifications = track;
+}
+
 bool StateLockableItem::isMainThreadObject() const {
     QThread* at = QCoreApplication::instance()->thread();
     QThread* ot = thread();
@@ -121,6 +134,13 @@ bool StateLockableTreeItem::isMainThreadModificationOnly() const {
             (NULL != parentItem && parentItem->isMainThreadModificationOnly());
 }
 
+void StateLockableTreeItem::setModificationTrack(bool track) {
+    StateLockableItem::setModificationTrack(track);
+    foreach (StateLockableTreeItem* item, childItems) {
+        item->setModificationTrack(track);
+    }
+}
+
 void StateLockableTreeItem::lockState(StateLock* lock) {
     assert(!locks.contains(lock));
     checkThread(this);
@@ -204,6 +224,7 @@ void StateLockableTreeItem::setParentStateLockItem(StateLockableTreeItem* newPar
     bool treeMod = isTreeItemModified();
     if (newParent!=NULL) {
         setMainThreadModificationOnly(newParent->isMainThreadModificationOnly());
+        setModificationTrack(newParent->isModificationTracked());
         checkThread(this);
         newParent->childItems.insert(this);
         newParent->setModified(true, StateLockModType_AddChild);
@@ -220,9 +241,10 @@ void StateLockableTreeItem::setParentStateLockItem(StateLockableTreeItem* newPar
     }
 }
 
-
 void StateLockableTreeItem::setModified(bool newModifiedState, const QString& modType) {
     SAFE_POINT(newModifiedState == false || isModificationAllowed(modType), "Item modification not allowed", );
+    CHECK(isModificationTracked(), );
+
     checkThread(this);
     if (newModifiedState) {
         modificationVersion++;
@@ -251,6 +273,10 @@ void StateLockableTreeItem::setModified(bool newModifiedState, const QString& mo
     }
 }
 
+bool StateLockableTreeItem::isTreeItemModified () const {
+    return (numModifiedChildren > 0 || itemIsModified);
+}
+
 void StateLockableTreeItem::increaseNumModifiedChilds(int n) {
     assert(n > 0);
     numModifiedChildren+=n;
diff --git a/src/corelibs/U2Core/src/models/StateLockableDataModel.h b/src/corelibs/U2Core/src/models/StateLockableDataModel.h
index 0aed55f..7490e79 100644
--- a/src/corelibs/U2Core/src/models/StateLockableDataModel.h
+++ b/src/corelibs/U2Core/src/models/StateLockableDataModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -89,10 +89,14 @@ public:
 
     virtual void setModified(bool modified, const QString& modType = QString());
 
-    virtual bool isModificationAllowed(const QString& modType) {Q_UNUSED(modType); return !isStateLocked();}
+    virtual bool isModificationAllowed(const QString& modType);
 
     virtual bool isItemModified() const {return itemIsModified;}
 
+    virtual bool isModificationTracked() const { return trackModifications; }
+
+    virtual void setModificationTrack(bool track);
+
     /** Main thread model object can only be modified in main thread */
     virtual bool isMainThreadModificationOnly() const {return mainThreadModificationOnly;}
 
@@ -110,6 +114,7 @@ signals:
 protected:
     QList<StateLock*> locks;
     bool itemIsModified;
+    bool trackModifications;
     bool mainThreadModificationOnly;
     int  modificationVersion;
 };
@@ -144,7 +149,7 @@ public:
 
     virtual void setModified(bool modified, const QString& modType = QString());
 
-    virtual bool isTreeItemModified () const {return numModifiedChildren > 0 || itemIsModified;}
+    virtual bool isTreeItemModified () const;
 
     virtual bool hasModifiedChildren() const {return numModifiedChildren != 0;}
 
@@ -162,6 +167,8 @@ public:
 
     virtual bool isMainThreadModificationOnly() const;
 
+    virtual void setModificationTrack(bool track);
+
 protected:
     static void setParentStateLockItem_static(StateLockableTreeItem* child, StateLockableTreeItem* newParent) {
         child->setParentStateLockItem(newParent);
diff --git a/src/corelibs/U2Core/src/selection/AnnotationSelection.cpp b/src/corelibs/U2Core/src/selection/AnnotationSelection.cpp
index 9c1c5ad..7b93980 100644
--- a/src/corelibs/U2Core/src/selection/AnnotationSelection.cpp
+++ b/src/corelibs/U2Core/src/selection/AnnotationSelection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/AnnotationSelection.h b/src/corelibs/U2Core/src/selection/AnnotationSelection.h
index 92b1fcc..32c73c4 100644
--- a/src/corelibs/U2Core/src/selection/AnnotationSelection.h
+++ b/src/corelibs/U2Core/src/selection/AnnotationSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/DNASequenceSelection.h b/src/corelibs/U2Core/src/selection/DNASequenceSelection.h
index 7b9daa7..f470d93 100644
--- a/src/corelibs/U2Core/src/selection/DNASequenceSelection.h
+++ b/src/corelibs/U2Core/src/selection/DNASequenceSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/DocumentSelection.cpp b/src/corelibs/U2Core/src/selection/DocumentSelection.cpp
index 86f781b..6553b0e 100644
--- a/src/corelibs/U2Core/src/selection/DocumentSelection.cpp
+++ b/src/corelibs/U2Core/src/selection/DocumentSelection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/DocumentSelection.h b/src/corelibs/U2Core/src/selection/DocumentSelection.h
index befd64a..6195bc7 100644
--- a/src/corelibs/U2Core/src/selection/DocumentSelection.h
+++ b/src/corelibs/U2Core/src/selection/DocumentSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/FolderSelection.cpp b/src/corelibs/U2Core/src/selection/FolderSelection.cpp
index e42c9b4..369c07d 100644
--- a/src/corelibs/U2Core/src/selection/FolderSelection.cpp
+++ b/src/corelibs/U2Core/src/selection/FolderSelection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/FolderSelection.h b/src/corelibs/U2Core/src/selection/FolderSelection.h
index 171c451..78b36e2 100644
--- a/src/corelibs/U2Core/src/selection/FolderSelection.h
+++ b/src/corelibs/U2Core/src/selection/FolderSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/GObjectSelection.cpp b/src/corelibs/U2Core/src/selection/GObjectSelection.cpp
index 0dbb507..25b7d9e 100644
--- a/src/corelibs/U2Core/src/selection/GObjectSelection.cpp
+++ b/src/corelibs/U2Core/src/selection/GObjectSelection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/GObjectSelection.h b/src/corelibs/U2Core/src/selection/GObjectSelection.h
index 4945edd..a7557a8 100644
--- a/src/corelibs/U2Core/src/selection/GObjectSelection.h
+++ b/src/corelibs/U2Core/src/selection/GObjectSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/LRegionsSelection.cpp b/src/corelibs/U2Core/src/selection/LRegionsSelection.cpp
index a053627..94ccbab 100644
--- a/src/corelibs/U2Core/src/selection/LRegionsSelection.cpp
+++ b/src/corelibs/U2Core/src/selection/LRegionsSelection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -70,8 +70,7 @@ void LRegionsSelection::removeRegion(const U2Region& r) {
     emit si_selectionChanged(this, emptyLRegions, tmpRemoved);
 }
 
-void LRegionsSelection::setRegion(const U2Region& r)
-{
+void LRegionsSelection::setRegion(const U2Region& r) {
     if (r.length == 0)
     {
         clear();
diff --git a/src/corelibs/U2Core/src/selection/LRegionsSelection.h b/src/corelibs/U2Core/src/selection/LRegionsSelection.h
index b554fdf..d609bca 100644
--- a/src/corelibs/U2Core/src/selection/LRegionsSelection.h
+++ b/src/corelibs/U2Core/src/selection/LRegionsSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/SelectionModel.cpp b/src/corelibs/U2Core/src/selection/SelectionModel.cpp
index 0f81711..617b840 100644
--- a/src/corelibs/U2Core/src/selection/SelectionModel.cpp
+++ b/src/corelibs/U2Core/src/selection/SelectionModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/SelectionModel.h b/src/corelibs/U2Core/src/selection/SelectionModel.h
index 646df9f..fe42f0a 100644
--- a/src/corelibs/U2Core/src/selection/SelectionModel.h
+++ b/src/corelibs/U2Core/src/selection/SelectionModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,14 @@
 #ifndef _U2_SELECTION_MODEL_H_
 #define _U2_SELECTION_MODEL_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
 
 typedef QString GSelectionType;
 
-
 class U2CORE_EXPORT GSelection : public QObject {
     Q_OBJECT
 public:
diff --git a/src/corelibs/U2Core/src/selection/SelectionTypes.cpp b/src/corelibs/U2Core/src/selection/SelectionTypes.cpp
index c840f8e..db1ebc6 100644
--- a/src/corelibs/U2Core/src/selection/SelectionTypes.cpp
+++ b/src/corelibs/U2Core/src/selection/SelectionTypes.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/SelectionTypes.h b/src/corelibs/U2Core/src/selection/SelectionTypes.h
index 563ee14..5ec82e6 100644
--- a/src/corelibs/U2Core/src/selection/SelectionTypes.h
+++ b/src/corelibs/U2Core/src/selection/SelectionTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/SelectionUtils.cpp b/src/corelibs/U2Core/src/selection/SelectionUtils.cpp
index cfad1cc..8c74235 100644
--- a/src/corelibs/U2Core/src/selection/SelectionUtils.cpp
+++ b/src/corelibs/U2Core/src/selection/SelectionUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/selection/SelectionUtils.h b/src/corelibs/U2Core/src/selection/SelectionUtils.h
index 069c73d..73fa838 100644
--- a/src/corelibs/U2Core/src/selection/SelectionUtils.h
+++ b/src/corelibs/U2Core/src/selection/SelectionUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QSet>
+#include <QSet>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/selection/TextSelection.h b/src/corelibs/U2Core/src/selection/TextSelection.h
index fabe82a..3b60560 100644
--- a/src/corelibs/U2Core/src/selection/TextSelection.h
+++ b/src/corelibs/U2Core/src/selection/TextSelection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.cpp b/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.cpp
index 17d0d0c..2c7ab32 100644
--- a/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.h b/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.h
index 67c7cd4..da90338 100644
--- a/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.h
+++ b/src/corelibs/U2Core/src/tasks/AbstractProjectFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AddDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/AddDocumentTask.cpp
index d75bd66..2f32635 100644
--- a/src/corelibs/U2Core/src/tasks/AddDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/AddDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AddDocumentTask.h b/src/corelibs/U2Core/src/tasks/AddDocumentTask.h
index 8d1205f..2776b50 100644
--- a/src/corelibs/U2Core/src/tasks/AddDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/AddDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/DocumentModel.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.cpp
index cc866e9..44f7a17 100644
--- a/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.h b/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.h
index bb73b21..e2cb268 100644
--- a/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/AddObjectsToDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
index a8dee3d..77d7c41 100644
--- a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,9 +38,15 @@ namespace U2 {
 
 const int AddSequenceObjectsToAlignmentTask::maxErrorListSize = 5;
 
-AddSequenceObjectsToAlignmentTask::AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<DNASequence>& seqList)
-    : Task("Add sequences to alignment task", TaskFlags(TaskFlags_FOSE_COSC)), seqList(seqList), maObj(obj),
-    stateLock(NULL), msaAlphabet(maObj->getAlphabet()), dbi(NULL), modStep(NULL) {
+AddSequenceObjectsToAlignmentTask::AddSequenceObjectsToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QList<DNASequence>& seqList)
+    : Task("Add sequences to alignment task", TaskFlags(TaskFlags_FOSE_COSC)),
+      seqList(seqList),
+      maObj(obj),
+      stateLock(NULL),
+      msaAlphabet(maObj->getAlphabet()),
+      dbi(NULL),
+      modStep(NULL)
+{
     entityRef = maObj->getEntityRef();
 }
 
@@ -103,7 +109,7 @@ Task::ReportResult AddSequenceObjectsToAlignmentTask::report() {
     }
 
     // Update object
-    maObj->updateCachedMAlignment(mi);
+    maObj->updateCachedMultipleAlignment(mi);
 
     if (!errorList.isEmpty()) {
         setupError();
@@ -170,7 +176,7 @@ void AddSequenceObjectsToAlignmentTask::releaseLock(){
     }
 }
 
-AddSequencesFromFilesToAlignmentTask::AddSequencesFromFilesToAlignmentTask(MAlignmentObject* obj, const QStringList& urls)
+AddSequencesFromFilesToAlignmentTask::AddSequencesFromFilesToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QStringList& urls)
     : AddSequenceObjectsToAlignmentTask(obj, QList<DNASequence>()), urlList(urls), loadTask(NULL) {
     connect(maObj, SIGNAL(si_invalidateAlignmentObject()), SLOT(sl_onCancel()));
 }
@@ -216,7 +222,7 @@ QList<Task*> AddSequencesFromFilesToAlignmentTask::onSubTaskFinished(Task* subTa
 
 ////////////////////////////////////////////////////////////////////////////////
 //AddSequencesFromDocumentsToAlignmentTask
-AddSequencesFromDocumentsToAlignmentTask::AddSequencesFromDocumentsToAlignmentTask(MAlignmentObject* obj, const QList<Document*>& docs)
+AddSequencesFromDocumentsToAlignmentTask::AddSequencesFromDocumentsToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QList<Document*>& docs)
     : AddSequenceObjectsToAlignmentTask(obj, QList<DNASequence>()), docs(docs) {}
 
 void AddSequencesFromDocumentsToAlignmentTask::prepare() {
diff --git a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
index 8ac8b4e..696f118 100644
--- a/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
+++ b/src/corelibs/U2Core/src/tasks/AddSequencesToAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <QPointer>
 
 #include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2Type.h>
 
 namespace U2 {
@@ -39,7 +39,7 @@ class U2UseCommonUserModStep;
 class U2CORE_EXPORT AddSequenceObjectsToAlignmentTask : public Task {
     Q_OBJECT
 public:
-    AddSequenceObjectsToAlignmentTask(MAlignmentObject* obj, const QList<DNASequence>& seqList);
+    AddSequenceObjectsToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QList<DNASequence>& seqList);
 
     virtual void prepare();
     virtual void run();
@@ -48,7 +48,7 @@ protected:
     void processObjectsAndSetResultingAlphabet();
 
     QList<DNASequence>    seqList;
-    QPointer<MAlignmentObject>  maObj;
+    QPointer<MultipleSequenceAlignmentObject>  maObj;
 protected:
     void releaseLock();
 private:
@@ -58,7 +58,7 @@ private:
     U2MsaDbi*                   dbi;
     U2EntityRef                 entityRef;
     U2UseCommonUserModStep*     modStep;
-    MAlignmentModInfo           mi;
+    MaModificationInfo           mi;
 
     static const int maxErrorListSize;
     /** Returns the max length of the rows including trailing gaps */
@@ -71,7 +71,7 @@ private:
 class U2CORE_EXPORT AddSequencesFromFilesToAlignmentTask : public AddSequenceObjectsToAlignmentTask {
     Q_OBJECT
 public:
-    AddSequencesFromFilesToAlignmentTask(MAlignmentObject* obj, const QStringList& urls);
+    AddSequencesFromFilesToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QStringList& urls);
 
     virtual void prepare();
     QList<Task*> onSubTaskFinished(Task* subTask);
@@ -85,7 +85,7 @@ private:
 class U2CORE_EXPORT AddSequencesFromDocumentsToAlignmentTask : public AddSequenceObjectsToAlignmentTask {
     Q_OBJECT
 public:
-    AddSequencesFromDocumentsToAlignmentTask(MAlignmentObject* obj, const QList<Document*>& docs);
+    AddSequencesFromDocumentsToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QList<Document*>& docs);
 
     virtual void prepare();
 private:
diff --git a/src/corelibs/U2Core/src/tasks/BackgroundTaskRunner.h b/src/corelibs/U2Core/src/tasks/BackgroundTaskRunner.h
index 9df2c09..fe942aa 100644
--- a/src/corelibs/U2Core/src/tasks/BackgroundTaskRunner.h
+++ b/src/corelibs/U2Core/src/tasks/BackgroundTaskRunner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef __BACKGROUND_TASK_RUNNER_H__
 #define __BACKGROUND_TASK_RUNNER_H__
 
+#include <QMap>
+
 #include <U2Core/Task.h>
 #include <U2Core/AppContext.h>
 
diff --git a/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.cpp b/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.cpp
index afc6200..782d3ba 100644
--- a/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.h b/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.h
index 65a5af2..9b9f5cf 100644
--- a/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.h
+++ b/src/corelibs/U2Core/src/tasks/CleanupFileStorageTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CloneObjectTask.cpp b/src/corelibs/U2Core/src/tasks/CloneObjectTask.cpp
index a96bfbb..e3b70f9 100644
--- a/src/corelibs/U2Core/src/tasks/CloneObjectTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/CloneObjectTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/U2DbiUtils.h>
diff --git a/src/corelibs/U2Core/src/tasks/CloneObjectTask.h b/src/corelibs/U2Core/src/tasks/CloneObjectTask.h
index 4b9cf87..b7b7ac2 100644
--- a/src/corelibs/U2Core/src/tasks/CloneObjectTask.h
+++ b/src/corelibs/U2Core/src/tasks/CloneObjectTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CLONE_OBJECT_TASK_H_
 #define _U2_CLONE_OBJECT_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Core/Task.h>
 #include <U2Core/U2Type.h>
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp
index a2e55fc..5d00040 100644
--- a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp
+++ b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h
index 70c25a4..2052b45 100644
--- a/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h
+++ b/src/corelibs/U2Core/src/tasks/CmdlineInOutTaskRunner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp
index a03aa55..8dd8797 100644
--- a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp
+++ b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -94,6 +94,8 @@ namespace {
     }
 }
 
+const QString CmdlineTaskRunner::REPORT_FILE_ARG = "ugene-write-task-report-to-file";
+
 CmdlineTaskRunner::CmdlineTaskRunner(const CmdlineTaskConfig &config)
 : Task(tr("Run UGENE command line: %1").arg(config.command), TaskFlag_NoRun), config(config), process(NULL)
 {
@@ -107,6 +109,11 @@ void CmdlineTaskRunner::prepare() {
     args << QString("--%1").arg(OUTPUT_PROGRESS_ARG);
     args << QString("--%1").arg(OUTPUT_ERROR_ARG);
     args << QString("--ini-file=\"%1\"").arg(AppContext::getSettings()->fileName());
+
+    if (!config.reportFile.isEmpty()) {
+        args << QString("--%1=\"%2\"").arg(REPORT_FILE_ARG).arg(config.reportFile);
+    }
+
     args << config.arguments;
     if (config.withPluginList) {
         args << QString("--%1=\"%2\"").arg(CMDLineRegistry::PLUGINS_ARG).arg(config.pluginList.join(";"));
diff --git a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h
index ac7264a..1b716cb 100644
--- a/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h
+++ b/src/corelibs/U2Core/src/tasks/CmdlineTaskRunner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,6 +36,7 @@ public:
     LogLevel            logLevel;
     bool                withPluginList;
     QStringList         pluginList;
+    QString             reportFile;
 };
 
 class U2CORE_EXPORT CmdlineTaskRunner : public Task {
@@ -46,6 +47,8 @@ public:
     void prepare();
     ReportResult report();
 
+    static const QString REPORT_FILE_ARG;
+
 protected:
     virtual bool isCommandLogLine(const QString &logLine) const;
     virtual bool parseCommandLogWord(const QString &logWord);
diff --git a/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.cpp
index b899c48..c79a507 100644
--- a/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.h b/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.h
index 765dd30..59adb87 100644
--- a/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/ConnectSharedDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.cpp b/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.cpp
index d90ccd8..d3055ae 100644
--- a/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.h b/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.h
index 0fcd791..de6f35e 100644
--- a/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.h
+++ b/src/corelibs/U2Core/src/tasks/ConsoleShutdownTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CONSOLE_SHUTDOWN_TASK_H_
 #define _U2_CONSOLE_SHUTDOWN_TASK_H_
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 #include <U2Core/Task.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/tasks/CopyDataTask.cpp b/src/corelibs/U2Core/src/tasks/CopyDataTask.cpp
index ef84d3d..1e20ad5 100644
--- a/src/corelibs/U2Core/src/tasks/CopyDataTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/CopyDataTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/CopyDataTask.h b/src/corelibs/U2Core/src/tasks/CopyDataTask.h
index 72b42ff..30cb5bb 100644
--- a/src/corelibs/U2Core/src/tasks/CopyDataTask.h
+++ b/src/corelibs/U2Core/src/tasks/CopyDataTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CopyDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/CopyDocumentTask.cpp
index a73685c..4d8f258 100644
--- a/src/corelibs/U2Core/src/tasks/CopyDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/CopyDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QFileInfo>
+#include <QCoreApplication>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AssemblyObject.h>
@@ -129,7 +129,7 @@ void CloneObjectsTask::run() {
         if(df->isObjectOpSupported(dstDoc, DocumentFormat::DocObjectOp_Add, srcObj->getGObjectType())){
             GObject *dstObj = srcObj->clone(dstDoc->getDbiRef(), stateInfo);
             CHECK_OP(stateInfo, );
-            if (dstObj->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT){
+            if (dstObj->getGObjectType() == GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
                 QString name = QFileInfo(dstDoc->getURLString()).baseName();
                 dstObj->setGObjectName(name);
                 dstObj->setModified(false);
diff --git a/src/corelibs/U2Core/src/tasks/CopyDocumentTask.h b/src/corelibs/U2Core/src/tasks/CopyDocumentTask.h
index 6da8b4a..3c0a5bd 100644
--- a/src/corelibs/U2Core/src/tasks/CopyDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/CopyDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CopyFileTask.cpp b/src/corelibs/U2Core/src/tasks/CopyFileTask.cpp
new file mode 100644
index 0000000..7253fc4
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CopyFileTask.cpp
@@ -0,0 +1,54 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QFile>
+
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "CopyFileTask.h"
+
+namespace U2 {
+
+CopyFileTask::CopyFileTask(const QString &sourceFilePath, const QString &targetFilePath)
+    : Task(tr("File '%1' copy task").arg(sourceFilePath), TaskFlag_None),
+      sourceFilePath(sourceFilePath),
+      targetFilePath(GUrlUtils::rollFileName(targetFilePath, "_"))
+{
+
+}
+
+QString CopyFileTask::getSourceFilePath() const {
+    return sourceFilePath;
+}
+
+QString CopyFileTask::getTargetFilePath() const {
+    return targetFilePath;
+}
+
+void CopyFileTask::run() {
+    QFile sourceFile(sourceFilePath);
+    CHECK_EXT(sourceFile.exists(), setError(tr("File '%1' doesn't exist").arg(sourceFilePath)), );
+    const bool succeeded = sourceFile.copy(targetFilePath);
+    CHECK_EXT(succeeded, setError(tr("File copy from '%1' to '%2' failed").arg(sourceFilePath).arg(targetFilePath)), );
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/tasks/CopyFileTask.h b/src/corelibs/U2Core/src/tasks/CopyFileTask.h
new file mode 100644
index 0000000..02708f0
--- /dev/null
+++ b/src/corelibs/U2Core/src/tasks/CopyFileTask.h
@@ -0,0 +1,46 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_COPY_FILE_TASK_H_
+#define _U2_COPY_FILE_TASK_H_
+
+#include <U2Core/Task.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT CopyFileTask : public Task {
+    Q_OBJECT
+public:
+    CopyFileTask(const QString &sourceFilePath, const QString &targetFilePath);
+
+    QString getSourceFilePath() const;
+    QString getTargetFilePath() const;
+
+private:
+    void run();
+
+    const QString sourceFilePath;
+    const QString targetFilePath;
+};
+
+}   // namespace U2
+
+#endif // _U2_COPY_FILE_TASK_H_
diff --git a/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.cpp b/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.cpp
index db7c97f..7c5f92e 100644
--- a/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.h b/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.h
index 1beda87..e00392b 100644
--- a/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.h
+++ b/src/corelibs/U2Core/src/tasks/CreateAnnotationTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.cpp b/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.cpp
index 815ed41..5592ca0 100644
--- a/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.h b/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.h
index caf2c69..a47076f 100644
--- a/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.h
+++ b/src/corelibs/U2Core/src/tasks/DeleteObjectsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/DocumentProviderTask.cpp b/src/corelibs/U2Core/src/tasks/DocumentProviderTask.cpp
index 5cc1d53..7cc1c22 100644
--- a/src/corelibs/U2Core/src/tasks/DocumentProviderTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/DocumentProviderTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 
 #include <U2Core/DocumentModel.h>
 
diff --git a/src/corelibs/U2Core/src/tasks/DocumentProviderTask.h b/src/corelibs/U2Core/src/tasks/DocumentProviderTask.h
index f178bbf..863782c 100644
--- a/src/corelibs/U2Core/src/tasks/DocumentProviderTask.h
+++ b/src/corelibs/U2Core/src/tasks/DocumentProviderTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
index 255b9ca..3fc7339 100644
--- a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,8 +35,8 @@
 #include <U2Core/ScriptingToolRegistry.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QCoreApplication>
+#include <QDir>
+#include <QCoreApplication>
 
 #ifdef Q_OS_WIN
 #include <windows.h>
@@ -347,18 +347,18 @@ void ExternalToolLogParser::setLastError(const QString &value) {
 //ExternalToolSupportUtils
 void ExternalToolSupportUtils::removeTmpDir( const QString& tmpDirUrl, U2OpStatus& os) {
     if (tmpDirUrl.isEmpty()) {
-        os.setError(tr("Can not remove temporary directory: path is empty."));
+        os.setError(tr("Can not remove temporary folder: path is empty."));
         return;
     }
     QDir tmpDir(tmpDirUrl);
     foreach(const QString& file, tmpDir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries)){
         if (!tmpDir.remove(file)) {
-            os.setError(tr("Can not remove files from temporary directory."));
+            os.setError(tr("Can not remove files from temporary folder."));
             return;
         }
     }
     if (!tmpDir.rmdir(tmpDir.absolutePath())){
-        os.setError(tr("Can not remove directory for temporary files."));
+        os.setError(tr("Can not remove folder for temporary files."));
     }
 }
 
@@ -371,7 +371,7 @@ QString ExternalToolSupportUtils::createTmpDir(const QString &prePath, const QSt
 
         if (!tmpDir.exists()) {
             if (!QDir().mkpath(tmpDirPath)) {
-                os.setError(tr("Can not create directory for temporary files: %1").arg(tmpDirPath));
+                os.setError(tr("Can not create folder for temporary files: %1").arg(tmpDirPath));
             }
             return tmpDir.absolutePath();
         }
@@ -466,7 +466,7 @@ ProcessRun ExternalToolSupportUtils::prepareProcess(const QString &toolName, con
     result.process->setProcessEnvironment(processEnvironment);
     if (!workingDirectory.isEmpty()){
         result.process->setWorkingDirectory(workingDirectory);
-        algoLog.details(tr("Working directory is \"%1\"").arg(result.process->workingDirectory()));
+        algoLog.details(tr("Working folder is \"%1\"").arg(result.process->workingDirectory()));
     }
 
     // QProcess wraps arguments that contain spaces in quotes automatically.
diff --git a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
index 220d93e..095671c 100644
--- a/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
+++ b/src/corelibs/U2Core/src/tasks/ExternalToolRunTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/Task.h>
-#include <QtCore/QProcess>
+#include <QProcess>
 
 
 namespace U2 {
@@ -134,7 +134,7 @@ public:
     static void removeTmpDir(const QString &absoulutePath, U2OpStatus &os);
     static QString createTmpDir(const QString &domain, U2OpStatus &os);
     /**
-     * Creates a new directory: prePath/domain/tmp_dir_name
+     * Creates a new folder: prePath/domain/tmp_dir_name
      */
     static QString createTmpDir(const QString &prePath, const QString &domain, U2OpStatus &os);
     static void appendExistingFile(const QString &path, QStringList &files);
diff --git a/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.cpp b/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.cpp
index 77d81e3..75092be 100644
--- a/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.h b/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.h
index de6a48f..3730317 100644
--- a/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.h
+++ b/src/corelibs/U2Core/src/tasks/ExtractAnnotatedRegionTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/FailTask.h b/src/corelibs/U2Core/src/tasks/FailTask.h
index ad5b4d0..f7b08b1 100644
--- a/src/corelibs/U2Core/src/tasks/FailTask.h
+++ b/src/corelibs/U2Core/src/tasks/FailTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
index f9cc0d8..847d4a8 100644
--- a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/SequenceUtils.h>
@@ -54,13 +54,8 @@
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2DbiUtils.h>
 
-#include <QtCore/QFileInfo>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
+#include <QFileInfo>
 
 #include "LoadDocumentTask.h"
 
@@ -272,20 +267,23 @@ void LoadDocumentTask::init() {
     }
 }
 
-LoadDocumentTask * LoadDocumentTask::getDefaultLoadDocTask(const GUrl &url, const QVariantMap &hints) {
-    if( url.isEmpty() ) {
-        return NULL;
-    }
-    IOAdapterFactory * iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById( IOAdapterUtils::url2io( url ) );
-    if ( iof == NULL ) {
-        return NULL;
-    }
+LoadDocumentTask *LoadDocumentTask::getDefaultLoadDocTask(const GUrl &url, const QVariantMap &hints) {
+    U2OpStatusImpl os;
+    return getDefaultLoadDocTask(os, url, hints);
+}
+
+LoadDocumentTask *LoadDocumentTask::getDefaultLoadDocTask(U2OpStatus &os, const GUrl &url, const QVariantMap &hints) {
+    CHECK_EXT(!url.isEmpty(), os.setError(tr("The fileURL  to load is empty")), NULL);
+
+    IOAdapterFactory *iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(url));
+    CHECK_EXT(NULL != iof, os.setError(tr("Cannot get an IO file adapter factory for the file URL: %1").arg(url.getURLString())), NULL);
+
     QList<FormatDetectionResult> dfs = DocumentUtils::detectFormat(url);
-    if( dfs.isEmpty() ) {
-        return NULL;
-    }
-    DocumentFormat * df = dfs.first().format;
-    return new LoadDocumentTask( df->getFormatId(), url, iof, hints );
+    CHECK_EXT(!dfs.isEmpty(), os.setError(tr("Cannot detect the file format: %1").arg(url.getURLString())), NULL);
+
+    DocumentFormat *df = dfs.first().format;
+    SAFE_POINT_EXT(NULL != df, os.setError(tr("Document format is NULL (format ID: '%1', file URL: '%2')").arg(df->getFormatId()).arg(url.getURLString())), NULL);
+    return new LoadDocumentTask(df->getFormatId(), url, iof, hints);
 }
 
 DocumentProviderTask * LoadDocumentTask::getCommonLoadDocTask( const GUrl & url ) {
@@ -419,7 +417,7 @@ static Document* loadFromMultipleFiles(IOAdapterFactory* iof, QVariantMap& fs, U
         newObjects << sequences;
     }
     else if(fs.value(DocumentReadingMode_SequenceAsAlignmentHint).toBool()){
-        MAlignmentObject* msaObject = MSAUtils::seqDocs2msaObj(docs, fs, os);
+        MultipleSequenceAlignmentObject* msaObject = MSAUtils::seqDocs2msaObj(docs, fs, os);
         CHECK_OP(os, NULL);
         SAFE_POINT_EXT(NULL != msaObject, os.setError("The alignment object is NULL!"), NULL);
         newObjects << msaObject;
diff --git a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.h b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.h
index a083b59..0b2d78a 100644
--- a/src/corelibs/U2Core/src/tasks/LoadDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/LoadDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,8 @@
 #include <U2Core/GObjectReference.h>
 #include <U2Core/DocumentProviderTask.h>
 
-#include <QtCore/QPointer>
-#include <QtCore/QVariantMap>
+#include <QPointer>
+#include <QVariantMap>
 
 namespace U2 {
 
@@ -90,8 +90,9 @@ private:
 class U2CORE_EXPORT LoadDocumentTask : public DocumentProviderTask {
     Q_OBJECT
 public:
-    static LoadDocumentTask * getDefaultLoadDocTask( const GUrl & url, const QVariantMap & hints = QVariantMap() );
-    static DocumentProviderTask * getCommonLoadDocTask( const GUrl & url );
+    static LoadDocumentTask *getDefaultLoadDocTask(const GUrl &url, const QVariantMap &hints = QVariantMap());
+    static LoadDocumentTask *getDefaultLoadDocTask(U2OpStatus &os, const GUrl &url, const QVariantMap &hints = QVariantMap());
+    static DocumentProviderTask *getCommonLoadDocTask(const GUrl &url);
 
 public:
     LoadDocumentTask(DocumentFormatId format, const GUrl& url,
diff --git a/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.cpp
index 4103464..dd5f4ac 100644
--- a/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QEventLoop>
-#include <QtCore/QTimer>
-#include <QtCore/QUrl>
+#include <QDir>
+#include <QEventLoop>
+#include <QTimer>
+#include <QUrl>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -93,7 +93,7 @@ void BaseLoadRemoteDocumentTask::prepare(){
     }
 
     if (!prepareDownloadDirectory(fullPath)) {
-        setError(QString("Directory %1 does not exist").arg(fullPath));
+        setError(QString("Folder %1 does not exist").arg(fullPath));
         return;
     }
 
@@ -109,7 +109,7 @@ Task::ReportResult BaseLoadRemoteDocumentTask::report()
 bool BaseLoadRemoteDocumentTask::prepareDownloadDirectory( QString &path ){
     if (!QDir(path).exists()) {
         if (path == getDefaultDownloadDirectory()) {
-            // Creating default directory if it doesn't exist
+            // Creating default folder if it doesn't exist
             if (!QDir().mkpath(path)) {
                 return false;
             }
@@ -406,7 +406,7 @@ void LoadDataFromEntrezTask::run( )
     createLoopAndNetworkManager(traceFetchUrl);
 
     ioLog.trace( traceFetchUrl );
-    QUrl requestUrl( EntrezUtils::NCBI_EFETCH_URL.arg( db ).arg( accNumber ).arg( format ) );
+    QUrl requestUrl(EntrezUtils::NCBI_EFETCH_URL.arg(db).arg(accNumber).arg(format)); 
     downloadReply = networkManager->get( QNetworkRequest( requestUrl ) );
     connect( downloadReply, SIGNAL( error( QNetworkReply::NetworkError ) ),
         this, SLOT( sl_onError( QNetworkReply::NetworkError ) ) );
@@ -420,7 +420,7 @@ void LoadDataFromEntrezTask::run( )
         ioLog.trace( "Download finished." );
 
         QByteArray result = downloadReply->readAll( );
-        if ( ( result.size( ) < 100 ) && result.contains( "Nothing has been found" ) ) {
+        if (((result.size() < 100) && result.contains("Nothing has been found")) || (result.contains("ID list is empty! In it there are neither IDs nor accessions"))) {
             setError( tr( "Sequence with ID=%1 is not found." ).arg( accNumber ) );
             return;
         }
diff --git a/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.h b/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.h
index ab1e1bd..55d5157 100644
--- a/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/LoadRemoteDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,10 +26,10 @@
 #include <U2Core/GUrl.h>
 #include <U2Core/NetworkConfiguration.h>
 
-#include <QtCore/QUrl>
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QAuthenticator>
-#include <QtXml/QXmlReader>
+#include <QUrl>
+#include <QNetworkReply>
+#include <QAuthenticator>
+#include <QXmlReader>
 
 class QEventLoop;
 class QTimer;
diff --git a/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.cpp b/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.cpp
index cf272fd..1250d95 100644
--- a/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -102,14 +102,14 @@ Task::ReportResult ModifySequenceContentTask::report() {
     return ReportResult_Finished;
 }
 
-typedef QPair<QString, QString> QStringPair;
+typedef QPair<QString, QString> QStrStrPair;
 
 namespace {
 
-QString formatPairList(const QList<QStringPair> &pairList, bool useFirst) {
+QString formatPairList(const QList<QStrStrPair> &pairList, bool useFirst) {
     QString result;
     const QString lineSeparator = "<br>";
-    foreach (const QStringPair &pair, pairList) {
+    foreach (const QStrStrPair &pair, pairList) {
         result += useFirst ? pair.first : pair.second;
         result += lineSeparator;
     }
@@ -269,7 +269,7 @@ void ModifySequenceContentTask::fixAnnotationQualifiers(Annotation *an) {
                     newQualifierValue.replace(oldRegionPos, matchedRegion.length(), newRegionsStr);
                     lastModifiedPos = oldRegionPos + newRegionsStr.length();
                 } else {
-                    annotationForReport[an].append(QStringPair(qual.name, matchedRegion));
+                    annotationForReport[an].append(QStrStrPair(qual.name, matchedRegion));
                     if (!isReportingEnabled()) {
                         setReportingEnabled(true);
                     }
diff --git a/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.h b/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.h
index 9f6d297..cceeef5 100644
--- a/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.h
+++ b/src/corelibs/U2Core/src/tasks/ModifySequenceObjectTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/MultiTask.cpp b/src/corelibs/U2Core/src/tasks/MultiTask.cpp
index 0211547..ed9d456 100644
--- a/src/corelibs/U2Core/src/tasks/MultiTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/MultiTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/MultiTask.h b/src/corelibs/U2Core/src/tasks/MultiTask.h
index a4fc254..042b668 100644
--- a/src/corelibs/U2Core/src/tasks/MultiTask.h
+++ b/src/corelibs/U2Core/src/tasks/MultiTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.cpp b/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.cpp
index afb658e..681881b 100644
--- a/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.h b/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.h
index a3359d7..d1814cd 100644
--- a/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.h
+++ b/src/corelibs/U2Core/src/tasks/RemoveAnnotationsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.cpp
index 63afdb0..e12e73f 100644
--- a/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.h b/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.h
index 8201410..fa7a263 100644
--- a/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/RemoveDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 #include <U2Core/Task.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.cpp b/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.cpp
index 74284a9..5fd4a50 100644
--- a/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.h b/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.h
index 497b81f..dd4c8a0 100644
--- a/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.h
+++ b/src/corelibs/U2Core/src/tasks/ReverseSequenceTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.cpp b/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.cpp
index 680dc5a..7e20933 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.h b/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.h
index a9e37ce..7ef7c6b 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.h
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentStreamingTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
index bab61e4..b4268b7 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.h b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.h
index bbb1149..c7ef5c8 100644
--- a/src/corelibs/U2Core/src/tasks/SaveDocumentTask.h
+++ b/src/corelibs/U2Core/src/tasks/SaveDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/UnloadedObject.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 namespace U2 {
 
@@ -36,16 +36,15 @@ class IOAdapterFactory;
 class DocumentFormat;
 
 enum SaveDocFlag {
-    SaveDoc_Overwrite = 0x0,
-    SaveDoc_Append = 0x1,
-    SaveDoc_Roll = 0x2,
-    SaveDoc_DestroyAfter = 0x4,
-    SaveDoc_DestroyButDontUnload = 0x8,
-    SaveDoc_OpenAfter = 0x16,
-    SaveDoc_UnloadAfter = 0x80
+    SaveDoc_Overwrite = 1 << 0,
+    SaveDoc_Append = 1 << 1,
+    SaveDoc_Roll = 1 << 2,
+    SaveDoc_DestroyAfter = 1 << 3,
+    SaveDoc_DestroyButDontUnload = 1 << 4,
+    SaveDoc_OpenAfter = 1 << 5,
+    SaveDoc_UnloadAfter = 1 << 6
 };
-
-typedef QFlags<SaveDocFlag>  SaveDocFlags;
+Q_DECLARE_FLAGS(SaveDocFlags, SaveDocFlag)
 
 class U2CORE_EXPORT SaveDocumentTask : public Task {
     Q_OBJECT
@@ -122,4 +121,6 @@ public:
 
 }//namespace
 
+Q_DECLARE_OPERATORS_FOR_FLAGS(U2::SaveDocFlags)
+
 #endif
diff --git a/src/corelibs/U2Core/src/tasks/ScriptTask.cpp b/src/corelibs/U2Core/src/tasks/ScriptTask.cpp
index 365067b..e07113c 100644
--- a/src/corelibs/U2Core/src/tasks/ScriptTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/ScriptTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "ScriptTask.h"
 
-#include <QtScript/QScriptEngine>
+#include <QScriptEngine>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/ScriptTask.h b/src/corelibs/U2Core/src/tasks/ScriptTask.h
index 664e82c..91ac818 100644
--- a/src/corelibs/U2Core/src/tasks/ScriptTask.h
+++ b/src/corelibs/U2Core/src/tasks/ScriptTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/Task.h>
 
-#include <QtCore/QMap>
-#include <QtScript/QScriptValue>
+#include <QMap>
+#include <QScriptValue>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
index 69949ad..756223e 100644
--- a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.h b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.h
index 52f68fb..e490465 100644
--- a/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.h
+++ b/src/corelibs/U2Core/src/tasks/SequenceDbiWalkerTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,7 +53,7 @@ class U2CORE_EXPORT SequenceDbiWalkerTask : public Task {
     Q_OBJECT
 public:
     SequenceDbiWalkerTask(const SequenceDbiWalkerConfig& config, SequenceDbiWalkerCallback* callback,
-        const QString& name, TaskFlags tf = TaskFlags_NR_FOSCOE);
+        const QString& name, TaskFlags tf = TaskFlags_NR_FOSE_COSC);
 
     SequenceDbiWalkerCallback*     getCallback() const {return callback;}
     const SequenceDbiWalkerConfig& getConfig() const {return config;}
diff --git a/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.cpp b/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.cpp
index 58834b1..efc7a47 100644
--- a/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.h b/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.h
index 956dc59..a61cd74 100644
--- a/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.h
+++ b/src/corelibs/U2Core/src/tasks/SequenceWalkerTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/TLSTask.cpp b/src/corelibs/U2Core/src/tasks/TLSTask.cpp
index 76000e7..758e92d 100644
--- a/src/corelibs/U2Core/src/tasks/TLSTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/TLSTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/TLSTask.h b/src/corelibs/U2Core/src/tasks/TLSTask.h
index 7652994..7218846 100644
--- a/src/corelibs/U2Core/src/tasks/TLSTask.h
+++ b/src/corelibs/U2Core/src/tasks/TLSTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _TLS_TASK_H_
 
 #include <U2Core/Task.h>
-#include <QtCore/QThreadStorage>
+#include <QThreadStorage>
 
 namespace U2 {
 /************************************************************************/
diff --git a/src/corelibs/U2Core/src/tasks/TaskSignalMapper.cpp b/src/corelibs/U2Core/src/tasks/TaskSignalMapper.cpp
index e2f2fa9..035329c 100644
--- a/src/corelibs/U2Core/src/tasks/TaskSignalMapper.cpp
+++ b/src/corelibs/U2Core/src/tasks/TaskSignalMapper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/TaskSignalMapper.h b/src/corelibs/U2Core/src/tasks/TaskSignalMapper.h
index 53824c4..6281da3 100644
--- a/src/corelibs/U2Core/src/tasks/TaskSignalMapper.h
+++ b/src/corelibs/U2Core/src/tasks/TaskSignalMapper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_TASK_MAPPER_H_
 #define _U2_TASK_MAPPER_H_
 
-#include <QtCore/QObject>
+#include <QObject>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Core/src/tasks/TaskStarter.cpp b/src/corelibs/U2Core/src/tasks/TaskStarter.cpp
index 1649719..30b37fd 100644
--- a/src/corelibs/U2Core/src/tasks/TaskStarter.cpp
+++ b/src/corelibs/U2Core/src/tasks/TaskStarter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/TaskStarter.h b/src/corelibs/U2Core/src/tasks/TaskStarter.h
index 5cfb744..7faa335 100644
--- a/src/corelibs/U2Core/src/tasks/TaskStarter.h
+++ b/src/corelibs/U2Core/src/tasks/TaskStarter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/TmpDirChecker.cpp b/src/corelibs/U2Core/src/tasks/TmpDirChecker.cpp
index 07f88f7..72d14c2 100644
--- a/src/corelibs/U2Core/src/tasks/TmpDirChecker.cpp
+++ b/src/corelibs/U2Core/src/tasks/TmpDirChecker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ void TmpDirChecker::run()
     if (!checkPath(commonTempDirPath)) {
         if (!AppContext::isGUIMode()) {
             QString message = "You do not have permission to write to \"" + commonTempDirPath +
-                "\" directory. Use --tmp-dir=<path_to_file> to set new temporary directory";
+                "\" folder. Use --tmp-dir=<path_to_file> to set new temporary folder";
             coreLog.error((message));
         }
         else {
@@ -50,8 +50,8 @@ void TmpDirChecker::run()
 
     if (!checkPath(ugeneTempDirPath)) {
         if (!AppContext::isGUIMode()) {
-            QString message = "UGENE hasn't permitions to write to its temporary directory \"" + ugeneTempDirPath +
-                "\". Use --tmp-dir=<path_to_file> to set another temporary directory";
+            QString message = "UGENE hasn't permitions to write to its temporary folder \"" + ugeneTempDirPath +
+                "\". Use --tmp-dir=<path_to_file> to set another temporary folder";
             coreLog.error((message));
         }
         else {
diff --git a/src/corelibs/U2Core/src/tasks/TmpDirChecker.h b/src/corelibs/U2Core/src/tasks/TmpDirChecker.h
index 6852b16..530e68b 100644
--- a/src/corelibs/U2Core/src/tasks/TmpDirChecker.h
+++ b/src/corelibs/U2Core/src/tasks/TmpDirChecker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define TMPDIRCHECKER_H
 
 #include <U2Core/Task.h>
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.cpp
index 92622db..f05f370 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
+#include <QDir>
+#include <QFileInfo>
 
 #include <U2Core/Counter.h>
 #include <U2Core/U2DbiUtils.h>
@@ -33,14 +33,14 @@
 namespace U2 {
 
 ImportDirToDatabaseTask::ImportDirToDatabaseTask(const QString &srcUrl, const U2DbiRef &dstDbiRef, const QString &dstFolder, const ImportToDatabaseOptions &options) :
-    Task(tr("Import directory %1 to the database").arg(QFileInfo(srcUrl).fileName()), TaskFlag_NoRun),
+    Task(tr("Import folder %1 to the database").arg(QFileInfo(srcUrl).fileName()), TaskFlag_NoRun),
     srcUrl(srcUrl),
     dstDbiRef(dstDbiRef),
     dstFolder(dstFolder),
     options(options)
 {
     GCOUNTER(cvar, tvar, "ImportDirToDatabaseTask");
-    CHECK_EXT(QFileInfo(srcUrl).isDir(), setError(tr("It is not a directory: ") + srcUrl), );
+    CHECK_EXT(QFileInfo(srcUrl).isDir(), setError(tr("It is not a folder: ") + srcUrl), );
     CHECK_EXT(dstDbiRef.isValid(), setError(tr("Invalid database reference")), );
 
     setMaxParallelSubtasks(1);
@@ -79,8 +79,8 @@ QStringList ImportDirToDatabaseTask::getImportedFiles() const {
     return importedFiles;
 }
 
-QStrStrMap ImportDirToDatabaseTask::getSkippedFiles() const {
-    QStrStrMap skippedFiles;
+StrStrMap ImportDirToDatabaseTask::getSkippedFiles() const {
+    StrStrMap skippedFiles;
     CHECK(isFinished(), skippedFiles);
 
     foreach (ImportDirToDatabaseTask* importSubdirTask, importSubdirsTasks) {
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.h b/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.h
index 9213f3a..29e48b0 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportDirToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #define _U2_IMPORT_DIR_TO_DATABASE_TASK_H_
 
 #include <U2Core/ImportToDatabaseOptions.h>
+#include <U2Core/StrPackUtils.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2Type.h>
 
@@ -40,7 +41,7 @@ public:
     void prepare();
 
     QStringList getImportedFiles() const;
-    QStrStrMap getSkippedFiles() const;
+    StrStrMap getSkippedFiles() const;
 
 private:
     QString srcUrl;
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.cpp
index 1a76601..766a9fb 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.h b/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.h
index e95af61..478d0a9 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportDocumentToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_IMPORT_DOCUMENT_TO_DATABASE_TASK_H_
 #define _U2_IMPORT_DOCUMENT_TO_DATABASE_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Core/ImportToDatabaseOptions.h>
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.cpp
index eb9e62c..9ee020b 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.h b/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.h
index 95db575..cffd92b 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportFileToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.cpp
index 0fc01c5..eaa4bae 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 
 #include <U2Core/Counter.h>
 #include <U2Core/DocumentModel.h>
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.h b/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.h
index 588b7ab..14921c4 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportObjectToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_IMPORT_OBJECT_TO_DATABASE_TASK_H_
 #define _U2_IMPORT_OBJECT_TO_DATABASE_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Core/Task.h>
 #include <U2Core/U2Type.h>
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.cpp b/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.cpp
index ce1251e..bc804b1 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.cpp
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -219,7 +219,7 @@ QString ImportToDatabaseTask::sayAboutSkippedDirs() const {
     QString result;
 
     foreach (ImportDirToDatabaseTask* dirSubtask, dirSubtasks) {
-        const QStrStrMap skippedFiles = dirSubtask->getSkippedFiles();
+        const StrStrMap skippedFiles = dirSubtask->getSkippedFiles();
         foreach (const QString& skippedFile, skippedFiles.keys()) {
             result += skippedFile + ": " + skippedFiles[skippedFile] + "<br>";
         }
diff --git a/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.h b/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.h
index c525188..63ceb2f 100644
--- a/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.h
+++ b/src/corelibs/U2Core/src/tasks/shared_db/ImportToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/AnnotationCreationPattern.cpp b/src/corelibs/U2Core/src/util/AnnotationCreationPattern.cpp
index 8a2f14a..ca38245 100644
--- a/src/corelibs/U2Core/src/util/AnnotationCreationPattern.cpp
+++ b/src/corelibs/U2Core/src/util/AnnotationCreationPattern.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/AnnotationCreationPattern.h b/src/corelibs/U2Core/src/util/AnnotationCreationPattern.h
index d814f30..07a2918 100644
--- a/src/corelibs/U2Core/src/util/AnnotationCreationPattern.h
+++ b/src/corelibs/U2Core/src/util/AnnotationCreationPattern.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/AssemblyImporter.cpp b/src/corelibs/U2Core/src/util/AssemblyImporter.cpp
index c8b4ebb..0d5246e 100644
--- a/src/corelibs/U2Core/src/util/AssemblyImporter.cpp
+++ b/src/corelibs/U2Core/src/util/AssemblyImporter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/AssemblyImporter.h b/src/corelibs/U2Core/src/util/AssemblyImporter.h
index 979647a..46f0245 100644
--- a/src/corelibs/U2Core/src/util/AssemblyImporter.h
+++ b/src/corelibs/U2Core/src/util/AssemblyImporter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/ChromatogramUtils.cpp b/src/corelibs/U2Core/src/util/ChromatogramUtils.cpp
new file mode 100644
index 0000000..3170251
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/ChromatogramUtils.cpp
@@ -0,0 +1,343 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DatatypeSerializeUtils.h>
+#include <U2Core/DbiConnection.h>
+#include <U2Core/DNAChromatogramObject.h>
+#include <U2Core/Log.h>
+#include <U2Core/L10n.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2ObjectRelationsDbi.h>
+
+#include "ChromatogramUtils.h"
+
+namespace U2 {
+
+void ChromatogramUtils::append(DNAChromatogram chromatogram, const DNAChromatogram &appendedChromatogram) {
+    chromatogram.traceLength += appendedChromatogram.traceLength;
+    chromatogram.seqLength += appendedChromatogram.seqLength;
+    chromatogram.baseCalls += appendedChromatogram.baseCalls;   // TODO: recalculte appended positions
+    chromatogram.A += appendedChromatogram.A;
+    chromatogram.C += appendedChromatogram.C;
+    chromatogram.G += appendedChromatogram.G;
+    chromatogram.T += appendedChromatogram.T;
+    chromatogram.prob_A += appendedChromatogram.prob_A;
+    chromatogram.prob_C += appendedChromatogram.prob_C;
+    chromatogram.prob_G += appendedChromatogram.prob_G;
+    chromatogram.prob_T += appendedChromatogram.prob_T;
+    chromatogram.hasQV &= appendedChromatogram.hasQV;
+}
+
+void ChromatogramUtils::removeBaseCalls(U2OpStatus &os, DNAChromatogram &chromatogram, int startPos, int endPos) {
+    if ((endPos <= startPos) || (startPos < 0) || (endPos > chromatogram.seqLength)) {
+        coreLog.trace(L10N::internalError("incorrect parameters was passed to ChromatogramUtils::removeBaseCalls, "
+            "startPos '%1', endPos '%2', chromatogram sequence length '%3'").arg(startPos).arg(endPos).arg(chromatogram.seqLength));
+        os.setError("Can't remove chars from a chromatogram");
+        return;
+    }
+
+    const int regionLength = endPos - startPos;
+    chromatogram.seqLength -= regionLength;
+    chromatogram.baseCalls.remove(startPos, regionLength);
+    chromatogram.prob_A.remove(startPos, regionLength);
+    chromatogram.prob_C.remove(startPos, regionLength);
+    chromatogram.prob_G.remove(startPos, regionLength);
+    chromatogram.prob_T.remove(startPos, regionLength);
+}
+
+void ChromatogramUtils::removeRegion(U2OpStatus &os, DNAChromatogram &chromatogram, int startPos, int endPos) {
+    if ((endPos <= startPos) || (startPos < 0) || (endPos > chromatogram.seqLength)) {
+        coreLog.trace(L10N::internalError("incorrect parameters were passed to ChromatogramUtils::removeRegion, "
+             "startPos '%1', endPos '%2', chromatogram sequence length '%3'").arg(startPos).arg(endPos).arg(chromatogram.seqLength));
+        os.setError("Can't remove current region");
+        return;
+    }
+    const int regionLength = endPos - startPos;
+    U2Region traceRegion = sequenceRegion2TraceRegion(chromatogram, U2Region(startPos, regionLength));
+    if (traceRegion.startPos != 0) {
+        traceRegion.startPos++;
+        int baseCall = chromatogram.baseCalls[startPos - 1];
+        qint64 supposedLength = chromatogram.traceLength - baseCall - 1;
+        traceRegion.length = qMin(traceRegion.length, supposedLength);
+    }
+    int size = chromatogram.baseCalls.size();
+    for (int i = endPos; i < size; i++) {
+        chromatogram.baseCalls[i] -= traceRegion.length;
+    }
+    chromatogram.A.remove(traceRegion.startPos, traceRegion.length);
+    chromatogram.C.remove(traceRegion.startPos, traceRegion.length);
+    chromatogram.G.remove(traceRegion.startPos, traceRegion.length);
+    chromatogram.T.remove(traceRegion.startPos, traceRegion.length);
+    chromatogram.traceLength -= traceRegion.length;
+    chromatogram.seqLength -= regionLength;
+    chromatogram.baseCalls.remove(startPos, regionLength);
+    chromatogram.prob_A.remove(startPos, regionLength);
+    chromatogram.prob_C.remove(startPos, regionLength);
+    chromatogram.prob_G.remove(startPos, regionLength);
+    chromatogram.prob_T.remove(startPos, regionLength);
+}
+
+bool ChromatogramUtils::areEqual(const DNAChromatogram &first, const DNAChromatogram &second) {
+    return first.traceLength == second.traceLength &&
+            first.seqLength == second.seqLength &&
+            first.baseCalls == second.baseCalls &&
+            first.A == second.A &&
+            first.C == second.C &&
+            first.G == second.G &&
+            first.T == second.T &&
+            first.prob_A == second.prob_A &&
+            first.prob_C == second.prob_C &&
+            first.prob_G == second.prob_G &&
+            first.prob_T == second.prob_T &&
+            first.hasQV == second.hasQV;
+}
+
+namespace {
+
+template <class T>
+void zeroEndingCrop(QVector<T> &data, int startPos, int length) {
+    data = data.mid(startPos, length);
+    if (data.size() == startPos + length + 1) {
+        data << 0;
+    }
+}
+
+}
+
+void ChromatogramUtils::crop(DNAChromatogram &chromatogram, int startPos, int length) {
+    const U2Region traceRegion = sequenceRegion2TraceRegion(chromatogram, U2Region(startPos, length));
+    const ushort baseCallOffset = traceRegion.startPos == 0 ? 0 : chromatogram.baseCalls[startPos - 1];
+    if (traceRegion.startPos > 0) {
+        for (int i = startPos, n = qMin(startPos + length, chromatogram.baseCalls.size()); i < n; i++) {
+            chromatogram.baseCalls[i] -= baseCallOffset;
+        }
+    }
+    zeroEndingCrop(chromatogram.baseCalls, startPos, length);
+    chromatogram.traceLength = qMin(chromatogram.traceLength - traceRegion.startPos, traceRegion.length);
+    chromatogram.seqLength = qMin(chromatogram.seqLength - startPos, length);
+
+    zeroEndingCrop(chromatogram.A, traceRegion.startPos, traceRegion.length);
+    zeroEndingCrop(chromatogram.C, traceRegion.startPos, traceRegion.length);
+    zeroEndingCrop(chromatogram.G, traceRegion.startPos, traceRegion.length);
+    zeroEndingCrop(chromatogram.T, traceRegion.startPos, traceRegion.length);
+    zeroEndingCrop(chromatogram.prob_A, startPos, length);
+    zeroEndingCrop(chromatogram.prob_C, startPos, length);
+    zeroEndingCrop(chromatogram.prob_G, startPos, length);
+    zeroEndingCrop(chromatogram.prob_T, startPos, length);
+}
+
+U2EntityRef ChromatogramUtils::import(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, const DNAChromatogram &chromatogram) {
+    U2Chromatogram dbChromatogram(dbiRef);
+    dbChromatogram.visualName = chromatogram.name;
+    dbChromatogram.serializer = DNAChromatogramSerializer::ID;
+
+    RawDataUdrSchema::createObject(dbiRef, folder, dbChromatogram, os);
+    CHECK_OP(os, U2EntityRef());
+
+    const U2EntityRef entityRef(dbiRef, dbChromatogram.id);
+    updateChromatogramData(os, entityRef, chromatogram);
+    CHECK_OP(os, U2EntityRef());
+
+    return entityRef;
+}
+
+DNAChromatogram ChromatogramUtils::exportChromatogram(U2OpStatus &os, const U2EntityRef &chromatogramRef) {
+    const QString serializer = RawDataUdrSchema::getObject(chromatogramRef, os).serializer;
+    CHECK_OP(os, DNAChromatogram());
+    SAFE_POINT_EXT(DNAChromatogramSerializer::ID == serializer, os.setError(QString("Unknown serializer id: %1").arg(serializer)), DNAChromatogram());
+    const QByteArray data = RawDataUdrSchema::readAllContent(chromatogramRef, os);
+    CHECK_OP(os, DNAChromatogram());
+    return DNAChromatogramSerializer::deserialize(data, os);
+}
+
+U2Chromatogram ChromatogramUtils::getChromatogramDbInfo(U2OpStatus &os, const U2EntityRef &chromatogramRef) {
+    return RawDataUdrSchema::getObject(chromatogramRef, os);
+}
+
+qint64 ChromatogramUtils::getChromatogramLength(U2OpStatus &os, const U2EntityRef &chromatogramRef) {
+    return exportChromatogram(os, chromatogramRef).traceLength;
+}
+
+void ChromatogramUtils::updateChromatogramData(U2OpStatus &os, const U2EntityRef &chromatogramRef, const DNAChromatogram &chromatogram) {
+    const QByteArray data = DNAChromatogramSerializer::serialize(chromatogram);
+    RawDataUdrSchema::writeContent(data, chromatogramRef, os);
+
+    CHECK_OP(os, );
+}
+
+void ChromatogramUtils::updateChromatogramData(U2OpStatus &os, const U2DataId& masterId,
+                                               const U2EntityRef &chromatogramRef, const DNAChromatogram &chromatogram) {
+    const QByteArray data = DNAChromatogramSerializer::serialize(chromatogram);
+    RawDataUdrSchema::writeContent(masterId, data, chromatogramRef, os);
+
+    CHECK_OP(os, );
+}
+
+U2EntityRef ChromatogramUtils::getChromatogramIdByRelatedSequenceId(U2OpStatus &os, const U2EntityRef &sequenceRef) {
+    DbiConnection connection(sequenceRef.dbiRef, os);
+    CHECK_OP(os, U2EntityRef());
+
+    const QList<U2DataId> relatedObjects = connection.dbi->getObjectRelationsDbi()->getReferenceRelatedObjects(sequenceRef.entityId, ObjectRole_Sequence, os);
+    CHECK_OP(os, U2EntityRef());
+
+    QList<U2DataId> chromatogramsIds;
+    foreach (const U2DataId &dataId, relatedObjects) {
+        if (U2Type::Chromatogram != U2DbiUtils::toType(dataId)) {
+            continue;
+        }
+        chromatogramsIds << dataId;
+    }
+    assert(chromatogramsIds.size() <= 1);
+
+    CHECK(chromatogramsIds.size() == 1, U2EntityRef());
+    return U2EntityRef(sequenceRef.dbiRef, chromatogramsIds.first());
+}
+
+QString ChromatogramUtils::getChromatogramName(U2OpStatus &os, const U2EntityRef &chromatogramRef) {
+    DbiConnection connection(chromatogramRef.dbiRef, os);
+    CHECK_OP(os, QString());
+
+    U2Object object;
+    connection.dbi->getObjectDbi()->getObject(object, chromatogramRef.entityId, os);
+    CHECK_OP(os, QString());
+    return object.visualName;
+}
+
+DNAChromatogram ChromatogramUtils::reverse(const DNAChromatogram &chromatogram) {
+    DNAChromatogram reversedChromatogram = chromatogram;
+
+    reversedChromatogram.baseCalls.clear();
+    bool zeroEnding = false;
+    for (int i = 1, n = chromatogram.baseCalls.size(); i < n; i++) {
+        if (i >= chromatogram.seqLength && chromatogram.baseCalls[i] == 0) {
+            zeroEnding = true;
+            continue;
+        }
+        reversedChromatogram.baseCalls << chromatogram.traceLength - chromatogram.baseCalls[i - 1];
+    }
+    reversedChromatogram.baseCalls << chromatogram.traceLength - chromatogram.baseCalls[chromatogram.baseCalls.size() - 1];
+    std::reverse(reversedChromatogram.baseCalls.begin(), reversedChromatogram.baseCalls.end());
+    if (zeroEnding) {
+        reversedChromatogram.baseCalls << 0;        // zero-ending vector
+    }
+
+    std::reverse(reversedChromatogram.A.begin(), reversedChromatogram.A.end());
+    std::reverse(reversedChromatogram.C.begin(), reversedChromatogram.C.end());
+    std::reverse(reversedChromatogram.G.begin(), reversedChromatogram.G.end());
+    std::reverse(reversedChromatogram.T.begin(), reversedChromatogram.T.end());
+
+    if (reversedChromatogram.seqLength > 0) {
+        std::reverse(reversedChromatogram.prob_A.begin(), (chromatogram.prob_A.last() == 0 ? reversedChromatogram.prob_A.end() - 1 : reversedChromatogram.prob_A.end()));
+        std::reverse(reversedChromatogram.prob_C.begin(), (chromatogram.prob_C.last() == 0 ? reversedChromatogram.prob_C.end() - 1 : reversedChromatogram.prob_C.end()));
+        std::reverse(reversedChromatogram.prob_G.begin(), (chromatogram.prob_G.last() == 0 ? reversedChromatogram.prob_G.end() - 1 : reversedChromatogram.prob_G.end()));
+        std::reverse(reversedChromatogram.prob_T.begin(), (chromatogram.prob_T.last() == 0 ? reversedChromatogram.prob_T.end() - 1 : reversedChromatogram.prob_T.end()));
+    }
+
+    return reversedChromatogram;
+}
+
+DNAChromatogram ChromatogramUtils::complement(const DNAChromatogram &chromatogram) {
+    DNAChromatogram complementedChromatogram = chromatogram;
+    complementedChromatogram.A = chromatogram.T;
+    complementedChromatogram.C = chromatogram.G;
+    complementedChromatogram.G = chromatogram.C;
+    complementedChromatogram.T = chromatogram.A;
+    complementedChromatogram.prob_A = chromatogram.prob_T;
+    complementedChromatogram.prob_C = chromatogram.prob_G;
+    complementedChromatogram.prob_G = chromatogram.prob_C;
+    complementedChromatogram.prob_T = chromatogram.prob_A;
+    return complementedChromatogram;
+}
+
+DNAChromatogram ChromatogramUtils::reverseComplement(const DNAChromatogram &chromatogram) {
+    return reverse(complement(chromatogram));
+}
+
+U2Region ChromatogramUtils::sequenceRegion2TraceRegion(const DNAChromatogram &chromatogram, const U2Region &sequenceRegion) {
+    CHECK(sequenceRegion.startPos <= chromatogram.baseCalls.length()
+          && sequenceRegion.endPos() <= chromatogram.baseCalls.length()
+          && 0 < sequenceRegion.length, U2Region());
+
+    const int traceStartPos = sequenceRegion.startPos == 0 ? 0 : chromatogram.baseCalls[sequenceRegion.startPos - 1];
+    const int traceLength = chromatogram.baseCalls[sequenceRegion.endPos() - 1] - traceStartPos + 1;
+    return U2Region(traceStartPos, traceLength);
+}
+
+void ChromatogramUtils::insertBase(DNAChromatogram &chromatogram, int posUngapped,
+                                   const QList<U2MsaGap>& gapModel, int posWithGaps) {
+    SAFE_POINT(posUngapped >= 0 && posUngapped < chromatogram.seqLength,
+               QString("Invalid parameters for ChromatogramUtils::insertBase: pos - %1, chrom.sequence len - %2")
+               .arg(posUngapped).arg(chromatogram.seqLength), );
+    int leadingGap = gapModel.isEmpty() ? 0 : gapModel.first().offset == 0 ? gapModel.first().gap : 0;
+    DNAChromatogram gappedChrom = getGappedChromatogram(chromatogram, gapModel);
+
+    //when you try to insert a character before the first symbol of the row,
+    //because of features of the gap model, leading gap will accept an incorrect value.
+    //To aviod an error in this case, the following check is purposed
+    if (posWithGaps - leadingGap == -1) {
+        leadingGap--;
+    }
+    SAFE_POINT(posWithGaps- leadingGap >= 0 && posWithGaps - leadingGap < gappedChrom.seqLength,
+               QString("Incorrect gapped position for ChromatogramUtils::insertBase: pos - %1, gapped chrom.len - %2")
+               .arg(posWithGaps).arg(gappedChrom.seqLength), );
+    ushort newTracePos = gappedChrom.baseCalls[posWithGaps - leadingGap];
+    chromatogram.baseCalls.insert(posUngapped, newTracePos);
+
+    chromatogram.prob_A.insert(posUngapped, DNAChromatogram::DEFAULT_PROBABILITY);
+    chromatogram.prob_C.insert(posUngapped, DNAChromatogram::DEFAULT_PROBABILITY);
+    chromatogram.prob_G.insert(posUngapped, DNAChromatogram::DEFAULT_PROBABILITY);
+    chromatogram.prob_T.insert(posUngapped, DNAChromatogram::DEFAULT_PROBABILITY);
+
+    chromatogram.seqLength += 1;
+}
+
+DNAChromatogram ChromatogramUtils::getGappedChromatogram(const DNAChromatogram &chromatogram, const QList<U2MsaGap> &gapModel) {
+    DNAChromatogram gappedChromatogram = chromatogram;
+    const U2MsaGap leadingGap = gapModel.isEmpty() ? U2MsaGap() : gapModel.first().offset == 0 ? gapModel.first() : U2MsaGap();
+    foreach (const U2MsaGap &gap, gapModel) {
+        if (gap.offset == 0) {
+            continue;
+        }
+
+        const int startBaseCallIndex = gap.offset - leadingGap.gap - 1;
+        const int endBaseCallIndex = startBaseCallIndex + 1;
+        SAFE_POINT(endBaseCallIndex <= gappedChromatogram.baseCalls.size(), "Gap is out of the chromatgoram range", DNAChromatogram());
+
+        const ushort startBaseCall = gappedChromatogram.baseCalls[startBaseCallIndex];
+        const ushort endBaseCall = gappedChromatogram.baseCalls[endBaseCallIndex];
+        const double step = ((double)endBaseCall - startBaseCall) / (gap.gap + 1);
+        for (int i = 0; i < gap.gap; i++) {
+            gappedChromatogram.baseCalls.insert(startBaseCallIndex + i + 1, (ushort)(startBaseCall + step * (i + 1)));
+            gappedChromatogram.prob_A.insert(startBaseCallIndex + i + 1, gap.gap, DNAChromatogram::DEFAULT_PROBABILITY);
+            gappedChromatogram.prob_C.insert(startBaseCallIndex + i + 1, gap.gap, DNAChromatogram::DEFAULT_PROBABILITY);
+            gappedChromatogram.prob_G.insert(startBaseCallIndex + i + 1, gap.gap, DNAChromatogram::DEFAULT_PROBABILITY);
+            gappedChromatogram.prob_T.insert(startBaseCallIndex + i + 1, gap.gap, DNAChromatogram::DEFAULT_PROBABILITY);
+        }
+        gappedChromatogram.seqLength += gap.gap;
+    }
+    return gappedChromatogram;
+}
+
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/ChromatogramUtils.h b/src/corelibs/U2Core/src/util/ChromatogramUtils.h
new file mode 100644
index 0000000..f72846c
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/ChromatogramUtils.h
@@ -0,0 +1,60 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_CHROMATOGRAM_UTILS_H_
+#define _U2_CHROMATOGRAM_UTILS_H_
+
+#include <U2Core/DNAChromatogramObject.h>
+#include <U2Core/U2Region.h>
+#include <U2Core/U2Type.h>
+
+namespace U2 {
+
+class U2MsaGap;
+class U2CORE_EXPORT ChromatogramUtils {
+public:
+    static void append(DNAChromatogram chromatogram, const DNAChromatogram &appendedChromatogram);
+    static void removeBaseCalls(U2OpStatus &os, DNAChromatogram &chromatogram, int startPos, int endPos);
+    static void removeRegion(U2OpStatus &os, DNAChromatogram &chromatogram, int startPos, int endPos);
+    static bool areEqual(const DNAChromatogram &first, const DNAChromatogram &second);
+    static void crop(DNAChromatogram &chromatogram, int startPos, int length);
+    static U2EntityRef import(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, const DNAChromatogram &chromatogram);
+    static DNAChromatogram exportChromatogram(U2OpStatus &os, const U2EntityRef &chromatogramRef);
+    static U2Chromatogram getChromatogramDbInfo(U2OpStatus &os, const U2EntityRef &chromatogramRef);
+    static qint64 getChromatogramLength(U2OpStatus &os, const U2EntityRef &chromatogramRef);
+
+    static void updateChromatogramData(U2OpStatus &os, const U2EntityRef &chromatogramRef, const DNAChromatogram &chromatogram);
+    static void updateChromatogramData(U2OpStatus &os, const U2DataId& masterId,
+                                       const U2EntityRef &chromatogramRef, const DNAChromatogram &chromatogram);
+
+    static U2EntityRef getChromatogramIdByRelatedSequenceId(U2OpStatus &os, const U2EntityRef &sequenceRef);
+    static QString getChromatogramName(U2OpStatus &os, const U2EntityRef &chromatogramRef);
+    static DNAChromatogram reverse(const DNAChromatogram &chromatogram);
+    static DNAChromatogram complement(const DNAChromatogram &chromatogram);
+    static DNAChromatogram reverseComplement(const DNAChromatogram &chromatogram);
+    static U2Region sequenceRegion2TraceRegion(const DNAChromatogram &chromatogram, const U2Region &sequenceRegion);
+    static void insertBase(DNAChromatogram &chromatogram, int posUngapped, const QList<U2MsaGap>& gapModel, int posWithGaps);
+    static DNAChromatogram getGappedChromatogram(const DNAChromatogram& chrom, const QList<U2MsaGap>& gapModel);
+};
+
+}   // namespace U2
+
+#endif // _U2_CHROMATOGRAM_UTILS_H_
diff --git a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
index 1dd6b9e..27a73e3 100644
--- a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
+++ b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBitArray>
-#include <QtCore/QHash>
-#include <QtCore/QStack>
-#include <QtCore/QtEndian>
+#include <QBitArray>
+#include <QHash>
+#include <QStack>
+#include <QtEndian>
 
 #include <U2Core/StringAdapter.h>
 #include <U2Core/TextUtils.h>
diff --git a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.h b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.h
index debc221..adb36eb 100644
--- a/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.h
+++ b/src/corelibs/U2Core/src/util/DatatypeSerializeUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/DnaChromatogramUtils.cpp b/src/corelibs/U2Core/src/util/DnaChromatogramUtils.cpp
new file mode 100644
index 0000000..3d30cab
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/DnaChromatogramUtils.cpp
@@ -0,0 +1,57 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DNAChromatogram.h>
+
+#include "DnaChromatogramUtils.h"
+
+namespace U2 {
+
+void DnaChromatogramUtils::append(DNAChromatogram &chromatogram, const DNAChromatogram &appendedChromatogram) {
+    chromatogram.traceLength += appendedChromatogram.traceLength;
+    chromatogram.seqLength += appendedChromatogram.seqLength;
+    chromatogram.baseCalls += appendedChromatogram.baseCalls;
+    chromatogram.A += appendedChromatogram.A;
+    chromatogram.C += appendedChromatogram.C;
+    chromatogram.G += appendedChromatogram.G;
+    chromatogram.T += appendedChromatogram.T;
+    chromatogram.prob_A += appendedChromatogram.prob_A;
+    chromatogram.prob_C += appendedChromatogram.prob_C;
+    chromatogram.prob_G += appendedChromatogram.prob_G;
+    chromatogram.prob_T += appendedChromatogram.prob_T;
+    chromatogram.hasQV &= appendedChromatogram.hasQV;
+}
+
+void DnaChromatogramUtils::crop(DNAChromatogram &chromatogram, int startPos, int length) {
+    chromatogram.traceLength = qMin(chromatogram.traceLength - startPos, length);
+    chromatogram.seqLength = qMin(chromatogram.seqLength - startPos, length);
+    chromatogram.baseCalls = chromatogram.baseCalls.mid(startPos, length);
+    chromatogram.A = chromatogram.A.mid(startPos, length);
+    chromatogram.C = chromatogram.C.mid(startPos, length);
+    chromatogram.G = chromatogram.G.mid(startPos, length);
+    chromatogram.T = chromatogram.T.mid(startPos, length);
+    chromatogram.prob_A = chromatogram.prob_A.mid(startPos, length);
+    chromatogram.prob_C = chromatogram.prob_C.mid(startPos, length);
+    chromatogram.prob_G = chromatogram.prob_G.mid(startPos, length);
+    chromatogram.prob_T = chromatogram.prob_T.mid(startPos, length);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/DnaChromatogramUtils.h b/src/corelibs/U2Core/src/util/DnaChromatogramUtils.h
new file mode 100644
index 0000000..e68d4ed
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/DnaChromatogramUtils.h
@@ -0,0 +1,39 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_DNA_CHROMATOGRAM_UTILS_H_
+#define _U2_DNA_CHROMATOGRAM_UTILS_H_
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class DNAChromatogram;
+
+class U2CORE_EXPORT DnaChromatogramUtils {
+public:
+    static void append(DNAChromatogram &chromatogram, const DNAChromatogram &appendedChromatogram);
+    static void crop(DNAChromatogram &chromatogram, int startPos, int length);
+};
+
+}   // namespace U2
+
+#endif // _U2_DNA_CHROMATOGRAM_UTILS_H_
diff --git a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
index 54bdac7..5bb42de 100644
--- a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
+++ b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/Log.h>
 
@@ -55,7 +55,7 @@ QString FileAndDirectoryUtils::createWorkingDir(const QString &fileUrl, int dirM
                 result += "/";
             }
         } else {
-            algoLog.error("Result directory is empty, default workflow directory is used");
+            algoLog.error("Result folder is empty, default workflow folder is used");
             useInternal = true;
         }
     } else {
diff --git a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
index bfab37e..01cdd05 100644
--- a/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
+++ b/src/corelibs/U2Core/src/util/FileAndDirectoryUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/FileStorageUtils.cpp b/src/corelibs/U2Core/src/util/FileStorageUtils.cpp
index 20c6c23..21f4eed 100644
--- a/src/corelibs/U2Core/src/util/FileStorageUtils.cpp
+++ b/src/corelibs/U2Core/src/util/FileStorageUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/FileStorageUtils.h b/src/corelibs/U2Core/src/util/FileStorageUtils.h
index f49d27b..13a5e55 100644
--- a/src/corelibs/U2Core/src/util/FileStorageUtils.h
+++ b/src/corelibs/U2Core/src/util/FileStorageUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/FilesIterator.cpp b/src/corelibs/U2Core/src/util/FilesIterator.cpp
index 593c35f..1ac7d56 100644
--- a/src/corelibs/U2Core/src/util/FilesIterator.cpp
+++ b/src/corelibs/U2Core/src/util/FilesIterator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/FilesIterator.h b/src/corelibs/U2Core/src/util/FilesIterator.h
index a42cc1b..5cfd3ed 100644
--- a/src/corelibs/U2Core/src/util/FilesIterator.h
+++ b/src/corelibs/U2Core/src/util/FilesIterator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_FILES_ITERATOR_
 #define _U2_FILES_ITERATOR_
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Core/src/util/FormatUtils.cpp b/src/corelibs/U2Core/src/util/FormatUtils.cpp
index 6c2837f..ea8799b 100644
--- a/src/corelibs/U2Core/src/util/FormatUtils.cpp
+++ b/src/corelibs/U2Core/src/util/FormatUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/FormatUtils.h b/src/corelibs/U2Core/src/util/FormatUtils.h
index fc50a6c..27177e1 100644
--- a/src/corelibs/U2Core/src/util/FormatUtils.h
+++ b/src/corelibs/U2Core/src/util/FormatUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/GAutoDeleteList.cpp b/src/corelibs/U2Core/src/util/GAutoDeleteList.cpp
index f7bfa04..84e5b70 100644
--- a/src/corelibs/U2Core/src/util/GAutoDeleteList.cpp
+++ b/src/corelibs/U2Core/src/util/GAutoDeleteList.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/GAutoDeleteList.h b/src/corelibs/U2Core/src/util/GAutoDeleteList.h
index c414bf0..24584a0 100644
--- a/src/corelibs/U2Core/src/util/GAutoDeleteList.h
+++ b/src/corelibs/U2Core/src/util/GAutoDeleteList.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_AUTODELETE_LIST_H_
 #define _U2_AUTODELETE_LIST_H_
 
-#include <QtCore/QObject>
+#include <QObject>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/GUrlUtils.cpp b/src/corelibs/U2Core/src/util/GUrlUtils.cpp
index b437145..ecb85f9 100644
--- a/src/corelibs/U2Core/src/util/GUrlUtils.cpp
+++ b/src/corelibs/U2Core/src/util/GUrlUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -45,6 +45,14 @@ QString GUrlUtils::getUncompressedExtension(const GUrl& url) {
     return ext;
 }
 
+QString GUrlUtils::getUncompressedCompleteBaseName(const GUrl &url) {
+    QString filePath = url.getURLString();
+    if ("gz" == url.lastFileSuffix())  {
+        filePath.chop(QString(".gz").length());
+    }
+    return QFileInfo(filePath).completeBaseName();
+}
+
 GUrl GUrlUtils::ensureFileExt(const GUrl& url, const QStringList& typeExt) {
     SAFE_POINT(!typeExt.isEmpty(), "Type extension is empty!", GUrl());
 
@@ -62,6 +70,10 @@ GUrl GUrlUtils::ensureFileExt(const GUrl& url, const QStringList& typeExt) {
     return GUrl(url.getURLString() + "."  + typeExt.first(), url.getType());
 }
 
+bool GUrlUtils::containSpaces(const QString &string) {
+    return string.contains(QRegExp("\\s"));
+}
+
 GUrl GUrlUtils::changeFileExt(const GUrl &url, const DocumentFormatId &oldFormatId, const DocumentFormatId &newFormatId) {
     CHECK(url.isLocalFile(), GUrl());
     DocumentFormatRegistry *dfRegistry = AppContext::getDocumentFormatRegistry();
@@ -148,7 +160,8 @@ bool GUrlUtils::renameFileWithNameRoll(const QString& original, TaskStateInfo& t
     }
 }
 
-static void getPreNPost(const QString &originalUrl, QString &pre, QString &post) {
+static void getPreNPost(const QString &originalUrl, QString &pre, QString &post, int &i, const QString &rolledSuffix) {
+    i = 0;
     pre = originalUrl;
     int idx = pre.lastIndexOf(".");
 
@@ -166,21 +179,30 @@ static void getPreNPost(const QString &originalUrl, QString &pre, QString &post)
             post = extSuffix;
             pre.chop(extSuffix.length());
         }
+        idx = pre.lastIndexOf(rolledSuffix);
+        if (idx != -1) {
+            QString possibleNumber = pre.mid(idx + rolledSuffix.length());
+            i = possibleNumber.toInt();
+            if (i > 0) {
+                pre = pre.left(idx);
+            }
+        }
     }
 }
 
 QString GUrlUtils::insertSuffix(const QString &originalUrl, const QString &suffix) {
     QString pre, post;
-    getPreNPost(originalUrl, pre, post);
+    int i = 0;
+    getPreNPost(originalUrl, pre, post, i,suffix);
     return pre + suffix + post;
 }
 
 QStringList GUrlUtils::getRolledFilesList(const QString& originalUrl, const QString& rolledSuffix) {
     QString pre, post; //pre and post url parts. A number will be placed between
-    getPreNPost(originalUrl, pre, post);
+    int i = 0;
+    getPreNPost(originalUrl, pre, post, i, rolledSuffix);
 
     QString resultUrl = originalUrl;
-    int i = 0;
     QStringList urls;
     while (QFile::exists(resultUrl)) {
         urls << resultUrl;
@@ -191,10 +213,10 @@ QStringList GUrlUtils::getRolledFilesList(const QString& originalUrl, const QStr
 
 QString GUrlUtils::rollFileName(const QString& originalUrl, const QString& rolledSuffix, const QSet<QString>& excludeList) {
     QString pre, post; //pre and post url parts. A number will be placed between
-    getPreNPost(originalUrl, pre, post);
+    int i = 0;
+    getPreNPost(originalUrl, pre, post, i, rolledSuffix);
 
     QString resultUrl = originalUrl;
-    int i = 0;
     while (QFile::exists(resultUrl) || excludeList.contains(resultUrl)) {
         resultUrl = pre + rolledSuffix + QString("%1").arg(++i) + post;
     }
@@ -269,8 +291,8 @@ QString GUrlUtils::prepareFileName(const QString& url, const QString& baseSuffix
     return result;
 }
 
-// checks that file path is valid: creates required directory if needed.
-// Returns canonical path to file. Does not create nor remove file, affects just directory
+// checks that file path is valid: creates required folder if needed.
+// Returns canonical path to file. Does not create nor remove file, affects just folder
 // Sample usage: processing URLs in "save file" inputs
 QString GUrlUtils::prepareFileLocation(const QString& filePath, U2OpStatus& os) {
     QFileInfo fi(filePath);
@@ -282,22 +304,22 @@ QString GUrlUtils::prepareFileLocation(const QString& filePath, U2OpStatus& os)
     return result;
 }
 
-// checks that dir path is valid. Creates the directory if needed.
-// Returns absolute (without "." or ".." but with symlinks) directory path.
-// Does not affect directory if already exists.
+// checks that dir path is valid. Creates the folder if needed.
+// Returns absolute (without "." or ".." but with symlinks) folder path.
+// Does not affect folder if already exists.
 // Sample usage: processing URLs in "save dir" inputs
 QString GUrlUtils::prepareDirLocation(const QString& dirPath, U2OpStatus& os) {
-    CHECK_EXT(!dirPath.isEmpty(), os.setError(tr("Directory is not specified")), QString());
+    CHECK_EXT(!dirPath.isEmpty(), os.setError(tr("Folder is not specified")), QString());
     QDir targetDir(dirPath);
     if (!targetDir.exists()) {
         QString absPath = targetDir.absolutePath();
         if (!targetDir.mkpath(absPath)) {
-            os.setError(tr("Directory can't be created: %1").arg(absPath));
+            os.setError(tr("Folder can't be created: %1").arg(absPath));
             return QString();
         }
         targetDir = QDir(absPath); //It looks like QT caches results for QDir? Create new QDir instance in this case!
         if (!targetDir.isReadable()) {
-            os.setError(tr("Directory can't be read: %1").arg(absPath));
+            os.setError(tr("Folder can't be read: %1").arg(absPath));
             return QString();
         }
     }
@@ -342,7 +364,7 @@ void GUrlUtils::removeFile( const QString& filePath, U2OpStatus& os ){
     CHECK_EXT(!filePath.isEmpty(), os.setError(tr("File path is not specified")), );
     QFileInfo info(filePath);
 
-    CHECK_EXT(!info.isDir(), os.setError(tr("Directory path instead of file path")), );
+    CHECK_EXT(!info.isDir(), os.setError(tr("Folder path instead of file path")), );
 
     if(info.exists()){
         QFile::remove(info.absoluteFilePath());
@@ -400,7 +422,7 @@ QString GUrlUtils::createDirectory(const QString &path, const QString &suffix, U
     QDir dir(newPath);
     bool created = dir.mkpath(newPath);
     if (!created) {
-        os.setError(tr("Can not create a directory: %1").arg(newPath));
+        os.setError(tr("Can not create a folder: %1").arg(newPath));
     }
     return newPath;
 }
@@ -459,20 +481,31 @@ void GUrlUtils::validateLocalFileUrl(const GUrl &url, U2OpStatus &os, const QStr
         QString dirUrl = info.dir().absolutePath();
         bool created = QDir().mkpath(dirUrl);
         if (!created) {
-            os.setError(tr("Can not create a directory [%1].").arg(dirUrl));
+            os.setError(tr("Can not create a folder [%1].").arg(dirUrl));
         }
         return;
     }
     if (info.isDir()) {
-        os.setError(tr("%1 is a directory [%2].").arg(urlName).arg(urlStr));
+        os.setError(tr("%1 is a folder [%2].").arg(urlName).arg(urlStr));
         return;
     }
 }
 
+/* Maximum file name length for Linux, Windows and MacOS X is 255 characters. */
+#define MAX_OS_FILE_NAME_LENGTH 255
+
 QString GUrlUtils::fixFileName(const QString &fileName) {
     QString result = fileName;
     result.replace(QRegExp("[^0-9a-zA-Z._\\-]"), "_");
-    return result.replace(QRegExp("_+"), "_");
+    result.replace(QRegExp("_+"), "_");
+
+    /* We truncate long file names a little bit more to allow suffix adjustments (rolling) later. */
+    result.truncate(MAX_OS_FILE_NAME_LENGTH - 50);
+    return result;
+}
+
+QString GUrlUtils::getSlashEndedPath(const QString &dirPath) {
+    return dirPath.endsWith("/") ? dirPath : dirPath + "/";
 }
 
 }//namespace
diff --git a/src/corelibs/U2Core/src/util/GUrlUtils.h b/src/corelibs/U2Core/src/util/GUrlUtils.h
index beff2d3..c38e17d 100644
--- a/src/corelibs/U2Core/src/util/GUrlUtils.h
+++ b/src/corelibs/U2Core/src/util/GUrlUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,9 +25,9 @@
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QSet>
-#include <QtCore/QStringList>
-#include <QtCore/QUrl>
+#include <QSet>
+#include <QStringList>
+#include <QUrl>
 
 namespace U2 {
 
@@ -41,7 +41,10 @@ class U2CORE_EXPORT GUrlUtils : public QObject {
 public:
 
     //gets the uncompressed extension for the URL. Filters 'gz' like suffixes
-    static QString  getUncompressedExtension(const GUrl& url);
+    static QString getUncompressedExtension(const GUrl& url);
+
+    //gets the complete base file name without ignoring 'gz' suffix
+    static QString getUncompressedCompleteBaseName(const GUrl &url);
 
     // ensures that url ends with one of the exts
     static GUrl     ensureFileExt(const GUrl& url, const QStringList& typeExt);
@@ -85,14 +88,14 @@ public:
     // adds count to the url. Ensures that URL ends with one of the exts from typeExt
     static QString prepareFileName(const QString& url, int count, const QStringList& typeExt);
 
-    // checks that file path is valid: creates required directory if needed.
-    // Returns canonical path to file. Does not create nor remove file, affects just directory
+    // checks that file path is valid: creates required folder if needed.
+    // Returns canonical path to file. Does not create nor remove file, affects just folder
     // Returns empty string and error message if some error occurs
     // Sample usage: processing URLs in "save file" inputs
     static QString prepareFileLocation(const QString& filePath, U2OpStatus& os);
 
-    // checks that dir path is valid. Creates the directory if needed.
-    // Returns canonical directory path. Does not affect directory if already exists.
+    // checks that dir path is valid. Creates the folder if needed.
+    // Returns canonical folder path. Does not affect folder if already exists.
     // Returns empty string and error message if some error occurs
     // Sample usage: processing URLs in "save dir" inputs
     static QString prepareDirLocation(const QString& dirPath, U2OpStatus& os);
@@ -116,7 +119,7 @@ public:
     //Get quoted input string if it has spaces
     static QString getQuotedString(const QString& inString);
 
-    // Creates the directory with a rolled path: @path + @suffix + "num". Returns the new path
+    // Creates the folder with a rolled path: @path + @suffix + "num". Returns the new path
     static QString createDirectory(const QString &path, const QString &suffix, U2OpStatus &os);
 
     // If url is local returns values from it, else returns default values: default data dir path from settings and @defaultBaseFileName
@@ -137,6 +140,10 @@ public:
     * so file name will both POSIX-compatible and Windows-compatible.
     */
     static QString fixFileName(const QString &fileName);
+
+    static QString getSlashEndedPath(const QString &dirPath);
+
+    static bool containSpaces(const QString &string);
 };
 
 } //namespace
diff --git a/src/corelibs/U2Core/src/util/GenbankFeatures.cpp b/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
index 0120157..45bd765 100644
--- a/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
+++ b/src/corelibs/U2Core/src/util/GenbankFeatures.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,9 +21,9 @@
 
 #include "GenbankFeatures.h"
 
-#include <QtCore/QHash>
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
+#include <QHash>
+#include <QMutex>
+#include <QMutexLocker>
 
 #include <U2Core/FeatureColors.h>
 
diff --git a/src/corelibs/U2Core/src/util/GenbankFeatures.h b/src/corelibs/U2Core/src/util/GenbankFeatures.h
index 9e1120c..9e18a31 100644
--- a/src/corelibs/U2Core/src/util/GenbankFeatures.h
+++ b/src/corelibs/U2Core/src/util/GenbankFeatures.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,10 @@
 
 #include <U2Core/U2FeatureType.h>
 
-#include <QtCore/QMultiMap>
-#include <QtCore/QVector>
-#include <QtCore/QMutex>
-#include <QtGui/QColor>
+#include <QMultiMap>
+#include <QVector>
+#include <QMutex>
+#include <QColor>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp b/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
index db27e45..d92f39e 100644
--- a/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
+++ b/src/corelibs/U2Core/src/util/IOAdapterUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/IOAdapterUtils.h b/src/corelibs/U2Core/src/util/IOAdapterUtils.h
index c52406a..24911dc 100644
--- a/src/corelibs/U2Core/src/util/IOAdapterUtils.h
+++ b/src/corelibs/U2Core/src/util/IOAdapterUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.cpp b/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.cpp
index 2f954a8..b3ba8d9 100644
--- a/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.cpp
+++ b/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/U2SafePoints.h>
 
diff --git a/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.h b/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.h
index 91730de..ebddcce 100644
--- a/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.h
+++ b/src/corelibs/U2Core/src/util/ImportToDatabaseOptions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/MAlignmentExporter.cpp b/src/corelibs/U2Core/src/util/MAlignmentExporter.cpp
deleted file mode 100644
index 5f03819..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentExporter.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentExporter.h"
-
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2AttributeDbi.h>
-#include <U2Core/U2MsaDbi.h>
-#include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SequenceDbi.h>
-
-static const char *NULL_MSA_DBI_ERROR =             "NULL MSA Dbi during exporting rows of an alignment!";
-static const char *OPENED_DBI_CONNECTION_ERROR =    "Connection is already opened!";
-static const char *ROWS_SEQS_COUNT_MISMATCH_ERROR = "Different number of rows and sequences!";
-
-namespace U2 {
-
-MAlignmentExporter::MAlignmentExporter()
-{
-
-}
-
-MAlignment MAlignmentExporter::getAlignment(const U2DbiRef& dbiRef, const U2DataId& msaId, U2OpStatus& os) const {
-    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, MAlignment());
-    con.open(dbiRef, false, os);
-    CHECK_OP(os, MAlignment());
-
-    // Rows and their sequences
-    QList<U2MsaRow> rows = exportRows(msaId, os);
-    CHECK_OP(os, MAlignment());
-
-    QList<DNASequence> sequences = exportSequencesOfRows(rows, os);
-    CHECK_OP(os, MAlignment());
-
-    SAFE_POINT(rows.count() == sequences.count(), ROWS_SEQS_COUNT_MISMATCH_ERROR, MAlignment());
-
-    MAlignment al;
-    for (int i = 0; i < rows.count(); ++i) {
-        al.addRow(rows[i], sequences[i], os);
-        CHECK_OP(os, MAlignment());
-    }
-
-    // Info
-    QVariantMap alInfo = exportAlignmentInfo(msaId, os);
-    CHECK_OP(os, MAlignment());
-
-    al.setInfo(alInfo);
-
-    // Alphabet, name and length
-    U2Msa msa = exportAlignmentObject(msaId, os);
-    CHECK_OP(os, MAlignment());
-
-    const DNAAlphabet* alphabet = U2AlphabetUtils::getById(msa.alphabet);
-    al.setAlphabet(alphabet);
-    al.setName(msa.visualName);
-    al.setLength(msa.length);
-
-    return al;
-}
-
-U2Msa MAlignmentExporter::getAlignmentObject(const U2DbiRef &dbiRef, const U2DataId &msaId, U2OpStatus &os) const {
-    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, U2Msa());
-    con.open(dbiRef, false, os);
-
-    U2Msa msa = exportAlignmentObject(msaId, os);
-    CHECK_OP(os, U2Msa());
-
-    return msa;
-}
-
-QList<MAlignmentRowReplacementData> MAlignmentExporter::getAlignmentRows(const U2DbiRef& dbiRef,
-    const U2DataId& msaId, const QList<qint64> rowIds, U2OpStatus& os) const
-{
-    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, QList<MAlignmentRowReplacementData>());
-    con.open(dbiRef, false, os);
-    CHECK_OP(os, QList<MAlignmentRowReplacementData>());
-
-    QList<U2MsaRow> rows = exportRows(msaId, rowIds, os);
-    CHECK_OP(os, QList<MAlignmentRowReplacementData>());
-
-    QList<DNASequence> sequences = exportSequencesOfRows(rows, os);
-    CHECK_OP(os, QList<MAlignmentRowReplacementData>());
-
-    QList<MAlignmentRowReplacementData> result;
-    SAFE_POINT(rows.count() == sequences.count(), ROWS_SEQS_COUNT_MISMATCH_ERROR,
-        QList<MAlignmentRowReplacementData>());
-    for ( int i = 0; i < rows.length( ); ++i ) {
-        result << MAlignmentRowReplacementData( sequences.at(i), rows.at( i ) );
-    }
-    return result;
-}
-
-QList<U2MsaRow> MAlignmentExporter::exportRows(const U2DataId& msaId, U2OpStatus& os) const {
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, NULL_MSA_DBI_ERROR, QList<U2MsaRow>());
-
-    return msaDbi->getRows(msaId, os);
-}
-
-QList<U2MsaRow> MAlignmentExporter::exportRows( const U2DataId &msaId, const QList<qint64> rowIds,
-    U2OpStatus &os ) const
-{
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi( );
-    SAFE_POINT( NULL != msaDbi, NULL_MSA_DBI_ERROR, QList<U2MsaRow>( ) );
-    QList<U2MsaRow> result;
-    foreach ( qint64 rowId, rowIds ) {
-        result.append( msaDbi->getRow( msaId, rowId, os) );
-        SAFE_POINT_OP( os, QList<U2MsaRow>( ) );
-    }
-    return result;
-}
-
-
-QList<DNASequence> MAlignmentExporter::exportSequencesOfRows(QList<U2MsaRow> rows, U2OpStatus& os) const {
-    U2SequenceDbi* sequenceDbi = con.dbi->getSequenceDbi();
-    SAFE_POINT(NULL != sequenceDbi, "NULL Sequence Dbi during exporting rows sequences!", QList<DNASequence>());
-
-    QList<DNASequence> sequences;
-    sequences.reserve( rows.count( ) );
-    for (int i = 0, n = rows.count(); i < n; ++i) {
-        const U2DataId& sequenceId = rows[i].sequenceId;
-        qint64 gstart = rows[i].gstart;
-        qint64 gend = rows[i].gend;
-        U2Region regionInSequence(gstart, gend - gstart);
-
-        QByteArray seqData = sequenceDbi->getSequenceData(sequenceId, regionInSequence, os);
-        CHECK_OP(os, QList<DNASequence>());
-
-        U2Sequence seqObj = sequenceDbi->getSequenceObject(sequenceId, os);
-        CHECK_OP(os, QList<DNASequence>());
-
-        DNASequence seq(seqObj.visualName, seqData);
-        sequences.append(seq);
-    }
-
-    return sequences;
-}
-
-QVariantMap MAlignmentExporter::exportAlignmentInfo(const U2DataId& msaId, U2OpStatus& os) const {
-    U2AttributeDbi* attrDbi = con.dbi->getAttributeDbi();
-    SAFE_POINT(NULL != attrDbi, "NULL Attribute Dbi during exporting an alignment info!", QVariantMap());
-
-    // Get all MSA attributes
-    QVariantMap alInfo;
-    QList<U2DataId> attributeIds =  attrDbi->getObjectAttributes(msaId, "", os);
-    CHECK_OP(os, QVariantMap());
-
-    foreach (U2DataId attributeId, attributeIds) {
-        U2StringAttribute attr = attrDbi->getStringAttribute(attributeId, os);
-        CHECK_OP(os, QVariantMap());
-
-        QString key = attr.name;
-        QVariant val = QVariant(attr.value);
-
-        alInfo.insert(key, val);
-    }
-
-    return alInfo;
-}
-
-U2Msa MAlignmentExporter::exportAlignmentObject(const U2DataId& msaId, U2OpStatus& os) const {
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during exporting an alignment object!", U2Msa());
-
-    return msaDbi->getMsaObject(msaId, os);
-}
-
-} // namespace
diff --git a/src/corelibs/U2Core/src/util/MAlignmentExporter.h b/src/corelibs/U2Core/src/util/MAlignmentExporter.h
deleted file mode 100644
index 7ff1cbc..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentExporter.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_EXPORTER_H_
-#define _U2_MALIGNMENT_EXPORTER_H_
-
-#include <U2Core/MAlignment.h>
-#include <U2Core/U2Msa.h>
-#include <U2Core/U2DbiUtils.h>
-#include <U2Core/U2OpStatus.h>
-
-
-namespace U2 {
-
-struct MAlignmentRowReplacementData {
-    MAlignmentRowReplacementData( const DNASequence &_sequence, const U2MsaRow &_row )
-        : sequence( _sequence ), row( _row ) { }
-
-    DNASequence sequence;
-    U2MsaRow row;
-};
-
-/** Getting a multiple alignment from DBI */
-class U2CORE_EXPORT MAlignmentExporter {
-public:
-                                        MAlignmentExporter();
-
-    MAlignment                          getAlignment(const U2DbiRef& dbiRef, const U2DataId& msaId,
-                                            U2OpStatus& os) const;
-    U2Msa                               getAlignmentObject(const U2DbiRef& dbiRef, const U2DataId& msaId, U2OpStatus& os) const;
-    QList<MAlignmentRowReplacementData> getAlignmentRows(const U2DbiRef& dbiRef, const U2DataId& msaId,
-                                            const QList<qint64> rowIds, U2OpStatus& os) const;
-
-private:
-    QList<U2MsaRow>                     exportRows(const U2DataId&, U2OpStatus&) const;
-    QList<U2MsaRow>                     exportRows(const U2DataId&, const QList<qint64> rowIds, U2OpStatus&) const;
-    QList<DNASequence>                  exportSequencesOfRows(QList<U2MsaRow>, U2OpStatus&) const;
-    QVariantMap                         exportAlignmentInfo(const U2DataId&, U2OpStatus&) const;
-    U2Msa                               exportAlignmentObject(const U2DataId&, U2OpStatus&) const;
-
-    mutable DbiConnection                       con;
-};
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp b/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp
deleted file mode 100644
index dd23801..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentImporter.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MsaDbiUtils.h>
-#include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2AttributeDbi.h>
-#include <U2Core/U2MsaDbi.h>
-#include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SequenceDbi.h>
-#include <U2Core/U2SequenceUtils.h>
-
-#include "MAlignmentImporter.h"
-
-namespace U2 {
-
-MAlignmentObject * MAlignmentImporter::createAlignment(const U2DbiRef& dbiRef, MAlignment& al, U2OpStatus& os) {
-    return createAlignment(dbiRef, U2ObjectDbi::ROOT_FOLDER, al, os);
-}
-
-MAlignmentObject * MAlignmentImporter::createAlignment(const U2DbiRef &dbiRef, const QString &folder, MAlignment &al,
-    U2OpStatus &os, const QList<U2Sequence> &alignedSeqs)
-{
-    if (!alignedSeqs.isEmpty() && alignedSeqs.size() != al.getNumRows()) {
-        os.setError(QObject::tr("Unexpected number of sequences in a multiple alignment"));
-        return NULL;
-    }
-    DbiConnection con(dbiRef, true, os);
-    CHECK(!os.isCanceled(), NULL);
-    SAFE_POINT_OP(os, NULL);
-    SAFE_POINT_EXT(NULL != con.dbi, os.setError(L10N::nullPointerError("Destination database")), NULL);
-
-    TmpDbiObjects objs(dbiRef, os); // remove the MSA object if opStatus is incorrect
-
-    // MSA object and info
-    U2Msa msa = importMsaObject(con, folder, al, os);
-    objs.objects << msa.id;
-
-    CHECK_OP(os, NULL);
-
-    importMsaInfo(con, msa.id, al, os);
-    CHECK_OP(os, NULL);
-
-    // MSA rows
-    QList<U2Sequence> sequences;
-    U2MsaGapModel gapModel;
-
-    if (alignedSeqs.isEmpty()) {
-        sequences = importSequences(con, folder, al, os);
-        gapModel = al.getGapModel();
-        CHECK_OP(os, NULL);
-    } else {
-        setChildRankForSequences(con, alignedSeqs, os);
-        CHECK_OP(os, NULL);
-
-        sequences = alignedSeqs;
-        splitToCharsAndGaps(con, sequences, gapModel, os);
-        CHECK_OP(os, NULL);
-    }
-
-    QList<U2MsaRow> rows = importRows(con, al, msa, sequences, gapModel, os);
-    CHECK_OP(os, NULL);
-    SAFE_POINT_EXT(rows.size() == al.getNumRows(), os.setError(QObject::tr("Unexpected error on MSA rows import")), NULL);
-
-    for (int i = 0, n = al.getNumRows(); i < n; ++i) {
-        al.getRow(i).setRowDbInfo(rows.at(i));
-    }
-
-    return new MAlignmentObject(al.getName(), U2EntityRef(dbiRef, msa.id), QVariantMap(), al);
-}
-
-void MAlignmentImporter::setChildRankForSequences(const DbiConnection &con, const QList<U2Sequence> &sequences, U2OpStatus &os) {
-    SAFE_POINT(NULL != con.dbi, L10N::nullPointerError("database connection"), );
-    U2ObjectDbi *objDbi = con.dbi->getObjectDbi();
-    SAFE_POINT(NULL != objDbi, L10N::nullPointerError("object storage"), );
-
-    foreach (const U2Sequence &seq, sequences) {
-        objDbi->setObjectRank(seq.id, U2DbiObjectRank_Child, os);
-        CHECK_OP(os, );
-    }
-}
-
-U2Msa MAlignmentImporter::importMsaObject(const DbiConnection& con, const QString& folder, const MAlignment& al, U2OpStatus& os) {
-    U2Msa msa;
-    const DNAAlphabet* alphabet = al.getAlphabet();
-    SAFE_POINT(NULL != alphabet, "The alignment alphabet is NULL during importing!", U2Msa());
-
-    msa.alphabet.id = alphabet->getId();
-    msa.length = al.getLength();
-    msa.visualName = al.getName();
-    if (msa.visualName.isEmpty()) {
-        QDate date = QDate::currentDate();
-        QString generatedName = "MSA" + date.toString();
-        coreLog.trace(QString("A multiple alignment name was empty! Generated a new name %1").arg(generatedName));
-        msa.visualName = generatedName;
-    }
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during importing an alignment!", U2Msa());
-
-    msa.id = msaDbi->createMsaObject(folder, msa.visualName, msa.alphabet, msa.length, os);
-    CHECK_OP(os, U2Msa());
-
-    return msa;
-}
-
-void MAlignmentImporter::importMsaInfo(const DbiConnection& con, const U2DataId& msaId, const MAlignment& al, U2OpStatus& os) {
-    QVariantMap alInfo = al.getInfo();
-
-    U2AttributeDbi* attrDbi = con.dbi->getAttributeDbi();
-    SAFE_POINT(NULL != attrDbi, "NULL Attribute Dbi during importing an alignment!",);
-
-    foreach (QString key, alInfo.keys()) {
-        if (key != MAlignmentInfo::NAME) { // name is stored in the object
-            QString val =  alInfo.value(key).value<QString>();
-            U2StringAttribute attr(msaId, key, val);
-
-            attrDbi->createStringAttribute(attr, os);
-            CHECK_OP(os, );
-        }
-    }
-}
-
-QList<U2Sequence> MAlignmentImporter::importSequences(const DbiConnection& con, const QString& folder, const MAlignment& al, U2OpStatus& os) {
-    U2SequenceDbi* seqDbi = con.dbi->getSequenceDbi();
-    SAFE_POINT(NULL != seqDbi, "NULL Sequence Dbi during importing an alignment!", QList<U2Sequence>());
-
-    QList<U2Sequence> sequences;
-    for (int i = 0; i < al.getNumRows(); ++i) {
-        MAlignmentRow row = al.getRow(i);
-        DNASequence dnaSeq = row.getSequence();
-
-        U2Sequence sequence = U2Sequence();
-        sequence.visualName = dnaSeq.getName();
-        sequence.circular = dnaSeq.circular;
-        sequence.length = dnaSeq.length();
-
-        const DNAAlphabet* alphabet = dnaSeq.alphabet;
-        if (NULL == alphabet) {
-            alphabet = U2AlphabetUtils::findBestAlphabet(dnaSeq.constData(), dnaSeq.length());
-        }
-        SAFE_POINT(NULL != alphabet, "Failed to get alphabet for a sequence!", QList<U2Sequence>());
-        sequence.alphabet.id = alphabet->getId();
-
-        seqDbi->createSequenceObject(sequence, folder, os, U2DbiObjectRank_Child);
-        CHECK_OP(os, QList<U2Sequence>());
-
-        QVariantMap hints;
-        const QByteArray& seqData = dnaSeq.constSequence();
-        seqDbi->updateSequenceData(sequence.id, U2_REGION_MAX, seqData, hints, os);
-        CHECK_OP(os, QList<U2Sequence>());
-
-        sequences.append(sequence);
-    }
-    return sequences;
-}
-
-void MAlignmentImporter::splitToCharsAndGaps(const DbiConnection &con, QList<U2Sequence> &sequences, U2MsaGapModel &gapModel, U2OpStatus &os) {
-    U2SequenceDbi* seqDbi = con.dbi->getSequenceDbi();
-    SAFE_POINT(NULL != seqDbi, "NULL Sequence Dbi during importing an alignment!", );
-
-    gapModel.clear();
-    for (int i = 0; i < sequences.size(); i++) {
-        const QByteArray sequenceData = seqDbi->getSequenceData(sequences[i].id, U2_REGION_MAX, os);
-        CHECK_OP(os, );
-
-        QByteArray pureSequenceData;
-        U2MsaRowGapModel sequenceGapModel;
-        MsaDbiUtils::splitBytesToCharsAndGaps(sequenceData, pureSequenceData, sequenceGapModel);
-        gapModel << sequenceGapModel;
-
-        if (sequenceGapModel.isEmpty()) {
-            continue;
-        }
-
-        QVariantMap hints;
-        hints[U2SequenceDbiHints::UPDATE_SEQUENCE_LENGTH] = true;
-        hints[U2SequenceDbiHints::EMPTY_SEQUENCE] = false;
-
-        seqDbi->updateSequenceData(sequences[i].id, U2_REGION_MAX, pureSequenceData, hints, os);
-        CHECK_OP(os, );
-
-        sequences[i].length = pureSequenceData.size();
-    }
-}
-
-QList<U2MsaRow> MAlignmentImporter::importRows(const DbiConnection& con, MAlignment& al, U2Msa& msa, const QList<U2Sequence> &sequences, const U2MsaGapModel &msaGapModel, U2OpStatus& os) {
-    QList<U2MsaRow> rows;
-    SAFE_POINT_EXT(sequences.size() == msaGapModel.size(), os.setError("Gap model doesn't fit sequences count"), rows);
-
-    for (int i = 0; i < al.getNumRows(); ++i) {
-        U2Sequence seq = sequences[i];
-        if (seq.length > 0) {
-            MAlignmentRow &alignmentRow = al.getRow(i);
-            const U2MsaRowGapModel gapModel = msaGapModel[i];
-            if (!gapModel.isEmpty() && (gapModel.last().offset + gapModel.last().gap) == MsaRowUtils::getRowLength(alignmentRow.getSequence().seq, gapModel)) {
-                // remove trailing gap if it exists
-                U2MsaRowGapModel newGapModel = gapModel;
-                newGapModel.removeLast();
-                alignmentRow.setGapModel(newGapModel);
-            }
-
-            U2MsaRow row;
-            row.sequenceId = seq.id;
-            row.gstart = 0;
-            row.gend = seq.length;
-            row.gaps = alignmentRow.getGapModel();
-            row.length = alignmentRow.getRowLengthWithoutTrailing();
-
-            rows.append(row);
-        } else {
-            al.removeRow(i, os);
-            --i;
-        }
-    }
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during importing an alignment!", QList<U2MsaRow>());
-
-    msaDbi->addRows(msa.id, rows, os);
-    CHECK_OP(os, QList<U2MsaRow>());
-    return rows;
-}
-
-} // namespace
diff --git a/src/corelibs/U2Core/src/util/MAlignmentImporter.h b/src/corelibs/U2Core/src/util/MAlignmentImporter.h
deleted file mode 100644
index e3bb0f7..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentImporter.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_IMPORTER_H_
-#define _U2_MALIGNMENT_IMPORTER_H_
-
-#include <U2Core/U2Msa.h>
-#include <U2Core/U2Sequence.h>
-
-namespace U2 {
-
-class DbiConnection;
-class MAlignment;
-class MAlignmentObject;
-class U2DbiRef;
-class U2OpStatus;
-
-/** Importing a multiple alignment into db */
-class U2CORE_EXPORT MAlignmentImporter {
-public:
-    /**
-     * Creates an alignment in the db.
-     * The alignment is completely removed in case of an error.
-     */
-    static MAlignmentObject * createAlignment(const U2DbiRef &dbiRef, MAlignment &al, U2OpStatus &os);
-    static MAlignmentObject * createAlignment(const U2DbiRef &dbiRef, const QString &folder, MAlignment &al,
-        U2OpStatus &os, const QList<U2Sequence> &alignedSequences = QList<U2Sequence>());
-
-private:
-    static U2Msa importMsaObject(const DbiConnection &con, const QString &folder, const MAlignment &al, U2OpStatus &os);
-    static void importMsaInfo(const DbiConnection &con, const U2DataId &msaId, const MAlignment &al, U2OpStatus &os);
-    static QList<U2Sequence> importSequences(const DbiConnection &con, const QString &folder, const MAlignment &al, U2OpStatus &os);
-    static void splitToCharsAndGaps(const DbiConnection &con, QList<U2Sequence> &sequences, U2MsaGapModel &gapModel, U2OpStatus &os);
-    static void setChildRankForSequences(const DbiConnection &con, const QList<U2Sequence> &sequences, U2OpStatus &os);
-    static QList<U2MsaRow> importRows(const DbiConnection &con, MAlignment &al, U2Msa &msa, const QList<U2Sequence> &rows, const U2MsaGapModel &msaGapModel, U2OpStatus &os);
-};
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2Core/src/util/MAlignmentWalker.cpp b/src/corelibs/U2Core/src/util/MAlignmentWalker.cpp
deleted file mode 100644
index 2971c06..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentWalker.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
-
-#include "MAlignmentWalker.h"
-
-namespace U2 {
-
-class RowWalker {
-public:
-    RowWalker(const MAlignmentRow &row, char gapChar)
-    : row(row), gaps(row.getGapModel()), seqPos(0), gapChar(gapChar)
-    {
-
-    }
-
-    QByteArray nextData(int startPos, int length, U2OpStatus &os) {
-        QByteArray result = row.getSequence().constSequence().mid(seqPos, length);
-
-        if (gaps.isEmpty()) { // add trailing gaps if it is possible
-            seqPos += result.length();
-            return result + gapsBytes(length - result.length());
-        }
-
-        int gapsInserted = 0;
-        while (hasGapsInRegion(startPos, length, os)) {
-            U2MsaGap gap = gaps.takeFirst();
-            U2MsaGap inRegion;
-            U2MsaGap outRegion;
-            splitGap(startPos, length, gap, inRegion, outRegion, os);
-            CHECK_OP(os, "");
-
-            result.insert(gap.offset - startPos, gapsBytes(inRegion.gap));
-            gapsInserted += inRegion.gap;
-
-            if (outRegion.gap > 0) {
-                gaps.prepend(outRegion);
-                break;
-            }
-        }
-        CHECK_OP(os, "");
-
-        if (result.length() < length) { // add trailing gaps if it is possible
-            gapsInserted += length - result.length();
-            result += gapsBytes(length - result.length());
-        }
-
-        seqPos += length - gapsInserted;
-        return result.left(length);
-    }
-
-private:
-    bool hasGapsInRegion(int startPos, int length, U2OpStatus &os) const {
-        CHECK(!gaps.isEmpty(), false);
-        const U2MsaGap &gap = gaps.first();
-
-        SAFE_POINT_EXT(gap.offset >= startPos, os.setError(L10N::badArgument(MAlignmentObject::tr("Unexpected gap start"))), false);
-
-        if (gap.offset >= startPos + length) {
-            return false;
-        }
-        return true;
-    }
-
-    static void splitGap(int startPos, int length, const U2MsaGap &gap, U2MsaGap &inRegion, U2MsaGap &outRegion, U2OpStatus &os) {
-        SAFE_POINT_EXT(gap.offset >= startPos, os.setError(L10N::badArgument(MAlignmentObject::tr("Unexpected gap start (too small)"))), );
-        SAFE_POINT_EXT(gap.offset < startPos + length, os.setError(L10N::badArgument(MAlignmentObject::tr("Unexpected gap start (too big)"))), );
-
-        int endPos = startPos + length - 1;
-        if (gap.offset + gap.gap <= endPos) {
-            inRegion = gap;
-        } else {
-            int inRegionLength = endPos - gap.offset + 1;
-            int outRegionLength = gap.gap - inRegionLength;
-            inRegion = U2MsaGap(gap.offset, inRegionLength);
-            outRegion = U2MsaGap(endPos + 1, outRegionLength);
-        }
-
-        SAFE_POINT_EXT((startPos + length >= inRegion.offset + inRegion.gap)
-                    && (inRegion.gap + outRegion.gap == gap.gap),
-                    os.setError(L10N::internalError() + MAlignmentObject::tr(" Incorrect gap splitting")), );
-    }
-
-    QByteArray gapsBytes(int length) const {
-        return QByteArray(length, gapChar);
-    }
-
-private:
-    const MAlignmentRow &row;
-    QList<U2MsaGap> gaps;
-    int seqPos;
-    const char gapChar;
-};
-
-/************************************************************************/
-/* MAlignmentWalker */
-/************************************************************************/
-MAlignmentWalker::MAlignmentWalker(const MAlignment &msa, char gapChar)
-: msa(msa), currentOffset(0)
-{
-    for (int i=0; i<msa.getNumRows(); i++) {
-        rowWalkerList << new RowWalker(msa.getRow(i), gapChar);
-    }
-}
-
-MAlignmentWalker::~MAlignmentWalker() {
-    qDeleteAll(rowWalkerList);
-}
-
-bool MAlignmentWalker::isEnded() const {
-    return currentOffset >= msa.getLength();
-}
-
-QList<QByteArray> MAlignmentWalker::nextData(int length, U2OpStatus &os) {
-    QList<QByteArray> result;
-    SAFE_POINT_EXT(!isEnded(), os.setError(L10N::internalError() + MAlignmentObject::tr(" Alignment walker is ended")), result);
-    SAFE_POINT_EXT(msa.getNumRows() == rowWalkerList.size(), os.setError(L10N::internalError() + MAlignmentObject::tr(" Alignment changed")), result);
-
-    int charsRemain = msa.getLength() - currentOffset;
-    int chunkSize = (charsRemain < length) ? charsRemain : length;
-
-    for (int i=0; i<msa.getNumRows(); i++) {
-        QByteArray rowBytes = rowWalkerList[i]->nextData(currentOffset, chunkSize, os);
-        CHECK_OP(os, QList<QByteArray>());
-        result << rowBytes;
-    }
-    currentOffset += chunkSize;
-    return result;
-}
-
-} // U2
diff --git a/src/corelibs/U2Core/src/util/MAlignmentWalker.h b/src/corelibs/U2Core/src/util/MAlignmentWalker.h
deleted file mode 100644
index b6848ed..0000000
--- a/src/corelibs/U2Core/src/util/MAlignmentWalker.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENTWALKER_H_
-#define _U2_MALIGNMENTWALKER_H_
-
-#include <U2Core/MAlignment.h>
-
-namespace U2 {
-
-class RowWalker;
-
-class U2CORE_EXPORT MAlignmentWalker {
-public:
-    MAlignmentWalker(const MAlignment &msa, char gapChar = MAlignment_GapChar);
-    ~MAlignmentWalker();
-
-    bool isEnded() const;
-
-    QList<QByteArray> nextData(int length, U2OpStatus &os);
-
-private:
-    const MAlignment &msa;
-    int currentOffset;
-    QList<RowWalker*> rowWalkerList;
-};
-
-} // U2
-
-#endif // _U2_MALIGNMENTWALKER_H_
diff --git a/src/corelibs/U2Core/src/util/MSAUtils.cpp b/src/corelibs/U2Core/src/util/MSAUtils.cpp
index bf1d095..1a18a54 100644
--- a/src/corelibs/U2Core/src/util/MSAUtils.cpp
+++ b/src/corelibs/U2Core/src/util/MSAUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GObject.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/MsaDbiUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -34,21 +34,21 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SequenceUtils.h>
 
-#include <QtCore/QListIterator>
+#include <QListIterator>
 
 namespace U2 {
 
-bool MSAUtils::equalsIgnoreGaps(const MAlignmentRow& row, int startPos, const QByteArray& pat, int &alternateLen) {
-    int sLen = row.getCoreEnd();
+bool MSAUtils::equalsIgnoreGaps(const MultipleSequenceAlignmentRow& row, int startPos, const QByteArray& pat, int &alternateLen) {
+    int sLen = row->getCoreEnd();
     int pLen = pat.size();
     int i = startPos;
     int gapsCounter = 0;
     for (int j = 0; i  < sLen && j < pLen; i++, j++) {
-        char c1 = row.charAt(i);
+        char c1 = row->charAt(i);
         char c2 = pat[j];
-        while(c1 == MAlignment_GapChar && ++i < sLen) {
+        while(c1 == U2Msa::GAP_CHAR && ++i < sLen) {
             gapsCounter++;
-            c1 = row.charAt(i);
+            c1 = row->charAt(i);
         }
         if (c1 != c2) {
             alternateLen = i - startPos;
@@ -62,16 +62,16 @@ bool MSAUtils::equalsIgnoreGaps(const MAlignmentRow& row, int startPos, const QB
     return true;
 }
 
-int MSAUtils::getPatternSimilarityIgnoreGaps(const MAlignmentRow& row, int startPos, const QByteArray& pat, int &alternateLen) {
-    int sLen = row.getCoreEnd();
+int MSAUtils::getPatternSimilarityIgnoreGaps(const MultipleSequenceAlignmentRow& row, int startPos, const QByteArray& pat, int &alternateLen) {
+    int sLen = row->getCoreEnd();
     int pLen = pat.size();
     int i = startPos;
     int similarity = 0;
     for (int j = 0; i  < sLen && j < pLen; i++, j++) {
-        char c1 = row.charAt(i);
+        char c1 = row->charAt(i);
         char c2 = pat[j];
-        while(c1 == MAlignment_GapChar && ++i < sLen) {
-            c1 = row.charAt(i);
+        while(c1 == U2Msa::GAP_CHAR && ++i < sLen) {
+            c1 = row->charAt(i);
         }
         if (c1 == c2) {
             similarity++;
@@ -81,26 +81,26 @@ int MSAUtils::getPatternSimilarityIgnoreGaps(const MAlignmentRow& row, int start
     return similarity;
 }
 
-MAlignment MSAUtils::seq2ma(const QList<DNASequence>& list, U2OpStatus& os) {
-    MAlignment ma(MA_OBJECT_NAME);
+MultipleSequenceAlignment MSAUtils::seq2ma(const QList<DNASequence>& list, U2OpStatus& os) {
+    MultipleSequenceAlignment ma(MA_OBJECT_NAME);
     foreach(const DNASequence& seq, list) {
         updateAlignmentAlphabet(ma, seq.alphabet, os);
         //TODO: handle memory overflow
-        ma.addRow(seq.getName(), seq.seq, os);
+        ma->addRow(seq.getName(), seq.seq);
     }
-    CHECK_OP(os, MAlignment());
+    CHECK_OP(os, MultipleSequenceAlignment());
     return ma;
 }
 
 namespace {
 
-MAlignmentObject * prepareSequenceHeadersList(const QList<GObject *> &list, bool useGenbankHeader, QList<U2SequenceObject *> &dnaList,
+MultipleSequenceAlignmentObject * prepareSequenceHeadersList(const QList<GObject *> &list, bool useGenbankHeader, QList<U2SequenceObject *> &dnaList,
     QList<QString> &nameList)
 {
     foreach (GObject *obj, list) {
         U2SequenceObject *dnaObj = qobject_cast<U2SequenceObject *>(obj);
         if (dnaObj == NULL) {
-            if (MAlignmentObject *maObj = qobject_cast<MAlignmentObject *>(obj)) {
+            if (MultipleSequenceAlignmentObject *maObj = qobject_cast<MultipleSequenceAlignmentObject *>(obj)) {
                 return maObj;
             }
             continue;
@@ -121,7 +121,7 @@ MAlignmentObject * prepareSequenceHeadersList(const QList<GObject *> &list, bool
 }
 
 
-void appendSequenceToAlignmentRow(MAlignment &ma, int rowIndex, int afterPos, const U2SequenceObject &seq, U2OpStatus &os) {
+void appendSequenceToAlignmentRow(MultipleSequenceAlignment &ma, int rowIndex, int afterPos, const U2SequenceObject &seq, U2OpStatus &os) {
     U2Region seqRegion(0, seq.getSequenceLength());
     const qint64 blockReadFromBD = 4194305; // 4 MB + 1
 
@@ -129,7 +129,7 @@ void appendSequenceToAlignmentRow(MAlignment &ma, int rowIndex, int afterPos, co
     for (qint64 startPosition = seqRegion.startPos; startPosition < seqRegion.length; startPosition += blockReadFromBD) {
         U2Region readRegion(startPosition, qMin(blockReadFromBD, sequenceLength - startPosition));
         QByteArray readedData = seq.getSequenceData(readRegion);
-        ma.appendChars(rowIndex, afterPos, readedData.constData(), readedData.size());
+        ma->appendChars(rowIndex, afterPos, readedData.constData(), readedData.size());
         afterPos += readRegion.length;
         CHECK_OP(os, );
     }
@@ -137,19 +137,19 @@ void appendSequenceToAlignmentRow(MAlignment &ma, int rowIndex, int afterPos, co
 
 } // unnamed namespace
 
-MAlignment MSAUtils::seq2ma(const QList<GObject *> &list, U2OpStatus &os, bool useGenbankHeader) {
+MultipleSequenceAlignment MSAUtils::seq2ma(const QList<GObject *> &list, U2OpStatus &os, bool useGenbankHeader) {
     QList<U2SequenceObject *> dnaList;
     QStringList nameList;
 
-    MAlignmentObject *obj = prepareSequenceHeadersList(list, useGenbankHeader, dnaList, nameList);
+    MultipleSequenceAlignmentObject *obj = prepareSequenceHeadersList(list, useGenbankHeader, dnaList, nameList);
     if (NULL != obj) {
-        return obj->getMAlignment();
+        return obj->getMsaCopy();
     }
 
-    MAlignment ma(MA_OBJECT_NAME);
+    MultipleSequenceAlignment ma(MA_OBJECT_NAME);
 
     int i = 0;
-    SAFE_POINT(dnaList.size() == nameList.size(), "DNA list size differs from name list size", MAlignment());
+    SAFE_POINT(dnaList.size() == nameList.size(), "DNA list size differs from name list size", MultipleSequenceAlignment());
     QListIterator<U2SequenceObject *> listIterator(dnaList);
     QListIterator<QString> nameIterator(nameList);
     while (listIterator.hasNext()) {
@@ -158,34 +158,33 @@ MAlignment MSAUtils::seq2ma(const QList<GObject *> &list, U2OpStatus &os, bool u
 
         const DNAAlphabet *alphabet = seq.getAlphabet();
         updateAlignmentAlphabet(ma, alphabet, os);
-        CHECK_OP(os, MAlignment());
+        CHECK_OP(os, MultipleSequenceAlignment());
 
-        ma.addRow(objName, QByteArray(""), os);
-        CHECK_OP(os, MAlignment());
+        ma->addRow(objName, QByteArray(""));
 
-        SAFE_POINT(i < ma.getNumRows(), "Row count differ from expected after adding row", MAlignment());
+        SAFE_POINT(i < ma->getNumRows(), "Row count differ from expected after adding row", MultipleSequenceAlignment());
         appendSequenceToAlignmentRow(ma, i, 0, seq, os);
-        CHECK_OP(os, MAlignment());
+        CHECK_OP(os, MultipleSequenceAlignment());
         i++;
     }
 
     return ma;
 }
 
-void MSAUtils::updateAlignmentAlphabet(MAlignment& ma, const DNAAlphabet* alphabet, U2OpStatus& os) {
-    const DNAAlphabet* al = ma.getAlphabet();
+void MSAUtils::updateAlignmentAlphabet(MultipleSequenceAlignment& ma, const DNAAlphabet* alphabet, U2OpStatus& os) {
+    const DNAAlphabet* al = ma->getAlphabet();
     if (al == NULL) {
         al = alphabet;
     } else {
         al = U2AlphabetUtils::deriveCommonAlphabet(al, alphabet);
         if (al == NULL) {
-            if (ma.getAlphabet() == NULL && alphabet == NULL){
+            if (ma->getAlphabet() == NULL && alphabet == NULL){
                 os.setError(tr("Alphabets of the alignment and the sequence cannot be derived"));
                 return;
             }
-            if (ma.getAlphabet() != NULL && ma.getAlphabet()->getType() == DNAAlphabet_AMINO && (alphabet == NULL || alphabet->isNucleic())) {
-                al = ma.getAlphabet();
-            } else if (ma.getAlphabet() != NULL && ma.getAlphabet()->getId() == BaseDNAAlphabetIds::NUCL_DNA_EXTENDED()) {
+            if (ma->getAlphabet() != NULL && ma->getAlphabet()->getType() == DNAAlphabet_AMINO && (alphabet == NULL || alphabet->isNucleic())) {
+                al = ma->getAlphabet();
+            } else if (ma->getAlphabet() != NULL && ma->getAlphabet()->getId() == BaseDNAAlphabetIds::NUCL_DNA_EXTENDED()) {
                 al = alphabet;
             } else {
                 os.setError(tr("Sequences have different alphabets."));
@@ -193,17 +192,17 @@ void MSAUtils::updateAlignmentAlphabet(MAlignment& ma, const DNAAlphabet* alphab
             }
         }
     }
-    ma.setAlphabet(al);
+    ma->setAlphabet(al);
 }
 
-QList<DNASequence> MSAUtils::ma2seq(const MAlignment& ma, bool trimGaps) {
+QList<DNASequence> MSAUtils::ma2seq(const MultipleSequenceAlignment& ma, bool trimGaps) {
     QList<DNASequence> lst;
-    QBitArray gapCharMap = TextUtils::createBitMap(MAlignment_GapChar);
-    int len = ma.getLength();
-    const DNAAlphabet* al = ma.getAlphabet();
+    QBitArray gapCharMap = TextUtils::createBitMap(U2Msa::GAP_CHAR);
+    int len = ma->getLength();
+    const DNAAlphabet* al = ma->getAlphabet();
     U2OpStatus2Log os;
-    foreach(const MAlignmentRow& row, ma.getRows()) {
-        DNASequence s(row.getName(), row.toByteArray(len, os), al);
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
+        DNASequence s(row->getName(), row->toByteArray(os, len), al);
         if (trimGaps) {
             int newLen = TextUtils::remove(s.seq.data(), s.length(), gapCharMap);
             s.seq.resize(newLen);
@@ -214,19 +213,18 @@ QList<DNASequence> MSAUtils::ma2seq(const MAlignment& ma, bool trimGaps) {
 }
 
 
-bool MSAUtils::checkPackedModelSymmetry(MAlignment& ali, U2OpStatus& ti) {
-    if (ali.getLength() == 0) {
+bool MSAUtils::checkPackedModelSymmetry(const MultipleSequenceAlignment& ali, U2OpStatus& ti) {
+    if (ali->getLength() == 0) {
         ti.setError(tr("Alignment is empty!"));
         return false;
     }
-    int coreLen = ali.getLength();
+    int coreLen = ali->getLength();
     if (coreLen == 0) {
         ti.setError(tr("Alignment is empty!"));
         return false;
     }
-    for (int i=0, n = ali.getNumRows(); i < n; i++) {
-        const MAlignmentRow& row = ali.getRow(i);
-        int rowCoreLength = row.getCoreLength();
+    for (int i=0, n = ali->getNumRows(); i < n; i++) {
+        int rowCoreLength = ali->getMsaRow(i)->getCoreLength();
         if (rowCoreLength > coreLen) {
             ti.setError(tr("Sequences in alignment have different sizes!"));
             return false;
@@ -235,12 +233,11 @@ bool MSAUtils::checkPackedModelSymmetry(MAlignment& ali, U2OpStatus& ti) {
     return true;
 }
 
-int MSAUtils::getRowIndexByName( const MAlignment& ma, const QString& name )
-{
+int MSAUtils::getRowIndexByName(const MultipleSequenceAlignment &ma, const QString &name) {
     int idx = 0;
 
-    foreach(const MAlignmentRow& row, ma.getRows()) {
-        if (row.getName() == name) {
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
+        if (row->getName() == name) {
             return idx;
         }
         ++idx;
@@ -281,7 +278,7 @@ QList<U2Sequence> getDbSequences(const QList<GObject *> &objects) {
 
 }
 
-MAlignmentObject * MSAUtils::seqObjs2msaObj(const QList<GObject *> &objects, const QVariantMap &hints, U2OpStatus &os, bool shallowCopy) {
+MultipleSequenceAlignmentObject * MSAUtils::seqObjs2msaObj(const QList<GObject *> &objects, const QVariantMap &hints, U2OpStatus &os, bool shallowCopy) {
     CHECK(!objects.isEmpty(), NULL);
 
     int firstSeqObjPos = -1;
@@ -295,17 +292,17 @@ MAlignmentObject * MSAUtils::seqObjs2msaObj(const QList<GObject *> &objects, con
     Q_UNUSED(opBlock);
 
     const bool useGenbankHeader = hints.value(ObjectConvertion_UseGenbankHeader, false).toBool();
-    MAlignment ma = seq2ma(objects, os, useGenbankHeader);
+    MultipleSequenceAlignment ma = seq2ma(objects, os, useGenbankHeader);
     CHECK_OP(os, NULL);
-    CHECK(!ma.isEmpty(), NULL);
+    CHECK(!ma->isEmpty(), NULL);
 
     const QList<U2Sequence> sequencesInDB = shallowCopy ? getDbSequences(objects) : QList<U2Sequence>();
 
     const QString dstFolder = hints.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    return MAlignmentImporter::createAlignment(dbiRef, dstFolder, ma, os, sequencesInDB);
+    return MultipleSequenceAlignmentImporter::createAlignment(dbiRef, dstFolder, ma, os, sequencesInDB);
 }
 
-MAlignmentObject* MSAUtils::seqDocs2msaObj(QList<Document*> docs, const QVariantMap& hints, U2OpStatus& os){
+MultipleSequenceAlignmentObject* MSAUtils::seqDocs2msaObj(QList<Document*> docs, const QVariantMap& hints, U2OpStatus& os){
     CHECK(!docs.isEmpty(), NULL);
     QList<GObject*> objects;
     foreach(Document* doc, docs){
@@ -314,23 +311,23 @@ MAlignmentObject* MSAUtils::seqDocs2msaObj(QList<Document*> docs, const QVariant
     return seqObjs2msaObj(objects, hints, os);
 }
 
-QList<qint64> MSAUtils::compareRowsAfterAlignment(const MAlignment& origMsa, MAlignment& newMsa, U2OpStatus& os) {
+QList<qint64> MSAUtils::compareRowsAfterAlignment(const MultipleSequenceAlignment& origMsa, MultipleSequenceAlignment& newMsa, U2OpStatus& os) {
     QList<qint64> rowsOrder;
-    const QList<MAlignmentRow> origMsaRows = origMsa.getRows();
-    for (int i = 0, n = newMsa.getNumRows(); i < n; ++i) {
-        const MAlignmentRow& newMsaRow = newMsa.getRow(i);
-        QString rowName = newMsaRow.getName().replace(" ", "_");
+    const QList<MultipleSequenceAlignmentRow> origMsaRows = origMsa->getMsaRows();
+    for (int i = 0, n = newMsa->getNumRows(); i < n; ++i) {
+        const MultipleSequenceAlignmentRow newMsaRow = newMsa->getMsaRow(i);
+        QString rowName = newMsaRow->getName().replace(" ", "_");
 
         bool rowFound = false;
-        foreach (const MAlignmentRow &origMsaRow, origMsaRows) {
-            if (origMsaRow.getName().replace(" ", "_") == rowName && origMsaRow.getSequence().seq == newMsaRow.getSequence().seq) {
+        foreach (const MultipleSequenceAlignmentRow &origMsaRow, origMsaRows) {
+            if (origMsaRow->getName().replace(" ", "_") == rowName && origMsaRow->getSequence().seq == newMsaRow->getSequence().seq) {
                 rowFound = true;
-                qint64 rowId = origMsaRow.getRowDBInfo().rowId;
-                newMsa.setRowId(i, rowId);
+                qint64 rowId = origMsaRow->getRowDbInfo().rowId;
+                newMsa->setRowId(i, rowId);
                 rowsOrder.append(rowId);
 
-                U2DataId sequenceId = origMsaRow.getRowDBInfo().sequenceId;
-                newMsa.setSequenceId(i, sequenceId);
+                U2DataId sequenceId = origMsaRow->getRowDbInfo().sequenceId;
+                newMsa->setSequenceId(i, sequenceId);
 
                 break;
             }
@@ -359,13 +356,20 @@ U2MsaRow MSAUtils::copyRowFromSequence(DNASequence dnaSeq, const U2DbiRef &dstDb
     row.rowId = -1; // set the ID automatically
 
     QByteArray oldSeqData = dnaSeq.seq;
-    int tailGapsIndex = QRegExp(MAlignment_TailedGapsPattern).indexIn(oldSeqData);
-    if (tailGapsIndex >= 0) {
+    int tailGapsIndex = 0;
+    for (tailGapsIndex = oldSeqData.length() - 1; tailGapsIndex >= 0; tailGapsIndex--) {
+        if (U2Msa::GAP_CHAR != oldSeqData[tailGapsIndex]) {
+            tailGapsIndex++;
+            break;
+        }
+    }
+
+    if (tailGapsIndex < oldSeqData.length()) {
         oldSeqData.chop(oldSeqData.length() - tailGapsIndex);
     }
 
     dnaSeq.seq.clear();
-    MsaDbiUtils::splitBytesToCharsAndGaps(oldSeqData, dnaSeq.seq, row.gaps);
+    MaDbiUtils::splitBytesToCharsAndGaps(oldSeqData, dnaSeq.seq, row.gaps);
     U2Sequence seq = U2SequenceUtils::copySequence(dnaSeq, dstDbi, U2ObjectDbi::ROOT_FOLDER, os);
     CHECK_OP(os, row);
 
@@ -377,7 +381,7 @@ U2MsaRow MSAUtils::copyRowFromSequence(DNASequence dnaSeq, const U2DbiRef &dstDb
 }
 
 
-void MSAUtils::copyRowFromSequence(MAlignmentObject *msaObj, U2SequenceObject *seqObj, U2OpStatus &os) {
+void MSAUtils::copyRowFromSequence(MultipleSequenceAlignmentObject *msaObj, U2SequenceObject *seqObj, U2OpStatus &os) {
     CHECK_EXT(NULL != msaObj, os.setError("NULL msa object"), );
 
     U2MsaRow row = copyRowFromSequence(seqObj, msaObj->getEntityRef().dbiRef, os);
@@ -391,26 +395,61 @@ void MSAUtils::copyRowFromSequence(MAlignmentObject *msaObj, U2SequenceObject *s
     con.dbi->getMsaDbi()->addRow(entityRef.entityId, -1, row, os);
 }
 
-MAlignment MSAUtils::setUniqueRowNames(const MAlignment &ma) {
-    MAlignment res = ma;
-    int rowNumber = res.getNumRows();
+MultipleSequenceAlignment MSAUtils::setUniqueRowNames(const MultipleSequenceAlignment &ma) {
+    MultipleSequenceAlignment res = ma->getExplicitCopy();
+    int rowNumber = res->getNumRows();
     for (int i = 0; i < rowNumber; i++) {
-        res.renameRow(i, QString::number(i));
+        res->renameRow(i, QString::number(i));
     }
     return res;
 }
 
-bool MSAUtils::restoreRowNames(MAlignment &ma, const QStringList &names) {
-    int rowNumber = ma.getNumRows();
+bool MSAUtils::restoreRowNames(MultipleSequenceAlignment &ma, const QStringList &names) {
+    int rowNumber = ma->getNumRows();
     CHECK( rowNumber == names.size(), false);
 
-    QStringList oldNames = ma.getRowNames();
+    QStringList oldNames = ma->getRowNames();
     for (int i = 0; i < rowNumber; i++) {
         int idx = oldNames[i].toInt();
         CHECK( 0 <= idx && idx <= rowNumber, false);
-        ma.renameRow(i, names[idx]);
+        ma->renameRow(i, names[idx]);
     }
     return true;
 }
 
-}//namespace
+QList<U2Region> MSAUtils::getColumnsWithGaps(const U2MsaListGapModel &maGapModel, int length, int requiredGapsCount) {
+    const int rowsCount = maGapModel.size();
+    if (-1 == requiredGapsCount) {
+        requiredGapsCount = rowsCount;
+    }
+
+    QList<U2Region> regionsToDelete;
+    for (int columnNumber = 0; columnNumber < length; columnNumber++) {
+        int gapCount = 0;
+        for (int j = 0; j < rowsCount; j++) {
+            if (MsaRowUtils::isGap(length, maGapModel[j], columnNumber)) {
+                gapCount++;
+            }
+        }
+
+        if (gapCount >= requiredGapsCount) {
+            if (!regionsToDelete.isEmpty() && regionsToDelete.last().endPos() == static_cast<qint64>(columnNumber)) {
+                regionsToDelete.last().length++;
+            } else {
+                regionsToDelete << U2Region(columnNumber, 1);
+            }
+        }
+    }
+
+    return regionsToDelete;
+}
+
+void MSAUtils::removeColumnsWithGaps(MultipleSequenceAlignment &msa, int requiredGapsCount) {
+    GTIMER(c, t, "MSAUtils::removeColumnsWithGaps");
+    const QList<U2Region> regionsToDelete = getColumnsWithGaps(msa->getGapModel(), msa->getLength(), requiredGapsCount);
+    for (int i = regionsToDelete.size() - 1; i >= 0; i--) {
+        msa->removeRegion(regionsToDelete[i].startPos, 0, regionsToDelete[i].length, msa->getNumRows(), true);
+    }
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MSAUtils.h b/src/corelibs/U2Core/src/util/MSAUtils.h
index df1c576..973752f 100644
--- a/src/corelibs/U2Core/src/util/MSAUtils.h
+++ b/src/corelibs/U2Core/src/util/MSAUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,43 +22,37 @@
 #ifndef _U2_MSA_UTILS_H_
 #define _U2_MSA_UTILS_H_
 
-#include <U2Core/global.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 namespace U2 {
 
-class GObject;
-class MAlignment;
-class MAlignmentRow;
-class U2OpStatus;
-
 class U2CORE_EXPORT MSAUtils : public QObject {
     Q_OBJECT
 public:
 
-    static bool equalsIgnoreGaps(const MAlignmentRow& row, int startPos, const QByteArray& pattern, int &alternateLen);
+    static bool equalsIgnoreGaps(const MultipleSequenceAlignmentRow& row, int startPos, const QByteArray& pattern, int &alternateLen);
 
-    static int getPatternSimilarityIgnoreGaps(const MAlignmentRow& row, int startPos, const QByteArray& pattern, int &alternateLen);
+    static int getPatternSimilarityIgnoreGaps(const MultipleSequenceAlignmentRow& row, int startPos, const QByteArray& pattern, int &alternateLen);
 
-    static MAlignment seq2ma(const QList<GObject*>& dnas, U2OpStatus& os, bool useGenbankHeader = false);
+    static MultipleSequenceAlignment seq2ma(const QList<GObject*>& dnas, U2OpStatus& os, bool useGenbankHeader = false);
 
-    static MAlignment seq2ma(const QList<DNASequence>& dnas, U2OpStatus& os);
+    static MultipleSequenceAlignment seq2ma(const QList<DNASequence>& dnas, U2OpStatus& os);
 
-    static QList<DNASequence> ma2seq(const MAlignment& ma, bool trimGaps);
+    static QList<DNASequence> ma2seq(const MultipleSequenceAlignment& ma, bool trimGaps);
 
     // sets alphabet if no alignment alphabet was set; checks is the new alphabet equal old alphabet, otherwise sets error
-    static void updateAlignmentAlphabet(MAlignment& ma, const DNAAlphabet* a, U2OpStatus& os);
+    static void updateAlignmentAlphabet(MultipleSequenceAlignment& ma, const DNAAlphabet* a, U2OpStatus& os);
 
     // Returns row index or -1 if name is not present
-    static int getRowIndexByName(const MAlignment& ma, const QString& name);
+    static int getRowIndexByName(const MultipleSequenceAlignment &ma, const QString& name);
 
     //checks that alignment is not empty and all packed sequence parts has equal length
-    static bool checkPackedModelSymmetry(MAlignment& ali, U2OpStatus& ti);
+    static bool checkPackedModelSymmetry(const MultipleSequenceAlignment& ali, U2OpStatus& ti);
 
-    static MAlignmentObject * seqDocs2msaObj(QList<Document*> doc, const QVariantMap& hints, U2OpStatus& os);
-    static MAlignmentObject * seqObjs2msaObj(const QList<GObject*>& objects, const QVariantMap& hints, U2OpStatus& os, bool shallowCopy = false);
+    static MultipleSequenceAlignmentObject * seqDocs2msaObj(QList<Document*> doc, const QVariantMap& hints, U2OpStatus& os);
+    static MultipleSequenceAlignmentObject * seqObjs2msaObj(const QList<GObject*>& objects, const QVariantMap& hints, U2OpStatus& os, bool shallowCopy = false);
 
     /**
      * Compares rows in the 'origMsa' and 'newMsa' by names of the sequences.
@@ -70,22 +64,24 @@ public:
      * Note, that 'newMsa' may contain less rows than 'origMsa'
      * (e.g. ClustalO may decrease the number of sequences after the alignment).
      */
-    static QList<qint64> compareRowsAfterAlignment(const MAlignment& origMsa, MAlignment& newMsa, U2OpStatus& os);
-    static void copyRowFromSequence(MAlignmentObject *msaObj, U2SequenceObject *seqObj, U2OpStatus &os);
+    static QList<qint64> compareRowsAfterAlignment(const MultipleSequenceAlignment& origMsa, MultipleSequenceAlignment& newMsa, U2OpStatus& os);
+    static void copyRowFromSequence(MultipleSequenceAlignmentObject *msaObj, U2SequenceObject *seqObj, U2OpStatus &os);
     static U2MsaRow copyRowFromSequence(U2SequenceObject *seqObj, const U2DbiRef &dstDbi, U2OpStatus &os);
     static U2MsaRow copyRowFromSequence(DNASequence seq, const U2DbiRef &dstDbi, U2OpStatus &os);
 
-    static MAlignment setUniqueRowNames(const MAlignment& ma);
+    static MultipleSequenceAlignment setUniqueRowNames(const MultipleSequenceAlignment& ma);
     /**
       * Renames rows in the 'ma' to 'names' according to the following assumptions:
       *   1) 'ma' row names are integers from [0..n - 1] interval,
       *      where n is equal to row number of 'ma';
       *   2) Row name 'i' will be renamed to 'names[i]' value;
       **/
-    static bool restoreRowNames(MAlignment& ma, const QStringList& names);
-};
+    static bool restoreRowNames(MultipleSequenceAlignment& ma, const QStringList& names);
 
+    static QList<U2Region> getColumnsWithGaps(const U2MsaListGapModel &maGapModel, int length, int requiredGapsCount = -1);
+    static void removeColumnsWithGaps(MultipleSequenceAlignment &msa, int requiredGapsCount = -1);
+};
 
-}//namespace
+}   // namespace U2
 
 #endif
diff --git a/src/corelibs/U2Core/src/util/MaIterator.cpp b/src/corelibs/U2Core/src/util/MaIterator.cpp
new file mode 100644
index 0000000..787d82b
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MaIterator.cpp
@@ -0,0 +1,154 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/U2SafePoints.h>
+
+#include "MaIterator.h"
+
+namespace U2 {
+
+const qint64 MaIterator::INVALID_POSITION = -1;
+
+MaIterator::MaIterator(const MultipleAlignment &ma, NavigationDirection direction, const QList<int> &_rowsIndexes)
+    : ma(ma),
+      rowsIndexes(_rowsIndexes),
+      direction(direction),
+      isCircular(false),
+      coreRegionsOnly(false),
+      position(-1),
+      maSquare(static_cast<qint64>(ma->getLength()) * rowsIndexes.size())
+{
+    if (rowsIndexes.isEmpty()) {
+        for (int index = 0; index << ma->getNumRows(); index++) {
+            rowsIndexes << index;
+        }
+        maSquare = static_cast<qint64>(ma->getLength()) * rowsIndexes.size();
+    }
+}
+
+bool MaIterator::hasNext() const {
+    CHECK(!ma->isEmpty(), false);
+    return INVALID_POSITION != getNextPosition();
+}
+
+char MaIterator::next() {
+    SAFE_POINT(hasNext(), "Out of boundaries", U2Msa::INVALID_CHAR);
+    return *(operator ++());
+}
+
+MaIterator &MaIterator::operator ++() {
+    SAFE_POINT(hasNext(), "Out of boundaries", *this);
+    position = getNextPosition();
+    SAFE_POINT(isInRange(position), "Out of boundaries", *this);
+    return *this;
+}
+
+char MaIterator::operator *() {
+    SAFE_POINT(isInRange(position), "Out of boundaries", U2Msa::INVALID_CHAR);
+    const QPoint maPoint = getMaPoint();
+    SAFE_POINT(0 <= maPoint.x() && maPoint.x() < ma->getLength() &&
+               0 <= maPoint.y() && maPoint.y() < ma->getNumRows(), "Out of boundaries", U2Msa::INVALID_CHAR);
+    return ma->charAt(maPoint.y(), maPoint.x());
+}
+
+bool MaIterator::operator ==(const MaIterator &other) const {
+    return ma == other.ma && position == other.position;
+}
+
+void MaIterator::setCircular(bool isCircular) {
+    this->isCircular = isCircular;
+}
+
+void MaIterator::setIterateInCoreRegionsOnly(bool coreRegionsOnly) {
+    this->coreRegionsOnly = coreRegionsOnly;
+}
+
+void MaIterator::setMaPoint(const QPoint &maPoint) {
+    const qint64 newPosition = maPoint.y() * ma->getLength() + maPoint.x();
+    SAFE_POINT(isInRange(newPosition), "The new position is out of boundaries", );
+    position = newPosition;
+}
+
+void MaIterator::setDirection(NavigationDirection newDirection) {
+    direction = newDirection;
+}
+
+QPoint MaIterator::getMaPoint() const {
+    SAFE_POINT(isInRange(position), "Out of boundaries", QPoint(-1, -1));
+    return QPoint(getColumnNumber(position), getRowNumber(position));
+}
+
+bool MaIterator::isInRange(qint64 position) const {
+    return (0 <= position && position < maSquare);
+}
+
+qint64 MaIterator::getNextPosition() const {
+    CHECK(!ma->isEmpty(), INVALID_POSITION);
+
+    qint64 nextPosition = position;
+    const int step = getStep(nextPosition);
+    switch (direction) {
+    case Forward:
+        nextPosition += step;
+        break;
+    case Backward:
+        nextPosition -= step;
+        break;
+    default:
+        FAIL("An unknown direction", INVALID_POSITION);
+    }
+
+    if (isCircular) {
+        nextPosition = (nextPosition + maSquare) % maSquare;
+    }
+
+    CHECK(isInRange(nextPosition), INVALID_POSITION);
+    return nextPosition;
+}
+
+int MaIterator::getStep(qint64 position) const {
+    CHECK(!coreRegionsOnly, 1);
+    SAFE_POINT(isInRange(position), "Out of boundaries", 1);
+    const int rowNumber = getRowNumber(position);
+    const int columnNumber = getColumnNumber(position);
+    const MultipleAlignmentRow row = ma->getRow(rowsIndexes[rowNumber]);
+    CHECK(!row->isTrailingOrLeadingGap(columnNumber), 1);
+    switch (direction) {
+    case Forward:
+        return row->getCoreEnd() <= columnNumber ? ma->getLength() - columnNumber : 1;
+        break;
+    case Backward:
+        return row->getCoreStart() >= columnNumber ? ma->getLength() - columnNumber : 1;
+        break;
+    default:
+        FAIL("An unknown direction", 1);
+    }
+}
+
+int MaIterator::getRowNumber(qint64 position) const {
+    return static_cast<int>(position / ma->getLength());
+}
+
+int MaIterator::getColumnNumber(qint64 position) const {
+    return static_cast<int>(position % ma->getLength());
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MaIterator.h b/src/corelibs/U2Core/src/util/MaIterator.h
new file mode 100644
index 0000000..e7600aa
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MaIterator.h
@@ -0,0 +1,74 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _MA_ITERATOR_H_
+#define _MA_ITERATOR_H_
+
+#include <QPoint>
+
+#include <U2Core/MultipleAlignment.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT MaIterator {
+public:
+    MaIterator(const MultipleAlignment &ma, NavigationDirection direction, const QList<int> &rowsIndexes = QList<int>());
+
+    bool hasNext() const;
+    char next();
+
+    MaIterator &operator ++();
+    char operator *();
+
+    bool operator ==(const MaIterator &other) const;
+    bool operator !=(const MaIterator &other) const;
+
+    void setCircular(bool isCircular);
+    void setIterateInCoreRegionsOnly(bool coreRegionsOnly);
+    void setMaPoint(const QPoint &maPoint);
+    void setDirection(NavigationDirection direction);
+
+    QPoint getMaPoint() const;
+
+protected:
+    bool isInRange(qint64 position) const;
+    qint64 getNextPosition() const;
+    int getStep(qint64 position) const;
+
+    int getRowNumber(qint64 position) const;
+    int getColumnNumber(qint64 position) const;
+
+    const MultipleAlignment ma;
+    QList<int> rowsIndexes;
+    NavigationDirection direction;
+
+    bool isCircular;
+    bool coreRegionsOnly;
+
+    qint64 position;
+    qint64 maSquare;
+
+    static const qint64 INVALID_POSITION;
+};
+
+}   // namespace U2
+
+#endif // _MA_ITERATOR_H_
diff --git a/src/corelibs/U2Core/src/util/MaModificationInfo.cpp b/src/corelibs/U2Core/src/util/MaModificationInfo.cpp
new file mode 100644
index 0000000..b6ced30
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MaModificationInfo.cpp
@@ -0,0 +1,48 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaModificationInfo.h"
+
+namespace U2 {
+
+namespace {
+
+bool _registerMeta() {
+    qRegisterMetaType<MaModificationInfo>("MaModificationInfo");
+    return true;
+}
+
+}
+
+bool MaModificationInfo::registerMeta = _registerMeta();
+
+MaModificationInfo::MaModificationInfo()
+    : rowContentChanged(true),
+      rowListChanged(true),
+      alignmentLengthChanged(true),
+      middleState(false),
+      alphabetChanged(false),
+      type(MaModificationType_User)
+{
+
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MaModificationInfo.h b/src/corelibs/U2Core/src/util/MaModificationInfo.h
new file mode 100644
index 0000000..b90ea0c
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MaModificationInfo.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_MODIFICATION_INFO_H_
+#define _U2_MA_MODIFICATION_INFO_H_
+
+#include <QVariantMap>
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+enum MaModificationType {
+    MaModificationType_User,
+    MaModificationType_Undo,
+    MaModificationType_Redo
+};
+
+class U2CORE_EXPORT MaModificationInfo {
+public:
+    MaModificationInfo();
+
+    bool rowContentChanged;
+    bool rowListChanged;
+    bool alignmentLengthChanged;
+    bool middleState;
+    bool alphabetChanged;
+    QVariantMap hints;
+    QList<qint64> modifiedRowIds;
+    MaModificationType type;
+
+private:
+    static bool registerMeta;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_MODIFICATION_INFO_H_
diff --git a/src/corelibs/U2Core/src/util/McaDbiUtils.cpp b/src/corelibs/U2Core/src/util/McaDbiUtils.cpp
new file mode 100644
index 0000000..27ce8c9
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/McaDbiUtils.cpp
@@ -0,0 +1,375 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DatatypeSerializeUtils.h>
+#include <U2Core/DbiConnection.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNAChromatogram.h>
+#include <U2Core/DNASequence.h>
+#include <U2Core/McaRowInnerData.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MultipleChromatogramAlignment.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2SequenceDbi.h>
+#include <U2Core/U2SequenceUtils.h>
+
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include "McaDbiUtils.h"
+
+namespace U2 {
+
+void McaDbiUtils::updateMca(U2OpStatus &os, const U2EntityRef &mcaRef, const MultipleChromatogramAlignment &mca) {
+    // Move to the MCAImporter
+    // TODO: check, if a transaction or an operation block should be started
+    DbiConnection connection(mcaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2AttributeDbi *attributeDbi = connection.dbi->getAttributeDbi();
+    SAFE_POINT_EXT(NULL != attributeDbi, os.setError("NULL Attribute Dbi"), );
+
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi"), );
+
+    U2SequenceDbi *sequenceDbi = connection.dbi->getSequenceDbi();
+    SAFE_POINT_EXT(NULL != sequenceDbi, os.setError("NULL Sequence Dbi"), );
+
+    const DNAAlphabet *alphabet = mca->getAlphabet();
+    SAFE_POINT_EXT(NULL != alphabet, os.setError("The alignment alphabet is NULL"), );
+
+    //// UPDATE MCA
+    U2Msa dbMca;
+    dbMca.id = mcaRef.entityId;
+    dbMca.visualName = mca->getName();
+    dbMca.alphabet.id = alphabet->getId();
+    dbMca.length = mca->getLength();
+
+    msaDbi->updateMsaName(mcaRef.entityId, mca->getName(), os);
+    CHECK_OP(os, );
+
+    msaDbi->updateMsaAlphabet(mcaRef.entityId, alphabet->getId(), os);
+    CHECK_OP(os, );
+
+    msaDbi->updateMsaLength(mcaRef.entityId, mca->getLength(), os);
+    CHECK_OP(os, );
+
+    //// UPDATE ROWS AND SEQUENCES
+    // Get rows that are currently stored in the database
+    const QList<U2McaRow> currentRows = getMcaRows(os, mcaRef);
+    CHECK_OP(os, );
+
+    QList<qint64> currentRowIds;
+    QList<qint64> newRowsIds = mca->getRowsIds();
+    QList<qint64> eliminatedRows;
+    // TODO: get the mca folder and create child objects there
+    const QString dbFolder = U2ObjectDbi::ROOT_FOLDER;
+
+    foreach (const U2McaRow &currentRow, currentRows) {
+        currentRowIds << currentRow.rowId;
+
+        // Update data for rows with the same row and child objects IDs
+        if (newRowsIds.contains(currentRow.rowId)) {
+            // Update sequence and row info
+            const U2McaRow newRow = mca->getMcaRowByRowId(currentRow.rowId, os)->getRowDbInfo();
+            CHECK_OP(os, );
+
+            if (newRow.chromatogramId != currentRow.chromatogramId ||
+                newRow.sequenceId != currentRow.sequenceId) {
+                // Kill the row from the current alignment, it is incorrect. New row with this ID will be created later.
+                // TODO: replace with specific utils
+                MsaDbiUtils::removeRow(mcaRef, currentRow.rowId, os);
+                CHECK_OP(os, );
+
+                currentRowIds.removeOne(currentRow.rowId);
+                continue;
+            }
+
+            const McaRowMemoryData rowMemoryData = mca->getMcaRowByRowId(newRow.rowId, os)->getRowMemoryData();
+            CHECK_OP(os, );
+
+            msaDbi->updateRowName(mcaRef.entityId, newRow.rowId, rowMemoryData.sequence.getName(), os);
+            CHECK_OP(os, );
+
+            msaDbi->updateRowContent(mcaRef.entityId, newRow.rowId, rowMemoryData.sequence.seq, rowMemoryData.gapModel, os);
+            CHECK_OP(os, );
+
+            ChromatogramUtils::updateChromatogramData(os, mcaRef.entityId, U2EntityRef(mcaRef.dbiRef, newRow.chromatogramId), rowMemoryData.chromatogram);
+            CHECK_OP(os, );
+        } else {
+            // Remove rows that are no more present in the alignment
+            eliminatedRows.append(currentRow.rowId);
+        }
+    }
+
+    msaDbi->removeRows(mcaRef.entityId, eliminatedRows, os);
+    CHECK_OP(os, );
+
+    // Add rows that are stored in memory, but are not present in the database,
+    // remember the rows order
+    QList<qint64> rowsOrder;
+    for (int i = 0, n = mca->getNumRows(); i < n; ++i) {
+        const MultipleChromatogramAlignmentRow mcaRow = mca->getMcaRow(i);
+        U2McaRow dbRow = mcaRow->getRowDbInfo();
+
+        if (!dbRow.hasValidChildObjectIds() || !currentRowIds.contains(dbRow.rowId)) {
+            // Import the child objects
+            const U2EntityRef chromatogramRef = ChromatogramUtils::import(os, connection.dbi->getDbiRef(), dbFolder, mcaRow->getChromatogram());
+            CHECK_OP(os, );
+
+            const U2EntityRef sequenceRef = U2SequenceUtils::import(os, connection.dbi->getDbiRef(), dbFolder, mcaRow->getSequence(), dbMca.alphabet.id);
+            CHECK_OP(os, );
+
+            // Create the row
+            dbRow.rowId = U2MsaRow::INVALID_ROW_ID; // set the row ID automatically
+            dbRow.chromatogramId = chromatogramRef.entityId;
+            dbRow.sequenceId = sequenceRef.entityId;
+            dbRow.gstart = 0;
+            dbRow.gend = mcaRow->getRowLength();
+            dbRow.gaps = mcaRow->getGapModel();
+
+            McaDbiUtils::addRow(os, mcaRef, -1, dbRow);
+            CHECK_OP(os, );
+        }
+        rowsOrder << dbRow.rowId;
+    }
+
+    //// UPDATE ROWS POSITIONS
+    msaDbi->setNewRowsOrder(mcaRef.entityId, rowsOrder, os);
+
+    //// UPDATE ALIGNMENT ATTRIBUTES
+    QVariantMap info = mca->getInfo();
+
+    foreach (const QString &key, info.keys()) {
+        QString value = info.value(key).toString();
+        U2StringAttribute attribute(mcaRef.entityId, key, value);
+
+        attributeDbi->createStringAttribute(attribute, os);
+        CHECK_OP(os, );
+    }
+}
+
+void McaDbiUtils::addRow(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 posInMca, U2McaRow &row) {
+    SAFE_POINT_EXT(row.hasValidChildObjectIds(), os.setError("Invalid child objects references"), );
+
+    DbiConnection connection(mcaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa dbi"), );
+
+    msaDbi->addRow(mcaRef.entityId, posInMca, row, os);
+    CHECK_OP(os, );
+}
+
+void McaDbiUtils::addRows(U2OpStatus &os, const U2EntityRef &mcaRef, QList<U2McaRow> &rows) {
+    for (int i = 0; i < rows.size(); i++) {
+        addRow(os, mcaRef, -1, rows[i]);
+        CHECK_OP(os, );
+    }
+}
+
+QList<U2McaRow> McaDbiUtils::getMcaRows(U2OpStatus &os, const U2EntityRef &mcaRef) {
+    QList<U2McaRow> mcaRows;
+
+    DbiConnection connection(mcaRef.dbiRef, os);
+    CHECK_OP(os, mcaRows);
+
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("MSA dbi is NULL"), mcaRows);
+
+    const QList<U2MsaRow> msaRows = msaDbi->getRows(mcaRef.entityId, os);
+    CHECK_OP(os, mcaRows);
+
+    foreach (const U2MsaRow &msaRow, msaRows) {
+        U2McaRow mcaRow(msaRow);
+        mcaRow.chromatogramId = ChromatogramUtils::getChromatogramIdByRelatedSequenceId(os, U2EntityRef(mcaRef.dbiRef, msaRow.sequenceId)).entityId;
+        CHECK_OP(os, mcaRows);
+        mcaRows << mcaRow;
+    }
+
+    return mcaRows;
+}
+
+U2McaRow McaDbiUtils::getMcaRow(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 rowId) {
+    DbiConnection connection(mcaRef.dbiRef, os);
+    CHECK_OP(os, U2McaRow());
+
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("MSA dbi is NULL"), U2McaRow());
+
+    const U2MsaRow msaRow = msaDbi->getRow(mcaRef.entityId, rowId, os);
+    CHECK_OP(os, U2McaRow());
+
+    U2McaRow mcaRow(msaRow);
+    mcaRow.chromatogramId = ChromatogramUtils::getChromatogramIdByRelatedSequenceId(os, U2EntityRef(mcaRef.dbiRef, msaRow.sequenceId)).entityId;
+    CHECK_OP(os, mcaRow);
+
+    return mcaRow;
+}
+
+void McaDbiUtils::removeRow(const U2EntityRef& mcaRef, qint64 rowId, U2OpStatus& os) {
+    // Prepare the connection
+    DbiConnection con(mcaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
+
+    // Remove the row
+    msaDbi->removeRow(mcaRef.entityId, rowId, os);
+    // SANGER_TODO: remove chromatogram as well
+}
+
+void McaDbiUtils::removeCharacters(const U2EntityRef &mcaRef, const QList<qint64> &rowIds, qint64 pos, qint64 count, U2OpStatus &os) {
+    // Check parameters
+    CHECK_EXT(pos >= 0, os.setError(QString("Negative MSA pos: %1").arg(pos)), );
+    SAFE_POINT(count > 0, QString("Wrong MCA base count: %1").arg(count), );
+
+    // Prepare the connection
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(mcaRef.dbiRef, os));
+    SAFE_POINT_OP(os, );
+    U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
+    U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
+
+    MaDbiUtils::validateRowIds(msaDbi, mcaRef.entityId, rowIds, os);
+    CHECK_OP(os, );
+
+    // Remove region for each row from the list
+    foreach (qint64 rowId, rowIds) {
+        U2McaRow row = getMcaRow(os, mcaRef, rowId);
+        SAFE_POINT_OP(os, );
+
+        U2Region seqReg(0, row.length);
+        QByteArray seq = sequenceDbi->getSequenceData(row.sequenceId, seqReg, os);
+        SAFE_POINT_OP(os, );
+
+        if (U2Msa::GAP_CHAR != MsaRowUtils::charAt(seq, row.gaps, pos)) {
+            qint64 startPosInSeq = -1;
+            qint64 endPosInSeq= -1;
+            MaDbiUtils::getStartAndEndSequencePositions(seq, row.gaps,
+                                                        pos, count,
+                                                        startPosInSeq, endPosInSeq);
+
+            DNAChromatogram chrom = ChromatogramUtils::exportChromatogram(os, U2EntityRef(mcaRef.dbiRef, row.chromatogramId));
+            ChromatogramUtils::removeBaseCalls(os, chrom, startPosInSeq, endPosInSeq);
+            ChromatogramUtils::updateChromatogramData(os, mcaRef.entityId, U2EntityRef(mcaRef.dbiRef, row.chromatogramId), chrom);
+        }
+
+        // Calculate the modified row
+        MsaDbiUtils::removeCharsFromRow(seq, row.gaps, pos, count);
+
+        msaDbi->updateRowContent(mcaRef.entityId, rowId, seq, row.gaps, os);
+        SAFE_POINT_OP(os, );
+    }
+}
+
+void McaDbiUtils::replaceCharacterInRow(const U2EntityRef& mcaRef, qint64 rowId, qint64 pos, char newChar, U2OpStatus& os) {
+    // Check parameters
+    CHECK_EXT(pos >= 0, os.setError(QString("Negative MSA pos: %1").arg(pos)), );
+
+    // Prepare the connection
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(mcaRef.dbiRef, os));
+    CHECK_OP(os, );
+    U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
+    U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
+
+    MaDbiUtils::validateRowIds(msaDbi, mcaRef.entityId, QList<qint64>() << rowId, os);
+    CHECK_OP(os, );
+
+    U2McaRow row = getMcaRow(os, mcaRef, rowId);
+    CHECK_OP(os, );
+    qint64 msaLength = msaDbi->getMsaLength(mcaRef.entityId, os);
+    CHECK(pos < msaLength,);
+
+    U2Region seqReg(0, row.length);
+    QByteArray seq = sequenceDbi->getSequenceData(row.sequenceId, seqReg, os);
+    CHECK_OP(os, );
+
+    SAFE_POINT(pos >= 0, "Incorrect position!", );
+
+    qint64 posInSeq = -1;
+    qint64 endPosInSeq = -1;
+
+    MaDbiUtils::getStartAndEndSequencePositions(seq, row.gaps, pos, 1, posInSeq, endPosInSeq);
+    if (posInSeq >= 0 && endPosInSeq > posInSeq) {// not gap
+        U2OpStatus2Log os;
+        DNASequenceUtils::replaceChars(seq, posInSeq, QByteArray(1, newChar), os);
+        SAFE_POINT_OP(os, );
+    } else {
+        U2OpStatus2Log os;
+        DNAChromatogram chrom = ChromatogramUtils::exportChromatogram(os, U2EntityRef(mcaRef.dbiRef, row.chromatogramId));
+        ChromatogramUtils::insertBase(chrom, posInSeq, row.gaps, pos);
+        ChromatogramUtils::updateChromatogramData(os, mcaRef.entityId, U2EntityRef(mcaRef.dbiRef, row.chromatogramId), chrom);
+        SAFE_POINT_OP(os, );
+
+        DNASequenceUtils::insertChars(seq, posInSeq, QByteArray(1, newChar), os);
+        SAFE_POINT_OP(os, );
+        MaDbiUtils::calculateGapModelAfterReplaceChar(row.gaps, pos);
+    }
+
+    msaDbi->updateRowContent(mcaRef.entityId, rowId, seq, row.gaps, os);
+    CHECK_OP(os, );
+}
+
+void McaDbiUtils::removeRegion(const U2EntityRef& entityRef, const qint64 rowId, qint64 pos, qint64 count, U2OpStatus& os) {
+    // Check parameters
+    CHECK_EXT(pos >= 0, os.setError(QString("Negative MCA pos: %1").arg(pos)), );
+    CHECK_EXT(count > 0, os.setError(QString("Wrong MCA base count: %1").arg(count)), );
+
+    // Prepare the connection
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(entityRef.dbiRef, os));
+    SAFE_POINT_OP(os, );
+    U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
+    U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
+
+    // Remove region for the row from
+    U2McaRow row = McaDbiUtils::getMcaRow(os, entityRef, rowId);
+    SAFE_POINT_OP(os, );
+
+    U2Region seqReg(0, row.length);
+
+    QByteArray seq = sequenceDbi->getSequenceData(row.sequenceId, seqReg, os);
+    SAFE_POINT_OP(os, );
+
+    qint64 startPosInSeq = -1;
+    qint64 endPosInSeq = -1;
+    MaDbiUtils::getStartAndEndSequencePositions(seq, row.gaps,
+    pos, count,
+    startPosInSeq, endPosInSeq);
+
+    DNAChromatogram chrom = ChromatogramUtils::exportChromatogram(os, U2EntityRef(entityRef.dbiRef, row.chromatogramId));
+    ChromatogramUtils::removeRegion(os, chrom, startPosInSeq, endPosInSeq);
+    ChromatogramUtils::updateChromatogramData(os, entityRef.entityId, U2EntityRef(entityRef.dbiRef, row.chromatogramId), chrom);
+
+    // Calculate the modified row
+    MsaDbiUtils::removeCharsFromRow(seq, row.gaps, pos, count);
+
+    msaDbi->updateRowContent(entityRef.entityId, rowId, seq, row.gaps, os);
+    SAFE_POINT_OP(os, );
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/McaDbiUtils.h b/src/corelibs/U2Core/src/util/McaDbiUtils.h
new file mode 100644
index 0000000..16f994d
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/McaDbiUtils.h
@@ -0,0 +1,52 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_DBI_UTILS_H_
+#define _U2_MCA_DBI_UTILS_H_
+
+#include <U2Core/U2Alphabet.h>
+#include <U2Core/U2Msa.h>
+
+namespace U2 {
+
+class MultipleChromatogramAlignment;
+class U2EntityRef;
+class U2McaRow;
+class U2OpStatus;
+
+class U2CORE_EXPORT McaDbiUtils : public QObject {
+public:
+    static void updateMca(U2OpStatus &os, const U2EntityRef &mcaRef, const MultipleChromatogramAlignment &mca);
+    static void addRow(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 posInMca, U2McaRow &row);
+    static void addRows(U2OpStatus &os, const U2EntityRef &mcaRef, QList<U2McaRow> &rows);
+    static QList<U2McaRow> getMcaRows(U2OpStatus &os, const U2EntityRef &mcaRef);
+    static U2McaRow getMcaRow(U2OpStatus &os, const U2EntityRef &mcaRef, qint64 rowId);
+
+    static void removeRow(const U2EntityRef& mcaRef, qint64 rowId, U2OpStatus& os);
+    static void removeCharacters(const U2EntityRef& mcaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os);
+
+    static void replaceCharacterInRow(const U2EntityRef& mcaRef, qint64 rowId, qint64 pos, char newChar, U2OpStatus& os);
+    static void removeRegion(const U2EntityRef& entityRef, const qint64 rowId, qint64 pos, qint64 count, U2OpStatus& os);
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_DBI_UTILS_H_
diff --git a/src/corelibs/U2Core/src/util/McaRowInnerData.cpp b/src/corelibs/U2Core/src/util/McaRowInnerData.cpp
new file mode 100644
index 0000000..4400f46
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/McaRowInnerData.cpp
@@ -0,0 +1,38 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaRowInnerData.h"
+
+namespace U2 {
+
+McaRowMemoryData::McaRowMemoryData()
+    : rowLength(0)
+{
+
+}
+
+McaRowDatabaseData::McaRowDatabaseData()
+    : rowLength(0)
+{
+
+}
+
+}
diff --git a/src/corelibs/U2Core/src/util/McaRowInnerData.h b/src/corelibs/U2Core/src/util/McaRowInnerData.h
new file mode 100644
index 0000000..16df6cc
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/McaRowInnerData.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_ROW_INNER_DATA_H_
+#define _U2_MCA_ROW_INNER_DATA_H_
+
+#include <U2Core/DNAChromatogramObject.h>
+#include <U2Core/DNASequence.h>
+#include <U2Core/U2Mca.h>
+#include <U2Core/U2Sequence.h>
+
+namespace U2 {
+
+class McaRowMemoryData {
+public:
+    McaRowMemoryData();
+
+    DNAChromatogram chromatogram;
+    U2MsaRowGapModel gapModel;
+    DNASequence sequence;
+    qint64 rowLength;
+    QVariantMap additionalInfo;
+};
+
+class McaRowDatabaseData {
+public:
+    McaRowDatabaseData();
+
+    U2Chromatogram chromatogram;
+    U2Sequence sequence;
+    U2MsaRowGapModel gapModel;
+    qint64 rowLength;
+    QVariantMap additionalInfo;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_ROW_INNER_DATA_H_
diff --git a/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp b/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
index 214d085..fe072e5 100644
--- a/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
+++ b/src/corelibs/U2Core/src/util/MsaDbiUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,37 +19,351 @@
  * MA 02110-1301, USA.
  */
 
-#include "MsaDbiUtils.h"
-
-#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/DatatypeSerializeUtils.h>
 #include <U2Core/DNASequenceUtils.h>
-#include <U2Core/MAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2AttributeDbi.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceDbi.h>
-#include <U2Core/U2AttributeDbi.h>
 
+#include "MsaDbiUtils.h"
 
 namespace U2 {
 
 /////////////////////////////////////////////////////////////////
 // Helper-methods to validate parameters
 
+/** Validates 'pos' in an alignment: it must be non-negative and less than or equal to the alignment length */
+bool validatePos(const MultipleSequenceAlignment& al, qint64 pos) {
+    if (pos < 0 || pos > al->getLength()) {
+        coreLog.trace(QString("Invalid position '%1' in '%2' alignment!").arg(pos).arg(al->getName()));
+        return false;
+    }
+    return true;
+}
+
+/** Validates 'count' of characters - it must be positive */
+bool validateCharactersCount(qint64 count) {
+    if (count <= 0) {
+        coreLog.trace(QString("Invalid value of characters count '%1'!").arg(count));
+        return false;
+    }
+    return true;
+}
+
+void MaDbiUtils::splitBytesToCharsAndGaps(const QByteArray& input, QByteArray& seqBytes, QList<U2MsaGap>& gapModel) {
+    bool previousCharIsGap = false;
+    int gapsCount = 0;
+    int gapsOffset = 0;
+
+    for (int i = 0; i < input.count(); ++i) {
+        // A char
+        if ((U2Msa::GAP_CHAR != input.at(i)))
+        {
+            if (previousCharIsGap) {
+                U2MsaGap gap(gapsOffset, gapsCount);
+                gapModel.append(gap);
+                gapsCount = 0;
+            }
+            seqBytes.append(input.at(i));
+            previousCharIsGap = false;
+        }
+        // A gap
+        else {
+            gapsCount++;
+            // A gap before the end of the row
+            if (i < input.count() - 1) {
+                if (!previousCharIsGap) {
+                    gapsOffset = i;
+                }
+                previousCharIsGap = true;
+            }
+            // A gap at the end of the row
+            else {
+                // Correct the offset if there is one gap at the end of the row
+                if (1 == gapsCount) {
+                    gapsOffset = i;
+                }
+                SAFE_POINT(gapsOffset >= 0, "Negative gap offset!", );
+                SAFE_POINT(gapsCount > 0, "Non-positive gap length!", );
+                U2MsaGap gap(gapsOffset, gapsCount);
+                gapModel.append(gap);
+            }
+        }
+    }
+
+    SAFE_POINT(-1 == seqBytes.indexOf(U2Msa::GAP_CHAR), "Row sequence contains gaps!", );
+}
+
+qint64 MaDbiUtils::getMaLength(const U2EntityRef& maRef, U2OpStatus& os) {
+    DbiConnection con(maRef.dbiRef, os);
+    CHECK_OP(os, -1);
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), -1);
+
+    qint64 length = msaDbi->getMsaLength(maRef.entityId, os);
+    CHECK_OP(os, -1);
+
+    return length;
+}
+
+void MaDbiUtils::updateMaLength(const U2EntityRef &maRef, qint64 newLen, U2OpStatus &os) {
+    // Prepare the connection
+    DbiConnection con(maRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
+
+    // Update the data
+    msaDbi->updateMsaLength(maRef.entityId, newLen, os);
+}
+
+U2AlphabetId MaDbiUtils::getMaAlphabet(const U2EntityRef& maRef, U2OpStatus& os) {
+    DbiConnection con(maRef.dbiRef, os);
+    CHECK_OP(os, U2AlphabetId());
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), U2AlphabetId());
+
+    U2AlphabetId alphabet = msaDbi->getMsaAlphabet(maRef.entityId, os);
+    CHECK_OP(os, U2AlphabetId());
+
+    return alphabet;
+}
+
+void MaDbiUtils::updateMaAlphabet(const U2EntityRef& maRef, const U2AlphabetId& alphabet, U2OpStatus& os) {
+    // Prepare the connection
+    SAFE_POINT_EXT(alphabet.isValid(), os.setError("Invalid alphabet was passed !"),);
+    DbiConnection con(maRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
+
+    // Update the data
+    msaDbi->updateMsaAlphabet(maRef.entityId, alphabet, os);
+}
+
+void MaDbiUtils::renameMa(const U2EntityRef& maRef, const QString& newName, U2OpStatus& os) {
+    if (newName.isEmpty()) {
+        os.setError(tr("Can't rename an alignment to an empty name!"));
+    }
+
+    // Prepare the connection
+    DbiConnection con(maRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!",);
+
+    // Update the name
+    msaDbi->updateMsaName(maRef.entityId, newName, os);
+}
+
+void MaDbiUtils::updateRowGapModel(const U2EntityRef& msaRef, qint64 rowId, const QList<U2MsaGap>& gaps, U2OpStatus& os) {
+    // Prepare the connection
+    DbiConnection con(msaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
+
+    // Update the data
+    msaDbi->updateGapModel(msaRef.entityId, rowId, gaps, os);
+}
+
+void MaDbiUtils::updateRowsOrder(const U2EntityRef& meRef, const QList<qint64>& rowsOrder, U2OpStatus& os) {
+    // Prepare the connection
+    DbiConnection con(meRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
+
+    // Update the data
+    msaDbi->setNewRowsOrder(meRef.entityId, rowsOrder, os);
+}
+
+void MaDbiUtils::renameRow(const U2EntityRef& msaRef, qint64 rowId, const QString& newName, U2OpStatus& os) {
+    if (newName.isEmpty()) {
+        os.setError(tr("Can't rename a row to an empty name!"));
+    }
+
+    // Prepare the connection
+    DbiConnection con(msaRef.dbiRef, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!",);
+
+    // Update the row name
+    msaDbi->updateRowName(msaRef.entityId, rowId, newName, os);
+}
+
+void MaDbiUtils::moveRows(const U2EntityRef& msaRef, const QList<qint64>& rowsToMove, const int delta, U2OpStatus& os) {
+    DbiConnection con(msaRef.dbiRef, false, os);
+    CHECK_OP(os, );
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
+
+    if (delta == 0 || rowsToMove.isEmpty()) {
+        return;
+    }
+
+    QList<U2MsaRow> rows = msaDbi->getRows(msaRef.entityId, os);
+    CHECK_OP(os, );
+
+    QList<qint64> rowIds;
+    for (int i = 0; i < rows.length(); ++i) {
+        rowIds << rows[i].rowId;
+    }
+
+    QList<QPair<int, int> > from_To;
+
+    if (delta < 0) {
+        int rowIndex = rowIds.indexOf(rowsToMove.first());
+        if (rowIndex == -1) {
+            os.setError("Invalid row list");
+            return;
+        }
+        int moveToIndex = rowIndex + delta >= 0 ? rowIndex + delta : 0;
+        from_To.append(QPair<int, int>(rowIndex, moveToIndex));
+        for (int i = 1; i < rowsToMove.length(); ++i) {
+            rowIndex = rowIds.indexOf(rowsToMove[i]);
+            if (rowIndex == -1) {
+                os.setError("Invalid row list");
+                return;
+            }
+            if (rowIndex <= from_To[i - 1].first) {
+                os.setError("List of rows to move is not ordered");
+                return;
+            }
+            moveToIndex = rowIndex + delta > from_To[i - 1].second ? rowIndex + delta : from_To[i - 1].second + 1;
+            from_To.append(QPair<int, int>(rowIndex, moveToIndex));
+        }
+    } else {
+        int rowIndex = rowIds.indexOf(rowsToMove.last());
+        if (rowIndex == -1) {
+            os.setError("Invalid row list");
+            return;
+        }
+        int moveToIndex = rowIndex + delta < rowIds.length() ? rowIndex + delta : rowIds.length() - 1;
+        from_To.append(QPair<int, int>(rowIndex, moveToIndex));
+        for (int i = 1; i < rowsToMove.length(); ++i) {
+            rowIndex = rowIds.indexOf(rowsToMove[rowsToMove.length() - i - 1]);
+            if (rowIndex == -1) {
+                os.setError("Invalid row list");
+                return;
+            }
+            if (rowIndex >= from_To[i - 1].first) {
+                os.setError("List of rows to move is not ordered");
+                return;
+            }
+            moveToIndex = rowIndex + delta < from_To[i - 1].second ? rowIndex + delta : from_To[i - 1].second - 1;
+            from_To.append(QPair<int, int>(rowIndex, moveToIndex));
+        }
+    }
+    QPair<int, int> coords;
+    foreach (coords, from_To) {
+        rowIds.move(coords.first, coords.second);
+    }
+    msaDbi->setNewRowsOrder(msaRef.entityId, rowIds, os);
+    CHECK_OP(os, );
+}
+
+void MaDbiUtils::getStartAndEndSequencePositions(const QByteArray &seq, const QList<U2MsaGap> &gaps,
+    qint64 pos, qint64 count,
+    qint64& startPosInSeq, qint64& endPosInSeq) {
+
+    int rowLengthWithoutTrailingGap = MsaRowUtils::getRowLengthWithoutTrailing(seq, gaps);
+    SAFE_POINT(pos < rowLengthWithoutTrailingGap, "Incorrect position!", );
+
+    // Remove chars from the sequence
+    // Calculate start position in the sequence
+    if (U2Msa::GAP_CHAR == MsaRowUtils::charAt(seq, gaps, pos)) {
+        int i = 1;
+        while (U2Msa::GAP_CHAR == MsaRowUtils::charAt(seq, gaps, pos + i)) {
+            if (MsaRowUtils::getRowLength(seq, gaps) == pos + i) {
+                break;
+            }
+            i++;
+        }
+        startPosInSeq = MsaRowUtils::getUngappedPosition(gaps, seq.length(), pos + i);
+    }
+    else {
+        startPosInSeq = MsaRowUtils::getUngappedPosition(gaps, seq.length(), pos);
+    }
+
+    // Calculate end position in the sequence
+    int endRegionPos = pos + count; // non-inclusive
+
+    if (endRegionPos > rowLengthWithoutTrailingGap) {
+        endRegionPos = rowLengthWithoutTrailingGap;
+    }
+
+    if (endRegionPos == rowLengthWithoutTrailingGap) {
+        endPosInSeq = seq.length();
+    }
+    else {
+        if (U2Msa::GAP_CHAR == MsaRowUtils::charAt(seq, gaps, endRegionPos)) {
+            int i = 1;
+            while (U2Msa::GAP_CHAR == MsaRowUtils::charAt(seq, gaps, endRegionPos + i)) {
+                if (MsaRowUtils::getRowLength(seq, gaps) == endRegionPos + i) {
+                    break;
+                }
+                i++;
+            }
+            endPosInSeq = MsaRowUtils::getUngappedPosition(gaps, seq.length(), endRegionPos + i);
+        }
+        else {
+            endPosInSeq = MsaRowUtils::getUngappedPosition(gaps, seq.length(), endRegionPos);
+        }
+    }
+}
+
+DbiConnection * MaDbiUtils::getCheckedConnection(const U2DbiRef &dbiRef, U2OpStatus &os) {
+    QScopedPointer<DbiConnection> con(new DbiConnection(dbiRef, os));
+    CHECK_OP(os, NULL);
+
+    if (NULL == con->dbi) {
+        os.setError("NULL root dbi");
+        return NULL;
+    }
+
+    if (NULL == con->dbi->getMsaDbi()) {
+        os.setError("NULL MSA dbi");
+        return NULL;
+    }
+
+    if (NULL == con->dbi->getSequenceDbi()) {
+        os.setError("NULL sequence dbi");
+        return NULL;
+    }
+    return con.take();
+}
+
 /** Validates that all 'rowIds' contains in the alignment rows */
-bool validateRowIds(const MAlignment& al, const QList<qint64>& rowIds) {
-    QList<qint64> alRowIds = al.getRowsIds();
+bool MaDbiUtils::validateRowIds(const MultipleSequenceAlignment& al, const QList<qint64>& rowIds) {
+    QList<qint64> alRowIds = al->getRowsIds();
     foreach (qint64 rowId, rowIds) {
         if (!alRowIds.contains(rowId)) {
-            coreLog.trace(QString("No row ID '%1' in '%2' alignment!").arg(rowId).arg(al.getName()));
+            coreLog.trace(QString("No row ID '%1' in '%2' alignment!").arg(rowId).arg(al->getName()));
             return false;
         }
     }
     return true;
 }
 
-void validateRowIds(U2MsaDbi *msaDbi, const U2DataId &msaId, const QList<qint64>& rowIds, U2OpStatus &os) {
+void MaDbiUtils::validateRowIds(U2MsaDbi *msaDbi, const U2DataId &msaId, const QList<qint64>& rowIds, U2OpStatus &os) {
     QList<U2MsaRow> allRows = msaDbi->getRows(msaId, os);
     CHECK_OP(os, );
     QList<qint64> allRowIds;
@@ -64,24 +378,6 @@ void validateRowIds(U2MsaDbi *msaDbi, const U2DataId &msaId, const QList<qint64>
     }
 }
 
-/** Validates 'pos' in an alignment: it must be non-negative and less than or equal to the alignment length */
-bool validatePos(const MAlignment& al, qint64 pos) {
-    if (pos < 0 || pos > al.getLength()) {
-        coreLog.trace(QString("Invalid position '%1' in '%2' alignment!").arg(pos).arg(al.getName()));
-        return false;
-    }
-    return true;
-}
-
-/** Validates 'count' of characters - it must be positive */
-bool validateCharactersCount(qint64 count) {
-    if (count <= 0) {
-        coreLog.trace(QString("Invalid value of characters count '%1'!").arg(count));
-        return false;
-    }
-    return true;
-}
-
 /////////////////////////////////////////////////////////////////
 // Helper-methods for additional calculations
 
@@ -280,84 +576,34 @@ qint64 MsaDbiUtils::calculateRowLength(const U2MsaRow& row) {
     qint64 gapsLength = calculateGapsLength(row.gaps);
     return seqLength + gapsLength;
 }
-
-void MsaDbiUtils::mergeConsecutiveGaps(QList<U2MsaGap>& gapModel) {
-    QList<U2MsaGap> newGapModel;
-    if (gapModel.isEmpty()) {
-        return;
-    }
-
-    newGapModel << gapModel[0];
-    int indexInNewGapModel = 0;
-    for (int i = 1; i < gapModel.count(); ++i) {
-        int previousGapEnd = newGapModel[indexInNewGapModel].offset +
-            newGapModel[indexInNewGapModel].gap - 1;
-        int currectGapStart = gapModel[i].offset;
-        SAFE_POINT(currectGapStart > previousGapEnd,
-            "Incorrect gap model during merging consecutive gaps!",);
-        if (currectGapStart == previousGapEnd + 1) {
-            // Merge gaps
-            qint64 newGapLength = newGapModel[indexInNewGapModel].gap + gapModel[i].gap;
-            SAFE_POINT(newGapLength > 0, "Non-positive gap length!", )
-                newGapModel[indexInNewGapModel].gap = newGapLength;
-        }
-        else {
-            // Add the gap to the list
-            newGapModel << gapModel[i];
-            indexInNewGapModel++;
-        }
-    }
-    gapModel = newGapModel;
-}
-
-void MsaDbiUtils::getStartAndEndSequencePositions(const QByteArray &seq, const QList<U2MsaGap> &gaps,
-    qint64 pos, qint64 count,
-    qint64& startPosInSeq, qint64& endPosInSeq) {
-
-    int rowLengthWithoutTrailingGap = MsaRowUtils::getRowLengthWithoutTrailing(seq, gaps);
-    SAFE_POINT(pos < rowLengthWithoutTrailingGap, "Incorrect position!", );
-
-    // Remove chars from the sequence
-    // Calculate start position in the sequence
-    if (MAlignment_GapChar == MsaRowUtils::charAt(seq, gaps, pos)) {
-        int i = 1;
-        while (MAlignment_GapChar == MsaRowUtils::charAt(seq, gaps, pos + i)) {
-            if (MsaRowUtils::getRowLength(seq, gaps) == pos + i) {
-                break;
-            }
-            i++;
-        }
-        startPosInSeq = MsaRowUtils::getUngappedPosition(seq, gaps, pos + i);
-    }
-    else {
-        startPosInSeq = MsaRowUtils::getUngappedPosition(seq, gaps, pos);
-    }
-
-    // Calculate end position in the sequence
-    int endRegionPos = pos + count; // non-inclusive
-
-    if (endRegionPos > rowLengthWithoutTrailingGap) {
-        endRegionPos = rowLengthWithoutTrailingGap;
-    }
-
-    if (endRegionPos == rowLengthWithoutTrailingGap) {
-        endPosInSeq = seq.length();
-    }
-    else {
-        if (MAlignment_GapChar == MsaRowUtils::charAt(seq, gaps, endRegionPos)) {
-            int i = 1;
-            while (MAlignment_GapChar == MsaRowUtils::charAt(seq, gaps, endRegionPos + i)) {
-                if (MsaRowUtils::getRowLength(seq, gaps) == endRegionPos + i) {
-                    break;
-                }
-                i++;
-            }
-            endPosInSeq = MsaRowUtils::getUngappedPosition(seq, gaps, endRegionPos + i);
+
+void MsaDbiUtils::mergeConsecutiveGaps(QList<U2MsaGap>& gapModel) {
+    QList<U2MsaGap> newGapModel;
+    if (gapModel.isEmpty()) {
+        return;
+    }
+
+    newGapModel << gapModel[0];
+    int indexInNewGapModel = 0;
+    for (int i = 1; i < gapModel.count(); ++i) {
+        int previousGapEnd = newGapModel[indexInNewGapModel].offset +
+            newGapModel[indexInNewGapModel].gap - 1;
+        int currectGapStart = gapModel[i].offset;
+        SAFE_POINT(currectGapStart > previousGapEnd,
+            "Incorrect gap model during merging consecutive gaps!",);
+        if (currectGapStart == previousGapEnd + 1) {
+            // Merge gaps
+            qint64 newGapLength = newGapModel[indexInNewGapModel].gap + gapModel[i].gap;
+            SAFE_POINT(newGapLength > 0, "Non-positive gap length!", )
+                newGapModel[indexInNewGapModel].gap = newGapLength;
         }
         else {
-            endPosInSeq = MsaRowUtils::getUngappedPosition(seq, gaps, endRegionPos);
+            // Add the gap to the list
+            newGapModel << gapModel[i];
+            indexInNewGapModel++;
         }
     }
+    gapModel = newGapModel;
 }
 
 void MsaDbiUtils::removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint64 pos, qint64 count) {
@@ -371,7 +617,7 @@ void MsaDbiUtils::removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qin
     if (pos < MsaRowUtils::getRowLengthWithoutTrailing(seq, gaps)) {
         qint64 startPosInSeq = -1;
         qint64 endPosInSeq = -1;
-        getStartAndEndSequencePositions(seq, gaps,
+        MaDbiUtils::getStartAndEndSequencePositions(seq, gaps,
             pos, count,
             startPosInSeq, endPosInSeq);
 
@@ -386,8 +632,7 @@ void MsaDbiUtils::removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qin
     mergeConsecutiveGaps(gaps);
 }
 
-namespace {
-void calculateGapModelAfterReplaceChar(QList<U2MsaGap>& gapModel, qint64 pos) {
+void MaDbiUtils::calculateGapModelAfterReplaceChar(QList<U2MsaGap>& gapModel, qint64 pos) {
     SAFE_POINT(pos >= 0, QString("Invalid position '%1'!").arg(pos), );
 
     for (int i = 0; i < gapModel.count(); ++i) {
@@ -420,6 +665,7 @@ void calculateGapModelAfterReplaceChar(QList<U2MsaGap>& gapModel, qint64 pos) {
     }
 }
 
+namespace {
 void calculateGapModelAfterAppendChar(QList<U2MsaGap>& gapModel, qint64 pos, qint64 originalRowLength) {
     CHECK(pos > originalRowLength, );
     gapModel.append(U2MsaGap(originalRowLength, pos - originalRowLength));
@@ -434,7 +680,7 @@ void MsaDbiUtils::replaceCharInRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint6
     if (rowLength > pos) {
         qint64 posInSeq = -1;
         qint64 endPosInSeq = -1;
-        getStartAndEndSequencePositions(seq, gaps, pos, 1, posInSeq, endPosInSeq);
+        MaDbiUtils::getStartAndEndSequencePositions(seq, gaps, pos, 1, posInSeq, endPosInSeq);
         if (posInSeq >= 0 && endPosInSeq > posInSeq) {
             U2OpStatus2Log os;
             DNASequenceUtils::replaceChars(seq, posInSeq, QByteArray(1, newChar), os);
@@ -443,7 +689,7 @@ void MsaDbiUtils::replaceCharInRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint6
             U2OpStatus2Log os;
             DNASequenceUtils::insertChars(seq, posInSeq, QByteArray(1, newChar), os);
             SAFE_POINT_OP(os, );
-            calculateGapModelAfterReplaceChar(gaps, pos);
+            MaDbiUtils::calculateGapModelAfterReplaceChar(gaps, pos);
         }
     } else {
         U2OpStatus2Log os;
@@ -455,22 +701,22 @@ void MsaDbiUtils::replaceCharInRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint6
     }
 }
 
-void MsaDbiUtils::cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 count) {
+void MsaDbiUtils::cropCharsFromRow(MultipleSequenceAlignmentRow& alRow, qint64 pos, qint64 count) {
     SAFE_POINT(pos >= 0, "Incorrect position!",);
     SAFE_POINT(count > 0, "Incorrect characters count!",);
 
     // Change the sequence
-    qint64 initialRowLength = alRow.getRowLength();
-    qint64 initialSeqLength = alRow.getUngappedLength();
-    DNASequence modifiedSeq = alRow.getSequence();
+    qint64 initialRowLength = alRow->getRowLength();
+    qint64 initialSeqLength = alRow->getUngappedLength();
+    DNASequence modifiedSeq = alRow->getSequence();
 
-    if (pos >= alRow.getRowLengthWithoutTrailing()) {
+    if (pos >= alRow->getRowLengthWithoutTrailing()) {
         DNASequenceUtils::makeEmpty(modifiedSeq);
     }
     else {
         qint64 startPosInSeq = -1;
         qint64 endPosInSeq = -1;
-        getStartAndEndSequencePositions(alRow.getSequence().seq, alRow.getGapModel(),
+        MaDbiUtils::getStartAndEndSequencePositions(alRow->getSequence().seq, alRow->getGapModel(),
             pos, count,
             startPosInSeq, endPosInSeq);
 
@@ -489,10 +735,9 @@ void MsaDbiUtils::cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 coun
             }
         }
     }
-    alRow.setSequence(modifiedSeq);
 
     // Change the gap model
-    QList<U2MsaGap> gapModel = alRow.getGapModel();
+    QList<U2MsaGap> gapModel = alRow->getGapModel();
     if (pos + count < initialRowLength) {
         calculateGapModelAfterRemove(gapModel, pos + count, initialRowLength - pos - count);
     }
@@ -500,7 +745,9 @@ void MsaDbiUtils::cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 coun
     if (pos > 0) {
         calculateGapModelAfterRemove(gapModel, 0, pos);
     }
-    alRow.setGapModel(gapModel);
+    U2OpStatusImpl os;
+    alRow->setRowContent(modifiedSeq, gapModel, os);
+    CHECK_OP(os, );
 }
 
 /** Returns "true" if there is a gap on position "pos" */
@@ -520,51 +767,9 @@ bool MsaDbiUtils::gapInPosition(const QList<U2MsaGap>& gapModel, qint64 pos) {
 
 /////////////////////////////////////////////////////////////////
 // MSA DBI Utilities
-void MsaDbiUtils::splitBytesToCharsAndGaps(const QByteArray& input, QByteArray& seqBytes, QList<U2MsaGap>& gapModel) {
-    bool previousCharIsGap = false;
-    int gapsCount = 0;
-    int gapsOffset = 0;
-
-    for (int i = 0; i < input.count(); ++i) {
-        // A char
-        if ((MAlignment_GapChar != input.at(i)))
-        {
-            if (previousCharIsGap) {
-                U2MsaGap gap(gapsOffset, gapsCount);
-                gapModel.append(gap);
-                gapsCount = 0;
-            }
-            seqBytes.append(input.at(i));
-            previousCharIsGap = false;
-        }
-        // A gap
-        else {
-            gapsCount++;
-            // A gap before the end of the row
-            if (i < input.count() - 1) {
-                if (!previousCharIsGap) {
-                    gapsOffset = i;
-                }
-                previousCharIsGap = true;
-            }
-            // A gap at the end of the row
-            else {
-                // Correct the offset if there is one gap at the end of the row
-                if (1 == gapsCount) {
-                    gapsOffset = i;
-                }
-                SAFE_POINT(gapsOffset >= 0, "Negative gap offset!", );
-                SAFE_POINT(gapsCount > 0, "Non-positive gap length!", );
-                U2MsaGap gap(gapsOffset, gapsCount);
-                gapModel.append(gap);
-            }
-        }
-    }
 
-    SAFE_POINT(-1 == seqBytes.indexOf(MAlignment_GapChar), "Row sequence contains gaps!", );
-}
 
-void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2OpStatus& os) {
+void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MultipleSequenceAlignment& al, U2OpStatus& os) {
     // Prepare the connection
     DbiConnection con(msaRef.dbiRef, os);
     CHECK_OP(os, );
@@ -579,22 +784,22 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     SAFE_POINT(NULL != attrDbi, "NULL Attribute Dbi!", );
 
     //// UPDATE MSA OBJECT
-    const DNAAlphabet* alphabet = al.getAlphabet();
+    const DNAAlphabet* alphabet = al->getAlphabet();
     SAFE_POINT(NULL != alphabet, "The alignment alphabet is NULL!", );
 
     U2Msa msaObj;
     msaObj.id = msaRef.entityId;
-    msaObj.visualName = al.getName();
+    msaObj.visualName = al->getName();
     msaObj.alphabet.id = alphabet->getId();
-    msaObj.length = al.getLength();
+    msaObj.length = al->getLength();
 
-    msaDbi->updateMsaName(msaRef.entityId, al.getName(), os);
+    msaDbi->updateMsaName(msaRef.entityId, al->getName(), os);
     CHECK_OP(os, );
 
     msaDbi->updateMsaAlphabet(msaRef.entityId, alphabet->getId(), os);
     CHECK_OP(os, );
 
-    msaDbi->updateMsaLength(msaRef.entityId, al.getLength(), os);
+    msaDbi->updateMsaLength(msaRef.entityId, al->getLength(), os);
     CHECK_OP(os, );
 
     //// UPDATE ROWS AND SEQUENCES
@@ -603,7 +808,7 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     QList<qint64> currentRowIds;
     CHECK_OP(os, );
 
-    QList<qint64> newRowsIds = al.getRowsIds();
+    QList<qint64> newRowsIds = al->getRowsIds();
     QList<qint64> eliminatedRows;
 
     foreach (const U2MsaRow &currentRow, currentRows) {
@@ -612,7 +817,7 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
         // Update data for rows with the same row and sequence IDs
         if (newRowsIds.contains(currentRow.rowId)) {
             // Update sequence and row info
-            const U2MsaRow newRow = al.getRowByRowId(currentRow.rowId, os).getRowDBInfo();
+            const U2MsaRow newRow = al->getMsaRowByRowId(currentRow.rowId, os)->getRowDbInfo();
             CHECK_OP(os, );
 
             if (newRow.sequenceId != currentRow.sequenceId) {
@@ -624,7 +829,7 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
                 continue;
             }
 
-            DNASequence sequence = al.getRowByRowId(newRow.rowId, os).getSequence();
+            DNASequence sequence = (al->getMsaRowByRowId(newRow.rowId, os))->getSequence();
             CHECK_OP(os, );
 
             msaDbi->updateRowName(msaRef.entityId, newRow.rowId, sequence.getName(), os);
@@ -644,13 +849,13 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     // Add rows that are stored in memory, but are not present in the database,
     // remember the rows order
     QList<qint64> rowsOrder;
-    for (int i = 0, n = al.getNumRows(); i < n; ++i) {
-        const MAlignmentRow& alRow = al.getRow(i);
-        U2MsaRow row = alRow.getRowDBInfo();
+    for (int i = 0, n = al->getNumRows(); i < n; ++i) {
+        const MultipleSequenceAlignmentRow alRow = al->getMsaRow(i);
+        U2MsaRow row = alRow->getRowDbInfo();
 
         if (row.sequenceId.isEmpty() || !currentRowIds.contains(row.rowId)) {
             // Import the sequence
-            DNASequence rowSeq = alRow.getSequence();
+            DNASequence rowSeq = alRow->getSequence();
             U2Sequence sequence = U2Sequence();
             sequence.visualName = rowSeq.getName();
             sequence.circular = rowSeq.circular;
@@ -676,7 +881,7 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
             row.sequenceId = sequence.id;
             row.gstart = 0;
             row.gend = sequence.length;
-            row.gaps = alRow.getGapModel();
+            row.gaps = alRow->getGapModel();
             MsaDbiUtils::addRow(msaRef, -1, row, os);
             CHECK_OP(os, );
         }
@@ -687,7 +892,7 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     msaDbi->setNewRowsOrder(msaRef.entityId, rowsOrder, os);
 
     //// UPDATE MALIGNMENT ATTRIBUTES
-    QVariantMap alInfo = al.getInfo();
+    QVariantMap alInfo = al->getInfo();
 
     foreach (QString key, alInfo.keys()) {
         QString val = alInfo.value(key).value<QString>();
@@ -698,58 +903,6 @@ void MsaDbiUtils::updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2O
     }
 }
 
-qint64 MsaDbiUtils::getMsaLength(const U2EntityRef& msaRef, U2OpStatus& os) {
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, -1);
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), -1);
-
-    qint64 length = msaDbi->getMsaLength(msaRef.entityId, os);
-    CHECK_OP(os, -1);
-
-    return length;
-}
-
-void MsaDbiUtils::updateMsaLength(const U2EntityRef &msaRef, qint64 newLen, U2OpStatus &os) {
-    // Prepare the connection
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
-
-    // Update the data
-    msaDbi->updateMsaLength(msaRef.entityId, newLen, os);
-}
-
-U2AlphabetId MsaDbiUtils::getMsaAlphabet(const U2EntityRef& msaRef, U2OpStatus& os) {
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, U2AlphabetId());
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), U2AlphabetId());
-
-    U2AlphabetId alphabet = msaDbi->getMsaAlphabet(msaRef.entityId, os);
-    CHECK_OP(os, U2AlphabetId());
-
-    return alphabet;
-}
-
-void MsaDbiUtils::updateMsaAlphabet(const U2EntityRef& msaRef, const U2AlphabetId& alphabet, U2OpStatus& os) {
-    // Prepare the connection
-    SAFE_POINT_EXT(alphabet.isValid(), os.setError("Invalid alphabet was passed !"),);
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL Msa Dbi!"), );
-
-    // Update the data
-    msaDbi->updateMsaAlphabet(msaRef.entityId, alphabet, os);
-}
-
-
 void MsaDbiUtils::updateRowContent(const U2EntityRef& msaRef, qint64 rowId,
                                    const QByteArray& seqBytes, const QList<U2MsaGap>& gaps,
                                    U2OpStatus& os) {
@@ -764,119 +917,7 @@ void MsaDbiUtils::updateRowContent(const U2EntityRef& msaRef, qint64 rowId,
     msaDbi->updateRowContent(msaRef.entityId, rowId, seqBytes, gaps, os);
 }
 
-void MsaDbiUtils::updateRowGapModel(const U2EntityRef& msaRef, qint64 rowId, const QList<U2MsaGap>& gaps, U2OpStatus& os) {
-    // Prepare the connection
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
-
-    // Update the data
-    msaDbi->updateGapModel(msaRef.entityId, rowId, gaps, os);
-}
-
-void MsaDbiUtils::updateRowsOrder(const U2EntityRef& msaRef, const QList<qint64>& rowsOrder, U2OpStatus& os) {
-    // Prepare the connection
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
-
-    // Update the data
-    msaDbi->setNewRowsOrder(msaRef.entityId, rowsOrder, os);
-}
-
-void MsaDbiUtils::moveRows(const U2EntityRef& msaRef, const QList<qint64>& rowsToMove, const int delta, U2OpStatus& os) {
-    DbiConnection con(msaRef.dbiRef, false, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
-
-    if (delta == 0 || rowsToMove.isEmpty()) {
-        return;
-    }
-
-    QList<U2MsaRow> rows = msaDbi->getRows(msaRef.entityId, os);
-    CHECK_OP(os, );
-
-    QList<qint64> rowIds;
-    for (int i = 0; i < rows.length(); ++i) {
-        rowIds << rows[i].rowId;
-    }
-
-    QList<QPair<int, int> > from_To;
-
-    if (delta < 0) {
-        int rowIndex = rowIds.indexOf(rowsToMove.first());
-        if (rowIndex == -1) {
-            os.setError("Invalid row list");
-            return;
-        }
-        int moveToIndex = rowIndex + delta >= 0 ? rowIndex + delta : 0;
-        from_To.append(QPair<int, int>(rowIndex, moveToIndex));
-        for (int i = 1; i < rowsToMove.length(); ++i) {
-            rowIndex = rowIds.indexOf(rowsToMove[i]);
-            if (rowIndex == -1) {
-                os.setError("Invalid row list");
-                return;
-            }
-            if (rowIndex <= from_To[i - 1].first) {
-                os.setError("List of rows to move is not ordered");
-                return;
-            }
-            moveToIndex = rowIndex + delta > from_To[i - 1].second ? rowIndex + delta : from_To[i - 1].second + 1;
-            from_To.append(QPair<int, int>(rowIndex, moveToIndex));
-        }
-    } else {
-        int rowIndex = rowIds.indexOf(rowsToMove.last());
-        if (rowIndex == -1) {
-            os.setError("Invalid row list");
-            return;
-        }
-        int moveToIndex = rowIndex + delta < rowIds.length() ? rowIndex + delta : rowIds.length() - 1;
-        from_To.append(QPair<int, int>(rowIndex, moveToIndex));
-        for (int i = 1; i < rowsToMove.length(); ++i) {
-            rowIndex = rowIds.indexOf(rowsToMove[rowsToMove.length() - i - 1]);
-            if (rowIndex == -1) {
-                os.setError("Invalid row list");
-                return;
-            }
-            if (rowIndex >= from_To[i - 1].first) {
-                os.setError("List of rows to move is not ordered");
-                return;
-            }
-            moveToIndex = rowIndex + delta < from_To[i - 1].second ? rowIndex + delta : from_To[i - 1].second - 1;
-            from_To.append(QPair<int, int>(rowIndex, moveToIndex));
-        }
-    }
-    QPair<int, int> coords;
-    foreach (coords, from_To) {
-        rowIds.move(coords.first, coords.second);
-    }
-    msaDbi->setNewRowsOrder(msaRef.entityId, rowIds, os);
-    CHECK_OP(os, );
-}
-
-void MsaDbiUtils::renameMsa(const U2EntityRef& msaRef, const QString& newName, U2OpStatus& os) {
-    if (newName.isEmpty()) {
-        os.setError(tr("Can't rename an alignment to an empty name!"));
-    }
-
-    // Prepare the connection
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!",);
-
-    // Update the name
-    msaDbi->updateMsaName(msaRef.entityId, newName, os);
-}
-
-void MsaDbiUtils::insertGaps(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os) {
+void MsaDbiUtils::insertGaps(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os, bool collapseTrailingGaps) {
     // Prepare the connection
     DbiConnection con(msaRef.dbiRef, os);
     CHECK_OP(os, );
@@ -931,28 +972,21 @@ void MsaDbiUtils::insertGaps(const U2EntityRef& msaRef, const QList<qint64>& row
         msaDbi->updateGapModel(msaRef.entityId, row.rowId, row.gaps, os);
         CHECK_OP(os, );
     }
-    msaDbi->updateMsaLength(msaRef.entityId, msaObj.length + count, os);
-}
-
-static DbiConnection * getCheckedConnection(const U2DbiRef &dbiRef, U2OpStatus &os) {
-    QScopedPointer<DbiConnection> con(new DbiConnection(dbiRef, os));
-    CHECK_OP(os, NULL);
-
-    if (NULL == con->dbi) {
-        os.setError("NULL root dbi");
-        return NULL;
-    }
-
-    if (NULL == con->dbi->getMsaDbi()) {
-        os.setError("NULL MSA dbi");
-        return NULL;
-    }
 
-    if (NULL == con->dbi->getSequenceDbi()) {
-        os.setError("NULL sequence dbi");
-        return NULL;
+    if (collapseTrailingGaps) {
+        qint64 enlargeAlignmentLength = 0;
+        foreach(qint64 rowId, rowIds) {
+            enlargeAlignmentLength = qMax(enlargeAlignmentLength, msaDbi->getRow(msaRef.entityId, rowId, os).length);
+            CHECK_OP(os, );
+        }
+        if (msaObj.length < enlargeAlignmentLength) {
+            msaDbi->updateMsaLength(msaRef.entityId, enlargeAlignmentLength, os);
+            CHECK_OP(os, );
+        }
+    } else {
+        msaDbi->updateMsaLength(msaRef.entityId, msaObj.length + count, os);
+        CHECK_OP(os, );
     }
-    return con.take();
 }
 
 void MsaDbiUtils::removeRegion(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os) {
@@ -961,7 +995,7 @@ void MsaDbiUtils::removeRegion(const U2EntityRef& msaRef, const QList<qint64>& r
     CHECK_EXT(count > 0, os.setError(QString("Wrong MSA base count: %1").arg(count)), );
 
     // Prepare the connection
-    QScopedPointer<DbiConnection> con(getCheckedConnection(msaRef.dbiRef, os));
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(msaRef.dbiRef, os));
     SAFE_POINT_OP(os, );
     U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
     U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
@@ -969,7 +1003,7 @@ void MsaDbiUtils::removeRegion(const U2EntityRef& msaRef, const QList<qint64>& r
     U2Msa msa = msaDbi->getMsaObject(msaRef.entityId, os);
     SAFE_POINT_OP(os, );
 
-    validateRowIds(msaDbi, msaRef.entityId, rowIds, os);
+    MaDbiUtils::validateRowIds(msaDbi, msaRef.entityId, rowIds, os);
     CHECK_OP(os, );
 
     qint64 rowNum = msaDbi->getNumOfRows(msaRef.entityId, os);
@@ -1003,7 +1037,7 @@ void MsaDbiUtils::replaceCharacterInRow(const U2EntityRef& msaRef, qint64 rowId,
     CHECK_EXT(pos >= 0, os.setError(QString("Negative MSA pos: %1").arg(pos)), );
 
     // Prepare the connection
-    QScopedPointer<DbiConnection> con(getCheckedConnection(msaRef.dbiRef, os));
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(msaRef.dbiRef, os));
     CHECK_OP(os, );
     U2MsaDbi* msaDbi = con->dbi->getMsaDbi();
     U2SequenceDbi* sequenceDbi = con->dbi->getSequenceDbi();
@@ -1011,7 +1045,7 @@ void MsaDbiUtils::replaceCharacterInRow(const U2EntityRef& msaRef, qint64 rowId,
     U2Msa msa = msaDbi->getMsaObject(msaRef.entityId, os);
     CHECK_OP(os, );
 
-    validateRowIds(msaDbi, msaRef.entityId, QList<qint64>() << rowId, os);
+    MaDbiUtils::validateRowIds(msaDbi, msaRef.entityId, QList<qint64>() << rowId, os);
     CHECK_OP(os, );
 
     U2MsaRow row = msaDbi->getRow(msaRef.entityId, rowId, os);
@@ -1030,12 +1064,12 @@ void MsaDbiUtils::replaceCharacterInRow(const U2EntityRef& msaRef, qint64 rowId,
 }
 
 QList<qint64> MsaDbiUtils::removeEmptyRows(const U2EntityRef& msaRef, const QList<qint64>& rowIds, U2OpStatus &os) {
-    QScopedPointer<DbiConnection> con(getCheckedConnection(msaRef.dbiRef, os));
+    QScopedPointer<DbiConnection> con(MaDbiUtils::getCheckedConnection(msaRef.dbiRef, os));
     SAFE_POINT_OP(os, QList<qint64>());
     U2MsaDbi *msaDbi = con->dbi->getMsaDbi();
     U2SequenceDbi *sequenceDbi = con->dbi->getSequenceDbi();
 
-    validateRowIds(msaDbi, msaRef.entityId, rowIds, os);
+    MaDbiUtils::validateRowIds(msaDbi, msaRef.entityId, rowIds, os);
     CHECK_OP(os, QList<qint64>());
 
     // find empty rows
@@ -1059,13 +1093,13 @@ QList<qint64> MsaDbiUtils::removeEmptyRows(const U2EntityRef& msaRef, const QLis
 
 void MsaDbiUtils::crop(const U2EntityRef& msaRef, const QList<qint64> rowIds, qint64 pos, qint64 count, U2OpStatus& os) {
     // Get the alignment
-    MAlignmentExporter alExporter;
-    MAlignment al = alExporter.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter alExporter;
+    MultipleSequenceAlignment al = alExporter.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
 
     // Validate the parameters
     if (!validatePos(al, pos) ||
         !validateCharactersCount(count) ||
-        !validateRowIds(al, rowIds))
+        !MaDbiUtils::validateRowIds(al, rowIds))
     {
         os.setError(tr("Failed to crop an alignment!"));
         return;
@@ -1079,22 +1113,22 @@ void MsaDbiUtils::crop(const U2EntityRef& msaRef, const QList<qint64> rowIds, qi
     SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!", );
 
     // Crop or remove each row
-    for (int i = 0, n = al.getNumRows(); i < n; ++i) {
-        MAlignmentRow row = al.getRow(i);
-        qint64 rowId = row.getRowId();
+    for (int i = 0, n = al->getNumRows(); i < n; ++i) {
+        MultipleSequenceAlignmentRow row = al->getMsaRow(i)->getExplicitCopy();
+        qint64 rowId = row->getRowId();
         if (rowIds.contains(rowId)) {
-            U2DataId sequenceId = row.getRowDBInfo().sequenceId;
+            U2DataId sequenceId = row->getRowDbInfo().sequenceId;
             SAFE_POINT(!sequenceId.isEmpty(), "Empty sequence ID!", );
 
             // Calculate the modified row
             cropCharsFromRow(row, pos, count);
 
             // Put the new sequence and gap model into the database
-            msaDbi->updateRowContent(msaRef.entityId, rowId, row.getSequence().constSequence(), row.getGapModel(), os);
+            msaDbi->updateRowContent(msaRef.entityId, rowId, row->getSequence().constSequence(), row->getGapModel(), os);
             CHECK_OP(os, );
         }
         else {
-            MsaDbiUtils::removeRow(msaRef, row.getRowId(), os);
+            MsaDbiUtils::removeRow(msaRef, row->getRowId(), os);
             CHECK_OP(os, );
         }
     }
@@ -1190,21 +1224,5 @@ void MsaDbiUtils::removeRow(const U2EntityRef& msaRef, qint64 rowId, U2OpStatus&
     msaDbi->removeRow(msaRef.entityId, rowId, os);
 }
 
-void MsaDbiUtils::renameRow(const U2EntityRef& msaRef, qint64 rowId, const QString& newName, U2OpStatus& os) {
-    if (newName.isEmpty()) {
-        os.setError(tr("Can't rename a row to an empty name!"));
-    }
-
-    // Prepare the connection
-    DbiConnection con(msaRef.dbiRef, os);
-    CHECK_OP(os, );
-
-    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
-    SAFE_POINT(NULL != msaDbi, "NULL Msa Dbi!",);
-
-    // Update the row name
-    msaDbi->updateRowName(msaRef.entityId, rowId, newName, os);
-}
-
 
 } // namespace
diff --git a/src/corelibs/U2Core/src/util/MsaDbiUtils.h b/src/corelibs/U2Core/src/util/MsaDbiUtils.h
index 59f4074..64fa99e 100644
--- a/src/corelibs/U2Core/src/util/MsaDbiUtils.h
+++ b/src/corelibs/U2Core/src/util/MsaDbiUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,53 +22,98 @@
 #ifndef _U2_MSA_DBI_UTILS_
 #define _U2_MSA_DBI_UTILS_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2MsaDbi.h>
 
-
 namespace U2 {
 
-class U2CORE_EXPORT MsaDbiUtils : public QObject {
+class U2CORE_EXPORT MaDbiUtils : public QObject {
     Q_OBJECT
-
 public:
     /** Split 'input' bytes into sequence bytes (chars) and a gap model */
     static void splitBytesToCharsAndGaps(const QByteArray& input, QByteArray& seqBytes, QList<U2MsaGap>& gapModel);
 
     /**
-     * Updates the whole alignment in the database:
-     * 1) Updates the MSA object
-     * 2) If 'al' rows have IDs of the rows and sequences in the database, updates these data.
-     *    Otherwise adds or removes the corresponding rows and sequences.
-     * 3) Updates rows positions
-     */
-    static void updateMsa(const U2EntityRef& msaRef, const MAlignment& al, U2OpStatus& os);
-
-    /**
     * Get the length of the alignment in the database.
     */
-    static qint64 getMsaLength(const U2EntityRef& msaRef, U2OpStatus& os);
+    static qint64 getMaLength(const U2EntityRef& maRef, U2OpStatus& os);
 
     /**
     * Update the length of the alignment in the database.
     */
-    static void updateMsaLength(const U2EntityRef& msaRef, qint64 newLen, U2OpStatus& os);
+    static void updateMaLength(const U2EntityRef& maRef, qint64 newLen, U2OpStatus& os);
 
     /**
     * Get the alphabet of the alignment in the database.
     */
-    static U2AlphabetId getMsaAlphabet(const U2EntityRef& msaRef, U2OpStatus& os);
+    static U2AlphabetId getMaAlphabet(const U2EntityRef& maRef, U2OpStatus& os);
 
     /**
     * Update the alphabet of the alignment in the database.
     */
-    static void updateMsaAlphabet(const U2EntityRef& msaRef, const U2AlphabetId& alphabet, U2OpStatus& os);
+    static void updateMaAlphabet(const U2EntityRef& maRef, const U2AlphabetId& alphabet, U2OpStatus& os);
 
     /**
      * Renames an alignment.
      * Parameter 'newName' must be NOT empty!
      */
-    static void renameMsa(const U2EntityRef& msaRef, const QString& newName, U2OpStatus& os);
+    static void renameMa(const U2EntityRef& maRef, const QString& newName, U2OpStatus& os);
+
+    /**
+     * Updates a gap model of the specified row in the database.
+     * Parameter 'rowId' must contain a valid row ID in the database.
+     */
+    static void updateRowGapModel(const U2EntityRef& maRef, qint64 rowId, const QList<U2MsaGap>& gaps, U2OpStatus& os);
+
+    /**
+     * Updates positions of the rows in the database according to the order in the list.
+     * All IDs must exactly match IDs of the MSA!
+     */
+    static void updateRowsOrder(const U2EntityRef& maRef, const QList<qint64>& rowsOrder, U2OpStatus& os);
+
+    /**
+     * Renames a row of the alignment, i.e. the corresponding sequence.
+     * Parameter 'rowId' must contain a valid row ID in the database.
+     * Parameter 'newName' must be NOT empty!
+     */
+    static void renameRow(const U2EntityRef& msaRef, qint64 rowId, const QString& newName, U2OpStatus& os);
+
+    /**
+     * Updates positions of the rows in the database according to the delta.
+     * If some rows can`t move, the other rows will continue to move until there is space.
+     * rowsToMove must have the same relative order as rows in database have.
+     * All IDs must exactly match IDs of the MSA!
+     */
+    static void moveRows(const U2EntityRef& msaRef, const QList<qint64>& rowsToMove, const int delta, U2OpStatus& os);
+
+    /**
+     * Calculates start and end position in the sequence,
+     * depending on the start position in the row and the 'count' character from it
+     */
+    static void getStartAndEndSequencePositions(const QByteArray &seq, const QList<U2MsaGap> &gaps,
+        qint64 pos, qint64 count,
+        qint64& startPosInSeq, qint64& endPosInSeq);
+
+    static DbiConnection * getCheckedConnection(const U2DbiRef &dbiRef, U2OpStatus &os);
+    static bool validateRowIds(const MultipleSequenceAlignment& al, const QList<qint64>& rowIds);
+    static void validateRowIds(U2MsaDbi *msaDbi, const U2DataId &msaId, const QList<qint64>& rowIds, U2OpStatus &os);
+
+    static void calculateGapModelAfterReplaceChar(QList<U2MsaGap>& gapModel, qint64 pos);
+};
+
+class U2CORE_EXPORT MsaDbiUtils : public QObject {
+    Q_OBJECT
+    friend class McaDbiUtils;
+public:
+
+    /**
+     * Updates the whole alignment in the database:
+     * 1) Updates the MSA object
+     * 2) If 'al' rows have IDs of the rows and sequences in the database, updates these data.
+     *    Otherwise adds or removes the corresponding rows and sequences.
+     * 3) Updates rows positions
+     */
+    static void updateMsa(const U2EntityRef& msaRef, const MultipleSequenceAlignment& al, U2OpStatus& os);
 
     /**
      * Inserts 'count' gaps to rows with specified IDs from 'pos' position.
@@ -77,7 +122,7 @@ public:
      * Parameter 'pos' must be >=0 and < the alignment length.
      * Parameter 'count' must be > 0.
      */
-    static void insertGaps(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os);
+    static void insertGaps(const U2EntityRef& msaRef, const QList<qint64>& rowIds, qint64 pos, qint64 count, U2OpStatus& os, bool collapseTrailingGaps);
 
     /**
      * Removes a region from an alignment.
@@ -137,33 +182,6 @@ public:
                                  U2OpStatus& os);
 
     /**
-     * Updates a gap model of the specified row in the database.
-     * Parameter 'rowId' must contain a valid row ID in the database.
-     */
-    static void updateRowGapModel(const U2EntityRef& msaRef, qint64 rowId, const QList<U2MsaGap>& gaps, U2OpStatus& os);
-
-    /**
-     * Updates positions of the rows in the database according to the order in the list.
-     * All IDs must exactly match IDs of the MSA!
-     */
-    static void updateRowsOrder(const U2EntityRef& msaRef, const QList<qint64>& rowsOrder, U2OpStatus& os);
-
-    /**
-     * Updates positions of the rows in the database according to the delta.
-     * If some rows can`t move, the other rows will continue to move until there is space.
-     * rowsToMove must have the same relative order as rows in database have.
-     * All IDs must exactly match IDs of the MSA!
-     */
-    static void moveRows(const U2EntityRef& msaRef, const QList<qint64>& rowsToMove, const int delta, U2OpStatus& os);
-
-    /**
-     * Renames a row of the alignment, i.e. the corresponding sequence.
-     * Parameter 'rowId' must contain a valid row ID in the database.
-     * Parameter 'newName' must be NOT empty!
-     */
-    static void renameRow(const U2EntityRef& msaRef, qint64 rowId, const QString& newName, U2OpStatus& os);
-
-    /**
      * If some of specified rows is empty it will be removed.
      * Returns list of removed row ids.
      */
@@ -204,14 +222,6 @@ private:
     /** If there are consecutive gaps in the gaps model, merges them into one gap */
     static void mergeConsecutiveGaps(QList<U2MsaGap>& gapModel);
 
-    /**
-     * Calculates start and end position in the sequence,
-     * depending on the start position in the row and the 'count' character from it
-     */
-    static void getStartAndEndSequencePositions(const QByteArray &seq, const QList<U2MsaGap> &gaps,
-        qint64 pos, qint64 count,
-        qint64& startPosInSeq, qint64& endPosInSeq);
-
     /** Removes chars/gaps from the row */
     static void removeCharsFromRow(QByteArray &seq, QList<U2MsaGap> &gaps, qint64 pos, qint64 count);
 
@@ -224,7 +234,7 @@ private:
      * Parameter 'pos' can even be greater than the length of the row.
      * The row sequence and gap model are set to empty values in this case.
      */
-    static void cropCharsFromRow(MAlignmentRow& alRow, qint64 pos, qint64 count);
+    static void cropCharsFromRow(MultipleSequenceAlignmentRow& alRow, qint64 pos, qint64 count);
 
     /** Returns "true" if there is a gap on position "pos" */
     static bool gapInPosition(const QList<U2MsaGap>& gapModel, qint64 pos);
diff --git a/src/corelibs/U2Core/src/util/MsaRowUtils.cpp b/src/corelibs/U2Core/src/util/MsaRowUtils.cpp
index cbccab8..9c988c7 100644
--- a/src/corelibs/U2Core/src/util/MsaRowUtils.cpp
+++ b/src/corelibs/U2Core/src/util/MsaRowUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,21 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/DNASequence.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2Region.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "MsaRowUtils.h"
 
 namespace U2 {
 
-/** Gap character */
-#define MAlignment_GapChar '-'
-
-int MsaRowUtils::getRowLength(const QByteArray &seq, const QList<U2MsaGap> &gaps) {
+int MsaRowUtils::getRowLength(const QByteArray &seq, const U2MsaRowGapModel &gaps) {
     return seq.length() + getGapsLength(gaps);
 }
 
-int MsaRowUtils::getGapsLength(const QList<U2MsaGap> &gaps) {
+int MsaRowUtils::getGapsLength(const U2MsaRowGapModel &gaps) {
     int length = 0;
     foreach (const U2MsaGap &elt, gaps) {
         length += elt.gap;
@@ -40,9 +41,9 @@ int MsaRowUtils::getGapsLength(const QList<U2MsaGap> &gaps) {
     return length;
 }
 
-char MsaRowUtils::charAt(const QByteArray &seq, const QList<U2MsaGap> &gaps, int pos) {
+char MsaRowUtils::charAt(const QByteArray &seq, const U2MsaRowGapModel &gaps, int pos) {
     if (pos < 0 || pos >= getRowLength(seq, gaps)) {
-        return MAlignment_GapChar;
+        return U2Msa::GAP_CHAR;
     }
 
     int gapsLength = 0;
@@ -53,7 +54,7 @@ char MsaRowUtils::charAt(const QByteArray &seq, const QList<U2MsaGap> &gaps, int
         }
         // Inside the gap
         else if ((pos >= gap.offset) && (pos < gap.offset + gap.gap)) {
-            return MAlignment_GapChar;
+            return U2Msa::GAP_CHAR;
         }
         // Go further in the row, calculating the current gaps length
         else {
@@ -62,23 +63,23 @@ char MsaRowUtils::charAt(const QByteArray &seq, const QList<U2MsaGap> &gaps, int
     }
 
     if (pos >= gapsLength + seq.length()) {
-        return MAlignment_GapChar;
+        return U2Msa::GAP_CHAR;
     }
 
     int index = pos - gapsLength;
     bool indexIsInBounds = (index < seq.length()) && (index >= 0);
 
     SAFE_POINT(indexIsInBounds,
-        QString("Internal error detected in MAlignmentRow::charAt,"
-        " row length is '%1', gapsLength is '%2'!").arg(getRowLength(seq, gaps)).arg(index), MAlignment_GapChar);
+        QString("Internal error detected in MultipleSequenceAlignmentRow::charAt,"
+        " row length is '%1', gapsLength is '%2'!").arg(getRowLength(seq, gaps)).arg(index), U2Msa::GAP_CHAR);
     return seq[index];
 }
 
-qint64 MsaRowUtils::getRowLengthWithoutTrailing(const QByteArray &seq, const QList<U2MsaGap> &gaps) {
+qint64 MsaRowUtils::getRowLengthWithoutTrailing(const QByteArray &seq, const U2MsaRowGapModel &gaps) {
     int rowLength = getRowLength(seq, gaps);
     int rowLengthWithoutTrailingGap = rowLength;
     if (!gaps.isEmpty()) {
-        if (MAlignment_GapChar == charAt(seq, gaps, rowLength - 1)) {
+        if (U2Msa::GAP_CHAR == charAt(seq, gaps, rowLength - 1)) {
             U2MsaGap lastGap = gaps.last();
             rowLengthWithoutTrailingGap -= lastGap.gap;
         }
@@ -86,16 +87,27 @@ qint64 MsaRowUtils::getRowLengthWithoutTrailing(const QByteArray &seq, const QLi
     return rowLengthWithoutTrailingGap;
 }
 
-int MsaRowUtils::getUngappedPosition(const QByteArray &seq, const QList<U2MsaGap> &gaps, int pos, bool allowGapInPos) {
-    if (MAlignment_GapChar == charAt(seq, gaps, pos) && !allowGapInPos) {
+qint64 MsaRowUtils::getRowLengthWithoutTrailing(qint64 dataLength, const U2MsaRowGapModel &gaps) {
+    qint64 gappedDataLength = dataLength;
+    foreach (const U2MsaGap &gap, gaps) {
+        if (gap.offset > gappedDataLength) {
+            break;
+        }
+        gappedDataLength += gap.gap;
+    }
+    return gappedDataLength;
+}
+
+qint64 MsaRowUtils::getUngappedPosition(const U2MsaRowGapModel &gaps, qint64 dataLength, qint64 position, bool allowGapInPos) {
+    if (isGap(dataLength, gaps, position) && !allowGapInPos) {
         return -1;
     }
 
     int gapsLength = 0;
     foreach (const U2MsaGap &gap, gaps) {
-        if (gap.offset < pos) {
+        if (gap.offset < position) {
             if (allowGapInPos) {
-                gapsLength += (gap.offset + gap.gap < pos) ? gap.gap : gap.gap - (gap.offset + gap.gap - pos);
+                gapsLength += (gap.offset + gap.gap < position) ? gap.gap : gap.gap - (gap.offset + gap.gap - position);
             } else {
                 gapsLength += gap.gap;
             }
@@ -103,14 +115,510 @@ int MsaRowUtils::getUngappedPosition(const QByteArray &seq, const QList<U2MsaGap
             break;
         }
     }
-    return (pos - gapsLength);
+
+    return position - gapsLength;
 }
 
-int MsaRowUtils::getCoreStart(const QList<U2MsaGap> &gaps) {
+int MsaRowUtils::getCoreStart(const U2MsaRowGapModel &gaps) {
     if (!gaps.isEmpty() && gaps.first().offset == 0) {
         return gaps.first().gap;
     }
     return 0;
 }
 
-} // U2
+void MsaRowUtils::insertGaps(U2OpStatus &os, U2MsaRowGapModel &gaps, int rowLengthWithoutTrailing, int position, int count) {
+    SAFE_POINT_EXT(0 <= count, os.setError(QString("Internal error: incorrect parameters were passed to MsaRowUtils::insertGaps, "
+                                                   "pos '%1', count '%2'").arg(position).arg(count)), );
+    CHECK(0 <= position && position < rowLengthWithoutTrailing, );
+
+    if (0 == position) {
+        addOffsetToGapModel(gaps, count);
+    } else {
+        const int dataLength = rowLengthWithoutTrailing - getGapsLength(gaps);
+        if (isGap(dataLength, gaps, position) || isGap(dataLength, gaps, position - 1)) {
+            // A gap is near
+            // Find the gaps and append 'count' gaps to it
+            // Shift all gaps that further in the row
+            for (int i = 0; i < gaps.count(); ++i) {
+                if (position >= gaps[i].offset) {
+                    if (position <= gaps[i].offset + gaps[i].gap) {
+                        gaps[i].gap += count;
+                    }
+                } else {
+                    gaps[i].offset += count;
+                }
+            }
+        } else {
+            // Insert between chars
+            bool found = false;
+
+            int indexGreaterGaps = 0;
+            for (int i = 0; i < gaps.count(); ++i) {
+                if (position > gaps[i].offset + gaps[i].gap) {
+                    continue;
+                } else {
+                    found = true;
+                    U2MsaGap newGap(position, count);
+                    gaps.insert(i, newGap);
+                    indexGreaterGaps = i;
+                    break;
+                }
+            }
+
+            // If found somewhere between existent gaps
+            if (found) {
+                // Shift further gaps
+                for (int i = indexGreaterGaps + 1; i < gaps.count(); ++i) {
+                    gaps[i].offset += count;
+                }
+            } else {
+                // This is the last gap
+                U2MsaGap newGap(position, count);
+                gaps.append(newGap);
+                return;
+            }
+        }
+    }
+}
+
+void MsaRowUtils::removeGaps(U2OpStatus &os, U2MsaRowGapModel &gaps, int rowLengthWithoutTrailing, int position, int count) {
+    SAFE_POINT_EXT(0 <= position && count <= count, os.setError(QString("Internal error: incorrect parameters were passed to MsaRowUtils::removeGaps, "
+                                                                        "pos '%1', count '%2'").arg(position).arg(count)), );
+    CHECK(position <= rowLengthWithoutTrailing, );
+
+    QList<U2MsaGap> newGapModel;
+    int endRegionPos = position + count; // non-inclusive
+    foreach (U2MsaGap gap, gaps) {
+        qint64 gapEnd = gap.offset + gap.gap;
+        if (gapEnd < position) {
+            newGapModel << gap;
+        } else if (gapEnd <= endRegionPos) {
+            if (gap.offset < position) {
+                gap.gap = position - gap.offset;
+                newGapModel << gap;
+            }
+            // Otherwise just remove the gap (do not write to the new gap model)
+        } else {
+            if (gap.offset < position) {
+                gap.gap -= count;
+                SAFE_POINT(gap.gap >= 0, "Non-positive gap length", );
+                newGapModel << gap;
+            } else if (gap.offset < endRegionPos) {
+                gap.gap = gapEnd - endRegionPos;
+                gap.offset = position;
+                SAFE_POINT(gap.gap > 0, "Non-positive gap length", );
+                SAFE_POINT(gap.offset >= 0, "Negative gap offset", );
+                newGapModel << gap;
+            } else {
+                // Shift the gap
+                gap.offset -= count;
+                SAFE_POINT(gap.offset >= 0, "Negative gap offset", );
+                newGapModel << gap;
+            }
+        }
+    }
+
+    gaps = newGapModel;
+}
+
+void MsaRowUtils::addOffsetToGapModel(U2MsaRowGapModel &gapModel, int offset) {
+    if (0 == offset) {
+        return;
+    }
+
+    if (!gapModel.isEmpty()) {
+        U2MsaGap &firstGap = gapModel[0];
+        if (0 == firstGap.offset) {
+            firstGap.gap += offset;
+        } else {
+            SAFE_POINT(offset >= 0, "Negative gap offset", );
+            U2MsaGap beginningGap(0, offset);
+            gapModel.insert(0, beginningGap);
+        }
+
+        // Shift other gaps
+        if (gapModel.count() > 1) {
+            for (int i = 1; i < gapModel.count(); ++i) {
+                qint64 newOffset = gapModel[i].offset + offset;
+                SAFE_POINT(newOffset >= 0, "Negative gap offset", );
+                gapModel[i].offset = newOffset;
+            }
+        }
+    } else {
+        SAFE_POINT(offset >= 0, "Negative gap offset", );
+        U2MsaGap gap(0, offset);
+        gapModel.append(gap);
+    }
+}
+
+void MsaRowUtils::shiftGapModel(U2MsaRowGapModel &gapModel, int shiftSize) {
+    CHECK(!gapModel.isEmpty(), );
+    CHECK(shiftSize != 0, );
+    CHECK(-shiftSize <= gapModel.first().offset, );
+    for (int i = 0; i < gapModel.size(); i++) {
+        gapModel[i].offset += shiftSize;
+    }
+}
+
+bool MsaRowUtils::isGap(int dataLength, const U2MsaRowGapModel &gapModel, int position) {
+    int gapsLength = 0;
+    foreach (const U2MsaGap &gap, gapModel) {
+        if (gap.offset <= position && position < gap.offset + gap.gap) {
+            return true;
+        }
+        if (position < gap.offset) {
+            return false;
+        }
+        gapsLength += gap.gap;
+    }
+
+    if (dataLength + gapsLength <= position) {
+        return true;
+    }
+
+    return false;
+}
+
+void MsaRowUtils::chopGapModel(U2MsaRowGapModel &gapModel, qint64 maxLength) {
+    chopGapModel(gapModel, U2Region(0, maxLength));
+}
+
+void MsaRowUtils::chopGapModel(U2MsaRowGapModel &gapModel, const U2Region &boundRegion) {
+    // Remove gaps after the region
+    while (!gapModel.isEmpty() && gapModel.last().offset >= boundRegion.endPos()) {
+        gapModel.removeLast();
+    }
+
+    if (!gapModel.isEmpty() && gapModel.last().endPos() > boundRegion.endPos()) {
+        gapModel.last().gap = boundRegion.endPos() - gapModel.last().offset;
+    }
+
+    // Remove gaps before the region
+    qint64 removedGapsLength = 0;
+    while (!gapModel.isEmpty() && gapModel.first().endPos() < boundRegion.startPos) {
+        removedGapsLength += gapModel.first().gap;
+        gapModel.removeFirst();
+    }
+
+    if (!gapModel.isEmpty() && gapModel.first().offset < boundRegion.startPos) {
+        removedGapsLength += boundRegion.startPos - gapModel.first().offset;
+        gapModel.first().gap -= boundRegion.startPos - gapModel.first().offset;
+        gapModel.first().offset  = boundRegion.startPos;
+    }
+
+    shiftGapModel(gapModel, -removedGapsLength);
+}
+
+QByteArray MsaRowUtils::joinCharsAndGaps(const DNASequence &sequence, const U2MsaRowGapModel &gapModel, int rowLength, bool keepLeadingGaps, bool keepTrailingGaps) {
+    QByteArray bytes = sequence.constSequence();
+    int beginningOffset = 0;
+
+    if (gapModel.isEmpty()) {
+        return bytes;
+    }
+
+    for (int i = 0; i < gapModel.size(); ++i) {
+        QByteArray gapsBytes;
+        if (!keepLeadingGaps && (0 == gapModel[i].offset)) {
+            beginningOffset = gapModel[i].gap;
+            continue;
+        }
+
+        gapsBytes.fill(U2Msa::GAP_CHAR, gapModel[i].gap);
+        bytes.insert(gapModel[i].offset - beginningOffset, gapsBytes);
+    }
+
+    if (keepTrailingGaps && (bytes.size() < rowLength)) {
+        QByteArray gapsBytes;
+        gapsBytes.fill(U2Msa::GAP_CHAR, rowLength - bytes.size());
+        bytes.append(gapsBytes);
+    }
+
+    return bytes;
+}
+
+namespace {
+
+U2MsaGap getNextGap(QListIterator<U2MsaGap> &mainGapModelIterator, QListIterator<U2MsaGap> &additionalGapModelIterator, qint64 &gapsFromMainModelLength) {
+    SAFE_POINT(mainGapModelIterator.hasNext() || additionalGapModelIterator.hasNext(), "Out of gap models boundaries", U2MsaGap());
+
+    if (!mainGapModelIterator.hasNext()) {
+        U2MsaGap gap = additionalGapModelIterator.next();
+        gap.offset += gapsFromMainModelLength;
+        return gap;
+    }
+
+    if (!additionalGapModelIterator.hasNext()) {
+        const U2MsaGap mainGap = mainGapModelIterator.next();
+        gapsFromMainModelLength += mainGap.gap;
+        return mainGap;
+    }
+
+    const U2MsaGap mainGap = mainGapModelIterator.peekNext();
+    const U2MsaGap additionalGap = additionalGapModelIterator.peekNext();
+    const U2MsaGap intersection = mainGap.intersect(additionalGap);
+
+    if (intersection.isValid()) {
+        const U2MsaGap unitedGap = U2MsaGap(qMin(mainGap.offset, additionalGap.offset + gapsFromMainModelLength), mainGap.gap + additionalGap.gap);
+        gapsFromMainModelLength += mainGap.gap;
+        mainGapModelIterator.next();
+        additionalGapModelIterator.next();
+        return unitedGap;
+    }
+
+    if (mainGap.offset <= additionalGap.offset + gapsFromMainModelLength) {
+        gapsFromMainModelLength += mainGap.gap;
+        mainGapModelIterator.next();
+        return mainGap;
+    } else {
+        U2MsaGap shiftedAdditionalGap = additionalGapModelIterator.next();
+        shiftedAdditionalGap.offset += gapsFromMainModelLength;
+        return shiftedAdditionalGap;
+    }
+}
+
+}
+
+U2MsaRowGapModel MsaRowUtils::insertGapModel(const U2MsaRowGapModel &mainGapModel, const U2MsaRowGapModel &additionalGapModel) {
+    U2MsaRowGapModel mergedGapModel;
+    QListIterator<U2MsaGap> mainGapModelIterator(mainGapModel);
+    QListIterator<U2MsaGap> additionalGapModelIterator(additionalGapModel);
+    qint64 gapsFromMainModelLength = 0;
+    while (mainGapModelIterator.hasNext() || additionalGapModelIterator.hasNext()) {
+        mergedGapModel << getNextGap(mainGapModelIterator, additionalGapModelIterator, gapsFromMainModelLength);
+    }
+    mergeConsecutiveGaps(mergedGapModel);
+    return mergedGapModel;
+}
+
+void MsaRowUtils::mergeConsecutiveGaps(U2MsaRowGapModel &gapModel) {
+    CHECK(!gapModel.isEmpty(), );
+    QList<U2MsaGap> newGapModel;
+
+    newGapModel << gapModel[0];
+    int indexInNewGapModel = 0;
+    for (int i = 1; i < gapModel.count(); ++i) {
+        const qint64 previousGapEnd = newGapModel[indexInNewGapModel].offset + newGapModel[indexInNewGapModel].gap - 1;
+        const qint64 currectGapStart = gapModel[i].offset;
+        SAFE_POINT(currectGapStart > previousGapEnd, "Incorrect gap model during merging consecutive gaps", );
+        if (currectGapStart == previousGapEnd + 1) {
+            // Merge gaps
+            const qint64 newGapLength = newGapModel[indexInNewGapModel].gap + gapModel[i].gap;
+            SAFE_POINT(newGapLength > 0, "Non-positive gap length", )
+            newGapModel[indexInNewGapModel].gap = newGapLength;
+        } else {
+            // Add the gap to the list
+            newGapModel << gapModel[i];
+            indexInNewGapModel++;
+        }
+    }
+    gapModel = newGapModel;
+}
+
+namespace {
+
+bool hasIntersection(const U2MsaGap &gap1, const U2MsaGap &gap2) {
+    return gap1.offset < gap2.endPos() && gap2.offset < gap1.endPos();
+}
+
+// Moves the iterator that points to the less gap
+// returns true, if step was successfully done
+// returns false, if the end is already reached
+bool stepForward(QMutableListIterator<U2MsaGap> &firstIterator, QMutableListIterator<U2MsaGap> &secondIterator) {
+    CHECK(firstIterator.hasNext(), false);
+    CHECK(secondIterator.hasNext(), false);
+    const U2MsaGap &firstGap = firstIterator.peekNext();
+    const U2MsaGap &secondGap = secondIterator.peekNext();
+    if (firstGap.offset <= secondGap.offset) {
+        firstIterator.next();
+    } else {
+        secondIterator.next();
+    }
+    return true;
+}
+
+// forward iterators to the state, when the next values have an intersection
+// returns true if there an intersection was found, otherwise return false
+bool forwardToIntersection(QMutableListIterator<U2MsaGap> &firstIterator, QMutableListIterator<U2MsaGap> &secondIterator) {
+    bool endReached = false;
+    while (!hasIntersection(firstIterator.peekNext(), secondIterator.peekNext())) {
+        endReached = !stepForward(firstIterator, secondIterator);
+        if (endReached) {
+            break;
+        }
+    }
+    return !endReached;
+}
+
+QPair<U2MsaGap, U2MsaGap> subGap(const U2MsaGap &subFrom, const U2MsaGap &subWhat) {
+    QPair<U2MsaGap, U2MsaGap> result;
+    if (subFrom.offset < subWhat.offset) {
+        result.first = U2MsaGap(subFrom.offset, subWhat.offset - subFrom.offset);
+    }
+    if (subFrom.endPos() > subWhat.endPos()) {
+        result.second = U2MsaGap(subWhat.endPos(), subFrom.endPos() - subWhat.endPos());
+    }
+    return result;
+}
+
+void removeCommonPart(QMutableListIterator<U2MsaGap> &iterator, const U2MsaGap &commonPart){
+    const QPair<U2MsaGap, U2MsaGap> gapDifference = subGap(iterator.peekNext(), commonPart);
+    if (gapDifference.second.isValid()) {
+        iterator.peekNext() = gapDifference.second;
+    }
+    if (gapDifference.first.isValid()) {
+        iterator.insert(gapDifference.first);
+    }
+    if (!gapDifference.first.isValid() && !gapDifference.second.isValid()) {
+        iterator.next();
+        iterator.remove();
+    }
+}
+
+// extracts a common part from the next values, a difference between values is written back to the models
+U2MsaGap extractCommonPart(QMutableListIterator<U2MsaGap> &firstIterator, QMutableListIterator<U2MsaGap> &secondIterator) {
+    SAFE_POINT(firstIterator.hasNext() && secondIterator.hasNext(), "Out of gap model boundaries", U2MsaGap());
+    U2MsaGap &firstGap = firstIterator.peekNext();
+    U2MsaGap &secondGap = secondIterator.peekNext();
+
+    const U2MsaGap commonPart = firstGap.intersect(secondGap);
+    SAFE_POINT(commonPart.isValid(), "Gaps don't have an intersection", U2MsaGap());
+    removeCommonPart(firstIterator, commonPart);
+    removeCommonPart(secondIterator, commonPart);
+
+    return commonPart;
+}
+
+}
+
+void MsaRowUtils::getGapModelsDifference(const U2MsaRowGapModel &firstGapModel, const U2MsaRowGapModel &secondGapModel, U2MsaRowGapModel &commonPart, U2MsaRowGapModel &firstDifference, U2MsaRowGapModel &secondDifference) {
+    commonPart.clear();
+    firstDifference = firstGapModel;
+    QMutableListIterator<U2MsaGap> firstIterator(firstDifference);
+    secondDifference = secondGapModel;
+    QMutableListIterator<U2MsaGap> secondIterator(secondDifference);
+
+    while (firstIterator.hasNext() && secondIterator.hasNext()) {
+        const bool intersectionFound = forwardToIntersection(firstIterator, secondIterator);
+        if (!intersectionFound) {
+            break;
+        }
+        commonPart << extractCommonPart(firstIterator, secondIterator);
+    }
+    mergeConsecutiveGaps(commonPart);
+}
+
+namespace {
+
+void insertGap(U2MsaRowGapModel &gapModel, const U2MsaGap &gap) {
+    for (int i = 0; i < gapModel.size(); i++) {
+        if (gapModel[i].endPos() < gap.offset) {
+            // search the proper location
+            continue;
+        } else if (gapModel[i].offset > gap.endPos()) {
+            // no intersection, just insert
+            gapModel.insert(i, gap);
+        } else {
+            // there is an intersection
+            gapModel[i].offset = qMin(gapModel[i].offset, gap.offset);
+            gapModel[i].setEndPos(qMax(gapModel[i].endPos(), gap.endPos()));
+            int gapsToRemove = 0;
+            for (int j = i + 1; j < gapModel.size(); j++) {
+                if (gapModel[j].endPos() <= gapModel[i].endPos()) {
+                    // this gap is fully covered by a new gap, just remove
+                    gapsToRemove++;
+                } else if (gapModel[j].offset <= gapModel[i].endPos()) {
+                    // this gap is partially covered by a new gap, enlarge the new gap and remove
+                    gapModel[i].setEndPos(qMax(gapModel[i].endPos(), gapModel[j].endPos()));
+                    gapsToRemove++;
+                } else {
+                    break;
+                }
+            }
+
+            gapModel.erase(gapModel.begin() + i + 1, gapModel.begin() + i + gapsToRemove + 1);
+        }
+    }
+}
+
+void subtitudeGap(QMutableListIterator<U2MsaGap> &minuendIterator, QMutableListIterator<U2MsaGap> &subtrahendIterator) {
+    const QPair<U2MsaGap, U2MsaGap> substitutionResult = subGap(minuendIterator.next(), subtrahendIterator.peekNext());
+    minuendIterator.remove();
+
+    if (substitutionResult.second.isValid()) {
+        minuendIterator.insert(substitutionResult.second);
+        minuendIterator.previous();
+    }
+
+    if (substitutionResult.first.isValid()) {
+        minuendIterator.insert(substitutionResult.first);
+        minuendIterator.previous();
+    }
+}
+
+}
+
+U2MsaRowGapModel MsaRowUtils::mergeGapModels(const U2MsaListGapModel &gapModels) {
+    U2MsaRowGapModel mergedGapModel;
+    foreach (const U2MsaRowGapModel &gapModel, gapModels) {
+        foreach (const U2MsaGap &gap, gapModel) {
+            insertGap(mergedGapModel, gap);
+        }
+    }
+    return mergedGapModel;
+}
+
+U2MsaRowGapModel MsaRowUtils::subtitudeGapModel(const U2MsaRowGapModel &minuendGapModel, const U2MsaRowGapModel &subtrahendGapModel) {
+    U2MsaRowGapModel result = minuendGapModel;
+    U2MsaRowGapModel subtrahendGapModelCopy = subtrahendGapModel;
+    QMutableListIterator<U2MsaGap> minuendIterator(result);
+    QMutableListIterator<U2MsaGap> subtrahendIterator(subtrahendGapModelCopy);
+
+    while (minuendIterator.hasNext() && subtrahendIterator.hasNext()) {
+        const bool intersectionFound = forwardToIntersection(minuendIterator, subtrahendIterator);
+        if (!intersectionFound) {
+            break;
+        }
+        subtitudeGap(minuendIterator, subtrahendIterator);
+    }
+
+    return minuendGapModel;
+}
+
+U2MsaRowGapModel MsaRowUtils::reverseGapModel(const U2MsaRowGapModel &gapModel, qint64 rowLengthWithoutTrailing) {
+    U2MsaRowGapModel reversedGapModel = gapModel;
+
+    foreach (const U2MsaGap &gap, gapModel) {
+        if (rowLengthWithoutTrailing - gap.endPos() < 0) {
+            Q_ASSERT(false);     // original model has gaps out of range or trailing gaps
+            continue;
+        }
+        reversedGapModel.prepend(U2MsaGap(rowLengthWithoutTrailing - gap.offset, gap.gap));
+    }
+
+    if (hasLeadingGaps(gapModel)) {
+        reversedGapModel.removeLast();
+        reversedGapModel.prepend(gapModel.first());
+    }
+
+    return reversedGapModel;
+}
+
+bool MsaRowUtils::hasLeadingGaps(const U2MsaRowGapModel &gapModel) {
+    return !gapModel.isEmpty() && gapModel.first().offset == 0;
+}
+
+void MsaRowUtils::removeTrailingGapsFromModel(qint64 length, U2MsaRowGapModel &gapModel) {
+    for (int i = 0; i < gapModel.size(); i++) {
+        const U2MsaGap &gap = gapModel.at(i);
+        if (gap.offset >= length) {
+            while (gapModel.size() > i) {
+                gapModel.removeLast();
+            }
+        } else {
+            length += gap.gap;
+        }
+    }
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MsaRowUtils.h b/src/corelibs/U2Core/src/util/MsaRowUtils.h
index e7633e7..d75a734 100644
--- a/src/corelibs/U2Core/src/util/MsaRowUtils.h
+++ b/src/corelibs/U2Core/src/util/MsaRowUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,20 +27,51 @@
 
 namespace U2 {
 
+class DNASequence;
+class U2OpStatus;
+class U2Region;
+
 class U2CORE_EXPORT MsaRowUtils {
 public:
-    static int getRowLength(const QByteArray &seq, const QList<U2MsaGap> &gaps);
-    static int getGapsLength(const QList<U2MsaGap> &gaps);
-    static char charAt(const QByteArray &seq, const QList<U2MsaGap> &gaps, int pos);
-    static qint64 getRowLengthWithoutTrailing(const QByteArray &seq, const QList<U2MsaGap> &gaps);
+    static int getRowLength(const QByteArray &seq, const U2MsaRowGapModel &gaps);
+    static int getGapsLength(const U2MsaRowGapModel &gaps);
+    static char charAt(const QByteArray &seq, const U2MsaRowGapModel &gaps, int pos);
+    static qint64 getRowLengthWithoutTrailing(const QByteArray &seq, const U2MsaRowGapModel &gaps);
+    static qint64 getRowLengthWithoutTrailing(qint64 dataLength, const U2MsaRowGapModel &gaps);
     /**
      * The method maps `pos` in MSA coordinates to a character position in 'seq', i.e. gaps aren't taken into account.
      * If false == 'allowGapInPos' and the gap symbol is located in 'pos' then the method returns -1.
      * Otherwise if true == 'allowGapInPos' and the gap symbol is located in 'pos' then the method returns
      * the position of a non-gap character left-most to the 'pos'.
      */
-    static int getUngappedPosition(const QByteArray &seq, const QList<U2MsaGap> &gaps, int pos, bool allowGapInPos = false);
-    static int getCoreStart(const QList<U2MsaGap>& gaps);
+    static qint64 getUngappedPosition(const U2MsaRowGapModel &gaps, qint64 dataLength, qint64 position, bool allowGapInPos = false);
+    static int getCoreStart(const U2MsaRowGapModel &gaps);
+
+    static void insertGaps(U2OpStatus &os, U2MsaRowGapModel &gaps, int rowLengthWithoutTrailing, int position, int count);
+    static void removeGaps(U2OpStatus &os, U2MsaRowGapModel &gaps, int rowLengthWithoutTrailing, int position, int count);
+
+    /**
+     * Add "offset" of gaps to the beginning of the row
+     * Warning: it is not verified that the row sequence is not empty.
+     */
+    static void addOffsetToGapModel(U2MsaRowGapModel &gapModel, int offset);
+    static void shiftGapModel(U2MsaRowGapModel &gapModel, int shiftSize);
+    static bool isGap(int dataLength, const U2MsaRowGapModel &gapModel, int position);
+    static void chopGapModel(U2MsaRowGapModel &gapModel, qint64 maxLength);
+    static void chopGapModel(U2MsaRowGapModel &gapModel, const U2Region &boundRegion);  // gaps will be shifted
+    static QByteArray joinCharsAndGaps(const DNASequence &sequence, const U2MsaRowGapModel &gapModel, int rowLength, bool keepLeadingGaps, bool keepTrailingGaps);
+    static U2MsaRowGapModel insertGapModel(const U2MsaRowGapModel &firstGapModel, const U2MsaRowGapModel &secondGapModel);
+    static void mergeConsecutiveGaps(U2MsaRowGapModel &gapModel);
+    static void getGapModelsDifference(const U2MsaRowGapModel &firstGapModel,
+                                       const U2MsaRowGapModel &secondGapModel,
+                                       U2MsaRowGapModel &commonPart,
+                                       U2MsaRowGapModel &firstDifference,
+                                       U2MsaRowGapModel &secondDifference);
+    static U2MsaRowGapModel mergeGapModels(const U2MsaListGapModel &gapModels);
+    static U2MsaRowGapModel subtitudeGapModel(const U2MsaRowGapModel &minuendGapModel, const U2MsaRowGapModel &subtrahendGapModel);
+    static U2MsaRowGapModel reverseGapModel(const U2MsaRowGapModel &gapModel, qint64 rowLengthWithoutTrailing);    // this method reverses only core gaps. Leading and trailing gaps are not involved to calculations
+    static bool hasLeadingGaps(const U2MsaRowGapModel &gapModel);
+    static void removeTrailingGapsFromModel(qint64 length, U2MsaRowGapModel &gapModel);
 };
 
 } // U2
diff --git a/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.cpp b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.cpp
new file mode 100644
index 0000000..63a1a96
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.cpp
@@ -0,0 +1,196 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DatatypeSerializeUtils.h>
+#include <U2Core/McaDbiUtils.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2SequenceDbi.h>
+
+#include "MultipleChromatogramAlignmentExporter.h"
+#include "datatype/msa/MultipleAlignmentRowInfo.h"
+
+namespace U2 {
+
+MultipleChromatogramAlignment MultipleChromatogramAlignmentExporter::getAlignment(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId) const {
+    SAFE_POINT_EXT(!connection.isOpen(), os.setError("Connection is already opened"), MultipleChromatogramAlignment());
+    connection.open(dbiRef, false, os);
+    CHECK_OP(os, MultipleChromatogramAlignment());
+
+    // Rows and their child objects
+    QList<U2McaRow> rows = exportRows(os, dbiRef, mcaId);
+    CHECK_OP(os, MultipleChromatogramAlignment());
+
+    QList<McaRowMemoryData> mcaRowsMemoryData = exportDataOfRows(os, rows);
+    CHECK_OP(os, MultipleChromatogramAlignment());
+    SAFE_POINT_EXT(rows.count() == mcaRowsMemoryData.count(), os.setError("Different number of rows and sequences"), MultipleChromatogramAlignment());
+
+    MultipleChromatogramAlignment mca;
+    for (int i = 0; i < rows.count(); ++i) {
+        mca->addRow(rows[i], mcaRowsMemoryData[i], os);
+        mca->getMcaRow(i)->setAdditionalInfo(mcaRowsMemoryData[i].additionalInfo);
+    }
+
+    // Info
+    QVariantMap info = exportAlignmentInfo(os, mcaId);
+    CHECK_OP(os, MultipleChromatogramAlignment());
+
+    mca->setInfo(info);
+
+    // Alphabet, name and length
+    U2Msa dbMca = exportAlignmentObject(os, mcaId);
+    CHECK_OP(os, MultipleChromatogramAlignment());
+
+    const DNAAlphabet *alphabet = U2AlphabetUtils::getById(dbMca.alphabet);
+    SAFE_POINT_EXT(NULL != alphabet, os.setError(QString("Alphabet with ID '%1' not found").arg(dbMca.alphabet.id)), MultipleChromatogramAlignment());
+    mca->setAlphabet(alphabet);
+    mca->setName(dbMca.visualName);
+    mca->setLength(dbMca.length);
+
+    return mca;
+}
+
+QMap<qint64, McaRowMemoryData> MultipleChromatogramAlignmentExporter::getMcaRowMemoryData(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId, const QList<qint64> rowIds) const {
+    QMap<qint64, McaRowMemoryData> result;
+    SAFE_POINT_EXT(!connection.isOpen(), os.setError("Connection is already opened"), result);
+    connection.open(dbiRef, false, os);
+    CHECK_OP(os, result);
+
+    QList<U2McaRow> rows = exportRows(os, dbiRef, mcaId, rowIds);
+    CHECK_OP(os, result);
+
+    QList<McaRowMemoryData> rowsData = exportDataOfRows(os, rows);
+    CHECK_OP(os, result);
+    SAFE_POINT_EXT(rows.count() == rowsData.count(), os.setError("Different number of rows and sequences"), result);
+
+    for (int i = 0; i < rows.size(); i++) {
+        result.insert(rows[i].rowId, rowsData[i]);
+    }
+
+    return result;
+}
+
+QList<U2McaRow> MultipleChromatogramAlignmentExporter::exportRows(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId) const {
+    return McaDbiUtils::getMcaRows(os, U2EntityRef(dbiRef, mcaId));
+}
+
+QList<U2McaRow> MultipleChromatogramAlignmentExporter::exportRows(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId, const QList<qint64> rowIds) const {
+    QList<U2McaRow> result;
+    foreach (qint64 rowId, rowIds) {
+        result << McaDbiUtils::getMcaRow(os, U2EntityRef(dbiRef, mcaId), rowId);
+        CHECK_OP(os, QList<U2McaRow>());
+    }
+    return result;
+}
+
+QList<McaRowMemoryData> MultipleChromatogramAlignmentExporter::exportDataOfRows(U2OpStatus &os, const QList<U2McaRow> &rows) const {
+    QList<McaRowMemoryData> mcaRowsMemoryData;
+    mcaRowsMemoryData.reserve(rows.count());
+
+    foreach (const U2McaRow &row, rows) {
+        McaRowMemoryData mcaRowMemoryData;
+        mcaRowMemoryData.chromatogram = ChromatogramUtils::exportChromatogram(os, U2EntityRef(connection.dbi->getDbiRef(), row.chromatogramId));
+        CHECK_OP(os, QList<McaRowMemoryData>());
+
+        mcaRowMemoryData.sequence = exportSequence(os, row.sequenceId);
+        CHECK_OP(os, QList<McaRowMemoryData>());
+
+        mcaRowMemoryData.additionalInfo = exportRowAdditionalInfo(os, row.chromatogramId);
+
+        mcaRowMemoryData.gapModel = row.gaps;
+        mcaRowMemoryData.rowLength = row.length;
+
+        mcaRowsMemoryData << mcaRowMemoryData;
+    }
+
+    return mcaRowsMemoryData;
+}
+
+DNASequence MultipleChromatogramAlignmentExporter::exportSequence(U2OpStatus &os, const U2DataId &sequenceId) const {
+    U2SequenceDbi *sequenceDbi = connection.dbi->getSequenceDbi();
+    SAFE_POINT_EXT(NULL != sequenceDbi, os.setError("NULL Sequence Dbi during exporting rows sequences"), DNASequence());
+
+    QByteArray sequenceData = sequenceDbi->getSequenceData(sequenceId, U2_REGION_MAX, os);
+    CHECK_OP(os, DNASequence());
+
+    U2Sequence dbSequence = sequenceDbi->getSequenceObject(sequenceId, os);
+    CHECK_OP(os, DNASequence());
+
+    return DNASequence(dbSequence.visualName, sequenceData);
+}
+
+QVariantMap MultipleChromatogramAlignmentExporter::exportRowAdditionalInfo(U2OpStatus &os, const U2DataId &chromatogramId) const {
+    U2AttributeDbi *attributeDbi = connection.dbi->getAttributeDbi();
+    SAFE_POINT_EXT(NULL != attributeDbi, os.setError("NULL Attribute Dbi during exporting an alignment info"), QVariantMap());
+
+    QVariantMap additionalInfo;
+    QList<U2DataId> reversedAttributeIds = attributeDbi->getObjectAttributes(chromatogramId, MultipleAlignmentRowInfo::REVERSED, os);
+    CHECK_OP(os, QVariantMap());
+
+    if (!reversedAttributeIds.isEmpty()) {
+        MultipleAlignmentRowInfo::setReversed(additionalInfo, attributeDbi->getIntegerAttribute(reversedAttributeIds.last(), os).value == 1);
+    }
+
+    QList<U2DataId> complementedAttributeIds = attributeDbi->getObjectAttributes(chromatogramId, MultipleAlignmentRowInfo::COMPLEMENTED, os);
+    CHECK_OP(os, QVariantMap());
+
+    if (!reversedAttributeIds.isEmpty()) {
+        MultipleAlignmentRowInfo::setComplemented(additionalInfo, attributeDbi->getIntegerAttribute(complementedAttributeIds.last(), os).value == 1);
+    }
+
+    return additionalInfo;
+}
+
+QVariantMap MultipleChromatogramAlignmentExporter::exportAlignmentInfo(U2OpStatus &os, const U2DataId &mcaId) const {
+    U2AttributeDbi *attributeDbi = connection.dbi->getAttributeDbi();
+    SAFE_POINT_EXT(NULL != attributeDbi, os.setError("NULL Attribute Dbi during exporting an alignment info"), QVariantMap());
+    U2Dbi* dbi = attributeDbi->getRootDbi();
+    SAFE_POINT_EXT(NULL != dbi, os.setError("NULL root Dbi during exporting an alignment info"), QVariantMap());
+
+    QVariantMap info;
+    QList<U2DataId> attributeIds = attributeDbi->getObjectAttributes(mcaId, "", os);
+    CHECK_OP(os, QVariantMap());
+
+    foreach (const U2DataId &attributeId, attributeIds) {
+        if (dbi->getEntityTypeById(attributeId) != U2Type::AttributeString) {
+            continue;
+        }
+        const U2StringAttribute attr = attributeDbi->getStringAttribute(attributeId, os);
+        CHECK_OP(os, QVariantMap());
+        info.insert(attr.name, attr.value);
+    }
+
+    return info;
+}
+
+U2Mca MultipleChromatogramAlignmentExporter::exportAlignmentObject(U2OpStatus &os, const U2DataId &mcaId) const {
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL MSA Dbi during exporting an alignment object"), U2Msa());
+    U2Msa dbMsa = msaDbi->getMsaObject(mcaId, os);
+    return U2Mca(dbMsa);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.h b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.h
new file mode 100644
index 0000000..4d04bcc
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.h
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_EXPORTER_H_
+#define _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_EXPORTER_H_
+
+#include <U2Core/DbiConnection.h>
+#include <U2Core/MultipleChromatogramAlignment.h>
+
+#include "McaRowInnerData.h"
+
+namespace U2 {
+
+class U2CORE_EXPORT MultipleChromatogramAlignmentExporter {
+public:
+    MultipleChromatogramAlignment getAlignment(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId) const;
+    QMap<qint64, McaRowMemoryData> getMcaRowMemoryData(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId, const QList<qint64> rowIds) const;
+
+private:
+    QList<U2McaRow> exportRows(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId) const;
+    QList<U2McaRow> exportRows(U2OpStatus &os, const U2DbiRef &dbiRef, const U2DataId &mcaId, const QList<qint64> rowIds) const;
+    QList<McaRowMemoryData> exportDataOfRows(U2OpStatus &os, const QList<U2McaRow> &rows) const;
+    DNASequence exportSequence(U2OpStatus &os, const U2DataId &sequenceId) const;
+    QVariantMap exportRowAdditionalInfo(U2OpStatus &os, const U2DataId &chromatogramId) const;
+    QVariantMap exportAlignmentInfo(U2OpStatus &os, const U2DataId &mcaId) const;
+    U2Mca exportAlignmentObject(U2OpStatus &os, const U2DataId &mcaId) const;
+
+    mutable DbiConnection connection;
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_EXPORTER_H_
diff --git a/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.cpp b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.cpp
new file mode 100644
index 0000000..b2d82f9
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.cpp
@@ -0,0 +1,237 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DbiConnection.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/L10n.h>
+#include <U2Core/McaDbiUtils.h>
+#include <U2Core/MultipleAlignmentInfo.h>
+#include <U2Core/MultipleChromatogramAlignment.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignmentRow.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2ObjectRelationsDbi.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2SequenceDbi.h>
+#include <U2Core/U2SequenceUtils.h>
+
+#include "MultipleChromatogramAlignmentImporter.h"
+#include "datatype/msa/MultipleAlignmentRowInfo.h"
+
+namespace U2 {
+
+MultipleChromatogramAlignmentObject * MultipleChromatogramAlignmentImporter::createAlignment(U2OpStatus &os,
+                                                                                             const U2DbiRef &dbiRef,
+                                                                                             const QString &folder,
+                                                                                             MultipleChromatogramAlignment &mca) {
+    DbiConnection connection(dbiRef, true, os);
+    CHECK(!os.isCanceled(), NULL);
+    SAFE_POINT_OP(os, NULL);
+    SAFE_POINT_EXT(NULL != connection.dbi, os.setError(L10N::nullPointerError("Destination database")), NULL);
+
+    TmpDbiObjects objs(dbiRef, os);
+
+    // MCA object and info
+    U2Mca dbMca = importMcaObject(os, connection, folder, mca);
+    objs.objects << dbMca.id;
+    CHECK_OP(os, NULL);
+
+    importMcaInfo(os, connection, dbMca.id, mca);
+    CHECK_OP(os, NULL);
+
+    // MCA rows
+    QList<McaRowDatabaseData> mcaRowsDatabaseData = importRowChildObjects(os, connection, folder, mca);
+    CHECK_OP(os, NULL);
+
+    QList<U2McaRow> rows = importRows(os, connection, dbMca, mcaRowsDatabaseData);
+    CHECK_OP(os, NULL);
+    SAFE_POINT_EXT(rows.size() == mca->getNumRows(), os.setError(QObject::tr("Unexpected error on MCA rows import")), NULL);
+
+    for (int i = 0, n = mca->getNumRows(); i < n; ++i) {
+        mca->getMcaRow(i)->setRowDbInfo(rows.at(i));
+    }
+
+    return new MultipleChromatogramAlignmentObject(mca->getName(), U2EntityRef(dbiRef, dbMca.id), QVariantMap(), mca);
+}
+
+U2Mca MultipleChromatogramAlignmentImporter::importMcaObject(U2OpStatus &os, const DbiConnection &connection, const QString &folder, const MultipleChromatogramAlignment &mca) {
+    U2Mca dbMca;
+    const DNAAlphabet *alphabet = mca->getAlphabet();
+    SAFE_POINT_EXT(NULL != alphabet, os.setError("The alignment alphabet is NULL during importing"), U2Mca());
+
+    dbMca.alphabet.id = alphabet->getId();
+    dbMca.length = mca->getLength();
+    dbMca.visualName = mca->getName();
+    if (dbMca.visualName.isEmpty()) {
+        QDate date = QDate::currentDate();
+        QString generatedName = "MCA" + date.toString();
+        coreLog.trace(QString("A multiple alignment name was empty. Generated a new name %1").arg(generatedName));
+        dbMca.visualName = generatedName;
+    }
+
+    U2MsaDbi *msaDbi = connection.dbi->getMsaDbi();
+    SAFE_POINT_EXT(NULL != msaDbi, os.setError("NULL MSA Dbi during importing an alignment"), U2Mca());
+
+    dbMca.id = msaDbi->createMcaObject(folder, dbMca.visualName, dbMca.alphabet, dbMca.length, os);
+    CHECK_OP(os, U2Mca());
+
+    return dbMca;
+}
+
+void MultipleChromatogramAlignmentImporter::importMcaInfo(U2OpStatus &os, const DbiConnection &connection, const U2DataId &mcaId, const MultipleChromatogramAlignment &mca) {
+    const QVariantMap info = mca->getInfo();
+
+    U2AttributeDbi *attributeDbi = connection.dbi->getAttributeDbi();
+    SAFE_POINT_EXT(NULL != attributeDbi, os.setError("NULL Attribute Dbi during importing an alignment"), );
+
+    foreach (const QString key, info.keys()) {
+        if (key != MultipleAlignmentInfo::NAME) { // name is stored in the object
+            const QString value =  info.value(key).toString();
+            U2StringAttribute attribute(mcaId, key, value);
+            attributeDbi->createStringAttribute(attribute, os);
+            CHECK_OP(os, );
+        }
+    }
+}
+
+QList<McaRowDatabaseData> MultipleChromatogramAlignmentImporter::importRowChildObjects(U2OpStatus &os,
+                                                                                       const DbiConnection &connection,
+                                                                                       const QString &folder,
+                                                                                       const MultipleChromatogramAlignment &mca) {
+    QList<McaRowDatabaseData> mcaRowsDatabaseData;
+    UdrDbi *udrDbi = connection.dbi->getUdrDbi();
+    SAFE_POINT_EXT(NULL != udrDbi, os.setError("NULL UDR Dbi during importing an alignment"), mcaRowsDatabaseData);
+    U2SequenceDbi *sequenceDbi = connection.dbi->getSequenceDbi();
+    SAFE_POINT_EXT(NULL != sequenceDbi, os.setError("NULL Sequence Dbi during importing an alignment"), mcaRowsDatabaseData);
+
+    const DNAAlphabet *alphabet = mca->getAlphabet();
+    SAFE_POINT_EXT(NULL != alphabet, os.setError("MCA alphabet is NULL"), mcaRowsDatabaseData);
+    const U2AlphabetId alphabetId = alphabet->getId();
+
+    foreach (const MultipleChromatogramAlignmentRow &row, mca->getMcaRows()) {
+        McaRowDatabaseData mcaRowDatabaseData;
+
+        mcaRowDatabaseData.chromatogram = importChromatogram(os, connection, folder, row->getChromatogram());
+        CHECK_OP(os, mcaRowsDatabaseData);
+
+        mcaRowDatabaseData.sequence = importSequence(os, connection, folder, row->getSequence(), alphabetId);
+        CHECK_OP(os, mcaRowsDatabaseData);
+
+        createRelation(os, connection, mcaRowDatabaseData.sequence, mcaRowDatabaseData.chromatogram.id);
+
+        mcaRowDatabaseData.additionalInfo = row->getAdditionalInfo();
+        importRowAdditionalInfo(os, connection, mcaRowDatabaseData.chromatogram, mcaRowDatabaseData.additionalInfo);
+        CHECK_OP(os, mcaRowsDatabaseData);
+
+        mcaRowDatabaseData.gapModel = row->getGapModel();
+        mcaRowDatabaseData.rowLength = row->getRowLengthWithoutTrailing();
+
+        mcaRowsDatabaseData << mcaRowDatabaseData;
+    }
+
+    return mcaRowsDatabaseData;
+}
+
+QList<U2McaRow> MultipleChromatogramAlignmentImporter::importRows(U2OpStatus &os,
+                                                                  const DbiConnection &connection,
+                                                                  U2Mca &dbMca,
+                                                                  const QList<McaRowDatabaseData> &mcaRowsDatabaseData) {
+    QList<U2McaRow> rows;
+
+    foreach (const McaRowDatabaseData &mcaRowDatabaseData, mcaRowsDatabaseData) {
+        U2McaRow row;
+        row.chromatogramId = mcaRowDatabaseData.chromatogram.id;
+        row.sequenceId = mcaRowDatabaseData.sequence.id;
+        row.gaps = mcaRowDatabaseData.gapModel;
+        row.gstart = 0;
+        row.gend = mcaRowDatabaseData.sequence.length;
+        row.length = mcaRowDatabaseData.rowLength;
+
+        rows << row;
+    }
+
+    McaDbiUtils::addRows(os, U2EntityRef(connection.dbi->getDbiRef(), dbMca.id), rows);
+    CHECK_OP(os, QList<U2McaRow>());
+    return rows;
+}
+
+U2Chromatogram MultipleChromatogramAlignmentImporter::importChromatogram(U2OpStatus &os,
+                                                                         const DbiConnection &connection,
+                                                                         const QString &folder,
+                                                                         const DNAChromatogram &chromatogram) {
+    const U2EntityRef chromatogramRef = ChromatogramUtils::import(os, connection.dbi->getDbiRef(), folder, chromatogram);
+    CHECK_OP(os, U2Chromatogram());
+    connection.dbi->getObjectDbi()->setObjectRank(chromatogramRef.entityId, U2DbiObjectRank_Child, os);
+    CHECK_OP(os, U2Chromatogram());
+    return ChromatogramUtils::getChromatogramDbInfo(os, chromatogramRef);
+}
+
+U2Sequence MultipleChromatogramAlignmentImporter::importSequence(U2OpStatus &os,
+                                                                 const DbiConnection &connection,
+                                                                 const QString &folder,
+                                                                 const DNASequence &sequence,
+                                                                 const U2AlphabetId &alphabetId) {
+    const U2EntityRef sequenceRef = U2SequenceUtils::import(os, connection.dbi->getDbiRef(), folder, sequence, alphabetId);
+    CHECK_OP(os, U2Sequence());
+    connection.dbi->getObjectDbi()->setObjectRank(sequenceRef.entityId, U2DbiObjectRank_Child, os);
+    CHECK_OP(os, U2Sequence());
+    return connection.dbi->getSequenceDbi()->getSequenceObject(sequenceRef.entityId, os);
+}
+
+void MultipleChromatogramAlignmentImporter::importRowAdditionalInfo(U2OpStatus &os, const DbiConnection &connection, const U2Chromatogram &chromatogram, const QVariantMap &additionalInfo) {
+    U2IntegerAttribute reversedAttribute;
+    reversedAttribute.objectId = chromatogram.id;
+    reversedAttribute.name = MultipleAlignmentRowInfo::REVERSED;
+    reversedAttribute.version = chromatogram.version;
+    reversedAttribute.value = MultipleAlignmentRowInfo::getReversed(additionalInfo) ? 1 : 0;
+
+    connection.dbi->getAttributeDbi()->createIntegerAttribute(reversedAttribute, os);
+    CHECK_OP(os, );
+
+    U2IntegerAttribute complementedAttribute;
+    complementedAttribute.objectId = chromatogram.id;
+    complementedAttribute.name = MultipleAlignmentRowInfo::COMPLEMENTED;
+    complementedAttribute.version = chromatogram.version;
+    complementedAttribute.value = MultipleAlignmentRowInfo::getComplemented(additionalInfo) ? 1 : 0;
+
+    connection.dbi->getAttributeDbi()->createIntegerAttribute(complementedAttribute, os);
+    CHECK_OP(os, );
+}
+
+void MultipleChromatogramAlignmentImporter::createRelation(U2OpStatus &os, const DbiConnection &connection, const U2Sequence &sequence, const U2DataId &chromatogramId) {
+    U2ObjectRelation dbRelation;
+    dbRelation.id = chromatogramId;
+    dbRelation.referencedName = sequence.visualName;
+    dbRelation.referencedObject = sequence.id;
+    dbRelation.referencedType = GObjectTypes::SEQUENCE;
+    dbRelation.relationRole = ObjectRole_Sequence;
+
+    connection.dbi->getObjectRelationsDbi()->createObjectRelation(dbRelation, os);
+    CHECK_OP(os, );
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.h b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.h
new file mode 100644
index 0000000..1357ed7
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.h
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_IMPORTER_H_
+#define _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_IMPORTER_H_
+
+#include "McaRowInnerData.h"
+
+namespace U2 {
+
+class DbiConnection;
+class MultipleChromatogramAlignment;
+class MultipleChromatogramAlignmentObject;
+class U2OpStatus;
+
+class U2CORE_EXPORT MultipleChromatogramAlignmentImporter {
+public:
+    static MultipleChromatogramAlignmentObject * createAlignment(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, MultipleChromatogramAlignment &mca);
+
+private:
+    static U2Mca importMcaObject(U2OpStatus &os, const DbiConnection &connection, const QString &folder, const MultipleChromatogramAlignment &mca);
+    static void importMcaInfo(U2OpStatus &os, const DbiConnection &connection, const U2DataId &mcaId, const MultipleChromatogramAlignment &mca);
+    static QList<McaRowDatabaseData> importRowChildObjects(U2OpStatus &os, const DbiConnection &connection, const QString &folder, const MultipleChromatogramAlignment &mca);
+    static QList<U2McaRow> importRows(U2OpStatus &os, const DbiConnection &connection, U2Mca &dbMca, const QList<McaRowDatabaseData> &mcaRowDatabaseData);
+    static U2Chromatogram importChromatogram(U2OpStatus &os, const DbiConnection &connection, const QString &folder, const DNAChromatogram &chromatogram);
+    static U2Sequence importSequence(U2OpStatus &os, const DbiConnection &connection, const QString &folder, const DNASequence &sequence, const U2AlphabetId &alphabetId);
+    static void importRowAdditionalInfo(U2OpStatus &os, const DbiConnection &connection, const U2Chromatogram &chromatogram, const QVariantMap &additionalInfo);
+    static void createRelation(U2OpStatus &os, const DbiConnection &connection, const U2Sequence &sequence, const U2DataId &chromatogramId);
+};
+
+}   // namespace U2
+
+#endif // _U2_MULTIPLE_CHROMATOGRAM_ALIGNMENT_IMPORTER_H_
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.cpp b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.cpp
new file mode 100644
index 0000000..9a6c91d
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.cpp
@@ -0,0 +1,187 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MultipleSequenceAlignmentExporter.h"
+
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SequenceDbi.h>
+
+static const char *NULL_MSA_DBI_ERROR =             "NULL MSA Dbi during exporting rows of an alignment!";
+static const char *OPENED_DBI_CONNECTION_ERROR =    "Connection is already opened!";
+static const char *ROWS_SEQS_COUNT_MISMATCH_ERROR = "Different number of rows and sequences!";
+
+namespace U2 {
+
+MultipleSequenceAlignmentExporter::MultipleSequenceAlignmentExporter()
+{
+
+}
+
+MultipleSequenceAlignment MultipleSequenceAlignmentExporter::getAlignment(const U2DbiRef& dbiRef, const U2DataId& msaId, U2OpStatus& os) const {
+    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, MultipleSequenceAlignment());
+    con.open(dbiRef, false, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    // Rows and their sequences
+    QList<U2MsaRow> rows = exportRows(msaId, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    QList<DNASequence> sequences = exportSequencesOfRows(rows, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    SAFE_POINT(rows.count() == sequences.count(), ROWS_SEQS_COUNT_MISMATCH_ERROR, MultipleSequenceAlignment());
+
+    MultipleSequenceAlignment al;
+    for (int i = 0; i < rows.count(); ++i) {
+        al->addRow(rows[i], sequences[i], os);
+        CHECK_OP(os, MultipleSequenceAlignment());
+    }
+
+    // Info
+    QVariantMap alInfo = exportAlignmentInfo(msaId, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    al->setInfo(alInfo);
+
+    // Alphabet, name and length
+    U2Msa msa = exportAlignmentObject(msaId, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    const DNAAlphabet* alphabet = U2AlphabetUtils::getById(msa.alphabet);
+    al->setAlphabet(alphabet);
+    al->setName(msa.visualName);
+    al->setLength(msa.length);
+
+    return al;
+}
+
+U2Msa MultipleSequenceAlignmentExporter::getAlignmentObject(const U2DbiRef &dbiRef, const U2DataId &msaId, U2OpStatus &os) const {
+    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, U2Msa());
+    con.open(dbiRef, false, os);
+
+    U2Msa msa = exportAlignmentObject(msaId, os);
+    CHECK_OP(os, U2Msa());
+
+    return msa;
+}
+
+QList<MsaRowReplacementData> MultipleSequenceAlignmentExporter::getAlignmentRows(const U2DbiRef& dbiRef,
+    const U2DataId& msaId, const QList<qint64> rowIds, U2OpStatus& os) const
+{
+    SAFE_POINT(!con.isOpen(), OPENED_DBI_CONNECTION_ERROR, QList<MsaRowReplacementData>());
+    con.open(dbiRef, false, os);
+    CHECK_OP(os, QList<MsaRowReplacementData>());
+
+    QList<U2MsaRow> rows = exportRows(msaId, rowIds, os);
+    CHECK_OP(os, QList<MsaRowReplacementData>());
+
+    QList<DNASequence> sequences = exportSequencesOfRows(rows, os);
+    CHECK_OP(os, QList<MsaRowReplacementData>());
+
+    QList<MsaRowReplacementData> result;
+    SAFE_POINT(rows.count() == sequences.count(), ROWS_SEQS_COUNT_MISMATCH_ERROR,
+        QList<MsaRowReplacementData>());
+    for ( int i = 0; i < rows.length( ); ++i ) {
+        result << MsaRowReplacementData( sequences.at(i), rows.at( i ) );
+    }
+    return result;
+}
+
+QList<U2MsaRow> MultipleSequenceAlignmentExporter::exportRows(const U2DataId& msaId, U2OpStatus& os) const {
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, NULL_MSA_DBI_ERROR, QList<U2MsaRow>());
+
+    return msaDbi->getRows(msaId, os);
+}
+
+QList<U2MsaRow> MultipleSequenceAlignmentExporter::exportRows( const U2DataId &msaId, const QList<qint64> rowIds,
+    U2OpStatus &os ) const
+{
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi( );
+    SAFE_POINT( NULL != msaDbi, NULL_MSA_DBI_ERROR, QList<U2MsaRow>( ) );
+    QList<U2MsaRow> result;
+    foreach ( qint64 rowId, rowIds ) {
+        result.append( msaDbi->getRow( msaId, rowId, os) );
+        SAFE_POINT_OP( os, QList<U2MsaRow>( ) );
+    }
+    return result;
+}
+
+
+QList<DNASequence> MultipleSequenceAlignmentExporter::exportSequencesOfRows(QList<U2MsaRow> rows, U2OpStatus& os) const {
+    U2SequenceDbi* sequenceDbi = con.dbi->getSequenceDbi();
+    SAFE_POINT(NULL != sequenceDbi, "NULL Sequence Dbi during exporting rows sequences!", QList<DNASequence>());
+
+    QList<DNASequence> sequences;
+    sequences.reserve( rows.count( ) );
+    for (int i = 0, n = rows.count(); i < n; ++i) {
+        const U2DataId& sequenceId = rows[i].sequenceId;
+        qint64 gstart = rows[i].gstart;
+        qint64 gend = rows[i].gend;
+        U2Region regionInSequence(gstart, gend - gstart);
+
+        QByteArray seqData = sequenceDbi->getSequenceData(sequenceId, regionInSequence, os);
+        CHECK_OP(os, QList<DNASequence>());
+
+        U2Sequence seqObj = sequenceDbi->getSequenceObject(sequenceId, os);
+        CHECK_OP(os, QList<DNASequence>());
+
+        DNASequence seq(seqObj.visualName, seqData);
+        sequences.append(seq);
+    }
+
+    return sequences;
+}
+
+QVariantMap MultipleSequenceAlignmentExporter::exportAlignmentInfo(const U2DataId& msaId, U2OpStatus& os) const {
+    U2AttributeDbi* attrDbi = con.dbi->getAttributeDbi();
+    SAFE_POINT(NULL != attrDbi, "NULL Attribute Dbi during exporting an alignment info!", QVariantMap());
+
+    // Get all MSA attributes
+    QVariantMap alInfo;
+    QList<U2DataId> attributeIds =  attrDbi->getObjectAttributes(msaId, "", os);
+    CHECK_OP(os, QVariantMap());
+
+    foreach (U2DataId attributeId, attributeIds) {
+        U2StringAttribute attr = attrDbi->getStringAttribute(attributeId, os);
+        CHECK_OP(os, QVariantMap());
+
+        QString key = attr.name;
+        QVariant val = QVariant(attr.value);
+
+        alInfo.insert(key, val);
+    }
+
+    return alInfo;
+}
+
+U2Msa MultipleSequenceAlignmentExporter::exportAlignmentObject(const U2DataId& msaId, U2OpStatus& os) const {
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during exporting an alignment object!", U2Msa());
+
+    return msaDbi->getMsaObject(msaId, os);
+}
+
+} // namespace
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.h b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.h
new file mode 100644
index 0000000..de598f5
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.h
@@ -0,0 +1,64 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_EXPORTER_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_EXPORTER_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2Msa.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2OpStatus.h>
+
+
+namespace U2 {
+
+struct MsaRowReplacementData {
+    MsaRowReplacementData( const DNASequence &_sequence, const U2MsaRow &_row )
+        : sequence( _sequence ), row( _row ) { }
+
+    DNASequence sequence;
+    U2MsaRow row;
+};
+
+/** Getting a multiple sequence alignment from DBI */
+class U2CORE_EXPORT MultipleSequenceAlignmentExporter {
+public:
+                                        MultipleSequenceAlignmentExporter();
+
+    MultipleSequenceAlignment                          getAlignment(const U2DbiRef& dbiRef, const U2DataId& msaId,
+                                            U2OpStatus& os) const;
+    U2Msa                               getAlignmentObject(const U2DbiRef& dbiRef, const U2DataId& msaId, U2OpStatus& os) const;
+    QList<MsaRowReplacementData> getAlignmentRows(const U2DbiRef& dbiRef, const U2DataId& msaId,
+                                            const QList<qint64> rowIds, U2OpStatus& os) const;
+
+private:
+    QList<U2MsaRow>                     exportRows(const U2DataId&, U2OpStatus&) const;
+    QList<U2MsaRow>                     exportRows(const U2DataId&, const QList<qint64> rowIds, U2OpStatus&) const;
+    QList<DNASequence>                  exportSequencesOfRows(QList<U2MsaRow>, U2OpStatus&) const;
+    QVariantMap                         exportAlignmentInfo(const U2DataId&, U2OpStatus&) const;
+    U2Msa                               exportAlignmentObject(const U2DataId&, U2OpStatus&) const;
+
+    mutable DbiConnection                       con;
+};
+
+} // namespace
+
+#endif // _U2_MULTIPLE_SEQUENCE_ALIGNMENT_EXPORTER_H_
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.cpp b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.cpp
new file mode 100644
index 0000000..12279a8
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.cpp
@@ -0,0 +1,245 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/L10n.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MultipleAlignmentInfo.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SequenceDbi.h>
+#include <U2Core/U2SequenceUtils.h>
+
+#include "MultipleSequenceAlignmentImporter.h"
+
+namespace U2 {
+
+MultipleSequenceAlignmentObject * MultipleSequenceAlignmentImporter::createAlignment(const U2DbiRef& dbiRef, MultipleSequenceAlignment& al, U2OpStatus& os) {
+    return createAlignment(dbiRef, U2ObjectDbi::ROOT_FOLDER, al, os);
+}
+
+MultipleSequenceAlignmentObject * MultipleSequenceAlignmentImporter::createAlignment(const U2DbiRef &dbiRef, const QString &folder, MultipleSequenceAlignment &al,
+    U2OpStatus &os, const QList<U2Sequence> &alignedSeqs)
+{
+    if (!alignedSeqs.isEmpty() && alignedSeqs.size() != al->getNumRows()) {
+        os.setError(QObject::tr("Unexpected number of sequences in a multiple alignment"));
+        return NULL;
+    }
+    DbiConnection con(dbiRef, true, os);
+    CHECK(!os.isCanceled(), NULL);
+    SAFE_POINT_OP(os, NULL);
+    SAFE_POINT_EXT(NULL != con.dbi, os.setError(L10N::nullPointerError("Destination database")), NULL);
+
+    TmpDbiObjects objs(dbiRef, os); // remove the MSA object if opStatus is incorrect
+
+    // MSA object and info
+    U2Msa msa = importMsaObject(con, folder, al, os);
+    objs.objects << msa.id;
+
+    CHECK_OP(os, NULL);
+
+    importMsaInfo(con, msa.id, al, os);
+    CHECK_OP(os, NULL);
+
+    // MSA rows
+    QList<U2Sequence> sequences;
+    U2MsaListGapModel gapModel;
+
+    if (alignedSeqs.isEmpty()) {
+        sequences = importSequences(con, folder, al, os);
+        gapModel = al->getGapModel();
+        CHECK_OP(os, NULL);
+    } else {
+        setChildRankForSequences(con, alignedSeqs, os);
+        CHECK_OP(os, NULL);
+
+        sequences = alignedSeqs;
+        splitToCharsAndGaps(con, sequences, gapModel, os);
+        CHECK_OP(os, NULL);
+    }
+
+    QList<U2MsaRow> rows = importRows(con, al, msa, sequences, gapModel, os);
+    CHECK_OP(os, NULL);
+    SAFE_POINT_EXT(rows.size() == al->getNumRows(), os.setError(QObject::tr("Unexpected error on MSA rows import")), NULL);
+
+    for (int i = 0, n = al->getNumRows(); i < n; ++i) {
+        al->getMsaRow(i)->setRowDbInfo(rows.at(i));
+    }
+
+    return new MultipleSequenceAlignmentObject(al->getName(), U2EntityRef(dbiRef, msa.id), QVariantMap(), al);
+}
+
+void MultipleSequenceAlignmentImporter::setChildRankForSequences(const DbiConnection &con, const QList<U2Sequence> &sequences, U2OpStatus &os) {
+    SAFE_POINT(NULL != con.dbi, L10N::nullPointerError("database connection"), );
+    U2ObjectDbi *objDbi = con.dbi->getObjectDbi();
+    SAFE_POINT(NULL != objDbi, L10N::nullPointerError("object storage"), );
+
+    foreach (const U2Sequence &seq, sequences) {
+        objDbi->setObjectRank(seq.id, U2DbiObjectRank_Child, os);
+        CHECK_OP(os, );
+    }
+}
+
+U2Msa MultipleSequenceAlignmentImporter::importMsaObject(const DbiConnection& con, const QString& folder, const MultipleSequenceAlignment& al, U2OpStatus& os) {
+    U2Msa msa;
+    const DNAAlphabet* alphabet = al->getAlphabet();
+    SAFE_POINT(NULL != alphabet, "The alignment alphabet is NULL during importing!", U2Msa());
+
+    msa.alphabet.id = alphabet->getId();
+    msa.length = al->getLength();
+    msa.visualName = al->getName();
+    if (msa.visualName.isEmpty()) {
+        QDate date = QDate::currentDate();
+        QString generatedName = "MSA" + date.toString();
+        coreLog.trace(QString("A multiple alignment name was empty! Generated a new name %1").arg(generatedName));
+        msa.visualName = generatedName;
+    }
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during importing an alignment!", U2Msa());
+
+    msa.id = msaDbi->createMsaObject(folder, msa.visualName, msa.alphabet, msa.length, os);
+    CHECK_OP(os, U2Msa());
+
+    return msa;
+}
+
+void MultipleSequenceAlignmentImporter::importMsaInfo(const DbiConnection& con, const U2DataId& msaId, const MultipleSequenceAlignment& al, U2OpStatus& os) {
+    QVariantMap alInfo = al->getInfo();
+
+    U2AttributeDbi* attrDbi = con.dbi->getAttributeDbi();
+    SAFE_POINT(NULL != attrDbi, "NULL Attribute Dbi during importing an alignment!",);
+
+    foreach (QString key, alInfo.keys()) {
+        if (key != MultipleAlignmentInfo::NAME) { // name is stored in the object
+            QString val =  alInfo.value(key).value<QString>();
+            U2StringAttribute attr(msaId, key, val);
+
+            attrDbi->createStringAttribute(attr, os);
+            CHECK_OP(os, );
+        }
+    }
+}
+
+QList<U2Sequence> MultipleSequenceAlignmentImporter::importSequences(const DbiConnection& con, const QString& folder, const MultipleSequenceAlignment& al, U2OpStatus& os) {
+    U2SequenceDbi* seqDbi = con.dbi->getSequenceDbi();
+    SAFE_POINT(NULL != seqDbi, "NULL Sequence Dbi during importing an alignment!", QList<U2Sequence>());
+
+    QList<U2Sequence> sequences;
+    for (int i = 0; i < al->getNumRows(); ++i) {
+        DNASequence dnaSeq = al->getMsaRow(i)->getSequence();
+
+        U2Sequence sequence = U2Sequence();
+        sequence.visualName = dnaSeq.getName();
+        sequence.circular = dnaSeq.circular;
+        sequence.length = dnaSeq.length();
+
+        const DNAAlphabet* alphabet = dnaSeq.alphabet;
+        if (NULL == alphabet) {
+            alphabet = U2AlphabetUtils::findBestAlphabet(dnaSeq.constData(), dnaSeq.length());
+        }
+        SAFE_POINT(NULL != alphabet, "Failed to get alphabet for a sequence!", QList<U2Sequence>());
+        sequence.alphabet.id = alphabet->getId();
+
+        seqDbi->createSequenceObject(sequence, folder, os, U2DbiObjectRank_Child);
+        CHECK_OP(os, QList<U2Sequence>());
+
+        QVariantMap hints;
+        const QByteArray& seqData = dnaSeq.constSequence();
+        seqDbi->updateSequenceData(sequence.id, U2_REGION_MAX, seqData, hints, os);
+        CHECK_OP(os, QList<U2Sequence>());
+
+        sequences.append(sequence);
+    }
+    return sequences;
+}
+
+void MultipleSequenceAlignmentImporter::splitToCharsAndGaps(const DbiConnection &con, QList<U2Sequence> &sequences, U2MsaListGapModel &gapModel, U2OpStatus &os) {
+    U2SequenceDbi* seqDbi = con.dbi->getSequenceDbi();
+    SAFE_POINT(NULL != seqDbi, "NULL Sequence Dbi during importing an alignment!", );
+
+    gapModel.clear();
+    for (int i = 0; i < sequences.size(); i++) {
+        const QByteArray sequenceData = seqDbi->getSequenceData(sequences[i].id, U2_REGION_MAX, os);
+        CHECK_OP(os, );
+
+        QByteArray pureSequenceData;
+        U2MsaRowGapModel sequenceGapModel;
+        MaDbiUtils::splitBytesToCharsAndGaps(sequenceData, pureSequenceData, sequenceGapModel);
+        gapModel << sequenceGapModel;
+
+        if (sequenceGapModel.isEmpty()) {
+            continue;
+        }
+
+        QVariantMap hints;
+        hints[U2SequenceDbiHints::UPDATE_SEQUENCE_LENGTH] = true;
+        hints[U2SequenceDbiHints::EMPTY_SEQUENCE] = false;
+
+        seqDbi->updateSequenceData(sequences[i].id, U2_REGION_MAX, pureSequenceData, hints, os);
+        CHECK_OP(os, );
+
+        sequences[i].length = pureSequenceData.size();
+    }
+}
+
+QList<U2MsaRow> MultipleSequenceAlignmentImporter::importRows(const DbiConnection& con, MultipleSequenceAlignment& al, U2Msa& msa, const QList<U2Sequence> &sequences, const U2MsaListGapModel &msaGapModel, U2OpStatus& os) {
+    QList<U2MsaRow> rows;
+    SAFE_POINT_EXT(sequences.size() == msaGapModel.size(), os.setError("Gap model doesn't fit sequences count"), rows);
+
+    for (int i = 0; i < al->getNumRows(); ++i) {
+        U2Sequence seq = sequences[i];
+        if (seq.length > 0) {
+            MultipleSequenceAlignmentRow alignmentRow = al->getMsaRow(i);
+            const U2MsaRowGapModel gapModel = msaGapModel[i];
+            if (!gapModel.isEmpty() && (gapModel.last().offset + gapModel.last().gap) == MsaRowUtils::getRowLength(alignmentRow->getSequence().seq, gapModel)) {
+                // remove trailing gap if it exists
+                U2MsaRowGapModel newGapModel = gapModel;
+                newGapModel.removeLast();
+                alignmentRow->setGapModel(newGapModel);
+            }
+
+            U2MsaRow row;
+            row.sequenceId = seq.id;
+            row.gstart = 0;
+            row.gend = seq.length;
+            row.gaps = alignmentRow->getGapModel();
+            row.length = alignmentRow->getRowLengthWithoutTrailing();
+
+            rows.append(row);
+        } else {
+            al->removeRow(i, os);
+            --i;
+        }
+    }
+
+    U2MsaDbi* msaDbi = con.dbi->getMsaDbi();
+    SAFE_POINT(NULL != msaDbi, "NULL MSA Dbi during importing an alignment!", QList<U2MsaRow>());
+
+    msaDbi->addRows(msa.id, rows, os);
+    CHECK_OP(os, QList<U2MsaRow>());
+    return rows;
+}
+
+} // namespace
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.h b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.h
new file mode 100644
index 0000000..45106ad
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.h
@@ -0,0 +1,58 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_IMPORTER_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_IMPORTER_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2Msa.h>
+#include <U2Core/U2Sequence.h>
+
+namespace U2 {
+
+class DbiConnection;
+class MultipleSequenceAlignmentObject;
+class U2DbiRef;
+class U2OpStatus;
+
+/** Importing a multiple alignment into db */
+class U2CORE_EXPORT MultipleSequenceAlignmentImporter {
+public:
+    /**
+     * Creates an alignment in the db.
+     * The alignment is completely removed in case of an error.
+     */
+    static MultipleSequenceAlignmentObject * createAlignment(const U2DbiRef &dbiRef, MultipleSequenceAlignment &al, U2OpStatus &os);
+    static MultipleSequenceAlignmentObject * createAlignment(const U2DbiRef &dbiRef, const QString &folder, MultipleSequenceAlignment &al,
+        U2OpStatus &os, const QList<U2Sequence> &alignedSequences = QList<U2Sequence>());
+
+private:
+    static U2Msa importMsaObject(const DbiConnection &con, const QString &folder, const MultipleSequenceAlignment &al, U2OpStatus &os);
+    static void importMsaInfo(const DbiConnection &con, const U2DataId &msaId, const MultipleSequenceAlignment &al, U2OpStatus &os);
+    static QList<U2Sequence> importSequences(const DbiConnection &con, const QString &folder, const MultipleSequenceAlignment &al, U2OpStatus &os);
+    static void splitToCharsAndGaps(const DbiConnection &con, QList<U2Sequence> &sequences, U2MsaListGapModel &gapModel, U2OpStatus &os);
+    static void setChildRankForSequences(const DbiConnection &con, const QList<U2Sequence> &sequences, U2OpStatus &os);
+    static QList<U2MsaRow> importRows(const DbiConnection &con, MultipleSequenceAlignment &al, U2Msa &msa, const QList<U2Sequence> &rows, const U2MsaListGapModel &msaGapModel, U2OpStatus &os);
+};
+
+} // namespace
+
+#endif // _U2_MULTIPLE_SEQUENCE_ALIGNMENT_IMPORTER_H_
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.cpp b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.cpp
new file mode 100644
index 0000000..332b1a4
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.cpp
@@ -0,0 +1,153 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MultipleSequenceAlignmentWalker.h"
+
+namespace U2 {
+
+class RowWalker {
+public:
+    RowWalker(const MultipleSequenceAlignmentRow &row, char gapChar)
+    : row(row), gaps(row->getGapModel()), seqPos(0), gapChar(gapChar)
+    {
+
+    }
+
+    QByteArray nextData(int startPos, int length, U2OpStatus &os) {
+        QByteArray result = row->getSequence().constSequence().mid(seqPos, length);
+
+        if (gaps.isEmpty()) { // add trailing gaps if it is possible
+            seqPos += result.length();
+            return result + gapsBytes(length - result.length());
+        }
+
+        int gapsInserted = 0;
+        while (hasGapsInRegion(startPos, length, os)) {
+            U2MsaGap gap = gaps.takeFirst();
+            U2MsaGap inRegion;
+            U2MsaGap outRegion;
+            splitGap(startPos, length, gap, inRegion, outRegion, os);
+            CHECK_OP(os, "");
+
+            result.insert(gap.offset - startPos, gapsBytes(inRegion.gap));
+            gapsInserted += inRegion.gap;
+
+            if (outRegion.gap > 0) {
+                gaps.prepend(outRegion);
+                break;
+            }
+        }
+        CHECK_OP(os, "");
+
+        if (result.length() < length) { // add trailing gaps if it is possible
+            gapsInserted += length - result.length();
+            result += gapsBytes(length - result.length());
+        }
+
+        seqPos += length - gapsInserted;
+        return result.left(length);
+    }
+
+private:
+    bool hasGapsInRegion(int startPos, int length, U2OpStatus &os) const {
+        CHECK(!gaps.isEmpty(), false);
+        const U2MsaGap &gap = gaps.first();
+
+        SAFE_POINT_EXT(gap.offset >= startPos, os.setError(L10N::badArgument(MultipleSequenceAlignmentObject::tr("Unexpected gap start"))), false);
+
+        if (gap.offset >= startPos + length) {
+            return false;
+        }
+        return true;
+    }
+
+    static void splitGap(int startPos, int length, const U2MsaGap &gap, U2MsaGap &inRegion, U2MsaGap &outRegion, U2OpStatus &os) {
+        SAFE_POINT_EXT(gap.offset >= startPos, os.setError(L10N::badArgument(MultipleSequenceAlignmentObject::tr("Unexpected gap start (too small)"))), );
+        SAFE_POINT_EXT(gap.offset < startPos + length, os.setError(L10N::badArgument(MultipleSequenceAlignmentObject::tr("Unexpected gap start (too big)"))), );
+
+        int endPos = startPos + length - 1;
+        if (gap.offset + gap.gap <= endPos) {
+            inRegion = gap;
+        } else {
+            int inRegionLength = endPos - gap.offset + 1;
+            int outRegionLength = gap.gap - inRegionLength;
+            inRegion = U2MsaGap(gap.offset, inRegionLength);
+            outRegion = U2MsaGap(endPos + 1, outRegionLength);
+        }
+
+        SAFE_POINT_EXT((startPos + length >= inRegion.offset + inRegion.gap)
+                    && (inRegion.gap + outRegion.gap == gap.gap),
+                    os.setError(L10N::internalError() + MultipleSequenceAlignmentObject::tr(" Incorrect gap splitting")), );
+    }
+
+    QByteArray gapsBytes(int length) const {
+        return QByteArray(length, gapChar);
+    }
+
+private:
+    const MultipleSequenceAlignmentRow row;
+    QList<U2MsaGap> gaps;
+    int seqPos;
+    const char gapChar;
+};
+
+/************************************************************************/
+/* MultipleSequenceAlignmentWalker */
+/************************************************************************/
+MultipleSequenceAlignmentWalker::MultipleSequenceAlignmentWalker(const MultipleSequenceAlignment &msa, char gapChar)
+: msa(msa), currentOffset(0)
+{
+    for (int i=0; i<msa->getNumRows(); i++) {
+        rowWalkerList << new RowWalker(msa->getMsaRow(i), gapChar);
+    }
+}
+
+MultipleSequenceAlignmentWalker::~MultipleSequenceAlignmentWalker() {
+    qDeleteAll(rowWalkerList);
+}
+
+bool MultipleSequenceAlignmentWalker::isEnded() const {
+    return currentOffset >= msa->getLength();
+}
+
+QList<QByteArray> MultipleSequenceAlignmentWalker::nextData(int length, U2OpStatus &os) {
+    QList<QByteArray> result;
+    SAFE_POINT_EXT(!isEnded(), os.setError(L10N::internalError() + MultipleSequenceAlignmentObject::tr(" Alignment walker is ended")), result);
+    SAFE_POINT_EXT(msa->getNumRows() == rowWalkerList.size(), os.setError(L10N::internalError() + MultipleSequenceAlignmentObject::tr(" Alignment changed")), result);
+
+    int charsRemain = msa->getLength() - currentOffset;
+    int chunkSize = (charsRemain < length) ? charsRemain : length;
+
+    for (int i=0; i<msa->getNumRows(); i++) {
+        QByteArray rowBytes = rowWalkerList[i]->nextData(currentOffset, chunkSize, os);
+        CHECK_OP(os, QList<QByteArray>());
+        result << rowBytes;
+    }
+    currentOffset += chunkSize;
+    return result;
+}
+
+} // U2
diff --git a/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.h b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.h
new file mode 100644
index 0000000..a9e3cc1
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.h
@@ -0,0 +1,48 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MULTIPLE_SEQUENCE_ALIGNMENT_WALKER_H_
+#define _U2_MULTIPLE_SEQUENCE_ALIGNMENT_WALKER_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+
+namespace U2 {
+
+class RowWalker;
+
+class U2CORE_EXPORT MultipleSequenceAlignmentWalker {
+public:
+    MultipleSequenceAlignmentWalker(const MultipleSequenceAlignment &msa, char gapChar = U2Msa::GAP_CHAR);
+    ~MultipleSequenceAlignmentWalker();
+
+    bool isEnded() const;
+
+    QList<QByteArray> nextData(int length, U2OpStatus &os);
+
+private:
+    const MultipleSequenceAlignment &msa;
+    int currentOffset;
+    QList<RowWalker*> rowWalkerList;
+};
+
+} // U2
+
+#endif // _U2_MULTIPLE_SEQUENCE_ALIGNMENT_WALKER_H_
diff --git a/src/corelibs/U2Core/src/util/PMatrixSerializeUtils.h b/src/corelibs/U2Core/src/util/PMatrixSerializeUtils.h
index 9e2606f..a5b7d26 100644
--- a/src/corelibs/U2Core/src/util/PMatrixSerializeUtils.h
+++ b/src/corelibs/U2Core/src/util/PMatrixSerializeUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 
 #include <U2Core/RawDataUdrSchema.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/QObjectScopedPointer.h b/src/corelibs/U2Core/src/util/QObjectScopedPointer.h
index ca25bd8..441461b 100644
--- a/src/corelibs/U2Core/src/util/QObjectScopedPointer.h
+++ b/src/corelibs/U2Core/src/util/QObjectScopedPointer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/QVariantUtils.cpp b/src/corelibs/U2Core/src/util/QVariantUtils.cpp
index 6ecc1ca..403a1ec 100644
--- a/src/corelibs/U2Core/src/util/QVariantUtils.cpp
+++ b/src/corelibs/U2Core/src/util/QVariantUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/QVariantUtils.h b/src/corelibs/U2Core/src/util/QVariantUtils.h
index f677f85..45caab9 100644
--- a/src/corelibs/U2Core/src/util/QVariantUtils.h
+++ b/src/corelibs/U2Core/src/util/QVariantUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/SequenceUtils.cpp b/src/corelibs/U2Core/src/util/SequenceUtils.cpp
index acae7ee..b443a48 100644
--- a/src/corelibs/U2Core/src/util/SequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/util/SequenceUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -156,7 +156,7 @@ static U2SequenceObject* storeSequenceUseGenbankHeader(const QVariantMap& hints,
     const QString folder = hints.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
 
     U2SequenceImporter seqImport;
-    seqImport.startSequence(dbiRef, folder, seqName, false, os);
+    seqImport.startSequence(os, dbiRef, folder, seqName, false);
     CHECK_OP(os, NULL);
 
     QByteArray symbolsOfNotExistingSequence(sequenceLength, 'N');
@@ -282,7 +282,7 @@ static QList<GObject *> createNewObjects(
                 init = true;
             }
         }
-        seqImport.startSequence( ref, folder, seqName, false, os );
+        seqImport.startSequence(os, ref, folder, seqName, false);
         CHECK_OP( os, QList<GObject*>( ) );
 
         AnnotationTableObject *newAnnObj = new AnnotationTableObject( seqName + " annotations", ref, hints );
diff --git a/src/corelibs/U2Core/src/util/SequenceUtils.h b/src/corelibs/U2Core/src/util/SequenceUtils.h
index 6053d5a..ded1137 100644
--- a/src/corelibs/U2Core/src/util/SequenceUtils.h
+++ b/src/corelibs/U2Core/src/util/SequenceUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QVariant>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/SignalBlocker.cpp b/src/corelibs/U2Core/src/util/SignalBlocker.cpp
new file mode 100644
index 0000000..37e0a68
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/SignalBlocker.cpp
@@ -0,0 +1,37 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SignalBlocker.h"
+
+namespace U2 {
+
+SignalBlocker::SignalBlocker(QObject * const object) :
+    object(object),
+    previousState(true)
+{
+    previousState = object->blockSignals(true);
+}
+
+SignalBlocker::~SignalBlocker() {
+    object->blockSignals(previousState);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/SignalBlocker.h b/src/corelibs/U2Core/src/util/SignalBlocker.h
new file mode 100644
index 0000000..11be266
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/SignalBlocker.h
@@ -0,0 +1,41 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SIGNAL_BLOCKER_H_
+#define _U2_SIGNAL_BLOCKER_H_
+
+#include <U2Core/global.h>
+
+namespace U2 {
+
+class U2CORE_EXPORT SignalBlocker {
+public:
+    SignalBlocker(QObject * const object);
+    ~SignalBlocker();
+
+private:
+    QObject * const object;
+    bool previousState;
+};
+
+}   // namespace U2
+
+#endif // _U2_SIGNAL_BLOCKER_H_
diff --git a/src/corelibs/U2Core/src/util/SnpeffDictionary.cpp b/src/corelibs/U2Core/src/util/SnpeffDictionary.cpp
index 62f8d27..b005a18 100644
--- a/src/corelibs/U2Core/src/util/SnpeffDictionary.cpp
+++ b/src/corelibs/U2Core/src/util/SnpeffDictionary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/SnpeffDictionary.h b/src/corelibs/U2Core/src/util/SnpeffDictionary.h
index 5c69c22..8f174e5 100644
--- a/src/corelibs/U2Core/src/util/SnpeffDictionary.h
+++ b/src/corelibs/U2Core/src/util/SnpeffDictionary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_SNPEFF_DICTIONARY_H_
 #define _U2_SNPEFF_DICTIONARY_H_
 
+#include <QMap>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/util/StrPackUtils.cpp b/src/corelibs/U2Core/src/util/StrPackUtils.cpp
new file mode 100644
index 0000000..7a25630
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/StrPackUtils.cpp
@@ -0,0 +1,105 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <math.h>
+
+#include "StrPackUtils.h"
+
+namespace U2 {
+
+const QBitArray StrPackUtils::charactersToEscape = StrPackUtils::initCharactersToEscape();
+const QString StrPackUtils::LIST_SEPARATOR = ",";
+const QString StrPackUtils::MAP_SEPARATOR = ";";
+const QString StrPackUtils::PAIR_CONNECTOR = "=";
+const QRegExp StrPackUtils::listSeparatorRegExp(QString("^\\\"|(?!\\\\)\\\"%1\\\"|\\\"$").arg(LIST_SEPARATOR));
+const QRegExp StrPackUtils::mapSeparatorRegExp(QString("(?!\\\\)\\\"%1\\\"").arg(MAP_SEPARATOR));
+const QRegExp StrPackUtils::pairSeparatorRegExp(QString("^\\\"|(?!\\\\)\\\"%1\\\"|\\\"$").arg(PAIR_CONNECTOR));
+
+QString StrPackUtils::packStringList(const QStringList &list) {
+    QString packedList;
+    foreach (const QString &string, list) {
+        packedList += wrapString(escapeCharacters(string)) + LIST_SEPARATOR;
+    }
+    packedList.chop(LIST_SEPARATOR.size());
+    return packedList;
+}
+
+QStringList StrPackUtils::unpackStringList(const QString &string) {
+    QStringList unpackedList;
+    foreach (const QString &escapedString, string.split(listSeparatorRegExp, QString::SkipEmptyParts)) {
+        unpackedList << unescapeCharacters(escapedString);
+    }
+    return unpackedList;
+}
+
+QString StrPackUtils::packMap(const StrStrMap &map) {
+    QString string;
+    foreach (const QString &key, map.keys()) {
+        string += wrapString(escapeCharacters(key)) + PAIR_CONNECTOR + wrapString(escapeCharacters(map[key])) + MAP_SEPARATOR;
+    }
+    string.chop(MAP_SEPARATOR.size());
+    return string;
+}
+
+StrStrMap StrPackUtils::unpackMap(const QString &string) {
+    StrStrMap map;
+    foreach (const QString &pair, string.split(mapSeparatorRegExp, QString::SkipEmptyParts)) {
+        const QStringList splittedPair = pair.split(pairSeparatorRegExp, QString::SkipEmptyParts);
+        Q_ASSERT(splittedPair.size() <= 2);
+        map.insert(splittedPair.first(), splittedPair.size() > 1 ? splittedPair[1] : "");
+    }
+    return map;
+}
+
+QBitArray StrPackUtils::initCharactersToEscape() {
+    QBitArray map(pow(2, 8 * sizeof(char)));
+    map[(int)'\\'] = true;
+    map[(int)'\"'] = true;
+    return map;
+}
+
+QString StrPackUtils::escapeCharacters(QString string) {
+    for (int i = 0; i < charactersToEscape.size(); i++) {
+        if (charactersToEscape[i]) {
+            const char c = (char)i;
+            string.replace(c, QString("\\") + c);
+        }
+    }
+
+    return string;
+}
+
+QString StrPackUtils::unescapeCharacters(QString string) {
+    for (int i = 0; i < charactersToEscape.size(); i++) {
+        if (charactersToEscape[i]) {
+            const char c = (char)i;
+            string.replace(QString("\\") + c, QString(1, c));
+        }
+    }
+
+    return string;
+}
+
+QString StrPackUtils::wrapString(const QString &string) {
+    return "\"" + string + "\"";
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/StrPackUtils.h b/src/corelibs/U2Core/src/util/StrPackUtils.h
new file mode 100644
index 0000000..cda5dda
--- /dev/null
+++ b/src/corelibs/U2Core/src/util/StrPackUtils.h
@@ -0,0 +1,75 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_STR_PACK_UTILS_H_
+#define _U2_STR_PACK_UTILS_H_
+
+#include <QBitArray>
+#include <QMap>
+#include <QRegExp>
+#include <QStringList>
+#include <QVariant>
+
+#include <U2Core/global.h>
+
+typedef QMap<QString, QString> StrStrMap;
+typedef QPair<QString, QString> StrStrPair;
+
+namespace U2 {
+
+class U2CORE_EXPORT StrPackUtils {
+public:
+    static QString packStringList(const QStringList &list);
+    static QStringList unpackStringList(const QString &string);
+
+    static QString packMap(const StrStrMap &map);
+    static StrStrMap unpackMap(const QString &string);
+
+private:
+    static QBitArray initCharactersToEscape();
+
+    static QString escapeCharacters(QString string);
+    static QString unescapeCharacters(QString string);
+
+    static QString wrapString(const QString &string);
+
+    static const QBitArray charactersToEscape;
+    static const QString LIST_SEPARATOR;
+    static const QString MAP_SEPARATOR;
+    static const QString PAIR_CONNECTOR;
+    static const QRegExp listSeparatorRegExp;
+    static const QRegExp mapSeparatorRegExp;
+    static const QRegExp pairSeparatorRegExp;
+};
+
+}   // namespace U2
+
+template <>
+inline QVariant qVariantFromValue<StrStrMap>(const StrStrMap &map) {
+    return qVariantFromValue(U2::StrPackUtils::packMap(map));
+}
+
+template<>
+inline StrStrMap qvariant_cast<StrStrMap>(const QVariant &variant) {
+    return U2::StrPackUtils::unpackMap(qvariant_cast<QString>(variant));
+}
+
+#endif // _U2_STR_PACK_UTILS_H_
diff --git a/src/corelibs/U2Core/src/util/SyncHttp.cpp b/src/corelibs/U2Core/src/util/SyncHttp.cpp
index 5258970..a7bdd46 100644
--- a/src/corelibs/U2Core/src/util/SyncHttp.cpp
+++ b/src/corelibs/U2Core/src/util/SyncHttp.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include "util/SyncHttp.h"
 #include <U2Core/U2SafePoints.h>
-#include <QtNetwork/QNetworkRequest>
-#include <QtCore/QTimer>
+#include <QNetworkRequest>
+#include <QTimer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/SyncHttp.h b/src/corelibs/U2Core/src/util/SyncHttp.h
index 4853e5c..cbaba8e 100644
--- a/src/corelibs/U2Core/src/util/SyncHttp.h
+++ b/src/corelibs/U2Core/src/util/SyncHttp.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,11 @@
 #ifndef __SYNC_HTTP_H__
 #define __SYNC_HTTP_H__
 
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkReply>
-#include <QtNetwork/QNetworkProxy>
-#include <QtNetwork/QAuthenticator>
-#include <QtCore/QEventLoop>
+#include <QNetworkAccessManager>
+#include <QNetworkReply>
+#include <QNetworkProxy>
+#include <QAuthenticator>
+#include <QEventLoop>
 
 #include <U2Core/global.h>
 #include <U2Core/U2OpStatus.h>
diff --git a/src/corelibs/U2Core/src/util/TaskWatchdog.cpp b/src/corelibs/U2Core/src/util/TaskWatchdog.cpp
index 750aac8..0b702fc 100644
--- a/src/corelibs/U2Core/src/util/TaskWatchdog.cpp
+++ b/src/corelibs/U2Core/src/util/TaskWatchdog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/TaskWatchdog.h b/src/corelibs/U2Core/src/util/TaskWatchdog.h
index 71aa14a..1e466fb 100644
--- a/src/corelibs/U2Core/src/util/TaskWatchdog.h
+++ b/src/corelibs/U2Core/src/util/TaskWatchdog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_TASK_WATCHDOG_H_
 #define _U2_TASK_WATCHDOG_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/util/TextUtils.cpp b/src/corelibs/U2Core/src/util/TextUtils.cpp
index a6128c1..5b42609 100644
--- a/src/corelibs/U2Core/src/util/TextUtils.cpp
+++ b/src/corelibs/U2Core/src/util/TextUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/TextUtils.h b/src/corelibs/U2Core/src/util/TextUtils.h
index e3d45c9..1054293 100644
--- a/src/corelibs/U2Core/src/util/TextUtils.h
+++ b/src/corelibs/U2Core/src/util/TextUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,10 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QBitArray>
-#include <QtCore/QSet>
-#include <QtCore/QVector>
-#include <QtCore/QStringList>
+#include <QBitArray>
+#include <QSet>
+#include <QVector>
+#include <QStringList>
 #include <assert.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Core/src/util/U1AnnotationUtils.cpp b/src/corelibs/U2Core/src/util/U1AnnotationUtils.cpp
index facdac2..af6e990 100644
--- a/src/corelibs/U2Core/src/util/U1AnnotationUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U1AnnotationUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U1AnnotationUtils.h b/src/corelibs/U2Core/src/util/U1AnnotationUtils.h
index 20aa37d..27c5dbc 100644
--- a/src/corelibs/U2Core/src/util/U1AnnotationUtils.h
+++ b/src/corelibs/U2Core/src/util/U1AnnotationUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp b/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
index c770676..956f4d0 100644
--- a/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2AlphabetUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include "U2AlphabetUtils.h"
 
 #include <U2Core/AppContext.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2SafePoints.h>
 
 namespace U2 {
@@ -122,11 +122,11 @@ char U2AlphabetUtils::getDefaultSymbol(const U2AlphabetId& alphaId) {
 }
 
 
-void U2AlphabetUtils::assignAlphabet(MAlignment& ma) {
+void U2AlphabetUtils::assignAlphabet(MultipleSequenceAlignment& ma) {
     const DNAAlphabet* resAl = NULL;
-    for (int i = 0, n = ma.getNumRows();i<n; i++) {
-        const MAlignmentRow& item = ma.getRow(i);
-        const QByteArray& itemSeq = item.getCore();
+    for (int i = 0, n = ma->getNumRows();i<n; i++) {
+        const MultipleSequenceAlignmentRow item = ma->getMsaRow(i);
+        const QByteArray& itemSeq = item->getCore();
         const DNAAlphabet* itemAl = findBestAlphabet(itemSeq);
         if (resAl == NULL) {
             resAl = itemAl;
@@ -136,19 +136,19 @@ void U2AlphabetUtils::assignAlphabet(MAlignment& ma) {
         CHECK(resAl != NULL, );
     }
     CHECK(resAl != NULL, );
-    ma.setAlphabet(resAl);
+    ma->setAlphabet(resAl);
 
     if (!resAl->isCaseSensitive()) {
-        ma.toUpperCase();
+        ma->toUpperCase();
     }
 }
 
-void U2AlphabetUtils::assignAlphabet(MAlignment& ma, char ignore) {
+void U2AlphabetUtils::assignAlphabet(MultipleSequenceAlignment& ma, char ignore) {
     const DNAAlphabet* resAl = NULL;
-    for (int i = 0, n = ma.getNumRows();i<n; i++) {
-        const MAlignmentRow& item = ma.getRow(i);
-        QByteArray itemSeq = item.getCore();
-        itemSeq.replace(ignore, MAlignment_GapChar);
+    for (int i = 0, n = ma->getNumRows();i<n; i++) {
+        const MultipleSequenceAlignmentRow item = ma->getMsaRow(i);
+        QByteArray itemSeq = item->getCore();
+        itemSeq.replace(ignore, U2Msa::GAP_CHAR);
         const DNAAlphabet* itemAl = findBestAlphabet(itemSeq);
         if (resAl == NULL) {
             resAl = itemAl;
@@ -158,10 +158,10 @@ void U2AlphabetUtils::assignAlphabet(MAlignment& ma, char ignore) {
         CHECK(resAl != NULL, );
     }
     CHECK(resAl != NULL, );
-    ma.setAlphabet(resAl);
+    ma->setAlphabet(resAl);
 
     if (!resAl->isCaseSensitive()) {
-        ma.toUpperCase();
+        ma->toUpperCase();
     }
 }
 
diff --git a/src/corelibs/U2Core/src/util/U2AlphabetUtils.h b/src/corelibs/U2Core/src/util/U2AlphabetUtils.h
index febf1ce..2197b8f 100644
--- a/src/corelibs/U2Core/src/util/U2AlphabetUtils.h
+++ b/src/corelibs/U2Core/src/util/U2AlphabetUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,13 +23,13 @@
 #define _U2_ALPHABET_UTILS_H_
 
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/Timer.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/TextUtils.h>
-#include <U2Core/U2SafePoints.h>
+#include <U2Core/Timer.h>
 #include <U2Core/U2Alphabet.h>
+#include <U2Core/U2SafePoints.h>
 
 namespace U2 {
-class MAlignment;
 
 class DNAAlphabetComparator {
 public:
@@ -111,9 +111,9 @@ public:
 
     static char getDefaultSymbol(const U2AlphabetId& alphaId);
 
-    static void assignAlphabet(MAlignment& ma);
+    static void assignAlphabet(MultipleSequenceAlignment& ma);
 
-    static void assignAlphabet(MAlignment& ma, char ignore);
+    static void assignAlphabet(MultipleSequenceAlignment& ma, char ignore);
 
 
     static const DNAAlphabet* getById(const U2AlphabetId& id) {return getById(id.id);}
diff --git a/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.cpp b/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.cpp
index 7b7a750..11bc362 100644
--- a/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.cpp
+++ b/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.h b/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.h
index a25f471..117b3c1 100644
--- a/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.h
+++ b/src/corelibs/U2Core/src/util/U2AssemblyReadIterator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2AssemblyUtils.cpp b/src/corelibs/U2Core/src/util/U2AssemblyUtils.cpp
index 707eb3c..d7e3fbf 100644
--- a/src/corelibs/U2Core/src/util/U2AssemblyUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2AssemblyUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2OpStatus.h>
 
-#include <QtCore/QRegExp>
+#include <QRegExp>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/U2AssemblyUtils.h b/src/corelibs/U2Core/src/util/U2AssemblyUtils.h
index f5556cb..c1d5776 100644
--- a/src/corelibs/U2Core/src/util/U2AssemblyUtils.h
+++ b/src/corelibs/U2Core/src/util/U2AssemblyUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2AttributeUtils.cpp b/src/corelibs/U2Core/src/util/U2AttributeUtils.cpp
index 1559bf0..bfbea34 100644
--- a/src/corelibs/U2Core/src/util/U2AttributeUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2AttributeUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -150,4 +150,12 @@ void U2AttributeUtils::copyObjectAttributes(const U2DataId &srcObjId, const U2Da
     }
 }
 
+void U2AttributeUtils::copyObjectAttributes(const U2EntityRef &srcObjRef, const U2EntityRef &dstObjRef, U2OpStatus &os) {
+    DbiConnection srcCon(srcObjRef.dbiRef, os);
+    CHECK_OP(os, );
+    DbiConnection dstCon(dstObjRef.dbiRef, os);
+    CHECK_OP(os, );
+    copyObjectAttributes(srcObjRef.entityId, dstObjRef.entityId, srcCon.dbi->getAttributeDbi(), dstCon.dbi->getAttributeDbi(), os);
+}
+
 }   // namespace U2
diff --git a/src/corelibs/U2Core/src/util/U2AttributeUtils.h b/src/corelibs/U2Core/src/util/U2AttributeUtils.h
index db1e6b7..af0e002 100644
--- a/src/corelibs/U2Core/src/util/U2AttributeUtils.h
+++ b/src/corelibs/U2Core/src/util/U2AttributeUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,6 +57,8 @@ public:
     static void copyObjectAttributes(const U2DataId &srcObjId, const U2DataId &dstObjId,
         U2AttributeDbi *srcAttributeDbi, U2AttributeDbi *dstAttributeDbi,
         U2OpStatus &os);
+
+    static void copyObjectAttributes(const U2EntityRef &srcObjRef, const U2EntityRef &dstObjRef, U2OpStatus &os);
 };
 
 } //namespace
diff --git a/src/corelibs/U2Core/src/util/U2Bits.cpp b/src/corelibs/U2Core/src/util/U2Bits.cpp
index 168a49f..cb25874 100644
--- a/src/corelibs/U2Core/src/util/U2Bits.cpp
+++ b/src/corelibs/U2Core/src/util/U2Bits.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2Bits.h b/src/corelibs/U2Core/src/util/U2Bits.h
index 46a5df5..222786d 100644
--- a/src/corelibs/U2Core/src/util/U2Bits.h
+++ b/src/corelibs/U2Core/src/util/U2Bits.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,11 @@
 #ifndef _U2_BITS_H_
 #define _U2_BITS_H_
 
-#include <U2Core/global.h>
+#include <QByteArray>
+#include <QObject>
+#include <QVector>
 
-#include <QtCore/QVector>
-#include <QtCore/QByteArray>
+#include <U2Core/global.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/src/util/U2DbiUpgrader.cpp b/src/corelibs/U2Core/src/util/U2DbiUpgrader.cpp
index 600f535..3ddee49 100644
--- a/src/corelibs/U2Core/src/util/U2DbiUpgrader.cpp
+++ b/src/corelibs/U2Core/src/util/U2DbiUpgrader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2DbiUpgrader.h b/src/corelibs/U2Core/src/util/U2DbiUpgrader.h
index 5017a00..e8905e2 100644
--- a/src/corelibs/U2Core/src/util/U2DbiUpgrader.h
+++ b/src/corelibs/U2Core/src/util/U2DbiUpgrader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2FeatureUtils.cpp b/src/corelibs/U2Core/src/util/U2FeatureUtils.cpp
index 34c9f5d..c084400 100644
--- a/src/corelibs/U2Core/src/util/U2FeatureUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2FeatureUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2FeatureUtils.h b/src/corelibs/U2Core/src/util/U2FeatureUtils.h
index ec90fe6..4a31df9 100644
--- a/src/corelibs/U2Core/src/util/U2FeatureUtils.h
+++ b/src/corelibs/U2Core/src/util/U2FeatureUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.cpp b/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.cpp
index 2ab9288..aa493a7 100644
--- a/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,8 +40,10 @@ GObjectType U2ObjectTypeUtils::toGObjectType( const U2DataType &dbType ) {
         result = GObjectTypes::BIOSTRUCTURE_3D;
     } else if ( U2Type::Assembly == dbType ) {
         result = GObjectTypes::ASSEMBLY;
+    } else if ( U2Type::Mca == dbType ) {
+        result = GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT;
     } else if ( U2Type::Msa == dbType ) {
-        result = GObjectTypes::MULTIPLE_ALIGNMENT;
+        result = GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     } else if ( U2Type::VariantTrack == dbType ) {
         result = GObjectTypes::VARIANT_TRACK;
     } else if ( U2Type::Text == dbType ) {
@@ -67,7 +69,9 @@ U2DataType U2ObjectTypeUtils::toDataType( const GObjectType &gType ) {
         result = U2Type::BioStruct3D;
     } else if ( GObjectTypes::ASSEMBLY == gType ) {
         result = U2Type::Assembly;
-    } else if ( GObjectTypes::MULTIPLE_ALIGNMENT == gType ) {
+    } else if ( GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT == gType ) {
+        result = U2Type::Mca;
+    } else if ( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT == gType ) {
         result = U2Type::Msa;
     } else if ( GObjectTypes::VARIANT_TRACK == gType ) {
         result = U2Type::VariantTrack;
diff --git a/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.h b/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.h
index bb1f657..bc3f8fa 100644
--- a/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.h
+++ b/src/corelibs/U2Core/src/util/U2ObjectTypeUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2OpStatusUtils.h b/src/corelibs/U2Core/src/util/U2OpStatusUtils.h
index 835e420..9a80ba7 100644
--- a/src/corelibs/U2Core/src/util/U2OpStatusUtils.h
+++ b/src/corelibs/U2Core/src/util/U2OpStatusUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp b/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
index efe079e..8a37525 100644
--- a/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2SequenceUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -104,6 +104,9 @@ U2Sequence U2SequenceUtils::copySequence(const U2EntityRef& srcSeq, const U2DbiR
     CHECK_OP(os, res);
 
     res = seq;
+    U2TrackModType modType = res.trackModType;
+    res.trackModType = NoTrack;
+
     res.id.clear();
     res.length = 0;
 
@@ -128,6 +131,14 @@ U2Sequence U2SequenceUtils::copySequence(const U2EntityRef& srcSeq, const U2DbiR
         CHECK_OP(os, res);
         res.length += currentChunkSize;
     }
+
+    U2DbiObjectRank rank = srcCon.dbi->getObjectDbi()->getObjectRank(seq.id, os);
+    CHECK_OP(os, res);
+
+    dstCon.dbi->getObjectDbi()->setObjectRank(res.id, rank, os);
+    CHECK_OP(os, res);
+
+    res.trackModType = modType;
     return res;
 }
 
@@ -198,15 +209,15 @@ QList<QByteArray> U2SequenceUtils::extractRegions(const U2EntityRef& seqRef, con
     return res;
 }
 
-U2EntityRef U2SequenceUtils::import(const U2DbiRef& dbiRef, const DNASequence& seq, U2OpStatus& os) {
-    return import(dbiRef, U2ObjectDbi::ROOT_FOLDER, seq, os);
+U2EntityRef U2SequenceUtils::import(U2OpStatus &os, const U2DbiRef &dbiRef, const DNASequence &seq, const U2AlphabetId &alphabetId) {
+    return import(os, dbiRef, U2ObjectDbi::ROOT_FOLDER, seq, alphabetId);
 }
 
-U2EntityRef U2SequenceUtils::import(const U2DbiRef& dbiRef, const QString& folder, const DNASequence& seq, U2OpStatus& os) {
+U2EntityRef U2SequenceUtils::import(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, const DNASequence &seq, const U2AlphabetId &alphabetId) {
     U2EntityRef res;
     U2SequenceImporter i;
 
-    i.startSequence(dbiRef, folder, seq.getName(), seq.circular, os);
+    i.startSequence(os, dbiRef, folder, seq.getName(), seq.circular, alphabetId);
     CHECK_OP(os, res);
 
     i.addBlock(seq.constData(), seq.length(), os);
@@ -230,13 +241,13 @@ void U2SequenceUtils::setQuality(const U2EntityRef& entityRef, const DNAQuality&
     QList<U2DataId> idQualList=con.dbi->getAttributeDbi()->getObjectAttributes(entityRef.entityId,DNAInfo::FASTQ_QUAL_CODES,os);
     CHECK_OP(os, );
     if(!idQualList.isEmpty()){
-        con.dbi->getAttributeDbi()->removeObjectAttributes(idQualList.first(),os);
+        con.dbi->getAttributeDbi()->removeAttributes(idQualList,os);
         CHECK_OP(os, );
     }
     QList<U2DataId> idQualTypeList=con.dbi->getAttributeDbi()->getObjectAttributes(entityRef.entityId,DNAInfo::FASTQ_QUAL_TYPE,os);
     CHECK_OP(os, );
     if(!idQualTypeList.isEmpty()){
-        con.dbi->getAttributeDbi()->removeObjectAttributes(idQualTypeList.first(),os);
+        con.dbi->getAttributeDbi()->removeAttributes(idQualTypeList,os);
         CHECK_OP(os, );
     }
 
@@ -327,11 +338,12 @@ U2SequenceImporter::~U2SequenceImporter() {
 }
 
 
-void U2SequenceImporter::startSequence(const U2DbiRef& dbiRef,
-                                       const QString& dstFolder,
-                                       const QString& visualName,
+void U2SequenceImporter::startSequence(U2OpStatus &os,
+                                       const U2DbiRef &dbiRef,
+                                       const QString &dstFolder,
+                                       const QString &visualName,
                                        bool circular,
-                                       U2OpStatus& os) {
+                                       const U2AlphabetId &alphabetId) {
     SAFE_POINT(!con.isOpen(), "Connection is already opened!", );
     con.open(dbiRef, true, os);
     CHECK_OP(os, );
@@ -341,7 +353,7 @@ void U2SequenceImporter::startSequence(const U2DbiRef& dbiRef,
     sequence = U2Sequence();
     sequence.visualName = visualName;
     sequence.circular = circular;
-    sequence.alphabet.id = DNAAlphabet_NUCL;
+    sequence.alphabet.id = alphabetId.id;
 
     currentLength = 0;
     isUnfinishedRegion = false;
diff --git a/src/corelibs/U2Core/src/util/U2SequenceUtils.h b/src/corelibs/U2Core/src/util/U2SequenceUtils.h
index 8aa316e..2fadc58 100644
--- a/src/corelibs/U2Core/src/util/U2SequenceUtils.h
+++ b/src/corelibs/U2Core/src/util/U2SequenceUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,8 +58,8 @@ public:
     static U2Sequence copySequence(const DNASequence& srcSeq, const U2DbiRef& dstDbi, const QString &dstFolder, U2OpStatus& os);
     static U2Sequence copySequence(const U2EntityRef& srcSeq, const U2DbiRef& dstDbi, const QString &dstFolder, U2OpStatus& os);
 
-    static U2EntityRef import(const U2DbiRef &dbiRef, const DNASequence &seq, U2OpStatus &os);
-    static U2EntityRef import(const U2DbiRef& dbiRef, const QString &folder, const DNASequence& seq, U2OpStatus& os);
+    static U2EntityRef import(U2OpStatus &os, const U2DbiRef &dbiRef, const DNASequence &seq, const U2AlphabetId &alphabetId = U2AlphabetId());
+    static U2EntityRef import(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, const DNASequence &seq, const U2AlphabetId &alphabetId = U2AlphabetId());
 
     static void setQuality(const U2EntityRef& entityRef, const DNAQuality& quality);
 
@@ -75,7 +75,7 @@ public:
         bool lazyMode = false, bool singleThread = true);
     virtual ~U2SequenceImporter();
 
-    void startSequence(const U2DbiRef& dbiRef, const QString &folder, const QString& visualName, bool circular, U2OpStatus& os);
+    void startSequence(U2OpStatus &os, const U2DbiRef &dbiRef, const QString &folder, const QString &visualName, bool circular, const U2AlphabetId &alphabetId = U2AlphabetId());
     virtual void addBlock(const char* data, qint64 len, U2OpStatus& os);
     void addSequenceBlock(const U2EntityRef& seqId, const U2Region& r, U2OpStatus& os);
     virtual void addDefaultSymbolsBlock(int n, U2OpStatus& os);
diff --git a/src/corelibs/U2Core/src/util/U2VariationUtils.cpp b/src/corelibs/U2Core/src/util/U2VariationUtils.cpp
index 7d7b22d..9630f14 100644
--- a/src/corelibs/U2Core/src/util/U2VariationUtils.cpp
+++ b/src/corelibs/U2Core/src/util/U2VariationUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/U2VariationUtils.h b/src/corelibs/U2Core/src/util/U2VariationUtils.h
index 5d01262..b24d2a1 100644
--- a/src/corelibs/U2Core/src/util/U2VariationUtils.h
+++ b/src/corelibs/U2Core/src/util/U2VariationUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Core/src/util/VariationPropertiesUtils.h b/src/corelibs/U2Core/src/util/VariationPropertiesUtils.h
index 1530bb3..39ea4c4 100644
--- a/src/corelibs/U2Core/src/util/VariationPropertiesUtils.h
+++ b/src/corelibs/U2Core/src/util/VariationPropertiesUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,8 +29,8 @@
 #include <U2Core/U2FeatureDbi.h>
 #include <U2Core/DNATranslation.h>
 
-#include <QtCore/QByteArray>
-#include <QtCore/QVector>
+#include <QByteArray>
+#include <QVector>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Core/transl/english.ts b/src/corelibs/U2Core/transl/english.ts
index 4c3d0a1..1ca8cf4 100644
--- a/src/corelibs/U2Core/transl/english.ts
+++ b/src/corelibs/U2Core/transl/english.ts
@@ -64,14 +64,12 @@
         <translation>Loaded sequences have different alphabets. That's why several sequence objects are created, each for specified alphabet. All sequences at one object have the same alphabet and sequences from different objects have different alphabets.</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="606"/>
-        <location filename="../src/datatype/Annotation.cpp" line="609"/>
+        <location filename="../src/datatype/Annotation.cpp" line="598"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="617"/>
-        <location filename="../src/datatype/Annotation.cpp" line="620"/>
+        <location filename="../src/datatype/Annotation.cpp" line="604"/>
         <source>Translation</source>
         <translation>Translation</translation>
     </message>
@@ -86,17 +84,17 @@
         <translation>Invalid database type: %1</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectUtils.cpp" line="427"/>
+        <location filename="../src/gobjects/GObjectUtils.cpp" line="430"/>
         <source>Unsupported object type: %1</source>
         <translation>Unsupported object type: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="409"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="421"/>
         <source>Unable to detect sequence alphabet. Probably, this is because some of merged sequences are empty.</source>
         <translation>Unable to detect sequence alphabet. Probably, this is because some of merged sequences are empty.</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="564"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="576"/>
         <source>Invalid number of symbols: %1</source>
         <translation>Invalid number of symbols: %1</translation>
     </message>
@@ -551,12 +549,12 @@
         <translation>Unexpected feature operator value detected.</translation>
     </message>
     <message>
-        <location filename="../src/util/MAlignmentImporter.cpp" line="45"/>
+        <location filename="../src/util/MultipleSequenceAlignmentImporter.cpp" line="46"/>
         <source>Unexpected number of sequences in a multiple alignment</source>
         <translation>Unexpected number of sequences in a multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/MAlignmentImporter.cpp" line="83"/>
+        <location filename="../src/util/MultipleSequenceAlignmentImporter.cpp" line="84"/>
         <source>Unexpected error on MSA rows import</source>
         <translation>Unexpected error on MSA rows import</translation>
     </message>
@@ -565,6 +563,11 @@
         <source>Symbol is not belong to alphabet</source>
         <translation>Symbol is not belong to alphabet</translation>
     </message>
+    <message>
+        <location filename="../src/util/MultipleChromatogramAlignmentImporter.cpp" line="72"/>
+        <source>Unexpected error on MCA rows import</source>
+        <translation>Unexpected error on MCA rows import</translation>
+    </message>
 </context>
 <context>
     <name>U2::AbstractProjectFilterTask</name>
@@ -609,22 +612,22 @@
 <context>
     <name>U2::AddSequenceObjectsToAlignmentTask</name>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="49"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="55"/>
         <source>Object is empty.</source>
         <translation>Object is empty.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="54"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="60"/>
         <source>Object is locked for modifications.</source>
         <translation>Object is locked for modifications.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="155"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="161"/>
         <source>Some sequences have wrong alphabet: </source>
         <translation>Some sequences have wrong alphabet: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="158"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="164"/>
         <source> and others</source>
         <translation> and others</translation>
     </message>
@@ -799,37 +802,37 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::CmdlineTaskRunner</name>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="98"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="100"/>
         <source>Run UGENE command line: %1</source>
         <translation>Run UGENE command line: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="139"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="146"/>
         <source>Cannot start process '%1'</source>
         <translation>Cannot start process '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="209"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="216"/>
         <source>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</source>
         <translation>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="213"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="220"/>
         <source>The process '%1' crashed some time after starting successfully</source>
         <translation>The process '%1' crashed some time after starting successfully</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="217"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="224"/>
         <source>Error occurred while reading from or writing to channel</source>
         <translation>Error occurred while reading from or writing to channel</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="220"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="227"/>
         <source>Unknown error occurred</source>
         <translation>Unknown error occurred</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="265"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="272"/>
         <source>An error occurred. Process is not finished successfully.</source>
         <translation>An error occurred. Process is not finished successfully.</translation>
     </message>
@@ -897,6 +900,24 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
 </context>
 <context>
+    <name>U2::CopyFileTask</name>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="32"/>
+        <source>File '%1' copy task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="49"/>
+        <source>File '%1' doesn't exist</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="51"/>
+        <source>File copy from '%1' to '%2' failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateAnnotationsTask</name>
     <message>
         <location filename="../src/tasks/CreateAnnotationTask.cpp" line="37"/>
@@ -920,12 +941,12 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::DBXRefRegistry</name>
     <message>
-        <location filename="../src/globals/DBXRefRegistry.cpp" line="42"/>
+        <location filename="../src/globals/DBXRefRegistry.cpp" line="37"/>
         <source>File with db_xref mappings not found: %1</source>
         <translation>File with db_xref mappings not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/globals/DBXRefRegistry.cpp" line="53"/>
+        <location filename="../src/globals/DBXRefRegistry.cpp" line="48"/>
         <source>Illegal db_xref file entry: %1</source>
         <translation></translation>
     </message>
@@ -1245,12 +1266,12 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::DbiDocumentFormat</name>
     <message>
-        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="46"/>
+        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="48"/>
         <source>ugenedb is a internal UGENE database file format</source>
         <translation>ugenedb is a internal UGENE database file format</translation>
     </message>
     <message>
-        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="129"/>
+        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="163"/>
         <source>Invalid destination database reference</source>
         <translation>Invalid destination database reference</translation>
     </message>
@@ -1274,27 +1295,27 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="550"/>
+        <location filename="../src/models/DocumentModel.cpp" line="566"/>
         <source>Document is not loaded</source>
         <translation>Document is not loaded</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="563"/>
+        <location filename="../src/models/DocumentModel.cpp" line="579"/>
         <source>IO adapter does not support write operation</source>
         <translation>IO adapter does not support write operation</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="569"/>
+        <location filename="../src/models/DocumentModel.cpp" line="585"/>
         <source>No write support for document format</source>
         <translation>No write support for document format</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="639"/>
+        <location filename="../src/models/DocumentModel.cpp" line="655"/>
         <source>Locked by user</source>
         <translation>Locked by user</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="663"/>
+        <location filename="../src/models/DocumentModel.cpp" line="679"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1302,8 +1323,8 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::DocumentFormat</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="125"/>
-        <location filename="../src/models/DocumentModel.cpp" line="130"/>
+        <location filename="../src/models/DocumentModel.cpp" line="127"/>
+        <location filename="../src/models/DocumentModel.cpp" line="132"/>
         <source>Writing is not supported for this format (%1). Feel free to send a feature request though.</source>
         <translation>Writing is not supported for this format (%1). Feel free to send a feature request though.</translation>
     </message>
@@ -1319,12 +1340,12 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::DocumentUtils</name>
     <message>
-        <location filename="../src/models/DocumentUtils.cpp" line="260"/>
+        <location filename="../src/models/DocumentUtils.cpp" line="261"/>
         <source>Format does not support writing of alignments</source>
         <translation>Format does not support writing of alignments</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentUtils.cpp" line="271"/>
+        <location filename="../src/models/DocumentUtils.cpp" line="272"/>
         <source>File content was merged</source>
         <translation>File content was merged</translation>
     </message>
@@ -1366,23 +1387,23 @@ The session database file is removed after closing of UGENE.</translation>
     <name>U2::ExternalToolSupportUtils</name>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="350"/>
-        <source>Can not remove temporary directory: path is empty.</source>
-        <translation>Can not remove temporary directory: path is empty.</translation>
+        <source>Can not remove temporary folder: path is empty.</source>
+        <translation>Can not remove temporary folder: path is empty.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="356"/>
-        <source>Can not remove files from temporary directory.</source>
-        <translation>Can not remove files from temporary directory.</translation>
+        <source>Can not remove files from temporary folder.</source>
+        <translation>Can not remove files from temporary folder.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="361"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="374"/>
-        <source>Can not create directory for temporary files: %1</source>
-        <translation>Can not create directory for temporary files: %1</translation>
+        <source>Can not create folder for temporary files: %1</source>
+        <translation>Can not create folder for temporary files: %1</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="405"/>
@@ -1401,8 +1422,8 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="469"/>
-        <source>Working directory is "%1"</source>
-        <translation>Working directory is "%1"</translation>
+        <source>Working folder is "%1"</source>
+        <translation>Working folder is "%1"</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="478"/>
@@ -1484,42 +1505,44 @@ The session database file is removed after closing of UGENE.</translation>
         <translation>Chromatograms</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>Alignment</source>
         <translation>Alignment</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>Alignments</source>
         <translation>Alignments</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Tree</source>
         <translation>Tree</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Trees</source>
         <translation>Trees</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="53"/>
         <source>3D model</source>
         <translation>3D model</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="53"/>
         <source>3D models</source>
         <translation>3D models</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="54"/>
         <source>Assembly</source>
         <translation>Assembly</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="54"/>
         <source>Assemblies</source>
         <translation>Assemblies</translation>
     </message>
@@ -1527,62 +1550,62 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::GUrlUtils</name>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="142"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="154"/>
         <source>Renamed %1 to %2</source>
         <translation>Renamed %1 to %2</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="146"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="158"/>
         <source>Failed to rename %1 to %2</source>
         <translation>Failed to rename %1 to %2</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="290"/>
-        <source>Directory is not specified</source>
-        <translation>Directory is not specified</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="312"/>
+        <source>Folder is not specified</source>
+        <translation>Folder is not specified</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="295"/>
-        <source>Directory can't be created: %1</source>
-        <translation>Directory can't be created: %1</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="317"/>
+        <source>Folder can't be created: %1</source>
+        <translation>Folder can't be created: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="300"/>
-        <source>Directory can't be read: %1</source>
-        <translation>Directory can't be read: %1</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="322"/>
+        <source>Folder can't be read: %1</source>
+        <translation>Folder can't be read: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="342"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="364"/>
         <source>File path is not specified</source>
         <translation>File path is not specified</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="345"/>
-        <source>Directory path instead of file path</source>
-        <translation>Directory path instead of file path</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="367"/>
+        <source>Folder path instead of file path</source>
+        <translation>Folder path instead of file path</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="403"/>
-        <source>Can not create a directory: %1</source>
-        <translation>Can not create a directory: %1</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="425"/>
+        <source>Can not create a folder: %1</source>
+        <translation>Can not create a folder: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="453"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="475"/>
         <source>%1 is not a local file [%2].</source>
         <translation>%1 is not a local file [%2].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="462"/>
-        <source>Can not create a directory [%1].</source>
-        <translation>Can not create a directory [%1].</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="484"/>
+        <source>Can not create a folder [%1].</source>
+        <translation>Can not create a folder [%1].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="467"/>
-        <source>%1 is a directory [%2].</source>
-        <translation>%1 is a directory [%2].</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="489"/>
+        <source>%1 is a folder [%2].</source>
+        <translation>%1 is a folder [%2].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.h" line="133"/>
+        <location filename="../src/util/GUrlUtils.h" line="136"/>
         <source>Output URL</source>
         <translation>Output URL</translation>
     </message>
@@ -1590,7 +1613,7 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::GzippedHttpFileAdapterFactory</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="52"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="51"/>
         <source>HTTP GZIP adaptor</source>
         <translation>HTTP GZIP adaptor</translation>
     </message>
@@ -1606,7 +1629,7 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::HttpFileAdapter</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="110"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="109"/>
         <source>Incorrect url string has been passed to HttpFileAdapter::open()</source>
         <translation>Incorrect url string has been passed to HttpFileAdapter::open()</translation>
     </message>
@@ -1614,7 +1637,7 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::HttpFileAdapterFactory</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="43"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="42"/>
         <source>HTTP file</source>
         <translation>HTTP file</translation>
     </message>
@@ -1623,13 +1646,13 @@ The session database file is removed after closing of UGENE.</translation>
     <name>U2::ImportDirToDatabaseTask</name>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="36"/>
-        <source>Import directory %1 to the database</source>
-        <translation>Import directory %1 to the database</translation>
+        <source>Import folder %1 to the database</source>
+        <translation>Import folder %1 to the database</translation>
     </message>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="43"/>
-        <source>It is not a directory: </source>
-        <translation>It is not a directory:</translation>
+        <source>It is not a folder: </source>
+        <translation>It is not a folder:</translation>
     </message>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="44"/>
@@ -1856,18 +1879,18 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="53"/>
-        <source>Directory not found: '%1'</source>
-        <translation>Directory not found: '%1'</translation>
+        <source>Folder not found: '%1'</source>
+        <translation>Folder not found: '%1'</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="54"/>
-        <source>Error opening directory: '%1'</source>
-        <translation>Error opening directory: '%1'</translation>
+        <source>Error opening folder: '%1'</source>
+        <translation>Error opening folder: '%1'</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="55"/>
-        <source>'%1' is not a directory</source>
-        <translation>'%1' is not a directory</translation>
+        <source>'%1' is not a folder</source>
+        <translation>'%1' is not a folder</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="58"/>
@@ -1972,43 +1995,63 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::LoadDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="230"/>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="245"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="225"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="240"/>
         <source>Read document: '%1'</source>
         <translation>Read document: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="266"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="261"/>
         <source>Document format is NULL!</source>
         <translation>Document format is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="267"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="262"/>
         <source>IO adapter factory is NULL!</source>
         <translation>IO adapter factory is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="447"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="276"/>
+        <source>The fileURL  to load is empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="279"/>
+        <source>Cannot get an IO file adapter factory for the file URL: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="282"/>
+        <source>Cannot detect the file format: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="285"/>
+        <source>Document format is NULL (format ID: '%1', file URL: '%2')</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="445"/>
         <source>Document not found %1</source>
         <translation>Document not found %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="467"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="465"/>
         <source>Not enough memory to load document %1</source>
         <translation>Not enough memory to load document %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="483"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="481"/>
         <source>Maximum number of objects per document limit reached for %1. Try different options for opening the document!</source>
         <translation>Maximum number of objects per document limit reached for %1. Try different options for opening the document!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="513"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="511"/>
         <source>Object not found: %1</source>
         <translation>Object not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="520"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="518"/>
         <source>Can't add object. Document format constraints check failed: %1</source>
         <translation>Can't add object. Document format constraints check failed: %1</translation>
     </message>
@@ -2029,37 +2072,37 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::LoadUnloadedDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="89"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="84"/>
         <source>Load '%1'</source>
         <translation>Load '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="97"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="92"/>
         <source>Document not found</source>
         <translation>Document not found</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="104"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="99"/>
         <source>Starting load document from %1, document format %2</source>
         <translation>Starting load document from %1, document format %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="130"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="125"/>
         <source>Document was removed</source>
         <translation>Document was removed</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="163"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="158"/>
         <source>Document is locked</source>
         <translation>Document is locked</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="182"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="177"/>
         <source>Project Document:</source>
         <translation>Project Document:</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="200"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="195"/>
         <source>Annotation object not found</source>
         <translation>Annotation object not found</translation>
     </message>
@@ -2073,68 +2116,48 @@ The session database file is removed after closing of UGENE.</translation>
     </message>
 </context>
 <context>
-    <name>U2::MAlignmentObject</name>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="77"/>
-        <source>Unexpected gap start</source>
-        <translation>Unexpected gap start</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="86"/>
-        <source>Unexpected gap start (too small)</source>
-        <translation>Unexpected gap start (too small)</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="87"/>
-        <source>Unexpected gap start (too big)</source>
-        <translation>Unexpected gap start (too big)</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="101"/>
-        <source> Incorrect gap splitting</source>
-        <translation> Incorrect gap splitting</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="136"/>
-        <source> Alignment walker is ended</source>
-        <translation> Alignment walker is ended</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="137"/>
-        <source> Alignment changed</source>
-        <translation> Alignment changed</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAUtils</name>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="183"/>
+        <location filename="../src/util/MSAUtils.cpp" line="182"/>
         <source>Alphabets of the alignment and the sequence cannot be derived</source>
         <translation>Alphabets of the alignment and the sequence cannot be derived</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="191"/>
+        <location filename="../src/util/MSAUtils.cpp" line="190"/>
         <source>Sequences have different alphabets.</source>
         <translation>Sequences have different alphabets.</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="219"/>
-        <location filename="../src/util/MSAUtils.cpp" line="224"/>
+        <location filename="../src/util/MSAUtils.cpp" line="218"/>
+        <location filename="../src/util/MSAUtils.cpp" line="223"/>
         <source>Alignment is empty!</source>
         <translation>Alignment is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="231"/>
+        <location filename="../src/util/MSAUtils.cpp" line="229"/>
         <source>Sequences in alignment have different sizes!</source>
         <translation>Sequences in alignment have different sizes!</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="340"/>
+        <location filename="../src/util/MSAUtils.cpp" line="337"/>
         <source>Can't find a row in an alignment!</source>
         <translation>Can't find a row in an alignment!</translation>
     </message>
 </context>
 <context>
+    <name>U2::MaDbiUtils</name>
+    <message>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="157"/>
+        <source>Can't rename an alignment to an empty name!</source>
+        <translation>Can't rename an alignment to an empty name!</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="197"/>
+        <source>Can't rename a row to an empty name!</source>
+        <translation>Can't rename a row to an empty name!</translation>
+    </message>
+</context>
+<context>
     <name>U2::ModifySequenceContentTask</name>
     <message>
         <location filename="../src/tasks/ModifySequenceObjectTask.cpp" line="54"/>
@@ -2185,18 +2208,17 @@ The session database file is removed after closing of UGENE.</translation>
 <context>
     <name>U2::MsaDbiUtils</name>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="865"/>
         <source>Can't rename an alignment to an empty name!</source>
-        <translation>Can't rename an alignment to an empty name!</translation>
+        <translation type="vanished">Can't rename an alignment to an empty name!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="894"/>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="901"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="935"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="942"/>
         <source>Failed to insert gaps into an alignment!</source>
         <translation>Failed to insert gaps into an alignment!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1070"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1104"/>
         <source>Failed to crop an alignment!</source>
         <translation>Failed to crop an alignment!</translation>
     </message>
@@ -2205,9 +2227,41 @@ The session database file is removed after closing of UGENE.</translation>
         <translation type="obsolete">Failed to add a row to an alignment!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1195"/>
         <source>Can't rename a row to an empty name!</source>
-        <translation>Can't rename a row to an empty name!</translation>
+        <translation type="vanished">Can't rename a row to an empty name!</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MultipleSequenceAlignmentObject</name>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="79"/>
+        <source>Unexpected gap start</source>
+        <translation>Unexpected gap start</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="88"/>
+        <source>Unexpected gap start (too small)</source>
+        <translation>Unexpected gap start (too small)</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="89"/>
+        <source>Unexpected gap start (too big)</source>
+        <translation>Unexpected gap start (too big)</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="103"/>
+        <source> Incorrect gap splitting</source>
+        <translation> Incorrect gap splitting</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="138"/>
+        <source> Alignment walker is ended</source>
+        <translation> Alignment walker is ended</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="139"/>
+        <source> Alignment changed</source>
+        <translation> Alignment changed</translation>
     </message>
 </context>
 <context>
@@ -2525,48 +2579,48 @@ UGENE contains unsaved modifications.</translation>
         <translation>Found more results than expected!</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="175"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="174"/>
         <source>Unexpected query result code: %1 (%2)</source>
         <translation>Unexpected query result code: %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="193"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="192"/>
         <source>Error binding NULL value! Query: '%1', idx: %2</source>
         <translation>Error binding NULL value! Query: '%1', idx: %2</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="305"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="304"/>
         <source>Error binding text value! Query: '%1', idx: %2, value: '%3'</source>
         <translation>Error binding text value! Query: '%1', idx: %2, value: '%3'</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="317"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="316"/>
         <source>Error binding int32 value! Query: '%1', idx: %2, value: %3</source>
         <translation>Error binding int32 value! Query: '%1', idx: %2, value: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="329"/>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="341"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="328"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="340"/>
         <source>Error binding int64 value! Query: '%1', idx: %2, value: %3</source>
         <translation>Error binding int64 value! Query: '%1', idx: %2, value: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="354"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="353"/>
         <source>Error binding boolean value! Query: '%1', idx: %2, value: %3</source>
         <translation>Error binding boolean value! Query: '%1', idx: %2, value: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="371"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="370"/>
         <source>Error binding blob value! Query: '%1', idx: %2, size: %3</source>
         <translation>Error binding blob value! Query: '%1', idx: %2, size: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="383"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="382"/>
         <source>Error binding blob value! Query: '%1', idx: %2</source>
         <translation>Error binding blob value! Query: '%1', idx: %2</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="396"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="395"/>
         <source>Unexpected row count! Query: '%1', rows: %2</source>
         <translation>Unexpected row count! Query: '%1', rows: %2</translation>
     </message>
@@ -2619,7 +2673,7 @@ UGENE contains unsaved modifications.</translation>
         <translation>Internal error, sequence alphabet id '%1' is invalid</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/DNASequenceObject.cpp" line="209"/>
+        <location filename="../src/gobjects/DNASequenceObject.cpp" line="213"/>
         <source>Modified sequence & region have different alphabet</source>
         <translation>Modified sequence & region have different alphabet</translation>
     </message>
@@ -2633,13 +2687,13 @@ UGENE contains unsaved modifications.</translation>
     </message>
     <message>
         <location filename="../src/util/U2SequenceUtils.cpp" line="102"/>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="115"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="118"/>
         <source>Invalid sequence DBI</source>
         <translation>Invalid sequence DBI</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="374"/>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="553"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="386"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="565"/>
         <source>Failed to derive sequence alphabet!</source>
         <translation>Failed to derive sequence alphabet!</translation>
     </message>
@@ -2647,7 +2701,7 @@ UGENE contains unsaved modifications.</translation>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/globals/UserApplicationsSettings.cpp" line="81"/>
+        <location filename="../src/globals/UserApplicationsSettings.cpp" line="71"/>
         <source>Cleaning temp dir: %1</source>
         <translation>Cleaning temp dir: %1</translation>
     </message>
@@ -2663,7 +2717,7 @@ UGENE contains unsaved modifications.</translation>
 <context>
     <name>U2SequenceImporter</name>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="296"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="307"/>
         <source>Sequence was not imported. Probably, this is because the sequence is empty.</source>
         <translation>Sequence was not imported. Probably, this is because the sequence is empty.</translation>
     </message>
diff --git a/src/corelibs/U2Core/transl/russian.ts b/src/corelibs/U2Core/transl/russian.ts
index f953a9e..126b51d 100644
--- a/src/corelibs/U2Core/transl/russian.ts
+++ b/src/corelibs/U2Core/transl/russian.ts
@@ -64,14 +64,12 @@
         <translation>Загруженные последовательности имеют разные алфавиты. Поэтому создано несколько объектов типа последовательность для каждого алфавита. Все последовательности одного объекта имеют одинаковый афлфавит и последовательности из разных объектов имеют разные алфавиты.</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="606"/>
-        <location filename="../src/datatype/Annotation.cpp" line="609"/>
+        <location filename="../src/datatype/Annotation.cpp" line="598"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/datatype/Annotation.cpp" line="617"/>
-        <location filename="../src/datatype/Annotation.cpp" line="620"/>
+        <location filename="../src/datatype/Annotation.cpp" line="604"/>
         <source>Translation</source>
         <translation>Трансляция</translation>
     </message>
@@ -86,17 +84,17 @@
         <translation>Неверный тип базы: %1</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectUtils.cpp" line="427"/>
+        <location filename="../src/gobjects/GObjectUtils.cpp" line="430"/>
         <source>Unsupported object type: %1</source>
         <translation>Неподдерживаемый тип объекта: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="409"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="421"/>
         <source>Unable to detect sequence alphabet. Probably, this is because some of merged sequences are empty.</source>
         <translation>Невозможно определить алфавит последовательности. Возможно это вызвано тем, что некоторые из последовательностей являются пустыми.</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="564"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="576"/>
         <source>Invalid number of symbols: %1</source>
         <translation>Неверное число символов: %1</translation>
     </message>
@@ -551,12 +549,12 @@
         <translation>Unexpected feature operator value detected.</translation>
     </message>
     <message>
-        <location filename="../src/util/MAlignmentImporter.cpp" line="45"/>
+        <location filename="../src/util/MultipleSequenceAlignmentImporter.cpp" line="46"/>
         <source>Unexpected number of sequences in a multiple alignment</source>
         <translation>Unexpected number of sequences in a multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/MAlignmentImporter.cpp" line="83"/>
+        <location filename="../src/util/MultipleSequenceAlignmentImporter.cpp" line="84"/>
         <source>Unexpected error on MSA rows import</source>
         <translation>Unexpected error on MSA rows import</translation>
     </message>
@@ -565,6 +563,11 @@
         <source>Symbol is not belong to alphabet</source>
         <translation>Symbol is not belong to alphabet</translation>
     </message>
+    <message>
+        <location filename="../src/util/MultipleChromatogramAlignmentImporter.cpp" line="72"/>
+        <source>Unexpected error on MCA rows import</source>
+        <translation>Unexpected error on MCA rows import</translation>
+    </message>
 </context>
 <context>
     <name>U2::AbstractProjectFilterTask</name>
@@ -609,22 +612,22 @@
 <context>
     <name>U2::AddSequenceObjectsToAlignmentTask</name>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="49"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="55"/>
         <source>Object is empty.</source>
         <translation>Объект пуст.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="54"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="60"/>
         <source>Object is locked for modifications.</source>
         <translation>Объект заблокирован для редактирования.</translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="155"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="161"/>
         <source>Some sequences have wrong alphabet: </source>
         <translation>Некоторые последовательности имеют неправильный алфавит: </translation>
     </message>
     <message>
-        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="158"/>
+        <location filename="../src/tasks/AddSequencesToAlignmentTask.cpp" line="164"/>
         <source> and others</source>
         <translation> и другие</translation>
     </message>
@@ -799,37 +802,37 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::CmdlineTaskRunner</name>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="98"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="100"/>
         <source>Run UGENE command line: %1</source>
         <translation>Run UGENE command line: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="139"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="146"/>
         <source>Cannot start process '%1'</source>
         <translation>Cannot start process '%1'</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="209"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="216"/>
         <source>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</source>
         <translation>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="213"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="220"/>
         <source>The process '%1' crashed some time after starting successfully</source>
         <translation>The process '%1' crashed some time after starting successfully</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="217"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="224"/>
         <source>Error occurred while reading from or writing to channel</source>
         <translation>Error occurred while reading from or writing to channel</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="220"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="227"/>
         <source>Unknown error occurred</source>
         <translation>Unknown error occurred</translation>
     </message>
     <message>
-        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="265"/>
+        <location filename="../src/tasks/CmdlineTaskRunner.cpp" line="272"/>
         <source>An error occurred. Process is not finished successfully.</source>
         <translation>An error occurred. Process is not finished successfully.</translation>
     </message>
@@ -897,6 +900,24 @@ The session database file is removed after closing of UGENE.</source>
     </message>
 </context>
 <context>
+    <name>U2::CopyFileTask</name>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="32"/>
+        <source>File '%1' copy task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="49"/>
+        <source>File '%1' doesn't exist</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/CopyFileTask.cpp" line="51"/>
+        <source>File copy from '%1' to '%2' failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateAnnotationsTask</name>
     <message>
         <location filename="../src/tasks/CreateAnnotationTask.cpp" line="37"/>
@@ -920,12 +941,12 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::DBXRefRegistry</name>
     <message>
-        <location filename="../src/globals/DBXRefRegistry.cpp" line="42"/>
+        <location filename="../src/globals/DBXRefRegistry.cpp" line="37"/>
         <source>File with db_xref mappings not found: %1</source>
         <translation>Не найден файл реестра db_xref: %1</translation>
     </message>
     <message>
-        <location filename="../src/globals/DBXRefRegistry.cpp" line="53"/>
+        <location filename="../src/globals/DBXRefRegistry.cpp" line="48"/>
         <source>Illegal db_xref file entry: %1</source>
         <translation>Неверный формат элемента: "%1"</translation>
     </message>
@@ -1247,12 +1268,12 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::DbiDocumentFormat</name>
     <message>
-        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="46"/>
+        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="48"/>
         <source>ugenedb is a internal UGENE database file format</source>
         <translation>ugenedb это внутренний формат файла базы данных UGENE</translation>
     </message>
     <message>
-        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="129"/>
+        <location filename="../src/dbi/DbiDocumentFormat.cpp" line="163"/>
         <source>Invalid destination database reference</source>
         <translation>Неверное расположение референса базы</translation>
     </message>
@@ -1276,27 +1297,27 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::Document</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="550"/>
+        <location filename="../src/models/DocumentModel.cpp" line="566"/>
         <source>Document is not loaded</source>
         <translation>Документ не загружен</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="563"/>
+        <location filename="../src/models/DocumentModel.cpp" line="579"/>
         <source>IO adapter does not support write operation</source>
         <translation>Адаптер ввода/вывода не поддерживает запись</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="569"/>
+        <location filename="../src/models/DocumentModel.cpp" line="585"/>
         <source>No write support for document format</source>
         <translation>Запись для данного формата не поддерживается</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="639"/>
+        <location filename="../src/models/DocumentModel.cpp" line="655"/>
         <source>Locked by user</source>
         <translation>Заблокирован пользователем</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="663"/>
+        <location filename="../src/models/DocumentModel.cpp" line="679"/>
         <source>Lock is NULL</source>
         <translation>Lock is NULL</translation>
     </message>
@@ -1304,8 +1325,8 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::DocumentFormat</name>
     <message>
-        <location filename="../src/models/DocumentModel.cpp" line="125"/>
-        <location filename="../src/models/DocumentModel.cpp" line="130"/>
+        <location filename="../src/models/DocumentModel.cpp" line="127"/>
+        <location filename="../src/models/DocumentModel.cpp" line="132"/>
         <source>Writing is not supported for this format (%1). Feel free to send a feature request though.</source>
         <translation>Запись в этот формат (%1) сейчас не поддерживается. Пожалуйста, сделайте запрос разработчикам.</translation>
     </message>
@@ -1321,12 +1342,12 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::DocumentUtils</name>
     <message>
-        <location filename="../src/models/DocumentUtils.cpp" line="260"/>
+        <location filename="../src/models/DocumentUtils.cpp" line="261"/>
         <source>Format does not support writing of alignments</source>
         <translation>Формат не поддерживает запись выравниваний</translation>
     </message>
     <message>
-        <location filename="../src/models/DocumentUtils.cpp" line="271"/>
+        <location filename="../src/models/DocumentUtils.cpp" line="272"/>
         <source>File content was merged</source>
         <translation>Содержимое файла было соединено</translation>
     </message>
@@ -1368,23 +1389,23 @@ The session database file is removed after closing of UGENE.</source>
     <name>U2::ExternalToolSupportUtils</name>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="350"/>
-        <source>Can not remove temporary directory: path is empty.</source>
-        <translation>Невозможно удалить временную директорию: пустой путь.</translation>
+        <source>Can not remove temporary folder: path is empty.</source>
+        <translation>Невозможно удалить временную папку: пустой путь.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="356"/>
-        <source>Can not remove files from temporary directory.</source>
-        <translation>Невозможно удалить файлы из временной директории.</translation>
+        <source>Can not remove files from temporary folder.</source>
+        <translation>Невозможно удалить файлы из временной папку.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="361"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Невозможно удалить директорию для временных файлов.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Невозможно удалить папку для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="374"/>
-        <source>Can not create directory for temporary files: %1</source>
-        <translation>Невозможно создать директорию для временных файлов: %1</translation>
+        <source>Can not create folder for temporary files: %1</source>
+        <translation>Невозможно создать папку для временных файлов: %1</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="405"/>
@@ -1403,8 +1424,8 @@ The session database file is removed after closing of UGENE.</source>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="469"/>
-        <source>Working directory is "%1"</source>
-        <translation>Рабочая директория "%1"</translation>
+        <source>Working folder is "%1"</source>
+        <translation>Рабочая папка "%1"</translation>
     </message>
     <message>
         <location filename="../src/tasks/ExternalToolRunTask.cpp" line="478"/>
@@ -1486,42 +1507,44 @@ The session database file is removed after closing of UGENE.</source>
         <translation>Хроматограммы</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>Alignment</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="49"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
         <source>Alignments</source>
         <translation>Выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Tree</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="50"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
         <source>Trees</source>
         <translation>Деревья</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="53"/>
         <source>3D model</source>
         <translation>3D модель</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="51"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="53"/>
         <source>3D models</source>
         <translation>3D модели</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="54"/>
         <source>Assembly</source>
         <translation>Сборка</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/GObjectTypes.cpp" line="52"/>
+        <location filename="../src/gobjects/GObjectTypes.cpp" line="54"/>
         <source>Assemblies</source>
         <translation>Сборки</translation>
     </message>
@@ -1529,62 +1552,62 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::GUrlUtils</name>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="142"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="154"/>
         <source>Renamed %1 to %2</source>
         <translation>Старый файл %1 переименован  в %2</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="146"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="158"/>
         <source>Failed to rename %1 to %2</source>
         <translation>Не удалось переименовать %1 в %2</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="290"/>
-        <source>Directory is not specified</source>
-        <translation>Директория не указана</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="312"/>
+        <source>Folder is not specified</source>
+        <translation>Папка не указана</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="295"/>
-        <source>Directory can't be created: %1</source>
-        <translation>Невозможно создать директорию: %1</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="317"/>
+        <source>Folder can't be created: %1</source>
+        <translation>Невозможно создать папку: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="300"/>
-        <source>Directory can't be read: %1</source>
-        <translation>Файлы директории %1 невозможно открыть на чтение</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="322"/>
+        <source>Folder can't be read: %1</source>
+        <translation>Файлы папки %1 невозможно открыть на чтение</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="342"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="364"/>
         <source>File path is not specified</source>
         <translation>Путь до файла не задан</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="345"/>
-        <source>Directory path instead of file path</source>
-        <translation>Путь до директории вместо пути до файла</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="367"/>
+        <source>Folder path instead of file path</source>
+        <translation>Путь до папки вместо пути до файла</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="403"/>
-        <source>Can not create a directory: %1</source>
-        <translation>Невозможно создать директорию: %1</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="425"/>
+        <source>Can not create a folder: %1</source>
+        <translation>Невозможно создать папку: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="453"/>
+        <location filename="../src/util/GUrlUtils.cpp" line="475"/>
         <source>%1 is not a local file [%2].</source>
         <translation>%1 is not a local file [%2].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="462"/>
-        <source>Can not create a directory [%1].</source>
-        <translation>Can not create a directory [%1].</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="484"/>
+        <source>Can not create a folder [%1].</source>
+        <translation>Can not create a folder [%1].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.cpp" line="467"/>
-        <source>%1 is a directory [%2].</source>
-        <translation>%1 is a directory [%2].</translation>
+        <location filename="../src/util/GUrlUtils.cpp" line="489"/>
+        <source>%1 is a folder [%2].</source>
+        <translation>%1 is a folder [%2].</translation>
     </message>
     <message>
-        <location filename="../src/util/GUrlUtils.h" line="133"/>
+        <location filename="../src/util/GUrlUtils.h" line="136"/>
         <source>Output URL</source>
         <translation>Выходной путь</translation>
     </message>
@@ -1592,7 +1615,7 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::GzippedHttpFileAdapterFactory</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="52"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="51"/>
         <source>HTTP GZIP adaptor</source>
         <translation>HTTP GZIP адаптер</translation>
     </message>
@@ -1608,7 +1631,7 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::HttpFileAdapter</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="110"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="109"/>
         <source>Incorrect url string has been passed to HttpFileAdapter::open()</source>
         <translation>Неправильная строка адреса была передана в HttpFileAdapter::open()</translation>
     </message>
@@ -1616,7 +1639,7 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::HttpFileAdapterFactory</name>
     <message>
-        <location filename="../src/io/HttpFileAdapter.cpp" line="43"/>
+        <location filename="../src/io/HttpFileAdapter.cpp" line="42"/>
         <source>HTTP file</source>
         <translation>HTTP адаптер</translation>
     </message>
@@ -1625,13 +1648,13 @@ The session database file is removed after closing of UGENE.</source>
     <name>U2::ImportDirToDatabaseTask</name>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="36"/>
-        <source>Import directory %1 to the database</source>
-        <translation>Импорт директории %1 в базу данных</translation>
+        <source>Import folder %1 to the database</source>
+        <translation>Импорт папки %1 в базу данных</translation>
     </message>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="43"/>
-        <source>It is not a directory: </source>
-        <translation>Это не является директорией: </translation>
+        <source>It is not a folder: </source>
+        <translation>Это не является папкой: </translation>
     </message>
     <message>
         <location filename="../src/tasks/shared_db/ImportDirToDatabaseTask.cpp" line="44"/>
@@ -1868,18 +1891,18 @@ The session database file is removed after closing of UGENE.</source>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="53"/>
-        <source>Directory not found: '%1'</source>
-        <translation>Директория не найдена: '%1'</translation>
+        <source>Folder not found: '%1'</source>
+        <translation>Папка не найдена: '%1'</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="54"/>
-        <source>Error opening directory: '%1'</source>
-        <translation>Ошибка открытия директории: '%1'</translation>
+        <source>Error opening folder: '%1'</source>
+        <translation>Ошибка открытия папки: '%1'</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="55"/>
-        <source>'%1' is not a directory</source>
-        <translation>'%1' это не директория</translation>
+        <source>'%1' is not a folder</source>
+        <translation>'%1' это не папка</translation>
     </message>
     <message>
         <location filename="../src/globals/L10n.h" line="58"/>
@@ -1975,43 +1998,63 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::LoadDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="230"/>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="245"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="225"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="240"/>
         <source>Read document: '%1'</source>
         <translation>Чтение документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="266"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="261"/>
         <source>Document format is NULL!</source>
         <translation>Формат документа NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="267"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="262"/>
         <source>IO adapter factory is NULL!</source>
         <translation>IO адаптер NULL!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="447"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="276"/>
+        <source>The fileURL  to load is empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="279"/>
+        <source>Cannot get an IO file adapter factory for the file URL: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="282"/>
+        <source>Cannot detect the file format: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="285"/>
+        <source>Document format is NULL (format ID: '%1', file URL: '%2')</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="445"/>
         <source>Document not found %1</source>
         <translation>Документ не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="467"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="465"/>
         <source>Not enough memory to load document %1</source>
         <translation>Недостаточно памяти для загрузки документа %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="483"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="481"/>
         <source>Maximum number of objects per document limit reached for %1. Try different options for opening the document!</source>
         <translation>Максимальное количество объектов в документе достигнуто для %1. Попробуйте другие способы для открытия документа!</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="513"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="511"/>
         <source>Object not found: %1</source>
         <translation>Объект не найден: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="520"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="518"/>
         <source>Can't add object. Document format constraints check failed: %1</source>
         <translation>Невозможно добавить объект. Проверка ограничений формата завершилась неудачно: %1</translation>
     </message>
@@ -2032,37 +2075,37 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::LoadUnloadedDocumentTask</name>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="130"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="125"/>
         <source>Document was removed</source>
         <translation>Документ был удалён</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="182"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="177"/>
         <source>Project Document:</source>
         <translation>Документ проекта:</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="163"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="158"/>
         <source>Document is locked</source>
         <translation>Документ заблокирован</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="89"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="84"/>
         <source>Load '%1'</source>
         <translation>Загрузка: %1</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="104"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="99"/>
         <source>Starting load document from %1, document format %2</source>
         <translation>Начата загрузка из "%1", формат документа: %2</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="97"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="92"/>
         <source>Document not found</source>
         <translation>Документ не найден</translation>
     </message>
     <message>
-        <location filename="../src/tasks/LoadDocumentTask.cpp" line="200"/>
+        <location filename="../src/tasks/LoadDocumentTask.cpp" line="195"/>
         <source>Annotation object not found</source>
         <translation>Не найдена таблица аннотаций</translation>
     </message>
@@ -2076,68 +2119,48 @@ The session database file is removed after closing of UGENE.</source>
     </message>
 </context>
 <context>
-    <name>U2::MAlignmentObject</name>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="77"/>
-        <source>Unexpected gap start</source>
-        <translation>Unexpected gap start</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="86"/>
-        <source>Unexpected gap start (too small)</source>
-        <translation>Unexpected gap start (too small)</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="87"/>
-        <source>Unexpected gap start (too big)</source>
-        <translation>Unexpected gap start (too big)</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="101"/>
-        <source> Incorrect gap splitting</source>
-        <translation> Incorrect gap splitting</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="136"/>
-        <source> Alignment walker is ended</source>
-        <translation> Alignment walker is ended</translation>
-    </message>
-    <message>
-        <location filename="../src/util/MAlignmentWalker.cpp" line="137"/>
-        <source> Alignment changed</source>
-        <translation> Alignment changed</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAUtils</name>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="183"/>
+        <location filename="../src/util/MSAUtils.cpp" line="182"/>
         <source>Alphabets of the alignment and the sequence cannot be derived</source>
         <translation>Алфавиты выравнивания и последовательности не могут быть получены</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="191"/>
+        <location filename="../src/util/MSAUtils.cpp" line="190"/>
         <source>Sequences have different alphabets.</source>
         <translation>Алфавиты последовательностей не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="219"/>
-        <location filename="../src/util/MSAUtils.cpp" line="224"/>
+        <location filename="../src/util/MSAUtils.cpp" line="218"/>
+        <location filename="../src/util/MSAUtils.cpp" line="223"/>
         <source>Alignment is empty!</source>
         <translation>Выравнивание пусто!</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="231"/>
+        <location filename="../src/util/MSAUtils.cpp" line="229"/>
         <source>Sequences in alignment have different sizes!</source>
         <translation>Последовательности в выравнивании имеют разный размер!</translation>
     </message>
     <message>
-        <location filename="../src/util/MSAUtils.cpp" line="340"/>
+        <location filename="../src/util/MSAUtils.cpp" line="337"/>
         <source>Can't find a row in an alignment!</source>
         <translation>Невозможно найти строку в выравнивании!</translation>
     </message>
 </context>
 <context>
+    <name>U2::MaDbiUtils</name>
+    <message>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="157"/>
+        <source>Can't rename an alignment to an empty name!</source>
+        <translation>Невозможно переименовать выравнивание, т.к. имя пустое!</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="197"/>
+        <source>Can't rename a row to an empty name!</source>
+        <translation>Не удалось переименовать строку, т.к. имя пустое!</translation>
+    </message>
+</context>
+<context>
     <name>U2::ModifySequenceContentTask</name>
     <message>
         <location filename="../src/tasks/ModifySequenceObjectTask.cpp" line="54"/>
@@ -2188,18 +2211,17 @@ The session database file is removed after closing of UGENE.</source>
 <context>
     <name>U2::MsaDbiUtils</name>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="865"/>
         <source>Can't rename an alignment to an empty name!</source>
-        <translation>Невозможно переименовать выравнивание, т.к. имя пустое!</translation>
+        <translation type="vanished">Невозможно переименовать выравнивание, т.к. имя пустое!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="894"/>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="901"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="935"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="942"/>
         <source>Failed to insert gaps into an alignment!</source>
         <translation>Не удалось вставить пробелы в выравнивание!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1070"/>
+        <location filename="../src/util/MsaDbiUtils.cpp" line="1104"/>
         <source>Failed to crop an alignment!</source>
         <translation>Не удалось обрезать выравнивание!</translation>
     </message>
@@ -2208,9 +2230,41 @@ The session database file is removed after closing of UGENE.</source>
         <translation type="obsolete">Не удалось добавить строку в выравнивание!</translation>
     </message>
     <message>
-        <location filename="../src/util/MsaDbiUtils.cpp" line="1195"/>
         <source>Can't rename a row to an empty name!</source>
-        <translation>Не удалось переименовать строку, т.к. имя пустое!</translation>
+        <translation type="vanished">Не удалось переименовать строку, т.к. имя пустое!</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MultipleSequenceAlignmentObject</name>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="79"/>
+        <source>Unexpected gap start</source>
+        <translation>Unexpected gap start</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="88"/>
+        <source>Unexpected gap start (too small)</source>
+        <translation>Unexpected gap start (too small)</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="89"/>
+        <source>Unexpected gap start (too big)</source>
+        <translation>Unexpected gap start (too big)</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="103"/>
+        <source> Incorrect gap splitting</source>
+        <translation> Incorrect gap splitting</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="138"/>
+        <source> Alignment walker is ended</source>
+        <translation> Alignment walker is ended</translation>
+    </message>
+    <message>
+        <location filename="../src/util/MultipleSequenceAlignmentWalker.cpp" line="139"/>
+        <source> Alignment changed</source>
+        <translation> Alignment changed</translation>
     </message>
 </context>
 <context>
@@ -2528,48 +2582,48 @@ UGENE содержит несохраненные изменения.</translati
         <translation>Найдено больше результатов чем ожидалось!</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="175"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="174"/>
         <source>Unexpected query result code: %1 (%2)</source>
         <translation>Неожиданный результат запроса: %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="193"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="192"/>
         <source>Error binding NULL value! Query: '%1', idx: %2</source>
         <translation>Ошибка связывания значения NULL! Запрос: '%1', idx: %2</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="305"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="304"/>
         <source>Error binding text value! Query: '%1', idx: %2, value: '%3'</source>
         <translation>Ошибка связывания текстового значения! Запрос: '%1', idx: %2, значение: '%3'</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="317"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="316"/>
         <source>Error binding int32 value! Query: '%1', idx: %2, value: %3</source>
         <translation>Ошибка связывания int32 значения! Запрос: '%1', idx: %2, значение: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="329"/>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="341"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="328"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="340"/>
         <source>Error binding int64 value! Query: '%1', idx: %2, value: %3</source>
         <translation>Ошибка связывания int64 значения! Запрос: '%1', idx: %2, значение: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="354"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="353"/>
         <source>Error binding boolean value! Query: '%1', idx: %2, value: %3</source>
         <translation>Ошибка связывания логического значения! Запрос: '%1', idx: %2, значение: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="371"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="370"/>
         <source>Error binding blob value! Query: '%1', idx: %2, size: %3</source>
         <translation>Ошибка связывания значения blob! Запрос: '%1', idx: %2, размер: %3</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="383"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="382"/>
         <source>Error binding blob value! Query: '%1', idx: %2</source>
         <translation>Ошибка связывания значения blob! Запрос: '%1', idx: %2</translation>
     </message>
     <message>
-        <location filename="../src/dbi/U2SqlHelpers.cpp" line="396"/>
+        <location filename="../src/dbi/U2SqlHelpers.cpp" line="395"/>
         <source>Unexpected row count! Query: '%1', rows: %2</source>
         <translation>Значение неожиданной строки! Запрос '%1', строки: %2</translation>
     </message>
@@ -2622,7 +2676,7 @@ UGENE содержит несохраненные изменения.</translati
         <translation>Внутренняя ошибка, неверный алфавит последовательности '%1'</translation>
     </message>
     <message>
-        <location filename="../src/gobjects/DNASequenceObject.cpp" line="209"/>
+        <location filename="../src/gobjects/DNASequenceObject.cpp" line="213"/>
         <source>Modified sequence & region have different alphabet</source>
         <translation>Измененная последовательность и регион имеют разные алфавиты</translation>
     </message>
@@ -2636,13 +2690,13 @@ UGENE содержит несохраненные изменения.</translati
     </message>
     <message>
         <location filename="../src/util/U2SequenceUtils.cpp" line="102"/>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="115"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="118"/>
         <source>Invalid sequence DBI</source>
         <translation>Invalid sequence DBI</translation>
     </message>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="374"/>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="553"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="386"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="565"/>
         <source>Failed to derive sequence alphabet!</source>
         <translation>Не удалось распознать алфавит!</translation>
     </message>
@@ -2650,9 +2704,9 @@ UGENE содержит несохраненные изменения.</translati
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/globals/UserApplicationsSettings.cpp" line="81"/>
+        <location filename="../src/globals/UserApplicationsSettings.cpp" line="71"/>
         <source>Cleaning temp dir: %1</source>
-        <translation>Очистка временной директории: %1</translation>
+        <translation>Очистка временной папки: %1</translation>
     </message>
 </context>
 <context>
@@ -2666,7 +2720,7 @@ UGENE содержит несохраненные изменения.</translati
 <context>
     <name>U2SequenceImporter</name>
     <message>
-        <location filename="../src/util/U2SequenceUtils.cpp" line="296"/>
+        <location filename="../src/util/U2SequenceUtils.cpp" line="307"/>
         <source>Sequence was not imported. Probably, this is because the sequence is empty.</source>
         <translation>Последовательность не была импортирована. Возможно это произошло из-за того, что последовательность является пустой.</translation>
     </message>
diff --git a/src/corelibs/U2Designer/U2Designer.pri b/src/corelibs/U2Designer/U2Designer.pri
index 84e5bc1..8649d98 100644
--- a/src/corelibs/U2Designer/U2Designer.pri
+++ b/src/corelibs/U2Designer/U2Designer.pri
@@ -5,8 +5,7 @@ include( ../../ugene_lib_common.pri )
 
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += svg webkit
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets webkitwidgets
+QT += svg webkit widgets webkitwidgets
 
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2DESIGNER_DLL
 
diff --git a/src/corelibs/U2Designer/html/Dashboard.css b/src/corelibs/U2Designer/html/Dashboard.css
index e9762fc..031454b 100644
--- a/src/corelibs/U2Designer/html/Dashboard.css
+++ b/src/corelibs/U2Designer/html/Dashboard.css
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/html/Dashboard.html b/src/corelibs/U2Designer/html/Dashboard.html
index 22d1d15..ae00b02 100644
--- a/src/corelibs/U2Designer/html/Dashboard.html
+++ b/src/corelibs/U2Designer/html/Dashboard.html
@@ -1,6 +1,6 @@
 <!--
  UGENE - Integrated Bioinformatics Tools.
- Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  http://ugene.unipro.ru
  
  This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/html/EstimationReport.css b/src/corelibs/U2Designer/html/EstimationReport.css
index 77677b0..b8a37a1 100644
--- a/src/corelibs/U2Designer/html/EstimationReport.css
+++ b/src/corelibs/U2Designer/html/EstimationReport.css
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/html/EstimationReport.html b/src/corelibs/U2Designer/html/EstimationReport.html
index 0fc9eb6..5aedd72 100644
--- a/src/corelibs/U2Designer/html/EstimationReport.html
+++ b/src/corelibs/U2Designer/html/EstimationReport.html
@@ -1,6 +1,6 @@
 <!--
  UGENE - Integrated Bioinformatics Tools.
- Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  http://ugene.unipro.ru
  
  This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/javascript/Common.js b/src/corelibs/U2Designer/javascript/Common.js
index 31abedf..9ebb937 100644
--- a/src/corelibs/U2Designer/javascript/Common.js
+++ b/src/corelibs/U2Designer/javascript/Common.js
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/javascript/ContextMenu.js b/src/corelibs/U2Designer/javascript/ContextMenu.js
index 807ccce..7a7ee08 100644
--- a/src/corelibs/U2Designer/javascript/ContextMenu.js
+++ b/src/corelibs/U2Designer/javascript/ContextMenu.js
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/javascript/ExternalToolsWidget.js b/src/corelibs/U2Designer/javascript/ExternalToolsWidget.js
index 1dee7b5..ef6eb96 100644
--- a/src/corelibs/U2Designer/javascript/ExternalToolsWidget.js
+++ b/src/corelibs/U2Designer/javascript/ExternalToolsWidget.js
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/javascript/ParametersWidget.js b/src/corelibs/U2Designer/javascript/ParametersWidget.js
index e122804..1974617 100644
--- a/src/corelibs/U2Designer/javascript/ParametersWidget.js
+++ b/src/corelibs/U2Designer/javascript/ParametersWidget.js
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
index 5292fa6..1a62da6 100644
--- a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
+++ b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,15 +20,9 @@
  */
 
 #include <limits>
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtGui/QIntValidator>
+#include <QIntValidator>
+#include <QMessageBox>
+#include <QPushButton>
 
 #include "ui_BreakpointHitCountDialog.h"
 #include "BreakpointHitCountDialog.h"
@@ -57,7 +51,7 @@ BreakpointHitCountDialog::BreakpointHitCountDialog(const QStringList &hitCountCo
 {
     ui = new Ui_BreakpointHitCountDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223551");
+    new HelpButton(this, ui->buttonBox, "20875481");
 
     ui->hitConditionCombo->addItems(hitCountConditions);
     ui->hitConditionCombo->setCurrentIndex(hitCountConditions.indexOf(conditionOnLaunch));
diff --git a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.h b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.h
index dd3867a..bf31b24 100644
--- a/src/corelibs/U2Designer/src/BreakpointHitCountDialog.h
+++ b/src/corelibs/U2Designer/src/BreakpointHitCountDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 extern const int LOWER_BOUNDARY_FOR_HIT_COUNTER_PARAMETER;
 
diff --git a/src/corelibs/U2Designer/src/DatasetWidget.cpp b/src/corelibs/U2Designer/src/DatasetWidget.cpp
index 95ec33a..ce3301b 100644
--- a/src/corelibs/U2Designer/src/DatasetWidget.cpp
+++ b/src/corelibs/U2Designer/src/DatasetWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QContextMenuEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDesktopWidget>
-#include <QtGui/QInputDialog>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QDesktopWidget>
-#include <QtWidgets/QInputDialog>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QContextMenuEvent>
+#include <QDesktopWidget>
+#include <QInputDialog>
+#include <QMessageBox>
 
 #include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
@@ -110,12 +104,11 @@ void URLListWidget::addUrlItem(UrlItem *urlItem) {
 void URLListWidget::sl_addFileButton() {
     LastUsedDirHelper lod;
     QStringList files;
-#if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
     if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         files = U2FileDialog::getOpenFileNames(NULL, tr("Select file"), lod.dir, "", 0, QFileDialog::DontUseNativeDialog);
-    } else
-#endif
-    files = U2FileDialog::getOpenFileNames(NULL, tr("Select file"), lod.dir);
+    } else {
+        files = U2FileDialog::getOpenFileNames(NULL, tr("Select file"), lod.dir);
+    }
     foreach (const QString &file, files) {
         lod.url = file;
         addUrl(file);
@@ -124,7 +117,7 @@ void URLListWidget::sl_addFileButton() {
 
 void URLListWidget::sl_addDirButton() {
     LastUsedDirHelper lod;
-    QString dir = U2FileDialog::getExistingDirectory(NULL, tr("Select a directory"), lod.dir);
+    QString dir = U2FileDialog::getExistingDirectory(NULL, tr("Select a folder"), lod.dir);
     if (!dir.isEmpty()) {
         lod.dir = dir;
         addUrl(dir);
diff --git a/src/corelibs/U2Designer/src/DatasetWidget.h b/src/corelibs/U2Designer/src/DatasetWidget.h
index b702fbe..c00d29d 100644
--- a/src/corelibs/U2Designer/src/DatasetWidget.h
+++ b/src/corelibs/U2Designer/src/DatasetWidget.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DatasetsController.cpp b/src/corelibs/U2Designer/src/DatasetsController.cpp
index 0a70aa0..49a41ca 100644
--- a/src/corelibs/U2Designer/src/DatasetsController.cpp
+++ b/src/corelibs/U2Designer/src/DatasetsController.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -20,14 +20,9 @@
 */
 
 #include <QFileInfo>
-#if (QT_VERSION < 0x050000) //Qt 5
+#include <QGroupBox>
 #include <QMessageBox>
 #include <QSplitter>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QSplitter>
-#include <QtWidgets/QGroupBox>
-#endif
 
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -96,7 +91,7 @@ public:
         : dirUrl(NULL), dbFolderUrl(url) {}
 
     virtual void visit(DirectoryItem *item) {
-        SAFE_POINT(NULL != dirUrl, "NULL directory url", );
+        SAFE_POINT(NULL != dirUrl, "NULL folder url", );
         dirUrl->setIncludeFilter(item->getIncludeFilter());
         dirUrl->setExcludeFilter(item->getExcludeFilter());
         dirUrl->setRecursive(item->isRecursive());
@@ -111,7 +106,7 @@ public:
     }
 
     virtual void visit(DbFolderItem *item) {
-        SAFE_POINT(NULL != dbFolderUrl, "NULL directory url", );
+        SAFE_POINT(NULL != dbFolderUrl, "NULL folder url", );
         dbFolderUrl->setRecursive(item->isRecursive());
     }
 
@@ -771,7 +766,7 @@ void URLListController::replaceUrl(int pos, int newPos) {
 void URLListController::addUrl(const QString &url, U2OpStatus &os) {
     URLContainer *urlCont = URLContainerFactory::createUrlContainer(url);
     if (NULL == urlCont) {
-        os.setError(tr("This file or directory does not exist: %1").arg(url));
+        os.setError(tr("This file or folder does not exist: %1").arg(url));
         return;
     }
 
diff --git a/src/corelibs/U2Designer/src/DatasetsController.h b/src/corelibs/U2Designer/src/DatasetsController.h
index 1b95df2..a79772d 100644
--- a/src/corelibs/U2Designer/src/DatasetsController.h
+++ b/src/corelibs/U2Designer/src/DatasetsController.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DatasetsListWidget.cpp b/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
index bb1c168..84392c8 100644
--- a/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
+++ b/src/corelibs/U2Designer/src/DatasetsListWidget.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DatasetsListWidget.h b/src/corelibs/U2Designer/src/DatasetsListWidget.h
index 03f4d30..4d7e24a 100644
--- a/src/corelibs/U2Designer/src/DatasetsListWidget.h
+++ b/src/corelibs/U2Designer/src/DatasetsListWidget.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DbFolderItem.cpp b/src/corelibs/U2Designer/src/DbFolderItem.cpp
index 754dad6..25bc88e 100644
--- a/src/corelibs/U2Designer/src/DbFolderItem.cpp
+++ b/src/corelibs/U2Designer/src/DbFolderItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DbFolderItem.h b/src/corelibs/U2Designer/src/DbFolderItem.h
index 90bfb56..898e644 100644
--- a/src/corelibs/U2Designer/src/DbFolderItem.h
+++ b/src/corelibs/U2Designer/src/DbFolderItem.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DbObjectItem.cpp b/src/corelibs/U2Designer/src/DbObjectItem.cpp
index 753c83a..1bbeb7b 100644
--- a/src/corelibs/U2Designer/src/DbObjectItem.cpp
+++ b/src/corelibs/U2Designer/src/DbObjectItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DbObjectItem.h b/src/corelibs/U2Designer/src/DbObjectItem.h
index 9412bc3..90d053e 100644
--- a/src/corelibs/U2Designer/src/DbObjectItem.h
+++ b/src/corelibs/U2Designer/src/DbObjectItem.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DelegateEditors.cpp b/src/corelibs/U2Designer/src/DelegateEditors.cpp
index a79f33f..0440593 100644
--- a/src/corelibs/U2Designer/src/DelegateEditors.cpp
+++ b/src/corelibs/U2Designer/src/DelegateEditors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/L10n.h>
-#include <U2Core/Log.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/SaveDocumentTask.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/Log.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/ScriptEditorDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowUtils.h>
@@ -189,13 +190,20 @@ void DoubleSpinBoxDelegate::sl_commit() {
 /********************************
 * ComboBoxDelegate
 ********************************/
+ComboBoxDelegate::ComboBoxDelegate(const QVariantMap &items, QObject *parent)
+    : PropertyDelegate(parent),
+      items(items)
+{
+
+}
+
 PropertyWidget * ComboBoxDelegate::createWizardWidget(U2OpStatus & /*os*/, QWidget *parent) const {
     return new ComboBoxWidget(items, parent);
 }
 
 QWidget *ComboBoxDelegate::createEditor(QWidget *parent,
-                                       const QStyleOptionViewItem &/* option */,
-                                       const QModelIndex &/* index */) const
+                                        const QStyleOptionViewItem &/* option */,
+                                        const QModelIndex &/* index */) const
 {
     ComboBoxWidget *editor = new ComboBoxWidget(getItems(), parent);
     connect(editor, SIGNAL(valueChanged(const QString &)),
diff --git a/src/corelibs/U2Designer/src/DelegateEditors.h b/src/corelibs/U2Designer/src/DelegateEditors.h
index 7d39358..2edaee3 100644
--- a/src/corelibs/U2Designer/src/DelegateEditors.h
+++ b/src/corelibs/U2Designer/src/DelegateEditors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,34 +26,20 @@
 
 #include <U2Lang/ConfigurationEditor.h>
 
-#include <QtCore/QModelIndex>
-#include <QtCore/QPointer>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#include <QtGui/QDialog>
-#include <QtGui/QListWidget>
-#include <QtGui/QSpinBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QTextEdit>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QTextEdit>
-#endif
-
-#include <QtCore/QCoreApplication>
-#include <QtGui/QKeyEvent>
+#include <QComboBox>
+#include <QCoreApplication>
+#include <QDialog>
+#include <QHBoxLayout>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QModelIndex>
+#include <QPointer>
+#include <QPushButton>
+#include <QSpinBox>
+#include <QTextEdit>
+#include <QToolButton>
+#include <QVBoxLayout>
 
 #include "PropertyWidget.h"
 
@@ -187,7 +173,7 @@ private:
 class U2DESIGNER_EXPORT ComboBoxDelegate : public PropertyDelegate {
     Q_OBJECT
 public:
-    ComboBoxDelegate(const QVariantMap& items, QObject *parent = 0) : PropertyDelegate(parent), items(items) {}
+    ComboBoxDelegate(const QVariantMap& items, QObject *parent = 0);    // items: visible name -> value
     virtual ~ComboBoxDelegate() {}
 
       QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
diff --git a/src/corelibs/U2Designer/src/DesignerUtils.cpp b/src/corelibs/U2Designer/src/DesignerUtils.cpp
index 88354fa..fdd88bf 100644
--- a/src/corelibs/U2Designer/src/DesignerUtils.cpp
+++ b/src/corelibs/U2Designer/src/DesignerUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DesignerUtils.h b/src/corelibs/U2Designer/src/DesignerUtils.h
index 1a31d31..32d4bfc 100644
--- a/src/corelibs/U2Designer/src/DesignerUtils.h
+++ b/src/corelibs/U2Designer/src/DesignerUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DirectoryItem.cpp b/src/corelibs/U2Designer/src/DirectoryItem.cpp
index 4f9e2eb..60feec4 100644
--- a/src/corelibs/U2Designer/src/DirectoryItem.cpp
+++ b/src/corelibs/U2Designer/src/DirectoryItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/DirectoryItem.h b/src/corelibs/U2Designer/src/DirectoryItem.h
index ba9fcc6..b2df770 100644
--- a/src/corelibs/U2Designer/src/DirectoryItem.h
+++ b/src/corelibs/U2Designer/src/DirectoryItem.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
index 72175e3..45a5d87 100644
--- a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QStringList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QCheckBox>
-#endif
-#include <QtGui/QKeyEvent>
+#include <QStringList>
+#include <QCheckBox>
+#include <QKeyEvent>
 
 #include "ui_EditBreakpointLabelsDialog.h"
 #include "EditBreakpointLabelsDialog.h"
@@ -44,7 +40,7 @@ EditBreakpointLabelsDialog::EditBreakpointLabelsDialog(const QStringList &existi
       ui(new Ui_EditBreakpointLabelsDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223551");
+    new HelpButton(this, ui->buttonBox, "20875481");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
index 33f4dbc..35eeb7a 100644
--- a/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
+++ b/src/corelibs/U2Designer/src/EditBreakpointLabelsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,10 @@
 #ifndef _EDIT_BREAKPOINT_LABELS_DIALOG_H_
 #define _EDIT_BREAKPOINT_LABELS_DIALOG_H_
 
-#include <U2Core/global.h>
-#include <QtWidgets/QDialog>
+#include <QDialog>
+#include <QMap>
 
+#include <U2Core/global.h>
 
 class QKeyEvent;
 class Ui_EditBreakpointLabelsDialog;
diff --git a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
index f6f6b57..2737a3f 100644
--- a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
+++ b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,13 @@
 #include <QMessageBox>
 #include <QPushButton>
 
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/MarkerEditor.h>
 #include <U2Designer/MarkerEditorWidget.h>
 
 #include <U2Gui/HelpButton.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Lang/Marker.h>
 #include <U2Lang/MarkerUtils.h>
@@ -42,7 +44,7 @@ EditMarkerGroupDialog::EditMarkerGroupDialog(bool isNew, Marker *marker, Workflo
     : QDialog(parent), isNew(isNew), marker(NULL), allModel(_allModel), currentTypeIndex(-1)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223446");
+    new HelpButton(this, buttonBox, "20875375");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     {
@@ -58,13 +60,8 @@ EditMarkerGroupDialog::EditMarkerGroupDialog(bool isNew, Marker *marker, Workflo
         typeBox->addItems(types);
         typeBox->setCurrentIndex(0);
 
-#if (QT_VERSION < 0x050000) //Qt 5
-        table->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-        table->horizontalHeader()->setClickable(false);
-#else
         table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
         table->horizontalHeader()->setSectionsClickable(false);
-#endif
         table->horizontalHeader()->setStretchLastSection(true);
         table->verticalHeader()->hide();
         table->verticalHeader()->setDefaultSectionSize(QFontMetrics(QFont()).height() + 6);
@@ -397,7 +394,7 @@ EditMarkerDialog::EditMarkerDialog(bool isNew, const QString &type, const QStrin
 : QDialog(parent), isNew(isNew), type(type), name(name), values(values), editWidget(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223446");
+    new HelpButton(this, buttonBox, "20875375");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     if (!isNew) {
diff --git a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h
index c523766..cc70e3c 100644
--- a/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h
+++ b/src/corelibs/U2Designer/src/EditMarkerGroupDialog.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/EstimationReporter.cpp b/src/corelibs/U2Designer/src/EstimationReporter.cpp
index bd1399b..727e381 100644
--- a/src/corelibs/U2Designer/src/EstimationReporter.cpp
+++ b/src/corelibs/U2Designer/src/EstimationReporter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
+#include <QApplication>
 #include <QWebFrame>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWebKitWidgets/QWebFrame>
-#endif
+#include <QTextStream>
+
+#include <U2Core/U2SafePoints.h>
 
 #include "EstimationReporter.h"
 
diff --git a/src/corelibs/U2Designer/src/EstimationReporter.h b/src/corelibs/U2Designer/src/EstimationReporter.h
index 904bbad..24b8732 100644
--- a/src/corelibs/U2Designer/src/EstimationReporter.h
+++ b/src/corelibs/U2Designer/src/EstimationReporter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,8 @@
 #ifndef _U2_ESTIMATION_REPORTER_H_
 #define _U2_ESTIMATION_REPORTER_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QWebView>
 #include <QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWebKitWidgets/QWebView>
-#endif
+#include <QWebView>
 
 #include <U2Core/global.h>
 #include <U2Lang/SchemaEstimationTask.h>
diff --git a/src/corelibs/U2Designer/src/FileItem.cpp b/src/corelibs/U2Designer/src/FileItem.cpp
index 6c661a9..a2f2657 100644
--- a/src/corelibs/U2Designer/src/FileItem.cpp
+++ b/src/corelibs/U2Designer/src/FileItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/FileItem.h b/src/corelibs/U2Designer/src/FileItem.h
index 63b1714..3264711 100644
--- a/src/corelibs/U2Designer/src/FileItem.h
+++ b/src/corelibs/U2Designer/src/FileItem.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/GrouperEditor.cpp b/src/corelibs/U2Designer/src/GrouperEditor.cpp
index 0bc4724..00b12c4 100644
--- a/src/corelibs/U2Designer/src/GrouperEditor.cpp
+++ b/src/corelibs/U2Designer/src/GrouperEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/GrouperEditor.h b/src/corelibs/U2Designer/src/GrouperEditor.h
index cf70d37..3b3081d 100644
--- a/src/corelibs/U2Designer/src/GrouperEditor.h
+++ b/src/corelibs/U2Designer/src/GrouperEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/GrouperEditorWidget.cpp b/src/corelibs/U2Designer/src/GrouperEditorWidget.cpp
index 8247ba4..4236576 100644
--- a/src/corelibs/U2Designer/src/GrouperEditorWidget.cpp
+++ b/src/corelibs/U2Designer/src/GrouperEditorWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Designer/GrouperEditor.h>
-
 #include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/GrouperEditor.h>
 
 #include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
@@ -61,13 +62,8 @@ GrouperEditorWidget::GrouperEditorWidget(GrouperSlotsCfgModel *grouperModel, Act
 
     setupUi(this);
     {
-#if (QT_VERSION < 0x050000) //Qt 5
-        slotsTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-        slotsTable->horizontalHeader()->setClickable(false);
-#else
         slotsTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
         slotsTable->horizontalHeader()->setSectionsClickable(false);
-#endif
         slotsTable->horizontalHeader()->setStretchLastSection(true);
         slotsTable->verticalHeader()->hide();
         slotsTable->verticalHeader()->setDefaultSectionSize(QFontMetrics(QFont()).height() + 6);
diff --git a/src/corelibs/U2Designer/src/GrouperEditorWidget.h b/src/corelibs/U2Designer/src/GrouperEditorWidget.h
index e7272cb..c5610fc 100644
--- a/src/corelibs/U2Designer/src/GrouperEditorWidget.h
+++ b/src/corelibs/U2Designer/src/GrouperEditorWidget.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/MarkerEditor.cpp b/src/corelibs/U2Designer/src/MarkerEditor.cpp
index b4b7026..144ae1b 100644
--- a/src/corelibs/U2Designer/src/MarkerEditor.cpp
+++ b/src/corelibs/U2Designer/src/MarkerEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,8 @@
 #include <QSplitter>
 #include <QTableView>
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/MarkerEditorWidget.h>
 
 #include <U2Lang/BaseTypes.h>
diff --git a/src/corelibs/U2Designer/src/MarkerEditor.h b/src/corelibs/U2Designer/src/MarkerEditor.h
index 5b6295b..6b6f587 100644
--- a/src/corelibs/U2Designer/src/MarkerEditor.h
+++ b/src/corelibs/U2Designer/src/MarkerEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/MarkerEditorWidget.cpp b/src/corelibs/U2Designer/src/MarkerEditorWidget.cpp
index ab02235..36c43ec 100644
--- a/src/corelibs/U2Designer/src/MarkerEditorWidget.cpp
+++ b/src/corelibs/U2Designer/src/MarkerEditorWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,12 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/EditMarkerGroupDialog.h>
 #include <U2Designer/MarkerEditor.h>
 
-#include <U2Core/QObjectScopedPointer.h>
-
 #include <U2Lang/Marker.h>
 #include <U2Lang/MarkerUtils.h>
 
@@ -36,13 +37,8 @@ MarkerEditorWidget::MarkerEditorWidget(QAbstractTableModel *markerModel, QWidget
 {
     setupUi(this);
     {
-#if (QT_VERSION < 0x050000) //Qt 5
-        markerTable->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-        markerTable->horizontalHeader()->setClickable(false);
-#else
         markerTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
         markerTable->horizontalHeader()->setSectionsClickable(false);
-#endif
         markerTable->horizontalHeader()->setStretchLastSection(true);
         markerTable->verticalHeader()->hide();
         markerTable->verticalHeader()->setDefaultSectionSize(QFontMetrics(QFont()).height() + 6);
diff --git a/src/corelibs/U2Designer/src/MarkerEditorWidget.h b/src/corelibs/U2Designer/src/MarkerEditorWidget.h
index 177eb4a..908c0fe 100644
--- a/src/corelibs/U2Designer/src/MarkerEditorWidget.h
+++ b/src/corelibs/U2Designer/src/MarkerEditorWidget.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
index 4eff7a5..85de423 100644
--- a/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewBreakpointDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include "ui_NewBreakpointDialog.h"
 #include "NewBreakpointDialog.h"
 #include <U2Gui/HelpButton.h>
-#include <QtWidgets/QPushButton>
+#include <QPushButton>
 
 namespace U2 {
 
@@ -30,7 +30,7 @@ NewBreakpointDialog::NewBreakpointDialog(const QStringList &elementsNames, QWidg
     Qt::WindowFlags f) : QDialog(parent, f), ui(new Ui_NewBreakpointDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223550");
+    new HelpButton(this, ui->buttonBox, "20875480");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     ui->elementCombo->addItems(elementsNames);
diff --git a/src/corelibs/U2Designer/src/NewBreakpointDialog.h b/src/corelibs/U2Designer/src/NewBreakpointDialog.h
index f664217..1fb92b7 100644
--- a/src/corelibs/U2Designer/src/NewBreakpointDialog.h
+++ b/src/corelibs/U2Designer/src/NewBreakpointDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _NEW_BREAKPOINT_DIALOG_H_
 
 #include <U2Core/global.h>
-#include <QtWidgets/QDialog>
+#include <QDialog>
 
 class Ui_NewBreakpointDialog;
 
diff --git a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
index b2b3ea4..e25edbb 100644
--- a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
+++ b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ NewGrouperSlotDialog::NewGrouperSlotDialog(QWidget *parent, QList<Descriptor> &i
 : QDialog(parent), inSlots(inSlots), names(names)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223444");
+    new HelpButton(this, buttonBox, "20875373");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -105,7 +105,7 @@ AnnsActionDialog::AnnsActionDialog(QWidget *parent, GrouperSlotAction *action, Q
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223444");
+    new HelpButton(this, buttonBox, "20875373");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -152,7 +152,7 @@ SequeceActionDialog::SequeceActionDialog(QWidget *parent, GrouperSlotAction *act
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223444");
+    new HelpButton(this, buttonBox, "20875373");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -217,7 +217,7 @@ MsaActionDialog::MsaActionDialog(QWidget *parent, GrouperSlotAction *action)
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223444");
+    new HelpButton(this, buttonBox, "20875373");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     if (NULL != action) {
@@ -251,7 +251,7 @@ StringActionDialog::StringActionDialog(QWidget *parent, GrouperSlotAction *actio
 : ActionDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223444");
+    new HelpButton(this, buttonBox, "20875373");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     if (NULL != action) {
diff --git a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h
index eeb8b8e..53f235e 100644
--- a/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h
+++ b/src/corelibs/U2Designer/src/NewGrouperSlotDialog.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/OutputFileDialog.cpp b/src/corelibs/U2Designer/src/OutputFileDialog.cpp
index e91aa77..25b8683 100644
--- a/src/corelibs/U2Designer/src/OutputFileDialog.cpp
+++ b/src/corelibs/U2Designer/src/OutputFileDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,7 +37,6 @@
 
 namespace U2 {
 
-static const QString OUT_DIR = QObject::tr("Workflow-run output");
 static const QString BAD_CHARS = "\\*\\?\\|\\\"\\:";
 
 OutputFileDialog::OutputFileDialog(RunFileSystem *_rfs, bool _saveDir, CompletionFiller *filler, QWidget *parent)
@@ -54,7 +53,7 @@ OutputFileDialog::OutputFileDialog(RunFileSystem *_rfs, bool _saveDir, Completio
 
     if (saveDir) {
         nameWidget->setVisible(false);
-        setWindowTitle(tr("Save a directory"));
+        setWindowTitle(tr("Save a folder"));
     } else {
         setWindowTitle(tr("Save a file"));
         if (NULL != filler) {
@@ -168,7 +167,7 @@ void OutputFileDialog::updateSaveButton() {
     nameEdit->setToolTip(path);
     QString dir = selectedPath();
     if (dir.isEmpty()) {
-        dir = OUT_DIR;
+        dir = QObject::tr("Workflow-run output");
     } else {
         dir += "/";
     }
@@ -215,7 +214,7 @@ CreateDirectoryDialog::CreateDirectoryDialog(RunFileSystem *_rfs, const QString
     cancelButton->setText(tr("Cancel"));
 
     if (parentDir.isEmpty()) {
-        dirLabel->setText(OUT_DIR);
+        dirLabel->setText(QObject::tr("Workflow-run output"));
     } else {
         parentDir += "/";
         dirLabel->setText(parentDir);
diff --git a/src/corelibs/U2Designer/src/OutputFileDialog.h b/src/corelibs/U2Designer/src/OutputFileDialog.h
index f17d8c4..91df57d 100644
--- a/src/corelibs/U2Designer/src/OutputFileDialog.h
+++ b/src/corelibs/U2Designer/src/OutputFileDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/PropertyWidget.cpp b/src/corelibs/U2Designer/src/PropertyWidget.cpp
index 927f443..4679904 100644
--- a/src/corelibs/U2Designer/src/PropertyWidget.cpp
+++ b/src/corelibs/U2Designer/src/PropertyWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,15 @@
 #include <QLayout>
 #include <QListView>
 #include <QMessageBox>
+#include <QStandardItemModel>
 
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/EditConnectionDialog.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2Lang/SchemaConfig.h>
@@ -311,7 +312,7 @@ void ComboBoxWithUrlWidget::sl_browse(){
 
     QString name;
     if (isPath){
-        lod.dir = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a directory"), lastDir);
+        lod.dir = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a folder"), lastDir);
         if (!name.isEmpty()) {
             setValue(name);
         }
diff --git a/src/corelibs/U2Designer/src/PropertyWidget.h b/src/corelibs/U2Designer/src/PropertyWidget.h
index 0312a31..d0bea04 100644
--- a/src/corelibs/U2Designer/src/PropertyWidget.h
+++ b/src/corelibs/U2Designer/src/PropertyWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,27 +22,21 @@
 #ifndef _U2_PROPERTYWIDGET_H_
 #define _U2_PROPERTYWIDGET_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
+#include <QLayout>
 #include <QComboBox>
 #include <QDoubleSpinBox>
 #include <QSpinBox>
 #include <QToolButton>
 #include <QWidget>
-#else
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDoubleSpinBox>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QWidget>
-#endif
 #include <QVariant>
 
 #include <U2Lang/ConfigurationEditor.h>
 
 #include <U2Designer/URLLineEdit.h>
 
+class QStandardItem;
+class QStandardItemModel;
+
 namespace U2 {
 
 /************************************************************************/
diff --git a/src/corelibs/U2Designer/src/QDScheduler.cpp b/src/corelibs/U2Designer/src/QDScheduler.cpp
index b9cb6e1..0112152 100644
--- a/src/corelibs/U2Designer/src/QDScheduler.cpp
+++ b/src/corelibs/U2Designer/src/QDScheduler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/QDScheduler.h b/src/corelibs/U2Designer/src/QDScheduler.h
index be347d0..23b86a0 100644
--- a/src/corelibs/U2Designer/src/QDScheduler.h
+++ b/src/corelibs/U2Designer/src/QDScheduler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/UrlItem.cpp b/src/corelibs/U2Designer/src/UrlItem.cpp
index f6fb67e..aa808aa 100644
--- a/src/corelibs/U2Designer/src/UrlItem.cpp
+++ b/src/corelibs/U2Designer/src/UrlItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/UrlItem.h b/src/corelibs/U2Designer/src/UrlItem.h
index 03183f6..0b7f8f8 100644
--- a/src/corelibs/U2Designer/src/UrlItem.h
+++ b/src/corelibs/U2Designer/src/UrlItem.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/WorkflowGUIUtils.cpp b/src/corelibs/U2Designer/src/WorkflowGUIUtils.cpp
index 4b4f822..b2a17dc 100644
--- a/src/corelibs/U2Designer/src/WorkflowGUIUtils.cpp
+++ b/src/corelibs/U2Designer/src/WorkflowGUIUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,12 +23,12 @@
 
 #include <U2Lang/Descriptor.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QPalette>
-#include <QtGui/QTextDocument>
-#include <QtGui/QAbstractTextDocumentLayout>
+#include <QPainter>
+#include <QPalette>
+#include <QTextDocument>
+#include <QAbstractTextDocumentLayout>
 
-#include <QtCore/QUrl>
+#include <QUrl>
 
 
 namespace U2 {
@@ -143,11 +143,7 @@ void DesignerGUIUtils::setupSamplesDocument(const Descriptor& d, const QIcon& ic
     if (hasIcon) {
         doc->addResource(QTextDocument::ImageResource, QUrl(img), ico.pixmap(200));
     }
-#if (QT_VERSION < 0x050000) //Qt 5
-    QString body = Qt::escape(d.getDocumentation()).replace("\n", "<br>");
-#else
     QString body = d.getDocumentation().toHtmlEscaped().replace("\n", "<br>");
-#endif
     int brk = body.indexOf("<br><br>");
     int shift = 8;
     if (brk <= 0) {
diff --git a/src/corelibs/U2Designer/src/WorkflowGUIUtils.h b/src/corelibs/U2Designer/src/WorkflowGUIUtils.h
index 2b05b39..ef58e71 100644
--- a/src/corelibs/U2Designer/src/WorkflowGUIUtils.h
+++ b/src/corelibs/U2Designer/src/WorkflowGUIUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/dashboard/Dashboard.cpp b/src/corelibs/U2Designer/src/dashboard/Dashboard.cpp
index 87336dd..ceb2273 100644
--- a/src/corelibs/U2Designer/src/dashboard/Dashboard.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/Dashboard.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,15 @@
  * MA 02110-1301, USA.
  */
 
+#include <QApplication>
+#include <QClipboard>
 #include <QDesktopServices>
+#include <QDir>
 #include <QFile>
-
-
-#if (QT_VERSION < 0x050000) //Qt 5
 #include <QMessageBox>
+#include <QSettings>
 #include <QWebFrame>
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWebKitWidgets/QWebFrame>
-#include <QtWidgets/QApplication>
-#endif
-#include <QClipboard>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/GUrlUtils.h>
@@ -43,16 +38,16 @@
 
 #include <U2Gui/MainWindow.h>
 
+#include <U2Lang/ActorModel.h>
 #include <U2Lang/WorkflowSettings.h>
 
+#include "Dashboard.h"
+#include "ExternalToolsWidget.h"
 #include "OutputFilesWidget.h"
 #include "ParametersWidget.h"
 #include "ProblemsWidget.h"
 #include "ResourcesWidget.h"
 #include "StatisticsWidget.h"
-#include "ExternalToolsWidget.h"
-
-#include "Dashboard.h"
 
 namespace U2 {
 
@@ -203,7 +198,7 @@ void Dashboard::sl_serialize() {
     if (!d.exists(reportDir)) {
         bool created = d.mkpath(reportDir);
         if (!created) {
-            coreLog.error(tr("Can not create a directory: ") + reportDir);
+            coreLog.error(tr("Can not create a folder: ") + reportDir);
             return;
         }
     }
@@ -365,8 +360,11 @@ void Dashboard::sl_hideLoadBtnHint() {
 /************************************************************************/
 /* DashboardWidget */
 /************************************************************************/
-DashboardWidget::DashboardWidget(const QWebElement &_container, Dashboard *parent)
-: QObject(parent), dashboard(parent), container(_container)
+DashboardWidget::DashboardWidget(const QWebElement &_container, const QString &id, Dashboard *parent)
+    : QObject(parent),
+      dashboard(parent),
+      container(_container),
+      id(id)
 {
 
 }
@@ -422,7 +420,7 @@ void JavascriptAgent::setClipboardText(const QString &text) {
 /* LoadDashboardsTask */
 /************************************************************************/
 ScanDashboardsDirTask::ScanDashboardsDirTask()
-: Task(tr("Scan dashboards directory"), TaskFlag_None)
+: Task(tr("Scan dashboards folder"), TaskFlag_None)
 {
 
 }
diff --git a/src/corelibs/U2Designer/src/dashboard/Dashboard.h b/src/corelibs/U2Designer/src/dashboard/Dashboard.h
index 7c73340..99d08c8 100644
--- a/src/corelibs/U2Designer/src/dashboard/Dashboard.h
+++ b/src/corelibs/U2Designer/src/dashboard/Dashboard.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,12 +23,7 @@
 #define _U2_DASHBOARD_H_
 
 #include <QWebElement>
-
-#if (QT_VERSION < 0x050000) //Qt 5
 #include <QWebView>
-#else
-#include <QtWebKitWidgets/QWebView>
-#endif
 
 #include <U2Core/U2SafePoints.h>
 
@@ -118,11 +113,12 @@ private:
 class DashboardWidget : public QObject {
     Q_OBJECT
 public:
-    DashboardWidget(const QWebElement &container, Dashboard *parent);
+    DashboardWidget(const QWebElement &container, const QString &id, Dashboard *parent);
 
 protected:
     Dashboard *dashboard;
     QWebElement container;
+    const QString id;
 };
 
 class JavascriptAgent : public QObject {
diff --git a/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.cpp b/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.cpp
index 1a4f735..02d822f 100644
--- a/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,6 +62,7 @@ void ExternalToolsWidgetController::sl_timerShouts() {
     emit si_update();
 }
 
+const QString ExternalToolsWidget::ID = "external tools";
 const QString ExternalToolsWidget::LINE_BREAK("break_line");
 const QString ExternalToolsWidget::SINGLE_QUOTE("s_quote");
 const QString ExternalToolsWidget::BACK_SLASH("b_slash");
@@ -69,7 +70,7 @@ const QString ExternalToolsWidget::BACK_SLASH("b_slash");
 ExternalToolsWidget::ExternalToolsWidget(const QWebElement &_container,
                                          Dashboard *parent,
                                          const ExternalToolsWidgetController *_ctrl) :
-    DashboardWidget(_container, parent),
+    DashboardWidget(_container, ID, parent),
     ctrl(_ctrl)
 {
     SAFE_POINT(NULL != ctrl, "Controller is NULL", );
diff --git a/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.h b/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.h
index 142bc61..17f120c 100644
--- a/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/ExternalToolsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,6 +62,8 @@ class ExternalToolsWidget : public DashboardWidget {
 public:
     ExternalToolsWidget(const QWebElement &container, Dashboard *parent, const ExternalToolsWidgetController* ctrl);
 
+    static const QString ID;
+
 public slots:
     void sl_onLogUpdate();
 
diff --git a/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.cpp b/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.cpp
index 1741c0c..b0be127 100644
--- a/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,9 +31,11 @@
 namespace U2 {
 
 static const int MAX_FILES_COUNT = 10;
+const QString OutputFilesWidget::ID = "output files";
 
 OutputFilesWidget::OutputFilesWidget(const QWebElement &content, Dashboard *parent)
-: TableWidget(content, parent), collapsed(false)
+    : TableWidget(content, ID, parent),
+      collapsed(false)
 {
     createTable();
 
@@ -51,7 +53,7 @@ void OutputFilesWidget::sl_newOutputFile(const U2::Workflow::Monitor::FileInfo &
     if (collapsed && rows.contains(id(info))) {
         addFileMenu(info);
     } else {
-        addRow(id(info), createRowByFile(info));
+        addRow(id(info), createRowByFile(info), info.actor);
     }
 }
 
@@ -77,19 +79,14 @@ QList<QStringList> OutputFilesWidget::data() {
 }
 
 QString OutputFilesWidget::createActionsSubMenu(const Monitor::FileInfo& info, bool fullWidth) const {
-    QString openFileByOsAction = QString("<li><a href=\"#\" onclick=\"agent.openByOS('%1')\">%2</a></li>")
-        .arg(relative(info.url))
-        .arg(tr("Open by operating system"));
-    return QString(
+  return QString(
         "<ul class=\"dropdown-menu %1\">"
             "<li><a href=\"#\" onclick=\"agent.openByOS('%2')\">%3</a></li>"
-            "%4"
         "</ul>"
         )
         .arg(fullWidth ? "full-width" : "")
         .arg(relative(QFileInfo(info.url).dir().absolutePath() + "/"))
-        .arg(tr("Open containing directory"))
-        .arg(info.openBySystem ? "" : openFileByOsAction);
+        .arg(tr("Open containing folder"));
 }
 
 static const int MAX_LEN = 25;
@@ -106,14 +103,15 @@ QString OutputFilesWidget::createFileButton(const Monitor::FileInfo& info) const
     return QString(
         "<div class=\"file-button-ctn\">"
         "<div class=\"btn-group full-width file-btn-group\">"
-        "<button class=\"btn full-width long-text\" onclick=%1 onmouseover=\"this.title=agent.absolute('%2')\">%3</button>"
+        "<button class=\"btn full-width long-text\" id=\"%1\" onclick=%2 onmouseover=\"this.title=agent.absolute('%3')\">%4</button>"
             "<button class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">"
                 "<span class=\"caret\"></span>"
             "</button>"
-            "%4"
+            "%5"
         "</div>"
         "</div>"
     )
+    .arg(info.actor)
     .arg(onClickAction(info))
     .arg(relative(info.url))
     .arg(fileName(info.url))
diff --git a/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.h b/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.h
index 1ff4b7e..165318b 100644
--- a/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/OutputFilesWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,6 +37,8 @@ public:
     virtual QStringList header();
     virtual QList<QStringList> data();
 
+    static const QString ID;
+
 private slots:
     void sl_newOutputFile(const U2::Workflow::Monitor::FileInfo &info);
 
diff --git a/src/corelibs/U2Designer/src/dashboard/ParametersWidget.cpp b/src/corelibs/U2Designer/src/dashboard/ParametersWidget.cpp
index 009a2b3..58270d8 100644
--- a/src/corelibs/U2Designer/src/dashboard/ParametersWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/ParametersWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,10 @@
 
 namespace U2 {
 
+const QString ParametersWidget::ID = "parameters";
+
 ParametersWidget::ParametersWidget(const QWebElement &container, Dashboard *parent)
-    : DashboardWidget(container, parent)
+    : DashboardWidget(container, ID, parent)
 {
     const WorkflowMonitor *workflowMonitor = dashboard->monitor();
     SAFE_POINT(NULL != workflowMonitor, "NULL workflow monitor!", );
diff --git a/src/corelibs/U2Designer/src/dashboard/ParametersWidget.h b/src/corelibs/U2Designer/src/dashboard/ParametersWidget.h
index 0dff363..a9c5cd0 100644
--- a/src/corelibs/U2Designer/src/dashboard/ParametersWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/ParametersWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,6 +40,8 @@ public:
     ParametersWidget(const QWebElement &container, Dashboard *parent);
 
     void createWidget(const QList<WorkerParamsInfo> &workersParamsInfo);
+
+    static const QString ID;
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.cpp b/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.cpp
index 35b5e64..5921abf 100644
--- a/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,10 @@
 
 namespace U2 {
 
+const QString ProblemsWidget::ID = "problems";
+
 ProblemsWidget::ProblemsWidget(const QWebElement &content, Dashboard *parent)
-: TableWidget(content, parent)
+    : TableWidget(content, ID, parent)
 {
     createTable();
     foreach (const Problem &info, dashboard->monitor()->getProblems()) {
diff --git a/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.h b/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.h
index a74d289..7477498 100644
--- a/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/ProblemsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,6 +39,8 @@ public:
 
     static QString problemImage(const Problem &info);
 
+    static const QString ID;
+
 private slots:
     void sl_newProblem(const Problem &info);
 
diff --git a/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.cpp b/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.cpp
index d5a31eb..362aeb8 100644
--- a/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,12 @@
 
 #include "ResourcesWidget.h"
 
-
 namespace U2 {
 
+const QString ResourcesWidget::ID = "resources";
+
 ResourcesWidget::ResourcesWidget(const QWebElement &container, Dashboard *parent)
-: DashboardWidget(container, parent)
+    : DashboardWidget(container, ID, parent)
 {
     connect(parent->monitor(), SIGNAL(si_progressChanged(int)), SLOT(sl_progressChanged(int)));
     connect(parent->monitor(), SIGNAL(si_taskStateChanged(Monitor::TaskState)),
diff --git a/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.h b/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.h
index d214479..eabe44d 100644
--- a/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/ResourcesWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,8 @@ class ResourcesWidget : public DashboardWidget {
 public:
     ResourcesWidget(const QWebElement &container, Dashboard *parent);
 
+    static const QString ID;
+
 private slots:
     void sl_progressChanged(int progress);
     void sl_taskStateChanged(Monitor::TaskState state);
diff --git a/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.cpp b/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.cpp
index a884a7e..21578ca 100644
--- a/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,10 @@
 
 namespace U2 {
 
+const QString StatisticsWidget::ID = "statistics";
+
 StatisticsWidget::StatisticsWidget(const QWebElement &container, Dashboard *parent)
-: TableWidget(container, parent)
+    : TableWidget(container, ID, parent)
 {
     useEmptyRows = false;
     createTable();
@@ -62,10 +64,7 @@ QStringList StatisticsWidget::header() {
 }
 
 inline static QString timeStr(qint64 timeMks) {
-    QDateTime t;
-    t.setTimeSpec(Qt::UTC);
-    t.setMSecsSinceEpoch(timeMks / 1000);
-    return t.toString("hh:mm:ss.zzz");
+    return QTime::fromMSecsSinceStartOfDay(timeMks / 1000).toString("hh:mm:ss.zzz");
 }
 
 QList<QStringList> StatisticsWidget::data() {
diff --git a/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.h b/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.h
index 42e35c2..4299982 100644
--- a/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/StatisticsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,6 +37,8 @@ public:
     virtual QStringList header();
     virtual QList<QStringList> data();
 
+    static const QString ID;
+
 private slots:
     void sl_workerInfoChanged(const QString &actor, const U2::Workflow::Monitor::WorkerInfo &info);
     void sl_update();
diff --git a/src/corelibs/U2Designer/src/dashboard/TableWidget.cpp b/src/corelibs/U2Designer/src/dashboard/TableWidget.cpp
index a2c093d..f54b4f2 100644
--- a/src/corelibs/U2Designer/src/dashboard/TableWidget.cpp
+++ b/src/corelibs/U2Designer/src/dashboard/TableWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,14 +25,15 @@ namespace U2 {
 
 static const int MIN_ROW_COUNT = 3;
 
-TableWidget::TableWidget(const QWebElement &container, Dashboard *parent)
-: DashboardWidget(container, parent), useEmptyRows(true)
+TableWidget::TableWidget(const QWebElement &container, const QString &id, Dashboard *parent)
+    : DashboardWidget(container, id, parent),
+      useEmptyRows(true)
 {
 
 }
 
 void TableWidget::createTable() {
-    QString table = "<table class=\"table table-bordered table-fixed\">";
+    QString table = QString("<table class=\"table table-bordered table-fixed\" id=\"%1\">").arg(id);
     foreach (int w, widths()) {
         table += "<col width=\"" + QString("%1").arg(w) + "%\" />";
     }
@@ -73,9 +74,9 @@ void TableWidget::addEmptyRows() {
     }
 }
 
-void TableWidget::addRow(const QString &dataId, const QStringList &ds) {
+void TableWidget::addRow(const QString &dataId, const QStringList &ds, const QString &rowId) {
     QString row;
-    row += "<tr class=\"filled-row\">";
+    row += QString("<tr class=\"filled-row\" %1>").arg(rowId.isEmpty() ? "" : "id=\"" + rowId + "\"");
     row += createRow(ds);
     row += "</tr>";
 
diff --git a/src/corelibs/U2Designer/src/dashboard/TableWidget.h b/src/corelibs/U2Designer/src/dashboard/TableWidget.h
index e934fac..b483c52 100644
--- a/src/corelibs/U2Designer/src/dashboard/TableWidget.h
+++ b/src/corelibs/U2Designer/src/dashboard/TableWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@ namespace U2 {
 class TableWidget : public DashboardWidget {
     Q_OBJECT
 public:
-    TableWidget(const QWebElement &container, Dashboard *parent);
+    TableWidget(const QWebElement &container, const QString &id, Dashboard *parent);
 
     /** The list of % */
     virtual QList<int> widths() = 0;
@@ -44,14 +44,13 @@ protected slots:
     void fillTable();
 
 protected:
-    bool useEmptyRows;
-    QMap<QString, QWebElement> rows;
-
-protected:
-    void addRow(const QString &dataId, const QStringList &d);
+    void addRow(const QString &dataId, const QStringList &d, const QString &rowId = "");
     void updateRow(const QString &dataId, const QStringList &d);
     virtual QString createRow(const QStringList &d);
 
+    bool useEmptyRows;
+    QMap<QString, QWebElement> rows;
+
 private:
     void addEmptyRows();
 };
diff --git a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
index d865f15..e115fa8 100644
--- a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
+++ b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QEvent>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QToolButton>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QEvent>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QToolButton>
+#include <QVBoxLayout>
 
 #include <U2Core/U2SafePoints.h>
 
@@ -46,9 +37,9 @@
 namespace U2 {
 
 const QString OutputDirectoryWidget::INFO = QObject::tr(
-    "The Workflow Output Directory is a common directory that is used to store all output files in the Workflow Designer."
-    " A separate subdirectory of the directory is created for each run of a workflow."
-    "\n\nSet up the directory:"
+    "The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer."
+    " A separate subdirectory of the folder is created for each run of a workflow."
+    "\n\nSet up the folder:"
     );
 
 OutputDirectoryWidget::OutputDirectoryWidget(QWidget *parent, bool commitOnHide)
@@ -77,7 +68,7 @@ OutputDirectoryWidget::OutputDirectoryWidget(QWidget *parent, bool commitOnHide)
 }
 
 void OutputDirectoryWidget::sl_browse() {
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Select a directory"), pathEdit->text());
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Select a folder"), pathEdit->text());
 
     if(!dir.isEmpty()) {
         dir = QDir::toNativeSeparators(dir);
diff --git a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.h b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.h
index 96009aa..cce906d 100644
--- a/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.h
+++ b/src/corelibs/U2Designer/src/support/OutputDirectoryWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QWidget>
+#include <QLineEdit>
 
 class QLabel;
 class QLineEdit;
diff --git a/src/corelibs/U2Designer/src/support/URLLineEdit.cpp b/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
index a9ffb82..c022850 100644
--- a/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
+++ b/src/corelibs/U2Designer/src/support/URLLineEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QFocusEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLayout>
-#else
-#include <QtWidgets/QLayout>
-#endif
+#include <QFocusEvent>
+#include <QLayout>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/SuggestCompleter.h>
@@ -187,7 +184,7 @@ void URLLineEdit::browse(bool addFiles) {
     if(isPath || multi){
         QStringList lst;
         if (isPath) {
-            QString dir = U2FileDialog::getExistingDirectory(NULL, tr("Select a directory"), lastDir);
+            QString dir = U2FileDialog::getExistingDirectory(NULL, tr("Select a folder"), lastDir);
             lst << dir;
         } else {
             lst = U2FileDialog::getOpenFileNames(NULL, tr("Select file(s)"), lastDir, FileFilter);
diff --git a/src/corelibs/U2Designer/src/support/URLLineEdit.h b/src/corelibs/U2Designer/src/support/URLLineEdit.h
index 2c7f290..fc4ffba 100644
--- a/src/corelibs/U2Designer/src/support/URLLineEdit.h
+++ b/src/corelibs/U2Designer/src/support/URLLineEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,9 @@
 #ifndef _U2_URLLINEEDIT_H_
 #define _U2_URLLINEEDIT_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QLineEdit>
 
 #include <U2Core/global.h>
-#include <QtGui>
 #include <QObject>
 
 namespace U2 {
diff --git a/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.cpp b/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.cpp
index 1ba1c78..f98224b 100644
--- a/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+#include <QPushButton>
+
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
diff --git a/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.h b/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.h
index 6d446fa..d61cc30 100644
--- a/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.h
+++ b/src/corelibs/U2Designer/src/wizard/BowtieWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/ElementSelectorController.cpp b/src/corelibs/U2Designer/src/wizard/ElementSelectorController.cpp
index 82cbdcb..c492eab 100644
--- a/src/corelibs/U2Designer/src/wizard/ElementSelectorController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/ElementSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/ElementSelectorController.h b/src/corelibs/U2Designer/src/wizard/ElementSelectorController.h
index 2047d05..8781d8c 100644
--- a/src/corelibs/U2Designer/src/wizard/ElementSelectorController.h
+++ b/src/corelibs/U2Designer/src/wizard/ElementSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.cpp b/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.cpp
index 85ba8dd..44982b9 100644
--- a/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include "WizardController.h"
+#include <U2Core/U2SafePoints.h>
 
 #include "PairedDatasetsController.h"
+#include "WizardController.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.h b/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.h
index f97fc9a..bd56712 100644
--- a/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.h
+++ b/src/corelibs/U2Designer/src/wizard/PairedDatasetsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/PropertyWizardController.cpp b/src/corelibs/U2Designer/src/wizard/PropertyWizardController.cpp
index 09cc634..5e0898e 100644
--- a/src/corelibs/U2Designer/src/wizard/PropertyWizardController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/PropertyWizardController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/PropertyWizardController.h b/src/corelibs/U2Designer/src/wizard/PropertyWizardController.h
index e1c0013..d13f0c2 100644
--- a/src/corelibs/U2Designer/src/wizard/PropertyWizardController.h
+++ b/src/corelibs/U2Designer/src/wizard/PropertyWizardController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/RadioController.cpp b/src/corelibs/U2Designer/src/wizard/RadioController.cpp
index abe609e..cc95c41 100644
--- a/src/corelibs/U2Designer/src/wizard/RadioController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/RadioController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/RadioController.h b/src/corelibs/U2Designer/src/wizard/RadioController.h
index 8651137..298e44b 100644
--- a/src/corelibs/U2Designer/src/wizard/RadioController.h
+++ b/src/corelibs/U2Designer/src/wizard/RadioController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/SelectorActors.cpp b/src/corelibs/U2Designer/src/wizard/SelectorActors.cpp
index 828bb67..96c13a3 100644
--- a/src/corelibs/U2Designer/src/wizard/SelectorActors.cpp
+++ b/src/corelibs/U2Designer/src/wizard/SelectorActors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/SelectorActors.h b/src/corelibs/U2Designer/src/wizard/SelectorActors.h
index c5079d8..d3f7a81 100644
--- a/src/corelibs/U2Designer/src/wizard/SelectorActors.h
+++ b/src/corelibs/U2Designer/src/wizard/SelectorActors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/SettingsController.cpp b/src/corelibs/U2Designer/src/wizard/SettingsController.cpp
index dcbb277..9c61d7b 100644
--- a/src/corelibs/U2Designer/src/wizard/SettingsController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/SettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QLineEdit>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
diff --git a/src/corelibs/U2Designer/src/wizard/SettingsController.h b/src/corelibs/U2Designer/src/wizard/SettingsController.h
index c6f756a..34fc3ff 100644
--- a/src/corelibs/U2Designer/src/wizard/SettingsController.h
+++ b/src/corelibs/U2Designer/src/wizard/SettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.cpp b/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.cpp
index 2f714f4..5271b69 100644
--- a/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,26 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QFocusEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QListWidget>
-#include <QtGui/QMessageBox>
-#include <QtGui/QScrollArea>
-#include <QtGui/QScrollBar>
-#include <QtGui/QToolButton>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QScrollArea>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QFocusEvent>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QMessageBox>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QToolButton>
+#include <QVBoxLayout>
 
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/WizardController.h>
 
diff --git a/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.h b/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.h
index 11e14f2..e811395 100644
--- a/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.h
+++ b/src/corelibs/U2Designer/src/wizard/TophatSamplesWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.cpp b/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.cpp
index 7d79353..237a893 100644
--- a/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include "WizardController.h"
+#include <U2Core/U2SafePoints.h>
 
-#include "UrlAndDatasetWizardController.h"
 #include <U2Lang/URLContainer.h>
 
+#include "UrlAndDatasetWizardController.h"
+#include "WizardController.h"
+
 namespace U2 {
 
 UrlAndDatasetWizardController::UrlAndDatasetWizardController(WizardController *wc, UrlAndDatasetWidget *_widget)
diff --git a/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.h b/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.h
index 1a7eb80..289e466 100644
--- a/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.h
+++ b/src/corelibs/U2Designer/src/wizard/UrlAndDatasetWizardController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WDWizardPage.cpp b/src/corelibs/U2Designer/src/wizard/WDWizardPage.cpp
index 6ba9634..3f554c7 100644
--- a/src/corelibs/U2Designer/src/wizard/WDWizardPage.cpp
+++ b/src/corelibs/U2Designer/src/wizard/WDWizardPage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include "WizardPageController.h"
+#include <U2Core/U2SafePoints.h>
 
 #include "WDWizardPage.h"
+#include "WizardPageController.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Designer/src/wizard/WDWizardPage.h b/src/corelibs/U2Designer/src/wizard/WDWizardPage.h
index fd0c00b..c4bbe61 100644
--- a/src/corelibs/U2Designer/src/wizard/WDWizardPage.h
+++ b/src/corelibs/U2Designer/src/wizard/WDWizardPage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WidgetController.cpp b/src/corelibs/U2Designer/src/wizard/WidgetController.cpp
index 86a0a3d..94e73d8 100644
--- a/src/corelibs/U2Designer/src/wizard/WidgetController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/WidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WidgetController.h b/src/corelibs/U2Designer/src/wizard/WidgetController.h
index 2d0ecd9..963a661 100644
--- a/src/corelibs/U2Designer/src/wizard/WidgetController.h
+++ b/src/corelibs/U2Designer/src/wizard/WidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WizardController.cpp b/src/corelibs/U2Designer/src/wizard/WizardController.cpp
index 6fc890a..127e82f 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/WizardController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WizardController.h b/src/corelibs/U2Designer/src/wizard/WizardController.h
index a06693d..0147622 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardController.h
+++ b/src/corelibs/U2Designer/src/wizard/WizardController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WizardPageController.cpp b/src/corelibs/U2Designer/src/wizard/WizardPageController.cpp
index 6738f03..595bf66 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardPageController.cpp
+++ b/src/corelibs/U2Designer/src/wizard/WizardPageController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/src/wizard/WizardPageController.h b/src/corelibs/U2Designer/src/wizard/WizardPageController.h
index cfefac4..19d719b 100644
--- a/src/corelibs/U2Designer/src/wizard/WizardPageController.h
+++ b/src/corelibs/U2Designer/src/wizard/WizardPageController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Designer/transl/english.ts b/src/corelibs/U2Designer/transl/english.ts
index 7178014..5cd9e68 100644
--- a/src/corelibs/U2Designer/transl/english.ts
+++ b/src/corelibs/U2Designer/transl/english.ts
@@ -57,14 +57,22 @@ this merge sequence slot:</translation>
 <context>
     <name>CreateDirectoryDialog</name>
     <message>
+        <source>Create a folder</source>
+        <translation type="vanished">Create a folder</translation>
+    </message>
+    <message>
+        <source>Parent folder:</source>
+        <translation type="vanished">Parent folder:</translation>
+    </message>
+    <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="14"/>
         <source>Create a directory</source>
-        <translation>Create a directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="43"/>
         <source>Parent directory:</source>
-        <translation>Parent directory:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="63"/>
@@ -85,9 +93,13 @@ this merge sequence slot:</translation>
         <translation>Add file(s)</translation>
     </message>
     <message>
+        <source>Add folder</source>
+        <translation type="vanished">Add folder</translation>
+    </message>
+    <message>
         <location filename="../src/DatasetWidget.ui" line="62"/>
         <source>Add directory</source>
-        <translation>Add directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DatasetWidget.ui" line="84"/>
@@ -442,14 +454,22 @@ this merge sequence slot:</translation>
 <context>
     <name>OutputFileDialog</name>
     <message>
+        <source>Save file/folder</source>
+        <translation type="vanished">Save file/folder</translation>
+    </message>
+    <message>
+        <source>Create folder</source>
+        <translation type="vanished">Create folder</translation>
+    </message>
+    <message>
         <location filename="../src/OutputFileDialog.ui" line="14"/>
         <source>Save file/directory</source>
-        <translation>Save file/directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="31"/>
         <source>Create directory</source>
-        <translation>Create directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="63"/>
@@ -460,7 +480,11 @@ this merge sequence slot:</translation>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="126"/>
         <source>Directory:</source>
-        <translation>Directory:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Folder:</source>
+        <translation type="vanished">Folder:</translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="146"/>
@@ -476,52 +500,53 @@ this merge sequence slot:</translation>
         <translation>Select a sample to start</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowGUIUtils.cpp" line="163"/>
+        <location filename="../src/WorkflowGUIUtils.cpp" line="159"/>
         <source>Double click to load the sample</source>
         <translation>Double click to load the sample</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="463"/>
+        <location filename="../src/DatasetsController.cpp" line="458"/>
         <source>Paired reads</source>
         <translation>Paired reads</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="465"/>
+        <location filename="../src/DatasetsController.cpp" line="460"/>
         <source>file</source>
         <translation>file</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="465"/>
+        <location filename="../src/DatasetsController.cpp" line="460"/>
         <source>folder</source>
         <translation>folder</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="466"/>
+        <location filename="../src/DatasetsController.cpp" line="461"/>
         <source>UGENE has found "%1" on the file system. Do you want to add it as a second %2 with paired reads?</source>
         <translation>UGENE has found "%1" on the file system. Do you want to add it as a second %2 with paired reads?</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="81"/>
+        <location filename="../src/EstimationReporter.cpp" line="78"/>
         <source>m</source>
         <translation>m</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="82"/>
+        <location filename="../src/EstimationReporter.cpp" line="79"/>
         <source>h</source>
         <translation>h</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="97"/>
+        <location filename="../src/EstimationReporter.cpp" line="94"/>
         <source>Workflow Estimation</source>
         <translation>Workflow Estimation</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="98"/>
+        <location filename="../src/EstimationReporter.cpp" line="95"/>
         <source>Approximate estimation time of the workflow run is </source>
         <translation>Approximate estimation time of the workflow run is </translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="40"/>
+        <location filename="../src/OutputFileDialog.cpp" line="170"/>
+        <location filename="../src/OutputFileDialog.cpp" line="217"/>
         <source>Workflow-run output</source>
         <translation>Workflow-run output</translation>
     </message>
@@ -561,13 +586,19 @@ this merge sequence slot:</translation>
         <translation>The page is broken. Please, close the wizard and report us the error: ugene at unipro.ru</translation>
     </message>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="48"/>
-        <source>The Workflow Output Directory is a common directory that is used to store all output files in the Workflow Designer. A separate subdirectory of the directory is created for each run of a workflow.
+        <source>The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer. A separate subfolder of the folder is created for each run of a workflow.
 
-Set up the directory:</source>
-        <translation>The Workflow Output Directory is a common directory that is used to store all output files in the Workflow Designer. A separate subdirectory of the directory is created for each run of a workflow.
+Set up the folder:</source>
+        <translation type="vanished">The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer. A separate subfolder of the folder is created for each run of a workflow.
+
+Set up the folder:</translation>
+    </message>
+    <message>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="39"/>
+        <source>The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer. A separate subdirectory of the folder is created for each run of a workflow.
 
-Set up the directory:</translation>
+Set up the folder:</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -657,14 +688,14 @@ Set up the directory:</translation>
 <context>
     <name>U2::BowtieWidgetController</name>
     <message>
-        <location filename="../src/wizard/BowtieWidgetController.cpp" line="73"/>
+        <location filename="../src/wizard/BowtieWidgetController.cpp" line="70"/>
         <source>Select
 bowtie index file</source>
         <translation>Select
 bowtie index file</translation>
     </message>
     <message>
-        <location filename="../src/wizard/BowtieWidgetController.cpp" line="84"/>
+        <location filename="../src/wizard/BowtieWidgetController.cpp" line="81"/>
         <source>Select one of Bowtie index files</source>
         <translation>Select one of Bowtie index files</translation>
     </message>
@@ -672,17 +703,17 @@ bowtie index file</translation>
 <context>
     <name>U2::BreakpointHitCountDialog</name>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="74"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="68"/>
         <source>Reset</source>
         <translation>Reset</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="75"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="69"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="76"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="70"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -690,12 +721,12 @@ bowtie index file</translation>
 <context>
     <name>U2::ComboBoxWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="178"/>
+        <location filename="../src/PropertyWidget.cpp" line="179"/>
         <source>False</source>
         <translation>False</translation>
     </message>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="179"/>
+        <location filename="../src/PropertyWidget.cpp" line="180"/>
         <source>True</source>
         <translation>True</translation>
     </message>
@@ -703,7 +734,7 @@ bowtie index file</translation>
 <context>
     <name>U2::ComboBoxWithDbUrlWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="339"/>
+        <location filename="../src/PropertyWidget.cpp" line="340"/>
         <source>Add New Connection</source>
         <translation>Add New Connection</translation>
     </message>
@@ -711,12 +742,12 @@ bowtie index file</translation>
 <context>
     <name>U2::ComboBoxWithUrlWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="314"/>
-        <source>Select a directory</source>
-        <translation>Select a directory</translation>
+        <location filename="../src/PropertyWidget.cpp" line="315"/>
+        <source>Select a folder</source>
+        <translation>Select a folder</translation>
     </message>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="319"/>
+        <location filename="../src/PropertyWidget.cpp" line="320"/>
         <source>Select a file</source>
         <translation>Select a file</translation>
     </message>
@@ -724,12 +755,12 @@ bowtie index file</translation>
 <context>
     <name>U2::CreateDirectoryDialog</name>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="214"/>
+        <location filename="../src/OutputFileDialog.cpp" line="213"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="215"/>
+        <location filename="../src/OutputFileDialog.cpp" line="214"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -737,43 +768,43 @@ bowtie index file</translation>
 <context>
     <name>U2::Dashboard</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="170"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="165"/>
         <source>Output Files</source>
         <translation>Output Files</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="166"/>
         <source>Workflow Task</source>
         <translation>Workflow Task</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="172"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="167"/>
         <source>Common Statistics</source>
         <translation>Common Statistics</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="179"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="174"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="256"/>
-        <location filename="../src/dashboard/Dashboard.cpp" line="264"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="251"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="259"/>
         <source>External Tools</source>
         <translation>External Tools</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="196"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="191"/>
         <source>Problems</source>
         <translation>Problems</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="206"/>
-        <source>Can not create a directory: </source>
-        <translation>Can not create a directory: </translation>
+        <location filename="../src/dashboard/Dashboard.cpp" line="201"/>
+        <source>Can not create a folder: </source>
+        <translation>Can not create a folder: </translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="221"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="216"/>
         <source>Can not open a file for writing: </source>
         <translation>Can not open a file for writing: </translation>
     </message>
@@ -781,17 +812,17 @@ bowtie index file</translation>
 <context>
     <name>U2::DatasetsController</name>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="170"/>
+        <location filename="../src/DatasetsController.cpp" line="165"/>
         <source>Dataset name is empty</source>
         <translation>Dataset name is empty</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="174"/>
+        <location filename="../src/DatasetsController.cpp" line="169"/>
         <source>Dataset name can not contain ':' and ';' symbols</source>
         <translation>Dataset name can not contain ':' and ';' symbols</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="179"/>
+        <location filename="../src/DatasetsController.cpp" line="174"/>
         <source>This dataset name already exists</source>
         <translation>This dataset name already exists</translation>
     </message>
@@ -858,12 +889,12 @@ bowtie index file</translation>
 <context>
     <name>U2::EditBreakpointLabelsDialog</name>
     <message>
-        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="49"/>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="45"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="50"/>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -871,23 +902,23 @@ bowtie index file</translation>
 <context>
     <name>U2::EditMarkerDialog</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="401"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="398"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="402"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="399"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="410"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="407"/>
         <source>Create Marker</source>
         <translation>Create Marker</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="448"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="453"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="445"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="450"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -895,63 +926,63 @@ bowtie index file</translation>
 <context>
     <name>U2::EditMarkerGroupDialog</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="46"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="47"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="84"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="81"/>
         <source>Create Marker Group</source>
         <translation>Create Marker Group</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="187"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="288"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="295"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="300"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="184"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="285"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="292"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="297"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="187"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="184"/>
         <source>You can not remove the required marker "rest"</source>
         <translation>You can not remove the required marker "rest"</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="206"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="203"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="206"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="203"/>
         <source>Are you really want to change marker's type? Some data can be lost!</source>
         <translation>Are you really want to change marker's type? Some data can be lost!</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="238"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="262"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="235"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="259"/>
         <source>Marker's name contains a comma symbol: "%1". It is not permitted for marker names</source>
         <translation>Marker's name contains a comma symbol: "%1". It is not permitted for marker names</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="244"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="267"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="241"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="264"/>
         <source>Duplicate marker's value: %1</source>
         <translation>Duplicate marker's value: %1</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="251"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="272"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="248"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="269"/>
         <source>Duplicate marker's name: %1</source>
         <translation>Duplicate marker's name: %1</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="288"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="285"/>
         <source>Parameter '%1' is not set</source>
         <translation>Parameter '%1' is not set</translation>
     </message>
@@ -982,22 +1013,22 @@ bowtie index file</translation>
 <context>
     <name>U2::GrouperEditorWidget</name>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="79"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="75"/>
         <source><Unset></source>
         <translation><Unset></translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="116"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="112"/>
         <source>By value</source>
         <translation>By value</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="122"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="118"/>
         <source>By id</source>
         <translation>By id</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="123"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="119"/>
         <source>By name</source>
         <translation>By name</translation>
     </message>
@@ -1005,12 +1036,12 @@ bowtie index file</translation>
 <context>
     <name>U2::GrouperSlotsCfgModel</name>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="307"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="303"/>
         <source>Output slot name</source>
         <translation>Output slot name</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="309"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="305"/>
         <source>Source data slot</source>
         <translation>Source data slot</translation>
     </message>
@@ -1018,12 +1049,12 @@ bowtie index file</translation>
 <context>
     <name>U2::JavascriptAgent</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="394"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="394"/>
         <source>The file does not exist</source>
         <translation>The file does not exist</translation>
     </message>
@@ -1031,13 +1062,13 @@ bowtie index file</translation>
 <context>
     <name>U2::MarkerEditorWidget</name>
     <message>
-        <location filename="../src/MarkerEditorWidget.cpp" line="130"/>
-        <location filename="../src/MarkerEditorWidget.cpp" line="145"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="126"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="141"/>
         <source>Duplicate marker's name: %1</source>
         <translation>Duplicate marker's name: %1</translation>
     </message>
     <message>
-        <location filename="../src/MarkerEditorWidget.cpp" line="152"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="148"/>
         <source>Marker's name contains spaces: %1</source>
         <translation>Marker's name contains spaces: %1</translation>
     </message>
@@ -1045,12 +1076,12 @@ bowtie index file</translation>
 <context>
     <name>U2::MarkerListCfgModel</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="349"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="346"/>
         <source>Marker name</source>
         <translation>Marker name</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="351"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="348"/>
         <source>Marker value</source>
         <translation>Marker value</translation>
     </message>
@@ -1117,30 +1148,30 @@ bowtie index file</translation>
 <context>
     <name>U2::OutputDirectoryWidget</name>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="80"/>
-        <source>Select a directory</source>
-        <translation>Select a directory</translation>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="71"/>
+        <source>Select a folder</source>
+        <translation>Select a folder</translation>
     </message>
 </context>
 <context>
     <name>U2::OutputFileDialog</name>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="52"/>
+        <location filename="../src/OutputFileDialog.cpp" line="51"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="53"/>
+        <location filename="../src/OutputFileDialog.cpp" line="52"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="57"/>
-        <source>Save a directory</source>
-        <translation>Save a directory</translation>
+        <location filename="../src/OutputFileDialog.cpp" line="56"/>
+        <source>Save a folder</source>
+        <translation>Save a folder</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="59"/>
+        <location filename="../src/OutputFileDialog.cpp" line="58"/>
         <source>Save a file</source>
         <translation>Save a file</translation>
     </message>
@@ -1148,27 +1179,26 @@ bowtie index file</translation>
 <context>
     <name>U2::OutputFilesWidget</name>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="63"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="65"/>
         <source>File</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="63"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="65"/>
         <source>Producer</source>
         <translation>Producer</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="91"/>
-        <source>Open containing directory</source>
-        <translation>Open containing directory</translation>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="89"/>
+        <source>Open containing folder</source>
+        <translation>Open containing folder</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="82"/>
         <source>Open by operating system</source>
-        <translation>Open by operating system</translation>
+        <translation type="vanished">Open by operating system</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="209"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="207"/>
         <source>files</source>
         <translation>files</translation>
     </message>
@@ -1176,32 +1206,32 @@ bowtie index file</translation>
 <context>
     <name>U2::ProblemsWidget</name>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="56"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="58"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="59"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="61"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="62"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="64"/>
         <source>Information</source>
         <translation>Information</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Element</source>
         <translation>Element</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Message</source>
         <translation>Message</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
@@ -1279,7 +1309,7 @@ bowtie index file</translation>
 <context>
     <name>U2::RemoveDashboardsTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="471"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="469"/>
         <source>Remove dashboards</source>
         <translation>Remove dashboards</translation>
     </message>
@@ -1287,37 +1317,37 @@ bowtie index file</translation>
 <context>
     <name>U2::ResourcesWidget</name>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="50"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="51"/>
         <source>Time</source>
         <translation>Time</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="102"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="103"/>
         <source>The workflow task is in progress...</source>
         <translation>The workflow task is in progress...</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="107"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="108"/>
         <source>The workflow task is in progress. There are problems...</source>
         <translation>The workflow task is in progress. There are problems...</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="113"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="114"/>
         <source>The workflow task has been finished with warnings!</source>
         <translation>The workflow task has been finished with warnings!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="119"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="120"/>
         <source>The workflow task has been finished with errors!</source>
         <translation>The workflow task has been finished with errors!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="125"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="126"/>
         <source>The workflow task has been finished successfully!</source>
         <translation>The workflow task has been finished successfully!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="130"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="131"/>
         <source>The workflow task has been canceled!</source>
         <translation>The workflow task has been canceled!</translation>
     </message>
@@ -1325,20 +1355,20 @@ bowtie index file</translation>
 <context>
     <name>U2::ScanDashboardsDirTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="425"/>
-        <source>Scan dashboards directory</source>
-        <translation>Scan dashboards directory</translation>
+        <location filename="../src/dashboard/Dashboard.cpp" line="423"/>
+        <source>Scan dashboards folder</source>
+        <translation>Scan dashboards folder</translation>
     </message>
 </context>
 <context>
     <name>U2::SchemaRunModeDelegate</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="555"/>
+        <location filename="../src/DelegateEditors.cpp" line="563"/>
         <source>This computer</source>
         <translation>This computer</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="556"/>
+        <location filename="../src/DelegateEditors.cpp" line="564"/>
         <source>Remote computer</source>
         <translation>Remote computer</translation>
     </message>
@@ -1359,17 +1389,17 @@ bowtie index file</translation>
 <context>
     <name>U2::StatisticsWidget</name>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Element</source>
         <translation>Element</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Elapsed time</source>
         <translation>Elapsed time</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Output messages</source>
         <translation>Output messages</translation>
     </message>
@@ -1390,17 +1420,17 @@ bowtie index file</translation>
 <context>
     <name>U2::StringListDelegate</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="686"/>
+        <location filename="../src/DelegateEditors.cpp" line="694"/>
         <source>Enter items</source>
         <translation>Enter items</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="688"/>
+        <location filename="../src/DelegateEditors.cpp" line="696"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="690"/>
+        <location filename="../src/DelegateEditors.cpp" line="698"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -1408,12 +1438,12 @@ bowtie index file</translation>
 <context>
     <name>U2::TophatSamples</name>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="293"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="284"/>
         <source>Divide the input datasets into samples for running Cuffdiff. There are must be at least 2 samples. It is not necessary to have the same number of datasets (replicates) for each sample. The samples names will be used by Cuffdiff as labels, which will be included in various output files produced by Cuffdiff.</source>
         <translation>Divide the input datasets into samples for running Cuffdiff. There are must be at least 2 samples. It is not necessary to have the same number of datasets (replicates) for each sample. The samples names will be used by Cuffdiff as labels, which will be included in various output files produced by Cuffdiff.</translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="371"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="362"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -1421,17 +1451,17 @@ bowtie index file</translation>
 <context>
     <name>U2::TophatSamplesWidgetController</name>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="70"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="61"/>
         <source>Sample name can not be empty</source>
         <translation>Sample name can not be empty</translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="75"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="66"/>
         <source>Sample name can consist only of Latin letters, numbers and the '_' symbol</source>
         <translation>Sample name can consist only of Latin letters, numbers and the '_' symbol</translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="83"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="74"/>
         <source>Duplicate sample name</source>
         <translation>Duplicate sample name</translation>
     </message>
@@ -1439,19 +1469,19 @@ bowtie index file</translation>
 <context>
     <name>U2::URLLineEdit</name>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="190"/>
-        <source>Select a directory</source>
-        <translation>Select a directory</translation>
+        <location filename="../src/support/URLLineEdit.cpp" line="187"/>
+        <source>Select a folder</source>
+        <translation>Select a folder</translation>
     </message>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="193"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="190"/>
         <source>Select file(s)</source>
         <translation>Select file(s)</translation>
     </message>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="208"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="205"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="210"/>
         <location filename="../src/support/URLLineEdit.cpp" line="213"/>
-        <location filename="../src/support/URLLineEdit.cpp" line="216"/>
         <source>Select a file</source>
         <translation>Select a file</translation>
     </message>
@@ -1459,26 +1489,26 @@ bowtie index file</translation>
 <context>
     <name>U2::URLListController</name>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="774"/>
-        <source>This file or directory does not exist: %1</source>
-        <translation>This file or directory does not exist: %1</translation>
+        <location filename="../src/DatasetsController.cpp" line="769"/>
+        <source>This file or folder does not exist: %1</source>
+        <translation>This file or folder does not exist: %1</translation>
     </message>
 </context>
 <context>
     <name>U2::URLListWidget</name>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="115"/>
-        <location filename="../src/DatasetWidget.cpp" line="118"/>
+        <location filename="../src/DatasetWidget.cpp" line="108"/>
+        <location filename="../src/DatasetWidget.cpp" line="110"/>
         <source>Select file</source>
         <translation>Select file</translation>
     </message>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="127"/>
-        <source>Select a directory</source>
-        <translation>Select a directory</translation>
+        <location filename="../src/DatasetWidget.cpp" line="120"/>
+        <source>Select a folder</source>
+        <translation>Select a folder</translation>
     </message>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="195"/>
+        <location filename="../src/DatasetWidget.cpp" line="188"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -1486,7 +1516,7 @@ bowtie index file</translation>
 <context>
     <name>U2::URLWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="502"/>
+        <location filename="../src/PropertyWidget.cpp" line="503"/>
         <source>add</source>
         <translation>add</translation>
     </message>
@@ -1525,12 +1555,12 @@ bowtie index file</translation>
 <context>
     <name>U2::Workflow::MarkerGroupListCfgModel</name>
     <message>
-        <location filename="../src/MarkerEditor.cpp" line="181"/>
+        <location filename="../src/MarkerEditor.cpp" line="183"/>
         <source>Marker Group</source>
         <translation>Marker Group</translation>
     </message>
     <message>
-        <location filename="../src/MarkerEditor.cpp" line="183"/>
+        <location filename="../src/MarkerEditor.cpp" line="185"/>
         <source>Marker Value</source>
         <translation>Marker Value</translation>
     </message>
@@ -1538,17 +1568,17 @@ bowtie index file</translation>
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="545"/>
+        <location filename="../src/DelegateEditors.cpp" line="553"/>
         <source>Overwrite</source>
         <translation>Overwrite</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="546"/>
+        <location filename="../src/DelegateEditors.cpp" line="554"/>
         <source>Rename</source>
         <translation>Rename</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="548"/>
+        <location filename="../src/DelegateEditors.cpp" line="556"/>
         <source>Append</source>
         <translation>Append</translation>
     </message>
diff --git a/src/corelibs/U2Designer/transl/russian.ts b/src/corelibs/U2Designer/transl/russian.ts
index 2231aa8..7060b83 100644
--- a/src/corelibs/U2Designer/transl/russian.ts
+++ b/src/corelibs/U2Designer/transl/russian.ts
@@ -57,14 +57,22 @@ this merge sequence slot:</source>
 <context>
     <name>CreateDirectoryDialog</name>
     <message>
+        <source>Create a folder</source>
+        <translation type="vanished">Создание папки</translation>
+    </message>
+    <message>
+        <source>Parent folder:</source>
+        <translation type="vanished">Родительская папка:</translation>
+    </message>
+    <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="14"/>
         <source>Create a directory</source>
-        <translation>Создание директории</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="43"/>
         <source>Parent directory:</source>
-        <translation>Родительская директория:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/CreateDirectoryDialog.ui" line="63"/>
@@ -85,9 +93,13 @@ this merge sequence slot:</source>
         <translation>Добавить файл(ы)</translation>
     </message>
     <message>
+        <source>Add folder</source>
+        <translation type="vanished">Добавить папку</translation>
+    </message>
+    <message>
         <location filename="../src/DatasetWidget.ui" line="62"/>
         <source>Add directory</source>
-        <translation>Добавить директорию</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DatasetWidget.ui" line="84"/>
@@ -442,14 +454,22 @@ this merge sequence slot:</source>
 <context>
     <name>OutputFileDialog</name>
     <message>
+        <source>Save file/folder</source>
+        <translation type="vanished">Сохранить файл/папку</translation>
+    </message>
+    <message>
+        <source>Create folder</source>
+        <translation type="vanished">Создать папку</translation>
+    </message>
+    <message>
         <location filename="../src/OutputFileDialog.ui" line="14"/>
         <source>Save file/directory</source>
-        <translation>Сохранить файл/директорию</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="31"/>
         <source>Create directory</source>
-        <translation>Создать директорию</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="63"/>
@@ -460,7 +480,11 @@ this merge sequence slot:</source>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="126"/>
         <source>Directory:</source>
-        <translation>Директория:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Folder:</source>
+        <translation type="vanished">Папка:</translation>
     </message>
     <message>
         <location filename="../src/OutputFileDialog.ui" line="146"/>
@@ -476,54 +500,55 @@ this merge sequence slot:</source>
         <translation>Выберите пример</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowGUIUtils.cpp" line="163"/>
+        <location filename="../src/WorkflowGUIUtils.cpp" line="159"/>
         <source>Double click to load the sample</source>
         <translation>Двойной щелчок загрузит пример</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="463"/>
+        <location filename="../src/DatasetsController.cpp" line="458"/>
         <source>Paired reads</source>
         <translation>Парные риды</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="465"/>
+        <location filename="../src/DatasetsController.cpp" line="460"/>
         <source>file</source>
         <translation>файл</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="465"/>
+        <location filename="../src/DatasetsController.cpp" line="460"/>
         <source>folder</source>
         <translation>папка</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="466"/>
+        <location filename="../src/DatasetsController.cpp" line="461"/>
         <source>UGENE has found "%1" on the file system. Do you want to add it as a second %2 with paired reads?</source>
         <translation>UGENE обнаружил "%1" в файловой системе. Хотите дабавить в качестве %2 с парными ридами?</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="81"/>
+        <location filename="../src/EstimationReporter.cpp" line="78"/>
         <source>m</source>
         <translation>m</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="82"/>
+        <location filename="../src/EstimationReporter.cpp" line="79"/>
         <source>h</source>
         <translation>h</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="97"/>
+        <location filename="../src/EstimationReporter.cpp" line="94"/>
         <source>Workflow Estimation</source>
         <translation>Оценка выполнения схемы</translation>
     </message>
     <message>
-        <location filename="../src/EstimationReporter.cpp" line="98"/>
+        <location filename="../src/EstimationReporter.cpp" line="95"/>
         <source>Approximate estimation time of the workflow run is </source>
         <translation>Примерная оценка длительности выполнения схемы </translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="40"/>
+        <location filename="../src/OutputFileDialog.cpp" line="170"/>
+        <location filename="../src/OutputFileDialog.cpp" line="217"/>
         <source>Workflow-run output</source>
-        <translation>Выходная директория схемы</translation>
+        <translation>Выходная папка схемы</translation>
     </message>
     <message>
         <location filename="../src/wizard/SelectorActors.cpp" line="43"/>
@@ -561,13 +586,19 @@ this merge sequence slot:</source>
         <translation>Произошла ошибка. Пожалуйста закройте визард и сообщите об ошибке по адресу: ugene at unipro.ru</translation>
     </message>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="48"/>
-        <source>The Workflow Output Directory is a common directory that is used to store all output files in the Workflow Designer. A separate subdirectory of the directory is created for each run of a workflow.
+        <source>The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer. A separate subfolder of the folder is created for each run of a workflow.
 
-Set up the directory:</source>
-        <translation>Выходная директория для схемы это общая директория, которая используется для сохранения всех выходных файлов в дизайнере вычислительных схем. Для каждого запуска схемы будет создана отдельная директория.
+Set up the folder:</source>
+        <translation type="vanished">Выходная папка для схемы это общая папка, которая используется для сохранения всех выходных файлов в дизайнере вычислительных схем. Для каждого запуска схемы будет создана отдельная папка.
+
+Установить папку:</translation>
+    </message>
+    <message>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="39"/>
+        <source>The Workflow Output Folder is a common folder that is used to store all output files in the Workflow Designer. A separate subdirectory of the folder is created for each run of a workflow.
 
-Установить директорию:</translation>
+Set up the folder:</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -657,14 +688,14 @@ Set up the directory:</source>
 <context>
     <name>U2::BowtieWidgetController</name>
     <message>
-        <location filename="../src/wizard/BowtieWidgetController.cpp" line="73"/>
+        <location filename="../src/wizard/BowtieWidgetController.cpp" line="70"/>
         <source>Select
 bowtie index file</source>
         <translation>Выберите
 индексный bowtie файл</translation>
     </message>
     <message>
-        <location filename="../src/wizard/BowtieWidgetController.cpp" line="84"/>
+        <location filename="../src/wizard/BowtieWidgetController.cpp" line="81"/>
         <source>Select one of Bowtie index files</source>
         <translation>Выберите один индексный Bowtie файл</translation>
     </message>
@@ -672,17 +703,17 @@ bowtie index file</source>
 <context>
     <name>U2::BreakpointHitCountDialog</name>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="74"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="68"/>
         <source>Reset</source>
         <translation>Сбросить</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="75"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="69"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointHitCountDialog.cpp" line="76"/>
+        <location filename="../src/BreakpointHitCountDialog.cpp" line="70"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -690,12 +721,12 @@ bowtie index file</source>
 <context>
     <name>U2::ComboBoxWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="178"/>
+        <location filename="../src/PropertyWidget.cpp" line="179"/>
         <source>False</source>
         <translation>Ложь</translation>
     </message>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="179"/>
+        <location filename="../src/PropertyWidget.cpp" line="180"/>
         <source>True</source>
         <translation>Истина</translation>
     </message>
@@ -703,7 +734,7 @@ bowtie index file</source>
 <context>
     <name>U2::ComboBoxWithDbUrlWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="339"/>
+        <location filename="../src/PropertyWidget.cpp" line="340"/>
         <source>Add New Connection</source>
         <translation>Добавить новое соединение</translation>
     </message>
@@ -711,12 +742,12 @@ bowtie index file</source>
 <context>
     <name>U2::ComboBoxWithUrlWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="314"/>
-        <source>Select a directory</source>
-        <translation>Укажите директорию</translation>
+        <location filename="../src/PropertyWidget.cpp" line="315"/>
+        <source>Select a folder</source>
+        <translation>Укажите папку</translation>
     </message>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="319"/>
+        <location filename="../src/PropertyWidget.cpp" line="320"/>
         <source>Select a file</source>
         <translation>Выберите файл</translation>
     </message>
@@ -724,12 +755,12 @@ bowtie index file</source>
 <context>
     <name>U2::CreateDirectoryDialog</name>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="214"/>
+        <location filename="../src/OutputFileDialog.cpp" line="213"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="215"/>
+        <location filename="../src/OutputFileDialog.cpp" line="214"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -737,43 +768,43 @@ bowtie index file</source>
 <context>
     <name>U2::Dashboard</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="170"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="165"/>
         <source>Output Files</source>
         <translation>Выходные файлы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="171"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="166"/>
         <source>Workflow Task</source>
         <translation>Задача схемы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="172"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="167"/>
         <source>Common Statistics</source>
         <translation>Общая статистика</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="179"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="174"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="256"/>
-        <location filename="../src/dashboard/Dashboard.cpp" line="264"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="251"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="259"/>
         <source>External Tools</source>
         <translation>Внешние инструменты</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="196"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="191"/>
         <source>Problems</source>
         <translation>Проблемы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="206"/>
-        <source>Can not create a directory: </source>
-        <translation>Невозможно создать директорию: </translation>
+        <location filename="../src/dashboard/Dashboard.cpp" line="201"/>
+        <source>Can not create a folder: </source>
+        <translation>Невозможно создать папку: </translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="221"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="216"/>
         <source>Can not open a file for writing: </source>
         <translation>Невозможно открыть файл для записи: </translation>
     </message>
@@ -781,17 +812,17 @@ bowtie index file</source>
 <context>
     <name>U2::DatasetsController</name>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="170"/>
+        <location filename="../src/DatasetsController.cpp" line="165"/>
         <source>Dataset name is empty</source>
         <translation>Имя набора данных пустое</translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="174"/>
+        <location filename="../src/DatasetsController.cpp" line="169"/>
         <source>Dataset name can not contain ':' and ';' symbols</source>
         <translation>Имя набора данных не может содержать ':' и ';' символы </translation>
     </message>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="179"/>
+        <location filename="../src/DatasetsController.cpp" line="174"/>
         <source>This dataset name already exists</source>
         <translation>Это имя набора данных уже существует</translation>
     </message>
@@ -858,12 +889,12 @@ bowtie index file</source>
 <context>
     <name>U2::EditBreakpointLabelsDialog</name>
     <message>
-        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="49"/>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="45"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="50"/>
+        <location filename="../src/EditBreakpointLabelsDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -871,23 +902,23 @@ bowtie index file</source>
 <context>
     <name>U2::EditMarkerDialog</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="401"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="398"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="402"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="399"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="410"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="407"/>
         <source>Create Marker</source>
         <translation>Создание маркера</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="448"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="453"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="445"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="450"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -895,63 +926,63 @@ bowtie index file</source>
 <context>
     <name>U2::EditMarkerGroupDialog</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="46"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="47"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="84"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="81"/>
         <source>Create Marker Group</source>
         <translation>Создание группы маркеров</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="187"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="288"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="295"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="300"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="184"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="285"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="292"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="297"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="187"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="184"/>
         <source>You can not remove the required marker "rest"</source>
         <translation>Вы не можете удалить выбранный маркер "rest"</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="206"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="203"/>
         <source>Warning</source>
         <translation>Ожидание</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="206"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="203"/>
         <source>Are you really want to change marker's type? Some data can be lost!</source>
         <translation>Вы действиетльно хотите изменить тип маркера? Некоторые данные могут быть утеряны!</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="238"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="262"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="235"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="259"/>
         <source>Marker's name contains a comma symbol: "%1". It is not permitted for marker names</source>
         <translation>Имя маркера содержит запрещенный символ: "%1". Это недопустимо для имени маркера</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="244"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="267"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="241"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="264"/>
         <source>Duplicate marker's value: %1</source>
         <translation>Повторяющееся значение маркера: %1</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="251"/>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="272"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="248"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="269"/>
         <source>Duplicate marker's name: %1</source>
         <translation>Повторящееся имя маркера: %1</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="288"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="285"/>
         <source>Parameter '%1' is not set</source>
         <translation>Параметр '%1' не установлен</translation>
     </message>
@@ -982,22 +1013,22 @@ bowtie index file</source>
 <context>
     <name>U2::GrouperEditorWidget</name>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="79"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="75"/>
         <source><Unset></source>
         <translation><Unset></translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="116"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="112"/>
         <source>By value</source>
         <translation>По значению</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="122"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="118"/>
         <source>By id</source>
         <translation>По идентификатору</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="123"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="119"/>
         <source>By name</source>
         <translation>По имени</translation>
     </message>
@@ -1005,12 +1036,12 @@ bowtie index file</source>
 <context>
     <name>U2::GrouperSlotsCfgModel</name>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="307"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="303"/>
         <source>Output slot name</source>
         <translation>Имя выходного слота</translation>
     </message>
     <message>
-        <location filename="../src/GrouperEditorWidget.cpp" line="309"/>
+        <location filename="../src/GrouperEditorWidget.cpp" line="305"/>
         <source>Source data slot</source>
         <translation>Слот источника данных</translation>
     </message>
@@ -1018,12 +1049,12 @@ bowtie index file</source>
 <context>
     <name>U2::JavascriptAgent</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="394"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="396"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="394"/>
         <source>The file does not exist</source>
         <translation>Файл не существует</translation>
     </message>
@@ -1031,13 +1062,13 @@ bowtie index file</source>
 <context>
     <name>U2::MarkerEditorWidget</name>
     <message>
-        <location filename="../src/MarkerEditorWidget.cpp" line="130"/>
-        <location filename="../src/MarkerEditorWidget.cpp" line="145"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="126"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="141"/>
         <source>Duplicate marker's name: %1</source>
         <translation>Повторящееся имя маркера: %1</translation>
     </message>
     <message>
-        <location filename="../src/MarkerEditorWidget.cpp" line="152"/>
+        <location filename="../src/MarkerEditorWidget.cpp" line="148"/>
         <source>Marker's name contains spaces: %1</source>
         <translation>Имя маркера содержит пробелы: %1</translation>
     </message>
@@ -1045,12 +1076,12 @@ bowtie index file</source>
 <context>
     <name>U2::MarkerListCfgModel</name>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="349"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="346"/>
         <source>Marker name</source>
         <translation>Имя маркера</translation>
     </message>
     <message>
-        <location filename="../src/EditMarkerGroupDialog.cpp" line="351"/>
+        <location filename="../src/EditMarkerGroupDialog.cpp" line="348"/>
         <source>Marker value</source>
         <translation>Значение маркера</translation>
     </message>
@@ -1117,30 +1148,30 @@ bowtie index file</source>
 <context>
     <name>U2::OutputDirectoryWidget</name>
     <message>
-        <location filename="../src/support/OutputDirectoryWidget.cpp" line="80"/>
-        <source>Select a directory</source>
-        <translation>Укажите директорию</translation>
+        <location filename="../src/support/OutputDirectoryWidget.cpp" line="71"/>
+        <source>Select a folder</source>
+        <translation>Укажите папку</translation>
     </message>
 </context>
 <context>
     <name>U2::OutputFileDialog</name>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="52"/>
+        <location filename="../src/OutputFileDialog.cpp" line="51"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="53"/>
+        <location filename="../src/OutputFileDialog.cpp" line="52"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="57"/>
-        <source>Save a directory</source>
-        <translation>Сохранить директорию</translation>
+        <location filename="../src/OutputFileDialog.cpp" line="56"/>
+        <source>Save a folder</source>
+        <translation>Сохранить папку</translation>
     </message>
     <message>
-        <location filename="../src/OutputFileDialog.cpp" line="59"/>
+        <location filename="../src/OutputFileDialog.cpp" line="58"/>
         <source>Save a file</source>
         <translation>Сохранить файл</translation>
     </message>
@@ -1148,27 +1179,26 @@ bowtie index file</source>
 <context>
     <name>U2::OutputFilesWidget</name>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="63"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="65"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="63"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="65"/>
         <source>Producer</source>
         <translation>Производитель</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="91"/>
-        <source>Open containing directory</source>
-        <translation>Открыть содержащую директорию</translation>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="89"/>
+        <source>Open containing folder</source>
+        <translation>Открыть содержащую папку</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="82"/>
         <source>Open by operating system</source>
-        <translation>Открыть при помощи операционной системы</translation>
+        <translation type="vanished">Открыть при помощи операционной системы</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="209"/>
+        <location filename="../src/dashboard/OutputFilesWidget.cpp" line="207"/>
         <source>files</source>
         <translation>файлы</translation>
     </message>
@@ -1176,32 +1206,32 @@ bowtie index file</source>
 <context>
     <name>U2::ProblemsWidget</name>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="56"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="58"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="59"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="61"/>
         <source>Warning</source>
         <translation>Ожидание</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="62"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="64"/>
         <source>Information</source>
         <translation>Информация</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Element</source>
         <translation>Элемент</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Message</source>
         <translation>Сообщение</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ProblemsWidget.cpp" line="118"/>
+        <location filename="../src/dashboard/ProblemsWidget.cpp" line="120"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
@@ -1279,7 +1309,7 @@ bowtie index file</source>
 <context>
     <name>U2::RemoveDashboardsTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="471"/>
+        <location filename="../src/dashboard/Dashboard.cpp" line="469"/>
         <source>Remove dashboards</source>
         <translation>Удалить панель</translation>
     </message>
@@ -1287,37 +1317,37 @@ bowtie index file</source>
 <context>
     <name>U2::ResourcesWidget</name>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="50"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="51"/>
         <source>Time</source>
         <translation>Время</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="102"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="103"/>
         <source>The workflow task is in progress...</source>
         <translation>Задача выполнения схемы в процессе...</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="107"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="108"/>
         <source>The workflow task is in progress. There are problems...</source>
         <translation>Задача выполнения схемы в процессе. Есть проблемы...</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="113"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="114"/>
         <source>The workflow task has been finished with warnings!</source>
         <translation>Задача выполнения схемы завершилась с предупреждениями!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="119"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="120"/>
         <source>The workflow task has been finished with errors!</source>
         <translation>Задача выполнения схемы завершилась с ошибками!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="125"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="126"/>
         <source>The workflow task has been finished successfully!</source>
         <translation>Задача выполнения схемы завершилась без ошибок!</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/ResourcesWidget.cpp" line="130"/>
+        <location filename="../src/dashboard/ResourcesWidget.cpp" line="131"/>
         <source>The workflow task has been canceled!</source>
         <translation>Задача выполнения схемы была отменена!</translation>
     </message>
@@ -1325,20 +1355,20 @@ bowtie index file</source>
 <context>
     <name>U2::ScanDashboardsDirTask</name>
     <message>
-        <location filename="../src/dashboard/Dashboard.cpp" line="425"/>
-        <source>Scan dashboards directory</source>
-        <translation>Сканирование каталога панели</translation>
+        <location filename="../src/dashboard/Dashboard.cpp" line="423"/>
+        <source>Scan dashboards folder</source>
+        <translation>Сканирование папки панели</translation>
     </message>
 </context>
 <context>
     <name>U2::SchemaRunModeDelegate</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="555"/>
+        <location filename="../src/DelegateEditors.cpp" line="563"/>
         <source>This computer</source>
         <translation>Данный компьютер</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="556"/>
+        <location filename="../src/DelegateEditors.cpp" line="564"/>
         <source>Remote computer</source>
         <translation>Удаленный компьютер</translation>
     </message>
@@ -1359,17 +1389,17 @@ bowtie index file</source>
 <context>
     <name>U2::StatisticsWidget</name>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Element</source>
         <translation>Элемент</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Elapsed time</source>
         <translation>Прошедшее время</translation>
     </message>
     <message>
-        <location filename="../src/dashboard/StatisticsWidget.cpp" line="61"/>
+        <location filename="../src/dashboard/StatisticsWidget.cpp" line="63"/>
         <source>Output messages</source>
         <translation>Выходные сообщения</translation>
     </message>
@@ -1390,17 +1420,17 @@ bowtie index file</source>
 <context>
     <name>U2::StringListDelegate</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="686"/>
+        <location filename="../src/DelegateEditors.cpp" line="694"/>
         <source>Enter items</source>
         <translation>Введите элементы</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="688"/>
+        <location filename="../src/DelegateEditors.cpp" line="696"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="690"/>
+        <location filename="../src/DelegateEditors.cpp" line="698"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -1408,12 +1438,12 @@ bowtie index file</source>
 <context>
     <name>U2::TophatSamples</name>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="293"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="284"/>
         <source>Divide the input datasets into samples for running Cuffdiff. There are must be at least 2 samples. It is not necessary to have the same number of datasets (replicates) for each sample. The samples names will be used by Cuffdiff as labels, which will be included in various output files produced by Cuffdiff.</source>
         <translation>Разделите входные наборы данных на образцы для запуска Cuffdiff. Должно быть не менее двух образцов. Необязательно иметь одинаковое число наборов данных для каждого образца. Имена образцов будут использоваться Cuffdiff в качестве меток, которые будут включены в различные выходные Cuffdiff файлы.</translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="371"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="362"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1421,18 +1451,18 @@ bowtie index file</source>
 <context>
     <name>U2::TophatSamplesWidgetController</name>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="70"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="61"/>
         <source>Sample name can not be empty</source>
         <translation>Имя образца не может быть пустым</translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="75"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="66"/>
         <source>Sample name can consist only of Latin letters, numbers and the '_' symbol</source>
         <translation>Имя образца может состоять только из латинских букв, цифр и '_' символов
 </translation>
     </message>
     <message>
-        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="83"/>
+        <location filename="../src/wizard/TophatSamplesWidgetController.cpp" line="74"/>
         <source>Duplicate sample name</source>
         <translation>Повторяющееся имя образца</translation>
     </message>
@@ -1440,19 +1470,19 @@ bowtie index file</source>
 <context>
     <name>U2::URLLineEdit</name>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="190"/>
-        <source>Select a directory</source>
-        <translation>Укажите директорию</translation>
+        <location filename="../src/support/URLLineEdit.cpp" line="187"/>
+        <source>Select a folder</source>
+        <translation>Укажите папку</translation>
     </message>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="208"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="205"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="210"/>
         <location filename="../src/support/URLLineEdit.cpp" line="213"/>
-        <location filename="../src/support/URLLineEdit.cpp" line="216"/>
         <source>Select a file</source>
         <translation>Выберите файл</translation>
     </message>
     <message>
-        <location filename="../src/support/URLLineEdit.cpp" line="193"/>
+        <location filename="../src/support/URLLineEdit.cpp" line="190"/>
         <source>Select file(s)</source>
         <translation>Выберите файл(ы)</translation>
     </message>
@@ -1460,26 +1490,26 @@ bowtie index file</source>
 <context>
     <name>U2::URLListController</name>
     <message>
-        <location filename="../src/DatasetsController.cpp" line="774"/>
-        <source>This file or directory does not exist: %1</source>
-        <translation>Этот файл или директория не существует: %1</translation>
+        <location filename="../src/DatasetsController.cpp" line="769"/>
+        <source>This file or folder does not exist: %1</source>
+        <translation>Этот файл или папка не существует: %1</translation>
     </message>
 </context>
 <context>
     <name>U2::URLListWidget</name>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="115"/>
-        <location filename="../src/DatasetWidget.cpp" line="118"/>
+        <location filename="../src/DatasetWidget.cpp" line="108"/>
+        <location filename="../src/DatasetWidget.cpp" line="110"/>
         <source>Select file</source>
         <translation>Выберите файл</translation>
     </message>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="127"/>
-        <source>Select a directory</source>
-        <translation>Укажите директорию</translation>
+        <location filename="../src/DatasetWidget.cpp" line="120"/>
+        <source>Select a folder</source>
+        <translation>Укажите папку</translation>
     </message>
     <message>
-        <location filename="../src/DatasetWidget.cpp" line="195"/>
+        <location filename="../src/DatasetWidget.cpp" line="188"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1487,7 +1517,7 @@ bowtie index file</source>
 <context>
     <name>U2::URLWidget</name>
     <message>
-        <location filename="../src/PropertyWidget.cpp" line="502"/>
+        <location filename="../src/PropertyWidget.cpp" line="503"/>
         <source>add</source>
         <translation>добавить</translation>
     </message>
@@ -1526,12 +1556,12 @@ bowtie index file</source>
 <context>
     <name>U2::Workflow::MarkerGroupListCfgModel</name>
     <message>
-        <location filename="../src/MarkerEditor.cpp" line="181"/>
+        <location filename="../src/MarkerEditor.cpp" line="183"/>
         <source>Marker Group</source>
         <translation>Группа маркера</translation>
     </message>
     <message>
-        <location filename="../src/MarkerEditor.cpp" line="183"/>
+        <location filename="../src/MarkerEditor.cpp" line="185"/>
         <source>Marker Value</source>
         <translation>Значение маркера</translation>
     </message>
@@ -1539,17 +1569,17 @@ bowtie index file</source>
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="545"/>
+        <location filename="../src/DelegateEditors.cpp" line="553"/>
         <source>Overwrite</source>
         <translation>Переписать</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="546"/>
+        <location filename="../src/DelegateEditors.cpp" line="554"/>
         <source>Rename</source>
         <translation>Переименовать</translation>
     </message>
     <message>
-        <location filename="../src/DelegateEditors.cpp" line="548"/>
+        <location filename="../src/DelegateEditors.cpp" line="556"/>
         <source>Append</source>
         <translation>Дописать</translation>
     </message>
diff --git a/src/corelibs/U2Formats/U2Formats.pri b/src/corelibs/U2Formats/U2Formats.pri
index 2bf6e08..83b2d40 100644
--- a/src/corelibs/U2Formats/U2Formats.pri
+++ b/src/corelibs/U2Formats/U2Formats.pri
@@ -21,7 +21,7 @@ win32-msvc2013 {
     LIBS += -lzlib
 }
 
-QT += sql
+QT += sql widgets
 
 # Force re-linking when lib changes
 unix:POST_TARGETDEPS += ../../_release/libsamtools.a
@@ -30,7 +30,14 @@ DEFINES+="_FILE_OFFSET_BITS=64" _LARGEFILE64_SOURCE _USE_KNETFILE
 INCLUDEPATH += ../../libs_3rdparty/samtools/src ../../libs_3rdparty/samtools/src/samtools
 win32:INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools/win32
 win32:LIBS += -lws2_32
-win32:DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+win32:DEFINES += _USE_MATH_DEFINES "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+
+win32 {
+    # not visual studio 2015
+    !win32-msvc2015 {
+        DEFINES += "inline=__inline"
+    }
+}
 
 INCLUDEPATH += ../../libs_3rdparty/sqlite3/src
 
diff --git a/src/corelibs/U2Formats/U2Formats.pro b/src/corelibs/U2Formats/U2Formats.pro
index c8ae523..099bb94 100644
--- a/src/corelibs/U2Formats/U2Formats.pro
+++ b/src/corelibs/U2Formats/U2Formats.pro
@@ -49,6 +49,8 @@ HEADERS += src/ABIFormat.h \
            src/ace/AceImporter.h \
            src/ace/CloneAssemblyWithReferenceToDbiTask.h \
            src/ace/ConvertAceToSqliteTask.h \
+           src/apr/AprFormat.h \
+           src/apr/AprImporter.h \
            src/mysql_dbi/MysqlAssemblyDbi.h \
            src/mysql_dbi/MysqlAttributeDbi.h \
            src/mysql_dbi/MysqlBlobInputStream.h \
@@ -152,6 +154,8 @@ SOURCES += src/ABIFormat.cpp \
            src/ace/AceImportUtils.cpp \
            src/ace/CloneAssemblyWithReferenceToDbiTask.cpp \
            src/ace/ConvertAceToSqliteTask.cpp \
+           src/apr/AprFormat.cpp \
+           src/apr/AprImporter.cpp \
            src/mysql_dbi/MysqlAssemblyDbi.cpp \
            src/mysql_dbi/MysqlAttributeDbi.cpp \
            src/mysql_dbi/MysqlBlobInputStream.cpp \
diff --git a/src/corelibs/U2Formats/src/ABIFormat.cpp b/src/corelibs/U2Formats/src/ABIFormat.cpp
index 7ca8af0..ad24380 100644
--- a/src/corelibs/U2Formats/src/ABIFormat.cpp
+++ b/src/corelibs/U2Formats/src/ABIFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -615,7 +615,6 @@ bool ABIFormat::loadABIObjects(SeekableBuf* fp, DNASequence &dna, DNAChromatogra
     QByteArray qualCodes(numBases, 0);
 
     if (res != -1 ) {
-
         for (uint i = 0; i < numBases; i++) {
             qualCodes[i] = DNAQuality::encode(conf[i],DNAQualityType_Sanger);
             switch(sequence[i]) {
@@ -661,7 +660,7 @@ bool ABIFormat::loadABIObjects(SeekableBuf* fp, DNASequence &dna, DNAChromatogra
         }
     }
 
-    quality.qualCodes = qualCodes;
+    quality.setQualCodes(qualCodes);
 
     }
 
@@ -882,6 +881,7 @@ skip_bases:
     }
 
     /* SUCCESS */
+    cd.name = sequenceName.isEmpty() ? "chromatogram" : sequenceName + " chromatogram";
     cd.hasQV = true;
     cd.seqLength = sequence.size();
     assert(sequence.size() == int(numBases));
diff --git a/src/corelibs/U2Formats/src/ABIFormat.h b/src/corelibs/U2Formats/src/ABIFormat.h
index eae1417..ffbab7b 100644
--- a/src/corelibs/U2Formats/src/ABIFormat.h
+++ b/src/corelibs/U2Formats/src/ABIFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ASNFormat.cpp b/src/corelibs/U2Formats/src/ASNFormat.cpp
index f8ae027..075a8b8 100644
--- a/src/corelibs/U2Formats/src/ASNFormat.cpp
+++ b/src/corelibs/U2Formats/src/ASNFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDebug>
-#include <QtCore/QStringList>
+#include <QDebug>
+#include <QStringList>
 
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/IOAdapter.h>
@@ -619,7 +619,7 @@ bool ASNFormat::AsnParser::readRootElement()
         throw AsnParserError(ASNFormat::tr("First line is too long"));
     }
 
-    QString line = QString(QByteArray::fromRawData(buf, len));
+    QString line = QString(QByteArray(buf, len));
     if (line.contains("::=")) {
         // get mime type
         int start = line.indexOf("::=")+ 4;
diff --git a/src/corelibs/U2Formats/src/ASNFormat.h b/src/corelibs/U2Formats/src/ASNFormat.h
index 2194ee7..14193b8 100644
--- a/src/corelibs/U2Formats/src/ASNFormat.h
+++ b/src/corelibs/U2Formats/src/ASNFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/BioStruct3D.h>
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QStack>
+#include <QSharedDataPointer>
+#include <QStack>
 
 #include "StdResidueDictionary.h"
 
diff --git a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
index eefb90e..d514404 100644
--- a/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
+++ b/src/corelibs/U2Formats/src/AbstractVariationFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -227,7 +227,7 @@ Document *AbstractVariationFormat::loadDocument(IOAdapter *io, const U2DbiRef &d
 
         addStringAttribute(os, dbi, track, U2VariantTrack::META_INFO_ATTIBUTE, metaInfo);
         CHECK_OP(os, NULL);
-        addStringAttribute(os, dbi, track, U2VariantTrack::HEADER_ATTIBUTE, U2DbiUtils::packStringList(header));
+        addStringAttribute(os, dbi, track, U2VariantTrack::HEADER_ATTIBUTE, StrPackUtils::packStringList(header));
         CHECK_OP(os, NULL);
 
         U2EntityRef trackRef(dbiRef, track.id);
@@ -246,7 +246,7 @@ Document *AbstractVariationFormat::loadDocument(IOAdapter *io, const U2DbiRef &d
 
         addStringAttribute(os, dbi, track, U2VariantTrack::META_INFO_ATTIBUTE, metaInfo);
         CHECK_OP(os, NULL);
-        addStringAttribute(os, dbi, track, U2VariantTrack::HEADER_ATTIBUTE, U2DbiUtils::packStringList(header));
+        addStringAttribute(os, dbi, track, U2VariantTrack::HEADER_ATTIBUTE, StrPackUtils::packStringList(header));
         CHECK_OP(os, NULL);
 
         const QList<U2Variant>& vars = snpsMap.value(seqName);
@@ -478,7 +478,7 @@ QStringList AbstractVariationFormat::getHeader(const VariantTrackObject *variant
     DbiConnection connection(variantTrackObject->getEntityRef().dbiRef, os);
     CHECK_OP(os, QStringList());
     const QString packedHeader = U2AttributeUtils::findStringAttribute(connection.dbi->getAttributeDbi(), variantTrackObject->getEntityRef().entityId, U2VariantTrack::HEADER_ATTIBUTE, os).value;
-    return U2DbiUtils::unpackStringList(packedHeader);
+    return StrPackUtils::unpackStringList(packedHeader);
 }
 
 } // U2
diff --git a/src/corelibs/U2Formats/src/AbstractVariationFormat.h b/src/corelibs/U2Formats/src/AbstractVariationFormat.h
index 6a93810..92cb7c0 100644
--- a/src/corelibs/U2Formats/src/AbstractVariationFormat.h
+++ b/src/corelibs/U2Formats/src/AbstractVariationFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/BAMUtils.cpp b/src/corelibs/U2Formats/src/BAMUtils.cpp
index f2104fc..3e7a9c2 100644
--- a/src/corelibs/U2Formats/src/BAMUtils.cpp
+++ b/src/corelibs/U2Formats/src/BAMUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -354,7 +354,7 @@ GUrl BAMUtils::mergeBam(const QStringList &bamUrls, const QString &mergetBamTarg
 
     bam_merge_core(0, mergetBamTargetUrl.toLocal8Bit().constData(), 0, urlsSize, mergeArgv, 0, 0);
 
-    delete mergeArgv;
+    delete [] mergeArgv;
 
     return QString(mergetBamTargetUrl);
 }
@@ -459,7 +459,7 @@ void BAMUtils::createBamIndex(const GUrl &bamUrl, U2OpStatus &os) {
 GUrl BAMUtils::getBamIndexUrl(const GUrl &bamUrl) {
     CHECK(hasValidBamIndex(bamUrl), GUrl());
 
-    const QByteArray bamFileName = bamUrl.getURLString().toLocal8Bit();
+    const QByteArray bamFileName = bamUrl.getURLString().toUtf8();
     QFileInfo fileInfo(bamFileName + ".bai");
     if (!fileInfo.exists()) {
         QString shortIndexUrl = bamFileName;
diff --git a/src/corelibs/U2Formats/src/BAMUtils.h b/src/corelibs/U2Formats/src/BAMUtils.h
index 829c2f8..44653a7 100644
--- a/src/corelibs/U2Formats/src/BAMUtils.h
+++ b/src/corelibs/U2Formats/src/BAMUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/BedFormat.cpp b/src/corelibs/U2Formats/src/BedFormat.cpp
index afd7df5..4f5ae3a 100644
--- a/src/corelibs/U2Formats/src/BedFormat.cpp
+++ b/src/corelibs/U2Formats/src/BedFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedArrayPointer>
-#include <QtCore/QScopedPointer>
+#include <QScopedArrayPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AnnotationTableObject.h>
diff --git a/src/corelibs/U2Formats/src/BedFormat.h b/src/corelibs/U2Formats/src/BedFormat.h
index ce31cf5..66f5b3a 100644
--- a/src/corelibs/U2Formats/src/BedFormat.h
+++ b/src/corelibs/U2Formats/src/BedFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp b/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
index d1b221f..522dc8f 100644
--- a/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
+++ b/src/corelibs/U2Formats/src/ClustalWAlnFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include <math.h>
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Algorithm/BuiltInConsensusAlgorithms.h>
 #include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
@@ -31,9 +31,9 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentWalker.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentWalker.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -58,7 +58,7 @@ ClustalWAlnFormat::ClustalWAlnFormat(QObject* p) : DocumentFormat(p, DocumentFor
 {
     formatName = tr("CLUSTALW");
     formatDescription = tr("Clustalw is a format for storing multiple sequence alignments");
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 }
 
 void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap& fs, U2OpStatus& os) {
@@ -69,7 +69,7 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
     const QBitArray& WHITES = TextUtils::WHITES;
 
     QString objName = io->getURL().baseFileName();
-    MAlignment al(objName);
+    MultipleSequenceAlignment al(objName);
     bool lineOk = false;
     bool firstBlock = true;
     int sequenceIdx = 0;
@@ -97,14 +97,14 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
             len--;
         }
         if (len == 0) {
-            if (al.getNumRows() == 0) {
+            if (al->getNumRows() == 0) {
                 continue;//initial empty lines
             }
             os.setError( ClustalWAlnFormat::tr("Error parsing file"));
             break;
         }
 
-        QByteArray line = QByteArray::fromRawData( buff, len );
+        QByteArray line = QByteArray(buff, len);
         if (valStartPos == 0) {
             int spaceIdx = line.indexOf(' ');
             int valIdx = spaceIdx + 1;
@@ -132,7 +132,7 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
         QByteArray name = line.left(valStartPos).trimmed();
         QByteArray value = line.mid(valStartPos, valEndPos - valStartPos);
 
-        int seqsInModel = al.getNumRows();
+        int seqsInModel = al->getNumRows();
         bool lastBlockLine = (!firstBlock && sequenceIdx == seqsInModel)
             || numNs >=2
             || name.isEmpty()
@@ -142,8 +142,8 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
             if (lastBlockLine && name.isEmpty()) { //if name is not empty -> this is a sequence but consensus (for Clustal files without consensus)
                 // this is consensus line - skip it
             } else {
-                assert(al.getNumRows() == sequenceIdx);
-                al.addRow(name, value, os);
+                assert(al->getNumRows() == sequenceIdx);
+                al->addRow(name, value);
             }
         } else {
             int rowIdx = -1;
@@ -157,12 +157,12 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
                 break;
             }
             if (rowIdx != -1) {
-                const MAlignmentRow& row = al.getRow(rowIdx);
-                if (row.getName() != name) {
+                const MultipleSequenceAlignmentRow row = al->getMsaRow(rowIdx);
+                if (row->getName() != name) {
                     os.setError( ClustalWAlnFormat::tr("Sequence names are not matched"));
                     break;
                 }
-                al.appendChars(rowIdx, currentLen, value.constData(), value.size());
+                al->appendChars(rowIdx, currentLen, value.constData(), value.size());
             }
         }
         if (lastBlockLine) {
@@ -171,7 +171,7 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
                 break;
             }
             sequenceIdx = 0;
-            currentLen = al.getLength();
+            currentLen = al->getLength();
         } else {
             sequenceIdx++;
         }
@@ -183,10 +183,10 @@ void ClustalWAlnFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObjec
         return;
     }
     U2AlphabetUtils::assignAlphabet(al);
-    CHECK_EXT(al.getAlphabet()!=NULL, os.setError( ClustalWAlnFormat::tr("Alphabet is unknown")), );
+    CHECK_EXT(al->getAlphabet()!=NULL, os.setError( ClustalWAlnFormat::tr("Alphabet is unknown")), );
 
     const QString folder = fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
     CHECK_OP(os, );
     objects.append(obj);
 }
@@ -204,14 +204,14 @@ Document* ClustalWAlnFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef,
 #define SEQ_ALIGNMENT    5
 
 void ClustalWAlnFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &ti) {
-    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "Clustal entry storing: no alignment", );
-    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "Clustal entry storing: no alignment", );
+    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     SAFE_POINT(1 == als.size(), "Clustal entry storing: alignment objects count error", );
 
-    const MAlignmentObject* obj = dynamic_cast<MAlignmentObject*>(als.first());
+    const MultipleSequenceAlignmentObject* obj = dynamic_cast<MultipleSequenceAlignmentObject*>(als.first());
     SAFE_POINT(NULL != obj, "Clustal entry storing: NULL alignment object", );
 
-    const MAlignment& ma = obj->getMAlignment();
+    const MultipleSequenceAlignment msa = obj->getMultipleAlignment();
 
     //write header
     QByteArray header("CLUSTAL W 2.0 multiple sequence alignment\n\n");
@@ -223,17 +223,17 @@ void ClustalWAlnFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList
 
     //precalculate seq writing params
     int maxNameLength = 0;
-    foreach(const MAlignmentRow& row, ma.getRows()) {
-        maxNameLength = qMax(maxNameLength, row.getName().length());
+    foreach(const MultipleSequenceAlignmentRow& row, msa->getMsaRows()) {
+        maxNameLength = qMax(maxNameLength, row->getName().length());
     }
     maxNameLength = qMin(maxNameLength, MAX_NAME_LEN);
 
-    int aliLen = ma.getLength();
-    QByteArray consensus(aliLen, MAlignment_GapChar);
+    int aliLen = msa->getLength();
+    QByteArray consensus(aliLen, U2Msa::GAP_CHAR);
 
     MSAConsensusAlgorithmFactory* algoFactory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(BuiltInConsensusAlgorithms::CLUSTAL_ALGO);
-    QScopedPointer<MSAConsensusAlgorithm> algo(algoFactory->createAlgorithm(ma));
-    MSAConsensusUtils::updateConsensus(ma, consensus, algo.data());
+    QScopedPointer<MSAConsensusAlgorithm> algo(algoFactory->createAlgorithm(msa));
+    MSAConsensusUtils::updateConsensus(msa, consensus, algo.data());
 
     int maxNumLength  = 1 + (aliLen < 10 ? 1 : (int)log10((double)aliLen));
 
@@ -252,21 +252,22 @@ void ClustalWAlnFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList
 
     //write sequence
     U2OpStatus2Log os;
-    MAlignmentWalker walker(ma);
+    MultipleSequenceAlignmentWalker walker(msa);
     for(int i = 0; i < aliLen; i+=seqPerPage) {
         int partLen = i + seqPerPage > aliLen ? aliLen - i : seqPerPage;
         QList<QByteArray> seqs = walker.nextData(partLen, os);
         CHECK_OP(os, );
         QList<QByteArray>::ConstIterator si = seqs.constBegin();
-        QList<MAlignmentRow>::ConstIterator ri = ma.getRows().constBegin();
+        QList<MultipleSequenceAlignmentRow> rows = msa->getMsaRows();
+        QList<MultipleSequenceAlignmentRow>::ConstIterator ri = rows.constBegin();
         for (; si != seqs.constEnd(); si++, ri++) {
-            const MAlignmentRow &row = *ri;
-            QByteArray line = row.getName().toLatin1();
+            const MultipleSequenceAlignmentRow &row = *ri;
+            QByteArray line = row->getName().toLatin1();
             if (line.length() > MAX_NAME_LEN) {
                 line = line.left(MAX_NAME_LEN);
             }
             TextUtils::replace(line.data(), line.length(), TextUtils::WHITES, '_');
-            line.append(QByteArray::fromRawData(spaces, seqStart - line.length()));
+            line.append(QByteArray(spaces, seqStart - line.length()));
             line.append(*si);
             line.append(' ');
             line.append(QString::number(qMin(i+seqPerPage, aliLen)));
@@ -280,7 +281,7 @@ void ClustalWAlnFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList
             }
         }
         //write consensus
-        QByteArray line = QByteArray::fromRawData(spaces, seqStart);
+        QByteArray line = QByteArray(spaces, seqStart);
         line.append(consensus.mid(i, partLen));
         line.append("\n\n");
         len = io->writeBlock(line);
@@ -295,16 +296,16 @@ void ClustalWAlnFormat::storeDocument(Document* d, IOAdapter* io, U2OpStatus& os
     CHECK_EXT(d!=NULL, os.setError(L10N::badArgument("doc")), );
     CHECK_EXT(io != NULL && io->isOpen(), os.setError(L10N::badArgument("IO adapter")), );
 
-    MAlignmentObject *obj = NULL;
+    MultipleSequenceAlignmentObject *obj = NULL;
     if( (d->getObjects().size() != 1)
-        || ((obj = qobject_cast<MAlignmentObject*>(d->getObjects().first())) == NULL)) {
+        || ((obj = qobject_cast<MultipleSequenceAlignmentObject*>(d->getObjects().first())) == NULL)) {
             os.setError("No data to write;");
             return;
     }
 
     QList<GObject*> als; als << obj;
     QMap< GObjectType, QList<GObject*> > objectsMap;
-    objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT] = als;
+    objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT] = als;
     storeEntry(io, objectsMap, os);
     CHECK_EXT(!os.isCoR(), os.setError(L10N::errorWritingFile(d->getURL())), );
 }
diff --git a/src/corelibs/U2Formats/src/ClustalWAlnFormat.h b/src/corelibs/U2Formats/src/ClustalWAlnFormat.h
index 14fb3ba..f04229c 100644
--- a/src/corelibs/U2Formats/src/ClustalWAlnFormat.h
+++ b/src/corelibs/U2Formats/src/ClustalWAlnFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ColumnDataParser.cpp b/src/corelibs/U2Formats/src/ColumnDataParser.cpp
index d74955a..9822f1b 100644
--- a/src/corelibs/U2Formats/src/ColumnDataParser.cpp
+++ b/src/corelibs/U2Formats/src/ColumnDataParser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ColumnDataParser.h b/src/corelibs/U2Formats/src/ColumnDataParser.h
index aa05e49..cd602cb 100644
--- a/src/corelibs/U2Formats/src/ColumnDataParser.h
+++ b/src/corelibs/U2Formats/src/ColumnDataParser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DNAQualityIOUtils.cpp b/src/corelibs/U2Formats/src/DNAQualityIOUtils.cpp
index cf7f423..c2e6353 100644
--- a/src/corelibs/U2Formats/src/DNAQualityIOUtils.cpp
+++ b/src/corelibs/U2Formats/src/DNAQualityIOUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DNAQualityIOUtils.h b/src/corelibs/U2Formats/src/DNAQualityIOUtils.h
index c91447e..d53ec94 100644
--- a/src/corelibs/U2Formats/src/DNAQualityIOUtils.h
+++ b/src/corelibs/U2Formats/src/DNAQualityIOUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/Database.cpp b/src/corelibs/U2Formats/src/Database.cpp
index 57e1786..0b691de 100644
--- a/src/corelibs/U2Formats/src/Database.cpp
+++ b/src/corelibs/U2Formats/src/Database.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/U2Type.h>
 #include <U2Formats/SQLiteDbi.h>
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/Database.h b/src/corelibs/U2Formats/src/Database.h
index fd4fab6..a8bbfa3 100644
--- a/src/corelibs/U2Formats/src/Database.h
+++ b/src/corelibs/U2Formats/src/Database.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DatabaseConnectionFormat.cpp b/src/corelibs/U2Formats/src/DatabaseConnectionFormat.cpp
index 6eb8a35..b4f5571 100644
--- a/src/corelibs/U2Formats/src/DatabaseConnectionFormat.cpp
+++ b/src/corelibs/U2Formats/src/DatabaseConnectionFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -51,7 +51,7 @@ DatabaseConnectionFormat::DatabaseConnectionFormat(QObject *p) :
     formatDescription = DocumentFormat::tr("A fake format that was added to implement shared database connection within existing document model.");
 
     supportedObjectTypes << GObjectTypes::SEQUENCE
-                         << GObjectTypes::MULTIPLE_ALIGNMENT
+                         << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT
                          << GObjectTypes::UNKNOWN
                          << GObjectTypes::UNLOADED
                          << GObjectTypes::TEXT
@@ -59,7 +59,7 @@ DatabaseConnectionFormat::DatabaseConnectionFormat(QObject *p) :
                          << GObjectTypes::ANNOTATION_TABLE
                          << GObjectTypes::VARIANT_TRACK
                          << GObjectTypes::CHROMATOGRAM
-                         << GObjectTypes::MULTIPLE_ALIGNMENT
+                         << GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT
                          << GObjectTypes::PHYLOGENETIC_TREE
                          << GObjectTypes::BIOSTRUCTURE_3D
                          << GObjectTypes::ASSEMBLY;
diff --git a/src/corelibs/U2Formats/src/DatabaseConnectionFormat.h b/src/corelibs/U2Formats/src/DatabaseConnectionFormat.h
index 679822d..809aadd 100644
--- a/src/corelibs/U2Formats/src/DatabaseConnectionFormat.h
+++ b/src/corelibs/U2Formats/src/DatabaseConnectionFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DifferentialFormat.cpp b/src/corelibs/U2Formats/src/DifferentialFormat.cpp
index 6977a3d..d071a49 100644
--- a/src/corelibs/U2Formats/src/DifferentialFormat.cpp
+++ b/src/corelibs/U2Formats/src/DifferentialFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DifferentialFormat.h b/src/corelibs/U2Formats/src/DifferentialFormat.h
index ba5309a..6b21464 100644
--- a/src/corelibs/U2Formats/src/DifferentialFormat.h
+++ b/src/corelibs/U2Formats/src/DifferentialFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
index 4f3b37a..53f1ae2 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,8 +30,8 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GenbankFeatures.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2DbiRegistry.h>
@@ -62,7 +62,7 @@ U2SequenceObject * DocumentFormatUtils::addSequenceObject(const U2DbiRef& dbiRef
     U2SequenceImporter importer;
 
     const QString folder = hints.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    importer.startSequence(dbiRef, folder, name, circular, os);
+    importer.startSequence(os, dbiRef, folder, name, circular);
     CHECK_OP(os, NULL);
 
     importer.addBlock(seq.constData(), seq.length(), os);
@@ -164,14 +164,14 @@ QList<DNASequence> DocumentFormatUtils::toSequences(const GObject* obj) {
         CHECK_OP_EXT(os, res.removeLast(), res);
         return res;
     }
-    const MAlignmentObject* maObj = qobject_cast<const MAlignmentObject*>(obj);
-    CHECK(maObj != NULL, res); //MAlignmentObject is NULL
+    const MultipleSequenceAlignmentObject* maObj = qobject_cast<const MultipleSequenceAlignmentObject*>(obj);
+    CHECK(maObj != NULL, res); //MultipleSequenceAlignmentObject is NULL
     const DNAAlphabet* al = maObj->getAlphabet();
-    qint64 alLen = maObj->getMAlignment().getLength();
-    foreach (const MAlignmentRow& row, maObj->getMAlignment().getRows()) {
+    qint64 alLen = maObj->getMsa()->getLength();
+    foreach (const MultipleSequenceAlignmentRow& row, maObj->getMsa()->getMsaRows()) {
         DNASequence seq;
-        seq.seq = row.toByteArray(alLen, os);
-        seq.setName(row.getName());
+        seq.seq = row->toByteArray(os, alLen);
+        seq.setName(row->getName());
         seq.alphabet = al;
         res << seq;
     }
@@ -237,7 +237,7 @@ U2SequenceObject* DocumentFormatUtils::addSequenceObjectDeprecated(const U2DbiRe
     }
 
     U2SequenceImporter importer;
-    importer.startSequence(dbiRef, folder, sequence.getName(), sequence.circular, os);
+    importer.startSequence(os, dbiRef, folder, sequence.getName(), sequence.circular);
     CHECK_OP(os, NULL);
     importer.addBlock(sequence.seq.constData(), sequence.seq.length(), os);
     CHECK_OP(os, NULL);
diff --git a/src/corelibs/U2Formats/src/DocumentFormatUtils.h b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
index fe7131e..0fb6424 100644
--- a/src/corelibs/U2Formats/src/DocumentFormatUtils.h
+++ b/src/corelibs/U2Formats/src/DocumentFormatUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,6 +25,7 @@
 #include <QStringList>
 
 #include <U2Core/DocumentModel.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2Region.h>
 
 namespace U2 {
@@ -37,7 +38,6 @@ class Document;
 class GObject;
 class GObjectReference;
 class GUrl;
-class MAlignment;
 class U2DbiRef;
 class U2OpStatus;
 class U2Sequence;
@@ -50,7 +50,7 @@ public:
 
     static QList<AnnotationSettings*> predefinedSettings();
 
-    /** Extracts sequences either from Sequence or MAlignment object */
+    /** Extracts sequences either from Sequence or MultipleSequenceAlignment object */
     static QList<DNASequence> toSequences(const GObject* obj);
 
     static int getMergeGap(const QVariantMap& hints);
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
index e36273f..c686ef2 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -137,7 +137,7 @@ void EMBLGenbankAbstractDocument::load(const U2DbiRef& dbiRef, IOAdapter* io, QL
         st.entry = &data;
 
         if (num_sequence == 0 || merge == false){
-            seqImporter.startSequence(dbiRef, folder, "default sequence name", false, os); //change name and circularity after finalize method
+            seqImporter.startSequence(os, dbiRef, folder, "default sequence name", false); //change name and circularity after finalize method
             CHECK_OP(os, );
         }
 
diff --git a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
index 989ab63..f69ed2e 100644
--- a/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
+++ b/src/corelibs/U2Formats/src/EMBLGenbankAbstractDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/U2SequenceUtils.h>
diff --git a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
index a8c1746..296262f 100644
--- a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.h b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.h
index 2f1e666..be092ca 100644
--- a/src/corelibs/U2Formats/src/EMBLPlainTextFormat.h
+++ b/src/corelibs/U2Formats/src/EMBLPlainTextFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/FastaFormat.cpp b/src/corelibs/U2Formats/src/FastaFormat.cpp
index b014395..14eec86 100644
--- a/src/corelibs/U2Formats/src/FastaFormat.cpp
+++ b/src/corelibs/U2Formats/src/FastaFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -29,7 +29,7 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Task.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U1AnnotationUtils.h>
@@ -56,7 +56,7 @@ FastaFormat::FastaFormat(QObject* p)
 {
     formatName = tr("FASTA");
     supportedObjectTypes+=GObjectTypes::SEQUENCE;
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatDescription = tr("FASTA format is a text-based format for representing either nucleotide sequences or peptide sequences, "
         "in which base pairs or amino acids are represented using single-letter codes. "
         "The format also allows for sequence names and comments to precede the sequences.");
@@ -82,7 +82,7 @@ static QVariantMap analyzeRawData(const QByteArray& data) {
             len = 0;
         } else {
             len += line.length();
-            if (!hasGaps && line.contains(MAlignment_GapChar)) {
+            if (!hasGaps && line.contains(U2Msa::GAP_CHAR)) {
                 hasGaps = true;
             }
         }
@@ -178,7 +178,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
         }
         CHECK_EXT_BREAK(lineOk, os.setError(FastaFormat::tr("Line is too long")));
 
-        QString headerLine = QString(QByteArray::fromRawData(buff+1, len-1)).trimmed();
+        QString headerLine = QString(QByteArray(buff+1, len-1)).trimmed();
         CHECK_EXT_BREAK(buff[0] == FastaFormat::FASTA_HEADER_START_SYMBOL, os.setError(FastaFormat::tr("First line is not a FASTA header")));
 
         //read sequence
@@ -194,7 +194,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, Q
                 CHECK_OP_BREAK(os);
                 uniqueNames.insert(objName);
             }
-            seqImporter.startSequence(dbiRef, folder, objName, false, os);
+            seqImporter.startSequence(os, dbiRef, folder, objName, false);
             CHECK_OP_BREAK(os);
 
             sequenceRef = GObjectReference(io->getURL().getURLString(), objName, GObjectTypes::SEQUENCE);
diff --git a/src/corelibs/U2Formats/src/FastaFormat.h b/src/corelibs/U2Formats/src/FastaFormat.h
index a4d19f3..bfab676 100644
--- a/src/corelibs/U2Formats/src/FastaFormat.h
+++ b/src/corelibs/U2Formats/src/FastaFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/FastqFormat.cpp b/src/corelibs/U2Formats/src/FastqFormat.cpp
index bc43744..cb99cb7 100644
--- a/src/corelibs/U2Formats/src/FastqFormat.cpp
+++ b/src/corelibs/U2Formats/src/FastqFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qmath.h>
+#include <QtMath>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppResources.h>
@@ -281,7 +281,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& hints
                 objName.squeeze();
                 uniqueNames.insert(objName);
             }
-            seqImporter.startSequence(dbiRef, folder, objName, false, warningOs);
+            seqImporter.startSequence(warningOs, dbiRef, folder, objName, false);
             if(errorLoggingBreak(warningOs, skippedLines, sequenceName)){
                 U2OpStatusImpl seqOs;
                 seqImporter.finalizeSequenceAndValidate(seqOs);
diff --git a/src/corelibs/U2Formats/src/FastqFormat.h b/src/corelibs/U2Formats/src/FastqFormat.h
index f96aeae..8b340a6 100644
--- a/src/corelibs/U2Formats/src/FastqFormat.h
+++ b/src/corelibs/U2Formats/src/FastqFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp b/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
index d78c4a3..bcfcc98 100644
--- a/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
+++ b/src/corelibs/U2Formats/src/FpkmTrackingFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedArrayPointer>
+#include <QScopedArrayPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/corelibs/U2Formats/src/FpkmTrackingFormat.h b/src/corelibs/U2Formats/src/FpkmTrackingFormat.h
index 8cfddb8..25efdf3 100644
--- a/src/corelibs/U2Formats/src/FpkmTrackingFormat.h
+++ b/src/corelibs/U2Formats/src/FpkmTrackingFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/GFFFormat.cpp b/src/corelibs/U2Formats/src/GFFFormat.cpp
index 34b2555..db6abb8 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.cpp
+++ b/src/corelibs/U2Formats/src/GFFFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedArrayPointer>
+#include <QScopedArrayPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/DNASequenceObject.h>
@@ -141,7 +141,7 @@ U2SequenceObject *importSequence(DNASequence &sequence,
                                  const QString& folder,
                                  U2OpStatus& os)
 {
-    seqImporter.startSequence(dbiRef, folder, sequence.getName(), sequence.circular, os);
+    seqImporter.startSequence(os, dbiRef, folder, sequence.getName(), sequence.circular);
     CHECK_OP(os, NULL);
     seqImporter.addBlock(sequence.seq.constData(), sequence.seq.length(), os);
     CHECK_OP(os, NULL);
@@ -216,7 +216,7 @@ static QStringList splitGffAttributes(const QString& line, char sep) {
 
 #define CHECK_OBJECT_COUNT() \
     if (objectsCountLimit > 0 && objects.size() >= objectsCountLimit) { \
-        os.setError(tr("File \"%1\" contains too many sequences to be displayed. " \
+        os.setError(GFFFormat::tr("File \"%1\" contains too many sequences to be displayed. " \
             "However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> " \
             "or pipelines built with Workflow Designer.").arg(io->getURL().getURLString())); \
         break; \
diff --git a/src/corelibs/U2Formats/src/GFFFormat.h b/src/corelibs/U2Formats/src/GFFFormat.h
index 1024da1..effb75f 100644
--- a/src/corelibs/U2Formats/src/GFFFormat.h
+++ b/src/corelibs/U2Formats/src/GFFFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/GTFFormat.cpp b/src/corelibs/U2Formats/src/GTFFormat.cpp
index 901819a..d9ed9a1 100644
--- a/src/corelibs/U2Formats/src/GTFFormat.cpp
+++ b/src/corelibs/U2Formats/src/GTFFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedArrayPointer>
+#include <QScopedArrayPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/GObjectReference.h>
diff --git a/src/corelibs/U2Formats/src/GTFFormat.h b/src/corelibs/U2Formats/src/GTFFormat.h
index 179c5fb..15db417 100644
--- a/src/corelibs/U2Formats/src/GTFFormat.h
+++ b/src/corelibs/U2Formats/src/GTFFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/GenbankLocationParser.cpp b/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
index 0a36e6b..58a72af 100644
--- a/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
+++ b/src/corelibs/U2Formats/src/GenbankLocationParser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/GenbankLocationParser.h b/src/corelibs/U2Formats/src/GenbankLocationParser.h
index 68eec83..f9269e6 100644
--- a/src/corelibs/U2Formats/src/GenbankLocationParser.h
+++ b/src/corelibs/U2Formats/src/GenbankLocationParser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_GENBANK_LOCATION_PARSER_H
 #define _U2_GENBANK_LOCATION_PARSER_H
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
index d77b8b9..4934d22 100644
--- a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,7 +44,7 @@
 namespace U2 {
 
 GenbankPlainTextFormat::GenbankPlainTextFormat(QObject* p)
-: EMBLGenbankAbstractDocument(BaseDocumentFormats::PLAIN_GENBANK, tr("Genbank"), 79, DocumentFormatFlags_SW, p)
+: EMBLGenbankAbstractDocument(BaseDocumentFormats::PLAIN_GENBANK, tr("GenBank"), 79, DocumentFormatFlags_SW, p)
 {
     formatDescription = tr("GenBank Flat File Format is a rich format for storing sequences and associated annotations");
     fileExtensions << "gb" << "gbk" << "gen" << "genbank";
diff --git a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.h b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.h
index f6c47ed..1db7f37 100644
--- a/src/corelibs/U2Formats/src/GenbankPlainTextFormat.h
+++ b/src/corelibs/U2Formats/src/GenbankPlainTextFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/MSFFormat.cpp b/src/corelibs/U2Formats/src/MSFFormat.cpp
index 7b44aa9..da84fe4 100644
--- a/src/corelibs/U2Formats/src/MSFFormat.cpp
+++ b/src/corelibs/U2Formats/src/MSFFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,9 +23,9 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentWalker.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentWalker.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -62,7 +62,7 @@ const int MSFFormat::CHARS_IN_WORD = 10;
 
 MSFFormat::MSFFormat(QObject* p) : DocumentFormat(p, DocumentFormatFlags(DocumentFormatFlag_SupportWriting) | DocumentFormatFlag_OnlyOneObject, QStringList("msf")) {
     formatName = tr("MSF");
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatDescription = tr("MSF format is used to store multiple aligned sequences. Files include the sequence name and the sequence itself, which is usually aligned with other sequences in the file.");
 }
 
@@ -115,7 +115,7 @@ int MSFFormat::getCheckSum(const QByteArray& seq) {
 }
 
 void MSFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap& hints, U2OpStatus& ti) {
-    MAlignment al(io->getURL().baseFileName());
+    MultipleSequenceAlignment al(io->getURL().baseFileName());
 
     //skip comments
     int checkSum = -1;
@@ -158,8 +158,7 @@ void MSFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
         }
 
         seqs.insert(name, check);
-        U2OpStatus2Log os;
-        al.addRow(name, QByteArray(), os);
+        al->addRow(name, QByteArray());
         rowLens.append(0);
         if (sum < CHECK_SUM_MOD) {
             sum = (sum + check) % CHECK_SUM_MOD;
@@ -181,10 +180,10 @@ void MSFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
             continue;
         }
 
-        int i = 0, n = al.getNumRows();
+        int i = 0, n = al->getNumRows();
         for (; i < n; i++) {
-            const MAlignmentRow& row = al.getRow(i);
-            QByteArray t = row.getName().toLocal8Bit();
+            const MultipleSequenceAlignmentRow row = al->getMsaRow(i);
+            QByteArray t = row->getName().toLocal8Bit();
             if (line.startsWith(t) && line[t.length()] == ' ') {
                 break;
             }
@@ -195,7 +194,7 @@ void MSFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
         for (int q, p = line.indexOf(' ') + 1; p > 0; p = q + 1) {
             q = line.indexOf(' ', p);
             QByteArray subSeq = (q < 0) ? line.mid(p) : line.mid(p, q - p);
-            al.appendChars(i, rowLens[i], subSeq.constData(), subSeq.length());
+            al->appendChars(i, rowLens[i], subSeq.constData(), subSeq.length());
             rowLens[i] = rowLens[i] + subSeq.length();
         }
 
@@ -204,24 +203,24 @@ void MSFFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& obj
 
     //checksum
     U2OpStatus2Log seqCheckOs;
-    for (int i=0; i<al.getNumRows(); i++) {
-        const MAlignmentRow& row = al.getRow(i);
-        int expectedCheckSum = seqs[row.getName()];
-        int sequenceCheckSum = getCheckSum(row.toByteArray(al.getLength(), seqCheckOs));
+    for (int i=0; i<al->getNumRows(); i++) {
+        const MultipleSequenceAlignmentRow row = al->getMsaRow(i);
+        int expectedCheckSum = seqs[row->getName()];
+        int sequenceCheckSum = getCheckSum(row->toByteArray(seqCheckOs, al->getLength()));
         if ( expectedCheckSum < CHECK_SUM_MOD &&  sequenceCheckSum != expectedCheckSum) {
             ti.setError(MSFFormat::tr("Check sum test failed"));
             return;
         }
-        al.replaceChars(i, '.', MAlignment_GapChar);
-        al.replaceChars(i, '~', MAlignment_GapChar);
+        al->replaceChars(i, '.', U2Msa::GAP_CHAR);
+        al->replaceChars(i, '~', U2Msa::GAP_CHAR);
     }
 
     U2AlphabetUtils::assignAlphabet(al);
-    CHECK_EXT(al.getAlphabet() != NULL, ti.setError(MSFFormat::tr("Alphabet unknown")), );
+    CHECK_EXT(al->getAlphabet() != NULL, ti.setError(MSFFormat::tr("Alphabet unknown")), );
 
     U2OpStatus2Log os;
     const QString folder = hints.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
     CHECK_OP(os, );
     objects.append(obj);
 }
@@ -244,39 +243,89 @@ static bool writeBlock(IOAdapter *io, U2OpStatus& ti, const QByteArray& buf) {
 }
 
 void MSFFormat::storeDocument(Document* d, IOAdapter* io, U2OpStatus& os) {
-    MAlignmentObject* obj = NULL;
-    if((d->getObjects().size() != 1) || ((obj = qobject_cast<MAlignmentObject*>(d->getObjects().first())) == NULL)) {
+    MultipleSequenceAlignmentObject* obj = NULL;
+    if((d->getObjects().size() != 1) || ((obj = qobject_cast<MultipleSequenceAlignmentObject*>(d->getObjects().first())) == NULL)) {
         os.setError("No data to write;");
         return;
     }
 
     QList<GObject*> als; als << obj;
     QMap< GObjectType, QList<GObject*> > objectsMap;
-    objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT] = als;
+    objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT] = als;
     storeEntry(io, objectsMap, os);
     CHECK_EXT(!os.isCoR(), os.setError(L10N::errorWritingFile(d->getURL())), );
 }
 
+namespace {
+
+const QString SUFFIX_SEPARATOR = "_";
+
+void splitCompleteName(const QString &completeName, QString &baseName, QString &suffix) {
+    const int separatorIndex = completeName.lastIndexOf(SUFFIX_SEPARATOR);
+    if (-1 == separatorIndex) {
+        baseName = completeName;
+        suffix = QString();
+        return;
+    }
+
+    suffix = completeName.mid(separatorIndex + 1);
+    bool ok = false;
+    suffix.toInt(&ok);
+    if (!ok) {
+        baseName = completeName;
+        suffix = QString();
+    } else {
+        baseName = completeName.left(separatorIndex);
+    }
+}
+
+QString increaseSuffix(const QString &completeName) {
+    QString baseName;
+    QString suffix;
+    splitCompleteName(completeName, baseName, suffix);
+    if (suffix.isEmpty()) {
+        return completeName + SUFFIX_SEPARATOR + QString::number(1);
+    }
+    return baseName + SUFFIX_SEPARATOR + QString("%1").arg(suffix.toInt() + 1, suffix.length(), 10, QChar('0'));
+}
+
+QString rollRowName(QString rowName, const QList<QString> &nonUniqueNames) {
+    while (nonUniqueNames.contains(rowName)) {
+        rowName = increaseSuffix(rowName);
+    }
+    return rowName;
+}
+
+}
+
 void MSFFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &os) {
-    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "MSF entry storing: no alignment", );
-    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "MSF entry storing: no alignment", );
+    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     SAFE_POINT(1 == als.size(), "MSF entry storing: alignment objects count error", );
 
-    const MAlignmentObject* obj = dynamic_cast<MAlignmentObject*>(als.first());
+    const MultipleSequenceAlignmentObject* obj = dynamic_cast<MultipleSequenceAlignmentObject*>(als.first());
     SAFE_POINT(NULL != obj, "MSF entry storing: NULL alignment object", );
 
-    const MAlignment& ma = obj->getMAlignment();
+    const MultipleSequenceAlignment msa = obj->getMultipleAlignment();
+
+    // Make row names unique
+    QMap<qint64, QString> uniqueRowNames;
+    int maxNameLen = 0;
+    foreach (const MultipleSequenceAlignmentRow &row , msa->getMsaRows()) {
+        uniqueRowNames.insert(row->getRowId(), rollRowName(row->getName().replace(' ', '_'), uniqueRowNames.values()));
+        maxNameLen = qMax(maxNameLen, uniqueRowNames.last().length());
+    }
 
     //precalculate seq writing params
-    int maxNameLen = 0, maLen = ma.getLength(), checkSum = 0;
+    int maLen = msa->getLength();
+    int checkSum = 0;
     static int maxCheckSumLen = 4;
-    QMap <QString, int> checkSums;
-    foreach(const MAlignmentRow& row , ma.getRows()) {
-        QByteArray sequence = row.toByteArray(maLen, os).replace(MAlignment_GapChar, '.');
+    QMap <qint64, int> checkSums;
+    foreach(const MultipleSequenceAlignmentRow& row , msa->getMsaRows()) {
+        QByteArray sequence = row->toByteArray(os, maLen).replace(U2Msa::GAP_CHAR, '.');
         int seqCheckSum = getCheckSum(sequence);
-        checkSums.insert(row.getName(), seqCheckSum);
+        checkSums.insert(row->getRowId(), seqCheckSum);
         checkSum = (checkSum + seqCheckSum) % CHECK_SUM_MOD;
-        maxNameLen = qMax(maxNameLen, row.getName().length());
     }
     int maxLengthLen = QString::number(maLen).length();
 
@@ -293,13 +342,13 @@ void MSFFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject
         return;
 
     //write info
-    foreach(const MAlignmentRow& row, ma.getRows()) {
+    foreach(const MultipleSequenceAlignmentRow& row, msa->getMsaRows()) {
         QByteArray line = " " + NAME_FIELD;
-        line += " " + QString(row.getName()).replace(' ', '_').leftJustified(maxNameLen+1); // since ' ' is a delimeter for MSF parser spaces in name not suppoted
+        line += " " + uniqueRowNames[row->getRowId()].leftJustified(maxNameLen + 1);
         line += "  " + LEN_FIELD;
         line += " " + QString("%1").arg(maLen, -maxLengthLen);
         line += "  " + CHECK_FIELD;
-        line += " " + QString("%1").arg(checkSums[row.getName()], -maxCheckSumLen);
+        line += " " + QString("%1").arg(checkSums[row->getRowId()], -maxCheckSumLen);
         line += "  " + WEIGHT_FIELD;
         line += " " + QByteArray::number(WEIGHT_VALUE) + "\n";
         if (writeBlock(io, os, line)) {
@@ -310,7 +359,7 @@ void MSFFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject
         return;
     }
 
-    MAlignmentWalker walker(ma, '.');
+    MultipleSequenceAlignmentWalker walker(msa, '.');
     for (int i = 0; !os.isCoR() && i < maLen; i += CHARS_IN_ROW) {
         /* write numbers */ {
             QByteArray line(maxNameLen + 2, ' ');
@@ -333,12 +382,11 @@ void MSFFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject
         QList<QByteArray> seqs = walker.nextData(CHARS_IN_ROW, os);
         CHECK_OP(os, );
         QList<QByteArray>::ConstIterator si = seqs.constBegin();
-        QList<MAlignmentRow>::ConstIterator ri = ma.getRows().constBegin();
+        QList<MultipleSequenceAlignmentRow> rows = msa->getMsaRows();
+        QList<MultipleSequenceAlignmentRow>::ConstIterator ri = rows.constBegin();
         for (; si != seqs.constEnd(); si++, ri++) {
-            const MAlignmentRow &row = *ri;
-            QByteArray line = row.getName().toLocal8Bit();
-            line.replace(' ', '_'); // since ' ' is a delimiter for MSF parser spaces in name not supported
-            line = line.leftJustified(maxNameLen+1);
+            const MultipleSequenceAlignmentRow &row = *ri;
+            QByteArray line = uniqueRowNames[row->getRowId()].leftJustified(maxNameLen + 1).toLocal8Bit();
 
             for (int j = 0; j < CHARS_IN_ROW && i + j < maLen; j += CHARS_IN_WORD) {
                 line += ' ';
diff --git a/src/corelibs/U2Formats/src/MSFFormat.h b/src/corelibs/U2Formats/src/MSFFormat.h
index 72ac3cd..d0facf0 100644
--- a/src/corelibs/U2Formats/src/MSFFormat.h
+++ b/src/corelibs/U2Formats/src/MSFFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/MegaFormat.cpp b/src/corelibs/U2Formats/src/MegaFormat.cpp
index efed6d9..6393b39 100644
--- a/src/corelibs/U2Formats/src/MegaFormat.cpp
+++ b/src/corelibs/U2Formats/src/MegaFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentWalker.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentWalker.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -52,7 +52,7 @@ const char MegaFormat::MEGA_END_COMMENT=';';
 MegaFormat::MegaFormat(QObject* p) : DocumentFormat(p, DocumentFormatFlags(DocumentFormatFlag_SupportWriting) | DocumentFormatFlag_OnlyOneObject, QStringList("meg")) {
     formatName = tr("Mega");
     formatDescription = tr("Mega is a file format of native MEGA program");
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 }
 
 Document* MegaFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, U2OpStatus& os){
@@ -66,16 +66,16 @@ void MegaFormat::storeDocument(Document* d, IOAdapter* io, U2OpStatus& os) {
     CHECK_EXT(d!=NULL, os.setError(L10N::badArgument("doc")), );
     CHECK_EXT(io != NULL && io->isOpen(), os.setError(L10N::badArgument("IO adapter")), );
 
-    MAlignmentObject* obj = NULL;
+    MultipleSequenceAlignmentObject* obj = NULL;
     if( (d->getObjects().size() != 1)
-        || ((obj = qobject_cast<MAlignmentObject*>(d->getObjects().first())) == NULL)) {
+        || ((obj = qobject_cast<MultipleSequenceAlignmentObject*>(d->getObjects().first())) == NULL)) {
             os.setError("No data to write;");
             return;
     }
 
     QList<GObject*> als; als << obj;
     QMap< GObjectType, QList<GObject*> > objectsMap;
-    objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT] = als;
+    objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT] = als;
     storeEntry(io, objectsMap, os);
     CHECK_EXT(!os.isCoR(), os.setError(L10N::errorWritingFile(d->getURL())), );
 }
@@ -217,22 +217,22 @@ bool MegaFormat::skipComments(IOAdapter *io, QByteArray &line, U2OpStatus &ti) {
     return eof;
 }
 
-void MegaFormat::workUpIndels(MAlignment& al) {
-    QByteArray firstSequence=al.getRow(0).getData();
+void MegaFormat::workUpIndels(MultipleSequenceAlignment& al) {
+    QByteArray firstSequence=al->getMsaRow(0)->getData();
 
-    for (int i=1; i<al.getNumRows(); i++) {
-        QByteArray newSeq=al.getRow(i).getData();
+    for (int i=1; i<al->getNumRows(); i++) {
+        QByteArray newSeq=al->getMsaRow(i)->getData();
         for (int j=0; j<newSeq.length(); j++) {
-            if (MEGA_IDENTICAL==al.charAt(i, j)) {
+            if (MEGA_IDENTICAL==al->charAt(i, j)) {
                 newSeq[j]=firstSequence[j];
             }
         }
-        al.setRowContent(i, newSeq);
+        al->setRowContent(i, newSeq);
     }
 }
 
 void MegaFormat::load(U2::IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &objects, const QVariantMap& fs, U2::U2OpStatus &os) {
-    MAlignment al(io->getURL().baseFileName());
+    MultipleSequenceAlignment al(io->getURL().baseFileName());
     QByteArray line;
     bool eof=false;
     bool firstBlock=true;
@@ -275,8 +275,8 @@ void MegaFormat::load(U2::IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*>
         }
 
         if (firstBlock) {
-            for (int i=0; i<al.getNumRows(); i++) {
-                if (al.getRow(i).getName()==name) {
+            for (int i=0; i<al->getNumRows(); i++) {
+                if (al->getMsaRow(i)->getName()==name) {
                     firstBlock=false;
                     sequenceIdx=0;
                     break;
@@ -285,33 +285,30 @@ void MegaFormat::load(U2::IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*>
         }
         //add the sequence to the list
         if (firstBlock) {
-            al.addRow(name, value, os);
+            al->addRow(name, value);
             rowLens.append(value.size());
-            CHECK_OP(os, );
             sequenceIdx++;
         } else {
-            if (sequenceIdx<al.getNumRows()) {
-                const MAlignmentRow *item=&al.getRow(sequenceIdx);
-
-                if (item->getName()!=name) {
+            if (sequenceIdx<al->getNumRows()) {
+                if (al->getMsaRow(sequenceIdx)->getName() != name) {
                     os.setError(MegaFormat::tr("Incorrect order of sequences' names"));
                     return;
                 }
-                al.appendChars(sequenceIdx, rowLens[sequenceIdx], value.constData(), value.size());
+                al->appendChars(sequenceIdx, rowLens[sequenceIdx], value.constData(), value.size());
                 rowLens[sequenceIdx] = rowLens[sequenceIdx] + value.size();
             } else {
                 os.setError( MegaFormat::tr("Incorrect sequence") );
                 break;
             }
             sequenceIdx++;
-            if (sequenceIdx == al.getNumRows()) {
+            if (sequenceIdx == al->getNumRows()) {
                 sequenceIdx = 0;
             }
         }
     }
 
     foreach (int rowLen, rowLens) {
-        if (rowLen != al.getLength()) {
+        if (rowLen != al->getLength()) {
             os.setError( MegaFormat::tr("Found sequences of different sizes"));
             break;
         }
@@ -320,25 +317,25 @@ void MegaFormat::load(U2::IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*>
     CHECK_OP(os, );
 
     U2AlphabetUtils::assignAlphabet(al);
-    CHECK_EXT(al.getAlphabet() != NULL, os.setError( tr("Alphabet is unknown")), );
+    CHECK_EXT(al->getAlphabet() != NULL, os.setError( tr("Alphabet is unknown")), );
 
     workUpIndels(al); //replace '.' by symbols from the first sequence
 
     const QString folder = fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
     CHECK_OP(os, );
     objects.append(obj);
 }
 
 void MegaFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &ti) {
-    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "Mega entry storing: no alignment", );
-    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "Mega entry storing: no alignment", );
+    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     SAFE_POINT(1 == als.size(), "Mega entry storing: alignment objects count error", );
 
-    const MAlignmentObject* obj = dynamic_cast<MAlignmentObject*>(als.first());
+    const MultipleSequenceAlignmentObject* obj = dynamic_cast<MultipleSequenceAlignmentObject*>(als.first());
     SAFE_POINT(NULL != obj, "Mega entry storing: NULL alignment object", );
 
-    const MAlignment& ma = obj->getMAlignment();
+    const MultipleSequenceAlignment msa = obj->getMultipleAlignment();
 
     //write header
     QByteArray header;
@@ -350,26 +347,27 @@ void MegaFormat::storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObjec
     }
 
     int maxNameLength=0;
-    foreach (MAlignmentRow item, ma.getRows()) {
-        maxNameLength = qMax(maxNameLength, item.getName().length());
+    foreach (const MultipleSequenceAlignmentRow &item, msa->getMsaRows()) {
+        maxNameLength = qMax(maxNameLength, item->getName().length());
     }
 
     //write data
-    int seqLength=ma.getLength();
+    int seqLength=msa->getLength();
     int writtenLength=0;
-    MAlignmentWalker walker(ma);
+    MultipleSequenceAlignmentWalker walker(msa);
     while (writtenLength<seqLength) {
         QList<QByteArray> seqs = walker.nextData(BLOCK_LENGTH, ti);
         CHECK_OP(ti, );
         QList<QByteArray>::ConstIterator si = seqs.constBegin();
-        QList<MAlignmentRow>::ConstIterator ri = ma.getRows().constBegin();
+        QList<MultipleSequenceAlignmentRow> rows = msa->getMsaRows();
+        QList<MultipleSequenceAlignmentRow>::ConstIterator ri = rows.constBegin();
         for (; si != seqs.constEnd(); si++, ri++) {
-            const MAlignmentRow &item = *ri;
+            const MultipleSequenceAlignmentRow &item = *ri;
             QByteArray line;
-            line.append(MEGA_SEPARATOR).append(item.getName());
+            line.append(MEGA_SEPARATOR).append(item->getName());
             TextUtils::replace(line.data(), line.length(), TextUtils::WHITES, '_');
 
-            for (int i=0; i<maxNameLength-item.getName().length()+1; i++) {
+            for (int i=0; i<maxNameLength-item->getName().length()+1; i++) {
                 line.append(' ');
             }
 
diff --git a/src/corelibs/U2Formats/src/MegaFormat.h b/src/corelibs/U2Formats/src/MegaFormat.h
index d2d3196..56eca74 100644
--- a/src/corelibs/U2Formats/src/MegaFormat.h
+++ b/src/corelibs/U2Formats/src/MegaFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 namespace U2 {
 
@@ -51,7 +51,7 @@ private:
     static bool readSequence(IOAdapter* io, QByteArray &line, U2OpStatus &ti,
                              QByteArray &value, bool *lastIteration);
 
-    static void workUpIndels(MAlignment & al);
+    static void workUpIndels(MultipleSequenceAlignment & al);
     static bool getNextLine(IOAdapter* io, QByteArray& line);
     static bool skipComments(IOAdapter* io, QByteArray &line, U2OpStatus &ti);
     static bool checkName(QByteArray &name);
diff --git a/src/corelibs/U2Formats/src/NEXUSFormat.cpp b/src/corelibs/U2Formats/src/NEXUSFormat.cpp
index 091ea90..ab702c5 100644
--- a/src/corelibs/U2Formats/src/NEXUSFormat.cpp
+++ b/src/corelibs/U2Formats/src/NEXUSFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QStack>
+#include <QStack>
 
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PhyTreeObject.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -49,7 +49,7 @@ NEXUSFormat::NEXUSFormat(QObject *p) :
 {
     formatName = tr("NEXUS");
     formatDescription = tr("Nexus is a multiple alignment and phylogenetic trees file format");
-    supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     supportedObjectTypes += GObjectTypes::PHYLOGENETIC_TREE;
 }
 
@@ -418,7 +418,7 @@ bool NEXUSParser::readDataContents(Context &ctx) {
 
                 // Replace gaps
                 if (ctx.contains("gap")) {
-                    value.replace(ctx["gap"], QChar(MAlignment_GapChar));
+                    value.replace(ctx["gap"], QChar(U2Msa::GAP_CHAR));
                 }
 
                 U2OpStatus2Log os;
@@ -433,37 +433,35 @@ bool NEXUSParser::readDataContents(Context &ctx) {
                 reportProgress();
             }
 
-            // Build MAlignment object
-            U2OpStatus2Log os;
-            MAlignment ma(tz.getIO()->getURL().baseFileName());
-            foreach (QString name, rows.keys()) {
-                ma.addRow(name, rows[name], os);
-                CHECK_OP(os, false);
+            // Build MultipleSequenceAlignment object
+            MultipleSequenceAlignment ma(tz.getIO()->getURL().baseFileName());
+            foreach (const QString &name, rows.keys()) {
+                ma->addRow(name, rows[name]);
             }
 
             // Determine alphabet & replace missing chars
             if (ctx.contains("missing")) {
                 char missing = ctx["missing"].toLatin1()[0];
                 U2AlphabetUtils::assignAlphabet(ma, missing);
-                CHECK_EXT(ma.getAlphabet() != NULL, errors.append("Unknown alphabet"), false);
+                CHECK_EXT(ma->getAlphabet() != NULL, errors.append("Unknown alphabet"), false);
 
-                char ourMissing = ma.getAlphabet()->getDefaultSymbol();
+                char ourMissing = ma->getAlphabet()->getDefaultSymbol();
 
                 // replace missing
-                for (int i = 0; i < ma.getNumRows(); ++i) {
-                    ma.replaceChars(i, missing, ourMissing);
+                for (int i = 0; i < ma->getNumRows(); ++i) {
+                    ma->replaceChars(i, missing, ourMissing);
                 }
             } else {
                 U2AlphabetUtils::assignAlphabet(ma);
-                CHECK_EXT(ma.getAlphabet() != NULL, errors.append("Unknown alphabet"), false);
+                CHECK_EXT(ma->getAlphabet() != NULL, errors.append("Unknown alphabet"), false);
             }
 
-            if (ma.getAlphabet() == 0) {
+            if (ma->getAlphabet() == 0) {
                 errors.append("Unknown alphabet");
                 return false;
             }
 
-            MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, ma, ti);
+            MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, ma, ti);
             CHECK_OP(ti, false);
             addObject(obj);
         } else if (cmd == END) {
@@ -725,7 +723,7 @@ void writeHeader(IOAdapter *io, U2OpStatus&) {
     io->writeBlock(line);
 }
 
-void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpStatus&) {
+void writeMAligment(const MultipleSequenceAlignment &ma, bool simpleName, IOAdapter *io, U2OpStatus&) {
     QByteArray line;
     QByteArray tabs, tab(4, ' ');
 
@@ -736,8 +734,8 @@ void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpSt
     tabs.append(tab);
 
     int ntax, nchar;
-    ntax = ma.getNumRows();
-    nchar = ma.getLength();
+    ntax = ma->getNumRows();
+    nchar = ma->getLength();
 
     QTextStream(&line) << tabs << "dimensions ntax=" << ntax << " nchar=" << nchar << ";\n";
     io->writeBlock(line);
@@ -745,7 +743,7 @@ void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpSt
 
     //datatype for MrBayes files
     QString dataType;
-    const QString& alphabetId = ma.getAlphabet()->getId();
+    const QString& alphabetId = ma->getAlphabet()->getId();
     if(alphabetId == BaseDNAAlphabetIds::NUCL_DNA_DEFAULT() || alphabetId == BaseDNAAlphabetIds::NUCL_DNA_EXTENDED()){
         dataType = "dna";
     }else if(alphabetId == BaseDNAAlphabetIds::NUCL_RNA_DEFAULT() || alphabetId == BaseDNAAlphabetIds::NUCL_RNA_EXTENDED()){
@@ -756,7 +754,7 @@ void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpSt
         dataType = "standard";
     }
 
-    QTextStream(&line) << tabs << "format datatype="<<dataType<<" gap=" << MAlignment_GapChar << ";\n";
+    QTextStream(&line) << tabs << "format datatype="<<dataType<<" gap=" << U2Msa::GAP_CHAR << ";\n";
     io->writeBlock(line);
     line.clear();
 
@@ -766,19 +764,19 @@ void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpSt
 
     tabs.append(tab);
 
-    const QList<MAlignmentRow> &rows = ma.getRows();
+    const QList<MultipleSequenceAlignmentRow> rows = ma->getMsaRows();
 
     int nameMaxLen = 0;
-    foreach (MAlignmentRow row, rows) {
-        if (row.getName().size() > nameMaxLen) {
-            nameMaxLen = row.getName().size();
+    foreach (const MultipleSequenceAlignmentRow &row, rows) {
+        if (row->getName().size() > nameMaxLen) {
+            nameMaxLen = row->getName().size();
         }
     }
     nameMaxLen += 2;    // quotes may appear
 
-    foreach (const MAlignmentRow& row, rows)
+    foreach (const MultipleSequenceAlignmentRow& row, rows)
     {
-        QString name = row.getName();
+        QString name = row->getName();
 
         if (name.contains(QRegExp("\\s|\\W"))){
             if (simpleName){
@@ -795,7 +793,7 @@ void writeMAligment(const MAlignment &ma, bool simpleName, IOAdapter *io, U2OpSt
         name = name.leftJustified(nameMaxLen);
 
         U2OpStatus2Log os;
-        QTextStream(&line) << tabs << name << " " << row.toByteArray(nchar, os) << "\n";
+        QTextStream(&line) << tabs << name << " " << row->toByteArray(os, nchar) << "\n";
         io->writeBlock(line);
         line.clear();
     }
@@ -887,10 +885,10 @@ void NEXUSFormat::storeObjects( QList<GObject*> objects, bool simpleNames, IOAda
     writeHeader(io, ti);
 
     foreach (GObject *object, objects) {
-        MAlignmentObject *mao = qobject_cast<MAlignmentObject*> (object);
+        MultipleSequenceAlignmentObject *mao = qobject_cast<MultipleSequenceAlignmentObject*> (object);
         PhyTreeObject *pto = qobject_cast<PhyTreeObject*> (object);
         if (mao) {
-            writeMAligment(mao->getMAlignment(), simpleNames, io, ti);
+            writeMAligment(mao->getMultipleAlignment(), simpleNames, io, ti);
             io->writeBlock(QByteArray("\n"));
         } else if (pto) {
             writePhyTree(pto->getTree(), pto->getGObjectName(), io, ti);
diff --git a/src/corelibs/U2Formats/src/NEXUSFormat.h b/src/corelibs/U2Formats/src/NEXUSFormat.h
index 9716e32..8f2529d 100644
--- a/src/corelibs/U2Formats/src/NEXUSFormat.h
+++ b/src/corelibs/U2Formats/src/NEXUSFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/NEXUSParser.h b/src/corelibs/U2Formats/src/NEXUSParser.h
index 06ea695..664aed9 100644
--- a/src/corelibs/U2Formats/src/NEXUSParser.h
+++ b/src/corelibs/U2Formats/src/NEXUSParser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_NEXUS_PARSER_H_
 #define _U2_NEXUS_PARSER_H_
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Core/IOAdapter.h>
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Formats/src/NewickFormat.cpp b/src/corelibs/U2Formats/src/NewickFormat.cpp
index 8ab58ad..26708ff 100644
--- a/src/corelibs/U2Formats/src/NewickFormat.cpp
+++ b/src/corelibs/U2Formats/src/NewickFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/NewickFormat.h b/src/corelibs/U2Formats/src/NewickFormat.h
index 5617ad2..03aaa40 100644
--- a/src/corelibs/U2Formats/src/NewickFormat.h
+++ b/src/corelibs/U2Formats/src/NewickFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/PDBFormat.cpp b/src/corelibs/U2Formats/src/PDBFormat.cpp
index e382c42..288fe5f 100644
--- a/src/corelibs/U2Formats/src/PDBFormat.cpp
+++ b/src/corelibs/U2Formats/src/PDBFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include <time.h>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Algorithm/MolecularSurface.h>
 
@@ -189,7 +189,7 @@ void PDBFormat::PDBParser::parseBioStruct3D(BioStruct3D& biostruct, U2OpStatus&
             ti.setError(U2::PDBFormat::tr("Line is too long"));
             return;
         }
-        currentPDBLine = QString(QByteArray::fromRawData(buf, len));
+        currentPDBLine = QString(QByteArray(buf, len));
 
         ti.setProgress(io->getProgress() * 0.8);
 
@@ -562,7 +562,6 @@ QByteArray PDBFormat::PDBParser::getNextSpecLine()
     char* buf = readBuf.data();
     bool lineOk;
     int len = io->readUntil(buf, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &lineOk);
-    QByteArray line = QByteArray::fromRawData(buf, len);
     // retrieve back ioAdapter position
     io->skip(-len);
     return readBuf;
diff --git a/src/corelibs/U2Formats/src/PDBFormat.h b/src/corelibs/U2Formats/src/PDBFormat.h
index 4caed67..ff1de46 100644
--- a/src/corelibs/U2Formats/src/PDBFormat.h
+++ b/src/corelibs/U2Formats/src/PDBFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/BioStruct3D.h>
-#include <QtCore/QSharedDataPointer>
+#include <QSharedDataPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/PDWFormat.cpp b/src/corelibs/U2Formats/src/PDWFormat.cpp
index 35bc32e..135ea4a 100644
--- a/src/corelibs/U2Formats/src/PDWFormat.cpp
+++ b/src/corelibs/U2Formats/src/PDWFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -116,7 +116,7 @@ void PDWFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& f
                 dnaSeq.info.insert(DNAInfo::LOCUS, qVariantFromValue<DNALocusInfo>(loi));
             }
 
-            seqImporter.startSequence(dbiRef, folder, dnaSeq.getName(), dnaSeq.circular, os);
+            seqImporter.startSequence(os, dbiRef, folder, dnaSeq.getName(), dnaSeq.circular);
             seqImporter.addBlock(seq.constData(), seq.length(), os);
             U2Sequence u2seq = seqImporter.finalizeSequenceAndValidate(os);
             TmpDbiObjects dbiObjects(dbiRef, os);
diff --git a/src/corelibs/U2Formats/src/PDWFormat.h b/src/corelibs/U2Formats/src/PDWFormat.h
index 851903b..76525da 100644
--- a/src/corelibs/U2Formats/src/PDWFormat.h
+++ b/src/corelibs/U2Formats/src/PDWFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/PhylipFormat.cpp b/src/corelibs/U2Formats/src/PhylipFormat.cpp
index 1ad77a7..310a851 100644
--- a/src/corelibs/U2Formats/src/PhylipFormat.cpp
+++ b/src/corelibs/U2Formats/src/PhylipFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -46,38 +46,38 @@ PhylipFormat::PhylipFormat(QObject *p)
     : DocumentFormat(p, DocumentFormatFlags(DocumentFormatFlag_SupportWriting) | DocumentFormatFlag_OnlyOneObject,
                      QStringList() << "phy" << "ph"){
     formatDescription = tr("PHYLIP multiple alignment format for phylogenetic applications.");
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 }
 
 void PhylipFormat::storeDocument(Document *d, IOAdapter *io, U2OpStatus &os) {
     CHECK_EXT(d!=NULL, os.setError(L10N::badArgument("doc")), );
     CHECK_EXT(io != NULL && io->isOpen(), os.setError(L10N::badArgument("IO adapter")), );
 
-    MAlignmentObject *obj = NULL;
+    MultipleSequenceAlignmentObject *obj = NULL;
     CHECK_EXT(d->getObjects().size() == 1, os.setError("Incorrect number of objects in document"), );
-    CHECK_EXT((obj = qobject_cast<MAlignmentObject*>(d->getObjects().first())) != NULL, os.setError("No data to write"), );
+    CHECK_EXT((obj = qobject_cast<MultipleSequenceAlignmentObject*>(d->getObjects().first())) != NULL, os.setError("No data to write"), );
 
     QList<GObject*> als;
     als << obj;
     QMap< GObjectType, QList<GObject*> > objectsMap;
-    objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT] = als;
+    objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT] = als;
     storeEntry(io, objectsMap, os);
     CHECK_EXT(!os.isCoR(), os.setError(L10N::errorWritingFile(d->getURL())), );
 }
 
-MAlignmentObject* PhylipFormat::load(IOAdapter *io, const U2DbiRef &dbiRef, const QVariantMap& fs, U2OpStatus &os) {
+MultipleSequenceAlignmentObject* PhylipFormat::load(IOAdapter *io, const U2DbiRef &dbiRef, const QVariantMap& fs, U2OpStatus &os) {
     SAFE_POINT(io != NULL, "IO adapter is NULL!", NULL);
 
-    MAlignment al = parse(io, os);
+    MultipleSequenceAlignment al = parse(io, os);
     CHECK_OP(os, NULL);
     MSAUtils::checkPackedModelSymmetry(al, os);
     CHECK_OP(os, NULL);
 
     U2AlphabetUtils::assignAlphabet(al);
-    CHECK_EXT(al.getAlphabet()!=NULL, os.setError( PhylipFormat::tr("Alphabet is unknown")), NULL);
+    CHECK_EXT(al->getAlphabet()!=NULL, os.setError( PhylipFormat::tr("Alphabet is unknown")), NULL);
 
     const QString folder = fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
     CHECK_OP(os, NULL);
     return obj;
 }
@@ -122,25 +122,25 @@ PhylipSequentialFormat::PhylipSequentialFormat(QObject *p)
 
 void PhylipSequentialFormat::storeEntry(IOAdapter *io, const QMap<GObjectType, QList<GObject *> > &objectsMap, U2OpStatus &os) {
     SAFE_POINT(io != NULL, "IO adapter is NULL!", );
-    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "PHYLIP entry storing: no alignment", );
-    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "PHYLIP entry storing: no alignment", );
+    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     SAFE_POINT(1 == als.size(), "PHYLIP entry storing: alignment objects count error", );
 
-    const MAlignmentObject* obj = dynamic_cast<MAlignmentObject*>(als.first());
+    const MultipleSequenceAlignmentObject* obj = dynamic_cast<MultipleSequenceAlignmentObject*>(als.first());
     SAFE_POINT(NULL != obj, "PHYLIP entry storing: NULL alignment object", );
 
-    const MAlignment& ma = obj->getMAlignment();
+    const MultipleSequenceAlignment msa = obj->getMultipleAlignment();
 
     //write header
-    int numberOfSpecies = ma.getNumRows();
-    int numberOfCharacters = ma.getLength();
+    int numberOfSpecies = msa->getNumRows();
+    int numberOfCharacters = msa->getLength();
     QByteArray header( (QString::number(numberOfSpecies) + " " + QString::number(numberOfCharacters)).toLatin1() + "\n");
     int len = io->writeBlock(header);
     CHECK_EXT(len == header.length(), os.setError(L10N::errorTitle()), );
 
     //write sequences
     for (int i = 0; i < numberOfSpecies; i++) {
-        QByteArray line = ma.getRow(i).getName().toLatin1();
+        QByteArray line = msa->getMsaRow(i)->getName().toLatin1();
         if (line.length() < MAX_NAME_LEN) {
             int difference = MAX_NAME_LEN - line.length();
             for (int j = 0; j < difference; j++) {
@@ -151,7 +151,7 @@ void PhylipSequentialFormat::storeEntry(IOAdapter *io, const QMap<GObjectType, Q
             line = line.left(MAX_NAME_LEN);
         }
         io->writeBlock(line);
-        QByteArray sequence = ma.getRow(i).toByteArray(numberOfCharacters, os);
+        QByteArray sequence = msa->getMsaRow(i)->toByteArray(os, numberOfCharacters);
         int blockCounter = 0;
         while ((blockCounter*SEQ_BLOCK_SIZE) <= numberOfCharacters) {
             line.clear();
@@ -188,47 +188,46 @@ FormatCheckResult PhylipSequentialFormat::checkRawData(const QByteArray &rawData
     return FormatDetection_AverageSimilarity;
 }
 
-MAlignment PhylipSequentialFormat::parse(IOAdapter *io, U2OpStatus &os) const {
-    SAFE_POINT(io != NULL, "IO adapter is NULL!", MAlignment());
+MultipleSequenceAlignment PhylipSequentialFormat::parse(IOAdapter *io, U2OpStatus &os) const {
+    SAFE_POINT(io != NULL, "IO adapter is NULL!", MultipleSequenceAlignment());
     QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     char* buff = readBuffer.data();
     QString objName = io->getURL().baseFileName();
-    MAlignment al(objName);
+    MultipleSequenceAlignment al(objName);
     bool resOk = false;
 
     // Header: "<number of species> <number of characters>"
     int len = io->readLine(buff, READ_BUFF_SIZE, &resOk);
-    CHECK_EXT(resOk, os.setError( PhylipSequentialFormat::tr("Illegal line")), MAlignment());
+    CHECK_EXT(resOk, os.setError( PhylipSequentialFormat::tr("Illegal line")), MultipleSequenceAlignment());
 
     QByteArray line = QByteArray(buff, len).trimmed();
 
     int numberOfSpecies = 0;
     int numberOfCharacters = 0;
     resOk = parseHeader(line, numberOfSpecies, numberOfCharacters);
-    CHECK_EXT(resOk, os.setError( PhylipSequentialFormat::tr("Wrong header") ), MAlignment());
+    CHECK_EXT(resOk, os.setError( PhylipSequentialFormat::tr("Wrong header") ), MultipleSequenceAlignment());
 
     for (int i = 0; i < numberOfSpecies; i++) {
-        CHECK_EXT(!io->isEof(), os.setError( PhylipSequentialFormat::tr("There is not enough data")), MAlignment());
+        CHECK_EXT(!io->isEof(), os.setError( PhylipSequentialFormat::tr("There is not enough data")), MultipleSequenceAlignment());
         // get name
         len = io->readBlock(buff, MAX_NAME_LEN);
-        QByteArray name;
-        name.append(QByteArray::fromRawData(buff, len).trimmed());
-        CHECK_EXT(len != 0, os.setError( PhylipSequentialFormat::tr("Error parsing file") ), MAlignment());
+        QByteArray name = QByteArray(buff, len).trimmed();
+        CHECK_EXT(len != 0, os.setError( PhylipSequentialFormat::tr("Error parsing file") ), MultipleSequenceAlignment());
 
         // get sequence
         QByteArray value;
         while ((value.size() != numberOfCharacters) && (!io->isEof())) {
             len = io->readUntil(buff, READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Skip, &resOk);
-            QByteArray line = QByteArray::fromRawData(buff, len);
+            QByteArray line = QByteArray(buff, len);
             removeSpaces(line);
             value.append(line);
         }
-        al.addRow(name, value, os);
+        al->addRow(name, value);
 
         os.setProgress(io->getProgress());
     }
-    CHECK_EXT(al.getLength() == numberOfCharacters, os.setError( PhylipSequentialFormat::tr("Number of characters does not correspond to the stated number") ),
-               MAlignment());
+    CHECK_EXT(al->getLength() == numberOfCharacters, os.setError( PhylipSequentialFormat::tr("Number of characters does not correspond to the stated number") ),
+               MultipleSequenceAlignment());
     return al;
 }
 
@@ -241,18 +240,18 @@ PhylipInterleavedFormat::PhylipInterleavedFormat(QObject *p)
 
 void PhylipInterleavedFormat::storeEntry(IOAdapter *io, const QMap<GObjectType, QList<GObject *> > &objectsMap, U2OpStatus &os) {
     SAFE_POINT(io != NULL, "IO adapter is NULL!", );
-    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "PHYLIP entry storing: no alignment", );
-    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "PHYLIP entry storing: no alignment", );
+    const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     SAFE_POINT(1 == als.size(), "PHYLIP entry storing: alignment objects count error", );
 
-    const MAlignmentObject* obj = dynamic_cast<MAlignmentObject*>(als.first());
+    const MultipleSequenceAlignmentObject* obj = dynamic_cast<MultipleSequenceAlignmentObject*>(als.first());
     SAFE_POINT(NULL != obj, "PHYLIP entry storing: NULL alignment object", );
 
-    const MAlignment& ma = obj->getMAlignment();
+    const MultipleSequenceAlignment msa = obj->getMultipleAlignment();
 
     //write header
-    int numberOfSpecies = ma.getNumRows();
-    int numberOfCharacters = ma.getLength();
+    int numberOfSpecies = msa->getNumRows();
+    int numberOfCharacters = msa->getLength();
     QByteArray header( (QString::number(numberOfSpecies) + " " + QString::number(numberOfCharacters)).toLatin1() + "\n");
     int len = io->writeBlock(header);
 
@@ -260,7 +259,7 @@ void PhylipInterleavedFormat::storeEntry(IOAdapter *io, const QMap<GObjectType,
 
     //write first block with names
     for (int i = 0; i < numberOfSpecies; i++) {
-        QByteArray line = ma.getRow(i).getName().toLatin1();
+        QByteArray line = msa->getMsaRow(i)->getName().toLatin1();
         if (line.length() < MAX_NAME_LEN) {
             int difference = MAX_NAME_LEN - line.length();
             for (int j = 0; j < difference; j++)
@@ -270,7 +269,7 @@ void PhylipInterleavedFormat::storeEntry(IOAdapter *io, const QMap<GObjectType,
             line = line.left(MAX_NAME_LEN);
         }
 
-        QByteArray sequence = ma.getRow(i).toByteArray(numberOfCharacters, os);
+        QByteArray sequence = msa->getMsaRow(i)->toByteArray(os, numberOfCharacters);
         line.append(sequence.left(INT_BLOCK_SIZE));
         line.append('\n');
 
@@ -283,7 +282,7 @@ void PhylipInterleavedFormat::storeEntry(IOAdapter *io, const QMap<GObjectType,
     while (blockCounter*INT_BLOCK_SIZE <= numberOfCharacters) {
         io->writeBlock("\n", 1);
         for (int i = 0; i < numberOfSpecies; i++) {
-            QByteArray sequence = ma.getRow(i).toByteArray(numberOfCharacters, os);
+            QByteArray sequence = msa->getMsaRow(i)->toByteArray(os, numberOfCharacters);
             QByteArray line;
             line.append(spacer);
             line.append(sequence.mid(blockCounter*INT_BLOCK_SIZE, INT_BLOCK_SIZE));
@@ -322,50 +321,49 @@ FormatCheckResult PhylipInterleavedFormat::checkRawData(const QByteArray &rawDat
     return FormatDetection_AverageSimilarity;
 }
 
-MAlignment PhylipInterleavedFormat::parse(IOAdapter *io, U2OpStatus &os) const {
-    SAFE_POINT(io != NULL, "IO adapter is NULL!", MAlignment());
+MultipleSequenceAlignment PhylipInterleavedFormat::parse(IOAdapter *io, U2OpStatus &os) const {
+    SAFE_POINT(io != NULL, "IO adapter is NULL!", MultipleSequenceAlignment());
 
     QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     char* buff = readBuffer.data();
     QString objName = io->getURL().baseFileName();
-    MAlignment al(objName);
+    MultipleSequenceAlignment al(objName);
 
     bool resOk = false;
 
     // First line: "<number of species> <number of characters>"
     int len = io->readLine(buff, READ_BUFF_SIZE, &resOk);
 
-    CHECK_EXT(resOk, os.setError( PhylipInterleavedFormat::tr("Illegal line") ), MAlignment());
+    CHECK_EXT(resOk, os.setError( PhylipInterleavedFormat::tr("Illegal line") ), MultipleSequenceAlignment());
 
     QByteArray line = QByteArray(buff, len).trimmed();
 
     int numberOfSpecies;
     int numberOfCharacters;
     resOk = parseHeader(line, numberOfSpecies, numberOfCharacters);
-    CHECK_EXT(resOk,  os.setError( PhylipInterleavedFormat::tr("Wrong header") ), MAlignment());
+    CHECK_EXT(resOk,  os.setError( PhylipInterleavedFormat::tr("Wrong header") ), MultipleSequenceAlignment());
 
     //the first block with the names
     for (int i = 0; i < numberOfSpecies; i++) {
-        CHECK_EXT(!io->isEof(), os.setError( PhylipSequentialFormat::tr("There is not enough data")), MAlignment());
+        CHECK_EXT(!io->isEof(), os.setError( PhylipSequentialFormat::tr("There is not enough data")), MultipleSequenceAlignment());
         len = io->readBlock(buff, MAX_NAME_LEN);
-        CHECK_EXT(len != 0, os.setError( PhylipFormat::tr("Error parsing file") ), MAlignment());
+        CHECK_EXT(len != 0, os.setError( PhylipFormat::tr("Error parsing file") ), MultipleSequenceAlignment());
 
-        QByteArray name;
-        name.append(QByteArray::fromRawData(buff, len).trimmed());
+        QByteArray name = QByteArray(buff, len).trimmed();
 
         QByteArray value;
         do {
             len = io->readUntil(buff, READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Skip, &resOk);
-            CHECK_EXT(len != 0, os.setError( PhylipSequentialFormat::tr("Error parsing file") ), MAlignment());
-            value.append(QByteArray::fromRawData(buff, len));
+            CHECK_EXT(len != 0, os.setError( PhylipSequentialFormat::tr("Error parsing file") ), MultipleSequenceAlignment());
+            value.append(QByteArray(buff, len));
         } while (!resOk);
 
         removeSpaces(value);
-        al.addRow(name, value, os);
+        al->addRow(name, value);
 
         os.setProgress(io->getProgress());
     }
-    int currentLen = al.getLength();
+    int currentLen = al->getLength();
 
     // sequence blocks
     while (!os.isCoR() && len > 0 && !io->isEof()) {
@@ -374,7 +372,7 @@ MAlignment PhylipInterleavedFormat::parse(IOAdapter *io, U2OpStatus &os) const {
             QByteArray value;
             do {
                 len = io->readUntil(buff, READ_BUFF_SIZE, LINE_BREAKS, IOAdapter::Term_Skip, &resOk);
-                value.append(QByteArray::fromRawData(buff, len));
+                value.append(QByteArray(buff, len));
             } while (!resOk && !io->isEof());
             if (value.size() == 0) {
                 if (i != 0) {
@@ -385,7 +383,7 @@ MAlignment PhylipInterleavedFormat::parse(IOAdapter *io, U2OpStatus &os) const {
 
             removeSpaces(value);
 
-            al.appendChars(i, currentLen, value.constData(), value.size());
+            al->appendChars(i, currentLen, value.constData(), value.size());
             if (blockSize == -1) {
                 blockSize = value.size();
             } else if (blockSize != value.size()) {
@@ -396,8 +394,8 @@ MAlignment PhylipInterleavedFormat::parse(IOAdapter *io, U2OpStatus &os) const {
         os.setProgress(io->getProgress());
         currentLen += blockSize;
     }
-    CHECK_EXT(al.getLength() == numberOfCharacters, os.setError( PhylipInterleavedFormat::tr("Number of characters does not correspond to the stated number") ),
-              MAlignment());
+    CHECK_EXT(al->getLength() == numberOfCharacters, os.setError( PhylipInterleavedFormat::tr("Number of characters does not correspond to the stated number") ),
+              MultipleSequenceAlignment());
     return al;
 }
 
diff --git a/src/corelibs/U2Formats/src/PhylipFormat.h b/src/corelibs/U2Formats/src/PhylipFormat.h
index 0eeae17..2fddfb9 100644
--- a/src/corelibs/U2Formats/src/PhylipFormat.h
+++ b/src/corelibs/U2Formats/src/PhylipFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 
 namespace U2 {
@@ -37,12 +37,12 @@ public:
     virtual void storeDocument(Document* d, IOAdapter* io, U2OpStatus& os);
 
 protected:
-    MAlignmentObject* load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap &fs, U2OpStatus& os);
+    MultipleSequenceAlignmentObject* load(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap &fs, U2OpStatus& os);
     bool parseHeader(QByteArray data, int &species, int &characters) const;
     void removeSpaces(QByteArray &data) const;
     virtual Document* loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, U2OpStatus& os);
 
-    virtual MAlignment parse(IOAdapter* io, U2OpStatus &os) const = 0;
+    virtual MultipleSequenceAlignment parse(IOAdapter* io, U2OpStatus &os) const = 0;
 
     QString formatName;
 };
@@ -57,7 +57,7 @@ public:
     virtual void storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &os);
     virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& = GUrl()) const;
 protected:
-    virtual MAlignment parse(IOAdapter* io, U2OpStatus &os) const;
+    virtual MultipleSequenceAlignment parse(IOAdapter* io, U2OpStatus &os) const;
 };
 
 
@@ -71,7 +71,7 @@ public:
     virtual void storeEntry(IOAdapter *io, const QMap< GObjectType, QList<GObject*> > &objectsMap, U2OpStatus &os);
     virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& = GUrl()) const;
 protected:
-    MAlignment parse(IOAdapter *io, U2OpStatus &os) const;
+    MultipleSequenceAlignment parse(IOAdapter *io, U2OpStatus &os) const;
 };
 
 } // namespace
diff --git a/src/corelibs/U2Formats/src/PlainTextFormat.cpp b/src/corelibs/U2Formats/src/PlainTextFormat.cpp
index 2cbe795..33fc203 100644
--- a/src/corelibs/U2Formats/src/PlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/PlainTextFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/PlainTextFormat.h b/src/corelibs/U2Formats/src/PlainTextFormat.h
index c9f0e91..3524cd8 100644
--- a/src/corelibs/U2Formats/src/PlainTextFormat.h
+++ b/src/corelibs/U2Formats/src/PlainTextFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp b/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
index 1c4caa3..0193b6c 100644
--- a/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
+++ b/src/corelibs/U2Formats/src/RawDNASequenceFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBuffer>
+#include <QBuffer>
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GObjectTypes.h>
@@ -110,7 +110,7 @@ static void load(IOAdapter* io, const U2DbiRef& dbiRef,  QList<GObject*>& object
         if(seq.size()>0 && isStarted == false ){
             QString name = sequenceCounter == 0 ? seqName : seqName + QString("_%1").arg(sequenceCounter);
             isStarted = true;
-            seqImporter.startSequence(dbiRef, folder, name, false, os);
+            seqImporter.startSequence(os, dbiRef, folder, name, false);
         }
         if(isStarted){
             seqImporter.addBlock(seq.data(),seq.size(),os);
diff --git a/src/corelibs/U2Formats/src/RawDNASequenceFormat.h b/src/corelibs/U2Formats/src/RawDNASequenceFormat.h
index f5525df..55ba850 100644
--- a/src/corelibs/U2Formats/src/RawDNASequenceFormat.h
+++ b/src/corelibs/U2Formats/src/RawDNASequenceFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/SAMFormat.cpp b/src/corelibs/U2Formats/src/SAMFormat.cpp
index c2192ce..1de42e1 100644
--- a/src/corelibs/U2Formats/src/SAMFormat.cpp
+++ b/src/corelibs/U2Formats/src/SAMFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/DNATranslation.h>
 #include <U2Core/AppContext.h>
@@ -40,7 +40,7 @@
 
 #include <U2Formats/BAMUtils.h>
 
-#include <QtCore/QRegExp>
+#include <QRegExp>
 
 namespace U2 {
 
@@ -128,7 +128,7 @@ FormatCheckResult SAMFormat::checkRawData( const QByteArray& rawData, const GUrl
 //
 //    for(int i = 0, coreLen = core.length(); i < coreLen; i++) {
 //        char c = core[i];
-//        if(c == MAlignment_GapChar) {
+//        if(c == MultipleAlignment::GapChar) {
 //            if(!gap) {
 //                if(i != lastCigarPos) {
 //                    cigarTokens.append(U2CigarToken(U2CigarOp_M, i - lastCigarPos));
@@ -178,8 +178,8 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
 
     //QString lockReason;
 
-    //QMap<QString, MAlignment> maMap; //file may contain multiple MA objects
-    //MAlignment defaultMA("Alignment " + io->getURL().baseFileName());
+    //QMap<QString, MultipleSequenceAlignment> maMap; //file may contain multiple MA objects
+    //MultipleSequenceAlignment defaultMA("Alignment " + io->getURL().baseFileName());
 
     //QByteArray readBuffer(READ_BUFF_SIZE, '\0');
     //char* buff  = readBuffer.data();
@@ -189,7 +189,7 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
 
     //int len = 0;
     //while(!os.isCoR() && (len = io->readLine(buff, READ_BUFF_SIZE, &lineOk)) > 0) {
-    //    QByteArray line = QByteArray::fromRawData( buff, len );
+    //    QByteArray line = QByteArray( buff, len );
 
     //    if(line.startsWith(SAM_SECTION_START)) { //Parse sections
 
@@ -198,8 +198,8 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //        if(getSectionTags(line, SECTION_SEQUENCE, tags)) { //Parse sequence section
     //            foreach(QByteArray tag, tags) {
     //                if(tag.startsWith(TAG_SEQUENCE_NAME)) { // Set alignment name
-    //                    QString maName = QByteArray::fromRawData(tag.constData() + 3, tag.length() - 3);
-    //                    MAlignment ma;
+    //                    QString maName = QByteArray(tag.constData() + 3, tag.length() - 3);
+    //                    MultipleSequenceAlignment ma;
     //                    ma.setName(maName);
     //                    maMap[maName] = ma;
     //                }
@@ -207,7 +207,7 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //        } else if(getSectionTags(line, SECTION_HEADER, tags)) { //Parse header section
     //            foreach(QByteArray tag, tags) {
     //                if(tag.startsWith(TAG_VERSION)) { //Check file format version
-    //                    QByteArray versionStr = QByteArray::fromRawData(tag.constData() + 3, tag.length() - 3);
+    //                    QByteArray versionStr = QByteArray(tag.constData() + 3, tag.length() - 3);
     //                    QList<QByteArray> version = versionStr.split('.');
     //                    if (version[0].toInt() != 1 && version[1].toInt() > 3) {
     //                        os.setError(SAMFormat::tr("Unsupported file version \"%1\"").arg(QString(versionStr)));
@@ -230,7 +230,7 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //    char lastTerminator = lineOk ? '\n' : 0;
 
     //    while(readFieldsCount < 11 && (len = io->readUntil(buff, READ_BUFF_SIZE, terminators, IOAdapter::Term_Include, &lineOk)) > 0) {
-    //        QByteArray addline = QByteArray::fromRawData( buff, len - 1 ).simplified();
+    //        QByteArray addline = QByteArray( buff, len - 1 ).simplified();
     //        fieldValues[readFieldsCount - 1].append(addline);
     //        lastTerminator = buff[len-1];
     //        if(lineOk)
@@ -246,7 +246,7 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //                if(!lineOk) {
     //                    len++;
     //                }
-    //                QByteArray addline = QByteArray::fromRawData( buff, len - 1).simplified();
+    //                QByteArray addline = QByteArray( buff, len - 1).simplified();
     //                if(merge) {
     //                    fieldValues[readFieldsCount - 1].append(addline);
     //                } else {
@@ -282,7 +282,7 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //        rname = "*";
     //    }
 
-    //    MAlignmentRow row;
+    //    MultipleSequenceAlignmentRow row;
 
     //    //short flag = fields[1].toShort();
 
@@ -306,16 +306,16 @@ Document* SAMFormat::loadDocument(IOAdapter* /* io */, const U2DbiRef& /* dbiRef
     //    os.setProgress(io->getProgress());
     //}
 
-    //foreach(MAlignment ma, maMap.values()) {
+    //foreach(MultipleSequenceAlignment ma, maMap.values()) {
     //    U2AlphabetUtils::assignAlphabet(ma);
     //    CHECK_EXT(ma.getAlphabet() != NULL, os.setError( SAMFormat::tr("Alphabet is unknown")), NULL);
-    //    objects.append(new MAlignmentObject(ma));
+    //    objects.append(new MultipleSequenceAlignmentObject(ma));
     //}
 
     //if (defaultMA.getRows().count() != 0) {
     //    U2AlphabetUtils::assignAlphabet(defaultMA);
     //    CHECK_EXT(defaultMA.getAlphabet() != NULL, os.setError( SAMFormat::tr("Alphabet is unknown")), NULL);
-    //    objects.append(new MAlignmentObject(defaultMA));
+    //    objects.append(new MultipleSequenceAlignmentObject(defaultMA));
     //}
 
     //CHECK_OP_EXT(os, qDeleteAll(objects), NULL);
@@ -343,13 +343,13 @@ void SAMFormat::storeDocument(Document *d, IOAdapter *io, U2OpStatus &os) {
 
 void SAMFormat::storeEntry(IOAdapter * /* io */, const QMap< GObjectType, QList<GObject*> > & /* objectsMap */, U2OpStatus &/*os*/) {
     FAIL("Not implemented", );
-    //SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_ALIGNMENT), "Clustal entry storing: no alignment", );
-    //const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_ALIGNMENT];
+    //SAFE_POINT(objectsMap.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT), "Clustal entry storing: no alignment", );
+    //const QList<GObject*> &als = objectsMap[GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT];
     //SAFE_POINT(als.size() > 0, "Clustal entry storing: alignment objects count error", );
 
-    //QList<const MAlignmentObject*> maList;
+    //QList<const MultipleSequenceAlignmentObject*> maList;
     //foreach(GObject *obj, als) {
-    //    const MAlignmentObject* maObj = qobject_cast<const MAlignmentObject*>(obj);
+    //    const MultipleSequenceAlignmentObject* maObj = qobject_cast<const MultipleSequenceAlignmentObject*>(obj);
     //    assert(maObj != NULL);
     //    maList.append(maObj);
     //}
@@ -364,8 +364,8 @@ void SAMFormat::storeEntry(IOAdapter * /* io */, const QMap< GObjectType, QList<
     //}
 
     ////Writing sequence section
-    //foreach(const MAlignmentObject* maObj, maList) {
-    //    const MAlignment &ma = maObj->getMAlignment();
+    //foreach(const MultipleSequenceAlignmentObject* maObj, maList) {
+    //    const MultipleSequenceAlignment &ma = maObj->getMAlignment();
     //    block.clear();
     //    block.append(SECTION_SEQUENCE).append(tab).append(TAG_SEQUENCE_NAME).append(":").append(ma.getName().replace(QRegExp("\\s|\\t"), "_"))
     //        .append(tab).append(TAG_SEQUENCE_LENGTH).append(":").append(QByteArray::number(ma.getLength())).append("\n");
@@ -375,10 +375,10 @@ void SAMFormat::storeEntry(IOAdapter * /* io */, const QMap< GObjectType, QList<
     //}
 
     ////Writing alignment section
-    //foreach(const MAlignmentObject* maObj, maList) {
-    //    const MAlignment &ma = maObj->getMAlignment();
+    //foreach(const MultipleSequenceAlignmentObject* maObj, maList) {
+    //    const MultipleSequenceAlignment &ma = maObj->getMAlignment();
     //    QByteArray rname(ma.getName().replace(QRegExp("\\s|\\t"), "_").toLatin1());
-    //    foreach(MAlignmentRow row, ma.getRows()) {
+    //    foreach(MultipleSequenceAlignmentRow row, ma.getRows()) {
     //        block.clear();
     //        //const QByteArray &core = row.getCore();
     //        QByteArray qname = QString(row.getName()).replace(QRegExp("\\s|\\t"), "_").toLatin1();
@@ -412,7 +412,7 @@ void SAMFormat::storeEntry(IOAdapter * /* io */, const QMap< GObjectType, QList<
 bool SAMFormat::getSectionTags( QByteArray &line, const QByteArray &sectionName, QList<QByteArray> &tags )
 {
     if(!line.startsWith(sectionName)) return false;
-    QByteArray tagsLine = QByteArray::fromRawData(line.constData() + 3, line.length() - 3);
+    QByteArray tagsLine = QByteArray(line.constData() + 3, line.length() - 3);
     tags = tagsLine.split(SPACE);
     tags.removeAll("");
     return true;
diff --git a/src/corelibs/U2Formats/src/SAMFormat.h b/src/corelibs/U2Formats/src/SAMFormat.h
index 49072a7..0c108f1 100644
--- a/src/corelibs/U2Formats/src/SAMFormat.h
+++ b/src/corelibs/U2Formats/src/SAMFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/SCFFormat.cpp b/src/corelibs/U2Formats/src/SCFFormat.cpp
index 9f3ef9d..e7b48cf 100644
--- a/src/corelibs/U2Formats/src/SCFFormat.cpp
+++ b/src/corelibs/U2Formats/src/SCFFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QVarLengthArray>
+#include <QFile>
+#include <QVarLengthArray>
 
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNAChromatogramObject.h>
@@ -524,19 +524,21 @@ Document* SCFFormat::parseSCF(const U2DbiRef& dbiRef, IOAdapter* io, const QVari
         return NULL;
     }
 
-    QList<GObject*> objects;
-    const QString folder = fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
     const QString seqObjName = dna.getName().isEmpty() ? "Sequence" : dna.getName() + " sequence";
+
     QVariantMap hints;
     hints.insert(DBI_FOLDER_HINT, fs.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER));
+
     U2SequenceObject* seqObj = DocumentFormatUtils::addSequenceObject(dbiRef, seqObjName, dna.constSequence(), dna.circular, hints, os);
     CHECK_OP(os, NULL);
     SAFE_POINT(seqObj != NULL, "DocumentFormatUtils::addSequenceObject returned NULL but didn't set error", NULL);
+    seqObj->setQuality(dna.quality);
 
     const QString chromaObjName = dna.getName().isEmpty() ? "Chromatogram" : dna.getName() + " chromatogram";
     DNAChromatogramObject* chromObj = DNAChromatogramObject::createInstance(cd, chromaObjName, dbiRef, os, hints);
     CHECK_OP(os, NULL);
 
+    QList<GObject*> objects;
     objects.append(chromObj);
     objects.append(seqObj);
 
@@ -1212,6 +1214,8 @@ bool SCFFormat::loadSCFObjects( IOAdapter* io, DNASequence& dna, DNAChromatogram
         sampleName = url.baseFileName();
     }
 
+    cd.name = sampleName + " chromatogram";
+
     dna.setName(sampleName);
     dna.seq = sequence;
     dna.info.insert(DNAInfo::COMMENT, vals);
diff --git a/src/corelibs/U2Formats/src/SCFFormat.h b/src/corelibs/U2Formats/src/SCFFormat.h
index 5807754..4602165 100644
--- a/src/corelibs/U2Formats/src/SCFFormat.h
+++ b/src/corelibs/U2Formats/src/SCFFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/SNPDatabaseUtils.cpp b/src/corelibs/U2Formats/src/SNPDatabaseUtils.cpp
index 67973ac..5b38cef 100644
--- a/src/corelibs/U2Formats/src/SNPDatabaseUtils.cpp
+++ b/src/corelibs/U2Formats/src/SNPDatabaseUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Formats/src/SNPDatabaseUtils.h b/src/corelibs/U2Formats/src/SNPDatabaseUtils.h
index 8944626..e05dda1 100644
--- a/src/corelibs/U2Formats/src/SNPDatabaseUtils.h
+++ b/src/corelibs/U2Formats/src/SNPDatabaseUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.cpp b/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.cpp
index db30b04..b780779 100644
--- a/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.cpp
+++ b/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.h b/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.h
index 360193b..0480cd6 100644
--- a/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.h
+++ b/src/corelibs/U2Formats/src/SimpleSNPVariationFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/StdResidueDictionary.cpp b/src/corelibs/U2Formats/src/StdResidueDictionary.cpp
index ffac90d..fc41e6f 100644
--- a/src/corelibs/U2Formats/src/StdResidueDictionary.cpp
+++ b/src/corelibs/U2Formats/src/StdResidueDictionary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
diff --git a/src/corelibs/U2Formats/src/StdResidueDictionary.h b/src/corelibs/U2Formats/src/StdResidueDictionary.h
index 4e529a0..5900253 100644
--- a/src/corelibs/U2Formats/src/StdResidueDictionary.h
+++ b/src/corelibs/U2Formats/src/StdResidueDictionary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_STD_RESIDUE_DICTIONARY_H_
 #define _U2_STD_RESIDUE_DICTIONARY_H_
 
-#include <QtCore/QByteArray>
-#include <QtCore/QHash>
-#include <QtCore/QMutex>
+#include <QByteArray>
+#include <QHash>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/StockholmFormat.cpp b/src/corelibs/U2Formats/src/StockholmFormat.cpp
index e378843..10aa0b5 100644
--- a/src/corelibs/U2Formats/src/StockholmFormat.cpp
+++ b/src/corelibs/U2Formats/src/StockholmFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
-#include <QtCore/QTextStream>
+#include <QFileInfo>
+#include <QTextStream>
 
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentInfo.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentWalker.h>
+#include <U2Core/MultipleAlignmentInfo.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentWalker.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2DbiUtils.h>
@@ -414,12 +414,12 @@ static bool blockEnded( IOAdapter* io ) {
     return 1 < nl_count;
 }
 
-static bool nameWasBefore( const MAlignment& msa, const QString& name ) {
-    int n = msa.getNumRows();
+static bool nameWasBefore( const MultipleSequenceAlignment& msa, const QString& name ) {
+    int n = msa->getNumRows();
     bool ret = false;
 
     for( int i = 0; i < n; ++i ) {
-        if ( name == msa.getRow(i).getName()) {
+        if ( name == msa->getMsaRow(i)->getName()) {
             ret = true;
             break;
         }
@@ -437,7 +437,7 @@ static void changeGaps( QByteArray& seq ) {
 }
 
 // returns true if operation was not canceled
-static bool loadOneMsa( IOAdapter* io, U2OpStatus& tsi, MAlignment& msa, AnnotationBank& ann_bank ) {
+static bool loadOneMsa( IOAdapter* io, U2OpStatus& tsi, MultipleSequenceAlignment& msa, AnnotationBank& ann_bank ) {
     assert( NULL != io );
 
     QByteArray buf( BUF_SZ, TERM_SYM );
@@ -485,8 +485,8 @@ static bool loadOneMsa( IOAdapter* io, U2OpStatus& tsi, MAlignment& msa, Annotat
                 if ( nameWasBefore( msa, QString( name.data() ) ) ) {
                     throw StockholmFormat::BadFileData( StockholmFormat::tr( "invalid file: equal sequence names in one block" ) );
                 }
-                U2OpStatus2Log os;
-                msa.addRow(name.data(), seq, os);
+
+                msa->addRow(name.data(), seq);
                 if (blockSize == -1) {
                     blockSize = seq.size();
                 } else if (blockSize != seq.size() ) {
@@ -494,11 +494,10 @@ static bool loadOneMsa( IOAdapter* io, U2OpStatus& tsi, MAlignment& msa, Annotat
                 }
             }
             else {
-                const MAlignmentRow& row = msa.getRow(seq_ind);
-                if( name != row.getName()) {
+                if( name != msa->getMsaRow(seq_ind)->getName()) {
                     throw StockholmFormat::BadFileData( StockholmFormat::tr( "invalid file: sequence names are not equal in blocks" ) );
                 }
-                msa.appendChars(seq_ind, currentLen, seq.constData(), seq.size());
+                msa->appendChars(seq_ind, currentLen, seq.constData(), seq.size());
                 if (blockSize == -1) {
                     blockSize = seq.size();
                 } else if (blockSize != seq.size() ) {
@@ -515,62 +514,62 @@ static bool loadOneMsa( IOAdapter* io, U2OpStatus& tsi, MAlignment& msa, Annotat
     readEofMsa( io );
     skipBlankLines( io );
 
-    if ( msa.getNumRows() == 0 ) {
+    if ( msa->getNumRows() == 0 ) {
         throw StockholmFormat::BadFileData( StockholmFormat::tr( "invalid file: empty sequence alignment" ) );
     }
     U2AlphabetUtils::assignAlphabet(msa);
-    if (msa.getAlphabet() == NULL) {
+    if (msa->getAlphabet() == NULL) {
         throw StockholmFormat::BadFileData( StockholmFormat::tr( "invalid file: unknown alphabet" ) );
     }
     return true;
 }
 
-static void setMsaInfoCutoffs( QVariantMap& info, const QString& string, MAlignmentInfo::Cutoffs cof1,
-                               MAlignmentInfo::Cutoffs cof2 ) {
+static void setMsaInfoCutoffs( QVariantMap& info, const QString& string, MultipleAlignmentInfo::Cutoffs cof1,
+                               MultipleAlignmentInfo::Cutoffs cof2 ) {
     QByteArray str = string.toLatin1();
     QTextStream txtStream( str );
     float val1 = .0f;
     float val2 = .0f;
     txtStream >> val1 >> val2;
-    MAlignmentInfo::setCutoff( info, cof1, val1 );
-    MAlignmentInfo::setCutoff( info, cof2, val2 );
+    MultipleAlignmentInfo::setCutoff( info, cof1, val1 );
+    MultipleAlignmentInfo::setCutoff( info, cof2, val2 );
 }
 
-static void setMsaInfo( const QHash< QString, QString>& annMap, MAlignment& ma ) {
-    QVariantMap info = ma.getInfo();
+static void setMsaInfo( const QHash< QString, QString>& annMap, MultipleSequenceAlignment& ma ) {
+    QVariantMap info = ma->getInfo();
 
     if (annMap.contains( StockholmFormat::FILE_ANNOTATION_AC ) ) {
-        MAlignmentInfo::setAccession( info, annMap[StockholmFormat::FILE_ANNOTATION_AC] );
+        MultipleAlignmentInfo::setAccession( info, annMap[StockholmFormat::FILE_ANNOTATION_AC] );
     }
     if (annMap.contains( StockholmFormat::FILE_ANNOTATION_DE ) ) {
-        MAlignmentInfo::setDescription( info, annMap[StockholmFormat::FILE_ANNOTATION_DE] );
+        MultipleAlignmentInfo::setDescription( info, annMap[StockholmFormat::FILE_ANNOTATION_DE] );
     }
     if (annMap.contains( StockholmFormat::COLUMN_ANNOTATION_SS_CONS ) ) {
-        MAlignmentInfo::setSSConsensus( info, annMap[StockholmFormat::COLUMN_ANNOTATION_SS_CONS] );
+        MultipleAlignmentInfo::setSSConsensus( info, annMap[StockholmFormat::COLUMN_ANNOTATION_SS_CONS] );
     }
     if (annMap.contains( StockholmFormat::COLUMN_ANNOTATION_RF ) ) {
-        MAlignmentInfo::setReferenceLine( info, annMap[StockholmFormat::COLUMN_ANNOTATION_RF] );
+        MultipleAlignmentInfo::setReferenceLine( info, annMap[StockholmFormat::COLUMN_ANNOTATION_RF] );
     }
     if (annMap.contains( StockholmFormat::FILE_ANNOTATION_GA ) ) {
-        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_GA], MAlignmentInfo::CUTOFF_GA1,
-                                                                              MAlignmentInfo::CUTOFF_GA2 );
+        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_GA], MultipleAlignmentInfo::CUTOFF_GA1,
+                                                                              MultipleAlignmentInfo::CUTOFF_GA2 );
     }
     if (annMap.contains( StockholmFormat::FILE_ANNOTATION_NC ) ) {
-        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_NC], MAlignmentInfo::CUTOFF_NC1,
-                                                                              MAlignmentInfo::CUTOFF_NC2 );
+        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_NC], MultipleAlignmentInfo::CUTOFF_NC1,
+                                                                              MultipleAlignmentInfo::CUTOFF_NC2 );
     }
     if (annMap.contains( StockholmFormat::FILE_ANNOTATION_TC ) ) {
-        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_TC], MAlignmentInfo::CUTOFF_TC1,
-                                                                              MAlignmentInfo::CUTOFF_TC2 );
+        setMsaInfoCutoffs( info, annMap[StockholmFormat::FILE_ANNOTATION_TC], MultipleAlignmentInfo::CUTOFF_TC1,
+                                                                              MultipleAlignmentInfo::CUTOFF_TC2 );
     }
-    ma.setInfo(info);
+    ma->setInfo(info);
 }
 
 static void load( IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& l, const QVariantMap& fs, U2OpStatus& tsi, bool& uni_file) {
     QStringList names_list;
     QString filename = io->getURL().baseFileName();
     while( !io->isEof() ) {
-        MAlignment msa;
+        MultipleSequenceAlignment msa;
         AnnotationBank ann_bank;
         QString name;
         bool notCanceled = true;
@@ -586,27 +585,27 @@ static void load( IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& l, con
         name = ( QString::null == name || names_list.contains( name ) )?
             filename + "_" + QString::number( l.size() ): name;
         names_list.append( name );
-        msa.setName( name );
+        msa->setName( name );
 
         annMap = getAnnotationMap( ann_bank );
         setMsaInfo( annMap, msa );
 
         U2OpStatus2Log os;
         const QString folder = fs.value(DocumentFormat::DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
-        MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, msa, os);
+        MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, msa, os);
         CHECK_OP(os, );
         obj->setIndexInfo(annMap);
         l.append( obj );
     }
 }
 
-static int getMaxNameLen( const MAlignment& msa ) {
-    assert( msa.getNumRows() != 0 );
-    int sz = msa.getNumRows();
-    int max_len = msa.getRow(0).getName().size();
+static int getMaxNameLen( const MultipleSequenceAlignment& msa ) {
+    assert( msa->getNumRows() != 0 );
+    int sz = msa->getNumRows();
+    int max_len = msa->getMsaRow(0)->getName().size();
 
     for( int i = 0; i < sz; ++i ) {
-        int name_len =  msa.getRow(i).getName().size();
+        int name_len =  msa->getMsaRow(i)->getName().size();
         max_len = ( max_len < name_len )? name_len: max_len;
     }
     return max_len;
@@ -621,9 +620,9 @@ static QByteArray getNameSeqGap( int diff ) {
     return ret;
 }
 
-static void save( IOAdapter* io, const MAlignment& msa, QString name, U2OpStatus &os ) {
+static void save( IOAdapter* io, const MultipleSequenceAlignment& msa, QString name, U2OpStatus &os ) {
     assert( NULL != io );
-    assert( msa.getNumRows() );
+    assert( msa->getNumRows() );
     int ret = 0;
 
     QByteArray header( HEADER );
@@ -638,9 +637,9 @@ static void save( IOAdapter* io, const MAlignment& msa, QString name, U2OpStatus
 
     //write sequences
     int name_max_len = getMaxNameLen( msa );
-    int seq_len = msa.getLength();
+    int seq_len = msa->getLength();
     int cur_seq_pos = 0;
-    MAlignmentWalker walker(msa);
+    MultipleSequenceAlignmentWalker walker(msa);
     CHECK_OP(os, );
     while ( 0 < seq_len ) {
         int block_len = ( WRITE_BLOCK_LENGTH >= seq_len )? seq_len: WRITE_BLOCK_LENGTH;
@@ -650,12 +649,13 @@ static void save( IOAdapter* io, const MAlignment& msa, QString name, U2OpStatus
         //write block
         U2OpStatus2Log os;
         QList<QByteArray>::ConstIterator si = seqs.constBegin();
-        QList<MAlignmentRow>::ConstIterator ri = msa.getRows().constBegin();
+        const QList<MultipleSequenceAlignmentRow> rows = msa->getMsaRows();
+        QList<MultipleSequenceAlignmentRow>::ConstIterator ri = rows.constBegin();
         for (; si != seqs.constEnd(); si++, ri++) {
-            const MAlignmentRow &row = *ri;
-            QByteArray name = row.getName().toLatin1();
+            const MultipleSequenceAlignmentRow &row = *ri;
+            QByteArray name = row->getName().toLatin1();
             TextUtils::replace(name.data(), name.length(), TextUtils::WHITES, '_');
-            name += getNameSeqGap( name_max_len - row.getName().size() );
+            name += getNameSeqGap( name_max_len - row->getName().size() );
             ret = io->writeBlock( name );
             checkValThrowException<int>( true, name.size(), ret, StockholmFormat::WriteError(io->getURL()) );
             QByteArray seq = *si + NEW_LINE;
@@ -676,7 +676,7 @@ namespace U2 {
 StockholmFormat::StockholmFormat( QObject *obj ) : DocumentFormat( obj , DocumentFormatFlags(DocumentFormatFlag_SupportWriting) | DocumentFormatFlag_OnlyOneObject | DocumentFormatFlag_LockedIfNotCreatedByUGENE, QStringList() << "sto") {
     format_name = tr( "Stockholm" );
     formatDescription = tr("A multiple sequence alignments file format");
-    supportedObjectTypes+=GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes+=GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 }
 
 
@@ -705,9 +705,9 @@ Document* StockholmFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, c
 void StockholmFormat::storeDocument(Document* doc, IOAdapter* io, U2OpStatus& os) {
     try {
         foreach( GObject* p_obj, doc->getObjects() ) {
-            const MAlignmentObject* aln_obj = qobject_cast<const MAlignmentObject*>( p_obj );
+            const MultipleSequenceAlignmentObject* aln_obj = qobject_cast<const MultipleSequenceAlignmentObject*>( p_obj );
             assert( NULL != aln_obj );
-            save( io, aln_obj->getMAlignment(), aln_obj->getGObjectName(), os );
+            save( io, aln_obj->getMultipleAlignment(), aln_obj->getGObjectName(), os );
             CHECK_OP(os, );
         }
     } catch( const StockholmBaseException& ex ) {
@@ -725,7 +725,7 @@ FormatCheckResult StockholmFormat::checkRawData(const QByteArray& data, const GU
 bool StockholmFormat::isObjectOpSupported( const Document *doc, DocObjectOp op, GObjectType t ) const {
     Q_UNUSED( op ); Q_UNUSED( doc );
     assert( NULL != doc );
-    if ( GObjectTypes::MULTIPLE_ALIGNMENT != t  ) {
+    if ( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT != t  ) {
         return false;
     }
     /*if (op == DocumentFormat::DocObjectOp_Add) {
diff --git a/src/corelibs/U2Formats/src/StockholmFormat.h b/src/corelibs/U2Formats/src/StockholmFormat.h
index 6ed63e2..f0fb1cd 100644
--- a/src/corelibs/U2Formats/src/StockholmFormat.h
+++ b/src/corelibs/U2Formats/src/StockholmFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_STOCKHOLM_FORMAT_H_
 #define _U2_STOCKHOLM_FORMAT_H_
 
-#include <QtCore/QByteArray>
+#include <QByteArray>
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
diff --git a/src/corelibs/U2Formats/src/StreamSequenceReader.cpp b/src/corelibs/U2Formats/src/StreamSequenceReader.cpp
index bc56dc9..823f020 100644
--- a/src/corelibs/U2Formats/src/StreamSequenceReader.cpp
+++ b/src/corelibs/U2Formats/src/StreamSequenceReader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/StreamSequenceReader.h b/src/corelibs/U2Formats/src/StreamSequenceReader.h
index 9008b37..548b4e7 100644
--- a/src/corelibs/U2Formats/src/StreamSequenceReader.h
+++ b/src/corelibs/U2Formats/src/StreamSequenceReader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_STREAM_SEQUENCE_READER_H_
 #define _U2_STREAM_SEQUENCE_READER_H_
 
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QList>
+#include <QString>
 
 #include <U2Core/GUrl.h>
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Formats/src/StreamSequenceWriter.cpp b/src/corelibs/U2Formats/src/StreamSequenceWriter.cpp
index 68413e6..4a24a02 100644
--- a/src/corelibs/U2Formats/src/StreamSequenceWriter.cpp
+++ b/src/corelibs/U2Formats/src/StreamSequenceWriter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/StreamSequenceWriter.h b/src/corelibs/U2Formats/src/StreamSequenceWriter.h
index c6e39a0..390cabb 100644
--- a/src/corelibs/U2Formats/src/StreamSequenceWriter.h
+++ b/src/corelibs/U2Formats/src/StreamSequenceWriter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_STREAM_SEQUENCE_WRITER_H_
 #define _U2_STREAM_SEQUENCE_WRITER_H_
 
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QList>
+#include <QString>
 
 #include <U2Core/GUrl.h>
 #include <U2Core/DNASequenceObject.h>
diff --git a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
index e490148..fb06c5e 100644
--- a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
+++ b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBuffer>
+#include <QBuffer>
 
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNAInfo.h>
diff --git a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.h b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.h
index 7c9e360..a7409e1 100644
--- a/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.h
+++ b/src/corelibs/U2Formats/src/SwissProtPlainTextFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/VCF4VariationFormat.cpp b/src/corelibs/U2Formats/src/VCF4VariationFormat.cpp
index 5209615..a54aeda 100644
--- a/src/corelibs/U2Formats/src/VCF4VariationFormat.cpp
+++ b/src/corelibs/U2Formats/src/VCF4VariationFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/VCF4VariationFormat.h b/src/corelibs/U2Formats/src/VCF4VariationFormat.h
index f551bde..1ac09e8 100644
--- a/src/corelibs/U2Formats/src/VCF4VariationFormat.h
+++ b/src/corelibs/U2Formats/src/VCF4VariationFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
index f28d297..56151e6 100644
--- a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
+++ b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -179,7 +179,7 @@ QList<GenbankPlainTextFormat::StrPair> VectorNtiSequenceFormat::processCommentKe
 }
 
 void VectorNtiSequenceFormat::createCommentAnnotation(const QStringList &comments, int sequenceLength, AnnotationTableObject *annTable) const {
-    const QStrStrMap parsedComments = parseComments(comments);
+    const StrStrMap parsedComments = parseComments(comments);
     CHECK(!parsedComments.isEmpty(), );
 
     SharedAnnotationData f(new AnnotationData);
@@ -217,9 +217,9 @@ QString VectorNtiSequenceFormat::getFeatureTypeString(U2FeatureType featureType,
     }
 }
 
-QStrStrMap VectorNtiSequenceFormat::parseComments(const QStringList &comments) const {
+StrStrMap VectorNtiSequenceFormat::parseComments(const QStringList &comments) const {
     // TODO: not all comment keys are precessed
-    QStrStrMap result;
+    StrStrMap result;
     int commentsCounter = 1;
 
     foreach (const QString &comment, comments) {
@@ -390,7 +390,7 @@ void VectorNtiSequenceFormat::prepareQualifiersToWrite(QMap<AnnotationGroup *, Q
 
 const QString VectorNtiSequenceFormat::vntiCreationDateKey = "VNTDATE";
 const QString VectorNtiSequenceFormat::vntiModificationDateKey = "VNTDBDATE";
-const QStrStrMap VectorNtiSequenceFormat::vntiMetaKeys = VectorNtiSequenceFormat::initVntiMetaKeys();
+const StrStrMap VectorNtiSequenceFormat::vntiMetaKeys = VectorNtiSequenceFormat::initVntiMetaKeys();
 const QMap<U2FeatureType, VectorNtiSequenceFormat::VntiDnaFeatureTypes> VectorNtiSequenceFormat::dnaFeatureTypesMap
     = VectorNtiSequenceFormat::initDnaFeatureTypesMap();
 const QMap<U2FeatureType, VectorNtiSequenceFormat::VntiProteinFeatureTypes> VectorNtiSequenceFormat::proteinFeatureTypesMap
@@ -404,8 +404,8 @@ const QString VectorNtiSequenceFormat::DEFAULT_FEATURE_TYPE_NAME
 const QString VectorNtiSequenceFormat::QUALIFIER_LABEL = "label";
 const QString VectorNtiSequenceFormat::VNTIFKEY_QUALIFIER_NAME = "vntifkey";
 
-QStrStrMap VectorNtiSequenceFormat::initVntiMetaKeys() {
-    QStrStrMap vntiMetaKeys;
+StrStrMap VectorNtiSequenceFormat::initVntiMetaKeys() {
+    StrStrMap vntiMetaKeys;
     vntiMetaKeys["LSOWNER"]                 = "Owner";
     vntiMetaKeys["VNTNAME"]                 = "Object name";
     vntiMetaKeys["VNTAUTHORNAME"]           = "Author name";
diff --git a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.h b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.h
index 10c3cd0..7b94a7f 100644
--- a/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.h
+++ b/src/corelibs/U2Formats/src/VectorNtiSequenceFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@ private:
     U2Qualifier createQualifier(const QString &qualifierName, const QString &qualifierValue, bool containsDoubleQuotes) const;
     U2FeatureType getFeatureType(const QString &typeString) const;
     QString getFeatureTypeString(U2FeatureType featureType, bool isAmino) const;
-    QStrStrMap parseComments(const QStringList &comments) const;
+    StrStrMap parseComments(const QStringList &comments) const;
     static QString parseDate(int date);
     QList<SharedAnnotationData> prepareAnnotations(const QList<GObject *> &tablesList, bool isAmino, U2OpStatus &os) const;
     void writeAnnotations(IOAdapter *io, const QList<GObject *> &aos, bool isAmino, U2OpStatus &os);
@@ -238,7 +238,7 @@ private:
 
     static const QString vntiCreationDateKey;
     static const QString vntiModificationDateKey;
-    static const QStrStrMap vntiMetaKeys;                                               // keys in the comment section
+    static const StrStrMap vntiMetaKeys;                                               // keys in the comment section
     static const QMap<U2FeatureType, VntiDnaFeatureTypes> dnaFeatureTypesMap;           // UGENE feature type - vntifkey qualifier value for DNA sequences
     static const QMap<U2FeatureType, VntiProteinFeatureTypes> proteinFeatureTypesMap;   // UGENE feature type - vntifkey qualifier value for protein sequences
     static const QMap<VntiDnaFeatureTypes, QString> dnaFeatureType2StringMap;           // vntifkey qualifier value - feature type name in vnti file for DNA files
@@ -247,7 +247,7 @@ private:
     static const QString QUALIFIER_LABEL;
     static const QString VNTIFKEY_QUALIFIER_NAME;
 
-    static QStrStrMap initVntiMetaKeys();
+    static StrStrMap initVntiMetaKeys();
     static QMap<U2FeatureType, VntiDnaFeatureTypes> initDnaFeatureTypesMap();
     static QMap<U2FeatureType, VntiProteinFeatureTypes> initProteinFeatureTypesMap();
     static QMap<VntiDnaFeatureTypes, QString> initDnaFeatureType2StringMap();
diff --git a/src/corelibs/U2Formats/src/ace/AceFormat.cpp b/src/corelibs/U2Formats/src/ace/AceFormat.cpp
index 678da43..7eadc09 100644
--- a/src/corelibs/U2Formats/src/ace/AceFormat.cpp
+++ b/src/corelibs/U2Formats/src/ace/AceFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -49,7 +49,7 @@ const QString ACEFormat::BQ = "BQ";
 ACEFormat::ACEFormat(QObject* p) : DocumentFormat(p, DocumentFormatFlags(0), QStringList("ace")) {
     formatName = tr("ACE");
     formatDescription = tr("ACE is a format used for storing information about genomic confgurations");
-    supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 }
 
 static int modifyLine(QString &line, int pos){
@@ -246,7 +246,7 @@ static inline void parseConsensus(U2::IOAdapter *io, U2OpStatus &ti, char* buff,
         ti.setProgress(io->getProgress());
     } while (!ti.isCoR() && !ok);
     len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
-    line = QString(QByteArray::fromRawData(buff, len)).trimmed();
+    line = QString(QByteArray(buff, len)).trimmed();
     if(!line.startsWith("BQ")){
         ti.setError(ACEFormat::tr("BQ keyword hasn't been found"));
         return ;
@@ -256,7 +256,7 @@ static inline void parseConsensus(U2::IOAdapter *io, U2OpStatus &ti, char* buff,
         ti.setError(ACEFormat::tr("Bad consensus data"));
         return ;
     }
-    consensus.replace('*',MAlignment_GapChar);
+    consensus.replace('*',U2Msa::GAP_CHAR);
 }
 
 static inline void parseAFTag(U2::IOAdapter *io, U2OpStatus &ti, char* buff, int count, QMap< QString, int> &posMap, QMap< QString, bool> &complMap, QSet<QString> &names){
@@ -273,7 +273,7 @@ static inline void parseAFTag(U2::IOAdapter *io, U2OpStatus &ti, char* buff, int
             if(ti.hasError()){
                 return;
             }
-            readLine = QString(QByteArray::fromRawData(buff, len)).trimmed();
+            readLine = QString(QByteArray(buff, len)).trimmed();
         }while (!readLine.startsWith("AF"));
 
         name = getName(readLine);
@@ -323,7 +323,7 @@ static inline void parseRDandQATag(U2::IOAdapter *io, U2OpStatus &ti, char* buff
         if(ti.hasError()){
             return;
         }
-        line = QString(QByteArray::fromRawData(buff, len)).trimmed();
+        line = QString(QByteArray(buff, len)).trimmed();
     }while (!line.startsWith("RD"));
 
     name = getName(line);
@@ -345,7 +345,7 @@ static inline void parseRDandQATag(U2::IOAdapter *io, U2OpStatus &ti, char* buff
         ti.setProgress(io->getProgress());
     } while (!ti.isCoR() && !ok);
     len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
-    line = QString(QByteArray::fromRawData(buff, len)).trimmed();
+    line = QString(QByteArray(buff, len)).trimmed();
     if(!line.startsWith("QA")){
         ti.setError(ACEFormat::tr("QA keyword hasn't been found"));
         return ;
@@ -384,9 +384,9 @@ static inline void parseRDandQATag(U2::IOAdapter *io, U2OpStatus &ti, char* buff
         names.remove(name);
     }
 
-    sequence.replace('*',MAlignment_GapChar);
-    sequence.replace('N',MAlignment_GapChar);
-    sequence.replace('X',MAlignment_GapChar);
+    sequence.replace('*',U2Msa::GAP_CHAR);
+    sequence.replace('N',U2Msa::GAP_CHAR);
+    sequence.replace('X',U2Msa::GAP_CHAR);
 }
 
 /**
@@ -418,7 +418,7 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
     if(os.hasError()){
         return;
     }
-    QString headerLine = QString(QByteArray::fromRawData(buff, len)).trimmed();
+    QString headerLine = QString(QByteArray(buff, len)).trimmed();
 
     if (!headerLine.startsWith(AS)) {
         os.setError(ACEFormat::tr("First line is not an ace header"));
@@ -438,7 +438,7 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
             if(os.hasError()){
                 return;
             }
-            headerLine = QString(QByteArray::fromRawData(buff, len)).trimmed();
+            headerLine = QString(QByteArray(buff, len)).trimmed();
             if (!headerLine.startsWith(CO)) {
                 os.setError(ACEFormat::tr("Must be CO keyword"));
                 return ;
@@ -449,7 +449,7 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
                 if(os.hasError()){
                     return;
                 }
-                headerLine = QString(QByteArray::fromRawData(buff, len)).trimmed();
+                headerLine = QString(QByteArray(buff, len)).trimmed();
             }while (!headerLine.startsWith(CO));
         }
         count = readsCount(headerLine);
@@ -467,9 +467,8 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
             return;
         }
 
-        MAlignment al(consName);
-        al.addRow(consName, consensus, os);
-        CHECK_OP(os, );
+        MultipleSequenceAlignment al(consName);
+        al->addRow(consName, consensus);
 
         //AF
         QMap< QString, int> posMap;
@@ -478,7 +477,7 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
 
         int smallestOffset = getSmallestOffset(posMap);
         if (smallestOffset < 0) {
-            al.insertGaps(0, 0, qAbs(smallestOffset), os);
+            al->insertGaps(0, 0, qAbs(smallestOffset), os);
             CHECK_OP(os, );
         }
 
@@ -498,20 +497,19 @@ void ACEFormat::load(IOAdapter *io, const U2DbiRef& dbiRef, QList<GObject*> &obj
             }
 
             QByteArray offsetGaps;
-            offsetGaps.fill(MAlignment_GapChar, pos);
+            offsetGaps.fill(U2Msa::GAP_CHAR, pos);
             sequence.prepend(offsetGaps);
-            al.addRow(rowName, sequence, os);
-            CHECK_OP(os, );
+            al->addRow(rowName, sequence);
 
             count--;
             os.setProgress(io->getProgress());
         }
         U2AlphabetUtils::assignAlphabet(al);
-        CHECK_EXT(al.getAlphabet() != NULL, ACEFormat::tr("Alphabet unknown"), );
+        CHECK_EXT(al->getAlphabet() != NULL, ACEFormat::tr("Alphabet unknown"), );
 
         const QString folder = hints.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
 
-        MAlignmentObject* obj = MAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+        MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
         CHECK_OP(os, );
         objects.append(obj);
     }
diff --git a/src/corelibs/U2Formats/src/ace/AceFormat.h b/src/corelibs/U2Formats/src/ace/AceFormat.h
index e6c0768..787e4d7 100644
--- a/src/corelibs/U2Formats/src/ace/AceFormat.h
+++ b/src/corelibs/U2Formats/src/ace/AceFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp b/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
index e4da2bb..07dc9ac 100644
--- a/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
+++ b/src/corelibs/U2Formats/src/ace/AceImportUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -131,7 +131,7 @@ AceReader::AceReader(IOAdapter& _io, U2OpStatus &_os) :
 
     skipBreaks(io, buff, &len);
     CHECK_OP((*os), );
-    QByteArray headerLine = (QByteArray::fromRawData(buff, len)).trimmed();
+    QByteArray headerLine = (QByteArray(buff, len)).trimmed();
     CHECK_EXT(headerLine.startsWith(AS), os->setError(DocumentFormatUtils::tr("First line is not an ace header")), );
 
     contigsCount = getContigCount(headerLine);
@@ -157,7 +157,7 @@ Assembly AceReader::getAssembly() {
     do {
         skipBreaks(io, buff, &len);
         CHECK_OP((*os), result);
-        headerLine = (QByteArray::fromRawData(buff, len)).trimmed();
+        headerLine = (QByteArray(buff, len)).trimmed();
     } while (!headerLine.startsWith(CO));
 
     readsCount = getReadsCount(headerLine);
@@ -275,7 +275,7 @@ void AceReader::parseConsensus(IOAdapter *io, char *buff, QSet<QByteArray> &name
     } while (!ok);
 
     len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
-    line = (QByteArray::fromRawData(buff, len)).trimmed();
+    line = (QByteArray(buff, len)).trimmed();
     CHECK_EXT(line.startsWith(BQ), os->setError(DocumentFormatUtils::tr("BQ keyword hasn't been found")), );
 
     formatSequence(consensus.data);
@@ -327,14 +327,14 @@ void AceReader::parseAfTag(U2::IOAdapter *io, char *buff, int count, QMap<QByteA
     do {    // skip unused BQ part
         skipBreaks(io, buff, &len);
         CHECK_OP((*os), );
-        readLine = (QByteArray::fromRawData(buff, len)).trimmed();
+        readLine = (QByteArray(buff, len)).trimmed();
     } while (!readLine.startsWith(AF));
 
     do {    // Read all AF entries
         afBlock += readLine + " ";
         skipBreaks(io, buff, &len);
         CHECK_OP((*os), );
-        readLine = (QByteArray::fromRawData(buff, len)).trimmed();
+        readLine = (QByteArray(buff, len)).trimmed();
     } while (!readLine.startsWith(BS));
     afBlock = afBlock.simplified();
 
@@ -456,7 +456,7 @@ void AceReader::parseRdAndQaTag(U2::IOAdapter *io, char *buff, QSet<QByteArray>
     do {    // skip unused BS part
         skipBreaks(io, buff, &len);
         CHECK_OP((*os), );
-        rdBlock = (QByteArray::fromRawData(buff, len)).trimmed();
+        rdBlock = (QByteArray(buff, len)).trimmed();
     } while (!rdBlock.startsWith(RD));
     CHECK_EXT(rdBlock.startsWith(RD), os->setError(DocumentFormatUtils::tr("There is no read note")), );
 
@@ -480,7 +480,7 @@ void AceReader::parseRdAndQaTag(U2::IOAdapter *io, char *buff, QSet<QByteArray>
     }
 
     len = io->readUntil(buff, DocumentFormat::READ_BUFF_SIZE, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &ok);
-    QByteArray qaBlock = (QByteArray::fromRawData(buff, len)).trimmed();
+    QByteArray qaBlock = (QByteArray(buff, len)).trimmed();
     CHECK_EXT(qaBlock.startsWith(QA), os->setError(DocumentFormatUtils::tr("QA keyword hasn't been found")), );
 
     int clearRangeStart = getClearRangeStart(qaBlock);
diff --git a/src/corelibs/U2Formats/src/ace/AceImportUtils.h b/src/corelibs/U2Formats/src/ace/AceImportUtils.h
index 12a722a..2eb2cca 100644
--- a/src/corelibs/U2Formats/src/ace/AceImportUtils.h
+++ b/src/corelibs/U2Formats/src/ace/AceImportUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ace/AceImporter.cpp b/src/corelibs/U2Formats/src/ace/AceImporter.cpp
index 9899d89..1fff18b 100644
--- a/src/corelibs/U2Formats/src/ace/AceImporter.cpp
+++ b/src/corelibs/U2Formats/src/ace/AceImporter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QTemporaryFile>
+#include <QDir>
+#include <QTemporaryFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -28,14 +28,17 @@
 #include <U2Core/CloneObjectTask.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/LoadDocumentTask.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Timer.h>
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
-#include <U2Formats/AceFormat.h>
+#include <U2Gui/ImportWidget.h>
 
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Formats/AceFormat.h>
 
 #include "AceImporter.h"
 #include "CloneAssemblyWithReferenceToDbiTask.h"
@@ -47,13 +50,12 @@ namespace U2 {
 //// AceImporterTask
 ///////////////////////////////////
 
-AceImporterTask::AceImporterTask(const GUrl& url, const QVariantMap& settings, const QVariantMap &hints) :
+AceImporterTask::AceImporterTask(const GUrl& url, const QVariantMap& settings) :
     DocumentProviderTask(tr("ACE file import: %1").arg(url.fileName()), TaskFlags_NR_FOSE_COSC),
     convertTask(NULL),
     loadDocTask(NULL),
     isSqliteDbTransit(false),
     settings(settings),
-    hints(hints),
     srcUrl(url)
 {
     documentDescription = srcUrl.fileName();
@@ -62,7 +64,7 @@ AceImporterTask::AceImporterTask(const GUrl& url, const QVariantMap& settings, c
 void AceImporterTask::prepare() {
     startTime = GTimer::currentTimeMicros();
 
-    hintedDbiRef = hints.value(DocumentFormat::DBI_REF_HINT).value<U2DbiRef>();
+    hintedDbiRef = settings.value(DocumentFormat::DBI_REF_HINT).value<U2DbiRef>();
     SAFE_POINT_EXT(hintedDbiRef.isValid(), setError(tr("Dbi ref is invalid")), );
 
     isSqliteDbTransit = SQLITE_DBI_ID != hintedDbiRef.dbiFactoryId;
@@ -128,12 +130,12 @@ Task::ReportResult AceImporterTask::report() {
 void AceImporterTask::initCloneObjectTasks() {
     const QMap<U2Sequence, U2Assembly> importedObjects = convertTask->getImportedObjects();
     foreach (const U2Sequence &reference, importedObjects.keys()) {
-        cloneTasks << new CloneAssemblyWithReferenceToDbiTask(importedObjects[reference], reference, localDbiRef, hintedDbiRef, hints);
+        cloneTasks << new CloneAssemblyWithReferenceToDbiTask(importedObjects[reference], reference, localDbiRef, hintedDbiRef, settings);
     }
 }
 
 void AceImporterTask::initLoadDocumentTask() {
-    if (hints.value(AceImporter::LOAD_RESULT_DOCUMENT, true).toBool()) {
+    if (settings.value(AceImporter::LOAD_RESULT_DOCUMENT, true).toBool()) {
         loadDocTask = LoadDocumentTask::getDefaultLoadDocTask(convertTask->getDestinationUrl());
         if (loadDocTask == NULL) {
             setError(tr("Failed to get load task for : %1").arg(convertTask->getDestinationUrl().getURLString()));
@@ -165,28 +167,16 @@ FormatCheckResult AceImporter::checkRawData(const QByteArray& rawData, const GUr
     return aceFormat.checkRawData(rawData, url);
 }
 
-DocumentProviderTask* AceImporter::createImportTask(const FormatDetectionResult& res, bool showWizard, const QVariantMap &hints) {
+DocumentProviderTask* AceImporter::createImportTask(const FormatDetectionResult& res, bool, const QVariantMap &hints) {
     QVariantMap settings;
-    AceImporterTask* task = NULL;
     settings.insert(SRC_URL, res.url.getURLString());
 
-    if (showWizard && NULL != dialogFactory) {
-        QObjectScopedPointer<ImportDialog> dialog = dialogFactory->getDialog(settings);
-        const int result = dialog->exec();
-        CHECK(!dialog.isNull(), NULL);
-
-        settings = dialog->getSettings();
-        QVariantMap extendedHints(hints);
-        if (settings.contains(DocumentFormat::DBI_REF_HINT)) {
-            extendedHints.insert(DocumentFormat::DBI_REF_HINT, settings[DocumentFormat::DBI_REF_HINT]);
-        }
-        task = new AceImporterTask(res.url, settings, extendedHints);
-        if (result == QDialog::Rejected) {
-            task->cancel();
-        }
-    } else {
-        task = new AceImporterTask(res.url, settings, hints);
+    AceImporterTask* task = NULL;
+    if (hints.contains(DocumentFormat::DBI_REF_HINT)) {
+        QVariant hint = hints.value(DocumentFormat::DBI_REF_HINT);
+        settings.insert(DocumentFormat::DBI_REF_HINT, hint);
     }
+    task = new AceImporterTask(res.url, settings);
 
     return task;
 }
diff --git a/src/corelibs/U2Formats/src/ace/AceImporter.h b/src/corelibs/U2Formats/src/ace/AceImporter.h
index 8b07a5d..949b223 100644
--- a/src/corelibs/U2Formats/src/ace/AceImporter.h
+++ b/src/corelibs/U2Formats/src/ace/AceImporter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@ class LoadDocumentTask;
 class AceImporterTask : public DocumentProviderTask {
     Q_OBJECT
 public:
-    AceImporterTask(const GUrl &url, const QVariantMap& settings, const QVariantMap &hints = QVariantMap());
+    AceImporterTask(const GUrl &url, const QVariantMap& settings);
 
     virtual void prepare();
     virtual QList<Task*> onSubTaskFinished(Task* subTask);
@@ -52,7 +52,6 @@ private:
     bool                     isSqliteDbTransit;
 
     QVariantMap              settings;
-    QVariantMap              hints;
 
     U2DbiRef                 localDbiRef;
     U2DbiRef                 hintedDbiRef;
@@ -70,7 +69,7 @@ public:
     AceImporter();
 
     virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& url);
-    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showWizard, const QVariantMap &hints);
+    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showGui, const QVariantMap &hints);
 
     static const QString ID;
     static const QString SRC_URL;
diff --git a/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.cpp b/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.cpp
index 4b0a5e9..044d169 100644
--- a/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.cpp
+++ b/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AssemblyObject.h>
 #include <U2Core/CloneObjectTask.h>
diff --git a/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.h b/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.h
index 8415848..430db07 100644
--- a/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.h
+++ b/src/corelibs/U2Formats/src/ace/CloneAssemblyWithReferenceToDbiTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.cpp b/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.cpp
index 48ae309..072f633 100644
--- a/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.cpp
+++ b/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.h b/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.h
index 63e3672..203126f 100644
--- a/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.h
+++ b/src/corelibs/U2Formats/src/ace/ConvertAceToSqliteTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/apr/AprFormat.cpp b/src/corelibs/U2Formats/src/apr/AprFormat.cpp
new file mode 100644
index 0000000..f36485a
--- /dev/null
+++ b/src/corelibs/U2Formats/src/apr/AprFormat.cpp
@@ -0,0 +1,225 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <U2Core/IOAdapter.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/TextUtils.h>
+#include <U2Core/U2AlphabetUtils.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatus.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "AprFormat.h"
+
+namespace U2 {
+
+static const QStringList HEADERS = QStringList()
+                            << "|AlignmentProject"
+                            << "obj|Project|"
+                            << "obj|MolList|"
+                            << "obj|Object*|" ;
+
+static const QString AREA_ALIGN = "AlnList";
+static const QString AREA_SEQUENCE_QUANTITY = "Object*";
+static const QString AREA_SEQUENCE = "IxAlignment";
+static const QString NO_SEQUENCES_IN_ALIGNMENT_STRING = "null";
+static const short SIZE_BEFORE_NUMBER_ALIGNMENT_LENGTH = QString("obj|AlnList|\\").length();
+static const short SIZE_BEFORE_NUMBER_SEQUENCE_QUANTITY = QString("obj|Object*|").length();
+static const short SIZE_BEFORE_NUMBER_SEQUENCE_LENGTH = QString("obj|IxAlignment|\\").length();
+
+/**
+*returns the string from which the alignment information is started
+*/
+static QString getLine(IOAdapter* io, char* buff, const QString& pattern, U2OpStatus& os) {
+    bool lineOk = false;
+    bool finishedReading = false;
+    QString line;
+    while (!finishedReading) {
+        int len = io->readLine(buff, AprFormat::READ_BUFF_SIZE, &lineOk);
+        if (!lineOk) {
+            os.setError(AprFormat::tr("Unexpected end of file"));
+            line = QString();
+            finishedReading = true;
+        }
+        QString bufferString(buff);
+        QTextStream bufferStream(&bufferString);
+        line = bufferStream.readLine();
+        if (line.contains(pattern)) {
+            finishedReading = true;
+        } else if (line.contains(NO_SEQUENCES_IN_ALIGNMENT_STRING)) {
+            os.setError(AprFormat::tr("There is no sequences in alignment"));
+            line = QString();
+            finishedReading = true;
+        }
+    }
+    return line;
+}
+
+static int getNumber(QString string, int startPos, U2OpStatus& os) {
+    string = string.simplified();
+    int resultLength = 0;
+    int currentLength = 0;
+    int i = 0;
+    bool ok = true;
+    int stringSize = string.size();
+    int resultLengthSize = 0;
+    while (ok && stringSize > startPos + resultLengthSize) {
+        resultLength = currentLength;
+        resultLengthSize = QString::number(resultLength).size();
+        i++;
+        QString stringLength = string.mid(startPos, i);
+        currentLength = stringLength.toInt(&ok);
+    }
+    if (i == 1) {
+        resultLength = currentLength;
+    }
+    if (resultLength == 0) {
+        os.setError(AprFormat::tr("Attemt to find any number in the string failed"));
+    }
+    return resultLength;
+}
+
+static QString getRowName(QString string, int sequenceLength) {
+    string = string.simplified();
+    int sequenceLengthSize = QString::number(sequenceLength).size();
+    int stringLength = string.length();
+    int namePos = SIZE_BEFORE_NUMBER_SEQUENCE_LENGTH + sequenceLengthSize + sequenceLength + 2;
+    int nameSize = stringLength - namePos;
+    QString name = string.mid(namePos, nameSize);
+    return name;
+}
+
+static QByteArray getSequenceContent(QString string, int sequenceLength) {
+    string = string.simplified();
+    int sequenceLengthSize = QString::number(sequenceLength).size();
+    int infoPos = SIZE_BEFORE_NUMBER_SEQUENCE_LENGTH + sequenceLengthSize + 1;
+    QString info = string.mid(infoPos, sequenceLength);
+    QByteArray byteArrayInfo = info.toLocal8Bit();
+    return byteArrayInfo;
+}
+
+static void createRows(IOAdapter* io, char* buff, const int sequnenceNum, const int alignmentLength, MultipleSequenceAlignment& al, U2OpStatus& os) {
+    for (int i = 0; i < sequnenceNum; i++) {
+        QString rowInfo = getLine(io, buff, AREA_SEQUENCE, os);
+        CHECK_OP(os, );
+
+        int sequenceLength = getNumber(rowInfo, SIZE_BEFORE_NUMBER_SEQUENCE_LENGTH, os);
+        CHECK_OP(os, );
+        if (sequenceLength != alignmentLength) {
+            os.setError("Incorrect sequence length");
+            return;
+        }
+        QString rowName = getRowName(rowInfo, sequenceLength);
+        QByteArray sequenceContent = getSequenceContent(rowInfo, sequenceLength);
+        al->addRow(rowName, sequenceContent);
+    }
+}
+
+AprFormat::AprFormat(QObject* p) : DocumentFormat(p, DocumentFormatFlags(DocumentFormatFlag_CannotBeCreated), QStringList("apr")) {
+    formatName = tr("Vector NTI/AlignX");
+    formatDescription = tr("Vector NTI/AlignX is a Vector NTI format for multiple alignment");
+    supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
+}
+
+FormatCheckResult AprFormat::checkRawData(const QByteArray& rawData, const GUrl&) const {
+    if (TextUtils::contains(TextUtils::BINARY, rawData.constData(), rawData.size())) {
+        return FormatDetection_NotMatched;
+    }
+
+    QTextStream s(rawData);
+    foreach(const QString& header, HEADERS) {
+        QString line = s.readLine();
+        bool containHeader = line.contains(header);
+        if (!containHeader) {
+            return FormatDetection_NotMatched;
+        }
+    }
+    return FormatDetection_Matched;
+}
+
+QString AprFormat::getRadioButtonText() const {
+    return tr("Open in read-only mode");
+}
+
+Document* AprFormat::loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, U2OpStatus& os) {
+    QList <GObject*> objs;
+    load(io, dbiRef, objs, fs, os);
+
+    CHECK_OP_EXT(os, qDeleteAll(objs), NULL);
+
+    if (objs.isEmpty()){
+        os.setError(AprFormat::tr("File doesn't contain any msa objects"));
+        return NULL;
+    }
+    Document *doc = new Document(this, io->getFactory(), io->getURL(), dbiRef, objs, fs);
+
+    return doc;
+}
+
+void AprFormat::load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap &hints, U2OpStatus& os) {
+    QByteArray readBuffer(READ_BUFF_SIZE, '\0');
+    char* buff = readBuffer.data();
+
+    QString objName = io->getURL().baseFileName();
+    MultipleSequenceAlignment al(objName);
+    bool lineOk = false;
+
+    io->readLine(buff, READ_BUFF_SIZE, &lineOk);
+    QString bufferString(buff);
+    QTextStream bufferStream(&bufferString);
+    QString header = bufferStream.readLine();
+    QByteArray mainHeader = header.toLocal8Bit();
+    if (!lineOk || !readBuffer.startsWith(mainHeader)) {
+        os.setError(AprFormat::tr("Illegal header line"));
+        return;
+    }
+
+    QString alignString = getLine(io, buff, AREA_ALIGN, os);
+    CHECK_OP(os, );
+
+    int alignmentLength = getNumber(alignString, SIZE_BEFORE_NUMBER_ALIGNMENT_LENGTH, os);
+    CHECK_OP(os, );
+
+    QString sequenceQuantityString = getLine(io, buff, AREA_SEQUENCE_QUANTITY, os);
+    CHECK_OP(os, );
+
+    int sequenceNum = getNumber(sequenceQuantityString, SIZE_BEFORE_NUMBER_SEQUENCE_QUANTITY, os);
+    CHECK_OP(os, );
+    if (sequenceNum == 0) {
+        os.setError(AprFormat::tr("Sequences not found"));
+        return;
+    }
+
+    createRows(io, buff, sequenceNum, alignmentLength, al, os);
+    CHECK_OP(os, );
+
+    U2AlphabetUtils::assignAlphabet(al);
+    CHECK_EXT(al->getAlphabet() != NULL, os.setError(AprFormat::tr("Alphabet is unknown")), );
+
+    const QString folder = hints.value(DBI_FOLDER_HINT, U2ObjectDbi::ROOT_FOLDER).toString();
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, folder, al, os);
+    CHECK_OP(os, );
+    objects.append(obj);
+}
+
+} //namespace
diff --git a/src/corelibs/U2Formats/src/apr/AprFormat.h b/src/corelibs/U2Formats/src/apr/AprFormat.h
new file mode 100644
index 0000000..57eafed
--- /dev/null
+++ b/src/corelibs/U2Formats/src/apr/AprFormat.h
@@ -0,0 +1,57 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_APR_FORMAT_H_
+#define _U2_APR_FORMAT_H_
+
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentModel.h>
+
+#include <QTextStream>
+#include <QStack>
+
+namespace U2 {
+
+class IOAdapter;
+class MultipleSequenceAlignment;
+
+class U2FORMATS_EXPORT AprFormat : public DocumentFormat {
+    Q_OBJECT
+public:
+    AprFormat(QObject* p);
+
+    virtual DocumentFormatId getFormatId() const { return BaseDocumentFormats::VECTOR_NTI_ALIGNX; }
+    virtual const QString& getFormatName() const { return formatName; }
+    virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& url = GUrl()) const;
+    virtual QString getRadioButtonText() const;
+
+protected:
+    virtual Document* loadDocument(IOAdapter* io, const U2DbiRef& dbiRef, const QVariantMap& fs, U2OpStatus& os);
+
+private:
+    void load(IOAdapter* io, const U2DbiRef& dbiRef, QList<GObject*>& objects, const QVariantMap &hints, U2OpStatus& ti);
+
+    QString formatName;
+};
+
+} //namespace
+
+#endif
diff --git a/src/corelibs/U2Formats/src/apr/AprImporter.cpp b/src/corelibs/U2Formats/src/apr/AprImporter.cpp
new file mode 100644
index 0000000..80fa00a
--- /dev/null
+++ b/src/corelibs/U2Formats/src/apr/AprImporter.cpp
@@ -0,0 +1,142 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+#include <U2Core/AppContext.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/GObjectSelection.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/RemoveDocumentTask.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/Timer.h>
+#include <U2Core/U2DbiRegistry.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ImportWidget.h>
+#include <U2Gui/ProjectView.h>
+
+#include <U2Formats/AprFormat.h>
+#include <U2Formats/ConvertFileTask.h>
+
+#include "AprImporter.h"
+
+#include <QDir>
+#include <QFileInfo>
+
+namespace U2 {
+
+///////////////////////////////////
+//// AprImporterTask
+///////////////////////////////////
+
+AprImporterTask::AprImporterTask(const GUrl& url, const QVariantMap &_settings) :
+    DocumentProviderTask(tr("APR file import: %1").arg(url.fileName()), TaskFlags_NR_FOSE_COSC),
+    settings(_settings),
+    srcUrl(url)
+{
+    documentDescription = url.fileName();
+}
+
+void AprImporterTask::prepare() {
+    DocumentFormatId currentFormat = BaseDocumentFormats::VECTOR_NTI_ALIGNX;
+    QVariant v = settings.value(ImportHint_DestinationUrl);
+    QString dstUrl = v.toString();
+
+    SAFE_POINT_EXT(!dstUrl.isEmpty(), stateInfo.setError(tr("Empty destination url")), );
+
+    QVariant variantFormat = settings.value(ImportHint_FormatId);
+    DocumentFormatId formatId = variantFormat.toString();
+
+    IOAdapterRegistry *ioar = AppContext::getIOAdapterRegistry();
+    SAFE_POINT_EXT(NULL != ioar, stateInfo.setError(tr("Invalid I/O environment!")), );
+
+    IOAdapterFactory *iof = ioar->getIOAdapterFactoryById(IOAdapterUtils::url2io(dstUrl));
+
+    QFileInfo fileInfo(dstUrl);
+    QDir qDir = fileInfo.dir();
+    QString dir = qDir.path();
+    QString name = fileInfo.completeBaseName();
+    dstUrl = QFileInfo(qDir, name).filePath();
+
+    DefaultConvertFileTask *convertTask = new DefaultConvertFileTask(srcUrl, currentFormat, dstUrl, formatId, dir);
+
+    addSubTask(convertTask);
+}
+
+QList<Task*> AprImporterTask::onSubTaskFinished(Task* subTask) {
+    QList<Task*> res;
+    CHECK_OP(stateInfo, res);
+
+    DefaultConvertFileTask* convTask = qobject_cast<DefaultConvertFileTask*> (subTask);
+    if (convTask != NULL) {
+        QString dstUrl = convTask->getResult();
+        SAFE_POINT_EXT(!dstUrl.isEmpty(), stateInfo.setError(tr("Empty destination url")), res);
+
+        QVariantMap hints;
+        hints[DocumentReadingMode_SequenceAsAlignmentHint] = true;
+        LoadDocumentTask* loadTask = LoadDocumentTask::getDefaultLoadDocTask(stateInfo, dstUrl, hints);
+        CHECK(loadTask != NULL, res);
+
+        res << loadTask;
+    }
+
+    LoadDocumentTask* loadTask = qobject_cast<LoadDocumentTask*> (subTask);
+    if (loadTask != NULL) {
+        resultDocument = loadTask->takeDocument();
+    }
+
+    return res;
+}
+
+///////////////////////////////////
+//// AprImporter
+///////////////////////////////////
+
+const QString AprImporter::ID = "Vector_NTI_AlignX-importer";
+
+AprImporter::AprImporter() :
+DocumentImporter(ID, tr("Vector NTI/AlignX file importer")) {
+    AprFormat aprFormat(NULL);
+    extensions << aprFormat.getSupportedDocumentFileExtensions();
+    formatIds << aprFormat.getFormatId();
+    importerDescription = tr("Vector NTI/AlignX files importer is used to convert conventional APR files to a multiple sequence alignment formats");
+    supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
+}
+
+FormatCheckResult AprImporter::checkRawData(const QByteArray& rawData, const GUrl& url) {
+    AprFormat aprFormat(NULL);
+    return aprFormat.checkRawData(rawData, url);
+}
+
+DocumentProviderTask* AprImporter::createImportTask(const FormatDetectionResult& res, bool, const QVariantMap &hints) {
+    AprImporterTask* task = new AprImporterTask(res.url, hints);
+    return task;
+}
+
+QString AprImporter::getRadioButtonText() const{
+    QString res = tr("Convert to another format:");
+    return res;
+}
+
+}  // namespace U2
\ No newline at end of file
diff --git a/src/corelibs/U2Formats/src/apr/AprImporter.h b/src/corelibs/U2Formats/src/apr/AprImporter.h
new file mode 100644
index 0000000..9fb221f
--- /dev/null
+++ b/src/corelibs/U2Formats/src/apr/AprImporter.h
@@ -0,0 +1,69 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_APR_IMPORTER_H_
+#define _U2_APR_IMPORTER_H_
+
+#include <U2Core/DocumentImport.h>
+#include <U2Core/DocumentProviderTask.h>
+
+namespace U2 {
+
+class LoadDocumentTask;
+
+
+///////////////////////////////////
+//// AprImporterTask
+///////////////////////////////////
+
+class U2FORMATS_EXPORT AprImporterTask : public DocumentProviderTask {
+    Q_OBJECT
+public:
+    AprImporterTask(const GUrl& url, const QVariantMap &_settings);
+
+    virtual void prepare();
+    virtual QList<Task*> onSubTaskFinished(Task* subTask);
+
+private:
+    QVariantMap              settings;
+    GUrl                     srcUrl;
+};
+
+///////////////////////////////////
+//// AprImporter
+///////////////////////////////////
+
+class U2FORMATS_EXPORT AprImporter : public DocumentImporter {
+    Q_OBJECT
+public:
+    AprImporter();
+
+    virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& url);
+    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showGui, const QVariantMap &hints);
+    virtual QString getRadioButtonText() const;
+
+    static const QString ID;
+    static const QString SRC_URL;
+};
+
+}   // namespace U2
+
+#endif // _U2_APR_IMPORTER_H_
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.cpp
index 72d0218..c21d83c 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.h
index 50fdbf7..337774f 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAssemblyDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.cpp
index d2390c8..991f85e 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.h
index d9652cd..72464a6 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlAttributeDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright ( C ) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright ( C ) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.cpp
index 7d2dc05..c46585a 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.h
index ec863d4..e9640ca 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobInputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.cpp
index 179e9b7..4e8293a 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.h
index ffd85b9..690b0e2 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlBlobOutputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.cpp
index eef6cf4..fa3ea29 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.h
index 4e7c41b..7d520b6 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlCrossDatabaseReferenceDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.cpp
index 67fd0b8..8359700 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtSql/QSqlError>
+#include <QSqlError>
 
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -166,6 +166,10 @@ MysqlSequenceDbi* MysqlDbi::getMysqlSequenceDbi() {
     return sequenceDbi;
 }
 
+MysqlUdrDbi* MysqlDbi::getMysqlUdrDbi() {
+    return udrDbi;
+}
+
 MysqlVariantDbi * MysqlDbi::getMysqlVariantDbi() {
     return variantDbi;
 }
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.h
index 1896756..501a139 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_MYSQL_DBI_H_
 #define _U2_MYSQL_DBI_H_
 
-#include <QtCore/QStack>
+#include <QStack>
 
 #include <U2Core/U2AbstractDbi.h>
 #include <U2Core/U2DbiRegistry.h>
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.cpp
index 226fc45..30f67f1 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QQueue>
+#include <QQueue>
 
 #include <U2Core/U2SafePoints.h>
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.h
index cc20afc..d91780e 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlFeatureDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.cpp
index 58fbdd4..2f8f416 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.h
index 02f10e5..12b4cba 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlModDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
index e2ceebc..0407313 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -147,6 +147,7 @@ QList<U2MsaRow> MysqlMsaDbi::getRows(const U2DataId& msaId, U2OpStatus& os) {
             U2MsaGap gap;
             gap.offset = gapQuery.getInt64(0);
             gap.gap = gapQuery.getInt64(1) - gap.offset;
+            SAFE_POINT_EXT(gap.isValid(), os.setError("An invalid gap is stored in the database"), res);
             row.gaps.append(gap);
         }
         CHECK_OP(os, res);
@@ -272,7 +273,7 @@ void MysqlMsaDbi::updateMsaAlphabet(const U2DataId& msaId, const U2AlphabetId& a
     if (TrackOnUpdate == trackMod) {
         U2Msa msaObj = getMsaObject(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packAlphabetDetails(msaObj.alphabet, alphabet);
+        modDetails = U2DbiPackUtils::packAlphabetDetails(msaObj.alphabet, alphabet);
     }
 
     // Update the alphabet
@@ -303,24 +304,28 @@ void MysqlMsaDbi::addRows(const U2DataId& msaId, QList<U2MsaRow>& rows, U2OpStat
     CHECK_OP(os, );
 
     QList<qint64> posInMsa;
-    qint64 maxLen = 0;
     for (int i = 0; i < rows.count(); i++) {
         posInMsa << i + numOfRows;
-        maxLen = qMax(maxLen, rows[i].length);
-    }
-    if (maxLen > getMsaLength(msaId, os)) {
-        updateMsaLength(updateAction, msaId, maxLen, os);
-        CHECK_OP(os, );
     }
 
     QByteArray modDetails;
     if (TrackOnUpdate == trackMod) {
-        modDetails = PackUtils::packRows(posInMsa, rows);
+        modDetails = U2DbiPackUtils::packRows(posInMsa, rows);
     }
 
     addRowsCore(msaId, posInMsa, rows, os);
     CHECK_OP(os, );
 
+    // Update msa length
+    qint64 maxLength = 0;
+    foreach (const U2MsaRow &row, rows) {
+        maxLength = qMax(maxLength, row.length);
+    }
+    if (maxLength > getMsaLength(msaId, os)) {
+        updateMsaLength(updateAction, msaId, maxLength, os);
+        CHECK_OP(os, );
+    }
+
     // Update track mod type for child sequence object
     if (TrackOnUpdate == trackMod) {
         foreach (const U2MsaRow& row, rows) {
@@ -349,7 +354,7 @@ void MysqlMsaDbi::addRow(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row,
 
     QByteArray modDetails;
     if (TrackOnUpdate == trackMod) {
-        modDetails = PackUtils::packRow(posInMsa, row);
+        modDetails = U2DbiPackUtils::packRow(posInMsa, row);
     }
     if (row.length > getMsaLength(msaId, os)) {
         updateMsaLength(updateAction, msaId, row.length, os);
@@ -387,7 +392,7 @@ void MysqlMsaDbi::removeRows(const U2DataId& msaId, const QList<qint64>& rowIds,
             rows << getRow(msaId, rowId, os);
             CHECK_OP(os, );
         }
-        modDetails = PackUtils::packRows(posInMsa, rows);
+        modDetails = U2DbiPackUtils::packRows(posInMsa, rows);
     }
 
     bool removeSequence = (TrackOnUpdate != trackMod);
@@ -419,7 +424,7 @@ void MysqlMsaDbi::removeRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& os)
         CHECK_OP(os, );
         qint64 posInMsa = getPosInMsa(msaId, rowId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packRow(posInMsa, removedRow);
+        modDetails = U2DbiPackUtils::packRow(posInMsa, removedRow);
     }
 
     bool removeSequence = (TrackOnUpdate != trackMod);
@@ -530,7 +535,7 @@ void MysqlMsaDbi::updateMsaLength(MysqlModificationAction &updateAction, const U
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         const qint64 oldMsaLen = getMsaLength(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packAlignmentLength(oldMsaLen, length);
+        modDetails = U2DbiPackUtils::packAlignmentLength(oldMsaLen, length);
     }
 
     updateMsaLengthCore(msaId, length, os);
@@ -550,7 +555,7 @@ void MysqlMsaDbi::setNewRowsOrder(const U2DataId& msaId, const QList<qint64>& ro
     if (TrackOnUpdate == trackMod) {
         QList<qint64> oldOrder = getRowsOrder(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packRowOrderDetails(oldOrder, rowIds);
+        modDetails = U2DbiPackUtils::packRowOrderDetails(oldOrder, rowIds);
     }
 
     // Check that row IDs number is correct (if required, can be later removed for efficiency)
@@ -651,6 +656,35 @@ qint64 MysqlMsaDbi::getMsaLength(const U2DataId& msaId, U2OpStatus& os) {
     return res;
 }
 
+U2DataId MysqlMsaDbi::createMcaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, U2OpStatus &os) {
+    return createMcaObject(folder, name, alphabet, 0, os);
+}
+
+U2DataId MysqlMsaDbi::createMcaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, int length, U2OpStatus &os) {
+    MysqlTransaction t(db, os);
+    Q_UNUSED(t);
+
+    U2Mca mca;
+    mca.visualName = name;
+    mca.alphabet = alphabet;
+    mca.length = length;
+
+    // Create the object
+    dbi->getMysqlObjectDbi()->createObject(mca, folder, U2DbiObjectRank_TopLevel, os);
+    CHECK_OP(os, U2DataId());
+
+    // Create a record in the Msa table
+    static const QString queryString = "INSERT INTO Msa(object, length, alphabet, numOfRows) VALUES(:object, :length, :alphabet, :numOfRows)";
+    U2SqlQuery q(queryString, db, os);
+    q.bindDataId(":object", mca.id);
+    q.bindInt64(":length", mca.length);
+    q.bindString(":alphabet", mca.alphabet.id);
+    q.bindInt64(":numOfRows", 0); // no rows
+    q.insert();
+
+    return mca.id;
+}
+
 void MysqlMsaDbi::addMsaRowAndGaps(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row, U2OpStatus& os) {
     MysqlTransaction t(db, os);
     Q_UNUSED(t);
@@ -1040,7 +1074,7 @@ void MysqlMsaDbi::undoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray&
     U2AlphabetId oldAlphabet;
     U2AlphabetId newAlphabet;
 
-    bool ok = PackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
+    bool ok = U2DbiPackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment alphabet")), );
 
     // Update the value
@@ -1058,7 +1092,7 @@ void MysqlMsaDbi::undoAddRows(const U2DataId& msaId, const QByteArray& modDetail
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
 
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting adding of rows")), );
 
     QList<qint64> rowIds;
@@ -1076,7 +1110,7 @@ void MysqlMsaDbi::undoAddRow(const U2DataId& msaId, const QByteArray& modDetails
     U2MsaRow row;
     qint64 posInMsa;
 
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting addition of a row")), );
 
     removeRowCore(msaId, row.rowId, false, os);
@@ -1089,7 +1123,7 @@ void MysqlMsaDbi::undoRemoveRows(const U2DataId& msaId, const QByteArray& modDet
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
 
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting removing of rows")), );
 
     addRowsCore(msaId, posInMsa, rows, os);
@@ -1102,7 +1136,7 @@ void MysqlMsaDbi::undoRemoveRow(const U2DataId& msaId, const QByteArray& modDeta
     U2MsaRow row;
     qint64 posInMsa;
 
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting removing of a row")), );
 
     addRowCore(msaId, posInMsa, row, os);
@@ -1116,7 +1150,7 @@ void MysqlMsaDbi::undoUpdateGapModel(const U2DataId& msaId, const QByteArray& mo
     QList<U2MsaGap> oldGaps;
     QList<U2MsaGap> newGaps;
 
-    bool ok = PackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
+    bool ok = U2DbiPackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment gaps")), );
 
     updateGapModelCore(msaId, rowId, oldGaps, os);
@@ -1129,7 +1163,7 @@ void MysqlMsaDbi::undoSetNewRowsOrder(const U2DataId& msaId, const QByteArray& m
     QList<qint64> oldOrder;
     QList<qint64> newOrder;
 
-    bool ok = PackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
+    bool ok = U2DbiPackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment row order")), );
 
     // Set the old order
@@ -1143,7 +1177,7 @@ void MysqlMsaDbi::undoUpdateRowInfo(const U2DataId& msaId, const QByteArray& mod
     U2MsaRow oldRow;
     U2MsaRow newRow;
 
-    bool ok = PackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
+    bool ok = U2DbiPackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating a row info")), );
     SAFE_POINT(oldRow.rowId == newRow.rowId, "Incorrect rowId", );
     SAFE_POINT(oldRow.sequenceId == newRow.sequenceId, "Incorrect sequenceId", );
@@ -1158,7 +1192,7 @@ void MysqlMsaDbi::undoMsaLengthChange(const U2DataId &msaId, const QByteArray &m
     qint64 oldLen;
     qint64 newLen;
 
-    bool ok = PackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
+    bool ok = U2DbiPackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an msa length")), );
 
     updateMsaLengthCore(msaId, oldLen, os);
@@ -1171,7 +1205,7 @@ void MysqlMsaDbi::redoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray&
     U2AlphabetId oldAlphabet;
     U2AlphabetId newAlphabet;
 
-    bool ok = PackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
+    bool ok = U2DbiPackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment alphabet")), );
 
     // Redo the updating
@@ -1186,7 +1220,7 @@ void MysqlMsaDbi::redoAddRows(const U2DataId& msaId, const QByteArray& modDetail
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
 
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting adding of rows")), );
 
     addRowsCore(msaId, posInMsa, rows, os);
@@ -1196,7 +1230,7 @@ void MysqlMsaDbi::redoAddRow(const U2DataId& msaId, const QByteArray& modDetails
     U2MsaRow row;
     qint64 posInMsa;
 
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during addition of a row")), );
 
     addRowCore(msaId, posInMsa, row, os);
@@ -1206,7 +1240,7 @@ void MysqlMsaDbi::redoRemoveRows(const U2DataId& msaId, const QByteArray& modDet
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
 
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting removing of rows")), );
 
     QList<qint64> rowIds;
@@ -1221,7 +1255,7 @@ void MysqlMsaDbi::redoRemoveRow(const U2DataId& msaId, const QByteArray& modDeta
     U2MsaRow row;
     qint64 posInMsa;
 
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting removing of a row")), );
 
     removeRowCore(msaId, row.rowId, false, os);
@@ -1232,7 +1266,7 @@ void MysqlMsaDbi::redoUpdateGapModel(const U2DataId& msaId, const QByteArray& mo
     QList<U2MsaGap> oldGaps;
     QList<U2MsaGap> newGaps;
 
-    bool ok = PackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
+    bool ok = U2DbiPackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment gaps")), );
 
     updateGapModelCore(msaId, rowId, newGaps, os);
@@ -1242,7 +1276,7 @@ void MysqlMsaDbi::redoSetNewRowsOrder(const U2DataId& msaId, const QByteArray& m
     QList<qint64> oldOrder;
     QList<qint64> newOrder;
 
-    bool ok = PackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
+    bool ok = U2DbiPackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an alignment row order")), );
 
     setNewRowsOrderCore(msaId, newOrder, os);
@@ -1252,7 +1286,7 @@ void MysqlMsaDbi::redoUpdateRowInfo(const U2DataId& msaId, const QByteArray& mod
     U2MsaRow oldRow;
     U2MsaRow newRow;
 
-    bool ok = PackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
+    bool ok = U2DbiPackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating a row info")), );
     SAFE_POINT(oldRow.rowId == newRow.rowId, "Incorrect rowId", );
     SAFE_POINT(oldRow.sequenceId == newRow.sequenceId, "Incorrect sequenceId", );
@@ -1267,7 +1301,7 @@ void MysqlMsaDbi::redoMsaLengthChange(const U2DataId &msaId, const QByteArray &m
     qint64 oldLen;
     qint64 newLen;
 
-    bool ok = PackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
+    bool ok = U2DbiPackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an msa length")), );
 
     updateMsaLengthCore(msaId, newLen, os);
@@ -1285,7 +1319,7 @@ void MysqlMsaDbi::updateRowInfo(MysqlModificationAction &updateAction, const U2D
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         U2MsaRow oldRow = getRow(msaId, row.rowId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packRowInfoDetails(oldRow, row);
+        modDetails = U2DbiPackUtils::packRowInfoDetails(oldRow, row);
     }
 
     updateRowInfoCore(msaId, row, os);
@@ -1303,7 +1337,7 @@ void MysqlMsaDbi::updateGapModel(MysqlModificationAction &updateAction, const U2
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         U2MsaRow row = getRow(msaId, msaRowId, os);
         CHECK_OP(os, );
-        gapsDetails = PackUtils::packGapDetails(msaRowId, row.gaps, gapModel);
+        gapsDetails = U2DbiPackUtils::packGapDetails(msaRowId, row.gaps, gapModel);
     }
 
     updateGapModelCore(msaId, msaRowId, gapModel, os);
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
index bf4018d..0d8ccf0 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlMsaDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -67,8 +67,10 @@ public:
      * The number of rows and the length of the alignment are set to 0.
      * Returns the assigned id.
      */
-    virtual U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
-    virtual U2DataId createMsaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, int length, U2OpStatus &os);
+    U2DataId createMcaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
+    U2DataId createMcaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, int length, U2OpStatus &os);
+    U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
+    U2DataId createMsaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, int length, U2OpStatus &os);
 
     /**
      * Updates the multiple alignment name.
@@ -86,10 +88,11 @@ public:
 
     /**
      * Creates rows (and gap models for them) in the database.
-     * Ignores 'length' of the 'rows' (recalculates them).
+     * Enlarges msa length, if 'length' of any of the 'rows' is greater than current msa length.
+     * Recalculates 'length' of the 'rows'.
      * The rows are appended to the end of the MSA.
      * Assigns MSA as a parent for all the sequences.
-     * If a row ID equals "-1", sets a valid ID to the passed U2MsaRow instances.
+     * If a row ID equals "-1", sets a valid ID to the passed U2MaRow instances.
      * Updates the number of rows of the MSA.
      * Updates the alignment length.
      * Increments the alignment version.
@@ -99,7 +102,9 @@ public:
 
     /**
      * Creates a new row and gap model records in the database.
-     * Ignores 'row.length' (recalculates it) and 'row.rowId'. Sets valid to the passed U2MsaRow instance.
+     * Enlarges msa length, if 'row.length' is greater than current msa length.
+     * Ignores 'row.rowId'.
+     * Recalculates 'row.length' and and 'row.rowId'. Sets valid to the passed U2MsaRow instance.
      * If 'posInMsa' equals to '-1' the row is appended to the end of the MSA,
      * otherwise it is inserted to the specified position and all positions are updated.
      * Assigns MSA as a parent for the sequence.
@@ -180,7 +185,7 @@ private:
     /**
      * Creates new records in MsaRow and MsaRowGap tables for the added row, and
      * sets the parent of the sequence object to the MSA object.
-     * Sets the assigned ID to the passed U2MsaRow instance.
+     * Sets the assigned ID to the passed U2MaRow instance.
      */
     void addMsaRowAndGaps(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row, U2OpStatus& os);
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
index be6a59f..b1724d7 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCryptographicHash>
-
-#include <QtSql/QSqlError>
-#include <QtSql/QSqlQuery>
+#include <QCryptographicHash>
+#include <QSqlError>
+#include <QSqlQuery>
 
 #include <U2Core/Folder.h>
 #include <U2Core/U2DbiPackUtils.h>
@@ -245,7 +244,7 @@ QList<U2DataId> MysqlObjectDbi::getObjects(const QString& folder, qint64 offset,
     const QString canonicalFolder = U2DbiUtils::makeFolderCanonical(folder);
     const QByteArray hash = QCryptographicHash::hash(canonicalFolder.toLatin1(), QCryptographicHash::Md5).toHex();
 
-    static const QString queryString = "SELECT o.id, o.type, '' FROM Object AS o, FolderContent AS fc, Folder AS f WHERE f.hash = :hash AND fc.folder = f.id AND fc.object = o.id";
+    static const QString queryString = "SELECT o.id, o.type, '' FROM Object AS o, FolderContent AS fc, Folder AS f WHERE f.hash = :hash AND fc.folder = f.id AND fc.object = o.id AND o." + TOP_LEVEL_FILTER;
     U2SqlQuery q(queryString, offset, count, db, os);
     q.bindString(":hash", hash);
     return q.selectDataIdsExt();
@@ -279,6 +278,13 @@ qint64 MysqlObjectDbi::getFolderGlobalVersion(const QString& folder, U2OpStatus&
     return q.selectInt64();
 }
 
+U2DbiObjectRank MysqlObjectDbi::getObjectRank(const U2DataId &objectId, U2OpStatus& os) {
+    static const QString queryString("SELECT rank FROM Object WHERE id = :id");
+    U2SqlQuery q(queryString, db, os);
+    q.bindDataId(":id", objectId);
+    return static_cast<U2DbiObjectRank> (q.selectInt32());
+}
+
 
 //////////////////////////////////////////////////////////////////////////
 // Write methods for objects
@@ -763,7 +769,7 @@ void MysqlObjectDbi::setObjectRank(const U2DataId &objectId, U2DbiObjectRank new
     query.bindInt32(":rank", newRank);
     query.bindDataId(":id", objectId);
     const qint64 modifiedRowsNumber = query.update();
-    if (modifiedRowsNumber != 1) {
+    if (modifiedRowsNumber > 1) {
         os.setError(QObject::tr("Unexpected number of modified objects. Expected: 1, actual: %1").arg(modifiedRowsNumber));
     }
 }
@@ -1033,6 +1039,7 @@ void MysqlObjectDbi::removeObjectSpecificData(const U2DataId &objectId, U2OpStat
     case U2Type::VariantTrack:
         // nothing has to be done for objects of these types
         break;
+    case U2Type::Mca:
     case U2Type::Msa:
         dbi->getMysqlMsaDbi()->deleteRowsData(objectId, os);
         break;
@@ -1082,7 +1089,9 @@ void MysqlObjectDbi::setVersion(const U2DataId& id, qint64 version, U2OpStatus&
 }
 
 void MysqlObjectDbi::undoSingleModStep(const U2SingleModStep& modStep, U2OpStatus& os) {
-    if (U2ModType::isMsaModType(modStep.modType)) {
+    if (U2ModType::isUdrModType(modStep.modType)) {
+        dbi->getMysqlUdrDbi()->undo(modStep, os);
+    } else if (U2ModType::isMsaModType(modStep.modType)) {
         dbi->getMysqlMsaDbi()->undo(modStep.objectId, modStep.modType, modStep.details, os);
     } else if (U2ModType::isSequenceModType(modStep.modType)) {
         dbi->getMysqlSequenceDbi()->undo(modStep.objectId, modStep.modType, modStep.details, os);
@@ -1095,7 +1104,9 @@ void MysqlObjectDbi::undoSingleModStep(const U2SingleModStep& modStep, U2OpStatu
 }
 
 void MysqlObjectDbi::redoSingleModStep(const U2SingleModStep& modStep, U2OpStatus &os) {
-    if (U2ModType::isMsaModType(modStep.modType)) {
+    if (U2ModType::isUdrModType(modStep.modType)) {
+        dbi->getMysqlUdrDbi()->redo(modStep, os);
+    } else if (U2ModType::isMsaModType(modStep.modType)) {
         dbi->getMysqlMsaDbi()->redo(modStep.objectId, modStep.modType, modStep.details, os);
     } else if (U2ModType::isSequenceModType(modStep.modType)) {
         dbi->getMysqlSequenceDbi()->redo(modStep.objectId, modStep.modType, modStep.details, os);
@@ -1132,7 +1143,7 @@ void MysqlObjectDbi::undoUpdateObjectName(const U2DataId& id, const QByteArray&
     QString oldName;
     QString newName;
 
-    bool ok = PackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
+    bool ok = U2DbiPackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an object name")), );
 
     // Update the value
@@ -1150,7 +1161,7 @@ void MysqlObjectDbi::redoUpdateObjectName(const U2DataId& id, const QByteArray&
     QString oldName;
     QString newName;
 
-    bool ok = PackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
+    bool ok = U2DbiPackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an object name!")), );
 
     U2Object obj;
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
index f210953..a5deb5d 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -100,6 +100,9 @@ public:
         */
     virtual qint64 getFolderGlobalVersion(const QString& folder, U2OpStatus& os);
 
+    /** Returns object rank of the given object */
+    virtual U2DbiObjectRank getObjectRank(const U2DataId &objectId, U2OpStatus& os);
+
     // Write methods for objects
 
     /**
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.cpp
index 9968e48..6d73240 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.h
index 667d865..09bcab5 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlObjectRelationsDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.cpp
index c53e68f..ac85334 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -205,10 +205,14 @@ static QList<QByteArray> quantify(const QList<QByteArray>& input) {
 }   // unnamed namespace
 
 void MysqlSequenceDbi::updateSequenceData(const U2DataId& sequenceId, const U2Region& regionToReplace, const QByteArray& dataToInsert, const QVariantMap &hints, U2OpStatus& os) {
+    updateSequenceData(sequenceId, sequenceId, regionToReplace, dataToInsert, hints, os);
+}
+
+void MysqlSequenceDbi::updateSequenceData(const U2DataId &masterId, const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os) {
     MysqlTransaction t(db, os);
     Q_UNUSED(t);
 
-    MysqlModificationAction updateAction(dbi, sequenceId);
+    MysqlModificationAction updateAction(dbi, masterId);
     updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -228,7 +232,7 @@ void MysqlSequenceDbi::updateSequenceData(MysqlModificationAction& updateAction,
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         QByteArray oldSeq = dbi->getSequenceDbi()->getSequenceData(sequenceId, regionToReplace, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packSequenceDataDetails(regionToReplace, oldSeq, dataToInsert, hints);
+        modDetails = U2DbiPackUtils::packSequenceDataDetails(regionToReplace, oldSeq, dataToInsert, hints);
     }
 
     updateSequenceDataCore(sequenceId, regionToReplace, dataToInsert, hints, os);
@@ -383,7 +387,7 @@ void MysqlSequenceDbi::undoUpdateSequenceData(const U2DataId& sequenceId, const
     QByteArray newData;
     QVariantMap hints;
 
-    bool ok = PackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
+    bool ok = U2DbiPackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during reverting replacing sequence data")), );
 
     hints.remove(U2SequenceDbiHints::EMPTY_SEQUENCE);
@@ -398,7 +402,7 @@ void MysqlSequenceDbi::redoUpdateSequenceData(const U2DataId& sequenceId, const
     QByteArray newData;
     QVariantMap hints;
 
-    bool ok = PackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
+    bool ok = U2DbiPackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during replacing sequence data")), );
 
     replacedByRegion = U2Region(replacedRegion.startPos, newData.length());
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.h
index 189aa59..2e2f186 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlSequenceDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,6 +62,8 @@ public:
         Note: regionToReplace length can differ from dataToInsert length, so the method can be used to add/remove sequence regions
     */
     virtual void updateSequenceData(const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
+    virtual void updateSequenceData(const U2DataId &masterId, const U2DataId &sequenceId,
+                                    const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
 
     /** The same as above, except passed modification action is used */
     void updateSequenceData(MysqlModificationAction &updateAction, const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.cpp
index ca277c2..c19b671 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,16 +20,19 @@
  */
 
 #include <U2Core/AppContext.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2DbiPackUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UdrSchemaRegistry.h>
 
 #include "MysqlBlobInputStream.h"
 #include "MysqlBlobOutputStream.h"
-
-#include "util/MysqlHelpers.h"
 #include "MysqlObjectDbi.h"
 #include "MysqlUdrDbi.h"
 
+#include "util/MysqlHelpers.h"
+#include "util/MysqlModificationAction.h"
+
 static const QString PLACEHOLDER_MARK = ":";
 
 namespace U2 {
@@ -48,6 +51,34 @@ MysqlUdrDbi::MysqlUdrDbi(MysqlDbi *dbi)
 
 }
 
+void MysqlUdrDbi::undo(const U2SingleModStep& modStep, U2OpStatus& os) {
+    SAFE_POINT_EXT(modStep.modType == U2ModType::udrUpdated, os.setError("Unknown modStep"), );
+
+    MysqlTransaction t(db, os);
+    Q_UNUSED(t);
+
+    QByteArray oldData;
+    QByteArray newData;
+    bool ok =  U2DbiPackUtils::unpackUdr(modStep.details, oldData, newData);
+    CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating UDR")), );
+
+    RawDataUdrSchema::writeContent(oldData, U2EntityRef(getRootDbi()->getDbiRef(), modStep.objectId), os);
+}
+
+void MysqlUdrDbi::redo(const U2SingleModStep& modStep, U2OpStatus& os) {
+    SAFE_POINT_EXT(modStep.modType == U2ModType::udrUpdated, os.setError("Unknown modStep"), );
+
+    MysqlTransaction t(db, os);
+    Q_UNUSED(t);
+
+    QByteArray oldData;
+    QByteArray newData;
+    bool ok = U2DbiPackUtils::unpackUdr(modStep.details, oldData, newData);
+    CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating UDR")), );
+
+    RawDataUdrSchema::writeContent(newData, U2EntityRef(getRootDbi()->getDbiRef(), modStep.objectId), os);
+}
+
 UdrRecordId MysqlUdrDbi::addRecord(const UdrSchemaId &schemaId, const QList<UdrValue> &data, U2OpStatus &os) {
     UdrRecordId result("", "");
     const UdrSchema *schema = udrSchema(schemaId, os);
@@ -198,6 +229,10 @@ OutputStream * MysqlUdrDbi::createOutputStream(const UdrRecordId &recordId, int
     return new MysqlBlobOutputStream(db, tableName(recordId.getSchemaId()).toLatin1(), field.getName(), recordId.getRecordId(), (int)size, os);
 }
 
+ModificationAction* MysqlUdrDbi::getModificationAction(const U2DataId &id) {
+    return new MysqlModificationAction(dbi, id);
+}
+
 /************************************************************************/
 /* SQL initialization */
 /************************************************************************/
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.h
index 703bba9..20b21e3 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlUdrDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,6 +32,9 @@ class MysqlUdrDbi : public UdrDbi, public MysqlChildDbiCommon {
 public:
     MysqlUdrDbi(MysqlDbi *dbi);
 
+    void undo(const U2SingleModStep& modStep, U2OpStatus& os);
+    void redo(const U2SingleModStep& modStep, U2OpStatus& os);
+
     UdrRecordId addRecord(const UdrSchemaId &schemaId, const QList<UdrValue> &data, U2OpStatus &os);
     void updateRecord(const UdrRecordId &recordId, const QList<UdrValue> &data, U2OpStatus &os);
     UdrRecord getRecord(const UdrRecordId &recordId, U2OpStatus &os);
@@ -43,6 +46,8 @@ public:
     OutputStream * createOutputStream(const UdrRecordId &recordId, int fieldNum, qint64 size, U2OpStatus &os);
     void initSqlSchema(U2OpStatus &os);
 
+    ModificationAction* getModificationAction(const U2DataId &id);
+
 private:
     void initSchema(const UdrSchema *schema, U2OpStatus &os);
     void createTable(const UdrSchema *schema, U2OpStatus &os);
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.cpp b/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.cpp
index 8acc37a..ad5185a 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ public:
         res.refData = q->getBlob(3);
         res.obsData = q->getBlob(4);
         res.publicId = q->getString(5);
-        res.additionalInfo = U2DbiUtils::unpackMap(q->getString(6));
+        res.additionalInfo = StrPackUtils::unpackMap(q->getString(6));
 
         return res;
     }
@@ -199,7 +199,7 @@ void MysqlVariantDbi::addVariantsToTrack(const U2VariantTrack& track, U2DbiItera
         q.bindBlob(":refData", var.refData);
         q.bindBlob(":obsData", var.obsData);
         q.bindString(":publicId", var.publicId);
-        q.bindString(":additionalInfo", U2DbiUtils::packMap(var.additionalInfo));
+        q.bindString(":additionalInfo", StrPackUtils::packMap(var.additionalInfo));
 
         var.id = q.insert(U2Type::VariantType);
         CHECK_OP(os, );
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.h b/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.h
index 3fd8493..7ce0339 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/MysqlVariantDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.cpp
index ab4c066..768cec9 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.h
index 785f2a4..3d92ad7 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.cpp
index 4d2d6ac..9f30f6d 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -300,7 +300,6 @@ void MysqlAssemblyUtils::addToCoverage(U2AssemblyCoverageImportInfo& ii, const U
     int startPos = (int)(read->leftmostPos / ii.coverageBasesPerPoint);
     int endPos = (int)((read->leftmostPos + read->effectiveLen - 1) / ii.coverageBasesPerPoint);
     if(endPos > csize - 1) {
-        coreLog.trace(QString("addToCoverage: endPos > csize - 1: %1 > %2").arg(endPos).arg(csize-1));
         endPos = csize - 1;
     }
     int* coverageData = ii.coverage.data();
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.h
index 38d3cfb..f32e010 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlAssemblyUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.cpp
index 24a896d..6c973ee 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -143,7 +143,7 @@ void MysqlDbiUtils::renameObject(MysqlModificationAction& updateAction, MysqlDbi
 
     QByteArray modDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
-        modDetails = PackUtils::packObjectNameDetails(object.visualName, newName);
+        modDetails = U2DbiPackUtils::packObjectNameDetails(object.visualName, newName);
     }
 
     object.visualName = newName;
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.h
index 2d8c4d8..bc248b0 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlDbiUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/U2Type.h>
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.cpp
index 5b24822..c101975 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtSql/QSqlError>
+#include <QSqlError>
 
 #include <U2Core/Log.h>
 #include <U2Core/U2DbiUtils.h>
@@ -311,6 +311,18 @@ U2DataId U2SqlQuery::insert(U2DataType type, const QByteArray& dbExtra) {
     return U2DbiUtils::toU2DataId(lastRowId, type, dbExtra);
 }
 
+qint32 U2SqlQuery::selectInt32() {
+    execute();
+    CHECK(!hasError(), -1);
+
+    if (step()) {
+        return getInt32(0);
+    }
+    else {
+        return -1;
+    }
+}
+
 qint64 U2SqlQuery::selectInt64() {
     execute();
     CHECK(!hasError(), -1);
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.h
index 631a7ec..fb87406 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlHelpers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/U2SqlHelpers.h>
 #include <U2Core/U2Type.h>
 
-#include <QtSql/QSqlQuery>
+#include <QSqlQuery>
 
 namespace U2 {
 
@@ -174,6 +174,9 @@ public:
     */
     qint64 update();
 
+    /** Selects a single int32 value */
+    qint32 selectInt32();
+
     /** Selects a single int64 value */
     qint64 selectInt64();
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.cpp
index 87b7169..99834e2 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,17 +29,15 @@
 
 namespace U2 {
 
-MysqlModificationAction::MysqlModificationAction(MysqlDbi* _dbi, const U2DataId& _masterObjId) :
-    dbi(_dbi),
-    masterObjId(_masterObjId),
-    trackMod(NoTrack)
+MysqlModificationAction::MysqlModificationAction(MysqlDbi* _dbi, const U2DataId& _masterObjId)
+    : ModificationAction(_dbi, _masterObjId)
 {
-    objIds.insert(masterObjId);
+
 }
 
 U2TrackModType MysqlModificationAction::prepare(U2OpStatus& os) {
     CHECK_OP(os, NoTrack);
-    MysqlTransaction t(dbi->getDbRef(), os);
+    MysqlTransaction t(getDbi()->getDbRef(), os);
     Q_UNUSED(t);
 
     trackMod = dbi->getObjectDbi()->getTrackModType(masterObjId, os);
@@ -55,17 +53,17 @@ U2TrackModType MysqlModificationAction::prepare(U2OpStatus& os) {
         // If a user mod step has already been created for this action
         // then it can not be deleted. The version must be incremented.
         // Obsolete duplicate step must be deleted
-        if (dbi->getMysqlModDbi()->isUserStepStarted(masterObjId)) {
-            dbi->getMysqlModDbi()->removeDuplicateUserStep(masterObjId, masterObjVersionToTrack, os);
+        if (getDbi()->getMysqlModDbi()->isUserStepStarted(masterObjId)) {
+            getDbi()->getMysqlModDbi()->removeDuplicateUserStep(masterObjId, masterObjVersionToTrack, os);
 
             // Increment the object version
             masterObjVersionToTrack++;
         }
 
         // A user pressed "Undo" (maybe several times), did another action => there is no more "Redo" history
-        dbi->getMysqlModDbi()->removeModsWithGreaterVersion(masterObjId, masterObjVersionToTrack, os);
+        getDbi()->getMysqlModDbi()->removeModsWithGreaterVersion(masterObjId, masterObjVersionToTrack, os);
         if (os.hasError()) {
-            dbi->getMysqlModDbi()->cleanUpAllStepsOnError();
+            getDbi()->getMysqlModDbi()->cleanUpAllStepsOnError();
             return trackMod;
         }
     }
@@ -84,7 +82,7 @@ void MysqlModificationAction::addModification(const U2DataId& objId, qint64 modT
         qint64 objVersion = dbi->getObjectDbi()->getObjectVersion(objId, os);
         CHECK_OP(os, );
 
-        if ((objId == masterObjId) && (dbi->getMysqlModDbi()->isUserStepStarted(masterObjId))) {
+        if ((objId == masterObjId) && (getDbi()->getMysqlModDbi()->isUserStepStarted(masterObjId))) {
             objVersion++;
         }
 
@@ -101,7 +99,7 @@ void MysqlModificationAction::addModification(const U2DataId& objId, qint64 modT
 void MysqlModificationAction::complete(U2OpStatus& os) {
     // TODO: rewrite it with another U2UseCommonMultiModStep
     CHECK_OP(os, );
-    MysqlTransaction t(dbi->getDbRef(), os);
+    MysqlTransaction t(getDbi()->getDbRef(), os);
     Q_UNUSED(t);
 
     // Save modification tracks, if required
@@ -110,16 +108,16 @@ void MysqlModificationAction::complete(U2OpStatus& os) {
             // do nothing
         }
         else if (1 == singleSteps.size()) {
-            dbi->getMysqlModDbi()->createModStep(masterObjId, singleSteps.first(), os);
+            getDbi()->getMysqlModDbi()->createModStep(masterObjId, singleSteps.first(), os);
             CHECK_OP(os, );
         }
         else {
-            MysqlUseCommonMultiModStep multi(dbi, masterObjId, os);
+            MysqlUseCommonMultiModStep multi(getDbi(), masterObjId, os);
             CHECK_OP(os, );
             Q_UNUSED(multi);
 
             foreach (U2SingleModStep singleStep, singleSteps) {
-                dbi->getMysqlModDbi()->createModStep(masterObjId, singleStep, os);
+                getDbi()->getMysqlModDbi()->createModStep(masterObjId, singleStep, os);
                 CHECK_OP(os, );
             }
         }
@@ -127,13 +125,14 @@ void MysqlModificationAction::complete(U2OpStatus& os) {
 
     // Increment versions of all objects
     foreach (const U2DataId& objId, objIds) {
-        MysqlObjectDbi::incrementVersion(objId, dbi->getDbRef(), os);
+        MysqlObjectDbi::incrementVersion(objId, getDbi()->getDbRef(), os);
         CHECK_OP(os, );
     }
 }
 
-U2TrackModType MysqlModificationAction::getTrackModType() const {
-    return trackMod;
+MysqlDbi* MysqlModificationAction::getDbi() const {
+    return static_cast<MysqlDbi*>(dbi);
+
 }
 
 }   // namespace U2
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.h
index ffabb85..a2b3f9b 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlModificationAction.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,14 @@
 
 #include <U2Core/U2Mod.h>
 
-#include <QtCore/QSet>
+#include <QSet>
 
 namespace U2 {
 
 class MysqlDbi;
 
 /** Helper class to track info about an object */
-class MysqlModificationAction {
+class MysqlModificationAction : public ModificationAction {
 public:
     MysqlModificationAction(MysqlDbi* dbi, const U2DataId& masterObjId);
 
@@ -55,15 +55,8 @@ public:
      */
     void complete(U2OpStatus& os);
 
-    /** Returns modification tracking type of the master object. */
-    U2TrackModType getTrackModType() const;
-
 private:
-    MysqlDbi*               dbi;
-    U2DataId                masterObjId;
-    U2TrackModType          trackMod;
-    QSet<U2DataId>          objIds;
-    QList<U2SingleModStep>  singleSteps;
+    MysqlDbi* getDbi() const;
 };
 
 }   // namespace U2
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp
index f3e5070..4bb6d4f 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.h
index 32fac61..9fcaaef 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlMultiTableAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_MYSQL_ASSEMBLY_MULTI_TABLE_DBI_H_
 #define _U2_MYSQL_ASSEMBLY_MULTI_TABLE_DBI_H_
 
-#include <QtCore/QReadWriteLock>
+#include <QReadWriteLock>
 
 #include <U2Core/U2SqlHelpers.h>
 
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.cpp
index 74cfecf..a667244 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.h b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.h
index 319186a..b739fb4 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/MysqlSingleTableAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.cpp
index 36660b8..655e98b 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.h
index 6f1d3b3..68bad14 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgrader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.cpp
index fed91e5..d4c9fcc 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -65,7 +65,7 @@ void MysqlUpgraderFrom_1_14_To_1_15::upgradeObjectDbi(U2OpStatus &os, MysqlDbRef
 
     const QStringList folders = dbi->getObjectDbi()->getFolders(os);
     const QString recycleBinPrefix = U2ObjectDbi::ROOT_FOLDER + U2ObjectDbi::RECYCLE_BIN_FOLDER + U2ObjectDbi::PATH_SEP;
-    QStrStrMap oldAndNewPathes;
+    StrStrMap oldAndNewPathes;
 
     foreach (const QString &folder, folders) {
         if (folder.startsWith(recycleBinPrefix)) {
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.h
index 7788511..0b2a48a 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_14_To_1_15.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.cpp
index 8f13594..7738752 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.h
index 4528384..f6a0d22 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_15_To_1_16.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.cpp
index 38b14a8..44fc340 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.h
index c5993c9..cdd9114 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_17.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.cpp
index 653cc8c..946ff99 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -68,7 +68,7 @@ void MysqlUpgraderFrom_1_16_To_1_24::upgradeVariantDbi(U2OpStatus &os) const {
 namespace {
 
 QString convertInfo(const QString &additionalInfo, const QStringList &header) {
-    QStrStrMap convertedInfoMap;
+    StrStrMap convertedInfoMap;
     CHECK(!additionalInfo.isEmpty(), QString());
     QStringList splittedInfo = additionalInfo.split("\t", QString::SkipEmptyParts);
     CHECK(!splittedInfo.isEmpty(), QString());
@@ -93,7 +93,7 @@ QString convertInfo(const QString &additionalInfo, const QStringList &header) {
         convertedInfoMap.insert(QString::number(qMax(maxVcf4MandatoryColumnNumber, header.size()) + 1), splittedInfo.join("\t"));
     }
 
-    return U2DbiUtils::packMap(convertedInfoMap);
+    return StrPackUtils::packMap(convertedInfoMap);
 }
 
 }
@@ -176,7 +176,7 @@ void MysqlUpgraderFrom_1_16_To_1_24::extractAttributes(U2OpStatus &os, QMap<U2Da
 
         addStringAttribute(os, variantTrack, U2VariantTrack::META_INFO_ATTIBUTE, metaInfo);
         CHECK_OP(os, );
-        addStringAttribute(os, variantTrack, U2VariantTrack::HEADER_ATTIBUTE, U2DbiUtils::packStringList(header));
+        addStringAttribute(os, variantTrack, U2VariantTrack::HEADER_ATTIBUTE, StrPackUtils::packStringList(header));
         CHECK_OP(os, );
 
         number++;
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.h
index 98619c3..7538bcb 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_16_To_1_24.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.cpp b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.cpp
index 8288370..b2e09e3 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.cpp
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.h b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.h
index 3ab2e36..d4f8ca8 100644
--- a/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.h
+++ b/src/corelibs/U2Formats/src/mysql_dbi/util/upgraders/MysqlUpgraderFrom_1_24_To_1_25.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.cpp
index 2008bf8..211cd55 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 #include <SamtoolsAdapter.h>
 
-#include <QtCore/QVarLengthArray>
+#include <QVarLengthArray>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Timer.h>
@@ -56,7 +56,7 @@ void SQLiteAssemblyDbi::initSqlSchema(U2OpStatus& os) {
     // cmethod - method used to handle compression of reads data
     // idata - additional indexing method data
     // cdata - additional compression method data
-    SQLiteQuery(getCreateAssemblyTableQuery(), db, os).execute();
+    SQLiteWriteQuery(getCreateAssemblyTableQuery(), db, os).execute();
 }
 
 void SQLiteAssemblyDbi::shutdown(U2OpStatus& os) {
@@ -74,7 +74,7 @@ AssemblyAdapter* SQLiteAssemblyDbi::getAdapter(const U2DataId& assemblyId, U2OpS
         return res;
     }
 
-    SQLiteQuery q("SELECT imethod, cmethod FROM Assembly WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT imethod, cmethod FROM Assembly WHERE object = ?1", db, os);
     q.bindDataId(1, assemblyId);
     if (!q.step()) {
         os.setError(U2DbiL10n::tr("There is no assembly object with the specified id."));
@@ -109,7 +109,7 @@ U2Assembly SQLiteAssemblyDbi::getAssemblyObject(const U2DataId& assemblyId, U2Op
 
     CHECK_OP(os, res);
 
-    SQLiteQuery q("SELECT Assembly.reference, Object.type, '' FROM Assembly, Object "
+    SQLiteReadQuery q("SELECT Assembly.reference, Object.type, '' FROM Assembly, Object "
                   " WHERE Assembly.object = ?1 AND Object.id = Assembly.reference", db, os);
 
     q.bindDataId(1, assemblyId);
@@ -211,7 +211,7 @@ void SQLiteAssemblyDbi::createAssemblyObject(U2Assembly& assembly, const QString
     QString elenMethod = dbi->getProperty(SQLITE_DBI_ASSEMBLY_READ_ELEN_METHOD_KEY, SQLITE_DBI_ASSEMBLY_READ_ELEN_METHOD_MULTITABLE_V1, os);
     //QString elenMethod = dbi->getProperty(SQLITE_DBI_ASSEMBLY_READ_ELEN_METHOD_KEY, SQLITE_DBI_ASSEMBLY_READ_ELEN_METHOD_SINGLE_TABLE, os);
 
-    SQLiteQuery q("INSERT INTO Assembly(object, reference, imethod, cmethod) VALUES(?1, ?2, ?3, ?4)", db, os);
+    SQLiteWriteQuery q("INSERT INTO Assembly(object, reference, imethod, cmethod) VALUES(?1, ?2, ?3, ?4)", db, os);
     q.bindDataId(1, assembly.id);
     q.bindDataId(2, assembly.referenceId);
     q.bindString(3, elenMethod);
@@ -257,7 +257,7 @@ void SQLiteAssemblyDbi::updateAssemblyObject(U2Assembly& assembly, U2OpStatus& o
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
 
-    SQLiteQuery q("UPDATE Assembly SET reference = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Assembly SET reference = ?1 WHERE object = ?2", db, os);
     q.bindDataId(1, assembly.referenceId);
     q.bindDataId(2, assembly.id);
     q.execute();
@@ -304,7 +304,7 @@ void SQLiteAssemblyDbi::removeTables(const U2DataId &assemblyId, U2OpStatus &os)
 
 void SQLiteAssemblyDbi::removeAssemblyEntry(const U2DataId &assemblyId, U2OpStatus &os) {
     static const QString queryString("DELETE FROM Assembly WHERE object = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     CHECK_OP(os, );
     q.bindDataId(1, assemblyId);
     q.execute();
@@ -558,7 +558,7 @@ int removeAll(QVector<U2CigarOp> *vector,const U2CigarOp &t)
 }
 }
 #endif
-void SQLiteAssemblyUtils::calculateCoverage(SQLiteQuery& q, const U2Region& r, U2AssemblyCoverageStat& coverage, U2OpStatus& os) {
+void SQLiteAssemblyUtils::calculateCoverage(SQLiteReadQuery& q, const U2Region& r, U2AssemblyCoverageStat& coverage, U2OpStatus& os) {
     int csize = coverage.size();
     SAFE_POINT(csize > 0, "illegal coverage vector size!", );
 
@@ -636,7 +636,6 @@ void SQLiteAssemblyUtils::addToCoverage(U2AssemblyCoverageImportInfo& ii, const
     int startPos = (int)(read->leftmostPos / ii.coverageBasesPerPoint);
     int endPos = (int)((read->leftmostPos + read->effectiveLen) / ii.coverageBasesPerPoint) - 1;
     if(endPos > csize - 1) {
-        coreLog.trace(QString("addToCoverage: endPos > csize - 1: %1 > %2").arg(endPos).arg(csize-1));
         endPos = csize - 1;
     }
     int* coverageData = ii.coverage.data();
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.h
index b6c77be..193eea1 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAssemblyDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-class SQLiteQuery;
+class SQLiteWriteQuery;
 class AssemblyAdapter;
 
 class SQLiteAssemblyDbi : public U2AssemblyDbi, public SQLiteChildDBICommon {
@@ -163,12 +163,12 @@ public:
 
     static void unpackData(const QByteArray& packed, U2AssemblyRead &read, U2OpStatus& os);
 
-    static void calculateCoverage(SQLiteQuery& q, const U2Region& r, U2AssemblyCoverageStat& coverage, U2OpStatus& os);
+    static void calculateCoverage(SQLiteReadQuery& q, const U2Region& r, U2AssemblyCoverageStat& coverage, U2OpStatus& os);
 
     static void addToCoverage(U2AssemblyCoverageImportInfo& cii, const U2AssemblyRead& read);
 };
 
-class SQLiteAssemblyNameFilter : public SqlRSFilter<U2AssemblyRead> {
+class SQLiteAssemblyNameFilter : public SQLiteResultSetFilter<U2AssemblyRead> {
 public:
     SQLiteAssemblyNameFilter(const QByteArray& expectedName) : name (expectedName) {}
     virtual bool filter(const U2AssemblyRead& r)  {return name == r->name;}
@@ -177,12 +177,12 @@ protected:
 
 };
 
-class SimpleAssemblyReadLoader: public SqlRSLoader<U2AssemblyRead> {
+class SimpleAssemblyReadLoader: public SQLiteResultSetLoader<U2AssemblyRead> {
 public:
     U2AssemblyRead load(SQLiteQuery* q);
 };
 
-class SimpleAssemblyReadPackedDataLoader : public SqlRSLoader<PackAlgorithmData> {
+class SimpleAssemblyReadPackedDataLoader : public SQLiteResultSetLoader<PackAlgorithmData> {
 public:
     virtual PackAlgorithmData load(SQLiteQuery* q);
 };
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.cpp
index 10614a1..6c24a22 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,47 +42,47 @@ void SQLiteAttributeDbi::initSqlSchema(U2OpStatus& os) {
     // oextra, cextra -> object and child db extra
     // version -> object version is attribute is valid for
     // name -> name of the attribute
-    SQLiteQuery("CREATE TABLE Attribute (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE Attribute (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, "
         "object INTEGER, child INTEGER, otype INTEGER NOT NULL, ctype INTEGER, oextra BLOB NOT NULL, cextra BLOB, "
         "version INTEGER NOT NULL, name TEXT NOT NULL, "
         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE)" , db, os).execute();
 
     //TODO: check if index is efficient for getting attribute for specific object
-    SQLiteQuery("CREATE INDEX Attribute_name on Attribute(name)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX Attribute_object on Attribute(object)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX Attribute_name on Attribute(name)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX Attribute_object on Attribute(object)" , db, os).execute();
 
-    SQLiteQuery("CREATE TABLE IntegerAttribute (attribute INTEGER, value INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE IntegerAttribute (attribute INTEGER, value INTEGER NOT NULL, "
         "FOREIGN KEY(attribute) REFERENCES Attribute(id) ON DELETE CASCADE)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX IntegerAttribute_attribute on IntegerAttribute(attribute)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IntegerAttribute_attribute on IntegerAttribute(attribute)" , db, os).execute();
 
-    SQLiteQuery("CREATE TABLE RealAttribute (attribute INTEGER, value REAL NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE RealAttribute (attribute INTEGER, value REAL NOT NULL, "
         "FOREIGN KEY(attribute) REFERENCES Attribute(id) ON DELETE CASCADE)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX RealAttribute_attribute on RealAttribute(attribute)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX RealAttribute_attribute on RealAttribute(attribute)" , db, os).execute();
 
-    SQLiteQuery("CREATE TABLE StringAttribute (attribute INTEGER, value TEXT NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE StringAttribute (attribute INTEGER, value TEXT NOT NULL, "
         "FOREIGN KEY(attribute) REFERENCES Attribute(id) ON DELETE CASCADE)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX StringAttribute_attribute on StringAttribute(attribute)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX StringAttribute_attribute on StringAttribute(attribute)" , db, os).execute();
 
-    SQLiteQuery("CREATE TABLE ByteArrayAttribute (attribute INTEGER, value BLOB NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE ByteArrayAttribute (attribute INTEGER, value BLOB NOT NULL, "
         "FOREIGN KEY(attribute) REFERENCES Attribute(id) ON DELETE CASCADE)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX ByteArrayAttribute_attribute on ByteArrayAttribute(attribute)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX ByteArrayAttribute_attribute on ByteArrayAttribute(attribute)" , db, os).execute();
 }
 
 /** Returns all attribute names available in the database */
 QStringList SQLiteAttributeDbi::getAvailableAttributeNames(U2OpStatus& os) {
-    return SQLiteQuery("SELECT DISTINCT name FROM Attribute", db, os).selectStrings();
+    return SQLiteReadQuery("SELECT DISTINCT name FROM Attribute", db, os).selectStrings();
 }
 
 /** Returns all attribute ids for the given object */
 QList<U2DataId> SQLiteAttributeDbi::getObjectAttributes(const U2DataId& objectId, const QString& name, U2OpStatus& os) {
     if (name.isEmpty()) {
         static const QString queryString("SELECT id, type, '' FROM Attribute WHERE object = ?1 ORDER BY id");
-        SQLiteQuery q(queryString, db, os);
+        SQLiteReadQuery q(queryString, db, os);
         q.bindDataId(1, objectId);
         return q.selectDataIdsExt();
     }
     static const QString queryString("SELECT id, type, '' FROM Attribute WHERE object = ?1 AND name = ?2 ORDER BY id");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, objectId);
     q.bindString(2, name);
     return q.selectDataIdsExt();
@@ -92,13 +92,13 @@ QList<U2DataId> SQLiteAttributeDbi::getObjectAttributes(const U2DataId& objectId
 QList<U2DataId> SQLiteAttributeDbi::getObjectPairAttributes(const U2DataId& objectId, const U2DataId& childId, const QString& name, U2OpStatus& os) {
     if (name.isEmpty()) {
         static const QString queryString("SELECT id, type, '' FROM Attribute WHERE object = ?1 AND child = ?2 ORDER BY id");
-        SQLiteQuery q(queryString, db, os);
+        SQLiteReadQuery q(queryString, db, os);
         q.bindDataId(1, objectId);
         q.bindDataId(2, childId);
         return q.selectDataIdsExt();
     }
     static const QString queryString("SELECT id, type, '' FROM Attribute WHERE object = ?1 AND child = ?2 AND name = ?3 ORDER BY id");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, objectId);
     q.bindDataId(2, childId);
     q.bindString(3, name);
@@ -108,7 +108,7 @@ QList<U2DataId> SQLiteAttributeDbi::getObjectPairAttributes(const U2DataId& obje
 /** Loads int64 attribute by id */
 U2IntegerAttribute SQLiteAttributeDbi::getIntegerAttribute(const U2DataId& attributeId, U2OpStatus& os) {
     static const QString queryString(buildSelectAttributeQuery("IntegerAttribute"));
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, attributeId);
     U2IntegerAttribute res;
     readAttribute(q, res);
@@ -120,7 +120,7 @@ U2IntegerAttribute SQLiteAttributeDbi::getIntegerAttribute(const U2DataId& attri
 /** Loads real64 attribute by id */
 U2RealAttribute SQLiteAttributeDbi::getRealAttribute(const U2DataId& attributeId, U2OpStatus& os) {
     static const QString queryString(buildSelectAttributeQuery("RealAttribute"));
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, attributeId);
     U2RealAttribute res;
     readAttribute(q, res);
@@ -132,7 +132,7 @@ U2RealAttribute SQLiteAttributeDbi::getRealAttribute(const U2DataId& attributeId
 /** Loads String attribute by id */
 U2StringAttribute SQLiteAttributeDbi::getStringAttribute(const U2DataId& attributeId, U2OpStatus& os) {
     static const QString queryString(buildSelectAttributeQuery("StringAttribute"));
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, attributeId);
     U2StringAttribute res;
     readAttribute(q, res);
@@ -144,7 +144,7 @@ U2StringAttribute SQLiteAttributeDbi::getStringAttribute(const U2DataId& attribu
 /** Loads byte attribute by id */
 U2ByteArrayAttribute SQLiteAttributeDbi::getByteArrayAttribute(const U2DataId& attributeId, U2OpStatus& os) {
     static const QString queryString(buildSelectAttributeQuery("ByteArrayAttribute"));
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, attributeId);
     U2ByteArrayAttribute res;
     readAttribute(q, res);
@@ -159,7 +159,7 @@ QString SQLiteAttributeDbi::buildSelectAttributeQuery(const QString& attributeTa
             " FROM Attribute AS a, " + attributeTable + " AS t WHERE a.id = ?1 AND t.attribute = a.id";
 }
 
-void SQLiteAttributeDbi::readAttribute(SQLiteQuery &q, U2Attribute& attr) {
+void SQLiteAttributeDbi::readAttribute(SQLiteReadQuery &q, U2Attribute& attr) {
     if (q.hasError()) {
         return;
     }
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.h
index 9d98523..4c057f7 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteAttributeDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,6 @@
 
 namespace U2 {
 
-class SQLiteQuery;
-
 class SQLiteAttributeDbi : public U2AttributeDbi, public SQLiteChildDBICommon {
 
 public:
@@ -103,7 +101,7 @@ private:
 
     QString buildSelectAttributeQuery(const QString& attributeTable);
 
-    void readAttribute(SQLiteQuery &q, U2Attribute& attr);
+    void readAttribute(SQLiteReadQuery &q, U2Attribute& attr);
 };
 
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
index 637203b..863fcdc 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.h
index 14e8d45..c548d7a 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobInputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
index 4b2557a..37ae359 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -54,7 +54,7 @@ void SQLiteBlobOutputStream::write(const char *buffer, int length, U2OpStatus &o
 }
 
 void SQLiteBlobOutputStream::update(DbRef *db, const QByteArray &tableId, const QByteArray &columnId, const U2DataId &rowId, int size, U2OpStatus &os) {
-    SQLiteQuery q("UPDATE " + tableId + " SET " + columnId + " = ?1 WHERE " + UdrSchema::RECORD_ID_FIELD_NAME + " = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE " + tableId + " SET " + columnId + " = ?1 WHERE " + UdrSchema::RECORD_ID_FIELD_NAME + " = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindZeroBlob(1, size);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.h
index 83d5c23..6e9b5ed 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteBlobOutputStream.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
index a736be2..d6c7cfe 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@
 #include <U2Core/Version.h>
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <3rdparty/sqlite3/sqlite3.h>
 
@@ -157,7 +157,7 @@ SQLiteFeatureDbi* SQLiteDbi::getSQLiteFeatureDbi() const {
 }
 
 QString SQLiteDbi::getProperty(const QString& name, const QString& defaultValue, U2OpStatus& os) {
-    SQLiteQuery q("SELECT value FROM Meta WHERE name = ?1", db, os);
+    SQLiteReadQuery q("SELECT value FROM Meta WHERE name = ?1", db, os);
     q.bindString(1, name);
     bool found = q.step();
     if (os.hasError()) {
@@ -173,11 +173,11 @@ void SQLiteDbi::setProperty(const QString& name, const QString& value, U2OpStatu
     if (os.hasError()) {
         return;
     }
-    SQLiteQuery q1("DELETE FROM Meta WHERE name = ?1", db, os);
+    SQLiteWriteQuery q1("DELETE FROM Meta WHERE name = ?1", db, os);
     q1.bindString(1, name);
     q1.execute();
 
-    SQLiteQuery q2("INSERT INTO Meta(name, value) VALUES (?1, ?2)", db, os);
+    SQLiteWriteQuery q2("INSERT INTO Meta(name, value) VALUES (?1, ?2)", db, os);
     q2.bindString(1, name);
     q2.bindString(2, value);
     q2.execute();
@@ -242,7 +242,7 @@ bool SQLiteDbi::isInitialized(U2OpStatus &os) {
 
 void SQLiteDbi::populateDefaultSchema(U2OpStatus& os) {
     // meta table, stores general db info
-    SQLiteQuery("CREATE TABLE Meta(name TEXT NOT NULL, value TEXT NOT NULL)", db, os).execute();
+    SQLiteWriteQuery("CREATE TABLE Meta(name TEXT NOT NULL, value TEXT NOT NULL)", db, os).execute();
 
     objectDbi->initSqlSchema(os);
     objectRelationsDbi->initSqlSchema(os);
@@ -351,18 +351,18 @@ void SQLiteDbi::init(const QHash<QString, QString>& props, const QVariantMap&, U
             break;
         }
 
-        SQLiteQuery("PRAGMA synchronous = OFF", db, os).execute();
+        SQLiteWriteQuery("PRAGMA synchronous = OFF", db, os).execute();
         QString lockingMode = props.value(U2DbiOptions::U2_DBI_LOCKING_MODE, "exclusive");
         if (lockingMode == "normal") {
-            SQLiteQuery("PRAGMA main.locking_mode = NORMAL", db, os).execute();
+            SQLiteWriteQuery("PRAGMA main.locking_mode = NORMAL", db, os).execute();
         } else {
-            SQLiteQuery("PRAGMA main.locking_mode = EXCLUSIVE", db, os).execute();
+            SQLiteWriteQuery("PRAGMA main.locking_mode = EXCLUSIVE", db, os).execute();
         }
-        SQLiteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
-        SQLiteQuery("PRAGMA journal_mode = MEMORY", db, os).execute();
-        SQLiteQuery("PRAGMA cache_size = 50000", db, os).execute();
-        SQLiteQuery("PRAGMA recursive_triggers = ON", db, os).execute();
-        SQLiteQuery("PRAGMA foreign_keys = ON", db, os).execute();
+        SQLiteWriteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
+        SQLiteWriteQuery("PRAGMA journal_mode = MEMORY", db, os).execute();
+        SQLiteWriteQuery("PRAGMA cache_size = 50000", db, os).execute();
+        SQLiteWriteQuery("PRAGMA recursive_triggers = ON", db, os).execute();
+        SQLiteWriteQuery("PRAGMA foreign_keys = ON", db, os).execute();
         //SQLiteQuery("PRAGMA page_size = 4096", db, os).execute();
         //TODO: int sqlite3_enable_shared_cache(int);
         //TODO: read_uncommitted
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.h
index e65da95..262c931 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,18 +32,18 @@ struct sqlite3;
 
 namespace U2 {
 
-class SQLiteObjectDbi;
-class SQLiteObjectRelationsDbi;
-class SQLiteSequenceDbi;
-class SQLiteMsaDbi;
+class DbRef;
 class SQLiteAssemblyDbi;
-class SQLiteCrossDatabaseReferenceDbi;
 class SQLiteAttributeDbi;
-class SQLiteVariantDbi;
+class SQLiteCrossDatabaseReferenceDbi;
 class SQLiteFeatureDbi;
 class SQLiteModDbi;
+class SQLiteMsaDbi;
+class SQLiteObjectDbi;
+class SQLiteObjectRelationsDbi;
+class SQLiteSequenceDbi;
 class SQLiteUdrDbi;
-class DbRef;
+class SQLiteVariantDbi;
 
 /** Name of the init property used to indicate assembly reads storage method for all new assemblies */
 #define SQLITE_DBI_ASSEMBLY_READ_ELEN_METHOD_KEY "sqlite-assembly-reads-elen-method"
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
index 5409607..14bb38a 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,36 +46,36 @@ static QString getQueryForFeatureDeletionTrigger() {
 
 void SQLiteFeatureDbi::initSqlSchema(U2OpStatus& os) {
     //nameHash is used for better indexing
-    SQLiteQuery("CREATE TABLE Feature (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
+    SQLiteWriteQuery("CREATE TABLE Feature (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
         "class INTEGER NOT NULL, type INTEGER NOT NULL, parent INTEGER, root INTEGER, nameHash INTEGER, name TEXT, "
         "sequence INTEGER, strand INTEGER NOT NULL, "
         "start INTEGER NOT NULL DEFAULT 0, len INTEGER NOT NULL DEFAULT 0)", db, os).execute();
 
-    SQLiteQuery("CREATE TABLE FeatureKey (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
+    SQLiteWriteQuery("CREATE TABLE FeatureKey (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
         "feature INTEGER NOT NULL, name TEXT NOT NULL, value TEXT NOT NULL, "
         "FOREIGN KEY(feature) REFERENCES Feature(id) ON DELETE CASCADE)", db, os).execute();
 
     // annotation table object
-    SQLiteQuery("CREATE TABLE AnnotationTable (object INTEGER PRIMARY KEY, rootId INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE AnnotationTable (object INTEGER PRIMARY KEY, rootId INTEGER NOT NULL, "
         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE, "
         "FOREIGN KEY(rootId) REFERENCES Feature(id) ON DELETE CASCADE)", db, os).execute();
 
     //Feature index
-    SQLiteQuery("CREATE VIRTUAL TABLE FeatureLocationRTreeIndex USING rtree_i32(id, start, end)",
+    SQLiteWriteQuery("CREATE VIRTUAL TABLE FeatureLocationRTreeIndex USING rtree_i32(id, start, end)",
         db, os).execute();
 
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS FeatureRootIndex ON Feature(root, class)" ,db, os).execute();
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS FeatureParentIndex ON Feature(parent)", db, os).execute();
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS FeatureNameIndex ON Feature(root, nameHash)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS FeatureRootIndex ON Feature(root, class)" ,db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS FeatureParentIndex ON Feature(parent)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS FeatureNameIndex ON Feature(root, nameHash)", db, os).execute();
 
     //FeatureKey index
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS FeatureKeyIndex ON FeatureKey(feature)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS FeatureKeyIndex ON FeatureKey(feature)", db, os).execute();
 
     //Deletion triggers
-    SQLiteQuery(getQueryForFeatureDeletionTrigger(), db, os).execute();
+    SQLiteWriteQuery(getQueryForFeatureDeletionTrigger(), db, os).execute();
 }
 
-class SqlFeatureRSLoader : public SqlRSLoader<U2Feature> {
+class SqlFeatureRSLoader : public SQLiteResultSetLoader<U2Feature> {
 public:
     U2Feature load(SQLiteQuery* q) {
         return loadStatic(q);
@@ -98,7 +98,7 @@ public:
     }
 };
 
-class SqlFeatureFilter: public SqlRSFilter<U2Feature>{
+class SqlFeatureFilter: public SQLiteResultSetFilter<U2Feature>{
 public:
     SqlFeatureFilter(const QString& name, const U2DataId& _seqId){
         nameToFilter = name;
@@ -122,7 +122,7 @@ void SQLiteFeatureDbi::createAnnotationTableObject(U2AnnotationTable &table, con
     CHECK_OP(os,);
 
     static const QString queryString("INSERT INTO AnnotationTable (object, rootId) VALUES(?1, ?2)");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     CHECK_OP(os,);
     q.bindDataId(1, table.id);
     q.bindDataId(2, table.rootFeature);
@@ -134,7 +134,7 @@ U2AnnotationTable SQLiteFeatureDbi::getAnnotationTableObject(const U2DataId &tab
 
     DBI_TYPE_CHECK(tableId, U2Type::AnnotationTable, os, result);
 
-    SQLiteQuery q("SELECT rootId, name FROM AnnotationTable, Object WHERE object = ?1 AND id = ?1", db, os);
+    SQLiteReadQuery q("SELECT rootId, name FROM AnnotationTable, Object WHERE object = ?1 AND id = ?1", db, os);
     q.bindDataId(1, tableId);
     if (q.step()) {
         result.rootFeature = q.getDataId(0, U2Type::Feature);
@@ -152,7 +152,7 @@ void SQLiteFeatureDbi::removeAnnotationTableData(const U2DataId &tableId, U2OpSt
     DBI_TYPE_CHECK(tableId, U2Type::AnnotationTable, os,);
     static const QString rootQueryStr = "(SELECT rootId FROM AnnotationTable WHERE object = ?1)";
 
-    SQLiteQuery removeAnnTableQuery(QString("DELETE FROM Feature WHERE root IN %1 OR id IN %1").arg(rootQueryStr), db, os);
+    SQLiteWriteQuery removeAnnTableQuery(QString("DELETE FROM Feature WHERE root IN %1 OR id IN %1").arg(rootQueryStr), db, os);
     removeAnnTableQuery.bindDataId(1, tableId);
     removeAnnTableQuery.execute();
 }
@@ -162,7 +162,7 @@ U2Feature SQLiteFeatureDbi::getFeature(const U2DataId& featureId, U2OpStatus& os
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os, res);
 
     const QString queryString("SELECT " + FDBI_FIELDS + " FROM Feature AS f WHERE id = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, featureId);
     q.execute();
     CHECK_OP(os, res);
@@ -246,7 +246,7 @@ QSharedPointer<SQLiteQuery> SQLiteFeatureDbi::createFeatureQuery(const QString &
 
     bool useParent = !fq.parentFeatureId.isEmpty();
     if (useParent) {
-        DBI_TYPE_CHECK(fq.parentFeatureId, U2Type::Feature, os, QSharedPointer<SQLiteQuery>());
+        DBI_TYPE_CHECK(fq.parentFeatureId, U2Type::Feature, os, QSharedPointer<SQLiteReadQuery>());
         add(wherePart, "f.parent", "=", n);
     } else if (fq.topLevelOnly) {
         add(wherePart, "f.parent", "=", n);
@@ -254,7 +254,7 @@ QSharedPointer<SQLiteQuery> SQLiteFeatureDbi::createFeatureQuery(const QString &
 
     bool useRoot = !fq.rootFeatureId.isEmpty();
     if (useRoot) {
-        DBI_TYPE_CHECK(fq.rootFeatureId, U2Type::Feature, os, QSharedPointer<SQLiteQuery>());
+        DBI_TYPE_CHECK(fq.rootFeatureId, U2Type::Feature, os, QSharedPointer<SQLiteReadQuery>());
         add(wherePart, "f.root", "=", n);
     }
 
@@ -275,7 +275,7 @@ QSharedPointer<SQLiteQuery> SQLiteFeatureDbi::createFeatureQuery(const QString &
 
     bool useSequence = !fq.sequenceId.isEmpty();
     if (useSequence) {
-        DBI_TYPE_CHECK(fq.sequenceId, U2Type::Sequence, os, QSharedPointer<SQLiteQuery>());
+        DBI_TYPE_CHECK(fq.sequenceId, U2Type::Sequence, os, QSharedPointer<SQLiteReadQuery>());
         add(wherePart, "f.sequence", "=", n);
     }
 
@@ -351,10 +351,10 @@ QSharedPointer<SQLiteQuery> SQLiteFeatureDbi::createFeatureQuery(const QString &
 
     QSharedPointer<SQLiteQuery> q;
     if (NULL == trans) {
-        q = QSharedPointer<SQLiteQuery>(new SQLiteQuery(fullQuery, db, os));
+        q = QSharedPointer<SQLiteReadQuery>(new SQLiteReadQuery(fullQuery, db, os));
     } else {
-        q = QSharedPointer<SQLiteQuery>(trans->getPreparedQuery(fullQuery, db, os));
-        CHECK_OP(os, QSharedPointer<SQLiteQuery>());
+        q = trans->getPreparedQuery(fullQuery, db, os);
+        CHECK_OP(os, QSharedPointer<SQLiteReadQuery>());
     }
     int m = 0;
 
@@ -415,13 +415,13 @@ qint64 SQLiteFeatureDbi::countFeatures(const FeatureQuery &fq, U2OpStatus &os) {
 U2DbiIterator<U2Feature>* SQLiteFeatureDbi::getFeatures(const FeatureQuery& fq, U2OpStatus& os) {
     QSharedPointer<SQLiteQuery> q = createFeatureQuery("SELECT " + FDBI_FIELDS, fq, true, os);
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(), NULL, U2Feature(), os);
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(), NULL, U2Feature(), os);
 }
 
 QList<U2FeatureKey> SQLiteFeatureDbi::getFeatureKeys(const U2DataId& featureId, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
     static const QString queryString("SELECT name, value FROM FeatureKey WHERE feature = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
 
     q.bindDataId(1, featureId);
     CHECK_OP(os, QList<U2FeatureKey>());
@@ -437,7 +437,7 @@ QList<U2FeatureKey> SQLiteFeatureDbi::getFeatureKeys(const U2DataId& featureId,
 
 namespace {
 
-void addKeyCommon(SQLiteQuery& qk, const U2DataId& featureId, const U2FeatureKey& key) {
+void addKeyCommon(SQLiteWriteQuery& qk, const U2DataId& featureId, const U2FeatureKey& key) {
     qk.reset();
     qk.bindDataId(1, featureId);
     qk.bindString(2, key.name);
@@ -542,14 +542,14 @@ void SQLiteFeatureDbi::createFeature(U2Feature& feature, const QList<U2FeatureKe
 void SQLiteFeatureDbi::addKey(const U2DataId& featureId, const U2FeatureKey& key, U2OpStatus& os) {
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery qk("INSERT INTO FeatureKey(feature, name, value) VALUES(?1, ?2, ?3)"  , db, os);
+    SQLiteWriteQuery qk("INSERT INTO FeatureKey(feature, name, value) VALUES(?1, ?2, ?3)"  , db, os);
     addKeyCommon(qk, featureId, key);
 }
 
 void SQLiteFeatureDbi::removeAllKeys(const U2DataId& featureId, const QString& keyName, U2OpStatus& os) {
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery q("DELETE FROM FeatureKey WHERE feature = ?1 AND name = ?2" , db, os);
+    SQLiteWriteQuery q("DELETE FROM FeatureKey WHERE feature = ?1 AND name = ?2" , db, os);
     q.bindDataId(1, featureId);
     q.bindString(2, keyName);
     q.execute();
@@ -558,7 +558,7 @@ void SQLiteFeatureDbi::removeAllKeys(const U2DataId& featureId, const QString& k
 void SQLiteFeatureDbi::removeKey(const U2DataId& featureId, const U2FeatureKey& key, U2OpStatus& os) {
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery q("DELETE FROM FeatureKey WHERE feature = ?1 AND name = ?2 AND value = ?3" , db, os);
+    SQLiteWriteQuery q("DELETE FROM FeatureKey WHERE feature = ?1 AND name = ?2 AND value = ?3" , db, os);
     q.bindDataId(1, featureId);
     q.bindString(2, key.name);
     q.bindString(3, key.value);
@@ -568,7 +568,7 @@ void SQLiteFeatureDbi::removeKey(const U2DataId& featureId, const U2FeatureKey&
 void SQLiteFeatureDbi::updateName(const U2DataId& featureId, const QString& newName, U2OpStatus& os){
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery qf("UPDATE Feature SET name = ?3, nameHash = ?2 WHERE id = ?1" , db, os);
+    SQLiteWriteQuery qf("UPDATE Feature SET name = ?3, nameHash = ?2 WHERE id = ?1" , db, os);
     qf.bindDataId(1, featureId);
     qf.bindInt32(2, qHash(newName));
     qf.bindString(3, newName);
@@ -579,7 +579,7 @@ void SQLiteFeatureDbi::updateParentId(const U2DataId& featureId, const U2DataId&
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
     DBI_TYPE_CHECK(parentId, U2Type::Feature, os,);
 
-    SQLiteQuery qf("UPDATE Feature SET parent = ?1 WHERE id = ?2" , db, os);
+    SQLiteWriteQuery qf("UPDATE Feature SET parent = ?1 WHERE id = ?2" , db, os);
     qf.bindDataId(1, parentId);
     qf.bindDataId(2, featureId);
     qf.execute();
@@ -589,7 +589,7 @@ void SQLiteFeatureDbi::updateSequenceId(const U2DataId &featureId, const U2DataI
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
     DBI_TYPE_CHECK(seqId, U2Type::Sequence, os,);
 
-    SQLiteQuery qf("UPDATE Feature SET sequence = ?1 WHERE id = ?2" , db, os);
+    SQLiteWriteQuery qf("UPDATE Feature SET sequence = ?1 WHERE id = ?2" , db, os);
     qf.bindDataId(1, seqId);
     qf.bindDataId(2, featureId);
     qf.execute();
@@ -598,7 +598,7 @@ void SQLiteFeatureDbi::updateSequenceId(const U2DataId &featureId, const U2DataI
 void SQLiteFeatureDbi::updateKeyValue(const U2DataId& featureId, const U2FeatureKey& key, U2OpStatus& os) {
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery q("UPDATE FeatureKey SET value = ?3 WHERE feature = ?1 AND name = ?2" , db, os);
+    SQLiteWriteQuery q("UPDATE FeatureKey SET value = ?3 WHERE feature = ?1 AND name = ?2" , db, os);
     q.bindDataId(1, featureId);
     q.bindString(2, key.name);
     q.bindString(3, key.value);
@@ -609,7 +609,7 @@ bool SQLiteFeatureDbi::getKeyValue(const U2DataId &featureId, U2FeatureKey &key,
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os, false);
 
     static const QString queryString("SELECT value FROM FeatureKey WHERE feature = ?1 AND name = ?2");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     CHECK_OP(os, false);
 
     q.bindDataId(1, featureId);
@@ -628,7 +628,7 @@ void SQLiteFeatureDbi::updateLocation(const U2DataId& featureId, const U2Feature
 
     SQLiteTransaction t(db, os);
 
-    SQLiteQuery qf("UPDATE Feature SET strand = ?1, start = ?2, len = ?3 WHERE id = ?4" , db, os);
+    SQLiteWriteQuery qf("UPDATE Feature SET strand = ?1, start = ?2, len = ?3 WHERE id = ?4" , db, os);
     qf.bindInt32(1, location.strand.getDirectionValue());
     qf.bindInt64(2, location.region.startPos);
     qf.bindInt64(3, location.region.length);
@@ -636,7 +636,7 @@ void SQLiteFeatureDbi::updateLocation(const U2DataId& featureId, const U2Feature
     qf.execute();
     CHECK_OP(os,);
 
-    SQLiteQuery qr("UPDATE FeatureLocationRTreeIndex SET start = ?1, end = ?2 WHERE id = ?3" , db, os);
+    SQLiteWriteQuery qr("UPDATE FeatureLocationRTreeIndex SET start = ?1, end = ?2 WHERE id = ?3" , db, os);
     qr.bindInt64(1, location.region.startPos);
     qr.bindInt64(2, location.region.endPos());
     qr.bindDataId(3, featureId);
@@ -646,7 +646,7 @@ void SQLiteFeatureDbi::updateLocation(const U2DataId& featureId, const U2Feature
 void SQLiteFeatureDbi::updateType(const U2DataId &featureId, U2FeatureType newType, U2OpStatus &os) {
     DBI_TYPE_CHECK(featureId, U2Type::Feature, os,);
 
-    SQLiteQuery qf("UPDATE Feature SET type = ?2 WHERE id = ?1" , db, os);
+    SQLiteWriteQuery qf("UPDATE Feature SET type = ?2 WHERE id = ?1" , db, os);
     qf.bindDataId(1, featureId);
     qf.bindInt32(2, newType);
     qf.execute();
@@ -657,7 +657,7 @@ void SQLiteFeatureDbi::removeFeature(const U2DataId& featureId, U2OpStatus& os)
 
     SQLiteTransaction t(db, os);
 
-    SQLiteQuery qk("DELETE FROM Feature WHERE id = ?1" , db, os);
+    SQLiteWriteQuery qk("DELETE FROM Feature WHERE id = ?1" , db, os);
     qk.bindDataId(1, featureId);
     qk.execute();
 }
@@ -669,7 +669,7 @@ void SQLiteFeatureDbi::removeFeaturesByParent(const U2DataId &parentId, U2OpStat
 
     SQLiteTransaction t(db, os);
 
-    SQLiteQuery qf("DELETE FROM Feature WHERE parent = ?1"
+    SQLiteWriteQuery qf("DELETE FROM Feature WHERE parent = ?1"
         + (includeParent ? QString(" OR id = ?2") : ""), db, os);
     qf.bindDataId(1, parentId);
     if (includeParent) {
@@ -690,7 +690,7 @@ void executeDeleteFeaturesByParentsQuery(const QList<U2DataId> &parentIds, DbRef
     idsList.chop(1); // remove last comma
     idsList += ")";
 
-    SQLiteQuery qf(QString("DELETE FROM Feature WHERE parent IN %1 OR id IN %1").arg(idsList), db, os);
+    SQLiteWriteQuery qf(QString("DELETE FROM Feature WHERE parent IN %1 OR id IN %1").arg(idsList), db, os);
     for (int i = 1, n = parentIds.count(); i <= n; i++) {
         qf.bindDataId(i, parentIds.at(i - 1));
     }
@@ -724,10 +724,10 @@ void SQLiteFeatureDbi::removeFeaturesByRoot(const U2DataId &rootId, U2OpStatus &
 
     SQLiteTransaction t(db, os);
 
-    SQLiteQuery("DROP TRIGGER FeatureDeletion", db, os).execute();
+    SQLiteWriteQuery("DROP TRIGGER FeatureDeletion", db, os).execute();
     CHECK_OP(os,);
 
-    SQLiteQuery qf("DELETE FROM Feature WHERE root = ?1"
+    SQLiteWriteQuery qf("DELETE FROM Feature WHERE root = ?1"
         + (includeParent ? QString(" OR id = ?2") : ""), db, os);
     qf.bindDataId(1, rootId);
     if (includeParent) {
@@ -736,7 +736,7 @@ void SQLiteFeatureDbi::removeFeaturesByRoot(const U2DataId &rootId, U2OpStatus &
     qf.execute();
     CHECK_OP(os,);
 
-    SQLiteQuery(getQueryForFeatureDeletionTrigger(), db, os).execute();
+    SQLiteWriteQuery(getQueryForFeatureDeletionTrigger(), db, os).execute();
 }
 
 U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByRegion(const U2Region& reg, const U2DataId& rootId, const QString& featureName,
@@ -759,7 +759,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByRegion(const U2Region&
     }
 
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(),
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(),
         new SqlFeatureFilter(featureName, seqId), U2Feature(), os);
 }
 
@@ -772,7 +772,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesBySequence(const QString
     q->bindDataId(1, seqId);
     q->bindString(2, featureName);
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(), NULL, U2Feature(), os);
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(), NULL, U2Feature(), os);
 }
 
 U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByParent(const U2DataId &parentId, const QString &featureName, const U2DataId &seqId,
@@ -789,7 +789,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByParent(const U2DataId
         q->bindDataId(2, parentId);
     }
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(),
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(),
         new SqlFeatureFilter(featureName, seqId), U2Feature(), os);
 }
 
@@ -801,7 +801,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByRoot(const U2DataId &r
 
     q->bindDataId(1, rootId);
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(),
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(),
         new SqlFeatureFilter(QString(), U2DataId()), U2Feature(), os);
 }
 
@@ -814,7 +814,7 @@ U2DbiIterator<U2Feature> * SQLiteFeatureDbi::getFeaturesByName(const U2DataId &r
     q->bindDataId(1, rootId);
     q->bindInt32(2, qHash(name));
     CHECK_OP(os, NULL);
-    return new SqlRSIterator<U2Feature>(q, new SqlFeatureRSLoader(), new SqlFeatureFilter(QString(), U2DataId()), U2Feature(), os);
+    return new SQLiteResultSetIterator<U2Feature>(q, new SqlFeatureRSLoader(), new SqlFeatureFilter(QString(), U2DataId()), U2Feature(), os);
 }
 
 QList<FeatureAndKey> SQLiteFeatureDbi::getFeatureTable(const U2DataId &rootFeatureId, U2OpStatus &os) {
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.h
index f27c02b..a921a97 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteFeatureDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,8 +29,6 @@
 
 namespace U2 {
 
-class SQLiteQuery;
-
 class SQLiteFeatureDbi : public U2FeatureDbi, public SQLiteChildDBICommon {
 public:
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.cpp
index 67d6320..05f6df0 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -84,7 +84,7 @@ void SQLiteModDbi::initSqlSchema(U2OpStatus &os) {
     //   id                     - id of the user modifications step
     //   object, otype, oextra  - data id of the master object (i.e. object for which "undo/redo" was initiated)
     //   version                - master object was modified from this version
-    SQLiteQuery("CREATE TABLE UserModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
+    SQLiteWriteQuery("CREATE TABLE UserModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
         " object INTEGER NOT NULL,"
         " otype INTEGER NOT NULL,"
         " oextra BLOB NOT NULL,"
@@ -94,7 +94,7 @@ void SQLiteModDbi::initSqlSchema(U2OpStatus &os) {
     // MultiModStep - multiple modifications step with reference to a user modifications step
     //   id          - id of the multiple modifications step
     //   userStepId  - id of the user modifications step
-    SQLiteQuery("CREATE TABLE MultiModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
+    SQLiteWriteQuery("CREATE TABLE MultiModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
         " userStepId INTEGER NOT NULL,"
         " FOREIGN KEY(userStepId) REFERENCES UserModStep(id) ON DELETE CASCADE)", db, os).execute();
 
@@ -105,7 +105,7 @@ void SQLiteModDbi::initSqlSchema(U2OpStatus &os) {
     //   modType               - type of the object modification
     //   details               - detailed description of the object modification
     //   multiStepId           - id of the multiModStep
-    SQLiteQuery("CREATE TABLE SingleModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
+    SQLiteWriteQuery("CREATE TABLE SingleModStep (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
         " object INTEGER NOT NULL,"
         " otype INTEGER NOT NULL,"
         " oextra BLOB NOT NULL,"
@@ -115,13 +115,13 @@ void SQLiteModDbi::initSqlSchema(U2OpStatus &os) {
         " multiStepId INTEGER NOT NULL, "
         " FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE, "
         " FOREIGN KEY(multiStepId) REFERENCES MultiModStep(id) ON DELETE CASCADE)", db, os).execute();
-    SQLiteQuery("CREATE INDEX SingleModStep_object ON SingleModStep(object)", db, os).execute();
-    SQLiteQuery("CREATE INDEX SingleModStep_object_version ON SingleModStep(object, version)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX SingleModStep_object ON SingleModStep(object)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX SingleModStep_object_version ON SingleModStep(object, version)", db, os).execute();
 }
 
 U2SingleModStep SQLiteModDbi::getModStep(const U2DataId &objectId, qint64 trackVersion, U2OpStatus &os) {
     U2SingleModStep res;
-    SQLiteQuery q("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep WHERE object = ?1 AND version = ?2 ORDER BY id", db, os);
+    SQLiteReadQuery q("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep WHERE object = ?1 AND version = ?2 ORDER BY id", db, os);
     SAFE_POINT_OP(os, res);
 
     q.bindDataId(1, objectId);
@@ -143,7 +143,7 @@ U2SingleModStep SQLiteModDbi::getModStep(const U2DataId &objectId, qint64 trackV
 }
 
 qint64 SQLiteModDbi::getNearestUserModStepVersion(const U2DataId &masterObjId, qint64 version, U2OpStatus &os) {
-    SQLiteQuery qVersion("SELECT MAX(version) FROM UserModStep WHERE object = ?1 AND version <= ?2", db, os);
+    SQLiteReadQuery qVersion("SELECT MAX(version) FROM UserModStep WHERE object = ?1 AND version <= ?2", db, os);
     qVersion.bindDataId(1, masterObjId);
     qVersion.bindInt64(2, version);
 
@@ -160,7 +160,7 @@ QList< QList<U2SingleModStep> > SQLiteModDbi::getModSteps(const U2DataId &master
     SQLiteTransaction t(db, os);
 
     qint64 userStepId = -1;
-    SQLiteQuery qGetUserStepId("SELECT id FROM UserModStep WHERE object = ?1 AND version = ?2", db, os);
+    SQLiteWriteQuery qGetUserStepId("SELECT id FROM UserModStep WHERE object = ?1 AND version = ?2", db, os);
     SAFE_POINT_OP(os, QList< QList<U2SingleModStep> >());
 
     qGetUserStepId.bindDataId(1, masterObjId);
@@ -175,10 +175,10 @@ QList< QList<U2SingleModStep> > SQLiteModDbi::getModSteps(const U2DataId &master
         return steps;
     }
 
-    SQLiteQuery qMultiStepId("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
+    SQLiteReadQuery qMultiStepId("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
     qMultiStepId.bindInt64(1, userStepId);
 
-    SQLiteQuery qSingleStep("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep WHERE multiStepId = ?1", db, os);
+    SQLiteReadQuery qSingleStep("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep WHERE multiStepId = ?1", db, os);
     while (qMultiStepId.step()) {
         qint64 multiStepId = qMultiStepId.getInt64(0);
 
@@ -213,7 +213,7 @@ void SQLiteModDbi::createModStep(const U2DataId &masterObjId, U2SingleModStep &s
         closeMultiStep = true;
     }
 
-    SQLiteQuery qSingle("INSERT INTO SingleModStep(object, otype, oextra, version, modType, details, multiStepId) VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7) ", db, os);
+    SQLiteWriteQuery qSingle("INSERT INTO SingleModStep(object, otype, oextra, version, modType, details, multiStepId) VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7) ", db, os);
     SAFE_POINT_OP(os, );
 
     qSingle.bindDataId(1, step.objectId);
@@ -238,7 +238,7 @@ void SQLiteModDbi::removeModsWithGreaterVersion(const U2DataId &masterObjId, qin
 
     // Get user step IDs
     QList<qint64> userStepIds;
-    SQLiteQuery qSelectUserSteps("SELECT id FROM UserModStep WHERE object = ?1 AND version >= ?2", db, os);
+    SQLiteReadQuery qSelectUserSteps("SELECT id FROM UserModStep WHERE object = ?1 AND version >= ?2", db, os);
     SAFE_POINT_OP(os, );
 
     qSelectUserSteps.bindDataId(1, masterObjId);
@@ -261,7 +261,7 @@ void SQLiteModDbi::removeDuplicateUserStep(const U2DataId &masterObjId, qint64 m
 
     // Get user step IDs
     QList<qint64> userStepIds;
-    SQLiteQuery qSelect("SELECT id FROM UserModStep WHERE object = ?1 AND version = ?2", db, os);
+    SQLiteReadQuery qSelect("SELECT id FROM UserModStep WHERE object = ?1 AND version = ?2", db, os);
     SAFE_POINT_OP(os, );
 
     qSelect.bindDataId(1, masterObjId);
@@ -296,7 +296,7 @@ void SQLiteModDbi::removeSteps(QList<qint64> userStepIds, U2OpStatus &os) {
 
     // Get multiple steps IDs
     QList<qint64> multiStepIds;
-    SQLiteQuery qSelectMultiSteps("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
+    SQLiteReadQuery qSelectMultiSteps("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
     SAFE_POINT_OP(os, );
     foreach (qint64 userStepId, userStepIds) {
         qSelectMultiSteps.reset();
@@ -309,7 +309,7 @@ void SQLiteModDbi::removeSteps(QList<qint64> userStepIds, U2OpStatus &os) {
     }
 
     // Remove single steps
-    SQLiteQuery qDeleteSingleSteps("DELETE FROM SingleModStep WHERE multiStepId = ?1", db, os);
+    SQLiteWriteQuery qDeleteSingleSteps("DELETE FROM SingleModStep WHERE multiStepId = ?1", db, os);
     SAFE_POINT_OP(os, );
     foreach (qint64 multiStepId, multiStepIds) {
         qDeleteSingleSteps.reset();
@@ -319,7 +319,7 @@ void SQLiteModDbi::removeSteps(QList<qint64> userStepIds, U2OpStatus &os) {
     SAFE_POINT_OP(os, );
 
     // Remove multiple steps
-    SQLiteQuery qDeleteMultiSteps("DELETE FROM MultiModStep WHERE id = ?1", db, os);
+    SQLiteWriteQuery qDeleteMultiSteps("DELETE FROM MultiModStep WHERE id = ?1", db, os);
     SAFE_POINT_OP(os, );
     foreach (qint64 multiStepId, multiStepIds) {
         qDeleteMultiSteps.reset();
@@ -328,7 +328,7 @@ void SQLiteModDbi::removeSteps(QList<qint64> userStepIds, U2OpStatus &os) {
     }
 
     // Remove user steps
-    SQLiteQuery qDeleteUserSteps("DELETE FROM UserModStep WHERE id = ?1", db, os);
+    SQLiteWriteQuery qDeleteUserSteps("DELETE FROM UserModStep WHERE id = ?1", db, os);
     foreach (qint64 userStepId, userStepIds) {
         qDeleteUserSteps.reset();
         qDeleteUserSteps.bindInt64(1, userStepId);
@@ -342,7 +342,7 @@ void SQLiteModDbi::removeObjectMods(const U2DataId &objectId, U2OpStatus &os) {
 
     // Get user step IDs
     QList<qint64> userStepIds;
-    SQLiteQuery qSelectUserSteps("SELECT id FROM UserModStep WHERE object = ?1", db, os);
+    SQLiteReadQuery qSelectUserSteps("SELECT id FROM UserModStep WHERE object = ?1", db, os);
     SAFE_POINT_OP(os, );
 
     qSelectUserSteps.bindDataId(1, objectId);
@@ -363,9 +363,9 @@ void SQLiteModDbi::cleanUpAllStepsOnError() {
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
 
-    SQLiteQuery("DELETE FROM SingleModStep", db, os).execute();
-    SQLiteQuery("DELETE FROM MultiModStep", db, os).execute();
-    SQLiteQuery("DELETE FROM UserModStep", db, os).execute();
+    SQLiteWriteQuery("DELETE FROM SingleModStep", db, os).execute();
+    SQLiteWriteQuery("DELETE FROM MultiModStep", db, os).execute();
+    SQLiteWriteQuery("DELETE FROM UserModStep", db, os).execute();
 }
 
 static void checkMainThread(U2OpStatus &os) {
@@ -413,14 +413,14 @@ void SQLiteModDbi::endCommonUserModStep(const U2DataId &userMasterObjId, U2OpSta
         Q_UNUSED(t);
 
         // Get multiple steps IDs
-        SQLiteQuery qSelectMultiSteps("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
+        SQLiteReadQuery qSelectMultiSteps("SELECT id FROM MultiModStep WHERE userStepId = ?1", db, os);
         SAFE_POINT_OP(os, );
 
         qSelectMultiSteps.bindInt64(1, userModStepId);
 
         // If user modification step doesn't contain any multi modification steps
         if (!qSelectMultiSteps.step()) {
-            SQLiteQuery qDeleteUserSteps("DELETE FROM UserModStep WHERE id = ?1", db, os);
+            SQLiteWriteQuery qDeleteUserSteps("DELETE FROM UserModStep WHERE id = ?1", db, os);
             qDeleteUserSteps.bindInt64(1, userModStepId);
             qDeleteUserSteps.execute();
             SAFE_POINT_OP(os, );
@@ -469,7 +469,7 @@ void SQLiteModDbi::createUserModStep(const U2DataId &masterObjId, U2OpStatus &os
     qint64 masterObjVersion = dbi->getSQLiteObjectDbi()->getObjectVersion(masterObjId, os);
     SAFE_POINT_OP(os, );
 
-    SQLiteQuery qUser("INSERT INTO UserModStep(object, otype, oextra, version) VALUES(?1, ?2, ?3, ?4)", db, os);
+    SQLiteWriteQuery qUser("INSERT INTO UserModStep(object, otype, oextra, version) VALUES(?1, ?2, ?3, ?4)", db, os);
     SAFE_POINT_OP(os, );
 
     qUser.bindDataId(1, masterObjId);
@@ -491,7 +491,7 @@ void SQLiteModDbi::createUserModStep(const U2DataId &masterObjId, U2OpStatus &os
 void SQLiteModDbi::createMultiModStep(const U2DataId &masterObjId, U2OpStatus &os) {
     SAFE_POINT(isUserStepStarted(masterObjId), "A user modifications step must have been started!", );
 
-    SQLiteQuery qMulti("INSERT INTO MultiModStep(userStepId) VALUES(?1)", db, os);
+    SQLiteWriteQuery qMulti("INSERT INTO MultiModStep(userStepId) VALUES(?1)", db, os);
     SAFE_POINT_OP(os, );
 
     qMulti.bindInt64(1, modStepsByObject[masterObjId].userModStepId);
@@ -527,7 +527,7 @@ bool SQLiteModDbi::canUndo(const U2DataId &objectId, U2OpStatus &os) {
     SAFE_POINT_OP(os, false);
 
     // Verify if there are steps
-    SQLiteQuery q("SELECT id FROM UserModStep WHERE object = ?1 AND version < ?2", db, os);
+    SQLiteReadQuery q("SELECT id FROM UserModStep WHERE object = ?1 AND version < ?2", db, os);
     SAFE_POINT_OP(os, false);
 
     q.bindDataId(1, objectId);
@@ -548,7 +548,7 @@ bool SQLiteModDbi::canRedo(const U2DataId &objectId, U2OpStatus &os) {
     SAFE_POINT_OP(os, false);
 
     // Verify if there are steps
-    SQLiteQuery q("SELECT id FROM UserModStep WHERE object = ?1 AND version >= ?2", db, os);
+    SQLiteReadQuery q("SELECT id FROM UserModStep WHERE object = ?1 AND version >= ?2", db, os);
     SAFE_POINT_OP(os, false);
 
     q.bindDataId(1, objectId);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.h
index c1621a8..631b027 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteModDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
index c1b7409..de029ab 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,7 @@ void SQLiteMsaDbi::initSqlSchema(U2OpStatus& os) {
     }
 
     // MSA object
-    SQLiteQuery("CREATE TABLE Msa (object INTEGER PRIMARY KEY, length INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE Msa (object INTEGER PRIMARY KEY, length INTEGER NOT NULL, "
         "alphabet TEXT NOT NULL, numOfRows INTEGER NOT NULL, "
         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE)", db, os).execute();
 
@@ -50,14 +50,14 @@ void SQLiteMsaDbi::initSqlSchema(U2OpStatus& os) {
      //   gstart   - offset of the first element in the sequence
      //   gend     - offset of the last element in the sequence (non-inclusive)
      //   length   - sequence and gaps length (trailing gap are not taken into account)
-    SQLiteQuery("CREATE TABLE MsaRow (msa INTEGER NOT NULL, rowId INTEGER NOT NULL, sequence INTEGER NOT NULL,"
+    SQLiteWriteQuery("CREATE TABLE MsaRow (msa INTEGER NOT NULL, rowId INTEGER NOT NULL, sequence INTEGER NOT NULL,"
         " pos INTEGER NOT NULL, gstart INTEGER NOT NULL, gend INTEGER NOT NULL, length INTEGER NOT NULL,"
         " PRIMARY KEY(msa, rowId),"
         " FOREIGN KEY(msa) REFERENCES Msa(object) ON DELETE CASCADE, "
         " FOREIGN KEY(sequence) REFERENCES Sequence(object) ON DELETE CASCADE)", db, os).execute();
-    SQLiteQuery("CREATE INDEX MsaRow_msa_rowId ON MsaRow(msa, rowId)", db, os).execute();
-    SQLiteQuery("CREATE INDEX MsaRow_length ON MsaRow(length)", db, os).execute();
-    SQLiteQuery("CREATE INDEX MsaRow_sequence ON MsaRow(sequence)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX MsaRow_msa_rowId ON MsaRow(msa, rowId)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX MsaRow_length ON MsaRow(length)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX MsaRow_sequence ON MsaRow(sequence)", db, os).execute();
 
      // Gap info for a MSA row:
      //   msa       - msa object id
@@ -65,11 +65,11 @@ void SQLiteMsaDbi::initSqlSchema(U2OpStatus& os) {
      //   gapStart  - start of the gap, the coordinate is relative to the gstart coordinate of the row
      //   gapEnd    - end of the gap, the coordinate is relative to the gstart coordinate of the row (non-inclusive)
      // Note! there is invariant: gend - gstart (of the row) == gapEnd - gapStart
-    SQLiteQuery("CREATE TABLE MsaRowGap (msa INTEGER NOT NULL, rowId INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE MsaRowGap (msa INTEGER NOT NULL, rowId INTEGER NOT NULL, "
         "gapStart INTEGER NOT NULL, gapEnd INTEGER NOT NULL, "
         "FOREIGN KEY(msa, rowId) REFERENCES MsaRow(msa, rowId) ON DELETE CASCADE)",
         db, os).execute();
-    SQLiteQuery("CREATE INDEX MsaRowGap_msa_rowId ON MsaRowGap(msa, rowId)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX MsaRowGap_msa_rowId ON MsaRowGap(msa, rowId)", db, os).execute();
 }
 
 U2DataId SQLiteMsaDbi::createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os) {
@@ -88,7 +88,7 @@ U2DataId SQLiteMsaDbi::createMsaObject(const QString &folder, const QString &nam
     CHECK_OP(os, U2DataId());
 
     // Create a record in the Msa table
-    SQLiteQuery q("INSERT INTO Msa(object, length, alphabet, numOfRows) VALUES(?1, ?2, ?3, ?4)", db, os);
+    SQLiteWriteQuery q("INSERT INTO Msa(object, length, alphabet, numOfRows) VALUES(?1, ?2, ?3, ?4)", db, os);
     CHECK_OP(os, U2DataId());
 
     q.bindDataId(1, msa.id);
@@ -111,7 +111,7 @@ void SQLiteMsaDbi::updateMsaName(const U2DataId& msaId, const QString& name, U2O
 
 void SQLiteMsaDbi::updateMsaAlphabet(const U2DataId& msaId, const U2AlphabetId& alphabet, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -120,11 +120,11 @@ void SQLiteMsaDbi::updateMsaAlphabet(const U2DataId& msaId, const U2AlphabetId&
     if (TrackOnUpdate == trackMod) {
         U2Msa msaObj = getMsaObject(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packAlphabetDetails(msaObj.alphabet, alphabet);
+        modDetails = U2DbiPackUtils::packAlphabetDetails(msaObj.alphabet, alphabet);
     }
 
     // Update the alphabet
-    SQLiteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindString(1, alphabet.id);
@@ -146,7 +146,7 @@ void SQLiteMsaDbi::createMsaRow(const U2DataId& msaId, qint64 posInMsa, U2MsaRow
     qint64 rowLength = calculateRowLength(msaRow.gend - msaRow.gstart, msaRow.gaps);
 
     // Insert the data
-    SQLiteQuery q("INSERT INTO MsaRow(msa, rowId, sequence, pos, gstart, gend, length)"
+    SQLiteWriteQuery q("INSERT INTO MsaRow(msa, rowId, sequence, pos, gstart, gend, length)"
         " VALUES(?1, ?2, ?3, ?4, ?5, ?6, ?7)", db, os);
     CHECK_OP(os, );
 
@@ -187,19 +187,20 @@ void SQLiteMsaDbi::addMsaRowAndGaps(const U2DataId& msaId, qint64 posInMsa, U2Ms
 }
 
 void SQLiteMsaDbi::addRow(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row, U2OpStatus& os) {
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
     row.rowId = getMaximumRowId(msaId, os) + 1;
     CHECK_OP(os, );
 
+    // TODO: allow core mothod to change posInMsa value to store the correct value on tracking
     addRowCore(msaId, posInMsa, row, os);
     CHECK_OP(os, );
 
     QByteArray modDetails;
     if (TrackOnUpdate == trackMod) {
-        modDetails = PackUtils::packRow(posInMsa, row);
+        modDetails = U2DbiPackUtils::packRow(posInMsa, row);
     }
     if (row.length > getMsaLength(msaId, os)) {
         updateMsaLength(updateAction, msaId, row.length, os);
@@ -222,7 +223,7 @@ void SQLiteMsaDbi::addRow(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row,
 void SQLiteMsaDbi::addRows(const U2DataId& msaId, QList<U2MsaRow>& rows, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -236,24 +237,28 @@ void SQLiteMsaDbi::addRows(const U2DataId& msaId, QList<U2MsaRow>& rows, U2OpSta
     }
 
     qint64 maxRowId = getMaximumRowId(msaId, os);
-    qint64 maxLen = 0;
     for (int i = 0; i < rows.count(); ++i) {
         rows[i].rowId = maxRowId + i + 1;
-        maxLen = qMax(maxLen, rows[i].length);
-    }
-    if (maxLen > getMsaLength(msaId, os)) {
-        updateMsaLength(updateAction, msaId, maxLen, os);
-        CHECK_OP(os, );
     }
 
     QByteArray modDetails;
     if (TrackOnUpdate == trackMod) {
-        modDetails = PackUtils::packRows(posInMsa, rows);
+        modDetails = U2DbiPackUtils::packRows(posInMsa, rows);
     }
 
     addRowsCore(msaId, posInMsa, rows, os);
     CHECK_OP(os, );
 
+    // Update msa length
+    qint64 maxLength = 0;
+    foreach (const U2MsaRow &row, rows) {
+        maxLength = qMax(maxLength, row.length);
+    }
+    if (maxLength > getMsaLength(msaId, os)) {
+        updateMsaLength(updateAction, msaId, maxLength, os);
+        CHECK_OP(os, );
+    }
+
     // Update track mod type for child sequence object
     if (TrackOnUpdate == trackMod) {
         foreach (const U2MsaRow& row, rows) {
@@ -273,7 +278,7 @@ void SQLiteMsaDbi::addRows(const U2DataId& msaId, QList<U2MsaRow>& rows, U2OpSta
 void SQLiteMsaDbi::updateRowName(const U2DataId& msaId, qint64 rowId, const QString& newName, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     updateAction.prepare(os);
     SAFE_POINT_OP(os, );
 
@@ -294,7 +299,7 @@ void SQLiteMsaDbi::updateRowContent(const U2DataId& msaId, qint64 rowId, const Q
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
 
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     SAFE_POINT_OP(os, );
     Q_UNUSED(trackMod);
@@ -328,13 +333,13 @@ void SQLiteMsaDbi::updateRowContent(const U2DataId& msaId, qint64 rowId, const Q
     SAFE_POINT_OP(os, );
 }
 
-void SQLiteMsaDbi::updateRowInfo(ModificationAction &updateAction, const U2DataId &msaId, const U2MsaRow &row, U2OpStatus &os) {
+void SQLiteMsaDbi::updateRowInfo(SQLiteModificationAction &updateAction, const U2DataId &msaId, const U2MsaRow &row, U2OpStatus &os) {
     QByteArray modDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         U2MsaRow oldRow = getRow(msaId, row.rowId, os);
         SAFE_POINT_OP(os, );
 
-        modDetails = PackUtils::packRowInfoDetails(oldRow, row);
+        modDetails = U2DbiPackUtils::packRowInfoDetails(oldRow, row);
     }
 
     updateRowInfoCore(msaId, row, os);
@@ -347,7 +352,7 @@ void SQLiteMsaDbi::updateRowInfo(ModificationAction &updateAction, const U2DataI
 
 QList<qint64> SQLiteMsaDbi::getRowsOrder(const U2DataId& msaId, U2OpStatus& os) {
     QList<qint64> res;
-    SQLiteQuery q("SELECT rowId FROM MsaRow WHERE msa = ?1 ORDER BY pos", db, os);
+    SQLiteReadQuery q("SELECT rowId FROM MsaRow WHERE msa = ?1 ORDER BY pos", db, os);
     q.bindDataId(1, msaId);
     qint64 rowId;
     while (q.step()) {
@@ -359,7 +364,7 @@ QList<qint64> SQLiteMsaDbi::getRowsOrder(const U2DataId& msaId, U2OpStatus& os)
 
 U2AlphabetId SQLiteMsaDbi::getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os) {
     QString alphabetName;
-    SQLiteQuery q("SELECT alphabet FROM Msa WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT alphabet FROM Msa WHERE object = ?1", db, os);
     q.bindDataId(1, msaId);
     if (q.step()) {
         alphabetName = q.getString(0);
@@ -374,7 +379,7 @@ U2AlphabetId SQLiteMsaDbi::getMsaAlphabet(const U2DataId& msaId, U2OpStatus& os)
 void SQLiteMsaDbi::setNewRowsOrder(const U2DataId& msaId, const QList<qint64>& rowIds, U2OpStatus& os) {
     // Init track info
     SQLiteTransaction t(db, os);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -382,7 +387,7 @@ void SQLiteMsaDbi::setNewRowsOrder(const U2DataId& msaId, const QList<qint64>& r
     if (TrackOnUpdate == trackMod) {
         QList<qint64> oldOrder = getRowsOrder(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packRowOrderDetails(oldOrder, rowIds);
+        modDetails = U2DbiPackUtils::packRowOrderDetails(oldOrder, rowIds);
     }
 
     // Check that row IDs number is correct (if required, can be later removed for efficiency)
@@ -426,7 +431,7 @@ void SQLiteMsaDbi::removeRecordsFromMsaRowGap(const U2DataId& msaId, qint64 rowI
 
 void SQLiteMsaDbi::removeRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -436,7 +441,7 @@ void SQLiteMsaDbi::removeRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& os
         CHECK_OP(os, );
         qint64 posInMsa = getPosInMsa(msaId, rowId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packRow(posInMsa, removedRow);
+        modDetails = U2DbiPackUtils::packRow(posInMsa, removedRow);
     }
 
     bool removeSequence = (TrackOnUpdate != trackMod);
@@ -454,7 +459,7 @@ void SQLiteMsaDbi::removeRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& os
 void SQLiteMsaDbi::removeRows(const U2DataId& msaId, const QList<qint64>& rowIds, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     U2TrackModType trackMod = updateAction.prepare(os);
     CHECK_OP(os, );
 
@@ -469,7 +474,7 @@ void SQLiteMsaDbi::removeRows(const U2DataId& msaId, const QList<qint64>& rowIds
             rows << getRow(msaId, rowId, os);
             CHECK_OP(os, );
         }
-        modDetails = PackUtils::packRows(posInMsa, rows);
+        modDetails = U2DbiPackUtils::packRows(posInMsa, rows);
     }
 
     bool removeSequence = (TrackOnUpdate != trackMod);
@@ -499,7 +504,7 @@ void SQLiteMsaDbi::removeMsaRowAndGaps(const U2DataId& msaId, qint64 rowId, bool
 
 void SQLiteMsaDbi::deleteRowsData(const U2DataId& msaId, U2OpStatus& os) {
     static const QString deleteObjStr = "DELETE FROM Object WHERE id IN (SELECT sequence FROM MsaRow WHERE msa = ?1)";
-    SQLiteQuery deleteObjQeury(deleteObjStr, db, os);
+    SQLiteWriteQuery deleteObjQeury(deleteObjStr, db, os);
     deleteObjQeury.bindDataId(1, msaId);
     deleteObjQeury.execute();
 }
@@ -510,7 +515,7 @@ U2Msa SQLiteMsaDbi::getMsaObject(const U2DataId& msaId, U2OpStatus& os) {
 
     SAFE_POINT_OP(os, res);
 
-    SQLiteQuery q("SELECT length, alphabet FROM Msa WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT length, alphabet FROM Msa WHERE object = ?1", db, os);
     q.bindDataId(1, msaId);
     if (q.step())  {
         res.length = q.getInt64(0);
@@ -524,7 +529,7 @@ U2Msa SQLiteMsaDbi::getMsaObject(const U2DataId& msaId, U2OpStatus& os) {
 
 qint64 SQLiteMsaDbi::getNumOfRows(const U2DataId& msaId, U2OpStatus& os) {
     qint64 res = 0;
-    SQLiteQuery q("SELECT numOfRows FROM Msa WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT numOfRows FROM Msa WHERE object = ?1", db, os);
     CHECK_OP(os, res);
 
     q.bindDataId(1, msaId);
@@ -542,7 +547,7 @@ void SQLiteMsaDbi::recalculateRowsPositions(const U2DataId& msaId, U2OpStatus& o
     CHECK_OP(os, );
 
     SQLiteTransaction t(db, os);
-    SQLiteQuery q("UPDATE MsaRow SET pos = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
+    SQLiteWriteQuery q("UPDATE MsaRow SET pos = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
     CHECK_OP(os, );
 
     for (int i = 0, n = rows.count(); i < n; ++i) {
@@ -557,7 +562,7 @@ void SQLiteMsaDbi::recalculateRowsPositions(const U2DataId& msaId, U2OpStatus& o
 
 qint64 SQLiteMsaDbi::getMaximumRowId(const U2DataId& msaId, U2OpStatus& os) {
     qint64 maxRowId = 0;
-    SQLiteQuery q("SELECT MAX(rowId) FROM MsaRow WHERE msa = ?1", db, os);
+    SQLiteReadQuery q("SELECT MAX(rowId) FROM MsaRow WHERE msa = ?1", db, os);
     SAFE_POINT_OP(os, 0);
 
     q.bindDataId(1, msaId);
@@ -571,10 +576,10 @@ qint64 SQLiteMsaDbi::getMaximumRowId(const U2DataId& msaId, U2OpStatus& os) {
 
 QList<U2MsaRow> SQLiteMsaDbi::getRows(const U2DataId& msaId, U2OpStatus& os) {
     QList<U2MsaRow> res;
-    SQLiteQuery q("SELECT rowId, sequence, gstart, gend, length FROM MsaRow WHERE msa = ?1 ORDER BY pos", db, os);
+    SQLiteReadQuery q("SELECT rowId, sequence, gstart, gend, length FROM MsaRow WHERE msa = ?1 ORDER BY pos", db, os);
     q.bindDataId(1, msaId);
 
-    SQLiteQuery gapQ("SELECT gapStart, gapEnd FROM MsaRowGap WHERE msa = ?1 AND rowId = ?2 ORDER BY gapStart", db, os);
+    SQLiteReadQuery gapQ("SELECT gapStart, gapEnd FROM MsaRowGap WHERE msa = ?1 AND rowId = ?2 ORDER BY gapStart", db, os);
     while (q.step()) {
         U2MsaRow row;
         row.rowId = q.getInt64(0);
@@ -590,6 +595,7 @@ QList<U2MsaRow> SQLiteMsaDbi::getRows(const U2DataId& msaId, U2OpStatus& os) {
             U2MsaGap gap;
             gap.offset = gapQ.getInt64(0);
             gap.gap = gapQ.getInt64(1) - gap.offset;
+            SAFE_POINT_EXT(gap.isValid(), os.setError("An invalid gap is stored in the database"), res);
             row.gaps.append(gap);
         }
 
@@ -601,7 +607,7 @@ QList<U2MsaRow> SQLiteMsaDbi::getRows(const U2DataId& msaId, U2OpStatus& os) {
 
 U2MsaRow SQLiteMsaDbi::getRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& os) {
     U2MsaRow res;
-    SQLiteQuery q("SELECT sequence, gstart, gend, length FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
+    SQLiteReadQuery q("SELECT sequence, gstart, gend, length FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
     SAFE_POINT_OP(os, res);
 
     q.bindDataId(1, msaId);
@@ -618,7 +624,7 @@ U2MsaRow SQLiteMsaDbi::getRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& o
         SAFE_POINT_OP(os, res);
     }
 
-    SQLiteQuery gapQ("SELECT gapStart, gapEnd FROM MsaRowGap WHERE msa = ?1 AND rowId = ?2 ORDER BY gapStart", db, os);
+    SQLiteReadQuery gapQ("SELECT gapStart, gapEnd FROM MsaRowGap WHERE msa = ?1 AND rowId = ?2 ORDER BY gapStart", db, os);
     SAFE_POINT_OP(os, res);
 
     gapQ.bindDataId(1, msaId);
@@ -634,7 +640,7 @@ U2MsaRow SQLiteMsaDbi::getRow(const U2DataId& msaId, qint64 rowId, U2OpStatus& o
 }
 
 void SQLiteMsaDbi::updateNumOfRows(const U2DataId& msaId, qint64 numOfRows, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE Msa SET numOfRows = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Msa SET numOfRows = ?1 WHERE object = ?2", db, os);
     SAFE_POINT_OP(os, );
 
     q.bindInt64(1, numOfRows);
@@ -646,7 +652,7 @@ void SQLiteMsaDbi::updateGapModel(const U2DataId& msaId, qint64 msaRowId, const
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
 
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     updateAction.prepare(os);
     SAFE_POINT_OP(os, );
 
@@ -657,12 +663,12 @@ void SQLiteMsaDbi::updateGapModel(const U2DataId& msaId, qint64 msaRowId, const
     SAFE_POINT_OP(os, );
 }
 
-void SQLiteMsaDbi::updateGapModel(ModificationAction &updateAction, const U2DataId& msaId, qint64 msaRowId, const QList<U2MsaGap>& gapModel, U2OpStatus& os) {
+void SQLiteMsaDbi::updateGapModel(SQLiteModificationAction &updateAction, const U2DataId& msaId, qint64 msaRowId, const QList<U2MsaGap>& gapModel, U2OpStatus& os) {
     QByteArray gapsDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         U2MsaRow row = getRow(msaId, msaRowId, os);
         SAFE_POINT_OP(os, );
-        gapsDetails = PackUtils::packGapDetails(msaRowId, row.gaps, gapModel);
+        gapsDetails = U2DbiPackUtils::packGapDetails(msaRowId, row.gaps, gapModel);
     }
 
     updateGapModelCore(msaId, msaRowId, gapModel, os);
@@ -688,7 +694,7 @@ void SQLiteMsaDbi::updateMsaLength(const U2DataId& msaId, qint64 length, U2OpSta
     SQLiteTransaction t(db, os);
     Q_UNUSED(t);
 
-    ModificationAction updateAction(dbi, msaId);
+    SQLiteModificationAction updateAction(dbi, msaId);
     updateAction.prepare(os);
     SAFE_POINT_OP(os, );
 
@@ -698,12 +704,12 @@ void SQLiteMsaDbi::updateMsaLength(const U2DataId& msaId, qint64 length, U2OpSta
     SAFE_POINT_OP(os, );
 }
 
-void SQLiteMsaDbi::updateMsaLength(ModificationAction &updateAction, const U2DataId &msaId, qint64 length, U2OpStatus &os) {
+void SQLiteMsaDbi::updateMsaLength(SQLiteModificationAction &updateAction, const U2DataId &msaId, qint64 length, U2OpStatus &os) {
     QByteArray modDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         qint64 oldMsaLen = getMsaLength(msaId, os);
         CHECK_OP(os, );
-        modDetails = PackUtils::packAlignmentLength(oldMsaLen, length);
+        modDetails = U2DbiPackUtils::packAlignmentLength(oldMsaLen, length);
     }
 
     updateMsaLengthCore(msaId, length, os);
@@ -715,7 +721,7 @@ void SQLiteMsaDbi::updateMsaLength(ModificationAction &updateAction, const U2Dat
 
 qint64 SQLiteMsaDbi::getMsaLength(const U2DataId& msaId, U2OpStatus& os) {
     qint64 res = 0;
-    SQLiteQuery q("SELECT length FROM Msa WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT length FROM Msa WHERE object = ?1", db, os);
     CHECK_OP(os, res);
 
     q.bindDataId(1, msaId);
@@ -730,6 +736,36 @@ qint64 SQLiteMsaDbi::getMsaLength(const U2DataId& msaId, U2OpStatus& os) {
     return res;
 }
 
+U2DataId SQLiteMsaDbi::createMcaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, U2OpStatus &os) {
+    return createMcaObject(folder, name, alphabet, 0, os);
+}
+
+U2DataId SQLiteMsaDbi::createMcaObject(const QString &folder, const QString &name, const U2AlphabetId &alphabet, int length, U2OpStatus &os) {
+    SQLiteTransaction t(db, os);
+    Q_UNUSED(t);
+
+    U2Mca mca;
+    mca.visualName = name;
+    mca.alphabet = alphabet;
+    mca.length = length;
+
+    // Create the object
+    dbi->getSQLiteObjectDbi()->createObject(mca, folder, U2DbiObjectRank_TopLevel, os);
+    CHECK_OP(os, U2DataId());
+
+    // Create a record in the Msa table
+    SQLiteWriteQuery q("INSERT INTO Msa(object, length, alphabet, numOfRows) VALUES(?1, ?2, ?3, ?4)", db, os);
+    CHECK_OP(os, U2DataId());
+
+    q.bindDataId(1, mca.id);
+    q.bindInt64(2, mca.length);
+    q.bindString(3, mca.alphabet.id);
+    q.bindInt64(4, 0); // no rows
+    q.insert();
+
+    return mca.id;
+}
+
 qint64 SQLiteMsaDbi::calculateRowLength(qint64 seqLength, const QList<U2MsaGap>& gaps) {
     qint64 res = seqLength;
     foreach (const U2MsaGap& gap, gaps) {
@@ -742,7 +778,7 @@ qint64 SQLiteMsaDbi::calculateRowLength(qint64 seqLength, const QList<U2MsaGap>&
 
 qint64 SQLiteMsaDbi::getRowSequenceLength(const U2DataId& msaId, qint64 rowId, U2OpStatus& os) {
     qint64 res = 0;
-    SQLiteQuery q("SELECT gstart, gend FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
+    SQLiteReadQuery q("SELECT gstart, gend FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
     CHECK_OP(os, res);
 
     q.bindDataId(1, msaId);
@@ -761,7 +797,7 @@ qint64 SQLiteMsaDbi::getRowSequenceLength(const U2DataId& msaId, qint64 rowId, U
 }
 
 void SQLiteMsaDbi::updateRowLength(const U2DataId& msaId, qint64 rowId, qint64 newLength, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE MsaRow SET length = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
+    SQLiteWriteQuery q("UPDATE MsaRow SET length = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
     CHECK_OP(os, );
 
     q.bindInt64(1, newLength);
@@ -772,7 +808,7 @@ void SQLiteMsaDbi::updateRowLength(const U2DataId& msaId, qint64 rowId, qint64 n
 
 void SQLiteMsaDbi::updateMsaLengthCore(const U2DataId &msaId, qint64 length, U2OpStatus &os) {
     SQLiteTransaction t(db, os);
-    SQLiteQuery q("UPDATE Msa SET length = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Msa SET length = ?1 WHERE object = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindInt64(1, length);
@@ -782,7 +818,7 @@ void SQLiteMsaDbi::updateMsaLengthCore(const U2DataId &msaId, qint64 length, U2O
 
 U2DataId SQLiteMsaDbi::getSequenceIdByRowId(const U2DataId& msaId, qint64 rowId, U2OpStatus& os) {
     U2DataId res;
-    SQLiteQuery q("SELECT sequence FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
+    SQLiteReadQuery q("SELECT sequence FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
     CHECK_OP(os, res);
 
     q.bindDataId(1, msaId);
@@ -826,7 +862,7 @@ QByteArray SQLiteMsaDbi::getRemovedRowDetails(const U2MsaRow& row) {
 }
 
 qint64 SQLiteMsaDbi::getPosInMsa(const U2DataId &msaId, qint64 rowId, U2OpStatus &os) {
-    SQLiteQuery q("SELECT pos FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
+    SQLiteReadQuery q("SELECT pos FROM MsaRow WHERE msa = ?1 AND rowId = ?2", db, os);
     CHECK_OP(os, -1);
     q.bindDataId(1, msaId);
     q.bindInt64(2, rowId);
@@ -940,6 +976,8 @@ void SQLiteMsaDbi::addRowSubcore(const U2DataId &msaId, qint64 numOfRows, const
 
 void SQLiteMsaDbi::addRowCore(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
+    Q_UNUSED(t);
+
     // Append the row to the end, if "-1"
     qint64 numOfRows = getNumOfRows(msaId, os);
     CHECK_OP(os, );
@@ -969,6 +1007,7 @@ void SQLiteMsaDbi::addRowCore(const U2DataId& msaId, qint64 posInMsa, U2MsaRow&
 
 void SQLiteMsaDbi::addRowsCore(const U2DataId &msaId, const QList<qint64> &posInMsa, QList<U2MsaRow> &rows, U2OpStatus &os) {
     SQLiteTransaction t(db, os);
+    Q_UNUSED(t);
     qint64 numOfRows = getNumOfRows(msaId, os);
     CHECK_OP(os, );
 
@@ -1034,7 +1073,7 @@ void SQLiteMsaDbi::removeRowsCore(const U2DataId &msaId, const QList<qint64> &ro
 
 void SQLiteMsaDbi::setNewRowsOrderCore(const U2DataId &msaId, const QList<qint64> rowIds, U2OpStatus &os) {
     SQLiteTransaction t(db, os);
-    SQLiteQuery q("UPDATE MsaRow SET pos = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
+    SQLiteWriteQuery q("UPDATE MsaRow SET pos = ?1 WHERE msa = ?2 AND rowId = ?3", db, os);
     CHECK_OP(os, );
 
     for (int i = 0, n = rowIds.count(); i < n; ++i) {
@@ -1048,7 +1087,7 @@ void SQLiteMsaDbi::setNewRowsOrderCore(const U2DataId &msaId, const QList<qint64
 }
 
 void SQLiteMsaDbi::updateRowInfoCore(const U2DataId& msaId, const U2MsaRow& row, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE MsaRow SET sequence = ?1, gstart = ?2, gend = ?3 WHERE msa = ?4 AND rowId = ?5", db, os);
+    SQLiteWriteQuery q("UPDATE MsaRow SET sequence = ?1, gstart = ?2, gend = ?3 WHERE msa = ?4 AND rowId = ?5", db, os);
     SAFE_POINT_OP(os, );
 
     q.bindDataId(1, row.sequenceId);
@@ -1065,14 +1104,14 @@ void SQLiteMsaDbi::updateRowInfoCore(const U2DataId& msaId, const U2MsaRow& row,
 void SQLiteMsaDbi::undoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2AlphabetId oldAlphabet;
     U2AlphabetId newAlphabet;
-    bool ok = PackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
+    bool ok = U2DbiPackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
     if (!ok) {
         os.setError("An error occurred during updating an alignment alphabet!");
         return;
     }
 
     // Update the value
-    SQLiteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindString(1, oldAlphabet.id);
@@ -1083,14 +1122,14 @@ void SQLiteMsaDbi::undoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray
 void SQLiteMsaDbi::redoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2AlphabetId oldAlphabet;
     U2AlphabetId newAlphabet;
-    bool ok = PackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
+    bool ok = U2DbiPackUtils::unpackAlphabetDetails(modDetails, oldAlphabet, newAlphabet);
     if (!ok) {
         os.setError("An error occurred during updating an alignment alphabet!");
         return;
     }
 
     // Redo the updating
-    SQLiteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Msa SET alphabet = ?1 WHERE object = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindString(1, newAlphabet.id);
@@ -1101,7 +1140,7 @@ void SQLiteMsaDbi::redoUpdateMsaAlphabet(const U2DataId& msaId, const QByteArray
 void SQLiteMsaDbi::undoAddRows(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     if (!ok) {
         os.setError("An error occurred during reverting adding of rows!");
         return;
@@ -1116,7 +1155,7 @@ void SQLiteMsaDbi::undoAddRows(const U2DataId& msaId, const QByteArray& modDetai
 void SQLiteMsaDbi::redoAddRows(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     if (!ok) {
         os.setError("An error occurred during reverting adding of rows!");
         return;
@@ -1128,7 +1167,7 @@ void SQLiteMsaDbi::redoAddRows(const U2DataId& msaId, const QByteArray& modDetai
 void SQLiteMsaDbi::undoAddRow(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow row;
     qint64 posInMsa;
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     if (!ok) {
         os.setError("An error occurred during reverting addition of a row!");
         return;
@@ -1140,7 +1179,7 @@ void SQLiteMsaDbi::undoAddRow(const U2DataId& msaId, const QByteArray& modDetail
 void SQLiteMsaDbi::redoAddRow(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow row;
     qint64 posInMsa;
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     if (!ok) {
         os.setError("An error occurred during addition of a row!");
         return;
@@ -1152,7 +1191,7 @@ void SQLiteMsaDbi::redoAddRow(const U2DataId& msaId, const QByteArray& modDetail
 void SQLiteMsaDbi::undoRemoveRows(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     if (!ok) {
         os.setError("An error occurred during reverting removing of rows!");
         return;
@@ -1164,7 +1203,7 @@ void SQLiteMsaDbi::undoRemoveRows(const U2DataId& msaId, const QByteArray& modDe
 void SQLiteMsaDbi::redoRemoveRows(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> posInMsa;
     QList<U2MsaRow> rows;
-    bool ok = PackUtils::unpackRows(modDetails, posInMsa, rows);
+    bool ok = U2DbiPackUtils::unpackRows(modDetails, posInMsa, rows);
     if (!ok) {
         os.setError("An error occurred during reverting removing of rows!");
         return;
@@ -1179,7 +1218,7 @@ void SQLiteMsaDbi::redoRemoveRows(const U2DataId& msaId, const QByteArray& modDe
 void SQLiteMsaDbi::undoRemoveRow(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow row;
     qint64 posInMsa;
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     if (!ok) {
         os.setError("An error occurred during reverting removing of a row!");
         return;
@@ -1191,7 +1230,7 @@ void SQLiteMsaDbi::undoRemoveRow(const U2DataId& msaId, const QByteArray& modDet
 void SQLiteMsaDbi::redoRemoveRow(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow row;
     qint64 posInMsa;
-    bool ok = PackUtils::unpackRow(modDetails, posInMsa, row);
+    bool ok = U2DbiPackUtils::unpackRow(modDetails, posInMsa, row);
     if (!ok) {
         os.setError("An error occurred during reverting removing of a row!");
         return;
@@ -1204,7 +1243,7 @@ void SQLiteMsaDbi::undoUpdateGapModel(const U2DataId& msaId, const QByteArray& m
     qint64 rowId = 0;
     QList<U2MsaGap> oldGaps;
     QList<U2MsaGap> newGaps;
-    bool ok = PackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
+    bool ok = U2DbiPackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
     if (!ok) {
         os.setError("An error occurred during updating an alignment gaps!");
         return;
@@ -1217,7 +1256,7 @@ void SQLiteMsaDbi::redoUpdateGapModel(const U2DataId& msaId, const QByteArray& m
     qint64 rowId = 0;
     QList<U2MsaGap> oldGaps;
     QList<U2MsaGap> newGaps;
-    bool ok = PackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
+    bool ok = U2DbiPackUtils::unpackGapDetails(modDetails, rowId, oldGaps, newGaps);
     if (!ok) {
         os.setError("An error occurred during updating an alignment gaps!");
         return;
@@ -1229,7 +1268,7 @@ void SQLiteMsaDbi::redoUpdateGapModel(const U2DataId& msaId, const QByteArray& m
 void SQLiteMsaDbi::undoSetNewRowsOrder(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> oldOrder;
     QList<qint64> newOrder;
-    bool ok = PackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
+    bool ok = U2DbiPackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
     if (!ok) {
         os.setError("An error occurred during updating an alignment row order!");
         return;
@@ -1242,7 +1281,7 @@ void SQLiteMsaDbi::undoSetNewRowsOrder(const U2DataId& msaId, const QByteArray&
 void SQLiteMsaDbi::redoSetNewRowsOrder(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     QList<qint64> oldOrder;
     QList<qint64> newOrder;
-    bool ok = PackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
+    bool ok = U2DbiPackUtils::unpackRowOrderDetails(modDetails, oldOrder, newOrder);
     if (!ok) {
         os.setError("An error occurred during updating an alignment row order!");
         return;
@@ -1254,7 +1293,7 @@ void SQLiteMsaDbi::redoSetNewRowsOrder(const U2DataId& msaId, const QByteArray&
 void SQLiteMsaDbi::undoUpdateRowInfo(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow oldRow;
     U2MsaRow newRow;
-    bool ok = PackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
+    bool ok = U2DbiPackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
     if (!ok) {
         os.setError("An error occurred during updating a row info!");
         return;
@@ -1268,7 +1307,7 @@ void SQLiteMsaDbi::undoUpdateRowInfo(const U2DataId& msaId, const QByteArray& mo
 void SQLiteMsaDbi::redoUpdateRowInfo(const U2DataId& msaId, const QByteArray& modDetails, U2OpStatus& os) {
     U2MsaRow oldRow;
     U2MsaRow newRow;
-    bool ok = PackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
+    bool ok = U2DbiPackUtils::unpackRowInfoDetails(modDetails, oldRow, newRow);
     if (!ok) {
         os.setError("An error occurred during updating a row info!");
         return;
@@ -1283,7 +1322,7 @@ void SQLiteMsaDbi::undoMsaLengthChange(const U2DataId &msaId, const QByteArray &
     qint64 oldLen;
     qint64 newLen;
 
-    bool ok = PackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
+    bool ok = U2DbiPackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an msa length")), );
 
     updateMsaLengthCore(msaId, oldLen, os);
@@ -1293,7 +1332,7 @@ void SQLiteMsaDbi::redoMsaLengthChange(const U2DataId &msaId, const QByteArray &
     qint64 oldLen;
     qint64 newLen;
 
-    bool ok = PackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
+    bool ok = U2DbiPackUtils::unpackAlignmentLength(modDetails, oldLen, newLen);
     CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating an msa length")), );
 
     updateMsaLengthCore(msaId, newLen, os);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
index 982a810..208ff59 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteMsaDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -65,8 +65,10 @@ public:
      * The number of rows and the length of the alignment are set to 0.
      * Returns the assigned id.
      */
-    virtual U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
-    virtual U2DataId createMsaObject(const QString& folder, const QString& name,const U2AlphabetId& alphabet, int length, U2OpStatus& os);
+    U2DataId createMcaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
+    U2DataId createMcaObject(const QString& folder, const QString& name,const U2AlphabetId& alphabet, int length, U2OpStatus& os);
+    U2DataId createMsaObject(const QString& folder, const QString& name, const U2AlphabetId& alphabet, U2OpStatus& os);
+    U2DataId createMsaObject(const QString& folder, const QString& name,const U2AlphabetId& alphabet, int length, U2OpStatus& os);
 
     /**
      * Updates the multiple alignment name.
@@ -84,10 +86,11 @@ public:
 
     /**
      * Creates rows (and gap models for them) in the database.
-     * Ignores 'length' of the 'rows' (recalculates them).
+     * Enlarges msa length, if 'length' of any of the 'rows' is greater than current msa length.
+     * Recalculates 'length' of the 'rows'.
      * The rows are appended to the end of the MSA.
      * Assigns MSA as a parent for all the sequences.
-     * If a row ID equals "-1", sets a valid ID to the passed U2MsaRow instances.
+     * If a row ID equals "-1", sets a valid ID to the passed U2MaRow instances.
      * Updates the number of rows of the MSA.
      * Updates the alignment length.
      * Increments the alignment version.
@@ -97,7 +100,9 @@ public:
 
     /**
      * Creates a new row and gap model records in the database.
-     * Ignores 'row.length' (recalculates it) and 'row.rowId'. Sets valid to the passed U2MsaRow instance.
+     * Enlarges msa length, if 'row.length' is greater than current msa length.
+     * Ignores 'row.rowId'.
+     * Recalculates 'row.length' and and 'row.rowId'. Sets valid to the passed U2MsaRow instance.
      * If 'posInMsa' equals to '-1' the row is appended to the end of the MSA,
      * otherwise it is inserted to the specified position and all positions are updated.
      * Assigns MSA as a parent for the sequence.
@@ -179,7 +184,7 @@ private:
     /**
      * Creates new records in MsaRow and MsaRowGap tables for the added row, and
      * sets the parent of the sequence object to the MSA object.
-     * Sets the assigned ID to the passed U2MsaRow instance.
+     * Sets the assigned ID to the passed U2MaRow instance.
      */
     void addMsaRowAndGaps(const U2DataId& msaId, qint64 posInMsa, U2MsaRow& row, U2OpStatus& os);
 
@@ -269,9 +274,9 @@ private:
 
     ///////////////////////////////////////////////////////////
     // Methods included into a multi-action
-    void updateRowInfo(ModificationAction &updateAction, const U2DataId &msaId, const U2MsaRow &row, U2OpStatus &os);
-    void updateGapModel(ModificationAction &updateAction, const U2DataId& msaId, qint64 msaRowId, const QList<U2MsaGap>& gapModel, U2OpStatus& os);
-    void updateMsaLength(ModificationAction &updateAction, const U2DataId& msaId, qint64 length, U2OpStatus &os);
+    void updateRowInfo(SQLiteModificationAction &updateAction, const U2DataId &msaId, const U2MsaRow &row, U2OpStatus &os);
+    void updateGapModel(SQLiteModificationAction &updateAction, const U2DataId& msaId, qint64 msaRowId, const QList<U2MsaGap>& gapModel, U2OpStatus& os);
+    void updateMsaLength(SQLiteModificationAction &updateAction, const U2DataId& msaId, qint64 length, U2OpStatus &os);
 };
 
 } //namespace
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
index 2df2a7e..d53b6d3 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,32 +43,32 @@ void SQLiteObjectDbi::initSqlSchema(U2OpStatus& os) {
     // objects table - stores IDs and types for all objects. It also stores 'top_level' flag to simplify queries
     // rank: see U2DbiObjectRank
     // name is a visual name of the object shown to user.
-    SQLiteQuery("CREATE TABLE Object (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE Object (id INTEGER PRIMARY KEY AUTOINCREMENT, type INTEGER NOT NULL, "
                                     "version INTEGER NOT NULL DEFAULT 1, rank INTEGER NOT NULL, "
                                     "name TEXT NOT NULL, trackMod INTEGER NOT NULL DEFAULT 0)", db, os).execute();
     CHECK_OP(os, );
 
     // parent-child object relation
-    SQLiteQuery("CREATE TABLE Parent (parent INTEGER, child INTEGER, "
+    SQLiteWriteQuery("CREATE TABLE Parent (parent INTEGER, child INTEGER, "
                        "PRIMARY KEY (parent, child), "
                        "FOREIGN KEY(parent) REFERENCES Object(id) ON DELETE CASCADE, "
                        "FOREIGN KEY(child) REFERENCES Object(id) ON DELETE CASCADE)", db, os).execute();
-    SQLiteQuery("CREATE INDEX Parent_parent_child on Parent(parent, child)" , db, os).execute();
-    SQLiteQuery("CREATE INDEX Parent_child on Parent(child)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX Parent_parent_child on Parent(parent, child)" , db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX Parent_child on Parent(child)" , db, os).execute();
     CHECK_OP(os, );
 
     // folders
-    SQLiteQuery("CREATE TABLE Folder (id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT UNIQUE NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE Folder (id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT UNIQUE NOT NULL, "
                                     "vlocal INTEGER NOT NULL DEFAULT 1, vglobal INTEGER NOT NULL DEFAULT 1 )", db, os).execute();
     CHECK_OP(os, );
 
     // folder-object relation
-    SQLiteQuery("CREATE TABLE FolderContent (folder INTEGER, object INTEGER, "
+    SQLiteWriteQuery("CREATE TABLE FolderContent (folder INTEGER, object INTEGER, "
                         "PRIMARY KEY (folder, object), "
                         "FOREIGN KEY(folder) REFERENCES Folder(id) ON DELETE CASCADE,"
                         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE)", db, os).execute();
     CHECK_OP(os, );
-    SQLiteQuery("CREATE INDEX FolderContent_object on FolderContent(object)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX FolderContent_object on FolderContent(object)", db, os).execute();
     CHECK_OP(os, );
 
     createFolder(U2ObjectDbi::ROOT_FOLDER, os);
@@ -79,27 +79,27 @@ void SQLiteObjectDbi::initSqlSchema(U2OpStatus& os) {
 #define TOP_LEVEL_FILTER  ("rank = " + QString::number(U2DbiObjectRank_TopLevel))
 
 qint64 SQLiteObjectDbi::countObjects(U2OpStatus& os) {
-    return SQLiteQuery("SELECT COUNT (*) FROM Object WHERE " + TOP_LEVEL_FILTER, db, os).selectInt64();
+    return SQLiteReadQuery("SELECT COUNT (*) FROM Object WHERE " + TOP_LEVEL_FILTER, db, os).selectInt64();
 }
 
 qint64 SQLiteObjectDbi::countObjects(U2DataType type, U2OpStatus& os) {
-    SQLiteQuery q("SELECT COUNT (*) FROM Object WHERE " + TOP_LEVEL_FILTER + " AND type = ?1", db, os);
+    SQLiteReadQuery q("SELECT COUNT (*) FROM Object WHERE " + TOP_LEVEL_FILTER + " AND type = ?1", db, os);
     q.bindType(1, type);
     return q.selectInt64();
 }
 
 QList<U2DataId> SQLiteObjectDbi::getObjects(qint64 offset, qint64 count, U2OpStatus& os) {
-    return SQLiteQuery("SELECT id, type FROM Object WHERE " + TOP_LEVEL_FILTER, offset, count, db, os).selectDataIdsExt();
+    return SQLiteReadQuery("SELECT id, type FROM Object WHERE " + TOP_LEVEL_FILTER, offset, count, db, os).selectDataIdsExt();
 }
 
 QList<U2DataId> SQLiteObjectDbi::getObjects(U2DataType type, qint64 offset, qint64 count, U2OpStatus& os) {
-    SQLiteQuery q("SELECT id, type FROM Object WHERE " + TOP_LEVEL_FILTER + " AND type = ?1", offset, count, db, os );
+    SQLiteReadQuery q("SELECT id, type FROM Object WHERE " + TOP_LEVEL_FILTER + " AND type = ?1", offset, count, db, os );
     q.bindType(1, type);
     return q.selectDataIdsExt();
 }
 
 QList<U2DataId> SQLiteObjectDbi::getParents(const U2DataId& entityId, U2OpStatus& os) {
-    SQLiteQuery q("SELECT o.id AS id, o.type AS type FROM Parent AS p, Object AS o WHERE p.parent = o.id AND p.child = ?1", db, os);
+    SQLiteReadQuery q("SELECT o.id AS id, o.type AS type FROM Parent AS p, Object AS o WHERE p.parent = o.id AND p.child = ?1", db, os);
     q.bindDataId(1, entityId);
     return q.selectDataIdsExt();
 }
@@ -114,7 +114,7 @@ U2DbiIterator<U2DataId>* SQLiteObjectDbi::getObjectsByVisualName(const QString&
     if (checkType) {
         q->bindType(2, type);
     }
-    return new SqlRSIterator<U2DataId>(q, new SqlDataIdRSLoaderEx(), NULL, U2DataId(), os);
+    return new SQLiteResultSetIterator<U2DataId>(q, new SQLiteDataIdResultSetLoaderEx(), NULL, U2DataId(), os);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -176,7 +176,7 @@ bool SQLiteObjectDbi::removeObjects(const QList<U2DataId>& dataIds, bool /*force
     }
 
     // execute deletion of residual objects
-    SQLiteQuery residualDeletionQuery(residualQueryStr, db, os);
+    SQLiteWriteQuery residualDeletionQuery(residualQueryStr, db, os);
     for (int i = 0; i < residualBindQueryCount; ++i) {
         residualDeletionQuery.bindDataId(i + 1, dataIds.at(i));
     }
@@ -185,7 +185,7 @@ bool SQLiteObjectDbi::removeObjects(const QList<U2DataId>& dataIds, bool /*force
 
     // execute deletion of objects by parts of `SQLiteDbi::BIND_PARAMETERS_LIMIT` in size
     if (fullBindQueryCount > 0) {
-        SQLiteQuery fullDeletionQuery(fullQueryStr, db, os);
+        SQLiteWriteQuery fullDeletionQuery(fullQueryStr, db, os);
         for (int currentFullQuery = 0; currentFullQuery < fullBindQueryCount; ++currentFullQuery) {
             const int firstBindingPos = residualBindQueryCount + currentFullQuery * SQLiteDbi::BIND_PARAMETERS_LIMIT;
             const int lastBindingPos = residualBindQueryCount + (currentFullQuery + 1) * SQLiteDbi::BIND_PARAMETERS_LIMIT;
@@ -234,7 +234,7 @@ void SQLiteObjectDbi::removeObjectFromFolder(const U2DataId &id, const QString &
     CHECK_OP(os, );
 
     static const QString deleteString = "DELETE FROM FolderContent WHERE folder = ?1 AND object = ?2";
-    SQLiteQuery deleteQ(deleteString, db, os);
+    SQLiteWriteQuery deleteQ(deleteString, db, os);
     CHECK_OP(os, );
     deleteQ.bindInt64(1, folderId);
     deleteQ.bindDataId(2, id);
@@ -243,7 +243,7 @@ void SQLiteObjectDbi::removeObjectFromFolder(const U2DataId &id, const QString &
 
 void SQLiteObjectDbi::removeObjectFromAllFolders(const U2DataId &id, U2OpStatus &os) {
     static const QString deleteString("DELETE FROM FolderContent WHERE object = ?1");
-    SQLiteQuery deleteQ(deleteString, db, os);
+    SQLiteWriteQuery deleteQ(deleteString, db, os);
     CHECK_OP(os, );
     deleteQ.bindDataId(1, id);
     deleteQ.update();
@@ -272,6 +272,7 @@ void SQLiteObjectDbi::removeObjectSpecificData(const U2DataId &objectId, U2OpSta
         case U2Type::VariantTrack:
             // nothing has to be done for object of these types
             break;
+        case U2Type::Mca:
         case U2Type::Msa:
             dbi->getSQLiteMsaDbi()->deleteRowsData(objectId, os);
             break;
@@ -309,7 +310,7 @@ void SQLiteObjectDbi::removeObjectModHistory(const U2DataId& id, U2OpStatus& os)
 
 QStringList SQLiteObjectDbi::getFolders(U2OpStatus& os) {
     // Comparison is case sensitive by default
-    return SQLiteQuery("SELECT path FROM Folder ORDER BY path", db, os).selectStrings();
+    return SQLiteReadQuery("SELECT path FROM Folder ORDER BY path", db, os).selectStrings();
 }
 
 QHash<U2Object, QString> SQLiteObjectDbi::getObjectFolders(U2OpStatus &os) {
@@ -319,7 +320,7 @@ QHash<U2Object, QString> SQLiteObjectDbi::getObjectFolders(U2OpStatus &os) {
         "SELECT o.id, o.type, o.version, o.name, o.trackMod, f.path "
         "FROM Object AS o, FolderContent AS fc, Folder AS f WHERE fc.object=o.id AND "
         "fc.folder=f.id AND " + TOP_LEVEL_FILTER;
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     CHECK_OP(os, result);
 
     const QString dbId = dbi->getDbiId();
@@ -347,7 +348,7 @@ void SQLiteObjectDbi::renameFolder(const QString &oldPath, const QString &newPat
 
     static const QString renameFolderQueryStr = "UPDATE Folder SET path = ?1 where path = ?2";
     if (allFolders.contains(oldCPath)) {
-        SQLiteQuery q(renameFolderQueryStr, db, os);
+        SQLiteWriteQuery q(renameFolderQueryStr, db, os);
         q.bindString(1, newCPath);
         q.bindString(2, oldPath);
         q.update();
@@ -359,7 +360,7 @@ void SQLiteObjectDbi::renameFolder(const QString &oldPath, const QString &newPat
     foreach (const QString &path, allFolders) {
         if (path.startsWith(parent)) {
             QString newPath = newParent + path.mid(parent.size());
-            SQLiteQuery q(renameFolderQueryStr, db, os);
+            SQLiteWriteQuery q(renameFolderQueryStr, db, os);
             q.bindString(1, newPath);
             q.bindString(2, path);
             q.update();
@@ -374,19 +375,19 @@ QString SQLiteObjectDbi::getFolderPreviousPath(const QString & /*currentPath*/,
 }
 
 qint64 SQLiteObjectDbi::countObjects(const QString& folder, U2OpStatus& os) {
-    SQLiteQuery q("SELECT COUNT(fc.*) FROM FolderContent AS fc, Folder AS f WHERE f.path = ?1 AND fc.folder = f.id", db, os);
+    SQLiteReadQuery q("SELECT COUNT(fc.*) FROM FolderContent AS fc, Folder AS f WHERE f.path = ?1 AND fc.folder = f.id", db, os);
     q.bindString(1, folder);
     return q.selectInt64();
 }
 
 QList<U2DataId> SQLiteObjectDbi::getObjects(const QString& folder, qint64 , qint64 , U2OpStatus& os) {
-    SQLiteQuery q("SELECT o.id, o.type FROM Object AS o, FolderContent AS fc, Folder AS f WHERE f.path = ?1 AND fc.folder = f.id AND fc.object=o.id", db, os);
+    SQLiteReadQuery q("SELECT o.id, o.type FROM Object AS o, FolderContent AS fc, Folder AS f WHERE f.path = ?1 AND fc.folder = f.id AND fc.object=o.id AND o." + TOP_LEVEL_FILTER, db, os);
     q.bindString(1, folder);
     return q.selectDataIdsExt();
 }
 
 QStringList SQLiteObjectDbi::getObjectFolders(const U2DataId& objectId, U2OpStatus& os) {
-    SQLiteQuery q("SELECT f.path FROM FolderContent AS fc, Folder AS f WHERE fc.object = ?1 AND fc.folder = f.id", db, os);
+    SQLiteReadQuery q("SELECT f.path FROM FolderContent AS fc, Folder AS f WHERE fc.object = ?1 AND fc.folder = f.id", db, os);
     q.bindDataId(1, objectId);
     return q.selectStrings();
 }
@@ -414,7 +415,7 @@ void SQLiteObjectDbi::createFolder(const QString& path, U2OpStatus& os) {
         createFolder(parentFolder, os);
     }
 
-    SQLiteQuery q("INSERT INTO Folder(path) VALUES(?1)", db, os);
+    SQLiteWriteQuery q("INSERT INTO Folder(path) VALUES(?1)", db, os);
     q.bindString(1, canonicalPath);
     q.execute();
 
@@ -425,7 +426,7 @@ void SQLiteObjectDbi::createFolder(const QString& path, U2OpStatus& os) {
 
 bool SQLiteObjectDbi::removeFolder(const QString& folder, U2OpStatus& os) {
     // remove subfolders first
-    SQLiteQuery q("SELECT path FROM Folder WHERE path LIKE ?1 ORDER BY LENGTH(path) DESC", db, os);
+    SQLiteReadQuery q("SELECT path FROM Folder WHERE path LIKE ?1 ORDER BY LENGTH(path) DESC", db, os);
     q.bindString(1, folder + "/%");
     QStringList subfolders = q.selectStrings();
     CHECK_OP(os, false);
@@ -457,7 +458,7 @@ bool SQLiteObjectDbi::removeFolder(const QString& folder, U2OpStatus& os) {
 
     if (result) {
         // remove folder record
-        SQLiteQuery dq("DELETE FROM Folder WHERE path = ?1", db, os);
+        SQLiteWriteQuery dq("DELETE FROM Folder WHERE path = ?1", db, os);
         dq.bindString(1, folder);
         dq.execute();
         CHECK_OP(os, false);
@@ -473,9 +474,9 @@ void SQLiteObjectDbi::addObjectsToFolder(const QList<U2DataId>& objectIds, const
         return;
     }
     QList<U2DataId> addedObjects;
-    SQLiteQuery countQ("SELECT count(object) FROM FolderContent WHERE folder = ?1", db, os);
-    SQLiteQuery insertQ("INSERT INTO FolderContent(folder, object) VALUES(?1, ?2)", db, os);
-    SQLiteQuery toplevelQ("UPDATE Object SET rank = " + QString::number(U2DbiObjectRank_TopLevel) + " WHERE id = ?1", db, os);
+    SQLiteReadQuery countQ("SELECT count(object) FROM FolderContent WHERE folder = ?1", db, os);
+    SQLiteWriteQuery insertQ("INSERT INTO FolderContent(folder, object) VALUES(?1, ?2)", db, os);
+    SQLiteWriteQuery toplevelQ("UPDATE Object SET rank = " + QString::number(U2DbiObjectRank_TopLevel) + " WHERE id = ?1", db, os);
 
     foreach(const U2DataId& objectId, objectIds) {
         countQ.reset();
@@ -569,7 +570,7 @@ QStringList SQLiteObjectDbi::restoreObjects(const QList<U2DataId> &objectIds, U2
 }
 
 void SQLiteObjectDbi::incrementVersion(const U2DataId& id, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE Object SET version = version + 1 WHERE id = ?1", db, os);
+    SQLiteWriteQuery q("UPDATE Object SET version = version + 1 WHERE id = ?1", db, os);
     CHECK_OP(os, );
 
     q.bindDataId(1, id);
@@ -577,7 +578,7 @@ void SQLiteObjectDbi::incrementVersion(const U2DataId& id, U2OpStatus& os) {
 }
 
 void SQLiteObjectDbi::setVersion(const U2DataId& id, qint64 version, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE Object SET version = ?1 WHERE id = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Object SET version = ?1 WHERE id = ?2", db, os);
     SAFE_POINT_OP(os, );
 
     q.bindInt64(1, version);
@@ -638,13 +639,13 @@ void SQLiteObjectDbi::undo(const U2DataId& objId, U2OpStatus& os) {
 
         foreach (U2SingleModStep modStep, multiStepSingleSteps) {
             // Call an appropriate "undo" depending on the object type
-            if (U2ModType::isMsaModType(modStep.modType)) {
+            if (U2ModType::isUdrModType(modStep.modType)) {
+                dbi->getSQLiteUdrDbi()->undo(modStep, os);
+            } else if (U2ModType::isMsaModType(modStep.modType)) {
                 dbi->getSQLiteMsaDbi()->undo(modStep.objectId, modStep.modType, modStep.details, os);
-            }
-            else if (U2ModType::isSequenceModType(modStep.modType)) {
+            } else if (U2ModType::isSequenceModType(modStep.modType)) {
                 dbi->getSQLiteSequenceDbi()->undo(modStep.objectId, modStep.modType, modStep.details, os);
-            }
-            else if (U2ModType::isObjectModType(modStep.modType)) {
+            } else if (U2ModType::isObjectModType(modStep.modType)) {
                 if (U2ModType::objUpdatedName == modStep.modType) {
                     undoUpdateObjectName(modStep.objectId, modStep.details, os);
                     CHECK_OP(os, );
@@ -712,13 +713,13 @@ void SQLiteObjectDbi::redo(const U2DataId& objId, U2OpStatus& os) {
         QSet<U2DataId> objectIds;
 
         foreach (U2SingleModStep modStep, multiStepSingleSteps) {
-            if (U2ModType::isMsaModType(modStep.modType)) {
+            if (U2ModType::isUdrModType(modStep.modType)) {
+                dbi->getSQLiteUdrDbi()->redo(modStep, os);
+            } else if (U2ModType::isMsaModType(modStep.modType)) {
                 dbi->getSQLiteMsaDbi()->redo(modStep.objectId, modStep.modType, modStep.details, os);
-            }
-            else if (U2ModType::isSequenceModType(modStep.modType)) {
+            } else if (U2ModType::isSequenceModType(modStep.modType)) {
                 dbi->getSQLiteSequenceDbi()->redo(modStep.objectId, modStep.modType, modStep.details, os);
-            }
-            else if (U2ModType::isObjectModType(modStep.modType)) {
+            } else if (U2ModType::isObjectModType(modStep.modType)) {
                 if (U2ModType::objUpdatedName == modStep.modType) {
                     redoUpdateObjectName(modStep.objectId, modStep.details, os);
                     CHECK_OP(os, );
@@ -749,14 +750,14 @@ void SQLiteObjectDbi::undoUpdateObjectName(const U2DataId& id, const QByteArray&
     // Parse the input
     QString oldName;
     QString newName;
-    bool ok = PackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
+    bool ok = U2DbiPackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
     if (!ok) {
         os.setError("An error occurred during updating an object name!");
         return;
     }
 
     // Update the value
-    SQLiteQuery q("UPDATE Object SET name = ?1 WHERE id = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Object SET name = ?1 WHERE id = ?2", db, os);
     CHECK_OP(os, );
 
     q.bindString(1, oldName);
@@ -767,7 +768,7 @@ void SQLiteObjectDbi::undoUpdateObjectName(const U2DataId& id, const QByteArray&
 void SQLiteObjectDbi::redoUpdateObjectName(const U2DataId& id, const QByteArray& modDetails, U2OpStatus& os) {
     QString oldName;
     QString newName;
-    bool ok = PackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
+    bool ok = U2DbiPackUtils::unpackObjectNameDetails(modDetails, oldName, newName);
     if (!ok) {
         os.setError("An error occurred during updating an object name!");
         return;
@@ -783,7 +784,7 @@ void SQLiteObjectDbi::redoUpdateObjectName(const U2DataId& id, const QByteArray&
 }
 
 void SQLiteObjectDbi::removeParent(const U2DataId& parentId, const U2DataId& childId, bool removeDeadChild, U2OpStatus& os) {
-    SQLiteQuery q("DELETE FROM Parent WHERE parent = ?1 AND child = ?2", db, os);
+    SQLiteWriteQuery q("DELETE FROM Parent WHERE parent = ?1 AND child = ?2", db, os);
     q.bindDataId(1, parentId);
     q.bindDataId(2, childId);
     /*qint64 res = */q.update(1);
@@ -806,7 +807,7 @@ void SQLiteObjectDbi::removeParent(const U2DataId& parentId, const U2DataId& chi
 
 
 void SQLiteObjectDbi::setParent(const U2DataId& parentId, const U2DataId& childId, U2OpStatus& os) {
-    SQLiteQuery insertQ("INSERT OR IGNORE INTO Parent (parent, child) VALUES (?1, ?2)", db, os);
+    SQLiteWriteQuery insertQ("INSERT OR IGNORE INTO Parent (parent, child) VALUES (?1, ?2)", db, os);
     insertQ.bindDataId(1, parentId);
     insertQ.bindDataId(2, childId);
     insertQ.execute();
@@ -834,7 +835,7 @@ qint64 SQLiteObjectDbi::getObjectVersion(const U2DataId& objectId, U2OpStatus& o
 }
 
 void SQLiteObjectDbi::setTrackModType(const U2DataId& objectId, U2TrackModType trackModType, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE Object SET trackMod = ?1 WHERE id IN "
+    SQLiteWriteQuery q("UPDATE Object SET trackMod = ?1 WHERE id IN "
                     "(SELECT o.id FROM Object o, Parent p WHERE p.parent = ?2 AND p.child = o.id) OR id = ?2", db, os);
     CHECK_OP(os, );
     q.bindInt32(1, trackModType);
@@ -843,7 +844,7 @@ void SQLiteObjectDbi::setTrackModType(const U2DataId& objectId, U2TrackModType t
 }
 
 U2TrackModType SQLiteObjectDbi::getTrackModType(const U2DataId& objectId, U2OpStatus& os) {
-    SQLiteQuery q("SELECT trackMod FROM Object WHERE id = ?1", db, os);
+    SQLiteReadQuery q("SELECT trackMod FROM Object WHERE id = ?1", db, os);
     CHECK_OP(os, NoTrack);
 
     q.bindDataId(1, objectId);
@@ -898,7 +899,7 @@ U2DataId SQLiteObjectDbi::createObject(U2Object & object, const QString& folder,
 }
 
 void SQLiteObjectDbi::getObject(U2Object& object, const U2DataId& id, U2OpStatus& os) {
-    SQLiteQuery q("SELECT name, version, trackMod FROM Object WHERE id = ?1", db, os);
+    SQLiteReadQuery q("SELECT name, version, trackMod FROM Object WHERE id = ?1", db, os);
     q.bindDataId(1, id);
     if (q.step()) {
         object.id = id;
@@ -920,7 +921,7 @@ void SQLiteObjectDbi::getObject(U2Object& object, const U2DataId& id, U2OpStatus
 }
 
 U2DataId SQLiteObjectDbi::getObject(qint64 objectId, U2OpStatus& os) {
-    SQLiteQuery q("SELECT id, type FROM Object WHERE id = ?1", db, os);
+    SQLiteReadQuery q("SELECT id, type FROM Object WHERE id = ?1", db, os);
     q.bindInt64(1, objectId);
     if (q.step()) {
         U2DataId result = q.getDataIdExt(0);
@@ -937,7 +938,7 @@ QHash<U2DataId, QString> SQLiteObjectDbi::getObjectNames(qint64 offset, qint64 c
 
     static const QString queryString = "SELECT id, type, name FROM Object WHERE " + TOP_LEVEL_FILTER;
 
-    SQLiteQuery q(queryString, offset, count, db, os);
+    SQLiteReadQuery q(queryString, offset, count, db, os);
     CHECK_OP(os, result);
     while (q.step()) {
         const U2DataType type = q.getDataType(1);
@@ -957,7 +958,7 @@ void SQLiteObjectDbi::updateObject(U2Object& obj, U2OpStatus& os) {
 
 qint64 SQLiteObjectDbi::getFolderId(const QString& path, bool mustExist, DbRef* db, U2OpStatus& os) {
     static const QString queryString("SELECT id FROM Folder WHERE path = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindString(1, path);
     qint64 res = q.selectInt64();
     if (os.hasError()) {
@@ -970,13 +971,13 @@ qint64 SQLiteObjectDbi::getFolderId(const QString& path, bool mustExist, DbRef*
 }
 
 qint64 SQLiteObjectDbi::getFolderLocalVersion(const QString& folder, U2OpStatus& os) {
-    SQLiteQuery q("SELECT vlocal FROM Folder WHERE path = ?1", db, os);
+    SQLiteReadQuery q("SELECT vlocal FROM Folder WHERE path = ?1", db, os);
     q.bindString(1, folder);
     return q.selectInt64();
 }
 
 qint64 SQLiteObjectDbi::getFolderGlobalVersion(const QString& folder, U2OpStatus& os) {
-    SQLiteQuery q("SELECT vglobal FROM Folder WHERE path = ?1", db, os);
+    SQLiteReadQuery q("SELECT vglobal FROM Folder WHERE path = ?1", db, os);
     q.bindString(1, folder);
     return q.selectInt64();
 }
@@ -988,7 +989,14 @@ void SQLiteObjectDbi::setObjectRank(const U2DataId &objectId, U2DbiObjectRank ne
     CHECK_OP(os, );
     query->bindInt32(1, newRank);
     query->bindDataId(2, objectId);
-    query->update(1);
+    const int affectedRowsCount = query->update(-1);
+    SAFE_POINT_EXT(-1 == affectedRowsCount || 0 == affectedRowsCount || affectedRowsCount == 1, os.setError(U2DbiL10n::tr("Unexpected row count! Query: '%1', rows: %2").arg(query->getQueryText()).arg(affectedRowsCount)), );
+}
+
+U2DbiObjectRank SQLiteObjectDbi::getObjectRank(const U2DataId &objectId, U2OpStatus& os) {
+    SQLiteReadQuery q("SELECT rank FROM Object WHERE id = ?1", db, os);
+    q.bindDataId(1, objectId);
+    return static_cast<U2DbiObjectRank> (q.selectInt32());
 }
 
 void SQLiteObjectDbi::onFolderUpdated(const QString& ) {
@@ -1013,7 +1021,7 @@ void SQLiteCrossDatabaseReferenceDbi::initSqlSchema(U2OpStatus& os) {
     // dbi - remote dbi id (url)
     // rid  - remote object id
     // version - remove object version
-    SQLiteQuery("CREATE TABLE CrossDatabaseReference (object INTEGER, factory TEXT NOT NULL, dbi TEXT NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE CrossDatabaseReference (object INTEGER, factory TEXT NOT NULL, dbi TEXT NOT NULL, "
                             "rid BLOB NOT NULL, version INTEGER NOT NULL, "
                             " FOREIGN KEY(object) REFERENCES Object(id) )", db, os).execute();
 }
@@ -1025,7 +1033,7 @@ void SQLiteCrossDatabaseReferenceDbi::createCrossReference(U2CrossDatabaseRefere
         return;
     }
 
-    SQLiteQuery q("INSERT INTO CrossDatabaseReference(object, factory, dbi, rid, version) VALUES(?1, ?2, ?3, ?4, ?5)", db, os);
+    SQLiteWriteQuery q("INSERT INTO CrossDatabaseReference(object, factory, dbi, rid, version) VALUES(?1, ?2, ?3, ?4, ?5)", db, os);
     q.bindDataId(1, reference.id);
     q.bindString(2, reference.dataRef.dbiRef.dbiFactoryId);
     q.bindString(3, reference.dataRef.dbiRef.dbiId);
@@ -1036,14 +1044,14 @@ void SQLiteCrossDatabaseReferenceDbi::createCrossReference(U2CrossDatabaseRefere
 
 void SQLiteCrossDatabaseReferenceDbi::removeCrossReferenceData(const U2DataId &referenceId, U2OpStatus &os) {
     static const QString queryString = "DELETE FROM CrossDatabaseReference WHERE object = ?1";
-    SQLiteQuery q(queryString, db, os);
+    SQLiteWriteQuery q(queryString, db, os);
     q.bindDataId(1, referenceId);
     q.execute();
 }
 
 U2CrossDatabaseReference SQLiteCrossDatabaseReferenceDbi::getCrossReference(const U2DataId& objectId, U2OpStatus& os) {
     U2CrossDatabaseReference res(objectId, dbi->getDbiId(), 0);
-    SQLiteQuery q("SELECT r.factory, r.dbi, r.rid, r.version, o.name, o.version FROM CrossDatabaseReference AS r, Object AS o "
+    SQLiteReadQuery q("SELECT r.factory, r.dbi, r.rid, r.version, o.name, o.version FROM CrossDatabaseReference AS r, Object AS o "
         " WHERE o.id = ?1 AND r.object = o.id", db, os);
     q.bindDataId(1, objectId);
     if (q.step())  {
@@ -1059,7 +1067,7 @@ U2CrossDatabaseReference SQLiteCrossDatabaseReferenceDbi::getCrossReference(cons
 }
 
 void SQLiteCrossDatabaseReferenceDbi::updateCrossReference(const U2CrossDatabaseReference& reference, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE CrossDatabaseReference SET factory = ?1, dbi = ?2, rid = ?3, version = ?4 WHERE object = ?5", db, os);
+    SQLiteWriteQuery q("UPDATE CrossDatabaseReference SET factory = ?1, dbi = ?2, rid = ?3, version = ?4 WHERE object = ?5", db, os);
     q.bindString(1, reference.dataRef.dbiRef.dbiFactoryId);
     q.bindString(2, reference.dataRef.dbiRef.dbiId);
     q.bindBlob(3, reference.dataRef.entityId);
@@ -1069,15 +1077,13 @@ void SQLiteCrossDatabaseReferenceDbi::updateCrossReference(const U2CrossDatabase
 }
 
 
-ModificationAction::ModificationAction(SQLiteDbi* _dbi, const U2DataId& _masterObjId)
-    : dbi(_dbi),
-      masterObjId(_masterObjId),
-      trackMod(NoTrack)
+SQLiteModificationAction::SQLiteModificationAction(SQLiteDbi* _dbi, const U2DataId& _masterObjId)
+    : ModificationAction(_dbi, _masterObjId)
 {
-    objIds.insert(masterObjId);
+
 }
 
-U2TrackModType ModificationAction::prepare(U2OpStatus& os) {
+U2TrackModType SQLiteModificationAction::prepare(U2OpStatus& os) {
     trackMod = dbi->getObjectDbi()->getTrackModType(masterObjId, os);
     if (os.hasError()) {
         trackMod = NoTrack;
@@ -1091,17 +1097,17 @@ U2TrackModType ModificationAction::prepare(U2OpStatus& os) {
         // If a user mod step has already been created for this action
         // then it can not be deleted. The version must be incremented.
         // Obsolete duplicate step must be deleted
-        if (dbi->getSQLiteModDbi()->isUserStepStarted(masterObjId)) {
-            dbi->getSQLiteModDbi()->removeDuplicateUserStep(masterObjId, masterObjVersionToTrack, os);
+        if (getDbi()->getSQLiteModDbi()->isUserStepStarted(masterObjId)) {
+            getDbi()->getSQLiteModDbi()->removeDuplicateUserStep(masterObjId, masterObjVersionToTrack, os);
 
             // Increment the object version
             masterObjVersionToTrack++;
         }
 
         // A user pressed "Undo" (maybe several times), did another action => there is no more "Redo" history
-        dbi->getSQLiteModDbi()->removeModsWithGreaterVersion(masterObjId, masterObjVersionToTrack, os);
+        getDbi()->getSQLiteModDbi()->removeModsWithGreaterVersion(masterObjId, masterObjVersionToTrack, os);
         if (os.hasError()) {
-            dbi->getSQLiteModDbi()->cleanUpAllStepsOnError();
+            getDbi()->getSQLiteModDbi()->cleanUpAllStepsOnError();
             return trackMod;
         }
     }
@@ -1109,7 +1115,7 @@ U2TrackModType ModificationAction::prepare(U2OpStatus& os) {
     return trackMod;
 }
 
-void ModificationAction::addModification(const U2DataId& objId, qint64 modType, const QByteArray& modDetails, U2OpStatus& os) {
+void SQLiteModificationAction::addModification(const U2DataId& objId, qint64 modType, const QByteArray& modDetails, U2OpStatus& os) {
     objIds.insert(objId);
 
     if (TrackOnUpdate == trackMod) {
@@ -1118,7 +1124,7 @@ void ModificationAction::addModification(const U2DataId& objId, qint64 modType,
         qint64 objVersion = dbi->getObjectDbi()->getObjectVersion(objId, os);
         SAFE_POINT_OP(os, );
 
-        if ((objId == masterObjId) && (dbi->getSQLiteModDbi()->isUserStepStarted(masterObjId))) {
+        if ((objId == masterObjId) && (getDbi()->getSQLiteModDbi()->isUserStepStarted(masterObjId))) {
             objVersion++;
         }
 
@@ -1132,22 +1138,22 @@ void ModificationAction::addModification(const U2DataId& objId, qint64 modType,
     }
 }
 
-void ModificationAction::complete(U2OpStatus& os) {
+void SQLiteModificationAction::complete(U2OpStatus& os) {
     // Save modification tracks, if required
     if (TrackOnUpdate == trackMod) {
         if (0 == singleSteps.size()) {
             // do nothing
         }
         else if (1 == singleSteps.size()) {
-            dbi->getSQLiteModDbi()->createModStep(masterObjId, singleSteps.first(), os);
+            getDbi()->getSQLiteModDbi()->createModStep(masterObjId, singleSteps.first(), os);
             SAFE_POINT_OP(os, );
         }
         else {
-            U2UseCommonMultiModStep multi(dbi, masterObjId, os);
+            U2UseCommonMultiModStep multi(getDbi(), masterObjId, os);
             SAFE_POINT_OP(os, );
 
             foreach (U2SingleModStep singleStep, singleSteps) {
-                dbi->getSQLiteModDbi()->createModStep(masterObjId, singleStep, os);
+                getDbi()->getSQLiteModDbi()->createModStep(masterObjId, singleStep, os);
                 SAFE_POINT_OP(os, );
             }
         }
@@ -1155,11 +1161,14 @@ void ModificationAction::complete(U2OpStatus& os) {
 
     // Increment versions of all objects
     foreach (const U2DataId& objId, objIds) {
-        SQLiteObjectDbi::incrementVersion(objId, dbi->getDbRef(), os);
+        SQLiteObjectDbi::incrementVersion(objId, getDbi()->getDbRef(), os);
         SAFE_POINT_OP(os, );
     }
 }
 
+SQLiteDbi* SQLiteModificationAction::getDbi() const {
+    return static_cast<SQLiteDbi*>(dbi);
+}
 
 /************************************************************************/
 /* SQLiteObjectDbiUtils */
@@ -1169,7 +1178,7 @@ void SQLiteObjectDbiUtils::renameObject(SQLiteDbi *dbi, U2Object &object, const
     SQLiteTransaction t(dbi->getDbRef(), os);
     Q_UNUSED(t);
 
-    ModificationAction updateAction(dbi, object.id);
+    SQLiteModificationAction updateAction(dbi, object.id);
     updateAction.prepare(os);
     SAFE_POINT_OP(os, );
 
@@ -1181,14 +1190,14 @@ void SQLiteObjectDbiUtils::renameObject(SQLiteDbi *dbi, U2Object &object, const
     SAFE_POINT_OP(os, );
 }
 
-void SQLiteObjectDbiUtils::renameObject(ModificationAction& updateAction, SQLiteDbi *dbi, U2Object &object, const QString &newName, U2OpStatus &os) {
+void SQLiteObjectDbiUtils::renameObject(SQLiteModificationAction& updateAction, SQLiteDbi *dbi, U2Object &object, const QString &newName, U2OpStatus &os) {
     SAFE_POINT(NULL != dbi, "NULL dbi!", );
     SQLiteTransaction t(dbi->getDbRef(), os);
     Q_UNUSED(t);
 
     QByteArray modDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
-        modDetails = PackUtils::packObjectNameDetails(object.visualName, newName);
+        modDetails = U2DbiPackUtils::packObjectNameDetails(object.visualName, newName);
     }
 
     object.visualName = newName;
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
index 47937fc..1425d42 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -89,6 +89,9 @@ public:
     /**  Returns all folders this object must be shown in  */
     virtual QStringList getObjectFolders(const U2DataId& objectId, U2OpStatus& os);
 
+    /** Returns object rank of the given object */
+    virtual U2DbiObjectRank getObjectRank(const U2DataId &objectId, U2OpStatus& os);
+
     // Write methods for objects
 
     /**
@@ -272,9 +275,9 @@ public:
 };
 
 /** Helper class to track info about an object */
-class U2FORMATS_EXPORT ModificationAction {
+class U2FORMATS_EXPORT SQLiteModificationAction : public ModificationAction {
 public:
-    ModificationAction(SQLiteDbi* dbi, const U2DataId& masterObjId);
+    SQLiteModificationAction(SQLiteDbi* dbi, const U2DataId& masterObjId);
 
     /**
         Verifies if modification tracking is enabled for the object.
@@ -296,15 +299,8 @@ public:
      */
     void complete(U2OpStatus& os);
 
-    /** Returns modification tracking type of the master object. */
-    U2TrackModType getTrackModType() const { return trackMod; }
-
 private:
-    SQLiteDbi* dbi;
-    U2DataId masterObjId;
-    U2TrackModType trackMod;
-    QSet<U2DataId> objIds;
-    QList<U2SingleModStep> singleSteps;
+    SQLiteDbi* getDbi() const;
 };
 
 class SQLiteObjectDbiUtils {
@@ -315,7 +311,7 @@ public:
      * Applies all changes to @object too.
      */
     static void renameObject(SQLiteDbi *dbi, U2Object &object, const QString &newName, U2OpStatus &os);
-    static void renameObject(ModificationAction& updateAction, SQLiteDbi *dbi, U2Object &object, const QString &newName, U2OpStatus &os);
+    static void renameObject(SQLiteModificationAction& updateAction, SQLiteDbi *dbi, U2Object &object, const QString &newName, U2OpStatus &os);
 };
 
 } //namespace
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.cpp
index fc17c18..34c1f0d 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,19 +33,19 @@ SQLiteObjectRelationsDbi::SQLiteObjectRelationsDbi( SQLiteDbi *dbi )
 }
 
 void SQLiteObjectRelationsDbi::initSqlSchema( U2OpStatus &os ) {
-    SQLiteQuery( "CREATE TABLE IF NOT EXISTS ObjectRelation (object INTEGER NOT NULL, "
+    SQLiteWriteQuery( "CREATE TABLE IF NOT EXISTS ObjectRelation (object INTEGER NOT NULL, "
         "reference INTEGER NOT NULL, role INTEGER NOT NULL, "
         "PRIMARY KEY(object, reference), "
         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE,"
         "FOREIGN KEY(reference) REFERENCES Object(id) ON DELETE CASCADE)", db, os ).execute( );
     CHECK_OP( os, );
 
-    SQLiteQuery( "CREATE INDEX IF NOT EXISTS ObjectRelationRole ON ObjectRelation(role)", db, os ).execute( );
+    SQLiteWriteQuery( "CREATE INDEX IF NOT EXISTS ObjectRelationRole ON ObjectRelation(role)", db, os ).execute( );
 }
 
 void SQLiteObjectRelationsDbi::createObjectRelation( U2ObjectRelation &relation, U2OpStatus &os ) {
     static const QString queryString( "INSERT INTO ObjectRelation (object, reference, role) VALUES(?1, ?2, ?3)" );
-    SQLiteQuery q( queryString, db, os );
+    SQLiteWriteQuery q( queryString, db, os );
     CHECK_OP(os, );
     q.bindDataId( 1, relation.id );
     q.bindDataId( 2, relation.referencedObject );
@@ -60,7 +60,7 @@ QList<U2ObjectRelation> SQLiteObjectRelationsDbi::getObjectRelations( const U2Da
 
     static const QString queryString = "SELECT o.type, o.name, o_r.object, o_r.reference, o_r.role FROM ObjectRelation AS o_r "
         "INNER JOIN Object AS o ON o.id = o_r.reference WHERE o_r.object = ?1";
-    SQLiteQuery q( queryString, db, os );
+    SQLiteReadQuery q( queryString, db, os );
     CHECK_OP(os, result);
     q.bindDataId( 1, object );
     while ( q.step( ) ) {
@@ -86,7 +86,7 @@ QList<U2DataId> SQLiteObjectRelationsDbi::getReferenceRelatedObjects( const U2Da
 
     static const QString queryString = "SELECT o.id, o.type FROM Object AS o INNER JOIN ObjectRelation AS o_r "
         "ON o.id = o_r.object WHERE o_r.reference = ?1 AND o_r.role = ?2";
-    SQLiteQuery q( queryString, db, os );
+    SQLiteReadQuery q( queryString, db, os );
     CHECK_OP(os, result);
     q.bindDataId( 1, reference );
     q.bindInt32( 2, relationRole );
@@ -102,7 +102,7 @@ QList<U2DataId> SQLiteObjectRelationsDbi::getReferenceRelatedObjects( const U2Da
 void SQLiteObjectRelationsDbi::removeObjectRelation( U2ObjectRelation &relation, U2OpStatus &os ) {
     static const QString queryString( "DELETE FROM ObjectRelation "
         "WHERE object = ?1 AND reference = ?2" );
-    SQLiteQuery q( queryString, db, os );
+    SQLiteWriteQuery q( queryString, db, os );
     CHECK_OP(os, );
     q.bindDataId( 1, relation.id );
     q.bindDataId( 2, relation.referencedObject );
@@ -111,7 +111,7 @@ void SQLiteObjectRelationsDbi::removeObjectRelation( U2ObjectRelation &relation,
 
 void SQLiteObjectRelationsDbi::removeAllObjectRelations( const U2DataId &object, U2OpStatus &os ) {
     static const QString queryString( "DELETE FROM ObjectRelation WHERE object = ?1 OR reference = ?1" );
-    SQLiteQuery q( queryString, db, os );
+    SQLiteWriteQuery q( queryString, db, os );
     CHECK_OP(os, );
     q.bindDataId( 1, object );
     q.execute( );
@@ -119,7 +119,7 @@ void SQLiteObjectRelationsDbi::removeAllObjectRelations( const U2DataId &object,
 
 void SQLiteObjectRelationsDbi::removeReferencesForObject( const U2DataId &object, U2OpStatus &os ) {
     static const QString queryString( "DELETE FROM ObjectRelation WHERE object = ?1" );
-    SQLiteQuery q( queryString, db, os );
+    SQLiteWriteQuery q( queryString, db, os );
     CHECK_OP(os, );
     q.bindDataId( 1, object );
     q.execute( );
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.h
index be14cce..152c0a6 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteObjectRelationsDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.cpp
index b64af05..844ba3e 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,15 +34,15 @@ SQLiteSequenceDbi::SQLiteSequenceDbi(SQLiteDbi* dbi) : U2SequenceDbi(dbi), SQLit
 
 void SQLiteSequenceDbi::initSqlSchema(U2OpStatus& os) {
     // sequence object
-    SQLiteQuery("CREATE TABLE Sequence (object INTEGER PRIMARY KEY, length INTEGER NOT NULL DEFAULT 0, alphabet TEXT NOT NULL, circular INTEGER NOT NULL DEFAULT 0, "
+    SQLiteWriteQuery("CREATE TABLE Sequence (object INTEGER PRIMARY KEY, length INTEGER NOT NULL DEFAULT 0, alphabet TEXT NOT NULL, circular INTEGER NOT NULL DEFAULT 0, "
                 "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE)", db, os).execute();
 
     // part of the sequence, starting with 'sstart'(inclusive) and ending at 'send'(not inclusive)
-    SQLiteQuery("CREATE TABLE SequenceData (sequence INTEGER, sstart INTEGER NOT NULL, send INTEGER NOT NULL, data BLOB NOT NULL, "
+    SQLiteWriteQuery("CREATE TABLE SequenceData (sequence INTEGER, sstart INTEGER NOT NULL, send INTEGER NOT NULL, data BLOB NOT NULL, "
                 "PRIMARY KEY (sequence, sstart, send), "
                 "FOREIGN KEY(sequence) REFERENCES Sequence(object) ON DELETE CASCADE)", db, os).execute();
 
-    SQLiteQuery("CREATE INDEX SequenceData_sequence_send on SequenceData(sequence, send)", db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX SequenceData_sequence_send on SequenceData(sequence, send)", db, os).execute();
 }
 
 U2Sequence SQLiteSequenceDbi::getSequenceObject(const U2DataId& sequenceId, U2OpStatus& os) {
@@ -54,7 +54,7 @@ U2Sequence SQLiteSequenceDbi::getSequenceObject(const U2DataId& sequenceId, U2Op
     CHECK_OP(os, res);
 
     static const QString queryString("SELECT Sequence.length, Sequence.alphabet, Sequence.circular FROM Sequence WHERE Sequence.object = ?1");
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     q.bindDataId(1, sequenceId);
     if (q.step()) {
         res.length = q.getInt64(0);
@@ -76,7 +76,7 @@ QByteArray SQLiteSequenceDbi::getSequenceData(const U2DataId& sequenceId, const
             res.reserve(region.length);
         }
         // Get all chunks that intersect the region
-        SQLiteQuery q("SELECT sstart, send, data FROM SequenceData WHERE sequence = ?1 "
+        SQLiteReadQuery q("SELECT sstart, send, data FROM SequenceData WHERE sequence = ?1 "
             "AND  (send >= ?2 AND sstart < ?3) ORDER BY sstart", db, os);
 
         q.bindDataId(1, sequenceId);
@@ -187,9 +187,13 @@ static QList<QByteArray> quantify(const QList<QByteArray>& input) {
 }
 
 void SQLiteSequenceDbi::updateSequenceData(const U2DataId& sequenceId, const U2Region& regionToReplace, const QByteArray& dataToInsert, const QVariantMap &hints, U2OpStatus& os) {
+    updateSequenceData(sequenceId, sequenceId, regionToReplace, dataToInsert, hints, os);
+}
+
+void SQLiteSequenceDbi::updateSequenceData(const U2DataId &masterId, const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os) {
     SQLiteTransaction t(db, os);
 
-    ModificationAction updateAction(dbi, sequenceId);
+    SQLiteModificationAction updateAction(dbi, masterId);
     updateAction.prepare(os);
     SAFE_POINT_OP(os, );
 
@@ -200,14 +204,14 @@ void SQLiteSequenceDbi::updateSequenceData(const U2DataId& sequenceId, const U2R
     SAFE_POINT_OP(os, );
 }
 
-void SQLiteSequenceDbi::updateSequenceData(ModificationAction& updateAction, const U2DataId& sequenceId, const U2Region& regionToReplace,
+void SQLiteSequenceDbi::updateSequenceData(SQLiteModificationAction& updateAction, const U2DataId& sequenceId, const U2Region& regionToReplace,
     const QByteArray& dataToInsert, const QVariantMap &hints, U2OpStatus& os)
 {
     QByteArray modDetails;
     if (TrackOnUpdate == updateAction.getTrackModType()) {
         QByteArray oldSeq = dbi->getSequenceDbi()->getSequenceData(sequenceId, regionToReplace, os);
         SAFE_POINT_OP(os, );
-        modDetails = PackUtils::packSequenceDataDetails(regionToReplace, oldSeq, dataToInsert, hints);
+        modDetails = U2DbiPackUtils::packSequenceDataDetails(regionToReplace, oldSeq, dataToInsert, hints);
     }
 
     updateSequenceDataCore(sequenceId, regionToReplace, dataToInsert, hints, os);
@@ -371,7 +375,7 @@ void SQLiteSequenceDbi::undoUpdateSequenceData(const U2DataId& sequenceId, const
     QByteArray oldData;
     QByteArray newData;
     QVariantMap hints;
-    bool ok = PackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
+    bool ok = U2DbiPackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
     if (!ok) {
         os.setError("An error occurred during reverting replacing sequence data!");
         return;
@@ -389,7 +393,7 @@ void SQLiteSequenceDbi::redoUpdateSequenceData(const U2DataId& sequenceId, const
     QByteArray oldData;
     QByteArray newData;
     QVariantMap hints;
-    bool ok = PackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
+    bool ok = U2DbiPackUtils::unpackSequenceDataDetails(modDetails, replacedRegion, oldData, newData, hints);
     if (!ok) {
         os.setError("An error occurred during replacing sequence data!");
         return;
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.h
index 5c86a3c..6a97702 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteSequenceDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -66,9 +66,11 @@ public:
         //TODO think about annotations: should we fix locations automatically?? If yes, emit notifications??
     */
     virtual void updateSequenceData(const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
+    virtual void updateSequenceData(const U2DataId &masterId, const U2DataId &sequenceId,
+                                    const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
 
     /** The same as above, except passed modification action is used */
-    void updateSequenceData(ModificationAction &updateAction, const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
+    void updateSequenceData(SQLiteModificationAction &updateAction, const U2DataId &sequenceId, const U2Region &regionToReplace, const QByteArray &dataToInsert, const QVariantMap &hints, U2OpStatus &os);
 
     virtual void initSqlSchema(U2OpStatus& os);
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.cpp
index 6de1fed..ea06426 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,8 @@
  */
 
 #include <U2Core/AppContext.h>
+#include <U2Core/RawDataUdrSchema.h>
+#include <U2Core/U2DbiPackUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UdrSchemaRegistry.h>
 
@@ -45,13 +47,35 @@ SQLiteUdrDbi::SQLiteUdrDbi(SQLiteDbi *dbi)
 
 }
 
+void SQLiteUdrDbi::undo(const U2SingleModStep &modStep, U2OpStatus &os) {
+    SAFE_POINT_EXT(modStep.modType == U2ModType::udrUpdated, os.setError("Unknown modStep"), );
+
+    QByteArray oldData;
+    QByteArray newData;
+    bool ok = U2DbiPackUtils::unpackUdr(modStep.details, oldData, newData);
+    CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating UDR")), );
+
+    RawDataUdrSchema::writeContent(oldData, U2EntityRef(getRootDbi()->getDbiRef(), modStep.objectId), os);
+}
+
+void SQLiteUdrDbi::redo(const U2SingleModStep &modStep, U2OpStatus &os) {
+    SAFE_POINT_EXT(modStep.modType == U2ModType::udrUpdated, os.setError("Unknown modStep"), );
+
+    QByteArray oldData;
+    QByteArray newData;
+    bool ok = U2DbiPackUtils::unpackUdr(modStep.details, oldData, newData);
+    CHECK_EXT(ok, os.setError(U2DbiL10n::tr("An error occurred during updating UDR")), );
+
+    RawDataUdrSchema::writeContent(newData, U2EntityRef(getRootDbi()->getDbiRef(), modStep.objectId), os);
+}
+
 UdrRecordId SQLiteUdrDbi::addRecord(const UdrSchemaId &schemaId, const QList<UdrValue> &data, U2OpStatus &os) {
     UdrRecordId result("", "");
     const UdrSchema *schema = udrSchema(schemaId, os);
     CHECK_OP(os, result);
     CHECK_EXT(data.size() == schema->size(), os.setError("Size mismatch"), result);
 
-    SQLiteQuery q(insertDef(schema, os), db, os);
+    SQLiteWriteQuery q(insertDef(schema, os), db, os);
     CHECK_OP(os, result);
 
     bindData(data, schema, q, os);
@@ -66,7 +90,7 @@ void SQLiteUdrDbi::updateRecord(const UdrRecordId &recordId, const QList<UdrValu
     CHECK_OP(os, );
     CHECK_EXT(data.size() == schema->size(), os.setError("Size mismatch"), );
 
-    SQLiteQuery q(updateDef(schema, os), db, os);
+    SQLiteWriteQuery q(updateDef(schema, os), db, os);
     CHECK_OP(os, );
 
     bindData(data, schema, q, os);
@@ -82,7 +106,7 @@ UdrRecord SQLiteUdrDbi::getRecord(const UdrRecordId &recordId, U2OpStatus &os) {
     const UdrSchema *schema = udrSchema(recordId.getSchemaId(), os);
     CHECK_OP(os, result);
 
-    SQLiteQuery q(selectDef(schema, os), db, os);
+    SQLiteReadQuery q(selectDef(schema, os), db, os);
     CHECK_OP(os, result);
 
     q.bindDataId(1, recordId.getRecordId());
@@ -111,7 +135,7 @@ QList<U2DataId> SQLiteUdrDbi::getObjectRecordIds(const UdrSchema *schema, const
     QList<U2DataId> result;
     SAFE_POINT_EXT(schema->hasObjectReference(), os.setError("No object reference"), result);
 
-    SQLiteQuery q("SELECT " + UdrSchema::RECORD_ID_FIELD_NAME + " FROM " + tableName(schema->getId()) + " WHERE " + UdrSchema::OBJECT_FIELD_NAME + " = ?1", db, os);
+    SQLiteReadQuery q("SELECT " + UdrSchema::RECORD_ID_FIELD_NAME + " FROM " + tableName(schema->getId()) + " WHERE " + UdrSchema::OBJECT_FIELD_NAME + " = ?1", db, os);
     q.bindDataId(1, objectId);
 
     while (q.step()) {
@@ -141,7 +165,7 @@ QList<UdrRecord> SQLiteUdrDbi::getRecords(const UdrSchemaId &schemaId, U2OpStatu
     const UdrSchema *schema = udrSchema(schemaId, os);
     CHECK_OP(os, result);
 
-    SQLiteQuery q(selectAllDef(schema, os), db, os);
+    SQLiteReadQuery q(selectAllDef(schema, os), db, os);
     CHECK_OP(os, result);
 
     while (q.step()) {
@@ -156,7 +180,7 @@ QList<UdrRecord> SQLiteUdrDbi::getRecords(const UdrSchemaId &schemaId, U2OpStatu
 }
 
 void SQLiteUdrDbi::removeRecord(const UdrRecordId &recordId, U2OpStatus &os) {
-    SQLiteQuery q("DELETE FROM " + tableName(recordId.getSchemaId()) + " WHERE " + UdrSchema::RECORD_ID_FIELD_NAME + " = ?1", db, os);
+    SQLiteWriteQuery q("DELETE FROM " + tableName(recordId.getSchemaId()) + " WHERE " + UdrSchema::RECORD_ID_FIELD_NAME + " = ?1", db, os);
     q.bindDataId(1, recordId.getRecordId());
     q.execute();
 }
@@ -177,6 +201,10 @@ OutputStream * SQLiteUdrDbi::createOutputStream(const UdrRecordId &recordId, int
     return new SQLiteBlobOutputStream(db, tableName(recordId.getSchemaId()).toLatin1(), field.getName(), recordId.getRecordId(), (int)size, os);
 }
 
+ModificationAction* SQLiteUdrDbi::getModificationAction(const U2DataId& id) {
+    return new SQLiteModificationAction(dbi, id);
+}
+
 /************************************************************************/
 /* SQL initialization */
 /************************************************************************/
@@ -218,7 +246,7 @@ void SQLiteUdrDbi::createTable(const UdrSchema *schema, U2OpStatus &os) {
     CHECK_OP(os, );
     query += ")";
 
-    SQLiteQuery(query, db, os).execute();
+    SQLiteWriteQuery(query, db, os).execute();
 }
 
 void SQLiteUdrDbi::createIndex(const UdrSchemaId &schemaId, const QStringList &fields, U2OpStatus &os) {
@@ -229,7 +257,7 @@ void SQLiteUdrDbi::createIndex(const UdrSchemaId &schemaId, const QStringList &f
         + fields.join(", ")
         + ")";
 
-    SQLiteQuery(query, db, os).execute();
+    SQLiteWriteQuery(query, db, os).execute();
 }
 
 /************************************************************************/
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.h
index ffdb0a6..fd7ca93 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteUdrDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,6 +30,9 @@ class SQLiteUdrDbi : public UdrDbi, public SQLiteChildDBICommon {
 public:
     SQLiteUdrDbi(SQLiteDbi *dbi);
 
+    void undo(const U2SingleModStep& modStep, U2OpStatus& os);
+    void redo(const U2SingleModStep& modStep, U2OpStatus& os);
+
     UdrRecordId addRecord(const UdrSchemaId &schemaId, const QList<UdrValue> &data, U2OpStatus &os);
     void updateRecord(const UdrRecordId &recordId, const QList<UdrValue> &data, U2OpStatus &os);
     UdrRecord getRecord(const UdrRecordId &recordId, U2OpStatus &os);
@@ -41,6 +44,8 @@ public:
     OutputStream * createOutputStream(const UdrRecordId &recordId, int fieldNum, qint64 size, U2OpStatus &os);
     void initSqlSchema(U2OpStatus &os);
 
+    ModificationAction* getModificationAction(const U2DataId& id);
+
 private:
     void initSchema(const UdrSchema *schema, U2OpStatus &os);
     void createTable(const UdrSchema *schema, U2OpStatus &os);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.cpp
index 73185a9..587f35d 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ void SQLiteVariantDbi::initSqlSchema(U2OpStatus& os) {
         return;
     }
     // Variant track object
-    SQLiteQuery(" CREATE TABLE VariantTrack (object INTEGER PRIMARY KEY, sequence INTEGER, "
+    SQLiteWriteQuery(" CREATE TABLE VariantTrack (object INTEGER PRIMARY KEY, sequence INTEGER, "
         "sequenceName TEXT NOT NULL, trackType INTEGER DEFAULT 1, fileHeader TEXT, "
         "FOREIGN KEY(object) REFERENCES Object(id) ON DELETE CASCADE)", db, os).execute();
 
@@ -48,7 +48,7 @@ void SQLiteVariantDbi::initSqlSchema(U2OpStatus& os) {
     // comment - comment visible for user
     // publicId - identifier visible for user
     // additionalInfo - added for vcf4 support
-    SQLiteQuery("CREATE TABLE Variant(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
+    SQLiteWriteQuery("CREATE TABLE Variant(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "
         "track INTEGER, startPos INTEGER, endPos INTEGER, refData BLOB NOT NULL, "
         "obsData BLOB NOT NULL, publicId TEXT NOT NULL, additionalInfo TEXT, "
         "FOREIGN KEY(track) REFERENCES VariantTrack(object) ON DELETE CASCADE)", db, os).execute();
@@ -62,7 +62,7 @@ U2VariantTrack SQLiteVariantDbi::getVariantTrack(const U2DataId& variantTrackId,
     dbi->getSQLiteObjectDbi()->getObject(res, variantTrackId, os);
     CHECK_OP(os, res);
 
-    SQLiteQuery q("SELECT sequence, sequenceName, trackType, fileHeader FROM VariantTrack WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT sequence, sequenceName, trackType, fileHeader FROM VariantTrack WHERE object = ?1", db, os);
     q.bindDataId(1, variantTrackId);
     if (q.step())  {
         res.sequence = q.getDataId(0, U2Type::Sequence);
@@ -78,7 +78,7 @@ U2VariantTrack SQLiteVariantDbi::getVariantTrackofVariant( const U2DataId& varia
 
     DBI_TYPE_CHECK(variantId, U2Type::VariantType, os, res);
 
-    SQLiteQuery q("SELECT track FROM Variant WHERE id = ?1", db, os);
+    SQLiteReadQuery q("SELECT track FROM Variant WHERE id = ?1", db, os);
     q.bindDataId(1, variantId);
 
     if(q.step()){
@@ -110,7 +110,7 @@ void SQLiteVariantDbi::addVariantsToTrack(const U2VariantTrack& track, U2DbiIter
         q2->bindBlob(4, var.refData);
         q2->bindBlob(5, var.obsData);
         q2->bindString(6, var.publicId);
-        q2->bindString(7, U2DbiUtils::packMap(var.additionalInfo));
+        q2->bindString(7, StrPackUtils::packMap(var.additionalInfo));
 
         var.id = q2->insert(U2Type::VariantType);
         SAFE_POINT_OP(os,);
@@ -120,8 +120,8 @@ void SQLiteVariantDbi::addVariantsToTrack(const U2VariantTrack& track, U2DbiIter
 
 
 void SQLiteVariantDbi::createVariationsIndex( U2OpStatus& os ){
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS VariantIndex ON Variant(track)" ,db, os).execute();
-    SQLiteQuery("CREATE INDEX IF NOT EXISTS VariantIndexstartPos ON Variant(startPos)" ,db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS VariantIndex ON Variant(track)" ,db, os).execute();
+    SQLiteWriteQuery("CREATE INDEX IF NOT EXISTS VariantIndexstartPos ON Variant(startPos)" ,db, os).execute();
 }
 
 
@@ -137,7 +137,7 @@ void SQLiteVariantDbi::createVariantTrack(U2VariantTrack& track, VariantTrackTyp
 
     track.trackType = trackType;
 
-    SQLiteQuery q1("INSERT INTO VariantTrack(object, sequence, sequenceName, trackType, fileHeader) VALUES(?1, ?2, ?3, ?4, ?5)", db, os);
+    SQLiteWriteQuery q1("INSERT INTO VariantTrack(object, sequence, sequenceName, trackType, fileHeader) VALUES(?1, ?2, ?3, ?4, ?5)", db, os);
     q1.bindDataId(1, track.id);
     q1.bindDataId(2, track.sequence);
     q1.bindString(3, track.sequenceName);
@@ -149,7 +149,7 @@ void SQLiteVariantDbi::createVariantTrack(U2VariantTrack& track, VariantTrackTyp
 }
 
 void SQLiteVariantDbi::updateVariantTrack(U2VariantTrack& track, U2OpStatus& os) {
-    SQLiteQuery q("UPDATE VariantTrack SET sequence = ?1, sequenceName = ?2, trackType = ?3, fileHeader = ?4 WHERE object = ?5", db, os);
+    SQLiteWriteQuery q("UPDATE VariantTrack SET sequence = ?1, sequenceName = ?2, trackType = ?3, fileHeader = ?4 WHERE object = ?5", db, os);
     q.bindDataId(1, track.sequence);
     q.bindString(2, track.sequenceName);
     q.bindInt32(3, track.trackType);
@@ -165,7 +165,7 @@ void SQLiteVariantDbi::updateVariantTrack(U2VariantTrack& track, U2OpStatus& os)
     CHECK_OP(os, );
 }
 
-class SqliteVariantLoader: public SqlRSLoader<U2Variant> {
+class SqliteVariantLoader: public SQLiteResultSetLoader<U2Variant> {
 public:
     U2Variant load(SQLiteQuery* q) {
         U2Variant res;
@@ -175,7 +175,7 @@ public:
         res.refData = q->getBlob(3);
         res.obsData = q->getBlob(4);
         res.publicId = q->getString(5);
-        res.additionalInfo = U2DbiUtils::unpackMap(q->getString(6));
+        res.additionalInfo = StrPackUtils::unpackMap(q->getString(6));
         return res;
     }
 };
@@ -183,20 +183,20 @@ public:
 U2DbiIterator<U2Variant>* SQLiteVariantDbi::getVariants(const U2DataId& trackId, const U2Region& region, U2OpStatus& os) {
     if (region == U2_REGION_MAX) {
         static QString queryString ("SELECT id, startPos, endPos, refData, obsData, publicId, additionalInfo FROM Variant WHERE track = ?1 ORDER BY startPos");
-        QSharedPointer<SQLiteQuery> q (new SQLiteQuery(queryString, db, os));
+        QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery(queryString, db, os));
         q->bindDataId(1, trackId);
-        return new SqlRSIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
+        return new SQLiteResultSetIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
     }
 
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery("SELECT id, startPos, endPos, refData, obsData, publicId, additionalInfo FROM Variant \
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery("SELECT id, startPos, endPos, refData, obsData, publicId, additionalInfo FROM Variant \
                                                                                             WHERE track = ?1 AND startPos >= ?2 AND startPos <?3", db, os));
     q->bindDataId(1, trackId);
     q->bindInt64(2, region.startPos);
     q->bindInt64(3, region.endPos());
-    return new SqlRSIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
+    return new SQLiteResultSetIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
 }
 
-class SimpleVariantTrackLoader : public SqlRSLoader<U2VariantTrack> {
+class SimpleVariantTrackLoader : public SQLiteResultSetLoader<U2VariantTrack> {
     U2VariantTrack load(SQLiteQuery* q) {
         U2VariantTrack track;
         track.id = q->getDataId(0, U2Type::VariantTrack);
@@ -207,7 +207,7 @@ class SimpleVariantTrackLoader : public SqlRSLoader<U2VariantTrack> {
         return track;
     }
 };
-class SimpleVariantTrackFilter : public SqlRSFilter<U2VariantTrack> {
+class SimpleVariantTrackFilter : public SQLiteResultSetFilter<U2VariantTrack> {
 public:
     SimpleVariantTrackFilter(VariantTrackType _trackType){
         trackType = _trackType;
@@ -225,16 +225,16 @@ private:
 
 U2DbiIterator<U2VariantTrack>* SQLiteVariantDbi::getVariantTracks(VariantTrackType trackType, U2OpStatus& os )
 {
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery("SELECT object, sequence, sequenceName, trackType, fileHeader FROM VariantTrack", db, os));
-    return new SqlRSIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), new SimpleVariantTrackFilter(trackType), U2VariantTrack(), os);
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery("SELECT object, sequence, sequenceName, trackType, fileHeader FROM VariantTrack", db, os));
+    return new SQLiteResultSetIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), new SimpleVariantTrackFilter(trackType), U2VariantTrack(), os);
 }
 
 U2DbiIterator<U2VariantTrack>* SQLiteVariantDbi::getVariantTracks(const U2DataId& seqId, U2OpStatus& os){
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery("SELECT object, sequence, sequenceName, trackType, fileHeader FROM VariantTrack WHERE sequence = ?1 ", db, os));
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery("SELECT object, sequence, sequenceName, trackType, fileHeader FROM VariantTrack WHERE sequence = ?1 ", db, os));
 
     q->bindDataId(1, seqId);
 
-    return new SqlRSIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), NULL, U2VariantTrack(), os);
+    return new SQLiteResultSetIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), NULL, U2VariantTrack(), os);
 }
 
 U2DbiIterator<U2VariantTrack>* SQLiteVariantDbi::getVariantTracks( const U2DataId& seqId, VariantTrackType trackType, U2OpStatus& os ){
@@ -242,27 +242,27 @@ U2DbiIterator<U2VariantTrack>* SQLiteVariantDbi::getVariantTracks( const U2DataI
         return getVariantTracks(seqId, os);
     }
 
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery("SELECT object, sequence, sequenceName FROM VariantTrack WHERE sequence = ?1 ", db, os));
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery("SELECT object, sequence, sequenceName FROM VariantTrack WHERE sequence = ?1 ", db, os));
 
     q->bindDataId(1, seqId);
 
-    return new SqlRSIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), new SimpleVariantTrackFilter(trackType), U2VariantTrack(), os);
+    return new SQLiteResultSetIterator<U2VariantTrack>(q, new SimpleVariantTrackLoader(), new SimpleVariantTrackFilter(trackType), U2VariantTrack(), os);
 }
 
 
 U2DbiIterator<U2Variant>* SQLiteVariantDbi::getVariantsRange(const U2DataId& track, int offset, int limit, U2OpStatus& os )
 {
-    QSharedPointer<SQLiteQuery> q  (new SQLiteQuery("SELECT id, startPos, endPos, refData, obsData, publicId, additionalInfo FROM Variant \
+    QSharedPointer<SQLiteReadQuery> q  (new SQLiteReadQuery("SELECT id, startPos, endPos, refData, obsData, publicId, additionalInfo FROM Variant \
                                                                           WHERE track = ?1 LIMIT ?2 OFFSET ?3" , db, os));
     q->bindDataId(1, track);
     q->bindInt64(2, limit);
     q->bindInt64(3, offset);
-    return new SqlRSIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
+    return new SQLiteResultSetIterator<U2Variant>(q, new SqliteVariantLoader(), NULL, U2Variant(), os);
 }
 
 int SQLiteVariantDbi::getVariantCount( const U2DataId& trackId, U2OpStatus& os )
 {
-    SQLiteQuery q("SELECT COUNT(*) FROM Variant WHERE track = ?1 " , db, os);
+    SQLiteReadQuery q("SELECT COUNT(*) FROM Variant WHERE track = ?1 " , db, os);
     q.bindDataId(1, trackId);
     if (!q.step()) {
         return -1;
@@ -272,12 +272,12 @@ int SQLiteVariantDbi::getVariantCount( const U2DataId& trackId, U2OpStatus& os )
 }
 
 void SQLiteVariantDbi::removeTrack(const U2DataId& trackId, U2OpStatus& os){
-    SQLiteQuery q1("DELETE FROM Variant WHERE track = ?1", db, os);
+    SQLiteWriteQuery q1("DELETE FROM Variant WHERE track = ?1", db, os);
     q1.bindDataId(1, trackId);
     q1.execute();
     SAFE_POINT_OP(os,);
 
-    SQLiteQuery q2("DELETE FROM VariantTrack WHERE object = ?1", db, os);
+    SQLiteWriteQuery q2("DELETE FROM VariantTrack WHERE object = ?1", db, os);
     q2.bindDataId(1, trackId);
     q2.execute();
     SAFE_POINT_OP(os,);
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.h b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.h
index 128ba47..c4f86da 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/SQLiteVariantDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp
index 42d21dd..1b156a8 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -61,7 +61,7 @@ void MultiTableAssemblyAdapter::syncTables(U2OpStatus& os) {
     if (versionInDb <= version) {
         return;
     }
-    SQLiteQuery q("SELECT idata FROM Assembly WHERE object = ?1", db, os);
+    SQLiteReadQuery q("SELECT idata FROM Assembly WHERE object = ?1", db, os);
     q.bindDataId(1, assemblyId);
     if (q.step()) {
         QByteArray data = q.getBlob(0);
@@ -195,7 +195,7 @@ void MultiTableAssemblyAdapter::flushTables(U2OpStatus& os)  {
     }
     idata.append('|').append(QByteArray::number(rowsPerRange)).append(',').append(QByteArray::number(adaptersGrid.size()));
 
-    SQLiteQuery q("UPDATE Assembly SET idata = ?1 WHERE object = ?2", db, os);
+    SQLiteWriteQuery q("UPDATE Assembly SET idata = ?1 WHERE object = ?2", db, os);
     q.bindBlob(1, idata);
     q.bindDataId(2, assemblyId);
     q.execute();
@@ -233,7 +233,7 @@ MTASingleTableAdapter* MultiTableAssemblyAdapter::createAdapter(int rowPos, int
 }
 
 void MultiTableAssemblyAdapter::createReadsIndexes(U2OpStatus& os) {
-    SQLiteQuery("PRAGMA temp_store = FILE", db, os).execute();
+    SQLiteWriteQuery("PRAGMA temp_store = FILE", db, os).execute();
     CHECK_OP(os, );
     foreach(MTASingleTableAdapter* a, adapters) {
         a->singleTableAdapter->createReadsIndexes(os);
@@ -241,7 +241,7 @@ void MultiTableAssemblyAdapter::createReadsIndexes(U2OpStatus& os) {
             break;
         }
     }
-    SQLiteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
+    SQLiteWriteQuery("PRAGMA temp_store = MEMORY", db, os).execute();
 }
 
 QByteArray MultiTableAssemblyAdapter::getIdExtra(int rowPos, int elenPos) {
@@ -661,8 +661,8 @@ void MultiTablePackAlgorithmAdapter::migrate(MTASingleTableAdapter* newA, const
         QString idsTable = "tmp_mig_" + oldTable; //TODO
 
 #ifdef _DEBUG
-        qint64 nOldReads1 = SQLiteQuery("SELECT COUNT(*) FROM " + oldTable, db, os).selectInt64();
-        qint64 nNewReads1 = SQLiteQuery("SELECT COUNT(*) FROM " + newTable, db, os).selectInt64();
+        qint64 nOldReads1 = SQLiteReadQuery("SELECT COUNT(*) FROM " + oldTable, db, os).selectInt64();
+        qint64 nNewReads1 = SQLiteReadQuery("SELECT COUNT(*) FROM " + newTable, db, os).selectInt64();
         int readsMoved = migData.size();
         int rowsPerRange = multiTableAdapter->getRowsPerRange();
         U2Region newProwRegion(newA->rowPos * rowsPerRange, rowsPerRange);
@@ -673,8 +673,8 @@ void MultiTablePackAlgorithmAdapter::migrate(MTASingleTableAdapter* newA, const
 
         { //nested block is needed to ensure all queries are finalized
 
-            SQLiteQuery(QString("CREATE TEMPORARY TABLE %1(id INTEGER PRIMARY KEY, prow INTEGER NOT NULL)").arg(idsTable), db, os).execute();
-            SQLiteQuery insertIds(QString("INSERT INTO %1(id, prow) VALUES(?1, ?2)").arg(idsTable), db, os);
+            SQLiteWriteQuery(QString("CREATE TEMPORARY TABLE %1(id INTEGER PRIMARY KEY, prow INTEGER NOT NULL)").arg(idsTable), db, os).execute();
+            SQLiteWriteQuery insertIds(QString("INSERT INTO %1(id, prow) VALUES(?1, ?2)").arg(idsTable), db, os);
             foreach(const SQLiteReadTableMigrationData& d, migData) {
                 insertIds.reset(false);
                 insertIds.bindInt64(1, d.readId);
@@ -686,15 +686,15 @@ void MultiTablePackAlgorithmAdapter::migrate(MTASingleTableAdapter* newA, const
                 }
             }
 
-            SQLiteQuery(QString("INSERT INTO %1(prow, name, gstart, elen, flags, mq, data) "
+            SQLiteWriteQuery(QString("INSERT INTO %1(prow, name, gstart, elen, flags, mq, data) "
                 "SELECT %3.prow, name, gstart, elen, flags, mq, data FROM %2, %3 WHERE %2.id = %3.id")
                 .arg(newTable).arg(oldTable).arg(idsTable), db, os).execute();
 
-            SQLiteQuery(QString("DELETE FROM %1 WHERE id IN (SELECT id FROM %2)").arg(oldTable).arg(idsTable), db, os).execute();
+            SQLiteWriteQuery(QString("DELETE FROM %1 WHERE id IN (SELECT id FROM %2)").arg(oldTable).arg(idsTable), db, os).execute();
 
         }
         U2OpStatusImpl osStub; // using stub here -> this operation must be performed even if any of internal queries failed
-        SQLiteQuery(QString("DROP TABLE IF EXISTS %1").arg(idsTable), db, osStub).execute();
+        SQLiteWriteQuery(QString("DROP TABLE IF EXISTS %1").arg(idsTable), db, osStub).execute();
 
         qint64 nMigrated = migratedBefore + migData.size();
         perfLog.trace(QString("Assembly: reads migration from %1 to %2 finished, time %3 seconds, progress: %4/%5 (%6%)")
@@ -702,8 +702,8 @@ void MultiTablePackAlgorithmAdapter::migrate(MTASingleTableAdapter* newA, const
             .arg(nMigrated).arg(totalMigrationCount).arg(100*nMigrated/totalMigrationCount));
 
 #ifdef _DEBUG
-        qint64 nOldReads2 = SQLiteQuery("SELECT COUNT(*) FROM " + oldTable, db, os).selectInt64();
-        qint64 nNewReads2 = SQLiteQuery("SELECT COUNT(*) FROM " + newTable, db, os).selectInt64();
+        qint64 nOldReads2 = SQLiteReadQuery("SELECT COUNT(*) FROM " + oldTable, db, os).selectInt64();
+        qint64 nNewReads2 = SQLiteReadQuery("SELECT COUNT(*) FROM " + newTable, db, os).selectInt64();
         assert(nOldReads1 + nNewReads1 == nOldReads2 + nNewReads2);
         assert(nNewReads1 + readsMoved == nNewReads2);
 #endif
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.h b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.h
index a8a2dcd..d6843d1 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/MultiTableAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 #include <U2Core/U2SqlHelpers.h>
 
-#include <QtCore/QReadWriteLock>
+#include <QReadWriteLock>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp
index 93c1740..28b23e8 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -59,11 +59,11 @@ void RTreeAssemblyAdapter::createReadsTables(U2OpStatus& os) {
     // gstart, gend - start and end read position
     // prow1, prow2 - packed view row. prow1 always the same as prow2
     static QString q2 = "CREATE VIRTUAL TABLE %1 USING rtree_i32(id, gstart, gend, prow1, prow2)";
-    SQLiteQuery(q1.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q1.arg(readsTable), db, os).execute();
     if (os.hasError()) {
         return;
     }
-    SQLiteQuery(q2.arg(indexTable), db, os).execute();
+    SQLiteWriteQuery(q2.arg(indexTable), db, os).execute();
     if (os.hasError()) {
         coreLog.error(U2DbiL10n::tr("Error during RTree index creation: %1! Check if SQLite library has RTree index support!").arg(os.getError()));
     }
@@ -71,29 +71,29 @@ void RTreeAssemblyAdapter::createReadsTables(U2OpStatus& os) {
 
 void RTreeAssemblyAdapter::createReadsIndexes(U2OpStatus& os) {
     static QString q = "CREATE INDEX %1_name ON %1(name)";
-    SQLiteQuery(q.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q.arg(readsTable), db, os).execute();
 }
 
 qint64 RTreeAssemblyAdapter::countReads(const U2Region& r, U2OpStatus& os) {
     if (r == U2_REGION_MAX) {
-        return SQLiteQuery(QString("SELECT COUNT(*) FROM %1").arg(readsTable), db, os).selectInt64();
+        return SQLiteReadQuery(QString("SELECT COUNT(*) FROM %1").arg(readsTable), db, os).selectInt64();
     }
     QString qStr = QString("SELECT COUNT(*) FROM %1 AS i WHERE " + RANGE_CONDITION_CHECK).arg(indexTable);
-    SQLiteQuery q(qStr, db, os);
+    SQLiteReadQuery q(qStr, db, os);
     q.bindInt64(1, r.endPos());
     q.bindInt64(2, r.startPos);
     return q.selectInt64();
 }
 
 qint64 RTreeAssemblyAdapter::getMaxPackedRow(const U2Region& r, U2OpStatus& os) {
-    SQLiteQuery q(QString("SELECT MAX(prow1) FROM %1 AS i WHERE (" + RANGE_CONDITION_CHECK + ")").arg(indexTable), db, os);
+    SQLiteReadQuery q(QString("SELECT MAX(prow1) FROM %1 AS i WHERE (" + RANGE_CONDITION_CHECK + ")").arg(indexTable), db, os);
     q.bindInt64(1, r.endPos());
     q.bindInt64(2, r.startPos);
     return q.selectInt64();
 }
 
 qint64 RTreeAssemblyAdapter::getMaxEndPos(U2OpStatus& os) {
-    return SQLiteQuery(QString("SELECT MAX(gend) FROM %1").arg(indexTable), db, os).selectInt64();
+    return SQLiteReadQuery(QString("SELECT MAX(gend) FROM %1").arg(indexTable), db, os).selectInt64();
 }
 
 U2DbiIterator<U2AssemblyRead>* RTreeAssemblyAdapter::getReads(const U2Region& r, U2OpStatus& os, bool sortedHint) {
@@ -103,29 +103,29 @@ U2DbiIterator<U2AssemblyRead>* RTreeAssemblyAdapter::getReads(const U2Region& r,
         qStr += SORTED_READS;
     }
 
-    QSharedPointer<SQLiteQuery> q(new SQLiteQuery(qStr, db, os));
+    QSharedPointer<SQLiteReadQuery> q(new SQLiteReadQuery(qStr, db, os));
     q->bindInt64(1, r.endPos());
     q->bindInt64(2, r.startPos);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
 }
 
 U2DbiIterator<U2AssemblyRead>* RTreeAssemblyAdapter::getReadsByRow(const U2Region& r, qint64 minRow, qint64 maxRow, U2OpStatus& os) {
     QString qStr = QString("SELECT " + ALL_READ_FIELDS + FROM_2TABLES + " WHERE " + SAME_IDX + " AND "+ RANGE_CONDITION_CHECK +
                         " AND (i.prow1 >= ?3 AND i.prow2 < ?4)").arg(readsTable).arg(indexTable);
-    QSharedPointer<SQLiteQuery> q(new SQLiteQuery(qStr, db, os));
+    QSharedPointer<SQLiteReadQuery> q(new SQLiteReadQuery(qStr, db, os));
     q->bindInt64(1, r.endPos());
     q->bindInt64(2, r.startPos);
     q->bindInt64(3, minRow);
     q->bindInt64(4, maxRow);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
 }
 
 U2DbiIterator<U2AssemblyRead>* RTreeAssemblyAdapter::getReadsByName(const QByteArray& name, U2OpStatus& os) {
     QString qStr = QString("SELECT " + ALL_READ_FIELDS + " FROM %1 WHERE name = ?1").arg(readsTable);
-    QSharedPointer<SQLiteQuery>q ( new SQLiteQuery(qStr, db, os) );
+    QSharedPointer<SQLiteReadQuery>q ( new SQLiteReadQuery(qStr, db, os) );
     int hash = qHash(name);
     q->bindInt64(1, hash);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(),
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(),
         new SQLiteAssemblyNameFilter(name), U2AssemblyRead(), os);
 }
 
@@ -135,8 +135,8 @@ void RTreeAssemblyAdapter::addReads(U2DbiIterator<U2AssemblyRead>* it, U2Assembl
     static QString q2 = "INSERT INTO %1(id, gstart, gend, prow1, prow2) VALUES (?1, ?2, ?3, ?4, ?5)";
 
     SQLiteTransaction t(db, os);
-    SQLiteQuery insertRQ(q1.arg(readsTable), db, os);
-    SQLiteQuery insertIQ(q2.arg(indexTable), db, os);
+    SQLiteWriteQuery insertRQ(q1.arg(readsTable), db, os);
+    SQLiteWriteQuery insertIQ(q2.arg(indexTable), db, os);
 
     while (it->hasNext()) {
         U2AssemblyRead read = it->next();
@@ -199,7 +199,7 @@ void RTreeAssemblyAdapter::removeReads(const QList<U2DataId>& readIds, U2OpStatu
 
 void RTreeAssemblyAdapter::dropReadsTables(U2OpStatus &os) {
     QString queryString = "DROP TABLE IF EXISTS %1";
-    SQLiteQuery(queryString.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(queryString.arg(readsTable), db, os).execute();
     CHECK_OP(os, );
     SQLiteObjectDbi::incrementVersion(assemblyId, db, os);
 }
@@ -216,7 +216,7 @@ void RTreeAssemblyAdapter::calculateCoverage(const U2Region& r, U2AssemblyCovera
         queryString+="AS i WHERE " + RANGE_CONDITION_CHECK;
         rangeArgs = true;
     }
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     if (rangeArgs) {
         q.bindInt64(1, r.endPos());
         q.bindInt64(2, r.startPos);
@@ -227,8 +227,8 @@ void RTreeAssemblyAdapter::calculateCoverage(const U2Region& r, U2AssemblyCovera
 
 
 U2DbiIterator<PackAlgorithmData>* RTreePackAlgorithmAdapter::selectAllReads(U2OpStatus& os) {
-    QSharedPointer<SQLiteQuery> q( new SQLiteQuery("SELECT id, gstart, gend - gstart FROM " + indexTable + " ORDER BY gstart", db, os));
-    return new SqlRSIterator<PackAlgorithmData>(q, new SimpleAssemblyReadPackedDataLoader(), NULL, PackAlgorithmData(), os);
+    QSharedPointer<SQLiteReadQuery> q( new SQLiteReadQuery("SELECT id, gstart, gend - gstart FROM " + indexTable + " ORDER BY gstart", db, os));
+    return new SQLiteResultSetIterator<PackAlgorithmData>(q, new SimpleAssemblyReadPackedDataLoader(), NULL, PackAlgorithmData(), os);
 }
 
 RTreePackAlgorithmAdapter::~RTreePackAlgorithmAdapter() {
@@ -237,7 +237,7 @@ RTreePackAlgorithmAdapter::~RTreePackAlgorithmAdapter() {
 
 void RTreePackAlgorithmAdapter::assignProw(const U2DataId& readId, qint64 prow, U2OpStatus& os) {
     if (updateQuery == NULL) {
-        updateQuery = new SQLiteQuery("UPDATE " + indexTable + " SET prow1 = ?1, prow2=?1 WHERE id = ?2", db, os);
+        updateQuery = new SQLiteWriteQuery("UPDATE " + indexTable + " SET prow1 = ?1, prow2=?1 WHERE id = ?2", db, os);
     }
     updateQuery->setOpStatus(os);
     updateQuery->reset();
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.h b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.h
index 06143f0..41483a3 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/RTreeAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -72,7 +72,7 @@ private:
     DbRef*          db;
     QString         readsTable;
     QString         indexTable;
-    SQLiteQuery*    updateQuery;
+    SQLiteWriteQuery*    updateQuery;
 };
 
 } //namespace
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.cpp
index 24b04b8..bd5246d 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -78,23 +78,23 @@ void SingleTableAssemblyAdapter::createReadsTables(U2OpStatus& os) {
     static QString q = "CREATE TABLE IF NOT EXISTS %1 (id INTEGER PRIMARY KEY AUTOINCREMENT, name INTEGER NOT NULL, prow INTEGER NOT NULL, "
         "gstart INTEGER NOT NULL, elen INTEGER NOT NULL, flags INTEGER NOT NULL, mq INTEGER NOT NULL, data BLOB NOT NULL)";
 
-    SQLiteQuery(q.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q.arg(readsTable), db, os).execute();
 }
 
 void SingleTableAssemblyAdapter::createReadsIndexes(U2OpStatus& os) {
     static QString q1 = "CREATE INDEX IF NOT EXISTS %1_gstart ON %1(gstart)";
-    SQLiteQuery(q1.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q1.arg(readsTable), db, os).execute();
 
     static QString q2 = "CREATE INDEX IF NOT EXISTS %1_name ON %1(name)";
-    SQLiteQuery(q2.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q2.arg(readsTable), db, os).execute();
 }
 
 void SingleTableAssemblyAdapter::dropReadsIndexes(U2OpStatus& os) {
     static QString q1 = "DROP INDEX IF EXISTS %1_gstart";
-    SQLiteQuery(q1.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q1.arg(readsTable), db, os).execute();
 
     static QString q2 = "DROP INDEX IF EXISTS %1_name";
-    SQLiteQuery(q2.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(q2.arg(readsTable), db, os).execute();
 }
 
 
@@ -114,10 +114,10 @@ void SingleTableAssemblyAdapter::bindRegion(SQLiteQuery& q, const U2Region& r, b
 
 qint64 SingleTableAssemblyAdapter::countReads(const U2Region& r, U2OpStatus& os) {
     if (r == U2_REGION_MAX) {
-        return SQLiteQuery(QString("SELECT COUNT(*) FROM %1").arg(readsTable), db, os).selectInt64();
+        return SQLiteReadQuery(QString("SELECT COUNT(*) FROM %1").arg(readsTable), db, os).selectInt64();
     }
     QString qStr = QString("SELECT COUNT(*) FROM %1 WHERE " + rangeConditionCheckForCount).arg(readsTable);
-    SQLiteQuery q(qStr, db, os);
+    SQLiteReadQuery q(qStr, db, os);
     bindRegion(q, r, true);
     return q.selectInt64();
 }
@@ -128,19 +128,19 @@ qint64 SingleTableAssemblyAdapter::countReadsPrecise(const U2Region& r, U2OpStat
     }
     //here we use not-optimized rangeConditionCheck but not rangeConditionCheckForCount
     QString qStr = QString("SELECT COUNT(*) FROM %1 WHERE " + rangeConditionCheck).arg(readsTable);
-    SQLiteQuery q(qStr, db, os);
+    SQLiteReadQuery q(qStr, db, os);
     bindRegion(q, r, false);
     return q.selectInt64();
 }
 
 qint64 SingleTableAssemblyAdapter::getMaxPackedRow(const U2Region& r, U2OpStatus& os) {
-    SQLiteQuery q(QString("SELECT MAX(prow) FROM %1 WHERE " + rangeConditionCheck).arg(readsTable), db, os);
+    SQLiteReadQuery q(QString("SELECT MAX(prow) FROM %1 WHERE " + rangeConditionCheck).arg(readsTable), db, os);
     bindRegion(q, r);
     return q.selectInt64();
 }
 
 qint64 SingleTableAssemblyAdapter::getMaxEndPos(U2OpStatus& os) {
-    return SQLiteQuery(QString("SELECT MAX(gstart + elen) FROM %1").arg(readsTable), db, os).selectInt64();
+    return SQLiteReadQuery(QString("SELECT MAX(gstart + elen) FROM %1").arg(readsTable), db, os).selectInt64();
 }
 
 U2DbiIterator<U2AssemblyRead>* SingleTableAssemblyAdapter::getReads(const U2Region& r, U2OpStatus& os, bool sortedHint) {
@@ -149,35 +149,35 @@ U2DbiIterator<U2AssemblyRead>* SingleTableAssemblyAdapter::getReads(const U2Regi
         qStr += SORTED_READS;
     }
 
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery(qStr, db, os));
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery(qStr, db, os));
     bindRegion(*q, r);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
 }
 
 U2DbiIterator<U2AssemblyRead>* SingleTableAssemblyAdapter::getReadsByRow(const U2Region& r, qint64 minRow, qint64 maxRow, U2OpStatus& os) {
     int rowFieldPos = rangeMode ? 4 : 3;
     QString qStr = QString("SELECT " + ALL_READ_FIELDS + " FROM %1 WHERE " + rangeConditionCheck
         + " AND (prow >= ?%2 AND prow < ?%3)").arg(readsTable).arg(rowFieldPos).arg(rowFieldPos + 1);
-    QSharedPointer<SQLiteQuery> q ( new SQLiteQuery(qStr, db, os) );
+    QSharedPointer<SQLiteReadQuery> q ( new SQLiteReadQuery(qStr, db, os) );
     bindRegion(*q, r);
     q->bindInt64(rowFieldPos, minRow);
     q->bindInt64(rowFieldPos + 1, maxRow);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(), NULL, U2AssemblyRead(), os);
 }
 
 U2DbiIterator<U2AssemblyRead>* SingleTableAssemblyAdapter::getReadsByName(const QByteArray& name, U2OpStatus& os) {
     QString qStr = QString("SELECT " + ALL_READ_FIELDS + " FROM %1 WHERE name = ?1").arg(readsTable);
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery(qStr, db, os));
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery(qStr, db, os));
     int hash = qHash(name);
     q->bindInt64(1, hash);
-    return new SqlRSIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(),
+    return new SQLiteResultSetIterator<U2AssemblyRead>(q, new SimpleAssemblyReadLoader(),
         new SQLiteAssemblyNameFilter(name), U2AssemblyRead(), os);
 }
 
 void SingleTableAssemblyAdapter::addReads(U2DbiIterator<U2AssemblyRead>* it, U2AssemblyReadsImportInfo& ii, U2OpStatus& os) {
     SQLiteTransaction t(db, os);
     QString q = "INSERT INTO %1(name, prow, flags, gstart, elen, mq, data) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)";
-    SQLiteQuery insertQ(q.arg(readsTable), db, os);
+    SQLiteWriteQuery insertQ(q.arg(readsTable), db, os);
     while (it->hasNext() && !os.isCoR()) {
         U2AssemblyRead read = it->next();
         bool dnaExt = false; //TODO:
@@ -226,7 +226,7 @@ void SingleTableAssemblyAdapter::removeReads(const QList<U2DataId>& readIds, U2O
 
 void SingleTableAssemblyAdapter::dropReadsTables(U2OpStatus &os) {
     QString queryString = "DROP TABLE IF EXISTS %1";
-    SQLiteQuery(queryString.arg(readsTable), db, os).execute();
+    SQLiteWriteQuery(queryString.arg(readsTable), db, os).execute();
     CHECK_OP(os, );
     SQLiteObjectDbi::incrementVersion(assemblyId, db, os);
 }
@@ -243,7 +243,7 @@ void SingleTableAssemblyAdapter::calculateCoverage(const U2Region& r, U2Assembly
     if (rangeArgs) {
         queryString+=" WHERE " + rangeConditionCheck;
     }
-    SQLiteQuery q(queryString, db, os);
+    SQLiteReadQuery q(queryString, db, os);
     if (rangeArgs) {
         bindRegion(q, r, false);
     }
@@ -254,8 +254,8 @@ void SingleTableAssemblyAdapter::calculateCoverage(const U2Region& r, U2Assembly
 // pack adapter
 
 U2DbiIterator<PackAlgorithmData>* SingleTablePackAlgorithmAdapter::selectAllReads(U2OpStatus& os) {
-    QSharedPointer<SQLiteQuery> q (new SQLiteQuery("SELECT id, gstart, elen FROM " + readsTable + " ORDER BY gstart", db, os));
-    return new SqlRSIterator<PackAlgorithmData>(q, new SimpleAssemblyReadPackedDataLoader(), NULL, PackAlgorithmData(), os);
+    QSharedPointer<SQLiteReadQuery> q (new SQLiteReadQuery("SELECT id, gstart, elen FROM " + readsTable + " ORDER BY gstart", db, os));
+    return new SQLiteResultSetIterator<PackAlgorithmData>(q, new SimpleAssemblyReadPackedDataLoader(), NULL, PackAlgorithmData(), os);
 }
 
 SingleTablePackAlgorithmAdapter::~SingleTablePackAlgorithmAdapter() {
@@ -264,7 +264,7 @@ SingleTablePackAlgorithmAdapter::~SingleTablePackAlgorithmAdapter() {
 
 void SingleTablePackAlgorithmAdapter::assignProw(const U2DataId& readId, qint64 prow, U2OpStatus& os) {
     if (updateQuery == NULL) {
-        updateQuery = new SQLiteQuery("UPDATE " + readsTable + " SET prow = ?1 WHERE id = ?2", db, os);
+        updateQuery = new SQLiteWriteQuery("UPDATE " + readsTable + " SET prow = ?1 WHERE id = ?2", db, os);
     }
     updateQuery->setOpStatus(os);
     updateQuery->reset();
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.h b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.h
index aac3d1d..315bac2 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/assembly/SingleTableAssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -91,7 +91,7 @@ public:
 private:
     DbRef*          db;
     QString         readsTable;
-    SQLiteQuery*    updateQuery;
+    SQLiteWriteQuery*    updateQuery;
 };
 
 
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.cpp
index b6cffc4..a1ca703 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.h b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.h
index 3f596ab..b7ced1f 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgrader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.cpp
index f55d63b..b66ddfa 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,7 +53,7 @@ void SqliteUpgraderFrom_0_To_1_13::upgrade(U2OpStatus &os) const {
 }
 
 void SqliteUpgraderFrom_0_To_1_13::upgradeObjectDbi(U2OpStatus &os) const {
-    SQLiteQuery q("PRAGMA table_info(Object)", dbi->getDbRef(), os);
+    SQLiteWriteQuery q("PRAGMA table_info(Object)", dbi->getDbRef(), os);
     CHECK_OP(os, );
 
     bool hasModTrack = false;
@@ -66,7 +66,7 @@ void SqliteUpgraderFrom_0_To_1_13::upgradeObjectDbi(U2OpStatus &os) const {
     }
     CHECK(!hasModTrack, );
 
-    SQLiteQuery("ALTER TABLE Object ADD trackMod INTEGER NOT NULL DEFAULT 0", dbi->getDbRef(), os).execute();
+    SQLiteWriteQuery("ALTER TABLE Object ADD trackMod INTEGER NOT NULL DEFAULT 0", dbi->getDbRef(), os).execute();
 }
 
 void SqliteUpgraderFrom_0_To_1_13::upgradeObjectRelationsDbi(U2OpStatus &os) const {
@@ -77,7 +77,7 @@ void SqliteUpgraderFrom_0_To_1_13::upgradeObjectRelationsDbi(U2OpStatus &os) con
 
 void SqliteUpgraderFrom_0_To_1_13::upgradeAssemblyDbi(U2OpStatus &os) const {
     DbRef *db = dbi->getDbRef();
-    SQLiteQuery q("PRAGMA foreign_key_list(Assembly)", db, os);
+    SQLiteWriteQuery q("PRAGMA foreign_key_list(Assembly)", db, os);
     SAFE_POINT_OP(os, );
 
     bool referenceIsObject = false;
@@ -94,13 +94,13 @@ void SqliteUpgraderFrom_0_To_1_13::upgradeAssemblyDbi(U2OpStatus &os) const {
 
     const QString newTableName = "Assembly_new";
 
-    SQLiteQuery(SQLiteAssemblyDbi::getCreateAssemblyTableQuery(newTableName), db, os).execute();
+    SQLiteWriteQuery(SQLiteAssemblyDbi::getCreateAssemblyTableQuery(newTableName), db, os).execute();
     SAFE_POINT_OP(os,);
 
-    SQLiteQuery assemblyFetch("SELECT object, reference, imethod, cmethod, idata, cdata FROM Assembly", db, os);
+    SQLiteReadQuery assemblyFetch("SELECT object, reference, imethod, cmethod, idata, cdata FROM Assembly", db, os);
     SAFE_POINT_OP(os, );
 
-    SQLiteQuery assemblyInsert(QString("INSERT INTO %1 (object, reference, imethod, cmethod, idata, cdata) VALUES(?1, ?2, ?3, ?4, ?5, ?6)")
+    SQLiteWriteQuery assemblyInsert(QString("INSERT INTO %1 (object, reference, imethod, cmethod, idata, cdata) VALUES(?1, ?2, ?3, ?4, ?5, ?6)")
         .arg(newTableName), db, os);
     SAFE_POINT_OP(os, );
     while (assemblyFetch.step()) {
@@ -121,10 +121,10 @@ void SqliteUpgraderFrom_0_To_1_13::upgradeAssemblyDbi(U2OpStatus &os) const {
         assemblyInsert.reset();
     }
 
-    SQLiteQuery("DROP TABLE Assembly", db, os).execute();
+    SQLiteWriteQuery("DROP TABLE Assembly", db, os).execute();
     SAFE_POINT_OP(os, );
 
-    SQLiteQuery(QString("ALTER TABLE %1 RENAME TO Assembly").arg(newTableName), db, os).execute();
+    SQLiteWriteQuery(QString("ALTER TABLE %1 RENAME TO Assembly").arg(newTableName), db, os).execute();
 }
 
 }   // namespace U2
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.h b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.h
index edd84b5..314dd48 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_0_To_1_13.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.cpp b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.cpp
index d6800a7..d238f51 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.cpp
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.h b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.h
index b8fcacb..3389a06 100644
--- a/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.h
+++ b/src/corelibs/U2Formats/src/sqlite_dbi/util/SqliteUpgraderFrom_1_13_To_1_25.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/BgzipTask.cpp b/src/corelibs/U2Formats/src/tasks/BgzipTask.cpp
index 9c6b0ef..b8e1258 100644
--- a/src/corelibs/U2Formats/src/tasks/BgzipTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/BgzipTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/U2SafePoints.h>
-#include <QtCore/QDir>
+#include <QDir>
 
 
 namespace U2 {
@@ -40,7 +40,7 @@ private:
 };
 
 BgzipTask::BgzipTask(const GUrl& fileUrl, const GUrl& bgzfUrl)
-    : Task(tr("Bgzip Compression task"), (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
+    : Task(tr("Bgzip Compression task"), TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
       fileUrl(fileUrl),
       bgzfUrl(bgzfUrl)
 {
@@ -117,7 +117,7 @@ bool BgzipTask::checkBgzf(const GUrl &fileUrl) {
 }
 
 GzipDecompressTask::GzipDecompressTask(const GUrl& zipUrl, const GUrl& fileUrl)
-    : Task(tr("Decompression task"), (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
+    : Task(tr("Decompression task"), TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
       zippedUrl(zipUrl),
       unzippedUrl(fileUrl)
 {
diff --git a/src/corelibs/U2Formats/src/tasks/BgzipTask.h b/src/corelibs/U2Formats/src/tasks/BgzipTask.h
index 5a4b134..395cbb8 100644
--- a/src/corelibs/U2Formats/src/tasks/BgzipTask.h
+++ b/src/corelibs/U2Formats/src/tasks/BgzipTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.cpp b/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.cpp
index a4bb4c0..6b0a43e 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,14 +37,14 @@
 #include <U2Formats/BAMUtils.h>
 #include <U2Formats/SAMFormat.h>
 
-#include <QtCore/QSharedPointer>
+#include <QSharedPointer>
 
 #include "ConvertAssemblyToSamTask.h"
 
 namespace U2 {
 
 ConvertAssemblyToSamTask::ConvertAssemblyToSamTask(GUrl db, GUrl sam)
-: Task("ConvertAssemblyToSamTask", (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
+: Task("ConvertAssemblyToSamTask", TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
     dbFileUrl(db),
     samFileUrl(sam),
     handle(NULL)
@@ -52,7 +52,7 @@ ConvertAssemblyToSamTask::ConvertAssemblyToSamTask(GUrl db, GUrl sam)
 }
 
 ConvertAssemblyToSamTask::ConvertAssemblyToSamTask(const DbiConnection *h, GUrl sam)
-: Task("ConvertAssemblyToSamTask", (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
+: Task("ConvertAssemblyToSamTask", TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
     dbFileUrl(NULL),
     samFileUrl(sam),
     handle(h)
@@ -60,7 +60,7 @@ ConvertAssemblyToSamTask::ConvertAssemblyToSamTask(const DbiConnection *h, GUrl
 }
 
 ConvertAssemblyToSamTask::ConvertAssemblyToSamTask(const U2EntityRef& entityRef, GUrl sam)
-: Task("ConvertAssemblyToSamTask", (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
+: Task("ConvertAssemblyToSamTask", TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
     dbFileUrl(NULL),
     samFileUrl(sam),
     assemblyEntityRef(entityRef),
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.h b/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.h
index 5c08d8b..152b0eb 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.h
+++ b/src/corelibs/U2Formats/src/tasks/ConvertAssemblyToSamTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertFileTask.cpp b/src/corelibs/U2Formats/src/tasks/ConvertFileTask.cpp
index a8fed00..5a179e5 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertFileTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/ConvertFileTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -75,13 +75,22 @@ void ConvertFileTask::run(){
 
 //////////////////////////////////////////////////////////////////////////
 //DefaultConvertFileTask
-DefaultConvertFileTask::DefaultConvertFileTask( const GUrl &sourceURL, const QString &detectedFormat, const QString &targetFormat, const QString &dir )
-:ConvertFileTask(sourceURL, detectedFormat, targetFormat, dir)
-,loadTask(NULL)
-,saveTask(NULL)
+DefaultConvertFileTask::DefaultConvertFileTask( const GUrl &sourceUrl, const QString &detectedFormat, const QString &targetFormat, const QString &dir)
+    : ConvertFileTask(sourceUrl, detectedFormat, targetFormat, dir),
+      loadTask(NULL),
+      saveTask(NULL)
 {
 
 }
+
+DefaultConvertFileTask::DefaultConvertFileTask(const GUrl &sourceUrl, const QString &detectedFormat, const QString &targetUrl, const QString &targetFormat, const QString &dir)
+    : ConvertFileTask(sourceUrl, detectedFormat, targetFormat, dir),
+      loadTask(NULL),
+      saveTask(NULL)
+{
+    this->targetUrl = targetUrl;
+}
+
 void DefaultConvertFileTask::prepare() {
     loadTask = LoadDocumentTask::getDefaultLoadDocTask(sourceURL);
     if (NULL == loadTask) {
@@ -126,8 +135,16 @@ QList<Task*> DefaultConvertFileTask::onSubTaskFinished(Task *subTask) {
     if (!df->getSupportedDocumentFileExtensions().isEmpty()) {
         ext = df->getSupportedDocumentFileExtensions().first();
     }
-    QString fileName = srcDoc->getName() + "." + ext;
-    targetUrl = GUrlUtils::rollFileName(workingDir + fileName, QSet<QString>());
+
+    if (targetUrl.isEmpty()) {
+        QString fileName = srcDoc->getName() + "." + ext;
+        targetUrl = GUrlUtils::rollFileName(workingDir + fileName, QSet<QString>());
+    } else {
+        if (QFileInfo(targetFormat).suffix() != ext) {
+            targetUrl += "." + ext;
+        }
+        targetUrl = GUrlUtils::rollFileName(targetUrl, QSet<QString>());
+    }
 
     IOAdapterFactory *iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(srcDoc->getURL()));
     Document *dstDoc = srcDoc->getSimpleCopy(df, iof, srcDoc->getURL());
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertFileTask.h b/src/corelibs/U2Formats/src/tasks/ConvertFileTask.h
index b9123a2..1441219 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertFileTask.h
+++ b/src/corelibs/U2Formats/src/tasks/ConvertFileTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,16 +53,16 @@ protected:
 class U2FORMATS_EXPORT DefaultConvertFileTask : public ConvertFileTask  {
     Q_OBJECT
 public:
-    DefaultConvertFileTask(const GUrl &sourceURL, const QString &detectedFormat, const QString &targetFormat, const QString &dir);
+    DefaultConvertFileTask(const GUrl &sourceUrl, const QString &detectedFormat, const QString &targetFormat, const QString &dir);
+    DefaultConvertFileTask(const GUrl &sourceUrl, const QString &detectedFormat, const QString &targetUrl, const QString &targetFormat, const QString &dir);
 
-protected:
+private:
     void prepare();
     QList<Task*> onSubTaskFinished(Task *subTask);
 
-private:
-
     LoadDocumentTask *loadTask;
     SaveDocumentTask *saveTask;
+
 }; //DefaultConvertFileTask
 
 //SAM->BAM creates a sorted and indexed BAM
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp b/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp
index b2adb73..f2aca2f 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,6 +40,7 @@
 namespace U2 {
 
 const QString ConvertSnpeffVariationsToAnnotationsTask::CHROM_QUALIFIER_NAME = "chrom";
+const QString ConvertSnpeffVariationsToAnnotationsTask::LOCATION_QUALIFIER_NAME = "Location";
 const QString ConvertSnpeffVariationsToAnnotationsTask::REFERENCE_QUALIFIER_NAME = "Reference_bases";
 const QString ConvertSnpeffVariationsToAnnotationsTask::ALTERNATE_QUALIFIER_NAME = "Alternate_bases";
 const QString ConvertSnpeffVariationsToAnnotationsTask::ALLELE_QUALIFIER_NAME = "Allele";
@@ -79,6 +80,8 @@ void ConvertSnpeffVariationsToAnnotationsTask::run() {
             entryAnnotationData->location->regions << U2Region(variant.startPos, variant.endPos - variant.startPos + 1);
             entryAnnotationData->qualifiers << U2Qualifier(REFERENCE_QUALIFIER_NAME, variant.refData);
             entryAnnotationData->qualifiers << U2Qualifier(ALTERNATE_QUALIFIER_NAME, variant.obsData);
+            entryAnnotationData->qualifiers << U2Qualifier(LOCATION_QUALIFIER_NAME,
+                                                           U2Region(variant.startPos + 1, variant.endPos - variant.startPos + 1).toString(U2Region::FormatDots));
             if (!variant.publicId.isEmpty()) {
                 entryAnnotationData->qualifiers << U2Qualifier(ID_QUALIFIER_NAME, variant.publicId);
             }
diff --git a/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.h b/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.h
index 369337e..6da588e 100644
--- a/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.h
+++ b/src/corelibs/U2Formats/src/tasks/ConvertSnpeffVariationsToAnnotationsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_CONVERT_SNPEFF_VARIATIONS_TO_ANNOTATIONS_TASK_H_
 #define _U2_CONVERT_SNPEFF_VARIATIONS_TO_ANNOTATIONS_TASK_H_
 
+#include <QMap>
+
 #include <U2Core/AnnotationData.h>
 #include <U2Core/Task.h>
 
@@ -48,6 +50,7 @@ private:
     QMap<QString, QList<SharedAnnotationData> > annotationTablesData;
 
     static const QString CHROM_QUALIFIER_NAME;
+    static const QString LOCATION_QUALIFIER_NAME;
     static const QString REFERENCE_QUALIFIER_NAME;
     static const QString ALTERNATE_QUALIFIER_NAME;
     static const QString ALLELE_QUALIFIER_NAME;
diff --git a/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp b/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
index 0c7275c..3b093ed 100644
--- a/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/MergeBamTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/MergeBamTask.h b/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
index 56372df..b289fd5 100644
--- a/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
+++ b/src/corelibs/U2Formats/src/tasks/MergeBamTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.cpp b/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.cpp
index b94f9bc..4add097 100644
--- a/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.cpp
+++ b/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.h b/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.h
index fc2d3f0..ba5ad90 100644
--- a/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.h
+++ b/src/corelibs/U2Formats/src/tasks/MysqlUpgradeTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/util/AssemblyAdapter.h b/src/corelibs/U2Formats/src/util/AssemblyAdapter.h
index c2b184b..649d213 100644
--- a/src/corelibs/U2Formats/src/util/AssemblyAdapter.h
+++ b/src/corelibs/U2Formats/src/util/AssemblyAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.cpp b/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.cpp
index 17c7aa2..13449a8 100644
--- a/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.cpp
+++ b/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.h b/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.h
index 3aa583c..80e9af1 100644
--- a/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.h
+++ b/src/corelibs/U2Formats/src/util/AssemblyPackAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/util/PairedFastqComparator.cpp b/src/corelibs/U2Formats/src/util/PairedFastqComparator.cpp
index afb740e..d395a87 100644
--- a/src/corelibs/U2Formats/src/util/PairedFastqComparator.cpp
+++ b/src/corelibs/U2Formats/src/util/PairedFastqComparator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -122,7 +122,6 @@ void PairedFastqComparator::compare(U2OpStatus &os) {
 
 void PairedFastqComparator::dropUntilItem(U2OpStatus& os, QList<FastqSequenceInfo>& list, const FastqSequenceInfo& untilItem) {
     CHECK(!list.isEmpty(), );
-    SAFE_POINT_EXT(list.contains(untilItem), os.setError(tr("The list doesn't contains the item")), );
 
     FastqSequenceInfo item;
     do {
diff --git a/src/corelibs/U2Formats/src/util/PairedFastqComparator.h b/src/corelibs/U2Formats/src/util/PairedFastqComparator.h
index e36ab1d..0ec8d69 100644
--- a/src/corelibs/U2Formats/src/util/PairedFastqComparator.h
+++ b/src/corelibs/U2Formats/src/util/PairedFastqComparator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,6 +58,7 @@ private:
  * The PairedFastqComparator class
  */
 class U2FORMATS_EXPORT PairedFastqComparator : public QObject {
+    Q_OBJECT
 public:
     PairedFastqComparator(const QString& inputFile_1, const QString& inputFile_2,
                           const QString& outputFile_1, const QString& outputFile_2,
diff --git a/src/corelibs/U2Formats/src/util/SnpeffInfoParser.cpp b/src/corelibs/U2Formats/src/util/SnpeffInfoParser.cpp
index 6091154..eee5f52 100644
--- a/src/corelibs/U2Formats/src/util/SnpeffInfoParser.cpp
+++ b/src/corelibs/U2Formats/src/util/SnpeffInfoParser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Formats/src/util/SnpeffInfoParser.h b/src/corelibs/U2Formats/src/util/SnpeffInfoParser.h
index a244e5e..0e2d22a 100644
--- a/src/corelibs/U2Formats/src/util/SnpeffInfoParser.h
+++ b/src/corelibs/U2Formats/src/util/SnpeffInfoParser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_SNPEFF_INFO_PARSER_H_
 #define _U2_SNPEFF_INFO_PARSER_H_
 
+#include <QMap>
+
 #include <U2Core/AnnotationData.h>
 
 namespace U2 {
@@ -31,6 +33,7 @@ class InfoPartParser;
 class U2OpStatus;
 
 class U2FORMATS_EXPORT SnpeffInfoParser : public QObject {
+    Q_OBJECT
 public:
     SnpeffInfoParser();
     ~SnpeffInfoParser();
@@ -52,6 +55,7 @@ private:
 };
 
 class InfoPartParser : public QObject {
+    Q_OBJECT
 public:
     InfoPartParser(const QString &keyWord, bool canStoreMessages = false);
 
diff --git a/src/corelibs/U2Formats/transl/english.ts b/src/corelibs/U2Formats/transl/english.ts
index a61a018..f440092 100644
--- a/src/corelibs/U2Formats/transl/english.ts
+++ b/src/corelibs/U2Formats/transl/english.ts
@@ -6,22 +6,22 @@
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="56"/>
         <source>The file contains features of another remote GenBank file. These features have been skipped.</source>
-        <translation type="unfinished"></translation>
+        <translation>The file contains features of another remote GenBank file. These features have been skipped.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="57"/>
         <source>The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.</source>
-        <translation type="unfinished"></translation>
+        <translation>The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="58"/>
         <source>Location parsing error.</source>
-        <translation type="unfinished"></translation>
+        <translation>Location parsing error.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="59"/>
         <source>The number of valid sequence characters does not coincide with the declared size in the sequence header.</source>
-        <translation type="unfinished"></translation>
+        <translation>The number of valid sequence characters does not coincide with the declared size in the sequence header.</translation>
     </message>
 </context>
 <context>
@@ -29,12 +29,12 @@
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="635"/>
         <source>Ignoring remote entry</source>
-        <translation type="unfinished"></translation>
+        <translation>Ignoring remote entry</translation>
     </message>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="636"/>
         <source>Ignoring different strands in JOIN</source>
-        <translation type="unfinished"></translation>
+        <translation>Ignoring different strands in JOIN</translation>
     </message>
 </context>
 <context>
@@ -67,10 +67,10 @@
     <message>
         <location filename="../src/BAMUtils.cpp" line="775"/>
         <source>Can't open file with given url: %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't open file with given url: %1.</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="476"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="480"/>
         <source>Invalid database user permissions set, so UGENE unable to use this database. Connect to your system administrator to fix the issue.</source>
         <translation>Invalid database user permissions set, so UGENE unable to use this database. Connect to your system administrator to fix the issue.</translation>
     </message>
@@ -100,20 +100,12 @@
         <translation>GTF</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="767"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="773"/>
         <source>Unexpected number of modified objects. Expected: 1, actual: %1</source>
         <translation>Unexpected number of modified objects. Expected: 1, actual: %1</translation>
     </message>
 </context>
 <context>
-    <name>U2</name>
-    <message>
-        <location filename="../src/GFFFormat.cpp" line="219"/>
-        <source>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</source>
-        <translation>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</translation>
-    </message>
-</context>
-<context>
     <name>U2::ABIFormat</name>
     <message>
         <location filename="../src/ABIFormat.cpp" line="50"/>
@@ -248,12 +240,12 @@
         <translation>Bad sequence data</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceFormat.cpp" line="510"/>
+        <location filename="../src/ace/AceFormat.cpp" line="508"/>
         <source>Alphabet unknown</source>
         <translation>Alphabet unknown</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceFormat.cpp" line="536"/>
+        <location filename="../src/ace/AceFormat.cpp" line="534"/>
         <source>File doesn't contain any msa objects</source>
         <translation>File doesn't contain any msa objects</translation>
     </message>
@@ -323,12 +315,12 @@
 <context>
     <name>U2::AceImporter</name>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="153"/>
+        <location filename="../src/ace/AceImporter.cpp" line="155"/>
         <source>ACE file importer</source>
         <translation>ACE file importer</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="157"/>
+        <location filename="../src/ace/AceImporter.cpp" line="159"/>
         <source>ACE files importer is used to convert conventional ACE files into UGENE database format.Having ACE file converted into UGENE DB format you get an fast and efficient interface to your data with an option to change the content</source>
         <translation>ACE files importer is used to convert conventional ACE files into UGENE database format.Having ACE file converted into UGENE DB format you get an fast and efficient interface to your data with an option to change the content</translation>
     </message>
@@ -336,27 +328,117 @@
 <context>
     <name>U2::AceImporterTask</name>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="51"/>
+        <location filename="../src/ace/AceImporter.cpp" line="54"/>
         <source>ACE file import: %1</source>
         <translation>ACE file import: %1</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="66"/>
+        <location filename="../src/ace/AceImporter.cpp" line="68"/>
         <source>Dbi ref is invalid</source>
-        <translation type="unfinished"></translation>
+        <translation>Dbi ref is invalid</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="82"/>
+        <location filename="../src/ace/AceImporter.cpp" line="84"/>
         <source>Can't create a temporary database</source>
         <translation>Can't create a temporary database</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="139"/>
+        <location filename="../src/ace/AceImporter.cpp" line="141"/>
         <source>Failed to get load task for : %1</source>
         <translation>Failed to get load task for : %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::AprFormat</name>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="60"/>
+        <source>Unexpected end of file</source>
+        <translation type="unfinished">Unexpected end of file</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="70"/>
+        <source>There is no sequences in alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="97"/>
+        <source>Attemt to find any number in the string failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="139"/>
+        <source>Vector NTI/AlignX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="140"/>
+        <source>Vector NTI/AlignX is a Vector NTI format for multiple alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="161"/>
+        <source>Open in read-only mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="171"/>
+        <source>File doesn't contain any msa objects</source>
+        <translation type="unfinished">File doesn't contain any msa objects</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="193"/>
+        <source>Illegal header line</source>
+        <translation type="unfinished">Illegal header line</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="209"/>
+        <source>Sequences not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="217"/>
+        <source>Alphabet is unknown</source>
+        <translation type="unfinished">Alphabet is unknown</translation>
+    </message>
+</context>
+<context>
+    <name>U2::AprImporter</name>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="119"/>
+        <source>Vector NTI/AlignX file importer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="123"/>
+        <source>Vector NTI/AlignX files importer is used to convert conventional APR files to a multiple sequence alignment formats</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="138"/>
+        <source>Convert to another format:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::AprImporterTask</name>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="54"/>
+        <source>APR file import: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="66"/>
+        <location filename="../src/apr/AprImporter.cpp" line="94"/>
+        <source>Empty destination url</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="72"/>
+        <source>Invalid I/O environment!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::BAMUtils</name>
     <message>
         <location filename="../src/BAMUtils.cpp" line="178"/>
@@ -733,9 +815,9 @@
 <context>
     <name>U2::ConvertSnpeffVariationsToAnnotationsTask</name>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="49"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="50"/>
         <source>Convert SnpEff variations to annotations task</source>
-        <translation type="unfinished"></translation>
+        <translation>Convert SnpEff variations to annotations task</translation>
     </message>
 </context>
 <context>
@@ -762,7 +844,7 @@
 <context>
     <name>U2::DefaultConvertFileTask</name>
     <message>
-        <location filename="../src/tasks/ConvertFileTask.cpp" line="121"/>
+        <location filename="../src/tasks/ConvertFileTask.cpp" line="130"/>
         <source>The formats are not compatible: %1 and %2</source>
         <translation>The formats are not compatible: %1 and %2</translation>
     </message>
@@ -1052,14 +1134,6 @@
         <translation>Error parsing sequence: unexpected empty line</translation>
     </message>
     <message>
-        <source>Error reading sequence: invalid sequence format</source>
-        <translation type="vanished">Error reading sequence: invalid sequence format</translation>
-    </message>
-    <message>
-        <source>Error reading sequence: memory allocation failed</source>
-        <translation type="vanished">Error reading sequence: memory allocation failed</translation>
-    </message>
-    <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="704"/>
         <source>Sequence is truncated</source>
         <translation>Sequence is truncated</translation>
@@ -1175,13 +1249,6 @@
 %1</translation>
     </message>
     <message>
-        <source>Skipped sequences: %1.
-The following sequences are empty:
-</source>
-        <translation type="obsolete">Skipped sequences: %1.
-The following sequences are empty:</translation>
-    </message>
-    <message>
         <location filename="../src/FastaFormat.cpp" line="477"/>
         <source>Unreferenced sequence in the beginning of patterns: %1</source>
         <translation>Unreferenced sequence in the beginning of patterns: %1</translation>
@@ -1213,16 +1280,12 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/FastqFormat.cpp" line="324"/>
         <source>Sequence name differs from quality scores name: %1 and %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Sequence name differs from quality scores name: %1 and %2</translation>
     </message>
     <message>
         <location filename="../src/FastqFormat.cpp" line="344"/>
         <source>Bad quality scores: inconsistent size.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3</source>
-        <translation type="vanished">Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3</translation>
+        <translation>Bad quality scores: inconsistent size.</translation>
     </message>
     <message>
         <location filename="../src/FastqFormat.cpp" line="363"/>
@@ -1239,10 +1302,6 @@ The following sequences are empty:</translation>
         <source>Not a valid FASTQ file. Bad quality scores: inconsistent size.</source>
         <translation>Not a valid FASTQ file. Bad quality scores: inconsistent size.</translation>
     </message>
-    <message>
-        <source>Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</source>
-        <translation type="vanished">Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</translation>
-    </message>
 </context>
 <context>
     <name>U2::FpkmTrackingFormat</name>
@@ -1350,6 +1409,11 @@ The following sequences are empty:</translation>
         <translation>Parsing error: GFF version %1 is not supported</translation>
     </message>
     <message>
+        <location filename="../src/GFFFormat.cpp" line="219"/>
+        <source>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</source>
+        <translation>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</translation>
+    </message>
+    <message>
         <location filename="../src/GFFFormat.cpp" line="265"/>
         <source>Parsing error: file contains empty line %1, line skipped</source>
         <translation>Parsing error: file contains empty line %1, line skipped</translation>
@@ -1402,7 +1466,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/GFFFormat.cpp" line="494"/>
         <source>One or more sequences in this file don't have names. Their names are generated automatically.</source>
-        <translation type="unfinished"></translation>
+        <translation>One or more sequences in this file don't have names. Their names are generated automatically.</translation>
     </message>
     <message>
         <location filename="../src/GFFFormat.cpp" line="613"/>
@@ -1494,10 +1558,6 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::Genbank::LocationParser</name>
     <message>
-        <source>Ignoring remote entry: %1.%2</source>
-        <translation type="vanished">Ignoring remote entry: %1.%2</translation>
-    </message>
-    <message>
         <location filename="../src/GenbankLocationParser.cpp" line="359"/>
         <location filename="../src/GenbankLocationParser.cpp" line="431"/>
         <source>'a single base from a range' in combination with 'sequence span' is not supported</source>
@@ -1544,7 +1604,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="529"/>
         <source>Wrong token after ORDER - join %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Wrong token after ORDER - join %1</translation>
     </message>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="538"/>
@@ -1575,9 +1635,13 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::GenbankPlainTextFormat</name>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="47"/>
         <source>Genbank</source>
-        <translation>Genbank</translation>
+        <translation type="vanished">Genbank</translation>
+    </message>
+    <message>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="47"/>
+        <source>GenBank</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GenbankPlainTextFormat.cpp" line="49"/>
@@ -1708,30 +1772,30 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="114"/>
         <source>Too few values in the entry: '%1'. Expected at least %2 values.</source>
-        <translation type="unfinished"></translation>
+        <translation>Too few values in the entry: '%1'. Expected at least %2 values.</translation>
     </message>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="134"/>
         <source>Too many values in the entry '%1', extra entries are ignored</source>
-        <translation type="unfinished"></translation>
+        <translation>Too many values in the entry '%1', extra entries are ignored</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadConvertAndSaveSnpeffVariationsToAnnotationsTask</name>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="117"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="120"/>
         <source>Load file and convert SnpEff variations to annotations task</source>
-        <translation type="unfinished"></translation>
+        <translation>Load file and convert SnpEff variations to annotations task</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="157"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="160"/>
         <source>'%1' load failed, the result document is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>'%1' load failed, the result document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="161"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="164"/>
         <source>File '%1' doesn't contain variation tracks</source>
-        <translation type="unfinished"></translation>
+        <translation>File '%1' doesn't contain variation tracks</translation>
     </message>
 </context>
 <context>
@@ -1757,13 +1821,13 @@ The following sequences are empty:</translation>
         <translation>Unexpected end of file</translation>
     </message>
     <message>
-        <location filename="../src/MSFFormat.cpp" line="171"/>
-        <location filename="../src/MSFFormat.cpp" line="212"/>
+        <location filename="../src/MSFFormat.cpp" line="170"/>
+        <location filename="../src/MSFFormat.cpp" line="211"/>
         <source>Check sum test failed</source>
         <translation>Check sum test failed</translation>
     </message>
     <message>
-        <location filename="../src/MSFFormat.cpp" line="220"/>
+        <location filename="../src/MSFFormat.cpp" line="219"/>
         <source>Alphabet unknown</source>
         <translation>Alphabet unknown</translation>
     </message>
@@ -1781,7 +1845,7 @@ The following sequences are empty:</translation>
         <translation>Mega is a file format of native MEGA program</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="315"/>
+        <location filename="../src/MegaFormat.cpp" line="312"/>
         <source>Found sequences of different sizes</source>
         <translation>Found sequences of different sizes</translation>
     </message>
@@ -1816,56 +1880,56 @@ The following sequences are empty:</translation>
         <translation>Identical symbol at the first sequence</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="297"/>
+        <location filename="../src/MegaFormat.cpp" line="294"/>
         <source>Incorrect order of sequences' names</source>
         <translation>Incorrect order of sequences' names</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="303"/>
+        <location filename="../src/MegaFormat.cpp" line="300"/>
         <source>Incorrect sequence</source>
         <translation>Incorrect sequence</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="323"/>
+        <location filename="../src/MegaFormat.cpp" line="320"/>
         <source>Alphabet is unknown</source>
         <translation>Alphabet is unknown</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="393"/>
-        <location filename="../src/MegaFormat.cpp" line="405"/>
+        <location filename="../src/MegaFormat.cpp" line="391"/>
+        <location filename="../src/MegaFormat.cpp" line="403"/>
         <source>No header</source>
         <translation>No header</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="398"/>
+        <location filename="../src/MegaFormat.cpp" line="396"/>
         <source>No # before header</source>
         <translation>No # before header</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="410"/>
+        <location filename="../src/MegaFormat.cpp" line="408"/>
         <source>Not MEGA-header</source>
         <translation>Not MEGA-header</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="433"/>
-        <location filename="../src/MegaFormat.cpp" line="444"/>
-        <location filename="../src/MegaFormat.cpp" line="471"/>
+        <location filename="../src/MegaFormat.cpp" line="431"/>
+        <location filename="../src/MegaFormat.cpp" line="442"/>
+        <location filename="../src/MegaFormat.cpp" line="469"/>
         <source>No data in file</source>
         <translation>No data in file</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="453"/>
-        <location filename="../src/MegaFormat.cpp" line="459"/>
+        <location filename="../src/MegaFormat.cpp" line="451"/>
+        <location filename="../src/MegaFormat.cpp" line="457"/>
         <source>Incorrect title</source>
         <translation>Incorrect title</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="503"/>
+        <location filename="../src/MegaFormat.cpp" line="501"/>
         <source>Sequence has empty part</source>
         <translation>Sequence has empty part</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="523"/>
+        <location filename="../src/MegaFormat.cpp" line="521"/>
         <source>Bad symbols in a sequence</source>
         <translation>Bad symbols in a sequence</translation>
     </message>
@@ -1891,7 +1955,7 @@ The following sequences are empty:</translation>
         <translation>Nexus is a multiple alignment and phylogenetic trees file format</translation>
     </message>
     <message>
-        <location filename="../src/NEXUSFormat.cpp" line="695"/>
+        <location filename="../src/NEXUSFormat.cpp" line="693"/>
         <source>#NEXUS header missing</source>
         <translation>#NEXUS header missing</translation>
     </message>
@@ -1967,6 +2031,23 @@ The following sequences are empty:</translation>
     </message>
 </context>
 <context>
+    <name>U2::PairedFastqComparator</name>
+    <message>
+        <location filename="../src/util/PairedFastqComparator.cpp" line="77"/>
+        <source>Too much reads without a pair (>%1). Check the input data is set correctly.</source>
+        <translation>Too much reads without a pair (>%1). Check the input data is set correctly.</translation>
+    </message>
+    <message>
+        <source>The list doesn't contains the item</source>
+        <translation type="vanished">The list doesn't contains the item</translation>
+    </message>
+    <message>
+        <location filename="../src/util/PairedFastqComparator.cpp" line="172"/>
+        <source>Invalid sequence info</source>
+        <translation>Invalid sequence info</translation>
+    </message>
+</context>
+<context>
     <name>U2::PhylipFormat</name>
     <message>
         <location filename="../src/PhylipFormat.cpp" line="48"/>
@@ -1979,7 +2060,7 @@ The following sequences are empty:</translation>
         <translation>Alphabet is unknown</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="351"/>
+        <location filename="../src/PhylipFormat.cpp" line="350"/>
         <source>Error parsing file</source>
         <translation>Error parsing file</translation>
     </message>
@@ -1987,32 +2068,32 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::PhylipInterleavedFormat</name>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="239"/>
+        <location filename="../src/PhylipFormat.cpp" line="238"/>
         <source>PHYLIP Interleaved</source>
         <translation>PHYLIP Interleaved</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="338"/>
+        <location filename="../src/PhylipFormat.cpp" line="337"/>
         <source>Illegal line</source>
         <translation>Illegal line</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="345"/>
+        <location filename="../src/PhylipFormat.cpp" line="344"/>
         <source>Wrong header</source>
         <translation>Wrong header</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="381"/>
+        <location filename="../src/PhylipFormat.cpp" line="379"/>
         <source>Block is incomplete</source>
         <translation>Block is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="392"/>
+        <location filename="../src/PhylipFormat.cpp" line="390"/>
         <source>Block is incomlete</source>
         <translation>Block is incomlete</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="399"/>
+        <location filename="../src/PhylipFormat.cpp" line="397"/>
         <source>Number of characters does not correspond to the stated number</source>
         <translation>Number of characters does not correspond to the stated number</translation>
     </message>
@@ -2036,18 +2117,18 @@ The following sequences are empty:</translation>
     </message>
     <message>
         <location filename="../src/PhylipFormat.cpp" line="211"/>
-        <location filename="../src/PhylipFormat.cpp" line="349"/>
+        <location filename="../src/PhylipFormat.cpp" line="348"/>
         <source>There is not enough data</source>
         <translation>There is not enough data</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="216"/>
-        <location filename="../src/PhylipFormat.cpp" line="359"/>
+        <location filename="../src/PhylipFormat.cpp" line="215"/>
+        <location filename="../src/PhylipFormat.cpp" line="357"/>
         <source>Error parsing file</source>
         <translation>Error parsing file</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="230"/>
+        <location filename="../src/PhylipFormat.cpp" line="229"/>
         <source>Number of characters does not correspond to the stated number</source>
         <translation>Number of characters does not correspond to the stated number</translation>
     </message>
@@ -2119,7 +2200,7 @@ The following sequences are empty:</translation>
         <translation>Failed to parse SCF file: %1</translation>
     </message>
     <message>
-        <location filename="../src/SCFFormat.cpp" line="1233"/>
+        <location filename="../src/SCFFormat.cpp" line="1237"/>
         <source>Failed to load sequence from SCF file %1</source>
         <translation>Failed to load sequence from SCF file %1</translation>
     </message>
@@ -2129,7 +2210,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="48"/>
         <source>Can't parse the next INFO part: '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't parse the next INFO part: '%1'</translation>
     </message>
 </context>
 <context>
@@ -2150,23 +2231,23 @@ The following sequences are empty:</translation>
         <translation>invalid file: equal sequence names in one block</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="499"/>
+        <location filename="../src/StockholmFormat.cpp" line="498"/>
         <source>invalid file: sequence names are not equal in blocks</source>
         <translation>invalid file: sequence names are not equal in blocks</translation>
     </message>
     <message>
         <location filename="../src/StockholmFormat.cpp" line="493"/>
-        <location filename="../src/StockholmFormat.cpp" line="505"/>
+        <location filename="../src/StockholmFormat.cpp" line="504"/>
         <source>invalid file: sequences in block are not of equal size</source>
         <translation>invalid file: sequences in block are not of equal size</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="519"/>
+        <location filename="../src/StockholmFormat.cpp" line="518"/>
         <source>invalid file: empty sequence alignment</source>
         <translation>invalid file: empty sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="523"/>
+        <location filename="../src/StockholmFormat.cpp" line="522"/>
         <source>invalid file: unknown alphabet</source>
         <translation>invalid file: unknown alphabet</translation>
     </message>
@@ -2265,49 +2346,49 @@ The following sequences are empty:</translation>
         <translation>Required attribute is not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="268"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="272"/>
         <source>Database url is incorrect</source>
         <translation>Database url is incorrect</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="274"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="278"/>
         <source>User login is not specified</source>
         <translation>User login is not specified</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="280"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="284"/>
         <source>Host is not specified</source>
         <translation>Host is not specified</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="286"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="290"/>
         <source>Database name is not specified</source>
         <translation>Database name is not specified</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="302"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="306"/>
         <source>Error opening MySQL database: %1</source>
         <translation>Error opening MySQL database: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="383"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="387"/>
         <source>Not a %1 MySQL database: %2, %3</source>
         <translation>Not a %1 MySQL database: %2, %3</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="389"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="393"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="275"/>
         <source>Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</source>
         <translation>Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="492"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="496"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="330"/>
         <source>Illegal database state: %1</source>
         <translation>Illegal database state: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="523"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="527"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="412"/>
         <source>Can't synchronize database state</source>
         <translation>Can't synchronize database state</translation>
@@ -2360,141 +2441,141 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="102"/>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="118"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="216"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="648"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="368"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="217"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="653"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="373"/>
         <source>Msa object not found</source>
         <translation>Msa object not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="177"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="795"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="835"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="178"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="829"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="869"/>
         <source>Msa row not found</source>
         <translation>Msa row not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="600"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="633"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1114"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1123"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="605"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="638"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1125"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1134"/>
         <source>Unexpected modification type '%1'</source>
         <translation>Unexpected modification type '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="670"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="704"/>
         <source>Invalid row position: %1</source>
         <translation>Invalid row position: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1044"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1175"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1078"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1209"/>
         <source>An error occurred during updating an alignment alphabet</source>
         <translation>An error occurred during updating an alignment alphabet</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1062"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1190"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1096"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1224"/>
         <source>An error occurred during reverting adding of rows</source>
         <translation>An error occurred during reverting adding of rows</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1080"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1114"/>
         <source>An error occurred during reverting addition of a row</source>
         <translation>An error occurred during reverting addition of a row</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1093"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1210"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1127"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1244"/>
         <source>An error occurred during reverting removing of rows</source>
         <translation>An error occurred during reverting removing of rows</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1225"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1140"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1259"/>
         <source>An error occurred during reverting removing of a row</source>
         <translation>An error occurred during reverting removing of a row</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1120"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1236"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1154"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1270"/>
         <source>An error occurred during updating an alignment gaps</source>
         <translation>An error occurred during updating an alignment gaps</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1246"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1167"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1280"/>
         <source>An error occurred during updating an alignment row order</source>
         <translation>An error occurred during updating an alignment row order</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1147"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1256"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1181"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1290"/>
         <source>An error occurred during updating a row info</source>
         <translation>An error occurred during updating a row info</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1162"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1271"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1287"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1297"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1196"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1305"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1326"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1336"/>
         <source>An error occurred during updating an msa length</source>
         <translation>An error occurred during updating an msa length</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1200"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1234"/>
         <source>An error occurred during addition of a row</source>
         <translation>An error occurred during addition of a row</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="587"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="593"/>
         <source>Can't undo an operation for the object</source>
         <translation>Can't undo an operation for the object</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="650"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="656"/>
         <source>Can't redo an operation for the object</source>
         <translation>Can't redo an operation for the object</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="792"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="897"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="798"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="903"/>
         <source>Object not found</source>
         <translation>Object not found</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="846"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="852"/>
         <source>Folder not found: %1 (canonical: %2)</source>
         <translation>Folder not found: %1 (canonical: %2)</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1027"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1033"/>
         <source>Not an object, id: %1, type: %2</source>
         <translation>Not an object, id: %1, type: %2</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1050"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1057"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="290"/>
         <source>Unknown object type! Id: %1, type: %2</source>
         <translation>Unknown object type! Id: %1, type: %2</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1092"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1101"/>
         <source>Can't undo an unknown operation: '%1'</source>
         <translation>Can't undo an unknown operation: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1105"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1116"/>
         <source>Can't redo an unknown operation: '%1'</source>
         <translation>Can't redo an unknown operation: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1136"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1147"/>
         <source>An error occurred during updating an object name</source>
         <translation>An error occurred during updating an object name</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1154"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1165"/>
         <source>An error occurred during updating an object name!</source>
         <translation>An error occurred during updating an object name!</translation>
     </message>
@@ -2514,12 +2595,12 @@ The following sequences are empty:</translation>
         <translation>An exception was thrown during reading sequence data from dbi</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="387"/>
+        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="391"/>
         <source>An error occurred during reverting replacing sequence data</source>
         <translation>An error occurred during reverting replacing sequence data</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="402"/>
+        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="406"/>
         <source>An error occurred during replacing sequence data</source>
         <translation>An error occurred during replacing sequence data</translation>
     </message>
@@ -2586,12 +2667,12 @@ The following sequences are empty:</translation>
         <translation>Can not convert pnext to a number: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="399"/>
+        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="411"/>
         <source>Bound values: </source>
         <translation>Bound values: </translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="421"/>
+        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="433"/>
         <source>Cannot start a transaction</source>
         <translation>Cannot start a transaction</translation>
     </message>
@@ -2687,16 +2768,16 @@ The following sequences are empty:</translation>
         <translation>An object single modification step not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="520"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="535"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="727"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="525"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="540"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="733"/>
         <source>Msa object not found!</source>
         <translation>Msa object not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="617"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="757"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="795"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="623"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="793"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="831"/>
         <source>Msa row not found!</source>
         <translation>Msa row not found!</translation>
     </message>
@@ -2706,29 +2787,34 @@ The following sequences are empty:</translation>
         <translation>Not an object! Id: %1, type: %2</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="600"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="601"/>
         <source>Can't undo an operation for the object!</source>
         <translation>Can't undo an operation for the object!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="685"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="686"/>
         <source>Can't redo an operation for the object!</source>
         <translation>Can't redo an operation for the object!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="857"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="858"/>
         <source>Object not found!</source>
         <translation>Object not found!</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="804"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="930"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="993"/>
+        <source>Unexpected row count! Query: '%1', rows: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="810"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="919"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="931"/>
         <source>Object not found.</source>
         <translation>Object not found.</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="967"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="968"/>
         <source>Folder not found: %1</source>
         <translation>Folder not found: %1</translation>
     </message>
@@ -2748,6 +2834,14 @@ The following sequences are empty:</translation>
         <source>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</source>
         <translation>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
     </message>
+    <message>
+        <location filename="../src/mysql_dbi/MysqlUdrDbi.cpp" line="63"/>
+        <location filename="../src/mysql_dbi/MysqlUdrDbi.cpp" line="77"/>
+        <location filename="../src/sqlite_dbi/SQLiteUdrDbi.cpp" line="56"/>
+        <location filename="../src/sqlite_dbi/SQLiteUdrDbi.cpp" line="67"/>
+        <source>An error occurred during updating UDR</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::VectorNtiSequenceFormat</name>
diff --git a/src/corelibs/U2Formats/transl/russian.ts b/src/corelibs/U2Formats/transl/russian.ts
index 849d4c5..eae50ef 100644
--- a/src/corelibs/U2Formats/transl/russian.ts
+++ b/src/corelibs/U2Formats/transl/russian.ts
@@ -2,63 +2,26 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru">
 <context>
-    <name>Document</name>
-    <message>
-        <source>Document is empty.</source>
-        <translation type="vanished">Документ не содержит данных.</translation>
-    </message>
-</context>
-<context>
-    <name>DocumentFormat</name>
-    <message>
-        <source>DatabaseConnection</source>
-        <translation type="vanished">DatabaseConnection</translation>
-    </message>
-    <message>
-        <source>A fake format that was added to implement shared database connection within existing document model.</source>
-        <translation type="vanished">Неверный формат, который был добавлен  в процессе реализации подключения к базе данных в рамках существующей модели документа.</translation>
-    </message>
-    <message>
-        <source>You have no permissions to modify the content of this database</source>
-        <translation type="vanished">У вас недостаточно прав чтобы изменять содержимое этой базы данных</translation>
-    </message>
-    <message>
-        <source>Empty object name</source>
-        <translation type="vanished">Имя объекта пусто</translation>
-    </message>
-</context>
-<context>
     <name>EMBLGenbankAbstractDocument</name>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="56"/>
         <source>The file contains features of another remote GenBank file. These features have been skipped.</source>
-        <translation type="unfinished"></translation>
+        <translation>Файл содержит аннотации другого GenBank файла. Эти аннотации проигнорированы.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="57"/>
         <source>The file contains joined annotations with regions, located on different strands. All such joined parts will be stored on the same strand.</source>
-        <translation type="unfinished"></translation>
+        <translation>Файл содержит аннотации присоединенные к регионам, расположенным на другой цепи. Все такие аннотации будут сохранены на одной цепи.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="58"/>
         <source>Location parsing error.</source>
-        <translation type="unfinished"></translation>
+        <translation>Location parsing error.</translation>
     </message>
     <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="59"/>
         <source>The number of valid sequence characters does not coincide with the declared size in the sequence header.</source>
-        <translation type="unfinished"></translation>
-    </message>
-</context>
-<context>
-    <name>L10N</name>
-    <message>
-        <source>Line is too long</source>
-        <translation type="vanished">Слишком длинная строка</translation>
-    </message>
-    <message>
-        <source>Incorrect number of columns in the file</source>
-        <translation type="vanished">Неверное число столбцов в файле</translation>
+        <translation>Число допустимых символов последовательности не совпадает с заявленным размером в заголовке последовательности.</translation>
     </message>
 </context>
 <context>
@@ -66,12 +29,12 @@
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="635"/>
         <source>Ignoring remote entry</source>
-        <translation type="unfinished"></translation>
+        <translation>Ignoring remote entry</translation>
     </message>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="636"/>
         <source>Ignoring different strands in JOIN</source>
-        <translation type="unfinished"></translation>
+        <translation>Ignoring different strands in JOIN</translation>
     </message>
 </context>
 <context>
@@ -104,10 +67,10 @@
     <message>
         <location filename="../src/BAMUtils.cpp" line="775"/>
         <source>Can't open file with given url: %1.</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't open file with given url: %1.</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="476"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="480"/>
         <source>Invalid database user permissions set, so UGENE unable to use this database. Connect to your system administrator to fix the issue.</source>
         <translation>Установлены неверные права пользователя базы данных, таким образом UGENE не может использовать эту базу данных. Свяжитесь с вашим администратором для устранения проблемы.</translation>
     </message>
@@ -137,20 +100,12 @@
         <translation>GTF</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="767"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="773"/>
         <source>Unexpected number of modified objects. Expected: 1, actual: %1</source>
         <translation>Unexpected number of modified objects. Expected: 1, actual: %1</translation>
     </message>
 </context>
 <context>
-    <name>U2</name>
-    <message>
-        <location filename="../src/GFFFormat.cpp" line="219"/>
-        <source>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</source>
-        <translation>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</translation>
-    </message>
-</context>
-<context>
     <name>U2::ABIFormat</name>
     <message>
         <location filename="../src/ABIFormat.cpp" line="50"/>
@@ -285,12 +240,12 @@
         <translation>Некорректные данные в последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceFormat.cpp" line="510"/>
+        <location filename="../src/ace/AceFormat.cpp" line="508"/>
         <source>Alphabet unknown</source>
         <translation>Неизвестный алфавит</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceFormat.cpp" line="536"/>
+        <location filename="../src/ace/AceFormat.cpp" line="534"/>
         <source>File doesn't contain any msa objects</source>
         <translation>Файл не содержит msa объектов</translation>
     </message>
@@ -360,12 +315,12 @@
 <context>
     <name>U2::AceImporter</name>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="153"/>
+        <location filename="../src/ace/AceImporter.cpp" line="155"/>
         <source>ACE file importer</source>
         <translation>Импорт ACE файла</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="157"/>
+        <location filename="../src/ace/AceImporter.cpp" line="159"/>
         <source>ACE files importer is used to convert conventional ACE files into UGENE database format.Having ACE file converted into UGENE DB format you get an fast and efficient interface to your data with an option to change the content</source>
         <translation>Импорт ACE файлов используется для преобразования обычных ACE файлов в формат базы данных UGENE. Преобразовав ACE файл в формат UGENE DB вы получите быстрый и эффективный интерфейс к вашим данным с возможностью изменять содержимое файла</translation>
     </message>
@@ -373,27 +328,117 @@
 <context>
     <name>U2::AceImporterTask</name>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="51"/>
+        <location filename="../src/ace/AceImporter.cpp" line="54"/>
         <source>ACE file import: %1</source>
         <translation>Импорт ACE файла: %1</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="66"/>
+        <location filename="../src/ace/AceImporter.cpp" line="68"/>
         <source>Dbi ref is invalid</source>
-        <translation type="unfinished"></translation>
+        <translation>Dbi ref is invalid</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="82"/>
+        <location filename="../src/ace/AceImporter.cpp" line="84"/>
         <source>Can't create a temporary database</source>
         <translation>Невозможно создать временную базу данных</translation>
     </message>
     <message>
-        <location filename="../src/ace/AceImporter.cpp" line="139"/>
+        <location filename="../src/ace/AceImporter.cpp" line="141"/>
         <source>Failed to get load task for : %1</source>
         <translation>Не удалось получить загрузку задачи для: %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::AprFormat</name>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="60"/>
+        <source>Unexpected end of file</source>
+        <translation type="unfinished">Неожиданный конец файла</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="70"/>
+        <source>There is no sequences in alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="97"/>
+        <source>Attemt to find any number in the string failed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="139"/>
+        <source>Vector NTI/AlignX</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="140"/>
+        <source>Vector NTI/AlignX is a Vector NTI format for multiple alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="161"/>
+        <source>Open in read-only mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="171"/>
+        <source>File doesn't contain any msa objects</source>
+        <translation type="unfinished">Файл не содержит msa объектов</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="193"/>
+        <source>Illegal header line</source>
+        <translation type="unfinished">Неправильная строка заголовка</translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="209"/>
+        <source>Sequences not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprFormat.cpp" line="217"/>
+        <source>Alphabet is unknown</source>
+        <translation type="unfinished">Неизвестный алфавит</translation>
+    </message>
+</context>
+<context>
+    <name>U2::AprImporter</name>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="119"/>
+        <source>Vector NTI/AlignX file importer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="123"/>
+        <source>Vector NTI/AlignX files importer is used to convert conventional APR files to a multiple sequence alignment formats</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="138"/>
+        <source>Convert to another format:</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::AprImporterTask</name>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="54"/>
+        <source>APR file import: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="66"/>
+        <location filename="../src/apr/AprImporter.cpp" line="94"/>
+        <source>Empty destination url</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/apr/AprImporter.cpp" line="72"/>
+        <source>Invalid I/O environment!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::BAMUtils</name>
     <message>
         <location filename="../src/BAMUtils.cpp" line="178"/>
@@ -770,9 +815,9 @@
 <context>
     <name>U2::ConvertSnpeffVariationsToAnnotationsTask</name>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="49"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="50"/>
         <source>Convert SnpEff variations to annotations task</source>
-        <translation type="unfinished"></translation>
+        <translation>Convert SnpEff variations to annotations task</translation>
     </message>
 </context>
 <context>
@@ -799,7 +844,7 @@
 <context>
     <name>U2::DefaultConvertFileTask</name>
     <message>
-        <location filename="../src/tasks/ConvertFileTask.cpp" line="121"/>
+        <location filename="../src/tasks/ConvertFileTask.cpp" line="130"/>
         <source>The formats are not compatible: %1 and %2</source>
         <translation>Форматы не совместимы: %1 и %2</translation>
     </message>
@@ -1052,14 +1097,6 @@
         <translation>Ошибка чтения последовательности: пустая строка</translation>
     </message>
     <message>
-        <source>Error reading sequence: invalid sequence format</source>
-        <translation type="vanished">Ошибка чтения последовательности: неверный формат</translation>
-    </message>
-    <message>
-        <source>Error reading sequence: memory allocation failed</source>
-        <translation type="vanished">Ошибка чтения последовательности: не удалось выделить память</translation>
-    </message>
-    <message>
         <location filename="../src/EMBLGenbankAbstractDocument.cpp" line="615"/>
         <location filename="../src/SwissProtPlainTextFormat.cpp" line="372"/>
         <source>Unexpected line format</source>
@@ -1207,13 +1244,6 @@
 %1</translation>
     </message>
     <message>
-        <source>Skipped sequences: %1.
-The following sequences are empty:
-</source>
-        <translation type="obsolete">Skipped sequences: %1.
-The following sequences are empty:</translation>
-    </message>
-    <message>
         <location filename="../src/FastaFormat.cpp" line="477"/>
         <source>Unreferenced sequence in the beginning of patterns: %1</source>
         <translation>Неиспользуемая последовательность в начале образцов: %1</translation>
@@ -1250,16 +1280,12 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/FastqFormat.cpp" line="324"/>
         <source>Sequence name differs from quality scores name: %1 and %2</source>
-        <translation type="unfinished"></translation>
+        <translation>Sequence name differs from quality scores name: %1 and %2</translation>
     </message>
     <message>
         <location filename="../src/FastqFormat.cpp" line="344"/>
         <source>Bad quality scores: inconsistent size.</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Not a valid FASTQ file: %1, sequence name differs from quality scores name: %2 and %3</source>
-        <translation type="vanished">Некорректный FASTQ файл: %1, имя последовательности отличается от имени показателей качества: %2 и %3</translation>
+        <translation>Bad quality scores: inconsistent size.</translation>
     </message>
     <message>
         <location filename="../src/FastqFormat.cpp" line="363"/>
@@ -1276,10 +1302,6 @@ The following sequences are empty:</translation>
         <source>Not a valid FASTQ file. Bad quality scores: inconsistent size.</source>
         <translation>Некорректный FASTQ файл. Плохие показатели качества: несовместимый размер.</translation>
     </message>
-    <message>
-        <source>Not a valid FASTQ file: %1. Bad quality scores: inconsistent size.</source>
-        <translation type="vanished">Некорректный FASTQ файл: %1. Ошибка вычисления оценки точности: некорректный размер.</translation>
-    </message>
 </context>
 <context>
     <name>U2::FpkmTrackingFormat</name>
@@ -1387,6 +1409,11 @@ The following sequences are empty:</translation>
         <translation>Parsing error: GFF version %1 is not supported</translation>
     </message>
     <message>
+        <location filename="../src/GFFFormat.cpp" line="219"/>
+        <source>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</source>
+        <translation>File "%1" contains too many sequences to be displayed. However, you can process these data using instruments from the menu <i>Tools -> NGS data analysis</i> or pipelines built with Workflow Designer.</translation>
+    </message>
+    <message>
         <location filename="../src/GFFFormat.cpp" line="265"/>
         <source>Parsing error: file contains empty line %1, line skipped</source>
         <translation>Parsing error: file contains empty line %1, line skipped</translation>
@@ -1439,7 +1466,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/GFFFormat.cpp" line="494"/>
         <source>One or more sequences in this file don't have names. Their names are generated automatically.</source>
-        <translation type="unfinished"></translation>
+        <translation>One or more sequences in this file don't have names. Their names are generated automatically.</translation>
     </message>
     <message>
         <location filename="../src/GFFFormat.cpp" line="613"/>
@@ -1531,10 +1558,6 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::Genbank::LocationParser</name>
     <message>
-        <source>Ignoring remote entry: %1.%2</source>
-        <translation type="vanished">Ignoring remote entry: %1.%2</translation>
-    </message>
-    <message>
         <location filename="../src/GenbankLocationParser.cpp" line="359"/>
         <location filename="../src/GenbankLocationParser.cpp" line="431"/>
         <source>'a single base from a range' in combination with 'sequence span' is not supported</source>
@@ -1581,7 +1604,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="529"/>
         <source>Wrong token after ORDER - join %1</source>
-        <translation type="unfinished"></translation>
+        <translation>Wrong token after ORDER - join %1</translation>
     </message>
     <message>
         <location filename="../src/GenbankLocationParser.cpp" line="538"/>
@@ -1625,9 +1648,13 @@ The following sequences are empty:</translation>
         <translation>Ошибка записи</translation>
     </message>
     <message>
-        <location filename="../src/GenbankPlainTextFormat.cpp" line="47"/>
         <source>Genbank</source>
-        <translation>Genbank</translation>
+        <translation type="vanished">Genbank</translation>
+    </message>
+    <message>
+        <location filename="../src/GenbankPlainTextFormat.cpp" line="47"/>
+        <source>GenBank</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GenbankPlainTextFormat.cpp" line="49"/>
@@ -1745,30 +1772,30 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="114"/>
         <source>Too few values in the entry: '%1'. Expected at least %2 values.</source>
-        <translation type="unfinished"></translation>
+        <translation>Too few values in the entry: '%1'. Expected at least %2 values.</translation>
     </message>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="134"/>
         <source>Too many values in the entry '%1', extra entries are ignored</source>
-        <translation type="unfinished"></translation>
+        <translation>Too many values in the entry '%1', extra entries are ignored</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadConvertAndSaveSnpeffVariationsToAnnotationsTask</name>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="117"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="120"/>
         <source>Load file and convert SnpEff variations to annotations task</source>
-        <translation type="unfinished"></translation>
+        <translation>Load file and convert SnpEff variations to annotations task</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="157"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="160"/>
         <source>'%1' load failed, the result document is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>'%1' load failed, the result document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="161"/>
+        <location filename="../src/tasks/ConvertSnpeffVariationsToAnnotationsTask.cpp" line="164"/>
         <source>File '%1' doesn't contain variation tracks</source>
-        <translation type="unfinished"></translation>
+        <translation>File '%1' doesn't contain variation tracks</translation>
     </message>
 </context>
 <context>
@@ -1794,13 +1821,13 @@ The following sequences are empty:</translation>
         <translation>Неожиданный конец файла</translation>
     </message>
     <message>
-        <location filename="../src/MSFFormat.cpp" line="171"/>
-        <location filename="../src/MSFFormat.cpp" line="212"/>
+        <location filename="../src/MSFFormat.cpp" line="170"/>
+        <location filename="../src/MSFFormat.cpp" line="211"/>
         <source>Check sum test failed</source>
         <translation>Проверка контрольной суммы не удалась</translation>
     </message>
     <message>
-        <location filename="../src/MSFFormat.cpp" line="220"/>
+        <location filename="../src/MSFFormat.cpp" line="219"/>
         <source>Alphabet unknown</source>
         <translation>Неизвестный алфавит</translation>
     </message>
@@ -1818,7 +1845,7 @@ The following sequences are empty:</translation>
         <translation>Mega это формат файла программы MEGA</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="315"/>
+        <location filename="../src/MegaFormat.cpp" line="312"/>
         <source>Found sequences of different sizes</source>
         <translation>Обнаружены последовательности разной длины</translation>
     </message>
@@ -1853,56 +1880,56 @@ The following sequences are empty:</translation>
         <translation>Идентичный символ в первой последовательности</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="297"/>
+        <location filename="../src/MegaFormat.cpp" line="294"/>
         <source>Incorrect order of sequences' names</source>
         <translation>Неправильный порядок имён последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="303"/>
+        <location filename="../src/MegaFormat.cpp" line="300"/>
         <source>Incorrect sequence</source>
         <translation>Incorrect sequence</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="323"/>
+        <location filename="../src/MegaFormat.cpp" line="320"/>
         <source>Alphabet is unknown</source>
         <translation>Неизвестный алфавит</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="393"/>
-        <location filename="../src/MegaFormat.cpp" line="405"/>
+        <location filename="../src/MegaFormat.cpp" line="391"/>
+        <location filename="../src/MegaFormat.cpp" line="403"/>
         <source>No header</source>
         <translation>Отсутствует заголовок</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="398"/>
+        <location filename="../src/MegaFormat.cpp" line="396"/>
         <source>No # before header</source>
         <translation>Отсутствует символ "#" перед заголовком</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="410"/>
+        <location filename="../src/MegaFormat.cpp" line="408"/>
         <source>Not MEGA-header</source>
         <translation>Не является заголовком MEGA</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="433"/>
-        <location filename="../src/MegaFormat.cpp" line="444"/>
-        <location filename="../src/MegaFormat.cpp" line="471"/>
+        <location filename="../src/MegaFormat.cpp" line="431"/>
+        <location filename="../src/MegaFormat.cpp" line="442"/>
+        <location filename="../src/MegaFormat.cpp" line="469"/>
         <source>No data in file</source>
         <translation>Отсутствуют данные в файле</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="453"/>
-        <location filename="../src/MegaFormat.cpp" line="459"/>
+        <location filename="../src/MegaFormat.cpp" line="451"/>
+        <location filename="../src/MegaFormat.cpp" line="457"/>
         <source>Incorrect title</source>
         <translation>Неправильный заголовок</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="503"/>
+        <location filename="../src/MegaFormat.cpp" line="501"/>
         <source>Sequence has empty part</source>
         <translation>Часть последовательности пустая</translation>
     </message>
     <message>
-        <location filename="../src/MegaFormat.cpp" line="523"/>
+        <location filename="../src/MegaFormat.cpp" line="521"/>
         <source>Bad symbols in a sequence</source>
         <translation>Некорректные символы в последовательности</translation>
     </message>
@@ -1928,7 +1955,7 @@ The following sequences are empty:</translation>
         <translation>Nexus формат файла для множественных выравниваний и филогенетических деревьев</translation>
     </message>
     <message>
-        <location filename="../src/NEXUSFormat.cpp" line="695"/>
+        <location filename="../src/NEXUSFormat.cpp" line="693"/>
         <source>#NEXUS header missing</source>
         <translation>Отсутствует заголовок #NEXUS </translation>
     </message>
@@ -2004,6 +2031,23 @@ The following sequences are empty:</translation>
     </message>
 </context>
 <context>
+    <name>U2::PairedFastqComparator</name>
+    <message>
+        <location filename="../src/util/PairedFastqComparator.cpp" line="77"/>
+        <source>Too much reads without a pair (>%1). Check the input data is set correctly.</source>
+        <translation>Too much reads without a pair (>%1). Check the input data is set correctly.</translation>
+    </message>
+    <message>
+        <source>The list doesn't contains the item</source>
+        <translation type="vanished">The list doesn't contains the item</translation>
+    </message>
+    <message>
+        <location filename="../src/util/PairedFastqComparator.cpp" line="172"/>
+        <source>Invalid sequence info</source>
+        <translation>Invalid sequence info</translation>
+    </message>
+</context>
+<context>
     <name>U2::PhylipFormat</name>
     <message>
         <location filename="../src/PhylipFormat.cpp" line="48"/>
@@ -2016,7 +2060,7 @@ The following sequences are empty:</translation>
         <translation>Неизвестный алфавит</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="351"/>
+        <location filename="../src/PhylipFormat.cpp" line="350"/>
         <source>Error parsing file</source>
         <translation>Ошибка разбора формата</translation>
     </message>
@@ -2024,32 +2068,32 @@ The following sequences are empty:</translation>
 <context>
     <name>U2::PhylipInterleavedFormat</name>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="239"/>
+        <location filename="../src/PhylipFormat.cpp" line="238"/>
         <source>PHYLIP Interleaved</source>
         <translation>PHYLIP Interleaved</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="338"/>
+        <location filename="../src/PhylipFormat.cpp" line="337"/>
         <source>Illegal line</source>
         <translation>Неправильная строка</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="345"/>
+        <location filename="../src/PhylipFormat.cpp" line="344"/>
         <source>Wrong header</source>
         <translation>Неверный заголовок</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="381"/>
+        <location filename="../src/PhylipFormat.cpp" line="379"/>
         <source>Block is incomplete</source>
         <translation>Block is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="392"/>
+        <location filename="../src/PhylipFormat.cpp" line="390"/>
         <source>Block is incomlete</source>
         <translation>Block is incomlete</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="399"/>
+        <location filename="../src/PhylipFormat.cpp" line="397"/>
         <source>Number of characters does not correspond to the stated number</source>
         <translation>Число символов не соответствует установленному числу</translation>
     </message>
@@ -2073,18 +2117,18 @@ The following sequences are empty:</translation>
     </message>
     <message>
         <location filename="../src/PhylipFormat.cpp" line="211"/>
-        <location filename="../src/PhylipFormat.cpp" line="349"/>
+        <location filename="../src/PhylipFormat.cpp" line="348"/>
         <source>There is not enough data</source>
         <translation>Недостаточно данных</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="216"/>
-        <location filename="../src/PhylipFormat.cpp" line="359"/>
+        <location filename="../src/PhylipFormat.cpp" line="215"/>
+        <location filename="../src/PhylipFormat.cpp" line="357"/>
         <source>Error parsing file</source>
         <translation>Ошибка разбора формата</translation>
     </message>
     <message>
-        <location filename="../src/PhylipFormat.cpp" line="230"/>
+        <location filename="../src/PhylipFormat.cpp" line="229"/>
         <source>Number of characters does not correspond to the stated number</source>
         <translation>Число символов не соответствует установленному числу</translation>
     </message>
@@ -2115,10 +2159,6 @@ The following sequences are empty:</translation>
         <translation>Сырой файл последовательности - все содержимое файла рассматривается как один нуклеотид или пептидная последовательность. UGENE удалит все символы не принадлежащие алфавиту из результирующей последовательности.</translation>
     </message>
     <message>
-        <source>Raw sequence file - a whole content of the file is treated either as a single nucleotide or peptide sequence UGENE will remove all non-alphabetic chars from the result sequence</source>
-        <translation type="vanished">Сырой файл последовательности - все содержимое файла рассматривается как один нуклеотид или пептидная последовательность. UGENE удалит все символы не принадлежащие алфавиту из результирующей последовательности</translation>
-    </message>
-    <message>
         <location filename="../src/RawDNASequenceFormat.cpp" line="132"/>
         <source>Sequence is empty</source>
         <translation>Последовательность пуста</translation>
@@ -2160,7 +2200,7 @@ The following sequences are empty:</translation>
         <translation>Failed to parse SCF file: %1</translation>
     </message>
     <message>
-        <location filename="../src/SCFFormat.cpp" line="1233"/>
+        <location filename="../src/SCFFormat.cpp" line="1237"/>
         <source>Failed to load sequence from SCF file %1</source>
         <translation>Невозможно загрузить последовательность из SCF файла %1</translation>
     </message>
@@ -2170,7 +2210,7 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/util/SnpeffInfoParser.cpp" line="48"/>
         <source>Can't parse the next INFO part: '%1'</source>
-        <translation type="unfinished"></translation>
+        <translation>Can't parse the next INFO part: '%1'</translation>
     </message>
 </context>
 <context>
@@ -2207,23 +2247,23 @@ The following sequences are empty:</translation>
         <translation>одинаковые имена последовательностей в блоке</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="499"/>
+        <location filename="../src/StockholmFormat.cpp" line="498"/>
         <source>invalid file: sequence names are not equal in blocks</source>
         <translation>Непарное имя последовательности в блоке</translation>
     </message>
     <message>
         <location filename="../src/StockholmFormat.cpp" line="493"/>
-        <location filename="../src/StockholmFormat.cpp" line="505"/>
+        <location filename="../src/StockholmFormat.cpp" line="504"/>
         <source>invalid file: sequences in block are not of equal size</source>
         <translation>Блок содержит последовательности разной длины</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="519"/>
+        <location filename="../src/StockholmFormat.cpp" line="518"/>
         <source>invalid file: empty sequence alignment</source>
         <translation>Выравнивание не содержит последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/StockholmFormat.cpp" line="523"/>
+        <location filename="../src/StockholmFormat.cpp" line="522"/>
         <source>invalid file: unknown alphabet</source>
         <translation>Не удалось установить алфавит</translation>
     </message>
@@ -2306,49 +2346,49 @@ The following sequences are empty:</translation>
         <translation>Требуемый атрибут не найдет</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="268"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="272"/>
         <source>Database url is incorrect</source>
         <translation>Неправильный путь базы данных</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="274"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="278"/>
         <source>User login is not specified</source>
         <translation>Не указано имя пользователя</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="280"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="284"/>
         <source>Host is not specified</source>
         <translation>Не указан хост</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="286"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="290"/>
         <source>Database name is not specified</source>
         <translation>Не указано имя базы данных</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="302"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="306"/>
         <source>Error opening MySQL database: %1</source>
         <translation>Ошибка открытия базы данных MySQL: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="383"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="387"/>
         <source>Not a %1 MySQL database: %2, %3</source>
         <translation>Не %1 MySQL база данных: %2, %3</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="389"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="393"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="275"/>
         <source>Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</source>
         <translation>Предупреждение! База данных была создана с более новой %1 версией: %2. Не все возможности базы данных могут быть выполнены! Текущая %1 версия: %3.</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="492"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="496"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="330"/>
         <source>Illegal database state: %1</source>
         <translation>Неправильное состояние базы данных: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="523"/>
+        <location filename="../src/mysql_dbi/MysqlDbi.cpp" line="527"/>
         <location filename="../src/sqlite_dbi/SQLiteDbi.cpp" line="412"/>
         <source>Can't synchronize database state</source>
         <translation>Невозможно синхронизовать состояние базы данных</translation>
@@ -2401,141 +2441,141 @@ The following sequences are empty:</translation>
     <message>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="102"/>
         <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="118"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="216"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="648"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="368"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="217"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="653"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="373"/>
         <source>Msa object not found</source>
         <translation>Объект msa не найден</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="177"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="795"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="835"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="178"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="829"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="869"/>
         <source>Msa row not found</source>
         <translation>Столбец msa не найден</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="600"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="633"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1114"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1123"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="605"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="638"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1125"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1134"/>
         <source>Unexpected modification type '%1'</source>
         <translation>Неожиданный тип модификации '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="670"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="704"/>
         <source>Invalid row position: %1</source>
         <translation>Неправильное расположение столбца: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1044"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1175"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1078"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1209"/>
         <source>An error occurred during updating an alignment alphabet</source>
         <translation>Возникла ошибка во время обновления алфавита выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1062"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1190"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1096"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1224"/>
         <source>An error occurred during reverting adding of rows</source>
         <translation>Возникла ошибка во время отмены добавления столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1080"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1114"/>
         <source>An error occurred during reverting addition of a row</source>
         <translation>Возникла ошибка во время отмены добавления столбца</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1093"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1210"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1127"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1244"/>
         <source>An error occurred during reverting removing of rows</source>
         <translation>Возникла ошибка во время отмены удаления столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1106"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1225"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1140"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1259"/>
         <source>An error occurred during reverting removing of a row</source>
         <translation>Возникла ошибка во время отмены удаления столбца</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1120"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1236"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1154"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1270"/>
         <source>An error occurred during updating an alignment gaps</source>
         <translation>Возникла ошибка во время обновления пробелов выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1133"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1246"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1167"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1280"/>
         <source>An error occurred during updating an alignment row order</source>
         <translation>Возникла ошибка во время обновления порядка столбцов</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1147"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1256"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1181"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1290"/>
         <source>An error occurred during updating a row info</source>
         <translation>Возникла ошибка во время обновления информации о столбце</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1162"/>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1271"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1287"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1297"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1196"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1305"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1326"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="1336"/>
         <source>An error occurred during updating an msa length</source>
         <translation>An error occurred during updating an msa length</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1200"/>
+        <location filename="../src/mysql_dbi/MysqlMsaDbi.cpp" line="1234"/>
         <source>An error occurred during addition of a row</source>
         <translation>Возникла ошибка во время добавления столбца</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="587"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="593"/>
         <source>Can't undo an operation for the object</source>
         <translation>Невозможно отменить операцию для объекта</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="650"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="656"/>
         <source>Can't redo an operation for the object</source>
         <translation>Невозможно передвинуться на одну операцию вперед для объекта</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="792"/>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="897"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="798"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="903"/>
         <source>Object not found</source>
         <translation>Объект не найден</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="846"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="852"/>
         <source>Folder not found: %1 (canonical: %2)</source>
         <translation>Папка не найдена: %1 (каноническое: %2)</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1027"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1033"/>
         <source>Not an object, id: %1, type: %2</source>
         <translation>Не является объектом, id: %1, тип: %2</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1050"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="289"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1057"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="290"/>
         <source>Unknown object type! Id: %1, type: %2</source>
         <translation>Unknown object type! Id: %1, type: %2</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1092"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1101"/>
         <source>Can't undo an unknown operation: '%1'</source>
         <translation>Can't undo an unknown operation: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1105"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1116"/>
         <source>Can't redo an unknown operation: '%1'</source>
         <translation>Can't redo an unknown operation: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1136"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1147"/>
         <source>An error occurred during updating an object name</source>
         <translation>An error occurred during updating an object name</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1154"/>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="1165"/>
         <source>An error occurred during updating an object name!</source>
         <translation>An error occurred during updating an object name!</translation>
     </message>
@@ -2555,12 +2595,12 @@ The following sequences are empty:</translation>
         <translation>An exception was thrown during reading sequence data from dbi</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="387"/>
+        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="391"/>
         <source>An error occurred during reverting replacing sequence data</source>
         <translation>An error occurred during reverting replacing sequence data</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="402"/>
+        <location filename="../src/mysql_dbi/MysqlSequenceDbi.cpp" line="406"/>
         <source>An error occurred during replacing sequence data</source>
         <translation>An error occurred during replacing sequence data</translation>
     </message>
@@ -2627,12 +2667,12 @@ The following sequences are empty:</translation>
         <translation>Can not convert pnext to a number: %1</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="399"/>
+        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="411"/>
         <source>Bound values: </source>
         <translation>Связанные значения: </translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="421"/>
+        <location filename="../src/mysql_dbi/util/MysqlHelpers.cpp" line="433"/>
         <source>Cannot start a transaction</source>
         <translation>Cannot start a transaction</translation>
     </message>
@@ -2728,16 +2768,16 @@ The following sequences are empty:</translation>
         <translation>An object single modification step not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="520"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="535"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="727"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="525"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="540"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="733"/>
         <source>Msa object not found!</source>
         <translation>Msa object not found!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="617"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="757"/>
-        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="795"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="623"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="793"/>
+        <location filename="../src/sqlite_dbi/SQLiteMsaDbi.cpp" line="831"/>
         <source>Msa row not found!</source>
         <translation>Msa row not found!</translation>
     </message>
@@ -2747,29 +2787,34 @@ The following sequences are empty:</translation>
         <translation>Not an object! Id: %1, type: %2</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="600"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="601"/>
         <source>Can't undo an operation for the object!</source>
         <translation>Can't undo an operation for the object!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="685"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="686"/>
         <source>Can't redo an operation for the object!</source>
         <translation>Can't redo an operation for the object!</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="857"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="858"/>
         <source>Object not found!</source>
         <translation>Object not found!</translation>
     </message>
     <message>
-        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="804"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="918"/>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="930"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="993"/>
+        <source>Unexpected row count! Query: '%1', rows: %2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mysql_dbi/MysqlObjectDbi.cpp" line="810"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="919"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="931"/>
         <source>Object not found.</source>
         <translation>Object not found.</translation>
     </message>
     <message>
-        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="967"/>
+        <location filename="../src/sqlite_dbi/SQLiteObjectDbi.cpp" line="968"/>
         <source>Folder not found: %1</source>
         <translation>Folder not found: %1</translation>
     </message>
@@ -2789,6 +2834,14 @@ The following sequences are empty:</translation>
         <source>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</source>
         <translation>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
     </message>
+    <message>
+        <location filename="../src/mysql_dbi/MysqlUdrDbi.cpp" line="63"/>
+        <location filename="../src/mysql_dbi/MysqlUdrDbi.cpp" line="77"/>
+        <location filename="../src/sqlite_dbi/SQLiteUdrDbi.cpp" line="56"/>
+        <location filename="../src/sqlite_dbi/SQLiteUdrDbi.cpp" line="67"/>
+        <source>An error occurred during updating UDR</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::VectorNtiSequenceFormat</name>
@@ -2812,375 +2865,4 @@ The following sequences are empty:</translation>
         <translation>Ошибка записи</translation>
     </message>
 </context>
-<context>
-    <name>U2DbiL10n</name>
-    <message>
-        <source>There is no assembly object with the specified id.</source>
-        <translation type="vanished">Не найден объект сборки с указанным идентификатором.</translation>
-    </message>
-    <message>
-        <source>Unsupported attribute type: %1</source>
-        <translation type="vanished">Неподдерживаемый тип атрибута: %1</translation>
-    </message>
-    <message>
-        <source>Required attribute is not found</source>
-        <translation type="vanished">Требуемый атрибут не найдет</translation>
-    </message>
-    <message>
-        <source>Database url is incorrect</source>
-        <translation type="vanished">Неправильный путь базы данных</translation>
-    </message>
-    <message>
-        <source>User login is not specified</source>
-        <translation type="vanished">Не указано имя пользователя</translation>
-    </message>
-    <message>
-        <source>Host is not specified</source>
-        <translation type="vanished">Не указан хост</translation>
-    </message>
-    <message>
-        <source>Database name is not specified</source>
-        <translation type="vanished">Не указано имя базы данных</translation>
-    </message>
-    <message>
-        <source>Error opening MySQL database: %1</source>
-        <translation type="vanished">Ошибка открытия базы данных MySQL: %1</translation>
-    </message>
-    <message>
-        <source>Not a %1 MySQL database: %2, %3</source>
-        <translation type="vanished">Не %1 MySQL база данных: %2, %3</translation>
-    </message>
-    <message>
-        <source>Warning! The database was created with a newer %1 version: %2. Not all database features may be supported! Current %1 version: %3.</source>
-        <translation type="vanished">Предупреждение! База данных была создана с более новой %1 версией: %2. Не все возможности базы данных могут быть выполнены! Текущая %1 версия: %3.</translation>
-    </message>
-    <message>
-        <source>Illegal database state: %1</source>
-        <translation type="vanished">Неправильное состояние базы данных: %1</translation>
-    </message>
-    <message>
-        <source>Can't synchronize database state</source>
-        <translation type="vanished">Невозможно синхронизовать состояние базы данных</translation>
-    </message>
-    <message>
-        <source>Annotation table object is not found.</source>
-        <translation type="vanished">Не найдена таблица аннотаций.</translation>
-    </message>
-    <message>
-        <source>Feature is not found.</source>
-        <translation type="vanished">Аннотация не найдена.</translation>
-    </message>
-    <message>
-        <source>An object single modification step not found</source>
-        <translation type="vanished">Объект единичной модификации не найден</translation>
-    </message>
-    <message>
-        <source>Failed to find user step ID</source>
-        <translation type="vanished">Невозможно найти идентификатор объекта единичной модификации</translation>
-    </message>
-    <message>
-        <source>Not main thread</source>
-        <translation type="vanished">Не основной поток</translation>
-    </message>
-    <message>
-        <source>Can't create a common user modifications step, previous one is not complete</source>
-        <translation type="vanished">Невозможно создать новую единичную модификацию, т.к. прошлая модификация еще не завершена</translation>
-    </message>
-    <message>
-        <source>Can't create a common multiple modifications step, previous one is not complete</source>
-        <translation type="vanished">Невозможно создать новые модификации, т.к. прошлая модификация еще не завершена</translation>
-    </message>
-    <message>
-        <source>Failed to create a common user modifications step</source>
-        <translation type="vanished">Не удалось создать новую единичную модификацию</translation>
-    </message>
-    <message>
-        <source>Failed to create a common multiple modifications step</source>
-        <translation type="vanished">Не удалось создать новые модификации</translation>
-    </message>
-    <message>
-        <source>Msa object not found</source>
-        <translation type="vanished">Объект msa не найден</translation>
-    </message>
-    <message>
-        <source>Msa row not found</source>
-        <translation type="vanished">Столбец msa не найден</translation>
-    </message>
-    <message>
-        <source>Unexpected modification type '%1'</source>
-        <translation type="vanished">Неожиданный тип модификации '%1'</translation>
-    </message>
-    <message>
-        <source>Invalid row position: %1</source>
-        <translation type="vanished">Неправильное расположение столбца: %1</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment alphabet</source>
-        <translation type="vanished">Возникла ошибка во время обновления алфавита выравнивания</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting adding of rows</source>
-        <translation type="vanished">Возникла ошибка во время отмены добавления столбцов</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting addition of a row</source>
-        <translation type="vanished">Возникла ошибка во время отмены добавления столбца</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting removing of rows</source>
-        <translation type="vanished">Возникла ошибка во время отмены удаления столбцов</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting removing of a row</source>
-        <translation type="vanished">Возникла ошибка во время отмены удаления столбца</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment gaps</source>
-        <translation type="vanished">Возникла ошибка во время обновления пробелов выравнивания</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an alignment row order</source>
-        <translation type="vanished">Возникла ошибка во время обновления порядка столбцов</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating a row info</source>
-        <translation type="vanished">Возникла ошибка во время обновления информации о столбце</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an msa length</source>
-        <translation type="vanished">An error occurred during updating an msa length</translation>
-    </message>
-    <message>
-        <source>An error occurred during addition of a row</source>
-        <translation type="vanished">Возникла ошибка во время добавления столбца</translation>
-    </message>
-    <message>
-        <source>Can't undo an operation for the object</source>
-        <translation type="vanished">Невозможно отменить операцию для объекта</translation>
-    </message>
-    <message>
-        <source>Can't redo an operation for the object</source>
-        <translation type="vanished">Невозможно передвинуться на одну операцию вперед для объекта</translation>
-    </message>
-    <message>
-        <source>Object not found</source>
-        <translation type="vanished">Объект не найден</translation>
-    </message>
-    <message>
-        <source>Folder not found: %1 (canonical: %2)</source>
-        <translation type="vanished">Папка не найдена: %1 (каноническое: %2)</translation>
-    </message>
-    <message>
-        <source>Not an object, id: %1, type: %2</source>
-        <translation type="vanished">Не является объектом, id: %1, тип: %2</translation>
-    </message>
-    <message>
-        <source>Unknown object type! Id: %1, type: %2</source>
-        <translation type="vanished">Unknown object type! Id: %1, type: %2</translation>
-    </message>
-    <message>
-        <source>Can't undo an unknown operation: '%1'</source>
-        <translation type="vanished">Can't undo an unknown operation: '%1'</translation>
-    </message>
-    <message>
-        <source>Can't redo an unknown operation: '%1'</source>
-        <translation type="vanished">Can't redo an unknown operation: '%1'</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an object name</source>
-        <translation type="vanished">An error occurred during updating an object name</translation>
-    </message>
-    <message>
-        <source>An error occurred during updating an object name!</source>
-        <translation type="vanished">An error occurred during updating an object name!</translation>
-    </message>
-    <message>
-        <source>Sequence object not found</source>
-        <translation type="vanished">Последовательность не найдена</translation>
-    </message>
-    <message>
-        <source>Exception was thrown</source>
-        <translation type="obsolete">Exception was thrown</translation>
-    </message>
-    <message>
-        <source>Internal error occurred during the sequence processing</source>
-        <translation type="vanished">Internal error occurred during the sequence processing</translation>
-    </message>
-    <message>
-        <source>An exception was thrown during reading sequence data from dbi</source>
-        <translation type="vanished">An exception was thrown during reading sequence data from dbi</translation>
-    </message>
-    <message>
-        <source>An error occurred during reverting replacing sequence data</source>
-        <translation type="vanished">An error occurred during reverting replacing sequence data</translation>
-    </message>
-    <message>
-        <source>An error occurred during replacing sequence data</source>
-        <translation type="vanished">An error occurred during replacing sequence data</translation>
-    </message>
-    <message>
-        <source>Invalid variant track type: %1</source>
-        <translation type="vanished">Invalid variant track type: %1</translation>
-    </message>
-    <message>
-        <source>Sequence name is not set</source>
-        <translation type="vanished">Sequence name is not set</translation>
-    </message>
-    <message>
-        <source>New variant public ID is empty</source>
-        <translation type="vanished">New variant public ID is empty</translation>
-    </message>
-    <message>
-        <source>New variant track ID is empty</source>
-        <translation type="vanished">New variant track ID is empty</translation>
-    </message>
-    <message>
-        <source>Packed data is empty</source>
-        <translation type="vanished">Packed data is empty</translation>
-    </message>
-    <message>
-        <source>Packing method prefix is not supported: %1</source>
-        <translation type="vanished">Packing method prefix is not supported: %1</translation>
-    </message>
-    <message>
-        <source>Data is corrupted, no name end marker found: %1</source>
-        <translation type="vanished">Data is corrupted, no name end marker found: %1</translation>
-    </message>
-    <message>
-        <source>Data is corrupted, no sequence end marker found: %1</source>
-        <translation type="vanished">Data is corrupted, no sequence end marker found: %1</translation>
-    </message>
-    <message>
-        <source>Data is corrupted, no CIGAR end marker found: %1</source>
-        <translation type="vanished">Data is corrupted, no CIGAR end marker found: %1</translation>
-    </message>
-    <message>
-        <source>Data is corrupted, no rnext end marker found: %1</source>
-        <translation type="vanished">Data is corrupted, no rnext end marker found: %1</translation>
-    </message>
-    <message>
-        <source>Can not convert pnext to a number: %1</source>
-        <translation type="vanished">Can not convert pnext to a number: %1</translation>
-    </message>
-    <message>
-        <source>Bound values: </source>
-        <translation type="vanished">Связанные значения: </translation>
-    </message>
-    <message>
-        <source>Cannot start a transaction</source>
-        <translation type="vanished">Cannot start a transaction</translation>
-    </message>
-    <message>
-        <source>Failed to detect assembly storage format: %1</source>
-        <translation type="vanished">Failed to detect assembly storage format: %1</translation>
-    </message>
-    <message>
-        <source>Failed to parse range: %1, full: %2</source>
-        <translation type="vanished">Failed to parse range: %1, full: %2</translation>
-    </message>
-    <message>
-        <source>Failed to parse packed row range info %1</source>
-        <translation type="vanished">Failed to parse packed row range info %1</translation>
-    </message>
-    <message>
-        <source>Error during RTree index creation: %1! Check if SQLite library has RTree index support!</source>
-        <translation type="vanished">Error during RTree index creation: %1! Check if SQLite library has RTree index support!</translation>
-    </message>
-    <message>
-        <source>Unsupported reads storage type: %1</source>
-        <translation type="vanished">Unsupported reads storage type: %1</translation>
-    </message>
-    <message>
-        <source>Packing method is not supported: %1</source>
-        <translation type="vanished">Packing method is not supported: %1</translation>
-    </message>
-    <message>
-        <source>Packed data is empty!</source>
-        <translation type="vanished">Packed data is empty!</translation>
-    </message>
-    <message>
-        <source>Error checking SQLite database: %1!</source>
-        <translation type="vanished">Error checking SQLite database: %1!</translation>
-    </message>
-    <message>
-        <source>Error creating table: %1, error: %2</source>
-        <translation type="vanished">Error creating table: %1, error: %2</translation>
-    </message>
-    <message>
-        <source>Not a %1 SQLite database: %2</source>
-        <translation type="vanished">Not a %1 SQLite database: %2</translation>
-    </message>
-    <message>
-        <source>Database is already opened!</source>
-        <translation type="vanished">База данных уже открыта!</translation>
-    </message>
-    <message>
-        <source>URL is not specified</source>
-        <translation type="vanished">Не задан путь</translation>
-    </message>
-    <message>
-        <source>Error opening SQLite database: %1!</source>
-        <translation type="vanished">Error opening SQLite database: %1!</translation>
-    </message>
-    <message>
-        <source>Database is already closed!</source>
-        <translation type="vanished">База данных уже закрыта!</translation>
-    </message>
-    <message>
-        <source>Illegal database state %1!</source>
-        <translation type="vanished">Illegal database state %1!</translation>
-    </message>
-    <message>
-        <source>Failed to close database: %1, err: %2</source>
-        <translation type="vanished">Failed to close database: %1, err: %2</translation>
-    </message>
-    <message>
-        <source>Annotation table object not found.</source>
-        <translation type="vanished">Annotation table object not found.</translation>
-    </message>
-    <message>
-        <source>An object single modification step not found!</source>
-        <translation type="vanished">An object single modification step not found!</translation>
-    </message>
-    <message>
-        <source>Msa object not found!</source>
-        <translation type="vanished">Msa object not found!</translation>
-    </message>
-    <message>
-        <source>Msa row not found!</source>
-        <translation type="vanished">Msa row not found!</translation>
-    </message>
-    <message>
-        <source>Not an object! Id: %1, type: %2</source>
-        <translation type="vanished">Not an object! Id: %1, type: %2</translation>
-    </message>
-    <message>
-        <source>Can't undo an operation for the object!</source>
-        <translation type="vanished">Can't undo an operation for the object!</translation>
-    </message>
-    <message>
-        <source>Can't redo an operation for the object!</source>
-        <translation type="vanished">Can't redo an operation for the object!</translation>
-    </message>
-    <message>
-        <source>Object not found!</source>
-        <translation type="vanished">Object not found!</translation>
-    </message>
-    <message>
-        <source>Object not found.</source>
-        <translation type="vanished">Object not found.</translation>
-    </message>
-    <message>
-        <source>Folder not found: %1</source>
-        <translation type="vanished">Folder not found: %1</translation>
-    </message>
-    <message>
-        <source>Sequence object not found.</source>
-        <translation type="vanished">Sequence object not found.</translation>
-    </message>
-    <message>
-        <source>Sequence name is not set!</source>
-        <translation type="vanished">Sequence name is not set!</translation>
-    </message>
-</context>
 </TS>
diff --git a/src/corelibs/U2Gui/U2Gui.pri b/src/corelibs/U2Gui/U2Gui.pri
index 4773721..2aa04da 100644
--- a/src/corelibs/U2Gui/U2Gui.pri
+++ b/src/corelibs/U2Gui/U2Gui.pri
@@ -5,8 +5,7 @@ include( ../../ugene_lib_common.pri )
 
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += network xml svg sql
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets printsupport
+QT += network xml svg sql widgets printsupport
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2GUI_DLL
 INCLUDEPATH += ../U2Private/src
 
diff --git a/src/corelibs/U2Gui/U2Gui.pro b/src/corelibs/U2Gui/U2Gui.pro
index f7b262d..05faa65 100644
--- a/src/corelibs/U2Gui/U2Gui.pro
+++ b/src/corelibs/U2Gui/U2Gui.pro
@@ -55,12 +55,13 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/GlassView.h \
            src/util/GObjectComboBoxController.h \
            src/util/GraphUtils.h \
+           src/util/GroupedComboBoxDelegate.h \
            src/util/GScrollBar.h \
            src/util/GUIUtils.h \
            src/util/HelpButton.h \
-           src/util/ImportDialogsFactories.h \
            src/util/ImportSequenceFromRawDataTask.h \
            src/util/InputWidgetsControllers.h \
+           src/util/ImportWidgetsFactories.h \
            src/util/LabelClickTransmitter.h \
            src/util/LastUsedDirHelper.h \
            src/util/LocalToolbar.h \
@@ -82,6 +83,7 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/ScriptEditorDialog.h \
            src/util/ScriptEditorWidget.h \
            src/util/ScriptHighlighter.h \
+           src/util/SearchBox.h \
            src/util/SearchGenbankSequenceDialogController.h \
            src/util/SeqPasterWidgetController.h \
            src/util/SequenceTextEdit.h \
@@ -92,7 +94,9 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/WidgetWithLocalToolbar.h \
            src/util/imageExport/ImageExportTask.h \
            src/util/imageExport/WidgetScreenshotExportTask.h \
-           src/util/ImportDialogs/AceImportDialog.h \
+           src/util/ImportWidgets/AceImportWidget.h \
+           src/util/ImportWidgets/AprImportWidget.h \
+           src/util/ImportWidgets/ImportWidget.h \
            src/util/logview/LogView.h \
            src/util/project/filter_tasks/FeatureKeyFilterTask.h \
            src/util/project/filter_tasks/MsaContentFilterTask.h \
@@ -121,6 +125,7 @@ HEADERS += src/AppSettingsGUI.h \
            src/util/shared_db/ImportToDatabaseDialog.h \
            src/util/shared_db/ItemToImportEditDialog.h \
            src/util/shared_db/SharedConnectionsDialog.h
+
 FORMS += src/util/AddNewDocumentDialog.ui \
          src/util/AuthenticationDialog.ui \
          src/util/AuthenticationWidget.ui \
@@ -146,13 +151,15 @@ FORMS += src/util/AddNewDocumentDialog.ui \
          src/util/ScriptEditorDialog.ui \
          src/util/SearchGenbankSequenceDialog.ui \
          src/util/SeqPasterWidget.ui \
-         src/util/ImportDialogs/AceImportDialog.ui \
+         src/util/ImportWidgets/AceImportWidget.ui \
+         src/util/ImportWidgets/AprImportWidget.ui \
          src/util/shared_db/CommonImportOptionsDialog.ui \
          src/util/shared_db/EditConnectionDialog.ui \
          src/util/shared_db/ImportOptionsWidget.ui \
          src/util/shared_db/ImportToDatabaseDialog.ui \
          src/util/shared_db/ItemToImportEditDialog.ui \
          src/util/shared_db/SharedConnectionsDialog.ui
+
 SOURCES += src/MainWindow.cpp \
            src/Notification.cpp \
            src/NotificationWidget.cpp \
@@ -202,12 +209,13 @@ SOURCES += src/MainWindow.cpp \
            src/util/GlassView.cpp \
            src/util/GObjectComboBoxController.cpp \
            src/util/GraphUtils.cpp \
+           src/util/GroupedComboBoxDelegate.cpp \
            src/util/GScrollBar.cpp \
            src/util/GUIUtils.cpp \
            src/util/HelpButton.cpp \
-           src/util/ImportDialogsFactories.cpp \
            src/util/ImportSequenceFromRawDataTask.cpp \
            src/util/InputWidgetsControllers.cpp \
+           src/util/ImportWidgetsFactories.cpp \
            src/util/LabelClickTransmitter.cpp \
            src/util/LastUsedDirHelper.cpp \
            src/util/LocalToolbar.cpp \
@@ -228,6 +236,7 @@ SOURCES += src/MainWindow.cpp \
            src/util/ScriptEditorDialog.cpp \
            src/util/ScriptEditorWidget.cpp \
            src/util/ScriptHighlighter.cpp \
+           src/util/SearchBox.cpp \
            src/util/SearchGenbankSequenceDialogController.cpp \
            src/util/SeqPasterWidgetController.cpp \
            src/util/SequenceTextEdit.cpp \
@@ -238,7 +247,9 @@ SOURCES += src/MainWindow.cpp \
            src/util/WidgetWithLocalToolbar.cpp \
            src/util/imageExport/ImageExportTask.cpp \
            src/util/imageExport/WidgetScreenshotExportTask.cpp \
-           src/util/ImportDialogs/AceImportDialog.cpp \
+           src/util/ImportWidgets/AceImportWidget.cpp \
+           src/util/ImportWidgets/AprImportWidget.cpp \
+           src/util/ImportWidgets/ImportWidget.cpp \
            src/util/logview/LogView.cpp \
            src/util/project/filter_tasks/FeatureKeyFilterTask.cpp \
            src/util/project/filter_tasks/MsaContentFilterTask.cpp \
diff --git a/src/corelibs/U2Gui/U2Gui.qrc b/src/corelibs/U2Gui/U2Gui.qrc
index 0b298fd..84cdbb9 100644
--- a/src/corelibs/U2Gui/U2Gui.qrc
+++ b/src/corelibs/U2Gui/U2Gui.qrc
@@ -179,5 +179,9 @@
         <file>images/show_all_views.png</file>
         <file>images/wrap_sequence.png</file>
         <file>images/extract_assembly_region.png</file>
+        <file>images/amb_backward.png</file>
+        <file>images/amb_forward.png</file>
+        <file>images/mismatch-backward.png</file>
+        <file>images/mismatch-forward.png</file>
     </qresource>
 </RCC>
diff --git a/src/corelibs/U2Gui/images/amb_backward.png b/src/corelibs/U2Gui/images/amb_backward.png
new file mode 100644
index 0000000..11119a5
Binary files /dev/null and b/src/corelibs/U2Gui/images/amb_backward.png differ
diff --git a/src/corelibs/U2Gui/images/amb_forward.png b/src/corelibs/U2Gui/images/amb_forward.png
new file mode 100644
index 0000000..17528aa
Binary files /dev/null and b/src/corelibs/U2Gui/images/amb_forward.png differ
diff --git a/src/corelibs/U2Gui/images/mismatch-backward.png b/src/corelibs/U2Gui/images/mismatch-backward.png
new file mode 100644
index 0000000..20804a8
Binary files /dev/null and b/src/corelibs/U2Gui/images/mismatch-backward.png differ
diff --git a/src/corelibs/U2Gui/images/mismatch-forward.png b/src/corelibs/U2Gui/images/mismatch-forward.png
new file mode 100644
index 0000000..d47b130
Binary files /dev/null and b/src/corelibs/U2Gui/images/mismatch-forward.png differ
diff --git a/src/corelibs/U2Gui/src/AppSettingsGUI.h b/src/corelibs/U2Gui/src/AppSettingsGUI.h
index e9c899b..00ec5eb 100644
--- a/src/corelibs/U2Gui/src/AppSettingsGUI.h
+++ b/src/corelibs/U2Gui/src/AppSettingsGUI.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,8 @@
 #define _U2_APPSETTINGS_GUI_H_
 
 #include <U2Core/global.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+
+#include <QWidget>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/MainWindow.cpp b/src/corelibs/U2Gui/src/MainWindow.cpp
index a144b10..9ec0cd4 100644
--- a/src/corelibs/U2Gui/src/MainWindow.cpp
+++ b/src/corelibs/U2Gui/src/MainWindow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/MainWindow.h b/src/corelibs/U2Gui/src/MainWindow.h
index d7ae2e1..e079501 100644
--- a/src/corelibs/U2Gui/src/MainWindow.h
+++ b/src/corelibs/U2Gui/src/MainWindow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,12 +28,8 @@
 
 #include "NotificationsTypes.h"
 
-#include <QtCore/QEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QEvent>
+#include <QWidget>
 
 class QAction;
 class QMdiSubWindow;
diff --git a/src/corelibs/U2Gui/src/Notification.cpp b/src/corelibs/U2Gui/src/Notification.cpp
index 1c7f39d..5275227 100644
--- a/src/corelibs/U2Gui/src/Notification.cpp
+++ b/src/corelibs/U2Gui/src/Notification.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -226,10 +226,13 @@ void Notification::showNotification(int x, int y) {
     resize(TT_WIDTH, 0);
 }
 
-void Notification::dissapear() {
+void Notification::switchEmbeddedVisualState() {
     setMinimumHeight(TT_HEIGHT);
     close->show();
     setAttribute(Qt::WA_Hover);
+}
+
+void Notification::dissapear() {
     hide();
     timer.stop();
     emit si_dissapear();
@@ -305,25 +308,35 @@ void NotificationStack::addNotification(Notification *t) {
         }
     }
 
+    bool onScreen = AppContext::getMainWindow()->getQMainWindow()->isActiveWindow();
     notifications.append(t);
-    notificationsOnScreen.append(t);
+    if (onScreen) {
+        notificationsOnScreen.append(t);
+    }
     emit si_changed();
     
     connect(t, SIGNAL(si_delete()), this, SLOT(sl_delete()), Qt::DirectConnection);
-    QPoint pos = getBottomRightOfMainWindow();
-    t->showNotification(pos.x() - TT_WIDTH, pos.y() - 50 - notificationPosition);
-    notificationNumber++;
-    notificationPosition += TT_HEIGHT;
-    connect(t, SIGNAL(si_dissapear()), SLOT(sl_notificationDissapear()));
+    if (onScreen) {
+        QPoint pos = getBottomRightOfMainWindow();
+        t->showNotification(pos.x() - TT_WIDTH, pos.y() - 50 - notificationPosition);
+        notificationNumber++;
+        notificationPosition += TT_HEIGHT;
+        connect(t, SIGNAL(si_dissapear()), SLOT(sl_notificationDissapear()));
+    } else {
+        addToNotificationWidget(t);
+    }
 }
 
 void NotificationStack::sl_notificationDissapear() {
-    notificationNumber--;
-    if(notificationNumber == 0) {
-        notificationPosition = 0;
-    }
-    
+    notificationNumber = qMax(0, notificationNumber - 1);
+    notificationPosition = qMax(0, notificationPosition  - TT_HEIGHT);
+
     Notification *t = qobject_cast<Notification*>(sender());
+    addToNotificationWidget(t);
+}
+
+void NotificationStack::addToNotificationWidget(Notification* t) {
+    t->switchEmbeddedVisualState();
     t->show();
     t->setParent(w);
     w->addNotification(t);
diff --git a/src/corelibs/U2Gui/src/Notification.h b/src/corelibs/U2Gui/src/Notification.h
index 2a6ec0f..0f820a1 100644
--- a/src/corelibs/U2Gui/src/Notification.h
+++ b/src/corelibs/U2Gui/src/Notification.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,39 +27,24 @@
 #include "NotificationWidget.h"
 #include "NotificationsTypes.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialog>
-#include <QtGui/QTextEdit>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QCheckBox>
-#include <QtGui/QLayout>
-#include <QtGui/QMainWindow>
-#include <QtGui/QScrollArea>
-#include <QtGui/QToolTip>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QScrollArea>
-#include <QtWidgets/QToolTip>
-#endif
-#include <QtGui/QMouseEvent>
-#include <QtGui/QHelpEvent>
-
-
-#include <QtCore/QPoint>
-#include <QtCore/QTimer>
+#include <QAction>
+#include <QLabel>
+#include <QPushButton>
+#include <QDialog>
+#include <QTextEdit>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QCheckBox>
+#include <QLayout>
+#include <QMainWindow>
+#include <QScrollArea>
+#include <QToolTip>
+#include <QMouseEvent>
+#include <QHelpEvent>
+
+
+#include <QPoint>
+#include <QTimer>
 
 namespace U2 {
 
@@ -78,6 +63,10 @@ public:
     virtual bool eventFilter( QObject * watched, QEvent * event ); 
     void increaseCounter();
 
+    // Switches notification to embedded visual state:
+    // In embedded state notification is shown inside NotificationWidget
+    void switchEmbeddedVisualState();
+
 private slots:
     void sl_timeout();
 
@@ -133,6 +122,9 @@ signals:
 private:
     QPoint getBottomRightOfMainWindow();    // because of Mac's strange behavior
 
+    // Adds notification as a child to notification widget
+    void addToNotificationWidget(Notification* n);
+
     NotificationWidget *w;
 
     QList<Notification *> notifications;
diff --git a/src/corelibs/U2Gui/src/NotificationWidget.cpp b/src/corelibs/U2Gui/src/NotificationWidget.cpp
index 9b09bd7..3e2d084 100644
--- a/src/corelibs/U2Gui/src/NotificationWidget.cpp
+++ b/src/corelibs/U2Gui/src/NotificationWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/NotificationWidget.h b/src/corelibs/U2Gui/src/NotificationWidget.h
index 8470bdf..e3e0fb1 100644
--- a/src/corelibs/U2Gui/src/NotificationWidget.h
+++ b/src/corelibs/U2Gui/src/NotificationWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,23 +24,15 @@
 
 #include <assert.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QPoint>
-
-#include <QtGui/QMouseEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QStyle>
-#include <QtGui/QLabel>
-#include <QtGui/QToolButton>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QScrollArea>
-#else
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QScrollArea>
-#endif
+#include <QObject>
+#include <QPoint>
+
+#include <QMouseEvent>
+#include <QStyle>
+#include <QLabel>
+#include <QToolButton>
+#include <QVBoxLayout>
+#include <QScrollArea>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/NotificationsTypes.h b/src/corelibs/U2Gui/src/NotificationsTypes.h
index 6690c82..5d4a44d 100644
--- a/src/corelibs/U2Gui/src/NotificationsTypes.h
+++ b/src/corelibs/U2Gui/src/NotificationsTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/ObjectViewModel.cpp b/src/corelibs/U2Gui/src/ObjectViewModel.cpp
index 245851c..2cc3f9d 100644
--- a/src/corelibs/U2Gui/src/ObjectViewModel.cpp
+++ b/src/corelibs/U2Gui/src/ObjectViewModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/ObjectViewModel.h b/src/corelibs/U2Gui/src/ObjectViewModel.h
index 6daef32..55acde7 100644
--- a/src/corelibs/U2Gui/src/ObjectViewModel.h
+++ b/src/corelibs/U2Gui/src/ObjectViewModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,15 +25,10 @@
 #include <U2Core/SelectionModel.h>
 #include "MainWindow.h"
 
-#include <QtCore/QMap>
-#include <QtCore/QVariantMap>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#endif
+#include <QMap>
+#include <QVariantMap>
+#include <QAction>
+#include <QMenu>
 
 namespace U2 {
 
@@ -47,7 +42,7 @@ class GObjectViewObjectHandler;
 
 class U2GUI_EXPORT GObjectViewFactoryRegistry: public QObject {
 public:
-    GObjectViewFactoryRegistry(QObject* p = NULL) : QObject(p){};
+    GObjectViewFactoryRegistry(QObject* p = NULL) : QObject(p){}
 
     void registerGObjectViewFactory(GObjectViewFactory* f);
 
diff --git a/src/corelibs/U2Gui/src/ObjectViewTasks.cpp b/src/corelibs/U2Gui/src/ObjectViewTasks.cpp
index 50aa12b..e96aa90 100644
--- a/src/corelibs/U2Gui/src/ObjectViewTasks.cpp
+++ b/src/corelibs/U2Gui/src/ObjectViewTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/BaseDocumentFormats.h>
diff --git a/src/corelibs/U2Gui/src/ObjectViewTasks.h b/src/corelibs/U2Gui/src/ObjectViewTasks.h
index e450b63..26a347d 100644
--- a/src/corelibs/U2Gui/src/ObjectViewTasks.h
+++ b/src/corelibs/U2Gui/src/ObjectViewTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Core/GObjectReference.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/OpenViewTask.cpp b/src/corelibs/U2Gui/src/OpenViewTask.cpp
index e4dcbf3..50a1d69 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.cpp
+++ b/src/corelibs/U2Gui/src/OpenViewTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,13 +43,8 @@
 
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QFileInfo>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
+#include <QFileInfo>
+#include <QApplication>
 
 namespace U2 {
 
@@ -195,12 +190,20 @@ void OpenViewTask::prepare()
         }
 
         if (res.isEmpty()) {
-            // no view can be opened -> check another special case: loaded object contains assemblies with their references
-            // -> load assemblies and their references and open view for the first assembly;
-            QList<GObject*> objList = doc->findGObjectByType(GObjectTypes::ASSEMBLY);
-            if (!objList.isEmpty()) {
+            // no view can be opened -> check another special cases: loaded object contains
+            // 1. assemblies with their references
+            // 2. multiple chromatogram alignment with a reference
+            // -> load assemblies/mca and their references and open view for the first object;
+            QList<GObject*> objectsToOpen;
+
+            objectsToOpen << doc->findGObjectByType(GObjectTypes::ASSEMBLY);
+            if (objectsToOpen.isEmpty()) {
+                objectsToOpen << doc->findGObjectByType(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT);
+            }
+
+            if (!objectsToOpen.isEmpty()) {
                 GObjectSelection os2;
-                os2.addToSelection(objList.first());
+                os2.addToSelection(objectsToOpen.first());
                 MultiGSelection ms2;
                 ms2.addSelection(&os2);
 
@@ -221,22 +224,24 @@ void OpenViewTask::prepare()
 //////////////////////////////////////////////////////////////////////////
 
 LoadRemoteDocumentAndAddToProjectTask::LoadRemoteDocumentAndAddToProjectTask(const QString &accId, const QString &dbName)
-    : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), openView(true), loadRemoteDocTask(NULL)
+    : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), 
+      mode(LoadRemoteDocumentMode_OpenView), loadRemoteDocTask(NULL)
 {
     accNumber = accId;
     databaseName = dbName;
 }
 
 LoadRemoteDocumentAndAddToProjectTask::LoadRemoteDocumentAndAddToProjectTask(const GUrl &url)
-    : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), openView(true), loadRemoteDocTask(NULL)
+    : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), 
+      mode(LoadRemoteDocumentMode_OpenView), loadRemoteDocTask(NULL)
 {
     docUrl = url;
 }
 
 LoadRemoteDocumentAndAddToProjectTask::LoadRemoteDocumentAndAddToProjectTask(const QString& accId, const QString& dbName,
-    const QString &fp, const QString &format, const QVariantMap &hints, bool openView)
+    const QString &fp, const QString &format, const QVariantMap &hints, LoadRemoteDocumentMode mode)
     : Task(tr("Load remote document and add to project"), TaskFlags_NR_FOSCOE | TaskFlag_MinimizeSubtaskErrorText),
-    accNumber(accId), databaseName(dbName), fileFormat(format), fullpath(fp), hints(hints), openView(openView), loadRemoteDocTask(NULL)
+    accNumber(accId), databaseName(dbName), fileFormat(format), fullpath(fp), hints(hints), mode(mode), loadRemoteDocTask(NULL)
 {
 
 }
@@ -277,6 +282,9 @@ QList<Task*> LoadRemoteDocumentAndAddToProjectTask::onSubTaskFinished( Task* sub
     }
 
     if (subTask == loadRemoteDocTask ) {
+        if (mode == LoadRemoteDocumentMode_LoadOnly) {
+            return subTasks;
+        }
         // hack for handling errors with http requests with bad resource id
         Document * d = loadRemoteDocTask->getDocument();
         if(d->getDocumentFormatId() == BaseDocumentFormats::PLAIN_TEXT) {
@@ -295,7 +303,7 @@ QList<Task*> LoadRemoteDocumentAndAddToProjectTask::onSubTaskFinished( Task* sub
         Project* proj = AppContext::getProject();
         if (proj == NULL) {
             QVariantMap hints;
-            hints[ProjectLoaderHint_LoadWithoutView] = !openView;
+            hints[ProjectLoaderHint_LoadWithoutView] = mode != LoadRemoteDocumentMode_OpenView;
             Task* openWithProjectTask = AppContext::getProjectLoader()->openWithProjectTask(fullPath, hints);
             if (openWithProjectTask != NULL) {
                 subTasks.append(openWithProjectTask);
@@ -306,7 +314,7 @@ QList<Task*> LoadRemoteDocumentAndAddToProjectTask::onSubTaskFinished( Task* sub
             QString url = doc->getURLString();
             Document* loadedDoc = proj->findDocumentByURL(url);
             if (loadedDoc != NULL){
-                Task *task = createLoadedDocTask(loadedDoc, openView);
+                Task *task = createLoadedDocTask(loadedDoc, mode == LoadRemoteDocumentMode_OpenView);
                 if (NULL != task) {
                     subTasks.append(task);
                 }
@@ -315,7 +323,7 @@ QList<Task*> LoadRemoteDocumentAndAddToProjectTask::onSubTaskFinished( Task* sub
                 doc = loadRemoteDocTask->takeDocument();
                 SAFE_POINT(doc != NULL, "loadRemoteDocTask->takeDocument() returns NULL!", subTasks);
                 subTasks.append(new AddDocumentTask(doc));
-                if (openView) {
+                if (mode == LoadRemoteDocumentMode_OpenView) {
                     subTasks.append(new LoadUnloadedDocumentAndOpenViewTask(doc));
                 } else {
                     subTasks.append(new LoadUnloadedDocumentTask(doc));
diff --git a/src/corelibs/U2Gui/src/OpenViewTask.h b/src/corelibs/U2Gui/src/OpenViewTask.h
index 8a30770..564865a 100644
--- a/src/corelibs/U2Gui/src/OpenViewTask.h
+++ b/src/corelibs/U2Gui/src/OpenViewTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,16 +48,23 @@ private:
     LoadUnloadedDocumentTask* loadUnloadedTask;
 };
 
+enum LoadRemoteDocumentMode {
+    LoadRemoteDocumentMode_LoadOnly = 1,
+    LoadRemoteDocumentMode_AddToProject = 2,
+    LoadRemoteDocumentMode_OpenView = 3
+};
+
 class U2GUI_EXPORT LoadRemoteDocumentAndAddToProjectTask : public Task {
     Q_OBJECT
 public:
+  
     LoadRemoteDocumentAndAddToProjectTask(const QString& accId, const QString& dbName);
     LoadRemoteDocumentAndAddToProjectTask(const QString& accId,
                                       const QString& dbName,
                                       const QString& fullpath,
                                       const QString& format = QString(),
                                       const QVariantMap& hints = QVariantMap(),
-                                      bool openView = true);
+                                      LoadRemoteDocumentMode mode = LoadRemoteDocumentMode_OpenView);
     LoadRemoteDocumentAndAddToProjectTask(const GUrl& url);
     virtual void prepare();
 protected:
@@ -69,7 +76,7 @@ private:
     QString     fullpath;
     GUrl        docUrl;
     QVariantMap hints;
-    bool        openView;
+    LoadRemoteDocumentMode mode;
     LoadRemoteDocumentTask* loadRemoteDocTask;
 };
 
diff --git a/src/corelibs/U2Gui/src/PasteController.cpp b/src/corelibs/U2Gui/src/PasteController.cpp
index ccd1efb..cc32c72 100644
--- a/src/corelibs/U2Gui/src/PasteController.cpp
+++ b/src/corelibs/U2Gui/src/PasteController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -175,7 +175,7 @@ PasteUrlsTask::PasteUrlsTask(const QList<QUrl> &toPasteUrls, bool addToProject)
     }
 
     if (!dirs.isEmpty()) {
-        setError(tr("Pasting of directories is not supported:") + "\n" + joinDirs(dirs, "\n"));
+        setError(tr("Pasting of folders is not supported:") + "\n" + joinDirs(dirs, "\n"));
         return;
     }
     CHECK(!urls.isEmpty(), );
diff --git a/src/corelibs/U2Gui/src/PasteController.h b/src/corelibs/U2Gui/src/PasteController.h
index 5bac445..17fa353 100644
--- a/src/corelibs/U2Gui/src/PasteController.h
+++ b/src/corelibs/U2Gui/src/PasteController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/PluginViewer.h b/src/corelibs/U2Gui/src/PluginViewer.h
index 22e4863..166ccbe 100644
--- a/src/corelibs/U2Gui/src/PluginViewer.h
+++ b/src/corelibs/U2Gui/src/PluginViewer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/ProjectParsing.cpp b/src/corelibs/U2Gui/src/ProjectParsing.cpp
index 34438b5..fec7c1b 100644
--- a/src/corelibs/U2Gui/src/ProjectParsing.cpp
+++ b/src/corelibs/U2Gui/src/ProjectParsing.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-
-#include <QtXml/qdom.h>
+#include <QDir>
+#include <QDomDocument>
 
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/L10n.h>
@@ -209,7 +209,7 @@ void ProjectFileUtils::saveProjectFile(U2OpStatus& ts, Project* project,
     QByteArray rawData = xmlDoc.toByteArray();
     //  printf(">>%s", xmlDoc.toString().toStdString().c_str());
 
-    //check that project directory exists
+    //check that project folder exists
     if (!projectDir.exists()) {
         QDir root;
         root.mkpath(projectDir.absolutePath());
@@ -309,6 +309,8 @@ namespace {
 }
 
 Project* ProjectParser10::createProjectFromXMLModel( const QString& pURL, const QDomDocument& xmlDoc, U2OpStatus& os) {
+    GCOUNTER(cvar, tvar, "ProjectParser10: createProjectFromXMLModel");
+
     QDomElement projectElement = xmlDoc.documentElement();
     QString name = projectElement.attribute("name");
     quint64 oid = qMax(quint64(0), projectElement.attribute("oid").toULongLong());
@@ -319,6 +321,9 @@ Project* ProjectParser10::createProjectFromXMLModel( const QString& pURL, const
     //read all documents
     QSet<QString> docUrls;
     QDomNodeList documentList = projectElement.elementsByTagName("document");
+
+    bool projectContainsInvalidFormats = false;
+
     for(int i=0; i < documentList.size(); i++) {
         QDomNode dn = documentList.item(i);
         if (!dn.isElement()) {
@@ -355,11 +360,14 @@ Project* ProjectParser10::createProjectFromXMLModel( const QString& pURL, const
             ioLog.info(tr("Duplicate document found: %1, ignoring").arg(docUrl));
             continue;
         }
+
         DocumentFormatId format = docElement.attribute("format");
-        if (BaseDocumentFormats::DATABASE_CONNECTION == format) {
+        projectContainsInvalidFormats |= BaseDocumentFormats::isInvalidId(format);
+        if (BaseDocumentFormats::equal(BaseDocumentFormats::DATABASE_CONNECTION, format)) {
             ioLog.info(tr("Database document: %1, ignoring").arg(docUrl));
             continue;
         }
+
         docUrls.insert(docUrl);
 
         bool readonly = docElement.attribute("readonly").toInt() != 0;
@@ -410,6 +418,10 @@ Project* ProjectParser10::createProjectFromXMLModel( const QString& pURL, const
         documents.append(d);
     }
 
+    if (projectContainsInvalidFormats) {
+        GCOUNTER(cvar1, tvar1, "Invalid format IDs: a project was created with 1.26.0");
+    }
+
     // read all saved views
     QDomNodeList viewElements = projectElement.elementsByTagName("view");
     for(int i=0;i<viewElements.size(); i++) {
diff --git a/src/corelibs/U2Gui/src/ProjectParsing.h b/src/corelibs/U2Gui/src/ProjectParsing.h
index 9dffa5f..aa27720 100644
--- a/src/corelibs/U2Gui/src/ProjectParsing.h
+++ b/src/corelibs/U2Gui/src/ProjectParsing.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/ProjectView.h b/src/corelibs/U2Gui/src/ProjectView.h
index 5e7ba7c..2e7598a 100644
--- a/src/corelibs/U2Gui/src/ProjectView.h
+++ b/src/corelibs/U2Gui/src/ProjectView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.cpp b/src/corelibs/U2Gui/src/ToolsMenu.cpp
index 0015f8c..9a7ab8b 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.cpp
+++ b/src/corelibs/U2Gui/src/ToolsMenu.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,6 +43,7 @@ const QString ToolsMenu::NGS_CONTROL = "NGS_CONTROL";
 const QString ToolsMenu::NGS_DENOVO = "NGS_DENOVO";
 const QString ToolsMenu::NGS_MAP = "NGS_MAP";
 const QString ToolsMenu::NGS_INDEX = "NGS_INDEX";
+const QString ToolsMenu::NGS_SCAFFOLD = "NGS_SCAFFOLD";
 const QString ToolsMenu::NGS_RAW_DNA = "NGS_RAW_DNA";
 const QString ToolsMenu::NGS_CALL_VARIANTS = "NGS_CALL_VARIANTS";
 const QString ToolsMenu::NGS_CALL_VARIANTS_AND_EFFECT = "NGS_CALL_VARIANTS_AND_EFFECT";
@@ -111,8 +112,8 @@ void ToolsMenu::init() {
     {
         subMenuAction[SANGER_MENU] << SANGER_CONTROL;
         subMenuAction[SANGER_MENU] << LINE;
-        subMenuAction[SANGER_MENU] << SANGER_DENOVO;
         subMenuAction[SANGER_MENU] << SANGER_ALIGN;
+        subMenuAction[SANGER_MENU] << SANGER_DENOVO;
     }
 
     actionText[NGS_MENU] = tr("NGS data analysis");
@@ -121,9 +122,11 @@ void ToolsMenu::init() {
     {
         subMenuAction[NGS_MENU] << NGS_CONTROL;
         subMenuAction[NGS_MENU] << LINE;
-        subMenuAction[NGS_MENU] << NGS_DENOVO;
-        subMenuAction[NGS_MENU] << NGS_MAP;
         subMenuAction[NGS_MENU] << NGS_INDEX;
+        subMenuAction[NGS_MENU] << NGS_MAP;
+        subMenuAction[NGS_MENU] << LINE;
+        subMenuAction[NGS_MENU] << NGS_DENOVO;
+        subMenuAction[NGS_MENU] << NGS_SCAFFOLD;
         subMenuAction[NGS_MENU] << LINE;
         subMenuAction[NGS_MENU] << NGS_RAW_DNA;
         subMenuAction[NGS_MENU] << NGS_CALL_VARIANTS;
diff --git a/src/corelibs/U2Gui/src/ToolsMenu.h b/src/corelibs/U2Gui/src/ToolsMenu.h
index f34726e..c49d917 100644
--- a/src/corelibs/U2Gui/src/ToolsMenu.h
+++ b/src/corelibs/U2Gui/src/ToolsMenu.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -51,6 +51,7 @@ public:
     static const QString NGS_DENOVO;
     static const QString NGS_MAP;
     static const QString NGS_INDEX;
+    static const QString NGS_SCAFFOLD;
     static const QString NGS_RAW_DNA;
     static const QString NGS_CALL_VARIANTS;
     static const QString NGS_CALL_VARIANTS_AND_EFFECT;
diff --git a/src/corelibs/U2Gui/src/U2SavableWidget.cpp b/src/corelibs/U2Gui/src/U2SavableWidget.cpp
index 6e39189..1e9f12d 100644
--- a/src/corelibs/U2Gui/src/U2SavableWidget.cpp
+++ b/src/corelibs/U2Gui/src/U2SavableWidget.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/U2SavableWidget.h b/src/corelibs/U2Gui/src/U2SavableWidget.h
index 9e6abc0..1499600 100644
--- a/src/corelibs/U2Gui/src/U2SavableWidget.h
+++ b/src/corelibs/U2Gui/src/U2SavableWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_SAVABLE_WIDGET_H_
 #define _U2_SAVABLE_WIDGET_H_
 
-#include <QtCore/QSet>
-#include <QtCore/QVariant>
+#include <QSet>
+#include <QVariant>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/U2WidgetStateStorage.cpp b/src/corelibs/U2Gui/src/U2WidgetStateStorage.cpp
index 4b16efd..d7840da 100644
--- a/src/corelibs/U2Gui/src/U2WidgetStateStorage.cpp
+++ b/src/corelibs/U2Gui/src/U2WidgetStateStorage.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/U2WidgetStateStorage.h b/src/corelibs/U2Gui/src/U2WidgetStateStorage.h
index c4861d1..c2dd05f 100644
--- a/src/corelibs/U2Gui/src/U2WidgetStateStorage.h
+++ b/src/corelibs/U2Gui/src/U2WidgetStateStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,8 @@
 #ifndef _U2_WIDGET_STATE_STORAGE_H_
 #define _U2_WIDGET_STATE_STORAGE_H_
 
-#include <QtCore/QMultiMap>
+#include <QMultiMap>
+#include <QVariantMap>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp b/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
index 331253d..fdeda03 100644
--- a/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
+++ b/src/corelibs/U2Gui/src/UnloadDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/UnloadDocumentTask.h b/src/corelibs/U2Gui/src/UnloadDocumentTask.h
index 29cce12..e5d75a9 100644
--- a/src/corelibs/U2Gui/src/UnloadDocumentTask.h
+++ b/src/corelibs/U2Gui/src/UnloadDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/WelcomePageAction.cpp b/src/corelibs/U2Gui/src/WelcomePageAction.cpp
index 949ea41..31286a0 100644
--- a/src/corelibs/U2Gui/src/WelcomePageAction.cpp
+++ b/src/corelibs/U2Gui/src/WelcomePageAction.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/WelcomePageAction.h b/src/corelibs/U2Gui/src/WelcomePageAction.h
index 379133b..dbd50a7 100644
--- a/src/corelibs/U2Gui/src/WelcomePageAction.h
+++ b/src/corelibs/U2Gui/src/WelcomePageAction.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.cpp b/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.cpp
index ecde59f..7d8cbb1 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.h b/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.h
index ef1a7af..d6871d4 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.h
+++ b/src/corelibs/U2Gui/src/options_panel/GroupHeaderImageWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_GROUP_HEADER_IMAGE_WIDGET_H_
 #define _U2_GROUP_HEADER_IMAGE_WIDGET_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#else
-#include <QtWidgets/QLabel>
-#endif
+#include <QLabel>
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
index 642c81b..ad150e0 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -64,7 +64,7 @@ GroupOptionsWidget::GroupOptionsWidget(const QString& _groupId, const QString& _
     mainLayout->addWidget(titleWidget);
     mainLayout->addWidget(widget);
 
-    QPushButton *helpButton = new QPushButton("Help", this);
+    QPushButton *helpButton = new QPushButton(tr("Help"), this);
     helpButton->setMaximumWidth(60);
     new HelpButton(this, helpButton, documentationPage);
     QSpacerItem *spacer = new QSpacerItem(MIN_WIDGET_WIDTH, 0, QSizePolicy::Maximum, QSizePolicy::Expanding);
diff --git a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
index ca26634..16bd712 100644
--- a/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
+++ b/src/corelibs/U2Gui/src/options_panel/GroupOptionsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,6 +36,7 @@ namespace U2 {
  */
 class U2GUI_EXPORT GroupOptionsWidget : public QWidget
 {
+    Q_OBJECT
 public:
     GroupOptionsWidget(const QString& groupId, const QString& title, const QString& documentationPage, QWidget* widget);
 
diff --git a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.cpp b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.cpp
index f2b32dc..f41be45 100644
--- a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.h b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.h
index cff7edb..dbeed9e 100644
--- a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.h
+++ b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,17 @@
 
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtGui/QPixmap>
+#include <QPixmap>
 
 namespace U2 {
 
-enum ObjectViewType {ObjViewType_SequenceView, ObjViewType_AlignmentEditor, ObjViewType_AssemblyBrowser, ObjViewType_PhylogeneticTree};
+enum ObjectViewType {
+    ObjViewType_SequenceView,
+    ObjViewType_AlignmentEditor,
+    ObjViewType_AssemblyBrowser,
+    ObjViewType_PhylogeneticTree,
+    ObjViewType_ChromAlignmentEditor
+};
 
 struct U2GUI_EXPORT OPGroupParameters
 {
diff --git a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.cpp b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.cpp
index 3d50cf9..0c118ea 100644
--- a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.h b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.h
index 7afb5c6..87e76fa 100644
--- a/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.h
+++ b/src/corelibs/U2Gui/src/options_panel/OPWidgetFactoryRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanel.cpp b/src/corelibs/U2Gui/src/options_panel/OptionsPanel.cpp
index 806cccb..fce7628 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanel.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/OPWidgetFactory.h>
@@ -106,7 +107,7 @@ void OptionsPanel::openOptionsGroup(const QString& groupId) {
         widget->focusOptionsWidget(groupId);
         return;
     }
-
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, QString("Opening tab: %1").arg(groupId), objView->getFactoryId());
     OPWidgetFactory* opWidgetFactory = findFactoryByGroupId(groupId);
     SAFE_POINT(NULL != opWidgetFactory,
         QString("Internal error: can't open a group with ID '%1' on the Options Panel.").arg(groupId),);
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanel.h b/src/corelibs/U2Gui/src/options_panel/OptionsPanel.h
index 9641acb..98817f6 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanel.h
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_OPTIONS_PANEL_H_
 #define _U2_OPTIONS_PANEL_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.cpp b/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.cpp
index 1d85f85..d6a61f3 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.h b/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.h
index 634313b..c0c55d1 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.h
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanelGroup.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.cpp b/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.cpp
index 1e92c88..0e9dbeb 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.h b/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.h
index 663a9fa..4212ddd 100644
--- a/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.h
+++ b/src/corelibs/U2Gui/src/options_panel/OptionsPanelWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.cpp b/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.cpp
index be0d54e..fc042ec 100644
--- a/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.cpp
+++ b/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.h b/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.h
index 6623ae8..773434f 100644
--- a/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.h
+++ b/src/corelibs/U2Gui/src/options_panel/ShowHideSubgroupWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogController.h b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogController.h
index 36953ee..8f6c1b9 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogController.h
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
index a85a2d1..56f0b3f 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@ AddNewDocumentDialogImpl::AddNewDocumentDialogImpl(QWidget* p, AddNewDocumentDia
       model(m)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223028");
+    new HelpButton(this, buttonBox, "20874932");
     if (model.format.isEmpty()) {
         model.format = AppContext::getSettings()->getValue(SETTINGS_LASTFORMAT, QString("")).toString();
     }
diff --git a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
index 4dc4e29..56e9c4c 100644
--- a/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
+++ b/src/corelibs/U2Gui/src/util/AddNewDocumentDialogImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
index 8e45d6a..6767a85 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/AuthenticationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Gui/HelpButton.h>
 #include "AuthenticationDialog.h"
@@ -39,7 +34,7 @@ AuthenticationDialog::AuthenticationDialog(const QString &text, QWidget* parent)
     authenticationWidget(new AuthenticationWidget)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223298");
+    new HelpButton(this, ui->buttonBox, "20875202");
     ui->mainLayout->insertWidget(1, authenticationWidget);
 
     if (text.isEmpty()) {
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationDialog.h b/src/corelibs/U2Gui/src/util/AuthenticationDialog.h
index 6b2da5c..eadee33 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationDialog.h
+++ b/src/corelibs/U2Gui/src/util/AuthenticationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define _U2_AUTHENTIFICATION_DIALOG_H_
 
 #include <U2Core/global.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 class Ui_AuthenticationDialog;
 
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationWidget.cpp b/src/corelibs/U2Gui/src/util/AuthenticationWidget.cpp
index 8315a86..8e2a8d3 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/AuthenticationWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/AuthenticationWidget.h b/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
index da27717..2529f07 100644
--- a/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
+++ b/src/corelibs/U2Gui/src/util/AuthenticationWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_AUTHENTICATION_WIDGET_H_
 #define _U2_AUTHENTICATION_WIDGET_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include <U2Core/global.h>
 #include "ui_AuthenticationWidget.h"
diff --git a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
index 1790f99..e18b8e9 100644
--- a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ BreakpointConditionEditDialog::BreakpointConditionEditDialog(QWidget *parent,
 {
     ui = new Ui_BreakpointConditionEditDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223551");
+    new HelpButton(this, ui->buttonBox, "20875481");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.h b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.h
index 4bb995f..daeb4fb 100644
--- a/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.h
+++ b/src/corelibs/U2Gui/src/util/BreakpointConditionEditDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_BREAKPOINT_CONDITION_EDIT_DIALOG_H_
 #define _U2_BREAKPOINT_CONDITION_EDIT_DIALOG_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
index db0b17d..205bd43 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,7 +46,7 @@ CreateAnnotationDialog::CreateAnnotationDialog(QWidget* p, CreateAnnotationModel
     ui->setupUi(this);
     annWidgetController = new CreateAnnotationWidgetController(m, this, CreateAnnotationWidgetController::Full);
 
-    helpButton = new HelpButton(this, ui->buttonBox, "18222994");
+    helpButton = new HelpButton(this, ui->buttonBox, "20874898");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
 
     ui->mainLayout->insertWidget(0, annWidgetController->getWidget());
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
index 33b9e28..c010ae1 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
index 6b2c0c8..3e71410 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,7 +57,7 @@ void CreateAnnotationFullWidget::setLocationVisible(bool visible) {
     gbLocation->setVisible(visible);
 
     if (visible) {
-        mainLayout->addWidget(saveAnnotationsInnerWidget);
+        mainLayout->addWidget(gbSaveAnnotationsInnerWidget);
 
         saveAnnotationsLayout->removeWidget(rbExistingTable);
         saveAnnotationsLayout->removeWidget(cbExistingTable);
@@ -79,7 +79,7 @@ void CreateAnnotationFullWidget::setLocationVisible(bool visible) {
 
         saveAnnotationsLayout->addWidget(rbUseAutoTable, 2, 0);
     } else {
-        parametersLayout->addWidget(saveAnnotationsInnerWidget);
+        parametersLayout->addWidget(gbSaveAnnotationsInnerWidget);
 
         saveAnnotationsLayout->removeWidget(rbExistingTable);
         saveAnnotationsLayout->removeWidget(cbExistingTable);
@@ -100,6 +100,7 @@ void CreateAnnotationFullWidget::setLocationVisible(bool visible) {
         saveAnnotationsLayout->addWidget(tbBrowseNewTable, 3, 1);
 
         saveAnnotationsLayout->addWidget(rbUseAutoTable, 4, 0, 1, 2);
+        parametersLayout->addStretch();
     }
 }
 
@@ -118,7 +119,7 @@ void CreateAnnotationFullWidget::setAnnotationNameVisible(bool visible) {
 }
 
 void CreateAnnotationFullWidget::setAutoTableOptionVisible(bool visible) {
-    rbUseAutoTable->setEnabled(visible);
+    rbUseAutoTable->setVisible(visible);
 }
 
 void CreateAnnotationFullWidget::setDescriptionVisible(bool visible) {
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
index 706bc04..baedb31 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui
index 580c67c..db31e44 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationFullWidget.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>614</width>
-    <height>473</height>
+    <height>496</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -130,7 +130,7 @@
               <string>...</string>
              </property>
              <property name="icon">
-              <iconset resource="../../../U2Gui.qrc">
+              <iconset resource="../../U2Gui.qrc">
                <normaloff>:/core/images/group_auto.png</normaloff>:/core/images/group_auto.png</iconset>
              </property>
             </widget>
@@ -309,7 +309,7 @@
                     <string>...</string>
                    </property>
                    <property name="icon">
-                    <iconset resource="../../../U2Gui.qrc">
+                    <iconset resource="../../U2Gui.qrc">
                      <normaloff>:/core/images/do_complement.png</normaloff>:/core/images/do_complement.png</iconset>
                    </property>
                   </widget>
@@ -342,89 +342,98 @@
     </layout>
    </item>
    <item>
-    <widget class="QWidget" name="saveAnnotationsInnerWidget" native="true">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
+    <widget class="QGroupBox" name="gbSaveAnnotationsInnerWidget">
+     <property name="title">
+      <string>Save annotation(s) to</string>
      </property>
-     <property name="toolTip">
-      <string>Choose a file to store the annotations</string>
-     </property>
-     <layout class="QGridLayout" name="saveAnnotationsLayout">
-      <property name="sizeConstraint">
-       <enum>QLayout::SetMinAndMaxSize</enum>
-      </property>
-      <property name="leftMargin">
-       <number>0</number>
-      </property>
-      <property name="topMargin">
-       <number>0</number>
-      </property>
-      <property name="rightMargin">
-       <number>0</number>
-      </property>
-      <property name="bottomMargin">
-       <number>15</number>
-      </property>
-      <item row="3" column="0">
-       <widget class="QRadioButton" name="rbUseAutoTable">
-        <property name="text">
-         <string>Use auto-annotations table</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="1">
-       <widget class="QComboBox" name="cbExistingTable">
-        <property name="sizeAdjustPolicy">
-         <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+     <layout class="QVBoxLayout" name="verticalLayout_6">
+      <item>
+       <widget class="QWidget" name="saveAnnotationsInnerWidget" native="true">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
         </property>
-       </widget>
-      </item>
-      <item row="1" column="2">
-       <widget class="QToolButton" name="tbBrowseExistingTable">
-        <property name="text">
-         <string>...</string>
-        </property>
-        <property name="icon">
-         <iconset resource="../../../U2Gui.qrc">
-          <normaloff>:/core/images/load_selected_documents.png</normaloff>:/core/images/load_selected_documents.png</iconset>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="1">
-       <widget class="QLineEdit" name="leNewTablePath">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QRadioButton" name="rbExistingTable">
-        <property name="text">
-         <string>Existing table</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0">
-       <widget class="QRadioButton" name="rbCreateNewTable">
-        <property name="text">
-         <string>Create new table</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2">
-       <widget class="QToolButton" name="tbBrowseNewTable">
-        <property name="enabled">
-         <bool>false</bool>
-        </property>
-        <property name="text">
-         <string>...</string>
+        <property name="toolTip">
+         <string>Choose a file to store the annotations</string>
         </property>
+        <layout class="QGridLayout" name="saveAnnotationsLayout">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
+         <property name="leftMargin">
+          <number>0</number>
+         </property>
+         <property name="topMargin">
+          <number>0</number>
+         </property>
+         <property name="rightMargin">
+          <number>0</number>
+         </property>
+         <property name="bottomMargin">
+          <number>5</number>
+         </property>
+         <item row="1" column="0">
+          <widget class="QRadioButton" name="rbExistingTable">
+           <property name="text">
+            <string>Existing document</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="2">
+          <widget class="QToolButton" name="tbBrowseNewTable">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="text">
+            <string>...</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QLineEdit" name="leNewTablePath">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QRadioButton" name="rbCreateNewTable">
+           <property name="text">
+            <string>New document</string>
+           </property>
+          </widget>
+         </item>
+         <item row="3" column="0">
+          <widget class="QRadioButton" name="rbUseAutoTable">
+           <property name="text">
+            <string>Use auto-annotations table</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="2">
+          <widget class="QToolButton" name="tbBrowseExistingTable">
+           <property name="text">
+            <string>...</string>
+           </property>
+           <property name="icon">
+            <iconset resource="../../U2Gui.qrc">
+             <normaloff>:/core/images/load_selected_documents.png</normaloff>:/core/images/load_selected_documents.png</iconset>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QComboBox" name="cbExistingTable">
+           <property name="sizeAdjustPolicy">
+            <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+           </property>
+          </widget>
+         </item>
+        </layout>
        </widget>
       </item>
      </layout>
@@ -432,8 +441,30 @@
    </item>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>lwAnnotationType</tabstop>
+  <tabstop>leGroupName</tabstop>
+  <tabstop>tbSelectGroupName</tabstop>
+  <tabstop>leAnnotationName</tabstop>
+  <tabstop>leDescription</tabstop>
+  <tabstop>chbUsePatternNames</tabstop>
+  <tabstop>rbSimpleFormat</tabstop>
+  <tabstop>leRegionStart</tabstop>
+  <tabstop>leRegionEnd</tabstop>
+  <tabstop>chbComplement</tabstop>
+  <tabstop>rbGenbankFormat</tabstop>
+  <tabstop>leLocation</tabstop>
+  <tabstop>tbDoComplement</tabstop>
+  <tabstop>rbExistingTable</tabstop>
+  <tabstop>cbExistingTable</tabstop>
+  <tabstop>tbBrowseExistingTable</tabstop>
+  <tabstop>rbCreateNewTable</tabstop>
+  <tabstop>leNewTablePath</tabstop>
+  <tabstop>tbBrowseNewTable</tabstop>
+  <tabstop>rbUseAutoTable</tabstop>
+ </tabstops>
  <resources>
-  <include location="../../../U2Gui.qrc"/>
+  <include location="../../U2Gui.qrc"/>
  </resources>
  <connections>
   <connection>
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
index 2ab39f2..3349a28 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -71,7 +71,7 @@ void CreateAnnotationNormalWidget::setAnnotationNameVisible(bool visible) {
 }
 
 void CreateAnnotationNormalWidget::setAutoTableOptionVisible(bool visible) {
-    rbUseAutoTable->setEnabled(visible);
+    rbUseAutoTable->setVisible(visible);
 }
 
 void CreateAnnotationNormalWidget::setDescriptionVisible(bool visible) {
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
index 65ae246..e6a7180 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui
index bd48b9f..587b106 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationNormalWidget.ui
@@ -23,7 +23,16 @@
    <property name="sizeConstraint">
     <enum>QLayout::SetMinAndMaxSize</enum>
    </property>
-   <property name="margin">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
     <number>0</number>
    </property>
    <item>
@@ -41,13 +50,22 @@
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item row="0" column="0">
        <widget class="QRadioButton" name="rbExistingTable">
         <property name="text">
-         <string>Existing table</string>
+         <string>Existing document</string>
         </property>
         <property name="checked">
          <bool>true</bool>
@@ -67,7 +85,7 @@
          <string>...</string>
         </property>
         <property name="icon">
-         <iconset resource="../../../U2Gui.qrc">
+         <iconset resource="../../U2Gui.qrc">
           <normaloff>:/core/images/load_selected_documents.png</normaloff>:/core/images/load_selected_documents.png</iconset>
         </property>
        </widget>
@@ -75,7 +93,7 @@
       <item row="1" column="0">
        <widget class="QRadioButton" name="rbCreateNewTable">
         <property name="text">
-         <string>Create new table</string>
+         <string>New document</string>
         </property>
        </widget>
       </item>
@@ -118,7 +136,16 @@
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item row="2" column="1" colspan="2">
@@ -147,7 +174,7 @@
          <string>...</string>
         </property>
         <property name="icon">
-         <iconset resource="../../../U2Gui.qrc">
+         <iconset resource="../../U2Gui.qrc">
           <normaloff>:/core/images/do_complement.png</normaloff>:/core/images/do_complement.png</iconset>
         </property>
        </widget>
@@ -188,7 +215,7 @@
          <string>...</string>
         </property>
         <property name="icon">
-         <iconset resource="../../../U2Gui.qrc">
+         <iconset resource="../../U2Gui.qrc">
           <normaloff>:/core/images/group_auto.png</normaloff>:/core/images/group_auto.png</iconset>
         </property>
        </widget>
@@ -229,8 +256,25 @@
    </item>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>rbExistingTable</tabstop>
+  <tabstop>cbExistingTable</tabstop>
+  <tabstop>tbBrowseExistingTable</tabstop>
+  <tabstop>rbCreateNewTable</tabstop>
+  <tabstop>leNewTablePath</tabstop>
+  <tabstop>tbBrowseNewTable</tabstop>
+  <tabstop>rbUseAutoTable</tabstop>
+  <tabstop>leGroupName</tabstop>
+  <tabstop>tbSelectGroupName</tabstop>
+  <tabstop>cbAnnotationType</tabstop>
+  <tabstop>leAnnotationName</tabstop>
+  <tabstop>leLocation</tabstop>
+  <tabstop>tbDoComplement</tabstop>
+  <tabstop>leDescription</tabstop>
+  <tabstop>chbUsePatternNames</tabstop>
+ </tabstops>
  <resources>
-  <include location="../../../U2Gui.qrc"/>
+  <include location="../../U2Gui.qrc"/>
  </resources>
  <connections>
   <connection>
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
index 8165903..81b67fb 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
index 892b50e..8ced513 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui
index 32e48c7..1e34ffa 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationOptionsPanelWidget.ui
@@ -17,7 +17,16 @@
    <property name="spacing">
     <number>0</number>
    </property>
-   <property name="margin">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
     <number>0</number>
    </property>
    <item>
@@ -35,13 +44,22 @@
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item>
        <widget class="QRadioButton" name="rbExistingTable">
         <property name="text">
-         <string>Existing table:</string>
+         <string>Existing document:</string>
         </property>
         <property name="checked">
          <bool>true</bool>
@@ -63,7 +81,7 @@
            <string>...</string>
           </property>
           <property name="icon">
-           <iconset resource="../../../U2Gui.qrc">
+           <iconset resource="../../U2Gui.qrc">
             <normaloff>:/core/images/load_selected_documents.png</normaloff>:/core/images/load_selected_documents.png</iconset>
           </property>
          </widget>
@@ -73,7 +91,7 @@
       <item>
        <widget class="QRadioButton" name="rbCreateNewTable">
         <property name="text">
-         <string>Create new table:</string>
+         <string>New document:</string>
         </property>
        </widget>
       </item>
@@ -120,7 +138,16 @@
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
-      <property name="margin">
+      <property name="leftMargin">
+       <number>0</number>
+      </property>
+      <property name="topMargin">
+       <number>0</number>
+      </property>
+      <property name="rightMargin">
+       <number>0</number>
+      </property>
+      <property name="bottomMargin">
        <number>0</number>
       </property>
       <item>
@@ -148,7 +175,7 @@
            <string>...</string>
           </property>
           <property name="icon">
-           <iconset resource="../../../U2Gui.qrc">
+           <iconset resource="../../U2Gui.qrc">
             <normaloff>:/core/images/group_auto.png</normaloff>:/core/images/group_auto.png</iconset>
           </property>
          </widget>
@@ -215,7 +242,7 @@
            <string>...</string>
           </property>
           <property name="icon">
-           <iconset resource="../../../U2Gui.qrc">
+           <iconset resource="../../U2Gui.qrc">
             <normaloff>:/core/images/do_complement.png</normaloff>:/core/images/do_complement.png</iconset>
           </property>
          </widget>
@@ -247,8 +274,25 @@
    </item>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>rbExistingTable</tabstop>
+  <tabstop>cbExistingTable</tabstop>
+  <tabstop>tbBrowseExistingTable</tabstop>
+  <tabstop>rbCreateNewTable</tabstop>
+  <tabstop>leNewTablePath</tabstop>
+  <tabstop>tbBrowseNewTable</tabstop>
+  <tabstop>rbUseAutoTable</tabstop>
+  <tabstop>leGroupName</tabstop>
+  <tabstop>tbSelectGroupName</tabstop>
+  <tabstop>cbAnnotationType</tabstop>
+  <tabstop>leAnnotationName</tabstop>
+  <tabstop>leLocation</tabstop>
+  <tabstop>tbDoComplement</tabstop>
+  <tabstop>leDescription</tabstop>
+  <tabstop>chbUsePatternNames</tabstop>
+ </tabstops>
  <resources>
-  <include location="../../../U2Gui.qrc"/>
+  <include location="../../U2Gui.qrc"/>
  </resources>
  <connections>
   <connection>
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
index 856b5d1..cd2cd68 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
index fcf7dc5..b58f127 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
index b3dc9b4..8c7a09a 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -117,7 +117,6 @@ CreateAnnotationWidgetController::CreateAnnotationWidgetController(const CreateA
     occc.typeFilter = GObjectTypes::ANNOTATION_TABLE;
     occc.onlyWritable = true;
     occc.uof = model.useUnloadedObjects ? UOF_LoadedAndUnloaded : UOF_LoadedOnly;
-
     occ = w->createGObjectComboBoxController(occc);
 
     commonWidgetUpdate(model);
@@ -170,15 +169,17 @@ void CreateAnnotationWidgetController::commonWidgetUpdate(const CreateAnnotation
     if (!model.data->location->isEmpty()) {
         w->setLocation(model.data->location);
     }
-
-    if (model.defaultIsNewDoc || w->isExistingTablesListEmpty()) {
+    
+    if (w->isExistingTablesListEmpty()) {
         w->setExistingTableOptionEnable(false);
         w->selectNewTableOption();
-    }
-    else {
+    } else {
         w->setExistingTableOptionEnable(true);
+        if (model.defaultIsNewDoc) {
+            w->selectNewTableOption();
+        }
     }
-
+    
     w->setAnnotationTableOptionVisible(!model.hideAnnotationTableOption);
     w->setAutoTableOptionVisible(!model.hideAutoAnnotationsOption);
     if (!model.hideAutoAnnotationsOption) {
@@ -257,16 +258,14 @@ QString CreateAnnotationWidgetController::validate() {
         return tr("Illegal group name");
     }
 
-    static const QString INVALID_LOCATION = tr("Invalid location! Location must be in GenBank format.\nSimple examples:\n1..10\njoin(1..10,15..45)\ncomplement(5..15)");
-
     if (!model.hideLocation && model.data->location->isEmpty()) {
         w->focusLocation();
-        return INVALID_LOCATION;
+        return tr("Invalid location! Location must be in GenBank format.\nSimple examples:\n1..10\njoin(1..10,15..45)\ncomplement(5..15)");
     }
     if (!model.hideLocation){
         foreach (const U2Region &reg, model.data->getRegions()) {
             if (reg.endPos() > model.sequenceLen || reg.startPos < 0 || reg.endPos() < reg.startPos) {
-                return INVALID_LOCATION;
+                return tr("Invalid location! Location must be in GenBank format.\nSimple examples:\n1..10\njoin(1..10,15..45)\ncomplement(5..15)");
             }
         }
     }
@@ -362,9 +361,25 @@ void CreateAnnotationWidgetController::initSaveController() {
     saveController = new SaveDocumentController(conf, formats, this);
 }
 
+bool CreateAnnotationWidgetController::isAnnotationsTableVirtual(){
+    return qHash(occ->getSelectedObjectReference()) == qHash(model.sequenceObjectRef);
+}
+
 bool CreateAnnotationWidgetController::prepareAnnotationObject() {
     updateModel(false);
     QString v = validate();
+    if((w->isExistingTableOptionSelected()) && isAnnotationsTableVirtual()){
+        Document* d = AppContext::getProject()->findDocumentByURL(model.sequenceObjectRef.docUrl);
+        SAFE_POINT(d != NULL, "cannot create a annotation table in same document", false);
+        U2OpStatusImpl os;
+        const U2DbiRef localDbiRef = AppContext::getDbiRegistry()->getSessionTmpDbiRef(os);
+        SAFE_POINT_OP(os, false);
+        AnnotationTableObject* ann = new AnnotationTableObject(model.sequenceObjectRef.objName + FEATURES_TAG,localDbiRef);
+        ann->addObjectRelation(GObjectRelation(model.sequenceObjectRef, ObjectRole_Sequence));
+        d->addObject(ann);
+        occ->setSelectedObject(ann);
+        model.annotationObjectRef = ann;
+    }
     SAFE_POINT(v.isEmpty(), "Annotation model is not valid", false);
     if (!model.annotationObjectRef.isValid() && w->isNewTableOptionSelected()) {
         SAFE_POINT(!model.newDocUrl.isEmpty(), "newDocUrl is empty", false);
@@ -390,7 +405,7 @@ void CreateAnnotationWidgetController::sl_groupName() {
     GObject* obj = occ->getSelectedObject();
     QStringList groupNames;
     groupNames << GROUP_NAME_AUTO;
-    if (NULL != obj && !obj->isUnloaded()) {
+    if (NULL != obj && !obj->isUnloaded() && !isAnnotationsTableVirtual()) {
         AnnotationTableObject* ao = qobject_cast<AnnotationTableObject *>(obj);
         ao->getRootGroup()->getSubgroupPaths(groupNames);
     }
diff --git a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
index e83ff4e..a33a477 100644
--- a/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
+++ b/src/corelibs/U2Gui/src/util/CreateAnnotationWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -143,6 +143,7 @@ private:
     void createWidget(AnnotationWidgetMode layoutMode);
     static QString defaultDir();
     void initSaveController();
+    bool isAnnotationsTableVirtual();
 
     CreateAnnotationModel       model;
     GObjectComboBoxController * occ;
diff --git a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
index 01c497b..00263bd 100644
--- a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,7 +49,7 @@ CreateDocumentFromTextDialogController::CreateDocumentFromTextDialogController(Q
       saveController(NULL) {
     ui = new Ui_CreateDocumentFromTextDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222929");
+    new HelpButton(this, ui->buttonBox, "20874834");
 
     initSaveController();
 
diff --git a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
index b5447c0..bb07c5f 100644
--- a/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
+++ b/src/corelibs/U2Gui/src/util/CreateDocumentFromTextDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
index bfd96f8..4198957 100644
--- a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,12 +28,8 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectTypes.h>
 
-#include <QtGui/QIcon>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QIcon>
+#include <QMessageBox>
 
 #include <U2Gui/HelpButton.h>
 #include <QPushButton>
diff --git a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.h b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.h
index 55a8a15..9ccfcf5 100644
--- a/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.h
+++ b/src/corelibs/U2Gui/src/util/CreateObjectRelationDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/GObjectRelationRoles.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 class Ui_CreateObjectRelationDialog;
 
diff --git a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.cpp b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.cpp
index e83ab99..2d54ebb 100644
--- a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.cpp
+++ b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
index 907f1f7..9b745da 100644
--- a/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
+++ b/src/corelibs/U2Gui/src/util/CreateSequenceFromTextAndOpenViewTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@ class DocumentFormat;
 class ImportSequenceFromRawDataTask;
 
 class CreateSequenceFromTextAndOpenViewTask : public Task {
+    Q_OBJECT
 public:
     CreateSequenceFromTextAndOpenViewTask(const QList<DNASequence> &sequences, const QString &formatId, const GUrl &saveToPath, bool saveImmediately);
 
diff --git a/src/corelibs/U2Gui/src/util/CredentialsAskerGui.cpp b/src/corelibs/U2Gui/src/util/CredentialsAskerGui.cpp
index 2bb06a3..117825b 100644
--- a/src/corelibs/U2Gui/src/util/CredentialsAskerGui.cpp
+++ b/src/corelibs/U2Gui/src/util/CredentialsAskerGui.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/CredentialsAskerGui.h b/src/corelibs/U2Gui/src/util/CredentialsAskerGui.h
index f695169..756ce8b 100644
--- a/src/corelibs/U2Gui/src/util/CredentialsAskerGui.h
+++ b/src/corelibs/U2Gui/src/util/CredentialsAskerGui.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/DialogUtils.cpp b/src/corelibs/U2Gui/src/util/DialogUtils.cpp
index c2214c3..618baf4 100644
--- a/src/corelibs/U2Gui/src/util/DialogUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/DialogUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -80,11 +80,9 @@ void FileLineEdit::sl_onBrowse() {
     LastUsedDirHelper lod(type);
 
     QFileDialog::Options options = 0;
-#if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
     if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         options |= QFileDialog::DontUseNativeDialog;
     }
-#endif
 
     QString name;
     if (multi) {
diff --git a/src/corelibs/U2Gui/src/util/DialogUtils.h b/src/corelibs/U2Gui/src/util/DialogUtils.h
index 180aa87..b8221b9 100644
--- a/src/corelibs/U2Gui/src/util/DialogUtils.h
+++ b/src/corelibs/U2Gui/src/util/DialogUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.cpp b/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.cpp
index fa62dca..fc5dbec 100644
--- a/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.cpp
+++ b/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.h b/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.h
index c168dc8..e10ee89 100644
--- a/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.h
+++ b/src/corelibs/U2Gui/src/util/DocumentFormatComboboxController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <U2Core/DocumentModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QComboBox>
-#endif
+#include <QComboBox>
 
 namespace U2 {
     
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
index 3e5d181..38a9b3d 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QNetworkRequest>
-#include <QtNetwork/QNetworkReply>
+#include <QNetworkAccessManager>
+#include <QNetworkRequest>
+#include <QNetworkReply>
 
-#include <QtXml/QXmlInputSource>
+#include <QXmlInputSource>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/GUrlUtils.h>
@@ -60,7 +56,7 @@ QString DownloadRemoteFileDialog::defaultDB("");
 DownloadRemoteFileDialog::DownloadRemoteFileDialog(QWidget *p):QDialog(p), isQueryDB(false) {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222943");
+    new HelpButton(this, ui->buttonBox, "20874848");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -97,7 +93,7 @@ DownloadRemoteFileDialog::DownloadRemoteFileDialog( const QString& id, const QSt
 {
     ui = new Ui_DownloadRemoteFileDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222956");
+    new HelpButton(this, ui->buttonBox, "20874860");
 
     ui->formatBox->addItem(GENBANK_FORMAT);
     ui->formatBox->addItem(FASTA_FORMAT);
@@ -124,7 +120,7 @@ const QString DOWNLOAD_REMOTE_FILE_DOMAIN = "DownloadRemoteFileDialog";
 
 void DownloadRemoteFileDialog::sl_saveFilenameButtonClicked() {
     LastUsedDirHelper lod(DOWNLOAD_REMOTE_FILE_DOMAIN);
-    QString filename = U2FileDialog::getExistingDirectory(this, tr("Select directory to save"), lod.dir);
+    QString filename = U2FileDialog::getExistingDirectory(this, tr("Select folder to save"), lod.dir);
     if(!filename.isEmpty()) {
         ui->saveFilenameLineEdit->setText(filename);
         lod.url = filename;
@@ -171,7 +167,7 @@ void DownloadRemoteFileDialog::accept()
     }
     QString fullPath = getFullpath();
     if( ui->saveFilenameLineEdit->text().isEmpty() ) {
-        QMessageBox::critical(this, L10N::errorTitle(), tr("No directory selected for saving file!"));
+        QMessageBox::critical(this, L10N::errorTitle(), tr("No folder selected for saving file!"));
         ui->saveFilenameLineEdit->setFocus();
         return;
     }
@@ -198,8 +194,23 @@ void DownloadRemoteFileDialog::accept()
     hints.insert(FORCE_DOWNLOAD_SEQUENCE_HINT, ui->chbForceDownloadSequence->isVisible() && ui->chbForceDownloadSequence->isChecked());
 
     int taskCount = 0;
+    bool addToProject = ui->chbAddToProjectCheck->isChecked();
+    if (addToProject && resIds.size() >= 100) {
+        QString message =  tr("There are more than 100 files found for download.\nAre you sure you want to open all of them?");
+        int button = QMessageBox::question(QApplication::activeWindow(), tr("Warning"), message, 
+                                           tr("Cancel"), tr("Open anyway"), tr("Don't open"));
+        if (button == 0) {
+            return; // return to dialog
+        } else if (button == 2) {
+            addToProject = false;
+        }
+    }
     foreach (const QString &resId, resIds) {
-        tasks.append(new LoadRemoteDocumentAndAddToProjectTask(resId, dbId, fullPath, fileFormat, hints, taskCount < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS));
+        LoadRemoteDocumentMode mode = LoadRemoteDocumentMode_LoadOnly;
+        if (addToProject) {
+            mode = taskCount < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS ? LoadRemoteDocumentMode_OpenView : LoadRemoteDocumentMode_AddToProject;
+        }
+        tasks.append(new LoadRemoteDocumentAndAddToProjectTask(resId, dbId, fullPath, fileFormat, hints, mode));
         taskCount++;
     }
 
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
index cf269c3..13cb627 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,9 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QDialog>
+#include <QList>
+#include <QString>
 #include <QNetworkReply>
 #include <QXmlSimpleReader>
 
diff --git a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui
index 945fa05..39464ab 100644
--- a/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui
+++ b/src/corelibs/U2Gui/src/util/DownloadRemoteFileDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>480</width>
-    <height>233</height>
+    <height>252</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -130,6 +130,16 @@
     </layout>
    </item>
    <item>
+    <widget class="QCheckBox" name="chbAddToProjectCheck">
+     <property name="text">
+      <string>Add to project</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QCheckBox" name="chbForceDownloadSequence">
      <property name="toolTip">
       <string>Some entries in the NCBI databases contain features without a sequence. You can download both sequence and features by checking this parameter. Note that some sequences are rather big.</string>
diff --git a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
index 7957d0e..df2445a 100644
--- a/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/EditQualifierDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,8 @@
 
 #include <U2Core/Annotation.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <QtGui/QKeyEvent>
+#include <QMessageBox>
+#include <QKeyEvent>
 #include <U2Gui/HelpButton.h>
 #include <QPushButton>
 
@@ -41,7 +36,7 @@ EditQualifierDialog::EditQualifierDialog(QWidget* p, const U2Qualifier& q, bool
 {
     ui = new Ui_EditQualifierDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223001");
+    new HelpButton(this, ui->buttonBox, "20874905");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     
diff --git a/src/corelibs/U2Gui/src/util/EditQualifierDialog.h b/src/corelibs/U2Gui/src/util/EditQualifierDialog.h
index 1a7f224..5a62b6f 100644
--- a/src/corelibs/U2Gui/src/util/EditQualifierDialog.h
+++ b/src/corelibs/U2Gui/src/util/EditQualifierDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/U2Qualifier.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 class Ui_EditQualifierDialog;
 
diff --git a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
index 153e95a..1b87598 100644
--- a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,7 +69,7 @@ EditSequenceDialogController::EditSequenceDialogController(const EditSequencDial
 {
     ui = new Ui_EditSequenceDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222984");
+    new HelpButton(this, ui->buttonBox, "20874888");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -138,7 +138,7 @@ void EditSequenceDialogController::accept(){
         QFileInfo fi(url);
         QDir dirToSave(fi.dir());
         if (!dirToSave.exists()){
-            QMessageBox::critical(this, this->windowTitle(), tr("Directory to save is not exists"));
+            QMessageBox::critical(this, this->windowTitle(), tr("Folder to save is not exists"));
             return;
         }
         if(url.isEmpty()){
diff --git a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
index 32e5872..f58524b 100644
--- a/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/EditSequenceDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.cpp b/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.cpp
index 1449f35..18cee36 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
 * MA 02110-1301, USA.
 */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.h b/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.h
index b526f8a..d95adc4 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.h
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotations2CSVTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
index 44a2aa0..f0f8427 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,14 +43,15 @@ ExportAnnotationsDialog::ExportAnnotationsDialog( const QString &filename, QWidg
     : QDialog( parent ), ui( new Ui_ExportAnnotationsDialog( ) )
 {
     ui->setupUi( this );
-    new HelpButton(this, ui->buttonBox, "18223006");
+    lastAddToProjectState = ui->addToProjectCheck->isChecked();
+    new HelpButton(this, ui->buttonBox, "20874910");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     initSaveController(filename);
     sl_formatChanged(saveController->getFormatIdToSave());
-
     window()->resize(window()->width(), 0);
+    
 }
 
 ExportAnnotationsDialog::~ExportAnnotationsDialog( ) {
@@ -72,36 +73,43 @@ void ExportAnnotationsDialog::initSaveController(const QString &filename) {
     formatConstraints.supportedObjectTypes.insert(GObjectTypes::ANNOTATION_TABLE);
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
     formatConstraints.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
+    formatConstraints.addFlagToExclude(DocumentFormatFlag_Hidden);
     formatConstraints.formatsToExclude << BaseDocumentFormats::VECTOR_NTI_SEQUENCE;
 
     saveController = new SaveDocumentController(config, formatConstraints, this);
     saveController->addFormat(CSV_FORMAT_ID, QString(CSV_FORMAT_ID).toUpper(), QStringList() << CSV_FORMAT_ID);
 
     connect(saveController, SIGNAL(si_formatChanged(const QString &)), SLOT(sl_formatChanged(const QString &)));
+    connect(ui->addToProjectCheck, SIGNAL(clicked(bool)), SLOT(sl_addToProjectStateChanged(bool)));
+    
 }
 
-QString ExportAnnotationsDialog::filePath( ) const {
+QString ExportAnnotationsDialog::filePath() const {
     return saveController->getSaveFileName();
 }
 
-bool ExportAnnotationsDialog::exportSequence( ) const {
-    return ui->exportSequenceCheck->isChecked( );
+bool ExportAnnotationsDialog::exportSequence() const {
+    return ui->exportSequenceCheck->isChecked();
 }
 
-bool ExportAnnotationsDialog::exportSequenceNames( ) const {
-    return ui->exportSequenceNameCheck->isChecked( );
+bool ExportAnnotationsDialog::exportSequenceNames() const {
+    return ui->exportSequenceNameCheck->isChecked();
 }
 
-void ExportAnnotationsDialog::setExportSequenceVisible( bool value ) {
-    ui->exportSequenceCheck->setVisible( value );
-    ui->exportSequenceNameCheck->setVisible( value );
-    window()->resize(window()->width(), 0);
+bool ExportAnnotationsDialog::addToProject() const {
+    return ui->addToProjectCheck->isChecked();
 }
 
 void ExportAnnotationsDialog::sl_formatChanged(const QString &newFormatId) {
     const bool isCsvFormat = (CSV_FORMAT_ID == newFormatId);
     ui->exportSequenceCheck->setEnabled(isCsvFormat);
     ui->exportSequenceNameCheck->setEnabled(isCsvFormat);
+    ui->addToProjectCheck->setEnabled(!isCsvFormat);
+    ui->addToProjectCheck->setChecked(!isCsvFormat && lastAddToProjectState);
+}
+
+void ExportAnnotationsDialog::sl_addToProjectStateChanged(bool state){
+    lastAddToProjectState = state;
 }
 
 QString ExportAnnotationsDialog::fileFormat( ) const {
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
index d69e096..0a974f7 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,12 +45,13 @@ public:
     QString                         filePath( ) const;
     bool                            exportSequence( ) const;
     bool                            exportSequenceNames( ) const;
-    void                            setExportSequenceVisible( bool value );
+    bool                            addToProject() const;
 
     static const QString            CSV_FORMAT_ID;
 
 private slots:
     void sl_formatChanged(const QString &newFormatId);
+    void sl_addToProjectStateChanged(bool state);
 
 private:
     void                            initSaveController(const QString &filename);
@@ -58,6 +59,8 @@ private:
     QList<QString>                  supportedFormatsExts;
     SaveDocumentController *        saveController;
     Ui_ExportAnnotationsDialog *    ui;
+    bool                            lastAddToProjectState;
+    
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui
index 0544d02..4ad088e 100644
--- a/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui
+++ b/src/corelibs/U2Gui/src/util/ExportAnnotationsDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>465</width>
-    <height>155</height>
+    <height>204</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -53,6 +53,16 @@
     </layout>
    </item>
    <item>
+    <widget class="QCheckBox" name="addToProjectCheck">
+     <property name="text">
+      <string>Add to project</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
     <widget class="QCheckBox" name="exportSequenceCheck">
      <property name="text">
       <string>Save sequences under annotations</string>
diff --git a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
index 7396d1a..52dba79 100644
--- a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,7 +44,7 @@ ExportDocumentDialogController::ExportDocumentDialogController(Document* d, QWid
 {
     ui = new Ui_ExportDocumentDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222930");
+    new HelpButton(this, ui->buttonBox, "20874835");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -62,7 +62,9 @@ ExportDocumentDialogController::ExportDocumentDialogController(GObject *object,
     QList<GObject *> objectList = QList<GObject *>() << sourceObject;
     initSaveController(objectList, initUrl);
 
-    new HelpButton(this, ui->buttonBox, "18222930");
+    new HelpButton(this, ui->buttonBox, "20874835");
+    ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
+    ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 }
 
 void ExportDocumentDialogController::initSaveController(const QList<GObject *> &objects, const QString &fileUrl) {
diff --git a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
index 3f74225..0a73490 100644
--- a/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
+++ b/src/corelibs/U2Gui/src/util/ExportDocumentDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
index d95beed..30f8213 100644
--- a/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportImageDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,8 +43,9 @@ namespace U2 {
 
 ExportImageDialog::ExportImageDialog(QWidget *screenShotWidget,
                                      InvokedFrom invoSource,
+                                     const QString &file,
                                      ImageScalingPolicy scalingPolicy,
-                                     QWidget *parent, const QString &file)
+                                     QWidget *parent)
     : QDialog(parent),
       scalingPolicy(scalingPolicy),
       filename(file),
@@ -57,8 +58,9 @@ ExportImageDialog::ExportImageDialog(QWidget *screenShotWidget,
 
 ExportImageDialog::ExportImageDialog(ImageExportController *factory,
                                      InvokedFrom invoSource,
+                                     const QString &file,
                                      ImageScalingPolicy scalingPolicy,
-                                     QWidget *parent, const QString &file)
+                                     QWidget *parent)
     : QDialog(parent),
       exportController(factory),
       scalingPolicy(scalingPolicy),
@@ -148,28 +150,28 @@ void ExportImageDialog::init() {
 
     switch (source) {
     case WD:
-        new HelpButton(this, ui->buttonBox, "18223333");
+        new HelpButton(this, ui->buttonBox, "20875262");
         break;
     case CircularView:
-        new HelpButton(this, ui->buttonBox, "18223011");
+        new HelpButton(this, ui->buttonBox, "20874915");
         break;
     case MSA:
-        new HelpButton(this, ui->buttonBox, "18223084");
+        new HelpButton(this, ui->buttonBox, "20874988");
         break;
     case SequenceView:
-        new HelpButton(this, ui->buttonBox, "18222971");
+        new HelpButton(this, ui->buttonBox, "20874875");
         break;
     case AssemblyView:
-        new HelpButton(this, ui->buttonBox, "18223120");
+        new HelpButton(this, ui->buttonBox, "20875024");
         break;
     case PHYTreeView:
-        new HelpButton(this, ui->buttonBox, "18223149");
+        new HelpButton(this, ui->buttonBox, "20875053");
         break;
     case DotPlot:
-        new HelpButton(this, ui->buttonBox, "18223042");
+        new HelpButton(this, ui->buttonBox, "20874946");
         break;
     case MolView:
-        new HelpButton(this, ui->buttonBox, "18223025");
+        new HelpButton(this, ui->buttonBox, "20874929");
         break;
     default:
         FAIL("Can't find help Id",);
@@ -219,7 +221,7 @@ void ExportImageDialog::initSaveController() {
     SaveDocumentControllerConfig config;
     config.defaultDomain = IMAGE_DIR;
     config.defaultFileName = dirHelper.dir + "/" + GUrlUtils::fixFileName(origFilename);
-    config.defaultFormatId = "png";
+    config.defaultFormatId = "PNG";
     config.fileDialogButton = ui->browseFileButton;
     config.fileNameEdit = ui->fileNameEdit;
     config.formatCombo = ui->formatsBox;
@@ -230,7 +232,7 @@ void ExportImageDialog::initSaveController() {
     SaveDocumentController::SimpleFormatsInfo formatsInfo;
     QStringList formats = getFormats();
     foreach (const QString &format, formats) {
-        formatsInfo.addFormat(format, format, QStringList() << format);
+        formatsInfo.addFormat(format, QStringList() << format.toLower());
     }
 
     saveController = new SaveDocumentController(config, formatsInfo, this);
@@ -251,10 +253,22 @@ QStringList ExportImageDialog::getFormats() {
 QStringList ExportImageDialog::getRasterFormats() {
     QStringList result;
     CHECK(exportController->isRasterFormatsEnabled(), result);
-    QList<QByteArray> list = QImageWriter::supportedImageFormats();
-    list.removeAll("ico");
-    foreach (const QByteArray &format, list) {
-        result << format;
+    QList<QByteArray> qtList = QImageWriter::supportedImageFormats();
+
+    if (qtList.contains("png")) {
+        result.append("PNG");
+    }
+    if (qtList.contains("bmp")) {
+        result.append("BMP");
+    }
+    if (qtList.contains("gif")) {
+        result.append("GIF");
+    }
+    if (qtList.contains("jpg") || qtList.contains("jpeg")) {
+        result.append("JPG");
+    }
+    if (qtList.contains("tif") || qtList.contains("tiff")) {
+        result.append("TIFF");
     }
     return result;
 }
@@ -279,7 +293,8 @@ bool ExportImageDialog::isVectorGraphicFormat( const QString &formatName ) {
 }
 
 bool ExportImageDialog::isLossyFormat(const QString &formatName) {
-    return ( "jpeg" == formatName ) || ( "jpg" == formatName );
+    QString lcFormat = formatName.toLower();
+    return lcFormat == "jpeg" || lcFormat == "jpg";
 }
 
 } // namespace
diff --git a/src/corelibs/U2Gui/src/util/ExportImageDialog.h b/src/corelibs/U2Gui/src/util/ExportImageDialog.h
index b6dfc8b..8eed07c 100644
--- a/src/corelibs/U2Gui/src/util/ExportImageDialog.h
+++ b/src/corelibs/U2Gui/src/util/ExportImageDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,13 +46,15 @@ public:
 
     ExportImageDialog(QWidget* screenShotWidget,
                       InvokedFrom invoSource,
+                      const QString& file,
                       ImageScalingPolicy scalingPolicy = NoScaling,
-                      QWidget* parent = NULL, const QString& file = QString("untitled"));
+                      QWidget* parent = NULL);
 
     ExportImageDialog(ImageExportController *factory,
                       InvokedFrom invoSource,
+                      const QString& file,
                       ImageScalingPolicy scalingPolicy = NoScaling,
-                      QWidget* parent = NULL, const QString& file = QString("untitled"));
+                      QWidget* parent = NULL);
 
     ~ExportImageDialog();
 
diff --git a/src/corelibs/U2Gui/src/util/ExportObjectUtils.cpp b/src/corelibs/U2Gui/src/util/ExportObjectUtils.cpp
index c295e89..699d79b 100644
--- a/src/corelibs/U2Gui/src/util/ExportObjectUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/ExportObjectUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #include <QMessageBox>
 
 #include <U2Core/AnnotationTableObject.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
@@ -32,6 +33,8 @@
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/L10n.h>
+#include <U2Core/GObjectUtils.h>
 
 #include <U2Gui/ExportAnnotations2CSVTask.h>
 #include <U2Gui/ExportAnnotationsDialog.h>
@@ -42,8 +45,8 @@
 
 namespace U2 {
 
-void ExportObjectUtils::exportAnnotations(const QList<Annotation *> &inputAnnotations, const GUrl &dstUrl) {
-    QList<Annotation *> annotations = inputAnnotations; // copy for further modification
+void ExportObjectUtils::exportAnnotations(const AnnotationTableObject *aObj, const GUrl &dstUrl) {
+    QList<Annotation *> annotations = aObj->getAnnotations(); // copy for further modification
     if (annotations.isEmpty()) {
         QMessageBox::warning(QApplication::activeWindow(), QObject::tr("Export annotations..."),
             QObject::tr("Selected object doesn't have annotations"));
@@ -54,7 +57,6 @@ void ExportObjectUtils::exportAnnotations(const QList<Annotation *> &inputAnnota
         + "_annotations.csv", DocumentUtils::getNewDocFileNameExcludesHint());
 
     QObjectScopedPointer<ExportAnnotationsDialog> d = new ExportAnnotationsDialog(fileName, QApplication::activeWindow());
-    d->setExportSequenceVisible(false);
 
     const int dialogResult = d->exec();
     CHECK(!d.isNull(), );
@@ -70,9 +72,29 @@ void ExportObjectUtils::exportAnnotations(const QList<Annotation *> &inputAnnota
     // run task
     Task * t = NULL;
     if (ExportAnnotationsDialog::CSV_FORMAT_ID == d->fileFormat()) {
-        t = new ExportAnnotations2CSVTask(annotations, QByteArray(), QString(), NULL, false, false, d->filePath());
+        QString seqName;
+        QByteArray seqData;
+        Project* project = AppContext::getProject();
+        if (project != NULL) {
+            QList<GObjectRelation> rels = aObj->findRelatedObjectsByRole(ObjectRole_Sequence);
+            if (!rels.isEmpty()) {
+                const GObjectRelation& rel = rels.first();
+                seqName = rel.ref.objName;
+                Document* seqDoc = project->findDocumentByURL(rel.ref.docUrl);
+                if (seqDoc != NULL && seqDoc->isLoaded()) {
+                    GObject* obj = seqDoc->findGObjectByName(rel.ref.objName);
+                    if (obj != NULL && obj->getGObjectType() == GObjectTypes::SEQUENCE) {
+                        U2SequenceObject* seqObj = qobject_cast<U2SequenceObject*>(obj);
+                        U2OpStatusImpl os;
+                        seqData = seqObj->getWholeSequenceData(os);
+                        CHECK_OP_EXT(os, QMessageBox::critical(QApplication::activeWindow(), L10N::errorTitle(), os.getError()), );
+                    }
+                }
+            }
+        }
+        t = new ExportAnnotations2CSVTask(annotations, seqData, seqName, NULL, d->exportSequence(), d->exportSequenceNames(), d->filePath());
     } else {
-        t = saveAnnotationsTask(d->filePath(), d->fileFormat(), annotations);
+        t = saveAnnotationsTask(d->filePath(), d->fileFormat(), annotations, d->addToProject());
     }
     SAFE_POINT(NULL != t, "Invalid task detected!",);
 
@@ -144,9 +166,13 @@ void ExportObjectUtils::export2Document(const QObjectScopedPointer<ExportDocumen
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
 
-Task * ExportObjectUtils::saveAnnotationsTask(const QString &filepath, const DocumentFormatId &format, const QList<Annotation *> &annList) {
+Task * ExportObjectUtils::saveAnnotationsTask(const QString &filepath, const DocumentFormatId &format, const QList<Annotation *> &annList, bool addToProject) {
     SaveDocFlags fl(SaveDoc_Roll);
-    fl |= SaveDoc_DestroyAfter;
+    if (addToProject) {
+        fl |= SaveDoc_OpenAfter;
+    } else {
+        fl |= SaveDoc_DestroyAfter;
+    }
     IOAdapterFactory *iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(
         IOAdapterUtils::url2io(filepath));
     CHECK_EXT(NULL != iof,
diff --git a/src/corelibs/U2Gui/src/util/ExportObjectUtils.h b/src/corelibs/U2Gui/src/util/ExportObjectUtils.h
index 2240ac6..4da27ec 100644
--- a/src/corelibs/U2Gui/src/util/ExportObjectUtils.h
+++ b/src/corelibs/U2Gui/src/util/ExportObjectUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,13 +32,14 @@ class Annotation;
 class ExportDocumentDialogController;
 class GUrl;
 class Task;
+class AnnotationTableObject;
 
 class U2GUI_EXPORT ExportObjectUtils {
 public:
-    static void     exportAnnotations(const QList<Annotation *> &annotations, const GUrl &dstUrl);
+    static void     exportAnnotations(const AnnotationTableObject *aObj, const GUrl &dstUrl);
     static void     exportObject2Document(GObject *object, const QString &url = QString(), bool tracePath = true);
     static void     export2Document(const QObjectScopedPointer<ExportDocumentDialogController> &dialog, bool tracePath = true);
-    static Task *   saveAnnotationsTask(const QString &filepath, const DocumentFormatId & format, const QList<Annotation *> &annList);
+    static Task *   saveAnnotationsTask(const QString &filepath, const DocumentFormatId & format, const QList<Annotation *> &annList, bool addToProject);
 };
 
 } // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/GObjectComboBoxController.cpp b/src/corelibs/U2Gui/src/util/GObjectComboBoxController.cpp
index 9bf68dd..56ed2ee 100644
--- a/src/corelibs/U2Gui/src/util/GObjectComboBoxController.cpp
+++ b/src/corelibs/U2Gui/src/util/GObjectComboBoxController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,17 @@
 
 #include "GObjectComboBoxController.h"
 
+#include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/GObject.h>
 
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/UnloadedObject.h>
+#include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/U2OpStatusUtils.h>
 
 namespace U2 {
 
@@ -82,6 +86,32 @@ void GObjectComboBoxController::addDocumentObjects(Document* d) {
     if (d->isDatabaseConnection()) {
         return;
     }
+    //checks whether you need to add a new annotations table
+    QString docUrl = settings.relationFilter.ref.docUrl;
+    if(d->getURLString() == docUrl){
+        connect(d->getObjectById(settings.relationFilter.ref.entityRef.entityId), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
+        bool hasAnnotationTable = false;
+        QList<GObject*> listAnnotations = d->findGObjectByType(GObjectTypes::ANNOTATION_TABLE);
+        if(listAnnotations.size() != 0){
+            foreach (GObject* obj, listAnnotations) {
+                if(obj->hasObjectRelation(settings.relationFilter)){
+                    hasAnnotationTable = true;
+                    break;
+                }
+            }
+        }
+        if ((!hasAnnotationTable) && (!d->isStateLocked())
+                && (d->getDocumentFormat()->checkFlags(DocumentFormatFlag_SupportWriting))
+                && (d->getDocumentFormat()->getSupportedObjectTypes().contains(GObjectTypes::ANNOTATION_TABLE))){
+            QString virtualItemText = d->getName()+" [";
+            GObject* seqObj = d->getObjectById(settings.relationFilter.ref.entityRef.entityId);
+            virtualItemText.append(seqObj->getGObjectName() + FEATURES_TAG + "] *");
+            combo->addItem(objectIcon, virtualItemText, QVariant::fromValue<GObjectReference>(GObjectReference(seqObj)));
+
+            emit si_comboBoxChanged();
+            return;
+        }
+    }
     foreach(GObject* obj, d->getObjects()) {
         addObject(obj);
     }
@@ -97,7 +127,7 @@ void GObjectComboBoxController::removeDocumentObjects(Document* d) {
 }
 
 QString GObjectComboBoxController::itemText(GObject* o) {
-    QString res = o->getGObjectName() + " [" + o->getDocument()->getName() + "]";
+    QString res = o->getDocument()->getName() + " [" + o->getGObjectName() + "]";
     return res;
 }
 
@@ -151,6 +181,9 @@ void GObjectComboBoxController::removeObject(const GObjectReference& ref) {
     int n = findItem(combo, ref);
     if (n >= 0) {
         combo->removeItem(n);
+        if(ref.docUrl == settings.relationFilter.getDocURL()){
+            updateCombo();
+        }
         emit si_comboBoxChanged();
     }
 }
@@ -200,7 +233,8 @@ void GObjectComboBoxController::sl_onDocumentRemoved(Document* d) {
 }
 
 void GObjectComboBoxController::sl_onObjectAdded(GObject* obj) {
-    addObject(obj);
+    Q_UNUSED(obj);
+    updateCombo();
 }
 
 void GObjectComboBoxController::sl_onObjectRemoved(GObject* obj) {
@@ -223,7 +257,7 @@ void GObjectComboBoxController::sl_lockedStateChanged() {
         removeObject(obj);
     } else {
         if (findItem(combo, obj) == -1) {
-            addObject(obj);
+            updateCombo();
         }
     }
 }
diff --git a/src/corelibs/U2Gui/src/util/GObjectComboBoxController.h b/src/corelibs/U2Gui/src/util/GObjectComboBoxController.h
index 8da1693..a95c41f 100644
--- a/src/corelibs/U2Gui/src/util/GObjectComboBoxController.h
+++ b/src/corelibs/U2Gui/src/util/GObjectComboBoxController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GObjectReference.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QComboBox>
-#endif
+#include <QComboBox>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/GScrollBar.cpp b/src/corelibs/U2Gui/src/util/GScrollBar.cpp
index 50d9211..7008ef2 100644
--- a/src/corelibs/U2Gui/src/util/GScrollBar.cpp
+++ b/src/corelibs/U2Gui/src/util/GScrollBar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/GScrollBar.h b/src/corelibs/U2Gui/src/util/GScrollBar.h
index 7ac9b91..882e8ff 100644
--- a/src/corelibs/U2Gui/src/util/GScrollBar.h
+++ b/src/corelibs/U2Gui/src/util/GScrollBar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,15 +23,12 @@
 #define _U2_GSCROLL_BAR_H_
 
 #include <U2Core/global.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QScrollBar>
-#else
-#include <QtWidgets/QScrollBar>
-#endif
+#include <QScrollBar>
 
 namespace U2 {
 
 class U2GUI_EXPORT GScrollBar : public QScrollBar {
+    Q_OBJECT
 public:
     GScrollBar(Qt::Orientation o, QWidget *p=0) : QScrollBar(o, p){}
 
diff --git a/src/corelibs/U2Gui/src/util/GUIUtils.cpp b/src/corelibs/U2Gui/src/util/GUIUtils.cpp
index f365dca..9fa28aa 100644
--- a/src/corelibs/U2Gui/src/util/GUIUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/GUIUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "GUIUtils.h"
+#include <QAbstractButton>
+#include <QApplication>
+#include <QDesktopServices>
+#include <QFile>
+#include <QMessageBox>
+#include <QPainter>
+#include <QProcess>
+#include <QUrl>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -32,20 +39,7 @@
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2Gui/MainWindow.h>
 
-#include <QtCore/QFile>
-#include <QtCore/QProcess>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtGui/QPainter>
-
-#include <QUrl>
-#include <QDesktopServices>
+#include "GUIUtils.h"
 
 namespace U2 {
 
@@ -103,6 +97,18 @@ QMenu* GUIUtils::findSubMenu(QMenu* m, const QString& name) {
     return action->menu();
 }
 
+void GUIUtils::updateActionToolTip(QAction *action) {
+    const QString actionShortcutString = action->shortcut().toString(QKeySequence::NativeText);
+    const QString toolTip = actionShortcutString.isEmpty() ? action->text() : QString("%1 (%2)").arg(action->text()).arg(actionShortcutString);
+    action->setToolTip(toolTip);
+}
+
+void GUIUtils::updateButtonToolTip(QAbstractButton *button, const QKeySequence &shortcut) {
+    const QString actionShortcutString = shortcut.toString(QKeySequence::NativeText);
+    const QString toolTip = actionShortcutString.isEmpty() ? button->text() : QString("%1 (%2)").arg(button->text()).arg(actionShortcutString);
+    button->setToolTip(toolTip);
+}
+
 void GUIUtils::disableEmptySubmenus(QMenu* m) {
     foreach(QAction* action, m->actions()) {
         QMenu* am = action->menu();
@@ -227,4 +233,15 @@ void GUIUtils::setWidgetWarning(QWidget *widget, bool value) {
     widget->setPalette(p);
 }
 
+void GUIUtils::showMessage(QWidget *widgetToPaintOn, QPainter& painter, const QString& message) {
+    painter.fillRect(widgetToPaintOn->rect(), Qt::gray);
+
+    QFontMetrics metrics(painter.font(), widgetToPaintOn);
+    painter.drawText(widgetToPaintOn->rect(), Qt::AlignCenter, metrics.elidedText(
+        message,
+        Qt::ElideRight,
+        widgetToPaintOn->rect().width()));
+    return;
+}
+
 } //endif
diff --git a/src/corelibs/U2Gui/src/util/GUIUtils.h b/src/corelibs/U2Gui/src/util/GUIUtils.h
index 26c2702..f833b6f 100644
--- a/src/corelibs/U2Gui/src/util/GUIUtils.h
+++ b/src/corelibs/U2Gui/src/util/GUIUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,27 +22,22 @@
 #ifndef _U2_GUI_UTILS_H_
 #define _U2_GUI_UTILS_H_
 
-#include <U2Core/global.h>
+#include <QAction>
+#include <QList>
+#include <QMenu>
+#include <QTreeWidgetItem>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
+#include <U2Core/global.h>
 
-#include <QtCore/QList>
 #include "U2FileDialog.h"
 
+class QAbstractButton;
+
 namespace U2 {
 
 class U2GUI_EXPORT GUIUtils : public QObject {
     Q_OBJECT
 public:
-    
     static QAction* findAction(const QList<QAction*>& actions, const QString& name);
 
     static QAction* getCheckedAction(QList<QAction*> actions);
@@ -52,6 +47,9 @@ public:
 
     static QMenu* findSubMenu(QMenu* m, const QString& name);
 
+    static void updateActionToolTip(QAction *action);
+    static void updateButtonToolTip(QAbstractButton *button, const QKeySequence &shortcut);
+
     static void disableEmptySubmenus(QMenu* m);
 
     static QIcon  createSquareIcon(const QColor& c, int size);
@@ -66,8 +64,10 @@ public:
     static bool runWebBrowser(const QString& url);
 
     static void setWidgetWarning(QWidget *widget, bool value);
+
+    static void showMessage(QWidget *widgetToPaintOn, QPainter& painter, const QString& message);
 };
 
-} //namespace
+}   // namespace U2
 
 #endif
diff --git a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
index 576db70..48c9449 100644
--- a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
+++ b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QLineEdit>
+#include <QPushButton>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/Log.h>
diff --git a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.h b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.h
index 903e7bf..45a4621 100644
--- a/src/corelibs/U2Gui/src/util/GenbankLocationValidator.h
+++ b/src/corelibs/U2Gui/src/util/GenbankLocationValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GENBANK_LOCATION_VALIDATOR_PARSER_H
 #define _U2_GENBANK_LOCATION_VALIDATOR_PARSER_H
 
-#include <QtGui/QValidator>
+#include <QValidator>
 
 class QLineEdit;
 class QPushButton;
diff --git a/src/corelibs/U2Gui/src/util/GlassView.cpp b/src/corelibs/U2Gui/src/util/GlassView.cpp
index f0ee7dd..307aa64 100644
--- a/src/corelibs/U2Gui/src/util/GlassView.cpp
+++ b/src/corelibs/U2Gui/src/util/GlassView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,9 +21,9 @@
 
 #include "GlassView.h"
 
-#include <QtCore/QEvent>
-#include <QtGui/QResizeEvent>
-#include <QtGui/QPainter>
+#include <QEvent>
+#include <QResizeEvent>
+#include <QPainter>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/GlassView.h b/src/corelibs/U2Gui/src/util/GlassView.h
index 0f4c947..bf9a46e 100644
--- a/src/corelibs/U2Gui/src/util/GlassView.h
+++ b/src/corelibs/U2Gui/src/util/GlassView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define _U2_GLASS_VIEW_H_
 
 #include <U2Core/global.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsView>
-#else
-#include <QtWidgets/QGraphicsView>
-#endif
+#include <QGraphicsView>
 
 class QTextDocument;
 
diff --git a/src/corelibs/U2Gui/src/util/GraphUtils.cpp b/src/corelibs/U2Gui/src/util/GraphUtils.cpp
index 4df2a5f..d96d15f 100644
--- a/src/corelibs/U2Gui/src/util/GraphUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/GraphUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,28 @@
  * MA 02110-1301, USA.
  */
 
-#include "GraphUtils.h"
+#include <math.h>
+
+#include <QPainter>
+#include <QVector>
 
 #include <U2Core/FormatUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <math.h>
-#include <QtCore/QVector>
-#include <QtGui/QColor>
+#include "GraphUtils.h"
 
 namespace U2 {
 
+GraphUtils::ArrowConfig::ArrowConfig()
+    : lineWidth(0),
+      lineLength(0),
+      arrowHeadWidth(0),
+      arrowHeadLength(0),
+      direction(LeftToRight)
+{
+
+}
+
 static void drawNum(QPainter& p, int x1, int x2, const QString& num, int lBorder, int rBorder, int y1, int y2) {
     if (x1 < lBorder|| x2 > rBorder) {
         return;
@@ -45,7 +57,6 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
     }
     p.save();
 
-    assert(c.drawArrow != c.drawBorderNotches);
     assert(c.drawArrow ? c.drawAxis : true);
 
     p.setFont(font);
@@ -65,7 +76,7 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
         chunk /= 2;
     }
     float scale =  len / (float)span;
-    if (c.direction == BTT) {
+    if (c.direction == BottomToTop) {
         if(c.drawAxis) {
             p.drawLine(pos.x(), pos.y() - c.extraAxisLenBefore, pos.x(), pos.y() + len + c.extraAxisLenAfter);
         }
@@ -87,11 +98,12 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
                 p.drawText(pos.x() + c.textOffset, pos.y() + ch, en);
             }
         }
-    } else if (c.direction == TTB) {
+    } else if (c.direction == TopToBottom) {
         int notchDX1 =  c.notchSize;
         int notchDX2 =  c.notchSize;
         QFontMetrics fm(font);
         int fontHeight = fm.height();
+        qint64 fontCenteringOffset = fontHeight / 2 - 2; // -2 is for baseline offset
         if(c.drawAxis) {
             p.drawLine(pos.x(), pos.y() - c.extraAxisLenBefore , pos.x(), pos.y() + len + c.extraAxisLenAfter);
         }
@@ -117,26 +129,29 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
                 }
                 if (c.drawNumbers) {
                     QString snum = FormatUtils::formatNumber(currnotch);
-                    if( y > fontHeight){
+                    qint64 textY = pos.y() + len - (y - fontCenteringOffset);
+                    if (y > fontHeight && textY > pos.y() + fontHeight) {
                         if (c.textPosition == LEFT) {
-                            p.drawText(pos.x() - c.textOffset - snum.length() * cw, pos.y() + len - y, snum);
-                        }else{
+                            qint64 textX = pos.x() - c.textOffset - snum.length() * cw;
+                            p.drawText(textX, textY, snum);
+                        } else {
                             assert(c.textPosition == RIGHT);
-                            p.drawText(pos.x() + c.textOffset - snum.length() * cw, pos.y() + len - y, snum);
+                            qint64 textX = pos.x() + c.textOffset;
+                            p.drawText(textX, textY, snum);
                         }
                     }
                 }
             }
         }
         if (c.drawNumbers) {
-            QString endStr = QString::number(end);
-            int roundedEnd = end, endLen = endStr.length();
-            if (endLen >= 4){
-                endStr = endStr.left(endLen - 3);
-                roundedEnd = endStr.toInt() * pow((double)10 , (double)(3));
-                //roundedEnd = endStr.toInt() * pow((double)10 , (double)(endLen - 3));
+            QString startStr = QString::number(start);
+            if (c.textPosition == LEFT) {
+                p.drawText(pos.x() - c.textOffset - startStr.length() * cw, pos.y() + fontCenteringOffset, startStr);
+            } else {
+                assert(c.textPosition == RIGHT);
+                p.drawText(pos.x() + c.textOffset - startStr.length() * cw, pos.y() + fontCenteringOffset, startStr);
             }
-            endStr = FormatUtils::formatNumber(roundedEnd);
+            QString endStr = QString::number(end);
             if (c.textPosition == LEFT) {
                 p.drawText(pos.x() - c.textOffset - endStr.length() * cw, pos.y() + len, endStr);
             } else {
@@ -174,7 +189,7 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
             drawNum(p, enX1, enX2, en, enX1, enX2, yt1, yt2);
         }
 
-        if (c.direction == LTR) {
+        if (c.direction == LeftToRight) {
             int leftborder = stX2;
             int rightborder= enX1;
             if (c.drawArrow) {
@@ -201,7 +216,7 @@ void GraphUtils::drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 st
                     }
                 }
             }
-        } else if (c.direction == RTL) {
+        } else if (c.direction == RightToLeft) {
             int leftborder = enX2;
             int rightborder= stX1;
             if (c.drawArrow) {
@@ -466,5 +481,42 @@ qint64 GraphUtils::pickRoundedNumberBelow(qint64 maxVal) {
     return res;
 }
 
-}//namespace
+void GraphUtils::drawArrow(QPainter &painter, const QRectF &rect, const ArrowConfig &config) {
+    SAFE_POINT(LeftToRight == config.direction || RightToLeft == config.direction, "Vertical arrows drawing is not implemented", );
+    painter.save();
+
+    QLineF line;
+    QPolygonF arrowHead(3);
+    switch (config.direction) {
+    case LeftToRight:
+        arrowHead[0] = QPointF(rect.left() + config.lineLength, rect.top() + config.arrowHeadWidth / 2);
+        arrowHead[1] = QPointF(rect.left() + config.lineLength - config.arrowHeadLength, rect.top());
+        arrowHead[2] = QPointF(rect.left() + config.lineLength - config.arrowHeadLength, rect.top() + config.arrowHeadWidth);
+        line.setP1(QPointF(rect.left(), rect.top() + config.arrowHeadWidth / 2));
+        line.setP2(QPointF(rect.left() + config.lineLength - config.arrowHeadLength, rect.top() + config.arrowHeadWidth / 2));
+        break;
+    case RightToLeft:
+        arrowHead[0] = QPointF(rect.left(), rect.top() + config.arrowHeadWidth / 2);
+        arrowHead[1] = QPointF(rect.left() + config.arrowHeadLength, rect.top());
+        arrowHead[2] = QPointF(rect.left() + config.arrowHeadLength, rect.top() + config.arrowHeadWidth);
+        line.setP1(QPointF(rect.left() + config.arrowHeadLength, rect.top() + config.arrowHeadWidth / 2));
+        line.setP2(QPointF(rect.left() + config.lineLength, rect.top() + config.arrowHeadWidth / 2));
+        break;
+    default:
+        FAIL("Not implemented", );
+    }
+
+    painter.setRenderHint(QPainter::Antialiasing);
+
+    QPen pen(config.color);
+    pen.setWidth(config.lineWidth);
+    painter.setPen(pen);
+    painter.drawLine(line);
+
+    painter.setPen(config.color);
+    painter.setBrush(QBrush(config.color));
+    painter.drawPolygon(arrowHead);
+    painter.restore();
+}
 
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/GraphUtils.h b/src/corelibs/U2Gui/src/util/GraphUtils.h
index a2f8452..a3f7d5f 100644
--- a/src/corelibs/U2Gui/src/util/GraphUtils.h
+++ b/src/corelibs/U2Gui/src/util/GraphUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#if !defined(GRAPHUTILS_H)
-#define GRAPHUTILS_H
+#ifndef _U2_GRAPH_UTILS_H_
+#define _U2_GRAPH_UTILS_H_
+
+#include <QColor>
 
 #include <U2Core/global.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QFont>
+class QPainter;
 
 namespace U2 {
 
@@ -33,11 +34,18 @@ namespace U2 {
 
 class U2GUI_EXPORT GraphUtils {
 public:
+    enum Direction {
+        LeftToRight,
+        RightToLeft,
+        BottomToTop,
+        TopToBottom
+    };
 
-    enum Direction { LTR, RTL, BTT, TTB };
+    enum TextPos {
+        LEFT,
+        RIGHT
+    };
 
-    enum TextPos { LEFT, RIGHT };
-    
     struct RulerConfig {
         RulerConfig() {
             drawArrow = false;
@@ -50,7 +58,7 @@ public:
             drawBorderNotches = true;
             singleSideNotches = false;
             drawAxis = true;
-            direction = LTR;
+            direction = LeftToRight;
             textPosition = RIGHT;
             extraAxisLenBefore =0;
             extraAxisLenAfter =0;
@@ -79,6 +87,17 @@ public:
         TextPos   textPosition;
     };
 
+    struct U2GUI_EXPORT ArrowConfig {
+        ArrowConfig();
+
+        qreal lineWidth;
+        qreal lineLength;
+        qreal arrowHeadWidth;
+        qreal arrowHeadLength;
+        QColor color;
+        Direction direction;
+    };
+
     static void drawRuler(QPainter& p, const QPoint& pos, qint64 len, qint64 start, qint64 end, const QFont& f, const RulerConfig& config);
     static int calculateChunk(qint64 start, qint64 end, qint64 len, const QPainter &p);
     static int findChunk(qint64 len, qint64 span, int N);
@@ -87,17 +106,19 @@ public:
 
     static QColor proposeLightColorByKey(const QString& key);
 
-	/* 
-	   The method is designed to be used by different algorithms that needs to 
-	   select some "nice looking" number in range to be presented to user.
+    /*
+       The method is designed to be used by different algorithms that needs to
+       select some "nice looking" number in range to be presented to user.
+
+       Selects "nice looking" number below maxVal.
+       Example (input, result) : (231, 200), (49, 40), (12421452, 12000000)
+       Works only for positive numbers, returns maxVal for negative or zero
+    */
+    static qint64 pickRoundedNumberBelow(qint64 maxVal);
 
-	   Selects "nice looking" number below maxVal.
-	   Example (input, result) : (231, 200), (49, 40), (12421452, 12000000)
-	   Works only for positive numbers, returns maxVal for negative or zero
-	*/
-	static qint64 pickRoundedNumberBelow(qint64 maxVal);
+    static void drawArrow(QPainter &painter, const QRectF &rect, const ArrowConfig &config);
 };
 
-} //namespace
+}   // namespace U2
 
-#endif
+#endif // _U2_GRAPH_UTILS_H_
diff --git a/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.cpp b/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.cpp
new file mode 100644
index 0000000..576925c
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.cpp
@@ -0,0 +1,75 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "GroupedComboBoxDelegate.h"
+
+#include <QStandardItem>
+
+namespace U2 {
+
+GroupedComboBoxDelegate::GroupedComboBoxDelegate(QObject *parent) : QItemDelegate(parent){}
+
+void GroupedComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
+    if(index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("separator")) {
+        painter->setPen(Qt::gray);
+        painter->drawLine(option.rect.left(), option.rect.center().y(), option.rect.right(), option.rect.center().y());
+    } else if(index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String("parent")) {
+        QStyleOptionViewItem parentOption = option;
+        parentOption.state |= QStyle::State_Enabled;
+        QItemDelegate::paint( painter, parentOption, index );
+    } else if ( index.data(Qt::AccessibleDescriptionRole).toString() == QLatin1String( "child" ) ) {
+        QStyleOptionViewItem childOption = option;
+        int indent = option.fontMetrics.width( QString( 4, QChar( ' ' ) ) );
+        childOption.rect.adjust( indent, 0, 0, 0 );
+        childOption.textElideMode = Qt::ElideNone;
+        QItemDelegate::paint( painter, childOption, index );
+    } else {
+        QItemDelegate::paint(painter, option, index);
+    }
+}
+
+QSize GroupedComboBoxDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
+    QString type = index.data(Qt::AccessibleDescriptionRole).toString();
+    if (type == QLatin1String("separator")) {
+        return QSize(0, 10);
+    }
+    return QItemDelegate::sizeHint( option, index );
+}
+
+void GroupedComboBoxDelegate::addParentItem(QStandardItemModel * model, const QString& text) {
+    QStandardItem* item = new QStandardItem(text);
+    item->setFlags(item->flags() & ~(Qt::ItemIsEnabled | Qt::ItemIsSelectable));
+    item->setData("parent", Qt::AccessibleDescriptionRole);
+    QFont font = item->font();
+    font.setBold( true );
+    font.setItalic(true);
+    item->setFont(font);
+    model->appendRow(item);
+}
+
+void GroupedComboBoxDelegate::addChildItem(QStandardItemModel * model, const QString& text, const QVariant& data) {
+    QStandardItem* item = new QStandardItem(text + QString(4, QChar(' ')));
+    item->setData(data, Qt::UserRole);
+    item->setData("child", Qt::AccessibleDescriptionRole);
+    model->appendRow(item);
+}
+
+}
diff --git a/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.h b/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.h
new file mode 100644
index 0000000..ddbb0bd
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/GroupedComboBoxDelegate.h
@@ -0,0 +1,48 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+ 
+#ifndef _U2_GROUPED_COMBOBOX_DELEGATE_H_
+#define _U2_GROUPED_COMBOBOX_DELEGATE_H_
+
+#include <QItemDelegate>
+#include <QPainter>
+
+#include <U2Core/global.h>
+
+class QStandardItemModel;
+
+namespace U2 {
+
+class U2GUI_EXPORT GroupedComboBoxDelegate : public QItemDelegate {
+    Q_OBJECT
+public:
+    explicit GroupedComboBoxDelegate(QObject *parent = 0);
+
+    static void addParentItem(QStandardItemModel * model, const QString& text);
+    static void addChildItem(QStandardItemModel * model, const QString& text, const QVariant& data);
+protected:
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+    
+}
+
+#endif // _U2_GROUPED_COMBOBOX_DELEGATE_H_
diff --git a/src/corelibs/U2Gui/src/util/HelpButton.cpp b/src/corelibs/U2Gui/src/util/HelpButton.cpp
index 35a6671..d3bea34 100644
--- a/src/corelibs/U2Gui/src/util/HelpButton.cpp
+++ b/src/corelibs/U2Gui/src/util/HelpButton.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QComboBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QComboBox>
+#include <QPushButton>
 
 #include <U2Gui/GUIUtils.h>
 
diff --git a/src/corelibs/U2Gui/src/util/HelpButton.h b/src/corelibs/U2Gui/src/util/HelpButton.h
index 57fb767..9c15da1 100644
--- a/src/corelibs/U2Gui/src/util/HelpButton.h
+++ b/src/corelibs/U2Gui/src/util/HelpButton.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,20 +21,14 @@
 #ifndef _U2_HELP_BUTTON_H_
 #define _U2_HELP_BUTTON_H_
 
-#include <QtCore/QString>
+#include <QAbstractButton>
+#include <QDialogButtonBox>
+#include <QMap>
+#include <QString>
+#include <QWidget>
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QAbstractButton>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QAbstractButton>
-#endif
-
 class QComboBox;
 
 namespace U2 {
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
deleted file mode 100644
index b3a5e23..0000000
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QMessageBox>
-#include <QPushButton>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/U2DbiRegistry.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Formats/AceImporter.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/HelpButton.h>
-#include <U2Gui/ObjectViewModel.h>
-#include <U2Gui/SaveDocumentController.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include "AceImportDialog.h"
-
-namespace U2 {
-
-const QString AceImportDialog::EXTENSION = ".ugenedb";
-
-AceImportDialog::AceImportDialog(const QVariantMap& _settings) :
-    ImportDialog(_settings),
-    saveController(NULL)
-{
-    setupUi(this);
-    new HelpButton(this, buttonBox, "18223132");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
-    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
-
-    QString src = settings.value(AceImporter::SRC_URL).toString();
-    leSource->setText(src);
-
-    initSaveController();
-}
-
-bool AceImportDialog::isValid() {
-    GUrl destUrl(saveController->getSaveFileName());
-
-    if (destUrl.isEmpty()) {
-        leDest->setFocus(Qt::OtherFocusReason);
-        QMessageBox::critical(this, windowTitle(), tr("Destination URL is not specified"));
-        return false;
-    }
-
-    if (!destUrl.isLocalFile()) {
-        leDest->setFocus(Qt::OtherFocusReason);
-        QMessageBox::critical(this, windowTitle(), tr("Destination URL must point to a local file"));
-        return false;
-    }
-
-    Project * prj = AppContext::getProject();
-    if (prj) {
-        Document * destDoc = prj->findDocumentByURL(destUrl);
-        if (destDoc && destDoc->isLoaded() && !GObjectViewUtils::findViewsWithAnyOfObjects(destDoc->getObjects()).isEmpty()) {
-            QMessageBox::critical(this, windowTitle(), tr("There is opened view with destination file.\n"
-                                                          "Close it or choose different file"));
-            leDest->setFocus(Qt::OtherFocusReason);
-            return false;
-        }
-    }
-
-    QFileInfo destinationDir(QFileInfo(destUrl.getURLString()).path());
-    if (!destinationDir.isWritable()) {
-        leDest->setFocus(Qt::OtherFocusReason);
-        QMessageBox::critical(this, windowTitle(), tr("Destination directory '%1' is not writable, "\
-                                                      "please choose different destination URL")
-                              .arg(destinationDir.absoluteFilePath()));
-        return false;
-    }
-
-    if (QFile::exists(destUrl.getURLString())) {
-        int result = QMessageBox::question(this, windowTitle(),
-                                           tr("Destination file already exists.\n"
-                                              "To overwrite the file, press 'Replace'.\n"
-                                              "To append data to existing file press 'Append'."),
-                                           tr("Replace"),
-                                           tr("Append"),
-                                           tr("Cancel"), 2);
-        if (result == 0) {
-            bool ok = QFile::remove(destUrl.getURLString());
-            if (!ok) {
-                QMessageBox::critical(this, windowTitle(), tr("Destination file '%1' cannot be removed")
-                                      .arg(destUrl.getURLString()));
-                return false;
-            }
-        } else if (result == 2) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
-void AceImportDialog::applySettings() {
-    U2DbiRef ref(SQLITE_DBI_ID, saveController->getSaveFileName());
-    settings.insert(DocumentFormat::DBI_REF_HINT, qVariantFromValue(ref));
-}
-
-void AceImportDialog::initSaveController() {
-    SaveDocumentControllerConfig config;
-    if (!leSource->text().isEmpty()) {
-        config.defaultFileName = leSource->text() + EXTENSION;
-    }
-    config.defaultFormatId = BaseDocumentFormats::UGENEDB;
-    config.fileDialogButton = tbDest;
-    config.fileNameEdit = leDest;
-    config.parentWidget = this;
-    config.saveTitle = tr("Destination UGENEDB file");
-
-    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::UGENEDB;
-
-    saveController = new SaveDocumentController(config, formats, this);
-}
-
-}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.h b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.h
deleted file mode 100644
index 1071914..0000000
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_ACE_IMPORT_DIALOG_H_
-#define _U2_ACE_IMPORT_DIALOG_H_
-
-#include <U2Formats/AceImporter.h>
-
-#include "ui_AceImportDialog.h"
-
-namespace U2 {
-
-class SaveDocumentController;
-
-class AceImportDialog : public ImportDialog, public Ui_AceImportDialog {
-    Q_OBJECT
-public:
-    AceImportDialog(const QVariantMap& settings);
-
-protected:
-    bool isValid();
-    void applySettings();
-    void initSaveController();
-
-    SaveDocumentController *saveController;
-
-    static const QString EXTENSION;
-};
-
-}   // namespace U2
-
-#endif // _U2_ACE_IMPORT_DIALOG_H_
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.ui b/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.ui
deleted file mode 100644
index 3af914d..0000000
--- a/src/corelibs/U2Gui/src/util/ImportDialogs/AceImportDialog.ui
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>AceImportDialog</class>
- <widget class="QDialog" name="AceImportDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>359</width>
-    <height>126</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Import ACE File</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_2">
-   <item>
-    <layout class="QHBoxLayout" name="hlSource">
-     <item>
-      <widget class="QLabel" name="lblSource">
-       <property name="minimumSize">
-        <size>
-         <width>105</width>
-         <height>0</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Source URL:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="leSource">
-       <property name="readOnly">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="hlDest">
-     <item>
-      <widget class="QLabel" name="lblDest">
-       <property name="minimumSize">
-        <size>
-         <width>105</width>
-         <height>0</height>
-        </size>
-       </property>
-       <property name="text">
-        <string>Destination URL:</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QLineEdit" name="leDest"/>
-     </item>
-     <item>
-      <widget class="QToolButton" name="tbDest">
-       <property name="text">
-        <string>...</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="hlButtons">
-     <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
-      <widget class="QDialogButtonBox" name="buttonBox">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="standardButtons">
-        <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>AceImportDialog</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>248</x>
-     <y>254</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>AceImportDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>316</x>
-     <y>260</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogsFactories.cpp b/src/corelibs/U2Gui/src/util/ImportDialogsFactories.cpp
deleted file mode 100644
index 671ebd2..0000000
--- a/src/corelibs/U2Gui/src/util/ImportDialogsFactories.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "ImportDialogsFactories.h"
-#include "ImportDialogs/AceImportDialog.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/U2SafePoints.h>
-
-namespace U2 {
-
-void ImportDialogFactories::registerFactories() {
-    DocumentFormatRegistry* dfRegistry = AppContext::getDocumentFormatRegistry();
-    SAFE_POINT(dfRegistry, "Document format registry is NULL", );
-    DocumentImportersRegistry* diRegistry = dfRegistry->getImportSupport();
-    SAFE_POINT(diRegistry, "Document import registry is NULL", );
-
-    DocumentImporter* aceImporter = diRegistry->getDocumentImporter(AceImporter::ID);
-    SAFE_POINT(aceImporter, "ACE importer is NULL", );
-    aceImporter->setDialogFactory(new AceImportDialogFactory());
-}
-
-ImportDialog* AceImportDialogFactory::getDialog(const QVariantMap &settings) const {
-    return new AceImportDialog(settings);
-}
-
-}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportDialogsFactories.h b/src/corelibs/U2Gui/src/util/ImportDialogsFactories.h
deleted file mode 100644
index b140c91..0000000
--- a/src/corelibs/U2Gui/src/util/ImportDialogsFactories.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_IMPORT_DIALOGS_H_
-#define _U2_IMPORT_DIALOGS_H_
-
-#include <U2Core/DocumentImport.h>
-
-namespace U2 {
-
-/** If you need a dialog on file import, specify it here,
- *  crete its factory and add the factory to the importer.
- *  Note that importer should exec the dialog itself.
- **/
-class U2GUI_EXPORT ImportDialogFactories {
-public:
-    static void registerFactories();
-};
-
-class AceImportDialogFactory : public ImportDialogFactory {
-public:
-    virtual ImportDialog* getDialog(const QVariantMap &settings) const;
-};
-
-}   // namespace U2
-
-#endif // _U2_IMPORT_DIALOGS_H_
diff --git a/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.cpp b/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.cpp
index fd2d3ff..6b413bc 100644
--- a/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.cpp
+++ b/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@ const U2EntityRef & ImportSequenceFromRawDataTask::getEntityRef() const {
 }
 
 void ImportSequenceFromRawDataTask::run() {
-    sequenceRef = U2SequenceUtils::import(dbiRef, folder, sequence, stateInfo);
+    sequenceRef = U2SequenceUtils::import(stateInfo, dbiRef, folder, sequence);
 }
 
 }   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.h b/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.h
index c29b049..1ab5ca2 100644
--- a/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.h
+++ b/src/corelibs/U2Gui/src/util/ImportSequenceFromRawDataTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.cpp b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.cpp
new file mode 100644
index 0000000..21d55c3
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.cpp
@@ -0,0 +1,67 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/Settings.h>
+#include <U2Core/U2DbiRegistry.h>
+
+#include <U2Gui/SaveDocumentController.h>
+
+#include "AceImportWidget.h"
+
+namespace U2 {
+
+const QString AceImportWidget::EXTENSION = ".ugenedb";
+
+AceImportWidget::AceImportWidget(const GUrl& url, const QVariantMap& settings) :
+    ImportWidget(url, settings)
+{
+    setupUi(this);
+
+    initSaveController(url);
+}
+
+QVariantMap AceImportWidget::getSettings() const {
+    QVariantMap settings;
+    U2DbiRef ref(SQLITE_DBI_ID, saveController->getSaveFileName());
+    settings.insert(DocumentFormat::DBI_REF_HINT, qVariantFromValue(ref));
+
+    return settings;
+}
+
+void AceImportWidget::initSaveController(const GUrl& url) {
+    SaveDocumentControllerConfig config;
+
+    config.defaultFileName = url.getURLString() + EXTENSION;
+    config.defaultFormatId = BaseDocumentFormats::UGENEDB;
+    config.fileDialogButton = browseButton;
+    config.fileNameEdit = fileNameEdit;
+    config.parentWidget = this;
+    config.saveTitle = tr("Destination UGENEDB file");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::UGENEDB;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.h b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.h
new file mode 100644
index 0000000..9d8a6f4
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_ACE_IMPORT_WIDGET_H_
+#define _U2_ACE_IMPORT_WIDGET_H_
+
+#include <U2Formats/AceImporter.h>
+
+#include "ImportWidget.h"
+#include "ui_AceImportWidget.h"
+
+namespace U2 {
+
+class SaveDocumentController;
+
+class AceImportWidget : public ImportWidget, public Ui_AceImportWidget {
+    Q_OBJECT
+public:
+    AceImportWidget(const GUrl& url, const QVariantMap& settings);
+
+    virtual QVariantMap getSettings() const;
+
+private:
+    void initSaveController(const GUrl& url);
+
+    static const QString EXTENSION;
+};
+
+}   // namespace U2
+
+#endif // _U2_ACE_IMPORT_WIDGET_H_
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.ui b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.ui
new file mode 100644
index 0000000..36a30d3
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AceImportWidget.ui
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AceImportWidget</class>
+ <widget class="QWidget" name="AceImportWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>408</width>
+    <height>24</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>10</number>
+     </property>
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMinAndMaxSize</enum>
+     </property>
+     <property name="leftMargin">
+      <number>17</number>
+     </property>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <property name="leftMargin">
+        <number>2</number>
+       </property>
+       <property name="topMargin">
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>Save to file</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QGridLayout" name="gridLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item row="0" column="1">
+        <widget class="QToolButton" name="browseButton">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QLineEdit" name="fileNameEdit"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.cpp b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.cpp
new file mode 100644
index 0000000..0425d6f
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.cpp
@@ -0,0 +1,87 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/Settings.h>
+
+#include <U2Gui/SaveDocumentController.h>
+
+#include "AprImportWidget.h"
+
+namespace U2 {
+
+AprImportWidget::AprImportWidget(const GUrl& url, const QVariantMap& settings) :
+    ImportWidget(url, settings)
+{
+    setupUi(this);
+
+    DocumentFormatId formatId = getFormatId(settings);
+
+    GUrl resultUrl = GUrlUtils::changeFileExt(url.getURLString(), formatId);
+    QString resultUrlString = resultUrl.getURLString();
+    if (resultUrlString.endsWith(QString(".gz"))) {
+        resultUrlString.chop(3);
+    }
+
+    initSaveController(resultUrlString, formatId);
+}
+
+QVariantMap AprImportWidget::getSettings() const {
+    QVariantMap settings;
+    settings[ImportHint_DestinationUrl] = saveController->getSaveFileName();
+    settings[ImportHint_FormatId] = saveController->getFormatIdToSave();
+
+    return settings;
+}
+
+void AprImportWidget::initSaveController(const QString& url, const DocumentFormatId defaultFormatId){
+    SaveDocumentControllerConfig config;
+
+    config.defaultFormatId = defaultFormatId;
+    config.fileDialogButton = browseButton;
+    config.defaultFileName = url;
+    config.fileNameEdit = fileNameEdit;
+    config.formatCombo = formatCombo;
+    config.parentWidget = this;
+    config.rollOutProjectUrls = true;
+
+    DocumentFormatConstraints c;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
+    c.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+    c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
+    c.addFlagToExclude(DocumentFormatFlag_Hidden);
+    QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+DocumentFormatId AprImportWidget::getFormatId(const QVariantMap& settings) {
+    DocumentFormatId res = settings.value(ImportHint_FormatId).toString();
+    if (res.isEmpty()) {
+        res = BaseDocumentFormats::FASTA;
+    }
+    return res;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.h b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.h
new file mode 100644
index 0000000..3409362
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_APR_IMPORT_WIDGET_H_
+#define _U2_APR_IMPORT_WIDGET_H_
+
+#include <U2Formats/AprImporter.h>
+
+#include "ImportWidget.h"
+#include "ui_AprImportWidget.h"
+
+namespace U2 {
+
+class SaveDocumentController;
+
+class AprImportWidget : public ImportWidget, public Ui_AprImportWidget {
+    Q_OBJECT
+public:
+    AprImportWidget(const GUrl& url, const QVariantMap& settings);
+    virtual QVariantMap getSettings() const;
+
+    void initSaveController(const QString& url, const DocumentFormatId defaultFormatId);
+
+private:
+    DocumentFormatId getFormatId(const QVariantMap& settings);
+    static QString getDefaultValues();
+};
+
+}   // namespace U2
+
+#endif // _U2_APR_IMPORT_WIDGET_H_
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.ui b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.ui
new file mode 100644
index 0000000..27b967a
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/AprImportWidget.ui
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AprImportWidget</class>
+ <widget class="QWidget" name="AprImportWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>408</width>
+    <height>50</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QHBoxLayout" name="horizontalLayout_2">
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <property name="spacing">
+      <number>6</number>
+     </property>
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMinAndMaxSize</enum>
+     </property>
+     <property name="leftMargin">
+      <number>17</number>
+     </property>
+     <item>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <property name="spacing">
+        <number>6</number>
+       </property>
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <property name="leftMargin">
+        <number>2</number>
+       </property>
+       <property name="topMargin">
+        <number>0</number>
+       </property>
+       <item>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Save to fiie</string>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="label_3">
+         <property name="text">
+          <string>File format</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item>
+      <layout class="QGridLayout" name="gridLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item row="0" column="0">
+        <widget class="QLineEdit" name="fileNameEdit"/>
+       </item>
+       <item row="0" column="1">
+        <widget class="QToolButton" name="browseButton">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0" colspan="2">
+        <widget class="QComboBox" name="formatCombo"/>
+       </item>
+      </layout>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.cpp b/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.cpp
new file mode 100644
index 0000000..f67c3d0
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.cpp
@@ -0,0 +1,43 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/Settings.h>
+
+#include <U2Gui/SaveDocumentController.h>
+
+#include "ImportWidget.h"
+
+namespace U2 {
+
+    ImportWidget::ImportWidget(const GUrl& url, const QVariantMap& settings) :
+    QWidget(),
+    saveController(NULL)
+{
+}
+
+ImportWidget::~ImportWidget() {
+    delete saveController;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.h b/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.h
new file mode 100644
index 0000000..effa1e7
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.h
@@ -0,0 +1,47 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_IMPORT_WIDGET_H_
+#define _U2_IMPORT_WIDGET_H_
+
+#include <QWidget>
+
+namespace U2 {
+
+#define ImportHint_FormatId  "import-hint-format-id"
+#define ImportHint_DestinationUrl "import-hint-destination-url"
+
+class SaveDocumentController;
+
+class ImportWidget : public QWidget {
+public:
+    ImportWidget(const GUrl& url, const QVariantMap& settings);
+    ~ImportWidget();
+
+    virtual QVariantMap getSettings() const = 0;
+
+protected:
+    SaveDocumentController *saveController;
+};
+
+}   // namespace U2
+
+#endif // _U2_IMPORT_WIDGET_H_
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.cpp b/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.cpp
new file mode 100644
index 0000000..1fadeaa
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.cpp
@@ -0,0 +1,58 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "ImportWidgetsFactories.h"
+#include "ImportWidgets/AceImportWidget.h"
+#include "ImportWidgets/AprImportWidget.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ImportWidget.h>
+
+namespace U2 {
+
+void ImportWidgetsFactories::registerFactories() {
+    DocumentFormatRegistry* dfRegistry = AppContext::getDocumentFormatRegistry();
+    SAFE_POINT(dfRegistry, "Document format registry is NULL", );
+    DocumentImportersRegistry* diRegistry = dfRegistry->getImportSupport();
+    SAFE_POINT(diRegistry, "Document import registry is NULL", );
+
+    DocumentImporter* aceImporter = diRegistry->getDocumentImporter(AceImporter::ID);
+    SAFE_POINT(aceImporter, "ACE importer is NULL", );
+    aceImporter->setWidgetFactory(new AceImportWidgetFactory());
+
+    DocumentImporter* aprImporter = diRegistry->getDocumentImporter(AprImporter::ID);
+    SAFE_POINT(aprImporter, "APR importer is NULL", );
+    aprImporter->setWidgetFactory(new AprImportWidgetFactory());
+}
+
+ImportWidget* AceImportWidgetFactory::getWidget(const GUrl& url, const QVariantMap& settings) const {
+    return new AceImportWidget(url, settings);
+}
+
+ImportWidget* AprImportWidgetFactory::getWidget(const GUrl& url, const QVariantMap& settings) const {
+    return new AprImportWidget(url, settings);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.h b/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.h
new file mode 100644
index 0000000..2f4f784
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/ImportWidgetsFactories.h
@@ -0,0 +1,55 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_IMPORT_WIDGETS_H_
+#define _U2_IMPORT_WIDGETS_H_
+
+#include <U2Core/DocumentImport.h>
+
+namespace U2 {
+
+/** If you need a dialog on file import, specify it here,
+ *  crete its factory and add the factory to the importer.
+ *  Note that importer should exec the dialog itself.
+ **/
+
+class AceImportWidget;
+class AprImportWidget;
+class ImportWidget;
+
+class U2GUI_EXPORT ImportWidgetsFactories {
+public:
+    static void registerFactories();
+};
+
+class AceImportWidgetFactory : public ImportWidgetFactory {
+public:
+    virtual ImportWidget* getWidget(const GUrl& url, const QVariantMap& settings) const;
+};
+
+class AprImportWidgetFactory : public ImportWidgetFactory {
+public:
+    virtual ImportWidget* getWidget(const GUrl& url, const QVariantMap& settings) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_IMPORT_WIDGETS_H_
diff --git a/src/corelibs/U2Gui/src/util/InputWidgetsControllers.cpp b/src/corelibs/U2Gui/src/util/InputWidgetsControllers.cpp
index 1bd02af..d2c749a 100644
--- a/src/corelibs/U2Gui/src/util/InputWidgetsControllers.cpp
+++ b/src/corelibs/U2Gui/src/util/InputWidgetsControllers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,22 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QCheckBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QLineEdit>
-#include <QtGui/QRadioButton>
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDoubleSpinBox>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSpinBox>
-#endif
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDoubleSpinBox>
+#include <QLineEdit>
+#include <QRadioButton>
+#include <QSpinBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
@@ -73,9 +63,8 @@ void InputWidgetController::storeParameter() {
 }
 
 void InputWidgetController::addParameterToCmdLineSettings(QStringList& settings) {
-    if(cmdLinePrefix.isEmpty()) {
-        return;
-    }
+    CHECK(baseWidget->isEnabled(), );
+    CHECK(!cmdLinePrefix.isEmpty(), );
     curValue = getWidgetValue();
     if(!curValue.isNull() && curValue != defaultValue) {
         settings << cmdLinePrefix;
diff --git a/src/corelibs/U2Gui/src/util/InputWidgetsControllers.h b/src/corelibs/U2Gui/src/util/InputWidgetsControllers.h
index d892c90..cf09c06 100644
--- a/src/corelibs/U2Gui/src/util/InputWidgetsControllers.h
+++ b/src/corelibs/U2Gui/src/util/InputWidgetsControllers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_INPUT_WIDGETS_CONTROLLERS_H
 #define _U2_INPUT_WIDGETS_CONTROLLERS_H
 
-#include <QtCore/QStringList>
-#include <QtCore/QVariant>
+#include <QStringList>
+#include <QVariant>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/util/LabelClickTransmitter.cpp b/src/corelibs/U2Gui/src/util/LabelClickTransmitter.cpp
index 33af8db..a525adb 100644
--- a/src/corelibs/U2Gui/src/util/LabelClickTransmitter.cpp
+++ b/src/corelibs/U2Gui/src/util/LabelClickTransmitter.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/LabelClickTransmitter.h b/src/corelibs/U2Gui/src/util/LabelClickTransmitter.h
index 879c10a..aa3e183 100644
--- a/src/corelibs/U2Gui/src/util/LabelClickTransmitter.h
+++ b/src/corelibs/U2Gui/src/util/LabelClickTransmitter.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/LastUsedDirHelper.cpp b/src/corelibs/U2Gui/src/util/LastUsedDirHelper.cpp
index f18fee9..66cde3f 100644
--- a/src/corelibs/U2Gui/src/util/LastUsedDirHelper.cpp
+++ b/src/corelibs/U2Gui/src/util/LastUsedDirHelper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/LastUsedDirHelper.h b/src/corelibs/U2Gui/src/util/LastUsedDirHelper.h
index ad6e86b..4fb3368 100644
--- a/src/corelibs/U2Gui/src/util/LastUsedDirHelper.h
+++ b/src/corelibs/U2Gui/src/util/LastUsedDirHelper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/LocalToolbar.cpp b/src/corelibs/U2Gui/src/util/LocalToolbar.cpp
index f877b97..30ae2a2 100644
--- a/src/corelibs/U2Gui/src/util/LocalToolbar.cpp
+++ b/src/corelibs/U2Gui/src/util/LocalToolbar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/LocalToolbar.h b/src/corelibs/U2Gui/src/util/LocalToolbar.h
index 44ecc15..179130d 100644
--- a/src/corelibs/U2Gui/src/util/LocalToolbar.h
+++ b/src/corelibs/U2Gui/src/util/LocalToolbar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp b/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp
index 53b844d..efad05a 100644
--- a/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp
+++ b/src/corelibs/U2Gui/src/util/MultiClickMenu.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/MultiClickMenu.h b/src/corelibs/U2Gui/src/util/MultiClickMenu.h
index 49c861a..44d5e15 100644
--- a/src/corelibs/U2Gui/src/util/MultiClickMenu.h
+++ b/src/corelibs/U2Gui/src/util/MultiClickMenu.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
index 905429c..fd5f7c8 100644
--- a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
+++ b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,12 +27,8 @@
 #include <U2Core/Task.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QEvent>
+#include <QMenu>
 
 //TODO:
 // track factory registry and show only the states with factories available
diff --git a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.h b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.h
index 76ea771..36a5fe5 100644
--- a/src/corelibs/U2Gui/src/util/ObjectViewTreeController.h
+++ b/src/corelibs/U2Gui/src/util/ObjectViewTreeController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,13 +25,8 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Core/SelectionModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QAction>
+#include <QTreeWidget>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/OrderedToolbar.cpp b/src/corelibs/U2Gui/src/util/OrderedToolbar.cpp
index be4b82e..0f29afa 100644
--- a/src/corelibs/U2Gui/src/util/OrderedToolbar.cpp
+++ b/src/corelibs/U2Gui/src/util/OrderedToolbar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/OrderedToolbar.h b/src/corelibs/U2Gui/src/util/OrderedToolbar.h
index 028e060..adf4377 100644
--- a/src/corelibs/U2Gui/src/util/OrderedToolbar.h
+++ b/src/corelibs/U2Gui/src/util/OrderedToolbar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/PositionSelector.cpp b/src/corelibs/U2Gui/src/util/PositionSelector.cpp
index 4c945e1..c7ebcff 100644
--- a/src/corelibs/U2Gui/src/util/PositionSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/PositionSelector.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,20 +21,11 @@
 
 #include <math.h>
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QToolButton>
+#include <QVBoxLayout>
 
 #include <U2Gui/U2LongLongValidator.h>
 
diff --git a/src/corelibs/U2Gui/src/util/PositionSelector.h b/src/corelibs/U2Gui/src/util/PositionSelector.h
index db09d5e..f0beb38 100644
--- a/src/corelibs/U2Gui/src/util/PositionSelector.h
+++ b/src/corelibs/U2Gui/src/util/PositionSelector.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,9 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QDialog>
-#endif
-#include <QtGui/QValidator>
+#include <QLineEdit>
+#include <QDialog>
+#include <QValidator>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.cpp b/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.cpp
index 8a8bd99..88ba6bc 100644
--- a/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.cpp
+++ b/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.h b/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.h
index 6a1ad66..d26282f 100644
--- a/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.h
+++ b/src/corelibs/U2Gui/src/util/ProjectDocumentComboBoxController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,8 @@
 
 #include <U2Core/DocumentModel.h>
 
-#include <QtCore/QObject>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QComboBox>
-#endif
+#include <QObject>
+#include <QComboBox>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
index de0e6cd..91deb97 100644
--- a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.h b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.h
index f6f6d1b..e1e1009 100644
--- a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.h
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
index 7da152c..90319af 100644
--- a/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
+++ b/src/corelibs/U2Gui/src/util/ProjectTreeItemSelectorDialogImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RangeSelector.cpp b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
index e8876f6..af3966c 100644
--- a/src/corelibs/U2Gui/src/util/RangeSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/RangeSelector.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -65,9 +65,6 @@ RangeSelector::RangeSelector(QWidget* p, int s, int e)
 
 void RangeSelector::init() {
     int w = qMax(((int)log10((double)rangeEnd))*10, 70);
-
-
-
     startEdit = new QLineEdit(this);
     startEdit->setValidator(new QIntValidator(1, len, startEdit));
     if (dialog == NULL) {
@@ -81,7 +78,7 @@ void RangeSelector::init() {
     connect(startEdit, SIGNAL(returnPressed()), SLOT(sl_onReturnPressed()));
 
     endEdit = new QLineEdit(this);
-    endEdit->setValidator(new QIntValidator(1, len, startEdit));
+    endEdit->setValidator(new QIntValidator(1, len, endEdit));
     if (dialog == NULL) {
         endEdit->setFixedWidth(w);
     } else {
@@ -240,11 +237,10 @@ MultipleRangeSelector::MultipleRangeSelector(QWidget* _parent, const QVector<U2R
 
     ui = new Ui_RangeSelectionDialog;
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222976");
+    new HelpButton(this, ui->buttonBox, "20874880");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Go"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-
     {
         ui->startEdit->setValidator(new QIntValidator(1, seqLen, ui->startEdit));
         ui->endEdit->setValidator(new QIntValidator(1, seqLen, ui->endEdit));
@@ -280,6 +276,11 @@ MultipleRangeSelector::MultipleRangeSelector(QWidget* _parent, const QVector<U2R
 
         connect(ui->startEdit, SIGNAL(returnPressed()), SLOT(sl_returnPressed()));
         connect(ui->endEdit, SIGNAL(returnPressed()), SLOT(sl_returnPressed()));
+        connect(ui->startEdit, SIGNAL(textEdited(QString)), SLOT(sl_textEdited(const QString &)));
+        connect(ui->endEdit, SIGNAL(textEdited(QString)), SLOT(sl_textEdited(const QString &)));
+        connect(ui->startEdit, SIGNAL(textChanged(QString)), SLOT(sl_textEdited(const QString &)));
+        connect(ui->endEdit, SIGNAL(textChanged(QString)), SLOT(sl_textEdited(const QString &)));
+
         connect(ui->multipleRegionEdit, SIGNAL(returnPressed()), SLOT(sl_returnPressed()));
         connect(ui->minButton, SIGNAL(clicked()), SLOT(sl_minButton()));
         connect(ui->maxButton, SIGNAL(clicked()), SLOT(sl_maxButton()));
@@ -302,7 +303,7 @@ void MultipleRangeSelector::accept(){
             return;
         }
         int v2 = ui->endEdit->text().toInt(&ok);
-        if (!ok || v2 < v1 || v2 > seqLen) {
+        if (!ok || (v2 < v1 && !isCircular) || v2 > seqLen) {
             return;
         }    
         QDialog::accept();
@@ -321,6 +322,20 @@ void MultipleRangeSelector::accept(){
     }
 }
 
+void MultipleRangeSelector::sl_textEdited(const QString &) {
+    int min = ui->startEdit->text().toInt();
+    int max = ui->endEdit->text().toInt();
+    QPalette p = normalPalette;
+    if (min > max && !isCircular) {
+        p.setColor(QPalette::Base, QColor(255,200,200));
+        ui->buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
+    } else {
+        ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true);
+    }
+    ui->startEdit->setPalette(p);
+    ui->endEdit->setPalette(p);
+}
+
 void MultipleRangeSelector::sl_buttonClicked(QAbstractButton* b){
     bool singleMode = b == ui->singleButton;
 
@@ -346,8 +361,13 @@ QVector<U2Region> MultipleRangeSelector::getSelectedRegions(){
         int en = ui->endEdit->text().toInt(&ok);
         assert(ok);
 
-        U2Region r(st-1, en - st + 1);
-        currentRegions.append(r);
+        if (isCircular && st > en ) {
+            currentRegions.append(U2Region(0, en));
+            currentRegions.append(U2Region(st - 1, seqLen - st + 1));
+            }
+        else {
+            currentRegions.append(U2Region(st - 1, en - st + 1));
+        }
 
     }else{
         QByteArray locEditText = ui->multipleRegionEdit->text().toLatin1();
diff --git a/src/corelibs/U2Gui/src/util/RangeSelector.h b/src/corelibs/U2Gui/src/util/RangeSelector.h
index 3345735..774e7a3 100644
--- a/src/corelibs/U2Gui/src/util/RangeSelector.h
+++ b/src/corelibs/U2Gui/src/util/RangeSelector.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,22 +22,13 @@
 #ifndef _U2_RANGE_SELECTOR_H_
 #define _U2_RANGE_SELECTOR_H_ 
 
-
-
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QToolButton>
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QDialog>
-#endif
+#include <QLabel>
+#include <QLineEdit>
+#include <QToolButton>
+#include <QDialog>
 
 class Ui_RangeSelectionDialog;
 
@@ -64,7 +55,7 @@ private slots:
     void sl_onMinButtonClicked(bool);
     void sl_onMaxButtonClicked(bool);
     void sl_onReturnPressed();
-
+    
 private:
     void init();
     void exec();
@@ -79,6 +70,7 @@ private:
     QToolButton*        minButton;
     QToolButton*        maxButton;
     QLabel*             rangeLabel;
+    
 
 //     QLabel*             multiRangeLabel;
 //     QLineEdit*          multiRangeEdit;
@@ -108,6 +100,7 @@ private:
     int                 seqLen;
     QVector<U2Region>   selectedRanges;
     bool                isCircular;
+    QPalette            normalPalette;
 
     Ui_RangeSelectionDialog* ui;
 
@@ -117,6 +110,8 @@ protected slots:
     void sl_minButton();
     void sl_maxButton();
     void sl_returnPressed();
+    void sl_textEdited(const QString &);
+    
 };
 
 }//namespace
diff --git a/src/corelibs/U2Gui/src/util/RegionSelector.cpp b/src/corelibs/U2Gui/src/util/RegionSelector.cpp
index 2c937ad..c691c53 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelector.cpp
+++ b/src/corelibs/U2Gui/src/util/RegionSelector.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -117,7 +117,7 @@ void RegionSelector::initLayout() {
     startEdit->setAlignment(Qt::AlignRight);
 
     endEdit = new RegionLineEdit(this, tr("Set maximum"), maxLen);
-    endEdit->setValidator(new QIntValidator(1, maxLen, startEdit));
+    endEdit->setValidator(new QIntValidator(1, maxLen, endEdit));
     endEdit->setMinimumWidth(w);
     endEdit->setAlignment(Qt::AlignRight);
 
@@ -133,6 +133,7 @@ void RegionSelector::initLayout() {
         l->addWidget(startEdit, 1, 0);
         l->addWidget(new QLabel(tr("-"), gb), 1, 1);
         l->addWidget(endEdit, 1, 2);
+        l->addWidget(new QLabel(" ", gb), 2, 0);
 
         QVBoxLayout* rootLayout = new QVBoxLayout(this);
         rootLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
@@ -165,8 +166,7 @@ void RegionSelector::initLayout() {
 //! only for empty field highlight
 void RegionLineEdit::focusOutEvent ( QFocusEvent * event) {
     bool ok = false;
-    int value = text().toInt(&ok);
-    Q_UNUSED(value);
+    text().toInt(&ok);
     if (!ok) {
         QPalette p = palette();
         p.setColor(QPalette::Base, QColor(255,200,200));//pink color
diff --git a/src/corelibs/U2Gui/src/util/RegionSelector.h b/src/corelibs/U2Gui/src/util/RegionSelector.h
index 370ab43..8444218 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelector.h
+++ b/src/corelibs/U2Gui/src/util/RegionSelector.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
index 0348cd3..9d2559f 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorController.h b/src/corelibs/U2Gui/src/util/RegionSelectorController.h
index 18f70f1..11b2e76 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelectorController.h
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp
index bb44354..b9330c8 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h
index 9797982..0bb79d3 100644
--- a/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h
+++ b/src/corelibs/U2Gui/src/util/RegionSelectorWithExcludedRegion.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
index 3031a2e..f144f8c 100644
--- a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -55,7 +55,7 @@ RemovePartFromSequenceDialogController::RemovePartFromSequenceDialogController(U
       saveController(NULL)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222984");
+    new HelpButton(this, ui->buttonBox, "20874888");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
index c913d3e..af89cdf 100644
--- a/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/RemovePartFromSequenceDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp b/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp
index 60115c8..9c67f06 100644
--- a/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp
+++ b/src/corelibs/U2Gui/src/util/SaveDocumentController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SaveDocumentController.h b/src/corelibs/U2Gui/src/util/SaveDocumentController.h
index 4e11a06..eb69cb6 100644
--- a/src/corelibs/U2Gui/src/util/SaveDocumentController.h
+++ b/src/corelibs/U2Gui/src/util/SaveDocumentController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ public:
 
     QString                     defaultFileName;    // filename set by default
     DocumentFormatId            defaultFormatId;    // format selected by default
-    QString                     defaultDomain;      // domain for the last directory
+    QString                     defaultDomain;      // domain for the last folder
 
     QString                     saveTitle;          // a title for save file dialog
     QWidget*                    parentWidget;       // parent widget for file dialog
diff --git a/src/corelibs/U2Gui/src/util/ScaleBar.cpp b/src/corelibs/U2Gui/src/util/ScaleBar.cpp
index 9fd6beb..c0ac09a 100644
--- a/src/corelibs/U2Gui/src/util/ScaleBar.cpp
+++ b/src/corelibs/U2Gui/src/util/ScaleBar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,59 +19,107 @@
  * MA 02110-1301, USA.
  */
 
-#include "ScaleBar.h"
+#include <QAction>
+#include <QSlider>
+#include <QToolButton>
+#include <QVBoxLayout>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include "ScaleBar.h"
 
 namespace U2 {
 
-    ScaleBar::ScaleBar(QWidget* parent) : QWidget(parent)    
-    {
-        scaleBar = new QSlider(Qt::Vertical);
-        scaleBar->setTracking(true);
-        scaleBar->setRange(100,2000);
-        scaleBar->setTickPosition(QSlider::TicksLeft);
-        scaleBar->setTickInterval(100);
-        connect(scaleBar,SIGNAL(valueChanged(int)),SIGNAL(valueChanged(int)));
-
-        minusButton = new QToolButton();
-        //icon
-        minusButton->setText(QString(tr("-")));
-        minusButton->setIcon(QIcon(":core/images/minus.png"));
-        minusButton->setFixedSize(20,20);
-        minusButton->setAutoRepeat(true);
-        minusButton->setAutoRepeatInterval(20);
-        plusButton = new QToolButton();
-        //icon
-        plusButton->setText(QString(tr("+")));
-        plusButton->setIcon(QIcon(":core/images/plus.png"));
-        plusButton->setAutoRepeat(true);
-        plusButton->setAutoRepeatInterval(20);
-        plusButton->setFixedSize(20,20);
-        connect(minusButton,SIGNAL(clicked()),SLOT(sl_minusButtonClicked()));
-        connect(plusButton,SIGNAL(clicked()),SLOT(sl_plusButtonClicked()));
-
-        //layout
-        QVBoxLayout *zoomLayout = new QVBoxLayout();
-        zoomLayout->addWidget(plusButton);
-        zoomLayout->addWidget(scaleBar);
-        zoomLayout->addWidget(minusButton);
-        zoomLayout->setMargin(0);
-        zoomLayout->setSpacing(0);
-        setLayout(zoomLayout);
-        setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
-    }
-
-    void ScaleBar::sl_minusButtonClicked() {
-        scaleBar->setValue(scaleBar->value()-scaleBar->pageStep());
-    }
-
-    void ScaleBar::sl_plusButtonClicked() {
-        scaleBar->setValue(scaleBar->value()+scaleBar->pageStep());
-    }
-
-}//namespace
+ScaleBar::ScaleBar(Qt::Orientation ori, QWidget* parent)
+    : QWidget(parent)
+{
+    scaleBar = new QSlider(ori);
+    scaleBar->setTracking(true);
+    scaleBar->setRange(100, 2000);
+    scaleBar->setTickPosition(QSlider::TicksLeft);
+    scaleBar->setTickInterval(100);
+    connect(scaleBar, SIGNAL(valueChanged(int)), SIGNAL(valueChanged(int)));
+    connect(scaleBar, SIGNAL(valueChanged(int)), SLOT(sl_updateState()));
+
+    minusAction = new QAction(QIcon(":core/images/minus.png"), tr("Decrease peaks height"), this);
+    connect(minusAction, SIGNAL(triggered()), SLOT(sl_minusButtonClicked()));
+
+    minusButton = new QToolButton();
+    minusButton->setText(QString(tr("Decrease peaks height")));
+    minusButton->setIcon(QIcon(":core/images/minus.png"));
+    minusButton->setFixedSize(20, 20);
+    minusButton->setAutoRepeat(true);
+    minusButton->setAutoRepeatInterval(20);
+    connect(minusButton, SIGNAL(clicked()), minusAction, SLOT(trigger()));
+
+    plusAction = new QAction(QIcon(":core/images/plus.png"), tr("Increase peaks height"), this);
+    connect(plusAction, SIGNAL(triggered()), SLOT(sl_plusButtonClicked()));
+
+    plusButton = new QToolButton(this);
+    plusButton->setText(QString(tr("Increase peaks height")));
+    plusButton->setIcon(QIcon(":core/images/plus.png"));
+    plusButton->setAutoRepeat(true);
+    plusButton->setAutoRepeatInterval(20);
+    plusButton->setFixedSize(20, 20);
+    connect(plusButton, SIGNAL(clicked()), plusAction, SLOT(trigger()));
+
+    //layout
+    QBoxLayout *zoomLayout = new QBoxLayout(ori == Qt::Vertical ? QBoxLayout::TopToBottom : QBoxLayout::RightToLeft);
+    zoomLayout->addWidget(plusButton);
+    zoomLayout->addWidget(scaleBar);
+    zoomLayout->addWidget(minusButton);
+    zoomLayout->setMargin(0);
+    zoomLayout->setSpacing(0);
+    setLayout(zoomLayout);
+    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+
+    sl_updateState();
+}
+
+int ScaleBar::value() const {
+    return scaleBar->value();
+}
+
+void ScaleBar::setValue(int value) {
+    scaleBar->setValue(value);
+}
+
+void ScaleBar::setRange(int minumum, int maximum) {
+    scaleBar->setRange(minumum, maximum);
+    sl_updateState();
+}
+
+void ScaleBar::setTickInterval(int interval) {
+    scaleBar->setTickInterval(interval);
+}
+
+QAction *ScaleBar::getPlusAction() const {
+    return plusAction;
+}
+
+QAction *ScaleBar::getMinusAction() const {
+    return minusAction;
+}
+
+QAbstractButton *ScaleBar::getPlusButton() const {
+    return plusButton;
+}
+
+QAbstractButton *ScaleBar::getMinusButton() const {
+    return minusButton;
+}
+
+void ScaleBar::sl_minusButtonClicked() {
+    scaleBar->setValue(scaleBar->value()-scaleBar->pageStep());
+}
+
+void ScaleBar::sl_plusButtonClicked() {
+    scaleBar->setValue(scaleBar->value()+scaleBar->pageStep());
+}
+
+void ScaleBar::sl_updateState() {
+    minusAction->setEnabled(scaleBar->value() != scaleBar->minimum());
+    minusButton->setEnabled(minusAction->isEnabled());
+    plusAction->setEnabled(scaleBar->value() != scaleBar->maximum());
+    plusButton->setEnabled(plusAction->isEnabled());
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/ScaleBar.h b/src/corelibs/U2Gui/src/util/ScaleBar.h
index 9ce0ccf..b8aef3e 100644
--- a/src/corelibs/U2Gui/src/util/ScaleBar.h
+++ b/src/corelibs/U2Gui/src/util/ScaleBar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,40 +22,50 @@
 #ifndef _U2_SCALE_BAR_H_
 #define _U2_SCALE_BAR_H_
 
+#include <QWidget>
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSlider>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QSlider>
-#include <QtWidgets/QToolButton>
-#endif
+class QAbstractButton;
+class QAction;
+class QSlider;
+class QToolButton;
 
 namespace U2 {
 
 class U2GUI_EXPORT ScaleBar : public QWidget {
     Q_OBJECT
 public:
-    ScaleBar(QWidget* parent = 0);
-    QSlider* slider() const {return scaleBar;}
-    int value() const {return scaleBar->value();}
-    void setValue(int v) {scaleBar->setValue(v);}
+    ScaleBar(Qt::Orientation ori = Qt::Vertical, QWidget* parent = 0);
+
+    int value() const;
+    void setValue(int value);
+
+    void setRange(int minumum, int maximum);
+    void setTickInterval(int interval);
+
+    QAction *getPlusAction() const;
+    QAction *getMinusAction() const;
+
+    QAbstractButton *getPlusButton() const;
+    QAbstractButton *getMinusButton() const;
 
 signals:
-    void valueChanged(int);
+    void valueChanged(int value);
 
 private slots:
     void sl_minusButtonClicked();
     void sl_plusButtonClicked();
+    void sl_updateState();
 
 protected:
-
-    QSlider*                    scaleBar;
-    QToolButton*                minusButton;
-    QToolButton*                plusButton;
+    QSlider *scaleBar;
+    QAction *minusAction;
+    QAction *plusAction;
+    QToolButton *plusButton;
+    QToolButton *minusButton;
 };
 
-} // namespace
+}   // namespace U2
 
-#endif
+#endif // _U2_SCALE_BAR_H_
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.cpp b/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.cpp
index 693bf82..16abc07 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QTextEdit>
-#include <QtGui/QBoxLayout>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QBoxLayout>
-#endif
+#include <QLineEdit>
+#include <QTextEdit>
+#include <QBoxLayout>
 
 #include "ScriptHighlighter.h"
 
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.h b/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.h
index fe2549e..dcfd728 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.h
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDelegate.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_SCRIPT_EDITOR_DELEGATE_H_
 #define _U2_SCRIPT_EDITOR_DELEGATE_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 class QBoxLayout;
 class QLineEdit;
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
index eaba60b..2346eed 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-
-#include <QtGui/QMouseEvent>
-
-#include <QtScript/QScriptEngine>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QFile>
+#include <QMouseEvent>
+#include <QScriptEngine>
+#include <QMessageBox>
 
 #include <U2Core/L10n.h>
 
@@ -48,7 +41,7 @@ ScriptEditorDialog::ScriptEditorDialog(QWidget* w, const QString& roHeaderText,
 : QDialog(w), ui(new Ui_ScriptEditorDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223341");
+    new HelpButton(this, ui->buttonBox, "20875270");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Done"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.h b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.h
index d8a1d9c..2820263 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorDialog.h
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 class Ui_ScriptEditorDialog;
 
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorWidget.cpp b/src/corelibs/U2Gui/src/util/ScriptEditorWidget.cpp
index 1559671..a5741c1 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QTextEdit>
-#include <QtGui/QSplitter>
-#include <QtGui/QBoxLayout>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QSplitter>
-#include <QtWidgets/QBoxLayout>
-#endif
+#include <QLineEdit>
+#include <QTextEdit>
+#include <QSplitter>
+#include <QBoxLayout>
 
 #include "ScriptHighlighter.h"
 #include "ScriptEditorWidget.h"
diff --git a/src/corelibs/U2Gui/src/util/ScriptEditorWidget.h b/src/corelibs/U2Gui/src/util/ScriptEditorWidget.h
index 1fd33ca..5e3030c 100644
--- a/src/corelibs/U2Gui/src/util/ScriptEditorWidget.h
+++ b/src/corelibs/U2Gui/src/util/ScriptEditorWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_SCRIPT_EDITOR_WIDGET_H_
 #define _U2_SCRIPT_EDITOR_WIDGET_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include <U2Core/global.h>
 #include "ScriptEditorDelegate.h"
diff --git a/src/corelibs/U2Gui/src/util/ScriptHighlighter.cpp b/src/corelibs/U2Gui/src/util/ScriptHighlighter.cpp
index b8e1ff8..20844d0 100644
--- a/src/corelibs/U2Gui/src/util/ScriptHighlighter.cpp
+++ b/src/corelibs/U2Gui/src/util/ScriptHighlighter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/ScriptHighlighter.h b/src/corelibs/U2Gui/src/util/ScriptHighlighter.h
index e259222..1ff6c21 100644
--- a/src/corelibs/U2Gui/src/util/ScriptHighlighter.h
+++ b/src/corelibs/U2Gui/src/util/ScriptHighlighter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_SCRIPT_HIGHLIGHTER_H_
 #define _U2_SCRIPT_HIGHLIGHTER_H_
 
-#include <QtGui/QSyntaxHighlighter>
+#include <QSyntaxHighlighter>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/SearchBox.cpp b/src/corelibs/U2Gui/src/util/SearchBox.cpp
new file mode 100644
index 0000000..7b0e994
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/SearchBox.cpp
@@ -0,0 +1,123 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SearchBox.h"
+
+#include <QLabel>
+#include <QMovie>
+#include <QStyle>
+#include <QToolButton>
+
+static const QString LABEL_STYLE_SHEET = "border: 0px; padding: 0px;";
+static const QString CLEAR_BUTTON_STYLE_SHEET = "border: 0px; padding: 1px 0px 0px 0px;";
+
+namespace U2 {
+
+SearchBox::SearchBox(QWidget *p)
+    : QLineEdit(p), firstShow(true), progressLabel(new QLabel(this)), progressMovie(new QMovie(":/core/images/progress.gif", QByteArray(), progressLabel)),
+    searchIconLabel(new QLabel(this)), clearButton(new QToolButton(this))
+{
+    setObjectName("nameFilterEdit");
+
+    progressLabel->setStyleSheet(LABEL_STYLE_SHEET);
+    progressLabel->setMovie(progressMovie);
+    progressMovie->start();
+
+    searchIconLabel->setStyleSheet(LABEL_STYLE_SHEET);
+    searchIconLabel->setPixmap(QPixmap(":/core/images/zoom_whole.png"));
+
+    clearButton->setStyleSheet(CLEAR_BUTTON_STYLE_SHEET);
+    clearButton->setIcon(QIcon(":/core/images/close_small.png"));
+    clearButton->setCursor(Qt::ArrowCursor);
+    clearButton->setVisible(false);
+    connect(clearButton, SIGNAL(clicked()), SLOT(sl_filterCleared()));
+    connect(this, SIGNAL(textChanged(const QString &)), SLOT(sl_textChanged(const QString &)));
+    clearButton->setObjectName("project filter clear button");
+
+    initStyle();
+    setPlaceholderText(tr("Search..."));
+}
+
+void SearchBox::sl_filteringStarted() {
+    progressLabel->setVisible(true);
+    progressMovie->start();
+    updateInternalControlsPosition();
+}
+
+void SearchBox::sl_filteringFinished() {
+    progressMovie->stop();
+    progressLabel->setVisible(false);
+    updateInternalControlsPosition();
+}
+
+void SearchBox::sl_filterCleared() {
+    clearButton->setVisible(false);
+    setText(QString());
+}
+
+void SearchBox::sl_textChanged(const QString &text) {
+    clearButton->setVisible(!text.isEmpty());
+}
+
+void SearchBox::paintEvent(QPaintEvent *event) {
+    if (firstShow) {
+        firstShow = false;
+        sl_filteringFinished();
+    }
+    QLineEdit::paintEvent(event);
+}
+
+void SearchBox::initStyle() {
+    const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+    const QSize progressLabelSize = progressLabel->sizeHint();
+    const QSize iconLabelSize = searchIconLabel->sizeHint();
+    const QSize clearButtonSize = clearButton->sizeHint();
+    const QSize minimumWidgetSize = minimumSizeHint();
+
+    const int rightPadding = progressLabelSize.width() + clearButtonSize.width() + frameWidth + 1;
+    const int leftPadding = iconLabelSize.width() + frameWidth + 1;
+    setStyleSheet(QString("QLineEdit {padding-right: %1px; padding-left: %2px}").arg(rightPadding).arg(leftPadding));
+
+    const int minimumContentWidth = iconLabelSize.width() + progressLabelSize.width() + clearButtonSize.width() + frameWidth * 2 + 2;
+    const int minimumContentHeight = progressLabelSize.height() + frameWidth * 2 + 2;
+    setMinimumSize(qMax(minimumWidgetSize.width(), minimumContentWidth), qMax(minimumWidgetSize.height(), minimumContentHeight));
+}
+
+void SearchBox::updateInternalControlsPosition() {
+    const QSize progressLabelSize = progressLabel->sizeHint();
+    const QSize iconLabelSize = searchIconLabel->sizeHint();
+    const QSize clearButtonSize = clearButton->sizeHint();
+    const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
+    const QRect widgetRect = rect();
+
+    progressLabel->move(widgetRect.right() - 2 * frameWidth - progressLabelSize.width(),
+        (widgetRect.bottom() - progressLabelSize.height() + 1) / 2);
+    clearButton->move(widgetRect.right() - (progressLabel->isVisible() ? progressLabelSize.width() + 2 * frameWidth : 0) - clearButtonSize.width(),
+        (widgetRect.bottom() - clearButtonSize.height() + 1) / 2);
+    searchIconLabel->move(widgetRect.left() + 2 * frameWidth, (widgetRect.bottom() - iconLabelSize.height() + 1) / 2);
+}
+
+void SearchBox::resizeEvent(QResizeEvent *event) {
+    updateInternalControlsPosition();
+    QLineEdit::resizeEvent(event);
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2Gui/src/util/SearchBox.h b/src/corelibs/U2Gui/src/util/SearchBox.h
new file mode 100644
index 0000000..fbbe5b2
--- /dev/null
+++ b/src/corelibs/U2Gui/src/util/SearchBox.h
@@ -0,0 +1,64 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEARCH_BOX_H_
+#define _U2_SEARCH_BOX_H_
+
+#include <U2Core/global.h>
+
+#include <QLineEdit>
+
+class QLabel;
+class QMovie;
+class QToolButton;
+
+namespace U2 {
+
+class U2GUI_EXPORT SearchBox : public QLineEdit {
+    Q_OBJECT
+public:
+    SearchBox(QWidget *p);
+
+public slots:
+    void sl_filteringStarted();
+    void sl_filteringFinished();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+    void paintEvent(QPaintEvent *event);
+
+private slots:
+    void sl_filterCleared();
+    void sl_textChanged(const QString &text);
+
+private:
+    void initStyle();
+    void updateInternalControlsPosition();
+
+    bool firstShow;
+    QLabel *progressLabel;
+    QMovie *progressMovie;
+    QLabel *searchIconLabel;
+    QToolButton *clearButton;
+};
+
+} // namespace U2
+#endif // _U2_SEARCH_BOX_H_
diff --git a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
index 7c09669..85f3a16 100644
--- a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
+++ b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,7 +44,7 @@ SearchGenbankSequenceDialogController::SearchGenbankSequenceDialogController(QWi
 {
     ui = new Ui_SearchGenbankSequenceDialog();
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18222956");
+    new HelpButton(this, ui->buttonBox, "20874860");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Download"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
@@ -67,12 +67,7 @@ SearchGenbankSequenceDialogController::SearchGenbankSequenceDialogController(QWi
         SLOT( sl_taskStateChanged( Task * ) ) );
 
     ui->treeWidget->header()->setStretchLastSection(false);
-#if (QT_VERSION < 0x050000) //Qt 5
-    ui->treeWidget->header()->setResizeMode(1, QHeaderView::Stretch);
-#else
     ui->treeWidget->header()->setSectionResizeMode(1, QHeaderView::Stretch);
-#endif
-
 }
 
 SearchGenbankSequenceDialogController::~SearchGenbankSequenceDialogController()
diff --git a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
index 8204195..51b39a2 100644
--- a/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
+++ b/src/corelibs/U2Gui/src/util/SearchGenbankSequenceDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,19 +26,13 @@
 
 #include <U2Core/LoadRemoteDocumentTask.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QDialog>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QComboBox>
-#endif
-
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QScopedPointer>
+#include <QLineEdit>
+#include <QDialog>
+#include <QComboBox>
+
+#include <QList>
+#include <QString>
+#include <QScopedPointer>
 
 class Ui_SearchGenbankSequenceDialog;
 
diff --git a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
index f503ddc..00be82f 100644
--- a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
+++ b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.h b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.h
index 44133e3..90fa842 100644
--- a/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.h
+++ b/src/corelibs/U2Gui/src/util/SeqPasterWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SequenceTextEdit.cpp b/src/corelibs/U2Gui/src/util/SequenceTextEdit.cpp
index 13b5df8..6a411fd 100644
--- a/src/corelibs/U2Gui/src/util/SequenceTextEdit.cpp
+++ b/src/corelibs/U2Gui/src/util/SequenceTextEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SequenceTextEdit.h b/src/corelibs/U2Gui/src/util/SequenceTextEdit.h
index e798984..94463bb 100644
--- a/src/corelibs/U2Gui/src/util/SequenceTextEdit.h
+++ b/src/corelibs/U2Gui/src/util/SequenceTextEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/SuggestCompleter.cpp b/src/corelibs/U2Gui/src/util/SuggestCompleter.cpp
index 0d77435..757aed1 100644
--- a/src/corelibs/U2Gui/src/util/SuggestCompleter.cpp
+++ b/src/corelibs/U2Gui/src/util/SuggestCompleter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <QTreeWidget>
 #include <QHeaderView>
@@ -56,7 +56,7 @@ BaseCompleter::BaseCompleter( CompletionFiller *filler, QLineEdit *parent /* = 0
     editor->installEventFilter(this);
 
     connect(popup, SIGNAL(itemClicked(QTreeWidgetItem*,int)), SLOT(doneCompletion()));
-    connect(editor, SIGNAL(textEdited(QString)), SLOT(sl_textEdited(QString)));
+    connect(editor, SIGNAL(textChanged(QString)), SLOT(sl_textChanged(QString)));
 }
 
 BaseCompleter::~BaseCompleter(){
@@ -155,12 +155,19 @@ void BaseCompleter::doneCompletion(){
     }
 }
 
-void BaseCompleter::sl_textEdited( const QString& typedText){
+void BaseCompleter::sl_textChanged( const QString& typedText){
     if (typedText.isEmpty()){
         popup->hide();
         return;
     }
-    showCompletion(filler->getSuggestions(typedText));
+    QStringList suggestions = filler->getSuggestions(typedText);
+    bool haveSingleValidChoice = suggestions.length() == 1 && suggestions.first() == typedText;
+    if (haveSingleValidChoice) {
+        lastChosenItemIndex = 0;
+        emit si_editingFinished();
+    } else {
+        showCompletion(filler->getSuggestions(typedText));
+    }
 }
 
 int BaseCompleter::getLastChosenItemIndex() const {
diff --git a/src/corelibs/U2Gui/src/util/SuggestCompleter.h b/src/corelibs/U2Gui/src/util/SuggestCompleter.h
index b65c71c..0e5e636 100644
--- a/src/corelibs/U2Gui/src/util/SuggestCompleter.h
+++ b/src/corelibs/U2Gui/src/util/SuggestCompleter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -64,7 +64,7 @@ signals:
 
 protected slots:
     void doneCompletion();
-    void sl_textEdited(const QString&);
+    void sl_textChanged(const QString&);
 
 private:
     CompletionFiller *filler;
diff --git a/src/corelibs/U2Gui/src/util/TreeWidgetUtils.cpp b/src/corelibs/U2Gui/src/util/TreeWidgetUtils.cpp
index fcc223f..4bfec31 100644
--- a/src/corelibs/U2Gui/src/util/TreeWidgetUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/TreeWidgetUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/TreeWidgetUtils.h b/src/corelibs/U2Gui/src/util/TreeWidgetUtils.h
index 46ba86f..bf8a897 100644
--- a/src/corelibs/U2Gui/src/util/TreeWidgetUtils.h
+++ b/src/corelibs/U2Gui/src/util/TreeWidgetUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define _U2_TREE_WIDGET_UTILS_H_
 
 #include <U2Core/global.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 namespace U2{
 
diff --git a/src/corelibs/U2Gui/src/util/U2FileDialog.cpp b/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
index 3721857..2ec80b9 100644
--- a/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/U2FileDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QApplication>
+#include <QMainWindow>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Gui/src/util/U2FileDialog.h b/src/corelibs/U2Gui/src/util/U2FileDialog.h
index fbc42fb..f80c488 100644
--- a/src/corelibs/U2Gui/src/util/U2FileDialog.h
+++ b/src/corelibs/U2Gui/src/util/U2FileDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_FILE_DIALOG_H_
 #define _U2_FILE_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QFileDialog>
-#else
-#include <QtWidgets/QFileDialog>
-#endif
+#include <QFileDialog>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/util/U2LongLongValidator.cpp b/src/corelibs/U2Gui/src/util/U2LongLongValidator.cpp
index a39321c..745f0c7 100644
--- a/src/corelibs/U2Gui/src/util/U2LongLongValidator.cpp
+++ b/src/corelibs/U2Gui/src/util/U2LongLongValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/U2LongLongValidator.h b/src/corelibs/U2Gui/src/util/U2LongLongValidator.h
index 0569f67..edbdc56 100644
--- a/src/corelibs/U2Gui/src/util/U2LongLongValidator.h
+++ b/src/corelibs/U2Gui/src/util/U2LongLongValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_LONG_LONG_VALIDATOR_H_
 #define _U2_LONG_LONG_VALIDATOR_H_
 
-#include <QtGui/QValidator>
+#include <QValidator>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.cpp b/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.cpp
index a7d8506..298b26a 100644
--- a/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.cpp
+++ b/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.h b/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.h
index 711a07a..660732f 100644
--- a/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.h
+++ b/src/corelibs/U2Gui/src/util/WidgetWithLocalToolbar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.cpp b/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.cpp
index 003d980..2a4c100 100644
--- a/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.cpp
+++ b/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include <U2Core/U2SafePoints.h>
 
@@ -32,9 +27,9 @@
 
 namespace U2 {
 
-const QString ImageExportTaskSettings::SVG_FORMAT = "svg";
-const QString ImageExportTaskSettings::PS_FORMAT = "ps";
-const QString ImageExportTaskSettings::PDF_FORMAT = "pdf";
+const QString ImageExportTaskSettings::SVG_FORMAT = "SVG";
+const QString ImageExportTaskSettings::PS_FORMAT = "PS";
+const QString ImageExportTaskSettings::PDF_FORMAT = "PDF";
 
 ImageExportTaskSettings::ImageExportTaskSettings(const QString &fileName,
                                                  const QString &format,
diff --git a/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.h b/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.h
index e67a7fb..50ab1f2 100644
--- a/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.h
+++ b/src/corelibs/U2Gui/src/util/imageExport/ImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QSize>
+#include <QSize>
 
 #define IMAGE_SIZE_LIMIT 32768
 
diff --git a/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.cpp b/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.cpp
index f9a7e76..fd6fcaa 100644
--- a/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.cpp
+++ b/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,18 +23,12 @@
 
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QFile>
-#include <QtGui/QPainter>
-#include <QtSvg/QSvgGenerator>
-#include <QtXml/QDomDocument>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPrinter>
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#include <QtPrintSupport/QPrinter>
-#endif
-
+#include <QFile>
+#include <QPainter>
+#include <QSvgGenerator>
+#include <QDomDocument>
+#include <QWidget>
+#include <QPrinter>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.h b/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.h
index cdf2ab9..ef37d52 100644
--- a/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.h
+++ b/src/corelibs/U2Gui/src/util/imageExport/WidgetScreenshotExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/logview/LogView.cpp b/src/corelibs/U2Gui/src/util/logview/LogView.cpp
index a816315..a06f757 100644
--- a/src/corelibs/U2Gui/src/util/logview/LogView.cpp
+++ b/src/corelibs/U2Gui/src/util/logview/LogView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,19 +28,12 @@
 #include <U2Core/Timer.h>
 #include <U2Core/Counter.h>
 
-#include <QtCore/QDate>
-#include <QtCore/QThread>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QDate>
+#include <QThread>
+#include <QApplication>
+#include <QAction>
+#include <QMenu>
+#include <QVBoxLayout>
 
 namespace U2 {
 
@@ -76,7 +69,7 @@ void LogViewWidget::init() {
 
     settings.reinitAll();
 
-    showSettingsAction = new QAction(tr("Settings"), this);
+    showSettingsAction = new QAction(tr("Settings..."), this);
     showSettingsAction->setIcon(QIcon(":ugene/images/log_settings.png"));
     connect(showSettingsAction, SIGNAL(triggered()), SLOT(sl_openSettingsDialog()));
     
diff --git a/src/corelibs/U2Gui/src/util/logview/LogView.h b/src/corelibs/U2Gui/src/util/logview/LogView.h
index b748b90..9747a93 100644
--- a/src/corelibs/U2Gui/src/util/logview/LogView.h
+++ b/src/corelibs/U2Gui/src/util/logview/LogView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,20 +24,13 @@
 
 #include <LogSettings.h>
 
-#include <QtCore/QHash>
-#include <QtCore/QRegExp>
-#include <QtCore/QTimer>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#include <QtGui/QPlainTextEdit>
-#include <QtGui/QShortcut>
-#else
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QPlainTextEdit>
-#include <QtWidgets/QShortcut>
-#endif
-
-#include <QtGui/QSyntaxHighlighter>
+#include <QHash>
+#include <QRegExp>
+#include <QTimer>
+#include <QLineEdit>
+#include <QPlainTextEdit>
+#include <QShortcut>
+#include <QSyntaxHighlighter>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Gui/src/util/project/ConnectionHelper.cpp b/src/corelibs/U2Gui/src/util/project/ConnectionHelper.cpp
index 754556e..b86b5b5 100644
--- a/src/corelibs/U2Gui/src/util/project/ConnectionHelper.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ConnectionHelper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ConnectionHelper.h b/src/corelibs/U2Gui/src/util/project/ConnectionHelper.h
index 62f230f..fd650aa 100644
--- a/src/corelibs/U2Gui/src/util/project/ConnectionHelper.h
+++ b/src/corelibs/U2Gui/src/util/project/ConnectionHelper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/DocumentFolders.cpp b/src/corelibs/U2Gui/src/util/project/DocumentFolders.cpp
index 103c62a..80e24ed 100644
--- a/src/corelibs/U2Gui/src/util/project/DocumentFolders.cpp
+++ b/src/corelibs/U2Gui/src/util/project/DocumentFolders.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/DocumentFolders.h b/src/corelibs/U2Gui/src/util/project/DocumentFolders.h
index d6a57ec..66cdb7f 100644
--- a/src/corelibs/U2Gui/src/util/project/DocumentFolders.h
+++ b/src/corelibs/U2Gui/src/util/project/DocumentFolders.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DOCUMENTFOLDERS_H_
 #define _U2_DOCUMENTFOLDERS_H_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Core/U2OpStatus.h>
 #include <U2Core/U2Type.h>
diff --git a/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp b/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp
index bc8e868..9e62299 100644
--- a/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp
+++ b/src/corelibs/U2Gui/src/util/project/EditableTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/EditableTreeView.h b/src/corelibs/U2Gui/src/util/project/EditableTreeView.h
index 8d96a8b..150f974 100644
--- a/src/corelibs/U2Gui/src/util/project/EditableTreeView.h
+++ b/src/corelibs/U2Gui/src/util/project/EditableTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.cpp b/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.cpp
index 9867abb..222fb0f 100644
--- a/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.cpp
+++ b/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.h b/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.h
index 82a92c6..a38fe35 100644
--- a/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.h
+++ b/src/corelibs/U2Gui/src/util/project/FilteredProjectGroup.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.cpp b/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.cpp
index 65bfb64..085d6c9 100644
--- a/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.cpp
+++ b/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,34 +35,34 @@ FilteredProjectItemDelegate::FilteredProjectItemDelegate(QObject *parent)
 }
 
 void FilteredProjectItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
-    QStyleOptionViewItemV4 optionV4 = option;
-    initStyleOption(&optionV4, index);
+    QStyleOptionViewItem localOption = option;
+    initStyleOption(&localOption, index);
 
-    QStyle *style = optionV4.widget ? optionV4.widget->style() : QApplication::style();
+    QStyle *style = localOption.widget ? localOption.widget->style() : QApplication::style();
 
     QTextDocument doc;
-    doc.setHtml(optionV4.text);
+    doc.setHtml(localOption.text);
 
     painter->save();
 
     // Painting item without text
-    optionV4.text = QString();
-    style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter);
+    localOption.text = QString();
+    style->drawControl(QStyle::CE_ItemViewItem, &localOption, painter);
 
     QAbstractTextDocumentLayout::PaintContext ctx;
 
     // Highlighting text if item is selected
-    if (0 != (optionV4.state & QStyle::State_Selected)) {
-        ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));
+    if (0 != (localOption.state & QStyle::State_Selected)) {
+        ctx.palette.setColor(QPalette::Text, localOption.palette.color(QPalette::Active, QPalette::HighlightedText));
     } else {
-        ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::Text));
+        ctx.palette.setColor(QPalette::Text, localOption.palette.color(QPalette::Active, QPalette::Text));
     }
 
-    if (0 == (optionV4.state & QStyle::State_Active)) {
-        ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::Text));
+    if (0 == (localOption.state & QStyle::State_Active)) {
+        ctx.palette.setColor(QPalette::Text, localOption.palette.color(QPalette::Active, QPalette::Text));
     }
 
-    const QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4);
+    const QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &localOption);
     painter->translate(textRect.topLeft());
     painter->setClipRect(textRect.translated(-textRect.topLeft()));
     doc.documentLayout()->draw(painter, ctx);
@@ -71,14 +71,14 @@ void FilteredProjectItemDelegate::paint(QPainter *painter, const QStyleOptionVie
 }
 
 QSize FilteredProjectItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const {
-    QStyleOptionViewItemV4 optionV4 = option;
-    initStyleOption(&optionV4, index);
+    QStyleOptionViewItem localOption = option;
+    initStyleOption(&localOption, index);
 
     QTextDocument doc;
-    doc.setHtml(optionV4.text);
+    doc.setHtml(localOption.text);
     doc.setDocumentMargin(index.parent().isValid() ? 1 : 2);
-    doc.setDefaultFont(optionV4.font);
+    doc.setDefaultFont(localOption.font);
     return QSize(doc.idealWidth(), doc.size().height());
 }
 
-}
\ No newline at end of file
+}
diff --git a/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.h b/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.h
index 8b48de5..97f754d 100644
--- a/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.h
+++ b/src/corelibs/U2Gui/src/util/project/FilteredProjectItemDelegate.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.cpp b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.cpp
index f789dcf..a91c0a7 100644
--- a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+#include <QPushButton>
 
 #include <U2Core/Folder.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
index 0b46aa9..8d6bbb0 100644
--- a/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
+++ b/src/corelibs/U2Gui/src/util/project/FolderNameDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_FOLDER_NANE_DIALOG_H_
 #define _U2_FOLDER_NANE_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include "ui_FolderNameDialog.h"
 
diff --git a/src/corelibs/U2Gui/src/util/project/LoadDocumentTaskProvider.h b/src/corelibs/U2Gui/src/util/project/LoadDocumentTaskProvider.h
index ab7ac8a..0830d07 100644
--- a/src/corelibs/U2Gui/src/util/project/LoadDocumentTaskProvider.h
+++ b/src/corelibs/U2Gui/src/util/project/LoadDocumentTaskProvider.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.cpp b/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.cpp
index dbc0ef4..3441c6d 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.h b/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.h
index cb42a5f..1aef0ad 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilterNames.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.cpp b/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.cpp
index 4b54a93..d8dbdcb 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.h b/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.h
index e9915eb..d2f7ecf 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilterProxyModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.cpp b/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.cpp
index e43382c..6d09745 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.h b/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.h
index f37842b..a55efe7 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectFilteringController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
index 6c80dc4..5cb11ab 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -234,11 +234,7 @@ void ProjectTreeController::sl_onDocumentAdded(Document *doc) {
     connectDocument(doc);
     sl_updateActions();
 
-    if (NULL != proxyModel || !settings.isObjectFilterActive()) {
-        const QModelIndex idx = getIndexForDoc(doc);
-        CHECK(idx.isValid(), );
-        tree->setExpanded(idx, doc->isLoaded());
-    }
+    handleAutoExpand(doc);
 }
 
 void ProjectTreeController::sl_onDocumentRemoved(Document *doc) {
@@ -620,6 +616,10 @@ void ProjectTreeController::sl_onDocumentLoadedStateChanged() {
         connect(doc, SIGNAL(si_loadedStateChanged()), SLOT(sl_onDocumentLoadedStateChanged()));
     }
 
+    handleAutoExpand(doc);
+}
+
+void ProjectTreeController::handleAutoExpand(Document* doc) {
     if (!settings.isObjectFilterActive() && AppContext::getProject()->getDocuments().size() < MAX_DOCUMENTS_TO_AUTOEXPAND) {
         QModelIndex idx = getIndexForDoc(doc);
         CHECK(idx.isValid(), );
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
index 7dcbd27..412a460 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectTreeController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -135,6 +135,9 @@ private:
     void updateLoadDocumentActions();
     QModelIndex getIndexForDoc(Document *doc) const;
     QModelIndex getOriginalModelIndex(const QModelIndex &index) const;
+    
+    // auto expands/collapses document node based on loaded state & current documents count in project
+    void handleAutoExpand(Document* doc);
 
     // after folders or objects has been removed from Project View,
     // they can still present in the database during the next merge procedure (due to their large sizes).
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectUpdater.cpp b/src/corelibs/U2Gui/src/util/project/ProjectUpdater.cpp
index 78dbf2d..1c4e591 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUpdater.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUpdater.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,17 +41,10 @@ ProjectUpdater::ProjectUpdater()
 }
 
 void ProjectUpdater::run() {
-#if (QT_VERSION < 0x050000) //Qt 5
-    while (0 == stopped) {
-        readData();
-        msleep(U2ObjectDbi::OBJECT_ACCESS_UPDATE_INTERVAL);
-    }
-#else
     while (0 == stopped.loadAcquire()) {
         readData();
         msleep(U2ObjectDbi::OBJECT_ACCESS_UPDATE_INTERVAL);
     }
-#endif
 }
 
 void ProjectUpdater::stop() {
@@ -153,8 +146,10 @@ void ProjectUpdater::updateAccessedObjects() {
             const U2EntityRef ref = object->getEntityRef();
             if (!dbiRef2Connections.contains(ref.dbiRef)) {
                 dbiRef2Connections.insert(ref.dbiRef, new DbiConnection(ref.dbiRef, os));
+                CHECK_CONTINUE(!os.hasError());
             }
             DbiConnection *con = dbiRef2Connections.value(ref.dbiRef);
+            SAFE_POINT(con->dbi != NULL, "Error: connection is NULL!", );
             con->dbi->getObjectDbi()->updateObjectAccessTime(ref.entityId, os);
         }
     }
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectUpdater.h b/src/corelibs/U2Gui/src/util/project/ProjectUpdater.h
index c6416ac..29130cb 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUpdater.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUpdater.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_PROJECTUPDATER_H_
 #define _U2_PROJECTUPDATER_H_
 
-#include <QtCore/QThread>
-#include <QtCore/QMutex>
+#include <QThread>
+#include <QMutex>
 
 #include <U2Core/U2Type.h>
 
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp b/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
index 1634766..ae7ade5 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectUtils.h b/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
index 796c79b..57d8619 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
index bfa378d..4038628 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.h b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.h
index ed169f9..851ed7f 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectViewFilterModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectViewModel.cpp b/src/corelibs/U2Gui/src/util/project/ProjectViewModel.cpp
index b549c37..477db16 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectViewModel.cpp
+++ b/src/corelibs/U2Gui/src/util/project/ProjectViewModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/ProjectViewModel.h b/src/corelibs/U2Gui/src/util/project/ProjectViewModel.h
index 7a50e32..6c2753d 100644
--- a/src/corelibs/U2Gui/src/util/project/ProjectViewModel.h
+++ b/src/corelibs/U2Gui/src/util/project/ProjectViewModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_PROJECTVIEWMODEL_H_
 #define _U2_PROJECTVIEWMODEL_H_
 
-#include <QtCore/QAbstractItemModel>
+#include <QAbstractItemModel>
 
 #include <U2Core/Folder.h>
 #include <U2Core/ProjectTreeControllerModeSettings.h>
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp
index 5f835f7..863000c 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.h
index 6473210..a54fb16 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/FeatureKeyFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@ namespace U2 {
 //////////////////////////////////////////////////////////////////////////
 
 class FeatureKeyFilterTask : public AbstractProjectFilterTask {
+    Q_OBJECT
 public:
     FeatureKeyFilterTask(const ProjectTreeControllerModeSettings &settings, const QList<QPointer<Document> > &docs);
 
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.cpp
index 0792ac4..6c23d74 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,12 +21,12 @@
 
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
-
-#include "../ProjectFilterNames.h"
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "MsaContentFilterTask.h"
+#include "../ProjectFilterNames.h"
 
 namespace U2 {
 
@@ -41,7 +41,7 @@ MsaContentFilterTask::MsaContentFilterTask(const ProjectTreeControllerModeSettin
 }
 
 bool MsaContentFilterTask::filterAcceptsObject(GObject *obj) {
-    MAlignmentObject *msaObject = qobject_cast<MAlignmentObject *>(obj);
+    MultipleSequenceAlignmentObject *msaObject = qobject_cast<MultipleSequenceAlignmentObject *>(obj);
     CHECK(NULL != msaObject, false);
 
     foreach(const QString &pattern, settings.tokensToShow) {
@@ -52,7 +52,7 @@ bool MsaContentFilterTask::filterAcceptsObject(GObject *obj) {
     return false;
 }
 
-bool MsaContentFilterTask::patternFitsMsaAlphabet(MAlignmentObject *msaObject, const QString &pattern) {
+bool MsaContentFilterTask::patternFitsMsaAlphabet(MultipleSequenceAlignmentObject *msaObject, const QString &pattern) {
     SAFE_POINT(NULL != msaObject, L10N::nullPointerError("MSA object"), false);
     SAFE_POINT(!pattern.isEmpty(), "Empty pattern to search", false);
 
@@ -63,19 +63,19 @@ bool MsaContentFilterTask::patternFitsMsaAlphabet(MAlignmentObject *msaObject, c
     return alphabet->containsAll(searchStr.constData(), searchStr.length());
 }
 
-bool MsaContentFilterTask::msaContainsPattern(MAlignmentObject *msaObject, const QString &pattern) {
+bool MsaContentFilterTask::msaContainsPattern(MultipleSequenceAlignmentObject *msaObject, const QString &pattern) {
     SAFE_POINT(NULL != msaObject, L10N::nullPointerError("MSA object"), false);
     SAFE_POINT(!pattern.isEmpty(), "Empty pattern to search", false);
 
-    const MAlignment &ma = msaObject->getMAlignment();
+    const MultipleSequenceAlignment msa = msaObject->getMultipleAlignment();
     const QByteArray searchStr = pattern.toUpper().toLatin1();
 
-    for (int i = 0, n = ma.getNumRows(); i < n; ++i) {
-        const MAlignmentRow &row = ma.getRow(i);
-        for (int j = 0; j < (ma.getLength() - searchStr.length() + 1); ++j) {
-            const char c = row.charAt(j);
+    for (int i = 0, n = msa->getNumRows(); i < n; ++i) {
+        const MultipleSequenceAlignmentRow row = msa->getMsaRow(i);
+        for (int j = 0; j < (msa->getLength() - searchStr.length() + 1); ++j) {
+            const char c = row->charAt(j);
             int altenateLength = 0;
-            if (MAlignment_GapChar != c && MSAUtils::equalsIgnoreGaps(row, j, searchStr, altenateLength)) {
+            if (U2Msa::GAP_CHAR != c && MSAUtils::equalsIgnoreGaps(row, j, searchStr, altenateLength)) {
                 return true;
             }
         }
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.h
index 5ed3c2b..8103b84 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaContentFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 //////////////////////////////////////////////////////////////////////////
 /// MsaContentFilterTask
@@ -40,9 +40,9 @@ protected:
     bool filterAcceptsObject(GObject *obj);
 
 private:
-    bool msaContainsPattern(MAlignmentObject *msaObject, const QString &pattern);
+    bool msaContainsPattern(MultipleSequenceAlignmentObject *msaObject, const QString &pattern);
 
-    static bool patternFitsMsaAlphabet(MAlignmentObject *msaObject, const QString &pattern);
+    static bool patternFitsMsaAlphabet(MultipleSequenceAlignmentObject *msaObject, const QString &pattern);
 };
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.cpp
index 1c4d852..7e2c0a3 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "../ProjectFilterNames.h"
@@ -39,12 +39,11 @@ MsaSeqNameFilterTask::MsaSeqNameFilterTask(const ProjectTreeControllerModeSettin
 }
 
 bool MsaSeqNameFilterTask::filterAcceptsObject(GObject *obj) {
-    MAlignmentObject *msaObj = qobject_cast<MAlignmentObject *>(obj);
+    MultipleSequenceAlignmentObject *msaObj = qobject_cast<MultipleSequenceAlignmentObject *>(obj);
     CHECK(NULL != msaObj, false);
 
     for (int i = 0, n = msaObj->getNumRows(); i < n; ++i) {
-        const MAlignmentRow &row = msaObj->getRow(i);
-        if (settings.nameFilterAcceptsString(row.getName())) {
+        if (settings.nameFilterAcceptsString(msaObj->getRow(i)->getName())) {
             return true;
         }
     }
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.h
index 66ffdd6..053868e 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/MsaSeqNameFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.cpp
index 142c60c..d85ccea 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.h
index 4a9a9f0..ddaa0f4 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/ObjectNameFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.cpp
index fc5637f..6220959 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.h
index 4986398..2e6b1a2 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/SequenceAccFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.cpp b/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.cpp
index 1696e57..3b8d6bf 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.cpp
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.h b/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.h
index 34d7ec2..e7e13df 100644
--- a/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.h
+++ b/src/corelibs/U2Gui/src/util/project/filter_tasks/TextContentFilterTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
index 5824f32..145ca42 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@ CommonImportOptionsDialog::CommonImportOptionsDialog(const QString& baseFolder,
     QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223300");
+    new HelpButton(this, buttonBox, "20875204");
     init(baseFolder, options);
 }
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h
index d5495ed..8a35c3c 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/CommonImportOptionsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_COMMON_IMPORT_OPTIONS_DIALOG_H_
 #define _U2_COMMON_IMPORT_OPTIONS_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
index 3a0fd9a..e12d4d6 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/PasswordStorage.h>
@@ -45,7 +40,7 @@ EditConnectionDialog::EditConnectionDialog(QWidget *parent, const QString &dbiUr
     ui(new Ui_EditConnectionDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223298");
+    new HelpButton(this, ui->buttonBox, "20875202");
     adjustSize();
     init(dbiUrl, connectionName, userName);
 }
diff --git a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h
index e3db588..37303a1 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/EditConnectionDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_EDIT_CONNECTION_DIALOG_H_
 #define _U2_EDIT_CONNECTION_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/U2DbiUtils.h>
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
index a626ca8..ce374d9 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
index edac9e4..5f302e4 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_IMPORT_OPTIONS_WIDGET_H_
 #define _U2_IMPORT_OPTIONS_WIDGET_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include "U2Core/ImportToDatabaseOptions.h"
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui
index 5378208..77938ab 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportOptionsWidget.ui
@@ -6,15 +6,15 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>541</width>
-    <height>527</height>
+    <width>719</width>
+    <height>596</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Import to the Database Options</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
     <layout class="QHBoxLayout" name="horizontalLayout">
      <item>
       <widget class="QLabel" name="lblBaseFolder">
@@ -28,7 +28,7 @@
      </item>
     </layout>
    </item>
-   <item>
+   <item row="1" column="0">
     <widget class="QGroupBox" name="gbFilesAndFolders">
      <property name="title">
       <string>Files and folders options</string>
@@ -90,79 +90,88 @@
         <property name="title">
          <string>Multi-sequence files import policy</string>
         </property>
-        <layout class="QVBoxLayout" name="verticalLayout_4">
-         <item>
-          <widget class="QRadioButton" name="rbSeparate">
-           <property name="text">
-            <string>Import as separate sequences</string>
-           </property>
-           <property name="checked">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="rbMerge">
-           <property name="text">
-            <string>Merge into a single sequence</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <layout class="QHBoxLayout" name="layoutMerge">
-           <item>
-            <spacer name="horizontalSpacer">
-             <property name="orientation">
-              <enum>Qt::Horizontal</enum>
-             </property>
-             <property name="sizeType">
-              <enum>QSizePolicy::Expanding</enum>
-             </property>
-             <property name="sizeHint" stdset="0">
-              <size>
-               <width>40</width>
-               <height>20</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item>
-            <widget class="QLabel" name="lblMerge">
-             <property name="text">
-              <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Number of 'unknown' symbols </span><span style=" font-size:10pt; font-style:italic;">('N 'for nucleic or 'X' for amino)</span><span style=" font-size:10pt;"> between parts:</span></p></body></html></string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="QSpinBox" name="sbMerge">
-             <property name="enabled">
-              <bool>false</bool>
-             </property>
-             <property name="suffix">
-              <string> bases</string>
-             </property>
-             <property name="maximum">
-              <number>1000000</number>
-             </property>
-             <property name="value">
-              <number>10</number>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="rbMalignment">
-           <property name="text">
-            <string>Join into alignment</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QRadioButton" name="rbSeparate">
+         <property name="geometry">
+          <rect>
+           <x>12</x>
+           <y>32</y>
+           <width>228</width>
+           <height>23</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>Import as separate sequences</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+        </widget>
+        <widget class="QRadioButton" name="rbMerge">
+         <property name="geometry">
+          <rect>
+           <x>12</x>
+           <y>61</y>
+           <width>223</width>
+           <height>23</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>Merge into a single sequence</string>
+         </property>
+        </widget>
+        <widget class="QRadioButton" name="rbMalignment">
+         <property name="geometry">
+          <rect>
+           <x>12</x>
+           <y>124</y>
+           <width>157</width>
+           <height>23</height>
+          </rect>
+         </property>
+         <property name="text">
+          <string>Join into alignment</string>
+         </property>
+        </widget>
+        <widget class="QWidget" name="">
+         <property name="geometry">
+          <rect>
+           <x>10</x>
+           <y>90</y>
+           <width>659</width>
+           <height>28</height>
+          </rect>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QLabel" name="label">
+            <property name="text">
+             <string>Number of unknown symbols (N - for nucleic or X - for amino) between parts:</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QSpinBox" name="sbMerge">
+            <property name="enabled">
+             <bool>false</bool>
+            </property>
+            <property name="suffix">
+             <string> bases</string>
+            </property>
+            <property name="maximum">
+             <number>1000000</number>
+            </property>
+            <property name="value">
+             <number>10</number>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+        <zorder>rbSeparate</zorder>
+        <zorder>rbMerge</zorder>
+        <zorder>rbMalignment</zorder>
+        <zorder>verticalSpacer_2</zorder>
+        <zorder>label</zorder>
        </widget>
       </item>
       <item>
@@ -213,7 +222,7 @@ p, li { white-space: pre-wrap; }
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="2" column="0">
     <widget class="QGroupBox" name="gbDocsAndObjects">
      <property name="title">
       <string>Documents and objects options</string>
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
index d2ab632..ef469e0 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -61,7 +61,7 @@ ImportToDatabaseDialog::ImportToDatabaseDialog(Document *dbConnection, const QSt
     baseFolder(U2DbiUtils::makeFolderCanonical(defaultFolder))
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223300");
+    new HelpButton(this, ui->buttonBox, "20875204");
     init();
     connectSignals();
     updateState();
@@ -283,11 +283,9 @@ QStringList ImportToDatabaseDialog::getFilesToImport() {
 
     QFileDialog::Options additionalOptions;
     Q_UNUSED(additionalOptions);
-#if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
     if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         additionalOptions = QFileDialog::DontUseNativeDialog;
     }
-#endif
 
     const QStringList fileList = U2FileDialog::getOpenFileNames(this,
                                                                tr("Select files to import"),
@@ -598,7 +596,7 @@ void ImportToDatabaseDialog::setFolderTooltip(QTreeWidgetItem *item) {
               "\n";
 
     if (currentOptions.processFoldersRecursively) {
-        tooltip += "\n" + tr("The directory will be processed recursively");
+        tooltip += "\n" + tr("The folder will be processed recursively");
     }
 
     if (currentOptions.createSubfolderForEachFile) {
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
index 2e05128..c0d0119 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ImportToDatabaseDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,17 +22,13 @@
 #ifndef _U2_IMPORT_TO_DATABASE_DIALOG_H_
 #define _U2_IMPORT_TO_DATABASE_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
+#include <QMap>
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
-class Ui_ImportToDatabaseDialog;
 class QTreeWidgetItem;
+class Ui_ImportToDatabaseDialog;
 
 namespace U2 {
 
@@ -40,6 +36,7 @@ class Document;
 class GObject;
 class ProjectTreeController;
 class Task;
+
 class ImportToDatabaseDialog : public QDialog {
     Q_OBJECT
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
index 3f18acb..be205c8 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@ ItemToImportEditDialog::ItemToImportEditDialog(const QString &item, const QStrin
     ui(new Ui_ItemToImportEditDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223300");
+    new HelpButton(this, ui->buttonBox, "20875204");
     init(item, folder, options);
 }
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h
index 3d257bf..b8d41df 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/ItemToImportEditDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_ITEM_TO_IMPORT_EDIT_DIALOG_H_
 #define _U2_ITEM_TO_IMPORT_EDIT_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/ImportToDatabaseOptions.h>
 
diff --git a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
index cadbd07..9f43673 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
+++ b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -84,7 +84,7 @@ SharedConnectionsDialog::SharedConnectionsDialog(QWidget *parent) :
     ui(new Ui_SharedConnectionsDialog)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223298");
+    new HelpButton(this, ui->buttonBox, "20875202");
 
     init();
     connectSignals();
@@ -506,7 +506,7 @@ bool SharedConnectionsDialog::checkDbShouldBeUpgraded(const U2DbiRef &ref) {
     if (upgradeDatabase) {
         QObjectScopedPointer<QMessageBox> question = new QMessageBox(QMessageBox::Question, tr(DATABASE_UPGRADE_TITLE), tr(DATABASE_UPGRADE_TEXT), QMessageBox::Ok | QMessageBox::Cancel| QMessageBox::Help, this);
         question->button(QMessageBox::Ok)->setText(tr("Upgrade"));
-        HelpButton(question.data(), question->button(QMessageBox::Help), "18223298");
+        HelpButton(question.data(), question->button(QMessageBox::Help), "20875202");
         question->setDefaultButton(QMessageBox::Cancel);
         const int dialogResult = question->exec();
         CHECK(!question.isNull(), true);
diff --git a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h
index 0a0e539..322a2cd 100644
--- a/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h
+++ b/src/corelibs/U2Gui/src/util/shared_db/SharedConnectionsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,25 +22,19 @@
 #ifndef _U2_SHARED_CONNECTIONS_DIALOG_H_
 #define _U2_SHARED_CONNECTIONS_DIALOG_H_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
+#include <QMap>
 
 #include <U2Core/global.h>
 
-class Ui_SharedConnectionsDialog;
-
-
 class QListWidgetItem;
 class QModelIndex;
+class Ui_SharedConnectionsDialog;
 
 namespace U2 {
 
-class U2DbiRef;
 class Task;
+class U2DbiRef;
 
 class U2GUI_EXPORT SharedConnectionsDialog : public QDialog {
     Q_OBJECT
diff --git a/src/corelibs/U2Gui/transl/english.ts b/src/corelibs/U2Gui/transl/english.ts
index 592372f..e8698c0 100644
--- a/src/corelibs/U2Gui/transl/english.ts
+++ b/src/corelibs/U2Gui/transl/english.ts
@@ -37,24 +37,38 @@
 <context>
     <name>AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="14"/>
         <source>Import ACE File</source>
-        <translation>Import ACE File</translation>
+        <translation type="vanished">Import ACE File</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="28"/>
         <source>Source URL:</source>
-        <translation>Source URL:</translation>
+        <translation type="vanished">Source URL:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="52"/>
         <source>Destination URL:</source>
-        <translation>Destination URL:</translation>
+        <translation type="vanished">Destination URL:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="62"/>
         <source>...</source>
-        <translation>...</translation>
+        <translation type="vanished">...</translation>
+    </message>
+</context>
+<context>
+    <name>AceImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Form</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="63"/>
+        <source>Save to file</source>
+        <translation type="unfinished">Save to file</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="77"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
     </message>
 </context>
 <context>
@@ -86,6 +100,29 @@
     </message>
 </context>
 <context>
+    <name>AprImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Form</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="63"/>
+        <source>Save to fiie</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="70"/>
+        <source>File format</source>
+        <translation type="unfinished">File format</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="87"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
     <name>AuthenticationDialog</name>
     <message>
         <location filename="../src/util/AuthenticationDialog.ui" line="23"/>
@@ -200,8 +237,8 @@
     <message>
         <location filename="../src/util/CreateAnnotationFullWidget.ui" line="130"/>
         <location filename="../src/util/CreateAnnotationFullWidget.ui" line="309"/>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="388"/>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="426"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="393"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="421"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -256,24 +293,29 @@
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="353"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="347"/>
+        <source>Save annotation(s) to</source>
+        <translation>Save annotation(s) to</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="359"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="374"/>
-        <source>Use auto-annotations table</source>
-        <translation>Use auto-annotations table</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="380"/>
+        <source>Existing document</source>
+        <translation>Existing document</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="406"/>
-        <source>Existing table</source>
-        <translation>Existing table</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="407"/>
+        <source>New document</source>
+        <translation>New document</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="416"/>
-        <source>Create new table</source>
-        <translation>Create new table</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="414"/>
+        <source>Use auto-annotations table</source>
+        <translation>Use auto-annotations table</translation>
     </message>
 </context>
 <context>
@@ -284,90 +326,90 @@
         <translation>Create Annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="38"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="47"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="50"/>
-        <source>Existing table</source>
-        <translation>Existing table</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="67"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="95"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="147"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="188"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="85"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="174"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="215"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="78"/>
-        <source>Create new table</source>
-        <translation>Create new table</translation>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="68"/>
+        <source>Existing document</source>
+        <translation>Existing document</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="96"/>
+        <source>New document</source>
+        <translation>New document</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="102"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="120"/>
         <source>Use auto-annotations table</source>
         <translation>Use auto-annotations table</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="130"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="157"/>
         <source>by type</source>
         <translation>by type</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="137"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="164"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
         <source>Add/remove complement flag</source>
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="158"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
         <source>Location</source>
         <translation>Location</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="168"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="195"/>
         <source>Use names of patterns as annotations names. In case the patterns are in FASTA format</source>
         <translation>Use names of patterns as annotations names. In case the patterns are in FASTA format</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="198"/>
         <source>Use pattern name</source>
         <translation>Use pattern name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="178"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="205"/>
         <source>Annotation location in GenBank format</source>
         <translation>Annotation location in GenBank format</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="212"/>
         <source>Predefined group names</source>
         <translation>Predefined group names</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="199"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="226"/>
         <source>Group name</source>
         <translation>Group name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="233"/>
         <source>Annotation name</source>
         <translation>Annotation name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="213"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="240"/>
         <source>Annotation type</source>
         <translation>Annotation type</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="220"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="247"/>
         <source>Description</source>
         <translation>Description</translation>
     </message>
@@ -380,90 +422,90 @@
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="41"/>
         <source>Choose a file to store the annotations</source>
         <translation>Choose a file to store the annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
-        <source>Existing table:</source>
-        <translation>Existing table:</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="63"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="95"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="148"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="215"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="81"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="242"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
-        <source>Create new table:</source>
-        <translation>Create new table:</translation>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="62"/>
+        <source>Existing document:</source>
+        <translation>Existing document:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="94"/>
+        <source>New document:</source>
+        <translation>New document:</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="122"/>
         <source>Use auto-annotations table</source>
         <translation>Use auto-annotations table</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="156"/>
         <source>Group name:</source>
         <translation>Group name:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="165"/>
         <source>auto</source>
         <translation>auto</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="172"/>
         <source>Predefined group names</source>
         <translation>Predefined group names</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="188"/>
         <source>Annotation type:</source>
         <translation>Annotation type:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="202"/>
         <source>Annotation name:</source>
         <translation>Annotation name:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="214"/>
         <source>by type</source>
         <translation>by type</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="223"/>
         <source>Location:</source>
         <translation>Location:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="232"/>
         <source>Annotation location in GenBank format</source>
         <translation>Annotation location in GenBank format</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="239"/>
         <source>Add/remove complement flag</source>
         <translation>Add/remove complement flag</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="255"/>
         <source>Description:</source>
         <translation>Description:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="265"/>
         <source>Use names of patterns as annotations names. In case the patterns are in FASTA format</source>
         <translation>Use names of patterns as annotations names. In case the patterns are in FASTA format</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="268"/>
         <source>Use pattern name</source>
         <translation>Use pattern name</translation>
     </message>
@@ -532,9 +574,13 @@
         <translation>Database:</translation>
     </message>
     <message>
+        <source>Save to folder:</source>
+        <translation type="vanished">Save to folder:</translation>
+    </message>
+    <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="79"/>
         <source>Save to directory:</source>
-        <translation>Save to directory:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="104"/>
@@ -548,11 +594,16 @@
     </message>
     <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="135"/>
+        <source>Add to project</source>
+        <translation type="unfinished">Add to project</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="145"/>
         <source>Some entries in the NCBI databases contain features without a sequence. You can download both sequence and features by checking this parameter. Note that some sequences are rather big.</source>
         <translation>Some entries in the NCBI databases contain features without a sequence. You can download both sequence and features by checking this parameter. Note that some sequences are rather big.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="138"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="148"/>
         <source>Force download the appropriate sequence</source>
         <translation>Force download the appropriate sequence</translation>
     </message>
@@ -797,7 +848,7 @@
     <message>
         <location filename="../src/util/ExportImageDialog.ui" line="41"/>
         <source>Export settings</source>
-        <translation type="unfinished"></translation>
+        <translation>Export settings</translation>
     </message>
     <message>
         <location filename="../src/util/ExportImageDialog.ui" line="56"/>
@@ -859,9 +910,13 @@
         <translation>Files and folders options</translation>
     </message>
     <message>
+        <source>Process folders recursively</source>
+        <translation type="vanished">Process folders recursively</translation>
+    </message>
+    <message>
         <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="40"/>
         <source>Process directories recursively</source>
-        <translation>Process directories recursively</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="47"/>
@@ -889,60 +944,64 @@
         <translation>Multi-sequence files import policy</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="97"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="103"/>
         <source>Import as separate sequences</source>
         <translation>Import as separate sequences</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="107"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="119"/>
         <source>Merge into a single sequence</source>
         <translation>Merge into a single sequence</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="132"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Number of 'unknown' symbols </span><span style=" font-size:10pt; font-style:italic;">('N 'for nucleic or 'X' for amino)</span><span style=" font-size:10pt;"> between parts:</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Number of 'unknown' symbols </span><span style=" font-size:8pt; font-style:italic;">('N 'for nucleic or 'X' for amino)</span><span style=" font-size:8pt;"> between parts:</span></p></body></html> {3C?} {4.0/?} {3. [...]
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="146"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="158"/>
         <source> bases</source>
         <translation>bases</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="161"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="132"/>
         <source>Join into alignment</source>
         <translation>Join into alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="184"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="148"/>
+        <source>Number of unknown symbols (N - for nucleic or X - for amino) between parts:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="193"/>
         <source>Import ACE files as</source>
         <translation>Import ACE files as</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="190"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="199"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="203"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="212"/>
         <source>Short reads assembly</source>
         <translation>Short reads assembly</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="219"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="228"/>
         <source>Documents and objects options</source>
         <translation>Documents and objects options</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="225"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="234"/>
         <source>Create a subfolder for each document</source>
         <translation>Create a subfolder for each document</translation>
     </message>
@@ -1043,36 +1102,36 @@ p, li { white-space: pre-wrap; }
         <translation>Connect to the </translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="48"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="51"/>
         <source>Export annotations...</source>
         <translation>Export annotations...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="49"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="52"/>
         <source>Selected object doesn't have annotations</source>
         <translation>Selected object doesn't have annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="111"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="133"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="112"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="134"/>
         <source>Document with the same URL is added to the project.
 Remove it from the project first.</source>
         <translation>Document with the same URL is added to the project.
 Remove it from the project first.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="122"/>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="153"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="144"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="179"/>
         <source>Unable to create I/O factory for </source>
         <translation>Unable to create I/O factory for </translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="127"/>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="156"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="149"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="182"/>
         <source>Unknown document format I/O factory: </source>
         <translation>Unknown document format I/O factory: </translation>
     </message>
@@ -1124,29 +1183,29 @@ The items cannot be recovered once deleted.</translation>
         <translation><auto></translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="64"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="59"/>
         <source>Format %1 is not supported by %2.</source>
         <translation>Format %1 is not supported by %2.</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="65"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="60"/>
         <source>Failed to export image to %1.</source>
         <translation>Failed to export image to %1.</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Author</source>
-        <translation type="unfinished"></translation>
+        <translation>Author</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Gene name</source>
-        <translation type="unfinished"></translation>
+        <translation>Gene name</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Organism</source>
-        <translation type="unfinished"></translation>
+        <translation>Organism</translation>
     </message>
 </context>
 <context>
@@ -1220,32 +1279,32 @@ The items cannot be recovered once deleted.</translation>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="35"/>
         <source>Whole sequence</source>
-        <translation type="unfinished">Whole sequence</translation>
+        <translation>Whole sequence</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="36"/>
         <source>Selected region</source>
-        <translation type="unfinished">Selected region</translation>
+        <translation>Selected region</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="37"/>
         <source>Custom region</source>
-        <translation type="unfinished">Custom region</translation>
+        <translation>Custom region</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="181"/>
         <source>Invalid Start position of region</source>
-        <translation type="unfinished">Invalid Start position of region</translation>
+        <translation>Invalid Start position of region</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="182"/>
         <source>Invalid End position of region</source>
-        <translation type="unfinished">Invalid End position of region</translation>
+        <translation>Invalid End position of region</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="183"/>
         <source>Start position is greater than End position</source>
-        <translation type="unfinished">Start position is greater than End position</translation>
+        <translation>Start position is greater than End position</translation>
     </message>
 </context>
 <context>
@@ -1253,29 +1312,29 @@ The items cannot be recovered once deleted.</translation>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished">Form</translation>
+        <translation>Form</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="27"/>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="73"/>
         <source>1</source>
-        <translation type="unfinished"></translation>
+        <translation>1</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="34"/>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="80"/>
         <source>-</source>
-        <translation type="unfinished">-</translation>
+        <translation>-</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="112"/>
         <source>Exclude</source>
-        <translation type="unfinished"></translation>
+        <translation>Exclude</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="129"/>
         <source>Region</source>
-        <translation type="unfinished">Region</translation>
+        <translation>Region</translation>
     </message>
 </context>
 <context>
@@ -1506,89 +1565,85 @@ The items cannot be recovered once deleted.</translation>
 <context>
     <name>U2::AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="135"/>
         <source>Destination UGENEDB file</source>
-        <translation>Destination UGENEDB file</translation>
+        <translation type="vanished">Destination UGENEDB file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="68"/>
         <source>Destination URL is not specified</source>
-        <translation>Destination URL is not specified</translation>
+        <translation type="vanished">Destination URL is not specified</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="54"/>
         <source>OK</source>
-        <translation>OK</translation>
+        <translation type="vanished">OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="74"/>
         <source>Destination URL must point to a local file</source>
-        <translation>Destination URL must point to a local file</translation>
+        <translation type="vanished">Destination URL must point to a local file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="82"/>
         <source>There is opened view with destination file.
 Close it or choose different file</source>
-        <translation>There is opened view with destination file.
+        <translation type="vanished">There is opened view with destination file.
 Close it or choose different file</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="92"/>
-        <source>Destination directory '%1' is not writable, please choose different destination URL</source>
-        <translation>Destination directory '%1' is not writable, please choose different destination URL</translation>
+        <source>Destination folder '%1' is not writable, please choose different destination URL</source>
+        <translation type="vanished">Destination folder '%1' is not writable, please choose different destination URL</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="100"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To append data to existing file press 'Append'.</source>
-        <translation>Destination file already exists.
+        <translation type="vanished">Destination file already exists.
 To overwrite the file, press 'Replace'.
 To append data to existing file press 'Append'.</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="103"/>
         <source>Replace</source>
-        <translation>Replace</translation>
+        <translation type="vanished">Replace</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="104"/>
         <source>Append</source>
-        <translation>Append</translation>
+        <translation type="vanished">Append</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="55"/>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="105"/>
         <source>Cancel</source>
-        <translation>Cancel</translation>
+        <translation type="vanished">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="109"/>
         <source>Destination file '%1' cannot be removed</source>
-        <translation>Destination file '%1' cannot be removed</translation>
+        <translation type="vanished">Destination file '%1' cannot be removed</translation>
+    </message>
+</context>
+<context>
+    <name>U2::AceImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.cpp" line="60"/>
+        <source>Destination UGENEDB file</source>
+        <translation type="unfinished">Destination UGENEDB file</translation>
     </message>
 </context>
 <context>
     <name>U2::AddDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="332"/>
-        <location filename="../src/OpenViewTask.cpp" line="346"/>
+        <location filename="../src/OpenViewTask.cpp" line="340"/>
+        <location filename="../src/OpenViewTask.cpp" line="354"/>
         <source>Opening view for document: 'NONAME'</source>
         <translation>Opening view for document: 'NONAME'</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="336"/>
-        <location filename="../src/OpenViewTask.cpp" line="349"/>
+        <location filename="../src/OpenViewTask.cpp" line="344"/>
+        <location filename="../src/OpenViewTask.cpp" line="357"/>
         <source>Opening view for document: %1</source>
         <translation>Opening view for document: %1</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="338"/>
+        <location filename="../src/OpenViewTask.cpp" line="346"/>
         <source>Provided document is NULL</source>
         <translation>Provided document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="351"/>
+        <location filename="../src/OpenViewTask.cpp" line="359"/>
         <source>Document provider is NULL</source>
         <translation>Document provider is NULL</translation>
     </message>
@@ -1608,27 +1663,23 @@ To append data to existing file press 'Append'.</translation>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="71"/>
         <source>Save File</source>
-        <translation type="unfinished"></translation>
+        <translation>Save File</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
         <source>Invalid Document Location</source>
-        <translation type="unfinished"></translation>
+        <translation>Invalid Document Location</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
         <source>Document location is empty</source>
-        <translation type="unfinished"></translation>
+        <translation>Document location is empty</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="96"/>
         <source>Project is locked</source>
         <translation>Project is locked</translation>
     </message>
-    <message>
-        <source>Save file</source>
-        <translation type="vanished">Save file</translation>
-    </message>
 </context>
 <context>
     <name>U2::AddToViewTask</name>
@@ -1656,12 +1707,12 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::AuthenticationDialog</name>
     <message>
-        <location filename="../src/util/AuthenticationDialog.cpp" line="88"/>
+        <location filename="../src/util/AuthenticationDialog.cpp" line="83"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/util/AuthenticationDialog.cpp" line="88"/>
+        <location filename="../src/util/AuthenticationDialog.cpp" line="83"/>
         <source>Login is not set</source>
         <translation>Login is not set</translation>
     </message>
@@ -1732,36 +1783,33 @@ To append data to existing file press 'Append'.</translation>
 <context>
     <name>U2::CreateAnnotationWidgetController</name>
     <message>
-        <source>Save file</source>
-        <translation type="vanished">Save file</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="239"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="240"/>
         <source>Select annotation saving parameters</source>
         <translation>Select annotation saving parameters</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="242"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="243"/>
         <source>Document is already added to the project: '%1'</source>
         <translation>Document is already added to the project: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="247"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="248"/>
         <source>Illegal folder: %1</source>
         <translation>Illegal folder: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="252"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="253"/>
         <source>Illegal annotation name! </source>
         <translation>Illegal annotation name! </translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="257"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="258"/>
         <source>Illegal group name</source>
         <translation>Illegal group name</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="260"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="263"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="268"/>
         <source>Invalid location! Location must be in GenBank format.
 Simple examples:
 1..10
@@ -1774,9 +1822,9 @@ join(1..10,15..45)
 complement(5..15)</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="354"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="353"/>
         <source>Save File</source>
-        <translation type="unfinished"></translation>
+        <translation>Save File</translation>
     </message>
 </context>
 <context>
@@ -1815,22 +1863,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::CreateObjectRelationDialogController</name>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="52"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="53"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="74"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="70"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="75"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="71"/>
         <source>Found annotations that are out of the sequence range, continue?</source>
         <translation>Found annotations that are out of the sequence range, continue?</translation>
     </message>
@@ -1860,55 +1908,73 @@ complement(5..15)</translation>
         <source>Project is locked</source>
         <translation>Project is locked</translation>
     </message>
-    <message>
-        <source>Export alignment image</source>
-        <translation type="vanished">Export alignment image</translation>
-    </message>
 </context>
 <context>
     <name>U2::DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="64"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="60"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="65"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="61"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="127"/>
-        <source>Select directory to save</source>
-        <translation>Select directory to save</translation>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="123"/>
+        <source>Select folder to save</source>
+        <translation>Select folder to save</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="168"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="164"/>
         <source>Resource id is empty!</source>
         <translation>Resource id is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="174"/>
-        <source>No directory selected for saving file!</source>
-        <translation>No directory selected for saving file!</translation>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="170"/>
+        <source>No folder selected for saving file!</source>
+        <translation>No folder selected for saving file!</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="199"/>
+        <source>There are more than 100 files found for download.
+Are you sure you want to open all of them?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="200"/>
+        <source>Warning</source>
+        <translation type="unfinished">Warning</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <source>Open anyway</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="206"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <source>Don't open</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="217"/>
         <source>Download remote documents</source>
         <translation>Download remote documents</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="246"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="257"/>
         <source>Hint: </source>
         <translation>Hint: </translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="247"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="258"/>
         <source>Use database unique identifier.</source>
         <translation>Use database unique identifier.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="249"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="260"/>
         <source>You can download multiple items by separating IDs with space or semicolon.</source>
         <translation>You can download multiple items by separating IDs with space or semicolon.</translation>
     </message>
@@ -1916,18 +1982,18 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditConnectionDialog</name>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="145"/>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="151"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="140"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="146"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="145"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="140"/>
         <source>Host is not set</source>
         <translation>Host is not set</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="151"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="146"/>
         <source>Database is not set</source>
         <translation>Database is not set</translation>
     </message>
@@ -1935,33 +2001,33 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditQualifierDialog</name>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="45"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="40"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="46"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="41"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="49"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="44"/>
         <source>View Qualifier</source>
         <translation>View Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="100"/>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="104"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="95"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="99"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="100"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="95"/>
         <source>Illegal qualifier name</source>
         <translation>Illegal qualifier name</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="104"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="99"/>
         <source>Illegal qualifier value</source>
         <translation>Illegal qualifier value</translation>
     </message>
@@ -1990,8 +2056,8 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="141"/>
-        <source>Directory to save is not exists</source>
-        <translation>Directory to save is not exists</translation>
+        <source>Folder to save is not exists</source>
+        <translation>Folder to save is not exists</translation>
     </message>
     <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
@@ -2106,26 +2172,31 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/ExportAnnotationsDialog.ui" line="58"/>
+        <source>Add to project</source>
+        <translation type="unfinished">Add to project</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="68"/>
         <source>Save sequences under annotations</source>
         <translation>Save sequences under annotations</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.ui" line="65"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="75"/>
         <source>Save sequence names</source>
         <translation>Save sequence names</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="47"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="69"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="70"/>
         <source>Select file to save annotations</source>
         <translation>Select file to save annotations</translation>
     </message>
@@ -2134,11 +2205,13 @@ complement(5..15)</translation>
     <name>U2::ExportDocumentDialogController</name>
     <message>
         <location filename="../src/util/ExportDocumentDialogController.cpp" line="48"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="66"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
         <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2146,45 +2219,37 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportImageDialog</name>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="69"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="71"/>
         <source>Image export task factory is NULL</source>
         <translation>Image export task factory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="96"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="98"/>
         <source>The image file path is empty.</source>
         <translation>The image file path is empty.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="101"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="103"/>
         <source>The image file cannot be created. No write permissions.</source>
         <translation>The image file cannot be created. No write permissions.</translation>
     </message>
     <message>
-        <source>Overwrite file?</source>
-        <translation type="vanished">Overwrite file?</translation>
-    </message>
-    <message>
-        <source>The file "%1" already exists. Do you wish to overwrite it?</source>
-        <translation type="vanished">The file "%1" already exists. Do you wish to overwrite it?</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="109"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="111"/>
         <source>Saving image to '%1'...</source>
         <translation>Saving image to '%1'...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="147"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="149"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="227"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="229"/>
         <source>Save Image As</source>
         <translation>Save Image As</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="146"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="148"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
@@ -2194,14 +2259,14 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/project/filter_tasks/FeatureKeyFilterTask.cpp" line="59"/>
         <source>DbiRef is invalid</source>
-        <translation type="unfinished"></translation>
+        <translation>DbiRef is invalid</translation>
     </message>
 </context>
 <context>
     <name>U2::FileLineEdit</name>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="91"/>
-        <location filename="../src/util/DialogUtils.cpp" line="97"/>
+        <location filename="../src/util/DialogUtils.cpp" line="89"/>
+        <location filename="../src/util/DialogUtils.cpp" line="95"/>
         <source>Select file(s)</source>
         <translation>Select file(s)</translation>
     </message>
@@ -2217,12 +2282,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::FolderNameDialog</name>
     <message>
-        <location filename="../src/util/project/FolderNameDialog.cpp" line="41"/>
+        <location filename="../src/util/project/FolderNameDialog.cpp" line="35"/>
         <source>Add Folder</source>
         <translation>Add Folder</translation>
     </message>
     <message>
-        <location filename="../src/util/project/FolderNameDialog.cpp" line="41"/>
+        <location filename="../src/util/project/FolderNameDialog.cpp" line="35"/>
         <source>Rename Folder</source>
         <translation>Rename Folder</translation>
     </message>
@@ -2243,29 +2308,37 @@ complement(5..15)</translation>
 <context>
     <name>U2::GUIUtils</name>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="148"/>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
-        <location filename="../src/util/GUIUtils.cpp" line="176"/>
+        <location filename="../src/util/GUIUtils.cpp" line="154"/>
+        <location filename="../src/util/GUIUtils.cpp" line="164"/>
+        <location filename="../src/util/GUIUtils.cpp" line="182"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="148"/>
+        <location filename="../src/util/GUIUtils.cpp" line="154"/>
         <source>Document URL is empty!</source>
         <translation>Document URL is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
+        <location filename="../src/util/GUIUtils.cpp" line="164"/>
         <source>Unable to launch default web browser.</source>
         <translation>Unable to launch default web browser.</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="176"/>
+        <location filename="../src/util/GUIUtils.cpp" line="182"/>
         <source>Please specify the browser executable</source>
         <translation>Please specify the browser executable</translation>
     </message>
 </context>
 <context>
+    <name>U2::GroupOptionsWidget</name>
+    <message>
+        <location filename="../src/options_panel/GroupOptionsWidget.cpp" line="67"/>
+        <source>Help</source>
+        <translation type="unfinished">Help</translation>
+    </message>
+</context>
+<context>
     <name>U2::Header</name>
     <message>
         <location filename="../src/NotificationWidget.cpp" line="47"/>
@@ -2281,7 +2354,7 @@ complement(5..15)</translation>
 <context>
     <name>U2::HelpButton</name>
     <message>
-        <location filename="../src/util/HelpButton.cpp" line="40"/>
+        <location filename="../src/util/HelpButton.cpp" line="34"/>
         <source>Help</source>
         <translation>Help</translation>
     </message>
@@ -2289,17 +2362,17 @@ complement(5..15)</translation>
 <context>
     <name>U2::ImageExportController</name>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="81"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="76"/>
         <source>SVG format is not supported</source>
         <translation>SVG format is not supported</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="85"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="80"/>
         <source>PS/PDF format is not supported</source>
         <translation>PS/PDF format is not supported</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="88"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="83"/>
         <source>Raster formats are disabled</source>
         <translation>Raster formats are disabled</translation>
     </message>
@@ -2307,7 +2380,7 @@ complement(5..15)</translation>
 <context>
     <name>U2::ImageExportTask</name>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="68"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="63"/>
         <source>Done!</source>
         <translation>Done!</translation>
     </message>
@@ -2343,17 +2416,17 @@ complement(5..15)</translation>
         <translation>Import</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="293"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="291"/>
         <source>Select files to import</source>
         <translation>Select files to import</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="316"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="314"/>
         <source>Select a folder to import</source>
         <translation>Select a folder to import</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="551"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="549"/>
         <source>This file will be imported with its own options.
 
 </source>
@@ -2362,59 +2435,59 @@ complement(5..15)</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="554"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="552"/>
         <source>File:
 </source>
         <translation>File:
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="557"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="596"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="642"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="659"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="555"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="594"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="640"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="657"/>
         <source>Import to: </source>
         <translation>Import to: </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="561"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="559"/>
         <source>A folder for file objects will be created</source>
         <translation>A folder for file objects will be created</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="565"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="609"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="563"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="607"/>
         <source>If file is not recognized, it will be imported as binary data</source>
         <translation>If file is not recognized, it will be imported as binary data</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="570"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="614"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="568"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="612"/>
         <source>If file contains more than one sequence, they will imported as separate objects</source>
         <translation>If file contains more than one sequence, they will imported as separate objects</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="573"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="617"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="571"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="615"/>
         <source>If file contains more than one sequence, they will imported as single sequence with several 'Unknown' bases as separator</source>
         <translation>If file contains more than one sequence, they will imported as single sequence with several 'Unknown' bases as separator</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="574"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="618"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="572"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="616"/>
         <source>Size of separator: %1</source>
         <translation>Size of separator: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="577"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="621"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="575"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="619"/>
         <source>If file contains more than one sequence, they will be joined into the multiple alignment</source>
         <translation>If file contains more than one sequence, they will be joined into the multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="590"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="634"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="653"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="588"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="632"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="651"/>
         <source>This folder will be imported with its own options.
 
 </source>
@@ -2423,34 +2496,34 @@ complement(5..15)</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="593"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="591"/>
         <source>Folder:
 </source>
         <translation>Folder:
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="601"/>
-        <source>The directory will be processed recursively</source>
-        <translation>The directory will be processed recursively</translation>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="599"/>
+        <source>The folder will be processed recursively</source>
+        <translation>The folder will be processed recursively</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="605"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="603"/>
         <source>A folder for each file will be created</source>
         <translation>A folder for each file will be created</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="637"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="635"/>
         <source>The </source>
         <translation>The </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="637"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="635"/>
         <source> from document </source>
         <translation> from document </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="656"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="654"/>
         <source>Document:
 </source>
         <translation>Document:
@@ -2460,33 +2533,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::LoadRemoteDocumentAndAddToProjectTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="224"/>
-        <location filename="../src/OpenViewTask.cpp" line="231"/>
-        <location filename="../src/OpenViewTask.cpp" line="238"/>
+        <location filename="../src/OpenViewTask.cpp" line="227"/>
+        <location filename="../src/OpenViewTask.cpp" line="235"/>
+        <location filename="../src/OpenViewTask.cpp" line="243"/>
         <source>Load remote document and add to project</source>
-        <translation type="unfinished"></translation>
+        <translation>Load remote document and add to project</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="283"/>
+        <location filename="../src/OpenViewTask.cpp" line="291"/>
         <source>Cannot find %1 in %2 database</source>
-        <translation type="unfinished">Cannot find %1 in %2 database</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadRemoteDocumentAndOpenViewTask</name>
-    <message>
-        <source>Cannot find %1 in %2 database</source>
-        <translation type="vanished">Cannot find %1 in %2 database</translation>
-    </message>
-    <message>
-        <source>Load remote document and open view</source>
-        <translation type="vanished">Load remote document and open view</translation>
+        <translation>Cannot find %1 in %2 database</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadUnloadedDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="70"/>
+        <location filename="../src/OpenViewTask.cpp" line="65"/>
         <source>Load document: '%1'</source>
         <translation>Load document: '%1'</translation>
     </message>
@@ -2494,42 +2556,46 @@ complement(5..15)</translation>
 <context>
     <name>U2::LogViewWidget</name>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="72"/>
+        <location filename="../src/util/logview/LogView.cpp" line="65"/>
         <source>Log</source>
         <translation>Log</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="79"/>
         <source>Settings</source>
-        <translation>Settings</translation>
+        <translation type="vanished">Settings</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="83"/>
+        <location filename="../src/util/logview/LogView.cpp" line="72"/>
+        <source>Settings...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/logview/LogView.cpp" line="76"/>
         <source>Dump performance counters</source>
         <translation>Dump performance counters</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="86"/>
+        <location filename="../src/util/logview/LogView.cpp" line="79"/>
         <source>Append separator</source>
         <translation>Append separator</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="88"/>
+        <location filename="../src/util/logview/LogView.cpp" line="81"/>
         <source>Clear log</source>
         <translation>Clear log</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="133"/>
+        <location filename="../src/util/logview/LogView.cpp" line="126"/>
         <source>Copy</source>
         <translation>Copy</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="198"/>
+        <location filename="../src/util/logview/LogView.cpp" line="191"/>
         <source>logview_set_case</source>
         <translation>Set case</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="201"/>
+        <location filename="../src/util/logview/LogView.cpp" line="194"/>
         <source>logview_use_regexp</source>
         <translation>Use regexp</translation>
     </message>
@@ -2537,12 +2603,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::MultipleRangeSelector</name>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="244"/>
+        <location filename="../src/util/RangeSelector.cpp" line="241"/>
         <source>Go</source>
         <translation>Go</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="245"/>
+        <location filename="../src/util/RangeSelector.cpp" line="242"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2586,27 +2652,27 @@ complement(5..15)</translation>
 <context>
     <name>U2::ObjectViewTreeController</name>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="60"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="56"/>
         <source>Activate view</source>
         <translation>Activate view</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="66"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="62"/>
         <source>Add bookmark</source>
         <translation>Add bookmark</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="71"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="67"/>
         <source>Remove bookmark</source>
         <translation>Remove bookmark</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="78"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="74"/>
         <source>Rename bookmark</source>
         <translation>Rename bookmark</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="397"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="393"/>
         <source>New bookmark</source>
         <translation>New bookmark</translation>
     </message>
@@ -2614,12 +2680,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::OpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="152"/>
+        <location filename="../src/OpenViewTask.cpp" line="147"/>
         <source>State is NULL</source>
         <translation>State is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="154"/>
+        <location filename="../src/OpenViewTask.cpp" line="149"/>
         <source>GObject factory is NULL</source>
         <translation>GObject factory is NULL</translation>
     </message>
@@ -2649,30 +2715,30 @@ complement(5..15)</translation>
     <name>U2::PasteUrlsTask</name>
     <message>
         <location filename="../src/PasteController.cpp" line="178"/>
-        <source>Pasting of directories is not supported:</source>
-        <translation>Pasting of directories is not supported:</translation>
+        <source>Pasting of folders is not supported:</source>
+        <translation>Pasting of folders is not supported:</translation>
     </message>
 </context>
 <context>
     <name>U2::PositionSelector</name>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="51"/>
-        <location filename="../src/util/PositionSelector.cpp" line="98"/>
+        <location filename="../src/util/PositionSelector.cpp" line="42"/>
+        <location filename="../src/util/PositionSelector.cpp" line="89"/>
         <source>Go!</source>
         <translation>Go!</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="52"/>
+        <location filename="../src/util/PositionSelector.cpp" line="43"/>
         <source>Go to position</source>
         <translation>Go to position</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="84"/>
+        <location filename="../src/util/PositionSelector.cpp" line="75"/>
         <source>Position</source>
         <translation>Position</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="104"/>
+        <location filename="../src/util/PositionSelector.cpp" line="95"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2698,22 +2764,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectParser10</name>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="351"/>
+        <location filename="../src/ProjectParsing.cpp" line="356"/>
         <source>Can't find project file: %1, ignoring</source>
         <translation>Can't find project file: %1, ignoring</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="355"/>
+        <location filename="../src/ProjectParsing.cpp" line="360"/>
         <source>Duplicate document found: %1, ignoring</source>
         <translation>Duplicate document found: %1, ignoring</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="360"/>
+        <location filename="../src/ProjectParsing.cpp" line="367"/>
         <source>Database document: %1, ignoring</source>
         <translation>Database document: %1, ignoring</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="406"/>
+        <location filename="../src/ProjectParsing.cpp" line="414"/>
         <source>The last loaded state was locked by format</source>
         <translation>The last loaded state was locked by format</translation>
     </message>
@@ -2721,10 +2787,6 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectTreeController</name>
     <message>
-        <source>Load selected documents</source>
-        <translation type="vanished">Load selected documents</translation>
-    </message>
-    <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="962"/>
         <source>Lock document for editing</source>
         <translation>Lock document for editing</translation>
@@ -2735,16 +2797,12 @@ complement(5..15)</translation>
         <translation>Unlock document for editing</translation>
     </message>
     <message>
-        <source>Unload selected document</source>
-        <translation type="vanished">Unload selected document</translation>
-    </message>
-    <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="327"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="323"/>
         <source>Import to the database...</source>
         <translation>Import to the database...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="328"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="324"/>
         <source>Import to the folder...</source>
         <translation>Import to the folder...</translation>
     </message>
@@ -2782,12 +2840,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
         <source>Load selected document(s)</source>
-        <translation type="unfinished"></translation>
+        <translation>Load selected document(s)</translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="959"/>
         <source>Unload selected document(s)</source>
-        <translation type="unfinished"></translation>
+        <translation>Unload selected document(s)</translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="970"/>
@@ -2815,7 +2873,7 @@ complement(5..15)</translation>
         <translation>Empty recycle bin</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="554"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="550"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
@@ -2846,29 +2904,21 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectViewModel</name>
     <message>
-        <source>[unloaded]</source>
-        <translation type="vanished">[unloaded]</translation>
-    </message>
-    <message>
-        <source>[loading %1%]</source>
-        <translation type="vanished">[loading %1%]</translation>
-    </message>
-    <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1108"/>
         <source>[unloaded] </source>
-        <translation type="unfinished"></translation>
+        <translation>[unloaded] </translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1111"/>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1220"/>
         <source>[loading] </source>
-        <translation type="unfinished"></translation>
+        <translation>[loading] </translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1113"/>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1222"/>
         <source>[loading %1%] </source>
-        <translation type="unfinished"></translation>
+        <translation>[loading %1%] </translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1146"/>
@@ -2884,46 +2934,46 @@ complement(5..15)</translation>
 <context>
     <name>U2::QueryBlockWidget</name>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="246"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="241"/>
         <source>Term:</source>
         <translation>Term:</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="257"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="252"/>
         <source>All fields</source>
-        <translation type="unfinished"></translation>
+        <translation>All fields</translation>
     </message>
 </context>
 <context>
     <name>U2::RangeSelector</name>
     <message>
         <location filename="../src/util/RangeSelector.cpp" line="60"/>
-        <location filename="../src/util/RangeSelector.cpp" line="149"/>
+        <location filename="../src/util/RangeSelector.cpp" line="146"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="96"/>
+        <location filename="../src/util/RangeSelector.cpp" line="93"/>
         <source>Min</source>
         <translation>Min</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="100"/>
+        <location filename="../src/util/RangeSelector.cpp" line="97"/>
         <source>Max</source>
         <translation>Max</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="116"/>
+        <location filename="../src/util/RangeSelector.cpp" line="113"/>
         <source>Range:</source>
         <translation>Range:</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="128"/>
+        <location filename="../src/util/RangeSelector.cpp" line="125"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="155"/>
+        <location filename="../src/util/RangeSelector.cpp" line="152"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -2942,13 +2992,13 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="126"/>
-        <location filename="../src/util/RegionSelector.cpp" line="147"/>
+        <location filename="../src/util/RegionSelector.cpp" line="148"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="134"/>
-        <location filename="../src/util/RegionSelector.cpp" line="153"/>
+        <location filename="../src/util/RegionSelector.cpp" line="154"/>
         <source>-</source>
         <translation>-</translation>
     </message>
@@ -2957,36 +3007,24 @@ complement(5..15)</translation>
         <source>Invalid sequence region!</source>
         <translation>Invalid sequence region!</translation>
     </message>
-    <message>
-        <source>Invalid Start position of region</source>
-        <translation type="vanished">Invalid Start position of region</translation>
-    </message>
-    <message>
-        <source>Invalid End position of region</source>
-        <translation type="vanished">Invalid End position of region</translation>
-    </message>
-    <message>
-        <source>Start position is greater than End position</source>
-        <translation type="vanished">Start position is greater than End position</translation>
-    </message>
 </context>
 <context>
     <name>U2::RegionSelectorController</name>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="132"/>
         <source>Region is not in sequence range</source>
-        <translation type="unfinished"></translation>
+        <translation>Region is not in sequence range</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="150"/>
         <source>Cannot get preset name, ComboBox is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot get preset name, ComboBox is NULL</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="155"/>
         <location filename="../src/util/RegionSelectorController.cpp" line="172"/>
         <source>Cannot set preset, ComboBox is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot set preset, ComboBox is NULL</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="230"/>
@@ -2994,7 +3032,7 @@ complement(5..15)</translation>
         <location filename="../src/util/RegionSelectorController.cpp" line="291"/>
         <location filename="../src/util/RegionSelectorController.cpp" line="326"/>
         <source>Region lineEdit is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Region lineEdit is NULL</translation>
     </message>
 </context>
 <context>
@@ -3002,7 +3040,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.cpp" line="95"/>
         <source>'Exclude' region contains 'Search In' region. Search region is empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>'Exclude' region contains 'Search In' region. Search region is empty.</translation>
     </message>
 </context>
 <context>
@@ -3044,80 +3082,91 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
-    <name>U2::SaveDocumentGroupController</name>
-    <message>
-        <source>Select file location</source>
-        <translation type="vanished">Select file location</translation>
-    </message>
-</context>
-<context>
     <name>U2::ScaleBar</name>
     <message>
-        <location filename="../src/util/ScaleBar.cpp" line="43"/>
         <source>-</source>
-        <translation>-</translation>
+        <translation type="vanished">-</translation>
     </message>
     <message>
-        <location filename="../src/util/ScaleBar.cpp" line="50"/>
         <source>+</source>
-        <translation>+</translation>
+        <translation type="vanished">+</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ScaleBar.cpp" line="42"/>
+        <location filename="../src/util/ScaleBar.cpp" line="46"/>
+        <source>Decrease peaks height</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/ScaleBar.cpp" line="53"/>
+        <location filename="../src/util/ScaleBar.cpp" line="57"/>
+        <source>Increase peaks height</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>U2::ScriptEditorDialog</name>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="52"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="45"/>
         <source>Done</source>
         <translation>Done</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="53"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="103"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="96"/>
         <source>File is too large %1</source>
         <translation>File is too large %1</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="120"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="113"/>
         <source>Select script to open</source>
         <translation>Select script to open</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="139"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="132"/>
         <source>Script is empty!</source>
         <translation>Script is empty!</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="143"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="136"/>
         <source>Save script to file</source>
         <translation>Save script to file</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="163"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="156"/>
         <source>Script files</source>
         <translation>Script files</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="174"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="167"/>
         <source>Script syntax check failed! Line: %1, error: %2</source>
         <translation>Script syntax check failed! Line: %1, error: %2</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="175"/>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="177"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="168"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="170"/>
         <source>Check result</source>
         <translation>Check result</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="177"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="170"/>
         <source>Syntax is OK!</source>
         <translation>Syntax is OK!</translation>
     </message>
 </context>
 <context>
+    <name>U2::SearchBox</name>
+    <message>
+        <location filename="../src/util/SearchBox.cpp" line="56"/>
+        <source>Search...</source>
+        <translation>Search...</translation>
+    </message>
+</context>
+<context>
     <name>U2::SearchGenbankSequenceDialogController</name>
     <message>
         <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="49"/>
@@ -3130,12 +3179,12 @@ complement(5..15)</translation>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="157"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="152"/>
         <source>an unexpected subtask</source>
         <translation>an unexpected subtask</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="194"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="189"/>
         <source>No results found corresponding to the query</source>
         <translation>No results found corresponding to the query</translation>
     </message>
@@ -3251,42 +3300,42 @@ check connection settings</translation>
 <context>
     <name>U2::ToolsMenu</name>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="108"/>
+        <location filename="../src/ToolsMenu.cpp" line="109"/>
         <source>Sanger data analysis</source>
         <translation>Sanger data analysis</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="118"/>
+        <location filename="../src/ToolsMenu.cpp" line="119"/>
         <source>NGS data analysis</source>
         <translation>NGS data analysis</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="146"/>
+        <location filename="../src/ToolsMenu.cpp" line="149"/>
         <source>BLAST</source>
         <translation>BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="160"/>
+        <location filename="../src/ToolsMenu.cpp" line="163"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="172"/>
+        <location filename="../src/ToolsMenu.cpp" line="175"/>
         <source>Cloning</source>
         <translation>Cloning</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="180"/>
+        <location filename="../src/ToolsMenu.cpp" line="183"/>
         <source>Primer</source>
         <translation>Primer</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="186"/>
+        <location filename="../src/ToolsMenu.cpp" line="189"/>
         <source>Search for TFBS</source>
         <translation>Search for TFBS</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="195"/>
+        <location filename="../src/ToolsMenu.cpp" line="198"/>
         <source>HMMER tools</source>
         <translation>HMMER tools</translation>
     </message>
@@ -3359,13 +3408,13 @@ check connection settings</translation>
 <context>
     <name>U2::WidgetScreenshotExportToSvgTask</name>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="58"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="52"/>
         <source>Painter is still active</source>
         <translation>Painter is still active</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="64"/>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="67"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="58"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="61"/>
         <source>Can not open the file: %1</source>
         <translation>Can not open the file: %1</translation>
     </message>
@@ -3373,7 +3422,7 @@ check connection settings</translation>
 <context>
     <name>U2::WidgetScreenshotImageExportController</name>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="115"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="109"/>
         <source>Screenshot</source>
         <translation>Screenshot</translation>
     </message>
diff --git a/src/corelibs/U2Gui/transl/russian.ts b/src/corelibs/U2Gui/transl/russian.ts
index 2151509..6e21494 100644
--- a/src/corelibs/U2Gui/transl/russian.ts
+++ b/src/corelibs/U2Gui/transl/russian.ts
@@ -37,24 +37,38 @@
 <context>
     <name>AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="14"/>
         <source>Import ACE File</source>
-        <translation>Импорт ACE файла</translation>
+        <translation type="vanished">Импорт ACE файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="28"/>
         <source>Source URL:</source>
-        <translation>Источник:</translation>
+        <translation type="vanished">Источник:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="52"/>
         <source>Destination URL:</source>
-        <translation>Назначение:</translation>
+        <translation type="vanished">Назначение:</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.ui" line="62"/>
         <source>...</source>
-        <translation>...</translation>
+        <translation type="vanished">...</translation>
+    </message>
+</context>
+<context>
+    <name>AceImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Форма</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="63"/>
+        <source>Save to file</source>
+        <translation type="unfinished">Сохранить в файл</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.ui" line="77"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
     </message>
 </context>
 <context>
@@ -86,6 +100,29 @@
     </message>
 </context>
 <context>
+    <name>AprImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation type="unfinished">Форма</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="63"/>
+        <source>Save to fiie</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="70"/>
+        <source>File format</source>
+        <translation type="unfinished">Формат файла</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ImportWidgets/AprImportWidget.ui" line="87"/>
+        <source>...</source>
+        <translation type="unfinished">...</translation>
+    </message>
+</context>
+<context>
     <name>AuthenticationDialog</name>
     <message>
         <location filename="../src/util/AuthenticationDialog.ui" line="23"/>
@@ -200,8 +237,8 @@
     <message>
         <location filename="../src/util/CreateAnnotationFullWidget.ui" line="130"/>
         <location filename="../src/util/CreateAnnotationFullWidget.ui" line="309"/>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="388"/>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="426"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="393"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="421"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -256,24 +293,29 @@
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="353"/>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="347"/>
+        <source>Save annotation(s) to</source>
+        <translation>Сохранить результат(ы) в</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="359"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="374"/>
-        <source>Use auto-annotations table</source>
-        <translation>Использовать таблицу автоаннотаций</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="380"/>
+        <source>Existing document</source>
+        <translation>Существующий документ</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="406"/>
-        <source>Existing table</source>
-        <translation>Существующая таблица</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="407"/>
+        <source>New document</source>
+        <translation>Новый документ</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="416"/>
-        <source>Create new table</source>
-        <translation>Новая таблица</translation>
+        <location filename="../src/util/CreateAnnotationFullWidget.ui" line="414"/>
+        <source>Use auto-annotations table</source>
+        <translation>Использовать таблицу автоаннотаций</translation>
     </message>
 </context>
 <context>
@@ -284,90 +326,90 @@
         <translation>Создание аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="38"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="47"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="50"/>
-        <source>Existing table</source>
-        <translation>Существующая таблица</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="67"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="95"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="147"/>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="188"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="85"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="174"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="215"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="78"/>
-        <source>Create new table</source>
-        <translation>Новая таблица</translation>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="68"/>
+        <source>Existing document</source>
+        <translation>Существующий документ</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="102"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="96"/>
+        <source>New document</source>
+        <translation>Новый документ</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="120"/>
         <source>Use auto-annotations table</source>
         <translation>Использовать таблицу автоаннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="130"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="157"/>
         <source>by type</source>
         <translation>по типу</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="137"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="164"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="144"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
         <source>Add/remove complement flag</source>
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="158"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
         <source>Location</source>
         <translation>Позиция</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="168"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="195"/>
         <source>Use names of patterns as annotations names. In case the patterns are in FASTA format</source>
         <translation>Использовать имена паттернов в качестве имен для аннотаций. Для случая если паттерны заданы в формате FASTA</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="171"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="198"/>
         <source>Use pattern name</source>
         <translation>Использовать имя паттерна</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="178"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="205"/>
         <source>Annotation location in GenBank format</source>
         <translation>Местоположение аннотации (в формате GenBank)</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="185"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="212"/>
         <source>Predefined group names</source>
         <translation>Стандартные имена групп</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="199"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="226"/>
         <source>Group name</source>
         <translation>Имя группы</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="206"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="233"/>
         <source>Annotation name</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="213"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="240"/>
         <source>Annotation type</source>
         <translation>Тип аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="220"/>
+        <location filename="../src/util/CreateAnnotationNormalWidget.ui" line="247"/>
         <source>Description</source>
         <translation>Описание</translation>
     </message>
@@ -380,90 +422,90 @@
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="32"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="41"/>
         <source>Choose a file to store the annotations</source>
         <translation>Выбрать файл для сохранения аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="44"/>
-        <source>Existing table:</source>
-        <translation>Существующая таблица:</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="63"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="95"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="148"/>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="215"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="81"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="113"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="242"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="76"/>
-        <source>Create new table:</source>
-        <translation>Новая таблица:</translation>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="62"/>
+        <source>Existing document:</source>
+        <translation>Существующий документ:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="104"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="94"/>
+        <source>New document:</source>
+        <translation>Новый документ:</translation>
+    </message>
+    <message>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="122"/>
         <source>Use auto-annotations table</source>
         <translation>Использовать таблицу автоаннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="129"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="156"/>
         <source>Group name:</source>
         <translation>Имя группы:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="138"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="165"/>
         <source>auto</source>
         <translation>авто</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="145"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="172"/>
         <source>Predefined group names</source>
         <translation>Стандартные имена групп</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="161"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="188"/>
         <source>Annotation type:</source>
         <translation>Тип аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="175"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="202"/>
         <source>Annotation name:</source>
         <translation>Имя аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="187"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="214"/>
         <source>by type</source>
         <translation>по типу</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="196"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="223"/>
         <source>Location:</source>
         <translation>Позиция:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="205"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="232"/>
         <source>Annotation location in GenBank format</source>
         <translation>Местоположение аннотации (в формате GenBank)</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="212"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="239"/>
         <source>Add/remove complement flag</source>
         <translation>Добавить/снять флаг комплементарности</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="228"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="255"/>
         <source>Description:</source>
         <translation>Описание:</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="238"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="265"/>
         <source>Use names of patterns as annotations names. In case the patterns are in FASTA format</source>
         <translation>Использовать имена паттернов в качестве имен для аннотаций. Для случая если паттерны заданы в формате FASTA</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="241"/>
+        <location filename="../src/util/CreateAnnotationOptionsPanelWidget.ui" line="268"/>
         <source>Use pattern name</source>
         <translation>Использовать имя паттерна</translation>
     </message>
@@ -532,9 +574,13 @@
         <translation>База данных:</translation>
     </message>
     <message>
+        <source>Save to folder:</source>
+        <translation type="vanished">Сохранить в папку:</translation>
+    </message>
+    <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="79"/>
         <source>Save to directory:</source>
-        <translation>Сохранить в директорию:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="104"/>
@@ -548,11 +594,16 @@
     </message>
     <message>
         <location filename="../src/util/DownloadRemoteFileDialog.ui" line="135"/>
+        <source>Add to project</source>
+        <translation type="unfinished">Добавить в проект</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="145"/>
         <source>Some entries in the NCBI databases contain features without a sequence. You can download both sequence and features by checking this parameter. Note that some sequences are rather big.</source>
         <translation>Некоторые составляющие в базе данных NCBI содержат аннотации без последовательностей. Вы можете скачать и последовательности и аннотации при помощи этого параметра.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="138"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.ui" line="148"/>
         <source>Force download the appropriate sequence</source>
         <translation>Принудительно скачать соответствующую последовательность</translation>
     </message>
@@ -859,9 +910,13 @@
         <translation>Параметры файлов и папок</translation>
     </message>
     <message>
+        <source>Process folders recursively</source>
+        <translation type="vanished">Обработать папки рекурсивно</translation>
+    </message>
+    <message>
         <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="40"/>
         <source>Process directories recursively</source>
-        <translation>Обработать каталоги рекурсивно</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="47"/>
@@ -889,60 +944,64 @@
         <translation>Параметры импорта файлов, содержащих несколько последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="97"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="103"/>
         <source>Import as separate sequences</source>
         <translation>Импортировать как отдельные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="107"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="119"/>
         <source>Merge into a single sequence</source>
         <translation>Соединить в одну последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="132"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:10pt;">Number of 'unknown' symbols </span><span style=" font-size:10pt; font-style:italic;">('N 'for nucleic or 'X' for amino)</span><span style=" font-size:10pt;"> between parts:</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Число неизвестных символов </span><span style=" font-size:8pt; font-style:italic;">('N 'для нуклеотидных или 'X' для амино)</span><span style=" font-size:8pt;"> между частями:</span></p></body></html> {3C?} {4.0/?} {3.?} {4 [...]
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="146"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="158"/>
         <source> bases</source>
         <translation>символов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="161"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="132"/>
         <source>Join into alignment</source>
         <translation>Соедить в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="184"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="148"/>
+        <source>Number of unknown symbols (N - for nucleic or X - for amino) between parts:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="193"/>
         <source>Import ACE files as</source>
         <translation>Импортировать ACE файлы как</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="190"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="199"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="203"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="212"/>
         <source>Short reads assembly</source>
         <translation>Сборка коротких ридов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="219"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="228"/>
         <source>Documents and objects options</source>
         <translation>Настройки документов и объектов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="225"/>
+        <location filename="../src/util/shared_db/ImportOptionsWidget.ui" line="234"/>
         <source>Create a subfolder for each document</source>
         <translation>Создать подпапку для каждого документа</translation>
     </message>
@@ -1043,36 +1102,36 @@ p, li { white-space: pre-wrap; }
         <translation>Соединиться с </translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="48"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="51"/>
         <source>Export annotations...</source>
         <translation>Экспорт аннотаций...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="49"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="52"/>
         <source>Selected object doesn't have annotations</source>
         <translation>Выбранный объект не имеет аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="111"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="133"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="112"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="134"/>
         <source>Document with the same URL is added to the project.
 Remove it from the project first.</source>
         <translation>Такой документ уже добавлен в проект.
 Сначала удалите его из проекта.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="122"/>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="153"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="144"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="179"/>
         <source>Unable to create I/O factory for </source>
         <translation>Unable to create I/O factory for </translation>
     </message>
     <message>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="127"/>
-        <location filename="../src/util/ExportObjectUtils.cpp" line="156"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="149"/>
+        <location filename="../src/util/ExportObjectUtils.cpp" line="182"/>
         <source>Unknown document format I/O factory: </source>
         <translation>Unknown document format I/O factory: </translation>
     </message>
@@ -1124,29 +1183,29 @@ The items cannot be recovered once deleted.</source>
         <translation><авто></translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="64"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="59"/>
         <source>Format %1 is not supported by %2.</source>
         <translation>Формат %1 не поддерживается %2.</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="65"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="60"/>
         <source>Failed to export image to %1.</source>
         <translation>Невозможно экспортировать изображение %1.</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Author</source>
-        <translation type="unfinished"></translation>
+        <translation>Автор</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Gene name</source>
-        <translation type="unfinished"></translation>
+        <translation>Имя гена</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="56"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.h" line="50"/>
         <source>Organism</source>
-        <translation type="unfinished"></translation>
+        <translation>Организм</translation>
     </message>
 </context>
 <context>
@@ -1220,32 +1279,32 @@ The items cannot be recovered once deleted.</source>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="35"/>
         <source>Whole sequence</source>
-        <translation type="unfinished">Вся последовательность</translation>
+        <translation>Вся последовательность</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="36"/>
         <source>Selected region</source>
-        <translation type="unfinished">Выбранный регион</translation>
+        <translation>Выбранный регион</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="37"/>
         <source>Custom region</source>
-        <translation type="unfinished">Заданный регион</translation>
+        <translation>Заданный регион</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="181"/>
         <source>Invalid Start position of region</source>
-        <translation type="unfinished">Некорректная стартовая позиция в регионе</translation>
+        <translation>Некорректная стартовая позиция в регионе</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="182"/>
         <source>Invalid End position of region</source>
-        <translation type="unfinished">Некорректная конечная позиция в регионе</translation>
+        <translation>Некорректная конечная позиция в регионе</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="183"/>
         <source>Start position is greater than End position</source>
-        <translation type="unfinished">Начальная позичия больше чем конечная</translation>
+        <translation>Начальная позичия больше чем конечная</translation>
     </message>
 </context>
 <context>
@@ -1253,29 +1312,29 @@ The items cannot be recovered once deleted.</source>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="14"/>
         <source>Form</source>
-        <translation type="unfinished">Форма</translation>
+        <translation>Форма</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="27"/>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="73"/>
         <source>1</source>
-        <translation type="unfinished"></translation>
+        <translation>1</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="34"/>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="80"/>
         <source>-</source>
-        <translation type="unfinished">-</translation>
+        <translation>-</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="112"/>
         <source>Exclude</source>
-        <translation type="unfinished"></translation>
+        <translation>Исключить</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.ui" line="129"/>
         <source>Region</source>
-        <translation type="unfinished">Регион</translation>
+        <translation>Регион</translation>
     </message>
 </context>
 <context>
@@ -1506,89 +1565,85 @@ The items cannot be recovered once deleted.</source>
 <context>
     <name>U2::AceImportDialog</name>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="135"/>
         <source>Destination UGENEDB file</source>
-        <translation>Место назначения UGENEDB файла</translation>
+        <translation type="vanished">Место назначения UGENEDB файла</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="68"/>
         <source>Destination URL is not specified</source>
-        <translation>Не указан путь места назначения</translation>
+        <translation type="vanished">Не указан путь места назначения</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="54"/>
         <source>OK</source>
-        <translation>OK</translation>
+        <translation type="vanished">OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="74"/>
         <source>Destination URL must point to a local file</source>
-        <translation>Место назначения должно указывать на локальный файл</translation>
+        <translation type="vanished">Место назначения должно указывать на локальный файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="82"/>
         <source>There is opened view with destination file.
 Close it or choose different file</source>
-        <translation>Указанный файл используется.
+        <translation type="vanished">Указанный файл используется.
 Закройте его или выберите другой файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="92"/>
-        <source>Destination directory '%1' is not writable, please choose different destination URL</source>
-        <translation>Директория места назначения '%1' недоступна для записи, выберите другое место назначения</translation>
+        <source>Destination folder '%1' is not writable, please choose different destination URL</source>
+        <translation type="vanished">Папка места назначения '%1' недоступна для записи, выберите другое место назначения</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="100"/>
         <source>Destination file already exists.
 To overwrite the file, press 'Replace'.
 To append data to existing file press 'Append'.</source>
-        <translation>Указанный файл уже существует.
+        <translation type="vanished">Указанный файл уже существует.
 Чтобы переписать файл нажмите 'Переписать'.
 Для добавления данных в существующий файл нажмите 'Добавить'.</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="103"/>
         <source>Replace</source>
-        <translation>Переписать</translation>
+        <translation type="vanished">Переписать</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="104"/>
         <source>Append</source>
-        <translation>Добавить</translation>
+        <translation type="vanished">Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="55"/>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="105"/>
         <source>Cancel</source>
-        <translation>Отмена</translation>
+        <translation type="vanished">Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ImportDialogs/AceImportDialog.cpp" line="109"/>
         <source>Destination file '%1' cannot be removed</source>
-        <translation>Файл '%1' не может быть удален</translation>
+        <translation type="vanished">Файл '%1' не может быть удален</translation>
+    </message>
+</context>
+<context>
+    <name>U2::AceImportWidget</name>
+    <message>
+        <location filename="../src/util/ImportWidgets/AceImportWidget.cpp" line="60"/>
+        <source>Destination UGENEDB file</source>
+        <translation type="unfinished">Место назначения UGENEDB файла</translation>
     </message>
 </context>
 <context>
     <name>U2::AddDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="332"/>
-        <location filename="../src/OpenViewTask.cpp" line="346"/>
+        <location filename="../src/OpenViewTask.cpp" line="340"/>
+        <location filename="../src/OpenViewTask.cpp" line="354"/>
         <source>Opening view for document: 'NONAME'</source>
         <translation>Открытие документа: 'NONAME'</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="336"/>
-        <location filename="../src/OpenViewTask.cpp" line="349"/>
+        <location filename="../src/OpenViewTask.cpp" line="344"/>
+        <location filename="../src/OpenViewTask.cpp" line="357"/>
         <source>Opening view for document: %1</source>
         <translation>Открытие документа: %1</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="338"/>
+        <location filename="../src/OpenViewTask.cpp" line="346"/>
         <source>Provided document is NULL</source>
         <translation>Provided document is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="351"/>
+        <location filename="../src/OpenViewTask.cpp" line="359"/>
         <source>Document provider is NULL</source>
         <translation>Document provider is NULL</translation>
     </message>
@@ -1608,21 +1663,17 @@ To append data to existing file press 'Append'.</source>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="71"/>
         <source>Save File</source>
-        <translation type="unfinished"></translation>
+        <translation>Сохранить файл</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
         <source>Invalid Document Location</source>
-        <translation type="unfinished"></translation>
+        <translation>Неверное расположение документа</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="82"/>
         <source>Document location is empty</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Save file</source>
-        <translation type="vanished">Сохранить файл</translation>
+        <translation>Расположение документа пусто</translation>
     </message>
     <message>
         <location filename="../src/util/AddNewDocumentDialogImpl.cpp" line="96"/>
@@ -1656,12 +1707,12 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::AuthenticationDialog</name>
     <message>
-        <location filename="../src/util/AuthenticationDialog.cpp" line="88"/>
+        <location filename="../src/util/AuthenticationDialog.cpp" line="83"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/util/AuthenticationDialog.cpp" line="88"/>
+        <location filename="../src/util/AuthenticationDialog.cpp" line="83"/>
         <source>Login is not set</source>
         <translation>Логин не задан</translation>
     </message>
@@ -1732,36 +1783,33 @@ To append data to existing file press 'Append'.</source>
 <context>
     <name>U2::CreateAnnotationWidgetController</name>
     <message>
-        <source>Save file</source>
-        <translation type="vanished">Сохранить файл</translation>
-    </message>
-    <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="239"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="240"/>
         <source>Select annotation saving parameters</source>
         <translation>Выберите параметры сохранения аннотации</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="242"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="243"/>
         <source>Document is already added to the project: '%1'</source>
         <translation>Документ уже существует: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="247"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="248"/>
         <source>Illegal folder: %1</source>
         <translation>Не найден путь: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="252"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="253"/>
         <source>Illegal annotation name! </source>
         <translation>Нелегальные символы в имени аннотации. Допустимы только цифры, буквы и подчёркивания! </translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="257"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="258"/>
         <source>Illegal group name</source>
         <translation>Нелегальные символы в имени группы</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="260"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="263"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="268"/>
         <source>Invalid location! Location must be in GenBank format.
 Simple examples:
 1..10
@@ -1774,9 +1822,9 @@ join(1..10,15..45)
 complement(5..15)</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="354"/>
+        <location filename="../src/util/CreateAnnotationWidgetController.cpp" line="353"/>
         <source>Save File</source>
-        <translation type="unfinished"></translation>
+        <translation>Сохранить файл</translation>
     </message>
 </context>
 <context>
@@ -1815,22 +1863,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::CreateObjectRelationDialogController</name>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="52"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="53"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="74"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="70"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="75"/>
+        <location filename="../src/util/CreateObjectRelationDialogController.cpp" line="71"/>
         <source>Found annotations that are out of the sequence range, continue?</source>
         <translation>Найдены аннотации, выходящие за границы последовательности. Продолжить?</translation>
     </message>
@@ -1860,55 +1908,73 @@ complement(5..15)</translation>
         <source>Project is locked</source>
         <translation>Проект заблокирован</translation>
     </message>
-    <message>
-        <source>Export alignment image</source>
-        <translation type="vanished">Экспорт изображения выравнивания</translation>
-    </message>
 </context>
 <context>
     <name>U2::DownloadRemoteFileDialog</name>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="64"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="60"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="65"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="61"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="127"/>
-        <source>Select directory to save</source>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="123"/>
+        <source>Select folder to save</source>
         <translation>Папка для сохранения</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="168"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="164"/>
         <source>Resource id is empty!</source>
         <translation>Идентификатор ресурса пуст!</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="174"/>
-        <source>No directory selected for saving file!</source>
-        <translation>Не задана директория для сохранения файла!</translation>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="170"/>
+        <source>No folder selected for saving file!</source>
+        <translation>Не задана папка для сохранения файла!</translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="199"/>
+        <source>There are more than 100 files found for download.
+Are you sure you want to open all of them?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="200"/>
+        <source>Warning</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <source>Open anyway</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="201"/>
+        <source>Don't open</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="206"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="217"/>
         <source>Download remote documents</source>
         <translation>Скачать удаленные документы</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="246"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="257"/>
         <source>Hint: </source>
         <translation>Подсказка: </translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="247"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="258"/>
         <source>Use database unique identifier.</source>
         <translation>Использовать уникальный идентификатор базы данных.</translation>
     </message>
     <message>
-        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="249"/>
+        <location filename="../src/util/DownloadRemoteFileDialog.cpp" line="260"/>
         <source>You can download multiple items by separating IDs with space or semicolon.</source>
         <translation>Вы можете скачать несколько элементов разделяя идентификаторы при помощи пробела или точки с запятой.</translation>
     </message>
@@ -1916,18 +1982,18 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditConnectionDialog</name>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="145"/>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="151"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="140"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="146"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="145"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="140"/>
         <source>Host is not set</source>
         <translation>Хост не задан</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="151"/>
+        <location filename="../src/util/shared_db/EditConnectionDialog.cpp" line="146"/>
         <source>Database is not set</source>
         <translation>База данных не задана</translation>
     </message>
@@ -1935,33 +2001,33 @@ complement(5..15)</translation>
 <context>
     <name>U2::EditQualifierDialog</name>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="45"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="40"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="46"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="41"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="49"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="44"/>
         <source>View Qualifier</source>
         <translation>Посмотреть квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="100"/>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="104"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="95"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="99"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="100"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="95"/>
         <source>Illegal qualifier name</source>
         <translation>Нелегальные символы в имени квалификатора</translation>
     </message>
     <message>
-        <location filename="../src/util/EditQualifierDialog.cpp" line="104"/>
+        <location filename="../src/util/EditQualifierDialog.cpp" line="99"/>
         <source>Illegal qualifier value</source>
         <translation>Нелегальные символы в значении квалификатора</translation>
     </message>
@@ -1990,8 +2056,8 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="141"/>
-        <source>Directory to save is not exists</source>
-        <translation>Директория не существует</translation>
+        <source>Folder to save is not exists</source>
+        <translation>Папка не существует</translation>
     </message>
     <message>
         <location filename="../src/util/EditSequenceDialogController.cpp" line="145"/>
@@ -2106,26 +2172,31 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/ExportAnnotationsDialog.ui" line="58"/>
+        <source>Add to project</source>
+        <translation type="unfinished">Добавить в проект</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="68"/>
         <source>Save sequences under annotations</source>
         <translation>Сохранить последовательности аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.ui" line="65"/>
+        <location filename="../src/util/ExportAnnotationsDialog.ui" line="75"/>
         <source>Save sequence names</source>
         <translation>Сохранить имена последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="47"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="48"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="69"/>
+        <location filename="../src/util/ExportAnnotationsDialog.cpp" line="70"/>
         <source>Select file to save annotations</source>
         <translation>Выберите файл для сохранения аннотаций</translation>
     </message>
@@ -2134,11 +2205,13 @@ complement(5..15)</translation>
     <name>U2::ExportDocumentDialogController</name>
     <message>
         <location filename="../src/util/ExportDocumentDialogController.cpp" line="48"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="66"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
         <location filename="../src/util/ExportDocumentDialogController.cpp" line="49"/>
+        <location filename="../src/util/ExportDocumentDialogController.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -2146,45 +2219,37 @@ complement(5..15)</translation>
 <context>
     <name>U2::ExportImageDialog</name>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="69"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="71"/>
         <source>Image export task factory is NULL</source>
         <translation>Image export task factory is NULL</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="96"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="98"/>
         <source>The image file path is empty.</source>
         <translation>Путь до изображения пуст.</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="101"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="103"/>
         <source>The image file cannot be created. No write permissions.</source>
         <translation>Файл не может быть создан. Недостаточно прав.</translation>
     </message>
     <message>
-        <source>Overwrite file?</source>
-        <translation type="vanished">Переписать файл?</translation>
-    </message>
-    <message>
-        <source>The file "%1" already exists. Do you wish to overwrite it?</source>
-        <translation type="vanished">Файл "%1" уже существует. Переписать его?</translation>
-    </message>
-    <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="109"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="111"/>
         <source>Saving image to '%1'...</source>
         <translation>Сохранение изображения в '%1'...</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="147"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="149"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="227"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="229"/>
         <source>Save Image As</source>
         <translation>Сохранить изображение как</translation>
     </message>
     <message>
-        <location filename="../src/util/ExportImageDialog.cpp" line="146"/>
+        <location filename="../src/util/ExportImageDialog.cpp" line="148"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
@@ -2194,14 +2259,14 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/project/filter_tasks/FeatureKeyFilterTask.cpp" line="59"/>
         <source>DbiRef is invalid</source>
-        <translation type="unfinished"></translation>
+        <translation>DbiRef is invalid</translation>
     </message>
 </context>
 <context>
     <name>U2::FileLineEdit</name>
     <message>
-        <location filename="../src/util/DialogUtils.cpp" line="91"/>
-        <location filename="../src/util/DialogUtils.cpp" line="97"/>
+        <location filename="../src/util/DialogUtils.cpp" line="89"/>
+        <location filename="../src/util/DialogUtils.cpp" line="95"/>
         <source>Select file(s)</source>
         <translation>Выберите файл(ы)</translation>
     </message>
@@ -2217,12 +2282,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::FolderNameDialog</name>
     <message>
-        <location filename="../src/util/project/FolderNameDialog.cpp" line="41"/>
+        <location filename="../src/util/project/FolderNameDialog.cpp" line="35"/>
         <source>Add Folder</source>
         <translation>Добавить папку</translation>
     </message>
     <message>
-        <location filename="../src/util/project/FolderNameDialog.cpp" line="41"/>
+        <location filename="../src/util/project/FolderNameDialog.cpp" line="35"/>
         <source>Rename Folder</source>
         <translation>Переименовать папку</translation>
     </message>
@@ -2243,29 +2308,37 @@ complement(5..15)</translation>
 <context>
     <name>U2::GUIUtils</name>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="148"/>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
-        <location filename="../src/util/GUIUtils.cpp" line="176"/>
+        <location filename="../src/util/GUIUtils.cpp" line="154"/>
+        <location filename="../src/util/GUIUtils.cpp" line="164"/>
+        <location filename="../src/util/GUIUtils.cpp" line="182"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="148"/>
+        <location filename="../src/util/GUIUtils.cpp" line="154"/>
         <source>Document URL is empty!</source>
         <translation>Пустая ссылка!</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="158"/>
+        <location filename="../src/util/GUIUtils.cpp" line="164"/>
         <source>Unable to launch default web browser.</source>
         <translation>Не удалось запустить браузер Интернет, установленный по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../src/util/GUIUtils.cpp" line="176"/>
+        <location filename="../src/util/GUIUtils.cpp" line="182"/>
         <source>Please specify the browser executable</source>
         <translation>Не указано приложение браузера</translation>
     </message>
 </context>
 <context>
+    <name>U2::GroupOptionsWidget</name>
+    <message>
+        <location filename="../src/options_panel/GroupOptionsWidget.cpp" line="67"/>
+        <source>Help</source>
+        <translation type="unfinished">Помощь</translation>
+    </message>
+</context>
+<context>
     <name>U2::Header</name>
     <message>
         <location filename="../src/NotificationWidget.cpp" line="47"/>
@@ -2281,7 +2354,7 @@ complement(5..15)</translation>
 <context>
     <name>U2::HelpButton</name>
     <message>
-        <location filename="../src/util/HelpButton.cpp" line="40"/>
+        <location filename="../src/util/HelpButton.cpp" line="34"/>
         <source>Help</source>
         <translation>Помощь</translation>
     </message>
@@ -2289,17 +2362,17 @@ complement(5..15)</translation>
 <context>
     <name>U2::ImageExportController</name>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="81"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="76"/>
         <source>SVG format is not supported</source>
         <translation>SVG format is not supported</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="85"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="80"/>
         <source>PS/PDF format is not supported</source>
         <translation>PS/PDF format is not supported</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="88"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="83"/>
         <source>Raster formats are disabled</source>
         <translation>Raster formats are disabled</translation>
     </message>
@@ -2307,7 +2380,7 @@ complement(5..15)</translation>
 <context>
     <name>U2::ImageExportTask</name>
     <message>
-        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="68"/>
+        <location filename="../src/util/imageExport/ImageExportTask.cpp" line="63"/>
         <source>Done!</source>
         <translation>Готово!</translation>
     </message>
@@ -2343,17 +2416,17 @@ complement(5..15)</translation>
         <translation>Импорт</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="293"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="291"/>
         <source>Select files to import</source>
         <translation>Выберите файлы для импорта</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="316"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="314"/>
         <source>Select a folder to import</source>
         <translation>Выберите папку для импорта</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="551"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="549"/>
         <source>This file will be imported with its own options.
 
 </source>
@@ -2362,59 +2435,59 @@ complement(5..15)</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="554"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="552"/>
         <source>File:
 </source>
         <translation>Файл:
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="557"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="596"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="642"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="659"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="555"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="594"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="640"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="657"/>
         <source>Import to: </source>
         <translation>Импортировать в: </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="561"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="559"/>
         <source>A folder for file objects will be created</source>
         <translation>Будет создана папка для файловых объектов</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="565"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="609"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="563"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="607"/>
         <source>If file is not recognized, it will be imported as binary data</source>
         <translation>Если файл не будет распознан, он будет импортирован в виде бинарных данных</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="570"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="614"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="568"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="612"/>
         <source>If file contains more than one sequence, they will imported as separate objects</source>
         <translation>Если файл содержит больше чем одну последовательность, то они будут импортированы как отдельные объекты</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="573"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="617"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="571"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="615"/>
         <source>If file contains more than one sequence, they will imported as single sequence with several 'Unknown' bases as separator</source>
         <translation>Если файл содержит больше чем одну последовательность они будут импортированы в одну последовательность с несколькими 'Unknown' символами в качестве разделителей</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="574"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="618"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="572"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="616"/>
         <source>Size of separator: %1</source>
         <translation>Размер разделителя: %1</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="577"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="621"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="575"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="619"/>
         <source>If file contains more than one sequence, they will be joined into the multiple alignment</source>
         <translation>Если файл содержит больше чем одну последовательность они будут соединены в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="590"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="634"/>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="653"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="588"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="632"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="651"/>
         <source>This folder will be imported with its own options.
 
 </source>
@@ -2422,34 +2495,34 @@ complement(5..15)</translation>
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="593"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="591"/>
         <source>Folder:
 </source>
         <translation>Папка:
 </translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="601"/>
-        <source>The directory will be processed recursively</source>
-        <translation>Эта директория будет будет обработана рекурсивно</translation>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="599"/>
+        <source>The folder will be processed recursively</source>
+        <translation>Эта папка будет будет обработана рекурсивно</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="605"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="603"/>
         <source>A folder for each file will be created</source>
         <translation>Будет создана папка для каждого файла</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="637"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="635"/>
         <source>The </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="637"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="635"/>
         <source> from document </source>
         <translation> из документа</translation>
     </message>
     <message>
-        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="656"/>
+        <location filename="../src/util/shared_db/ImportToDatabaseDialog.cpp" line="654"/>
         <source>Document:
 </source>
         <translation>Документ:
@@ -2459,33 +2532,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::LoadRemoteDocumentAndAddToProjectTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="224"/>
-        <location filename="../src/OpenViewTask.cpp" line="231"/>
-        <location filename="../src/OpenViewTask.cpp" line="238"/>
+        <location filename="../src/OpenViewTask.cpp" line="227"/>
+        <location filename="../src/OpenViewTask.cpp" line="235"/>
+        <location filename="../src/OpenViewTask.cpp" line="243"/>
         <source>Load remote document and add to project</source>
-        <translation type="unfinished"></translation>
+        <translation>Load remote document and add to project</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="283"/>
+        <location filename="../src/OpenViewTask.cpp" line="291"/>
         <source>Cannot find %1 in %2 database</source>
-        <translation type="unfinished">Невозможно найти %1 в базе данных %2</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LoadRemoteDocumentAndOpenViewTask</name>
-    <message>
-        <source>Cannot find %1 in %2 database</source>
-        <translation type="vanished">Невозможно найти %1 в базе данных %2</translation>
-    </message>
-    <message>
-        <source>Load remote document and open view</source>
-        <translation type="vanished">Загрузить и открыть удаленный документ</translation>
+        <translation>Невозможно найти %1 в базе данных %2</translation>
     </message>
 </context>
 <context>
     <name>U2::LoadUnloadedDocumentAndOpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="70"/>
+        <location filename="../src/OpenViewTask.cpp" line="65"/>
         <source>Load document: '%1'</source>
         <translation>Загрузка документа: %1</translation>
     </message>
@@ -2493,42 +2555,46 @@ complement(5..15)</translation>
 <context>
     <name>U2::LogViewWidget</name>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="72"/>
+        <location filename="../src/util/logview/LogView.cpp" line="65"/>
         <source>Log</source>
         <translation>Лог</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="79"/>
         <source>Settings</source>
-        <translation>Настройки</translation>
+        <translation type="vanished">Настройки</translation>
+    </message>
+    <message>
+        <location filename="../src/util/logview/LogView.cpp" line="72"/>
+        <source>Settings...</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="83"/>
+        <location filename="../src/util/logview/LogView.cpp" line="76"/>
         <source>Dump performance counters</source>
         <translation>Сбросить счетчики производительности</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="86"/>
+        <location filename="../src/util/logview/LogView.cpp" line="79"/>
         <source>Append separator</source>
         <translation>Добавить разделитель</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="88"/>
+        <location filename="../src/util/logview/LogView.cpp" line="81"/>
         <source>Clear log</source>
         <translation>Очистить лог</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="133"/>
+        <location filename="../src/util/logview/LogView.cpp" line="126"/>
         <source>Copy</source>
         <translation>Копировать</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="198"/>
+        <location filename="../src/util/logview/LogView.cpp" line="191"/>
         <source>logview_set_case</source>
         <translation>Установить тип</translation>
     </message>
     <message>
-        <location filename="../src/util/logview/LogView.cpp" line="201"/>
+        <location filename="../src/util/logview/LogView.cpp" line="194"/>
         <source>logview_use_regexp</source>
         <translation>Использовать регулярные выражения</translation>
     </message>
@@ -2536,12 +2602,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::MultipleRangeSelector</name>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="244"/>
+        <location filename="../src/util/RangeSelector.cpp" line="241"/>
         <source>Go</source>
         <translation>Перейти</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="245"/>
+        <location filename="../src/util/RangeSelector.cpp" line="242"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -2585,27 +2651,27 @@ complement(5..15)</translation>
 <context>
     <name>U2::ObjectViewTreeController</name>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="60"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="56"/>
         <source>Activate view</source>
         <translation>Переключиться на окно</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="66"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="62"/>
         <source>Add bookmark</source>
         <translation>Добавить закладку</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="71"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="67"/>
         <source>Remove bookmark</source>
         <translation>Удалить закладку</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="78"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="74"/>
         <source>Rename bookmark</source>
         <translation>Переименовать закладку</translation>
     </message>
     <message>
-        <location filename="../src/util/ObjectViewTreeController.cpp" line="397"/>
+        <location filename="../src/util/ObjectViewTreeController.cpp" line="393"/>
         <source>New bookmark</source>
         <translation>Закладка</translation>
     </message>
@@ -2613,12 +2679,12 @@ complement(5..15)</translation>
 <context>
     <name>U2::OpenViewTask</name>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="152"/>
+        <location filename="../src/OpenViewTask.cpp" line="147"/>
         <source>State is NULL</source>
         <translation>State is NULL</translation>
     </message>
     <message>
-        <location filename="../src/OpenViewTask.cpp" line="154"/>
+        <location filename="../src/OpenViewTask.cpp" line="149"/>
         <source>GObject factory is NULL</source>
         <translation>GObject factory is NULL</translation>
     </message>
@@ -2648,30 +2714,30 @@ complement(5..15)</translation>
     <name>U2::PasteUrlsTask</name>
     <message>
         <location filename="../src/PasteController.cpp" line="178"/>
-        <source>Pasting of directories is not supported:</source>
-        <translation>Pasting of directories is not supported:</translation>
+        <source>Pasting of folders is not supported:</source>
+        <translation>Pasting of folders is not supported:</translation>
     </message>
 </context>
 <context>
     <name>U2::PositionSelector</name>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="51"/>
-        <location filename="../src/util/PositionSelector.cpp" line="98"/>
+        <location filename="../src/util/PositionSelector.cpp" line="42"/>
+        <location filename="../src/util/PositionSelector.cpp" line="89"/>
         <source>Go!</source>
         <translation>Перейти!</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="52"/>
+        <location filename="../src/util/PositionSelector.cpp" line="43"/>
         <source>Go to position</source>
         <translation>Перейти на позицию</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="84"/>
+        <location filename="../src/util/PositionSelector.cpp" line="75"/>
         <source>Position</source>
         <translation>Позиция</translation>
     </message>
     <message>
-        <location filename="../src/util/PositionSelector.cpp" line="104"/>
+        <location filename="../src/util/PositionSelector.cpp" line="95"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -2697,22 +2763,22 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectParser10</name>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="351"/>
+        <location filename="../src/ProjectParsing.cpp" line="356"/>
         <source>Can't find project file: %1, ignoring</source>
         <translation>Невозможно найти файл проекта: %1, игнорируется</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="355"/>
+        <location filename="../src/ProjectParsing.cpp" line="360"/>
         <source>Duplicate document found: %1, ignoring</source>
         <translation>Найдены одинаковые документы: %1, игнорируется</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="360"/>
+        <location filename="../src/ProjectParsing.cpp" line="367"/>
         <source>Database document: %1, ignoring</source>
         <translation>Документ базы данных: %1, игнорируется</translation>
     </message>
     <message>
-        <location filename="../src/ProjectParsing.cpp" line="406"/>
+        <location filename="../src/ProjectParsing.cpp" line="414"/>
         <source>The last loaded state was locked by format</source>
         <translation>Крайнее загруженное состояние было заблокировано форматом</translation>
     </message>
@@ -2720,25 +2786,17 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectTreeController</name>
     <message>
-        <source>Load selected documents</source>
-        <translation type="vanished">Загрузить выбранные документы</translation>
-    </message>
-    <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="554"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="550"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <source>Unload selected document</source>
-        <translation type="vanished">Выгрузить выбранные документы</translation>
-    </message>
-    <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="327"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="323"/>
         <source>Import to the database...</source>
         <translation>Импортировать в базу данных...</translation>
     </message>
     <message>
-        <location filename="../src/util/project/ProjectTreeController.cpp" line="328"/>
+        <location filename="../src/util/project/ProjectTreeController.cpp" line="324"/>
         <source>Import to the folder...</source>
         <translation>Импортировать в папку...</translation>
     </message>
@@ -2786,12 +2844,12 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="952"/>
         <source>Load selected document(s)</source>
-        <translation type="unfinished"></translation>
+        <translation>Загрузить выбранный документ(ы)</translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="959"/>
         <source>Unload selected document(s)</source>
-        <translation type="unfinished"></translation>
+        <translation>Выгрузить выбранный документ(ы)</translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectTreeController.cpp" line="977"/>
@@ -2845,29 +2903,21 @@ complement(5..15)</translation>
 <context>
     <name>U2::ProjectViewModel</name>
     <message>
-        <source>[unloaded]</source>
-        <translation type="vanished">[выгружен]</translation>
-    </message>
-    <message>
-        <source>[loading %1%]</source>
-        <translation type="vanished">[прочитано %1%]</translation>
-    </message>
-    <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1108"/>
         <source>[unloaded] </source>
-        <translation type="unfinished"></translation>
+        <translation>[выгружен]</translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1111"/>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1220"/>
         <source>[loading] </source>
-        <translation type="unfinished"></translation>
+        <translation>[загрузка] </translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1113"/>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1222"/>
         <source>[loading %1%] </source>
-        <translation type="unfinished"></translation>
+        <translation>[загрузка %1%] </translation>
     </message>
     <message>
         <location filename="../src/util/project/ProjectViewModel.cpp" line="1146"/>
@@ -2883,46 +2933,46 @@ complement(5..15)</translation>
 <context>
     <name>U2::QueryBlockWidget</name>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="246"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="241"/>
         <source>Term:</source>
         <translation>Условие:</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="257"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="252"/>
         <source>All fields</source>
-        <translation type="unfinished"></translation>
+        <translation>Все поля</translation>
     </message>
 </context>
 <context>
     <name>U2::RangeSelector</name>
     <message>
         <location filename="../src/util/RangeSelector.cpp" line="60"/>
-        <location filename="../src/util/RangeSelector.cpp" line="149"/>
+        <location filename="../src/util/RangeSelector.cpp" line="146"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="96"/>
+        <location filename="../src/util/RangeSelector.cpp" line="93"/>
         <source>Min</source>
         <translation>Мин</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="100"/>
+        <location filename="../src/util/RangeSelector.cpp" line="97"/>
         <source>Max</source>
         <translation>Макс</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="116"/>
+        <location filename="../src/util/RangeSelector.cpp" line="113"/>
         <source>Range:</source>
         <translation>Регион:</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="128"/>
+        <location filename="../src/util/RangeSelector.cpp" line="125"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/util/RangeSelector.cpp" line="155"/>
+        <location filename="../src/util/RangeSelector.cpp" line="152"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
@@ -2941,13 +2991,13 @@ complement(5..15)</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="126"/>
-        <location filename="../src/util/RegionSelector.cpp" line="147"/>
+        <location filename="../src/util/RegionSelector.cpp" line="148"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelector.cpp" line="134"/>
-        <location filename="../src/util/RegionSelector.cpp" line="153"/>
+        <location filename="../src/util/RegionSelector.cpp" line="154"/>
         <source>-</source>
         <translation>-</translation>
     </message>
@@ -2956,36 +3006,24 @@ complement(5..15)</translation>
         <source>Invalid sequence region!</source>
         <translation>Некорректный регион последовательности!</translation>
     </message>
-    <message>
-        <source>Invalid Start position of region</source>
-        <translation type="vanished">Некорректная стартовая позиция в регионе</translation>
-    </message>
-    <message>
-        <source>Invalid End position of region</source>
-        <translation type="vanished">Некорректная конечная позиция в регионе</translation>
-    </message>
-    <message>
-        <source>Start position is greater than End position</source>
-        <translation type="vanished">Начальная позичия больше чем конечная</translation>
-    </message>
 </context>
 <context>
     <name>U2::RegionSelectorController</name>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="132"/>
         <source>Region is not in sequence range</source>
-        <translation type="unfinished"></translation>
+        <translation>Region is not in sequence range</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="150"/>
         <source>Cannot get preset name, ComboBox is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot get preset name, ComboBox is NULL</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="155"/>
         <location filename="../src/util/RegionSelectorController.cpp" line="172"/>
         <source>Cannot set preset, ComboBox is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Cannot set preset, ComboBox is NULL</translation>
     </message>
     <message>
         <location filename="../src/util/RegionSelectorController.cpp" line="230"/>
@@ -2993,7 +3031,7 @@ complement(5..15)</translation>
         <location filename="../src/util/RegionSelectorController.cpp" line="291"/>
         <location filename="../src/util/RegionSelectorController.cpp" line="326"/>
         <source>Region lineEdit is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Region lineEdit is NULL</translation>
     </message>
 </context>
 <context>
@@ -3001,7 +3039,7 @@ complement(5..15)</translation>
     <message>
         <location filename="../src/util/RegionSelectorWithExcludedRegion.cpp" line="95"/>
         <source>'Exclude' region contains 'Search In' region. Search region is empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>'Exclude' region contains 'Search In' region. Search region is empty.</translation>
     </message>
 </context>
 <context>
@@ -3043,80 +3081,91 @@ complement(5..15)</translation>
     </message>
 </context>
 <context>
-    <name>U2::SaveDocumentGroupController</name>
-    <message>
-        <source>Select file location</source>
-        <translation type="vanished">Укажите местонахождение файла</translation>
-    </message>
-</context>
-<context>
     <name>U2::ScaleBar</name>
     <message>
-        <location filename="../src/util/ScaleBar.cpp" line="43"/>
         <source>-</source>
-        <translation>-</translation>
+        <translation type="vanished">-</translation>
     </message>
     <message>
-        <location filename="../src/util/ScaleBar.cpp" line="50"/>
         <source>+</source>
-        <translation>+</translation>
+        <translation type="vanished">+</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ScaleBar.cpp" line="42"/>
+        <location filename="../src/util/ScaleBar.cpp" line="46"/>
+        <source>Decrease peaks height</source>
+        <translation>Уменьшить высоту пиков</translation>
+    </message>
+    <message>
+        <location filename="../src/util/ScaleBar.cpp" line="53"/>
+        <location filename="../src/util/ScaleBar.cpp" line="57"/>
+        <source>Increase peaks height</source>
+        <translation>Увеличить высоту пиков</translation>
     </message>
 </context>
 <context>
     <name>U2::ScriptEditorDialog</name>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="52"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="45"/>
         <source>Done</source>
         <translation>Готово</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="53"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="103"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="96"/>
         <source>File is too large %1</source>
         <translation>Файл "%1" слишком большой</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="120"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="113"/>
         <source>Select script to open</source>
         <translation>Выберите скрипт</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="139"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="132"/>
         <source>Script is empty!</source>
         <translation>Скрипт пуст!</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="143"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="136"/>
         <source>Save script to file</source>
         <translation>Сохранить скрипт в файл</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="163"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="156"/>
         <source>Script files</source>
         <translation>Файлы скрипта</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="174"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="167"/>
         <source>Script syntax check failed! Line: %1, error: %2</source>
         <translation>Проверка синтаксиса скрипта не удалась! В строке: %1 обнаружена ошибка: %2</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="175"/>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="177"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="168"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="170"/>
         <source>Check result</source>
         <translation>Результат проверки</translation>
     </message>
     <message>
-        <location filename="../src/util/ScriptEditorDialog.cpp" line="177"/>
+        <location filename="../src/util/ScriptEditorDialog.cpp" line="170"/>
         <source>Syntax is OK!</source>
         <translation>Проверка синтаксиса удачна!</translation>
     </message>
 </context>
 <context>
+    <name>U2::SearchBox</name>
+    <message>
+        <location filename="../src/util/SearchBox.cpp" line="56"/>
+        <source>Search...</source>
+        <translation>Поиск...</translation>
+    </message>
+</context>
+<context>
     <name>U2::SearchGenbankSequenceDialogController</name>
     <message>
         <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="49"/>
@@ -3129,12 +3178,12 @@ complement(5..15)</translation>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="157"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="152"/>
         <source>an unexpected subtask</source>
         <translation>an unexpected subtask</translation>
     </message>
     <message>
-        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="194"/>
+        <location filename="../src/util/SearchGenbankSequenceDialogController.cpp" line="189"/>
         <source>No results found corresponding to the query</source>
         <translation>Не найдено результатов соответствующих запросу</translation>
     </message>
@@ -3249,42 +3298,42 @@ check connection settings</translation>
 <context>
     <name>U2::ToolsMenu</name>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="108"/>
+        <location filename="../src/ToolsMenu.cpp" line="109"/>
         <source>Sanger data analysis</source>
         <translation>Анализ данных секвенирования по Сэнгеру</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="118"/>
+        <location filename="../src/ToolsMenu.cpp" line="119"/>
         <source>NGS data analysis</source>
         <translation>Анализ данных NGS</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="146"/>
+        <location filename="../src/ToolsMenu.cpp" line="149"/>
         <source>BLAST</source>
         <translation>BLAST</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="160"/>
+        <location filename="../src/ToolsMenu.cpp" line="163"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="172"/>
+        <location filename="../src/ToolsMenu.cpp" line="175"/>
         <source>Cloning</source>
         <translation>Клонирование</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="180"/>
+        <location filename="../src/ToolsMenu.cpp" line="183"/>
         <source>Primer</source>
         <translation>Олигонуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="186"/>
+        <location filename="../src/ToolsMenu.cpp" line="189"/>
         <source>Search for TFBS</source>
         <translation>Поиск сайтов связывания транскрипционных факторов (TFBS)</translation>
     </message>
     <message>
-        <location filename="../src/ToolsMenu.cpp" line="195"/>
+        <location filename="../src/ToolsMenu.cpp" line="198"/>
         <source>HMMER tools</source>
         <translation>Инструменты HMMER</translation>
     </message>
@@ -3357,13 +3406,13 @@ check connection settings</translation>
 <context>
     <name>U2::WidgetScreenshotExportToSvgTask</name>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="58"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="52"/>
         <source>Painter is still active</source>
         <translation>Отрисовка еще активна</translation>
     </message>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="64"/>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="67"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="58"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="61"/>
         <source>Can not open the file: %1</source>
         <translation>Невозможно открыть файл: %1</translation>
     </message>
@@ -3371,7 +3420,7 @@ check connection settings</translation>
 <context>
     <name>U2::WidgetScreenshotImageExportController</name>
     <message>
-        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="115"/>
+        <location filename="../src/util/imageExport/WidgetScreenshotExportTask.cpp" line="109"/>
         <source>Screenshot</source>
         <translation>Скриншот</translation>
     </message>
diff --git a/src/corelibs/U2Lang/U2Lang.pri b/src/corelibs/U2Lang/U2Lang.pri
index 456bd42..0d21fc4 100644
--- a/src/corelibs/U2Lang/U2Lang.pri
+++ b/src/corelibs/U2Lang/U2Lang.pri
@@ -4,8 +4,7 @@ MODULE_ID=U2Lang
 include( ../../ugene_lib_common.pri )
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += xml
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+QT += xml widgets
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2LANG_DLL
 
 LIBS += -L../../_release -lU2Core
diff --git a/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp b/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
index c112231..5868b44 100644
--- a/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseActorCategories.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseActorCategories.h b/src/corelibs/U2Lang/src/library/BaseActorCategories.h
index 1964b35..dd2177f 100644
--- a/src/corelibs/U2Lang/src/library/BaseActorCategories.h
+++ b/src/corelibs/U2Lang/src/library/BaseActorCategories.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseAttributes.cpp b/src/corelibs/U2Lang/src/library/BaseAttributes.cpp
index e17bacc..7e2f12f 100644
--- a/src/corelibs/U2Lang/src/library/BaseAttributes.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseAttributes.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QVariant>
+
 #include "BaseAttributes.h"
 
 static const QString URL_LOCATION_ATTR_ID("url_location");
diff --git a/src/corelibs/U2Lang/src/library/BaseAttributes.h b/src/corelibs/U2Lang/src/library/BaseAttributes.h
index 4fa60c8..d3cb53b 100644
--- a/src/corelibs/U2Lang/src/library/BaseAttributes.h
+++ b/src/corelibs/U2Lang/src/library/BaseAttributes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseDatasetWorker.cpp b/src/corelibs/U2Lang/src/library/BaseDatasetWorker.cpp
index da6b8ac..b42188a 100644
--- a/src/corelibs/U2Lang/src/library/BaseDatasetWorker.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseDatasetWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseDatasetWorker.h b/src/corelibs/U2Lang/src/library/BaseDatasetWorker.h
index 173f836..9e4657a 100644
--- a/src/corelibs/U2Lang/src/library/BaseDatasetWorker.h
+++ b/src/corelibs/U2Lang/src/library/BaseDatasetWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseOneOneWorker.cpp b/src/corelibs/U2Lang/src/library/BaseOneOneWorker.cpp
index 3ed8c01..5462503 100644
--- a/src/corelibs/U2Lang/src/library/BaseOneOneWorker.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseOneOneWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseOneOneWorker.h b/src/corelibs/U2Lang/src/library/BaseOneOneWorker.h
index 6a03cdc..5e058a1 100644
--- a/src/corelibs/U2Lang/src/library/BaseOneOneWorker.h
+++ b/src/corelibs/U2Lang/src/library/BaseOneOneWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BasePorts.cpp b/src/corelibs/U2Lang/src/library/BasePorts.cpp
index 9a6cf08..198f0d4 100644
--- a/src/corelibs/U2Lang/src/library/BasePorts.cpp
+++ b/src/corelibs/U2Lang/src/library/BasePorts.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BasePorts.h b/src/corelibs/U2Lang/src/library/BasePorts.h
index c6cc92c..6cbe893 100644
--- a/src/corelibs/U2Lang/src/library/BasePorts.h
+++ b/src/corelibs/U2Lang/src/library/BasePorts.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef __U2_WORKFLOW_BASE_PORTS_H_
 #define __U2_WORKFLOW_BASE_PORTS_H_
 
-#include <QtCore/QString>
+#include <QString>
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/library/BaseSlots.cpp b/src/corelibs/U2Lang/src/library/BaseSlots.cpp
index a32c950..f7d5362 100644
--- a/src/corelibs/U2Lang/src/library/BaseSlots.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseSlots.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseSlots.h b/src/corelibs/U2Lang/src/library/BaseSlots.h
index 6713d64..889f0f0 100644
--- a/src/corelibs/U2Lang/src/library/BaseSlots.h
+++ b/src/corelibs/U2Lang/src/library/BaseSlots.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseThroughWorker.cpp b/src/corelibs/U2Lang/src/library/BaseThroughWorker.cpp
index 1abc92b..ef86b5d 100644
--- a/src/corelibs/U2Lang/src/library/BaseThroughWorker.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseThroughWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseThroughWorker.h b/src/corelibs/U2Lang/src/library/BaseThroughWorker.h
index 1bcab73..4d6a840 100644
--- a/src/corelibs/U2Lang/src/library/BaseThroughWorker.h
+++ b/src/corelibs/U2Lang/src/library/BaseThroughWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseTypes.cpp b/src/corelibs/U2Lang/src/library/BaseTypes.cpp
index 1815cbf..862e81c 100644
--- a/src/corelibs/U2Lang/src/library/BaseTypes.cpp
+++ b/src/corelibs/U2Lang/src/library/BaseTypes.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/BaseTypes.h b/src/corelibs/U2Lang/src/library/BaseTypes.h
index b880754..89f9bb1 100644
--- a/src/corelibs/U2Lang/src/library/BaseTypes.h
+++ b/src/corelibs/U2Lang/src/library/BaseTypes.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/LastReadyScheduler.cpp b/src/corelibs/U2Lang/src/library/LastReadyScheduler.cpp
index bd90700..3f18c28 100644
--- a/src/corelibs/U2Lang/src/library/LastReadyScheduler.cpp
+++ b/src/corelibs/U2Lang/src/library/LastReadyScheduler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Lang/WorkflowDebugStatus.h>
-
-#include <U2Core/Timer.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/Timer.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Lang/WorkflowMonitor.h>
 #include <U2Lang/ElapsedTimeUpdater.h>
+#include <U2Lang/WorkflowDebugStatus.h>
+#include <U2Lang/WorkflowMonitor.h>
 
 #include "LastReadyScheduler.h"
 
diff --git a/src/corelibs/U2Lang/src/library/LastReadyScheduler.h b/src/corelibs/U2Lang/src/library/LastReadyScheduler.h
index 8da5413..e93316a 100644
--- a/src/corelibs/U2Lang/src/library/LastReadyScheduler.h
+++ b/src/corelibs/U2Lang/src/library/LastReadyScheduler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/LocalDomain.cpp b/src/corelibs/U2Lang/src/library/LocalDomain.cpp
index 0126483..5896d1a 100644
--- a/src/corelibs/U2Lang/src/library/LocalDomain.cpp
+++ b/src/corelibs/U2Lang/src/library/LocalDomain.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,22 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include "LocalDomain.h"
+#include <U2Core/AppContext.h>
+#include <U2Core/CMDLineRegistry.h>
+#include <U2Core/CMDLineUtils.h>
+#include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
 
+#include <U2Lang/ActorModel.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/IntegralBusType.h>
 #include <U2Lang/LastReadyScheduler.h>
 #include <U2Lang/Schema.h>
-#include <U2Lang/IntegralBusType.h>
 #include <U2Lang/WorkflowMonitor.h>
 #include <U2Lang/WorkflowSettings.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/ActorModel.h>
-
-#include <U2Core/Log.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/CMDLineRegistry.h>
-#include <U2Core/CMDLineUtils.h>
 
+#include "LocalDomain.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/corelibs/U2Lang/src/library/LocalDomain.h b/src/corelibs/U2Lang/src/library/LocalDomain.h
index bd9bc2a..641d832 100644
--- a/src/corelibs/U2Lang/src/library/LocalDomain.h
+++ b/src/corelibs/U2Lang/src/library/LocalDomain.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Lang/WorkflowTransport.h>
 #include <U2Lang/WorkflowManager.h>
 
-#include <QtCore/QQueue>
+#include <QQueue>
 #include <limits.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/library/script/ActorContext.cpp b/src/corelibs/U2Lang/src/library/script/ActorContext.cpp
index 6f45205..acf00cb 100644
--- a/src/corelibs/U2Lang/src/library/script/ActorContext.cpp
+++ b/src/corelibs/U2Lang/src/library/script/ActorContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/script/ActorContext.h b/src/corelibs/U2Lang/src/library/script/ActorContext.h
index 463c3dc..7b10fa9 100644
--- a/src/corelibs/U2Lang/src/library/script/ActorContext.h
+++ b/src/corelibs/U2Lang/src/library/script/ActorContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,6 @@
 
 #include <U2Lang/LocalDomain.h>
 
-#include <QtScript>
-
 namespace U2 {
 using namespace Workflow;
 namespace LocalWorkflow {
diff --git a/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.cpp b/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.cpp
index fd46df1..1415e0e 100644
--- a/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.cpp
+++ b/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.h b/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.h
index f0c9f91..8dec31b 100644
--- a/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.h
+++ b/src/corelibs/U2Lang/src/library/script/DbiClassPrototype.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,12 @@
 #ifndef _U2_DBICLASSPROTOTYPE_H_
 #define _U2_DBICLASSPROTOTYPE_H_
 
-#include <U2Lang/DbiDataHandler.h>
-
 #include <QObject>
-#include <QtScript>
+#include <QScriptable>
+#include <QScriptClass>
+#include <QScriptEngine>
+
+#include <U2Lang/DbiDataHandler.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.cpp b/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.cpp
index f7d5517..d2b555d 100644
--- a/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.cpp
+++ b/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.h b/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.h
index 5b8ac96..7ce1256 100644
--- a/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.h
+++ b/src/corelibs/U2Lang/src/library/script/ScriptEngineUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,6 @@
 
 #include <U2Lang/WorkflowScriptEngine.h>
 
-#include <QtScript>
-
 #define SCRIPT_CHECK(condition, ctx, error, result) \
     if (!(condition)) { \
     ctx->throwError(error); \
diff --git a/src/corelibs/U2Lang/src/library/script/ScriptLibrary.cpp b/src/corelibs/U2Lang/src/library/script/ScriptLibrary.cpp
index 30bf3b7..21a04cc 100644
--- a/src/corelibs/U2Lang/src/library/script/ScriptLibrary.cpp
+++ b/src/corelibs/U2Lang/src/library/script/ScriptLibrary.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -19,9 +19,7 @@
 * MA 02110-1301, USA.
 */
 
-
-#include "ScriptEngineUtils.h"
-#include "SequencePrototype.h"
+#include <QFileInfo>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -30,8 +28,8 @@
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignment.h>
 #include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 
@@ -39,7 +37,9 @@
 #include <U2Lang/DbiDataStorage.h>
 #include <U2Lang/WorkflowScriptEngine.h>
 
+#include "ScriptEngineUtils.h"
 #include "ScriptLibrary.h"
+#include "SequencePrototype.h"
 
 namespace U2 {
 
@@ -133,14 +133,14 @@ static QList<SharedAnnotationData> getAnnotationTable(QScriptContext *ctx, QScri
     return result;
 }
 
-static MAlignment getAlignment(QScriptContext *ctx, QScriptEngine *engine, int argNum) {
+static MultipleSequenceAlignment getAlignment(QScriptContext *ctx, QScriptEngine *engine, int argNum) {
     WorkflowScriptEngine *wse = ScriptEngineUtils::workflowEngine(engine);
-    CHECK(NULL != wse, MAlignment());
+    CHECK(NULL != wse, MultipleSequenceAlignment());
 
     SharedDbiDataHandler msaId = ScriptEngineUtils::getDbiId(engine, ctx->argument(argNum));
-    QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(wse->getWorkflowContext()->getDataStorage(), msaId));
-    CHECK(!msaObj.isNull(), MAlignment());
-    return msaObj->getMAlignment();
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(wse->getWorkflowContext()->getDataStorage(), msaId));
+    CHECK(!msaObj.isNull(), MultipleSequenceAlignment());
+    return msaObj->getMsaCopy();
 }
 
 static QScriptValue putSequence(QScriptEngine *engine, const DNASequence &seq) {
@@ -161,7 +161,7 @@ static QScriptValue putAnnotationTable(QScriptEngine *engine, const QList<Shared
     return engine->newVariant(qVariantFromValue(id));
 }
 
-static QScriptValue putAlignment(QScriptEngine *engine, const MAlignment &msa) {
+static QScriptValue putAlignment(QScriptEngine *engine, const MultipleSequenceAlignment &msa) {
     WorkflowScriptEngine *wse = ScriptEngineUtils::workflowEngine(engine);
     CHECK(NULL != wse, QScriptValue::NullValue);
     WorkflowContext *ctx = wse->getWorkflowContext();
@@ -499,8 +499,8 @@ QScriptValue WorkflowScriptLibrary::getSequenceFromAlignment(QScriptContext *ctx
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment align = getAlignment(ctx, engine, 0);
-    if(align.isEmpty()) {
+    MultipleSequenceAlignment align = getAlignment(ctx, engine, 0);
+    if(align->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
 
@@ -510,14 +510,14 @@ QScriptValue WorkflowScriptLibrary::getSequenceFromAlignment(QScriptContext *ctx
     if(!ok) {
         return ctx->throwError(QObject::tr("Second argument must be a number"));
     }
-    if(row < 0 || row >= align.getNumRows()) {
+    if(row < 0 || row >= align->getNumRows()) {
         return ctx->throwError(QObject::tr("Row is out of range"));
     }
 
-    MAlignmentRow aRow = align.getRow(row);
-    aRow.simplify();
+    MultipleSequenceAlignmentRow aRow = align->getMsaRow(row)->getExplicitCopy();
+    aRow->simplify();
     U2OpStatus2Log os;
-    QByteArray arr = aRow.toByteArray(aRow.getCoreLength(), os);
+    QByteArray arr = aRow->toByteArray(os, aRow->getCoreLength());
     if(ctx->argumentCount() == 4) {
         var = ctx->argument(2).toVariant();
         int beg = var.toInt(&ok);
@@ -539,7 +539,7 @@ QScriptValue WorkflowScriptLibrary::getSequenceFromAlignment(QScriptContext *ctx
         }
         arr = arr.mid(beg,len);
     }
-    DNASequence seq(aRow.getName(),arr,align.getAlphabet());
+    DNASequence seq(aRow->getName(),arr,align->getAlphabet());
 
     QScriptValue calee = ctx->callee();
     calee.setProperty("res", putSequence(engine, seq));
@@ -553,15 +553,15 @@ QScriptValue WorkflowScriptLibrary::findInAlignment(QScriptContext *ctx, QScript
 
     QString name;
     DNASequence seq;
-    MAlignment aln = getAlignment(ctx, engine, 0);
-    if(aln.isEmpty()) {
+    MultipleSequenceAlignment aln = getAlignment(ctx, engine, 0);
+    if(aln->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
     int row = 0;
     QScriptValue val = ctx->argument(1);
     name = val.toString();
     if(!name.isEmpty()) {
-        row = aln.getRowNames().indexOf(name);
+        row = aln->getRowNames().indexOf(name);
     }else{
         seq = val.toVariant().value<DNASequence>();
         if(seq.seq.isEmpty()) {
@@ -573,7 +573,7 @@ QScriptValue WorkflowScriptLibrary::findInAlignment(QScriptContext *ctx, QScript
             }
             row++;
         }
-        if(row == aln.getNumRows()) {
+        if(row == aln->getNumRows()) {
             row = -1;
         }
     }
@@ -587,24 +587,23 @@ QScriptValue WorkflowScriptLibrary::createAlignment(QScriptContext *ctx, QScript
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment align;
+    MultipleSequenceAlignment align;
     DNASequence seq = getSequence(ctx, engine, 0);
     if(seq.seq.isEmpty()) {
         return ctx->throwError(QObject::tr("Empty or invalid sequence"));
     }
-    align.setAlphabet(seq.alphabet);
-    U2OpStatus2Log os;
-    align.addRow(seq.getName(), seq.seq, os);
+    align->setAlphabet(seq.alphabet);
+    align->addRow(seq.getName(), seq.seq);
 
     for(int i = 1; i < ctx->argumentCount(); i++) {
         DNASequence seq = getSequence(ctx, engine, i);
         if(seq.seq.isEmpty()) {
             return ctx->throwError(QObject::tr("Empty or invalid sequence"));
         }
-        if(seq.alphabet != align.getAlphabet()) {
+        if(seq.alphabet != align->getAlphabet()) {
             return ctx->throwError(QObject::tr("Alphabets of each sequence must be the same"));
         }
-        align.addRow(seq.getName(), seq.seq, os);
+        align->addRow(seq.getName(), seq.seq);
     }
 
     return putAlignment(engine, align);
@@ -615,19 +614,17 @@ QScriptValue WorkflowScriptLibrary::addToAlignment(QScriptContext *ctx, QScriptE
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment align = getAlignment(ctx, engine, 0);
+    MultipleSequenceAlignment align = getAlignment(ctx, engine, 0);
     DNASequence seq = getSequence(ctx, engine, 1);
     if(seq.seq.isEmpty()) {
         return ctx->throwError(QObject::tr("Empty or invalid sequence"));
     }
 
-    if(align.isEmpty()) {
-        //return ctx->throwError(QObject::tr("Invalid alignment"));
-        //align = new MAlignment("alignment");
-        align.setAlphabet(seq.alphabet);
+    if(align->isEmpty()) {
+        align->setAlphabet(seq.alphabet);
     }
 
-    if(seq.alphabet != align.getAlphabet()) {
+    if(seq.alphabet != align->getAlphabet()) {
         return ctx->throwError(QObject::tr("Alphabets don't match"));
     }
 
@@ -637,12 +634,11 @@ QScriptValue WorkflowScriptLibrary::addToAlignment(QScriptContext *ctx, QScriptE
             return ctx->throwError(QObject::tr("Third argument must be a number"));
         }
         row = ctx->argument(2).toInt32();
-        if(row > align.getLength()) {
+        if(row > align->getLength()) {
             row = -1;
         }
     }
-    U2OpStatus2Log os;
-    align.addRow(seq.getName(), seq.seq, row, os);
+    align->addRow(seq.getName(), seq.seq, row);
 
     return putAlignment(engine, align);
 }
@@ -652,8 +648,8 @@ QScriptValue WorkflowScriptLibrary::removeFromAlignment(QScriptContext *ctx, QSc
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment aln = getAlignment(ctx, engine, 0);
-    if(aln.isEmpty()) {
+    MultipleSequenceAlignment aln = getAlignment(ctx, engine, 0);
+    if(aln->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
 
@@ -664,12 +660,12 @@ QScriptValue WorkflowScriptLibrary::removeFromAlignment(QScriptContext *ctx, QSc
         return ctx->throwError(QObject::tr("Second argument must be a number"));
     }
 
-    if(row < 0 || row >= aln.getLength()) {
+    if(row < 0 || row >= aln->getLength()) {
         return ctx->throwError(QObject::tr("Row is out of range"));
     }
 
     U2OpStatus2Log os;
-    aln.removeRow(row, os);
+    aln->removeRow(row, os);
     return putAlignment(engine, aln);
 }
 
@@ -678,11 +674,11 @@ QScriptValue WorkflowScriptLibrary::rowNum(QScriptContext *ctx, QScriptEngine *e
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment aln = getAlignment(ctx, engine, 0);
-    if(aln.isEmpty()) {
+    MultipleSequenceAlignment aln = getAlignment(ctx, engine, 0);
+    if(aln->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
-    int num = aln.getNumRows();
+    int num = aln->getNumRows();
 
     QScriptValue calee = ctx->callee();
     calee.setProperty("res", engine->newVariant(num));
@@ -694,11 +690,11 @@ QScriptValue WorkflowScriptLibrary::columnNum(QScriptContext *ctx, QScriptEngine
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment aln = getAlignment(ctx, engine, 0);
-    if(aln.isEmpty()) {
+    MultipleSequenceAlignment aln = getAlignment(ctx, engine, 0);
+    if(aln->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
-    int num = aln.getLength();
+    int num = aln->getLength();
 
     QScriptValue calee = ctx->callee();
     calee.setProperty("res", engine->newVariant(num));
@@ -710,11 +706,11 @@ QScriptValue WorkflowScriptLibrary::alignmentAlphabetType(QScriptContext *ctx, Q
         return ctx->throwError(QObject::tr("Incorrect number of arguments"));
     }
 
-    MAlignment aln = getAlignment(ctx, engine, 0);
-    if(aln.isEmpty()) {
+    MultipleSequenceAlignment aln = getAlignment(ctx, engine, 0);
+    if(aln->isEmpty()) {
         return ctx->throwError(QObject::tr("Invalid alignment"));
     }
-    QString alph = aln.getAlphabet()->getName();
+    QString alph = aln->getAlphabet()->getName();
 
     QScriptValue calee = ctx->callee();
     calee.setProperty("res", engine->newVariant(alph));
diff --git a/src/corelibs/U2Lang/src/library/script/ScriptLibrary.h b/src/corelibs/U2Lang/src/library/script/ScriptLibrary.h
index eacfae7..c4ff0f2 100644
--- a/src/corelibs/U2Lang/src/library/script/ScriptLibrary.h
+++ b/src/corelibs/U2Lang/src/library/script/ScriptLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,13 @@
 #ifndef _WORKFLOW_SCRIPT_FUNC_H_
 #define _WORKFLOW_SCRIPT_FUNC_H_
 
+#include <QScriptValue>
+
 #include <U2Core/global.h>
 
 #include <U2Lang/DbiDataHandler.h>
 
-#include <QtScript>
+class QScriptContext;
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/library/script/SequencePrototype.cpp b/src/corelibs/U2Lang/src/library/script/SequencePrototype.cpp
index 12f8440..86f34fb 100644
--- a/src/corelibs/U2Lang/src/library/script/SequencePrototype.cpp
+++ b/src/corelibs/U2Lang/src/library/script/SequencePrototype.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/library/script/SequencePrototype.h b/src/corelibs/U2Lang/src/library/script/SequencePrototype.h
index b79e322..2a8dfa2 100644
--- a/src/corelibs/U2Lang/src/library/script/SequencePrototype.h
+++ b/src/corelibs/U2Lang/src/library/script/SequencePrototype.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,8 +28,6 @@
 #include "DbiClassPrototype.h"
 
 #include <QObject>
-#include <QtScript>
-
 namespace U2 {
 
 /************************************************************************/
diff --git a/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.cpp b/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.cpp
index ff4b7b9..a185188 100644
--- a/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.cpp
+++ b/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.h b/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.h
index a75022a..75d62d3 100644
--- a/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.h
+++ b/src/corelibs/U2Lang/src/model/ActorPrototypeRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Aliasing.cpp b/src/corelibs/U2Lang/src/model/Aliasing.cpp
index 9b17d86..e233020 100644
--- a/src/corelibs/U2Lang/src/model/Aliasing.cpp
+++ b/src/corelibs/U2Lang/src/model/Aliasing.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Aliasing.h b/src/corelibs/U2Lang/src/model/Aliasing.h
index 68ea60f..c0f28ad 100644
--- a/src/corelibs/U2Lang/src/model/Aliasing.h
+++ b/src/corelibs/U2Lang/src/model/Aliasing.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Attribute.cpp b/src/corelibs/U2Lang/src/model/Attribute.cpp
index 1e90451..77cdc9c 100644
--- a/src/corelibs/U2Lang/src/model/Attribute.cpp
+++ b/src/corelibs/U2Lang/src/model/Attribute.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include <cassert>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Lang/HRSchemaSerializer.h>
 #include <U2Lang/WorkflowUtils.h>
diff --git a/src/corelibs/U2Lang/src/model/Attribute.h b/src/corelibs/U2Lang/src/model/Attribute.h
index df55a69..b8977a2 100644
--- a/src/corelibs/U2Lang/src/model/Attribute.h
+++ b/src/corelibs/U2Lang/src/model/Attribute.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <cassert>
 
-#include <QtCore/QVariant>
-#include <QtScript/QScriptValue>
-#include <QtScript/QScriptEngine>
+#include <QVariant>
+#include <QScriptValue>
+#include <QScriptEngine>
 
 #include <U2Core/Task.h>
 #include <U2Core/ScriptTask.h>
diff --git a/src/corelibs/U2Lang/src/model/AttributeRelation.cpp b/src/corelibs/U2Lang/src/model/AttributeRelation.cpp
index 6179438..bbc0223 100644
--- a/src/corelibs/U2Lang/src/model/AttributeRelation.cpp
+++ b/src/corelibs/U2Lang/src/model/AttributeRelation.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/AttributeRelation.h b/src/corelibs/U2Lang/src/model/AttributeRelation.h
index 7fe9f82..6cbcf50 100644
--- a/src/corelibs/U2Lang/src/model/AttributeRelation.h
+++ b/src/corelibs/U2Lang/src/model/AttributeRelation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_ATTRIBUTE_RELATION_H_
 #define _U2_ATTRIBUTE_RELATION_H_
 
+#include <QVariant>
+
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/model/Configuration.cpp b/src/corelibs/U2Lang/src/model/Configuration.cpp
index 5fcf590..1950fa6 100644
--- a/src/corelibs/U2Lang/src/model/Configuration.cpp
+++ b/src/corelibs/U2Lang/src/model/Configuration.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,12 +20,15 @@
  */
 
 #include <cassert>
-#include <QtCore/QStringList>
+
+#include <QStringList>
+
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/WorkflowUtils.h>
 
-#include "ConfigurationEditor.h"
 #include "Configuration.h"
+#include "ConfigurationEditor.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/Configuration.h b/src/corelibs/U2Lang/src/model/Configuration.h
index c3f0c09..9c26cb2 100644
--- a/src/corelibs/U2Lang/src/model/Configuration.h
+++ b/src/corelibs/U2Lang/src/model/Configuration.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,12 @@
 #ifndef _U2_WORKFLOW_CONFIGURATION_H_
 #define _U2_WORKFLOW_CONFIGURATION_H_
 
+#include "Attribute.h"
 #include "ConfigurationValidator.h"
-#include "ConfigurationEditor.h"
 
 namespace U2 {
 
+class ConfigurationEditor;
 
 /**
  * Set of named attributes
diff --git a/src/corelibs/U2Lang/src/model/ConfigurationEditor.cpp b/src/corelibs/U2Lang/src/model/ConfigurationEditor.cpp
index 6b56c38..0bf4c56 100644
--- a/src/corelibs/U2Lang/src/model/ConfigurationEditor.cpp
+++ b/src/corelibs/U2Lang/src/model/ConfigurationEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QHBoxLayout>
-#else
-#include <QtWidgets/QHBoxLayout>
-#endif
+#include <QHBoxLayout>
+
+#include <U2Core//U2SafePoints.h>
 
 #include "ConfigurationEditor.h"
 
diff --git a/src/corelibs/U2Lang/src/model/ConfigurationEditor.h b/src/corelibs/U2Lang/src/model/ConfigurationEditor.h
index 4195f62..758ea02 100644
--- a/src/corelibs/U2Lang/src/model/ConfigurationEditor.h
+++ b/src/corelibs/U2Lang/src/model/ConfigurationEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Lang/Attribute.h>
 #include <U2Lang/SchemaConfig.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QItemDelegate>
-#else
-#include <QtWidgets/QItemDelegate>
-#endif
+#include <QItemDelegate>
 
 class QWidget;
 
diff --git a/src/corelibs/U2Lang/src/model/ConfigurationValidator.h b/src/corelibs/U2Lang/src/model/ConfigurationValidator.h
index 404603c..3d8ca14 100644
--- a/src/corelibs/U2Lang/src/model/ConfigurationValidator.h
+++ b/src/corelibs/U2Lang/src/model/ConfigurationValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Datatype.cpp b/src/corelibs/U2Lang/src/model/Datatype.cpp
index ca35177..4ec9d5d 100644
--- a/src/corelibs/U2Lang/src/model/Datatype.cpp
+++ b/src/corelibs/U2Lang/src/model/Datatype.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Datatype.h b/src/corelibs/U2Lang/src/model/Datatype.h
index 4531b89..e5cad5d 100644
--- a/src/corelibs/U2Lang/src/model/Datatype.h
+++ b/src/corelibs/U2Lang/src/model/Datatype.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Lang/Descriptor.h>
 #include <U2Core/IdRegistry.h>
-#include <QtCore/QExplicitlySharedDataPointer>
+#include <QExplicitlySharedDataPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/DbiDataHandler.cpp b/src/corelibs/U2Lang/src/model/DbiDataHandler.cpp
index 563d315..6a17de5 100644
--- a/src/corelibs/U2Lang/src/model/DbiDataHandler.cpp
+++ b/src/corelibs/U2Lang/src/model/DbiDataHandler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,11 +62,7 @@ bool DbiDataHandler::equals(const DbiDataHandler *other) const {
 }
 
 int DbiDataHandler::getReferenceCount() const {
-#if (QT_VERSION >= 0x050000)
     return this->ref.load();
-#else
-    return int(this->ref);
-#endif
 }
 
 U2DbiRef DbiDataHandler::getDbiRef() const {
diff --git a/src/corelibs/U2Lang/src/model/DbiDataHandler.h b/src/corelibs/U2Lang/src/model/DbiDataHandler.h
index 8d2df7a..bbf3258 100644
--- a/src/corelibs/U2Lang/src/model/DbiDataHandler.h
+++ b/src/corelibs/U2Lang/src/model/DbiDataHandler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/DbiDataStorage.cpp b/src/corelibs/U2Lang/src/model/DbiDataStorage.cpp
index e84415b..96a6f48 100644
--- a/src/corelibs/U2Lang/src/model/DbiDataStorage.cpp
+++ b/src/corelibs/U2Lang/src/model/DbiDataStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -28,7 +28,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/RawDataUdrSchema.h>
 #include <U2Core/TextObject.h>
 #include <U2Core/U2AssemblyDbi.h>
@@ -141,7 +141,7 @@ SharedDbiDataHandler DbiDataStorage::putSequence(const DNASequence &dnaSeq) {
     assert(NULL != dbiHandle);
 
     U2OpStatusImpl os;
-    U2EntityRef ent = U2SequenceUtils::import(dbiHandle->getDbiRef(), dnaSeq, os);
+    U2EntityRef ent = U2SequenceUtils::import(os, dbiHandle->getDbiRef(), dnaSeq);
     CHECK_OP(os, SharedDbiDataHandler());
 
     DbiConnection *connection = this->getConnection(dbiHandle->getDbiRef(), os);
@@ -152,12 +152,31 @@ SharedDbiDataHandler DbiDataStorage::putSequence(const DNASequence &dnaSeq) {
     return handler;
 }
 
-SharedDbiDataHandler DbiDataStorage::putAlignment(const MAlignment &al) {
+SharedDbiDataHandler DbiDataStorage::putSequence(const U2SequenceObject *sequenceObject) {
+    SAFE_POINT(NULL != dbiHandle, "Invalid DBI handle", SharedDbiDataHandler());
+    SAFE_POINT(NULL != sequenceObject, L10N::nullPointerError("Sequence object"), SharedDbiDataHandler());
+
+    U2OpStatusImpl os;
+
+    U2EntityRef entityRef = sequenceObject->getEntityRef();
+    if (sequenceObject->getEntityRef().dbiRef != dbiHandle->getDbiRef()) {
+        QScopedPointer<U2SequenceObject> clonedSequenceObject(qobject_cast<U2SequenceObject *>(sequenceObject->clone(dbiHandle->getDbiRef(), os)));
+        SAFE_POINT_OP(os, SharedDbiDataHandler());
+        entityRef = clonedSequenceObject->getEntityRef();
+    }
+
+    DbiConnection *connection = getConnection(dbiHandle->getDbiRef(), os);
+    SAFE_POINT_OP(os, SharedDbiDataHandler());
+
+    return SharedDbiDataHandler(new DbiDataHandler(entityRef, connection->dbi->getObjectDbi(), true));
+}
+
+SharedDbiDataHandler DbiDataStorage::putAlignment(const MultipleSequenceAlignment &al) {
     assert(NULL != dbiHandle);
 
     U2OpStatus2Log os;
-    MAlignment copiedAlignment = al;
-    QScopedPointer<MAlignmentObject> obj(MAlignmentImporter::createAlignment(dbiHandle->getDbiRef(), copiedAlignment, os));
+    MultipleSequenceAlignment copiedAlignment = al->getCopy();
+    QScopedPointer<MultipleSequenceAlignmentObject> obj(MultipleSequenceAlignmentImporter::createAlignment(dbiHandle->getDbiRef(), copiedAlignment, os));
     CHECK_OP(os, SharedDbiDataHandler());
 
     DbiConnection *connection = this->getConnection(dbiHandle->getDbiRef(), os);
@@ -307,16 +326,16 @@ AssemblyObject *StorageUtils::getAssemblyObject(DbiDataStorage *storage, const S
     return new AssemblyObject(objName, assemblyRef);
 }
 
-MAlignmentObject *StorageUtils::getMsaObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler) {
+MultipleSequenceAlignmentObject *StorageUtils::getMsaObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler) {
     CHECK(NULL != handler.constData(), NULL);
-    //QScopedPointer<U2Msa> msa(dynamic_cast<U2Msa*>(storage->getObject(handler, U2Type::Msa)));
+    //QScopedPointer<U2Ma> msa(dynamic_cast<U2Ma*>(storage->getObject(handler, U2Type::Msa)));
     QScopedPointer<U2Msa> msa(dynamic_cast<U2Msa*>(storage->getObject(handler, 2)));
     CHECK(NULL != msa.data(), NULL);
 
     U2EntityRef msaRef(handler->getDbiRef(), msa->id);
     QString objName = msa->visualName;
 
-    return new MAlignmentObject(objName, msaRef);
+    return new MultipleSequenceAlignmentObject(objName, msaRef);
 }
 
 AnnotationTableObject *StorageUtils::getAnnotationTableObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler) {
diff --git a/src/corelibs/U2Lang/src/model/DbiDataStorage.h b/src/corelibs/U2Lang/src/model/DbiDataStorage.h
index e8de633..d0cd105 100644
--- a/src/corelibs/U2Lang/src/model/DbiDataStorage.h
+++ b/src/corelibs/U2Lang/src/model/DbiDataStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/AssemblyObject.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/VariantTrackObject.h>
 
@@ -49,7 +49,8 @@ public:
     /* NOTE: deallocate memory! */
     virtual U2Object *getObject(const SharedDbiDataHandler &handler, const U2DataType &type);
     virtual SharedDbiDataHandler putSequence(const DNASequence &sequence);
-    virtual SharedDbiDataHandler putAlignment(const MAlignment &al);
+    virtual SharedDbiDataHandler putSequence(const U2SequenceObject *sequenceObject);
+    virtual SharedDbiDataHandler putAlignment(const MultipleSequenceAlignment &al);
     virtual SharedDbiDataHandler putAnnotationTable(const QList<SharedAnnotationData> &anns, const QString annTableName = "Annotations");
     virtual SharedDbiDataHandler putAnnotationTable(AnnotationTableObject *annTable);
 
@@ -83,7 +84,7 @@ public:
     static U2SequenceObject *getSequenceObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
     static VariantTrackObject *getVariantTrackObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
     static AssemblyObject *getAssemblyObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
-    static MAlignmentObject *getMsaObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
+    static MultipleSequenceAlignmentObject *getMsaObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
 
     static AnnotationTableObject *getAnnotationTableObject(DbiDataStorage *storage, const SharedDbiDataHandler &handler);
     static QList<AnnotationTableObject *> getAnnotationTableObjects(DbiDataStorage *storage, const QList<SharedDbiDataHandler> &handlers);
diff --git a/src/corelibs/U2Lang/src/model/Descriptor.cpp b/src/corelibs/U2Lang/src/model/Descriptor.cpp
index 0782b08..ccc116a 100644
--- a/src/corelibs/U2Lang/src/model/Descriptor.cpp
+++ b/src/corelibs/U2Lang/src/model/Descriptor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Descriptor.h b/src/corelibs/U2Lang/src/model/Descriptor.h
index b64e540..b2e181c 100644
--- a/src/corelibs/U2Lang/src/model/Descriptor.h
+++ b/src/corelibs/U2Lang/src/model/Descriptor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,11 @@
 #define _U2_DESC_H_
 
 #include <U2Core/global.h>
-#include <QtCore/QMap>
-#include <QtCore/QString>
-#include <QtCore/QMetaType>
+#include <QMap>
+#include <QString>
+#include <QMetaType>
 
-#include <QtGui/QIcon>
+#include <QIcon>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/ExternalToolCfg.cpp b/src/corelibs/U2Lang/src/model/ExternalToolCfg.cpp
index 6b78b17..4a87368 100644
--- a/src/corelibs/U2Lang/src/model/ExternalToolCfg.cpp
+++ b/src/corelibs/U2Lang/src/model/ExternalToolCfg.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/ExternalToolCfg.h b/src/corelibs/U2Lang/src/model/ExternalToolCfg.h
index 4d355bd..2c5dcf9 100644
--- a/src/corelibs/U2Lang/src/model/ExternalToolCfg.h
+++ b/src/corelibs/U2Lang/src/model/ExternalToolCfg.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,9 @@
 #include <U2Lang/Datatype.h>
 #include <U2Lang/ConfigurationEditor.h>
 
-#include <QtCore/qglobal.h>
-#include <QtCore/QString>
-#include <QtCore/QObject>
-#include <QtCore/QMap>
-
+#include <QString>
+#include <QObject>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/GrouperOutSlot.cpp b/src/corelibs/U2Lang/src/model/GrouperOutSlot.cpp
index 596bfad..5b910fc 100644
--- a/src/corelibs/U2Lang/src/model/GrouperOutSlot.cpp
+++ b/src/corelibs/U2Lang/src/model/GrouperOutSlot.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QVariant>
+
 #include <U2Lang/BaseTypes.h>
 
 #include "GrouperOutSlot.h"
diff --git a/src/corelibs/U2Lang/src/model/GrouperOutSlot.h b/src/corelibs/U2Lang/src/model/GrouperOutSlot.h
index 5a21e6d..8d79be1 100644
--- a/src/corelibs/U2Lang/src/model/GrouperOutSlot.h
+++ b/src/corelibs/U2Lang/src/model/GrouperOutSlot.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.cpp b/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.cpp
index 1c6b6b8..54cffab 100644
--- a/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.cpp
+++ b/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.h b/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.h
index 3fc0876..b8d0a54 100644
--- a/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.h
+++ b/src/corelibs/U2Lang/src/model/GrouperSlotAttribute.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/IncludedProtoFactory.cpp b/src/corelibs/U2Lang/src/model/IncludedProtoFactory.cpp
index aac7d52..ba8e1ec 100644
--- a/src/corelibs/U2Lang/src/model/IncludedProtoFactory.cpp
+++ b/src/corelibs/U2Lang/src/model/IncludedProtoFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/IncludedProtoFactory.h b/src/corelibs/U2Lang/src/model/IncludedProtoFactory.h
index c0712ad..8822e8f 100644
--- a/src/corelibs/U2Lang/src/model/IncludedProtoFactory.h
+++ b/src/corelibs/U2Lang/src/model/IncludedProtoFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/IntegralBus.cpp b/src/corelibs/U2Lang/src/model/IntegralBus.cpp
index 1c7d61f..f510584 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBus.cpp
+++ b/src/corelibs/U2Lang/src/model/IntegralBus.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,12 +39,12 @@ namespace Workflow {
 static const QString PATH_SEPARATOR = QString(">");
 static const QString PATH_LIST_SEPARATOR = QString(",");
 
-BusMap::BusMap(const QStrStrMap &busMap, const QMap<QString, QStringList> &listMap, const SlotPathMap &paths)
+BusMap::BusMap(const StrStrMap &busMap, const QMap<QString, QStringList> &listMap, const SlotPathMap &paths)
 : input(true), busMap(busMap), listMap(listMap), paths(paths)
 {
 }
 
-BusMap::BusMap(const QStrStrMap &busMap, bool breaksDataflow, const QString &actorId)
+BusMap::BusMap(const StrStrMap &busMap, bool breaksDataflow, const QString &actorId)
 : input(false), busMap(busMap), breaksDataflow(breaksDataflow), actorId(actorId)
 {
 }
@@ -182,8 +182,8 @@ QVariantMap BusMap::composeMessageMap(const Message &m, const QVariantMap &conte
 /* IntegralBus */
 /************************************************************************/
 
-static QMap<QString, QStringList> getListMappings(const QStrStrMap& busMap, const SlotPathMap &pathMap, const Port* p) {
-    QStrStrMap bm = busMap;
+static QMap<QString, QStringList> getListMappings(const StrStrMap& busMap, const SlotPathMap &pathMap, const Port* p) {
+    StrStrMap bm = busMap;
     WorkflowUtils::applyPathsToBusMap(bm, pathMap);
     assert(p->isInput());
     DataTypePtr dt = p->getType();
@@ -215,7 +215,7 @@ IntegralBus::IntegralBus(Port* p)
             return;
         }
 
-        QStrStrMap map = a->getAttributeValueWithoutScript<QStrStrMap>();
+        StrStrMap map = a->getAttributeValueWithoutScript<StrStrMap>();
         if (map.isEmpty()) {
             ActorPrototype *proto = p->owner()->getProto();
             assert(proto->isAllowsEmptyPorts());
@@ -232,7 +232,7 @@ IntegralBus::IntegralBus(Port* p)
         QMap<QString, QStringList> listMap = getListMappings(map, pathMap, p);
         busMap = new BusMap(map, listMap, pathMap);
     } else { // p is output
-        QStrStrMap map;
+        StrStrMap map;
         IntegralBusPort* bp = qobject_cast<IntegralBusPort*>(p);
         DataTypePtr t = bp ? bp->getOwnType() : p->getType();
         if (t->isMap()) {
diff --git a/src/corelibs/U2Lang/src/model/IntegralBus.h b/src/corelibs/U2Lang/src/model/IntegralBus.h
index 417db71..21ccebb 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBus.h
+++ b/src/corelibs/U2Lang/src/model/IntegralBus.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,8 +37,8 @@ namespace Workflow {
  */
 class U2LANG_EXPORT BusMap {
 public:
-    BusMap(const QStrStrMap &busMap, const QMap<QString, QStringList> &listMap, const SlotPathMap &paths);
-    BusMap(const QStrStrMap &busMap, bool breaksDataflow, const QString &actorId);
+    BusMap(const StrStrMap &busMap, const QMap<QString, QStringList> &listMap, const SlotPathMap &paths);
+    BusMap(const StrStrMap &busMap, bool breaksDataflow, const QString &actorId);
 
     Message takeMessageMap(CommunicationChannel *ch, QVariantMap &context);
     Message lookMessageMap(CommunicationChannel *ch);
@@ -50,7 +50,7 @@ public:
 private:
     bool input;
 
-    QStrStrMap busMap;
+    StrStrMap busMap;
     QMap<QString, QStringList> listMap;
     SlotPathMap paths;
 
diff --git a/src/corelibs/U2Lang/src/model/IntegralBusModel.cpp b/src/corelibs/U2Lang/src/model/IntegralBusModel.cpp
index 89bd5ea..3f38727 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBusModel.cpp
+++ b/src/corelibs/U2Lang/src/model/IntegralBusModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDebug>
-
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
@@ -41,7 +39,7 @@ namespace Workflow {
 /*******************************
  * IntegralBusPort
  *******************************/
-static void filterAmbiguousSlots(QList<Descriptor>& keys, const QMap<Descriptor, DataTypePtr>& map, QStrStrMap& result) {
+static void filterAmbiguousSlots(QList<Descriptor>& keys, const QMap<Descriptor, DataTypePtr>& map, StrStrMap& result) {
     foreach(const Descriptor &slot, map.keys()) {
         DataTypePtr val = map[slot];
         const QList<Descriptor> lst = IntegralBusUtils::getSlotsByType(map, slot, val);
@@ -71,7 +69,7 @@ static Actor* getLinkedActor(ActorId id, Port* output, QList<Actor*> visitedActo
     return NULL;
 }
 
-static QMap<QString, QStringList> getListSlotsMappings(const QStrStrMap& bm, const Port* p) {
+static QMap<QString, QStringList> getListSlotsMappings(const StrStrMap& bm, const Port* p) {
     assert(p->isInput());
     DataTypePtr dt = p->getType();
     QMap<QString, QStringList> res;
@@ -135,7 +133,7 @@ QList<Actor*> IntegralBusPort::getProducers(const QString& slot) {
     if(at == NULL) {
         return res;
     }
-    QStrStrMap busMap = at->getAttributeValueWithoutScript<QStrStrMap>();
+    StrStrMap busMap = at->getAttributeValueWithoutScript<StrStrMap>();
     QString slotValue = busMap.value(slot);
     QStringList vals = slotValue.split(";");
     foreach(QString val, vals) {
@@ -211,9 +209,9 @@ void IntegralBusPort::clearPaths() {
 void IntegralBusPort::remap(const QMap<ActorId, ActorId>& m) {
     Attribute* busAttr = getParameter(BUS_MAP_ATTR_ID);
     if (busAttr) {
-        QStrStrMap busMap = busAttr->getAttributeValueWithoutScript<QStrStrMap>();
+        StrStrMap busMap = busAttr->getAttributeValueWithoutScript<StrStrMap>();
         IntegralBusType::remap(busMap, m);
-        setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+        setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
     }
 
     Attribute* pathsAttr = getParameter(PATHS_ATTR_ID);
@@ -231,7 +229,7 @@ void IntegralBusPort::updateBindings(const QMap<ActorId, ActorId> &actorsMapping
     }
     U2OpStatusImpl os;
     QMap<Descriptor, DataTypePtr> incomingType = WorkflowUtils::getBusType(this);
-    QStrStrMap busMap = getBusMap();
+    StrStrMap busMap = getBusMap();
     SlotPathMap pathMap = getPathsMap();
     IntegralBusType::remap(busMap, actorsMapping);
     IntegralBusType::remapPaths(pathMap, actorsMapping);
@@ -269,7 +267,7 @@ void IntegralBusPort::updateBindings(const QMap<ActorId, ActorId> &actorsMapping
         busMap[dstSlot] = IntegralBusSlot::listToString(validSrcs);
     }
 
-    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
     setParameter(PATHS_ATTR_ID, qVariantFromValue<SlotPathMap>(pathMap));
 }
 
@@ -279,7 +277,7 @@ void IntegralBusPort::replaceActor(Actor *oldActor, Actor *newActor, const QList
         return;
     }
 
-    QStrStrMap busMap = getBusMap();
+    StrStrMap busMap = getBusMap();
     foreach (Port *p, oldActor->getEnabledOutputPorts()) {
         U2OpStatus2Log os;
         PortMapping pm = PortMapping::getMappingBySrcPort(p->getId(), mappings, os);
@@ -288,7 +286,7 @@ void IntegralBusPort::replaceActor(Actor *oldActor, Actor *newActor, const QList
         }
         IntegralBusUtils::remapBus(busMap, oldActor->getId(), newActor->getId(), pm);
     }
-    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
 
     SlotPathMap pathMap = getPathsMap();
     QMap<ActorId, ActorId> actorsMapping;
@@ -300,13 +298,13 @@ void IntegralBusPort::replaceActor(Actor *oldActor, Actor *newActor, const QList
 void IntegralBusPort::copyInput(IntegralBusPort *port, const PortMapping &mapping) {
     CHECK(isInput(), );
     CHECK(port->isInput(), );
-    QStrStrMap myBusMap;
-    QStrStrMap busMap = port->getBusMap();
+    StrStrMap myBusMap;
+    StrStrMap busMap = port->getBusMap();
     foreach (const QString &slotId, busMap.keys()) {
         U2OpStatus2Log os;
         myBusMap[mapping.getDstSlotId(slotId, os)] = busMap[slotId];
     }
-    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(myBusMap));
+    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(myBusMap));
 
     SlotPathMap myPathMap;
     SlotPathMap pathMap = port->getPathsMap();
@@ -318,10 +316,10 @@ void IntegralBusPort::copyInput(IntegralBusPort *port, const PortMapping &mappin
     setParameter(PATHS_ATTR_ID, qVariantFromValue<SlotPathMap>(myPathMap));
 }
 
-QStrStrMap IntegralBusPort::getBusMap() const {
+StrStrMap IntegralBusPort::getBusMap() const {
     Attribute *busAttr = getParameter(BUS_MAP_ATTR_ID);
-    CHECK(NULL != busAttr, QStrStrMap());
-    return busAttr->getAttributeValueWithoutScript<QStrStrMap>();
+    CHECK(NULL != busAttr, StrStrMap());
+    return busAttr->getAttributeValueWithoutScript<StrStrMap>();
 }
 
 SlotPathMap IntegralBusPort::getPathsMap() const {
@@ -334,13 +332,13 @@ void IntegralBusPort::setBusMapValue(const QString & slotId, const QString & val
     if( !isInput() ) {
         return;
     }
-    QStrStrMap busMap = getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+    StrStrMap busMap = getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
     if(busMap[slotId].isEmpty()) {
         busMap[slotId] = value;
     } else {
         busMap[slotId] = busMap[slotId] + ";" + value;
     }
-    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
 }
 
 void IntegralBusPort::setupBusMap() {
@@ -353,7 +351,7 @@ void IntegralBusPort::setupBusMap() {
 
     DataTypePtr from = bindings.uniqueKeys().first()->getType();
     QList<Descriptor> keys = to->getAllDescriptors();
-    QStrStrMap busMap = getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+    StrStrMap busMap = getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
     filterAmbiguousSlots(keys, to->getDatatypesMap(), busMap);
     foreach(const Descriptor & key, keys) {
         // FIXME: hack for not binding 'Location' slot
@@ -413,7 +411,7 @@ void IntegralBusPort::setupBusMap() {
 
     SlotPathMap pathMap;
     WorkflowUtils::extractPathsFromBindings(busMap, pathMap);
-    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+    setParameter(BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
     setParameter(PATHS_ATTR_ID, qVariantFromValue<SlotPathMap>(pathMap));
 }
 
@@ -436,7 +434,7 @@ bool ScreenedSlotValidator::validate( const QStringList& screenedSlots, const In
             problemList.append(Problem(IntegralBusPort::tr("No input data supplied")));
             return false;
         }
-        QStrStrMap bm = vport->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+        StrStrMap bm = vport->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
         SlotPathMap pm = vport->getParameter(IntegralBusPort::PATHS_ATTR_ID)->getAttributeValueWithoutScript<SlotPathMap>();
         WorkflowUtils::applyPathsToBusMap(bm, pm);
         int busWidth = bm.size();
@@ -539,7 +537,7 @@ QString ScreenedParamValidator::validate(const Configuration * cfg) const {
     assert(p->isInput());
 
     QVariant busMap = p->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-    QString slotVal = busMap.value<QStrStrMap>().value(slot);
+    QString slotVal = busMap.value<StrStrMap>().value(slot);
     const bool noParam = ( val.isNull() || val.toString().isEmpty() ) && param->getAttributeScript().isEmpty();
     const bool noSlot = slotVal.isNull() || slotVal.isEmpty();
 
@@ -645,8 +643,8 @@ bool PortValidator::validate(const Configuration *cfg, ProblemList &problemList)
     return validate(port, problemList);
 }
 
-QStrStrMap PortValidator::getBusMap(const IntegralBusPort *port) {
-    return port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+StrStrMap PortValidator::getBusMap(const IntegralBusPort *port) {
+    return port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
 }
 
 QString PortValidator::slotName(const IntegralBusPort *port, const QString &slotId) {
@@ -657,7 +655,7 @@ bool PortValidator::isBinded(const IntegralBusPort *port, const QString &slotId)
     return isBinded(getBusMap(port), slotId);
 }
 
-bool PortValidator::isBinded(const QStrStrMap &busMap, const QString &slotId) {
+bool PortValidator::isBinded(const StrStrMap &busMap, const QString &slotId) {
     return (!busMap.value(slotId, "").isEmpty());
 }
 
diff --git a/src/corelibs/U2Lang/src/model/IntegralBusModel.h b/src/corelibs/U2Lang/src/model/IntegralBusModel.h
index 25d5f6f..669c4e0 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBusModel.h
+++ b/src/corelibs/U2Lang/src/model/IntegralBusModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -92,7 +92,7 @@ protected:
     mutable bool recursing;
 
 private:
-    QStrStrMap getBusMap() const;
+    StrStrMap getBusMap() const;
     SlotPathMap getPathsMap() const;
 }; // IntegralBusPort
 
@@ -182,17 +182,17 @@ public:
     virtual bool validate(const IntegralBusPort *port, ProblemList &problemList) const = 0;
 
 public:
-    static QStrStrMap getBusMap(const IntegralBusPort *port);
+    static StrStrMap getBusMap(const IntegralBusPort *port);
     static QString slotName(const IntegralBusPort *port, const QString &slotId);
     static bool isBinded(const IntegralBusPort *port, const QString &slotId);
-    static bool isBinded(const QStrStrMap &busMap, const QString &slotId);
+    static bool isBinded(const StrStrMap &busMap, const QString &slotId);
 };
 
 }//namespace Workflow
 }//namespace U2
 
-typedef QMap<QString, QString> QStrStrMap;
-Q_DECLARE_METATYPE(QStrStrMap)
+typedef QMap<QString, QString> StrStrMap;
+Q_DECLARE_METATYPE(StrStrMap)
 Q_DECLARE_METATYPE(SlotPathMap)
 
 #endif
diff --git a/src/corelibs/U2Lang/src/model/IntegralBusType.cpp b/src/corelibs/U2Lang/src/model/IntegralBusType.cpp
index e59340a..a3620f5 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBusType.cpp
+++ b/src/corelibs/U2Lang/src/model/IntegralBusType.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,7 +69,7 @@ void IntegralBusType::remapSlotString(QString &slotStr, const QMap<ActorId, Acto
     }
 }
 
-void IntegralBusType::remap(QStrStrMap& busMap, const QMap<ActorId, ActorId>& m) {
+void IntegralBusType::remap(StrStrMap& busMap, const QMap<ActorId, ActorId>& m) {
     foreach(QString key, busMap.uniqueKeys()) {
         QStringList newValList;
         foreach(QString val, busMap.value(key).split(";")) {
diff --git a/src/corelibs/U2Lang/src/model/IntegralBusType.h b/src/corelibs/U2Lang/src/model/IntegralBusType.h
index c792f21..8ce2a3d 100644
--- a/src/corelibs/U2Lang/src/model/IntegralBusType.h
+++ b/src/corelibs/U2Lang/src/model/IntegralBusType.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@ public:
     static ActorId parseSlotDesc(const QString& id);
     static QString parseAttributeIdFromSlotDesc(const QString & str);
     // when schema is deeply copied we need to remap actorIds in busmap
-    static void remap(QStrStrMap& busMap, const QMap<ActorId, ActorId>&);
+    static void remap(StrStrMap& busMap, const QMap<ActorId, ActorId>&);
     static void remapPaths(SlotPathMap &pathsMap, const QMap<ActorId, ActorId> &actorIdsMap);
     static void remapSlotString(QString &slotStr, const QMap<ActorId, ActorId> &actorIdsMap);
 
diff --git a/src/corelibs/U2Lang/src/model/Marker.cpp b/src/corelibs/U2Lang/src/model/Marker.cpp
index f9d0c5d..1b833df 100644
--- a/src/corelibs/U2Lang/src/model/Marker.cpp
+++ b/src/corelibs/U2Lang/src/model/Marker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Marker.h b/src/corelibs/U2Lang/src/model/Marker.h
index ae38b4a..d693b8f 100644
--- a/src/corelibs/U2Lang/src/model/Marker.h
+++ b/src/corelibs/U2Lang/src/model/Marker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/MarkerAttribute.cpp b/src/corelibs/U2Lang/src/model/MarkerAttribute.cpp
index 6e5845f..4d142dc 100644
--- a/src/corelibs/U2Lang/src/model/MarkerAttribute.cpp
+++ b/src/corelibs/U2Lang/src/model/MarkerAttribute.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/MarkerAttribute.h b/src/corelibs/U2Lang/src/model/MarkerAttribute.h
index e5fcbc2..a73345b 100644
--- a/src/corelibs/U2Lang/src/model/MarkerAttribute.h
+++ b/src/corelibs/U2Lang/src/model/MarkerAttribute.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/MessageMetadata.cpp b/src/corelibs/U2Lang/src/model/MessageMetadata.cpp
index 7e115b7..97ae9a7 100644
--- a/src/corelibs/U2Lang/src/model/MessageMetadata.cpp
+++ b/src/corelibs/U2Lang/src/model/MessageMetadata.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/MessageMetadata.h b/src/corelibs/U2Lang/src/model/MessageMetadata.h
index 0017980..3bf0195 100644
--- a/src/corelibs/U2Lang/src/model/MessageMetadata.h
+++ b/src/corelibs/U2Lang/src/model/MessageMetadata.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Peer.h b/src/corelibs/U2Lang/src/model/Peer.h
index 3834bb5..28a1287 100644
--- a/src/corelibs/U2Lang/src/model/Peer.h
+++ b/src/corelibs/U2Lang/src/model/Peer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Port.cpp b/src/corelibs/U2Lang/src/model/Port.cpp
index 8de0099..2ddcb9b 100644
--- a/src/corelibs/U2Lang/src/model/Port.cpp
+++ b/src/corelibs/U2Lang/src/model/Port.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/Port.h b/src/corelibs/U2Lang/src/model/Port.h
index 527b6ed..e75ef50 100644
--- a/src/corelibs/U2Lang/src/model/Port.h
+++ b/src/corelibs/U2Lang/src/model/Port.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/PortRelation.h b/src/corelibs/U2Lang/src/model/PortRelation.h
index 345d1b4..32bee0e 100644
--- a/src/corelibs/U2Lang/src/model/PortRelation.h
+++ b/src/corelibs/U2Lang/src/model/PortRelation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/QDConstraint.cpp b/src/corelibs/U2Lang/src/model/QDConstraint.cpp
index faaad31..4daac16 100644
--- a/src/corelibs/U2Lang/src/model/QDConstraint.cpp
+++ b/src/corelibs/U2Lang/src/model/QDConstraint.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/QDConstraint.h b/src/corelibs/U2Lang/src/model/QDConstraint.h
index 75ef747..998268e 100644
--- a/src/corelibs/U2Lang/src/model/QDConstraint.h
+++ b/src/corelibs/U2Lang/src/model/QDConstraint.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/QDScheme.cpp b/src/corelibs/U2Lang/src/model/QDScheme.cpp
index df0daa6..b4b40b3 100644
--- a/src/corelibs/U2Lang/src/model/QDScheme.cpp
+++ b/src/corelibs/U2Lang/src/model/QDScheme.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "QDScheme.h"
-#include "QDConstraint.h"
-
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/Log.h>
 
 #include <U2Lang/SupportClass.h>
 
+#include "ConfigurationEditor.h"
+#include "QDConstraint.h"
+#include "QDScheme.h"
 
 namespace U2 {
 
@@ -853,4 +853,9 @@ QDAttributeValueMapper::ValueType QDAttributeValueMapper::getType(const QString&
     }
 }
 
+QDActorPrototype::~QDActorPrototype() {
+    qDeleteAll(attributes);
+    delete editor;
+}
+
 }//namespace
diff --git a/src/corelibs/U2Lang/src/model/QDScheme.h b/src/corelibs/U2Lang/src/model/QDScheme.h
index 02869f2..643be91 100644
--- a/src/corelibs/U2Lang/src/model/QDScheme.h
+++ b/src/corelibs/U2Lang/src/model/QDScheme.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,8 @@
 #include <U2Core/DNASequence.h>
 #include <U2Lang/Configuration.h>
 
-#include <QtCore/QSharedData>
-#include <QtCore/QPair>
+#include <QSharedData>
+#include <QPair>
 
 
 namespace U2 {
@@ -98,7 +98,7 @@ class QDActor;
 class U2LANG_EXPORT QDActorPrototype {
 public:
     QDActorPrototype() : editor(NULL) {}
-    virtual ~QDActorPrototype() { qDeleteAll(attributes); delete editor; }
+    virtual ~QDActorPrototype();
     const QList<Attribute*>& getParameters() const { return attributes; }
     ConfigurationEditor* getEditor() const { return editor; }
 
diff --git a/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.cpp b/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.cpp
index dc94765..a89b074 100644
--- a/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.cpp
+++ b/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.h b/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.h
index 8cbb4ba..5fab5fc 100644
--- a/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.h
+++ b/src/corelibs/U2Lang/src/model/QueryDesignerRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.cpp b/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.cpp
index 8fd0779..6d0ef3d 100644
--- a/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.cpp
+++ b/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.h b/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.h
index 56c4861..8bee508 100644
--- a/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.h
+++ b/src/corelibs/U2Lang/src/model/ReadDbObjActorPrototype.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/RunFileSystem.cpp b/src/corelibs/U2Lang/src/model/RunFileSystem.cpp
index 69b9639..134b7fd 100644
--- a/src/corelibs/U2Lang/src/model/RunFileSystem.cpp
+++ b/src/corelibs/U2Lang/src/model/RunFileSystem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QFileInfo>
+
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
@@ -253,7 +255,7 @@ FSItem * RunFileSystem::createPath(const QStringList &path, U2OpStatus &os) {
         }
         pathStr += "/" + dirName;
         if (!item->isDir()) {
-            os.setError(pathStr + " is a file, not a directory");
+            os.setError(pathStr + " is a file, not a folder");
             return root;
         }
         current = item;
diff --git a/src/corelibs/U2Lang/src/model/RunFileSystem.h b/src/corelibs/U2Lang/src/model/RunFileSystem.h
index 0e2b0d7..dee1c62 100644
--- a/src/corelibs/U2Lang/src/model/RunFileSystem.h
+++ b/src/corelibs/U2Lang/src/model/RunFileSystem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,11 @@
 #ifndef _U2_RUNFILESYSTEM_H_
 #define _U2_RUNFILESYSTEM_H_
 
-#include <U2Core/global.h>
-#include <U2Core/U2OpStatus.h>
-
+#include <QObject>
 #include <QVector>
 
+#include <U2Core/U2OpStatus.h>
+
 namespace U2 {
 
 namespace Workflow {
diff --git a/src/corelibs/U2Lang/src/model/Schema.cpp b/src/corelibs/U2Lang/src/model/Schema.cpp
index 47ad81e..136d908 100644
--- a/src/corelibs/U2Lang/src/model/Schema.cpp
+++ b/src/corelibs/U2Lang/src/model/Schema.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -290,9 +290,9 @@ void Schema::replaceInLinksAndSlots(Actor *proc, const PortAlias &portAlias) {
             // replace slots links and paths
             Attribute *b = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID);
             Attribute *p = port->getParameter(IntegralBusPort::PATHS_ATTR_ID);
-            QStrStrMap busMap = b->getAttributeValueWithoutScript<QStrStrMap>();
+            StrStrMap busMap = b->getAttributeValueWithoutScript<StrStrMap>();
             SlotPathMap pathMap = p->getAttributeValueWithoutScript<SlotPathMap>();
-            QStrStrMap subBusMap;
+            StrStrMap subBusMap;
             SlotPathMap subPathMap;
 
             foreach (const SlotAlias &slotAlias, portAlias.getSlotAliases()) {
@@ -333,8 +333,8 @@ void Schema::replaceOutSlots(Actor *origProc, const PortAlias &portAlias) {
     foreach (Actor *proc, procs) {
         foreach (Port *p, proc->getInputPorts()) {
             Attribute *a = p->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID);
-            QStrStrMap busMap = a->getAttributeValueWithoutScript<QStrStrMap>();
-            QStrStrMap newMap;
+            StrStrMap busMap = a->getAttributeValueWithoutScript<StrStrMap>();
+            StrStrMap newMap;
 
             QMapIterator<QString, QString> it(busMap);
             while (it.hasNext()) {
diff --git a/src/corelibs/U2Lang/src/model/Schema.h b/src/corelibs/U2Lang/src/model/Schema.h
index 08a8c53..4e18334 100644
--- a/src/corelibs/U2Lang/src/model/Schema.h
+++ b/src/corelibs/U2Lang/src/model/Schema.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,13 @@
 #ifndef _U2_WORKFLOW_ITERATION_H_
 #define _U2_WORKFLOW_ITERATION_H_
 
+#include <QFont>
+#include <QPair>
+
 #include <U2Lang/Aliasing.h>
 #include <U2Lang/Attribute.h>
 #include <U2Lang/PortMapping.h>
 
-#include <QtCore/QPair>
-
 typedef QPair<U2::ActorId,QString> IterationCfgKey;
 typedef QMap<IterationCfgKey, QVariant> IterationCfg;
 typedef QMap<U2::ActorId, QVariantMap> CfgMap;
diff --git a/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.cpp b/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.cpp
index 062b1a6..1e82a30 100644
--- a/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.cpp
+++ b/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.h b/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.h
index 3b92a0c..d3035fb 100644
--- a/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.h
+++ b/src/corelibs/U2Lang/src/model/SchemaActorsRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/SchemaConfig.h b/src/corelibs/U2Lang/src/model/SchemaConfig.h
index 72ef8a3..136d235 100644
--- a/src/corelibs/U2Lang/src/model/SchemaConfig.h
+++ b/src/corelibs/U2Lang/src/model/SchemaConfig.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/WorkflowContext.cpp b/src/corelibs/U2Lang/src/model/WorkflowContext.cpp
index ce93854..dd94aa2 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowContext.cpp
+++ b/src/corelibs/U2Lang/src/model/WorkflowContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QMutexLocker>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
+#include <QDir>
+#include <QFileInfo>
+#include <QMutexLocker>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppFileStorage.h>
@@ -182,7 +181,7 @@ bool WorkflowContext::initWorkingDir() {
         WorkflowContextCMDLine::saveRunInfo(workingDir());
     }
     monitor->setOutputDir(workingDir());
-    coreLog.details("Workflow output directory is: " + workingDir());
+    coreLog.details("Workflow output folder is: " + workingDir());
     return true;
 }
 
@@ -190,7 +189,7 @@ bool WorkflowContext::initWorkingDir() {
 /* WorkflowContextCMDLine */
 /************************************************************************/
 QString WorkflowContextCMDLine::getOutputDirectory(U2OpStatus &os) {
-    // 1. Detect directory
+    // 1. Detect folder
     QString root;
     if (useOutputDir()) {
         root = WorkflowSettings::getWorkflowOutputDirectory();
@@ -198,12 +197,12 @@ QString WorkflowContextCMDLine::getOutputDirectory(U2OpStatus &os) {
         root = QDir::currentPath();
     }
 
-    // 2. Create directory if it does not exist
+    // 2. Create folder if it does not exist
     QDir rootDir(root);
     if (!rootDir.exists()) {
         bool created = rootDir.mkpath(rootDir.absolutePath());
         if (!created) {
-            os.setError(QObject::tr("Can not create directory: ") + root);
+            os.setError(QObject::tr("Can not create folder: ") + root);
             return "";
         }
     }
@@ -212,7 +211,7 @@ QString WorkflowContextCMDLine::getOutputDirectory(U2OpStatus &os) {
 
 QString WorkflowContextCMDLine::createSubDirectoryForRun(const QString &root, U2OpStatus &os) {
     QDir rootDir(root);
-    // 1. Find free sub-directory name
+    // 1. Find free sub-folder name
     QString baseDirName = QDateTime::currentDateTime().toString("yyyy.MM.dd_hh-mm");
     QString dirName = baseDirName;
     {
@@ -223,10 +222,10 @@ QString WorkflowContextCMDLine::createSubDirectoryForRun(const QString &root, U2
         }
     }
 
-    // 2. Try to create the sub-directory
+    // 2. Try to create the sub-folder
     bool created = rootDir.mkdir(dirName);
     if (!created) {
-        os.setError(QObject::tr("Can not create directory %1 in the directory %2")
+        os.setError(QObject::tr("Can not create folder %1 in the folder %2")
             .arg(dirName).arg(rootDir.absolutePath()));
         return "";
     }
diff --git a/src/corelibs/U2Lang/src/model/WorkflowContext.h b/src/corelibs/U2Lang/src/model/WorkflowContext.h
index 9dd142c..9e91b3d 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowContext.h
+++ b/src/corelibs/U2Lang/src/model/WorkflowContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_WORKFLOW_CONTEXT_H_
 #define _U2_WORKFLOW_CONTEXT_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 #include <U2Core/AppFileStorage.h>
 
diff --git a/src/corelibs/U2Lang/src/model/WorkflowEnv.cpp b/src/corelibs/U2Lang/src/model/WorkflowEnv.cpp
index dc103bb..0a6ad98 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowEnv.cpp
+++ b/src/corelibs/U2Lang/src/model/WorkflowEnv.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include "WorkflowEnv.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/model/WorkflowEnv.h b/src/corelibs/U2Lang/src/model/WorkflowEnv.h
index 7637c03..302dfdc 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowEnv.h
+++ b/src/corelibs/U2Lang/src/model/WorkflowEnv.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/WorkflowManager.h b/src/corelibs/U2Lang/src/model/WorkflowManager.h
index 7725aa6..f3c492b 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowManager.h
+++ b/src/corelibs/U2Lang/src/model/WorkflowManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,20 +22,20 @@
 #ifndef _U2_WORKFLOW_MNGR_H_
 #define _U2_WORKFLOW_MNGR_H_
 
-#include <U2Lang/ActorModel.h>
+#include <assert.h>
+
+#include <QList>
+#include <QMap>
+#include <QObject>
+#include <QString>
+#include <QVariant>
+
+#include <U2Lang/Schema.h>
 #include <U2Lang/WorkflowContext.h>
 #include <U2Lang/WorkflowTransport.h>
-#include <U2Lang/Schema.h>
 
-#include <U2Core/Task.h>
 #include <U2Core/IdRegistry.h>
-
-#include <QtCore/QList>
-#include <QtCore/QMap>
-#include <QtCore/QObject>
-#include <QtCore/QString>
-#include <QtCore/QVariant>
-#include <assert.h>
+#include <U2Core/Task.h>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.cpp b/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.cpp
index fde92df..855c99c 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.cpp
+++ b/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.h b/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.h
index c15b491..4234d86 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.h
+++ b/src/corelibs/U2Lang/src/model/WorkflowScriptEngine.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,9 @@
 #ifndef _U2_WORKFLOW_SCRIPT_ENGINE_H_
 #define _U2_WORKFLOW_SCRIPT_ENGINE_H_
 
+#include <QScriptEngine>
+
 #include <U2Lang/WorkflowContext.h>
-#include <QtScript>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/model/WorkflowTransport.cpp b/src/corelibs/U2Lang/src/model/WorkflowTransport.cpp
index 9b4a12a..d1bd2bc 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowTransport.cpp
+++ b/src/corelibs/U2Lang/src/model/WorkflowTransport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/WorkflowTransport.h b/src/corelibs/U2Lang/src/model/WorkflowTransport.h
index d79a16e..59f4490 100644
--- a/src/corelibs/U2Lang/src/model/WorkflowTransport.h
+++ b/src/corelibs/U2Lang/src/model/WorkflowTransport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_WORKFLOW_TRANSPORT_H_
 #define _U2_WORKFLOW_TRANSPORT_H_
 
-#include <QtCore/QVariant>
-#include <QtCore/QQueue>
+#include <QVariant>
+#include <QQueue>
 
 #include <U2Lang/Datatype.h>
 
diff --git a/src/corelibs/U2Lang/src/model/actor/Actor.cpp b/src/corelibs/U2Lang/src/model/actor/Actor.cpp
index d603e3f..4ad63e8 100644
--- a/src/corelibs/U2Lang/src/model/actor/Actor.cpp
+++ b/src/corelibs/U2Lang/src/model/actor/Actor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/L10n.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/ActorPrototype.h>
 #include <U2Lang/BaseTypes.h>
@@ -30,11 +31,10 @@
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowUtils.h>
 
+#include "Actor.h"
 #include "ActorDocument.h"
 #include "support/IntegralBusUtils.h"
 
-#include "Actor.h"
-
 namespace U2 {
 namespace Workflow {
 
diff --git a/src/corelibs/U2Lang/src/model/actor/Actor.h b/src/corelibs/U2Lang/src/model/actor/Actor.h
index 80b79a2..20e11cd 100644
--- a/src/corelibs/U2Lang/src/model/actor/Actor.h
+++ b/src/corelibs/U2Lang/src/model/actor/Actor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.cpp b/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.cpp
index 1bffb55..9f8be0a 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.cpp
+++ b/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.h b/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.h
index 114281c..0659e46 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.h
+++ b/src/corelibs/U2Lang/src/model/actor/ActorConfigurationEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorDocument.h b/src/corelibs/U2Lang/src/model/actor/ActorDocument.h
index f8f7c90..6865612 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorDocument.h
+++ b/src/corelibs/U2Lang/src/model/actor/ActorDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Lang/Actor.h>
 
-#include <QtGui/QTextDocument>
+#include <QTextDocument>
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorPrototype.cpp b/src/corelibs/U2Lang/src/model/actor/ActorPrototype.cpp
index e5d359e..79b66f3 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorPrototype.cpp
+++ b/src/corelibs/U2Lang/src/model/actor/ActorPrototype.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -154,7 +154,7 @@ void ActorPrototype::addExternalTool(const QString &toolId, const QString &param
     externalTools[toolId] = paramId;
 }
 
-const QStrStrMap & ActorPrototype::getExternalTools() const {
+const StrStrMap & ActorPrototype::getExternalTools() const {
     return externalTools;
 }
 
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorPrototype.h b/src/corelibs/U2Lang/src/model/actor/ActorPrototype.h
index 5a0f278..528a602 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorPrototype.h
+++ b/src/corelibs/U2Lang/src/model/actor/ActorPrototype.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Lang/Descriptor.h>
 #include <U2Lang/Port.h>
 
-#include <QtCore/QMimeData>
+#include <QMimeData>
 
 namespace U2 {
     class Attribute;
@@ -91,7 +91,7 @@ public:
     void setInfluenceOnPathFlag(bool value) {influenceOnPathFlag = value;}
 
     void addExternalTool(const QString &toolId, const QString &paramId = "");
-    const QStrStrMap & getExternalTools() const;
+    const StrStrMap & getExternalTools() const;
 protected:
     // create port and sets p as owner of new port
     // caller should add created port to actor's ports see createInstance
@@ -131,7 +131,7 @@ protected:
     // The actor could use external tools. The map shows what tools are used.
     // Also the path to a tool can be set in a parameter. In this case the value of map is the parameter's id;
     // otherwise the value is empty string.
-    QStrStrMap externalTools;
+    StrStrMap externalTools;
 }; // ActorPrototype
 
 } // Workflow
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.cpp b/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.cpp
index 72748f9..7d1880a 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.cpp
+++ b/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.h b/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.h
index 9a182c7..5219721 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.h
+++ b/src/corelibs/U2Lang/src/model/actor/ActorScriptValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorValidator.cpp b/src/corelibs/U2Lang/src/model/actor/ActorValidator.cpp
index d872667..4a4854f 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorValidator.cpp
+++ b/src/corelibs/U2Lang/src/model/actor/ActorValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,11 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/HRSchemaSerializer.h>
 
 #include "ActorScriptValidator.h"
-
 #include "ActorValidator.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/model/actor/ActorValidator.h b/src/corelibs/U2Lang/src/model/actor/ActorValidator.h
index 41b156b..98c49a5 100644
--- a/src/corelibs/U2Lang/src/model/actor/ActorValidator.h
+++ b/src/corelibs/U2Lang/src/model/actor/ActorValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Lang/Actor.h>
 #include <U2Lang/ConfigurationValidator.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/Dataset.cpp b/src/corelibs/U2Lang/src/model/url_attribute/Dataset.cpp
index f2ec93a..1c090ac 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/Dataset.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/Dataset.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/Dataset.h b/src/corelibs/U2Lang/src/model/url_attribute/Dataset.h
index 4fdbc2a..c1ce825 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/Dataset.h
+++ b/src/corelibs/U2Lang/src/model/url_attribute/Dataset.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.cpp b/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.cpp
index f0e3d63..88e1f2f 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.h b/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.h
index 06d85f9..65bed14 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.h
+++ b/src/corelibs/U2Lang/src/model/url_attribute/DbFolderScanner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.cpp b/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.cpp
index 87e685c..fce6ffd 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.h b/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.h
index 53f31e9..a5c15da 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.h
+++ b/src/corelibs/U2Lang/src/model/url_attribute/SharedDbUrlUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.cpp b/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.cpp
index 67b8478..6d87d04 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.h b/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.h
index 147d7a8..b551b8c 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.h
+++ b/src/corelibs/U2Lang/src/model/url_attribute/URLAttribute.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
index 6d12b71..820aba4 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
+++ b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/DbFolderScanner.h>
 #include <U2Lang/SharedDbUrlUtils.h>
 #include <U2Lang/WorkflowUtils.h>
diff --git a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.h b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.h
index 51c3ba2..abad48f 100644
--- a/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.h
+++ b/src/corelibs/U2Lang/src/model/url_attribute/URLContainer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -90,7 +90,7 @@ public:
     virtual void accept(URLContainerVisitor *visitor);
 
     /**
-    * Validates filtered files inside the directory
+    * Validates filtered files inside the folder
     * are present and accessible for reading.
     */
     virtual bool validateUrl(ProblemList &problemList);
diff --git a/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.cpp b/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.cpp
index 73bf4c1..f860187 100644
--- a/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.h b/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.h
index 44779ca..acc9855 100644
--- a/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.h
+++ b/src/corelibs/U2Lang/src/model/wizard/ElementSelectorWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/IdMapping.cpp b/src/corelibs/U2Lang/src/model/wizard/IdMapping.cpp
index 9d28d3e..64f7e8a 100644
--- a/src/corelibs/U2Lang/src/model/wizard/IdMapping.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/IdMapping.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/IdMapping.h b/src/corelibs/U2Lang/src/model/wizard/IdMapping.h
index af94ef0..3174ade 100644
--- a/src/corelibs/U2Lang/src/model/wizard/IdMapping.h
+++ b/src/corelibs/U2Lang/src/model/wizard/IdMapping.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/PortMapping.cpp b/src/corelibs/U2Lang/src/model/wizard/PortMapping.cpp
index 87c2f02..f00f3d0 100644
--- a/src/corelibs/U2Lang/src/model/wizard/PortMapping.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/PortMapping.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/PortMapping.h b/src/corelibs/U2Lang/src/model/wizard/PortMapping.h
index a1f8670..782b343 100644
--- a/src/corelibs/U2Lang/src/model/wizard/PortMapping.h
+++ b/src/corelibs/U2Lang/src/model/wizard/PortMapping.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/SelectorValue.cpp b/src/corelibs/U2Lang/src/model/wizard/SelectorValue.cpp
index 8f5a9d8..ca6f721 100644
--- a/src/corelibs/U2Lang/src/model/wizard/SelectorValue.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/SelectorValue.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/SelectorValue.h b/src/corelibs/U2Lang/src/model/wizard/SelectorValue.h
index a79f41d..562db36 100644
--- a/src/corelibs/U2Lang/src/model/wizard/SelectorValue.h
+++ b/src/corelibs/U2Lang/src/model/wizard/SelectorValue.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/SlotMapping.cpp b/src/corelibs/U2Lang/src/model/wizard/SlotMapping.cpp
index 667448b..8a8505f 100644
--- a/src/corelibs/U2Lang/src/model/wizard/SlotMapping.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/SlotMapping.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/SlotMapping.h b/src/corelibs/U2Lang/src/model/wizard/SlotMapping.h
index 0f89f86..5c32990 100644
--- a/src/corelibs/U2Lang/src/model/wizard/SlotMapping.h
+++ b/src/corelibs/U2Lang/src/model/wizard/SlotMapping.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/Variable.cpp b/src/corelibs/U2Lang/src/model/wizard/Variable.cpp
index eb09d61..560c7dd 100644
--- a/src/corelibs/U2Lang/src/model/wizard/Variable.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/Variable.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/Variable.h b/src/corelibs/U2Lang/src/model/wizard/Variable.h
index e6d2aed..db3d4c5 100644
--- a/src/corelibs/U2Lang/src/model/wizard/Variable.h
+++ b/src/corelibs/U2Lang/src/model/wizard/Variable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,8 @@
 #ifndef _U2_VARIABLE_H_
 #define _U2_VARIABLE_H_
 
-#include <U2Core/global.h>
+#include <QMap>
+
 #include <U2Core/U2OpStatus.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/model/wizard/Wizard.cpp b/src/corelibs/U2Lang/src/model/wizard/Wizard.cpp
index b786e31..6b36167 100644
--- a/src/corelibs/U2Lang/src/model/wizard/Wizard.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/Wizard.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/Wizard.h b/src/corelibs/U2Lang/src/model/wizard/Wizard.h
index 8851bce..bcd64cb 100644
--- a/src/corelibs/U2Lang/src/model/wizard/Wizard.h
+++ b/src/corelibs/U2Lang/src/model/wizard/Wizard.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/WizardPage.cpp b/src/corelibs/U2Lang/src/model/wizard/WizardPage.cpp
index 3a07af8..2deb669 100644
--- a/src/corelibs/U2Lang/src/model/wizard/WizardPage.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/WizardPage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/WizardPage.h b/src/corelibs/U2Lang/src/model/wizard/WizardPage.h
index 05d0887..36f1a7c 100644
--- a/src/corelibs/U2Lang/src/model/wizard/WizardPage.h
+++ b/src/corelibs/U2Lang/src/model/wizard/WizardPage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/WizardWidget.cpp b/src/corelibs/U2Lang/src/model/wizard/WizardWidget.cpp
index 1ad1640..40388be 100644
--- a/src/corelibs/U2Lang/src/model/wizard/WizardWidget.cpp
+++ b/src/corelibs/U2Lang/src/model/wizard/WizardWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/WizardWidget.h b/src/corelibs/U2Lang/src/model/wizard/WizardWidget.h
index af2e0b9..2a1d0e2 100644
--- a/src/corelibs/U2Lang/src/model/wizard/WizardWidget.h
+++ b/src/corelibs/U2Lang/src/model/wizard/WizardWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/model/wizard/WizardWidgetVisitor.h b/src/corelibs/U2Lang/src/model/wizard/WizardWidgetVisitor.h
index d0c1dc2..f7921d5 100644
--- a/src/corelibs/U2Lang/src/model/wizard/WizardWidgetVisitor.h
+++ b/src/corelibs/U2Lang/src/model/wizard/WizardWidgetVisitor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/run/WorkflowMonitor.cpp b/src/corelibs/U2Lang/src/run/WorkflowMonitor.cpp
index f217c40..b58704e 100644
--- a/src/corelibs/U2Lang/src/run/WorkflowMonitor.cpp
+++ b/src/corelibs/U2Lang/src/run/WorkflowMonitor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,9 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/HRSchemaSerializer.h>
@@ -91,6 +93,10 @@ const QMap<QString, Monitor::WorkerLogInfo> & WorkflowMonitor::getWorkersLog() c
     return workersLog;
 }
 
+const QMap<QString, QMultiMap<QString, QString> > &WorkflowMonitor::getWorkersReports() const {
+    return workersReports;
+}
+
 QString WorkflowMonitor::actorName(const QString &id) const {
     SAFE_POINT(procMap.contains(id), QString("Unknown actor id %1").arg(id), "");
     return procMap[id]->getLabel();
@@ -106,6 +112,10 @@ void WorkflowMonitor::addOutputFile(const QString &url, const QString &producer,
     emit si_newOutputFile(info);
 }
 
+void WorkflowMonitor::addInfo(const QString &message, const QString &actor, const QString &type) {
+    addProblem(Problem(message, actor, type));
+}
+
 void WorkflowMonitor::addError(const QString &message, const QString &actor, const QString &type) {
     addProblem(Problem(message, actor, type));
     coreLog.error(message);
@@ -161,6 +171,7 @@ void WorkflowMonitor::resume() {
 void WorkflowMonitor::registerTask(Task *task, const QString &actor) {
     SAFE_POINT(procMap.contains(actor), "Unknown actor id", );
     taskMap[task] = procMap[actor];
+    connect(new TaskSignalMapper(task), SIGNAL(si_taskFinished(Task *)), SLOT(sl_workerTaskFinished(Task *)));
 }
 
 void WorkflowMonitor::setOutputDir(const QString &dir) {
@@ -192,10 +203,12 @@ void WorkflowMonitor::sl_taskStateChanged() {
         } else if (task->hasError()) {
             state = FAILED;
         } else if (!problems.isEmpty()) {
-            if (!hasErrors()) {
+            if (hasErrors()) {
+                state = FAILED;
+            } else if (hasWarnings()) {
                 state = FINISHED_WITH_PROBLEMS;
             } else {
-                state = FAILED;
+                state = SUCCESS;
             }
         }
         emit si_taskStateChanged(state);
@@ -203,6 +216,13 @@ void WorkflowMonitor::sl_taskStateChanged() {
     }
 }
 
+void WorkflowMonitor::sl_workerTaskFinished(Task *workerTask) {
+    Actor *actor = taskMap.value(workerTask, NULL);
+    SAFE_POINT(NULL != actor, QString("An unknown task finished: %1").arg(workerTask->getTaskName()), );
+    CHECK(workerTask->isReportingEnabled(), );
+    workersReports[actor->getId()].insert(workerTask->getTaskName(), workerTask->generateReport());
+}
+
 void WorkflowMonitor::setWorkerInfo(const QString &actorId, const WorkerInfo &info) {
     workers[actorId] = info;
     emit si_workerInfoChanged(actorId, info);
@@ -237,6 +257,13 @@ void WorkflowMonitor::addProblem(const Problem &problem) {
     emit si_newProblem(problem);
 }
 
+bool WorkflowMonitor::hasWarnings() const {
+    foreach (Problem problem, problems) {
+        CHECK(problem.type != Problem::U2_WARNING, true);
+    }
+    return false;
+}
+
 bool WorkflowMonitor::hasErrors() const {
     foreach (Problem problem, problems) {
         CHECK(problem.type != Problem::U2_ERROR, true);
diff --git a/src/corelibs/U2Lang/src/run/WorkflowMonitor.h b/src/corelibs/U2Lang/src/run/WorkflowMonitor.h
index a684d5c..e5b51f4 100644
--- a/src/corelibs/U2Lang/src/run/WorkflowMonitor.h
+++ b/src/corelibs/U2Lang/src/run/WorkflowMonitor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -99,17 +99,20 @@ public:
     const QMap<QString, Monitor::WorkerInfo> & getWorkersInfo() const;
     const QList<Monitor::WorkerParamsInfo>  & getWorkersParameters() const;
     const QMap<QString, Monitor::WorkerLogInfo> & getWorkersLog() const;
+    const QMap<QString, QMultiMap<QString, QString> > &getWorkersReports() const;
     QString actorName(const QString &id) const;
     int getDataProduced(const QString &actor) const;
     bool containsOutputFile(const QString &url) const;
 
     void addOutputFile(const QString &url, const QString &producer, bool openBySystem = false);
-    void addError(const QString &message, const QString &actor ,const QString &type = Problem::U2_ERROR);
+    void addInfo(const QString &message, const QString &actor, const QString &type = Problem::U2_INFO);
+    void addError(const QString &message, const QString &actor, const QString &type = Problem::U2_ERROR);
     /** Can be called only one time for the task */
     void addTaskError(Task *task, const QString &message = "");
     void addTaskWarning(Task *task, const QString &message = "");
     void addTime(qint64 timeMks, const QString &actor);
     void addTick(qint64 timeMks, const QString &actor);
+
     void start();
     void pause();
     void resume();
@@ -130,6 +133,7 @@ public:
 public slots:
     void sl_progressChanged();
     void sl_taskStateChanged();
+    void sl_workerTaskFinished(Task *workerTask);
 
 signals:
     void si_firstProblem();
@@ -156,6 +160,7 @@ private:
     QMap<QString, Monitor::WorkerInfo> workers;
     QList<Monitor::WorkerParamsInfo> workersParamsInfo;
     QMap<QString, Monitor::WorkerLogInfo> workersLog;
+    QMap<QString, QMultiMap<QString, QString> > workersReports;  // workerId<taskName, taskReport> >
     QString _outputDir;
     bool saveSchema;
     bool started;
@@ -164,6 +169,7 @@ protected:
     void setWorkerInfo(const QString &actorId, const Monitor::WorkerInfo &info);
     void setRunState(bool paused);
     void addProblem(const Problem &problem);
+    bool hasWarnings() const;
     bool hasErrors() const;
 };
 
diff --git a/src/corelibs/U2Lang/src/support/AttributeInfo.cpp b/src/corelibs/U2Lang/src/support/AttributeInfo.cpp
index 156e8de..98355f0 100644
--- a/src/corelibs/U2Lang/src/support/AttributeInfo.cpp
+++ b/src/corelibs/U2Lang/src/support/AttributeInfo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/AttributeInfo.h b/src/corelibs/U2Lang/src/support/AttributeInfo.h
index 1a4cf9d..7b14861 100644
--- a/src/corelibs/U2Lang/src/support/AttributeInfo.h
+++ b/src/corelibs/U2Lang/src/support/AttributeInfo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.cpp b/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.cpp
index 592990d..dfce7fd 100644
--- a/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.cpp
+++ b/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.h b/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.h
index 0285a69..6a01a67 100644
--- a/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.h
+++ b/src/corelibs/U2Lang/src/support/BaseBreakpointHitCounter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BaseNGSWorker.cpp b/src/corelibs/U2Lang/src/support/BaseNGSWorker.cpp
index 81d2be6..fed6941 100644
--- a/src/corelibs/U2Lang/src/support/BaseNGSWorker.cpp
+++ b/src/corelibs/U2Lang/src/support/BaseNGSWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
@@ -31,14 +32,17 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -131,17 +135,10 @@ QString BaseNGSWorker::getTargetName (const QString &fileUrl, const QString &out
         name = QFileInfo(fileUrl).fileName();
         name = name + getDefaultFileName();
     }
-    if(outUrls.contains(outDir + name)){
-        name.append(QString("_%1").arg(outUrls.size()));
-    }
-    QString originalName = name;
-    while (QFile::exists(outDir + name) || outUrls.contains(outDir + name)){
-        outUrls.append(outDir+name);
-        name = originalName;
-        name.append(QString("_%1").arg(outUrls.size()));
-    }
-
-    return name;
+    QString rolledUrl = GUrlUtils::rollFileName(outDir + name, "_", outUrls.toSet());
+    outUrls.append(rolledUrl);
+    QFileInfo fi(rolledUrl);
+    return fi.fileName();
 }
 
 
@@ -206,7 +203,7 @@ void BaseNGSTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError(tr("Directory does not exist: ") + outDir.absolutePath());
+        setError(tr("Folder does not exist: ") + outDir.absolutePath());
         return ;
     }
 
diff --git a/src/corelibs/U2Lang/src/support/BaseNGSWorker.h b/src/corelibs/U2Lang/src/support/BaseNGSWorker.h
index 0b42fe4..85a9c0d 100644
--- a/src/corelibs/U2Lang/src/support/BaseNGSWorker.h
+++ b/src/corelibs/U2Lang/src/support/BaseNGSWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.cpp b/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.cpp
index e5c4e7e..672ef5b 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.cpp
+++ b/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QMutexLocker>
+#include <QMutexLocker>
 
 #include <U2Lang/Attribute.h>
 #include <U2Lang/WorkflowBreakpointSharedInfo.h>
diff --git a/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.h b/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.h
index 9f6cc8b..b926f1d 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.h
+++ b/src/corelibs/U2Lang/src/support/BreakpointConditionChecker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_BREAKPOINT_CONDITION_CHECKER_H_
 #define _U2_BREAKPOINT_CONDITION_CHECKER_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 #include <U2Lang/WorkflowContext.h>
 
diff --git a/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.cpp b/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.cpp
index 92071f1..d91c3d1 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.cpp
+++ b/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.h b/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.h
index 4f06f67..7ea9b89 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.h
+++ b/src/corelibs/U2Lang/src/support/BreakpointEqualHitCounter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,6 @@
 #ifndef _U2_BREAKPOINT_EQUAL_HIT_COUNTER_H_
 #define _U2_BREAKPOINT_EQUAL_HIT_COUNTER_H_
 
-#include <QtGlobal>
-
 #include "BaseBreakpointHitCounter.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.cpp b/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.cpp
index 99f30ba..83a86ca 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.cpp
+++ b/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.h b/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.h
index 35490f1..4a9283a 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.h
+++ b/src/corelibs/U2Lang/src/support/BreakpointGreaterOrEqualHitCounter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.cpp b/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.cpp
index f700751..7ef72df 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.cpp
+++ b/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include "BreakpointMultipleHitCounter.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.h b/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.h
index 2fcbc3d..44d8ee7 100644
--- a/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.h
+++ b/src/corelibs/U2Lang/src/support/BreakpointMultipleHitCounter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,6 @@
 #ifndef _U2_BREAKPOINT_MULTIPLE_HIT_COUNTER_H_
 #define _U2_BREAKPOINT_MULTIPLE_HIT_COUNTER_H_
 
-#include <QtGlobal>
-
 #include "BaseBreakpointHitCounter.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/CoreLibConstants.cpp b/src/corelibs/U2Lang/src/support/CoreLibConstants.cpp
index fc9bb48..0090088 100644
--- a/src/corelibs/U2Lang/src/support/CoreLibConstants.cpp
+++ b/src/corelibs/U2Lang/src/support/CoreLibConstants.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/CoreLibConstants.h b/src/corelibs/U2Lang/src/support/CoreLibConstants.h
index d3d389c..2fa793c 100644
--- a/src/corelibs/U2Lang/src/support/CoreLibConstants.h
+++ b/src/corelibs/U2Lang/src/support/CoreLibConstants.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_WORKFLOW_CORE_LIB_CONSTANTS_H_
 #define _U2_WORKFLOW_CORE_LIB_CONSTANTS_H_
 
-#include <QtCore/QString>
+#include <QString>
 #include <U2Core/global.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp b/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp
index fd57426..c47cc78 100644
--- a/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp
+++ b/src/corelibs/U2Lang/src/support/DatasetFetcher.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/DatasetFetcher.h b/src/corelibs/U2Lang/src/support/DatasetFetcher.h
index 69ef929..def2b65 100644
--- a/src/corelibs/U2Lang/src/support/DatasetFetcher.h
+++ b/src/corelibs/U2Lang/src/support/DatasetFetcher.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.cpp b/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.cpp
index 17f25b9..449733e 100644
--- a/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.cpp
+++ b/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "ElapsedTimeUpdater.h"
-
 #include <U2Core/Timer.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "ElapsedTimeUpdater.h"
+
 namespace U2 {
 namespace LocalWorkflow {
 
diff --git a/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.h b/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.h
index 60f9d17..e19d3b2 100644
--- a/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.h
+++ b/src/corelibs/U2Lang/src/support/ElapsedTimeUpdater.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/IntegralBusUtils.cpp b/src/corelibs/U2Lang/src/support/IntegralBusUtils.cpp
index 4ad0244..d849ca9 100644
--- a/src/corelibs/U2Lang/src/support/IntegralBusUtils.cpp
+++ b/src/corelibs/U2Lang/src/support/IntegralBusUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,7 @@ IntegralBusUtils::SplitResult IntegralBusUtils::splitCandidates(const QList<Desc
     return splitter->splitCandidates(candidates);
 }
 
-void IntegralBusUtils::remapBus(QStrStrMap &busMap, const ActorId &oldId, const ActorId &newId, const PortMapping &mapping) {
+void IntegralBusUtils::remapBus(StrStrMap &busMap, const ActorId &oldId, const ActorId &newId, const PortMapping &mapping) {
     foreach (QString key, busMap.uniqueKeys()) {
         U2OpStatus2Log os;
         QList<IntegralBusSlot> slotList = IntegralBusSlot::listFromString(busMap[key], os);
diff --git a/src/corelibs/U2Lang/src/support/IntegralBusUtils.h b/src/corelibs/U2Lang/src/support/IntegralBusUtils.h
index f5fe41e..6b4e2e1 100644
--- a/src/corelibs/U2Lang/src/support/IntegralBusUtils.h
+++ b/src/corelibs/U2Lang/src/support/IntegralBusUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ public:
     };
 
     static SplitResult splitCandidates(const QList<Descriptor> &candidates, const Descriptor &toDesc, DataTypePtr toDatatype);
-    static void remapBus(QStrStrMap &busMap, const ActorId &oldId, const ActorId &newId, const PortMapping &mapping);
+    static void remapBus(StrStrMap &busMap, const ActorId &oldId, const ActorId &newId, const PortMapping &mapping);
     static void remapPathedSlotString(QString &pathedSlotStr, const ActorId &oldId, const ActorId &newId, const PortMapping &mapping);
     static QList<Descriptor> getSlotsByType(const QMap<Descriptor, DataTypePtr> &busMap, const Descriptor &slot, const DataTypePtr &type);
 };
diff --git a/src/corelibs/U2Lang/src/support/MapDatatypeEditor.cpp b/src/corelibs/U2Lang/src/support/MapDatatypeEditor.cpp
index a6cced7..29f7813 100644
--- a/src/corelibs/U2Lang/src/support/MapDatatypeEditor.cpp
+++ b/src/corelibs/U2Lang/src/support/MapDatatypeEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,31 +22,16 @@
 #include <assert.h>
 
 #include <QPainter>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QListWidget>
-#include <QtGui/QTableWidget>
-#include <QtGui/QHeaderView>
-#include <QtGui/QComboBox>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QTextEdit>
-#include <QtGui/QToolButton>
-#include <QtGui/QPrinter>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QTableWidget>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QToolButton>
-#include <QtPrintSupport/QPrinter>
-#endif
-#include <QtGui/QStandardItemModel>
+#include <QLabel>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QTableWidget>
+#include <QHeaderView>
+#include <QComboBox>
+#include <QVBoxLayout>
+#include <QTextEdit>
+#include <QToolButton>
+#include <QStandardItemModel>
 
 #include <U2Lang/IntegralBus.h>
 #include <U2Lang/IntegralBusModel.h>
@@ -92,12 +77,7 @@ QWidget* MapDatatypeEditor::createGUI(DataTypePtr from, DataTypePtr to) {
         table->setItemDelegateForColumn(VALUE_COLUMN, new DescriptorListEditorDelegate(this));
     }
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    table->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-#else
     table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
-#endif
-
     table->horizontalHeader()->setStretchLastSection(true);
     table->verticalHeader()->hide();
     QSizePolicy sizePolicy5(QSizePolicy::Expanding, QSizePolicy::Expanding);
@@ -171,7 +151,7 @@ QWidget* MapDatatypeEditor::createGUI(DataTypePtr from, DataTypePtr to) {
 }
 
 QMap<QString, QString> MapDatatypeEditor::getBindingsMap() {
-    QMap<QString, QString> bindingsMap = cfg->getParameter(propertyName)->getAttributeValueWithoutScript<QStrStrMap>();
+    QMap<QString, QString> bindingsMap = cfg->getParameter(propertyName)->getAttributeValueWithoutScript<StrStrMap>();
     return bindingsMap;
 }
 
@@ -219,7 +199,7 @@ void MapDatatypeEditor::commit() {
             map[key] = val;
         }
     }
-    cfg->setParameter(propertyName, qVariantFromValue<QStrStrMap>(map));
+    cfg->setParameter(propertyName, qVariantFromValue<StrStrMap>(map));
     sl_showDoc();
 }
 
@@ -278,13 +258,13 @@ void BusPortEditor::commit() {
             busMap[key] = srcs.join(";");
         }
     }
-    cfg->setParameter(IntegralBusPort::BUS_MAP_ATTR_ID, qVariantFromValue<QStrStrMap>(busMap));
+    cfg->setParameter(IntegralBusPort::BUS_MAP_ATTR_ID, qVariantFromValue<StrStrMap>(busMap));
     cfg->setParameter(IntegralBusPort::PATHS_ATTR_ID, qVariantFromValue<SlotPathMap>(pathMap));
     sl_showDoc();
 }
 
 QMap<QString, QString> BusPortEditor::getBindingsMap() {
-    QMap<QString, QString> bindingsMap = cfg->getParameter(propertyName)->getAttributeValueWithoutScript<QStrStrMap>();
+    QMap<QString, QString> bindingsMap = cfg->getParameter(propertyName)->getAttributeValueWithoutScript<StrStrMap>();
     SlotPathMap pathMap = cfg->getParameter(IntegralBusPort::PATHS_ATTR_ID)->getAttributeValueWithoutScript<SlotPathMap>();
     WorkflowUtils::applyPathsToBusMap(bindingsMap, pathMap);
 
diff --git a/src/corelibs/U2Lang/src/support/MapDatatypeEditor.h b/src/corelibs/U2Lang/src/support/MapDatatypeEditor.h
index e0bf714..2ff4c1c 100644
--- a/src/corelibs/U2Lang/src/support/MapDatatypeEditor.h
+++ b/src/corelibs/U2Lang/src/support/MapDatatypeEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/MarkerUtils.cpp b/src/corelibs/U2Lang/src/support/MarkerUtils.cpp
index 8a4745d..fe2aa6f 100644
--- a/src/corelibs/U2Lang/src/support/MarkerUtils.cpp
+++ b/src/corelibs/U2Lang/src/support/MarkerUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QVariant>
+
 #include "MarkerUtils.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/MarkerUtils.h b/src/corelibs/U2Lang/src/support/MarkerUtils.h
index 5e549cb..96e228a 100644
--- a/src/corelibs/U2Lang/src/support/MarkerUtils.h
+++ b/src/corelibs/U2Lang/src/support/MarkerUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.cpp b/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.cpp
index 06e006f..4c53268 100644
--- a/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.cpp
+++ b/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.h b/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.h
index ded7fb5..7b5824a 100644
--- a/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.h
+++ b/src/corelibs/U2Lang/src/support/NoFailTaskWrapper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/SchemaSerializer.cpp b/src/corelibs/U2Lang/src/support/SchemaSerializer.cpp
index 28cb543..65da900 100644
--- a/src/corelibs/U2Lang/src/support/SchemaSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/SchemaSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtXml/qdom.h>
+#include <QDomElement>
 
 #include <U2Core/Log.h>
+#include <U2Core/QVariantUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/Schema.h>
-#include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/Schema.h>
+#include <U2Lang/WorkflowEnv.h>
 
-#include <U2Core/QVariantUtils.h>
 #include "SchemaSerializer.h"
 
 //Q_DECLARE_METATYPE(U2::Workflow::CfgMap)
@@ -268,7 +269,7 @@ void SchemaSerializer::updatePortBindings(const QList<Actor*> & procs) {
     foreach(Actor * actor, procs) {
         foreach(Port * p, actor->getEnabledInputPorts()) {
             IntegralBusPort * port = qobject_cast<IntegralBusPort*>(p);
-            QStrStrMap busMap = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+            StrStrMap busMap = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
             foreach(const QString & key, busMap.uniqueKeys()) {
                 QString val = busMap.value(key);
                 QStringList vals = val.split(":", QString::SkipEmptyParts);
diff --git a/src/corelibs/U2Lang/src/support/SchemaSerializer.h b/src/corelibs/U2Lang/src/support/SchemaSerializer.h
index 305c0c3..7212661 100644
--- a/src/corelibs/U2Lang/src/support/SchemaSerializer.h
+++ b/src/corelibs/U2Lang/src/support/SchemaSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.cpp b/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.cpp
index b8bc454..2a40e9e 100644
--- a/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtXml>
+#include <QDomElement>
 
 #include <U2Lang/BaseTypes.h>
 #include <U2Lang/IncludedProtoFactory.h>
diff --git a/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.h b/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.h
index ff08a01..83378b3 100644
--- a/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.h
+++ b/src/corelibs/U2Lang/src/support/ScriptWorkerSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
index c449135..aaa3b66 100644
--- a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
+++ b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
@@ -138,20 +138,20 @@ QList<Task*> SimpleInOutWorkflowTask::onSubTaskFinished(Task* subTask) {
 
 //////////////////////////////////////////////////////////////////////////
 // RunSimpleMSAWorkflow4GObject
-SimpleMSAWorkflow4GObjectTask::SimpleMSAWorkflow4GObjectTask(const QString& taskName, MAlignmentObject* _maObj, const SimpleMSAWorkflowTaskConfig& _conf)
+SimpleMSAWorkflow4GObjectTask::SimpleMSAWorkflow4GObjectTask(const QString& taskName, MultipleSequenceAlignmentObject* _maObj, const SimpleMSAWorkflowTaskConfig& _conf)
 : Task(taskName, TaskFlags_NR_FOSCOE),
   obj(_maObj),
   lock(NULL),
   conf(_conf)
 {
-    SAFE_POINT(NULL != obj, "NULL MAlignmentObject!",);
+    SAFE_POINT(NULL != obj, "NULL MultipleSequenceAlignmentObject!",);
 
     U2OpStatus2Log os;
     userModStep = new U2UseCommonUserModStep(obj->getEntityRef(), os);
 
-    MAlignment al = MSAUtils::setUniqueRowNames( obj->getMAlignment() );
+    MultipleSequenceAlignment al = MSAUtils::setUniqueRowNames(obj->getMultipleAlignment());
 
-    MAlignmentObject *msaObject = MAlignmentImporter::createAlignment(obj->getEntityRef().dbiRef, al, os);
+    MultipleSequenceAlignmentObject *msaObject = MultipleSequenceAlignmentImporter::createAlignment(obj->getEntityRef().dbiRef, al, os);
     SAFE_POINT_OP(os,);
 
     SimpleInOutWorkflowTaskConfig sioConf;
@@ -199,11 +199,11 @@ Task::ReportResult SimpleMSAWorkflow4GObjectTask::report() {
     CHECK_EXT(!obj.isNull(), releaseModStep(tr("Object '%1' removed").arg(docName)), ReportResult_Finished);
     CHECK_EXT(!obj->isStateLocked(), releaseModStep(tr("Object '%1' is locked").arg(docName)), ReportResult_Finished);
 
-    MAlignment res = getResult();
-    const MAlignment &originalAlignment = obj->getMAlignment();
-    MSAUtils::restoreRowNames(res, originalAlignment.getRowNames());
-    res.setName(originalAlignment.getName());
-    obj->setMAlignment(res);
+    MultipleSequenceAlignment res = getResult();
+    const MultipleSequenceAlignment originalAlignment = obj->getMultipleAlignment();
+    MSAUtils::restoreRowNames(res, originalAlignment->getRowNames());
+    res->setName(originalAlignment->getName());
+    obj->setMultipleAlignment(res);
 
     releaseModStep();
 
@@ -218,17 +218,17 @@ void SimpleMSAWorkflow4GObjectTask::releaseModStep(const QString error) {
     userModStep = NULL;
 }
 
-MAlignment SimpleMSAWorkflow4GObjectTask::getResult() {
-    MAlignment res;
+MultipleSequenceAlignment SimpleMSAWorkflow4GObjectTask::getResult() {
+    MultipleSequenceAlignment res;
     CHECK_OP(stateInfo, res);
 
     SAFE_POINT(runWorkflowTask!=NULL,"SimpleMSAWorkflow4GObjectTask::getResult. No task has been created.",res);
     Document* d = runWorkflowTask->getDocument();
     CHECK_EXT(d!=NULL, setError(tr("Result document not found!")), res);
     CHECK_EXT(d->getObjects().size() == 1, setError(tr("Result document content not matched! %1").arg(d->getURLString())), res);
-    MAlignmentObject* maObj = qobject_cast<MAlignmentObject*>(d->getObjects().first());
+    MultipleSequenceAlignmentObject* maObj = qobject_cast<MultipleSequenceAlignmentObject*>(d->getObjects().first());
     CHECK_EXT(maObj!=NULL, setError(tr("Result document contains no MSA! %1").arg(d->getURLString())), res);
-    return maObj->getMAlignment();
+    return maObj->getMsaCopy();
 }
 
 
diff --git a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
index 339a509..bc19c40 100644
--- a/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
+++ b/src/corelibs/U2Lang/src/support/SimpleWorkflowTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,13 @@
 #ifndef _SIMPLE_WORKFLOW_TASK_H_
 #define _SIMPLE_WORKFLOW_TASK_H_
 
-#include <U2Core/Task.h>
+#include <QTemporaryFile>
+
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentProviderTask.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/SaveDocumentTask.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/Task.h>
 
 #include <U2Lang/Schema.h>
 #include <U2Lang/WorkflowIOTasks.h>
@@ -40,7 +42,7 @@ using namespace Workflow;
 
 class CmdlineTaskRunner;
 class LoadDocumentTask;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class U2LANG_EXPORT SimpleInOutWorkflowTaskConfig {
 public:
@@ -99,17 +101,17 @@ class U2LANG_EXPORT SimpleMSAWorkflow4GObjectTask : public Task {
     Q_OBJECT
 
 public:
-    SimpleMSAWorkflow4GObjectTask(const QString& taskName, MAlignmentObject* maObj, const SimpleMSAWorkflowTaskConfig& conf);
+    SimpleMSAWorkflow4GObjectTask(const QString& taskName, MultipleSequenceAlignmentObject* maObj, const SimpleMSAWorkflowTaskConfig& conf);
     ~SimpleMSAWorkflow4GObjectTask();
 
     void prepare();
     ReportResult report();
-    MAlignment getResult();
+    MultipleSequenceAlignment getResult();
 
 private:
     void releaseModStep(const QString error = QString());
 
-    QPointer<MAlignmentObject>  obj;
+    QPointer<MultipleSequenceAlignmentObject>  obj;
     QPointer<StateLock>         lock;
     QString                     docName;
     SimpleMSAWorkflowTaskConfig conf;
diff --git a/src/corelibs/U2Lang/src/support/SupportClass.cpp b/src/corelibs/U2Lang/src/support/SupportClass.cpp
index 7c19a5e..39ecd8d 100644
--- a/src/corelibs/U2Lang/src/support/SupportClass.cpp
+++ b/src/corelibs/U2Lang/src/support/SupportClass.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/SupportClass.h b/src/corelibs/U2Lang/src/support/SupportClass.h
index bf1f89a..de920f8 100644
--- a/src/corelibs/U2Lang/src/support/SupportClass.h
+++ b/src/corelibs/U2Lang/src/support/SupportClass.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,10 @@
 #ifndef _U2_SUPPORT_CLASS_H_
 #define _U2_SUPPORT_CLASS_H_
 
-#include <U2Core/global.h>
+#include <QMetaType>
+#include <QString>
 
-#include <QtCore/QString>
+#include <U2Core/global.h>
 
 namespace U2 {
 
@@ -53,6 +54,6 @@ public:
 
 }   // namespace U2
 
-Q_DECLARE_METATYPE( U2::Problem )
+Q_DECLARE_METATYPE(U2::Problem)
 
 #endif // _U2_SUPPORT_CLASS_H_
diff --git a/src/corelibs/U2Lang/src/support/SupportStructures.cpp b/src/corelibs/U2Lang/src/support/SupportStructures.cpp
index eaf84c2..cf16ab3 100644
--- a/src/corelibs/U2Lang/src/support/SupportStructures.cpp
+++ b/src/corelibs/U2Lang/src/support/SupportStructures.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/SupportStructures.h b/src/corelibs/U2Lang/src/support/SupportStructures.h
index 6a73a48..b71f096 100644
--- a/src/corelibs/U2Lang/src/support/SupportStructures.h
+++ b/src/corelibs/U2Lang/src/support/SupportStructures.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_SUPPORTSTRUCTURES_H_
 #define _U2_SUPPORTSTRUCTURES_H_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.cpp b/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.cpp
index 40c83ef..ef4ccaf 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.h b/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.h
index 859e0c1..f7151c9 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowBreakpoint.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.cpp b/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.cpp
index cd30fa6..190b276 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.h b/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.h
index 63249e0..7b70ca0 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowBreakpointSharedInfo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,8 @@
 #ifndef _U2_WORKFLOW_BREAKPOINT_HIT_COUNTER_SHARED_INFO_H_
 #define _U2_WORKFLOW_BREAKPOINT_HIT_COUNTER_SHARED_INFO_H_
 
-#include <QtCore/QtGlobal>
-#include <QtCore/QMap>
-#include <QtCore/QString>
+#include <QMap>
+#include <QString>
 
 #include <U2Core/global.h>
 #include <U2Lang/Attribute.h>
diff --git a/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.cpp b/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.cpp
index 3f49499..04a8753 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Lang/Descriptor.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/BaseSlots.h>
+#include <U2Lang/Descriptor.h>
 #include <U2Lang/WorkflowContext.h>
 #include <U2Lang/WorkflowTransport.h>
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.h b/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.h
index f7a0bc4..53929b0 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowDebugMessageParser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.cpp b/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.cpp
index 049fb34..196fa63 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
+
+#include <U2Core/U2SafePoints.h>
 
 #include "WorkflowBreakpointSharedInfo.h"
 #include "WorkflowDebugMessageParser.h"
diff --git a/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.h b/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.h
index 1cc64bd..7a042ab 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowDebugStatus.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_WORKFLOW_DEBUG_STATUS_H_
 #define _U2_WORKFLOW_DEBUG_STATUS_H_
 
-#include <QtCore/QObject>
+#include <QObject>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/WorkflowContext.h>
diff --git a/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.cpp b/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.cpp
index ce6b96d..d8f7a1d 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ namespace U2 {
 namespace Workflow {
 
 DataTypeRegistry * WorkflowEnvImpl::initDataRegistry() {
-    qRegisterMetaTypeStreamOperators<QStrStrMap>("QStrStrMap");
+    qRegisterMetaTypeStreamOperators<StrStrMap>("StrStrMap");
     qRegisterMetaTypeStreamOperators<CfgMap>("CfgMap");
     qRegisterMetaTypeStreamOperators<IterationCfg>("IterationCfg");
     qRegisterMetaType<U2::Workflow::Monitor::FileInfo>( "U2::Workflow::Monitor::FileInfo" );
diff --git a/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.h b/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.h
index 7ceda04..38aa7a7 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowEnvImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/WorkflowIOTasks.cpp b/src/corelibs/U2Lang/src/support/WorkflowIOTasks.cpp
index b5c65da..c5b9ef3 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowIOTasks.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowIOTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtXml/QDomDocument>
+#include <QFile>
+#include <QTextStream>
+#include <QDomDocument>
 
 #include <U2Core/Log.h>
 #include <U2Core/L10n.h>
diff --git a/src/corelibs/U2Lang/src/support/WorkflowIOTasks.h b/src/corelibs/U2Lang/src/support/WorkflowIOTasks.h
index b5b4269..355ec16 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowIOTasks.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowIOTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/Schema.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 class QDomDocument;
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowInvestigationData.h b/src/corelibs/U2Lang/src/support/WorkflowInvestigationData.h
index 1f36a51..6b58c91 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowInvestigationData.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowInvestigationData.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_WORKFLOW_INVESTIGATION_DATA_H_
 #define _U2_WORKFLOW_INVESTIGATION_DATA_H_
 
-#include <QtCore/QMap>
-#include <QtCore/QQueue>
-#include <QtCore/QString>
+#include <QMap>
+#include <QQueue>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
index 02b1040..42339a0 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowRunTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,15 +20,18 @@
  */
 
 #include <QCoreApplication>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
 #include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/HRSchemaSerializer.h>
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowDebugMessageParser.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "WorkflowDebugStatus.h"
 #include "WorkflowRunTask.h"
 
 namespace U2 {
@@ -57,7 +60,9 @@ WorkflowRunTask::WorkflowRunTask(const Schema& sh, const QMap<ActorId, ActorId>&
     TaskFlags(TaskFlag_NoRun) | TaskFlag_ReportingIsSupported | TaskFlag_OnlyNotificationReport), rmap(remap), flows(sh.getFlows())
 {
     GCOUNTER( cvar, tvar, "WorkflowRunTask" );
-    Q_ASSERT(NULL != debugInfo);
+    if (NULL == debugInfo) {
+        debugInfo = new WorkflowDebugStatus;
+    }
     if (NULL == debugInfo->parent()) {
         debugInfo->setParent(this);
     }
@@ -111,6 +116,26 @@ int WorkflowRunTask::getMsgPassed(const Link* l) {
     return ret;
 }
 
+QString WorkflowRunTask::generateReport() const {
+    QString report;
+    foreach (WorkflowMonitor *monitor, getMonitors()) {
+        const QMap<QString, QMultiMap<QString, QString> > workersReports = monitor->getWorkersReports();
+        foreach (const QString &worker, workersReports.keys()) {
+            const QMultiMap<QString, QString> tasksReports = workersReports[worker];
+            QString workerReport;
+            foreach (const QString &taskName, tasksReports.uniqueKeys()) {
+                foreach (const QString &taskReport, tasksReports.values(taskName)) {
+                    if (!taskReport.isEmpty()) {
+                        workerReport += QString("<div class=\"task\" id=\"%1\">%2</div>").arg(taskName).arg(QString(taskReport.toUtf8().toBase64()));
+                    }
+                }
+            }
+            report += QString("<div class=\"worker\" id=\"%1\">%2</div>").arg(worker).arg(workerReport);
+        }
+    }
+    return report;
+}
+
 QString WorkflowRunTask::getTaskError() const {
     if (hasError()) {
         return getError();
@@ -181,7 +206,6 @@ TaskFlags WorkflowIterationRunTask::getAdditionalFlags() {
 }
 
 WorkflowIterationRunTask::~WorkflowIterationRunTask() {
-    emit si_updateProducers();
     lmap.clear();
     DomainFactory* df = WorkflowEnv::getDomainRegistry()->getById(schema->getDomain());
     if (df) {
@@ -309,6 +333,8 @@ Task::ReportResult WorkflowIterationRunTask::report() {
             }
         }
     }
+
+    emit si_updateProducers();
     return ReportResult_Finished;
 }
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowRunTask.h b/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
index 20ce173..59ff483 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowRunTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,6 @@
 
 #include <U2Core/CmdlineTaskRunner.h>
 #include <U2Lang/WorkflowManager.h>
-#include <U2Lang/WorkflowDebugStatus.h>
 
 namespace U2 {
 
@@ -71,12 +70,13 @@ class U2LANG_EXPORT WorkflowRunTask : public WorkflowAbstractRunner {
     Q_OBJECT
 public:
     WorkflowRunTask(const Schema&, const ActorMap& rmap = ActorMap(),
-        WorkflowDebugStatus *debugInfo = new WorkflowDebugStatus());
+        WorkflowDebugStatus *debugInfo = NULL);
     virtual QList<WorkerState> getState(Actor*);
     virtual int getMsgNum(const Link*);
     virtual int getMsgPassed(const Link*);
 
 private:
+    QString generateReport() const;
     // CmdlineTask
     QString getTaskError() const;
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp b/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
index 8053558..8287c38 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,18 +27,12 @@
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QSettings>
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QStyle>
-#include <QtGui/QStyleFactory>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QStyleFactory>
-#endif
-#include <QtGui/QColor>
+#include <QSettings>
+#include <QDir>
+#include <QApplication>
+#include <QStyle>
+#include <QStyleFactory>
+#include <QColor>
 #include <U2Core/GUrl.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/WorkflowSettings.h b/src/corelibs/U2Lang/src/support/WorkflowSettings.h
index 47fc791..a3eb6ed 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowSettings.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_WORKFLOW_SETTINGS_H_
 #define _U2_WORKFLOW_SETTINGS_H_
 
-#include <QtCore/QString>
-#include <QtCore/QObject>
-#include <QtGui/QFont>
+#include <QString>
+#include <QObject>
+#include <QFont>
 
 #include <U2Core/global.h>
 
diff --git a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
index 0b3b347..d322953 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
+++ b/src/corelibs/U2Lang/src/support/WorkflowUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
-#include <QtCore/QDir>
-#include <QtCore/QUrl>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QListWidgetItem>
-#else
-#include <QtWidgets/QListWidgetItem>
-#endif
+#include <QScopedPointer>
+#include <QDir>
+#include <QUrl>
+#include <QListWidgetItem>
 
 #include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
@@ -56,9 +52,9 @@
 #include <U2Core/GObject.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PasswordStorage.h>
 #include <U2Core/QVariantUtils.h>
 #include <U2Core/Settings.h>
@@ -180,7 +176,7 @@ bool validateParameters(const Schema &schema, ProblemList &infoList) {
 
 bool validateExternalTools(Actor *a, ProblemList &infoList) {
     bool good = true;
-    QStrStrMap tools = a->getProto()->getExternalTools();
+    StrStrMap tools = a->getProto()->getExternalTools();
     foreach (const QString &toolId, tools.keys()) {
         Attribute *attr = a->getParameter(tools[toolId]);
         ExternalTool *tool = AppContext::getExternalToolRegistry()->getByName(toolId);
@@ -399,7 +395,7 @@ QList<Descriptor> WorkflowUtils::findMatchingCandidates(DataTypePtr from, DataTy
 }
 
 Descriptor WorkflowUtils::getCurrentMatchingDescriptor(const QList<Descriptor> & candidates, DataTypePtr to,
-                                                       const Descriptor & key, const QStrStrMap & bindings) {
+                                                       const Descriptor & key, const StrStrMap & bindings) {
     DataTypePtr elementDatatype = to->getDatatypeByDescriptor(key);
     if (elementDatatype->isList()) {
         QString currentVal = bindings.value(key.getId());
@@ -622,7 +618,7 @@ void WorkflowUtils::print(const QString &slotString, const QVariant &data, DataT
         CHECK(NULL != obj.data(),);
         data2text(context, BaseDocumentFormats::FASTA, obj.data(), text);
     } else if (BaseTypes::MULTIPLE_ALIGNMENT_TYPE() == type) {
-        QScopedPointer<MAlignmentObject> obj(StorageUtils::getMsaObject(storage, data.value<SharedDbiDataHandler>()));
+        QScopedPointer<MultipleSequenceAlignmentObject> obj(StorageUtils::getMsaObject(storage, data.value<SharedDbiDataHandler>()));
         CHECK(NULL != obj.data(),);
         data2text(context, BaseDocumentFormats::CLUSTAL_ALN, obj.data(), text);
     } else if (BaseTypes::ANNOTATION_TABLE_TYPE() == type || BaseTypes::ANNOTATION_TABLE_LIST_TYPE() == type) {
@@ -706,7 +702,7 @@ bool WorkflowUtils::validateSchemaForIncluding(const Schema &s, QString &error)
     return true;
 }
 
-void WorkflowUtils::extractPathsFromBindings(QStrStrMap &busMap, SlotPathMap &pathMap) {
+void WorkflowUtils::extractPathsFromBindings(StrStrMap &busMap, SlotPathMap &pathMap) {
     QString srcId;
     QStringList path;
     foreach (const QString &dest, busMap.keys()) {
@@ -722,7 +718,7 @@ void WorkflowUtils::extractPathsFromBindings(QStrStrMap &busMap, SlotPathMap &pa
     }
 }
 
-void WorkflowUtils::applyPathsToBusMap(QStrStrMap &busMap, const SlotPathMap &pathMap) {
+void WorkflowUtils::applyPathsToBusMap(StrStrMap &busMap, const SlotPathMap &pathMap) {
     foreach (const QString &dest, busMap.keys()) {
         QStringList newSrcs;
 
@@ -1151,7 +1147,7 @@ bool WorkflowUtils::validateInputDbFolders(QString urls, ProblemList &problemLis
 }
 
 /**
- * Input @dirAbsPath must be an absolute path to a directory (or empty).
+ * Input @dirAbsPath must be an absolute path to a folder (or empty).
  * The method returns "true" if it is possible to create a file in it.
  */
 static bool canWriteToPath(QString dirAbsPath) {
@@ -1161,10 +1157,10 @@ static bool canWriteToPath(QString dirAbsPath) {
     QFileInfo fi(dirAbsPath);
     SAFE_POINT(fi.dir().isAbsolute(), "Not an absolute path!", false);
 
-    // Find out the directory that exists
+    // Find out the folder that exists
     QDir existenDir(dirAbsPath);
     while (!existenDir.exists()) {
-        // Get upper directory
+        // Get upper folder
         QString dirPath = existenDir.path();
         QString dirName = existenDir.dirName();
         dirPath.remove(// remove dir name and slash (if any) from the path
@@ -1176,8 +1172,8 @@ static bool canWriteToPath(QString dirAbsPath) {
         existenDir.setPath(dirPath);
     }
 
-    // Attempts to write a file to the directory.
-    // This assumes possibility to create any sub-directory, file, etc.
+    // Attempts to write a file to the folder.
+    // This assumes possibility to create any sub-folder, file, etc.
     QFile file(existenDir.filePath("testWriteAccess.txt"));
     if (!file.open(QIODevice::WriteOnly)) {
         return false;
@@ -1221,7 +1217,7 @@ bool WorkflowUtils::validateOutputDir(const QString &url, ProblemList &problemLi
         return true;
     }
     else {
-        problemList << Problem(tr("Can't output directory path: '%1', check permissions").arg(url));
+        problemList << Problem(tr("Can't output folder path: '%1', check permissions").arg(url));
         return false;
     }
 }
diff --git a/src/corelibs/U2Lang/src/support/WorkflowUtils.h b/src/corelibs/U2Lang/src/support/WorkflowUtils.h
index 2af9d41..2c277bd 100644
--- a/src/corelibs/U2Lang/src/support/WorkflowUtils.h
+++ b/src/corelibs/U2Lang/src/support/WorkflowUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,12 @@
 #ifndef _U2_WORKFLOW_UTILS_H_
 #define _U2_WORKFLOW_UTILS_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QVariant>
+#include <QObject>
+#include <QProcess>
+#include <QVariant>
+
 #include <U2Lang/Dataset.h>
 #include <U2Lang/Descriptor.h>
-#include <U2Lang/ActorModel.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/Schema.h>
 #include <U2Lang/SupportClass.h>
@@ -36,6 +37,7 @@
 class QListWidgetItem;
 
 namespace U2 {
+
 class Descriptor;
 class DocumentFormat;
 class Folder;
@@ -68,7 +70,7 @@ public:
     static QList<Descriptor> findMatchingCandidates(DataTypePtr from, DataTypePtr to, const Descriptor & key);
     static QList<Descriptor> findMatchingCandidates(DataTypePtr from, DataTypePtr elementDatatype);
     static Descriptor getCurrentMatchingDescriptor(const QList<Descriptor> & candidates, DataTypePtr to, const Descriptor & key,
-        const QStrStrMap & bindings);
+        const StrStrMap & bindings);
     static DataTypePtr getToDatatypeForBusport(IntegralBusPort * p);
     static DataTypePtr getFromDatatypeForBusport(IntegralBusPort * p, DataTypePtr to);
 
@@ -91,9 +93,9 @@ public:
 
     static bool validateSchemaForIncluding(const Schema &s, QString &error);
 
-    static void extractPathsFromBindings(QStrStrMap &busMap, SlotPathMap &pathMap);
+    static void extractPathsFromBindings(StrStrMap &busMap, SlotPathMap &pathMap);
 
-    static void applyPathsToBusMap(QStrStrMap &busMap, const SlotPathMap &pathMap);
+    static void applyPathsToBusMap(StrStrMap &busMap, const SlotPathMap &pathMap);
 
     static bool startExternalProcess(QProcess *process, const QString &program, const QStringList &arguments);
 
@@ -127,11 +129,11 @@ public:
     static bool checkSharedDbConnection(const QString &fullDbUrl);
 
     /**
-     * Validation of input files/directories.
+     * Validation of input files/folders.
      * Empty input string is considered valid.
      * Otherwise, the input string is split into separate URL(s) by ';'.
      * For each input file: the URL must exist, be a file and have permissions to read from it.
-     * For each input directory: the URL must exist and be a directory.
+     * For each input folder: the URL must exist and be a folder.
      * For each object from a database: DB URL must be available, object must exist
      * For each folder from a database: DB URL must be available, folder must exist
      */
@@ -142,10 +144,10 @@ public:
     static bool validateInputDbFolders(QString urls, ProblemList &problemList);
 
     /**
-     * Validation of output file/directory.
+     * Validation of output file/folder.
      * Empty URL is considered valid.
      * For output URL it is verified that it is accessible for
-     * writing (the path can be absolute or relative to the Workflow Output Directory).
+     * writing (the path can be absolute or relative to the Workflow Output Folder).
      */
     static bool validateOutputFile(const QString &url, ProblemList &problemList);
     static bool validateOutputDir(const QString &url, ProblemList &problemList);
@@ -155,7 +157,7 @@ public:
 
     /**
      * Validates input files in datasets are present and readable (i.e.
-     * filtered files in input directories are verified).
+     * filtered files in input folders are verified).
      */
     static bool validateDatasets(const QList<Dataset> &sets, ProblemList &problemList);
 
@@ -240,4 +242,3 @@ protected:
 }//namespace
 
 #endif
-
diff --git a/src/corelibs/U2Lang/src/support/external_script/ScriptContext.cpp b/src/corelibs/U2Lang/src/support/external_script/ScriptContext.cpp
index da3104f..4e999f4 100644
--- a/src/corelibs/U2Lang/src/support/external_script/ScriptContext.cpp
+++ b/src/corelibs/U2Lang/src/support/external_script/ScriptContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/external_script/ScriptContext.h b/src/corelibs/U2Lang/src/support/external_script/ScriptContext.h
index 34257f0..da6e7ed 100644
--- a/src/corelibs/U2Lang/src/support/external_script/ScriptContext.h
+++ b/src/corelibs/U2Lang/src/support/external_script/ScriptContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.cpp b/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.cpp
index 6024f6e..76efd68 100644
--- a/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.cpp
+++ b/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.h b/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.h
index 9399c48..d80ab98 100644
--- a/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.h
+++ b/src/corelibs/U2Lang/src/support/external_script/ScriptableScheduler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.cpp b/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.cpp
index 43f2aed..39e9ab8 100644
--- a/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.cpp
+++ b/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.h b/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.h
index a85b358..25c3ccc 100644
--- a/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.h
+++ b/src/corelibs/U2Lang/src/support/external_script/WorkflowRunSerializedSchemeTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/Constants.cpp b/src/corelibs/U2Lang/src/support/serialize/Constants.cpp
index 37854a9..2d67912 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Constants.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/Constants.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QObject>
+
 #include "Constants.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2Lang/src/support/serialize/Constants.h b/src/corelibs/U2Lang/src/support/serialize/Constants.h
index 07bf802..8f6641b 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Constants.h
+++ b/src/corelibs/U2Lang/src/support/serialize/Constants.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
index 033d4b5..5da1e7e 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
@@ -327,10 +328,10 @@ void HRSchemaSerializer::deprecatedUrlAttribute(Actor *proc, const QString &urls
     }
 }
 
-QList<Dataset> HRSchemaSerializer::parseUrlAttribute(const QString attrId, QList<StringPair> &blockPairs) {
+QList<Dataset> HRSchemaSerializer::parseUrlAttribute(const QString attrId, QList<StrStrPair> &blockPairs) {
     QList<Dataset> sets;
     QStringList setBlocks;
-    foreach (const StringPair &pair, blockPairs) {
+    foreach (const StrStrPair &pair, blockPairs) {
         if (attrId == pair.first) {
             setBlocks << pair.second;
             blockPairs.removeOne(pair);
@@ -482,7 +483,7 @@ URLContainer * HRSchemaSerializer::parseDirectoryUrl(Tokenizer &tokenizer) {
 
         return new DirUrlContainer(path, incFilter, excFilter, recursive);
     } else {
-        throw ReadFailed(tr("Directory url definition: '%1' or '%2' are expected, '%3' is found")
+        throw ReadFailed(tr("folder url definition: '%1' or '%2' are expected, '%3' is found")
             .arg(Constants::BLOCK_START).arg(Constants::EQUALS_SIGN).arg(sign));
     }
 }
@@ -547,14 +548,27 @@ Actor* HRSchemaSerializer::parseElementsDefinition(Tokenizer & tokenizer, const
         }
     }
 
+    bool workflowContainsInvalidFormatIds = false;
     foreach( const QString & key, pairs.equalPairs.keys() ) {
         Attribute *attr = proc->getParameter(key);
+        QString value = pairs.equalPairs.value(key);
+
+        if (key == BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId()) {
+            if (BaseDocumentFormats::isInvalidId(value)) {
+                workflowContainsInvalidFormatIds = true;
+                value = BaseDocumentFormats::toValidId(value);
+            }
+        }
+
         if (NULL != attr) {
-           attr->setAttributeValue(getAttrValue(proc, key, pairs.equalPairs.value(key)));
+           attr->setAttributeValue(getAttrValue(proc, key, value));
         } else {
             coreLog.details(tr("Unexpected actor attribute: %1").arg(key));
         }
     }
+    if (workflowContainsInvalidFormatIds) {
+        GCOUNTER(cvar, tvar, "Invalid format IDs: an element was saved with 1.26.0");
+    }
 
     foreach (const QString &valDef, pairs.blockPairs.values(Constants::VALIDATOR)) {
         U2OpStatus2Log os;
@@ -1220,7 +1234,7 @@ void HRSchemaSerializer::addEmptyValsToBindings(const QList<Actor*> & procs) {
     foreach(Actor * actor, procs) {
         foreach(Port * p, actor->getInputPorts()) {
             IntegralBusPort * port = qobject_cast<IntegralBusPort*>(p);
-            QStrStrMap busMap = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+            StrStrMap busMap = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
             DataTypePtr t = port->Port::getType();
             assert(t->isMap());
             QMap<Descriptor, DataTypePtr> typeMap = t->getDatatypesMap();
@@ -1731,7 +1745,7 @@ QString HRSchemaSerializer::dataflowDefinition(const QList<Actor*> & procs, cons
     QString res;
     foreach(Actor * actor, procs) {
         foreach(Port * inputPort, actor->getEnabledInputPorts()) {
-            QStrStrMap busMap = inputPort->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+            StrStrMap busMap = inputPort->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
             IntegralBusPort *busPort = qobject_cast<IntegralBusPort*>(inputPort);
 
             foreach( const QString & key, busMap.keys() ) {
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
index b7343b8..1540825 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
+++ b/src/corelibs/U2Lang/src/support/serialize/HRSchemaSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_WORKFLOW_HR_SCHEMA_SERIALIZER_H_
 #define _U2_WORKFLOW_HR_SCHEMA_SERIALIZER_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QString>
-#include <QtCore/QStringList>
-#include <QtCore/QByteArray>
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QByteArray>
 #include <U2Core/global.h>
 #include <U2Lang/Aliasing.h>
 #include <U2Lang/Dataset.h>
@@ -119,7 +119,7 @@ public:
 
 private:
     static GrouperSlotAction parseAction(Tokenizer &tokenizer);
-    static QList<Dataset> parseUrlAttribute(const QString attrId, QList<StringPair> &blockPairs);
+    static QList<Dataset> parseUrlAttribute(const QString attrId, QList<StrStrPair> &blockPairs);
     static void deprecatedUrlAttribute(Actor *proc, const QString &urls);
     static URLContainer * parseDirectoryUrl(Tokenizer &tokenizer);
     static URLContainer * parseDbSelectUrl(Tokenizer &tokenizer);
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.cpp b/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.cpp
index ceedf47..aa6b1de 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.h b/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.h
index b203299..438b8c6 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.h
+++ b/src/corelibs/U2Lang/src/support/serialize/HRVisualSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.cpp b/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.cpp
index fd14d44..02d8c3f 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -269,7 +269,7 @@ void WizardWidgetParser::visit(WidgetsArea *wa) {
     getTitle(wa);
     getLabelSize(wa);
 
-    foreach (const StringPair &pair, pairs.blockPairsList) {
+    foreach (const StrStrPair &pair, pairs.blockPairsList) {
         WizardWidgetParser wParser(pair.first, pair.second, actorMap, vars, os);
         QScopedPointer<WizardWidget> w(createWidget(pair.first));
         CHECK_OP(os, );
@@ -314,7 +314,7 @@ void WizardWidgetParser::visit(ElementSelectorWidget *esw) {
         esw->setLabel(pairs.equalPairs[AttributeInfo::LABEL]);
     }
     ActorPrototype *srcProto = actorMap[actorId]->getProto();
-    foreach (const StringPair &pair, pairs.blockPairsList) {
+    foreach (const StrStrPair &pair, pairs.blockPairsList) {
         if (pair.first != HRWizardParser::VALUE) {
             os.setError(HRWizardParser::tr("Unknown block name in element selector definition: %1").arg(pair.first));
             return;
@@ -329,7 +329,7 @@ void WizardWidgetParser::visit(ElementSelectorWidget *esw) {
 
 void WizardWidgetParser::visit(PairedReadsWidget *dsw) {
     pairs = ParsedPairs(data, 0);
-    foreach (const StringPair &p, pairs.blockPairsList) {
+    foreach (const StrStrPair &p, pairs.blockPairsList) {
         dsw->addInfo(parseInfo(p.first, p.second));
         CHECK_OP(os, );
     }
@@ -337,7 +337,7 @@ void WizardWidgetParser::visit(PairedReadsWidget *dsw) {
 
 void WizardWidgetParser::visit(UrlAndDatasetWidget *ldsw) {
     pairs = ParsedPairs(data, 0);
-    foreach (const StringPair &p, pairs.blockPairsList) {
+    foreach (const StrStrPair &p, pairs.blockPairsList) {
         ldsw->addInfo(parseInfo(p.first, p.second));
         CHECK_OP(os, );
     }
@@ -379,7 +379,7 @@ void WizardWidgetParser::visit(RadioWidget *rw) {
 
     rw->setVar(pairs.equalPairs[HRWizardParser::ID]);
     Variable v(rw->var());
-    foreach (const StringPair &p, pairs.blockPairsList) {
+    foreach (const StrStrPair &p, pairs.blockPairsList) {
         if (p.first == HRWizardParser::VALUE) {
             RadioWidget::Value value = parseValue(p.second, os);
             CHECK_OP(os, );
@@ -472,7 +472,7 @@ SelectorValue WizardWidgetParser::parseSelectorValue(ActorPrototype *srcProto, c
         }
         return result;
     }
-    foreach (const StringPair &pair, pairs.blockPairsList) {
+    foreach (const StrStrPair &pair, pairs.blockPairsList) {
         if (pair.first != HRWizardParser::PORT_MAPPING) {
             os.setError(HRWizardParser::tr("Unknown block name in selector value definition: %1").arg(pair.first));
             return result;
@@ -497,7 +497,7 @@ PortMapping WizardWidgetParser::parsePortMapping(const QString &mappingDef) {
     QString srcPortId = pairs.equalPairs[HRWizardParser::SRC_PORT];
     QString dstPortId = pairs.equalPairs[HRWizardParser::DST_PORT];
     PortMapping result(srcPortId, dstPortId);
-    foreach (const StringPair &pair, pairs.blockPairsList) {
+    foreach (const StrStrPair &pair, pairs.blockPairsList) {
         if (pair.first != HRWizardParser::SLOTS_MAPPRING) {
             os.setError(HRWizardParser::tr("Unknown block name in port mapping definition: %1").arg(pair.first));
             return result;
@@ -510,7 +510,7 @@ PortMapping WizardWidgetParser::parsePortMapping(const QString &mappingDef) {
 
 void WizardWidgetParser::parseSlotsMapping(PortMapping &pm, const QString &mappingDef) {
     ParsedPairs pairs(mappingDef, 0);
-    foreach (const StringPair &pair, pairs.equalPairsList) {
+    foreach (const StrStrPair &pair, pairs.equalPairsList) {
         QString srcSlotId = pair.first;
         QString dstSlotId = pair.second;
         pm.addSlotMapping(SlotMapping(srcSlotId, dstSlotId));
@@ -599,7 +599,7 @@ PageContentParser::PageContentParser(ParsedPairs &pairs,
 }
 
 void PageContentParser::visit(DefaultPageContent *content) {
-    foreach (const StringPair &pair, pairs.blockPairsList) {
+    foreach (const StrStrPair &pair, pairs.blockPairsList) {
         WizardWidgetParser wParser(pair.first, pair.second, actorMap, vars, os);
         if (LogoWidget::ID == pair.first) {
             content->getLogoArea()->accept(&wParser);
diff --git a/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.h b/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.h
index 7b58467..e8aefcb 100644
--- a/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.h
+++ b/src/corelibs/U2Lang/src/support/serialize/HRWizardSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/OldUWL.cpp b/src/corelibs/U2Lang/src/support/serialize/OldUWL.cpp
index 5894904..87d2dcd 100644
--- a/src/corelibs/U2Lang/src/support/serialize/OldUWL.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/OldUWL.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,15 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/BaseTypes.h>
 #include <U2Lang/MarkerAttribute.h>
 
 #include "Constants.h"
 #include "HRSchemaSerializer.h"
-#include "Utils.h"
-
 #include "OldUWL.h"
+#include "Utils.h"
 
 namespace U2 {
 namespace WorkflowSerialize {
diff --git a/src/corelibs/U2Lang/src/support/serialize/OldUWL.h b/src/corelibs/U2Lang/src/support/serialize/OldUWL.h
index a87c53a..936f2b7 100644
--- a/src/corelibs/U2Lang/src/support/serialize/OldUWL.h
+++ b/src/corelibs/U2Lang/src/support/serialize/OldUWL.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/Tokenizer.cpp b/src/corelibs/U2Lang/src/support/serialize/Tokenizer.cpp
index 5b5456d..450bbf6 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Tokenizer.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/Tokenizer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -321,7 +321,7 @@ void ParsedPairs::init(Tokenizer & tokenizer, bool bigBlocks) {
         if( next == Constants::EQUALS_SIGN ) {
             QString value = tokenizer.take();
             equalPairs[tok] = value;
-            equalPairsList << StringPair(tok, value);
+            equalPairsList << StrStrPair(tok, value);
         }
         else if(next == Constants::BLOCK_START) {
             QString value;
@@ -332,7 +332,7 @@ void ParsedPairs::init(Tokenizer & tokenizer, bool bigBlocks) {
                 tokenizer.assertToken(Constants::BLOCK_END);
             }
             blockPairs.insertMulti(tok, value);
-            blockPairsList << StringPair(tok, value);
+            blockPairsList << StrStrPair(tok, value);
         }
         else {
             throw ReadFailed(QObject::tr("Expected %3 or %1 after %2").arg(Constants::BLOCK_START).arg(tok).arg(Constants::EQUALS_SIGN));
diff --git a/src/corelibs/U2Lang/src/support/serialize/Tokenizer.h b/src/corelibs/U2Lang/src/support/serialize/Tokenizer.h
index bec1de9..466feca 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Tokenizer.h
+++ b/src/corelibs/U2Lang/src/support/serialize/Tokenizer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_TOKENIZER_H_
 #define _U2_TOKENIZER_H_
 
-#include <U2Core/global.h>
+#include <QTextStream>
 
-#include <QtCore/QTextStream>
-#include <QtCore/QStringList>
+#include <U2Core/global.h>
+#include <U2Core/StrPackUtils.h>
 
 namespace U2 {
 namespace WorkflowSerialize {
@@ -61,8 +61,8 @@ public:
     QMap<QString, QString> equalPairs;
     QMap<QString, QString> blockPairs;
 
-    QList<StringPair> equalPairsList;
-    QList<StringPair> blockPairsList;
+    QList<StrStrPair> equalPairsList;
+    QList<StrStrPair> blockPairsList;
 
     static QPair<QString, QString> parseOneEqual(Tokenizer &tokenizer);
     static QString skipBlock(Tokenizer &tokenizer);
diff --git a/src/corelibs/U2Lang/src/support/serialize/Utils.cpp b/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
index fd97c26..c068bdf 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
+++ b/src/corelibs/U2Lang/src/support/serialize/Utils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/support/serialize/Utils.h b/src/corelibs/U2Lang/src/support/serialize/Utils.h
index e2407da..45bab14 100644
--- a/src/corelibs/U2Lang/src/support/serialize/Utils.h
+++ b/src/corelibs/U2Lang/src/support/serialize/Utils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.cpp b/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.cpp
index d5da004..446d327 100644
--- a/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.cpp
+++ b/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.h b/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.h
index d94995e..b33a5d3 100644
--- a/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.h
+++ b/src/corelibs/U2Lang/src/tasks/ReadDocumentTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.cpp b/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.cpp
index 151ec88..88bba46 100644
--- a/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.cpp
+++ b/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.h b/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.h
index 6c454e0..1bcbdd3 100644
--- a/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.h
+++ b/src/corelibs/U2Lang/src/tasks/SchemaEstimationTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.cpp b/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.cpp
index 80aa608..1387b33 100644
--- a/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.cpp
+++ b/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.h b/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.h
index 737b1cb..ec49b2e 100644
--- a/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.h
+++ b/src/corelibs/U2Lang/src/tasks/WorkflowTasksRegistry.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Lang/transl/english.ts b/src/corelibs/U2Lang/transl/english.ts
index 696da8f..8e3bac9 100644
--- a/src/corelibs/U2Lang/transl/english.ts
+++ b/src/corelibs/U2Lang/transl/english.ts
@@ -55,20 +55,20 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="499"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="551"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="587"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="615"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="652"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="678"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="694"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="710"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="726"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="782"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="812"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="851"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="877"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="904"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="931"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="958"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="985"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="614"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="648"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="674"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="690"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="706"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="722"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="778"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="808"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="847"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="873"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="900"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="927"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="954"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="981"/>
         <source>Incorrect number of arguments</source>
         <translation>Incorrect number of arguments</translation>
     </message>
@@ -86,9 +86,9 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="486"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="568"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="593"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="602"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="621"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="731"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="601"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="620"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="727"/>
         <source>Empty or invalid sequence</source>
         <translation>Empty or invalid sequence</translation>
     </message>
@@ -113,8 +113,8 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="321"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="438"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="511"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="664"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="862"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="660"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="858"/>
         <source>Second argument must be a number</source>
         <translation>Second argument must be a number</translation>
     </message>
@@ -141,16 +141,16 @@
     <message>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="504"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="558"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="657"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="683"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="699"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="715"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="653"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="679"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="695"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="711"/>
         <source>Invalid alignment</source>
         <translation>Invalid alignment</translation>
     </message>
     <message>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="514"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="668"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="664"/>
         <source>Row is out of range</source>
         <translation>Row is out of range</translation>
     </message>
@@ -170,52 +170,52 @@
         <translation>Length is out of range</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="605"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="604"/>
         <source>Alphabets of each sequence must be the same</source>
         <translation>Alphabets of each sequence must be the same</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="631"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="628"/>
         <source>Alphabets don't match</source>
         <translation>Alphabets don't match</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="886"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="882"/>
         <source>Empty annotation name</source>
         <translation>Empty annotation name</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="909"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="936"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="963"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="905"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="932"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="959"/>
         <source>Invalid file path</source>
         <translation>Invalid file path</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="914"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="941"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="910"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="937"/>
         <source>No data to write</source>
         <translation>No data to write</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="919"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="946"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="968"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="915"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="942"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="964"/>
         <source>Cannot open the file by given path</source>
         <translation>Cannot open the file by given path</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="990"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="986"/>
         <source>Empty file path</source>
         <translation>Empty file path</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="995"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="991"/>
         <source>Can't detect the sequence file format: </source>
         <translation>Can't detect the sequence file format: </translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="1011"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="1007"/>
         <source>There are no sequences in the file: </source>
         <translation>There are no sequences in the file: </translation>
     </message>
@@ -223,43 +223,43 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="191"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="444"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="525"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="637"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="634"/>
         <source>Third argument must be a number</source>
         <translation>Third argument must be a number</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="736"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="787"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="817"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="856"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="882"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="732"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="783"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="813"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="852"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="878"/>
         <source>Invalid annotations</source>
         <translation>Invalid annotations</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="740"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="736"/>
         <source>Empty name</source>
         <translation>Empty name</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="791"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="821"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="787"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="817"/>
         <source>Empty qualifier name</source>
         <translation>Empty qualifier name</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="795"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="825"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="791"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="821"/>
         <source>Empty qualifier value</source>
         <translation>Empty qualifier value</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="831"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="827"/>
         <source>forth argument must be a string</source>
         <translation>forth argument must be a string</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="866"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="862"/>
         <source>Index is out of range</source>
         <translation>Index is out of range</translation>
     </message>
@@ -269,17 +269,17 @@
         <translation>Exception during script execution! Line: %1, error: %2</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="155"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="157"/>
         <source>By value</source>
         <translation>By value</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="159"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="161"/>
         <source>By name</source>
         <translation>By name</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="163"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="165"/>
         <source>By id</source>
         <translation>By id</translation>
     </message>
@@ -395,14 +395,14 @@
         <translation>NULL parameters area</translation>
     </message>
     <message>
-        <location filename="../src/model/WorkflowContext.cpp" line="206"/>
-        <source>Can not create directory: </source>
-        <translation>Can not create directory: </translation>
+        <location filename="../src/model/WorkflowContext.cpp" line="205"/>
+        <source>Can not create folder: </source>
+        <translation>Can not create folder: </translation>
     </message>
     <message>
-        <location filename="../src/model/WorkflowContext.cpp" line="229"/>
-        <source>Can not create directory %1 in the directory %2</source>
-        <translation>Can not create directory %1 in the directory %2</translation>
+        <location filename="../src/model/WorkflowContext.cpp" line="228"/>
+        <source>Can not create folder %1 in the folder %2</source>
+        <translation>Can not create folder %1 in the folder %2</translation>
     </message>
     <message>
         <location filename="../src/support/AttributeInfo.cpp" line="43"/>
@@ -415,7 +415,7 @@
         <translation>Actor '%1' does not have this parameter: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="348"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="328"/>
         <source>Additional</source>
         <translation>Additional</translation>
     </message>
@@ -435,27 +435,27 @@
         <translation>The variable is already defined: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="259"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="255"/>
         <source>Empty script text</source>
         <translation>Empty script text</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="267"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="263"/>
         <source>Script syntax check failed! Line: %1, error: %2</source>
         <translation>Script syntax check failed! Line: %1, error: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="291"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="287"/>
         <source>The workflow contains a cycle</source>
         <translation>The workflow contains a cycle</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="381"/>
         <source><empty></source>
         <translation><empty></translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="381"/>
         <source>Default value</source>
         <translation>Default value</translation>
     </message>
@@ -485,37 +485,37 @@
         <translation>Unknown actor ID: </translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="32"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="34"/>
         <source>Error: unknown exception caught</source>
         <translation>Error: unknown exception caught</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="45"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="47"/>
         <source>Undefined construct at '%1 %2'</source>
         <translation>Undefined construct at '%1 %2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="63"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="65"/>
         <source>Undefined block in .meta: '%1'</source>
         <translation>Undefined block in .meta: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="50"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="51"/>
         <source>%1 actor has not markers attribute</source>
         <translation>%1 actor has not markers attribute</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="56"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="57"/>
         <source>Redefinition of %1 marker at %2 actor</source>
         <translation>Redefinition of %1 marker at %2 actor</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="84"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="85"/>
         <source>Unknown actor name "%1" at a marker definition</source>
         <translation>Unknown actor name "%1" at a marker definition</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="91"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="92"/>
         <source>Unknown function type "%1" for the marker %2</source>
         <translation>Unknown function type "%1" for the marker %2</translation>
     </message>
@@ -678,22 +678,22 @@
 <context>
     <name>U2::DescriptorListEditorDelegate</name>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="407"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="387"/>
         <source><empty></source>
         <translation><empty></translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="407"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="387"/>
         <source>Default value</source>
         <translation>Default value</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="411"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="391"/>
         <source><List of values></source>
         <translation><List of values></translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="411"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="391"/>
         <source>List of values</source>
         <translation>List of values</translation>
     </message>
@@ -701,383 +701,387 @@
 <context>
     <name>U2::HRSchemaSerializer</name>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="85"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="86"/>
         <source>Parameter '%1' undefined for element '%2'</source>
         <translation>Parameter '%1' undefined for element '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="90"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="91"/>
         <source>Cannot parse value from '%1': no value factory</source>
         <translation>Cannot parse value from '%1': no value factory</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="95"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="96"/>
         <source>Cannot parse value from '%1'</source>
         <translation>Cannot parse value from '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="157"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="304"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="158"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="305"/>
         <source>Bad header: expected '%1', got '%2'</source>
         <translation>Bad header: expected '%1', got '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="382"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="384"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="386"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="398"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="400"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="444"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="383"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="385"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="387"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="399"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="401"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="445"/>
         <source>Database select definition: '%1' expected but not found</source>
         <translation>Database select definition: '%1' expected but not found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="390"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="391"/>
         <source>Database select definition: invalid DB object URL</source>
         <translation>Database select definition: invalid DB object URL</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="405"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="406"/>
         <source>Database select definition: invalid DB folder URL</source>
         <translation>Database select definition: invalid DB folder URL</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="446"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="447"/>
         <source>Database select definition: expected either object or folder definition but both found</source>
         <translation>Database select definition: expected either object or folder definition but both found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="457"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="458"/>
         <source>Database select definition: '%1' or '%2' expected but neither found</source>
         <translation>Database select definition: '%1' or '%2' expected but neither found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="460"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="461"/>
         <source>Database select definition: '%1' is expected, '%2' is found</source>
         <translation>Database select definition: '%1' is expected, '%2' is found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="493"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="486"/>
+        <source>folder url definition: '%1' or '%2' are expected, '%3' is found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="494"/>
         <source>Element name cannot contain whitespaces: '%1'</source>
         <translation>Element name cannot contain whitespaces: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="496"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="497"/>
         <source>Element name cannot contain dots: '%1'</source>
         <translation>Element name cannot contain dots: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="499"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="500"/>
         <source>Element '%1' already defined</source>
         <translation>Element '%1' already defined</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="505"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="506"/>
         <source>Type attribute not set for %1 element</source>
         <translation>Type attribute not set for %1 element</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="513"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="514"/>
         <source>Unknown type of %1 element: %2</source>
         <translation>Unknown type of %1 element: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="522"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="523"/>
         <source>Name attribute not set for %1 element</source>
         <translation>Name attribute not set for %1 element</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="555"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="566"/>
         <source>Unexpected actor attribute: %1</source>
         <translation>Unexpected actor attribute: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="575"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="589"/>
         <source>No validator type</source>
         <translation>No validator type</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="583"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="597"/>
         <source>Script validator has not a script</source>
         <translation>Script validator has not a script</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="589"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="603"/>
         <source>Too many blocks in validator definition</source>
         <translation>Too many blocks in validator definition</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="604"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="618"/>
         <source>Grouper out slot action: empty type</source>
         <translation>Grouper out slot action: empty type</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="606"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="620"/>
         <source>Grouper out slot action: invalid type: %1</source>
         <translation>Grouper out slot action: invalid type: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="615"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="629"/>
         <source>Grouper out slot action: invalid parameter: %1</source>
         <translation>Grouper out slot action: invalid parameter: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="627"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="641"/>
         <source>Grouper out slot action: bad int '%1' at parameter %2</source>
         <translation>Grouper out slot action: bad int '%1' at parameter %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="638"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="652"/>
         <source>Grouper out slot action: bad bool '%1' at parameter %2</source>
         <translation>Grouper out slot action: bad bool '%1' at parameter %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="673"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="687"/>
         <source>Grouper out slot: duplicated slot name: %1</source>
         <translation>Grouper out slot: duplicated slot name: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="679"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="693"/>
         <source>Grouper out slot: unknown attribute: %1</source>
         <translation>Grouper out slot: unknown attribute: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="683"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="697"/>
         <source>Grouper out slot: unknown block definition: '%1'. %2 expected</source>
         <translation>Grouper out slot: unknown block definition: '%1'. %2 expected</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="687"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="701"/>
         <source>Grouper out slot: unknown token: '%1'. %2 or %3 expected</source>
         <translation>Grouper out slot: unknown token: '%1'. %2 or %3 expected</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="692"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="706"/>
         <source>Grouper out slot: empty slot name</source>
         <translation>Grouper out slot: empty slot name</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="695"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="709"/>
         <source>Grouper out slot: empty in-slot</source>
         <translation>Grouper out slot: empty in-slot</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1667"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1681"/>
         <source>Error: element name in the workflow file contains spaces</source>
         <translation>Error: element name in the workflow file contains spaces</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2029"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2043"/>
         <source>%1 actor has not marker attribute</source>
         <translation>%1 actor has not marker attribute</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2067"/>
         <source>Name attribute is not set for the marker</source>
         <translation>Name attribute is not set for the marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2056"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2070"/>
         <source>Type attribute is not set for %1 marker</source>
         <translation>Type attribute is not set for %1 marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2065"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2079"/>
         <source>Qualifier name attribute is not set for %1 marker</source>
         <translation>Qualifier name attribute is not set for %1 marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="799"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="813"/>
         <source>Links list is not empty. Maybe .meta is defined earlier than actor-bindings</source>
         <translation>Links list is not empty. Maybe .meta is defined earlier than actor-bindings</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="845"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="942"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="859"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="956"/>
         <source>%1 element is undefined: at "%2" in aliases block</source>
         <translation>%1 element is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="852"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="866"/>
         <source>%1 parameter is undefined: at "%2" in aliases block</source>
         <translation>%1 parameter is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="864"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="878"/>
         <source>Duplicate parameter alias "%1"</source>
         <translation>Duplicate parameter alias "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="874"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="888"/>
         <source>Empty parameter alias block: "%1"</source>
         <translation>Empty parameter alias block: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="883"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="897"/>
         <source>Duplicate parameter alias name "%1" at "%2"</source>
         <translation>Duplicate parameter alias name "%1" at "%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="901"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="915"/>
         <source>No other blocks allowed in alias block</source>
         <translation>No other blocks allowed in alias block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1081"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1095"/>
         <source>Undefined actor id '%1' at '%2'</source>
         <translation>Undefined actor id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="835"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="849"/>
         <source>Validating actor bindings graph failed: '%1'</source>
         <translation>Validating actor bindings graph failed: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="742"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="756"/>
         <source>%1 definition expected at .iterations block</source>
         <translation>%1 definition expected at .iterations block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="749"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="763"/>
         <source>Cannot parse integer from '%1': iteration id</source>
         <translation>Cannot parse integer from '%1': iteration id</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="756"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="770"/>
         <source>Element id '%1' undefined in .iteration block</source>
         <translation>Element id '%1' undefined in .iteration block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="907"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="921"/>
         <source>%1 element undefined in aliases block</source>
         <translation>%1 element undefined in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="911"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="925"/>
         <source>%1 has no parameter %2: in aliases block</source>
         <translation>%1 has no parameter %2: in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="920"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="934"/>
         <source>No other blocks allowed in help block</source>
         <translation>No other blocks allowed in help block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="927"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="941"/>
         <source>Undefined parameter alias used in help block: '%1'</source>
         <translation>Undefined parameter alias used in help block: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="949"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="963"/>
         <source>%1 port is undefined: at "%2" in aliases block</source>
         <translation>%1 port is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="962"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="976"/>
         <source>%1 slot is undefined: at "%2" in aliases block'</source>
         <translation>%1 slot is undefined: at "%2" in aliases block'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="973"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="987"/>
         <source>Duplicate port alias "%1"</source>
         <translation>Duplicate port alias "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="984"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="998"/>
         <source>Empty port aliases are not allowed: %1</source>
         <translation>Empty port aliases are not allowed: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="993"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1007"/>
         <source>Duplicate port alias name "%1" at "%2"</source>
         <translation>Duplicate port alias name "%1" at "%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1013"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1027"/>
         <source>Duplicate slot alias "%1" at port alias"%2"</source>
         <translation>Duplicate slot alias "%1" at port alias"%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1025"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1048"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1039"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1062"/>
         <source>Undefined element id '%1' at '%2'</source>
         <translation>Undefined element id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1039"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1062"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1076"/>
         <source>Undefined slot id '%1' at '%2'</source>
         <translation>Undefined slot id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1067"/>
         <source>Undefined port id '%1' at '%2'</source>
         <translation>Undefined port id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1056"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1070"/>
         <source>Destination port should be input: %1</source>
         <translation>Destination port should be input: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="807"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="820"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="821"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="834"/>
         <source>Undefined element id: '%1'</source>
         <translation>Undefined element id: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="155"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="156"/>
         <source>XML workflow format is obsolete and not supported</source>
         <translation>XML workflow format is obsolete and not supported</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="211"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="212"/>
         <source>The included file '%1' doesn't exists</source>
         <translation>The included file '%1' doesn't exists</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="220"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="221"/>
         <source>Can't open '%1'</source>
         <translation>Can't open '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="240"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="241"/>
         <source>File '%1' contains mistakes</source>
         <translation>File '%1' contains mistakes</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="252"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="253"/>
         <source>There is recursive including of the file: '%1'</source>
         <translation>There is recursive including of the file: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="276"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="277"/>
         <source>Unknown file format: '%1'</source>
         <translation>Unknown file format: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="309"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="310"/>
         <source>Workflow name not specified</source>
         <translation>Workflow name not specified</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="362"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="363"/>
         <source>Url definition does not contain dataset name</source>
         <translation>Url definition does not contain dataset name</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="485"/>
-        <source>Directory url definition: '%1' or '%2' are expected, '%3' is found</source>
-        <translation>Directory url definition: '%1' or '%2' are expected, '%3' is found</translation>
+        <source>Folder url definition: '%1' or '%2' are expected, '%3' is found</source>
+        <translation type="vanished">Folder url definition: '%1' or '%2' are expected, '%3' is found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="812"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="825"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="826"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="839"/>
         <source>Cannot find '%1' port at '%2'</source>
         <translation>Cannot find '%1' port at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="789"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="803"/>
         <source>Cannot bind %1:%2 to %3:%4</source>
         <translation>Cannot bind %1:%2 to %3:%4</translation>
     </message>
@@ -1179,30 +1183,30 @@
 <context>
     <name>U2::LocalWorkflow::BaseNGSTask</name>
     <message>
-        <location filename="../src/support/BaseNGSWorker.cpp" line="198"/>
+        <location filename="../src/support/BaseNGSWorker.cpp" line="195"/>
         <source>No input URL</source>
         <translation>No input URL</translation>
     </message>
     <message>
-        <location filename="../src/support/BaseNGSWorker.cpp" line="209"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/support/BaseNGSWorker.cpp" line="206"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
 </context>
 <context>
     <name>U2::MapDatatypeEditor</name>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="91"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="76"/>
         <source>Slots</source>
         <translation>Slots</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="91"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="76"/>
         <source>Data source</source>
         <translation>Data source</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="187"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="167"/>
         <source>The input slot <b>%1</b><br>is bound to<br>the bus slot <b>%2</b></source>
         <translation>The input slot <b>%1</b><br>is bound to<br>the bus slot <b>%2</b></translation>
     </message>
@@ -1358,19 +1362,19 @@
 <context>
     <name>U2::PrompterBaseImpl</name>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1350"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1370"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1346"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1366"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1403"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1353"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1349"/>
         <source>the list of files</source>
         <translation>the list of files</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1381"/>
         <source>file(s) alongside of input sources of <u>%1</u></source>
         <translation>file(s) alongside of input sources of <u>%1</u></translation>
     </message>
@@ -1384,36 +1388,9 @@
     </message>
 </context>
 <context>
-    <name>U2::RunCmdlineWorkflowTask</name>
-    <message>
-        <source>Workflow process</source>
-        <translation type="vanished">Workflow process</translation>
-    </message>
-    <message>
-        <source>Cannot start process '%1'</source>
-        <translation type="vanished">Cannot start process '%1'</translation>
-    </message>
-    <message>
-        <source>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</source>
-        <translation type="vanished">The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</translation>
-    </message>
-    <message>
-        <source>The process '%1' crashed some time after starting successfully</source>
-        <translation type="vanished">The process '%1' crashed some time after starting successfully</translation>
-    </message>
-    <message>
-        <source>Error occurred while reading from or writing to channel</source>
-        <translation type="vanished">Error occurred while reading from or writing to channel</translation>
-    </message>
-    <message>
-        <source>Unknown error occurred</source>
-        <translation type="vanished">Unknown error occurred</translation>
-    </message>
-</context>
-<context>
     <name>U2::RunFileSystem</name>
     <message>
-        <location filename="../src/model/RunFileSystem.cpp" line="152"/>
+        <location filename="../src/model/RunFileSystem.cpp" line="154"/>
         <source>Workflow-run output</source>
         <translation>Workflow-run output</translation>
     </message>
@@ -1446,7 +1423,7 @@
     <message>
         <location filename="../src/support/SimpleWorkflowTask.cpp" line="123"/>
         <source>An error occurred during the task. See the log for details.</source>
-        <translation type="unfinished"></translation>
+        <translation>An error occurred during the task. See the log for details.</translation>
     </message>
     <message>
         <location filename="../src/support/SimpleWorkflowTask.cpp" line="128"/>
@@ -1580,147 +1557,147 @@
 <context>
     <name>U2::Workflow::BaseAttributes</name>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="44"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="46"/>
         <source>Input file(s)</source>
         <translation>Input file(s)</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="44"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="46"/>
         <source>Semicolon-separated list of paths to the input files.</source>
         <translation>Semicolon-separated list of paths to the input files.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="48"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="50"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="48"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="50"/>
         <source>Location of output data file. If this attribute is set, slot "Location" in port will not be used.</source>
         <translation>Location of output data file. If this attribute is set, slot "Location" in port will not be used.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="53"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="55"/>
         <source>Output file suffix</source>
         <translation>Output file suffix</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="53"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="55"/>
         <source>This suffix will be used for generating the output file name.</source>
         <translation>This suffix will be used for generating the output file name.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="57"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="59"/>
         <source>Located on</source>
         <translation>Located on</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="57"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="59"/>
         <source>Machine file(s) are located on</source>
         <translation>Machine file(s) are located on</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="61"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="63"/>
         <source>Data storage</source>
         <translation>Data storage</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="61"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="63"/>
         <source>Place to store workflow results</source>
         <translation>Place to store workflow results</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="82"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="84"/>
         <source>Database</source>
         <translation>Database</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="82"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="84"/>
         <source>The URL or name of a shared UGENE database</source>
         <translation>The URL or name of a shared UGENE database</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="86"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="88"/>
         <source>Output path</source>
         <translation>Output path</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="86"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="88"/>
         <source>Location of output objects in a shared database</source>
         <translation>Location of output objects in a shared database</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="90"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="92"/>
         <source>Document format</source>
         <translation>Document format</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="90"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="92"/>
         <source>Document format of output file.</source>
         <translation>Document format of output file.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="94"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="96"/>
         <source>Accumulate objects</source>
         <translation>Accumulate objects</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="95"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="97"/>
         <source>Accumulate all incoming data in one file or create separate files for each input.In the latter case, an incremental numerical suffix is added to the file name.</source>
         <translation>Accumulate all incoming data in one file or create separate files for each input.In the latter case, an incremental numerical suffix is added to the file name.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="100"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="102"/>
         <source>Split sequence</source>
         <translation>Split sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="100"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="102"/>
         <source>Split each incoming sequence on several parts.</source>
         <translation>Split each incoming sequence on several parts.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="104"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="106"/>
         <source>Read by lines</source>
         <translation>Read by lines</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="104"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="106"/>
         <source>Reads the input file line by line.</source>
         <translation>Reads the input file line by line.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="108"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="110"/>
         <source>Existing file</source>
         <translation>Existing file</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="108"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="110"/>
         <source>If a target file already exists, you can specify how it should be handled: either overwritten, renamed or appended (if supported by file format). If Rename option is chosen existing file will be renamed.</source>
         <translation>If a target file already exists, you can specify how it should be handled: either overwritten, renamed or appended (if supported by file format). If Rename option is chosen existing file will be renamed.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="114"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="116"/>
         <source>Search in</source>
         <translation>Search in</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="114"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="116"/>
         <source>Which strands should be searched: direct, complement or both.</source>
         <translation>Which strands should be searched: direct, complement or both.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="134"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="136"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="135"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="137"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="136"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="138"/>
         <source>complementary strand</source>
         <translation>complementary strand</translation>
     </message>
@@ -1819,19 +1796,19 @@
 <context>
     <name>U2::Workflow::IntegralBusPort</name>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="436"/>
-        <location filename="../src/model/IntegralBusModel.cpp" line="470"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="434"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="468"/>
         <source>No input data supplied</source>
         <translation>No input data supplied</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="484"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="482"/>
         <source>Empty input slot: %1</source>
         <translation>Empty input slot: %1</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="487"/>
-        <location filename="../src/model/IntegralBusModel.cpp" line="501"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="485"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="499"/>
         <source>Bad slot binding: %1 to %2</source>
         <translation>Bad slot binding: %1 to %2</translation>
     </message>
@@ -1857,33 +1834,33 @@
 <context>
     <name>U2::Workflow::SchemaSerializer</name>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="250"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="251"/>
         <source>no metadata</source>
         <translation>no metadata</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="318"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="319"/>
         <source>Invalid content: duplicate process %1</source>
         <translation>Invalid content: duplicate process %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="325"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="326"/>
         <source>Invalid content: unknown process type %1</source>
         <translation>Invalid content: unknown process type %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="356"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="357"/>
         <source>Invalid content: unknown port %1 requested for %2</source>
         <translation>Invalid content: unknown port %1 requested for %2</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="385"/>
-        <location filename="../src/support/SchemaSerializer.cpp" line="392"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="386"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="393"/>
         <source>Invalid content: no such process %1 to bind</source>
         <translation>Invalid content: no such process %1 to bind</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="404"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="405"/>
         <source>Invalid content: cannot bind [%1 : %2] to [%3 : %4]</source>
         <translation>Invalid content: cannot bind [%1 : %2] to [%3 : %4]</translation>
     </message>
@@ -1899,42 +1876,42 @@
 <context>
     <name>U2::WorkflowIterationRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="138"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="163"/>
         <source>Workflow run</source>
         <translation>Workflow run</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="154"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="179"/>
         <source>Unknown domain %1</source>
         <translation>Unknown domain %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="204"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="228"/>
         <source>Failed to preprocess the workflow. Some of included files are broken</source>
         <translation>Failed to preprocess the workflow. Some of included files are broken</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="212"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="236"/>
         <source>Failed to create worker %1 %2 in domain %3</source>
         <translation>Failed to create worker %1 %2 in domain %3</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="220"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="244"/>
         <source>Failed to create connection %1 %2 in domain %3</source>
         <translation>Failed to create connection %1 %2 in domain %3</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="233"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="257"/>
         <source>Failed to create a workflow context</source>
         <translation>Failed to create a workflow context</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="295"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="319"/>
         <source>No workers are ready, while not all workers are done. Workflow is broken?</source>
         <translation>No workers are ready, while not all workers are done. Workflow is broken?</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="239"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="263"/>
         <source>Failed to create scheduler in domain %1</source>
         <translation>Failed to create scheduler in domain %1</translation>
     </message>
@@ -1950,7 +1927,7 @@
 <context>
     <name>U2::WorkflowRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="56"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="59"/>
         <source>Execute workflow</source>
         <translation>Execute workflow</translation>
     </message>
@@ -2047,7 +2024,7 @@
 <context>
     <name>U2::WorkflowSettings</name>
     <message>
-        <location filename="../src/support/WorkflowSettings.cpp" line="259"/>
+        <location filename="../src/support/WorkflowSettings.cpp" line="253"/>
         <source>Command line UGENE path not found, a possibility to run in separate process will be disabled</source>
         <translation>Command line UGENE path not found, a possibility to run in separate process will be disabled</translation>
     </message>
@@ -2060,92 +2037,92 @@
         <translation>Required parameter is not set: %1</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="549"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="547"/>
         <source>Either parameter '%1' or input slot '%2' must be set</source>
         <translation>Either parameter '%1' or input slot '%2' must be set</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="353"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="349"/>
         <source> (use --%1 option)</source>
         <translation> (use --%1 option)</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="403"/>
         <source><List of values></source>
         <translation><List of values></translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="403"/>
         <source>List of values</source>
         <translation>List of values</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="570"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="566"/>
         <source>%1 actors in workflow have '%2' alias</source>
         <translation>%1 actors in workflow have '%2' alias</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="641"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="637"/>
         <source>The %1 element is a %2. Sorry, but current version of UGENE doesn't support of filters and groupers in the includes.</source>
         <translation>The %1 element is a %2. Sorry, but current version of UGENE doesn't support of filters and groupers in the includes.</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="649"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="645"/>
         <source>filter</source>
         <translation>filter</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="651"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="647"/>
         <source>grouper</source>
         <translation>grouper</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="659"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="655"/>
         <source>The workflow has not any aliased ports</source>
         <translation>The workflow has not any aliased ports</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="676"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="672"/>
         <source>The aliased port %1.%2 has no aliased slots</source>
         <translation>The aliased port %1.%2 has no aliased slots</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="685"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="681"/>
         <source>The free port %1.%2 is not aliased</source>
         <translation>The free port %1.%2 is not aliased</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="698"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="694"/>
         <source>The required parameter %1.%2 is empty and not aliased</source>
         <translation>The required parameter %1.%2 is empty and not aliased</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="886"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="882"/>
         <source>External tool "%1" is not set. You can set it in Settings -> Preferences -> External Tools</source>
         <translation>External tool "%1" is not set. You can set it in Settings -> Preferences -> External Tools</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="890"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="886"/>
         <source>External tool "%1" is invalid. UGENE may not support this version of the tool or a wrong path to the tools is selected</source>
         <translation>External tool "%1" is invalid. UGENE may not support this version of the tool or a wrong path to the tools is selected</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1205"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1201"/>
         <source>Can't access output file path: '%1'</source>
         <translation>Can't access output file path: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1224"/>
-        <source>Can't output directory path: '%1', check permissions</source>
-        <translation>Can't output directory path: '%1', check permissions</translation>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1220"/>
+        <source>Can't output folder path: '%1', check permissions</source>
+        <translation>Can't output folder path: '%1', check permissions</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1243"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1239"/>
         <source>Empty shared database URL specified</source>
         <translation>Empty shared database URL specified</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1315"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1311"/>
         <source>Wrong samples map string</source>
         <translation>Wrong samples map string</translation>
     </message>
diff --git a/src/corelibs/U2Lang/transl/russian.ts b/src/corelibs/U2Lang/transl/russian.ts
index e0b9f6f..345b98d 100644
--- a/src/corelibs/U2Lang/transl/russian.ts
+++ b/src/corelibs/U2Lang/transl/russian.ts
@@ -55,20 +55,20 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="499"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="551"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="587"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="615"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="652"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="678"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="694"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="710"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="726"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="782"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="812"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="851"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="877"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="904"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="931"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="958"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="985"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="614"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="648"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="674"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="690"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="706"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="722"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="778"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="808"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="847"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="873"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="900"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="927"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="954"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="981"/>
         <source>Incorrect number of arguments</source>
         <translation>Некорректное число аргументов</translation>
     </message>
@@ -86,9 +86,9 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="486"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="568"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="593"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="602"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="621"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="731"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="601"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="620"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="727"/>
         <source>Empty or invalid sequence</source>
         <translation>Пустая или некорректная последовательность</translation>
     </message>
@@ -113,8 +113,8 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="321"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="438"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="511"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="664"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="862"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="660"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="858"/>
         <source>Second argument must be a number</source>
         <translation>Второй аргумент должен быть числовым</translation>
     </message>
@@ -141,16 +141,16 @@
     <message>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="504"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="558"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="657"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="683"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="699"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="715"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="653"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="679"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="695"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="711"/>
         <source>Invalid alignment</source>
         <translation>Некорректное выравнивание</translation>
     </message>
     <message>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="514"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="668"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="664"/>
         <source>Row is out of range</source>
         <translation>Строка выходит за рамки допустимого региона</translation>
     </message>
@@ -170,52 +170,52 @@
         <translation>Длина выходит за рамки допустимого региона</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="605"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="604"/>
         <source>Alphabets of each sequence must be the same</source>
         <translation>Алфавиты всех последовательностей должны быть одинаковыми</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="631"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="628"/>
         <source>Alphabets don't match</source>
         <translation>Алфавиты не совпадают</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="886"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="882"/>
         <source>Empty annotation name</source>
         <translation>Имя аннотации пусто</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="909"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="936"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="963"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="905"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="932"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="959"/>
         <source>Invalid file path</source>
         <translation>Некорректный путь до файла</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="914"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="941"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="910"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="937"/>
         <source>No data to write</source>
         <translation>Нет данных для записи</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="919"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="946"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="968"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="915"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="942"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="964"/>
         <source>Cannot open the file by given path</source>
         <translation>Невозможно открыть файл по указанному пути</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="990"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="986"/>
         <source>Empty file path</source>
         <translation>Empty file path</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="995"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="991"/>
         <source>Can't detect the sequence file format: </source>
         <translation>Can't detect the sequence file format: </translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="1011"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="1007"/>
         <source>There are no sequences in the file: </source>
         <translation>There are no sequences in the file: </translation>
     </message>
@@ -223,43 +223,43 @@
         <location filename="../src/library/script/ScriptLibrary.cpp" line="191"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="444"/>
         <location filename="../src/library/script/ScriptLibrary.cpp" line="525"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="637"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="634"/>
         <source>Third argument must be a number</source>
         <translation>Третий аргумент должен быть числовым</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="736"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="787"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="817"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="856"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="882"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="732"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="783"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="813"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="852"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="878"/>
         <source>Invalid annotations</source>
         <translation>Некорректные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="740"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="736"/>
         <source>Empty name</source>
         <translation>Имя пусто</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="791"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="821"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="787"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="817"/>
         <source>Empty qualifier name</source>
         <translation>Имя квалификатора пусто</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="795"/>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="825"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="791"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="821"/>
         <source>Empty qualifier value</source>
         <translation>Значение квалификатора пусто</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="831"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="827"/>
         <source>forth argument must be a string</source>
         <translation>Четвертый аргумент должен быть строкой</translation>
     </message>
     <message>
-        <location filename="../src/library/script/ScriptLibrary.cpp" line="866"/>
+        <location filename="../src/library/script/ScriptLibrary.cpp" line="862"/>
         <source>Index is out of range</source>
         <translation>Индекс выходит за рамки допустимого региона</translation>
     </message>
@@ -269,17 +269,17 @@
         <translation>Исключение в ходе выполнения скрипта! Строка:%1, ошибка:%2</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="155"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="157"/>
         <source>By value</source>
         <translation>По значению</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="159"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="161"/>
         <source>By name</source>
         <translation>По имени</translation>
     </message>
     <message>
-        <location filename="../src/model/GrouperOutSlot.cpp" line="163"/>
+        <location filename="../src/model/GrouperOutSlot.cpp" line="165"/>
         <source>By id</source>
         <translation>По идентификатору</translation>
     </message>
@@ -395,14 +395,14 @@
         <translation>NULL parameters area</translation>
     </message>
     <message>
-        <location filename="../src/model/WorkflowContext.cpp" line="206"/>
-        <source>Can not create directory: </source>
-        <translation>Невозможно создать директорию: </translation>
+        <location filename="../src/model/WorkflowContext.cpp" line="205"/>
+        <source>Can not create folder: </source>
+        <translation>Невозможно создать папку: </translation>
     </message>
     <message>
-        <location filename="../src/model/WorkflowContext.cpp" line="229"/>
-        <source>Can not create directory %1 in the directory %2</source>
-        <translation>Can not create directory %1 in the directory %2</translation>
+        <location filename="../src/model/WorkflowContext.cpp" line="228"/>
+        <source>Can not create folder %1 in the folder %2</source>
+        <translation>Can not create folder %1 in the folder %2</translation>
     </message>
     <message>
         <location filename="../src/support/AttributeInfo.cpp" line="43"/>
@@ -415,7 +415,7 @@
         <translation>Actor '%1' does not have this parameter: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="348"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="328"/>
         <source>Additional</source>
         <translation>Additional</translation>
     </message>
@@ -435,27 +435,27 @@
         <translation>The variable is already defined: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="259"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="255"/>
         <source>Empty script text</source>
         <translation>Скрипт пуст</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="267"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="263"/>
         <source>Script syntax check failed! Line: %1, error: %2</source>
         <translation>Обнаружена ошибка в скрипте! Строка: %1, ошибка: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="291"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="287"/>
         <source>The workflow contains a cycle</source>
         <translation>Схема содержит цикл</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="381"/>
         <source><empty></source>
         <translation><пустой></translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="381"/>
         <source>Default value</source>
         <translation>Значение по умолчанию</translation>
     </message>
@@ -485,37 +485,37 @@
         <translation>Unknown actor ID: </translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="32"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="34"/>
         <source>Error: unknown exception caught</source>
         <translation>Error: unknown exception caught</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="45"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="47"/>
         <source>Undefined construct at '%1 %2'</source>
         <translation>Undefined construct at '%1 %2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/Constants.cpp" line="63"/>
+        <location filename="../src/support/serialize/Constants.cpp" line="65"/>
         <source>Undefined block in .meta: '%1'</source>
         <translation>Undefined block in .meta: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="50"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="51"/>
         <source>%1 actor has not markers attribute</source>
         <translation>%1 actor has not markers attribute</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="56"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="57"/>
         <source>Redefinition of %1 marker at %2 actor</source>
         <translation>Redefinition of %1 marker at %2 actor</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="84"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="85"/>
         <source>Unknown actor name "%1" at a marker definition</source>
         <translation>Unknown actor name "%1" at a marker definition</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/OldUWL.cpp" line="91"/>
+        <location filename="../src/support/serialize/OldUWL.cpp" line="92"/>
         <source>Unknown function type "%1" for the marker %2</source>
         <translation>Unknown function type "%1" for the marker %2</translation>
     </message>
@@ -678,22 +678,22 @@
 <context>
     <name>U2::DescriptorListEditorDelegate</name>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="407"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="387"/>
         <source><empty></source>
         <translation><пустой></translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="407"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="387"/>
         <source>Default value</source>
         <translation>Значение по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="411"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="391"/>
         <source><List of values></source>
         <translation><Список значений></translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="411"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="391"/>
         <source>List of values</source>
         <translation>Список значений</translation>
     </message>
@@ -701,383 +701,387 @@
 <context>
     <name>U2::HRSchemaSerializer</name>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="85"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="86"/>
         <source>Parameter '%1' undefined for element '%2'</source>
         <translation>Параметр '%1' не определен для элемента '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="90"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="91"/>
         <source>Cannot parse value from '%1': no value factory</source>
         <translation>Cannot parse value from '%1': no value factory</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="95"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="96"/>
         <source>Cannot parse value from '%1'</source>
         <translation>Cannot parse value from '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="157"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="304"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="158"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="305"/>
         <source>Bad header: expected '%1', got '%2'</source>
         <translation>Bad header: expected '%1', got '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="382"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="384"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="386"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="398"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="400"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="444"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="383"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="385"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="387"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="399"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="401"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="445"/>
         <source>Database select definition: '%1' expected but not found</source>
         <translation>Database select definition: '%1' expected but not found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="390"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="391"/>
         <source>Database select definition: invalid DB object URL</source>
         <translation>Database select definition: invalid DB object URL</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="405"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="406"/>
         <source>Database select definition: invalid DB folder URL</source>
         <translation>Database select definition: invalid DB folder URL</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="446"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="447"/>
         <source>Database select definition: expected either object or folder definition but both found</source>
         <translation>Database select definition: expected either object or folder definition but both found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="457"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="458"/>
         <source>Database select definition: '%1' or '%2' expected but neither found</source>
         <translation>Database select definition: '%1' or '%2' expected but neither found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="460"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="461"/>
         <source>Database select definition: '%1' is expected, '%2' is found</source>
         <translation>Database select definition: '%1' is expected, '%2' is found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="493"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="486"/>
+        <source>folder url definition: '%1' or '%2' are expected, '%3' is found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="494"/>
         <source>Element name cannot contain whitespaces: '%1'</source>
         <translation>Имя элемента не может содержать пробелы: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="496"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="497"/>
         <source>Element name cannot contain dots: '%1'</source>
         <translation>Имя элемента не может содержать точки: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="499"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="500"/>
         <source>Element '%1' already defined</source>
         <translation>Element '%1' already defined</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="505"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="506"/>
         <source>Type attribute not set for %1 element</source>
         <translation>Type attribute not set for %1 element</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="513"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="514"/>
         <source>Unknown type of %1 element: %2</source>
         <translation>Unknown type of %1 element: %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="522"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="523"/>
         <source>Name attribute not set for %1 element</source>
         <translation>Name attribute not set for %1 element</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="555"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="566"/>
         <source>Unexpected actor attribute: %1</source>
         <translation>Unexpected actor attribute: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="575"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="589"/>
         <source>No validator type</source>
         <translation>No validator type</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="583"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="597"/>
         <source>Script validator has not a script</source>
         <translation>Script validator has not a script</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="589"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="603"/>
         <source>Too many blocks in validator definition</source>
         <translation>Too many blocks in validator definition</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="604"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="618"/>
         <source>Grouper out slot action: empty type</source>
         <translation>Grouper out slot action: empty type</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="606"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="620"/>
         <source>Grouper out slot action: invalid type: %1</source>
         <translation>Grouper out slot action: invalid type: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="615"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="629"/>
         <source>Grouper out slot action: invalid parameter: %1</source>
         <translation>Grouper out slot action: invalid parameter: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="627"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="641"/>
         <source>Grouper out slot action: bad int '%1' at parameter %2</source>
         <translation>Grouper out slot action: bad int '%1' at parameter %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="638"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="652"/>
         <source>Grouper out slot action: bad bool '%1' at parameter %2</source>
         <translation>Grouper out slot action: bad bool '%1' at parameter %2</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="673"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="687"/>
         <source>Grouper out slot: duplicated slot name: %1</source>
         <translation>Grouper out slot: duplicated slot name: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="679"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="693"/>
         <source>Grouper out slot: unknown attribute: %1</source>
         <translation>Grouper out slot: unknown attribute: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="683"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="697"/>
         <source>Grouper out slot: unknown block definition: '%1'. %2 expected</source>
         <translation>Grouper out slot: unknown block definition: '%1'. %2 expected</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="687"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="701"/>
         <source>Grouper out slot: unknown token: '%1'. %2 or %3 expected</source>
         <translation>Grouper out slot: unknown token: '%1'. %2 or %3 expected</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="692"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="706"/>
         <source>Grouper out slot: empty slot name</source>
         <translation>Grouper out slot: empty slot name</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="695"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="709"/>
         <source>Grouper out slot: empty in-slot</source>
         <translation>Grouper out slot: empty in-slot</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1667"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1681"/>
         <source>Error: element name in the workflow file contains spaces</source>
         <translation>Error: element name in the workflow file contains spaces</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2029"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2043"/>
         <source>%1 actor has not marker attribute</source>
         <translation>%1 actor has not marker attribute</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2067"/>
         <source>Name attribute is not set for the marker</source>
         <translation>Name attribute is not set for the marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2056"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2070"/>
         <source>Type attribute is not set for %1 marker</source>
         <translation>Type attribute is not set for %1 marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2065"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="2079"/>
         <source>Qualifier name attribute is not set for %1 marker</source>
         <translation>Qualifier name attribute is not set for %1 marker</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="799"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="813"/>
         <source>Links list is not empty. Maybe .meta is defined earlier than actor-bindings</source>
         <translation>Links list is not empty. Maybe .meta is defined earlier than actor-bindings</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="845"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="942"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="859"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="956"/>
         <source>%1 element is undefined: at "%2" in aliases block</source>
         <translation>%1 element is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="852"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="866"/>
         <source>%1 parameter is undefined: at "%2" in aliases block</source>
         <translation>%1 parameter is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="864"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="878"/>
         <source>Duplicate parameter alias "%1"</source>
         <translation>Duplicate parameter alias "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="874"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="888"/>
         <source>Empty parameter alias block: "%1"</source>
         <translation>Empty parameter alias block: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="883"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="897"/>
         <source>Duplicate parameter alias name "%1" at "%2"</source>
         <translation>Duplicate parameter alias name "%1" at "%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="901"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="915"/>
         <source>No other blocks allowed in alias block</source>
         <translation>No other blocks allowed in alias block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1081"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1095"/>
         <source>Undefined actor id '%1' at '%2'</source>
         <translation>Undefined actor id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="835"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="849"/>
         <source>Validating actor bindings graph failed: '%1'</source>
         <translation>Validating actor bindings graph failed: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="742"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="756"/>
         <source>%1 definition expected at .iterations block</source>
         <translation>%1 definition expected at .iterations block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="749"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="763"/>
         <source>Cannot parse integer from '%1': iteration id</source>
         <translation>Cannot parse integer from '%1': iteration id</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="756"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="770"/>
         <source>Element id '%1' undefined in .iteration block</source>
         <translation>Element id '%1' undefined in .iteration block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="907"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="921"/>
         <source>%1 element undefined in aliases block</source>
         <translation>%1 element undefined in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="911"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="925"/>
         <source>%1 has no parameter %2: in aliases block</source>
         <translation>%1 has no parameter %2: in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="920"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="934"/>
         <source>No other blocks allowed in help block</source>
         <translation>No other blocks allowed in help block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="927"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="941"/>
         <source>Undefined parameter alias used in help block: '%1'</source>
         <translation>Undefined parameter alias used in help block: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="949"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="963"/>
         <source>%1 port is undefined: at "%2" in aliases block</source>
         <translation>%1 port is undefined: at "%2" in aliases block</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="962"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="976"/>
         <source>%1 slot is undefined: at "%2" in aliases block'</source>
         <translation>%1 slot is undefined: at "%2" in aliases block'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="973"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="987"/>
         <source>Duplicate port alias "%1"</source>
         <translation>Duplicate port alias "%1"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="984"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="998"/>
         <source>Empty port aliases are not allowed: %1</source>
         <translation>Empty port aliases are not allowed: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="993"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1007"/>
         <source>Duplicate port alias name "%1" at "%2"</source>
         <translation>Duplicate port alias name "%1" at "%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1013"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1027"/>
         <source>Duplicate slot alias "%1" at port alias"%2"</source>
         <translation>Duplicate slot alias "%1" at port alias"%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1025"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1048"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1039"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1062"/>
         <source>Undefined element id '%1' at '%2'</source>
         <translation>Undefined element id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1039"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1062"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1076"/>
         <source>Undefined slot id '%1' at '%2'</source>
         <translation>Undefined slot id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1053"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1067"/>
         <source>Undefined port id '%1' at '%2'</source>
         <translation>Undefined port id '%1' at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1056"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="1070"/>
         <source>Destination port should be input: %1</source>
         <translation>Destination port should be input: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="807"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="820"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="821"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="834"/>
         <source>Undefined element id: '%1'</source>
         <translation>Undefined element id: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="155"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="156"/>
         <source>XML workflow format is obsolete and not supported</source>
         <translation>XML workflow format is obsolete and not supported</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="211"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="212"/>
         <source>The included file '%1' doesn't exists</source>
         <translation>The included file '%1' doesn't exists</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="220"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="221"/>
         <source>Can't open '%1'</source>
         <translation>Can't open '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="240"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="241"/>
         <source>File '%1' contains mistakes</source>
         <translation>File '%1' contains mistakes</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="252"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="253"/>
         <source>There is recursive including of the file: '%1'</source>
         <translation>There is recursive including of the file: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="276"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="277"/>
         <source>Unknown file format: '%1'</source>
         <translation>Unknown file format: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="309"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="310"/>
         <source>Workflow name not specified</source>
         <translation>Workflow name not specified</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="362"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="363"/>
         <source>Url definition does not contain dataset name</source>
         <translation>Url definition does not contain dataset name</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="485"/>
-        <source>Directory url definition: '%1' or '%2' are expected, '%3' is found</source>
-        <translation>Directory url definition: '%1' or '%2' are expected, '%3' is found</translation>
+        <source>Folder url definition: '%1' or '%2' are expected, '%3' is found</source>
+        <translation type="vanished">Folder url definition: '%1' or '%2' are expected, '%3' is found</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="812"/>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="825"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="826"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="839"/>
         <source>Cannot find '%1' port at '%2'</source>
         <translation>Cannot find '%1' port at '%2'</translation>
     </message>
     <message>
-        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="789"/>
+        <location filename="../src/support/serialize/HRSchemaSerializer.cpp" line="803"/>
         <source>Cannot bind %1:%2 to %3:%4</source>
         <translation>Cannot bind %1:%2 to %3:%4</translation>
     </message>
@@ -1179,30 +1183,30 @@
 <context>
     <name>U2::LocalWorkflow::BaseNGSTask</name>
     <message>
-        <location filename="../src/support/BaseNGSWorker.cpp" line="198"/>
+        <location filename="../src/support/BaseNGSWorker.cpp" line="195"/>
         <source>No input URL</source>
         <translation>Отсутствует входной адрес</translation>
     </message>
     <message>
-        <location filename="../src/support/BaseNGSWorker.cpp" line="209"/>
-        <source>Directory does not exist: </source>
-        <translation>Директория не существует: </translation>
+        <location filename="../src/support/BaseNGSWorker.cpp" line="206"/>
+        <source>Folder does not exist: </source>
+        <translation>Папка не существует: </translation>
     </message>
 </context>
 <context>
     <name>U2::MapDatatypeEditor</name>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="91"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="76"/>
         <source>Slots</source>
         <translation>Слоты</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="91"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="76"/>
         <source>Data source</source>
         <translation>Источник данных</translation>
     </message>
     <message>
-        <location filename="../src/support/MapDatatypeEditor.cpp" line="187"/>
+        <location filename="../src/support/MapDatatypeEditor.cpp" line="167"/>
         <source>The input slot <b>%1</b><br>is bound to<br>the bus slot <b>%2</b></source>
         <translation>Входной слот <b>%1</b><br>привязан к<br>слоту шины <b>%2</b></translation>
     </message>
@@ -1358,19 +1362,19 @@
 <context>
     <name>U2::PrompterBaseImpl</name>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1350"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1370"/>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1346"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1366"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1403"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1385"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1381"/>
         <source>file(s) alongside of input sources of <u>%1</u></source>
         <translation>файл(ы) рядом с исходным(и) <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1353"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1349"/>
         <source>the list of files</source>
         <translation>список файлов</translation>
     </message>
@@ -1384,38 +1388,11 @@
     </message>
 </context>
 <context>
-    <name>U2::RunCmdlineWorkflowTask</name>
-    <message>
-        <source>Workflow process</source>
-        <translation type="vanished">Процесс схемы</translation>
-    </message>
-    <message>
-        <source>Cannot start process '%1'</source>
-        <translation type="vanished">Cannot start process '%1'</translation>
-    </message>
-    <message>
-        <source>The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</source>
-        <translation type="vanished">The process '%1' failed to start. Either the invoked program is missing, or you may have insufficient permissions to invoke the program</translation>
-    </message>
-    <message>
-        <source>The process '%1' crashed some time after starting successfully</source>
-        <translation type="vanished">The process '%1' crashed some time after starting successfully</translation>
-    </message>
-    <message>
-        <source>Error occurred while reading from or writing to channel</source>
-        <translation type="vanished">Error occurred while reading from or writing to channel</translation>
-    </message>
-    <message>
-        <source>Unknown error occurred</source>
-        <translation type="vanished">Unknown error occurred</translation>
-    </message>
-</context>
-<context>
     <name>U2::RunFileSystem</name>
     <message>
-        <location filename="../src/model/RunFileSystem.cpp" line="152"/>
+        <location filename="../src/model/RunFileSystem.cpp" line="154"/>
         <source>Workflow-run output</source>
-        <translation>Выходная директория для запуска схемы</translation>
+        <translation>Выходная папка для запуска схемы</translation>
     </message>
 </context>
 <context>
@@ -1446,7 +1423,7 @@
     <message>
         <location filename="../src/support/SimpleWorkflowTask.cpp" line="123"/>
         <source>An error occurred during the task. See the log for details.</source>
-        <translation type="unfinished"></translation>
+        <translation>An error occurred during the task. See the log for details.</translation>
     </message>
     <message>
         <location filename="../src/support/SimpleWorkflowTask.cpp" line="128"/>
@@ -1580,147 +1557,147 @@
 <context>
     <name>U2::Workflow::BaseAttributes</name>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="44"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="46"/>
         <source>Input file(s)</source>
         <translation>Входные файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="44"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="46"/>
         <source>Semicolon-separated list of paths to the input files.</source>
         <translation>Список путей к входным файлам, разделенных ";".</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="48"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="50"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="48"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="50"/>
         <source>Location of output data file. If this attribute is set, slot "Location" in port will not be used.</source>
         <translation>путь до выходного файла данных. Если даный атрибут задан, то слот "Путь к файлу" порта не будет задействован.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="53"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="55"/>
         <source>Output file suffix</source>
         <translation>Суффикс выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="53"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="55"/>
         <source>This suffix will be used for generating the output file name.</source>
         <translation>этот суффикс будет использован для создания имени выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="57"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="59"/>
         <source>Located on</source>
         <translation>Расположение файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="57"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="59"/>
         <source>Machine file(s) are located on</source>
         <translation>Компьютер, на котором расположены входные файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="61"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="63"/>
         <source>Data storage</source>
         <translation>Хранилище данных</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="61"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="63"/>
         <source>Place to store workflow results</source>
         <translation>место для хранения результатов выполнения схемы</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="82"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="84"/>
         <source>Database</source>
         <translation>База данных</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="82"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="84"/>
         <source>The URL or name of a shared UGENE database</source>
         <translation>Адрес или имя базы данных UGENE</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="86"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="88"/>
         <source>Output path</source>
         <translation>Выходной путь</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="86"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="88"/>
         <source>Location of output objects in a shared database</source>
         <translation>Расположение выходных объектов в базе данных</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="90"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="92"/>
         <source>Document format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="90"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="92"/>
         <source>Document format of output file.</source>
         <translation>формат выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="94"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="96"/>
         <source>Accumulate objects</source>
         <translation>Объединить объекты</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="95"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="97"/>
         <source>Accumulate all incoming data in one file or create separate files for each input.In the latter case, an incremental numerical suffix is added to the file name.</source>
         <translation>объединить все данные в один файл или создать отдельные файлы. В последнем случае к имени файлов будет добавлен порядковый суффикс.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="100"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="102"/>
         <source>Split sequence</source>
         <translation>Разделить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="100"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="102"/>
         <source>Split each incoming sequence on several parts.</source>
         <translation>разделить каждую входную последовательность на несколько частей.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="104"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="106"/>
         <source>Read by lines</source>
         <translation>Читать по строкам</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="104"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="106"/>
         <source>Reads the input file line by line.</source>
         <translation>этот параметр выдает на выходной порт каждую строку входного файла по отдельности.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="108"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="110"/>
         <source>Existing file</source>
         <translation>Файл уже существует</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="108"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="110"/>
         <source>If a target file already exists, you can specify how it should be handled: either overwritten, renamed or appended (if supported by file format). If Rename option is chosen existing file will be renamed.</source>
         <translation>если указанный файл уже существует, вы можете указать как его обработать (переписать, переименовать или добавить к нему данные, если формат файла допускает добавление данных). Если выбрана опция переименовать, существующий файл будет переименован.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="114"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="116"/>
         <source>Search in</source>
         <translation>Искать в</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="114"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="116"/>
         <source>Which strands should be searched: direct, complement or both.</source>
         <translation>Ищет в прямой, комлементарной или обеих цепях последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="134"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="136"/>
         <source>both strands</source>
         <translation>обеих цепях</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="135"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="137"/>
         <source>direct strand</source>
         <translation>прямой цепи</translation>
     </message>
     <message>
-        <location filename="../src/library/BaseAttributes.cpp" line="136"/>
+        <location filename="../src/library/BaseAttributes.cpp" line="138"/>
         <source>complementary strand</source>
         <translation>комплементарной цепи</translation>
     </message>
@@ -1819,19 +1796,19 @@
 <context>
     <name>U2::Workflow::IntegralBusPort</name>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="436"/>
-        <location filename="../src/model/IntegralBusModel.cpp" line="470"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="434"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="468"/>
         <source>No input data supplied</source>
         <translation>Не обеспечен входными данными</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="484"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="482"/>
         <source>Empty input slot: %1</source>
         <translation>Пустой входной слот: %1</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="487"/>
-        <location filename="../src/model/IntegralBusModel.cpp" line="501"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="485"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="499"/>
         <source>Bad slot binding: %1 to %2</source>
         <translation>Неправильная привязка слота: %1 к %2</translation>
     </message>
@@ -1857,33 +1834,33 @@
 <context>
     <name>U2::Workflow::SchemaSerializer</name>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="250"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="251"/>
         <source>no metadata</source>
         <translation>Нет описания схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="318"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="319"/>
         <source>Invalid content: duplicate process %1</source>
         <translation>Обнаружен дублирующий идентификатор задачи: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="325"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="326"/>
         <source>Invalid content: unknown process type %1</source>
         <translation>Неизвестный тип задачи: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="356"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="357"/>
         <source>Invalid content: unknown port %1 requested for %2</source>
         <translation>Неизвестный порт %1 для задачи %2</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="385"/>
-        <location filename="../src/support/SchemaSerializer.cpp" line="392"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="386"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="393"/>
         <source>Invalid content: no such process %1 to bind</source>
         <translation>Соединение с несуществующей задачей: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/SchemaSerializer.cpp" line="404"/>
+        <location filename="../src/support/SchemaSerializer.cpp" line="405"/>
         <source>Invalid content: cannot bind [%1 : %2] to [%3 : %4]</source>
         <translation>Не удалось соединить порты задач:  [%1 : %2] к [%3 : %4]</translation>
     </message>
@@ -1899,42 +1876,42 @@
 <context>
     <name>U2::WorkflowIterationRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="138"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="163"/>
         <source>Workflow run</source>
         <translation>Запуск схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="154"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="179"/>
         <source>Unknown domain %1</source>
         <translation>Неизвестное имя среды исполнения: %1</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="204"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="228"/>
         <source>Failed to preprocess the workflow. Some of included files are broken</source>
         <translation>Не удалось предварительно обработать схему. Некоторые из включенных файлов некорректны</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="212"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="236"/>
         <source>Failed to create worker %1 %2 in domain %3</source>
         <translation>Не удалось создать процесс %1 %2 для среды исполнения %3</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="220"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="244"/>
         <source>Failed to create connection %1 %2 in domain %3</source>
         <translation>Не удалось создать соединение процессов %1 %2 для среды исполнения %3</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="233"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="257"/>
         <source>Failed to create a workflow context</source>
         <translation>Невозможно создать контекст схемы</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="295"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="319"/>
         <source>No workers are ready, while not all workers are done. Workflow is broken?</source>
         <translation>Все процессы находятся в состоянии "не готовы" (обработали входные данные), но не все процессы находятся в состоянии "завершил исполнение". Пожалуйста, проверьте схему?</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="239"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="263"/>
         <source>Failed to create scheduler in domain %1</source>
         <translation>Не удалось создать планировщик для среды исполнения %1</translation>
     </message>
@@ -1950,7 +1927,7 @@
 <context>
     <name>U2::WorkflowRunTask</name>
     <message>
-        <location filename="../src/support/WorkflowRunTask.cpp" line="56"/>
+        <location filename="../src/support/WorkflowRunTask.cpp" line="59"/>
         <source>Execute workflow</source>
         <translation>Выполнение схемы</translation>
     </message>
@@ -2047,7 +2024,7 @@
 <context>
     <name>U2::WorkflowSettings</name>
     <message>
-        <location filename="../src/support/WorkflowSettings.cpp" line="259"/>
+        <location filename="../src/support/WorkflowSettings.cpp" line="253"/>
         <source>Command line UGENE path not found, a possibility to run in separate process will be disabled</source>
         <translation>Command line UGENE path not found, a possibility to run in separate process will be disabled</translation>
     </message>
@@ -2060,92 +2037,92 @@
         <translation>Не указан обязательный параметр "%1"</translation>
     </message>
     <message>
-        <location filename="../src/model/IntegralBusModel.cpp" line="549"/>
+        <location filename="../src/model/IntegralBusModel.cpp" line="547"/>
         <source>Either parameter '%1' or input slot '%2' must be set</source>
         <translation>Необходимо указать значение для параметра "%1" либо связать входной слот "%2"</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="353"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="349"/>
         <source> (use --%1 option)</source>
         <translation> (используйте --%1 опцию)</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="403"/>
         <source><List of values></source>
         <translation><Список значений></translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="407"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="403"/>
         <source>List of values</source>
         <translation>Список значений</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="570"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="566"/>
         <source>%1 actors in workflow have '%2' alias</source>
         <translation>%1 actors in workflow have '%2' alias</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="641"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="637"/>
         <source>The %1 element is a %2. Sorry, but current version of UGENE doesn't support of filters and groupers in the includes.</source>
         <translation>%1 элемент %2. Текущая версия UGENE не поддерживает фильтрацию и группировку.</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="649"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="645"/>
         <source>filter</source>
         <translation>filter</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="651"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="647"/>
         <source>grouper</source>
         <translation>grouper</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="659"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="655"/>
         <source>The workflow has not any aliased ports</source>
         <translation>The workflow has not any aliased ports</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="676"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="672"/>
         <source>The aliased port %1.%2 has no aliased slots</source>
         <translation>The aliased port %1.%2 has no aliased slots</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="685"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="681"/>
         <source>The free port %1.%2 is not aliased</source>
         <translation>The free port %1.%2 is not aliased</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="698"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="694"/>
         <source>The required parameter %1.%2 is empty and not aliased</source>
         <translation>The required parameter %1.%2 is empty and not aliased</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="886"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="882"/>
         <source>External tool "%1" is not set. You can set it in Settings -> Preferences -> External Tools</source>
         <translation>External tool "%1" is not set. You can set it in Settings -> Preferences -> External Tools</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="890"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="886"/>
         <source>External tool "%1" is invalid. UGENE may not support this version of the tool or a wrong path to the tools is selected</source>
         <translation>External tool "%1" is invalid. UGENE may not support this version of the tool or a wrong path to the tools is selected</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1205"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1201"/>
         <source>Can't access output file path: '%1'</source>
         <translation>Can't access output file path: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1224"/>
-        <source>Can't output directory path: '%1', check permissions</source>
-        <translation>Can't output directory path: '%1', check permissions</translation>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1220"/>
+        <source>Can't output folder path: '%1', check permissions</source>
+        <translation>Can't output folder path: '%1', check permissions</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1243"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1239"/>
         <source>Empty shared database URL specified</source>
         <translation>Empty shared database URL specified</translation>
     </message>
     <message>
-        <location filename="../src/support/WorkflowUtils.cpp" line="1315"/>
+        <location filename="../src/support/WorkflowUtils.cpp" line="1311"/>
         <source>Wrong samples map string</source>
         <translation>Wrong samples map string</translation>
     </message>
diff --git a/src/corelibs/U2Private/U2Private.pri b/src/corelibs/U2Private/U2Private.pri
index 2bb44ef..2cdd231 100644
--- a/src/corelibs/U2Private/U2Private.pri
+++ b/src/corelibs/U2Private/U2Private.pri
@@ -4,7 +4,7 @@ UGENE_RELATIVE_DESTDIR = ''
 MODULE_ID=U2Private
 include( ../../ugene_lib_common.pri )
 
-QT += xml
+QT += xml widgets network
 DEFINES += QT_FATAL_ASSERT BUILDING_U2PRIVATE_DLL
 LIBS += -L../../_release -lU2Core -lU2Formats -lbreakpad
 INCLUDEPATH += ../../libs_3rdparty/breakpad/src
diff --git a/src/corelibs/U2Private/src/AppContextImpl.cpp b/src/corelibs/U2Private/src/AppContextImpl.cpp
index c81f1ec..bffd6bc 100644
--- a/src/corelibs/U2Private/src/AppContextImpl.cpp
+++ b/src/corelibs/U2Private/src/AppContextImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/AppContextImpl.h b/src/corelibs/U2Private/src/AppContextImpl.h
index 5f7e0bf..29fc3f1 100644
--- a/src/corelibs/U2Private/src/AppContextImpl.h
+++ b/src/corelibs/U2Private/src/AppContextImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/AppSettingsImpl.cpp b/src/corelibs/U2Private/src/AppSettingsImpl.cpp
index f672be8..85b63a7 100644
--- a/src/corelibs/U2Private/src/AppSettingsImpl.cpp
+++ b/src/corelibs/U2Private/src/AppSettingsImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/AppSettingsImpl.h b/src/corelibs/U2Private/src/AppSettingsImpl.h
index 931492a..35ca8c4 100644
--- a/src/corelibs/U2Private/src/AppSettingsImpl.h
+++ b/src/corelibs/U2Private/src/AppSettingsImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/ConsoleLogDriver.cpp b/src/corelibs/U2Private/src/ConsoleLogDriver.cpp
index 83764d7..287a964 100644
--- a/src/corelibs/U2Private/src/ConsoleLogDriver.cpp
+++ b/src/corelibs/U2Private/src/ConsoleLogDriver.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/ConsoleLogDriver.h b/src/corelibs/U2Private/src/ConsoleLogDriver.h
index 82f29b3..5bcf749 100644
--- a/src/corelibs/U2Private/src/ConsoleLogDriver.h
+++ b/src/corelibs/U2Private/src/ConsoleLogDriver.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/CredentialsAskerCli.cpp b/src/corelibs/U2Private/src/CredentialsAskerCli.cpp
index 5cbf266..612f099 100644
--- a/src/corelibs/U2Private/src/CredentialsAskerCli.cpp
+++ b/src/corelibs/U2Private/src/CredentialsAskerCli.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
+#include <qglobal.h>
 #ifdef Q_OS_WIN
 #include <conio.h>
 #endif
diff --git a/src/corelibs/U2Private/src/CredentialsAskerCli.h b/src/corelibs/U2Private/src/CredentialsAskerCli.h
index cd418b7..5b8177d 100644
--- a/src/corelibs/U2Private/src/CredentialsAskerCli.h
+++ b/src/corelibs/U2Private/src/CredentialsAskerCli.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.cpp b/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.cpp
index a04629a..fcce3bf 100644
--- a/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.cpp
+++ b/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,8 @@
 #include <U2Formats/ASNFormat.h>
 #include <U2Formats/AceFormat.h>
 #include <U2Formats/AceImporter.h>
+#include <U2Formats/AprFormat.h>
+#include <U2Formats/AprImporter.h>
 #include <U2Formats/BedFormat.h>
 #include <U2Formats/ClustalWAlnFormat.h>
 #include <U2Formats/DatabaseConnectionFormat.h>
@@ -64,7 +66,7 @@
 namespace U2 {
 
 bool DocumentFormatRegistryImpl::registerFormat(DocumentFormat* f) {
-    assert(getFormatById(f->getFormatId())==NULL);
+    SAFE_POINT(getFormatById(f->getFormatId()) == NULL, "Existing format", false);
     formats.push_back(f);
     emit si_documentFormatRegistered(f);
     if (f->getFormatDescription().isEmpty()) {
@@ -112,7 +114,7 @@ bool DocumentFormatRegistryImpl::unregisterFormat(DocumentFormat* f) {
 
 DocumentFormat* DocumentFormatRegistryImpl::getFormatById(DocumentFormatId id) const {
     foreach (DocumentFormat* f, formats) {
-        if (f->getFormatId() == id) {
+        if (BaseDocumentFormats::equal(f->getFormatId(), id)) {
             return f;
         }
     }
@@ -194,9 +196,15 @@ void DocumentFormatRegistryImpl::init() {
     ACEFormat *aceFormat = new ACEFormat(this);
     registerFormat(aceFormat);
 
+    AprFormat *apr = new AprFormat(this);
+    registerFormat(apr);
+
     AceImporter *aceImporter = new AceImporter();
     importSupport.addDocumentImporter(aceImporter);
 
+    AprImporter* aprImporter = new AprImporter();
+    importSupport.addDocumentImporter(aprImporter);
+
     PDWFormat *pdw = new PDWFormat(this);
     registerFormat(pdw);
 
diff --git a/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.h b/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.h
index 4b4c52a..ba6856a 100644
--- a/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.h
+++ b/src/corelibs/U2Private/src/DocumentFormatRegistryImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/IOAdapterRegistryImpl.cpp b/src/corelibs/U2Private/src/IOAdapterRegistryImpl.cpp
index df40b27..fab3ac3 100644
--- a/src/corelibs/U2Private/src/IOAdapterRegistryImpl.cpp
+++ b/src/corelibs/U2Private/src/IOAdapterRegistryImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/IOAdapterRegistryImpl.h b/src/corelibs/U2Private/src/IOAdapterRegistryImpl.h
index 6985143..5fe3615 100644
--- a/src/corelibs/U2Private/src/IOAdapterRegistryImpl.h
+++ b/src/corelibs/U2Private/src/IOAdapterRegistryImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/LogSettings.cpp b/src/corelibs/U2Private/src/LogSettings.cpp
index ed59b16..cc19d44 100644
--- a/src/corelibs/U2Private/src/LogSettings.cpp
+++ b/src/corelibs/U2Private/src/LogSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/Settings.h>
 #include <U2Core/CMDLineRegistry.h>
 
-#include <QtGui/QColor>
+#include <QColor>
 
 #define SETTINGS_ROOT QString("log_settings/")
 
diff --git a/src/corelibs/U2Private/src/LogSettings.h b/src/corelibs/U2Private/src/LogSettings.h
index 5a5b446..18a3d7b 100644
--- a/src/corelibs/U2Private/src/LogSettings.h
+++ b/src/corelibs/U2Private/src/LogSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/Log.h>
 #include <U2Core/AppContext.h>
 
-#include <QtCore/QHash>
+#include <QHash>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/PluginDescriptor.cpp b/src/corelibs/U2Private/src/PluginDescriptor.cpp
index 696f924..00f6d35 100644
--- a/src/corelibs/U2Private/src/PluginDescriptor.cpp
+++ b/src/corelibs/U2Private/src/PluginDescriptor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 #include <U2Core/L10n.h>
 #include <U2Core/GAutoDeleteList.h>
 
-#include <QtCore/QDir>
-#include <QtXml/QDomDocument>
+#include <QDir>
+#include <QDomDocument>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2Private/src/PluginDescriptor.h b/src/corelibs/U2Private/src/PluginDescriptor.h
index 2c2842e..88beb8c 100644
--- a/src/corelibs/U2Private/src/PluginDescriptor.h
+++ b/src/corelibs/U2Private/src/PluginDescriptor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_PLUGINDESCRIPTOR_H_
 #define _U2_PLUGINDESCRIPTOR_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 #include <U2Core/Version.h>
 #include <U2Core/GUrl.h>
@@ -90,7 +92,7 @@ public:
 class U2PRIVATE_EXPORT PluginDescriptorHelper: public QObject {
     Q_OBJECT
 private:
-    PluginDescriptorHelper() {};
+    PluginDescriptorHelper() {}
 public:
     static PluginDesc readPluginDescriptor(const QString& url, QString& error);
 
diff --git a/src/corelibs/U2Private/src/PluginSupportImpl.cpp b/src/corelibs/U2Private/src/PluginSupportImpl.cpp
index 84f56fd..63491e3 100644
--- a/src/corelibs/U2Private/src/PluginSupportImpl.cpp
+++ b/src/corelibs/U2Private/src/PluginSupportImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,10 +30,10 @@
 #include <U2Core/L10n.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QLibrary>
-#include <QtCore/QDir>
-#include <QtCore/QSet>
+#include <QCoreApplication>
+#include <QLibrary>
+#include <QDir>
+#include <QSet>
 
 #include <U2Gui/MainWindow.h>
 
@@ -451,10 +451,19 @@ void AddPluginTask::prepare() {
     SAFE_POINT(settings != NULL, tr("Settings is NULL"), );
     QString checkVersion = settings->getValue(PLUGIN_VERIFICATION + desc.id, "").toString();
 
-    PLUG_VERIFY_FUNC verify_func = PLUG_VERIFY_FUNC(lib->resolve(U2_PLUGIN_VERIFY_NAME));
-    if (verify_func && !verificationMode && (checkVersion != Version::appVersion().text || forceVerification)) {
-        verifyTask = new VerifyPluginTask(ps, desc);
-        addSubTask(verifyTask);
+    bool verificationIsEnabled = true;
+#ifdef Q_OS_MAC
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1) {
+        verificationIsEnabled = false;
+    }
+#endif
+
+    if (verificationIsEnabled) {
+        PLUG_VERIFY_FUNC verify_func = PLUG_VERIFY_FUNC(lib->resolve(U2_PLUGIN_VERIFY_NAME));
+        if (verify_func && !verificationMode && (checkVersion != Version::appVersion().text || forceVerification)) {
+            verifyTask = new VerifyPluginTask(ps, desc);
+            addSubTask(verifyTask);
+        }
     }
 }
 
diff --git a/src/corelibs/U2Private/src/PluginSupportImpl.h b/src/corelibs/U2Private/src/PluginSupportImpl.h
index aceb3e1..0175d04 100644
--- a/src/corelibs/U2Private/src/PluginSupportImpl.h
+++ b/src/corelibs/U2Private/src/PluginSupportImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,11 @@
 #include <U2Core/PluginModel.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QLibrary>
-#include <QtCore/QDir>
+#include <QLibrary>
+#include <QDir>
 
 #include "PluginDescriptor.h"
-#include <QtCore/QProcess>
+#include <QProcess>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/ServiceRegistryImpl.cpp b/src/corelibs/U2Private/src/ServiceRegistryImpl.cpp
index a2cd8b9..4892429 100644
--- a/src/corelibs/U2Private/src/ServiceRegistryImpl.cpp
+++ b/src/corelibs/U2Private/src/ServiceRegistryImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/CMDLineCoreOptions.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QTimerEvent>
+#include <QTimerEvent>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/ServiceRegistryImpl.h b/src/corelibs/U2Private/src/ServiceRegistryImpl.h
index 56673bc..aee1e21 100644
--- a/src/corelibs/U2Private/src/ServiceRegistryImpl.h
+++ b/src/corelibs/U2Private/src/ServiceRegistryImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/ServiceModel.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QMap>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/SettingsImpl.cpp b/src/corelibs/U2Private/src/SettingsImpl.cpp
index 34df501..8ce566d 100644
--- a/src/corelibs/U2Private/src/SettingsImpl.cpp
+++ b/src/corelibs/U2Private/src/SettingsImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/CMDLineRegistry.h>
 #include <U2Core/CMDLineCoreOptions.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QProcess>
+#include <QDir>
+#include <QProcess>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/SettingsImpl.h b/src/corelibs/U2Private/src/SettingsImpl.h
index 3288bf4..735bcfb 100644
--- a/src/corelibs/U2Private/src/SettingsImpl.h
+++ b/src/corelibs/U2Private/src/SettingsImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include "U2Core/global.h"
 #include <U2Core/Settings.h>
 
-#include <QtCore/QSettings>
-#include <QtCore/QMutex>
+#include <QSettings>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/SleepPreventerMac.cpp b/src/corelibs/U2Private/src/SleepPreventerMac.cpp
index 7e42b10..29bcec7 100644
--- a/src/corelibs/U2Private/src/SleepPreventerMac.cpp
+++ b/src/corelibs/U2Private/src/SleepPreventerMac.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/SleepPreventerMac.h b/src/corelibs/U2Private/src/SleepPreventerMac.h
index 2b6f0bf..c8a64fb 100644
--- a/src/corelibs/U2Private/src/SleepPreventerMac.h
+++ b/src/corelibs/U2Private/src/SleepPreventerMac.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp b/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
index 559bbbc..3a84f42 100644
--- a/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
+++ b/src/corelibs/U2Private/src/TaskSchedulerImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,8 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/L10n.h>
 
-#include <QtCore/QVector>
-#include <QtCore/QCoreApplication>
+#include <QVector>
+#include <QCoreApplication>
 
 /* TRANSLATOR U2::TaskSchedulerImpl */
 
diff --git a/src/corelibs/U2Private/src/TaskSchedulerImpl.h b/src/corelibs/U2Private/src/TaskSchedulerImpl.h
index d295abf..d401e37 100644
--- a/src/corelibs/U2Private/src/TaskSchedulerImpl.h
+++ b/src/corelibs/U2Private/src/TaskSchedulerImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,10 +25,11 @@
 #include <U2Core/global.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QThread>
-#include <QtCore/QTimer>
-#include <QtCore/QMutex>
-#include <QtCore/QWaitCondition>
+#include <QThread>
+#include <QTimer>
+#include <QMap>
+#include <QMutex>
+#include <QWaitCondition>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
index 68b96a5..feb9855 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandler.h b/src/corelibs/U2Private/src/crash_handler/CrashHandler.h
index c3d2ba5..371de2c 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandler.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
index 704fd73..5238fd5 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.h
index 19a45e9..6194cab 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerArgsHelper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.cpp
index d2e05ac..c8a664c 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.h
index acaaa5b..3a42458 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivate.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
index e55660b..0891e11 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.h
index be9c458..8e95baf 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateMac.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
index 3478af2..ef7ac57 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.h
index 7a8f8fc..aace50b 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateUnixNotMac.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
index 4f4b10e..003c74b 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
index 24387f2..30de677 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashHandlerPrivateWin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashLogCache.cpp b/src/corelibs/U2Private/src/crash_handler/CrashLogCache.cpp
index 3498fce..f64b270 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashLogCache.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/CrashLogCache.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/CrashLogCache.h b/src/corelibs/U2Private/src/crash_handler/CrashLogCache.h
index b3cef1b..496aa3c 100644
--- a/src/corelibs/U2Private/src/crash_handler/CrashLogCache.h
+++ b/src/corelibs/U2Private/src/crash_handler/CrashLogCache.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Private/src/crash_handler/StackWalker.cpp b/src/corelibs/U2Private/src/crash_handler/StackWalker.cpp
index e1ae883..bb7ecca 100644
--- a/src/corelibs/U2Private/src/crash_handler/StackWalker.cpp
+++ b/src/corelibs/U2Private/src/crash_handler/StackWalker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,8 +62,8 @@
 #include <fstream>
 
 #include <dbghelp.h>
-#include <QtCore/QFile>
-#include <QtCore/QStringList>
+#include <QFile>
+#include <QStringList>
 
 #define USED_CONTEXT_FLAGS CONTEXT_ALL
 
@@ -200,7 +200,7 @@ public:
     HANDLE m_hProcess;
     LPSTR m_szSymPath;
 
-    typedef struct IMAGEHLP_MODULE64_V2 {
+    typedef struct _IMAGEHLP_MODULE64_V2 {
         DWORD    SizeOfStruct;           // set to sizeof(IMAGEHLP_MODULE64)
         DWORD64  BaseOfImage;            // base load address of module
         DWORD    ImageSize;              // virtual size of the loaded module
@@ -211,7 +211,7 @@ public:
         CHAR     ModuleName[32];         // module name
         CHAR     ImageName[256];         // image name
         CHAR     LoadedImageName[256];   // symbol file name
-    };
+    } IMAGEHLP_MODULE64_V2;
 
 
     // SymCleanup()
@@ -619,7 +619,7 @@ BOOL StackWalker::LoadModules() {
 
         const size_t nTempLen = 1024;
         char szTemp[nTempLen];
-        // Now add the current directory:
+        // Now add the current folder:
         if (GetCurrentDirectoryA(nTempLen, szTemp) > 0) {
             szTemp[nTempLen-1] = 0;
             strcat_s(szSymPath, nSymPathLen, szTemp);
@@ -655,7 +655,7 @@ BOOL StackWalker::LoadModules() {
             szTemp[nTempLen-1] = 0;
             strcat_s(szSymPath, nSymPathLen, szTemp);
             strcat_s(szSymPath, nSymPathLen, ";");
-            // also add the "system32"-directory:
+            // also add the "system32"-folder:
             strcat_s(szTemp, nTempLen, "\\system32");
             strcat_s(szSymPath, nSymPathLen, szTemp);
             strcat_s(szSymPath, nSymPathLen, ";");
diff --git a/src/corelibs/U2Private/src/crash_handler/StackWalker.h b/src/corelibs/U2Private/src/crash_handler/StackWalker.h
index 0cfaf62..eb59031 100644
--- a/src/corelibs/U2Private/src/crash_handler/StackWalker.h
+++ b/src/corelibs/U2Private/src/crash_handler/StackWalker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,15 +52,15 @@
 #ifndef _STACK_WALKER_H_
 #define _STACK_WALKER_H_
 
-#include <QtCore/qglobal.h>
+#include <qglobal.h>
 
 #if defined (Q_OS_WIN)
 
 #include <windows.h>
 #include <wtypes.h>
 
-#include <QtCore/QString>
-#include <QtCore/QMap>
+#include <QString>
+#include <QMap>
 
 namespace U2 {
 
@@ -152,7 +152,7 @@ protected:
         CHAR loadedImageName[STACKWALK_MAX_NAMELEN];
     } CallstackEntry;
 
-    typedef enum CallstackEntryType {firstEntry, nextEntry, lastEntry};
+    typedef enum {firstEntry, nextEntry, lastEntry} CallstackEntryType;
 
     virtual void OnSymInit(LPCSTR szSearchPath, DWORD symOptions, LPCSTR szUserName);
     virtual void OnLoadModule(LPCSTR img, LPCSTR mod, DWORD64 baseAddr, DWORD size, DWORD result, LPCSTR symType, LPCSTR pdbName, ULONGLONG fileVersion);
diff --git a/src/corelibs/U2Private/transl/english.ts b/src/corelibs/U2Private/transl/english.ts
index 0eef5d1..9cfc178 100644
--- a/src/corelibs/U2Private/transl/english.ts
+++ b/src/corelibs/U2Private/transl/english.ts
@@ -67,20 +67,20 @@
     <message>
         <location filename="../src/PluginSupportImpl.cpp" line="451"/>
         <source>Settings is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Settings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="481"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="490"/>
         <source>Plugin loading error: %1. Verification failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Plugin loading error: %1. Verification failed.</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="513"/>
         <source>Plugin initialization routine was not found: %1</source>
         <translation>Plugin initialization routine was not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="510"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="519"/>
         <source>Plugin initialization failed: %1</source>
         <translation>Plugin initialization failed: %1</translation>
     </message>
@@ -176,7 +176,7 @@ By default, loglevel="ERROR".</translation>
 <context>
     <name>U2::DocumentFormatRegistryImpl</name>
     <message>
-        <location filename="../src/DocumentFormatRegistryImpl.cpp" line="225"/>
+        <location filename="../src/DocumentFormatRegistryImpl.cpp" line="233"/>
         <source>UGENE Database</source>
         <translation>UGENE Database</translation>
     </message>
@@ -359,7 +359,7 @@ By default, loglevel="ERROR".</translation>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="118"/>
         <source>There is not enough memory to finish the task.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to finish the task.</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="140"/>
@@ -463,7 +463,7 @@ By default, loglevel="ERROR".</translation>
 <context>
     <name>U2::VerifyPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="539"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="548"/>
         <source>Verify plugin task: %1</source>
         <translation>Verify plugin task: %1</translation>
     </message>
diff --git a/src/corelibs/U2Private/transl/russian.ts b/src/corelibs/U2Private/transl/russian.ts
index d1913cf..63511ce 100644
--- a/src/corelibs/U2Private/transl/russian.ts
+++ b/src/corelibs/U2Private/transl/russian.ts
@@ -66,20 +66,20 @@
     <message>
         <location filename="../src/PluginSupportImpl.cpp" line="451"/>
         <source>Settings is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>Settings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="481"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="490"/>
         <source>Plugin loading error: %1. Verification failed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Plugin loading error: %1. Verification failed.</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="504"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="513"/>
         <source>Plugin initialization routine was not found: %1</source>
         <translation>Не найдена входная функция библиотеки модуля: %1</translation>
     </message>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="510"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="519"/>
         <source>Plugin initialization failed: %1</source>
         <translation>Ошибка инициализации модуля: %1</translation>
     </message>
@@ -175,7 +175,7 @@ By default, loglevel="ERROR".</source>
 <context>
     <name>U2::DocumentFormatRegistryImpl</name>
     <message>
-        <location filename="../src/DocumentFormatRegistryImpl.cpp" line="225"/>
+        <location filename="../src/DocumentFormatRegistryImpl.cpp" line="233"/>
         <source>UGENE Database</source>
         <translation>База данных UGENE</translation>
     </message>
@@ -358,7 +358,7 @@ By default, loglevel="ERROR".</source>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="118"/>
         <source>There is not enough memory to finish the task.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to finish the task.</translation>
     </message>
     <message>
         <location filename="../src/TaskSchedulerImpl.cpp" line="140"/>
@@ -462,7 +462,7 @@ By default, loglevel="ERROR".</source>
 <context>
     <name>U2::VerifyPluginTask</name>
     <message>
-        <location filename="../src/PluginSupportImpl.cpp" line="539"/>
+        <location filename="../src/PluginSupportImpl.cpp" line="548"/>
         <source>Verify plugin task: %1</source>
         <translation>Задача верификации модуля: %1</translation>
     </message>
diff --git a/src/corelibs/U2Script/U2Script.pri b/src/corelibs/U2Script/U2Script.pri
index 5d975ae..55fd6ba 100644
--- a/src/corelibs/U2Script/U2Script.pri
+++ b/src/corelibs/U2Script/U2Script.pri
@@ -8,7 +8,7 @@ UGENE_RELATIVE_DESTDIR = ''
 
 DEFINES +=          QT_FATAL_ASSERT BUILDING_U2SCRIPT_DLL
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+QT += network xml widgets
 
 INCLUDEPATH +=      ../../include \
                     ../U2Private/src
diff --git a/src/corelibs/U2Script/src/CommonDbi.cpp b/src/corelibs/U2Script/src/CommonDbi.cpp
index 458eea1..81da240 100644
--- a/src/corelibs/U2Script/src/CommonDbi.cpp
+++ b/src/corelibs/U2Script/src/CommonDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QFileInfo>
+#include <QCoreApplication>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -66,7 +66,7 @@ static ObjectType toObjectType( U2::GObjectType type ) {
     ObjectType result = UNSUPPORTED;
     if ( U2::GObjectTypes::SEQUENCE == type ) {
         result = SEQUENCE;
-    } else if ( U2::GObjectTypes::MULTIPLE_ALIGNMENT == type ) {
+    } else if ( U2::GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT == type ) {
         result = MSA;
     }
     return result;
@@ -143,7 +143,7 @@ U2SCRIPT_EXPORT void saveObjectsToFile( UgeneDbHandle *objects, int objectCount,
         QCoreApplication::applicationDirPath( ) + "/" + QString( url ) );
     U2OpStatusImpl stateInfo;
     adoptedUrl =  GUrlUtils::prepareFileLocation( adoptedUrl.getURLString( ), stateInfo );
-    CHECK_OP_EXT( stateInfo, coreLog.error( QString( "Could not prepare directory"
+    CHECK_OP_EXT( stateInfo, coreLog.error( QString( "Could not prepare folder"
         " according to supplied path \"%1\"" ).arg( url ) ), );
     Document *doc = docFormat->createNewLoadedDocument( IOAdapterUtils::get(
         BaseIOAdapters::LOCAL_FILE ), adoptedUrl, stateInfo );
diff --git a/src/corelibs/U2Script/src/CommonDbi.h b/src/corelibs/U2Script/src/CommonDbi.h
index fccd4f9..3cf67ff 100644
--- a/src/corelibs/U2Script/src/CommonDbi.h
+++ b/src/corelibs/U2Script/src/CommonDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/FormatDetection.cpp b/src/corelibs/U2Script/src/FormatDetection.cpp
index 2e2b5cb..7944600 100644
--- a/src/corelibs/U2Script/src/FormatDetection.cpp
+++ b/src/corelibs/U2Script/src/FormatDetection.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentUtils.h>
diff --git a/src/corelibs/U2Script/src/FormatDetection.h b/src/corelibs/U2Script/src/FormatDetection.h
index d591740..99dab3d 100644
--- a/src/corelibs/U2Script/src/FormatDetection.h
+++ b/src/corelibs/U2Script/src/FormatDetection.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@ typedef enum U2Format {
  *
  * Possible returning error codes:
  * U2_OK -                 success
- * U2_INVALID_PATH -       the `pathToFile` does not exist or contains path to a directory
+ * U2_INVALID_PATH -       the `pathToFile` does not exist or contains path to a folder
  *
  */
 U2SCRIPT_EXPORT U2ErrorType         detectFileFormat(   const wchar_t *     pathToFile,
diff --git a/src/corelibs/U2Script/src/SchemeHandle.cpp b/src/corelibs/U2Script/src/SchemeHandle.cpp
index aff8251..67567d7 100644
--- a/src/corelibs/U2Script/src/SchemeHandle.cpp
+++ b/src/corelibs/U2Script/src/SchemeHandle.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/SchemeHandle.h b/src/corelibs/U2Script/src/SchemeHandle.h
index efbbdca..d99812a 100644
--- a/src/corelibs/U2Script/src/SchemeHandle.h
+++ b/src/corelibs/U2Script/src/SchemeHandle.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,7 +41,7 @@ extern "C" {
  *
  * Possible returning error codes:
  * U2_OK -                      success
- * U2_FAILED_TO_CREATE_DIR -    failed to create a directory for temporary files
+ * U2_FAILED_TO_CREATE_DIR -    failed to create a folder for temporary files
  * U2_FAILED_TO_CREATE_FILE -   failed to create temporary file describing scheme
  * U2_FAILED_TO_READ_FILE -     failed to open the file given by the `pathToScheme` parameter
  * U2_INVALID_CALL -            UGENE environment has not been properly initialized
@@ -74,7 +74,7 @@ U2SCRIPT_EXPORT U2ErrorType     createScheme(                const wchar_t *
  * U2_OK -                      success
  * U2_ELEMENT_NOT_SUIT_SAS -    the `algorithmType` contains an element type name
  *                                  that does not suit for SAS
- * U2_FAILED_TO_CREATE_DIR -    failed to create a directory for temporary files
+ * U2_FAILED_TO_CREATE_DIR -    failed to create a folder for temporary files
  * U2_FAILED_TO_CREATE_FILE -   failed to create temporary file describing scheme
  * U2_INVALID_CALL -            UGENE environment has not been properly initialized
  * U2_INVALID_STRING -          `algorithmType` is an empty string
@@ -297,7 +297,7 @@ U2SCRIPT_EXPORT U2ErrorType     addSchemeActorsBinding(      SchemeHandle
  * This function saves the computational scheme described by the `scheme` object to file
  * in UWL format which path is specified by the `path` parameter
  *
- * The `path` parameter has to specify some file within existing directory.
+ * The `path` parameter has to specify some file within existing folder.
  * The function does not succeed if these conditions are not satisfied.
  *
  * Possible returning error codes:
@@ -369,7 +369,7 @@ U2SCRIPT_EXPORT U2ErrorType         launchScheme(            SchemeHandle
  * U2_OK -                      success
  * U2_ELEMENT_NOT_SUIT_SAS -    the `algorithmType` contains an element type name
  *                                  that does not suit for SAS
- * U2_FAILED_TO_CREATE_DIR -    failed to create a directory for temporary files
+ * U2_FAILED_TO_CREATE_DIR -    failed to create a folder for temporary files
  * U2_FAILED_TO_CREATE_FILE -   failed to create temporary file describing scheme
  * U2_INVALID_CALL -            UGENE environment has not been properly initialized
  * U2_INVALID_STRING -          at least one argument is null pointer
diff --git a/src/corelibs/U2Script/src/SchemeWrapper.cpp b/src/corelibs/U2Script/src/SchemeWrapper.cpp
index 2ec6a27..d71ec16 100644
--- a/src/corelibs/U2Script/src/SchemeWrapper.cpp
+++ b/src/corelibs/U2Script/src/SchemeWrapper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QFile>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
+
 #include <U2Lang/BaseAttributes.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/HRSchemaSerializer.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include "WorkflowElementFacade.h"
 #include "SchemeWrapper.h"
+#include "WorkflowElementFacade.h"
 
 static const QString TMP_FILE_NAME_BASE =   "scheme_for_script";
 static QString NAME_ATTR_PATTERN =          "\\s" + U2::WorkflowSerialize::Constants::NAME_ATTR + "\\s*"
diff --git a/src/corelibs/U2Script/src/SchemeWrapper.h b/src/corelibs/U2Script/src/SchemeWrapper.h
index e77793b..6ed0bd6 100644
--- a/src/corelibs/U2Script/src/SchemeWrapper.h
+++ b/src/corelibs/U2Script/src/SchemeWrapper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _SCHEME_WRAPPER_H_
 #define _SCHEME_WRAPPER_H_
 
-#include <QtCore/QMap>
-#include <QtCore/QString>
+#include <QMap>
+#include <QString>
 
 #include "globals.h"
 
diff --git a/src/corelibs/U2Script/src/TextConversionUtils.cpp b/src/corelibs/U2Script/src/TextConversionUtils.cpp
index eab8fa6..240f02f 100644
--- a/src/corelibs/U2Script/src/TextConversionUtils.cpp
+++ b/src/corelibs/U2Script/src/TextConversionUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/TextConversionUtils.h b/src/corelibs/U2Script/src/TextConversionUtils.h
index 1e8b416..ec5f591 100644
--- a/src/corelibs/U2Script/src/TextConversionUtils.h
+++ b/src/corelibs/U2Script/src/TextConversionUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_TEXT_CONVERSION_UTILS_H_
 #define _U2_TEXT_CONVERSION_UTILS_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 #include "globals.h"
 
diff --git a/src/corelibs/U2Script/src/U2Script.cpp b/src/corelibs/U2Script/src/U2Script.cpp
index 4266bb7..4d730d9 100644
--- a/src/corelibs/U2Script/src/U2Script.cpp
+++ b/src/corelibs/U2Script/src/U2Script.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Task.h>
diff --git a/src/corelibs/U2Script/src/U2Script.h b/src/corelibs/U2Script/src/U2Script.h
index 4e903f0..3bf27a8 100644
--- a/src/corelibs/U2Script/src/U2Script.h
+++ b/src/corelibs/U2Script/src/U2Script.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@ extern "C" {
  *
  * If returning value is not U2_OK the environment is not affected by the invocation.
  *
- * If the `workingDirectoryPath` is valid but the directory contains no UGENE binaries
+ * If the `workingDirectoryPath` is valid but the folder contains no UGENE binaries
  * then UGENE plugins is not found. But the Workflow Designer computational elements
  * are defined in plugins, so the computational schemes do not pass the validation
  * since they use undefined elements.
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
index 0b71acc..8f8fbed 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -110,7 +110,7 @@ static void setDataSearchPaths( ) {
     }
 
 #if (defined(Q_OS_UNIX)) && defined( UGENE_DATA_DIR )
-    //using directory which is set during installation process on Linux
+    //using folder which is set during installation process on Linux
     const QString ugene_data_dir( UGENE_DATA_DIR );
     if( QDir( ugene_data_dir ).exists( ) ) {
         dataSearchPaths.push_back( QString( UGENE_DATA_DIR ) );
diff --git a/src/corelibs/U2Script/src/UgeneContextWrapper.h b/src/corelibs/U2Script/src/UgeneContextWrapper.h
index aeff9cf..9e62f75 100644
--- a/src/corelibs/U2Script/src/UgeneContextWrapper.h
+++ b/src/corelibs/U2Script/src/UgeneContextWrapper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _UGENE_CONTEXT_WRAPPER_H_
 #define _UGENE_CONTEXT_WRAPPER_H_
 
-#include <QtCore/QCoreApplication>
+#include <QCoreApplication>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Script/src/WorkflowElementFacade.cpp b/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
index 5c151da..ce2dffe 100644
--- a/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
+++ b/src/corelibs/U2Script/src/WorkflowElementFacade.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/WorkflowEnv.h>
diff --git a/src/corelibs/U2Script/src/WorkflowElementFacade.h b/src/corelibs/U2Script/src/WorkflowElementFacade.h
index 0f4276c..a05e3b2 100644
--- a/src/corelibs/U2Script/src/WorkflowElementFacade.h
+++ b/src/corelibs/U2Script/src/WorkflowElementFacade.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _WORKFLOW_ELEMENT_FACADE_H_
 #define _WORKFLOW_ELEMENT_FACADE_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 #include "globals.h"
 
diff --git a/src/corelibs/U2Script/src/globals.cpp b/src/corelibs/U2Script/src/globals.cpp
index a60568b..17bef42 100644
--- a/src/corelibs/U2Script/src/globals.cpp
+++ b/src/corelibs/U2Script/src/globals.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,7 +48,7 @@ U2SCRIPT_EXPORT const wchar_t *getErrorString( U2ErrorType type ) {
     case U2_FAILED_TO_CREATE_FILE :
         return L"unable to create file";
     case U2_FAILED_TO_CREATE_DIR :
-        return L"unable to create directory";
+        return L"unable to create folder";
     case U2_ELEMENT_NOT_SUIT_SAS :
         return L"the requested algorithm cannot be used in SAS";
     case U2_FAILED_TO_READ_FILE :
diff --git a/src/corelibs/U2Script/src/globals.h b/src/corelibs/U2Script/src/globals.h
index 1b1e8c7..b3b0dd3 100644
--- a/src/corelibs/U2Script/src/globals.h
+++ b/src/corelibs/U2Script/src/globals.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/ActorWrap.cpp b/src/corelibs/U2Script/src/js/ActorWrap.cpp
index 5708903..e6202f0 100644
--- a/src/corelibs/U2Script/src/js/ActorWrap.cpp
+++ b/src/corelibs/U2Script/src/js/ActorWrap.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/ActorWrap.h b/src/corelibs/U2Script/src/js/ActorWrap.h
index c3e2764..48a4f8c 100644
--- a/src/corelibs/U2Script/src/js/ActorWrap.h
+++ b/src/corelibs/U2Script/src/js/ActorWrap.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/DebugStatusWrap.cpp b/src/corelibs/U2Script/src/js/DebugStatusWrap.cpp
index 37f1730..723bfc6 100644
--- a/src/corelibs/U2Script/src/js/DebugStatusWrap.cpp
+++ b/src/corelibs/U2Script/src/js/DebugStatusWrap.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/DebugStatusWrap.h b/src/corelibs/U2Script/src/js/DebugStatusWrap.h
index 97bf344..c161471 100644
--- a/src/corelibs/U2Script/src/js/DebugStatusWrap.h
+++ b/src/corelibs/U2Script/src/js/DebugStatusWrap.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/JsContext.cpp b/src/corelibs/U2Script/src/js/JsContext.cpp
index 43c0a66..be742f7 100644
--- a/src/corelibs/U2Script/src/js/JsContext.cpp
+++ b/src/corelibs/U2Script/src/js/JsContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/JsContext.h b/src/corelibs/U2Script/src/js/JsContext.h
index a831e90..c3356d4 100644
--- a/src/corelibs/U2Script/src/js/JsContext.h
+++ b/src/corelibs/U2Script/src/js/JsContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/JsScheduler.cpp b/src/corelibs/U2Script/src/js/JsScheduler.cpp
index 020f42f..d2ca4f1 100644
--- a/src/corelibs/U2Script/src/js/JsScheduler.cpp
+++ b/src/corelibs/U2Script/src/js/JsScheduler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/JsScheduler.h b/src/corelibs/U2Script/src/js/JsScheduler.h
index c17234c..3b1adee 100644
--- a/src/corelibs/U2Script/src/js/JsScheduler.h
+++ b/src/corelibs/U2Script/src/js/JsScheduler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/NodeApiUtils.cpp b/src/corelibs/U2Script/src/js/NodeApiUtils.cpp
index f049b3a..fde96ba 100644
--- a/src/corelibs/U2Script/src/js/NodeApiUtils.cpp
+++ b/src/corelibs/U2Script/src/js/NodeApiUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/js/NodeApiUtils.h b/src/corelibs/U2Script/src/js/NodeApiUtils.h
index 596cc13..efbc887 100644
--- a/src/corelibs/U2Script/src/js/NodeApiUtils.h
+++ b/src/corelibs/U2Script/src/js/NodeApiUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Script/src/python/u2py_internals.c b/src/corelibs/U2Script/src/python/u2py_internals.c
index 15cb940..527a613 100644
--- a/src/corelibs/U2Script/src/python/u2py_internals.c
+++ b/src/corelibs/U2Script/src/python/u2py_internals.c
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Test/U2Test.pri b/src/corelibs/U2Test/U2Test.pri
index e101e50..17e43b2 100644
--- a/src/corelibs/U2Test/U2Test.pri
+++ b/src/corelibs/U2Test/U2Test.pri
@@ -4,8 +4,7 @@ UGENE_RELATIVE_DESTDIR = ''
 MODULE_ID=U2Test
 include( ../../ugene_lib_common.pri )
 
-QT += xml gui
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+QT += xml gui widgets
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2TEST_DLL
 LIBS += -L../../_release -lU2Core -lhumimit
 INCLUDEPATH += ../../libs_3rdparty/QSpec/src
diff --git a/src/corelibs/U2Test/src/GTest.cpp b/src/corelibs/U2Test/src/GTest.cpp
index 8a0f70c..518de4d 100644
--- a/src/corelibs/U2Test/src/GTest.cpp
+++ b/src/corelibs/U2Test/src/GTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTest.h"
-
 #include <assert.h>
 
+#include <QDir>
+#include <QDomDocument>
+#include <QFile>
+#include <QMap>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/Timer.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QFile>
-#include <QMap>
-
+#include "GTest.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Test/src/GTest.h b/src/corelibs/U2Test/src/GTest.h
index 9aa90cc..9f64d49 100644
--- a/src/corelibs/U2Test/src/GTest.h
+++ b/src/corelibs/U2Test/src/GTest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,10 @@
 #include <U2Core/Log.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QString>
-#include <QtCore/QList>
-#include <QtCore/QObject>
-#include <QtCore/QMap>
-#include <QtXml/QtXml>
+#include <QString>
+#include <QList>
+#include <QObject>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Test/src/GTestFrameworkComponents.cpp b/src/corelibs/U2Test/src/GTestFrameworkComponents.cpp
index 59b91df..f016450 100644
--- a/src/corelibs/U2Test/src/GTestFrameworkComponents.cpp
+++ b/src/corelibs/U2Test/src/GTestFrameworkComponents.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -104,7 +104,7 @@ void TestFramework::setTRHelpSections() {
 
     CMDLineHelpProvider *testReport = new CMDLineHelpProvider(
         CMDLineCoreOptions::TEST_REPORT,
-        GTestFormatRegistry::tr("Sets the directory for the test report."),
+        GTestFormatRegistry::tr("Sets the folder for the test report."),
         "", // No full description
         "<path_to_dir>");
 
diff --git a/src/corelibs/U2Test/src/GTestFrameworkComponents.h b/src/corelibs/U2Test/src/GTestFrameworkComponents.h
index 730e01b..11668e8 100644
--- a/src/corelibs/U2Test/src/GTestFrameworkComponents.h
+++ b/src/corelibs/U2Test/src/GTestFrameworkComponents.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Test/src/TestRunnerTask.cpp b/src/corelibs/U2Test/src/TestRunnerTask.cpp
index eb7e42a..4937667 100644
--- a/src/corelibs/U2Test/src/TestRunnerTask.cpp
+++ b/src/corelibs/U2Test/src/TestRunnerTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include "TestRunnerTask.h"
+#include <QDir>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Log.h>
 #include <U2Core/Timer.h>
+
 #include <U2Test/GTestFrameworkComponents.h>
 #include <U2Test/GTest.h>
-#include <QtCore/QtAlgorithms>
+
+#include "TestRunnerTask.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Test/src/TestRunnerTask.h b/src/corelibs/U2Test/src/TestRunnerTask.h
index 174a93b..31a73d9 100644
--- a/src/corelibs/U2Test/src/TestRunnerTask.h
+++ b/src/corelibs/U2Test/src/TestRunnerTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/Task.h>
 
-#include <QtCore/QList>
-#include <QtCore/QMap>
+#include <QList>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
index bce99b3..f940f0f 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,9 @@
 
 #include <QApplication>
 #include <QDesktopWidget>
+#include <QDir>
 #include <QMap>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineCoreOptions.h>
@@ -43,7 +45,7 @@
 #elif defined(Q_OS_UNIX)
 #define NUMBER_OF_TESTS_IN_SUITE 550
 #elif defined(Q_OS_WIN)
-#define NUMBER_OF_TESTS_IN_SUITE 750
+#define NUMBER_OF_TESTS_IN_SUITE 850
 #endif
 
 #define GUITESTING_REPORT_PREFIX "GUITesting"
@@ -255,9 +257,10 @@ QString GUITestLauncher::performTest(const QString& testName) {
 
     QString testResult = readTestResult(process.readAllStandardOutput());
 
-    if(qgetenv("UGENE_SKIP_TEST_RECORDING").toInt() != 1){
-        screenRecorder.kill();
-        if(!GUITestTeamcityLogger::testFailed(testResult)){
+    if (qgetenv("UGENE_SKIP_TEST_RECORDING").toInt() != 1) {
+        screenRecorder.close();
+        screenRecorder.waitForFinished(2000);
+        if (!GUITestTeamcityLogger::testFailed(testResult)) {
             QFile(getVideoPath(testName)).remove();
         }
     }
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
index 5f15f81..677c24d 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestLauncher.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/MultiTask.h>
 #include <U2Gui/MainWindow.h>
-#include <QtCore/QProcessEnvironment>
+#include <QProcessEnvironment>
 #include <core/GUITest.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
index aad8fb1..1e7a6bf 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
 #include <QMainWindow>
 #include <QScreen>
 
@@ -43,26 +44,6 @@
 #include "GUITestWindow.h"
 #include "UGUITest.h"
 
-/**************************************************** to use qt file dialog *************************************************************/
-#ifdef Q_OS_LINUX
-#if (QT_VERSION < 0x050000) //Qt 5
-typedef QStringList(*_qt_filedialog_open_filenames_hook)(QWidget * parent, const QString &caption, const QString &dir,
-                                                          const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-typedef QString(*_qt_filedialog_open_filename_hook)     (QWidget * parent, const QString &caption, const QString &dir,
-                                                          const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-typedef QString(*_qt_filedialog_save_filename_hook)     (QWidget * parent, const QString &caption, const QString &dir,
-                                                          const QString &filter, QString *selectedFilter, QFileDialog::Options options);
-typedef QString(*_qt_filedialog_existing_directory_hook)(QWidget *parent, const QString &caption, const QString &dir,
-                                                          QFileDialog::Options options);
-
-extern Q_GUI_EXPORT _qt_filedialog_open_filename_hook qt_filedialog_open_filename_hook;
-extern Q_GUI_EXPORT _qt_filedialog_open_filenames_hook qt_filedialog_open_filenames_hook;
-extern Q_GUI_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook;
-extern Q_GUI_EXPORT _qt_filedialog_existing_directory_hook qt_filedialog_existing_directory_hook;
-#endif
-#endif
-/******************************************************************************************************************************************/
-
 namespace U2 {
 
 #define ULOG_CAT_TEAMCITY "Teamcity Log"
@@ -331,8 +312,9 @@ void GUITestService::runGUITest() {
     needTeamcityLog = cmdLine->hasParameter(CMDLineCoreOptions::TEAMCITY_OUTPUT);
 
     UGUITestBase *tb = AppContext::getGUITestBase();
-    SAFE_POINT(NULL != tb,"",);
+    SAFE_POINT(NULL != tb, "Test base is NULL", );
     HI::GUITest *t = tb->takeTest(testName.split(":").first(), testName.split(":").last());
+    SAFE_POINT(NULL != t, QString("Test '%1' is NULL. A wrong test name?").arg(testName), );
 
     runGUITest(t);
 }
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestService.h b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
index 736bd19..7996ffc 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestService.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestService.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.cpp
index bb52712..ae3b8ab 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.h b/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.h
index 012d20b..76c22a7 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestTeamcityLogger.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_TESTS_TEAMCITY_LOGGER_H_
 #define _U2_GUI_TESTS_TEAMCITY_LOGGER_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
index 187457e..80bb03a 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,17 +21,19 @@
 
 #include <QApplication>
 #include <QDesktopWidget>
-
+#include <QDir>
 #include <QGuiApplication>
+#include <QScreen>
+
+#include <core/GUITest.h>
+#include <core/GUITestOpStatus.h>
+#include <core/MainThreadRunnable.h>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include "core/MainThreadRunnable.h"
-
-#include <core/GUITest.h>
 #include "UGUITestBase.h"
-#include <core/GUITestOpStatus.h>
 #include "GUITestService.h"
 #include "GUITestTeamcityLogger.h"
 #include "GUITestThread.h"
@@ -58,17 +60,17 @@ void GUITestThread::run() {
 
     clearSandbox();
 
-    QTimer* timer = new QTimer(this);
-    timer->connect(timer, SIGNAL(timeout()), this, SLOT(sl_getMemory()));
-    timer->start(1000);
+    QTimer timer;
+    connect(&timer, SIGNAL(timeout()), this, SLOT(sl_getMemory()), Qt::DirectConnection);
+    timer.start(1000);
 
     const QString error = launchTest(tests);
 
-    if(needCleanup){
+    if (needCleanup) {
         cleanup();
     }
 
-    timer->stop();
+    timer.stop();
 
     saveMemoryInfo();
 
@@ -213,6 +215,7 @@ void GUITestThread::saveScreenshot() {
 }
 
 void GUITestThread::cleanup() {
+    test->cleanup();
     foreach (HI::GUITest *postAction, postActions()) {
         HI::GUITestOpStatus os;
         try {
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestThread.h b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
index e039a7b..1a2a0c8 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestThread.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -54,7 +54,7 @@ private:
     void clearSandbox();
     static void removeDir(const QString &dirName);
     void saveScreenshot();
-    static void cleanup();
+    void cleanup();
     void writeTestResult();
     void saveMemoryInfo();
     int countMemForProcessTree(int pid);
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
index 1b8905c..7c4d78d 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#include "GUITestWindow.h"
+#include <QDialog>
+#include <QLineEdit>
+#include <QMainWindow>
+#include <QMouseEvent>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDoubleSpinBox>
+#include <QGroupBox>
+#include <QMenuBar>
+#include <QRadioButton>
+#include <QSpinBox>
+#include <QToolBox>
+#include <QToolButton>
+
 #include <U2Core/U2SafePoints.h>
 
+#include "GUITestWindow.h"
 
 #define CLASS_NAME_CN 0
 #define OBJ_NAME_CN 1
@@ -422,9 +436,9 @@ QString EventFilter::generateFillerSource() const{
               "#include \"primitives/GTLineEdit.h\"\n"
               "#include \"primitives/GTComboBox.h\"\n"
               "#include \"api/GTRadioButton.h\"\n"
-              "#include <QtGui/QApplication>\n"
-              "#include <QtGui/QGroupBox>\n"
-              "#include <QtGui/QComboBox>\n\n").arg(fillerName));
+              "#include <QApplication>\n"
+              "#include <QGroupBox>\n"
+              "#include <QComboBox>\n\n").arg(fillerName));
 
     result.append(QString("namespace U2 {\n\n"
               "#define GT_CLASS_NAME \"GTUtilsDialog::%1\"\n"
diff --git a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
index 640dbbd..3d76512 100644
--- a/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
+++ b/src/corelibs/U2Test/src/gui_tests/GUITestWindow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,17 @@
 
 #include <U2Gui/MainWindow.h>
 #include <U2Core/AppContext.h>
-#include <ui_GUITestingWindow.h>
 
+#include "ui_GUITestingWindow.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
+class QCheckBox;
+class QComboBox;
+class QDoubleSpinBox;
+class QGroupBox;
+class QMenuBar;
+class QRadioButton;
+class QSpinBox;
+class QToolButton;
 
 namespace U2 {
 class EventFilter;
diff --git a/src/corelibs/U2Test/src/gui_tests/UGUITest.cpp b/src/corelibs/U2Test/src/gui_tests/UGUITest.cpp
index 52f3b0d..8f7bff1 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITest.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITest.cpp
@@ -1,5 +1,23 @@
-#include "UGUITest.h"
-#include "core/GUITestOpStatus.h"
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
 
 #include <QApplication>
 #include <QDate>
@@ -7,9 +25,26 @@
 #include <QDir>
 #include <QScreen>
 
+#include <core/GUITestOpStatus.h>
+#include <system/GTFile.h>
+
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/Log.h>
+
+#include "UGUITest.h"
+
 namespace U2 {
 
 QString getTestDir(){
+    const QString testDir = qgetenv("UGENE_TESTS_PATH");
+    if (!testDir.isEmpty()) {
+        if (!QFileInfo(testDir).exists()) {
+            coreLog.error(QString("UGENE_TESTS_PATH is defined, but doesn't exist: '%1'").arg(testDir));
+        } else {
+            return testDir + (testDir.endsWith("/") ? "" : "/");
+        }
+    }
+
     bool ok;
     int i = qgetenv("UGENE_GUI_TEST_SUITE_NUMBER").toInt(&ok);
 #ifdef Q_OS_MAC
@@ -67,4 +102,4 @@ const QString UGUITest::dataDir = getDataDir();
 const QString UGUITest::sandBoxDir = testDir + "_common_data/scenarios/sandbox/";
 const QString UGUITest::screenshotDir = getScreenshotDir();
 
-} // namespace
+}   // namespace U2
diff --git a/src/corelibs/U2Test/src/gui_tests/UGUITest.h b/src/corelibs/U2Test/src/gui_tests/UGUITest.h
index 3e2d3a1..d2de6a7 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITest.h
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITest.h
@@ -1,17 +1,39 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
 #ifndef _U2_UGUI_TEST_H_
 #define _U2_UGUI_TEST_H_
 
-#include <U2Core/global.h>
+#include <QTimer>
 
-#include <QtCore/QTimer>
 #include <GTGlobals.h>
-#include <core/GUITestOpStatus.h>
 #include <core/GUITest.h>
+#include <core/GUITestOpStatus.h>
+
+#include <U2Core/global.h>
 
 namespace U2 {
 using namespace HI;
 
-class U2TEST_EXPORT UGUITest: public GUITest {
+class U2TEST_EXPORT UGUITest : public GUITest {
     Q_OBJECT
 public:
     UGUITest(const QString &_name = "", const QString &_suite = "", int timeout = 240000) : GUITest(_name, _suite, timeout) {}
@@ -21,7 +43,6 @@ public:
     static const QString dataDir;
     static const QString screenshotDir;
     static const QString sandBoxDir;
-
 };
 
 typedef QList<UGUITest*> UGUITests;
diff --git a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
index 653fa72..b862b34 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.cpp
@@ -92,13 +92,11 @@ GUITestMap& UGUITestBase::getMap(TestType testType) {
 GUITests UGUITestBase::getTests(TestType testType, QString label) {
 
     GUITests testList = getMap(testType).values();
-    int size = testList.size();
     foreach (GUITest* t, testList) {
         if(t->getLabel() != label){
             testList.takeAt(testList.indexOf(t));
         }
     }
-    size = testList.size();
     return testList;
 }
 
diff --git a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h
index a9b75ef..6501508 100644
--- a/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h
+++ b/src/corelibs/U2Test/src/gui_tests/UGUITestBase.h
@@ -10,7 +10,6 @@
 #include <U2Gui/MainWindow.h>
 #include <U2View/ADVSingleSequenceWidget.h>
 
-#include <QtGui>
 #include <U2Test/UGUITest.h>
 
 namespace U2 {
diff --git a/src/corelibs/U2Test/src/xmltest/XMLTestFormat.cpp b/src/corelibs/U2Test/src/xmltest/XMLTestFormat.cpp
index 885de6f..b13fa34 100644
--- a/src/corelibs/U2Test/src/xmltest/XMLTestFormat.cpp
+++ b/src/corelibs/U2Test/src/xmltest/XMLTestFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDomDocument>
+
 #include "XMLTestFormat.h"
 
 #define TEST_FACTORIES_AUTO_CLEANUP
diff --git a/src/corelibs/U2Test/src/xmltest/XMLTestFormat.h b/src/corelibs/U2Test/src/xmltest/XMLTestFormat.h
index c487380..36b3a97 100644
--- a/src/corelibs/U2Test/src/xmltest/XMLTestFormat.h
+++ b/src/corelibs/U2Test/src/xmltest/XMLTestFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,8 @@
 
 #include "../GTest.h"
 
+class QDomElement;
+
 namespace U2 {
 
 class XMLTestFormat;
diff --git a/src/corelibs/U2Test/src/xmltest/XMLTestUtils.cpp b/src/corelibs/U2Test/src/xmltest/XMLTestUtils.cpp
index f1302d6..8e3765a 100644
--- a/src/corelibs/U2Test/src/xmltest/XMLTestUtils.cpp
+++ b/src/corelibs/U2Test/src/xmltest/XMLTestUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "XMLTestUtils.h"
+#include <QDir>
+#include <QDomElement>
+#include <QFile>
+#include <QFileInfo>
 
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/U2SafePoints.h>
 
+#include "XMLTestUtils.h"
+
 namespace U2 {
 
 QList<XMLTestFactory*>  XMLTestUtils::createTestFactories() {
diff --git a/src/corelibs/U2Test/src/xmltest/XMLTestUtils.h b/src/corelibs/U2Test/src/xmltest/XMLTestUtils.h
index d9d46cc..8371f22 100644
--- a/src/corelibs/U2Test/src/xmltest/XMLTestUtils.h
+++ b/src/corelibs/U2Test/src/xmltest/XMLTestUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2Test/transl/english.ts b/src/corelibs/U2Test/transl/english.ts
index 73a4764..29ddf42 100644
--- a/src/corelibs/U2Test/transl/english.ts
+++ b/src/corelibs/U2Test/transl/english.ts
@@ -69,8 +69,8 @@
     </message>
     <message>
         <location filename="../src/GTestFrameworkComponents.cpp" line="107"/>
-        <source>Sets the directory for the test report.</source>
-        <translation>Sets the directory for the test report.</translation>
+        <source>Sets the folder for the test report.</source>
+        <translation>Sets the folder for the test report.</translation>
     </message>
     <message>
         <location filename="../src/GTestFrameworkComponents.cpp" line="113"/>
@@ -86,12 +86,12 @@
 <context>
     <name>U2::GTestSuite</name>
     <message>
-        <location filename="../src/GTest.cpp" line="323"/>
+        <location filename="../src/GTest.cpp" line="324"/>
         <source>Can't load suite list %1</source>
         <translation>Can't load suite list %1</translation>
     </message>
     <message>
-        <location filename="../src/GTest.cpp" line="324"/>
+        <location filename="../src/GTest.cpp" line="325"/>
         <source>Can't open suite list %1</source>
         <translation>Can't open suite list %1</translation>
     </message>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="136"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="138"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="146"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="148"/>
         <source>Invalid suite number: %1. There are %2 suites</source>
         <translation>Invalid suite number: %1. There are %2 suites</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="246"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="248"/>
         <source>An error occurred while starting UGENE: </source>
         <translation>An error occurred while starting UGENE: </translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="272"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="275"/>
         <source>An error occurred while finishing UGENE: </source>
         <translation>An error occurred while finishing UGENE: </translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="274"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="309"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="309"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -137,17 +137,17 @@
 <context>
     <name>U2::GUITestService</name>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="74"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="55"/>
         <source>GUI test viewer</source>
         <translation>GUI test viewer</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="74"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="55"/>
         <source>Service to support UGENE GUI testing</source>
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="259"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="240"/>
         <source>Can't connect external tool manager signal</source>
         <translation>Can't connect external tool manager signal</translation>
     </message>
@@ -159,12 +159,12 @@
 <context>
     <name>U2::LoadTestTask</name>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="176"/>
+        <location filename="../src/TestRunnerTask.cpp" line="179"/>
         <source>TestLoader for %1</source>
         <translation>TestLoader for %1</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="184"/>
+        <location filename="../src/TestRunnerTask.cpp" line="187"/>
         <source>Cannot open file: %1</source>
         <translation>Cannot open file: %1</translation>
     </message>
@@ -172,12 +172,12 @@
 <context>
     <name>U2::TestRunnerTask</name>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="36"/>
+        <location filename="../src/TestRunnerTask.cpp" line="39"/>
         <source>Test runner</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="100"/>
+        <location filename="../src/TestRunnerTask.cpp" line="103"/>
         <source>Test format not supported: %1</source>
         <translation>Test format not supported: %1</translation>
     </message>
diff --git a/src/corelibs/U2Test/transl/russian.ts b/src/corelibs/U2Test/transl/russian.ts
index 2246e49..f984ca8 100644
--- a/src/corelibs/U2Test/transl/russian.ts
+++ b/src/corelibs/U2Test/transl/russian.ts
@@ -69,8 +69,8 @@
     </message>
     <message>
         <location filename="../src/GTestFrameworkComponents.cpp" line="107"/>
-        <source>Sets the directory for the test report.</source>
-        <translation>Sets the directory for the test report.</translation>
+        <source>Sets the folder for the test report.</source>
+        <translation>Sets the folder for the test report.</translation>
     </message>
     <message>
         <location filename="../src/GTestFrameworkComponents.cpp" line="113"/>
@@ -86,12 +86,12 @@
 <context>
     <name>U2::GTestSuite</name>
     <message>
-        <location filename="../src/GTest.cpp" line="323"/>
+        <location filename="../src/GTest.cpp" line="324"/>
         <source>Can't load suite list %1</source>
         <translation>Can't load suite list %1</translation>
     </message>
     <message>
-        <location filename="../src/GTest.cpp" line="324"/>
+        <location filename="../src/GTest.cpp" line="325"/>
         <source>Can't open suite list %1</source>
         <translation>Can't open suite list %1</translation>
     </message>
@@ -99,37 +99,37 @@
 <context>
     <name>U2::GUITestLauncher</name>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="136"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="138"/>
         <source>No tests to run</source>
         <translation>No tests to run</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="146"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="148"/>
         <source>Invalid suite number: %1. There are %2 suites</source>
         <translation>Invalid suite number: %1. There are %2 suites</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="246"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="248"/>
         <source>An error occurred while starting UGENE: </source>
         <translation>An error occurred while starting UGENE: </translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="272"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="275"/>
         <source>An error occurred while finishing UGENE: </source>
         <translation>An error occurred while finishing UGENE: </translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="274"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="277"/>
         <source>Test fails because of timeout.</source>
         <translation>Test fails because of timeout.</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="309"/>
         <source>Test name</source>
         <translation>Test name</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="306"/>
+        <location filename="../src/gui_tests/GUITestLauncher.cpp" line="309"/>
         <source>Status</source>
         <translation>Status</translation>
     </message>
@@ -137,17 +137,17 @@
 <context>
     <name>U2::GUITestService</name>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="74"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="55"/>
         <source>GUI test viewer</source>
         <translation>GUI test viewer</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="74"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="55"/>
         <source>Service to support UGENE GUI testing</source>
         <translation>Service to support UGENE GUI testing</translation>
     </message>
     <message>
-        <location filename="../src/gui_tests/GUITestService.cpp" line="259"/>
+        <location filename="../src/gui_tests/GUITestService.cpp" line="240"/>
         <source>Can't connect external tool manager signal</source>
         <translation>Can't connect external tool manager signal</translation>
     </message>
@@ -159,12 +159,12 @@
 <context>
     <name>U2::LoadTestTask</name>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="176"/>
+        <location filename="../src/TestRunnerTask.cpp" line="179"/>
         <source>TestLoader for %1</source>
         <translation>TestLoader for %1</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="184"/>
+        <location filename="../src/TestRunnerTask.cpp" line="187"/>
         <source>Cannot open file: %1</source>
         <translation>Не могу открыть файл: "%1"</translation>
     </message>
@@ -172,12 +172,12 @@
 <context>
     <name>U2::TestRunnerTask</name>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="36"/>
+        <location filename="../src/TestRunnerTask.cpp" line="39"/>
         <source>Test runner</source>
         <translation>Исполнение тестов</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerTask.cpp" line="100"/>
+        <location filename="../src/TestRunnerTask.cpp" line="103"/>
         <source>Test format not supported: %1</source>
         <translation>Формат теста не поддерживается: %1</translation>
     </message>
diff --git a/src/corelibs/U2View/U2View.pri b/src/corelibs/U2View/U2View.pri
index 5aae4e6..b985e30 100644
--- a/src/corelibs/U2View/U2View.pri
+++ b/src/corelibs/U2View/U2View.pri
@@ -4,9 +4,7 @@ UGENE_RELATIVE_DESTDIR = ''
 MODULE_ID=U2View
 include( ../../ugene_lib_common.pri )
 
-QT += xml svg webkit
-greaterThan(QT_MAJOR_VERSION, 4): QT -= webkit
-greaterThan(QT_MAJOR_VERSION, 4): QT += widgets webkitwidgets printsupport
+QT += xml svg widgets webkitwidgets printsupport
 DEFINES+= QT_FATAL_ASSERT BUILDING_U2VIEW_DLL
 LIBS += -L../../_release -lU2Core -lU2Algorithm -lU2Formats -lU2Lang -lU2Gui
 
diff --git a/src/corelibs/U2View/U2View.pro b/src/corelibs/U2View/U2View.pro
index b616eea..21aaa28 100644
--- a/src/corelibs/U2View/U2View.pro
+++ b/src/corelibs/U2View/U2View.pro
@@ -46,39 +46,67 @@ HEADERS += src/LicenseDialog.h \
            src/ov_msa/CreateSubalignmentDialogController.h \
            src/ov_msa/DeleteGapsDialog.h \
            src/ov_msa/Export/MSAImageExportTask.h \
-           src/ov_msa/ExportConsensus/MSAExportConsensusTab.h \
-           src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.h \
+           src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.h \
+           src/ov_msa/ExportConsensus/MaExportConsensusWidget.h \
            src/ov_msa/ExportHighlightedDialogController.h \
+           src/ov_msa/General/MaConsensusModeWidget.h \
+           src/ov_msa/General/McaGeneralTab.h \
+           src/ov_msa/General/McaGeneralTabFactory.h \
            src/ov_msa/General/MSAGeneralTab.h \
            src/ov_msa/General/MSAGeneralTabFactory.h \
            src/ov_msa/Highlighting/MsaHighlightingSavableTab.h \
            src/ov_msa/Highlighting/MSAHighlightingTab.h \
            src/ov_msa/Highlighting/MSAHighlightingTabFactory.h \
+           src/ov_msa/Highlighting/MsaSchemeComboBoxController.h \
+           src/ov_msa/Highlighting/MsaSchemesMenuBuilder.h \
+           src/ov_msa/MaConsensusMismatchController.h \
+           src/ov_msa/MaEditor.h \
+           src/ov_msa/MaEditorConsensusAreaSettings.h \
+           src/ov_msa/MaEditorFactory.h \
+           src/ov_msa/MaEditorNameList.h \
+           src/ov_msa/MaEditorState.h \
+           src/ov_msa/MaEditorStatusBar.h \
+           src/ov_msa/MaEditorTasks.h \
+           src/ov_msa/McaEditor.h \
+           src/ov_msa/McaEditorConsensusArea.h \
+           src/ov_msa/McaEditorNameList.h \
+           src/ov_msa/McaEditorOverviewArea.h \
+           src/ov_msa/McaEditorReferenceArea.h \
+           src/ov_msa/McaEditorSequenceArea.h \
+           src/ov_msa/McaEditorStatusBar.h \
+           src/ov_msa/McaEditorWgt.h \
+           src/ov_msa/McaReferenceCharController.h \
            src/ov_msa/MSACollapsibleModel.h \
            src/ov_msa/MSAEditor.h \
            src/ov_msa/MSAEditorConsensusArea.h \
            src/ov_msa/MSAEditorConsensusCache.h \
-           src/ov_msa/MsaEditorSimilarityColumn.h \
-           src/ov_msa/MSAEditorFactory.h \
-           src/ov_msa/MSAEditorNameList.h \
+           src/ov_msa/MsaEditorNameList.h \
            src/ov_msa/MSAEditorOffsetsView.h \
            src/ov_msa/MSAEditorOverviewArea.h \
            src/ov_msa/MSAEditorSequenceArea.h \
-           src/ov_msa/MSAEditorState.h \
-           src/ov_msa/MSAEditorStatusBar.h \
-           src/ov_msa/MSAEditorTasks.h \
-           src/ov_msa/MSAEditorUndoFramework.h \
+           src/ov_msa/MsaEditorSimilarityColumn.h \
+           src/ov_msa/MsaEditorStatusBar.h \
+           src/ov_msa/MsaEditorWgt.h \
            src/ov_msa/MsaUpdatedWidgetInterface.h \
            src/ov_msa/MsaOpSavableTab.h \
            src/ov_msa/MSASelectSubalignmentDialog.h \
            src/ov_msa/MsaEditorUserModStepController.h \
            src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h \
-           src/ov_msa/Overview/MSAGraphCalculationTask.h \
-           src/ov_msa/Overview/MSAGraphOverview.h \
-           src/ov_msa/Overview/MSAOverview.h \
-           src/ov_msa/Overview/MSAOverviewContextMenu.h \
-           src/ov_msa/Overview/MSAOverviewImageExportTask.h \
-           src/ov_msa/Overview/MSASimpleOverview.h \
+           src/ov_msa/helpers/BaseWidthController.h \
+           src/ov_msa/helpers/DrawHelper.h \
+           src/ov_msa/helpers/MaAmbiguousCharactersController.h \
+           src/ov_msa/helpers/McaRowHeightController.h \
+           src/ov_msa/helpers/MsaRowHeightController.h \
+           src/ov_msa/helpers/RowHeightController.h \
+           src/ov_msa/helpers/ScrollController.h \
+           src/ov_msa/Overview/MaEditorOverviewArea.h \
+           src/ov_msa/Overview/MaGraphCalculationTask.h \
+           src/ov_msa/Overview/MaGraphOverview.h \
+           src/ov_msa/Overview/MaOverview.h \
+           src/ov_msa/Overview/MaOverviewContextMenu.h \
+           src/ov_msa/Overview/MaOverviewImageExportTask.h \
+           src/ov_msa/Overview/MaSangerOverview.h \
+           src/ov_msa/Overview/MaSimpleOverview.h \
            src/ov_msa/PairAlign/PairAlign.h \
            src/ov_msa/PairAlign/PairAlignFactory.h \
            src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h \
@@ -91,6 +119,16 @@ HEADERS += src/LicenseDialog.h \
            src/ov_msa/SequenceSelectorWidgetController.h \
            src/ov_msa/TreeOptions/TreeOptionsWidget.h \
            src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.h \
+           src/ov_msa/view_rendering/MaConsensusAreaRenderer.h \
+           src/ov_msa/view_rendering/MaEditorConsensusArea.h \
+           src/ov_msa/view_rendering/MaEditorSelection.h \
+           src/ov_msa/view_rendering/MaEditorSequenceArea.h \
+           src/ov_msa/view_rendering/MaEditorUtils.h \
+           src/ov_msa/view_rendering/MaEditorWgt.h \
+           src/ov_msa/view_rendering/McaConsensusAreaRenderer.h \
+           src/ov_msa/view_rendering/McaReferenceAreaRenderer.h \
+           src/ov_msa/view_rendering/SequenceAreaRenderer.h \
+           src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.h \
            src/ov_phyltree/CreateBranchesTask.h \
            src/ov_phyltree/CreateCircularBranchesTask.h \
            src/ov_phyltree/CreateRectangularBranchesTask.h \
@@ -138,6 +176,7 @@ HEADERS += src/LicenseDialog.h \
            src/ov_sequence/SaveGraphCutoffsDialogController.h \
            src/ov_sequence/SaveGraphCutoffsTask.h \
            src/ov_sequence/SearchQualifierDialog.h \
+           src/ov_sequence/SequenceObjectContext.h \
            src/ov_sequence/WindowStepSelectorWidget.h \
            src/ov_sequence/annot_highlight/AnnotHighlightSettings.h \
            src/ov_sequence/annot_highlight/AnnotHighlightTree.h \
@@ -186,6 +225,7 @@ HEADERS += src/LicenseDialog.h \
            src/util_smith_waterman/SmithWatermanDialog.h \
            src/util_smith_waterman/SmithWatermanDialogImpl.h \
            src/util_smith_waterman/SubstMatrixDialog.h
+
 FORMS += src/ov_assembly/ExportConsensusDialog.ui \
          src/ov_assembly/ExportCoverageDialog.ui \
          src/ov_assembly/ExportReadsDialog.ui \
@@ -198,6 +238,8 @@ FORMS += src/ov_assembly/ExportConsensusDialog.ui \
          src/ov_msa/ExportConsensus/ExportConsensusWidget.ui \
          src/ov_msa/ExportHighlightedDialog.ui \
          src/ov_msa/General/GeneralTabOptionsPanelWidget.ui \
+         src/ov_msa/General/MaConsensusModeWidget.ui \
+         src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui \
          src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui \
          src/ov_msa/Export/MSAExportSettings.ui \
          src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui \
@@ -224,6 +266,7 @@ FORMS += src/ov_assembly/ExportConsensusDialog.ui \
          src/util_sec_struct_predict/SecStructDialog.ui \
          src/util_smith_waterman/SmithWatermanDialogBase.ui \
          src/util_smith_waterman/SubstMatrixDialogBase.ui
+
 SOURCES += src/LicenseDialog.cpp \
            src/UndoRedoFramework.cpp \
            src/WebWindow.cpp \
@@ -269,38 +312,65 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_msa/CreateSubalignmentDialogController.cpp \
            src/ov_msa/DeleteGapsDialog.cpp \
            src/ov_msa/Export/MSAImageExportTask.cpp \
+           src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp \
+           src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp \
            src/ov_msa/ExportHighlightedDialogController.cpp \
+           src/ov_msa/General/MaConsensusModeWidget.cpp \
+           src/ov_msa/General/McaGeneralTab.cpp \
+           src/ov_msa/General/McaGeneralTabFactory.cpp \
            src/ov_msa/General/MSAGeneralTab.cpp \
            src/ov_msa/General/MSAGeneralTabFactory.cpp \
            src/ov_msa/Highlighting/MsaHighlightingSavableTab.cpp \
            src/ov_msa/Highlighting/MSAHighlightingTab.cpp \
            src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp \
+           src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp \
+           src/ov_msa/MaConsensusMismatchController.cpp \
+           src/ov_msa/MaEditor.cpp \
+           src/ov_msa/MaEditorConsensusAreaSettings.cpp \
+           src/ov_msa/MaEditorFactory.cpp \
+           src/ov_msa/MaEditorNameList.cpp \
+           src/ov_msa/MaEditorState.cpp \
+           src/ov_msa/MaEditorStatusBar.cpp \
+           src/ov_msa/MaEditorTasks.cpp \
+           src/ov_msa/McaEditor.cpp \
+           src/ov_msa/McaEditorConsensusArea.cpp \
+           src/ov_msa/McaEditorNameList.cpp \
+           src/ov_msa/McaEditorOverviewArea.cpp \
+           src/ov_msa/McaEditorReferenceArea.cpp \
+           src/ov_msa/McaEditorSequenceArea.cpp \
+           src/ov_msa/McaEditorStatusBar.cpp \
+           src/ov_msa/McaEditorWgt.cpp \
+           src/ov_msa/McaReferenceCharController.cpp \
            src/ov_msa/MSACollapsibleModel.cpp \
            src/ov_msa/MSAEditor.cpp \
            src/ov_msa/MSAEditorConsensusArea.cpp \
            src/ov_msa/MSAEditorConsensusCache.cpp \
-           src/ov_msa/MsaEditorSimilarityColumn.cpp \
-           src/ov_msa/MSAEditorFactory.cpp \
-           src/ov_msa/MSAEditorNameList.cpp \
+           src/ov_msa/MsaEditorNameList.cpp \
            src/ov_msa/MSAEditorOffsetsView.cpp \
            src/ov_msa/MSAEditorOverviewArea.cpp \
            src/ov_msa/MSAEditorSequenceArea.cpp \
-           src/ov_msa/MSAEditorState.cpp \
-           src/ov_msa/MSAEditorStatusBar.cpp \
-           src/ov_msa/MSAEditorTasks.cpp \
-           src/ov_msa/MSAEditorUndoFramework.cpp \
+           src/ov_msa/MsaEditorSimilarityColumn.cpp \
+           src/ov_msa/MsaEditorStatusBar.cpp \
+           src/ov_msa/MsaEditorWgt.cpp \
            src/ov_msa/MsaOpSavableTab.cpp \
            src/ov_msa/MSASelectSubalignmentDialog.cpp \
            src/ov_msa/MsaEditorUserModStepController.cpp \
-           src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp \
-           src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp \
            src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp \
-           src/ov_msa/Overview/MSAGraphCalculationTask.cpp \
-           src/ov_msa/Overview/MSAGraphOverview.cpp \
-           src/ov_msa/Overview/MSAOverview.cpp \
-           src/ov_msa/Overview/MSAOverviewContextMenu.cpp \
-           src/ov_msa/Overview/MSAOverviewImageExportTask.cpp \
-           src/ov_msa/Overview/MSASimpleOverview.cpp \
+           src/ov_msa/helpers/BaseWidthController.cpp \
+           src/ov_msa/helpers/DrawHelper.cpp \
+           src/ov_msa/helpers/MaAmbiguousCharactersController.cpp \
+           src/ov_msa/helpers/McaRowHeightController.cpp \
+           src/ov_msa/helpers/MsaRowHeightController.cpp \
+           src/ov_msa/helpers/RowHeightController.cpp \
+           src/ov_msa/helpers/ScrollController.cpp \
+           src/ov_msa/Overview/MaEditorOverviewArea.cpp \
+           src/ov_msa/Overview/MaGraphOverview.cpp \
+           src/ov_msa/Overview/MaGraphCalculationTask.cpp \
+           src/ov_msa/Overview/MaOverview.cpp \
+           src/ov_msa/Overview/MaOverviewContextMenu.cpp \
+           src/ov_msa/Overview/MaOverviewImageExportTask.cpp \
+           src/ov_msa/Overview/MaSangerOverview.cpp \
+           src/ov_msa/Overview/MaSimpleOverview.cpp \
            src/ov_msa/PairAlign/PairAlign.cpp \
            src/ov_msa/PairAlign/PairAlignFactory.cpp \
            src/ov_msa/TreeOptions/TreeOptionsWidget.cpp \
@@ -313,6 +383,16 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp \
            src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp \
            src/ov_msa/SequenceSelectorWidgetController.cpp \
+           src/ov_msa/view_rendering/MaConsensusAreaRenderer.cpp \
+           src/ov_msa/view_rendering/MaEditorConsensusArea.cpp \
+           src/ov_msa/view_rendering/MaEditorSelection.cpp \
+           src/ov_msa/view_rendering/MaEditorSequenceArea.cpp \
+           src/ov_msa/view_rendering/MaEditorUtils.cpp \
+           src/ov_msa/view_rendering/MaEditorWgt.cpp \
+           src/ov_msa/view_rendering/McaConsensusAreaRenderer.cpp \
+           src/ov_msa/view_rendering/McaReferenceAreaRenderer.cpp \
+           src/ov_msa/view_rendering/SequenceAreaRenderer.cpp \
+           src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.cpp \
            src/ov_phyltree/CreateCircularBranchesTask.cpp \
            src/ov_phyltree/CreateRectangularBranchesTask.cpp \
            src/ov_phyltree/CreateUnrootedBranchesTask.cpp \
@@ -356,6 +436,7 @@ SOURCES += src/LicenseDialog.cpp \
            src/ov_sequence/SaveGraphCutoffsDialogController.cpp \
            src/ov_sequence/SaveGraphCutoffsTask.cpp \
            src/ov_sequence/SearchQualifierDialog.cpp \
+           src/ov_sequence/SequenceObjectContext.cpp \
            src/ov_sequence/WindowStepSelectorWidget.cpp \
            src/ov_sequence/annot_highlight/AnnotHighlightSettings.cpp \
            src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp \
@@ -402,5 +483,6 @@ SOURCES += src/LicenseDialog.cpp \
            src/util_sec_struct_predict/SecStructPredictUtils.cpp \
            src/util_smith_waterman/SmithWatermanDialog.cpp \
            src/util_smith_waterman/SubstMatrixDialog.cpp
+
 TRANSLATIONS += transl/english.ts \
                 transl/russian.ts
diff --git a/src/corelibs/U2View/src/LicenseDialog.cpp b/src/corelibs/U2View/src/LicenseDialog.cpp
index 2e12890..93edb08 100644
--- a/src/corelibs/U2View/src/LicenseDialog.cpp
+++ b/src/corelibs/U2View/src/LicenseDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
  */
 
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 
diff --git a/src/corelibs/U2View/src/LicenseDialog.h b/src/corelibs/U2View/src/LicenseDialog.h
index 0fc7f14..9c03ce1 100644
--- a/src/corelibs/U2View/src/LicenseDialog.h
+++ b/src/corelibs/U2View/src/LicenseDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/GUrl.h>
 #include <U2Core/PluginModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <ui_LicenseDialog.h>
 
diff --git a/src/corelibs/U2View/src/UndoRedoFramework.cpp b/src/corelibs/U2View/src/UndoRedoFramework.cpp
index a585751..dd69383 100644
--- a/src/corelibs/U2View/src/UndoRedoFramework.cpp
+++ b/src/corelibs/U2View/src/UndoRedoFramework.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "UndoRedoFramework.h"
-#include "ov_msa/MSACollapsibleModel.h"
-
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
+#include <U2Gui/GUIUtils.h>
+
+#include "UndoRedoFramework.h"
+#include "ov_msa/MSACollapsibleModel.h"
 
 namespace U2 {
 
-MsaUndoRedoFramework::MsaUndoRedoFramework(QObject *p, MAlignmentObject *_maObj)
+MsaUndoRedoFramework::MsaUndoRedoFramework(QObject *p, MultipleAlignmentObject *_maObj)
 : QObject(p),
   maObj(_maObj),
   undoStepsAvailable(0),
@@ -40,20 +41,20 @@ MsaUndoRedoFramework::MsaUndoRedoFramework(QObject *p, MAlignmentObject *_maObj)
     SAFE_POINT(maObj != NULL, "NULL MSA Object!", );
 
     undoAction = new QAction(this);
-    undoAction->setText("Undo");
+    undoAction->setText(tr("Undo"));
     undoAction->setIcon(QIcon(":core/images/undo.png"));
     undoAction->setShortcut(QKeySequence::Undo);
-    undoAction->setToolTip(QString("%1 (%2)").arg(undoAction->text()).arg(undoAction->shortcut().toString()));
+    GUIUtils::updateActionToolTip(undoAction);
 
     redoAction = new QAction(this);
-    redoAction->setText("Redo");
+    redoAction->setText(tr("Redo"));
     redoAction->setIcon(QIcon(":core/images/redo.png"));
     redoAction->setShortcut(QKeySequence::Redo);
-    redoAction->setToolTip(QString("%1 (%2)").arg(redoAction->text()).arg(redoAction->shortcut().toString()));
+    GUIUtils::updateActionToolTip(redoAction);
 
     checkUndoRedoEnabled();
 
-    connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
+    connect(maObj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
                    SLOT(sl_alignmentChanged()));
     connect(maObj, SIGNAL(si_completeStateChanged(bool)), SLOT(sl_completeStateChanged(bool)));
     connect(maObj, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
@@ -117,9 +118,9 @@ void MsaUndoRedoFramework::sl_undo() {
     objDbi->undo(msaRef.entityId, os);
     SAFE_POINT_OP(os, );
 
-    MAlignmentModInfo modInfo;
-    modInfo.type = MAlignmentModType_Undo;
-    maObj->updateCachedMAlignment(modInfo);
+    MaModificationInfo modInfo;
+    modInfo.type = MaModificationType_Undo;
+    maObj->updateCachedMultipleAlignment(modInfo);
 }
 
 void MsaUndoRedoFramework::sl_redo() {
@@ -140,9 +141,9 @@ void MsaUndoRedoFramework::sl_redo() {
     objDbi->redo(msaRef.entityId, os);
     SAFE_POINT_OP(os, );
 
-    MAlignmentModInfo modInfo;
-    modInfo.type = MAlignmentModType_Redo;
-    maObj->updateCachedMAlignment(modInfo);
+    MaModificationInfo modInfo;
+    modInfo.type = MaModificationType_Redo;
+    maObj->updateCachedMultipleAlignment(modInfo);
 }
 
 
diff --git a/src/corelibs/U2View/src/UndoRedoFramework.h b/src/corelibs/U2View/src/UndoRedoFramework.h
index d60c163..2cdade5 100644
--- a/src/corelibs/U2View/src/UndoRedoFramework.h
+++ b/src/corelibs/U2View/src/UndoRedoFramework.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,24 +22,19 @@
 #ifndef _U2_UNDO_REDO_FRAMEWORK_H_
 #define _U2_UNDO_REDO_FRAMEWORK_H_
 
-#include <U2Core/MAlignmentObject.h>
-
-#include <QtCore/QObject>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
+#include <QObject>
+#include <QAction>
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleAlignmentObject;
 
 class MsaUndoRedoFramework : public QObject {
     Q_OBJECT
 public:
-    MsaUndoRedoFramework(QObject *p, MAlignmentObject* _maObj);
+    MsaUndoRedoFramework(QObject *p, MultipleAlignmentObject* _maObj);
 
     QAction* getUndoAction() const { return undoAction; }
     QAction* getRedoAction() const { return redoAction; }
@@ -55,7 +50,7 @@ private slots:
 private:
     void checkUndoRedoEnabled();
 
-    MAlignmentObject*   maObj;
+    MultipleAlignmentObject*   maObj;
     bool                stateComplete;
 
     QAction*   undoAction;
diff --git a/src/corelibs/U2View/src/WebWindow.cpp b/src/corelibs/U2View/src/WebWindow.cpp
index 5ed098b..b8139b8 100644
--- a/src/corelibs/U2View/src/WebWindow.cpp
+++ b/src/corelibs/U2View/src/WebWindow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,8 @@
 
 #include "WebWindow.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#include <QtWebKit/QWebView>
-#else
-#include <QtWidgets/QVBoxLayout>
-#include <QtWebKitWidgets/QWebView>
-#endif
+#include <QVBoxLayout>
+#include <QWebView>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/WebWindow.h b/src/corelibs/U2View/src/WebWindow.h
index 65ff7a5..92f11f9 100644
--- a/src/corelibs/U2View/src/WebWindow.h
+++ b/src/corelibs/U2View/src/WebWindow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.cpp b/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.cpp
index f217195..a86d4a6 100644
--- a/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.h b/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.h
index 3b029ab..b238e6a 100644
--- a/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/AddReadsToDocumentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.cpp
index bc7cc56..63cc2d8 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.h b/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.h
index 4581253..3493be2 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyAnnotationsArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
index 1c5e821..578132b 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,6 +53,7 @@
 #include <U2Core/U2SequenceDbi.h>
 #include <U2Core/U2Type.h>
 #include <U2Core/VariantTrackObject.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Formats/ConvertAssemblyToSamTask.h>
 
@@ -697,7 +698,8 @@ void AssemblyBrowser::setupActions() {
 
 void AssemblyBrowser::sl_saveScreenshot() {
     QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(ui, ExportImageDialog::AssemblyView, ExportImageDialog::NoScaling, p);
+    QString fileName = GUrlUtils::fixFileName(gobject->getGObjectName());
+    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(ui, ExportImageDialog::AssemblyView, fileName, ExportImageDialog::NoScaling, p);
     dialog->exec();
 }
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
index a9309f3..3056582 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <assert.h>
 
-#include <QtCore/QSharedPointer>
-#include <QtCore/QByteArray>
-#include <QtCore/QListIterator>
+#include <QSharedPointer>
+#include <QByteArray>
+#include <QListIterator>
 #include <U2Core/U2Dbi.h>
 #include <U2Core/U2Assembly.h>
 #include <U2Core/AssemblyObject.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserFactory.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserFactory.h
index c00aafe..2d50ac0 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserFactory.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.cpp
index 318ab1b..46a898b 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "AssemblyBrowserSettings.h"
 
-#include <QtCore/QString>
+#include <QString>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.h
index fb26e26..f340cd4 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.cpp
index 6d87c67..f3964ac 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.h
index 75ee999..1dc467c 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserState.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/GObject.h>
 
-#include <QtCore/QVariant>
+#include <QVariant>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
index b01b272..0f05d4f 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.h b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.h
index fd19e51..8c6c6e6 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyBrowserTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.cpp
index 9351acc..3180733 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include "AssemblyCellRenderer.h"
 
-#include <QtGui/QPainter>
-#include <QtGui/QFont>
+#include <QPainter>
+#include <QFont>
 
 #include <U2Core/Timer.h>
 #include <U2Core/U2SafePoints.h>
@@ -86,30 +86,32 @@ static const QMap<char, QColor> nucleotideColorScheme = initDefaultColorSheme();
 static const QList<char> assemblyAlphabet = nucleotideColorScheme.keys();
 static const QMap<char, TwoChars> extendedPairs = initExtendedPairs();
 
-static void drawBackground(QPixmap &img, const QColor & topColor, const QColor &bottomColor) {
+static void drawBackground(QPixmap &img, const QSize &size, const QColor & topColor, const QColor &bottomColor) {
     QPainter p(&img);
 
     //TODO invent something greater
-    QLinearGradient linearGrad( QPointF(0, 0), QPointF(img.width(), img.height()));
+    QLinearGradient linearGrad( QPointF(0, 0), QPointF(size.width(), size.height()));
     linearGrad.setColorAt(0, QColor::fromRgb(topColor.red()-70,topColor.green()-70,topColor.blue()-70));
     linearGrad.setColorAt(1, bottomColor);
     QBrush br(linearGrad);
 
-    p.fillRect(img.rect(), br);
+    QRect rect = QRect(QPoint(), size);
+    p.fillRect(rect, br);
 }
 
-static void drawText(QPixmap &img, char c, const QFont &font, const QColor &color) {
+static void drawText(QPixmap &img, const QSize &size, char c, const QFont &font, const QColor &color) {
     QPainter p(&img);
     p.setFont(font);
     p.setPen(color);
-    p.drawText(img.rect(), Qt::AlignCenter, QString(c));
+    QRect rect = QRect(QPoint(), size);
+    p.drawText(rect, Qt::AlignCenter, QString(c));
 }
 
-void AssemblyCellRenderer::drawCell(QPixmap &img, const QColor &topColor, const QColor &bottomColor, bool text, char c, const QFont &font, const QColor &textColor) {
-    drawBackground(img, topColor, bottomColor);
+void AssemblyCellRenderer::drawCell(QPixmap &img, const QSize &size, const QColor &topColor, const QColor &bottomColor, bool text, char c, const QFont &font, const QColor &textColor) {
+    drawBackground(img, size, topColor, bottomColor);
 
     if(text) {
-        drawText(img, c, font, textColor);
+        drawText(img, size, c, font, textColor);
     }
 }
 
@@ -117,10 +119,10 @@ class NucleotideColorsRenderer : public AssemblyCellRenderer {
 public:
     NucleotideColorsRenderer()
         : AssemblyCellRenderer(), colorScheme(nucleotideColorScheme),
-          images(), unknownChar(), size(), text(false), font() {}
+          images(), unknownChar(), size(), devicePixelRatio(0), text(false), font() {}
     virtual ~NucleotideColorsRenderer() {}
 
-    virtual void render(const QSize &size, bool text, const QFont &font);
+    virtual void render(const QSize &size, int devicePixelRatio, bool text, const QFont &font);
 
     virtual QPixmap cellImage(char c);
     virtual QPixmap cellImage(const U2AssemblyRead &read, char c);
@@ -138,16 +140,17 @@ private:
 
     // cached cells parameters
     QSize size;
+    int devicePixelRatio;
     bool text;
     QFont font;
 };
 
-void NucleotideColorsRenderer::render(const QSize &_size, bool _text, const QFont &_font) {
+void NucleotideColorsRenderer::render(const QSize &_size, int _devicePixelRatio, bool _text, const QFont &_font) {
     GTIMER(c1, t1, "NucleotideColorsRenderer::render");
 
-    if (_size != size || _text != text || (text && _font != font)) {
+    if (_size != size || _devicePixelRatio != devicePixelRatio || _text != text || (text && _font != font)) {
         // update cache
-        size = _size, text = _text, font = _font;
+        size = _size, devicePixelRatio = _devicePixelRatio, text = _text, font = _font;
         update();
     }
 }
@@ -156,21 +159,23 @@ void NucleotideColorsRenderer::update() {
     images.clear();
 
     foreach(char c, colorScheme.keys()) {
-        QPixmap img(size);
+        QPixmap img(size * devicePixelRatio);
+        img.setDevicePixelRatio(devicePixelRatio);
         QColor textColor = isGap(c) ? Qt::red : Qt::black;
         if(extendedPairs.contains(c)) {
             // char from extended alphabet, draw gradient
             TwoChars pair = extendedPairs.value(c);
-            drawCell(img, colorScheme.value(pair.first), colorScheme.value(pair.second), text, c, font, textColor);
+            drawCell(img, size, colorScheme.value(pair.first), colorScheme.value(pair.second), text, c, font, textColor);
         } else {
             // normal char
-            drawCell(img, colorScheme.value(c), text, c, font, textColor);
+            drawCell(img, size, colorScheme.value(c), text, c, font, textColor);
         }
         images.insert(c, img);
     }
 
-    unknownChar = QPixmap(size);
-    drawCell(unknownChar, QColor("#FBFBFB"), text, '?', font, Qt::red);
+    unknownChar = QPixmap(size * devicePixelRatio);
+    unknownChar.setDevicePixelRatio(devicePixelRatio);
+    drawCell(unknownChar, size, QColor("#FBFBFB"), text, '?', font, Qt::red);
 }
 
 QPixmap NucleotideColorsRenderer::cellImage(char c) {
@@ -191,11 +196,11 @@ public:
     ComplementColorsRenderer()
         : AssemblyCellRenderer(),
           directImages(), complementImages(), unknownChar(),
-          size(), text(false), font() {}
+          size(), devicePixelRatio(0), text(false), font() {}
 
     virtual ~ComplementColorsRenderer() {}
 
-    virtual void render(const QSize &size, bool text, const QFont &font);
+    virtual void render(const QSize &size, int devicePixelRatio, bool text, const QFont &font);
 
     virtual QPixmap cellImage(char c);
     virtual QPixmap cellImage(const U2AssemblyRead &read, char c);
@@ -211,6 +216,7 @@ private:
 
     // cached cells parameters
     QSize size;
+    int devicePixelRatio;
     bool text;
     QFont font;
 
@@ -221,12 +227,12 @@ private:
 const QColor ComplementColorsRenderer::directColor("#4EADE1");
 const QColor ComplementColorsRenderer::complementColor("#70F970");
 
-void ComplementColorsRenderer::render(const QSize &_size, bool _text, const QFont &_font) {
+void ComplementColorsRenderer::render(const QSize &_size, int _devicePixelRatio, bool _text, const QFont &_font) {
     GTIMER(c1, t1, "ComplementColorsRenderer::render");
 
-    if (_size != size || _text != text || (text && _font != font)) {
+    if (_size != size || _devicePixelRatio != devicePixelRatio || _text != text || (text && _font != font)) {
         // update cache
-        size = _size, text = _text, font = _font;
+        size = _size, devicePixelRatio = _devicePixelRatio, text = _text, font = _font;
         update();
     }
 }
@@ -236,7 +242,9 @@ void ComplementColorsRenderer::update() {
     complementImages.clear();
 
     foreach(char c, assemblyAlphabet) {
-        QPixmap dimg(size), cimg(size);
+        QPixmap dimg(size * devicePixelRatio), cimg(size * devicePixelRatio);
+        dimg.setDevicePixelRatio(devicePixelRatio);
+        cimg.setDevicePixelRatio(devicePixelRatio);
         QColor dcolor = directColor, ccolor = complementColor, textColor = Qt::black;
 
         if (isGap(c)) {
@@ -244,15 +252,16 @@ void ComplementColorsRenderer::update() {
             textColor = Qt::red;
         }
 
-        drawCell(dimg, dcolor, text, c, font, textColor);
-        drawCell(cimg, ccolor, text, c, font, textColor);
+        drawCell(dimg, size, dcolor, text, c, font, textColor);
+        drawCell(cimg, size, ccolor, text, c, font, textColor);
 
         directImages.insert(c, dimg);
         complementImages.insert(c, cimg);
     }
 
-    unknownChar = QPixmap(size);
-    drawCell(unknownChar, QColor("#FBFBFB"), text, '?', font, Qt::red);
+    unknownChar = QPixmap(size * devicePixelRatio);
+    unknownChar.setDevicePixelRatio(devicePixelRatio);
+    drawCell(unknownChar, size, QColor("#FBFBFB"), text, '?', font, Qt::red);
 }
 
 QPixmap ComplementColorsRenderer::cellImage(char c) {
@@ -280,7 +289,7 @@ public:
     DiffNucleotideColorsRenderer();
     virtual ~DiffNucleotideColorsRenderer() {}
 
-    virtual void render(const QSize &size, bool text, const QFont &font);
+    virtual void render(const QSize &size, int devicePixelRatio, bool text, const QFont &font);
 
     virtual QPixmap cellImage(char c);
     virtual QPixmap cellImage(const U2AssemblyRead &read, char c);
@@ -299,6 +308,7 @@ private:
 
     // cached cells parameters
     QSize size;
+    int devicePixelRatio;
     bool text;
     QFont font;
 };
@@ -308,11 +318,11 @@ public:
     PairedColorsRenderer()
         : AssemblyCellRenderer(),
           pairedImages(), unpairedImages(), unknownChar(),
-          size(), text(false), font() {}
+          size(), devicePixelRatio(0), text(false), font() {}
 
     virtual ~PairedColorsRenderer() {}
 
-    virtual void render(const QSize &size, bool text, const QFont &font);
+    virtual void render(const QSize &size, int devicePixelRatio, bool text, const QFont &font);
 
     virtual QPixmap cellImage(char c);
     virtual QPixmap cellImage(const U2AssemblyRead &read, char c);
@@ -328,6 +338,7 @@ private:
 
     // cached cells parameters
     QSize size;
+    int devicePixelRatio;
     bool text;
     QFont font;
 
@@ -338,12 +349,12 @@ private:
 const QColor PairedColorsRenderer::pairedColor("#4EE1AD");
 const QColor PairedColorsRenderer::unpairedColor("#BBBBBB");
 
-void PairedColorsRenderer::render(const QSize &_size, bool _text, const QFont &_font) {
+void PairedColorsRenderer::render(const QSize &_size, int _devicePixelRatio, bool _text, const QFont &_font) {
     GTIMER(c1, t1, "PairedReadsColorsRenderer::render");
 
-    if (_size != size || _text != text || (text && _font != font)) {
+    if (_size != size || _devicePixelRatio != devicePixelRatio || _text != text || (text && _font != font)) {
         // update cache
-        size = _size, text = _text, font = _font;
+        size = _size, devicePixelRatio = _devicePixelRatio, text = _text, font = _font;
         update();
     }
 }
@@ -353,7 +364,9 @@ void PairedColorsRenderer::update() {
     unpairedImages.clear();
 
     foreach(char c, assemblyAlphabet) {
-        QPixmap pimg(size), npimg(size);
+        QPixmap pimg(size * devicePixelRatio), npimg(size * devicePixelRatio);
+        pimg.setDevicePixelRatio(devicePixelRatio);
+        npimg.setDevicePixelRatio(devicePixelRatio);
         QColor pcolor = pairedColor, ucolor = unpairedColor, textColor = Qt::black;
 
         if (isGap(c)) {
@@ -361,15 +374,16 @@ void PairedColorsRenderer::update() {
             textColor = Qt::red;
         }
 
-        drawCell(pimg, pcolor, text, c, font, textColor);
-        drawCell(npimg, ucolor, text, c, font, textColor);
+        drawCell(pimg, size, pcolor, text, c, font, textColor);
+        drawCell(npimg, size, ucolor, text, c, font, textColor);
 
         pairedImages.insert(c, pimg);
         unpairedImages.insert(c, npimg);
     }
 
-    unknownChar = QPixmap(size);
-    drawCell(unknownChar, QColor("#FBFBFB"), text, '?', font, Qt::red);
+    unknownChar = QPixmap(size * devicePixelRatio);
+    unknownChar.setDevicePixelRatio(devicePixelRatio);
+    drawCell(unknownChar, size, QColor("#FBFBFB"), text, '?', font, Qt::red);
 }
 
 QPixmap PairedColorsRenderer::cellImage(char c) {
@@ -393,14 +407,14 @@ QPixmap PairedColorsRenderer::cellImage(const U2AssemblyRead &read, char c, char
 
 DiffNucleotideColorsRenderer::DiffNucleotideColorsRenderer()
     : AssemblyCellRenderer(), colorScheme(nucleotideColorScheme),
-  highlightedImages(), normalImages(), unknownChar(), size(), text(false), font() {}
+  highlightedImages(), normalImages(), unknownChar(), size(), devicePixelRatio(0), text(false), font() {}
 
-void DiffNucleotideColorsRenderer::render(const QSize &_size, bool _text, const QFont &_font) {
+void DiffNucleotideColorsRenderer::render(const QSize &_size, int _devicePixelRatio, bool _text, const QFont &_font) {
     GTIMER(c1, t1, "DiffNucleotideColorsRenderer::render");
 
-    if (_size != size || _text != text || (text && _font != font)) {
+    if (_size != size || _devicePixelRatio != devicePixelRatio || _text != text || (text && _font != font)) {
         // update cache
-        size = _size, text = _text, font = _font;
+        size = _size, devicePixelRatio = _devicePixelRatio, text = _text, font = _font;
         update();
     }
 }
@@ -412,7 +426,9 @@ void DiffNucleotideColorsRenderer::update() {
     QColor normalColor("#BBBBBB");
 
     foreach(char c, colorScheme.keys()) {
-        QPixmap himg(size), nimg(size);
+        QPixmap himg(size * devicePixelRatio), nimg(size * devicePixelRatio);
+        himg.setDevicePixelRatio(devicePixelRatio);
+        nimg.setDevicePixelRatio(devicePixelRatio);
         // make gaps more noticeable
         QColor textColor = isGap(c) ? Qt::white : Qt::black;
         QColor highlightColor = isGap(c) ? QColor("#CC4E4E") : colorScheme.value(c);
@@ -420,19 +436,20 @@ void DiffNucleotideColorsRenderer::update() {
         if(extendedPairs.contains(c)) {
             // char from extended alphabet, draw gradient
             TwoChars pair = extendedPairs.value(c);
-            drawCell(himg, colorScheme.value(pair.first), colorScheme.value(pair.second), text, c, font, textColor);
+            drawCell(himg, size, colorScheme.value(pair.first), colorScheme.value(pair.second), text, c, font, textColor);
         } else {
             // normal char
-            drawCell(himg, highlightColor, text, c, font, textColor);
+            drawCell(himg, size, highlightColor, text, c, font, textColor);
         }
-        drawCell(nimg, normalColor, text, c, font, textColor);
+        drawCell(nimg, size, normalColor, text, c, font, textColor);
 
         highlightedImages.insert(c, himg);
         normalImages.insert(c, nimg);
     }
 
-    unknownChar = QPixmap(size);
-    drawCell(unknownChar, QColor("#FBFBFB"), text, '?', font, Qt::red);
+    unknownChar = QPixmap(size * devicePixelRatio);
+    unknownChar.setDevicePixelRatio(devicePixelRatio);
+    drawCell(unknownChar, size, QColor("#FBFBFB"), text, '?', font, Qt::red);
 }
 
 QPixmap DiffNucleotideColorsRenderer::cellImage(char c) {
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.h b/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.h
index 67730ba..798958e 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyCellRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,12 @@
 
 #include <U2Core/U2Assembly.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QHash>
+#include <QMap>
+#include <QHash>
 
-#include <QtGui/QColor>
-#include <QtGui/QPixmap>
-#include <QtGui/QFont>
+#include <QColor>
+#include <QPixmap>
+#include <QFont>
 
 namespace U2 {
 
@@ -40,7 +40,7 @@ public:
     virtual ~AssemblyCellRenderer() {}
 
     /** Render pixmaps into cache */
-    virtual void render(const QSize &size, bool text, const QFont &font) = 0;
+    virtual void render(const QSize &size, int devicePixelRatio, bool text, const QFont &font) = 0;
 
     /** @returns cached cell pixmap */
     virtual QPixmap cellImage(char c) = 0;
@@ -48,9 +48,9 @@ public:
     virtual QPixmap cellImage(const U2AssemblyRead &read, char c, char ref) = 0;
 
 protected:
-    static void drawCell(QPixmap &img, const QColor &topColor, const QColor&bottomColor, bool text, char c, const QFont &font, const QColor &textColor);
-    static void drawCell(QPixmap &img, const QColor &color, bool text, char c, const QFont &font, const QColor &textColor) {
-        drawCell(img, color, color, text, c, font, textColor);
+    static void drawCell(QPixmap &img, const QSize &size, const QColor &topColor, const QColor&bottomColor, bool text, char c, const QFont &font, const QColor &textColor);
+    static void drawCell(QPixmap &img, const QSize &size, const QColor &color, bool text, char c, const QFont &font, const QColor &textColor) {
+        drawCell(img, size, color, color, text, c, font, textColor);
     }
 };
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.cpp
index b13c2b4..093a754 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.h b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.h
index a9c7962..a982c99 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.cpp
index a23bbaf..5668787 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.h b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.h
index a8ad6d2..2e2e3d5 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyConsensusTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.cpp
index 3b37a38..09a0b13 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 #include "AssemblyBrowser.h"
 
 #include <U2Core/U2SafePoints.h>
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
+#include <QPainter>
+#include <QMouseEvent>
 
 
 namespace U2 {
@@ -46,7 +46,8 @@ void AssemblyCoverageGraph::connectSlots() {
 void AssemblyCoverageGraph::drawAll() {
     if(!model->isEmpty()) {
         if(cachedView.size() != size()) {
-            cachedView = QPixmap(size());
+            cachedView = QPixmap(size() * devicePixelRatio());
+            cachedView.setDevicePixelRatio(devicePixelRatio());
             redraw = true;
         }
         if (redraw) {
@@ -61,7 +62,7 @@ void AssemblyCoverageGraph::drawAll() {
                         drawGraph(p, ci, 128);
                     }
                     QString message = coverageTaskRunner.isIdle() ? tr("Coverage calculation canceled") : tr("Calculating coverage...");
-                    p.drawText(cachedView.rect(), Qt::AlignCenter, message);
+                    p.drawText(rect(), Qt::AlignCenter, message);
                 } else if(lastResult.region == visibleRegion) {
                     drawGraph(p, lastResult);
                 } else if(browser->isInLocalCoverageCache(visibleRegion)) {
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.h b/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.h
index becb6d4..12b3d47 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyCoverageGraph.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,8 @@
 
 #include "CoverageInfo.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-#include <QtCore/QSharedPointer>
+#include <QWidget>
+#include <QSharedPointer>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
index 29e1eaf..fe54f77 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -122,8 +122,7 @@ AssemblyInfoWidget::AssemblyInfoWidget(AssemblyBrowser *browser, QWidget *p)
 ////////////////////////////////////
 const QString AssemblyInfoWidgetFactory::GROUP_ID = "OP_ASS_INFO";
 const QString AssemblyInfoWidgetFactory::GROUP_ICON_STR = ":core/images/chart_bar.png";
-const QString AssemblyInfoWidgetFactory::GROUP_TITLE = QString(QObject::tr("Assembly Statistics"));
-const QString AssemblyInfoWidgetFactory::GROUP_DOC_PAGE = "18223127";
+const QString AssemblyInfoWidgetFactory::GROUP_DOC_PAGE = "20875031";
 
 
 AssemblyInfoWidgetFactory::AssemblyInfoWidgetFactory()
@@ -150,7 +149,7 @@ QWidget* AssemblyInfoWidgetFactory::createWidget(GObjectView* objView)
 
 OPGroupParameters AssemblyInfoWidgetFactory::getOPGroupParameters()
 {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Assembly Statistics"), GROUP_DOC_PAGE);
 }
 
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.h b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.h
index 46deb5a..4daebdd 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyInfoWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,7 +49,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyModel.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyModel.cpp
index 2cd3a2c..f4695ce 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyModel.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QApplication>
+#include <QMessageBox>
 
 #include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyModel.h b/src/corelibs/U2View/src/ov_assembly/AssemblyModel.h
index a6ff6c0..7ec3b8b 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyModel.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef __U2_ASSEMBLY_BROWSER_MODEL_H__
 #define __U2_ASSEMBLY_BROWSER_MODEL_H__
 
-#include <QtCore/QPointer>
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
-#include <QtCore/QFile>
+#include <QPointer>
+#include <QMutex>
+#include <QMutexLocker>
+#include <QFile>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/GObject.h>
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
index 3b3730d..ad8dab0 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -131,8 +131,7 @@ void CoveredRegionsLabel::sl_updateContent() {
 ////////////////////////////////////
 const QString AssemblyNavigationWidgetFactory::GROUP_ID = "OP_ASS_NAVIGATION";
 const QString AssemblyNavigationWidgetFactory::GROUP_ICON_STR = ":core/images/goto.png";
-const QString AssemblyNavigationWidgetFactory::GROUP_TITLE = QString(QObject::tr("Navigation"));
-const QString AssemblyNavigationWidgetFactory::GROUP_DOC_PAGE = "18223125";
+const QString AssemblyNavigationWidgetFactory::GROUP_DOC_PAGE = "20875029";
 
 AssemblyNavigationWidgetFactory::AssemblyNavigationWidgetFactory() {
     objectViewOfWidget = ObjViewType_AssemblyBrowser;
@@ -153,7 +152,7 @@ QWidget* AssemblyNavigationWidgetFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters AssemblyNavigationWidgetFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Navigation"), GROUP_DOC_PAGE);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.h b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.h
index 2f2d933..614240a 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyNavigationWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -73,7 +73,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
index cf645de..2178ecc 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 #include <QResizeEvent>
 #include <QVBoxLayout>
 #include <QWheelEvent>
-#include <QtGui/QClipboard>
+#include <QClipboard>
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/Counter.h>
@@ -172,8 +172,6 @@ void AssemblyReadsArea::createMenu() {
     connect(optimizeRenderAction, SIGNAL(toggled(bool)), SLOT(sl_onOptimizeRendering(bool)));
 }
 
-static const QString BIND_HERE(QObject::tr("Lock here"));
-
 QMenu* AssemblyReadsArea::createShadowingMenu() {
     QMenu *shadowingMenu = new QMenu(tr("Reads shadowing"));
 
@@ -185,7 +183,7 @@ QMenu* AssemblyReadsArea::createShadowingMenu() {
     shadowingModeCentered->setCheckable(true);
 
     shadowingMenu->addSeparator();
-    shadowingBindHere = shadowingMenu->addAction(BIND_HERE);
+    shadowingBindHere = shadowingMenu->addAction(QObject::tr("Lock here"));
     shadowingBindHere->setDisabled(true);
     connect(shadowingBindHere, SIGNAL(triggered()), this, SLOT(sl_onBindShadowing()));
 
@@ -209,7 +207,8 @@ QMenu* AssemblyReadsArea::createShadowingMenu() {
 
 void AssemblyReadsArea::initRedraw() {
     redraw = true;
-    cachedView = QPixmap(size());
+    cachedView = QPixmap(size() * devicePixelRatio());
+    cachedView.setDevicePixelRatio(devicePixelRatio());
 }
 
 void AssemblyReadsArea::connectSlots() {
@@ -427,7 +426,7 @@ void AssemblyReadsArea::drawReads(QPainter & p) {
         if(text) {
             f.setPointSize(calcFontPointSize());
         }
-        cellRenderer->render(QSize(cachedReads.letterWidth, cachedReads.letterWidth), text, f);
+        cellRenderer->render(QSize(cachedReads.letterWidth, cachedReads.letterWidth), devicePixelRatio(), text, f);
     }
 
     int totalBasesPainted = 0;
@@ -963,7 +962,7 @@ void AssemblyReadsArea::shadowingMenuSetBind(bool enable) {
         shadowingJump->setEnabled(true);
     }
     else {
-        shadowingBindHere->setText(BIND_HERE);
+        shadowingBindHere->setText(QObject::tr("Lock here"));
         shadowingBindHere->setCheckable(false);
         shadowingBindHere->setChecked(false);
         shadowingJump->setEnabled(false);
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.h b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.h
index 2e0939b..97e10ff 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.cpp
index 9681080..2428c24 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,9 @@
 
 #include <U2Core/U2AssemblyUtils.h>
 
-#include <QtGui/QMouseEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QBoxLayout>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QBoxLayout>
-#endif
+#include <QMouseEvent>
+#include <QApplication>
+#include <QBoxLayout>
 
 namespace U2 {
 
@@ -86,9 +81,6 @@ static QString getCigarString(const QString & ci) {
     return cigar;
 }
 
-static const QString DIRECT_STR(QObject::tr("direct"));
-static const QString COMPL_STR(QObject::tr("complement"));
-
 QString getReadSequence(const QByteArray & bytes) {
     QString ret(bytes);
     if(ret.size() < AssemblyReadsAreaHint::LETTER_MAX_COUNT) {
@@ -110,7 +102,7 @@ QString AssemblyReadsAreaHint::getReadDataAsString(const U2AssemblyRead & r) {
     ret += QString("Cigar: %1\n").arg(QString(U2AssemblyUtils::cigar2String(r->cigar)));
     {
         bool onCompl = ReadFlagsUtils::isComplementaryRead(r->flags);
-        ret += QString("Strand: %1\n").arg(onCompl ? COMPL_STR : DIRECT_STR);
+        ret += QString("Strand: %1\n").arg(onCompl ? QObject::tr("complement") : QObject::tr("direct"));
     }
     if(ReadFlagsUtils::isUnmappedRead(r->flags)) {
         ret += "Unmapped\n";
@@ -157,7 +149,7 @@ static QString formatReadInfo(U2AssemblyRead r) {
     text += QString("<tr><td><b>Cigar</b>: %1</td></tr>").arg(getCigarString(U2AssemblyUtils::cigar2String(r->cigar)));
     {
         bool onCompl = ReadFlagsUtils::isComplementaryRead(r->flags);
-        text += QString("<tr><td><b>Strand</b>: %1</td></tr>").arg(onCompl ? COMPL_STR : DIRECT_STR);
+        text += QString("<tr><td><b>Strand</b>: %1</td></tr>").arg(onCompl ? QObject::tr("complement") : QObject::tr("direct"));
     }
     text += QString("<tr><td><b>Read sequence</b>: %1</td></tr>").arg(getReadSequence(r->readSequence));
     if(ReadFlagsUtils::isUnmappedRead(r->flags)) {
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.h b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.h
index f8021e9..73e660f 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReadsAreaHint.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,8 @@
 #ifndef __U2_ASSEMBLY_READS_AREA_HINT_H__
 #define __U2_ASSEMBLY_READS_AREA_HINT_H__
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QFrame>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QFrame>
-#endif
+#include <QLabel>
+#include <QFrame>
 
 #include <U2Core/U2Assembly.h>
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.cpp
index f2c1851..f9e0f56 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include "AssemblyReferenceArea.h"
 
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
+#include <QPainter>
+#include <QMouseEvent>
 #include <U2Core/Timer.h>
 #include <U2Core/U2SafePoints.h>
 
@@ -68,7 +68,8 @@ void AssemblySequenceArea::initCellRenderer(QString id) {
 void AssemblySequenceArea::drawAll() {
     if(canDrawSequence()) {
         if (redraw) {
-            cachedView = QPixmap(size());
+            cachedView = QPixmap(size() * devicePixelRatio());
+            cachedView.setDevicePixelRatio(devicePixelRatio());
             cachedView.fill(Qt::transparent);
             QPainter p(&cachedView);
             redraw = false;
@@ -113,7 +114,7 @@ void AssemblySequenceArea::drawSequence(QPainter & p) {
                 text = false;
             }
         }
-        cellRenderer->render(QSize(letterWidth, letterHeight), text, f);
+        cellRenderer->render(QSize(letterWidth, letterHeight), devicePixelRatio(), text, f);
         QByteArray referenceFragment;
         if(needsReference) {
             referenceFragment = model->getReferenceRegionOrEmpty(getVisibleRegion());
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.h b/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.h
index 38aa7c5..8b24a26 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyReferenceArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,9 @@
 #ifndef __ASSEMBLY_REFERENCE_AREA_H__
 #define __ASSEMBLY_REFERENCE_AREA_H__
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QMenu>
-#endif
-#include <QtCore/QSharedPointer>
+#include <QWidget>
+#include <QMenu>
+#include <QSharedPointer>
 
 #include "AssemblyCellRenderer.h"
 #include "AssemblyModel.h"
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.cpp
index c375c2b..d72441f 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 
 #include <math.h>
 
-#include <QtCore/QLine>
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
+#include <QLine>
+#include <QPainter>
+#include <QMouseEvent>
 
 #include <U2Core/FormatUtils.h>
 
@@ -71,6 +71,12 @@ void AssemblyRuler::connectSlots() {
 
 void AssemblyRuler::drawAll() {
     if(!model->isEmpty()) {
+        QSize currentSize = size() * devicePixelRatio();
+        if (cachedView.size() != currentSize) {
+            cachedView = QPixmap(currentSize);
+            cachedView.setDevicePixelRatio(devicePixelRatio());
+            redraw = true;
+        }
         if (redraw) {
             cachedView.fill(Qt::transparent);
             QPainter p(&cachedView);
@@ -78,6 +84,7 @@ void AssemblyRuler::drawAll() {
             drawRuler(p);
         }
         QPixmap cachedViewCopy(cachedView);
+        cachedViewCopy.setDevicePixelRatio(devicePixelRatio());
         {
             QPainter p(&cachedViewCopy);
             drawCursor(p);
@@ -135,8 +142,8 @@ void AssemblyRuler::drawCursor(QPainter & p) {
     assert(cachedLabelsRects.size() == cachedLabels.size());
     for(int i = 0; i < cachedLabels.size(); i++) {
         const QRect & labelRect = cachedLabelsRects.at(i);
-        if(!labelRect.intersects(offsetRect) && rect().contains(labelRect)) {
-            p.drawImage(cachedLabelsRects.at(i), cachedLabels.at(i));
+        if(!labelRect.intersects(offsetRect)) {
+            p.drawImage(labelRect, cachedLabels.at(i));
         }
     }
 }
@@ -189,7 +196,8 @@ void AssemblyRuler::drawRuler(QPainter & p) {
 
             if(offsetRect.left() > lastLabelRight) {
                 //render image with label and cache it. all images will be drawn on mouseMove event
-                QImage img(textWidth, textHeight, QImage::Format_ARGB32);
+                QImage img(textWidth * devicePixelRatio(), textHeight * devicePixelRatio(), QImage::Format_ARGB32);
+                img.setDevicePixelRatio(devicePixelRatio());
                 QPainter labelPainter(&img);
                 img.fill(Qt::transparent);
                 labelPainter.drawText(QRect(0, 0, textWidth, textHeight), Qt::AlignCenter, offsetStr);
@@ -229,18 +237,14 @@ void AssemblyRuler::paintEvent(QPaintEvent * e) {
     QWidget::paintEvent(e);
 }
 
-void AssemblyRuler::resizeEvent(QResizeEvent * e) {
-    sl_redraw();
-    QWidget::resizeEvent(e);
-}
-
 void AssemblyRuler::mouseMoveEvent(QMouseEvent * e) {
     sl_handleMoveToPos(e->pos());
     QWidget::mouseMoveEvent(e);
 }
 
 void AssemblyRuler::sl_redraw() {
-    cachedView = QPixmap (size());
+    cachedView = QPixmap(size() * devicePixelRatio());
+    cachedView.setDevicePixelRatio(devicePixelRatio());
     redraw = true;
     update();
 }
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.h b/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.h
index 959c6b8..26e37c0 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyRuler.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,8 @@
 #ifndef __ASSEMBLY_RULER__
 #define __ASSEMBLY_RULER__
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-#include <QtCore/QSharedPointer>
+#include <QWidget>
+#include <QSharedPointer>
 #include "AssemblyModel.h"
 
 namespace U2 {
@@ -53,7 +48,6 @@ public:
 
 protected:
     void paintEvent(QPaintEvent * e);
-    void resizeEvent(QResizeEvent * e);
     void mouseMoveEvent(QMouseEvent * e);
 
 public slots:
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
index 46051b6..1d6b5e3 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -230,8 +230,7 @@ QWidget * AssemblySettingsWidget::createRulerSettings() {
 ////////////////////////////////////
 const QString AssemblySettingsWidgetFactory::GROUP_ID = "OP_ASS_SETTINGS";
 const QString AssemblySettingsWidgetFactory::GROUP_ICON_STR = ":core/images/settings2.png";
-const QString AssemblySettingsWidgetFactory::GROUP_TITLE = QString(QObject::tr("Assembly Browser Settings"));
-const QString AssemblySettingsWidgetFactory::GROUP_DOC_PAGE = "18223126";
+const QString AssemblySettingsWidgetFactory::GROUP_DOC_PAGE = "20875030";
 
 
 AssemblySettingsWidgetFactory::AssemblySettingsWidgetFactory()
@@ -258,7 +257,7 @@ QWidget* AssemblySettingsWidgetFactory::createWidget(GObjectView* objView)
 
 OPGroupParameters AssemblySettingsWidgetFactory::getOPGroupParameters()
 {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Assembly Browser Settings"), GROUP_DOC_PAGE);
 }
 
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.h b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.h
index 0d27c29..527f4ba 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblySettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -77,7 +77,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.cpp
index a6b4e77..9e6f969 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.h b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.h
index 8e8921f..fb40e6d 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantHint.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.cpp b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.cpp
index 071417e..5cdad7c 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -257,12 +257,13 @@ void AssemblyVariantRow::prepareRenderers(int cellWidth, int cellHeight) {
             snpText = false;
         }
     }
-    nuclRenderer->render(QSize(cellWidth, cellHeight), text, f);
-    snpRenderer->render(QSize(cellWidth, halfHeight), snpText, snpF);
+    nuclRenderer->render(QSize(cellWidth, cellHeight), devicePixelRatio(), text, f);
+    snpRenderer->render(QSize(cellWidth, halfHeight), devicePixelRatio(), snpText, snpF);
 }
 
 void AssemblyVariantRow::sl_redraw() {
-    cachedView = QPixmap(size());
+    cachedView = QPixmap(size() * devicePixelRatio());
+    cachedView.setDevicePixelRatio(devicePixelRatio());
     redraw = true;
     update();
 }
diff --git a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.h b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.h
index 04aba01..6ad4add 100644
--- a/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.h
+++ b/src/corelibs/U2View/src/ov_assembly/AssemblyVariantRow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.cpp b/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.cpp
index 97594a7..8675d37 100644
--- a/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.h b/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.h
index c8b0029..3e7fcb5 100644
--- a/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/CalculateCoveragePerBaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_CALCULATE_COVERAGE_PER_BASE_TASK_H_
 #define _U2_CALCULATE_COVERAGE_PER_BASE_TASK_H_
 
+#include <QMap>
+
 #include <U2Core/U2Assembly.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2Type.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/CoverageInfo.cpp b/src/corelibs/U2View/src/ov_assembly/CoverageInfo.cpp
index 66d1ee8..f49c65b 100644
--- a/src/corelibs/U2View/src/ov_assembly/CoverageInfo.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/CoverageInfo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/CoverageInfo.h b/src/corelibs/U2View/src/ov_assembly/CoverageInfo.h
index 4a8caad..e625966 100644
--- a/src/corelibs/U2View/src/ov_assembly/CoverageInfo.h
+++ b/src/corelibs/U2View/src/ov_assembly/CoverageInfo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/BackgroundTaskRunner.h>
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QVector>
-#include <QtCore/QSharedPointer>
+#include <QVector>
+#include <QSharedPointer>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.cpp b/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.cpp
index ca9b451..b0821e4 100644
--- a/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.h b/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.h
index 34b94ea..a66f6e3 100644
--- a/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.h
+++ b/src/corelibs/U2View/src/ov_assembly/CoveredRegionsManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef __COVERED_REGIONS_MANAGER_H__
 #define __COVERED_REGIONS_MANAGER_H__
 
-#include <QtCore/QVector>
+#include <QVector>
 #include "CoverageInfo.h"
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
index dd6a131..ed0939b 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ ExportConsensusDialog::ExportConsensusDialog(QWidget *p, const ExportConsensusTa
       saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223119");
+    new HelpButton(this, buttonBox, "20875023");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
index e0a6369..4d43e3a 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include "ExportConsensusTask.h"
 #include <ui_ExportConsensusDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.cpp
index 5bc2675..ca202d1 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
@@ -89,7 +89,7 @@ void ExportConsensusTask::prepare() {
     consensusTask->setSubtaskProgressWeight(100);
     addSubTask(consensusTask);
 
-    seqImporter.startSequence(dbiRef, U2ObjectDbi::ROOT_FOLDER, settings.seqObjName, false, stateInfo);
+    seqImporter.startSequence(stateInfo, dbiRef, U2ObjectDbi::ROOT_FOLDER, settings.seqObjName, false);
     CHECK_OP(stateInfo, );
 
     if (settings.saveToFile) {
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.h
index 466973f..d2b2253 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "AssemblyConsensusTask.h"
 
-#include <QtCore/QQueue>
+#include <QQueue>
 
 #include <U2Core/DocumentProviderTask.h>
 #include <U2Core/U2SequenceUtils.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
index 6fdd0d1..378eea1 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,7 +41,7 @@ ExportConsensusVariationsDialog::ExportConsensusVariationsDialog(QWidget *p, con
 {
     setupUi(this);
     setWindowTitle(tr("Export Consensus Variations"));
-    new HelpButton(this, buttonBox, "18223121");
+    new HelpButton(this, buttonBox, "20875025");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     //hide for this dialog
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
index a7bd65b..2799999 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.cpp
index e9e3646..2dfb7c5 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/U2SequenceDbi.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.h b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.h
index 7f81951..e38c89e 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportConsensusVariationsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "AssemblyConsensusTask.h"
 
-#include <QtCore/QQueue>
+#include <QQueue>
 
 #include <U2Core/DocumentProviderTask.h>
 #include <U2Core/VariantTrackObject.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
index 435e74a..013d31e 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -97,8 +97,9 @@ void ExportCoverageDialog::sl_formatChanged(const QString &format) {
 
 void ExportCoverageDialog::initLayout() {
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
-    new HelpButton(this, buttonBox, "18223122");
+    new HelpButton(this, buttonBox, "20875026");
     gbAdditionalOptions->hide();
+    setMaximumHeight(layout()->minimumSize().height());
     adjustSize();
 }
 
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
index f04da8d..08cc200 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui
index bba4045..21852c8 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageDialog.ui
@@ -10,11 +10,17 @@
     <height>242</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
-   <string>Export the Assembly Coverage</string>
+   <string>Export Assembly Coverage</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0">
     <widget class="QWidget" name="gbFileOptions" native="true">
      <layout class="QGridLayout" name="gridLayout">
       <item row="0" column="0">
@@ -75,8 +81,20 @@
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="1" column="0">
     <layout class="QHBoxLayout" name="thresholdLayout">
+     <property name="leftMargin">
+      <number>9</number>
+     </property>
+     <property name="topMargin">
+      <number>9</number>
+     </property>
+     <property name="rightMargin">
+      <number>9</number>
+     </property>
+     <property name="bottomMargin">
+      <number>9</number>
+     </property>
      <item>
       <widget class="QLabel" name="lblThreshold">
        <property name="text">
@@ -115,7 +133,7 @@
      </item>
     </layout>
    </item>
-   <item>
+   <item row="2" column="0">
     <widget class="QWidget" name="gbAdditionalOptions" native="true">
      <layout class="QVBoxLayout" name="verticalLayout_2">
       <item>
@@ -138,7 +156,7 @@
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="3" column="0">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
index 2944d67..d1544f5 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/Counter.h>
 #include <U2Core/IOAdapterUtils.h>
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.h b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.h
index c209cc9..6c774ff 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportCoverageTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
index 77d8c6f..d5eaeb1 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ namespace U2 {
 
 ExportReadsDialog::ExportReadsDialog(QWidget * p, const QList<DocumentFormatId> & formats) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223117");
+    new HelpButton(this, buttonBox, "20875021");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
index 4a240de..ab04af8 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExportReadsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp
index 1c390d1..381b291 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ ExtractAssemblyRegionDialog::ExtractAssemblyRegionDialog(QWidget * p, ExtractAss
 , settings(settings) {
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "18223123");
+    new HelpButton(this, buttonBox, "20875027");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h
index 1053f30..6d44527 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionDialog.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp
index 9e745fc..084599a 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h
index 7c41701..53f72a2 100644
--- a/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h
+++ b/src/corelibs/U2View/src/ov_assembly/ExtractAssemblyRegionTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -44,6 +44,7 @@ struct ExtractAssemblyRegionTaskSettings {
 };
 
 class ExtractAssemblyRegionAndOpenViewTask : public Task {
+    Q_OBJECT
 public:
     ExtractAssemblyRegionAndOpenViewTask(const ExtractAssemblyRegionTaskSettings& settings);
 
@@ -56,6 +57,7 @@ private:
 };
 
 class ExtractAssemblyRegionTask : public Task {
+    Q_OBJECT
 public:
     ExtractAssemblyRegionTask(const ExtractAssemblyRegionTaskSettings& settings);
 
diff --git a/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.cpp b/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.cpp
index 35f66c2..e031f69 100644
--- a/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.cpp
+++ b/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,19 +28,11 @@
 #include <U2Core/Log.h>
 #include <U2Core/AppContext.h>
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QLabel>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QMenu>
-#endif
-
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
+#include <QApplication>
+#include <QLabel>
+#include <QMenu>
+#include <QPainter>
+#include <QMouseEvent>
 
 #include <math.h>
 
@@ -114,21 +106,24 @@ void ZoomableAssemblyOverview::connectSlots() {
 
 void ZoomableAssemblyOverview::initSelectionRedraw() {
     redrawSelection = true;
-    cachedView = QPixmap(size());
+    cachedView = QPixmap(size() * devicePixelRatio());
+    cachedView.setDevicePixelRatio(devicePixelRatio());
 }
 
 void ZoomableAssemblyOverview::drawAll() {
     if(!model->isEmpty()) {
         //no coverage -> draw nothing
         if(!coverageTaskRunner.isIdle()) {
-            cachedBackground = QPixmap(size());
+            cachedBackground = QPixmap(size() * devicePixelRatio());
+            cachedBackground.setDevicePixelRatio(devicePixelRatio());
             QPainter p(&cachedBackground);
-            p.fillRect(cachedBackground.rect(), Qt::gray);
-            p.drawText(cachedBackground.rect(), Qt::AlignCenter, tr("Background is rendering..."));
+            p.fillRect(rect(), Qt::gray);
+            p.drawText(rect(), Qt::AlignCenter, tr("Background is rendering..."));
         }
         //coverage is ready -> redraw background if needed
         else if(redrawBackground) {
-            cachedBackground = QPixmap(size());
+            cachedBackground = QPixmap(size() * devicePixelRatio());
+            cachedBackground.setDevicePixelRatio(devicePixelRatio());
             QPainter p(&cachedBackground);
             drawBackground(p);
             redrawBackground = false;
diff --git a/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.h b/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.h
index 3c0030d..4e9ed0c 100644
--- a/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.h
+++ b/src/corelibs/U2View/src/ov_assembly/ZoomableAssemblyOverview.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,17 +24,11 @@
 
 #include "AssemblyBrowserSettings.h"
 #include "CoverageInfo.h"
-//#include <U2Core/BackgroundTaskRunner.h>
 
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QSharedPointer>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-
+#include <QSharedPointer>
+#include <QWidget>
 
 class QMenu;
 
diff --git a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
index 24739a3..510a5ca 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,7 +46,7 @@
 
 #include "AlignSequencesToAlignmentTask.h"
 
-#include <QtCore/QDir>
+#include <QDir>
 #include <QMessageBox>
 
 namespace U2 {
@@ -81,18 +81,18 @@ void SequenceObjectsExtractor::extractSequencesFromObjects(const QList<GObject*>
             }
         }
 
-        if(object->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT) {
+        if(object->getGObjectType() == GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) {
             extractFromMsa = true;
-            MAlignmentObject* curObj = qobject_cast<MAlignmentObject*>(object);
-            SAFE_POINT(curObj != NULL, "MAlignmentObject is null",);
+            MultipleSequenceAlignmentObject* curObj = qobject_cast<MultipleSequenceAlignmentObject*>(object);
+            SAFE_POINT(curObj != NULL, "MultipleSequenceAlignmentObject is null",);
 
             checkAlphabet(curObj->getAlphabet(), curObj->getGObjectName());
             sequencesMaxLength = qMax(sequencesMaxLength, curObj->getLength());
 
-            foreach(const MAlignmentRow& row, curObj->getMAlignment().getRows()) {
-                U2EntityRef seqRef(curObj->getEntityRef().dbiRef, row.getRowDBInfo().sequenceId);
+            foreach(const MultipleSequenceAlignmentRow& row, curObj->getMsa()->getMsaRows()) {
+                U2EntityRef seqRef(curObj->getEntityRef().dbiRef, row->getRowDbInfo().sequenceId);
                 sequenceRefs << seqRef;
-                sequenceNames << row.getName();
+                sequenceNames << row->getName();
             }
         } else if(object->getGObjectType() == GObjectTypes::SEQUENCE) {
             U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(object);
@@ -221,7 +221,7 @@ const SequenceObjectsExtractor& LoadSequencesTask::getExtractor() const {
 /************************************************************************/
 /* AlignSequencesToAlignmentTask */
 /************************************************************************/
-AlignSequencesToAlignmentTask::AlignSequencesToAlignmentTask(MAlignmentObject* obj, const SequenceObjectsExtractor& extractor)
+AlignSequencesToAlignmentTask::AlignSequencesToAlignmentTask(MultipleSequenceAlignmentObject* obj, const SequenceObjectsExtractor& extractor)
     : Task(tr("Align sequences to alignment task"), TaskFlags_NR_FOSE_COSC), maObj(obj), stateLock(NULL), docStateLock(NULL),
     sequencesMaxLength(extractor.getMaxSequencesLength()), extr(extractor)
 {
@@ -231,7 +231,7 @@ AlignSequencesToAlignmentTask::AlignSequencesToAlignmentTask(MAlignmentObject* o
     settings.maxSequenceLength = extractor.getMaxSequencesLength();
     settings.alphabet = extractor.getAlphabet()->getId();
     usedDocuments = extractor.getUsedDocuments();
-    initialMAlignmentAlphabet = obj->getAlphabet();
+    initialMsaAlphabet = obj->getAlphabet();
 }
 
 void AlignSequencesToAlignmentTask::prepare()
@@ -267,7 +267,7 @@ void AlignSequencesToAlignmentTask::fillSettingsByDefault() {
     AlignmentAlgorithmsRegistry* alignmentRegistry = AppContext::getAlignmentAlgorithmsRegistry();
     SAFE_POINT(NULL != alignmentRegistry, "AlignmentAlgorithmsRegistry is NULL.", );
     if(alignmentRegistry->getAvailableAlgorithmIds(AddToAlignment).contains(BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT)
-        && maObj->getMAlignment().getNumRows() != 0) {
+        && maObj->getMultipleAlignment()->getNumRows() != 0) {
         settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_MAFFT;
     } else {
         settings.algorithmName = BaseAlignmentAlgorithmsIds::ALIGN_SEQUENCES_TO_ALIGNMENT_BY_UGENE;
@@ -293,11 +293,11 @@ Task::ReportResult AlignSequencesToAlignmentTask::report() {
 
         delete docStateLock;
     }
-    MAlignmentModInfo mi;
-    mi.alphabetChanged = extr.getAlphabet()->getId() != initialMAlignmentAlphabet->getId();
-    mi.sequenceListChanged = true;
+    MaModificationInfo mi;
+    mi.alphabetChanged = extr.getAlphabet()->getId() != initialMsaAlphabet->getId();
+    mi.rowListChanged = true;
     if(!hasError() && !isCanceled()) {
-        maObj->updateCachedMAlignment(mi);
+        maObj->updateCachedMultipleAlignment(mi);
     }
 
     return ReportResult_Finished;
@@ -306,9 +306,9 @@ Task::ReportResult AlignSequencesToAlignmentTask::report() {
 /************************************************************************/
 /* LoadSequencesAndAlignToAlignmentTask */
 /************************************************************************/
-LoadSequencesAndAlignToAlignmentTask::LoadSequencesAndAlignToAlignmentTask(MAlignmentObject* obj, const QStringList& urls)
+LoadSequencesAndAlignToAlignmentTask::LoadSequencesAndAlignToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QStringList& urls)
 : Task(tr("Load sequences and add to alignment task"), TaskFlag_NoRun), urls(urls), maObj(obj), loadSequencesTask(NULL) {
-    SAFE_POINT_EXT(obj != NULL, setError("MAlignmentObject is null"), );
+    SAFE_POINT_EXT(obj != NULL, setError("MultipleSequenceAlignmentObject is null"), );
     loadSequencesTask = new LoadSequencesTask(obj->getAlphabet(), urls);
     loadSequencesTask->setSubtaskProgressWeight(5);
     addSubTask(loadSequencesTask);
diff --git a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
index 508bffa..2bf8892 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
+++ b/src/corelibs/U2View/src/ov_msa/AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,12 @@
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentProviderTask.h>
 #include <U2Core/U2AlphabetUtils.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Algorithm/AlignSequencesToAlignmentTaskSettings.h>
 
@@ -104,32 +104,32 @@ private:
 class AlignSequencesToAlignmentTask : public Task {
     Q_OBJECT
 public:
-    AlignSequencesToAlignmentTask(MAlignmentObject* obj, const SequenceObjectsExtractor& extractor);
+    AlignSequencesToAlignmentTask(MultipleSequenceAlignmentObject* obj, const SequenceObjectsExtractor& extractor);
     void prepare();
     ReportResult report();
 private:
     void fillSettingsByDefault();
 
-    QPointer<MAlignmentObject>  maObj;
+    QPointer<MultipleSequenceAlignmentObject>  maObj;
     QStringList                 urls;
     StateLock*                  stateLock;
     StateLock*                  docStateLock;
     qint64 sequencesMaxLength;
     AlignSequencesToAlignmentTaskSettings settings;
     QList<Document*> usedDocuments;
-    const DNAAlphabet *initialMAlignmentAlphabet;
+    const DNAAlphabet *initialMsaAlphabet;
     SequenceObjectsExtractor extr;
 };
 
 class LoadSequencesAndAlignToAlignmentTask : public Task {
     Q_OBJECT
 public:
-    LoadSequencesAndAlignToAlignmentTask(MAlignmentObject* obj, const QStringList& urls);
+    LoadSequencesAndAlignToAlignmentTask(MultipleSequenceAlignmentObject* obj, const QStringList& urls);
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
     QStringList                 urls;
-    QPointer<MAlignmentObject>  maObj;
+    QPointer<MultipleSequenceAlignmentObject>  maObj;
     LoadSequencesTask*  loadSequencesTask;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/AlignmentLogo.cpp b/src/corelibs/U2View/src/ov_msa/AlignmentLogo.cpp
index 3347640..6e5af4d 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignmentLogo.cpp
+++ b/src/corelibs/U2View/src/ov_msa/AlignmentLogo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,9 +23,9 @@
 
 #include <U2View/MSAEditor.h>
 
-#include <QtGui/QPainter>
+#include <QPainter>
 #include <QHBoxLayout>
-#include "U2Core/MAlignment.h"
+#include "U2Core/MultipleSequenceAlignment.h"
 #include "U2Core/DNAAlphabet.h"
 #include <math.h>
 
@@ -56,9 +56,9 @@ AlignmentLogoRenderArea::AlignmentLogoRenderArea(const AlignmentLogoSettings& _s
             s = 4.0;
             break;
         default:
-            QByteArray chars = settings.ma.getAlphabet()->getAlphabetChars();
+            QByteArray chars = settings.ma->getAlphabet()->getAlphabetChars();
             foreach(char ch, chars) {
-                if(ch!=MAlignment_GapChar)
+                if(ch!=U2Msa::GAP_CHAR)
                     acceptableChars->append(ch);
             }
             s = 20.0;
@@ -81,9 +81,9 @@ void AlignmentLogoRenderArea::replaceSettings(const AlignmentLogoSettings& _s) {
             s = 4.0;
             break;
         default:
-            QByteArray chars = settings.ma.getAlphabet()->getAlphabetChars();
+            QByteArray chars = settings.ma->getAlphabet()->getAlphabetChars();
             foreach(char ch, chars) {
-                if(ch!=MAlignment_GapChar)
+                if(ch!=U2Msa::GAP_CHAR)
                     acceptableChars->append(ch);
             }
             s = 20.0;
@@ -126,15 +126,15 @@ void AlignmentLogoRenderArea::paintEvent(QPaintEvent* e) {
 }
 
 void AlignmentLogoRenderArea::resizeEvent(QResizeEvent* e) {
-    bitWidth = qMax(width() / settings.ma.getLength() - SPACER, MIN_WIDTH);
+    bitWidth = qMax(width() / settings.ma->getLength() - SPACER, MIN_WIDTH);
     bitHeight = (height() - s) * log(2.0) / log(s);
 
     QWidget::resizeEvent(e);
 }
 
 void AlignmentLogoRenderArea::evaluateHeights() {
-    const MAlignment& ma = settings.ma;
-    int numRows = ma.getNumRows();
+    const MultipleSequenceAlignment& ma = settings.ma;
+    int numRows = ma->getNumRows();
     error = (s - 1)/(2*log(2.0)*numRows);
 
     foreach (char ch, *acceptableChars) {
@@ -147,9 +147,9 @@ void AlignmentLogoRenderArea::evaluateHeights() {
 
     for (int pos = settings.startPos; pos < settings.len + settings.startPos; pos++) {
         for (int idx = 0; idx < numRows; idx++) {
-            const MAlignmentRow& row = ma.getRow(idx);
-            assert(pos < ma.getLength());
-            char ch = row.charAt(pos);
+            const MultipleSequenceAlignmentRow row = ma->getMsaRow(idx);
+            assert(pos < ma->getLength());
+            char ch = row->charAt(pos);
             if(acceptableChars->contains(ch)) {
                 int arrIdx = pos - settings.startPos;
                 assert(arrIdx >= 0);
@@ -162,7 +162,7 @@ void AlignmentLogoRenderArea::evaluateHeights() {
         }
     }
 
-    int rows = settings.ma.getNumRows();
+    int rows = settings.ma->getNumRows();
     for(int pos=0; pos < settings.len; pos++) {
         qreal h = getH(pos);
         foreach(char c, columns[pos]) {
@@ -174,7 +174,7 @@ void AlignmentLogoRenderArea::evaluateHeights() {
 
 qreal AlignmentLogoRenderArea::getH(int pos) {
     qreal h = 0.0;
-    int rows = settings.ma.getNumRows();
+    int rows = settings.ma->getNumRows();
     foreach(char ch, columns.at(pos)) {
         qreal freq = frequencies[(int)uchar(ch)][pos] / rows;
         h += -freq * log(freq) / log(2.0);
diff --git a/src/corelibs/U2View/src/ov_msa/AlignmentLogo.h b/src/corelibs/U2View/src/ov_msa/AlignmentLogo.h
index 761a1e5..8413121 100644
--- a/src/corelibs/U2View/src/ov_msa/AlignmentLogo.h
+++ b/src/corelibs/U2View/src/ov_msa/AlignmentLogo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,16 +24,11 @@
 
 #include <U2Core/global.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentInfo.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleAlignmentInfo.h>
+
+#include <QMainWindow>
+#include <QGraphicsItem>
 
 namespace U2 {
 
@@ -46,25 +41,25 @@ enum SequenceType {Auto, NA, AA};
 class U2VIEW_EXPORT AlignmentLogoSettings {
 public:
 
-    AlignmentLogoSettings(const MAlignment& _ma) : ma(_ma) {
+    AlignmentLogoSettings(const MultipleSequenceAlignment& _ma) : ma(_ma->getCopy()) {
         for (int i = 0; i < 256; i++) {
             colorScheme[i] = Qt::black;
         }
 
-        if (ma.getAlphabet()->isNucleic()) {
+        if (ma->getAlphabet()->isNucleic()) {
             sequenceType = NA;
             colorScheme['G'] = QColor(255, 128, 0);
             colorScheme['T'] = Qt::red;
             colorScheme['C'] = Qt::blue;
             colorScheme['A'] = Qt::green;
             colorScheme['U'] = Qt::red;
-        } else if (ma.getAlphabet()->isAmino()) {
+        } else if (ma->getAlphabet()->isAmino()) {
             sequenceType = AA;
         } else {
             sequenceType = Auto;
         }
 
-        if (!ma.getAlphabet()->isNucleic()) {
+        if (!ma->getAlphabet()->isNucleic()) {
             colorScheme['G'] = Qt::green;
             colorScheme['S'] = Qt::green;
             colorScheme['T'] = Qt::green;
@@ -87,7 +82,7 @@ public:
             colorScheme['V'] = Qt::black;
         }
         startPos = 0;
-        len = ma.getLength();
+        len = ma->getLength();
 
         /*colorScheme.insert('S', Qt::green);
         colorScheme.insert('G', Qt::green);
@@ -105,11 +100,14 @@ public:
         colorScheme.insert('W', Qt::blue);*/
     }
 
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     SequenceType            sequenceType;
     int                     startPos;
     int                     len;
     QColor                  colorScheme[256];
+
+private:
+    AlignmentLogoSettings();
 };
 
 /************************************************************************/
diff --git a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
index c2ec5ac..04672d2 100644
--- a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LocalFileAdapter.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -69,7 +69,7 @@ PrepareMsaClipboardDataTask * MsaClipboardDataTaskFactory::getInstance(MSAEditor
     if ("RTF" == formatId) {
         return new RichTextMsaClipboardTask(context, window, names);
     } else {
-        return new FormatsMsaClipboardTask(context->getMSAObject(), window, names, formatId);
+        return new FormatsMsaClipboardTask(context->getMaObject(), window, names, formatId);
     }
 }
 
@@ -77,21 +77,21 @@ U2Region MsaClipboardDataTaskFactory::getWindowBySelection(const QRect &selectio
     return U2Region (selection.x(), selection.width());;
 }
 
-QStringList MsaClipboardDataTaskFactory::getNamesBySelection(MSAEditor *context, const QRect &selection){
+QStringList MsaClipboardDataTaskFactory::getNamesBySelection(MaEditor *context, const QRect &selection){
     QStringList names;
     MSACollapsibleItemModel* m = context->getUI()->getCollapseModel();
     U2Region sel(m->mapToRow(selection.y()), m->mapToRow(selection.y() + selection.height()) - m->mapToRow(selection.y()));
-    MAlignmentObject* msaObj = context->getMSAObject();
+    MultipleAlignmentObject* msaObj = context->getMaObject();
     for (int i = sel.startPos; i < sel.endPos(); ++i) {
         if (m->rowToMap(i, true) < 0) {
             continue;
         }
-        names.append(msaObj->getMAlignment().getRow(i).getName());
+        names.append(msaObj->getMultipleAlignment()->getRow(i)->getName());
     }
     return names;
 }
 
-FormatsMsaClipboardTask::FormatsMsaClipboardTask(MAlignmentObject *msaObj, const U2Region &window, const QStringList &names, const DocumentFormatId &formatId)
+FormatsMsaClipboardTask::FormatsMsaClipboardTask(MultipleSequenceAlignmentObject *msaObj, const U2Region &window, const QStringList &names, const DocumentFormatId &formatId)
     :PrepareMsaClipboardDataTask(window, names), createSubalignmentTask(NULL), msaObj(msaObj), formatId(formatId){
 
 }
@@ -154,13 +154,13 @@ CreateSubalignmentSettings FormatsMsaClipboardTask::defineSettings(const QString
     return CreateSubalignmentSettings(window, names, path, true, false, formatId);
 }
 
-RichTextMsaClipboardTask::RichTextMsaClipboardTask(MSAEditor *context, const U2Region &window, const QStringList &names)
+RichTextMsaClipboardTask::RichTextMsaClipboardTask(MaEditor *context, const U2Region &window, const QStringList &names)
     :PrepareMsaClipboardDataTask(window, names), context(context){
 
 }
 
 void RichTextMsaClipboardTask::run(){
-    MAlignmentObject* obj = context->getMSAObject();
+    MultipleAlignmentObject* obj = context->getMaObject();
     const DNAAlphabet* al = obj->getAlphabet();
     if (!al){
         return;
@@ -171,18 +171,18 @@ void RichTextMsaClipboardTask::run(){
     DNAAlphabetType atype = al->getType();
     MsaColorSchemeRegistry* csr = AppContext::getMsaColorSchemeRegistry();
         QString csid = atype == DNAAlphabet_AMINO ?
-            s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_AMINO, MsaColorScheme::UGENE_AMINO).toString()
-          : s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_NUCL, MsaColorScheme::UGENE_NUCL).toString();
+            s->getValue(MSAE_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_AMINO, MsaColorScheme::UGENE_AMINO).toString()
+          : s->getValue(MSAE_SETTINGS_ROOT + MOBJECT_SETTINGS_COLOR_NUCL, MsaColorScheme::UGENE_NUCL).toString();
 
-    MsaColorSchemeFactory* csf = csr->getMsaColorSchemeFactoryById(csid);
+    MsaColorSchemeFactory* csf = csr->getSchemeFactoryById(csid);
     if (csf == NULL) {
-        csf = csr->getMsaColorSchemeFactoryById(atype == DNAAlphabet_AMINO ? MsaColorScheme::UGENE_AMINO : MsaColorScheme::UGENE_NUCL);
+        csf = csr->getSchemeFactoryById(atype == DNAAlphabet_AMINO ? MsaColorScheme::UGENE_AMINO : MsaColorScheme::UGENE_NUCL);
     }
     SAFE_POINT(csf!=NULL, "RTFMSA entry storing: NULL MsaColorSchemeFactory object", );
     MsaColorScheme* colorScheme = csf->create(this, obj);
 
-    QString fontFamily = s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_FAMILY, MOBJECT_DEFAULT_FONT_FAMILY).toString();
-    int pointSize = s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_SIZE, MOBJECT_DEFAULT_FONT_SIZE).toInt();
+    QString fontFamily = s->getValue(MSAE_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_FAMILY, MOBJECT_DEFAULT_FONT_FAMILY).toString();
+    int pointSize = s->getValue(MSAE_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_SIZE, MOBJECT_DEFAULT_FONT_SIZE).toInt();
 
     MsaHighlightingScheme* highlightingScheme = context->getUI()->getSequenceArea()->getCurrentHighlightingScheme();
     SAFE_POINT(highlightingScheme!=NULL, "RTFMSA entry storing: NULL highlightingScheme object", );
@@ -190,49 +190,46 @@ void RichTextMsaClipboardTask::run(){
     QString schemeName = highlightingScheme->metaObject()->className();
     bool isGapsScheme = schemeName == "U2::MSAHighlightingSchemeGaps";
 
-    const MAlignment &msa = obj->getMAlignment();
+    const MultipleAlignment msa = obj->getMultipleAlignment();
+
     U2OpStatusImpl os;
-    const int refSeq = msa.getRowIndexByRowId(context->getReferenceRowId(), os);
-    const MAlignmentRow *r = NULL;
-    if (MAlignmentRow::invalidRowId() != refSeq) {
-        r = &(msa.getRow(refSeq));
-    }
+    const int refSeq = msa->getRowIndexByRowId(context->getReferenceRowId(), os);
 
     result.append(QString("<span style=\"font-size:%1pt; font-family:%2;\">\n").arg(pointSize).arg(fontFamily).toLatin1());
-        const MAlignment& ma = obj->getMAlignment();
-        int numRows = ma.getNumRows();
-        for (int seq = 0; seq < numRows; seq++){
-            QString res;
-            const MAlignmentRow& row = ma.getRow(seq);
-            if (!names.contains(row.getName())){
-                continue;
-            }
+    int numRows = msa->getNumRows();
+    for (int seq = 0; seq < numRows; seq++){
+        QString res;
+        const MultipleAlignmentRow row = msa->getRow(seq);
+        if (!names.contains(row->getName())){
+            continue;
+        }
 
-            result.append("<p>");
-            for (int pos = window.startPos; pos < window.endPos(); pos++){
-                char c = row.charAt(pos);
-                bool highlight = false;
-                QColor color = colorScheme->getColor(seq, pos, c);
-                if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()) { //schemes which applied without reference
-                    const char refChar = '\n';
-                    highlightingScheme->process(refChar, c, color, highlight, pos, seq);
-                } else if (seq == refSeq || MAlignmentRow::invalidRowId() == refSeq) {
-                    highlight = true;
-                } else {
-                    const char refChar = r->charAt(pos);
-                    highlightingScheme->process(refChar, c, color, highlight, pos, seq);
-                }
-
-                if (color.isValid() && highlight) {
-                    res.append(QString("<span style=\"background-color:%1;\">%2</span>").arg(color.name()).arg(c));
-                } else {
-                    res.append(QString("%1").arg(c));
-                }
+        result.append("<p>");
+        for (int pos = window.startPos; pos < window.endPos(); pos++){
+            char c = row->charAt(pos);
+            bool highlight = false;
+            QColor color = colorScheme->getColor(seq, pos, c);
+            if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()) { //schemes which applied without reference
+                const char refChar = '\n';
+                highlightingScheme->process(refChar, c, color, highlight, pos, seq);
+            } else if (seq == refSeq || U2MsaRow::INVALID_ROW_ID == refSeq) {
+                highlight = true;
+            } else {
+                SAFE_POINT_EXT(NULL != row, setError("MSA row is NULL"), );
+                const char refChar = row->charAt(pos);
+                highlightingScheme->process(refChar, c, color, highlight, pos, seq);
             }
 
-            result.append(res.toLatin1());
-            result.append("</p>\n");
+            if (color.isValid() && highlight) {
+                res.append(QString("<span style=\"background-color:%1;\">%2</span>").arg(color.name()).arg(c));
+            } else {
+                res.append(QString("%1").arg(c));
+            }
         }
+
+        result.append(res.toLatin1());
+        result.append("</p>\n");
+    }
     result.append("</span>");
 
     delete colorScheme;
diff --git a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.h b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.h
index 83e6ab3..c568291 100644
--- a/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.h
+++ b/src/corelibs/U2View/src/ov_msa/Clipboard/SubalignmentToClipboardTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/U2Region.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentProviderTask.h>
 
@@ -52,7 +52,7 @@ protected:
 class FormatsMsaClipboardTask : public PrepareMsaClipboardDataTask {
     Q_OBJECT
 public:
-    FormatsMsaClipboardTask(MAlignmentObject *msaObj, const U2Region &window, const QStringList &names, const DocumentFormatId &formatId);
+    FormatsMsaClipboardTask(MultipleSequenceAlignmentObject *msaObj, const U2Region &window, const QStringList &names, const DocumentFormatId &formatId);
 
     void prepare();
     void run();
@@ -63,17 +63,17 @@ protected:
 
 private:
     CreateSubalignmentTask* createSubalignmentTask;
-    MAlignmentObject *msaObj;
+    MultipleSequenceAlignmentObject *msaObj;
     DocumentFormatId formatId;
 };
 
 class RichTextMsaClipboardTask : public PrepareMsaClipboardDataTask {
 public:
-    RichTextMsaClipboardTask(MSAEditor *context, const U2Region &window, const QStringList &names);
+    RichTextMsaClipboardTask(MaEditor *context, const U2Region &window, const QStringList &names);
     void run();
 
 private:
-    MSAEditor *context;
+    MaEditor *context;
 };
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -83,7 +83,7 @@ public:
 
 private:
     static U2Region getWindowBySelection(const QRect &selection);
-    static QStringList getNamesBySelection(MSAEditor *context, const QRect &selection);
+    static QStringList getNamesBySelection(MaEditor *context, const QRect &selection);
 };
 
 
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
index ae62d0d..c5567a3 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,7 +48,7 @@ ColorSchemaDialogController::ColorSchemaDialogController(QMap<char, QColor>& col
 
 int ColorSchemaDialogController::adjustAlphabetColors(){
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223053");
+    new HelpButton(this, buttonBox, "20874957");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     alphabetColorsView = new QPixmap(alphabetColorsFrame->size());
@@ -178,7 +178,7 @@ void ColorSchemaDialogController::mouseReleaseEvent(QMouseEvent * event){
 
 CreateColorSchemaDialog::CreateColorSchemaDialog(ColorSchemeData* _newSchema, QStringList _usedNames) : usedNames(_usedNames), newSchema(_newSchema) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223053");
+    new HelpButton(this, buttonBox, "20874957");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -367,7 +367,7 @@ void ColorSchemaSettingsPageWidget::sl_schemaChanged(int index){
 
 void ColorSchemaSettingsPageWidget::sl_onColorsDirButton() {
     QString path = colorsDirEdit->text();
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), path,
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         colorsDirEdit->setText(dir);
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
index 6b2194a..a11bc2e 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,15 +30,10 @@
 #include <ui_ColorSchemaSettingsWidget.h>
 #include <ui_CreateMSAScheme.h>
 
-#include <QtCore/QMap>
-
-#include <QtGui/QPixmap>
-#include <QtGui/QMouseEvent>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QMap>
+#include <QPixmap>
+#include <QMouseEvent>
+#include <QDialog>
 
 namespace U2{
 
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
index ca11438..f2da0e4 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -72,10 +72,9 @@ static void setSchemaColors(const ColorSchemeData& customSchema){
 
     const QMap<char, QColor> & alphColors = customSchema.alpColors;
     const QString& file  = customSchema.name + ColorSchemeUtils::COLOR_SCHEME_NAME_FILTERS;
-    DNAAlphabetType type = customSchema.type;
     bool defaultType = customSchema.defaultAlpType;
 
-    QString keyword(type == DNAAlphabet_AMINO ? ColorSchemeUtils::COLOR_SCHEME_AMINO_KEYWORD : (defaultType ? ColorSchemeUtils::COLOR_SCHEME_NUCL_DEFAULT_KEYWORD : ColorSchemeUtils::COLOR_SCHEME_NUCL_EXTENDED_KEYWORD));
+    QString keyword(customSchema.type == DNAAlphabet_AMINO ? ColorSchemeUtils::COLOR_SCHEME_AMINO_KEYWORD : (defaultType ? ColorSchemeUtils::COLOR_SCHEME_NUCL_DEFAULT_KEYWORD : ColorSchemeUtils::COLOR_SCHEME_NUCL_EXTENDED_KEYWORD));
 
     io->open(dir.filePath(file), IOAdapterMode_Write);
     // write header
@@ -93,7 +92,7 @@ static void setSchemaColors(const ColorSchemeData& customSchema){
 }
 
 
-const QString ColorSchemaSettingsPageController::helpPageId = QString("18222954");
+const QString ColorSchemaSettingsPageController::helpPageId = QString("20874858");
 
 ColorSchemaSettingsPageController::ColorSchemaSettingsPageController(MsaColorSchemeRegistry* mcsr, QObject* p)
 : AppSettingsGUIPageController(tr("Alignment Color Scheme"), ColorSchemaSettingsPageId, p) {
diff --git a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
index 8032ae8..1817ead 100644
--- a/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
+++ b/src/corelibs/U2View/src/ov_msa/ColorSchemaSettingsController.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.cpp b/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.cpp
index 92f54ad..a453bf4 100644
--- a/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.h b/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.h
index 47c10b4..ac28118 100644
--- a/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.h
+++ b/src/corelibs/U2View/src/ov_msa/Common/RefSeqCommonWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui
index 39a2221..a792281 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>366</width>
-    <height>352</height>
+    <height>358</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -24,20 +24,23 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="startPosBox">
+      <widget class="QLineEdit" name="startLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
          <verstretch>0</verstretch>
         </sizepolicy>
        </property>
+       <property name="inputMethodHints">
+        <set>Qt::ImhDigitsOnly</set>
+       </property>
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
        </property>
-       <property name="minimum">
+       <property name="minimum" stdset="0">
         <number>1</number>
        </property>
-       <property name="maximum">
+       <property name="maximum" stdset="0">
         <number>500000</number>
        </property>
       </widget>
@@ -50,7 +53,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="endPosBox">
+      <widget class="QLineEdit" name="endLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
@@ -60,7 +63,7 @@
        <property name="alignment">
         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
        </property>
-       <property name="minimum">
+       <property name="minimum" stdset="0">
         <number>1</number>
        </property>
       </widget>
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
index 8328982..f04b5c2 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/TmpDirChecker.h>
 #include <U2Core/U2SafePoints.h>
+#include <QPalette>
 
 #include <U2Formats/GenbankLocationParser.h>
 
@@ -45,17 +46,24 @@
 
 namespace U2{
 
-CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmentObject *_mobj, const QRect& selection, QWidget *p)
+CreateSubalignmentDialogController::CreateSubalignmentDialogController(MultipleSequenceAlignmentObject *_mobj, const QRect& selection, QWidget *p)
 : QDialog(p), mobj(_mobj), saveController(NULL){
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223083");
+    new HelpButton(this, buttonBox, "20874987");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Extract"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
+	startLineEdit->setValidator(new QIntValidator(1, mobj->getLength(), startLineEdit));
+	endLineEdit->setValidator(new QIntValidator(1, mobj->getLength(), endLineEdit));
+    
     connect(allButton, SIGNAL(clicked()), SLOT(sl_allButtonClicked()));
     connect(noneButton, SIGNAL(clicked()), SLOT(sl_noneButtonClicked()));
     connect(invertButton, SIGNAL(clicked()), SLOT(sl_invertButtonClicked()));
 
+	connect(startLineEdit, SIGNAL(textEdited(const QString&)), SLOT(sl_regionChanged()));
+	connect(endLineEdit, SIGNAL(textEdited(const QString&)), SLOT(sl_regionChanged()));
+    
+    
     int rowNumber = mobj->getNumRows();
     int alignLength = mobj->getLength();
 
@@ -84,15 +92,11 @@ CreateSubalignmentDialogController::CreateSubalignmentDialogController(MAlignmen
         startPos = selection.x() + 1;
         endPos = selection.x() + selection.width();
     }
-
-    startPosBox->setMaximum(alignLength);
-    endPosBox->setMaximum(alignLength);
-
-    startPosBox->setValue(startPos);
-    endPosBox->setValue(endPos);
+	startLineEdit->setText(QString::number(startPos));
+	endLineEdit->setText(QString::number(endPos));
 
     for (int i=0; i<rowNumber; i++) {
-        QCheckBox *cb = new QCheckBox(mobj->getMAlignment().getRow(i).getName(), this);
+        QCheckBox *cb = new QCheckBox(mobj->getMsa()->getMsaRow(i)->getName(), this);
         cb->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
         if ( (i >= startSeq) && (i <= endSeq)) {
             cb->setChecked(true);
@@ -145,6 +149,26 @@ void CreateSubalignmentDialogController::sl_noneButtonClicked(){
     }
 }
 
+void CreateSubalignmentDialogController::sl_regionChanged() {
+    int start = startLineEdit->text().toInt();
+    int end = endLineEdit->text().toInt();
+
+    QPalette happyP = filepathEdit->palette();
+    startLineEdit->setPalette(happyP);
+    endLineEdit->setPalette(happyP);
+    
+    if (start <= 0) {
+        QPalette p = startLineEdit->palette();
+        p.setColor(QPalette::Base, QColor(255,200,200));
+        startLineEdit->setPalette(p);
+    }
+    if (end <= start || end > mobj->getLength()) {
+        QPalette p = endLineEdit->palette();
+        p.setColor(QPalette::Base, QColor(255,200,200));
+        endLineEdit->setPalette(p);
+    }
+}
+
 void CreateSubalignmentDialogController::initSaveController() {
     SaveDocumentControllerConfig config;
     config.defaultFileName = GUrlUtils::getNewLocalUrlByFormat(mobj->getDocument()->getURLString(), mobj->getGObjectName(), BaseDocumentFormats::CLUSTAL_ALN, "_subalign");
@@ -155,7 +179,7 @@ void CreateSubalignmentDialogController::initSaveController() {
     config.parentWidget = this;
 
     DocumentFormatConstraints formatConstraints;
-    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
 
@@ -166,11 +190,11 @@ void CreateSubalignmentDialogController::accept(){
     QFileInfo fi(saveController->getSaveFileName());
     QDir dirToSave(fi.dir());
     if (!dirToSave.exists()){
-        QMessageBox::critical(this, this->windowTitle(), tr("Directory to save does not exist"));
+        QMessageBox::critical(this, this->windowTitle(), tr("Folder to save does not exist"));
         return;
     }
     if (!TmpDirChecker::checkWritePermissions(dirToSave.absolutePath())) {
-        QMessageBox::critical(this, this->windowTitle(), tr("No write permission to '%1' directory").arg(dirToSave.absolutePath()));
+        QMessageBox::critical(this, this->windowTitle(), tr("No write permission to '%1' folder").arg(dirToSave.absolutePath()));
         return;
     }
     if(saveController->getSaveFileName().isEmpty()){
@@ -187,18 +211,18 @@ void CreateSubalignmentDialogController::accept(){
     }
 
     // '-1' because in memory positions start from 0 not 1
-    int start = startPosBox->value() - 1;
-    int end = endPosBox->value() - 1;
+    int start = startLineEdit->text().toInt() - 1;
+    int end = endLineEdit->text().toInt() - 1;
     int seqLen = mobj->getLength();
 
     if( start > end ) {
-        QMessageBox::critical(this, windowTitle(), tr("Start position must be less than end position!"));
+        QMessageBox::critical(this, windowTitle(), tr("Illegal region!"));
         return;
     }
 
     U2Region region(start, end - start + 1), sequence(0, seqLen);
     if(!sequence.contains(region)){
-        QMessageBox::critical(this, this->windowTitle(), tr("Entered region not contained in current sequence"));
+        QMessageBox::critical(this, this->windowTitle(), tr("Illegal region!"));
         return;
     }
 
@@ -231,7 +255,7 @@ void CreateSubalignmentDialogController::selectSeqNames(){
 }
 
 
-CreateSubalignmentAndOpenViewTask::CreateSubalignmentAndOpenViewTask( MAlignmentObject* maObj, const CreateSubalignmentSettings& settings )
+CreateSubalignmentAndOpenViewTask::CreateSubalignmentAndOpenViewTask( MultipleSequenceAlignmentObject* maObj, const CreateSubalignmentSettings& settings )
 :Task(tr("Create sub-alignment and open view: %1").arg(maObj->getDocument()->getName()), TaskFlags_NR_FOSCOE)
 {
     csTask = new CreateSubalignmentTask(maObj, settings);
diff --git a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
index 6efc171..3264ffd 100644
--- a/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/CreateSubalignmentDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,9 @@
 
 #include "ui_CreateSubalignmentDialog.h"
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Task.h>
-#include <U2Core/global.h>
-
+#include <U2Core/U2Region.h>
 
 namespace U2{
 
@@ -36,7 +35,7 @@ class SaveDocumentController;
 class U2VIEW_EXPORT CreateSubalignmentDialogController : public QDialog, private Ui_CreateSubalignmentDialog {
     Q_OBJECT
 public:
-    CreateSubalignmentDialogController( MAlignmentObject *_mobj, const QRect& selection, QWidget *p = NULL);
+    CreateSubalignmentDialogController( MultipleSequenceAlignmentObject *_mobj, const QRect& selection, QWidget *p = NULL);
 
     void accept();
 
@@ -45,17 +44,19 @@ public:
     DocumentFormatId getFormatId();
     U2Region getRegion();
     QStringList getSelectedSeqNames();
+    
 
 private slots:
     void sl_allButtonClicked();
     void sl_invertButtonClicked();
     void sl_noneButtonClicked();
+    void sl_regionChanged();
 
 private:
     void initSaveController();
     void selectSeqNames();
 
-    MAlignmentObject *mobj;
+    MultipleSequenceAlignmentObject *mobj;
     U2Region window;
     QStringList selectedNames;
     SaveDocumentController* saveController;
@@ -68,7 +69,7 @@ class CreateSubalignmentSettings;
 class U2VIEW_EXPORT CreateSubalignmentAndOpenViewTask : public Task {
     Q_OBJECT
 public:
-    CreateSubalignmentAndOpenViewTask(MAlignmentObject* mobj, const CreateSubalignmentSettings& settings);
+    CreateSubalignmentAndOpenViewTask(MultipleSequenceAlignmentObject* mobj, const CreateSubalignmentSettings& settings);
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
     CreateSubalignmentTask* csTask;
diff --git a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
index 3e0dcb4..0aa0e90 100644
--- a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@ namespace U2 {
 
 DeleteGapsDialog::DeleteGapsDialog(QWidget* parent, int rowNum): QDialog(parent), ui(new Ui_DeleteGapsDialog()) {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223066");
+    new HelpButton(this, ui->buttonBox, "20874970");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Remove"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
index 1e0ba4e..4358334 100644
--- a/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
+++ b/src/corelibs/U2View/src/ov_msa/DeleteGapsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
index c3a114b..5e1617a 100644
--- a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,25 +23,67 @@
 #include <QSvgGenerator>
 
 #include <U2Core/L10n.h>
-
 #include <U2Core/QObjectScopedPointer.h>
 
 #include "MSAImageExportTask.h"
 #include "ui_MSAExportSettings.h"
-#include "../MSASelectSubalignmentDialog.h"
+#include "ov_msa/MSASelectSubalignmentDialog.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/RowHeightController.h"
 
 namespace U2 {
 
-MSAImageExportTask::MSAImageExportTask(MSAEditorUI *ui,
+MSAImageExportTask::MSAImageExportTask(MaEditorWgt *ui,
                                        const MSAImageExportSettings &msaSettings,
                                        const ImageExportTaskSettings &settings)
     : ImageExportTask(settings),
       ui(ui),
-      msaSettings(msaSettings) {
+      msaSettings(msaSettings)
+{
     SAFE_POINT_EXT(ui != NULL, setError(tr("MSA Editor UI is NULL")), );
 }
 
-MSAImageExportToBitmapTask::MSAImageExportToBitmapTask(MSAEditorUI *ui,
+void MSAImageExportTask::paintSequencesNames(QPainter &painter) {
+    CHECK(msaSettings.includeSeqNames, );
+    MaEditorNameList *namesArea = ui->getEditorNameList();
+    SAFE_POINT_EXT(ui->getEditor() != NULL, setError(tr("MSA Editor is NULL")), );
+    namesArea->drawNames(painter, msaSettings.seqIdx);
+}
+
+void MSAImageExportTask::paintConsensus(QPainter &painter) {
+    CHECK(msaSettings.includeConsensus || msaSettings.includeRuler, );
+    MaEditorConsensusArea *consensusArea = ui->getConsensusArea();
+    SAFE_POINT_EXT(consensusArea != NULL, setError(tr("MSA Consensus area is NULL")), );
+
+    MaEditorConsensusAreaSettings consensusSettings = consensusArea->getDrawSettings();
+    consensusSettings.visibleElements = MaEditorConsElements();
+    if (msaSettings.includeConsensus) {
+        consensusSettings.visibleElements |= MSAEditorConsElement_CONSENSUS_TEXT | MSAEditorConsElement_HISTOGRAM;
+    }
+    if (msaSettings.includeRuler) {
+        consensusSettings.visibleElements |= MSAEditorConsElement_RULER;
+    }
+
+    consensusArea->drawContent(painter, msaSettings.seqIdx, msaSettings.region, consensusSettings);
+}
+
+void MSAImageExportTask::paintRuler(QPainter &painter) {
+    CHECK(msaSettings.includeRuler, );
+    MaEditorConsensusArea* consensusArea = ui->getConsensusArea();
+    SAFE_POINT_EXT(consensusArea != NULL, setError(tr("MSA Consensus area is NULL")), );
+
+    MaEditorConsensusAreaSettings consensusSettings = consensusArea->getDrawSettings();
+    consensusSettings.visibleElements = MSAEditorConsElement_RULER;
+
+    consensusArea->drawContent(painter, msaSettings.seqIdx, msaSettings.region, consensusSettings);
+}
+
+bool MSAImageExportTask::paintContent(QPainter &painter) {
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    return seqArea->drawContent(painter, msaSettings.region, msaSettings.seqIdx, 0, 0);
+}
+
+MSAImageExportToBitmapTask::MSAImageExportToBitmapTask(MaEditorWgt *ui,
                                                        const MSAImageExportSettings& msaSettings,
                                                        const ImageExportTaskSettings &settings)
     : MSAImageExportTask(ui,
@@ -54,65 +96,91 @@ void MSAImageExportToBitmapTask::run() {
                    setError(WRONG_FORMAT_MESSAGE.arg(settings.format).arg("MSAImageExportToBitmapTask")), );
 
     SAFE_POINT_EXT( ui->getEditor() != NULL, setError(L10N::nullPointerError("MSAEditor")), );
-    MAlignmentObject *mObj =  ui->getEditor()->getMSAObject();
-    SAFE_POINT_EXT( mObj != NULL, setError(L10N::nullPointerError("MAlignmentObject")), );
+    MultipleAlignmentObject *mObj =  ui->getEditor()->getMaObject();
+    SAFE_POINT_EXT( mObj != NULL, setError(L10N::nullPointerError("MultipleAlignmentObject")), );
     StateLock *lock = new StateLock();
     mObj->lockState(lock);
 
     bool exportAll = msaSettings.exportAll;
 
-    int ok = exportAll || (!msaSettings.region.isEmpty() && !msaSettings.seqIdx.isEmpty());
+    bool ok = (exportAll && mObj->getLength() > 0 && mObj->getNumRows() > 0) || (!msaSettings.region.isEmpty() && !msaSettings.seqIdx.isEmpty());
     CHECK_OPERATION( ok, mObj->unlockState(lock));
-    SAFE_POINT_EXT( ok, setError(tr("Nothing to export")), );
+    CHECK_EXT( ok, setError(tr("Nothing to export")), );
 
-    QPixmap seqPixmap;
-    QPixmap namesPix;
-    QPixmap consPix;
-    QPixmap rulerPix;
+    if (exportAll) {
+        msaSettings.region = U2Region(0, mObj->getLength());
+        QList<int> seqIdx;
+        for (int i = 0; i < mObj->getNumRows(); i++) {
+            seqIdx << i;
+        }
+        msaSettings.seqIdx = seqIdx;
+    }
 
-    ok = paintContent(seqPixmap);
-    CHECK_OPERATION( ok, mObj->unlockState(lock));
-    CHECK_EXT( ok, setError(tr("Alignment is too big. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
+    MaEditorConsElements visibleConsensusElements;
+    if (msaSettings.includeConsensus) {
+        visibleConsensusElements |= MSAEditorConsElement_HISTOGRAM | MSAEditorConsElement_CONSENSUS_TEXT;
+    }
+    if (msaSettings.includeRuler) {
+        visibleConsensusElements |= MSAEditorConsElement_RULER;
+    }
+
+    QPixmap sequencesPixmap(ui->getSequenceArea()->getCanvasSize(msaSettings.seqIdx, msaSettings.region));
+    QPixmap namesPixmap = msaSettings.includeSeqNames ? QPixmap(ui->getEditorNameList()->getCanvasSize(msaSettings.seqIdx)) : QPixmap();
+    QPixmap consensusPixmap = visibleConsensusElements ? QPixmap(ui->getConsensusArea()->getCanvasSize(msaSettings.region, visibleConsensusElements)) : QPixmap();
+
+    sequencesPixmap.fill(Qt::white);
+    namesPixmap.fill(Qt::white);
+    consensusPixmap.fill(Qt::white);
 
-    paintSeqNames(namesPix);
-    paintConsensus(consPix);
-    paintRuler(rulerPix);
+    QPainter sequencesPainter(&sequencesPixmap);
+    QPainter namesPainter;
+    if (msaSettings.includeSeqNames) {
+        namesPainter.begin(&namesPixmap);
+    }
+    QPainter consensusPainter;
+    if (visibleConsensusElements) {
+        consensusPainter.begin(&consensusPixmap);
+    }
+
+    ok = paintContent(sequencesPainter);
+    CHECK_OPERATION(ok, mObj->unlockState(lock));
+    CHECK_EXT(ok, setError(tr("Alignment is too big. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
+
+    paintSequencesNames(namesPainter);
+    paintConsensus(consensusPainter);
     mObj->unlockState(lock);
 
-    QPixmap pixmap = mergePixmaps(seqPixmap, namesPix, consPix, rulerPix);
+    QPixmap pixmap = mergePixmaps(sequencesPixmap, namesPixmap, consensusPixmap);
     CHECK_EXT( !pixmap.isNull(),
                setError(tr("Alignment is too big. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
     CHECK_EXT( pixmap.save(settings.fileName, qPrintable(settings.format), settings.imageQuality),
                setError(tr("Cannot save the file. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
 }
 
-QPixmap MSAImageExportToBitmapTask::mergePixmaps(const QPixmap &seqPix,
-                                              const QPixmap &namesPix,
-                                              const QPixmap &consPix,
-                                              const QPixmap &rulerPix)
+QPixmap MSAImageExportToBitmapTask::mergePixmaps(const QPixmap &sequencesPixmap,
+                                                 const QPixmap &namesPixmap,
+                                                 const QPixmap &consensusPixmap)
 {
-    CHECK( namesPix.width() + seqPix.width() < IMAGE_SIZE_LIMIT &&
-           consPix.height() + rulerPix.height() + seqPix.height() < IMAGE_SIZE_LIMIT, QPixmap());
-    QPixmap pixmap = QPixmap(namesPix.width() + seqPix.width(),
-                             consPix.height() + rulerPix.height() + seqPix.height());
+    CHECK( namesPixmap.width() + sequencesPixmap.width() < IMAGE_SIZE_LIMIT &&
+           consensusPixmap.height() + + sequencesPixmap.height() < IMAGE_SIZE_LIMIT, QPixmap());
+    QPixmap pixmap = QPixmap(namesPixmap.width() + sequencesPixmap.width(),
+                             consensusPixmap.height() + sequencesPixmap.height());
 
     pixmap.fill(Qt::white);
     QPainter p(&pixmap);
 
-    p.translate(namesPix.width(), 0);
-    p.drawPixmap(consPix.rect(), consPix);
-    p.translate(0, consPix.height());
-    p.drawPixmap(rulerPix.rect(), rulerPix);
-    p.translate(-namesPix.width(), rulerPix.height());
-    p.drawPixmap(namesPix.rect(), namesPix);
-    p.translate(namesPix.width(), 0);
-    p.drawPixmap(seqPix.rect(), seqPix);
+    p.translate(namesPixmap.width(), 0);
+    p.drawPixmap(consensusPixmap.rect(), consensusPixmap);
+    p.translate(-namesPixmap.width(), consensusPixmap.height());
+    p.drawPixmap(namesPixmap.rect(), namesPixmap);
+    p.translate(namesPixmap.width(), 0);
+    p.drawPixmap(sequencesPixmap.rect(), sequencesPixmap);
     p.end();
 
     return pixmap;
 }
 
-MSAImageExportToSvgTask::MSAImageExportToSvgTask(MSAEditorUI *ui,
+MSAImageExportToSvgTask::MSAImageExportToSvgTask(MaEditorWgt *ui,
                                                  const MSAImageExportSettings& msaSettings,
                                                  const ImageExportTaskSettings &settings)
     : MSAImageExportTask(ui,
@@ -124,10 +192,10 @@ void MSAImageExportToSvgTask::run() {
     SAFE_POINT_EXT(settings.isSVGFormat(),
                    setError(WRONG_FORMAT_MESSAGE.arg(settings.format).arg("MSAImageExportToSvgTask")), );
 
-    MSAEditor* editor = ui->getEditor();
+    MaEditor* editor = ui->getEditor();
     SAFE_POINT_EXT( editor != NULL, setError(L10N::nullPointerError("MSAEditor")), );
-    MAlignmentObject *mObj =  editor->getMSAObject();
-    SAFE_POINT_EXT( mObj != NULL, setError(L10N::nullPointerError("MAlignmentObject")), );
+    MultipleAlignmentObject *mObj =  editor->getMaObject();
+    SAFE_POINT_EXT( mObj != NULL, setError(L10N::nullPointerError("MultipleAlignmentObject")), );
 
     StateLocker stateLocker(mObj);
     Q_UNUSED(stateLocker);
@@ -138,24 +206,30 @@ void MSAImageExportToSvgTask::run() {
     QSvgGenerator generator;
     generator.setFileName(settings.fileName);
 
-    MSAEditorNameList* nameListArea = ui->getEditorNameList();
+    MaEditorNameList* nameListArea = ui->getEditorNameList();
     SAFE_POINT_EXT(nameListArea != NULL, setError(L10N::nullPointerError("MSAEditorNameList")), );
-    MSAEditorConsensusArea* consArea = ui->getConsensusArea();
+    MaEditorConsensusArea* consArea = ui->getConsensusArea();
     SAFE_POINT_EXT(consArea != NULL, setError(L10N::nullPointerError("MSAEditorConsensusArea")), );
 
-    int namesWidth = nameListArea->width();
-    int consHeight = consArea->getRullerLineYRange().startPos;
-    int rulerHeight = consArea->getRullerLineYRange().length;
+    MaEditorConsElements visibleConsensusElements;
+    if (msaSettings.includeConsensus) {
+        visibleConsensusElements |= MSAEditorConsElement_CONSENSUS_TEXT | MSAEditorConsElement_HISTOGRAM;
+    }
+    if (msaSettings.includeRuler) {
+        visibleConsensusElements |= MSAEditorConsElement_RULER;
+    }
 
-    int w = msaSettings.includeSeqNames * namesWidth +
+    const int namesWidth = nameListArea->width();
+    const int consensusHeight = consArea->getCanvasSize(msaSettings.region, visibleConsensusElements).height();
+
+    const int width = msaSettings.includeSeqNames * namesWidth +
             editor->getColumnWidth() * (msaSettings.exportAll ? editor->getAlignmentLen() : msaSettings.region.length);
-    int h = msaSettings.includeConsensus * consHeight +
-            msaSettings.includeRuler * rulerHeight +
-            editor->getRowHeight() * (msaSettings.exportAll ? editor->getNumSequences() : msaSettings.seqIdx.size());
-    SAFE_POINT_EXT(qMax(w, h) < IMAGE_SIZE_LIMIT, setError(tr("The image size is too big.") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
+    const int height = msaSettings.includeConsensus * consensusHeight +
+            (msaSettings.exportAll ? ui->getRowHeightController()->getTotalAlignmentHeight() : ui->getRowHeightController()->getRowsHeight(msaSettings.seqIdx));
+    SAFE_POINT_EXT(qMax(width, height) < IMAGE_SIZE_LIMIT, setError(tr("The image size is too big.") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
 
-    generator.setSize(QSize(w, h));
-    generator.setViewBox(QRect(0, 0, w, h));
+    generator.setSize(QSize(width, height));
+    generator.setViewBox(QRect(0, 0, width, height));
     generator.setTitle(tr("SVG %1").arg(mObj->getGObjectName()));
     generator.setDescription(tr("SVG image of multiple alignment created by Unipro UGENE"));
 
@@ -164,21 +238,18 @@ void MSAImageExportToSvgTask::run() {
 
     if ((msaSettings.includeConsensus || msaSettings.includeRuler) && (msaSettings.includeSeqNames)) {
         // fill an empty space in top left corner with white color
-        p.fillRect(QRect(0, 0, namesWidth, msaSettings.includeConsensus * consHeight + msaSettings.includeRuler * rulerHeight), Qt::white);
+        p.fillRect(QRect(0, 0, namesWidth, msaSettings.includeConsensus * consensusHeight), Qt::white);
     }
-    p.translate( msaSettings.includeSeqNames * namesWidth, 0);
+    p.translate(msaSettings.includeSeqNames * namesWidth, 0);
     paintConsensus(p);
-    p.translate( 0, msaSettings.includeConsensus * consHeight );
-    paintRuler(p);
-    p.translate( -1 * msaSettings.includeSeqNames * namesWidth, msaSettings.includeRuler * rulerHeight);
-    paintSeqNames(p);
-    p.translate( msaSettings.includeSeqNames * namesWidth, 0);
+    p.translate(-1 * msaSettings.includeSeqNames * namesWidth, msaSettings.includeConsensus * consensusHeight);
+    paintSequencesNames(p);
+    p.translate(msaSettings.includeSeqNames * namesWidth, 0);
     paintContent(p);
     p.end();
 }
 
-
-MSAImageExportController::MSAImageExportController(MSAEditorUI *ui)
+MSAImageExportController::MSAImageExportController(MaEditorWgt *ui)
     : ImageExportController( ExportImageFormatPolicy( EnableRasterFormats | SupportSvg) ),
       ui(ui)
 {
@@ -193,7 +264,7 @@ MSAImageExportController::~MSAImageExportController() {
 }
 
 void MSAImageExportController::sl_showSelectRegionDialog() {
-    QObjectScopedPointer<SelectSubalignmentDialog> dialog = new SelectSubalignmentDialog(ui, msaSettings.region, msaSettings.seqIdx);
+    QObjectScopedPointer<SelectSubalignmentDialog> dialog = new SelectSubalignmentDialog(ui->getEditor(), msaSettings.region, msaSettings.seqIdx);
     dialog->exec();
     CHECK(!dialog.isNull(), );
 
@@ -232,7 +303,7 @@ void MSAImageExportController::initSettingsWidget() {
     connect(settingsUi->comboBox, SIGNAL(currentIndexChanged(int)), SLOT(sl_regionChanged()));
 
     SAFE_POINT( ui->getSequenceArea() != NULL, tr("MSA sequence area is NULL"), );
-    MSAEditorSelection selection = ui->getSequenceArea()->getSelection();
+    MaEditorSelection selection = ui->getSequenceArea()->getSelection();
     CHECK( !selection.isNull(), );
     msaSettings.region = U2Region( selection.x(), selection.width());
     msaSettings.seqIdx.clear();
@@ -293,10 +364,10 @@ const qint64 MaxSvgImageSize = 40000000;
 }
 
 bool MSAImageExportController::fitsInLimits() const {
-    MSAEditor* editor = ui->getEditor();
+    MaEditor* editor = ui->getEditor();
     SAFE_POINT(editor != NULL, L10N::nullPointerError("MSAEditor"), false);
     qint64 imageWidth = (msaSettings.exportAll ? editor->getAlignmentLen() : msaSettings.region.length) * editor->getColumnWidth();
-    qint64 imageHeight = (msaSettings.exportAll ? editor->getNumSequences() : msaSettings.seqIdx.size()) * editor->getRowHeight();
+    qint64 imageHeight = msaSettings.exportAll ? ui->getRowHeightController()->getTotalAlignmentHeight() : ui->getRowHeightController()->getRowsHeight(msaSettings.seqIdx);
     if (imageWidth > IMAGE_SIZE_LIMIT || imageHeight > IMAGE_SIZE_LIMIT) {
         return false;
     }
@@ -307,7 +378,7 @@ bool MSAImageExportController::fitsInLimits() const {
 }
 
 bool MSAImageExportController::canExportToSvg() const {
-    MSAEditor* editor = ui->getEditor();
+    MaEditor* editor = ui->getEditor();
     SAFE_POINT(editor != NULL, L10N::nullPointerError("MSAEditor"), false);
     int charactersNumber = msaSettings.exportAll ? (editor->getNumSequences() * editor->getAlignmentLen()) : (msaSettings.region.length * msaSettings.seqIdx.size());
     return charactersNumber < MaxSvgCharacters;
diff --git a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.h b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.h
index c7cae8f..d8ed12b 100644
--- a/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.h
+++ b/src/corelibs/U2View/src/ov_msa/Export/MSAImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,22 +22,22 @@
 #ifndef _U2_MSA_IMAGE_EXPORT_TASK_H_
 #define _U2_MSA_IMAGE_EXPORT_TASK_H_
 
-#include <U2Gui/ImageExportTask.h>
+#include <QPixmap>
 
 #include <U2Core/U2Region.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ImageExportTask.h>
 
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
 #include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/MaEditorNameList.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
-#include <QtGui/QPixmap>
-
 class Ui_MSAExportSettings;
 
 namespace U2 {
 
-class MSAEditorUI;
+class MaEditorWgt;
 
 class MSAImageExportSettings {
 public:
@@ -52,7 +52,7 @@ public:
           includeRuler(includeRuler) {}
 
     MSAImageExportSettings(const U2Region &region,
-                           const QList<qint64> &seqIdx,
+                           const QList<int> &seqIdx,
                            bool includeSeqNames = false,
                            bool includeConsensus = false,
                            bool includeRuler = true)
@@ -65,7 +65,7 @@ public:
 
     bool exportAll;
     U2Region region;
-    QList<qint64>      seqIdx;
+    QList<int> seqIdx;
 
     bool includeSeqNames;
     bool includeConsensus;
@@ -75,68 +75,38 @@ public:
 class MSAImageExportTask : public ImageExportTask {
     Q_OBJECT
 public:
-    MSAImageExportTask(MSAEditorUI *ui,
+    MSAImageExportTask(MaEditorWgt *ui,
                        const MSAImageExportSettings &msaSettings,
                        const ImageExportTaskSettings &settings);
-    virtual void run() = 0;
+
 protected:
-    // P - QPainter or QPixmap
-    template<class P>
-    void paintSeqNames(P& p) {
-        if (msaSettings.includeSeqNames) {
-            MSAEditorNameList* namesArea = ui->getEditorNameList();
-            SAFE_POINT_EXT( ui->getEditor() != NULL, setError(tr("MSA Editor is NULL")), );
-            namesArea->drawNames(p, msaSettings.seqIdx);
-        }
-    }
-
-    template<class P>
-    void paintConsensus(P& p) {
-        CHECK( msaSettings.includeConsensus, );
-        MSAEditorConsensusArea* consArea = ui->getConsensusArea();
-        SAFE_POINT_EXT( consArea != NULL, setError(tr("MSA Consensus area is NULL")), );
-        if (msaSettings.exportAll) {
-            consArea->paintFullConsensus(p);
-            return;
-        }
-        consArea->paintConsenusPart(p, msaSettings.region, msaSettings.seqIdx);
-    }
-
-    template<class P>
-    void paintRuler(P& p) {
-        if (msaSettings.includeRuler) {
-            MSAEditorConsensusArea* consArea = ui->getConsensusArea();
-            consArea->paintRulerPart(p, msaSettings.region);
-        }
-    }
-
-    template<class P>
-    bool paintContent(P& p) {
-        MSAEditorSequenceArea* seqArea = ui->getSequenceArea();
-            return seqArea->drawContent(p, msaSettings.region, msaSettings.seqIdx);
-    }
-
-    MSAEditorUI* ui;
+    void paintSequencesNames(QPainter &painter);
+    void paintConsensus(QPainter &painter);
+    void paintRuler(QPainter &painter);
+    bool paintContent(QPainter &painter);
+
+    MaEditorWgt* ui;
     MSAImageExportSettings  msaSettings;
 };
 
 class MSAImageExportToBitmapTask : public MSAImageExportTask {
     Q_OBJECT
 public:
-    MSAImageExportToBitmapTask(MSAEditorUI *ui,
+    MSAImageExportToBitmapTask(MaEditorWgt *ui,
                                const MSAImageExportSettings& msaSettings,
                                const ImageExportTaskSettings &settings);
     void run();
 
 private:
-    QPixmap mergePixmaps(const QPixmap& seqPix, const QPixmap& namesPix,
-                         const QPixmap& consPix, const QPixmap& rulerPix);
+    QPixmap mergePixmaps(const QPixmap &sequencesPixmap,
+                         const QPixmap &namesPixmap,
+                         const QPixmap &consensusPixmap);
 };
 
 class MSAImageExportToSvgTask : public MSAImageExportTask {
     Q_OBJECT
 public:
-    MSAImageExportToSvgTask(MSAEditorUI *ui,
+    MSAImageExportToSvgTask(MaEditorWgt *ui,
                             const MSAImageExportSettings& msaSettings,
                             const ImageExportTaskSettings &settings);
     void run();
@@ -145,7 +115,7 @@ public:
 class MSAImageExportController : public ImageExportController {
     Q_OBJECT
 public:
-    MSAImageExportController(MSAEditorUI *ui);
+    MSAImageExportController(MaEditorWgt *ui);
     ~MSAImageExportController();
 
 public slots:
@@ -166,7 +136,7 @@ private:
     bool canExportToSvg() const;
     void updateSeqIdx() const;
 
-    MSAEditorUI* ui;
+    MaEditorWgt* ui;
     Ui_MSAExportSettings    *settingsUi;
     mutable MSAImageExportSettings      msaSettings;
     QString format;
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui b/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui
index 060d763..4e10dac 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/ExportConsensusWidget.ui
@@ -25,9 +25,12 @@
    </property>
    <item>
     <layout class="QGridLayout" name="gridLayout">
-     <property name="spacing">
+     <property name="horizontalSpacing">
       <number>1</number>
      </property>
+     <property name="verticalSpacing">
+      <number>6</number>
+     </property>
      <item row="0" column="0">
       <widget class="QLabel" name="label_2">
        <property name="text">
@@ -50,7 +53,7 @@
    <item>
     <layout class="QGridLayout" name="gridLayout_2">
      <property name="verticalSpacing">
-      <number>1</number>
+      <number>6</number>
      </property>
      <item row="0" column="0">
       <widget class="QLabel" name="label">
@@ -65,18 +68,11 @@
     </layout>
    </item>
    <item>
-    <layout class="QHBoxLayout" name="horizontalLayout">
+    <layout class="QVBoxLayout" name="verticalLayout_2">
      <property name="bottomMargin">
       <number>6</number>
      </property>
      <item>
-      <widget class="QCheckBox" name="keepGapsChb">
-       <property name="text">
-        <string>Keep gaps</string>
-       </property>
-      </widget>
-     </item>
-     <item>
       <widget class="QLabel" name="hintLabel">
        <property name="text">
         <string>Info: alphabet of the consensus is undefined, the sequence can only be saved into a plain text document.</string>
@@ -86,12 +82,19 @@
        </property>
       </widget>
      </item>
+     <item>
+      <widget class="QCheckBox" name="keepGapsChb">
+       <property name="text">
+        <string>Keep gaps</string>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item alignment="Qt::AlignHCenter">
     <widget class="QToolButton" name="exportBtn">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+      <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp
deleted file mode 100644
index 1eac52b..0000000
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/L10n.h>
-#include <U2Core/TaskWatchdog.h>
-#include <U2Core/U2IdTypes.h>
-#include <U2Core/UserApplicationsSettings.h>
-
-#include <U2Formats/DocumentFormatUtils.h>
-
-#include <U2Gui/DialogUtils.h>
-#include <U2Gui/SaveDocumentController.h>
-#include <U2Gui/ShowHideSubgroupWidget.h>
-#include <U2Gui/U2WidgetStateStorage.h>
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorConsensusArea.h>
-#include <U2View/MSAEditorSequenceArea.h>
-#include <U2View/MSAEditorTasks.h>
-
-#include "MSAExportConsensusTab.h"
-
-namespace U2 {
-
-MSAExportConsensusTab::MSAExportConsensusTab(MSAEditor* msa_)
-    : msa(msa_),
-      savableWidget(this, GObjectViewUtils::findViewByName(msa_->getName())),
-      saveController(NULL)
-{
-    setupUi(this);
-
-    hintLabel->setStyleSheet("color: green; font: bold;");
-
-    initSaveController();
-
-    MSAEditorConsensusArea *consensusArea = msa->getUI()->getConsensusArea();
-    showHint(true);
-
-    connect(exportBtn, SIGNAL(clicked()), SLOT(sl_exportClicked()));
-    connect(consensusArea, SIGNAL(si_consensusAlgorithmChanged(const QString &)), SLOT(sl_consensusChanged(const QString &)));
-
-    U2WidgetStateStorage::restoreWidgetState(savableWidget);
-    sl_consensusChanged(consensusArea->getConsensusAlgorithm()->getId());
-}
-
-void MSAExportConsensusTab::sl_exportClicked(){
-    if (saveController->getSaveFileName().isEmpty()) {
-        saveController->setPath(getDefaultFilePath());
-    }
-
-    ExportMSAConsensusTaskSettings settings;
-    settings.format = saveController->getFormatIdToSave();
-    settings.keepGaps = keepGapsChb->isChecked() || keepGapsChb->isHidden();
-    settings.msa = msa;
-    settings.name = msa->getMSAObject()->getGObjectName() + "_consensus";
-    settings.url = saveController->getSaveFileName();
-
-    Task *t = new ExportMSAConsensusTask(settings);
-    TaskWatchdog::trackResourceExistence(msa->getMSAObject(), t, tr("A problem occurred during export consensus. The multiple alignment is no more available."));
-    AppContext::getTaskScheduler()->registerTopLevelTask(t);
-}
-
-void MSAExportConsensusTab::showHint( bool showHint ){
-    if (showHint){
-        hintLabel->show();
-        keepGapsChb->hide();
-    }else{
-        hintLabel->hide();
-        keepGapsChb->show();
-    }
-}
-
-void MSAExportConsensusTab::sl_consensusChanged(const QString& algoId) {
-    MSAConsensusAlgorithmFactory *consAlgorithmFactory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(algoId);
-    SAFE_POINT(consAlgorithmFactory != NULL, "Fetched consensus algorithm factory is NULL", );
-
-    if (consAlgorithmFactory->isSequenceLikeResult()) {
-        if (formatCb->count() == 1 ) { //only text
-            formatCb->addItem(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_GENBANK));
-            formatCb->addItem(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA));
-            formatCb->model()->sort(0);
-        } else {
-            SAFE_POINT(formatCb->count() == 3, "Count of supported 'text' formats is not equal three", );
-        }
-        showHint(false);
-    } else {
-        if (formatCb->count() == 3 ) { //all possible formats
-            formatCb->setCurrentText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_TEXT));
-            formatCb->removeItem(formatCb->findText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA)));
-            formatCb->removeItem(formatCb->findText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_GENBANK)));
-        } else {
-            SAFE_POINT(formatCb->count() == 1, "Count of supported 'text' formats is not equal one", );
-        }
-        showHint(true);
-    }
-}
-
-void MSAExportConsensusTab::initSaveController() {
-    SaveDocumentControllerConfig config;
-    config.defaultFileName = getDefaultFilePath();
-    config.defaultFormatId = BaseDocumentFormats::PLAIN_TEXT;
-    config.fileDialogButton = browseBtn;
-    config.fileNameEdit = pathLe;
-    config.formatCombo = formatCb;
-    config.parentWidget = this;
-    config.saveTitle = tr("Save file");
-
-    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_TEXT
-                                                                      << BaseDocumentFormats::PLAIN_GENBANK
-                                                                      << BaseDocumentFormats::FASTA;
-
-    saveController = new SaveDocumentController(config, formats, this);
-}
-
-QString MSAExportConsensusTab::getDefaultFilePath() const {
-    return GUrlUtils::getDefaultDataPath() + "/" + msa->getMSAObject()->getGObjectName() + "_consensus.txt";
-}
-
-}
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.h b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.h
deleted file mode 100644
index 3308f7c..0000000
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTab.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EXPORT_CONSENSUS_TAB_H_
-#define _U2_MSA_EXPORT_CONSENSUS_TAB_H_
-
-#include <U2Gui/U2SavableWidget.h>
-
-#include "ui_ExportConsensusWidget.h"
-
-namespace U2 {
-
-class MSAEditor;
-class SaveDocumentController;
-
-class MSAExportConsensusTab : public QWidget, private Ui_ExportConsensusWidget {
-    Q_OBJECT
-public:
-    MSAExportConsensusTab(MSAEditor* msa_);
-
-    void showHint(bool showHint);
-
-private slots:
-    void sl_exportClicked();
-    void sl_consensusChanged(const QString& algoId);
-
-private:
-    void initSaveController();
-    QString getDefaultFilePath() const;
-
-    MSAEditor *msa;
-    U2SavableWidget savableWidget;
-    SaveDocumentController *saveController;
-};
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
deleted file mode 100644
index d87b49b..0000000
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QtGui/QPixmap>
-
-#include <U2Core/U2SafePoints.h>
-
-#include <U2View/MSAEditor.h>
-
-#include "MSAExportConsensusTab.h"
-
-#include "MSAExportConsensusTabFactory.h"
-
-namespace U2 {
-
-const QString MSAExportConsensusFactoryTab::GROUP_ID = "OP_EXPORT_CONSENSUS";
-const QString MSAExportConsensusFactoryTab::GROUP_ICON_STR = ":core/images/consensus.png";
-const QString MSAExportConsensusFactoryTab::GROUP_TITLE = QObject::tr("Export Consensus");
-const QString MSAExportConsensusFactoryTab::GROUP_DOC_PAGE = "18223057";
-
-MSAExportConsensusFactoryTab::MSAExportConsensusFactoryTab() {
-    objectViewOfWidget = ObjViewType_AlignmentEditor;
-}
-
-QWidget * MSAExportConsensusFactoryTab::createWidget(GObjectView* objView) {
-    SAFE_POINT(NULL != objView,
-        QString("Internal error: unable to create widget for group '%1', object view is NULL.").arg(GROUP_ID),
-        NULL);
-
-    MSAEditor* msa = qobject_cast<MSAEditor*>(objView);
-    SAFE_POINT(NULL != msa,
-        QString("Internal error: unable to cast object view to MSAEditor for group '%1'.").arg(GROUP_ID),
-        NULL);
-
-    MSAExportConsensusTab *widget = new MSAExportConsensusTab(msa);
-    return widget;
-}
-
-OPGroupParameters MSAExportConsensusFactoryTab::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.h b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.h
deleted file mode 100644
index 83df3e6..0000000
--- a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EXPORT_CONSENSUS_FACTORY_TAB_H_
-#define _U2_MSA_EXPORT_CONSENSUS_FACTORY_TAB_H_
-
-#include <U2Gui/OPWidgetFactory.h>
-
-namespace U2 {
-
-class U2VIEW_EXPORT MSAExportConsensusFactoryTab : public OPWidgetFactory {
-    Q_OBJECT
-public:
-    MSAExportConsensusFactoryTab();
-
-    QWidget * createWidget(GObjectView* objView);
-    OPGroupParameters getOPGroupParameters();
-
-private:
-    static const QString GROUP_ID;
-    static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
-    static const QString GROUP_DOC_PAGE;
-};
-
-} // namespace U2
-
-#endif // _U2_MSA_EXPORT_CONSENSUS_FACTORY_TAB_H_
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp
new file mode 100644
index 0000000..d0aad1a
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp
@@ -0,0 +1,107 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPixmap>
+
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ShowHideSubgroupWidget.h>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/McaEditor.h>
+
+#include "MaExportConsensusWidget.h"
+#include "MaExportConsensusTabFactory.h"
+#include "../General/MaConsensusModeWidget.h"
+
+namespace U2 {
+
+const QString GROUP_ICON_STR = ":core/images/consensus.png";
+const QString GROUP_DOC_PAGE_MSA = "19766805";
+const QString GROUP_DOC_PAGE_MCA = "20873530";
+const QString MsaExportConsensusTabFactory::GROUP_ID = "OP_EXPORT_CONSENSUS";
+const QString McaExportConsensusTabFactory::GROUP_ID = "OP_CONSENSUS";
+
+MsaExportConsensusTabFactory::MsaExportConsensusTabFactory() {
+    objectViewOfWidget = ObjViewType_AlignmentEditor;
+}
+
+QWidget * MsaExportConsensusTabFactory::createWidget(GObjectView* objView) {
+    SAFE_POINT(NULL != objView,
+               QString("Internal error: unable to create widget for group '%1', object view is NULL.").arg(GROUP_ID),
+               NULL);
+
+    MSAEditor* ma = qobject_cast<MSAEditor*>(objView);
+    SAFE_POINT(NULL != ma,
+               QString("Internal error: unable to cast object view to MsaEditor for group '%1'.").arg(GROUP_ID),
+               NULL);
+
+    MaExportConsensusWidget *widget = new MaExportConsensusWidget(ma);
+    return widget;
+}
+
+OPGroupParameters MsaExportConsensusTabFactory::getOPGroupParameters() {
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Export Consensus"), GROUP_DOC_PAGE_MSA);
+}
+
+McaExportConsensusTabFactory::McaExportConsensusTabFactory() {
+    objectViewOfWidget = ObjViewType_ChromAlignmentEditor;
+}
+
+QWidget * McaExportConsensusTabFactory::createWidget(GObjectView* objView) {
+    SAFE_POINT(NULL != objView,
+               QString("Internal error: unable to create widget for group '%1', object view is NULL.").arg(GROUP_ID),
+               NULL);
+
+    MaEditor* ma = qobject_cast<MaEditor *>(objView);
+    SAFE_POINT(NULL != ma,
+               QString("Internal error: unable to cast object view to MaEditor for group '%1'.").arg(GROUP_ID),
+               NULL);
+
+    QWidget* widget = new QWidget(objView->getWidget());
+    QVBoxLayout* layout = new QVBoxLayout();
+    layout->setContentsMargins(0, 0, 0, 0);
+    widget->setLayout(layout);
+
+    MaConsensusModeWidget* consensusModeWgt = new MaConsensusModeWidget(widget);
+    consensusModeWgt->init(ma->getMaObject(), ma->getUI()->getConsensusArea());
+    ShowHideSubgroupWidget* consensusMode = new ShowHideSubgroupWidget("CONSENSUS_MODE", tr("Consensus mode"),
+                                                                       consensusModeWgt, true);
+
+    MaExportConsensusWidget *exportWidget = new MaExportConsensusWidget(ma, widget);
+    exportWidget->layout()->setContentsMargins(9, 9, 9, 9);
+    ShowHideSubgroupWidget* exportConsensus = new ShowHideSubgroupWidget("EXPORT_CONSENSUS", tr("Export consensus"),
+                                                                         exportWidget, true);
+
+    layout->addWidget(consensusMode);
+    layout->addWidget(exportConsensus);
+    return widget;
+}
+
+OPGroupParameters McaExportConsensusTabFactory::getOPGroupParameters() {
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Consensus"), GROUP_DOC_PAGE_MCA);
+}
+
+const QString &McaExportConsensusTabFactory::getGroupId() {
+    return GROUP_ID;
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.h b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.h
new file mode 100644
index 0000000..114dbab
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EXPORT_CONSENSUS_FACTORY_TAB_H_
+#define _U2_MA_EXPORT_CONSENSUS_FACTORY_TAB_H_
+
+#include <U2Gui/OPWidgetFactory.h>
+
+namespace U2 {
+
+class U2VIEW_EXPORT MsaExportConsensusTabFactory : public OPWidgetFactory {
+public:
+    MsaExportConsensusTabFactory();
+
+    QWidget * createWidget(GObjectView* objView);
+    OPGroupParameters getOPGroupParameters();
+
+private:
+    static const QString GROUP_ID;
+};
+
+class U2VIEW_EXPORT McaExportConsensusTabFactory : public OPWidgetFactory {
+    Q_OBJECT
+public:
+    McaExportConsensusTabFactory();
+
+    QWidget * createWidget(GObjectView* objView);
+    OPGroupParameters getOPGroupParameters();
+
+    static const QString &getGroupId();
+
+private:
+    static const QString GROUP_ID;
+};
+
+} // namespace U2
+
+#endif // _U2_MA_EXPORT_CONSENSUS_FACTORY_TAB_H_
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp
new file mode 100644
index 0000000..4f7d90c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp
@@ -0,0 +1,151 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/TaskWatchdog.h>
+#include <U2Core/U2IdTypes.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Formats/DocumentFormatUtils.h>
+
+#include <U2Gui/DialogUtils.h>
+#include <U2Gui/SaveDocumentController.h>
+#include <U2Gui/ShowHideSubgroupWidget.h>
+#include <U2Gui/U2WidgetStateStorage.h>
+
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/view_rendering/MaEditorConsensusArea.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+#include <U2View/MaEditorTasks.h>
+
+#include "MaExportConsensusWidget.h"
+
+namespace U2 {
+
+MaExportConsensusWidget::MaExportConsensusWidget(MaEditor* ma_, QWidget *parent)
+    : QWidget(parent),
+      ma(ma_),
+      savableWidget(this, GObjectViewUtils::findViewByName(ma_->getName())),
+      saveController(NULL)
+{
+    setupUi(this);
+
+    hintLabel->setStyleSheet(L10N::infoHintStyleSheet());
+
+    initSaveController();
+
+    MaEditorConsensusArea *consensusArea = ma->getUI()->getConsensusArea();
+    showHint(true);
+
+    connect(exportBtn, SIGNAL(clicked()), SLOT(sl_exportClicked()));
+    connect(consensusArea, SIGNAL(si_consensusAlgorithmChanged(const QString &)), SLOT(sl_consensusChanged(const QString &)));
+
+    U2WidgetStateStorage::restoreWidgetState(savableWidget);
+    sl_consensusChanged(consensusArea->getConsensusAlgorithm()->getId());
+}
+
+void MaExportConsensusWidget::sl_exportClicked(){
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Exporting of consensus", ma->getFactoryId());
+    if (saveController->getSaveFileName().isEmpty()) {
+        saveController->setPath(getDefaultFilePath());
+    }
+
+    ExportMaConsensusTaskSettings settings;
+    settings.format = saveController->getFormatIdToSave();
+    settings.keepGaps = keepGapsChb->isChecked() || keepGapsChb->isHidden();
+    settings.ma = ma;
+    settings.name = ma->getMaObject()->getGObjectName() + "_consensus";
+    settings.url = saveController->getSaveFileName();
+
+    Task *t = new ExportMaConsensusTask(settings);
+    TaskWatchdog::trackResourceExistence(ma->getMaObject(), t, tr("A problem occurred during export consensus. The multiple alignment is no more available."));
+    AppContext::getTaskScheduler()->registerTopLevelTask(t);
+}
+
+void MaExportConsensusWidget::showHint( bool showHint ){
+    if (showHint){
+        hintLabel->show();
+        keepGapsChb->hide();
+    }else{
+        hintLabel->hide();
+        keepGapsChb->show();
+    }
+}
+
+void MaExportConsensusWidget::sl_consensusChanged(const QString& algoId) {
+    MSAConsensusAlgorithmFactory *consAlgorithmFactory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(algoId);
+    SAFE_POINT(consAlgorithmFactory != NULL, "Fetched consensus algorithm factory is NULL", );
+
+    if (consAlgorithmFactory->isSequenceLikeResult()) {
+        if (formatCb->count() == 1 ) { //only text
+            formatCb->addItem(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_GENBANK));
+            formatCb->addItem(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA));
+            formatCb->model()->sort(0);
+        } else {
+            SAFE_POINT(formatCb->count() == 3, "Count of supported 'text' formats is not equal three", );
+        }
+        showHint(false);
+    } else {
+        if (formatCb->count() == 3 ) { //all possible formats
+            formatCb->setCurrentText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_TEXT));
+            formatCb->removeItem(formatCb->findText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::FASTA)));
+            formatCb->removeItem(formatCb->findText(DocumentFormatUtils::getFormatNameById(BaseDocumentFormats::PLAIN_GENBANK)));
+        } else {
+            SAFE_POINT(formatCb->count() == 1, "Count of supported 'text' formats is not equal one", );
+        }
+        showHint(true);
+    }
+}
+
+void MaExportConsensusWidget::initSaveController() {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = getDefaultFilePath();
+    config.defaultFormatId = BaseDocumentFormats::PLAIN_TEXT;
+    config.fileDialogButton = browseBtn;
+    config.fileNameEdit = pathLe;
+    config.formatCombo = formatCb;
+    config.parentWidget = this;
+    config.saveTitle = tr("Save file");
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::PLAIN_TEXT
+                                                                      << BaseDocumentFormats::PLAIN_GENBANK
+                                                                      << BaseDocumentFormats::FASTA;
+
+    saveController = new SaveDocumentController(config, formats, this);
+}
+
+QString MaExportConsensusWidget::getDefaultFilePath() const {
+    return GUrlUtils::getDefaultDataPath() + "/" + ma->getMaObject()->getGObjectName() + "_consensus.txt";
+}
+
+}
diff --git a/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.h b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.h
new file mode 100644
index 0000000..4ca440d
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusWidget.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EXPORT_CONSENSUS_TAB_H_
+#define _U2_MSA_EXPORT_CONSENSUS_TAB_H_
+
+#include <U2Gui/U2SavableWidget.h>
+
+#include "ui_ExportConsensusWidget.h"
+
+namespace U2 {
+
+class MaEditor;
+class SaveDocumentController;
+
+class MaExportConsensusWidget : public QWidget, private Ui_ExportConsensusWidget {
+    Q_OBJECT
+public:
+    MaExportConsensusWidget(MaEditor* ma_, QWidget *parent = NULL);
+
+    void showHint(bool showHint);
+
+private slots:
+    void sl_exportClicked();
+    void sl_consensusChanged(const QString& algoId);
+
+private:
+    void initSaveController();
+    QString getDefaultFilePath() const;
+
+    MaEditor *ma;
+    U2SavableWidget savableWidget;
+    SaveDocumentController *saveController;
+};
+
+} // namespace
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui
index fd3bc9e..a0c9bd2 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialog.ui
@@ -54,7 +54,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="startPosBox">
+      <widget class="QSpinBox" name="startLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
@@ -80,7 +80,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="endPosBox">
+      <widget class="QSpinBox" name="endLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
index 3b6e222..b5d6372 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,12 +21,12 @@
 
 #include <QPushButton>
 #include <QMessageBox>
-#include <ui_ExportHighlightedDialog.h>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Gui/HelpButton.h>
@@ -34,17 +34,18 @@
 
 #include "ExportHighlightedDialogController.h"
 #include "ov_msa/MSAEditorSequenceArea.h"
+#include "ui_ExportHighlightedDialog.h"
 
 namespace U2{
 
-ExportHighligtingDialogController::ExportHighligtingDialogController(MSAEditorUI *msaui_, QWidget* p )
+ExportHighligtingDialogController::ExportHighligtingDialogController(MaEditorWgt *msaui_, QWidget* p )
     : QDialog(p),
       msaui(msaui_),
       saveController(NULL),
       ui(new Ui_ExportHighlightedDialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223058");
+    new HelpButton(this, ui->buttonBox, "20874962");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -52,13 +53,13 @@ ExportHighligtingDialogController::ExportHighligtingDialogController(MSAEditorUI
     CHECK(AppContext::getAppSettings(), );
     CHECK(AppContext::getAppSettings()->getUserAppsSettings(), );
     CHECK(msaui->getEditor(), );
-    CHECK(msaui->getEditor()->getMSAObject(), );
+    CHECK(msaui->getEditor()->getMaObject(), );
 
     initSaveController();
 
-    connect(ui->endPosBox, SIGNAL(valueChanged(int)), SLOT(endPosValueChanged()));
+    connect(ui->endLineEdit, SIGNAL(valueChanged(int)), SLOT(endPosValueChanged()));
 
-    int alignLength = msaui->getEditor()->getMSAObject()->getLength();
+    int alignLength = msaui->getEditor()->getMaObject()->getLength();
     QRect selection = msaui->getSequenceArea()->getSelection().getRect();
 
     int startPos = -1;
@@ -71,22 +72,22 @@ ExportHighligtingDialogController::ExportHighligtingDialogController(MSAEditorUI
         endPos = selection.x() + selection.width();
     }
 
-    ui->startPosBox->setMaximum(endPos);
-    ui->endPosBox->setMaximum(alignLength);
+    ui->startLineEdit->setMaximum(endPos);
+    ui->endLineEdit->setMaximum(alignLength);
 
-    ui->startPosBox->setMinimum(1);
-    ui->endPosBox->setMinimum(2);
+    ui->startLineEdit->setMinimum(1);
+    ui->endLineEdit->setMinimum(2);
 
-    ui->startPosBox->setValue(startPos);
-    ui->endPosBox->setValue(endPos);
+    ui->startLineEdit->setValue(startPos);
+    ui->endLineEdit->setValue(endPos);
 }
 ExportHighligtingDialogController::~ExportHighligtingDialogController(){
     delete ui;
 }
 
 void ExportHighligtingDialogController::accept(){
-    startPos = ui->startPosBox->value();
-    endPos = ui->endPosBox->value();
+    startPos = ui->startLineEdit->value();
+    endPos = ui->endLineEdit->value();
     if(ui->oneIndexRB->isChecked()){
         startingIndex = 1;
     }else{
@@ -110,12 +111,12 @@ void ExportHighligtingDialogController::lockKeepGaps(){
 }
 
 void ExportHighligtingDialogController::endPosValueChanged(){
-    ui->startPosBox->setMaximum(ui->endPosBox->value() - 1);
+    ui->startLineEdit->setMaximum(ui->endLineEdit->value() - 1);
 }
 
 void ExportHighligtingDialogController::initSaveController() {
     SaveDocumentControllerConfig config;
-    config.defaultFileName = GUrlUtils::getDefaultDataPath() + "/" + msaui->getEditor()->getMSAObject()->getGObjectName() + "_highlighting.txt";
+    config.defaultFileName = GUrlUtils::getDefaultDataPath() + "/" + msaui->getEditor()->getMaObject()->getGObjectName() + "_highlighting.txt";
     config.defaultFormatId = BaseDocumentFormats::PLAIN_TEXT;
     config.fileDialogButton = ui->fileButton;
     config.fileNameEdit = ui->fileNameEdit;
diff --git a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
index 7ff575b..6f707eb 100644
--- a/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/ExportHighlightedDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ class SaveDocumentController;
 class ExportHighligtingDialogController : public QDialog{
     Q_OBJECT
 public:
-    ExportHighligtingDialogController(MSAEditorUI *msaui_, QWidget* p);
+    ExportHighligtingDialogController(MaEditorWgt *msaui_, QWidget* p);
     ~ExportHighligtingDialogController();
 
     virtual void accept();
@@ -55,7 +55,7 @@ private slots:
 private:
     void initSaveController();
 
-    MSAEditorUI *msaui;
+    MaEditorWgt *msaui;
     SaveDocumentController *saveController;
     Ui_ExportHighlightedDialog* ui;
 };
diff --git a/src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui
index 3df6217..f25773e 100644
--- a/src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui
+++ b/src/corelibs/U2View/src/ov_msa/General/GeneralTabOptionsPanelWidget.ui
@@ -109,90 +109,7 @@
     </widget>
    </item>
    <item>
-    <widget class="QWidget" name="consensusModeWidget" native="true">
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QLabel" name="consensusTypeLabel">
-        <property name="text">
-         <string>Consensus type:</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <widget class="QComboBox" name="consensusType"/>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="thresholdResetLayout">
-        <item>
-         <widget class="QLabel" name="thresholdLabel">
-          <property name="text">
-           <string>Threshold:</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QToolButton" name="thresholdResetButton">
-          <property name="toolTip">
-           <string>Reset to default value</string>
-          </property>
-          <property name="text">
-           <string/>
-          </property>
-          <property name="icon">
-           <iconset resource="../../../../U2Gui/U2Gui.qrc">
-            <normaloff>:/core/images/arrow_rotate_clockwise.png</normaloff>:/core/images/arrow_rotate_clockwise.png</iconset>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="thresholdLayout">
-        <item>
-         <widget class="QSlider" name="thresholdSlider">
-          <property name="minimum">
-           <number>1</number>
-          </property>
-          <property name="maximum">
-           <number>100</number>
-          </property>
-          <property name="value">
-           <number>100</number>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QSpinBox" name="thresholdSpinBox">
-          <property name="alignment">
-           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
-          </property>
-          <property name="accelerated">
-           <bool>true</bool>
-          </property>
-          <property name="suffix">
-           <string>%</string>
-          </property>
-          <property name="prefix">
-           <string/>
-          </property>
-          <property name="minimum">
-           <number>1</number>
-          </property>
-          <property name="maximum">
-           <number>100</number>
-          </property>
-          <property name="value">
-           <number>100</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
+    <widget class="U2::MaConsensusModeWidget" name="consensusModeWidget" native="true"/>
    </item>
    <item>
     <widget class="QWidget" name="copyTypeWidget" native="true">
@@ -219,8 +136,14 @@
    </item>
   </layout>
  </widget>
- <resources>
-  <include location="../../../../U2Gui/U2Gui.qrc"/>
- </resources>
+ <customwidgets>
+  <customwidget>
+   <class>U2::MaConsensusModeWidget</class>
+   <extends>QWidget</extends>
+   <header>ov_msa/General/MaConsensusModeWidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
  <connections/>
 </ui>
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.cpp b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.cpp
index 5c0e0db..95ca26d 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,18 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+
 #include <U2Core/AppContext.h>
-#include <U2Core/DocumentModel.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignmentObject.h>
-
-#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ShowHideSubgroupWidget.h>
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorConsensusArea.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
 #include "MSAGeneralTab.h"
@@ -64,60 +64,11 @@ MSAGeneralTab::MSAGeneralTab(MSAEditor* _msa)
 
 }
 
-void MSAGeneralTab::sl_alignmentChanged(const MAlignment& al, const MAlignmentModInfo& modInfo) {
-    Q_UNUSED(al);
-    Q_UNUSED(modInfo);
+void MSAGeneralTab::sl_alignmentChanged() {
     alignmentLength->setText(QString::number(msa->getAlignmentLen()));
     alignmentHeight->setText(QString::number(msa->getNumSequences()));
 }
 
-void MSAGeneralTab::sl_algorithmChanged(const QString& algoId) {
-    // Update state for the current algorithm
-    const DNAAlphabet* alphabet = msa->getMSAObject()->getAlphabet();
-    if (curAlphabetId != alphabet->getId()) {
-        disconnect(consensusType, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_algorithmSelectionChanged(int)));
-        consensusType->clear();
-        initConsensusTypeCombo();
-        connect(consensusType, SIGNAL(currentIndexChanged(int)), SLOT(sl_algorithmSelectionChanged(int)));
-    } else {
-        consensusType->setCurrentIndex(consensusType->findData(algoId));
-        updateState();
-    }
-}
-
-void MSAGeneralTab::sl_thresholdChanged(int value) {
-    thresholdSpinBox->setValue(value);    // Slider updates automatically
-}
-
-void MSAGeneralTab::sl_algorithmSelectionChanged(int index) {
-    SAFE_POINT(index >= 0, "Incorrect consensus algorithm index is detected",);
-    QString selectedAlgorithmId = consensusType->itemData(index).toString();
-    updateState();
-    emit si_algorithmChanged(selectedAlgorithmId);
-}
-
-void MSAGeneralTab::sl_thresholdSliderChanged(int value) {
-    thresholdSpinBox->disconnect(this);
-    thresholdSpinBox->setValue(value);
-    connect(thresholdSpinBox, SIGNAL(valueChanged(int)), SLOT(sl_thresholdSpinBoxChanged(int)));
-    emit si_thresholdChanged(value);
-}
-
-void MSAGeneralTab::sl_thresholdSpinBoxChanged(int value) {
-    thresholdSlider->disconnect(this);
-    thresholdSlider->setValue(value);
-    connect(thresholdSlider, SIGNAL(valueChanged(int)), SLOT(sl_thresholdSliderChanged(int)));
-    emit si_thresholdChanged(value);
-}
-
-void MSAGeneralTab::sl_thresholdResetClicked(bool newState) {
-    Q_UNUSED(newState);
-    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
-    MSAConsensusAlgorithmFactory* factory = reg->getAlgorithmFactory(consensusType->itemData(consensusType->currentIndex()).toString());
-    SAFE_POINT(NULL != factory, "Consensus alorithm factory is NULL", );
-    sl_thresholdChanged(factory->getDefaultThreshold());
-}
-
 void MSAGeneralTab::sl_copyFormatSelectionChanged(int index) {
     QString selectedFormatId = copyType->itemData(index).toString();
     emit si_copyFormatChanged(selectedFormatId);
@@ -133,37 +84,22 @@ void MSAGeneralTab::sl_copyFormatStatusChanged(bool enabled){
 
 void MSAGeneralTab::connectSignals() {
     // Inner signals
-    connect(consensusType,          SIGNAL(currentIndexChanged(int)),   SLOT(sl_algorithmSelectionChanged(int)));
-    connect(thresholdSlider,        SIGNAL(valueChanged(int)),          SLOT(sl_thresholdSliderChanged(int)));
-    connect(thresholdSpinBox,       SIGNAL(valueChanged(int)),          SLOT(sl_thresholdSpinBoxChanged(int)));
-    connect(thresholdResetButton,   SIGNAL(clicked(bool)),              SLOT(sl_thresholdResetClicked(bool)));
     connect(copyType,               SIGNAL(currentIndexChanged(int)),   SLOT(sl_copyFormatSelectionChanged(int)));
     connect(copyButton,             SIGNAL(clicked()),                  SLOT(sl_copyFormatted()));
 
     // Extern signals
-    connect(msa->getMSAObject(),
-            SIGNAL(si_alignmentChanged(MAlignment, MAlignmentModInfo)),
-            SLOT(sl_alignmentChanged(MAlignment, MAlignmentModInfo)));
-
-        //out
-    connect(this, SIGNAL(si_algorithmChanged(QString)),
-            msa->getUI()->getConsensusArea(), SLOT(sl_changeConsensusAlgorithm(QString)));
-    connect(this, SIGNAL(si_thresholdChanged(int)),
-            msa->getUI()->getConsensusArea(), SLOT(sl_changeConsensusThreshold(int)));
+    connect(msa->getMaObject(),
+            SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)),
+            SLOT(sl_alignmentChanged()));
 
+    //out
     connect(this, SIGNAL(si_copyFormatChanged(QString)),
             msa->getUI()->getSequenceArea(), SLOT(sl_changeCopyFormat(QString)));
 
     connect(this, SIGNAL(si_copyFormatted()),
             msa->getUI()->getSequenceArea(), SLOT(sl_copyFormattedSelection()));
 
-        //in
-    connect(msa->getUI()->getConsensusArea(),
-            SIGNAL(si_consensusAlgorithmChanged(QString)),
-            SLOT(sl_algorithmChanged(QString)));
-    connect(msa->getUI()->getConsensusArea(),
-            SIGNAL(si_consensusThresholdChanged(int)),
-            SLOT(sl_thresholdChanged(int)));
+    //in
     connect(msa->getUI()->getSequenceArea(), SIGNAL(si_copyFormattedChanging(bool)),
             SLOT(sl_copyFormatStatusChanged(bool)));
 
@@ -175,11 +111,11 @@ void MSAGeneralTab::initializeParameters() {
     alignmentHeight->setText(QString::number(msa->getNumSequences()));
 
     // Consensus type combobox
-    initConsensusTypeCombo();
+    consensusModeWidget->init(msa->getMaObject(), msa->getUI()->getConsensusArea());
 
     //Copy formatted
     DocumentFormatConstraints constr;
-    constr.supportedObjectTypes.insert( GObjectTypes::MULTIPLE_ALIGNMENT );
+    constr.supportedObjectTypes.insert( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT );
     constr.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     constr.addFlagToSupport(DocumentFormatFlag_SupportWriting);
     DocumentFormatRegistry* freg = AppContext::getDocumentFormatRegistry();
@@ -199,50 +135,9 @@ void MSAGeneralTab::initializeParameters() {
 }
 
 void MSAGeneralTab::updateState() {
-    const MSAConsensusAlgorithm* algo = msa->getUI()->getConsensusArea()->getConsensusAlgorithm();
-    updateThresholdState(algo->supportsThreshold(),
-                         algo->getMinThreshold(),
-                         algo->getMaxThreshold(),
-                         algo->getThreshold());
-    consensusType->setToolTip(algo->getDescription());
+    consensusModeWidget->updateState();
 
     copyButton->setEnabled(!msa->getUI()->getSequenceArea()->getSelection().isNull());
 }
 
-void MSAGeneralTab::updateThresholdState(bool enable, int minVal, int maxVal, int value) {
-    if (false == enable) {
-        minVal = 0;
-        maxVal = 0;
-        value = 0;
-    }
-
-    thresholdLabel->setEnabled(enable);
-    thresholdSlider->setEnabled(enable);
-    thresholdSpinBox->setEnabled(enable);
-    thresholdResetButton->setEnabled(enable);
-
-    thresholdSlider->setRange(minVal, maxVal);
-    thresholdSpinBox->setRange(minVal, maxVal);
-
-    thresholdSpinBox->setValue(qBound(minVal, value, maxVal));
-    thresholdSlider->setValue(qBound(minVal, value, maxVal));
-}
-
-void MSAGeneralTab::initConsensusTypeCombo() {
-    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
-    SAFE_POINT(NULL != reg, "Consensus algorithm registry is NULL.", );
-
-    const DNAAlphabet* alphabet = msa->getMSAObject()->getAlphabet();
-    curAlphabetId = alphabet->getId();
-    QList<MSAConsensusAlgorithmFactory*> algos = reg->getAlgorithmFactories(MSAConsensusAlgorithmFactory::getAphabetFlags(alphabet));
-    foreach(const MSAConsensusAlgorithmFactory* algo, algos) {
-        consensusType->addItem(algo->getName(), algo->getId());
-    }
-    QString currentAlgorithmName = msa->getUI()->getConsensusArea()->getConsensusAlgorithm()->getName();
-    consensusType->setCurrentIndex(consensusType->findText(currentAlgorithmName));
-
-    // Update state for the current algorithm
-    updateState();
-}
-
 }   // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
index 4cec98f..d1a8c47 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,14 @@
 #ifndef _U2_MSA_GENERAL_TAB_H_
 #define _U2_MSA_GENERAL_TAB_H_
 
-#include "ui_GeneralTabOptionsPanelWidget.h"
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "../MsaOpSavableTab.h"
+#include "ui_GeneralTabOptionsPanelWidget.h"
 
 namespace U2 {
 
-class MAlignment;
-class MAlignmentModInfo;
+class MaModificationInfo;
 class MSAEditor;
 
 class MSAGeneralTab : public QWidget, public Ui_GeneralTabOptionsPanelWidget {
@@ -44,13 +44,7 @@ signals:
     void si_copyFormatted();
 
 public slots:
-    void sl_alignmentChanged(const MAlignment& al, const MAlignmentModInfo& modInfo);
-    void sl_algorithmChanged(const QString& algoId);
-    void sl_thresholdChanged(int value);
-    void sl_algorithmSelectionChanged(int index);
-    void sl_thresholdSliderChanged(int value);
-    void sl_thresholdSpinBoxChanged(int value);
-    void sl_thresholdResetClicked(bool newState);
+    void sl_alignmentChanged();
     void sl_copyFormatSelectionChanged(int value);
     void sl_copyFormatted();
     void sl_copyFormatStatusChanged(bool enabled);
@@ -59,8 +53,6 @@ private:
     void connectSignals();
     void initializeParameters();
     void updateState();
-    void updateThresholdState(bool enable, int minVal = 0, int maxVal = 0, int value = 0);
-    void initConsensusTypeCombo();
 
     MSAEditor* msa;
     QString curAlphabetId;
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
index 8243470..d716f71 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString MSAGeneralTabFactory::GROUP_ID = "OP_MSA_GENERAL";
 const QString MSAGeneralTabFactory::GROUP_ICON_STR = ":core/images/settings2.png";
-const QString MSAGeneralTabFactory::GROUP_TITLE = QString(QObject::tr("General"));
-const QString MSAGeneralTabFactory::GROUP_DOC_PAGE = "18223056";
+const QString MSAGeneralTabFactory::GROUP_DOC_PAGE = "20874960";
 
 MSAGeneralTabFactory::MSAGeneralTabFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
@@ -60,7 +59,7 @@ const QString & MSAGeneralTabFactory::getGroupId() {
 }
 
 OPGroupParameters MSAGeneralTabFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("General"), GROUP_DOC_PAGE);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.h b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.h
index 220e60c..d7c723f 100644
--- a/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/General/MSAGeneralTabFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.cpp b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.cpp
new file mode 100644
index 0000000..093fb26
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.cpp
@@ -0,0 +1,177 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2View/MSAEditorConsensusArea.h>
+
+#include "MaConsensusModeWidget.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+MaConsensusModeWidget::MaConsensusModeWidget(QWidget *parent)
+    : QWidget(parent),
+      consArea(NULL),
+      maObject(NULL) {
+    setupUi(this);
+}
+
+void MaConsensusModeWidget::init(MultipleAlignmentObject* _maObject, MaEditorConsensusArea* _consArea) {
+    SAFE_POINT(_maObject != NULL, "MaConsensusModeWidget can not be initialized: MultipleAlignmentObject is NULL", );
+    SAFE_POINT(_consArea != NULL, "MaConsensusModeWidget can not be initialized: MaEditorConsensusArea is NULL", );
+
+    consArea = _consArea;
+    maObject = _maObject;
+
+    initConsensusTypeCombo();
+
+    connect(consensusType,          SIGNAL(currentIndexChanged(int)),   SLOT(sl_algorithmSelectionChanged(int)));
+    connect(thresholdSlider,        SIGNAL(valueChanged(int)),          SLOT(sl_thresholdSliderChanged(int)));
+    connect(thresholdSpinBox,       SIGNAL(valueChanged(int)),          SLOT(sl_thresholdSpinBoxChanged(int)));
+    connect(thresholdResetButton,   SIGNAL(clicked(bool)),              SLOT(sl_thresholdResetClicked(bool)));
+
+    connect(this, SIGNAL(si_algorithmChanged(QString)),
+            consArea, SLOT(sl_changeConsensusAlgorithm(QString)));
+    connect(this, SIGNAL(si_thresholdChanged(int)),
+            consArea, SLOT(sl_changeConsensusThreshold(int)));
+
+    connect(consArea,
+            SIGNAL(si_consensusAlgorithmChanged(QString)),
+            SLOT(sl_algorithmChanged(QString)));
+    connect(consArea,
+            SIGNAL(si_consensusThresholdChanged(int)),
+            SLOT(sl_thresholdChanged(int)));
+
+}
+
+void MaConsensusModeWidget::updateState() {
+    SAFE_POINT(consArea != NULL, "MaConsensusModeWidget is not initialized", );
+
+    const MSAConsensusAlgorithm* algo = consArea->getConsensusAlgorithm();
+    updateThresholdState(algo->supportsThreshold(),
+                         algo->getMinThreshold(),
+                         algo->getMaxThreshold(),
+                         algo->getThreshold());
+    consensusType->setToolTip(algo->getDescription());
+}
+
+void MaConsensusModeWidget::updateThresholdState(bool enable, int minVal, int maxVal, int value) {
+    if (false == enable) {
+        minVal = 0;
+        maxVal = 0;
+        value = 0;
+    }
+
+    thresholdLabel->setEnabled(enable);
+    thresholdSlider->setEnabled(enable);
+    thresholdSpinBox->setEnabled(enable);
+    thresholdResetButton->setEnabled(enable);
+
+    thresholdSlider->setRange(minVal, maxVal);
+    thresholdSpinBox->setRange(minVal, maxVal);
+
+    thresholdSpinBox->setValue(qBound(minVal, value, maxVal));
+    thresholdSlider->setValue(qBound(minVal, value, maxVal));
+}
+
+void MaConsensusModeWidget::sl_algorithmChanged(const QString& algoId) {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Consensus type changed", consArea->getEditorWgt()->getEditor()->getFactoryId());
+    // Update state for the current algorithm
+    SAFE_POINT(maObject != NULL, "MaConsensusModeWidget is not initialized", );
+
+    const DNAAlphabet* alphabet = maObject->getAlphabet();
+    if (curAlphabetId != alphabet->getId()) {
+        disconnect(consensusType, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_algorithmSelectionChanged(int)));
+        consensusType->clear();
+        initConsensusTypeCombo();
+        connect(consensusType, SIGNAL(currentIndexChanged(int)), SLOT(sl_algorithmSelectionChanged(int)));
+    } else {
+        consensusType->setCurrentIndex(consensusType->findData(algoId));
+        updateState();
+    }
+}
+
+void MaConsensusModeWidget::sl_algorithmSelectionChanged(int index) {
+    SAFE_POINT(index >= 0, "Incorrect consensus algorithm index is detected",);
+    QString selectedAlgorithmId = consensusType->itemData(index).toString();
+    updateState();
+    emit si_algorithmChanged(selectedAlgorithmId);
+}
+
+void MaConsensusModeWidget::sl_thresholdSliderChanged(int value) {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Consensus threshold changed", consArea->getEditorWgt()->getEditor()->getFactoryId());
+    thresholdSpinBox->disconnect(this);
+    thresholdSpinBox->setValue(value);
+    connect(thresholdSpinBox, SIGNAL(valueChanged(int)), SLOT(sl_thresholdSpinBoxChanged(int)));
+    emit si_thresholdChanged(value);
+}
+
+void MaConsensusModeWidget::sl_thresholdSpinBoxChanged(int value) {
+    thresholdSlider->disconnect(this);
+    thresholdSlider->setValue(value);
+    connect(thresholdSlider, SIGNAL(valueChanged(int)), SLOT(sl_thresholdSliderChanged(int)));
+    emit si_thresholdChanged(value);
+}
+
+void MaConsensusModeWidget::sl_thresholdResetClicked(bool newState) {
+    Q_UNUSED(newState);
+    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
+    MSAConsensusAlgorithmFactory* factory = reg->getAlgorithmFactory(consensusType->itemData(consensusType->currentIndex()).toString());
+    SAFE_POINT(NULL != factory, "Consensus alorithm factory is NULL", );
+    sl_thresholdChanged(factory->getDefaultThreshold());
+}
+
+void MaConsensusModeWidget::sl_thresholdChanged(int value) {
+    thresholdSpinBox->setValue(value);    // Slider updates automatically
+}
+
+void MaConsensusModeWidget::initConsensusTypeCombo() {
+    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
+    SAFE_POINT(NULL != reg, "Consensus algorithm registry is NULL.", );
+
+    const DNAAlphabet* alphabet = maObject->getAlphabet();
+    curAlphabetId = alphabet->getId();
+    ConsensusAlgorithmFlags flags = MSAConsensusAlgorithmFactory::getAphabetFlags(alphabet);
+    if (qobject_cast<MultipleChromatogramAlignmentObject*>(maObject) != NULL) {
+        flags |= ConsensusAlgorithmFlag_AvailableForChromatogram;
+    }
+    QList<MSAConsensusAlgorithmFactory*> algos = reg->getAlgorithmFactories(flags);
+    foreach(const MSAConsensusAlgorithmFactory* algo, algos) {
+        consensusType->addItem(algo->getName(), algo->getId());
+    }
+    QString currentAlgorithmName = consArea->getConsensusAlgorithm()->getName();
+    consensusType->setCurrentIndex(consensusType->findText(currentAlgorithmName));
+
+    // Update state for the current algorithm
+    updateState();
+
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.h b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.h
new file mode 100644
index 0000000..2d80cf5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.h
@@ -0,0 +1,62 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_CONSENSUS_MODE_WIDGET_H_
+#define _U2_MA_CONSENSUS_MODE_WIDGET_H_
+
+#include "ui_MaConsensusModeWidget.h"
+
+namespace U2 {
+
+class MaEditorConsensusArea;
+class MultipleAlignmentObject;
+
+class MaConsensusModeWidget : public QWidget, public Ui_MaConsensusModeWidget {
+    Q_OBJECT
+public:
+    MaConsensusModeWidget(QWidget* parent = NULL);
+    void init(MultipleAlignmentObject* maObject, MaEditorConsensusArea* consArea);
+
+    void updateState();
+    void updateThresholdState(bool enable, int minVal = 0, int maxVal = 0, int value = 0);
+
+signals:
+    void si_algorithmChanged(const QString& algoId);
+    void si_thresholdChanged(int val);
+
+public slots:
+    void sl_algorithmChanged(const QString& algoId);
+    void sl_algorithmSelectionChanged(int index);
+    void sl_thresholdSliderChanged(int value);
+    void sl_thresholdSpinBoxChanged(int value);
+    void sl_thresholdResetClicked(bool newState);
+    void sl_thresholdChanged(int value);
+
+private:
+    void initConsensusTypeCombo();
+
+    MaEditorConsensusArea*      consArea;
+    MultipleAlignmentObject*    maObject;
+    QString                     curAlphabetId;
+};
+
+} // namespace
+#endif // _U2_MA_CONSENSUS_MODE_WIDGET_H_
diff --git a/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.ui b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.ui
new file mode 100644
index 0000000..3605215
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/MaConsensusModeWidget.ui
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MaConsensusModeWidget</class>
+ <widget class="QWidget" name="MaConsensusModeWidget">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>299</width>
+    <height>131</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="QLabel" name="consensusTypeLabel">
+     <property name="text">
+      <string>Consensus type:</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QComboBox" name="consensusType"/>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="thresholdResetLayout">
+     <item>
+      <widget class="QLabel" name="thresholdLabel">
+       <property name="text">
+        <string>Threshold:</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QToolButton" name="thresholdResetButton">
+       <property name="toolTip">
+        <string>Reset to default value</string>
+       </property>
+       <property name="text">
+        <string/>
+       </property>
+       <property name="icon">
+        <iconset resource="../../../../U2Gui/U2Gui.qrc">
+         <normaloff>:/core/images/arrow_rotate_clockwise.png</normaloff>:/core/images/arrow_rotate_clockwise.png</iconset>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="thresholdLayout">
+     <item>
+      <widget class="QSlider" name="thresholdSlider">
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>100</number>
+       </property>
+       <property name="value">
+        <number>100</number>
+       </property>
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QSpinBox" name="thresholdSpinBox">
+       <property name="minimumSize">
+        <size>
+         <width>60</width>
+         <height>0</height>
+        </size>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+       </property>
+       <property name="accelerated">
+        <bool>true</bool>
+       </property>
+       <property name="suffix">
+        <string>%</string>
+       </property>
+       <property name="prefix">
+        <string/>
+       </property>
+       <property name="minimum">
+        <number>1</number>
+       </property>
+       <property name="maximum">
+        <number>100</number>
+       </property>
+       <property name="value">
+        <number>100</number>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources>
+  <include location="../../../../U2Gui/U2Gui.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.cpp b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.cpp
new file mode 100644
index 0000000..d10a4d5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.cpp
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Gui/ShowHideSubgroupWidget.h>
+
+#include "McaGeneralTab.h"
+#include "ov_msa/McaEditor.h"
+
+namespace U2 {
+
+McaGeneralTab::McaGeneralTab(McaEditor *mca)
+    : mca(mca) {
+    setupUi(this);
+
+    ShowHideSubgroupWidget* alignmentInfo = new ShowHideSubgroupWidget("ALIGNMENT_INFO", tr("Alignment info"),
+                                                                       alignmentInfoWgt, true);
+
+    Ui_McaGeneralTab::verticalLayout->addWidget(alignmentInfo);
+
+    lengthLabel->setText(QString::number(mca->getAlignmentLen()));
+    seqNumLabel->setText(QString::number(mca->getNumSequences()));
+
+    connect(mca->getMaObject(),
+            SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)),
+            SLOT(sl_alignmentChanged()));
+}
+
+void McaGeneralTab::sl_alignmentChanged() {
+    lengthLabel->setText(QString::number(mca->getAlignmentLen()));
+    seqNumLabel->setText(QString::number(mca->getNumSequences()));
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.h b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.h
new file mode 100644
index 0000000..32cb4e9
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTab.h
@@ -0,0 +1,47 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_GENERAL_TAB_H_
+#define _U2_MCA_GENERAL_TAB_H_
+
+#include <QWidget>
+
+#include "ui_McaGeneralTabOptionsPanelWidget.h"
+
+namespace U2 {
+
+class McaEditor;
+
+class McaGeneralTab : public QWidget, public Ui_McaGeneralTab {
+    Q_OBJECT
+public:
+    McaGeneralTab(McaEditor* mca);
+
+public slots:
+    void sl_alignmentChanged();
+
+private:
+    McaEditor* mca;
+};
+
+} // namespace
+
+#endif // _U2_MCA_GENERAL_TAB_H_
diff --git a/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.cpp
new file mode 100644
index 0000000..0a36da5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.cpp
@@ -0,0 +1,62 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaGeneralTabFactory.h"
+#include "McaGeneralTab.h"
+
+#include "../McaEditor.h"
+#include <U2Core/U2SafePoints.h>
+
+namespace U2 {
+
+const QString McaGeneralTabFactory::GROUP_ID = "OP_MCA_GENERAL";
+const QString McaGeneralTabFactory::GROUP_ICON_STR = ":core/images/settings2.png";
+const QString McaGeneralTabFactory::GROUP_DOC_PAGE = "20875214";
+
+McaGeneralTabFactory::McaGeneralTabFactory() {
+    objectViewOfWidget = ObjViewType_ChromAlignmentEditor;
+}
+
+QWidget* McaGeneralTabFactory::createWidget(GObjectView *objView) {
+    SAFE_POINT(NULL != objView,
+        QString("Internal error: unable to create widget for group '%1', object view is NULL.").arg(GROUP_ID),
+        NULL);
+
+    McaEditor* msa = qobject_cast<McaEditor*>(objView);
+    SAFE_POINT(NULL != msa,
+        QString("Internal error: unable to cast object view to McaEditor for group '%1'.").arg(GROUP_ID),
+        NULL);
+
+    McaGeneralTab *widget = new McaGeneralTab(msa);
+    widget->setObjectName("McaGeneralTab");
+    return widget;
+    return NULL;
+}
+
+const QString & McaGeneralTabFactory::getGroupId() {
+    return GROUP_ID;
+}
+
+OPGroupParameters McaGeneralTabFactory::getOPGroupParameters() {
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("General"), GROUP_DOC_PAGE);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.h b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.h
new file mode 100644
index 0000000..076a5ce
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.h
@@ -0,0 +1,48 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_GENERAL_TAB_FACTORY_H_
+#define _U2_MCA_GENERAL_TAB_FACTORY_H_
+
+#include <U2Gui/OPWidgetFactory.h>
+
+namespace U2 {
+
+class U2VIEW_EXPORT McaGeneralTabFactory : public OPWidgetFactory {
+    Q_OBJECT
+public:
+    McaGeneralTabFactory();
+
+    QWidget * createWidget(GObjectView* objView);
+    OPGroupParameters getOPGroupParameters();
+
+    static const QString & getGroupId();
+
+private:
+    static const QString GROUP_ID;
+    static const QString GROUP_ICON_STR;
+    static const QString GROUP_TITLE;
+    static const QString GROUP_DOC_PAGE;
+};
+
+} // namespace
+
+#endif // _U2_MCA_GENERAL_TAB_FACTORY_H_
diff --git a/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui
new file mode 100644
index 0000000..27c45b1
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>McaGeneralTab</class>
+ <widget class="QWidget" name="McaGeneralTab">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>226</width>
+    <height>189</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <item>
+    <widget class="QWidget" name="alignmentInfoWgt" native="true">
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="1">
+       <widget class="QLabel" name="lengthLabel">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignCenter</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QLabel" name="seqNumLabel">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignCenter</set>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Sequence number:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Length:</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
index 59fc71f..4a37867 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #include <QComboBox>
 #include <QLabel>
 #include <QRadioButton>
+#include <QStandardItemModel>
 #include <QToolButton>
 #include <QVBoxLayout>
 
@@ -31,7 +32,9 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
+#include <U2Core/U2SafePoints.h>
 
+#include <U2Gui/GroupedComboBoxDelegate.h>
 #include <U2Gui/ShowHideSubgroupWidget.h>
 #include <U2Gui/U2WidgetStateStorage.h>
 
@@ -62,16 +65,16 @@ static inline QHBoxLayout * initHBoxLayout(QWidget * w) {
     return layout;
 }
 
-QWidget* MSAHighlightingTab::createColorGroup(){
+QWidget* MSAHighlightingTab::createColorGroup() {
     QWidget * group = new QWidget(this);
 
     QVBoxLayout * layout = initVBoxLayout(group);
-    colorScheme = new QComboBox();
-    colorScheme->setObjectName("colorScheme");
-    colorScheme->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
+    colorSchemeController = new MsaSchemeComboBoxController<MsaColorSchemeFactory, MsaColorSchemeRegistry>(msa, AppContext::getMsaColorSchemeRegistry(), this);
+    colorSchemeController->getComboBox()->setObjectName("colorScheme");
+    colorSchemeController->getComboBox()->setSizeAdjustPolicy(QComboBox::AdjustToMinimumContentsLength);
 
     layout->addSpacing(TITLE_SPACING);
-    layout->addWidget(colorScheme);
+    layout->addWidget(colorSchemeController->getComboBox());
     layout->addSpacing(ITEMS_SPACING);
 
     return group;
@@ -81,8 +84,8 @@ QWidget* MSAHighlightingTab::createHighlightingGroup() {
     QWidget * group = new QWidget(this);
 
     QVBoxLayout * layout = initVBoxLayout(group);
-    highlightingScheme = new QComboBox();
-    highlightingScheme->setObjectName("highlightingScheme");
+    highlightingSchemeController = new MsaSchemeComboBoxController<MsaHighlightingSchemeFactory, MsaHighlightingSchemeRegistry>(msa, AppContext::getMsaHighlightingSchemeRegistry(), this);
+    highlightingSchemeController->getComboBox()->setObjectName("highlightingScheme");
 
     hint = new QLabel("");
     hint->setWordWrap(true);
@@ -94,11 +97,13 @@ QWidget* MSAHighlightingTab::createHighlightingGroup() {
     exportHighlightning = new QToolButton();
     exportHighlightning->setText(tr("Export"));
     exportHighlightning->setObjectName("exportHighlightning");
+    exportHighlightning->setMinimumWidth(198);
+    exportHighlightning->setMinimumHeight(23);
 
     QWidget *buttonAndSpacer = new QWidget(this);
     QHBoxLayout * layout2 = initHBoxLayout(buttonAndSpacer);
     layout2->addWidget(exportHighlightning);
-    layout2->addSpacerItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
+    //layout2->addSpacerItem(new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum));
 
     lessMoreLabel = new QLabel(tr("Highlight characters with conservation level:"));
     lessMoreLabel->setWordWrap(true);
@@ -108,8 +113,6 @@ QWidget* MSAHighlightingTab::createHighlightingGroup() {
     thresholdMoreRb->setObjectName("thresholdMoreRb");
     thresholdLessRb->setObjectName("thresholdLessRb");
 
-    QSpacerItem *verticalSpacer = new QSpacerItem(1,15);
-
     thresholdSlider = new QSlider(Qt::Horizontal, this);
     thresholdSlider->setMinimum(0);
     thresholdSlider->setMaximum(100);
@@ -121,19 +124,19 @@ QWidget* MSAHighlightingTab::createHighlightingGroup() {
 
     layout->setSpacing(ITEMS_SPACING);
     layout->addSpacing(TITLE_SPACING);
-    layout->addWidget(highlightingScheme);
+    layout->addWidget(highlightingSchemeController->getComboBox());
     layout->addWidget(thresholdLabel);
     layout->addWidget(thresholdSlider);
-    layout->addSpacerItem(verticalSpacer);
     layout->addWidget(lessMoreLabel);
     layout->addWidget(thresholdLessRb);
     layout->addWidget(thresholdMoreRb);
-    layout->addWidget(hint);
     layout->addWidget(useDots);
+
 #ifdef Q_OS_MAC
     layout->addSpacerItem(new QSpacerItem(40, 8, QSizePolicy::Expanding, QSizePolicy::Minimum));
 #endif
     layout->addWidget(buttonAndSpacer);
+    layout->addWidget(hint);
 
     return group;
 }
@@ -153,26 +156,27 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
 
     seqArea = msa->getUI()->getSequenceArea();
 
-    savableTab.disableSavingForWidgets(QStringList() << thresholdSlider->objectName() << highlightingScheme->objectName()
-        << colorScheme->objectName() << highlightingScheme->objectName());
+    savableTab.disableSavingForWidgets(QStringList()
+                                       << thresholdSlider->objectName()
+                                       << highlightingSchemeController->getComboBox()->objectName()
+                                       << colorSchemeController->getComboBox()->objectName());
     U2WidgetStateStorage::restoreWidgetState(savableTab);
 
-    initColorCB();
     sl_sync();
 
-    connect(colorScheme, SIGNAL(currentIndexChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
-    connect(highlightingScheme, SIGNAL(currentIndexChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
-    connect(useDots, SIGNAL(stateChanged(int)), seqArea, SLOT(sl_doUseDots()));
+    connect(colorSchemeController, SIGNAL(si_dataChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
+    connect(highlightingSchemeController, SIGNAL(si_dataChanged(const QString &)), seqArea, SLOT(sl_changeColorSchemeOutside(const QString &)));
+    connect(useDots, SIGNAL(stateChanged(int)), seqArea, SLOT(sl_triggerUseDots()));
 
     connect(seqArea, SIGNAL(si_highlightingChanged()), SLOT(sl_sync()));
 
     MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-    connect(msaColorSchemeRegistry, SIGNAL(si_customSettingsChanged()), SLOT(sl_customSchemesListChanged()));
+    connect(msaColorSchemeRegistry, SIGNAL(si_customSettingsChanged()), SLOT(sl_refreshSchemes()));
 
     connect(m, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_updateHint()));
-    connect(m->getMSAObject(), SIGNAL(si_alphabetChanged(MAlignmentModInfo, const DNAAlphabet *)), SLOT(sl_customSchemesListChanged()));
+    connect(m->getMaObject(), SIGNAL(si_alphabetChanged(MaModificationInfo, const DNAAlphabet *)), SLOT(sl_refreshSchemes()));
 
-    connect(highlightingScheme, SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_updateHint()));
+    connect(highlightingSchemeController->getComboBox(), SIGNAL(currentIndexChanged(const QString &)), SLOT(sl_updateHint()));
     connect(exportHighlightning, SIGNAL(clicked()), SLOT(sl_exportHighlightningClicked()));
     connect(thresholdSlider, SIGNAL(valueChanged(int)), SLOT(sl_highlightingParametersChanged()));
     connect(thresholdMoreRb, SIGNAL(toggled(bool)), SLOT(sl_highlightingParametersChanged()));
@@ -182,47 +186,22 @@ MSAHighlightingTab::MSAHighlightingTab(MSAEditor* m)
     sl_highlightingParametersChanged();
 }
 
-void MSAHighlightingTab::initColorCB() {
-    colorScheme->blockSignals(true);
-    highlightingScheme->blockSignals(true);
-
-    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-    QList<MsaColorSchemeFactory *> colorSchemesFactories = msaColorSchemeRegistry->getMsaColorSchemes(msa->getMSAObject()->getAlphabet()->getType());
-    colorSchemesFactories << msaColorSchemeRegistry->getMsaCustomColorSchemes(msa->getMSAObject()->getAlphabet()->getType());
-
-    colorScheme->clear();
-    foreach (MsaColorSchemeFactory *factory, colorSchemesFactories) {
-        colorScheme->addItem(factory->getName());
-    }
-
-    MsaHighlightingSchemeRegistry *msaHighlightingSchemeRegistry = AppContext::getMsaHighlightingSchemeRegistry();
-    QList<MsaHighlightingSchemeFactory *> highlightingSchemesFactories = msaHighlightingSchemeRegistry->getMsaHighlightingSchemes(msa->getMSAObject()->getAlphabet()->getType());
-
-    highlightingScheme->clear();
-    foreach (MsaHighlightingSchemeFactory *factory, highlightingSchemesFactories) {
-        highlightingScheme->addItem(factory->getName());
-    }
-
-    colorScheme->blockSignals(false);
-    highlightingScheme->blockSignals(false);
-}
-
 void MSAHighlightingTab::sl_sync() {
     MsaColorScheme *s = seqArea->getCurrentColorScheme();
     SAFE_POINT(s != NULL, "Current scheme is NULL", );
     SAFE_POINT(s->getFactory() != NULL, "Current scheme color factory is NULL", );
 
-    colorScheme->blockSignals(true);
-    colorScheme->setCurrentIndex(colorScheme->findText(s->getFactory()->getName()));
-    colorScheme->blockSignals(false);
+    colorSchemeController->getComboBox()->blockSignals(true);
+    colorSchemeController->setCurrentItemById(s->getFactory()->getId());
+    colorSchemeController->getComboBox()->blockSignals(false);
 
     MsaHighlightingScheme *sh = seqArea->getCurrentHighlightingScheme();
     SAFE_POINT(sh != NULL, "Current highlighting scheme is NULL!", );
     SAFE_POINT(sh->getFactory() != NULL, "Current highlighting scheme factory is NULL!", );
 
-    highlightingScheme->blockSignals(true);
-    highlightingScheme->setCurrentIndex(highlightingScheme->findText(sh->getFactory()->getName()));
-    highlightingScheme->blockSignals(false);
+    highlightingSchemeController->getComboBox()->blockSignals(true);
+    highlightingSchemeController->setCurrentItemById(sh->getFactory()->getId());
+    highlightingSchemeController->getComboBox()->blockSignals(false);
 
     useDots->blockSignals(true);
     useDots->setChecked(seqArea->getUseDotsCheckedState());
@@ -258,10 +237,10 @@ void MSAHighlightingTab::sl_updateHint() {
         thresholdMoreRb->hide();
         lessMoreLabel->hide();
     }
-    if (MAlignmentRow::invalidRowId() == msa->getReferenceRowId()
+    if (U2MsaRow::INVALID_ROW_ID == msa->getReferenceRowId()
         && !seqArea->getCurrentHighlightingScheme()->getFactory()->isRefFree())
     {
-        hint->setText(tr("Hint: select a reference above"));
+        hint->setText(tr("Info: set a reference sequence."));
         hint->setStyleSheet(
             "color: green;"
             "font: bold;");
@@ -270,6 +249,10 @@ void MSAHighlightingTab::sl_updateHint() {
     }
     hint->setText("");
     if(s->getFactory()->isRefFree()){
+        hint->setText(tr("Info: export is not available for the selected highlighting."));
+        hint->setStyleSheet(
+            "color: green;"
+            "font: bold;");
         exportHighlightning->setDisabled(true);
     }else{
         exportHighlightning->setEnabled(true);
@@ -288,11 +271,12 @@ void MSAHighlightingTab::sl_highlightingParametersChanged() {
     highlightingSettings.insert(MsaHighlightingScheme::THRESHOLD_PARAMETER_NAME, thresholdSlider->value());
     highlightingSettings.insert(MsaHighlightingScheme::LESS_THAN_THRESHOLD_PARAMETER_NAME, thresholdLessRb->isChecked());
     s->applySettings(highlightingSettings);
-    seqArea->sl_changeColorSchemeOutside(colorScheme->currentText());
+    seqArea->sl_changeColorSchemeOutside(colorSchemeController->getComboBox()->currentData().toString());
 }
 
-void MSAHighlightingTab::sl_customSchemesListChanged() {
-    initColorCB();
+void MSAHighlightingTab::sl_refreshSchemes() {
+    colorSchemeController->init();
+    highlightingSchemeController->init();
     sl_sync();
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
index 987f644..4b76b44 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #define _U2_MSA_HIGHLIGHTING_TAB_H_
 
 #include "MsaHighlightingSavableTab.h"
+#include "MsaSchemeComboBoxController.h"
 
 #include <QWidget>
 
@@ -39,7 +40,11 @@ class QToolButton;
 namespace U2 {
 
 class MSAEditor;
-class MSAEditorSequenceArea;
+class MaEditorSequenceArea;
+class MsaColorSchemeFactory;
+class MsaHighlightingSchemeFactory;
+class MsaColorSchemeRegistry;
+class MsaHighlightingSchemeRegistry;
 
 class U2VIEW_EXPORT MSAHighlightingTab : public QWidget
 {
@@ -53,17 +58,16 @@ private slots:
     void sl_updateHint();
     void sl_exportHighlightningClicked();
     void sl_highlightingParametersChanged();
-    void sl_customSchemesListChanged();
+    void sl_refreshSchemes();
 
 private:
     QWidget* createColorGroup();
     QWidget* createHighlightingGroup();
-    void initColorCB();
 
     MSAEditor *msa;
-    MSAEditorSequenceArea *seqArea;
-    QComboBox *colorScheme;
-    QComboBox *highlightingScheme;
+    MaEditorSequenceArea *seqArea;
+    MsaSchemeComboBoxController<MsaColorSchemeFactory, MsaColorSchemeRegistry> *colorSchemeController;
+    MsaSchemeComboBoxController<MsaHighlightingSchemeFactory, MsaHighlightingSchemeRegistry> *highlightingSchemeController;
     QLabel *hint;
     QCheckBox *useDots;
     QToolButton *exportHighlightning;
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
index d2f4085..5eb9a09 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,7 @@ namespace U2 {
 
 const QString MSAHighlightingFactory::GROUP_ID = "OP_MSA_HIGHLIGHTING";
 const QString MSAHighlightingFactory::GROUP_ICON_STR = ":core/images/highlight.png";
-const QString MSAHighlightingFactory::GROUP_TITLE = QString(QObject::tr("Highlighting"));
-const QString MSAHighlightingFactory::GROUP_DOC_PAGE = "18223058";
+const QString MSAHighlightingFactory::GROUP_DOC_PAGE = "20874962";
 
 MSAHighlightingFactory::MSAHighlightingFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
@@ -53,7 +52,7 @@ QWidget * MSAHighlightingFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters MSAHighlightingFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Highlighting"), GROUP_DOC_PAGE);
 }
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.h
index 30108b0..6e17323 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MSAHighlightingTabFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.cpp
index 1f0b6ce..45d7066 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.h
index ca3c3ec..e8005eb 100644
--- a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.h
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaHighlightingSavableTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_MSA_HIGHLIGHTING_SAVABLE_TAB_H_
 #define _U2_MSA_HIGHLIGHTING_SAVABLE_TAB_H_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include "../MsaOpSavableTab.h"
 
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemeComboBoxController.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemeComboBoxController.h
new file mode 100644
index 0000000..47b5349
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemeComboBoxController.h
@@ -0,0 +1,141 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_MSA_COMBO_BOX_CONTROLLER_H_
+#define _U2_MSA_COMBO_BOX_CONTROLLER_H_
+
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GroupedComboBoxDelegate.h>
+
+#include <U2View/MSAEditor.h>
+
+#include <QComboBox>
+
+class QStandardItemModel;
+
+namespace U2 {
+
+class ComboBoxSignalHandler : public QObject {
+    Q_OBJECT
+public:
+    ComboBoxSignalHandler(QWidget *parent = NULL) : QObject(parent) {
+        comboBox = new QComboBox(parent);
+        comboBox->setItemDelegate(new GroupedComboBoxDelegate(comboBox));
+        connect(comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(sl_indexChanged(int)));
+    }
+    QComboBox* getComboBox() {
+        return comboBox;
+    }
+signals:
+    void si_dataChanged(const QString &newScheme);
+private slots:
+    void sl_indexChanged(int index) {
+        emit si_dataChanged(comboBox->itemData(index).toString());
+    }
+protected:
+    QComboBox *comboBox;
+};
+
+template <class Factory, class Registry>
+class MsaSchemeComboBoxController : public ComboBoxSignalHandler {
+public:
+    MsaSchemeComboBoxController(MSAEditor *msa, Registry *registry, QWidget *parent = NULL);
+    void init();
+    void setCurrentItemById(const QString& id);
+private:
+    void fillCbWithGrouping();
+    void createAndFillGroup(QList<Factory *> rawSchemesFactories, const QString& groupName);
+
+    MSAEditor *msa;
+    Registry *registry;
+};
+
+template <class Factory, class Registry>
+MsaSchemeComboBoxController<Factory, Registry>::MsaSchemeComboBoxController(MSAEditor *msa, Registry *registry, QWidget *parent /*= NULL*/)
+    : ComboBoxSignalHandler(parent), msa(msa), registry(registry) {
+    init();
+}
+
+template <class Factory, class Registry>
+void MsaSchemeComboBoxController<Factory, Registry>::init() {
+    CHECK(registry != NULL, );
+
+    bool isAlphabetRaw = msa->getMaObject()->getAlphabet()->getType() == DNAAlphabet_RAW;
+
+    comboBox->blockSignals(true);
+    comboBox->clear();
+    if (isAlphabetRaw) {
+        fillCbWithGrouping();
+    } else {
+        CHECK(msa->getMaObject(), );
+        CHECK(msa->getMaObject()->getAlphabet(), );
+        DNAAlphabetType alphabetType = msa->getMaObject()->getAlphabet()->getType();
+        QList<Factory *> schemesFactories = registry->getAllSchemes(alphabetType);
+        Factory* emptySchemeFactory = registry->getEmptySchemeFactory();
+        schemesFactories.removeAll(emptySchemeFactory);
+        schemesFactories.prepend(emptySchemeFactory);
+        foreach(Factory *factory, schemesFactories) {
+            comboBox->addItem(factory->getName(), factory->getId());
+        }
+    }
+    comboBox->blockSignals(false);
+}
+
+template <class Factory, class Registry>
+void MsaSchemeComboBoxController<Factory, Registry>::setCurrentItemById(const QString& id) {
+    comboBox->setCurrentIndex(comboBox->findData(id));
+}
+
+template <class Factory, class Registry>
+void MsaSchemeComboBoxController<Factory, Registry>::fillCbWithGrouping() {
+    QMap<AlphabetFlags, QList<Factory*> > schemesFactories = registry->getAllSchemesGrouped();
+    Factory *emptySchemeFactory = registry->getEmptySchemeFactory();
+
+    QList<Factory *> commonSchemesFactories = schemesFactories[DNAAlphabet_RAW | DNAAlphabet_AMINO | DNAAlphabet_NUCL];
+    QList<Factory *> aminoSchemesFactories = schemesFactories[DNAAlphabet_RAW | DNAAlphabet_AMINO];
+    QList<Factory *> nucleotideSchemesFactories = schemesFactories[DNAAlphabet_RAW | DNAAlphabet_NUCL];
+
+    commonSchemesFactories.removeAll(emptySchemeFactory);
+    commonSchemesFactories.prepend(emptySchemeFactory);
+
+    createAndFillGroup(commonSchemesFactories, tr("All alphabets"));
+    createAndFillGroup(aminoSchemesFactories, tr("Amino acid alphabet"));
+    createAndFillGroup(nucleotideSchemesFactories, tr("Nucleotide alphabet"));
+}
+
+template <class Factory, class Registry>
+void MsaSchemeComboBoxController<Factory, Registry>::createAndFillGroup(QList<Factory *> rawSchemesFactories, const QString& groupName) {
+    CHECK(!rawSchemesFactories.isEmpty(), );
+    GroupedComboBoxDelegate *schemeDelegate = qobject_cast<GroupedComboBoxDelegate*>(comboBox->itemDelegate());
+    QStandardItemModel *schemeModel = qobject_cast<QStandardItemModel*>(comboBox->model());
+    CHECK(schemeDelegate != NULL, );
+    CHECK(schemeModel != NULL, );
+    schemeDelegate->addParentItem(schemeModel, groupName);
+    foreach(Factory *factory, rawSchemesFactories) {
+        schemeDelegate->addChildItem(schemeModel, factory->getName(), factory->getId());
+    }
+}
+
+}
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp
new file mode 100644
index 0000000..a79ee06
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp
@@ -0,0 +1,154 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaSchemesMenuBuilder.h"
+
+#include <QLabel>
+#include <QWidgetAction>
+#include <QMenu>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/U2SafePoints.h>
+
+namespace U2 {
+
+void MsaSchemesMenuBuilder::createAndFillColorSchemeMenuActions(QList<QAction*> &actions, ColorSchemeType type, DNAAlphabetType alphabet, QObject *actionsParent) {
+    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
+    MsaColorSchemeFactory *noColorsFactory = msaColorSchemeRegistry->getSchemeFactoryById(MsaColorScheme::EMPTY);
+
+    if (alphabet == DNAAlphabet_RAW) {
+        QMap<AlphabetFlags, QList<MsaColorSchemeFactory*> > factories;
+        if (type == Common) {
+            factories = msaColorSchemeRegistry->getSchemesGrouped();
+        } else if (type == Custom) {
+            factories = msaColorSchemeRegistry->getCustomSchemesGrouped();
+        } else {
+            FAIL("Unknown color scheme type", );
+        }
+
+        QList<MsaColorSchemeFactory *> rawColorSchemesFactories = factories[DNAAlphabet_RAW | DNAAlphabet_AMINO | DNAAlphabet_NUCL];
+        QList<MsaColorSchemeFactory *> aminoColorSchemesFactories = factories[DNAAlphabet_RAW | DNAAlphabet_AMINO];
+        QList<MsaColorSchemeFactory *> nucleotideColorSchemesFactories = factories[DNAAlphabet_RAW | DNAAlphabet_NUCL];
+
+        if (type == Common) {
+            rawColorSchemesFactories.removeAll(noColorsFactory);
+            rawColorSchemesFactories.prepend(noColorsFactory);
+        }
+
+        fillColorMenuSectionForCurrentAlphabet(rawColorSchemesFactories, actions, tr("All alphabets"), actionsParent);
+        fillColorMenuSectionForCurrentAlphabet(aminoColorSchemesFactories, actions, tr("Amino acid alphabet"), actionsParent);
+        fillColorMenuSectionForCurrentAlphabet(nucleotideColorSchemesFactories, actions, tr("Nucleotide alphabet"), actionsParent);
+    } else {
+        QList<MsaColorSchemeFactory*> factories;
+        if (type == Common) {
+            factories = msaColorSchemeRegistry->getSchemes(alphabet);
+            factories.removeAll(noColorsFactory);
+            factories.prepend(noColorsFactory);
+        } else if (type == Custom) {
+            factories = msaColorSchemeRegistry->getCustomSchemes(alphabet);
+        } else {
+            FAIL("Unknown color scheme type", );
+        }
+        fillColorSchemeMenuActions(actions, factories, actionsParent);
+    }
+}
+
+void MsaSchemesMenuBuilder::createAndFillHighlightingMenuActions(QList<QAction*> &actions, DNAAlphabetType alphabet, QObject *actionsParent) {
+    MsaHighlightingSchemeRegistry* msaHighlightingSchemeRegistry = AppContext::getMsaHighlightingSchemeRegistry();
+    MsaHighlightingSchemeFactory* nohighlightingFactory = msaHighlightingSchemeRegistry->getEmptySchemeFactory();
+
+    if (alphabet == DNAAlphabet_RAW) {
+        QMap<AlphabetFlags, QList<MsaHighlightingSchemeFactory*> > highlightingSchemesFactories = msaHighlightingSchemeRegistry->getAllSchemesGrouped();
+        QList<MsaHighlightingSchemeFactory *> commonHighlightSchemesFactories = highlightingSchemesFactories[DNAAlphabet_RAW | DNAAlphabet_AMINO | DNAAlphabet_NUCL];
+        QList<MsaHighlightingSchemeFactory *> aminoHighlightSchemesFactories = highlightingSchemesFactories[DNAAlphabet_RAW | DNAAlphabet_AMINO];
+        QList<MsaHighlightingSchemeFactory *> nucleotideHighlightSchemesFactories = highlightingSchemesFactories[DNAAlphabet_RAW | DNAAlphabet_NUCL];
+
+        commonHighlightSchemesFactories.removeAll(nohighlightingFactory);
+        commonHighlightSchemesFactories.prepend(nohighlightingFactory);
+
+        fillHighlightingMenuSectionForCurrentAlphabet(commonHighlightSchemesFactories, actions, tr("All alphabets"), actionsParent);
+        fillHighlightingMenuSectionForCurrentAlphabet(aminoHighlightSchemesFactories, actions, tr("Amino acid alphabet"), actionsParent);
+        fillHighlightingMenuSectionForCurrentAlphabet(nucleotideHighlightSchemesFactories, actions, tr("Nucleotide alphabet"), actionsParent);
+    } else {
+        QList<MsaHighlightingSchemeFactory*> highlightingSchemesFactories = msaHighlightingSchemeRegistry->getAllSchemes(alphabet);
+        highlightingSchemesFactories.removeAll(nohighlightingFactory);
+        highlightingSchemesFactories.prepend(nohighlightingFactory);
+        fillHighlightingSchemeMenuActions(actions, highlightingSchemesFactories, actionsParent);
+    }
+}
+
+void MsaSchemesMenuBuilder::addActionOrTextSeparatorToMenu(QAction* a, QMenu* colorsSchemeMenu) {
+    if (a->text().contains(SECTION_TOKEN)) {
+        QString text = a->text().replace(SECTION_TOKEN, QString());
+        QLabel *pLabel = new QLabel(text);
+        pLabel->setAlignment(Qt::AlignCenter);
+        pLabel->setStyleSheet("font: bold;");
+        QWidgetAction *separator = new QWidgetAction(a);
+        separator->setDefaultWidget(pLabel);
+        colorsSchemeMenu->addAction(separator);
+    } else {
+        colorsSchemeMenu->addAction(a);
+    }
+}
+
+void MsaSchemesMenuBuilder::fillColorSchemeMenuActions(QList<QAction*> &actions, QList<MsaColorSchemeFactory*> colorFactories, QObject *actionsParent) {
+    foreach(MsaColorSchemeFactory *factory, colorFactories) {
+        QString name = factory->getName();
+        QAction *action = new QAction(name, actionsParent);
+        action->setObjectName(name);
+        action->setCheckable(true);
+        action->setData(factory->getId());
+        connect(action, SIGNAL(triggered()), actionsParent, SLOT(sl_changeColorScheme()));
+        actions.append(action);
+    }
+}
+
+void MsaSchemesMenuBuilder::fillHighlightingSchemeMenuActions(QList<QAction*> &actions, const QList<MsaHighlightingSchemeFactory*> &highlightingSchemeFactories, QObject *actionsParent) {
+    foreach(MsaHighlightingSchemeFactory *factory, highlightingSchemeFactories) {
+        QString name = factory->getName();
+        QAction *action = new QAction(name, actionsParent);
+        action->setObjectName(name);
+        action->setCheckable(true);
+        action->setData(factory->getId());
+        connect(action, SIGNAL(triggered()), actionsParent, SLOT(sl_changeHighlightScheme()));
+        actions.append(action);
+    }
+}
+
+void MsaSchemesMenuBuilder::fillColorMenuSectionForCurrentAlphabet(QList<MsaColorSchemeFactory *> &colorSchemesFactories, QList<QAction *> &actions, const QString& alphName, QObject * actionsParent) {
+    if (!colorSchemesFactories.isEmpty()) {
+        actions.append(new QAction(SECTION_TOKEN + alphName, actionsParent));
+        fillColorSchemeMenuActions(actions, colorSchemesFactories, actionsParent);
+    }
+}
+
+void MsaSchemesMenuBuilder::fillHighlightingMenuSectionForCurrentAlphabet(QList<MsaHighlightingSchemeFactory *> &highlightSchemesFactories, QList<QAction *> &actions, const QString& alphabet, QObject * actionsParent) {
+    if (!highlightSchemesFactories.isEmpty()) {
+        actions.append(new QAction(SECTION_TOKEN + alphabet, actionsParent));
+        fillHighlightingSchemeMenuActions(actions, highlightSchemesFactories, actionsParent);
+    }
+}
+
+
+}
diff --git a/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.h b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.h
new file mode 100644
index 0000000..41daac4
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Highlighting/MsaSchemesMenuBuilder.h
@@ -0,0 +1,63 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_SCHEMES_MENU_BUILDER_H_
+#define _U2_MSA_SCHEMES_MENU_BUILDER_H_
+
+#include <QList>
+#include <QAction>
+
+#include <U2Core/global.h>
+
+#define SECTION_TOKEN         QString("SEPARATOR")
+
+namespace U2 {
+
+class MsaColorSchemeFactory;
+class MsaHighlightingSchemeFactory;
+
+class MsaSchemesMenuBuilder : QObject {
+    Q_OBJECT
+public:
+    enum ColorSchemeType {
+        Common,
+        Custom
+    };
+
+    MsaSchemesMenuBuilder(): QObject() {};
+
+    static void createAndFillColorSchemeMenuActions(QList<QAction*> &actions, ColorSchemeType type, DNAAlphabetType alphabet, QObject *actionsParent);
+
+    static void createAndFillHighlightingMenuActions(QList<QAction*> &actions, DNAAlphabetType alphabet, QObject *actionsParent);
+
+    static void addActionOrTextSeparatorToMenu(QAction* a, QMenu* colorsSchemeMenu);
+
+private:
+    static void fillColorSchemeMenuActions(QList<QAction*> &actions, QList<MsaColorSchemeFactory*> colorFactories, QObject *actionsParent);
+    static void fillHighlightingSchemeMenuActions(QList<QAction*> &actions, const QList<MsaHighlightingSchemeFactory*> &highlightingSchemeFactories, QObject *actionsParent);
+    
+    static void fillColorMenuSectionForCurrentAlphabet(QList<MsaColorSchemeFactory *> &colorSchemesFactories, QList<QAction *> &actions, const QString& alphName, QObject * actionsParent);
+    static void fillHighlightingMenuSectionForCurrentAlphabet(QList<MsaHighlightingSchemeFactory *> &highlightSchemesFactories, QList<QAction *> &actions, const QString&, QObject * actionsParent);
+};
+
+}
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.cpp b/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.cpp
index 28a884f..63d4358 100644
--- a/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #include "MSAEditor.h"
 
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2Region.h>
 
@@ -46,21 +46,25 @@ MSACollapsableItem::MSACollapsableItem(int startPos, int length)
 
 }
 
+bool MSACollapsableItem::isValid() const {
+    return row != -1 && numRows != -1;
+}
+
 //////////////////////////////////////////////////////////////////////////
 /// MSACollapsibleItemModel
 //////////////////////////////////////////////////////////////////////////
 
-MSACollapsibleItemModel::MSACollapsibleItemModel(MSAEditorUI *p)
-    : QObject(p), ui(p)
+MSACollapsibleItemModel::MSACollapsibleItemModel(MaEditorWgt *p)
+: QObject(p), ui(p)
 {
-
+    fakeModel = false;
 }
 
 void MSACollapsibleItemModel::reset(const QVector<U2Region>& itemRegions) {
     items.clear();
     positions.clear();
     foreach(const U2Region& r, itemRegions) {
-        if(r.length <= 1) {
+        if (r.length < 1 || (r.length == 1 && trivialGroupsPolicy == Forbid)) {
             continue;
         }
         items.append(MSACollapsableItem(r.startPos, r.length));
@@ -72,13 +76,15 @@ void MSACollapsibleItemModel::reset(const QVector<U2Region>& itemRegions) {
 void MSACollapsibleItemModel::reset() {
     const bool modelExists = ( !items.isEmpty( ) || !positions.isEmpty( ) );
     if ( modelExists ) {
+        emit si_aboutToBeToggled();
         items.clear( );
         positions.clear( );
-        emit toggled( );
+        emit si_toggled( );
     }
 }
 
 void MSACollapsibleItemModel::collapseAll(bool collapse) {
+    emit si_aboutToBeToggled();
     int delta = 0;
     for (int i=0; i < items.size(); i++) {
         MSACollapsableItem& item = items[i];
@@ -88,21 +94,23 @@ void MSACollapsibleItemModel::collapseAll(bool collapse) {
             delta += item.numRows - 1;
         }
     }
-    emit toggled();
+    emit si_toggled();
 }
 
 void MSACollapsibleItemModel::toggle(int pos) {
+    emit si_aboutToBeToggled();
     QVector<int>::ConstIterator i = qBinaryFind(positions, pos);
     assert(i != positions.constEnd());
     int index = i - positions.constBegin();
     triggerItem(index);
-    emit toggled();
+    emit si_toggled();
 }
 
 void MSACollapsibleItemModel::triggerItem(int index) {
     MSACollapsableItem& item = items[index];
     item.isCollapsed = !item.isCollapsed;
     int delta = item.numRows - 1;
+    CHECK(delta != 0, );
     assert(delta > 0);
     if (item.isCollapsed) {
         delta *= -1;
@@ -170,7 +178,7 @@ U2Region MSACollapsibleItemModel::mapSelectionRegionToRows(const U2Region& selec
     int startSeq = 0;
     int endSeq = 0;
 
-    int startItemIdx = itemAt(startPos);
+    int startItemIdx = itemForRow(startPos);
 
     if (startItemIdx >= 0) {
         const MSACollapsableItem& startItem = getItem(startItemIdx);
@@ -179,7 +187,7 @@ U2Region MSACollapsibleItemModel::mapSelectionRegionToRows(const U2Region& selec
         startSeq = mapToRow(startPos);
     }
 
-    int endItemIdx = itemAt(endPos);
+    int endItemIdx = itemForRow(endPos);
 
     if (endItemIdx >= 0) {
         const MSACollapsableItem& endItem = getItem(endItemIdx);
@@ -191,21 +199,38 @@ U2Region MSACollapsibleItemModel::mapSelectionRegionToRows(const U2Region& selec
     return U2Region(startSeq, endSeq - startSeq);
 }
 
-int MSACollapsibleItemModel::rowToMap(int row, bool failIfNotVisible) const {
+QList<int> MSACollapsibleItemModel::numbersToIndexes(const U2Region &rowNumbers) {
+    QList<int> rowsIndexes;
+    for (int i = rowNumbers.startPos; i < rowNumbers.endPos(); i++) {
+        rowsIndexes << mapToRow(i);
+    }
+    return rowsIndexes;
+}
+
+QList<int> MSACollapsibleItemModel::getDisplayableRowsIndexes() const {
+    QList<int> displayableRowsIndexes;
+    for (int rowNumber = 0; rowNumber < getDisplayableRowsCount(); rowNumber++) {
+        displayableRowsIndexes << mapToRow(rowNumber);
+    }
+    return displayableRowsIndexes;
+}
+
+int MSACollapsibleItemModel::rowToMap(int rowIndex, bool failIfNotVisible) const {
     int invisibleRows = 0;
-    for (QVector<MSACollapsableItem>::ConstIterator it = items.constBegin(); it < items.constEnd() && it->row < row; it++) {
+    for (QVector<MSACollapsableItem>::ConstIterator it = items.constBegin(); it < items.constEnd() && it->row < rowIndex; it++) {
         if (it->isCollapsed) {
-            if (it->row + it->numRows > row && failIfNotVisible) {
+            if (it->row + it->numRows > rowIndex && failIfNotVisible) {
                 return -1;
             }
-            invisibleRows += (it->row + it->numRows <= row) ? it->numRows - 1 : row - it->row;
+            invisibleRows += (it->row + it->numRows <= rowIndex) ? it->numRows - 1 : rowIndex - it->row;
         }
     }
-    return row - invisibleRows;
+    return rowIndex - invisibleRows;
 }
 
 void MSACollapsibleItemModel::getVisibleRows(int startPos, int endPos, QVector<U2Region>& range) const {
     if (items.isEmpty()) {
+        CHECK(0 <= startPos && 0 <= endPos && startPos <= endPos, );
         range.append(U2Region(startPos, endPos - startPos + 1));
         return;
     }
@@ -236,8 +261,8 @@ void MSACollapsibleItemModel::getVisibleRows(int startPos, int endPos, QVector<U
         lastRow = mapToRow(j - 1, endPos);
     }
 
-    MSAEditor* ed = ui->getEditor();
-    MAlignmentObject* obj = ed->getMSAObject();
+    MaEditor* ed = ui->getEditor();
+    MultipleAlignmentObject* obj = ed->getMaObject();
     int alnNumRows = obj->getNumRows();
     lastRow = qMin(lastRow, alnNumRows - 1);
     int len = lastRow - start + 1;
@@ -247,33 +272,46 @@ void MSACollapsibleItemModel::getVisibleRows(int startPos, int endPos, QVector<U
 }
 
 
-bool MSACollapsibleItemModel::isTopLevel(int pos) const {
-    QVector<int>::ConstIterator i = qBinaryFind(positions, pos);
-    if (i==positions.constEnd()) {
+bool MSACollapsibleItemModel::isTopLevel(int rowNumber) const {
+    QVector<int>::ConstIterator i = qBinaryFind(positions, rowNumber);
+    if (i == positions.constEnd()) {
         return false;
     }
     return true;
 }
 
-int MSACollapsibleItemModel::itemAt(int pos) const {
-    QVector<int>::ConstIterator i = qLowerBound(positions, pos);
+bool MSACollapsibleItemModel::isRowInGroup(int rowNumber) const {
+    return itemForRow(rowNumber) >= 0;
+}
 
-    if (i < positions.constEnd() && *i == pos) {
+bool MSACollapsibleItemModel::isItemCollapsed(int rowIndex) const {
+    const MSACollapsableItem item = ui->getCollapseModel()->getItemByRowIndex(rowIndex);
+    return item.isValid() && item.isCollapsed;
+}
+
+bool MSACollapsibleItemModel::isRowVisible(int rowIndex) const {
+    return isTopLevel(rowToMap(rowIndex, true)) || !isItemCollapsed(rowIndex);
+}
+
+int MSACollapsibleItemModel::itemForRow(int rowNumber) const {
+    QVector<int>::ConstIterator i = qLowerBound(positions, rowNumber);
+
+    if (i < positions.constEnd() && *i == rowNumber) {
         return i - positions.constBegin();
     }
 
-    int closest = i - positions.constBegin() - 1;
-    if (closest < 0) {
+    int closestItem = i - positions.constBegin() - 1;
+    if (closestItem < 0) {
         return -1;
     }
 
-    const MSACollapsableItem& it = items.at(closest);
-    if (it.isCollapsed) {
+    const MSACollapsableItem& item = items.at(closestItem);
+    if (item.isCollapsed) {
         return -1;
     } else {
-        int itBottom = positions.at(closest) + it.numRows - 1;
-        if (pos <= itBottom) {
-            return closest;
+        int itBottom = positions.at(closestItem) + item.numRows - 1;
+        if (rowNumber <= itBottom) {
+            return closestItem;
         }
         return -1;
     }
@@ -287,9 +325,15 @@ MSACollapsableItem MSACollapsibleItemModel::getItem(int index) const {
     return items.at(index);
 }
 
-int MSACollapsibleItemModel::displayedRowsCount() const {
-    MSAEditor *ed = ui->getEditor();
-    MAlignmentObject *o = ed->getMSAObject();
+MSACollapsableItem MSACollapsibleItemModel::getItemByRowIndex(int rowIndex) const {
+    const int itemNumber = itemForRow(rowToMap(rowIndex));
+    CHECK(0 <= itemNumber && itemNumber < items.size(), MSACollapsableItem());
+    return items[itemNumber];
+}
+
+int MSACollapsibleItemModel::getDisplayableRowsCount() const {
+    MaEditor *ed = ui->getEditor();
+    MultipleAlignmentObject *o = ed->getMaObject();
     int size = o->getNumRows();
     foreach (const MSACollapsableItem &item, items) {
         if (item.isCollapsed) {
@@ -319,4 +363,20 @@ bool MSACollapsibleItemModel::isEmpty() const {
     return items.isEmpty();
 }
 
+void MSACollapsibleItemModel::setTrivialGroupsPolicy(TrivialGroupsPolicy policy) {
+    trivialGroupsPolicy = policy;
+}
+
+void MSACollapsibleItemModel::setFakeCollapsibleModel(bool fakeModelStatus) {
+    fakeModel = fakeModelStatus;
+}
+
+bool MSACollapsibleItemModel::isFakeModel() const {
+    return fakeModel;
+}
+
+int MSACollapsibleItemModel::getItemSize() const {
+    return items.size();
+}
+
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.h b/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.h
index 4582987..0b81eb7 100644
--- a/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.h
+++ b/src/corelibs/U2View/src/ov_msa/MSACollapsibleModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_MSA_COLLAPSIBLE_MODEL_H_
 #define _U2_MSA_COLLAPSIBLE_MODEL_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QVector>
+#include <QObject>
+#include <QVector>
 
-#include <U2Core/global.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -37,20 +37,26 @@ public:
     MSACollapsableItem();
     MSACollapsableItem(int startPos, int length);
 
+    bool isValid() const;
+
     int row;
     int numRows;
     bool isCollapsed;
 };
 
+class MaEditorWgt;
+class MaModificationInfo;
 class U2Region;
-class MSAEditorUI;
-class MAlignment;
-class MAlignmentModInfo;
 
 class U2VIEW_EXPORT MSACollapsibleItemModel : public QObject {
     Q_OBJECT
 public:
-    MSACollapsibleItemModel(MSAEditorUI *p);
+    enum TrivialGroupsPolicy {
+        Allow,
+        Forbid
+    };
+
+    MSACollapsibleItemModel(MaEditorWgt *p);
 
     // creates model with every item collapsed
     // 'itemRegions' has to be sorted list of non-intersecting regions
@@ -67,42 +73,71 @@ public:
     U2Region mapToRows(int pos) const;
 
     U2Region mapSelectionRegionToRows(const U2Region &selectionRegion) const;
+    QList<int> numbersToIndexes(const U2Region &rowNumbers);        // invisible rows are not included to the result list
+    QList<int> getDisplayableRowsIndexes() const;
 
     /**
     * The method converts the row position in the whole msa into its "visible" position (i.e.
     * the row position that takes into account collapsed items).
     * Returns -1 if the row is inside a collapsed item and @failIfNotVisible is true.
     */
-    int rowToMap(int row, bool failIfNotVisible = false) const;
+    int rowToMap(int rowIndex, bool failIfNotVisible = false) const;
 
+    /**
+     * Returns rows indexes that are visible (that are not collapsed) grouped corresponding to the collapsing model
+     * for the positions between @startPos and @endPos.
+     */
     void getVisibleRows(int startPos, int endPos, QVector<U2Region> &rows) const;
 
-    bool isTopLevel(int pos) const;
+    bool isTopLevel(int rowNumber) const;
+    bool isRowInGroup(int rowNumber) const;
+    bool isItemCollapsed(int rowIndex) const;
+    bool isRowVisible(int rowIndex) const;
 
-    int itemAt(int pos) const;
+    /**
+     * Returns the item which contains the row defined by @rowNumber
+     * or -1, if the row is not in a collapsing group
+     */
+    int itemForRow(int rowNumber) const;
 
     int getItemPos(int index) const;
 
     MSACollapsableItem getItem(int index) const;
+    MSACollapsableItem getItemByRowIndex(int rowIndex) const;
 
-    int displayedRowsCount() const;
+    /**
+     * Returns count of rows that can be viewed (that are not collapsed).
+     * Every group has at least one row to view.
+     */
+    int getDisplayableRowsCount() const;
 
     /** If there is a collapsible item at 'pos' position, it is removed. */
     void removeCollapsedForPosition(int pos);
 
     bool isEmpty() const;
 
+    void setTrivialGroupsPolicy(TrivialGroupsPolicy policy);
+
+    void setFakeCollapsibleModel(bool fakeModel);
+
+    bool isFakeModel() const;
+
+    int getItemSize() const;
+
 signals:
-    void toggled();
+    void si_aboutToBeToggled();
+    void si_toggled();
 
 private:
     void triggerItem(int index);
     int mapToRow(int lastItem, int pos) const;
 
 private:
-    MSAEditorUI* ui;
+    MaEditorWgt* ui;
     QVector<MSACollapsableItem> items;
     QVector<int> positions;
+    TrivialGroupsPolicy trivialGroupsPolicy;
+    bool fakeModel;
 };
 
 } //namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
index 8e1856a..990a4b4 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,289 +19,60 @@
  * MA 02110-1301, USA.
  */
 
-#include <QApplication>
-#include <QEvent>
-#include <QFontDialog>
-#include <QGridLayout>
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QMessageBox>
-#include <QPainter>
-#include <QResizeEvent>
-#include <QSvgGenerator>
-#include <QToolBar>
-#include <QVBoxLayout>
-
-#include <U2Algorithm/MSADistanceAlgorithm.h>
-#include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
-#include <U2Algorithm/MsaColorScheme.h>
-#include <U2Algorithm/MsaHighlightingScheme.h>
-#include <U2Algorithm/PairwiseAlignmentTask.h>
-#include <U2Algorithm/PhyTreeGeneratorRegistry.h>
+#include <QDropEvent>
 
 #include <U2Core/AddSequencesToAlignmentTask.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/DocumentSelection.h>
-#include <U2Core/DocumentUtils.h>
-#include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectSelection.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/IOAdapterUtils.h>
 #include <U2Core/MSAUtils.h>
-#include <U2Core/MsaDbiUtils.h>
-#include <U2Core/PhyTreeObject.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Settings.h>
 #include <U2Core/TaskWatchdog.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/U2SequenceUtils.h>
 
 #include <U2Gui/DialogUtils.h>
-#include <U2Gui/ExportDocumentDialogController.h>
-#include <U2Gui/ExportImageDialog.h>
-#include <U2Gui/ExportObjectUtils.h>
-#include <U2Gui/GScrollBar.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/GroupHeaderImageWidget.h>
 #include <U2Gui/GroupOptionsWidget.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/OptionsPanel.h>
 #include <U2Gui/OptionsPanelWidget.h>
+#include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/ProjectView.h>
-#include <U2Gui/U2FileDialog.h>
-
-#include <U2View/UndoRedoFramework.h>
 
-#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
-#include "Export/MSAImageExportTask.h"
-#include "ExportHighlightedDialogController.h"
+#include "MaEditorFactory.h"
+#include "MaEditorNameList.h"
+#include "MaEditorTasks.h"
 #include "MSAEditor.h"
-#include "MSAEditorConsensusArea.h"
-#include "MSAEditorFactory.h"
-#include "MSAEditorNameList.h"
-#include "MSAEditorOffsetsView.h"
-#include "MSAEditorOverviewArea.h"
-#include "MSAEditorSequenceArea.h"
-#include "MSAEditorState.h"
-#include "MSAEditorStatusBar.h"
-#include "MSAEditorTasks.h"
-#include "MSAEditorUndoFramework.h"
-#include "MsaEditorSimilarityColumn.h"
-#include "PhyTrees/MSAEditorMultiTreeViewer.h"
-#include "PhyTrees/MSAEditorTreeViewer.h"
-#include "ov_msa/TreeOptions//TreeOptionsWidgetFactory.h"
-#include "ov_phyltree/TreeViewer.h"
-#include "ov_phyltree/TreeViewerTasks.h"
-#include "phyltree/CreatePhyTreeDialogController.h"
+#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
+#include "Overview/MaEditorOverviewArea.h"
+#include "view_rendering/MaEditorConsensusArea.h"
+#include "view_rendering/MaEditorSequenceArea.h"
 
 namespace U2 {
 
-/* TRANSLATOR U2::MSAEditor */
-
-const float MSAEditor::zoomMult = 1.25;
-
-MSAEditor::MSAEditor(const QString& viewName, GObject* obj)
-: GObjectView(MSAEditorFactory::ID, viewName), ui(NULL), alignSequencesToAlignmentAction(NULL), treeManager(this) {
-
-    msaObject = qobject_cast<MAlignmentObject*>(obj);
-
-    objects.append(msaObject);
-    onObjectAdded(msaObject);
-
-    requiredObjects.append(msaObject);
-    GCOUNTER(cvar,tvar,"MSAEditor");
-
-    if (!U2DbiUtils::isDbiReadOnly(msaObject->getEntityRef().dbiRef)) {
-        U2OpStatus2Log os;
-        msaObject->setTrackMod(TrackOnUpdate, os);
-    }
-
-    saveAlignmentAction = new QAction(QIcon(":core/images/msa_save.png"), tr("Save alignment"), this);
-    saveAlignmentAction->setObjectName("Save alignment");
-    connect(saveAlignmentAction, SIGNAL(triggered()), SLOT(sl_saveAlignment()));
-
-    saveAlignmentAsAction = new QAction(QIcon(":core/images/msa_save_as.png"), tr("Save alignment as"), this);
-    saveAlignmentAsAction->setObjectName("Save alignment as");
-    connect(saveAlignmentAsAction, SIGNAL(triggered()), SLOT(sl_saveAlignmentAs()));
-
-    zoomInAction = new QAction(QIcon(":core/images/zoom_in.png"), tr("Zoom In"), this);
-    zoomInAction->setObjectName("Zoom In");
-    connect(zoomInAction, SIGNAL(triggered()), SLOT(sl_zoomIn()));
-
-    zoomOutAction = new QAction(QIcon(":core/images/zoom_out.png"), tr("Zoom Out"), this);
-    zoomOutAction->setObjectName("Zoom Out");
-    connect(zoomOutAction, SIGNAL(triggered()), SLOT(sl_zoomOut()));
-
-    zoomToSelectionAction = new QAction(QIcon(":core/images/zoom_reg.png"), tr("Zoom To Selection"), this);
-    zoomToSelectionAction->setObjectName("Zoom To Selection");
-    connect(zoomToSelectionAction, SIGNAL(triggered()), SLOT(sl_zoomToSelection()));
-
-    resetFontAction = new QAction(QIcon(":core/images/zoom_whole.png"), tr("Reset Zoom"), this);
-    resetFontAction->setObjectName("Reset Zoom");
-    connect(resetFontAction, SIGNAL(triggered()), SLOT(sl_resetZoom()));
-
-    changeFontAction = new QAction(QIcon(":core/images/font.png"), tr("Change Font"), this);
-    changeFontAction->setObjectName("Change Font");
-    connect(changeFontAction, SIGNAL(triggered()), SLOT(sl_changeFont()));
+MSAEditor::MSAEditor(const QString& viewName, MultipleSequenceAlignmentObject* obj)
+    : MaEditor(MsaEditorFactory::ID, viewName, obj),
+      alignSequencesToAlignmentAction(NULL),
+      treeManager(this)
+{
+    initZoom();
+    initFont();
 
     buildTreeAction = new QAction(QIcon(":/core/images/phylip.png"), tr("Build Tree"), this);
     buildTreeAction->setObjectName("Build Tree");
     buildTreeAction->setEnabled(!isAlignmentEmpty());
-    connect(msaObject, SIGNAL(si_alignmentBecomesEmpty(bool)), buildTreeAction, SLOT(setDisabled(bool)));
-    connect(msaObject, SIGNAL(si_rowsRemoved(const QList<qint64> &)), SLOT(sl_rowsRemoved(const QList<qint64> &)));
+    connect(maObject, SIGNAL(si_rowsRemoved(const QList<qint64> &)), SLOT(sl_rowsRemoved(const QList<qint64> &)));
     connect(buildTreeAction, SIGNAL(triggered()), SLOT(sl_buildTree()));
 
-    connect(msaObject, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
-
-    Settings* s = AppContext::getSettings();
-    zoomFactor = MOBJECT_DEFAULT_ZOOM_FACTOR;
-    font.setFamily(s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_FAMILY, MOBJECT_DEFAULT_FONT_FAMILY).toString());
-    font.setPointSize(s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_SIZE, MOBJECT_DEFAULT_FONT_SIZE).toInt());
-    font.setItalic(s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_ITALIC, false).toBool());
-    font.setBold(s->getValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_BOLD, false).toBool());
-    calcFontPixelToPointSizeCoef();
-
-    if ( (font.pointSize() == MOBJECT_MIN_FONT_SIZE) && (zoomFactor < 1.0f) ) {
-        resizeMode = ResizeMode_OnlyContent;
-    } else {
-        resizeMode = ResizeMode_FontAndContent;
-    }
-
     pairwiseAlignmentWidgetsSettings = new PairwiseAlignmentWidgetsSettings;
-    if (msaObject->getAlphabet() != NULL) {
-        pairwiseAlignmentWidgetsSettings->customSettings.insert("alphabet", msaObject->getAlphabet()->getId());
-    }
-
-    exportHighlightedAction = new QAction(tr("Export highlighted"), this);
-    exportHighlightedAction->setObjectName("Export highlighted");
-    connect(exportHighlightedAction, SIGNAL(triggered()), this, SLOT(sl_exportHighlighted()));
-    exportHighlightedAction->setDisabled(true);
-
-    updateActions();
-}
-
-int MSAEditor::getRowHeight() const {
-    QFontMetrics fm(font, ui);
-    return fm.height() * zoomMult;
-}
-
-int MSAEditor::getColumnWidth() const {
-    QFontMetrics fm(font, ui);
-    int width =  fm.width('W') * zoomMult;
-
-    width = (int)(width * zoomFactor);
-    width = qMax(width, MOBJECT_MIN_COLUMN_WIDTH);
-
-    return width;
-
-}
-
-void MSAEditor::sl_saveAlignment(){
-    AppContext::getTaskScheduler()->registerTopLevelTask(new SaveDocumentTask(msaObject->getDocument()));
-}
-
-void MSAEditor::sl_saveAlignmentAs(){
-
-    Document* srcDoc = msaObject->getDocument();
-    if (srcDoc == NULL) {
-        return;
-    }
-    if (!srcDoc->isLoaded()) {
-        return;
-    }
-
-    QObjectScopedPointer<ExportDocumentDialogController> dialog = new ExportDocumentDialogController(srcDoc, ui);
-    dialog->setAddToProjectFlag(true);
-    dialog->setWindowTitle(tr("Save Alignment"));
-    ExportObjectUtils::export2Document(dialog);
-}
-
-void MSAEditor::sl_zoomIn() {
-
-    int pSize = font.pointSize();
-
-    if (resizeMode == ResizeMode_OnlyContent) {
-        zoomFactor *= zoomMult;
-    } else if ( (pSize < MOBJECT_MAX_FONT_SIZE) && (resizeMode == ResizeMode_FontAndContent) ) {
-        font.setPointSize(pSize+1);
-        setFont(font);
-    }
-
-    bool resizeModeChanged = false;
-
-    if (zoomFactor >= 1) {
-        ResizeMode oldMode = resizeMode;
-        resizeMode = ResizeMode_FontAndContent;
-        resizeModeChanged = resizeMode != oldMode;
-        zoomFactor = 1;
-    }
-    updateActions();
-
-    emit si_zoomOperationPerformed(resizeModeChanged);
-}
-
-void MSAEditor::sl_zoomOut() {
-    int pSize = font.pointSize();
-
-    bool resizeModeChanged = false;
-
-    if (pSize > MOBJECT_MIN_FONT_SIZE) {
-        font.setPointSize(pSize-1);
-        setFont(font);
-    } else {
-        SAFE_POINT(zoomMult > 0, QString("Incorrect value of MSAEditor::zoomMult"),);
-        zoomFactor /= zoomMult;
-        ResizeMode oldMode = resizeMode;
-        resizeMode = ResizeMode_OnlyContent;
-        resizeModeChanged = resizeMode != oldMode;
-    }
-    updateActions();
-
-    emit si_zoomOperationPerformed(resizeModeChanged);
-}
-
-void MSAEditor::sl_zoomToSelection()
-{
-    ResizeMode oldMode = resizeMode;
-    int seqAreaWidth =  ui->seqArea->width();
-    MSAEditorSelection selection = ui->seqArea->getSelection();
-    if (selection.isNull()) {
-        return;
-    }
-    int selectionWidth = selection.width();
-    float pixelsPerBase = (seqAreaWidth / float(selectionWidth)) * zoomMult;
-    int fontPointSize = int(pixelsPerBase / fontPixelToPointSize);
-    if (fontPointSize >= MOBJECT_MIN_FONT_SIZE) {
-        if (fontPointSize > MOBJECT_MAX_FONT_SIZE) {
-            fontPointSize = MOBJECT_MAX_FONT_SIZE;
-        }
-        font.setPointSize(fontPointSize);
-        setFont(font);
-        resizeMode = ResizeMode_FontAndContent;
-        zoomFactor = 1;
-    } else {
-        if (font.pointSize() != MOBJECT_MIN_FONT_SIZE) {
-            font.setPointSize(MOBJECT_MIN_FONT_SIZE);
-            setFont(font);
-        }
-        zoomFactor = pixelsPerBase / (MOBJECT_MIN_FONT_SIZE * fontPixelToPointSize);
-        resizeMode = ResizeMode_OnlyContent;
+    if (maObject->getAlphabet() != NULL) {
+        pairwiseAlignmentWidgetsSettings->customSettings.insert("alphabet", maObject->getAlphabet()->getId());
     }
-    ui->seqArea->setFirstVisibleBase(selection.x());
-    ui->seqArea->setFirstVisibleSequence(selection.y());
 
     updateActions();
-
-    emit si_zoomOperationPerformed(resizeMode != oldMode);
 }
 
 void MSAEditor::sl_buildTree() {
@@ -319,7 +90,7 @@ bool MSAEditor::onObjectRemoved(GObject* obj) {
 
 void MSAEditor::onObjectRenamed(GObject*, const QString&) {
     // update title
-    OpenMSAEditorTask::updateTitle(this);
+    OpenMaEditorTask::updateTitle(this);
 }
 
 bool MSAEditor::onCloseEvent() {
@@ -329,62 +100,11 @@ bool MSAEditor::onCloseEvent() {
     return true;
 }
 
-static void saveFont(const QFont& f) {
-    Settings* s = AppContext::getSettings();
-    s->setValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_FAMILY, f.family());
-    s->setValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_SIZE, f.pointSize());
-    s->setValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_ITALIC, f.italic());
-    s->setValue(MOBJECT_SETTINGS_ROOT + MOBJECT_SETTINGS_FONT_BOLD, f.bold());
-}
-
-void MSAEditor::setFont(const QFont& f) {
-    int pSize = f.pointSize();
-    font = f;
-    calcFontPixelToPointSizeCoef();
-    font.setPointSize(qBound(MOBJECT_MIN_FONT_SIZE, pSize, MOBJECT_MAX_FONT_SIZE));
-    emit si_fontChanged(f);
-    saveFont(font);
-}
-
-void MSAEditor::setFirstVisibleBase(int firstPos) {
-
-    if (ui->seqArea->isPosInRange(firstPos)) {
-        ui->seqArea->setFirstVisibleBase(firstPos);
-    }
-}
-
-int MSAEditor::getFirstVisibleBase() const {
-
-    return ui->seqArea->getFirstVisibleBase();
-}
-
-const MAlignmentRow& MSAEditor::getRowByLineNumber(int lineNumber) const {
+const MultipleSequenceAlignmentRow MSAEditor::getRowByLineNumber(int lineNumber) const {
     if (ui->isCollapsibleMode()) {
         lineNumber = ui->getCollapseModel()->mapToRow(lineNumber);
     }
-    return getMSAObject()->getRow(lineNumber);
-}
-
-void MSAEditor::sl_changeFont() {
-    bool ok = false;
-    QFont f = QFontDialog::getFont(&ok, font, widget, tr("Select font for alignment"));
-    if (!ok) {
-        return;
-    }
-    setFont(f);
-    updateActions();
-}
-
-void MSAEditor::sl_resetZoom() {
-    QFont f = getFont();
-    f.setPointSize(MOBJECT_DEFAULT_FONT_SIZE);
-    setFont(f);
-    zoomFactor = MOBJECT_DEFAULT_ZOOM_FACTOR;
-    ResizeMode oldMode = resizeMode;
-    resizeMode = ResizeMode_FontAndContent;
-    emit si_zoomOperationPerformed(resizeMode != oldMode);
-
-    updateActions();
+    return getMaObject()->getMsaRow(lineNumber);
 }
 
 MSAEditor::~MSAEditor() {
@@ -393,77 +113,51 @@ MSAEditor::~MSAEditor() {
 
 void MSAEditor::buildStaticToolbar(QToolBar* tb) {
     tb->addAction(ui->getCopyFormattedSelectionAction());
+
     tb->addAction(saveAlignmentAction);
     tb->addAction(saveAlignmentAsAction);
+
     tb->addAction(zoomInAction);
     tb->addAction(zoomOutAction);
     tb->addAction(zoomToSelectionAction);
-    tb->addAction(resetFontAction);
+    tb->addAction(resetZoomAction);
+
     tb->addAction(showOverviewAction);
     tb->addAction(changeFontAction);
-    tb->addAction(buildTreeAction);
+
     tb->addAction(saveScreenshotAction);
+    tb->addAction(buildTreeAction);
     tb->addAction(alignAction);
     tb->addAction(alignSequencesToAlignmentAction);
 
-    toolbar = tb;
-
     GObjectView::buildStaticToolbar(tb);
 }
 
 void MSAEditor::buildStaticMenu(QMenu* m) {
     addLoadMenu(m);
+
     addCopyMenu(m);
     addEditMenu(m);
+
     addAlignMenu(m);
     addTreeMenu(m);
     addStatisticsMenu(m);
+
     addViewMenu(m);
     addExportMenu(m);
+
     addAdvancedMenu(m);
-    //addSNPMenu(m);
 
     GObjectView::buildStaticMenu(m);
 
     GUIUtils::disableEmptySubmenus(m);
 }
 
-
-void MSAEditor::addCopyMenu(QMenu* m) {
-    QMenu* cm = m->addMenu(tr("Copy/Paste"));
-    cm->menuAction()->setObjectName(MSAE_MENU_COPY);
-}
-
-void MSAEditor::addEditMenu(QMenu* m) {
-    QMenu* em = m->addMenu(tr("Edit"));
-    em->menuAction()->setObjectName(MSAE_MENU_EDIT);
-}
-
 void MSAEditor::addExportMenu(QMenu* m) {
-    QMenu* em = m->addMenu(tr("Export"));
-    em->menuAction()->setObjectName(MSAE_MENU_EXPORT);
+    MaEditor::addExportMenu(m);
+    QMenu* em = GUIUtils::findSubMenu(m, MSAE_MENU_EXPORT);
+    SAFE_POINT(em != NULL, "Export menu not found", );
     em->addAction(saveScreenshotAction);
-    em->addAction(exportHighlightedAction);
-    if(!ui->getSequenceArea()->getCurrentHighlightingScheme()->getFactory()->isRefFree() &&
-                getReferenceRowId() != MAlignmentRow::invalidRowId()){
-        exportHighlightedAction->setEnabled(true);
-    }else{
-        exportHighlightedAction->setDisabled(true);
-    }
-}
-
-void MSAEditor::addViewMenu(QMenu* m) {
-    QMenu* em = m->addMenu(tr("View"));
-    em->menuAction()->setObjectName(MSAE_MENU_VIEW);
-    if (ui->offsetsView != NULL) {
-        em->addAction(ui->offsetsView->getToggleColumnsViewAction());
-    }
-}
-
-void MSAEditor::addAlignMenu(QMenu* m) {
-    QMenu* em = m->addMenu(tr("Align"));
-    em->setIcon(QIcon(":core/images/align.png"));
-    em->menuAction()->setObjectName(MSAE_MENU_ALIGN);
 }
 
 void MSAEditor::addTreeMenu(QMenu* m) {
@@ -484,30 +178,20 @@ void MSAEditor::addStatisticsMenu(QMenu* m) {
     em->menuAction()->setObjectName(MSAE_MENU_STATISTICS);
 }
 
-void MSAEditor::addLoadMenu( QMenu* m ) {
-    QMenu* lsm = m->addMenu(tr("Add"));
-    lsm->menuAction()->setObjectName(MSAE_MENU_LOAD);
-}
-
-Task* MSAEditor::updateViewTask(const QString& stateName, const QVariantMap& stateData) {
-    return new UpdateMSAEditorTask(this, stateName, stateData);
-}
-
-QVariantMap MSAEditor::saveState() {
-    return MSAEditorState::saveState(this);
+MsaEditorWgt *MSAEditor::getUI() const {
+    return qobject_cast<MsaEditorWgt *>(ui);
 }
 
 QWidget* MSAEditor::createWidget() {
     Q_ASSERT(ui == NULL);
-    ui = new MSAEditorUI(this);
+    ui = new MsaEditorWgt(this);
 
-    QString objName = "msa_editor_" + msaObject->getGObjectName();
+    QString objName = "msa_editor_" + maObject->getGObjectName();
     ui->setObjectName(objName);
 
+    initActions();
+
     connect(ui , SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(sl_onContextMenuRequested(const QPoint &)));
-    saveScreenshotAction = new QAction(QIcon(":/core/images/cam2.png"), tr("Export as image"), this);
-    saveScreenshotAction->setObjectName("Export as image");
-    connect(saveScreenshotAction, SIGNAL(triggered()), ui, SLOT(sl_saveScreenshot()));
 
     alignAction = new QAction(QIcon(":core/images/align.png"), tr("Align"), this);
     alignAction->setObjectName("Align");
@@ -525,13 +209,6 @@ QWidget* MSAEditor::createWidget() {
     unsetReferenceSequenceAction->setObjectName("unset_reference");
     connect(unsetReferenceSequenceAction, SIGNAL(triggered()), SLOT(sl_unsetReferenceSeq()));
 
-    //! TODO: set icon
-    showOverviewAction = new QAction(QIcon(":/core/images/msa_show_overview.png"), "Overview", this);
-    showOverviewAction->setObjectName("Show overview");
-    showOverviewAction->setCheckable(true);
-    showOverviewAction->setChecked(true);
-    connect(showOverviewAction, SIGNAL(triggered()), ui->getOverviewArea(), SLOT(sl_show()));
-
     optionsPanel = new OptionsPanel(this);
     OPWidgetFactoryRegistry *opWidgetFactoryRegistry = AppContext::getOPWidgetFactoryRegistry();
 
@@ -552,31 +229,11 @@ QWidget* MSAEditor::createWidget() {
     treeManager.loadRelatedTrees();
 
     initDragAndDropSupport();
+    updateActions();
     return ui;
 }
 
-int MSAEditor::getAlignmentLen() const {
-    return msaObject->getLength();
-}
-
-int MSAEditor::getNumSequences() const {
-    return msaObject->getNumRows();
-}
-
-bool MSAEditor::isAlignmentEmpty() const {
-    return getAlignmentLen() == 0 || getNumSequences() == 0;
-}
-
-void MSAEditor::sl_onContextMenuRequested(const QPoint & pos) {
-    Q_UNUSED(pos);
-
-    if (ui->childAt(pos) != NULL) {
-        // ignore context menu request if overview area was clicked on
-        if (ui->overviewArea->isOverviewWidget(ui->childAt(pos))) {
-            return;
-        }
-    }
-
+void MSAEditor::sl_onContextMenuRequested(const QPoint & /*pos*/) {
     QMenu m;
 
     addLoadMenu(&m);
@@ -591,16 +248,16 @@ void MSAEditor::sl_onContextMenuRequested(const QPoint & pos) {
 
     m.addSeparator();
     snp.clickPoint = QCursor::pos( );
-    const QPoint nameMapped = ui->nameList->mapFromGlobal( snp.clickPoint );
+    const QPoint nameMapped = ui->getEditorNameList()->mapFromGlobal( snp.clickPoint );
     const qint64 hoverRowId = ( 0 <= nameMapped.y( ) )
-        ? ui->nameList->sequenceIdAtPos( nameMapped ) : MAlignmentRow::invalidRowId( );
+        ? ui->getEditorNameList()->sequenceIdAtPos( nameMapped ) : U2MsaRow::INVALID_ROW_ID;
     if ( ( hoverRowId != getReferenceRowId( )
-        || MAlignmentRow::invalidRowId( ) == getReferenceRowId( ) )
-        && hoverRowId != MAlignmentRow::invalidRowId( ) )
+        || U2MsaRow::INVALID_ROW_ID == getReferenceRowId( ) )
+        && hoverRowId != U2MsaRow::INVALID_ROW_ID )
     {
         m.addAction( setAsReferenceSequenceAction );
     }
-    if ( MAlignmentRow::invalidRowId( ) != getReferenceRowId( ) ) {
+    if ( U2MsaRow::INVALID_ROW_ID != getReferenceRowId( ) ) {
         m.addAction( unsetReferenceSequenceAction );
     }
     m.addSeparator();
@@ -612,34 +269,22 @@ void MSAEditor::sl_onContextMenuRequested(const QPoint & pos) {
     m.exec(QCursor::pos());
 }
 
-const QRect& MSAEditor::getCurrentSelection() const {
-    return ui->seqArea->getSelection().getRect();
-}
-
 void MSAEditor::updateActions() {
-    zoomInAction->setEnabled(font.pointSize() < MOBJECT_MAX_FONT_SIZE);
-    zoomOutAction->setEnabled( getColumnWidth() > MOBJECT_MIN_COLUMN_WIDTH );
-    zoomToSelectionAction->setEnabled( font.pointSize() < MOBJECT_MAX_FONT_SIZE);
-    changeFontAction->setEnabled( resizeMode == ResizeMode_FontAndContent);
+    MaEditor::updateActions();
     if(alignSequencesToAlignmentAction != NULL) {
-        alignSequencesToAlignmentAction->setEnabled(!msaObject->isStateLocked());
+        alignSequencesToAlignmentAction->setEnabled(!maObject->isStateLocked());
     }
-}
-
-void MSAEditor::calcFontPixelToPointSizeCoef() {
-    QFontInfo info(font);
-    fontPixelToPointSize = (float) info.pixelSize() / (float) info.pointSize();
-
+    buildTreeAction->setEnabled(!maObject->isStateLocked() && !this->isAlignmentEmpty());
 }
 
 void MSAEditor::copyRowFromSequence(U2SequenceObject *seqObj, U2OpStatus &os) {
-    MSAUtils::copyRowFromSequence(msaObject, seqObj, os);
-    msaObject->updateCachedMAlignment();
+    MSAUtils::copyRowFromSequence(getMaObject(), seqObj, os);
+    maObject->updateCachedMultipleAlignment();
 }
 
 void MSAEditor::sl_onSeqOrderChanged(const QStringList& order ){
-    if(!msaObject->isStateLocked()) {
-        msaObject->sortRowsByList(order);
+    if(!maObject->isStateLocked()) {
+        maObject->sortRowsByList(order);
     }
 }
 
@@ -696,12 +341,12 @@ bool MSAEditor::eventFilter(QObject*, QEvent* e) {
         const QMimeData* md = de->mimeData();
         const GObjectMimeData* gomd = qobject_cast<const GObjectMimeData*>(md);
         if (gomd != NULL) {
-            if (msaObject->isStateLocked()) {
+            if (maObject->isStateLocked()) {
                 return false;
             }
             U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*> (gomd->objPtr.data());
             if (dnaObj != NULL ) {
-                if (U2AlphabetUtils::deriveCommonAlphabet(dnaObj->getAlphabet(), msaObject->getAlphabet()) == NULL) {
+                if (U2AlphabetUtils::deriveCommonAlphabet(dnaObj->getAlphabet(), maObject->getAlphabet()) == NULL) {
                     return false;
                 }
                 if (e->type() == QEvent::DragEnter) {
@@ -710,8 +355,8 @@ bool MSAEditor::eventFilter(QObject*, QEvent* e) {
                     U2OpStatusImpl os;
                     DNASequence seq = dnaObj->getWholeSequence(os);
                     seq.alphabet = dnaObj->getAlphabet();
-                    Task *task = new AddSequenceObjectsToAlignmentTask(msaObject, QList<DNASequence>() << seq);
-                    TaskWatchdog::trackResourceExistence(msaObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
+                    Task *task = new AddSequenceObjectsToAlignmentTask(getMaObject(), QList<DNASequence>() << seq);
+                    TaskWatchdog::trackResourceExistence(maObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
                     AppContext::getTaskScheduler()->registerTopLevelTask(task);
                 }
             }
@@ -752,7 +397,7 @@ void MSAEditor::sl_align(){
 }
 
 void MSAEditor::sl_addToAlignment() {
-    MAlignmentObject* msaObject = getMSAObject();
+    MultipleSequenceAlignmentObject* msaObject = getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
@@ -767,7 +412,7 @@ void MSAEditor::sl_addToAlignment() {
     bool selectFromProject = !objects.isEmpty();
 
     foreach(GObject* object, objects) {
-        if(object == getMSAObject() || (object->getGObjectType() != GObjectTypes::MULTIPLE_ALIGNMENT && object->getGObjectType() != GObjectTypes::SEQUENCE)) {
+        if(object == getMaObject() || (object->getGObjectType() != GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT && object->getGObjectType() != GObjectTypes::SEQUENCE)) {
             selectFromProject = false;
             break;
         }
@@ -781,12 +426,12 @@ void MSAEditor::sl_addToAlignment() {
 
 void MSAEditor::alignSequencesFromObjectsToAlignment(const QList<GObject*>& objects) {
     SequenceObjectsExtractor extractor;
-    extractor.setAlphabet(msaObject->getAlphabet());
+    extractor.setAlphabet(maObject->getAlphabet());
     extractor.extractSequencesFromObjects(objects);
 
     if(!extractor.getSequenceRefs().isEmpty()) {
-        AlignSequencesToAlignmentTask* task = new AlignSequencesToAlignmentTask(msaObject, extractor);
-        TaskWatchdog::trackResourceExistence(msaObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
+        AlignSequencesToAlignmentTask* task = new AlignSequencesToAlignmentTask(getMaObject(), extractor);
+        TaskWatchdog::trackResourceExistence(maObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
     }
 }
@@ -805,30 +450,26 @@ void MSAEditor::alignSequencesFromFilesToAlignment() {
 
     if (!urls.isEmpty()) {
         lod.url = urls.first();
-        LoadSequencesAndAlignToAlignmentTask * task = new LoadSequencesAndAlignToAlignmentTask(msaObject, urls);
-        TaskWatchdog::trackResourceExistence(msaObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
+        LoadSequencesAndAlignToAlignmentTask * task = new LoadSequencesAndAlignToAlignmentTask(getMaObject(), urls);
+        TaskWatchdog::trackResourceExistence(maObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
     }
 }
 
-void MSAEditor::createDistanceColumn(MSADistanceMatrix* algo) {
-    ui->createDistanceColumn(algo);
-}
-
 void MSAEditor::sl_setSeqAsReference(){
     QPoint menuCallPos = snp.clickPoint;
-    QPoint nameMapped = ui->nameList->mapFromGlobal(menuCallPos);
+    QPoint nameMapped = ui->getEditorNameList()->mapFromGlobal(menuCallPos);
     if ( nameMapped.y() >= 0 ) {
-        qint64 newRowId = ui->nameList->sequenceIdAtPos(nameMapped);
-        if (MAlignmentRow::invalidRowId() != newRowId && newRowId != snp.seqId) {
+        qint64 newRowId = ui->getEditorNameList()->sequenceIdAtPos(nameMapped);
+        if (U2MsaRow::INVALID_ROW_ID != newRowId && newRowId != snp.seqId) {
             setReference(newRowId);
         }
     }
 }
 
 void MSAEditor::sl_unsetReferenceSeq( ) {
-    if ( MAlignmentRow::invalidRowId( ) != getReferenceRowId( ) ) {
-        setReference( MAlignmentRow::invalidRowId( ) );
+    if ( U2MsaRow::INVALID_ROW_ID != getReferenceRowId( ) ) {
+        setReference( U2MsaRow::INVALID_ROW_ID );
     }
 }
 
@@ -841,415 +482,26 @@ void MSAEditor::sl_rowsRemoved(const QList<qint64> &rowIds) {
     }
 }
 
-void MSAEditor::setReference(qint64 sequenceId) {
-    if(sequenceId == MAlignmentRow::invalidRowId()){
-        exportHighlightedAction->setDisabled(true);
-    }else{
-        exportHighlightedAction->setEnabled(true);
-    }
-    if(snp.seqId != sequenceId) {
-        snp.seqId = sequenceId;
-        emit si_referenceSeqChanged(sequenceId);
-    }
-    //REDRAW OTHER WIDGETS
-}
-
-void MSAEditor::updateReference(){
-    if(msaObject->getRowPosById(snp.seqId) == -1){
-        setReference(MAlignmentRow::invalidRowId());
-    }
-}
-
-QString MSAEditor::getReferenceRowName() const {
-    const MAlignment &alignment = getMSAObject()->getMAlignment();
-    U2OpStatusImpl os;
-    const int refSeq = alignment.getRowIndexByRowId(getReferenceRowId(), os);
-    return (MAlignmentRow::invalidRowId() != refSeq) ? alignment.getRowNames().at(refSeq)
-        : QString();
-}
-
 void MSAEditor::buildTree() {
     sl_buildTree();
 }
 
-void MSAEditor::resetCollapsibleModel() {
-    MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
-    SAFE_POINT(NULL != collapsibleModel, "NULL collapsible model!", );
-    collapsibleModel->reset();
-}
-
-void MSAEditor::sl_exportHighlighted(){
-    QObjectScopedPointer<ExportHighligtingDialogController> d = new ExportHighligtingDialogController(ui, (QWidget*)AppContext::getMainWindow()->getQMainWindow());
-    d->exec();
-    CHECK(!d.isNull(), );
-
-    if (d->result() == QDialog::Accepted){
-        AppContext::getTaskScheduler()->registerTopLevelTask(new ExportHighligtningTask(d.data(), ui->getSequenceArea()));
-    }
-}
-
-void MSAEditor::sl_lockedStateChanged() {
-    updateActions();
-}
-
-QVariantMap MSAEditor::getHighlightingSettings(const QString &highlightingFactoryId) const {
-    const QVariant v = snp.highlightSchemeSettings.value(highlightingFactoryId);
-    if (v.isNull()) {
-        return QVariantMap();
-    } else {
-        CHECK(v.type() == QVariant::Map, QVariantMap());
-        return v.toMap();
-    }
-}
-
-void MSAEditor::saveHighlightingSettings( const QString &highlightingFactoryId, const QVariantMap &settingsMap /* = QVariant()*/ ) {
-    snp.highlightSchemeSettings.insert(highlightingFactoryId, QVariant(settingsMap));
-}
-
-
-
-//////////////////////////////////////////////////////////////////////////
-MSAEditorUI::MSAEditorUI(MSAEditor* _editor)
-: editor(_editor), seqArea(NULL), offsetsView(NULL), statusWidget(NULL), collapsibleMode(false), multiTreeViewer(NULL), similarityStatistics(NULL) {
-    //undoFWK = new MSAEditorUndoFramework(this, editor->getMSAObject());
-    undoFWK = new MsaUndoRedoFramework(this, editor->getMSAObject());
-
-    collapseModel = new MSACollapsibleItemModel(this);
-
-    delSelectionAction = new QAction(tr("Remove selection"), this);
-    delSelectionAction->setObjectName("Remove selection");
-    delSelectionAction->setShortcut(QKeySequence::Delete);
-    delSelectionAction->setShortcutContext(Qt::WidgetShortcut);
-
-    copySelectionAction = new QAction(tr("Copy selection"), this);
-    copySelectionAction->setObjectName("copy_selection");
-    copySelectionAction->setShortcut(QKeySequence::Copy);
-    copySelectionAction->setShortcutContext(Qt::WidgetShortcut);
-    copySelectionAction->setToolTip(QString("%1 (%2)").arg(copySelectionAction->text())
-        .arg(copySelectionAction->shortcut().toString()));
-
-    addAction(copySelectionAction);
-
-    copyFormattedSelectionAction = new QAction(QIcon(":core/images/copy_sequence.png"), tr("Copy formatted"), this);
-    copyFormattedSelectionAction->setObjectName("copy_formatted");
-    copyFormattedSelectionAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C));
-    copyFormattedSelectionAction->setShortcutContext(Qt::WidgetShortcut);
-    copyFormattedSelectionAction->setToolTip(QString("%1 (%2)").arg(copyFormattedSelectionAction->text())
-        .arg(copyFormattedSelectionAction->shortcut().toString()));
-
-    addAction(copyFormattedSelectionAction);
-
-    pasteAction = new QAction(tr("Paste"), this);
-    pasteAction->setObjectName("paste");
-    pasteAction->setShortcut(QKeySequence::Paste);
-    pasteAction->setShortcutContext(Qt::WidgetShortcut);
-    pasteAction->setToolTip(QString("%1 (%2)").arg(pasteAction->text())
-        .arg(pasteAction->shortcut().toString()));
-
-    addAction(pasteAction);
-
-    setContextMenuPolicy(Qt::CustomContextMenu);
-    setMinimumSize(300, 200);
-
-    setWindowIcon(GObjectTypes::getTypeInfo(GObjectTypes::MULTIPLE_ALIGNMENT).icon);
-
-    QWidget *label;
-    GScrollBar* shBar = new GScrollBar(Qt::Horizontal);
-    shBar->setObjectName("horizontal_sequence_scroll");
-    QScrollBar* nhBar = new QScrollBar(Qt::Horizontal);
-    nhBar->setObjectName("horizontal_names_scroll");
-    GScrollBar* cvBar = new GScrollBar(Qt::Vertical);
-    cvBar->setObjectName("vertical_sequence_scroll");
-
-    seqArea = new MSAEditorSequenceArea(this, shBar, cvBar);
-    nameList = new MSAEditorNameList(this, nhBar);
-    consArea = new MSAEditorConsensusArea(this);
-    offsetsView = new MSAEditorOffsetsViewController(this, editor, seqArea);
-    statusWidget = new MSAEditorStatusWidget(editor->getMSAObject(), seqArea);
-    overviewArea = new MSAEditorOverviewArea(this);
-
-    QWidget* label1 = createLabelWidget();
-    QWidget* label2 = createLabelWidget();
-    label1->setMinimumHeight(consArea->height());
-    label2->setMinimumHeight(consArea->height());
-    offsetsView->getLeftWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-    offsetsView->getRightWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-    seqArea->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
-    shBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
-
-    QGridLayout* seqAreaLayout = new QGridLayout();
-    seqAreaLayout->setMargin(0);
-    seqAreaLayout->setSpacing(0);
-
-    seqAreaLayout->addWidget(label1, 0, 0);
-    seqAreaLayout->addWidget(consArea, 0, 1);
-    seqAreaLayout->addWidget(label2, 0, 2, 1, 2);
-
-    seqAreaLayout->addWidget(offsetsView->getLeftWidget(), 1, 0);
-    seqAreaLayout->addWidget(seqArea, 1, 1);
-    seqAreaLayout->addWidget(offsetsView->getRightWidget(), 1, 2);
-    seqAreaLayout->addWidget(cvBar, 1, 3);
-
-    seqAreaLayout->addWidget(shBar, 2, 0, 1, 3);
-
-    seqAreaLayout->setRowStretch(1, 1);
-    seqAreaLayout->setColumnStretch(1, 1);
-
-    seqAreaContainer = new QWidget();
-    seqAreaContainer->setLayout(seqAreaLayout);
-
-    label = createLabelWidget(tr("Consensus"));
-    label->setMinimumHeight(consArea->height());
-    nameList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-
-    QVBoxLayout* nameAreaLayout = new QVBoxLayout();
-    nameAreaLayout->setMargin(0);
-    nameAreaLayout->setSpacing(0);
-    nameAreaLayout->addWidget(label);
-    nameAreaLayout->addWidget(nameList);
-    nameAreaLayout->addWidget(nhBar);
-    nameAreaContainer = new QWidget();
-    nameAreaContainer->setLayout(nameAreaLayout);
-
-    view.addObject(nameAreaContainer, 0, 0.1);
-    view.addObject(seqAreaContainer, 1, 3);
-
-    QVBoxLayout *mainLayout = new QVBoxLayout();
-    mainLayout->setMargin(0);
-    mainLayout->setSpacing(0);
-
-    mainLayout->addWidget(view.getSpliter());
-    mainLayout->setStretch(0, 1);
-    mainLayout->addWidget(statusWidget);
-    mainLayout->addWidget(overviewArea);
-
-    setLayout(mainLayout);
-
-    connect(collapseModel, SIGNAL(toggled()), offsetsView, SLOT(sl_modelChanged()));
-    connect(collapseModel, SIGNAL(toggled()), seqArea,     SLOT(sl_modelChanged()));
-
-    connect(delSelectionAction, SIGNAL(triggered()), seqArea, SLOT(sl_delCurrentSelection()));
-
-    nameList->addAction(delSelectionAction);
-}
-
-QWidget* MSAEditorUI::createLabelWidget(const QString& text, Qt::Alignment ali){
-    return new MSALabelWidget(this, text, ali);
-}
-
-QAction* MSAEditorUI::getUndoAction() const {
-    QAction *a = undoFWK->getUndoAction();
-    a->setObjectName("msa_action_undo");
-    return a;
-}
-
-QAction* MSAEditorUI::getRedoAction() const {
-    QAction *a = undoFWK->getRedoAction();
-    a->setObjectName("msa_action_redo");
-    return a;
-}
-
-void MSAEditorUI::sl_saveScreenshot(){
-    MSAImageExportController controller(this);
-    QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<ExportImageDialog> dlg = new ExportImageDialog(&controller, ExportImageDialog::MSA, ExportImageDialog::NoScaling, p);
-    dlg->exec();
-}
-
-void MSAEditorUI::sl_onTabsCountChanged(int curTabsNumber) {
-    if(curTabsNumber < 1) {
-        view.removeObject(multiTreeViewer);
-        delete multiTreeViewer;
-        multiTreeViewer = NULL;
-        emit si_hideTreeOP();
-        nameList->clearGroupsSelections();
-    }
-}
-
-void MSAEditorUI::createDistanceColumn(MSADistanceMatrix* matrix)
-{
-    dataList->setMatrix(matrix);
-    dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-    MsaEditorAlignmentDependentWidget* statisticsWidget = new MsaEditorAlignmentDependentWidget(dataList);
-
-    view.addObject(nameAreaContainer, statisticsWidget, 0.04, 1);
-}
-
-void MSAEditorUI::addTreeView(GObjectViewWindow* treeView) {
-    if(NULL == multiTreeViewer) {
-        multiTreeViewer = new MSAEditorMultiTreeViewer(tr("Tree view"), editor);
-        view.addObject(nameAreaContainer, multiTreeViewer, 0.35);
-        multiTreeViewer->addTreeView(treeView);
-        emit si_showTreeOP();
-        connect(multiTreeViewer, SIGNAL(si_tabsCountChanged(int)), SLOT(sl_onTabsCountChanged(int)));
-    }
-    else {
-        multiTreeViewer->addTreeView(treeView);
-    }
-}
-
-void MSAEditorUI::setSimilaritySettings( const SimilarityStatisticsSettings* settings ) {
-    similarityStatistics->setSettings(settings);
-}
-
-void MSAEditorUI::refreshSimilarityColumn() {
-    dataList->updateWidget();
-}
-
-void MSAEditorUI::showSimilarity() {
-    if(NULL == similarityStatistics) {
-        SimilarityStatisticsSettings settings;
-        settings.ma = editor->getMSAObject();
-        settings.algoName = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmIds().at(0);
-        settings.ui = this;
-
-        dataList = new MsaEditorSimilarityColumn(this, new QScrollBar(Qt::Horizontal), &settings);
-        dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
-        similarityStatistics = new MsaEditorAlignmentDependentWidget(dataList);
-
-        view.addObject(nameAreaContainer, similarityStatistics, 0.04, 1);
-    }
-    else {
-        similarityStatistics->show();
-    }
-
-}
-
-void MSAEditorUI::hideSimilarity() {
-    if(NULL != similarityStatistics) {
-        similarityStatistics->hide();
-    }
-}
-
-MSAEditorTreeViewer* MSAEditorUI::getCurrentTree() const
-{
-    if(NULL == multiTreeViewer) {
-        return NULL;
-    }
-    GObjectViewWindow* page = qobject_cast<GObjectViewWindow*>(multiTreeViewer->getCurrentWidget());
-    if(NULL == page) {
-        return NULL;
-    }
-    return qobject_cast<MSAEditorTreeViewer*>(page->getObjectView());
-}
-
-MSAWidget::MSAWidget(MSAEditorUI* _ui)
-: ui(_ui), heightMargin(0) {
-    connect(ui->getEditor(), SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_fontChanged()));
-    setMinimumHeight(ui->consArea->height() + heightMargin);
-}
-
-void MSAWidget::sl_fontChanged() {
-    update();
-    setMinimumHeight(ui->consArea->height() + heightMargin);
-}
-void MSAWidget::setHeightMargin(int _heightMargin) {
-    heightMargin = _heightMargin;
-    setMinimumHeight(ui->consArea->height() + heightMargin);
-}
-
-void MSAWidget::mousePressEvent( QMouseEvent * )
-{
-    ui->seqArea->cancelSelection();
-}
-void MSAWidget::paintEvent(QPaintEvent *) {
-    QPainter p(this);
-    p.fillRect(rect(), Qt::white);
-}
-
-MSALabelWidget::MSALabelWidget(MSAEditorUI* _ui, const QString & _t, Qt::Alignment _a)
-: MSAWidget(_ui), text(_t), ali(_a)
-{
-}
-
-
-void MSALabelWidget::paintEvent(QPaintEvent * e) {
-    MSAWidget::paintEvent(e);
-    QPainter p(this);
-    if (!text.isEmpty()) {
-        p.setFont(getMsaEditorFont());
-        p.drawText(rect(), text, ali);
-    }
-}
-
-SinchronizedObjectView::SinchronizedObjectView()
-    : seqArea(NULL)
-{
-    spliter = new QSplitter(Qt::Horizontal);
-    spliter->setObjectName("msa_editor_horizontal_splitter");
-}
-SinchronizedObjectView::SinchronizedObjectView(QSplitter *_spliter)
-    : seqArea(NULL), spliter(_spliter)
-{
-}
-
-QSplitter* SinchronizedObjectView::getSpliter() {
-    return spliter;
-}
-
-void MSALabelWidget::mousePressEvent( QMouseEvent * e ){
-    ui->getSequenceArea()->cancelSelection();
-    QMouseEvent eventForNameListArea(e->type(), QPoint(e->x(), 0), e->globalPos(), e->button(), e->buttons(), e->modifiers());
-    QApplication::instance()->notify(ui->getEditorNameList(), &eventForNameListArea);
-}
-
-void MSALabelWidget::mouseReleaseEvent( QMouseEvent * e )
-{
-    QMouseEvent eventForNameListArea(e->type(), QPoint(e->x(), qMax(e->y() - height(), 0)), e->globalPos(), e->button(), e->buttons(), e->modifiers());
-    QApplication::instance()->notify(ui->getEditorNameList(), &eventForNameListArea);
-}
-
-void SinchronizedObjectView::addObject( QWidget *obj, int index, qreal coef)
-{
-    SAFE_POINT(coef >= 0, QString("Incorrect parameters were passed to SinchronizedObjectView::addObject: coef < 0"),);
-
-    objects.append(obj);
-    int baseSize = spliter->width();
-    widgetSizes.insert(index, qRound(coef * baseSize));
-    int widgetsWidth = 0;
-    foreach(int curSize, widgetSizes) {
-        widgetsWidth += curSize;
-    }
-    for(int i = 0; i < widgetSizes.size(); i++) {
-        widgetSizes[i] = widgetSizes[i] * baseSize / widgetsWidth;
-    }
-    spliter->insertWidget(index, obj);
-    spliter->setSizes(widgetSizes);
-}
-void SinchronizedObjectView::addObject(QWidget *neighboringWidget, QWidget *obj, qreal coef, int neighboringShift) {
-    int index = spliter->indexOf(neighboringWidget) + neighboringShift;
-    addObject(obj, index, coef);
+QString MSAEditor::getReferenceRowName() const {
+    const MultipleAlignment alignment = getMaObject()->getMultipleAlignment();
+    U2OpStatusImpl os;
+    const int refSeq = alignment->getRowIndexByRowId(getReferenceRowId(), os);
+    return (U2MsaRow::INVALID_ROW_ID != refSeq) ? alignment->getRowNames().at(refSeq)
+                                                : QString();
 }
 
-void MSALabelWidget::mouseMoveEvent( QMouseEvent * e )
-{
-    QMouseEvent eventForSequenceArea(e->type(), QPoint(e->x(), e->y() - height()), e->globalPos(), e->button(), e->buttons(), e->modifiers());
-    QApplication::instance()->notify(ui->getEditorNameList(), &eventForSequenceArea);
-}
+char MSAEditor::getReferenceCharAt(int pos) const {
+    CHECK(getReferenceRowId() != U2MsaRow::INVALID_ROW_ID, '\n');
 
-void SinchronizedObjectView::removeObject( QWidget *obj )
-{
-    int widgetsWidth = 0;
-    int baseSize = spliter->width();
-    int index = spliter->indexOf(obj);
-    if(index < 0) {
-        return;
-    }
-    widgetSizes.removeAt(index);
+    U2OpStatusImpl os;
+    const int refSeq = maObject->getMultipleAlignment()->getRowIndexByRowId(getReferenceRowId(), os);
+    SAFE_POINT_OP(os, '\n');
 
-    foreach(int curSize, widgetSizes) {
-        widgetsWidth += curSize;
-    }
-    for(int i = 0; i < widgetSizes.size(); i++) {
-        widgetSizes[i] = widgetSizes[i] * baseSize / widgetsWidth;
-    }
-    foreach(QWidget *curObj, objects) {
-        curObj->disconnect(obj);
-        obj->disconnect(curObj);
-    }
-    objects.removeAll(obj);
-    obj->setParent(NULL);
-    spliter->setSizes(widgetSizes);
+    return maObject->getMultipleAlignment()->charAt(refSeq, pos);
 }
 
-}//namespace
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditor.h b/src/corelibs/U2View/src/ov_msa/MSAEditor.h
index ddd7865..bf1b8b3 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditor.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,79 +22,23 @@
 #ifndef _U2_MSA_EDITOR_H_
 #define _U2_MSA_EDITOR_H_
 
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2Msa.h>
 
-#include <U2Core/U2Region.h>
-#include <U2Core/PhyTree.h>
-#include <U2Core/U2OpStatus.h>
-
-#include <U2Algorithm/CreatePhyTreeSettings.h>
-#include <U2Gui/ObjectViewModel.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentObject.h>
-
-#include <U2View/UndoRedoFramework.h>
-
-#include <QtCore/QVariantMap>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QSplitter>
-#include <QtGui/QTabWidget>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QSplitter>
-#include <QtWidgets/QTabWidget>
-#endif
 #include "PhyTrees/MSAEditorTreeManager.h"
+#include "MaEditor.h"
+#include "MsaEditorWgt.h"
 
 namespace U2 {
 
-class MAlignmentObject;
-class PhyTreeObject;
-class MSAEditorUI;
-class MSAEditorSequenceArea;
-class MSAEditorConsensusArea;
-class MSAEditorNameList;
-class MSAEditorOffsetsViewController;
-class MSAEditorOverviewArea;
-class MSAEditorStatusWidget;
-class MSAEditorUndoFramework;
-class PhyTreeGeneratorLauncherTask;
-class MSAEditorTreeViewer;
-class MSACollapsibleItemModel;
-class MsaEditorSimilarityColumn;
-class MSADistanceMatrix;
-class MSASNPHighligtingScheme;
-class SimilarityStatisticsSettings;
-class MsaEditorAlignmentDependentWidget;
-class TreeViewer;
-class MSAEditorMultiTreeViewer;
 class PairwiseAlignmentTask;
-
-
-#define MSAE_MENU_COPY          "MSAE_MENU_COPY"
-#define MSAE_MENU_EDIT          "MSAE_MENU_EDIT"
-#define MSAE_MENU_EXPORT        "MSAE_MENU_EXPORT"
-#define MSAE_MENU_VIEW          "MSAE_MENU_VIEW"
-#define MSAE_MENU_ALIGN         "MSAE_MENU_ALIGN"
-#define MSAE_MENU_TREES         "MSAE_MENU_TREES"
-#define MSAE_MENU_STATISTICS    "MSAE_MENU_STATISTICS"
-#define MSAE_MENU_ADVANCED      "MSAE_MENU_ADVANCED"
-#define MSAE_MENU_LOAD          "MSAE_MENU_LOAD_SEQ"
-
-class SNPSettings {
-public:
-    SNPSettings() : seqId(MAlignmentRow::invalidRowId()) { }
-    QPoint clickPoint;
-    qint64 seqId;
-    QVariantMap highlightSchemeSettings;
-};
+class U2SequenceObject;
 
 class PairwiseAlignmentWidgetsSettings {
 public:
     PairwiseAlignmentWidgetsSettings()
-        : firstSequenceId(MAlignmentRow::invalidRowId()),
-        secondSequenceId(MAlignmentRow::invalidRowId()), inNewWindow(true),
+        : firstSequenceId(U2MsaRow::INVALID_ROW_ID),
+        secondSequenceId(U2MsaRow::INVALID_ROW_ID), inNewWindow(true),
         pairwiseAlignmentTask(NULL), showSequenceWidget(true), showAlgorithmWidget(false),
         showOutputWidget(false), sequenceSelectionModeOn(false)
     {
@@ -115,68 +59,32 @@ public:
     QVariantMap customSettings;
 };
 
-class U2VIEW_EXPORT MSAEditor : public GObjectView {
+class U2VIEW_EXPORT MSAEditor : public MaEditor {
     Q_OBJECT
     Q_DISABLE_COPY(MSAEditor)
 
-    friend class OpenSavedMSAEditorTask;
     friend class MSAEditorTreeViewerUI;
+    friend class SequenceAreaRenderer;
+    friend class SequenceWithChromatogramAreaRenderer;
 
 public:
-    MSAEditor(const QString& viewName, GObject* obj);
+    MSAEditor(const QString& viewName, MultipleSequenceAlignmentObject* obj);
     ~MSAEditor();
 
-    virtual void buildStaticToolbar(QToolBar* tb);
-
-    virtual void buildStaticMenu(QMenu* m);
-
-    virtual Task* updateViewTask(const QString& stateName, const QVariantMap& stateData);
-
-    virtual QVariantMap saveState();
-
-    virtual OptionsPanel* getOptionsPanel(){return optionsPanel;}
+    QString getSettingsRoot() const { return MSAE_SETTINGS_ROOT; }
 
-    MAlignmentObject* getMSAObject() const {return msaObject;}
+    MultipleSequenceAlignmentObject* getMaObject() const { return qobject_cast<MultipleSequenceAlignmentObject*>(maObject); }
 
-    MSAEditorUI* getUI() const {return ui;}
-
-    int getAlignmentLen() const;
-
-    int getNumSequences() const;
-
-    bool isAlignmentEmpty() const;
+    virtual void buildStaticToolbar(QToolBar* tb);
 
-    const QRect& getCurrentSelection() const;
+    virtual void buildStaticMenu(QMenu* m);
 
-    const QFont& getFont() const {return font;}
-    int getFirstVisibleBase() const;
+    MsaEditorWgt* getUI() const;
 
     //Return alignment row that is displayed on target line in MSAEditor
-    const MAlignmentRow& getRowByLineNumber(int lineNumber) const;
-
-    float getZoomFactor() const {return zoomFactor;}
-
-    enum ResizeMode {
-        ResizeMode_FontAndContent, ResizeMode_OnlyContent
-    };
-
-    ResizeMode getResizeMode() const { return resizeMode; }
-
-    int getRowHeight() const;
-
-    int getColumnWidth() const;
+    const MultipleSequenceAlignmentRow getRowByLineNumber(int lineNumber) const;
 
     void copyRowFromSequence(U2SequenceObject *seqObj, U2OpStatus &os);
-    void createDistanceColumn(MSADistanceMatrix* algo);
-
-    static const float zoomMult;
-
-    void setReference(qint64 sequenceId);
-    qint64 getReferenceRowId() const { return snp.seqId; }
-    QVariantMap getHighlightingSettings(const QString &highlightingFactoryId) const;
-    void saveHighlightingSettings(const QString &highlightingFactoryId, const QVariantMap &settingsMap = QVariantMap());
-    QString getReferenceRowName() const;
-    void updateReference();
 
     PairwiseAlignmentWidgetsSettings* getPairwiseAlignmentWidgetsSettings() const { return pairwiseAlignmentWidgetsSettings; }
 
@@ -184,34 +92,18 @@ public:
 
     void buildTree();
 
-    void resetCollapsibleModel();
-
-    void exportHighlighted(){sl_exportHighlighted();}
-
-public slots:
-    void sl_zoomIn();
-    void sl_zoomOut();
-    void sl_resetZoom();
+    QString getReferenceRowName() const;
 
-signals:
-    void si_fontChanged(const QFont& f);
-    void si_zoomOperationPerformed(bool resizeModeChanged);
-    void si_referenceSeqChanged(qint64 referenceId);
-    void si_sizeChanged(int newHeight, bool isMinimumSize, bool isMaximumSize);
+    char getReferenceCharAt(int pos) const;
 
 protected slots:
-    void sl_saveAlignment();
-    void sl_saveAlignmentAs();
     void sl_onContextMenuRequested(const QPoint & pos);
-    void sl_zoomToSelection();
-    void sl_changeFont();
+
     void sl_buildTree();
     void sl_align();
     void sl_addToAlignment();
     void sl_setSeqAsReference();
     void sl_unsetReferenceSeq();
-    void sl_exportHighlighted();
-    void sl_lockedStateChanged();
 
     void sl_onSeqOrderChanged(const QStringList& order);
     void sl_showTreeOP();
@@ -219,211 +111,34 @@ protected slots:
     void sl_rowsRemoved(const QList<qint64> &rowIds);
 
 protected:
-    virtual QWidget* createWidget();
+    QWidget* createWidget();
     bool eventFilter(QObject* o, QEvent* e);
     virtual bool onObjectRemoved(GObject* obj);
     virtual void onObjectRenamed(GObject* obj, const QString& oldName);
     virtual bool onCloseEvent();
 
 private:
-    void addCopyMenu(QMenu* m);
-    void addEditMenu(QMenu* m);
     void addExportMenu(QMenu* m);
-    void addViewMenu(QMenu* m);
-    void addAlignMenu(QMenu* m);
     void addTreeMenu(QMenu* m);
     void addAdvancedMenu(QMenu* m);
     void addStatisticsMenu(QMenu* m);
-    void addLoadMenu(QMenu* m);
-    void setFont(const QFont& f);
-    void calcFontPixelToPointSizeCoef();
-    void updateActions();
-    void setFirstVisibleBase(int firstPos);
-    void setZoomFactor(float newZoomFactor) {zoomFactor = newZoomFactor;}
+
+    virtual void updateActions();
+
     void initDragAndDropSupport();
     void alignSequencesFromObjectsToAlignment(const QList<GObject*>& objects);
     void alignSequencesFromFilesToAlignment();
 
-    MAlignmentObject* msaObject;
-    MSAEditorUI*      ui;
-    QFont             font;
-    ResizeMode        resizeMode;
-    float             zoomFactor;
-    float             fontPixelToPointSize;
-
-    QAction*          saveAlignmentAction;
-    QAction*          saveAlignmentAsAction;
-    QAction*          zoomInAction;
-    QAction*          zoomOutAction;
-    QAction*          zoomToSelectionAction;
-    QAction*          showOverviewAction;
-    QAction*          changeFontAction;
-    QAction*          resetFontAction;
     QAction*          buildTreeAction;
-    QAction*          saveScreenshotAction;
     QAction*          alignAction;
     QAction*          alignSequencesToAlignmentAction;
     QAction*          setAsReferenceSequenceAction;
-    QAction *         unsetReferenceSequenceAction;
-    QAction*          exportHighlightedAction;
-
-    QToolBar*         toolbar;
+    QAction*          unsetReferenceSequenceAction;
 
-    SNPSettings snp;
     PairwiseAlignmentWidgetsSettings* pairwiseAlignmentWidgetsSettings;
     MSAEditorTreeManager           treeManager;
 };
 
-class SinchronizedObjectView : public QObject{
-// U2VIEW_EXPORT: GUITesting uses MSAEditorUI
-    Q_OBJECT
-public:
-    SinchronizedObjectView();
-    SinchronizedObjectView(QSplitter *_spliter);
-    void addSeqArea(MSAEditorSequenceArea* _seqArea) {seqArea = _seqArea;}
-    void addObject(QWidget *obj, int index, qreal coef);
-    void addObject(QWidget *neighboringWidget, QWidget *obj, qreal coef, int neighboringShift = 0);
-    void removeObject(QWidget *obj);
-    QSplitter* getSpliter();
-private:
-    QList<QWidget *>       objects;
-    QList<int>             widgetSizes;
-    MSAEditorSequenceArea* seqArea;
-    QSplitter*             spliter;
-};
-
-// U2VIEW_EXPORT: GUITesting uses MSAEditorUI
-class U2VIEW_EXPORT MSAEditorUI : public QWidget {
-
-    Q_OBJECT
-    //todo: make public accessors:
-    friend class MSAWidget;
-    friend class MSAEditorSequenceArea;
-    friend class MSAEditorConsensusArea;
-    friend class MSAEditorNameList;
-    friend class MSAEditorTreeViewer;
-    friend class MSAEditor;
-    friend class MsaEditorSimilarityColumn;
-
-public:
-    MSAEditorUI(MSAEditor* editor);
-
-    QWidget* createLabelWidget(const QString& text = QString(), Qt::Alignment ali = Qt::AlignCenter);
-
-    MSAEditor* getEditor() const {return editor;}
-    QAction* getUndoAction() const;
-    QAction* getRedoAction() const;
-    QAction* getCopySelectionAction() const {return copySelectionAction;}
-    QAction* getCopyFormattedSelectionAction() const {return copyFormattedSelectionAction;}
-    QAction* getPasteAction() const {return pasteAction;}
-
-    bool isCollapsibleMode() const { return collapsibleMode; }
-    void setCollapsibleMode(bool collapse) { collapsibleMode = collapse; }
-    MSACollapsibleItemModel* getCollapseModel() const { return collapseModel; }
-
-    MSAEditorSequenceArea*  getSequenceArea() {return seqArea;}
-    MSAEditorNameList*      getEditorNameList() {return nameList;}
-    MSAEditorConsensusArea* getConsensusArea() {return consArea;}
-    MSAEditorOverviewArea*  getOverviewArea() {return overviewArea;}
-
-    void createDistanceColumn(MSADistanceMatrix* matrix);
-
-    void addTreeView(GObjectViewWindow* treeView);
-
-    void setSimilaritySettings(const SimilarityStatisticsSettings* settings);
-
-    void refreshSimilarityColumn();
-
-    void showSimilarity();
-    void hideSimilarity();
-
-    const MsaEditorAlignmentDependentWidget* getSimilarityWidget(){return similarityStatistics;}
-
-    MSAEditorTreeViewer* getCurrentTree() const;
-
-    MSAEditorMultiTreeViewer* getMultiTreeViewer(){return multiTreeViewer;}
-
-    SinchronizedObjectView                      view;
-
-public slots:
-    void sl_saveScreenshot();
-private slots:
-    void sl_onTabsCountChanged(int tabsCount);
-signals:
-    void si_showTreeOP();
-    void si_hideTreeOP();
-
-    void si_startMsaChanging();
-    void si_stopMsaChanging(bool modifyed = false);
-
-private:
-    MSAEditor*                         editor;
-    MSAEditorNameList*                 nameList;
-    MSAEditorSequenceArea*             seqArea;
-    MSAEditorConsensusArea*            consArea;
-    MSAEditorOverviewArea*             overviewArea;
-    MSAEditorOffsetsViewController*    offsetsView;
-    MSAEditorStatusWidget*             statusWidget;
-    QWidget*                           seqAreaContainer;
-    QWidget*                           nameAreaContainer;
-
-    QList<QWidget*>                 nameAreaWidgets;
-    QList<QWidget*>                 lw1Widgets;
-    QList<QWidget*>                 seqAreaWidgets;
-    QList<QWidget*>                 lw2Widgets;
-    QList<QWidget*>                 treeAreaWidgets;
-    //MSAEditorUndoFramework*         undoFWK;
-    MsaUndoRedoFramework*           undoFWK;
-
-    MSACollapsibleItemModel*        collapseModel;
-    bool                            collapsibleMode;
-
-    MsaEditorSimilarityColumn*         dataList;
-    MSAEditorMultiTreeViewer*          multiTreeViewer;
-    MsaEditorAlignmentDependentWidget* similarityStatistics;
-    MSAEditorTreeViewer*               treeViewer;
-
-    QAction                         *delSelectionAction;
-    QAction                         *copySelectionAction;
-    QAction                         *copyFormattedSelectionAction;
-    QAction                         *pasteAction;
-};
-
-class MSAWidget : public QWidget {
-    Q_OBJECT
-public:
-    MSAWidget(MSAEditorUI* _ui);
-    virtual ~MSAWidget() {}
-    const QFont& getMsaEditorFont(){return ui->getEditor()->getFont();}
-    void setHeightMargin(int _heightMargin);
-protected slots:
-    void sl_fontChanged();
-protected:
-    virtual void mousePressEvent(QMouseEvent *e);
-    virtual void paintEvent(QPaintEvent *e);
-
-    MSAEditorUI*  ui;
-    int heightMargin;
-};
-
-class MSALabelWidget : public MSAWidget {
-    Q_OBJECT
-public:
-    MSALabelWidget(MSAEditorUI* _ui, const QString & _t, Qt::Alignment _a);
-
-    QString             text;
-    Qt::Alignment       ali;
-
-protected:
-    void paintEvent(QPaintEvent *e);
-    void mousePressEvent(QMouseEvent *e);
-    void mouseReleaseEvent(QMouseEvent *e);
-    void mouseMoveEvent(QMouseEvent *e);
-};
-
-
-
-
-}//namespace;
+}   // namespace U2
 
-#endif
+#endif // _U2_MSA_EDITOR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.cpp
index 1266060..fb1cb84 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,692 +19,56 @@
  * MA 02110-1301, USA.
  */
 
-#include <QApplication>
-#include <QClipboard>
-#include <QHelpEvent>
-#include <QMenu>
-#include <QPainter>
-#include <QToolTip>
-
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Gui/GraphUtils.h>
+
 #include <U2Gui/GUIUtils.h>
-#include <U2Gui/OPWidgetFactory.h>
-#include <U2Gui/OPWidgetFactoryRegistry.h>
-#include <U2Gui/OptionsPanel.h>
-#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
-#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
-#include <U2Algorithm/MSAConsensusUtils.h>
 
 #include "MSAEditor.h"
-#include "MSAEditorSequenceArea.h"
-#include "General/MSAGeneralTabFactory.h"
-
 #include "MSAEditorConsensusArea.h"
+#include "view_rendering/MaConsensusAreaRenderer.h"
 
-namespace U2 {
-
-#define SETTINGS_ROOT QString("msaeditor/")
 
-MSAEditorConsensusArea::MSAEditorConsensusArea(MSAEditorUI *_ui)
-    : editor(_ui->editor), ui(_ui)
-{
-    assert(editor->getMSAObject());
-    completeRedraw = true;
-    curPos = -1;
-    scribbling = false;
-    selecting = false;
-    cachedView = new QPixmap();
-
-    QObject *parent=new QObject(this);
-    parent->setObjectName("parent");
-    childObject = new QObject(parent);
-
-    connect(ui->seqArea, SIGNAL(si_startChanged(const QPoint &, const QPoint &)), SLOT(sl_startChanged(const QPoint &, const QPoint &)));
-    connect(ui->seqArea, SIGNAL(si_selectionChanged(const MSAEditorSelection &, const MSAEditorSelection &)),
-        SLOT(sl_selectionChanged(const MSAEditorSelection &, const MSAEditorSelection &)));
-    connect(ui->editor, SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_zoomOperationPerformed(bool)));
-    connect(ui->seqArea->getHBar(), SIGNAL(actionTriggered(int)), SLOT(sl_onScrollBarActionTriggered(int)));
+namespace U2 {
 
-    connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)),
-                                    SLOT(sl_alignmentChanged(const MAlignment &, const MAlignmentModInfo &)));
+/************************************************************************/
+/* MSAEditorConsensusArea */
+/************************************************************************/
+MSAEditorConsensusArea::MSAEditorConsensusArea(MsaEditorWgt *ui)
+    : MaEditorConsensusArea(ui) {
+    initCache();
+    initRenderer();
+    setupFontAndHeight();
 
     connect(editor, SIGNAL(si_buildStaticMenu(GObjectView *, QMenu *)), SLOT(sl_buildStaticMenu(GObjectView *, QMenu *)));
     connect(editor, SIGNAL(si_buildPopupMenu(GObjectView * , QMenu *)), SLOT(sl_buildContextMenu(GObjectView *, QMenu *)));
-
-    copyConsensusAction = new QAction(tr("Copy consensus"), this);
-    copyConsensusAction->setObjectName("Copy consensus");
-    connect(copyConsensusAction, SIGNAL(triggered()), SLOT(sl_copyConsensusSequence()));
-
-    copyConsensusWithGapsAction = new QAction(tr("Copy consensus with gaps"), this);
-    copyConsensusWithGapsAction->setObjectName("Copy consensus with gaps");
-    connect(copyConsensusWithGapsAction, SIGNAL(triggered()), SLOT(sl_copyConsensusSequenceWithGaps()));
-
-    configureConsensusAction = new QAction(tr("Consensus mode..."), this);
-    configureConsensusAction->setObjectName("Consensus mode");
-    connect(configureConsensusAction, SIGNAL(triggered()), SLOT(sl_configureConsensusAction()));
-
-    setupFontAndHeight();
-
-    setMouseTracking(true);
-    setFocusPolicy(Qt::StrongFocus);
-
-    MSAConsensusAlgorithmFactory* algo = getConsensusAlgorithmFactory();
-    consensusCache = QSharedPointer<MSAEditorConsensusCache>(new MSAEditorConsensusCache(NULL, editor->getMSAObject(), algo));
-    connect(consensusCache->getConsensusAlgorithm(), SIGNAL(si_thresholdChanged(int)), SLOT(sl_onConsensusThresholdChanged(int)));
-    addAction(ui->getCopySelectionAction());
-    addAction(ui->getPasteAction());
-    restoreLastUsedConsensusThreshold();
-
-    setObjectName("consArea");
-}
-
-MSAEditorConsensusArea::~MSAEditorConsensusArea() {
-    delete cachedView;
-    delete childObject;
-}
-
-QSharedPointer<MSAEditorConsensusCache> MSAEditorConsensusArea::getConsensusCache() {
-    return consensusCache;
-}
-
-void MSAEditorConsensusArea::paintFullConsensus(QPixmap &pixmap) {
-    pixmap = QPixmap(ui->seqArea->getXByColumnNum(ui->editor->getAlignmentLen()), getYRange(MSAEditorConsElement_RULER).startPos);
-    QPainter p(&pixmap);
-    paintFullConsensus(p);
-}
-
-void MSAEditorConsensusArea::paintFullConsensus(QPainter &p) {
-    p.fillRect(QRect(0, 0, ui->seqArea->getXByColumnNum(ui->editor->getAlignmentLen()), getYRange(MSAEditorConsElement_RULER).startPos), Qt::white);
-    drawConsensus(p, 0, ui->editor->getAlignmentLen() - 1, true);
-    drawHistogram(p, 0, ui->editor->getAlignmentLen() - 1);
-}
-
-void MSAEditorConsensusArea::paintConsenusPart(QPixmap &pixmap, const U2Region &region, const QList<qint64> &seqIdx) {
-    CHECK(!region.isEmpty(), );
-    CHECK(!seqIdx.isEmpty(), );
-    CHECK(!ui->seqArea->isAlignmentEmpty(), );
-
-    CHECK(editor->getColumnWidth() * region.length < 32768, );
-    pixmap = QPixmap(editor->getColumnWidth() * region.length, getYRange(MSAEditorConsElement_RULER).startPos);
-
-    QPainter p(&pixmap);
-    paintConsenusPart(p, region, seqIdx);
-}
-
-void MSAEditorConsensusArea::paintConsenusPart(QPainter &p, const U2Region &region, const QList<qint64> &seqIdx) {
-    CHECK(!region.isEmpty(), );
-    CHECK(!seqIdx.isEmpty(), );
-    CHECK(!ui->seqArea->isAlignmentEmpty(), );
-
-    p.fillRect(QRect(0, 0, editor->getColumnWidth() * region.length, getYRange(MSAEditorConsElement_RULER).startPos), Qt::white);
-
-    //draw consensus
-    p.setPen(Qt::black);
-    QFont f = ui->editor->getFont();
-    f.setWeight(QFont::DemiBold);
-    p.setFont(f);
-
-    MSAConsensusAlgorithm *alg = getConsensusAlgorithm();
-    SAFE_POINT(alg != NULL, tr("MSA consensus algorothm is NULL"), );
-    SAFE_POINT(editor->getMSAObject() != NULL, tr("MSA object is NULL"), );
-    const MAlignment &msa = editor->getMSAObject()->getMAlignment();
-    for (int pos = 0; pos < region.length; pos++) {
-        char c = alg->getConsensusChar(msa, pos + region.startPos, seqIdx.toVector());
-        drawConsensusChar(p, pos, 0, c, false, true);
-    }
-
-    QColor c("#255060");
-    p.setPen(c);
-
-    U2Region yr = getYRange(MSAEditorConsElement_HISTOGRAM);
-    yr.startPos++;
-    yr.length -= 2; //keep borders
-
-    QBrush brush(c, Qt::Dense4Pattern);
-    for (int pos = region.startPos, lastPos = region.endPos() - 1; pos <= lastPos; pos++) {
-        U2Region xr = ui->seqArea->getBaseXRange(pos, region.startPos, true);
-        int percent = 0;
-        alg->getConsensusCharAndScore(msa, pos, percent, seqIdx.toVector());
-        percent = qRound(percent * 100. / seqIdx.size() );
-        SAFE_POINT(percent >= 0 && percent <= 100, tr("Percent value is out of [0..100] interval"), );
-        int h = qRound(percent * yr.length / 100.0);
-        QRect hr(xr.startPos + 1, yr.endPos() - h, xr.length - 2, h);
-        p.drawRect(hr);
-        p.fillRect(hr, brush);
-    }
-}
-
-void MSAEditorConsensusArea::paintRulerPart(QPixmap &pixmap, const U2Region &region) {
-    CHECK( editor->getColumnWidth() * region.length < 32768, );
-    CHECK( getYRange(MSAEditorConsElement_RULER).length < 32768, );
-    pixmap = QPixmap(editor->getColumnWidth() * region.length, getYRange(MSAEditorConsElement_RULER).length);
-    pixmap.fill(Qt::white);
-    QPainter p(&pixmap);
-    paintRulerPart(p, region);
 }
 
-void MSAEditorConsensusArea::paintRulerPart(QPainter &p, const U2Region &region) {
-    p.fillRect(QRect(0, 0, editor->getColumnWidth() * region.length, getYRange(MSAEditorConsElement_RULER).length), Qt::white);
-    p.translate(-ui->seqArea->getBaseXRange(region.startPos, region.startPos, true).startPos, -getYRange(MSAEditorConsElement_RULER).startPos);
-    drawRuler(p, region.startPos, region.endPos(), true);
-    // return back to (0, 0)
-    p.translate(ui->seqArea->getBaseXRange(region.startPos, region.startPos, true).startPos, getYRange(MSAEditorConsElement_RULER).startPos);
+void MSAEditorConsensusArea::sl_buildStaticMenu(GObjectView * /*view*/, QMenu *menu) {
+    buildMenu(menu);
 }
 
-bool MSAEditorConsensusArea::event(QEvent* e) {
-    switch (e->type()) {
-        case QEvent::ToolTip : {
-            QHelpEvent* he = static_cast<QHelpEvent *>(e);
-            QString tip = createToolTip(he);
-            if (!tip.isEmpty()) {
-                QToolTip::showText(he->globalPos(), tip);
-            }
-            return true;
-        }
-        case QEvent::FocusIn :
-            ui->seqArea->setFocus(static_cast<QFocusEvent *>(e)->reason());
-            break;
-        case QEvent::Wheel :
-            ui->seqArea->setFocus(Qt::MouseFocusReason);
-            break;
-        default:
-            ; // skip other events
-    }
-
-    return QWidget::event(e);
-}
-
-QString MSAEditorConsensusArea::createToolTip(QHelpEvent* he) const {
-    int  x = he->pos().x();
-    int pos = ui->seqArea->coordToPos(x);
-    QString result;
-    if (pos >= 0) {
-        assert(editor->getMSAObject());
-        const MAlignment& ma = editor->getMSAObject()->getMAlignment();
-        result = MSAConsensusUtils::getConsensusPercentTip(ma, pos, 0, 4);
-    }
-    return result;
-}
-
-void MSAEditorConsensusArea::resizeEvent(QResizeEvent *e) {
-    completeRedraw = true;
-    QWidget::resizeEvent(e);
-}
-
-void MSAEditorConsensusArea::paintEvent(QPaintEvent *e) {
-    QSize s = size();
-    QSize sas = ui->seqArea->size();
-
-    if (sas.width() != s.width()) { //this can happen due to the manual layouting performed by MSAEditor -> just wait for the next resize+paint
-        return;
-    }
-
-    assert(s.width() == sas.width());
-
-    if (cachedView->size() != s) {
-        assert(completeRedraw);
-        delete cachedView;
-        cachedView = new QPixmap(s);
-    }
-
-    if (completeRedraw) {
-        QPainter pCached(cachedView);
-        pCached.fillRect(cachedView->rect(), Qt::white);
-        drawContent( pCached );
-        completeRedraw = false;
-    }
-
-    QPainter p(this);
-    p.drawPixmap(0, 0, *cachedView);
-    drawSelection(p);
-
-    QWidget::paintEvent(e);
-}
-
-void MSAEditorConsensusArea::drawContent(QPainter& p ) {
-    drawConsensus(p);
-    drawRuler(p);
-    drawHistogram(p);
+void MSAEditorConsensusArea::sl_buildContextMenu(GObjectView * /*view*/, QMenu *menu) {
+    buildMenu(menu);
 }
 
-void MSAEditorConsensusArea::drawSelection(QPainter& p) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    QFont f = ui->editor->getFont();
-    f.setWeight(QFont::DemiBold);
-    p.setFont(f);
-
-    MSAEditorSelection selection = ui->seqArea->getSelection();
-    int startPos = qMax(selection.x(), ui->seqArea->getFirstVisibleBase());
-    int endPos = qMin(selection.x() + selection.width() - 1,
-        ui->seqArea->getLastVisibleBase(true));
-    SAFE_POINT(endPos < ui->editor->getAlignmentLen(), "Incorrect selection width!", );
-    for (int pos = startPos; pos <= endPos; ++pos) {
-        drawConsensusChar(p, pos, ui->seqArea->getFirstVisibleBase(), true);
-    }
-}
-
-void MSAEditorConsensusArea::drawConsensus(QPainter& p) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-    int startPos = ui->seqArea->getFirstVisibleBase();
-    int lastPos = ui->seqArea->getLastVisibleBase(true);
-    drawConsensus(p, startPos, lastPos);
-}
-
-void MSAEditorConsensusArea::drawConsensus(QPainter &p, int startPos, int lastPos, bool useVirtualCoords) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    //draw consensus
-    p.setPen(Qt::black);
-
-    QFont f = ui->editor->getFont();
-    f.setWeight(QFont::DemiBold);
-    p.setFont(f);
-
-    childObject->setObjectName("");
-    for (int pos = startPos; pos <= lastPos; pos++) {
-        drawConsensusChar(p, pos, startPos, false, useVirtualCoords);
-    }
-}
-
-void MSAEditorConsensusArea::drawConsensusChar(QPainter& p, int pos, int firstVisiblePos, bool selected, bool useVirtualCoords) {
-    U2Region yRange = getYRange(MSAEditorConsElement_CONSENSUS_TEXT);
-    U2Region xRange = ui->seqArea->getBaseXRange(pos, firstVisiblePos, useVirtualCoords);
-    QRect cr(xRange.startPos, yRange.startPos, xRange.length + 1, yRange.length);
-
-    if (selected) {
-        QColor color(Qt::lightGray);
-        color = color.lighter(115);
-        p.fillRect(cr, color);
-    }
-    if (editor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent) {
-        char c = consensusCache->getConsensusChar(pos);
-        p.drawText(cr, Qt::AlignVCenter | Qt::AlignHCenter, QString(c));
-        childObject->setObjectName(childObject->objectName()+c);
-    }
-}
-
-void MSAEditorConsensusArea::drawConsensusChar(QPainter &p, int pos, int firstVisiblePos, char consChar, bool selected, bool useVirtualCoords) {
-    U2Region yRange = getYRange(MSAEditorConsElement_CONSENSUS_TEXT);
-    U2Region xRange = ui->seqArea->getBaseXRange(pos, firstVisiblePos, useVirtualCoords);
-    QRect cr(xRange.startPos, yRange.startPos, xRange.length + 1, yRange.length);
-
-    if (selected) {
-        QColor color(Qt::lightGray);
-        color = color.lighter(115);
-        p.fillRect(cr, color);
-    }
-    if (editor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent) {
-        p.drawText(cr, Qt::AlignVCenter | Qt::AlignHCenter, QString(consChar));
-    }
-}
-
-#define RULER_NOTCH_SIZE 3
-
-void MSAEditorConsensusArea::drawRuler(QPainter& p, int start, int end, bool drawFull) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    //draw ruler
-    p.setPen(Qt::darkGray);
-
-    int w = (start == -1 && end == -1) ? width() : (end - start)*ui->getEditor()->getColumnWidth();
-    int startPos = (start != -1) ? start
-                                 : ui->seqArea->getFirstVisibleBase();
-    int lastPos = (end != - 1) ? end - 1
-                               : ui->seqArea->getLastVisibleBase(true);
-
-    QFontMetrics rfm(rulerFont,this);
-    U2Region rr = getYRange(MSAEditorConsElement_RULER);
-    U2Region rrP = getYRange(MSAEditorConsElement_CONSENSUS_TEXT);
-    int dy = rr.startPos - rrP.endPos();
-    rr.length += dy;
-    rr.startPos -= dy;
-    U2Region firstBaseXReg = ui->seqArea->getBaseXRange(startPos, startPos, drawFull);
-    U2Region lastBaseXReg = ui->seqArea->getBaseXRange(lastPos, startPos, drawFull);
-    int firstLastLen = lastBaseXReg.startPos - firstBaseXReg.startPos;
-    int firstXCenter = firstBaseXReg.startPos + firstBaseXReg.length / 2;
-    QPoint startPoint(firstXCenter, rr.startPos);
-
-    GraphUtils::RulerConfig c;
-    c.singleSideNotches = true;
-    c.notchSize = RULER_NOTCH_SIZE;
-    c.textOffset = (rr.length - rfm.ascent()) /2;
-    c.extraAxisLenBefore = startPoint.x();
-    c.extraAxisLenAfter = w - (startPoint.x() + firstLastLen);
-    c.textBorderStart = -firstBaseXReg.length / 2;
-    c.textBorderEnd = -firstBaseXReg.length / 2;
-
-    GraphUtils::drawRuler(p, startPoint, firstLastLen, startPos + 1, lastPos + 1, rulerFont, c);
-
-    startPoint.setY(rr.endPos());
-    c.drawNumbers = false;
-    c.textPosition = GraphUtils::LEFT;
-    GraphUtils::drawRuler(p, startPoint, firstLastLen, startPos + 1, lastPos + 1, rulerFont, c);
+void MSAEditorConsensusArea::initRenderer() {
+    renderer = new MaConsensusAreaRenderer(this);
 }
 
-void MSAEditorConsensusArea::drawHistogram(QPainter& p) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    int firstBase = ui->seqArea->getFirstVisibleBase();
-    int lastBase = ui->seqArea->getLastVisibleBase(true);
-    drawHistogram(p, firstBase, lastBase);
-}
-
-void MSAEditorConsensusArea::drawHistogram(QPainter &p, int firstBase, int lastBase) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    QColor c("#255060");
-    p.setPen(c);
-    U2Region yr = getYRange(MSAEditorConsElement_HISTOGRAM);
-    yr.startPos++;
-    yr.length -= 2; //keep borders
-
-    QBrush brush(c, Qt::Dense4Pattern);
-    p.setBrush(brush);
-    QVector<QRect> rects;
-
-    for (int pos = firstBase, lastPos = lastBase; pos <= lastPos; pos++) {
-        U2Region xr = ui->seqArea->getBaseXRange(pos, firstBase, true);
-        int percent = consensusCache->getConsensusCharPercent(pos);
-        assert(percent >= 0 && percent <= 100);
-        int h = qRound(percent * yr.length / 100.0);
-        QRect hr(xr.startPos + 1, yr.endPos() - h, xr.length - 2, h);
-        rects << hr;
-    }
-
-#if (QT_VERSION < 0x050000)
-    // A workaround for https://local.ugene.net/tracker/browse/UGENE-4484 (see comments)
-    // drawRects() incorrectly processes rects with coordinates greater than 16384 on Qt4
-    // drawRects() should be used for perfomance reasons
-    // this branch should be removed after migrating to Qt5
-    foreach (const QRect &rect, rects) {
-        p.drawRect(rect);
-    }
-#else
-    p.drawRects(rects);
-#endif
-}
-
-U2Region MSAEditorConsensusArea::getYRange(MSAEditorConsElement e) const {
-    U2Region res;
-    switch(e) {
-        case MSAEditorConsElement_HISTOGRAM:
-            res = U2Region(0, 50);
-            break;
-        case MSAEditorConsElement_CONSENSUS_TEXT:
-            res = U2Region(0, editor->getRowHeight());
-            res.startPos += getYRange(MSAEditorConsElement(e-1)).endPos();
-            break;
-        case MSAEditorConsElement_RULER:
-            res = U2Region(0, rulerFontHeight + 2 * RULER_NOTCH_SIZE + 4);
-            res.startPos += getYRange(MSAEditorConsElement(e - 1)).endPos();
-            break;
-    }
-    return res;
-}
-
-MSAConsensusAlgorithmFactory* MSAEditorConsensusArea::getConsensusAlgorithmFactory() {
-    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
-    SAFE_POINT(NULL != reg, "Consensus algorithm registry is NULL.", NULL);
-    QString lastUsedAlgoKey = getLastUsedAlgoSettingsKey();
-    QString lastUsedAlgo = AppContext::getSettings()->getValue(lastUsedAlgoKey).toString();
-    MSAConsensusAlgorithmFactory* algo = reg->getAlgorithmFactory(lastUsedAlgo);
-
-    const DNAAlphabet* al = editor->getMSAObject()->getAlphabet();
-    ConsensusAlgorithmFlags alphaFlags = MSAConsensusAlgorithmFactory::getAphabetFlags(al);
-    if (algo == NULL || (algo->getFlags() & alphaFlags) != alphaFlags) {
-        algo = reg->getAlgorithmFactory(BuiltInConsensusAlgorithms::DEFAULT_ALGO);
-        if ((algo->getFlags() & alphaFlags) != alphaFlags) {
-            QList<MSAConsensusAlgorithmFactory*> algorithms = reg->getAlgorithmFactories(MSAConsensusAlgorithmFactory::getAphabetFlags(al));
-            SAFE_POINT(algorithms.count() > 0, "There are no consensus algorithms for the current alphabet.", NULL);
-            algo = algorithms.first();
-        }
-        AppContext::getSettings()->setValue(lastUsedAlgoKey, algo->getId());
-    }
-    return algo;
-}
-
-void MSAEditorConsensusArea::updateConsensusAlgorithm() {
-    MSAConsensusAlgorithmFactory* newAlgo = getConsensusAlgorithmFactory();
-    CHECK(consensusCache != NULL && newAlgo != NULL, );
-    ConsensusAlgorithmFlags cacheConsensusFlags = consensusCache->getConsensusAlgorithm()->getFactory()->getFlags();
-    ConsensusAlgorithmFlags curFlags = newAlgo->getFlags();
-    if ((curFlags & cacheConsensusFlags) != curFlags) {
-        consensusCache->setConsensusAlgorithm(newAlgo);
-    }
-    emit si_consensusAlgorithmChanged(newAlgo->getId());
-}
-
-void MSAEditorConsensusArea::sl_startChanged(const QPoint& p, const QPoint& prev) {
-    if (p.x() == prev.x()) {
-        return;
-    }
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorConsensusArea::sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&) {
-    updateConsensusAlgorithm();
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorConsensusArea::setupFontAndHeight() {
-    rulerFont.setFamily("Arial");
-    rulerFont.setPointSize(qMax(8, int(ui->editor->getFont().pointSize() * 0.7)));
-    rulerFontHeight = QFontMetrics(rulerFont,this).height();
-    setFixedHeight( getYRange(MSAEditorConsElement_RULER).endPos() + 1);
-
-}
-
-void MSAEditorConsensusArea::sl_zoomOperationPerformed( bool resizeModeChanged )
-{
-    if (editor->getResizeMode() == MSAEditor::ResizeMode_OnlyContent && !resizeModeChanged) {
-        completeRedraw = true;
-        update();
-    } else {
-        setupFontAndHeight();
-    }
-}
-
-void MSAEditorConsensusArea::sl_selectionChanged(const MSAEditorSelection& current, const MSAEditorSelection& prev) {
-    // TODO: return if only height of selection changes?
-    Q_UNUSED(current);
-    Q_UNUSED(prev);
-    update();
-}
-
-void MSAEditorConsensusArea::sl_buildStaticMenu(GObjectView* v, QMenu* m) {
-    Q_UNUSED(v);
-    buildMenu(m);
-}
-
-void MSAEditorConsensusArea::sl_buildContextMenu(GObjectView* v, QMenu* m) {
-    Q_UNUSED(v);
-    buildMenu(m);
+QString MSAEditorConsensusArea::getLastUsedAlgoSettingsKey() const {
+    const DNAAlphabet* al = editor->getMaObject()->getAlphabet();
+    SAFE_POINT(NULL != al, "Alphabet is NULL", "");
+    const char* suffix = al->isAmino() ? "_protein" : al->isNucleic() ? "_nucleic" : "_raw";
+    return editor->getSettingsRoot() + "_consensus_algorithm_"+ suffix;
 }
 
-void MSAEditorConsensusArea::buildMenu(QMenu* m) {
-    QMenu* copyMenu = GUIUtils::findSubMenu(m, MSAE_MENU_COPY);
+void MSAEditorConsensusArea::buildMenu(QMenu *menu) {
+    QMenu* copyMenu = GUIUtils::findSubMenu(menu, MSAE_MENU_COPY);
     SAFE_POINT(copyMenu != NULL, "copyMenu", );
     copyMenu->addAction(copyConsensusAction);
     copyMenu->addAction(copyConsensusWithGapsAction);
 
-    m->addAction(configureConsensusAction);
-}
-
-void MSAEditorConsensusArea::sl_copyConsensusSequence() {
-    QApplication::clipboard()->setText(consensusCache->getConsensusLine(false));
-}
-
-void MSAEditorConsensusArea::sl_copyConsensusSequenceWithGaps() {
-    QApplication::clipboard()->setText(consensusCache->getConsensusLine(true));
-}
-
-void MSAEditorConsensusArea::sl_configureConsensusAction() {
-    OptionsPanel* optionsPanel = editor->getOptionsPanel();
-    SAFE_POINT(NULL != optionsPanel, "Internal error: options panel is NULL"
-        " when msageneraltab opening was initiated!",);
-
-    const QString& MSAGeneralTabFactoryId = MSAGeneralTabFactory::getGroupId();
-    optionsPanel->openGroupById(MSAGeneralTabFactoryId);
-}
-
-void MSAEditorConsensusArea::sl_changeConsensusAlgorithm(const QString& algoId) {
-    MSAConsensusAlgorithmFactory* algoFactory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(algoId);
-    if (getConsensusAlgorithm()->getFactory() != algoFactory) {
-        assert(algoFactory!=NULL);
-        setConsensusAlgorithm(algoFactory);
-    }
-    emit si_consensusAlgorithmChanged(algoId);
-}
-
-QString MSAEditorConsensusArea::getLastUsedAlgoSettingsKey() const {
-    const DNAAlphabet* al = editor->getMSAObject()->getAlphabet();
-    const char* suffix = al->isAmino() ? "_protein" : al->isNucleic() ? "_nucleic" : "_raw";
-    return SETTINGS_ROOT + "_consensus_algorithm_"+ suffix;
-}
-
-QString MSAEditorConsensusArea::getThresholdSettingsKey(const QString& factoryId) const {
-    return getLastUsedAlgoSettingsKey() + "_" + factoryId + "_threshold";
-}
-
-U2Region MSAEditorConsensusArea::getRullerLineYRange() const {
-    return getYRange(MSAEditorConsElement_RULER);
-}
-
-void MSAEditorConsensusArea::setConsensusAlgorithm(MSAConsensusAlgorithmFactory* algoFactory) {
-    MSAConsensusAlgorithm* oldAlgo = getConsensusAlgorithm();
-    if (oldAlgo!=NULL && algoFactory == oldAlgo->getFactory()) {
-        return;
-    }
-
-    //store threshold for the active algo
-    if (oldAlgo!=NULL && oldAlgo->supportsThreshold()) {
-        AppContext::getSettings()->setValue(getThresholdSettingsKey(oldAlgo->getId()), oldAlgo->getThreshold());
-    }
-
-    //store current algorithm selection
-    AppContext::getSettings()->setValue(getLastUsedAlgoSettingsKey(), algoFactory->getId());
-
-    consensusCache->setConsensusAlgorithm(algoFactory);
-    connect(consensusCache->getConsensusAlgorithm(), SIGNAL(si_thresholdChanged(int)), SLOT(sl_onConsensusThresholdChanged(int)));
-    restoreLastUsedConsensusThreshold();
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorConsensusArea::setConsensusAlgorithmConsensusThreshold(int val) {
-    MSAConsensusAlgorithm* algo = getConsensusAlgorithm();
-    if (algo->getThreshold() == val) {
-        return;
-    }
-    //store threshold as the last value
-    AppContext::getSettings()->setValue(getThresholdSettingsKey(algo->getId()), val);
-    algo->setThreshold(val);
-}
-
-void MSAEditorConsensusArea::sl_onConsensusThresholdChanged(int newValue) {
-    Q_UNUSED(newValue);
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorConsensusArea::restoreLastUsedConsensusThreshold() {
-    //restore last used threshold for new algorithm type if found
-    MSAConsensusAlgorithm* algo = getConsensusAlgorithm();
-    int threshold = AppContext::getSettings()->getValue(getThresholdSettingsKey(algo->getId()), algo->getDefaultThreshold()).toInt();
-    getConsensusAlgorithm()->setThreshold(threshold);
-
-}
-
-MSAConsensusAlgorithm* MSAEditorConsensusArea::getConsensusAlgorithm() const {
-    return consensusCache->getConsensusAlgorithm();
-}
-
-void MSAEditorConsensusArea::sl_changeConsensusThreshold(int val) {
-    setConsensusAlgorithmConsensusThreshold(val);
-    emit si_consensusThresholdChanged(val);
-}
-
-void MSAEditorConsensusArea::mousePressEvent(QMouseEvent *e) {
-    int x = e->x();
-    if (e->buttons() & Qt::LeftButton) {
-        selecting = true;
-        curPos = ui->seqArea->getColumnNumByX(x, selecting);
-        if (curPos !=-1) {
-            int height = ui->seqArea->getNumDisplayedSequences();
-            // select current column
-            MSAEditorSelection selection(curPos, 0, 1, height);
-            ui->seqArea->setSelection(selection);
-            scribbling = true;
-        }
-    }
-    QWidget::mousePressEvent(e);
-}
-
-void MSAEditorConsensusArea::mouseMoveEvent(QMouseEvent *e) {
-    if ((e->buttons() & Qt::LeftButton) && scribbling) {
-        int newPos = ui->seqArea->getColumnNumByX(e->x(), selecting);
-        if ( ui->seqArea->isPosInRange(newPos)) {
-            ui->seqArea->updateHBarPosition(newPos);
-        }
-        updateSelection(newPos);
-    }
-    QWidget::mouseMoveEvent(e);
-}
-
-void MSAEditorConsensusArea::mouseReleaseEvent(QMouseEvent *e) {
-    if (ui->seqArea->isAlignmentEmpty()) {
-        QWidget::mouseReleaseEvent(e);
-        return;
-    }
-
-    if (e->button() == Qt::LeftButton) {
-        int newPos = ui->seqArea->getColumnNumByX(e->x(), selecting);
-        updateSelection(newPos);
-        curPos = newPos;
-        scribbling = false;
-        selecting = false;
-    }
-
-    ui->seqArea->getHBar()->setupRepeatAction(QAbstractSlider::SliderNoAction);
-    QWidget::mouseReleaseEvent(e);
-}
-
-void MSAEditorConsensusArea::updateSelection(int newPos) {
-    CHECK(newPos != curPos, );
-    CHECK(newPos != -1, );
-
-    int height = ui->seqArea->getNumDisplayedSequences();
-    int startPos = qMin(curPos,newPos);
-    int width = qAbs(newPos - curPos) + 1;
-    MSAEditorSelection selection(startPos, 0, width, height);
-    ui->seqArea->setSelection(selection);
-}
-
-void MSAEditorConsensusArea::sl_onScrollBarActionTriggered(int scrollAction) {
-    if (scribbling && (scrollAction ==  QAbstractSlider::SliderSingleStepAdd || scrollAction == QAbstractSlider::SliderSingleStepSub)) {
-        QPoint coord = mapFromGlobal(QCursor::pos());
-        int newPos = ui->seqArea->getColumnNumByX(coord.x(), selecting);
-        updateSelection(newPos);
-    }
+    menu->addAction(configureConsensusAction);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.h b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.h
index 5685dcc..cd1e1f8 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,135 +24,32 @@
 
 #include <QWidget>
 
-#include <U2Core/U2Region.h>
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
 
-#include "MSAEditorConsensusCache.h"
-
-class QHelpEvent;
-class QMenu;
-class QPainter;
+#include "view_rendering/MaEditorConsensusArea.h"
 
 namespace U2 {
 
-class MSAEditor;
-class MSAEditorUI;
-class GObjectView;
-class MAlignment;
-class MAlignmentModInfo;
-class MSAEditorSelection;
-class MSAConsensusAlgorithm;
-class MSAConsensusAlgorithmFactory;
-
-enum MSAEditorConsElement {
-    MSAEditorConsElement_HISTOGRAM,
-    MSAEditorConsElement_CONSENSUS_TEXT,
-    MSAEditorConsElement_RULER
-};
+class MsaEditorWgt;
 
-class U2VIEW_EXPORT MSAEditorConsensusArea : public QWidget {
+class U2VIEW_EXPORT MSAEditorConsensusArea : public MaEditorConsensusArea {
     Q_OBJECT
     Q_DISABLE_COPY(MSAEditorConsensusArea)
 public:
-    MSAEditorConsensusArea(MSAEditorUI* ui);
-    ~MSAEditorConsensusArea();
-
-    U2Region getRullerLineYRange() const;
-
-    void setConsensusAlgorithm(MSAConsensusAlgorithmFactory* algo);
-    void setConsensusAlgorithmConsensusThreshold(int val);
-
-    MSAConsensusAlgorithm* getConsensusAlgorithm() const;
-
-    QSharedPointer<MSAEditorConsensusCache> getConsensusCache();
+    MSAEditorConsensusArea(MsaEditorWgt* ui);
 
-    void paintFullConsensus(QPixmap &pixmap);
-    void paintFullConsensus(QPainter& p);
-
-    void paintConsenusPart(QPixmap & pixmap, const U2Region &region, const QList<qint64> &seqIdx);
-    void paintConsenusPart(QPainter& p, const U2Region &region, const QList<qint64> &seqIdx);
-
-    void paintRulerPart(QPixmap &pixmap, const U2Region &region);
-    void paintRulerPart(QPainter &p, const U2Region &region);
-
-protected:
-    bool event(QEvent* e);
-    void paintEvent(QPaintEvent*);
-    void resizeEvent(QResizeEvent*);
-    void mousePressEvent(QMouseEvent *e);
-    void mouseMoveEvent(QMouseEvent *e);
-    void mouseReleaseEvent(QMouseEvent *e);
-
-signals:
-    void si_consensusAlgorithmChanged(const QString& algoId);
-    void si_consensusThresholdChanged(int value);
+    QString getDefaultAlgorithmId() const { return BuiltInConsensusAlgorithms::DEFAULT_ALGO; }
 
 private slots:
-    void sl_startChanged(const QPoint&, const QPoint&);
-    void sl_selectionChanged(const MSAEditorSelection& current, const MSAEditorSelection& prev);
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&);
-    void sl_changeConsensusAlgorithm(const QString& algoId);
-    void sl_changeConsensusThreshold(int val);
-    void sl_onScrollBarActionTriggered( int scrollAction );
-    void sl_onConsensusThresholdChanged(int newValue);
-
-    void sl_buildStaticMenu(GObjectView* v, QMenu* m);
-    void sl_buildContextMenu(GObjectView* v, QMenu* m);
-    void sl_copyConsensusSequence();
-    void sl_copyConsensusSequenceWithGaps();
-    void sl_configureConsensusAction();
-    void sl_zoomOperationPerformed(bool resizeModeChanged);
-
-public:
-    void drawContent(QPainter& painter);
+    void sl_buildStaticMenu(GObjectView *view, QMenu *menu);
+    void sl_buildContextMenu(GObjectView *view, QMenu *menu);
 
 private:
-    QString createToolTip(QHelpEvent* he) const;
-    void restoreLastUsedConsensusThreshold();
+    void initRenderer();
     QString getLastUsedAlgoSettingsKey() const;
-    QString getThresholdSettingsKey(const QString& factoryId) const;
-
-    void buildMenu(QMenu* m);
-    void setupFontAndHeight();
-    void updateSelection(int newPos);
-
-    void drawConsensus(QPainter& p);
-    void drawConsensus(QPainter& p, int startPos, int lastPos, bool useVirtualCoords = false);
-
-    void drawConsensusChar(QPainter& p, int pos, int firstVisiblePos, bool selected, bool useVirtualCoords = false);
-    void drawConsensusChar(QPainter& p, int pos, int firstVisiblePos, char consChar,
-                           bool selected, bool useVirtualCoords = false);
-
-    void drawRuler(QPainter& p, int start = -1, int end = -1, bool drawFull = false);
-
-    void drawHistogram(QPainter& p);
-    void drawHistogram(QPainter& p, int firstBase, int lastBase);
-
-    void drawSelection(QPainter& p);
-
-
-    U2Region getYRange(MSAEditorConsElement e) const;
-
-    MSAConsensusAlgorithmFactory* getConsensusAlgorithmFactory();
-    void updateConsensusAlgorithm();
-
-    MSAEditor*          editor;
-    const MSAEditorUI*  ui;
-    QFont               rulerFont;
-    int                 rulerFontHeight;
-    QAction*            copyConsensusAction;
-    QAction*            copyConsensusWithGapsAction;
-    QAction*            configureConsensusAction;
-    int                 curPos;
-    bool                scribbling, selecting;
-
-    QSharedPointer<MSAEditorConsensusCache>    consensusCache;
-
-    bool                completeRedraw;
-    QPixmap*            cachedView;
-
-    QObject *childObject;
+    void buildMenu(QMenu *menu);
 };
 
-}//namespace
-#endif
+} // namespace
+#endif // _U2_MSA_EDITOR_CONSENSUS_AREA_H_
 
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.cpp
index c821b18..ef1af99 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,24 @@
  * MA 02110-1301, USA.
  */
 
+#include "MaEditor.h"
 #include "MSAEditorConsensusCache.h"
 
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Algorithm/MSAConsensusAlgorithm.h>
 
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
 namespace U2 {
 
-MSAEditorConsensusCache::MSAEditorConsensusCache(QObject* p, MAlignmentObject* o, MSAConsensusAlgorithmFactory* factory)
+MSAEditorConsensusCache::MSAEditorConsensusCache(QObject* p, MultipleAlignmentObject* o, MSAConsensusAlgorithmFactory* factory)
 : QObject(p), curCacheSize(0), aliObj(o), algorithm(NULL)
 {
     setConsensusAlgorithm(factory);
 
-    connect(aliObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
+    connect(aliObj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+        SLOT(sl_alignmentChanged()));
     connect(aliObj, SIGNAL(si_invalidateAlignmentObject()), SLOT(sl_invalidateAlignmentObject()));
 
     curCacheSize = aliObj->getLength();
@@ -49,36 +52,52 @@ MSAEditorConsensusCache::~MSAEditorConsensusCache() {
 void MSAEditorConsensusCache::setConsensusAlgorithm(MSAConsensusAlgorithmFactory* factory) {
     delete algorithm;
     algorithm = NULL;
-    algorithm = factory->createAlgorithm(aliObj->getMAlignment());
+    algorithm = factory->createAlgorithm(aliObj->getMultipleAlignment(), qobject_cast<MultipleChromatogramAlignmentObject*>(aliObj) != NULL);
     connect(algorithm, SIGNAL(si_thresholdChanged(int)), SLOT(sl_thresholdChanged(int)));
     updateMap.fill(false);
 }
 
-void MSAEditorConsensusCache::sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&) {
+QByteArray MSAEditorConsensusCache::getConsensusLine(const U2Region &region, bool withGaps) {
+    QByteArray res;
+    for (int i = static_cast<int>(region.startPos), n = static_cast<int>(region.endPos()); i < n; i++) {
+        char c = getConsensusChar(i);
+        if (c != U2Msa::GAP_CHAR || withGaps) {
+            res.append(c);
+        }
+    }
+    return res;
+}
+
+void MSAEditorConsensusCache::sl_alignmentChanged() {
     if(curCacheSize != aliObj->getLength()) {
         curCacheSize = aliObj->getLength();
         updateMap.resize(curCacheSize);
         cache.resize(aliObj->getLength());
+
+        emit si_cacheResized(curCacheSize);
     }
     updateMap.fill(false);
 }
 
 void MSAEditorConsensusCache::updateCacheItem(int pos) {
     if(!updateMap.at(pos) && aliObj != NULL) {
-        const MAlignment& ma = aliObj->getMAlignment();
+        const MultipleAlignment ma = aliObj->getMultipleAlignment();
+
         QString errorMessage = tr("Can not update consensus chache item");
         SAFE_POINT(pos >= 0 && pos < curCacheSize, errorMessage,);
-        SAFE_POINT(curCacheSize == ma.getLength(), errorMessage,);
+        SAFE_POINT(curCacheSize == ma->getLength(), errorMessage,);
 
         CacheItem& ci = cache[pos];
         int count = 0;
-        int nSeq = ma.getNumRows();
+        int nSeq = ma->getNumRows();
         SAFE_POINT(0 != nSeq, errorMessage,);
 
         ci.topChar = algorithm->getConsensusCharAndScore(ma, pos, count);
         ci.topPercent = (char)qRound(count * 100. / nSeq);
         assert(ci.topPercent >=0 && ci.topPercent<=100);
         updateMap.setBit(pos, true);
+
+        emit si_cachedItemUpdated(pos, ci.topChar);
     }
 }
 
@@ -94,16 +113,18 @@ int MSAEditorConsensusCache::getConsensusCharPercent(int pos) {
     return ci.topPercent;
 }
 
-QByteArray MSAEditorConsensusCache::getConsensusLine(bool withGaps) {
-    QByteArray res;
-    const MAlignment& ma = aliObj->getMAlignment();
-    for (int i=0, n = ma.getLength(); i<n; i++) {
-        char c = getConsensusChar(i);
-        if (c!=MAlignment_GapChar || withGaps) {
-            res.append(c);
-        }
+QList<int> MSAEditorConsensusCache::getConsensusPercents(const U2Region &region) {
+    QList<int> percents;
+    for (qint64 column = region.startPos; column < region.endPos(); column++) {
+        percents << getConsensusCharPercent(static_cast<int>(column));
     }
-    return res;
+    return percents;
+}
+
+QByteArray MSAEditorConsensusCache::getConsensusLine(bool withGaps) {
+    const MultipleAlignment ma = aliObj->getMultipleAlignment();
+    const U2Region region(0, ma->getLength());
+    return getConsensusLine(region, withGaps);
 }
 
 void MSAEditorConsensusCache::sl_thresholdChanged(int newValue) {
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.h b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.h
index d400551..cb98f5e 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorConsensusCache.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,29 +22,35 @@
 #ifndef _U2_MSA_EDITOR_CONSENSUS_CACHE_H_
 #define _U2_MSA_EDITOR_CONSENSUS_CACHE_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QVector>
-#include <QtCore/QBitArray>
+#include <QBitArray>
+#include <QObject>
+#include <QVector>
+
+#include <U2Core/MultipleSequenceAlignment.h>
+
 
 namespace U2 {
 
-class MAlignmentObject;
-class MAlignment;
-class MAlignmentModInfo;
+class MaEditor;
+
 class MSAConsensusAlgorithm;
 class MSAConsensusAlgorithmFactory;
+class MaModificationInfo;
+class MultipleAlignmentObject;
 class U2OpStatus;
 
-class MSAEditorConsensusCache : public QObject {
+class U2VIEW_EXPORT MSAEditorConsensusCache : public QObject {
+    friend class MaConsensusMismatchController;
     Q_OBJECT
     Q_DISABLE_COPY(MSAEditorConsensusCache)
 public:
-    MSAEditorConsensusCache(QObject* p, MAlignmentObject* aliObj, MSAConsensusAlgorithmFactory* algo);
+    MSAEditorConsensusCache(QObject* p, MultipleAlignmentObject* aliObj, MSAConsensusAlgorithmFactory* algo);
     ~MSAEditorConsensusCache();
 
     char getConsensusChar(int pos);
 
     int getConsensusCharPercent(int pos);
+    QList<int> getConsensusPercents(const U2Region &region);
 
     int getConsensusLength() const { return cache.size(); }
 
@@ -52,9 +58,15 @@ public:
 
     MSAConsensusAlgorithm* getConsensusAlgorithm() const {return algorithm;}
 
+    QByteArray getConsensusLine(const U2Region &region, bool withGaps);
     QByteArray getConsensusLine(bool withGaps);
+
+signals:
+    void si_cachedItemUpdated(int pos, char c);
+    void si_cacheResized(int newSize);
+
 private slots:
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&);
+    void sl_alignmentChanged();
     void sl_thresholdChanged(int newValue);
     void sl_invalidateAlignmentObject();
 
@@ -65,14 +77,13 @@ private:
         char    topPercent;
     };
 
-
     void updateCacheItem(int pos);
 
-    int                     curCacheSize;
-    QVector<CacheItem>      cache;
-    QBitArray               updateMap;
-    MAlignmentObject*       aliObj;
-    MSAConsensusAlgorithm*  algorithm;
+    int                         curCacheSize;
+    QVector<CacheItem>          cache;
+    QBitArray                   updateMap;
+    MultipleAlignmentObject*    aliObj;
+    MSAConsensusAlgorithm*      algorithm;
 };
 
 }//namespace;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.cpp
deleted file mode 100644
index 4fdd882..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorFactory.h"
-#include "MSAEditor.h"
-#include "MSAEditorTasks.h"
-#include "MSAEditorState.h"
-
-#include <U2Core/DocumentModel.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/ProjectModel.h>
-
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/UnloadedObject.h>
-
-#include <U2Core/SelectionUtils.h>
-
-namespace U2 {
-
-/* TRANSLATOR U2::MSAEditor */
-/* TRANSLATOR U2::ObjectViewTask */
-
-const GObjectViewFactoryId MSAEditorFactory::ID("MSAEditor");
-
-MSAEditorFactory::MSAEditorFactory()
-: GObjectViewFactory(ID, tr("Alignment Editor"))
-{
-}
-
-bool MSAEditorFactory::canCreateView(const MultiGSelection& multiSelection) {
-    bool hasMSADocuments = !SelectionUtils::findDocumentsWithObjects(
-                                GObjectTypes::MULTIPLE_ALIGNMENT, &multiSelection, UOF_LoadedAndUnloaded, true).isEmpty();
-    if (hasMSADocuments) {
-        return true;
-    }
-    return false;
-}
-
-#define MAX_VIEWS 10
-
-Task* MSAEditorFactory::createViewTask(const MultiGSelection& multiSelection, bool single) {
-    QList<GObject*> msaObjects = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_ALIGNMENT, &multiSelection, UOF_LoadedAndUnloaded);
-    QSet<Document*> docsWithMSA = SelectionUtils::findDocumentsWithObjects(GObjectTypes::MULTIPLE_ALIGNMENT,
-        &multiSelection, UOF_LoadedAndUnloaded, false);
-    QList<OpenMSAEditorTask*> resTasks;
-
-    foreach(Document* doc, docsWithMSA) {
-        QList<GObject*> docObjs = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT, UOF_LoadedAndUnloaded);
-        if (!docObjs.isEmpty()) {
-            foreach(GObject* obj, docObjs){
-                if(!msaObjects.contains(obj)){
-                    msaObjects.append(obj);
-                }
-            }
-
-        } else {
-            resTasks.append(new OpenMSAEditorTask(doc));
-            if (resTasks.size() == MAX_VIEWS) {
-                break;
-            }
-        }
-    }
-
-    if (!msaObjects.isEmpty()) {
-        foreach(GObject* o, msaObjects) {
-            if (resTasks.size() == MAX_VIEWS) {
-                break;
-            }
-            if (o->getGObjectType() == GObjectTypes::UNLOADED) {
-                resTasks.append(new OpenMSAEditorTask(qobject_cast<UnloadedObject*>(o)));
-            } else {
-                assert(o->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT);
-                resTasks.append(new OpenMSAEditorTask(qobject_cast<MAlignmentObject*>(o)));
-            }
-        }
-    }
-
-    if (resTasks.isEmpty()) {
-        return NULL;
-    }
-
-    if (resTasks.size() == 1 || single) {
-        return resTasks.first();
-    }
-
-    Task* result = new Task(tr("Open multiple views"), TaskFlag_NoRun);
-    foreach(Task* t, resTasks) {
-        result->addSubTask(t);
-    }
-    return result;
-}
-
-bool MSAEditorFactory::isStateInSelection(const MultiGSelection& multiSelection, const QVariantMap& stateData) {
-    MSAEditorState state(stateData);
-    if (!state.isValid()) {
-        return false;
-    }
-    GObjectReference ref = state.getMSAObjectRef();
-    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
-    if (doc == NULL) { //todo: accept to use invalid state removal routines of ObjectViewTask ???
-        return false;
-    }
-    //check that document is in selection
-    QList<Document*> selectedDocs = SelectionUtils::getSelectedDocs(multiSelection);
-    if (selectedDocs.contains(doc)) {
-        return true;
-    }
-    //check that object is in selection
-    QList<GObject*> selectedObjects = SelectionUtils::getSelectedObjects(multiSelection);
-    GObject* obj = doc->findGObjectByName(ref.objName);
-    bool res = obj!=NULL && selectedObjects.contains(obj);
-    return res;
-}
-
-Task* MSAEditorFactory::createViewTask(const QString& viewName, const QVariantMap& stateData) {
-    return new OpenSavedMSAEditorTask(viewName, stateData);
-}
-
-}//namespace
-
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h b/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h
deleted file mode 100644
index f7bd0ef..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorFactory.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_FACTORY_H_
-#define _U2_MSA_EDITOR_FACTORY_H_
-
-#include <U2Gui/ObjectViewModel.h>
-
-namespace U2 {
-
-class MultiGSelection;
-class MsaColorSchemeRegistry;
-
-class U2VIEW_EXPORT MSAEditorFactory : public GObjectViewFactory {
-    Q_OBJECT
-public:
-    MSAEditorFactory();
-
-    virtual bool canCreateView(const MultiGSelection& multiSelection);
-
-    virtual Task* createViewTask(const MultiGSelection& multiSelection, bool single = false);
-
-    virtual bool isStateInSelection(const MultiGSelection& multiSelection, const QVariantMap& stateData);
-
-    virtual Task* createViewTask(const QString& viewName, const QVariantMap& stateData);
-
-    virtual bool supportsSavedStates() const {return true;}
-
-    static const GObjectViewFactoryId ID;
-};
-
-
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp
deleted file mode 100644
index 342c449..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.cpp
+++ /dev/null
@@ -1,928 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorNameList.h"
-#include "MSAEditor.h"
-#include "MSAEditorSequenceArea.h"
-
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Gui/GUIUtils.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QInputDialog>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QInputDialog>
-#endif
-#include <QtGui/QClipboard>
-#include <QtGui/QPainter>
-#include <QtGui/QMouseEvent>
-
-
-namespace U2 {
-
-#define CHILDREN_OFFSET 8
-
-MSAEditorNameList::MSAEditorNameList(MSAEditorUI* _ui, QScrollBar* _nhBar)
-    : labels(NULL),
-      ui(_ui),
-      nhBar(_nhBar),
-      singleSelecting(false),
-      editor(_ui->editor)
-{
-    setObjectName("msa_editor_name_list");
-    setFocusPolicy(Qt::WheelFocus);
-    cachedView = new QPixmap();
-    completeRedraw = true;
-    scribbling = false;
-    shifting = false;
-    curSeq = 0;
-    startSelectingSeq = curSeq;
-    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
-
-    connect(editor, SIGNAL(si_buildStaticMenu(GObjectView*, QMenu*)), SLOT(sl_buildStaticMenu(GObjectView*, QMenu*)));
-
-    editSequenceNameAction = new QAction(tr("Edit sequence name"), this);
-    connect(editSequenceNameAction, SIGNAL(triggered()), SLOT(sl_editSequenceName()));
-
-    copyCurrentSequenceAction = new QAction(tr("Copy current sequence"), this);
-    copyCurrentSequenceAction->setObjectName("Copy current sequence");
-    connect(copyCurrentSequenceAction, SIGNAL(triggered()), SLOT(sl_copyCurrentSequence()));
-
-    removeSequenceAction = new QAction(tr("Remove sequence(s)"), this);
-    removeSequenceAction->setObjectName("Remove sequence");
-    connect(removeSequenceAction, SIGNAL(triggered()), SLOT(sl_removeSequence()));
-    addAction(removeSequenceAction);
-
-    connect(editor, SIGNAL(si_buildPopupMenu(GObjectView* , QMenu*)), SLOT(sl_buildContextMenu(GObjectView*, QMenu*)));
-    if (editor->getMSAObject()) {
-        connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-            SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-        connect(editor->getMSAObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
-    }
-
-    connect(this,   SIGNAL(si_startMsaChanging()),
-            ui,     SIGNAL(si_startMsaChanging()));
-    connect(this,   SIGNAL(si_stopMsaChanging(bool)),
-            ui,     SIGNAL(si_stopMsaChanging(bool)));
-
-    if (ui->seqArea) {
-        connect(ui->seqArea, SIGNAL(si_startChanged(const QPoint &, const QPoint &)), SLOT(sl_startChanged(const QPoint &, const QPoint &)));
-        connect(ui->seqArea, SIGNAL(si_selectionChanged(const MSAEditorSelection &, const MSAEditorSelection &)),
-            SLOT(sl_selectionChanged(const MSAEditorSelection &, const MSAEditorSelection &)));
-        connect(ui->editor, SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_fontChanged()));
-        connect(ui->seqArea->getVBar(), SIGNAL(actionTriggered(int)), SLOT(sl_onScrollBarActionTriggered(int)));
-    }
-    connect(ui->getCollapseModel(), SIGNAL(toggled()), SLOT(sl_modelChanged()));
-    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_referenceSeqChanged(qint64)));
-
-    nhBar->setParent(this);
-    nhBar->setVisible(false);
-    updateActions();
-
-    QObject *labelsParent = new QObject(this);
-    labelsParent->setObjectName("labels_parent");
-    labels = new QObject(labelsParent);
-}
-
-MSAEditorNameList::~MSAEditorNameList() {
-    delete cachedView;
-}
-
-void MSAEditorNameList::drawNames(QPixmap &p, const QList<qint64> &seqIdx, bool drawSelection) {
-    CHECK(!seqIdx.isEmpty(), );
-
-    SAFE_POINT(NULL != ui, tr("MSA Editor UI is NULL"), );
-    MSAEditorSequenceArea* seqArea = ui->getSequenceArea();
-    SAFE_POINT(NULL != seqArea, tr("MSA Editor sequence area is NULL"), );
-    CHECK(!seqArea->isAlignmentEmpty(), );
-
-    CHECK(ui->editor->getRowHeight() * seqIdx.size() < 32768, );
-
-    p = QPixmap(width(), ui->editor->getRowHeight() * seqIdx.size());
-
-    QPainter painter(&p);
-    drawNames(painter, seqIdx, drawSelection);
-}
-
-void MSAEditorNameList::drawNames(QPainter &p, const QList<qint64> &seqIdx, bool drawSelection) {
-    p.fillRect(QRect(0, 0, width(), ui->editor->getRowHeight() * seqIdx.size()), Qt::white);
-
-    MAlignmentObject* msaObj = editor->getMSAObject();
-    SAFE_POINT(NULL != msaObj, tr("MSA Object is NULL"), );
-    const MAlignment &al = msaObj->getMAlignment();
-
-    QStringList seqNames = al.getRowNames();
-    for (qint64 i = 0; i < seqIdx.size(); i++) {
-        SAFE_POINT(seqIdx[i] < seqNames.size(), tr("Invalid sequence index"), );
-        bool isSelected = drawSelection && isRowInSelection(seqIdx[i]);
-        drawSequenceItem(p, i, 0, getTextForRow(seqIdx[i]), isSelected);
-    }
-}
-
-void MSAEditorNameList::updateActions() {
-    SAFE_POINT(NULL != ui, tr("MSA Editor UI is NULL"), );
-    MSAEditorSequenceArea* seqArea = ui->getSequenceArea();
-    SAFE_POINT(NULL != seqArea, tr("MSA Editor sequence area is NULL"), );
-
-    copyCurrentSequenceAction->setEnabled(!seqArea->isAlignmentEmpty());
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj){
-        removeSequenceAction->setEnabled(!maObj->isStateLocked() && getSelectedRow() != -1);
-        editSequenceNameAction->setEnabled(!maObj->isStateLocked());
-        addAction(ui->getCopySelectionAction());
-        addAction(ui->getPasteAction());
-    }
-}
-
-#define MARGIN_TEXT_LEFT 5
-#define MARGIN_TEXT_TOP 2
-#define MARGIN_TEXT_BOTTOM 2
-
-void MSAEditorNameList::updateScrollBar() {
-    nhBar->disconnect(this);
-
-    QFont f = ui->editor->getFont();
-    f.setItalic(true);
-    QFontMetrics fm(f,this);
-    int maxNameWidth = 0;
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    foreach(const MAlignmentRow& row, maObj->getMAlignment().getRows()) {
-        maxNameWidth = qMax(fm.width(row.getName()), maxNameWidth);
-    }
-    // adjustment for branch primitive in collapsing mode
-    if (ui->isCollapsibleMode()) {
-        maxNameWidth += 2*CROSS_SIZE + CHILDREN_OFFSET;
-    }
-
-    int availableWidth = width() - MARGIN_TEXT_LEFT;
-    int nSteps = 1;
-    int stepSize = fm.width('W');
-    if (availableWidth < maxNameWidth) {
-        int dw = maxNameWidth - availableWidth;
-        nSteps += dw / stepSize + (dw % stepSize != 0 ? 1 : 0);
-    }
-    nhBar->setMinimum(0);
-    nhBar->setMaximum(nSteps - 1);
-    nhBar->setValue(0);
-
-    nhBar->setVisible(nSteps > 1);
-    connect(nhBar, SIGNAL(valueChanged(int)), SLOT(sl_nameBarMoved(int)));
-}
-
-void MSAEditorNameList::sl_buildStaticMenu(GObjectView* v, QMenu* m) {
-    Q_UNUSED(v);
-    buildMenu(m);
-}
-
-void MSAEditorNameList::sl_buildContextMenu(GObjectView* v, QMenu* m) {
-    Q_UNUSED(v);
-    buildMenu(m);
-}
-
-void MSAEditorNameList::buildMenu(QMenu* m) {
-    QMenu* editMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EDIT);
-    SAFE_POINT(editMenu != NULL, "editMenu not found", );
-
-    editMenu->insertAction(editMenu->actions().last(), removeSequenceAction);
-
-    if (!rect().contains(mapFromGlobal(QCursor::pos()))) {
-        return;
-    }
-
-    QMenu* copyMenu = GUIUtils::findSubMenu(m, MSAE_MENU_COPY);
-    SAFE_POINT(copyMenu != NULL, "copyMenu not found", );
-    copyMenu->addAction(copyCurrentSequenceAction);
-
-    copyCurrentSequenceAction->setDisabled(getSelectedRow() == -1);
-    editMenu->insertAction(editMenu->actions().first(), editSequenceNameAction);
-}
-
-int MSAEditorNameList::getSelectedRow() const {
-    const MSAEditorSelection& selection = ui->seqArea->getSelection();
-    if (selection.height() == 0) {
-        return -1;
-    }
-    int n = selection.y();
-    if (ui->isCollapsibleMode()) {
-        n = ui->getCollapseModel()->mapToRow(n);
-    }
-    return n;
-}
-
-void MSAEditorNameList::sl_copyCurrentSequence() {
-    int n = getSelectedRow();
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj) {
-        const MAlignmentRow& row = maObj->getMAlignment().getRow(n);
-        //TODO: trim large sequence?
-        U2OpStatus2Log os;
-        QApplication::clipboard()->setText(row.toByteArray(maObj->getLength(), os));
-    }
-}
-
-void MSAEditorNameList::sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo& mi) {
-    if (mi.sequenceListChanged) {
-        completeRedraw = true;
-        updateActions();
-        updateScrollBar();
-        update();
-    }
-}
-
-void MSAEditorNameList::sl_nameBarMoved(int) {
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorNameList::sl_removeSequence() {
-    int width = editor->getAlignmentLen();
-    MSAEditorSelection oldSelection = ui->seqArea->getSelection();
-    MSAEditorSelection selection(0, oldSelection.y(), width, oldSelection.height());
-    ui->seqArea->setSelection(selection);
-    ui->seqArea->sl_delCurrentSelection();
-}
-
-void MSAEditorNameList::sl_selectReferenceSequence() {
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj) {
-        int n = getSelectedRow();
-        if (n < 0) {
-            return;
-        }
-        assert(!maObj->isStateLocked());
-        editor->setReference(maObj->getRow(n).getRowId());
-    }
-}
-
-void MSAEditorNameList::sl_lockedStateChanged() {
-    updateActions();
-}
-
-void MSAEditorNameList::resizeEvent(QResizeEvent* e) {
-    completeRedraw = true;
-    updateScrollBar();
-    QWidget::resizeEvent(e);
-}
-
-void MSAEditorNameList::paintEvent(QPaintEvent*) {
-    drawAll();
-}
-
-void MSAEditorNameList::keyPressEvent(QKeyEvent *e) {
-    int key = e->key();
-    static int newSeq = 0;
-    switch(key) {
-    case Qt::Key_Up:
-        if (0 != (Qt::ShiftModifier & e->modifiers()) && ui->seqArea->isSeqInRange(newSeq - 1)) {
-            newSeq--;
-            updateSelection(newSeq);
-        } else if (0 == (Qt::ShiftModifier & e->modifiers())) {
-            ui->seqArea->moveSelection(0, -1);
-            if (0 <= curSeq - 1) {
-                curSeq--;
-            }
-            if (0 <= startSelectingSeq - 1) {
-                startSelectingSeq--;
-            }
-        }
-        break;
-    case Qt::Key_Down:
-        if (0 != (Qt::ShiftModifier & e->modifiers()) && ui->seqArea->isSeqInRange(newSeq + 1)) {
-            newSeq++;
-            updateSelection(newSeq);
-        } else if (0 == (Qt::ShiftModifier & e->modifiers())) {
-            ui->seqArea->moveSelection(0, 1);
-            if (ui->seqArea->getNumDisplayedSequences() > curSeq + 1) {
-                curSeq++;
-            }
-            if (ui->seqArea->getNumDisplayedSequences() > startSelectingSeq + 1) {
-                startSelectingSeq++;
-            }
-        }
-        break;
-    case Qt::Key_Left:
-        nhBar->triggerAction(QAbstractSlider::SliderSingleStepSub);
-        break;
-    case Qt::Key_Right:
-        nhBar->triggerAction(QAbstractSlider::SliderSingleStepAdd);
-        break;
-    case Qt::Key_Home:
-        ui->seqArea->setFirstVisibleSequence(0);
-        ui->seqArea->cancelSelection();
-        //TODO: select first sequence?
-        break;
-    case Qt::Key_End:
-        {
-            int s = ui->seqArea->getNumDisplayedSequences() - 1;
-            ui->seqArea->setFirstVisibleSequence(s);
-            ui->seqArea->cancelSelection();
-            //TODO: select last sequence?
-        }
-        break;
-    case Qt::Key_PageUp:
-        {
-            int nVis = ui->seqArea->getNumVisibleSequences(false);
-            int fp = qMax(0, ui->seqArea->getFirstVisibleSequence() - nVis);
-            ui->seqArea->setFirstVisibleSequence(fp);
-            ui->seqArea->cancelSelection();
-        }
-        break;
-    case Qt::Key_PageDown:
-        {
-            int nVis = ui->seqArea->getNumVisibleSequences(false);
-            int nSeq = ui->seqArea->getNumDisplayedSequences();
-            int fp = qMin(nSeq-1, ui->seqArea->getFirstVisibleSequence() + nVis);
-            ui->seqArea->setFirstVisibleSequence(fp);
-            ui->seqArea->cancelSelection();
-        }
-        break;
-    case Qt::Key_Shift:
-        curSeq = startSelectingSeq;
-        if (startSelectingSeq == ui->getCollapseModel()->rowToMap(ui->seqArea->getSelectedRows().startPos)) {
-            newSeq = ui->getCollapseModel()->rowToMap(ui->seqArea->getSelectedRows().endPos() - 1);
-        } else {
-            newSeq = ui->getCollapseModel()->rowToMap(ui->seqArea->getSelectedRows().startPos);
-        }
-        break;
-    case Qt::Key_Escape:
-        ui->seqArea->cancelSelection();
-        curSeq = 0;
-        startSelectingSeq = 0;
-        break;
-    }
-    QWidget::keyPressEvent(e);
-}
-
-void MSAEditorNameList::mousePressEvent(QMouseEvent *e) {
-    SAFE_POINT(ui, "MSA Editor UI is NULL", );
-    MSAEditorSequenceArea* seqArea = ui->getSequenceArea();
-    SAFE_POINT(seqArea, "MSA Editor sequence area", );
-
-    if (seqArea->isAlignmentEmpty()) {
-        QWidget::mousePressEvent(e);
-        return;
-    }
-
-    if ((e->button() == Qt::LeftButton)) {
-        emit si_startMsaChanging();
-
-        if(Qt::ShiftModifier == e->modifiers()) {
-            QWidget::mousePressEvent(e);
-            scribbling = true;
-            return;
-        }
-        origin = e->pos();
-        curSeq = seqArea->getSequenceNumByY(e->y());
-        if (ui->isCollapsibleMode()) {
-            MSACollapsibleItemModel* m = ui->getCollapseModel();
-            if(curSeq >= m->displayedRowsCount()){
-                curSeq = m->displayedRowsCount() - 1;
-            }
-            if (m->isTopLevel(curSeq)) {
-                const U2Region& yRange = seqArea->getSequenceYRange(curSeq, true);
-                bool selected = isRowInSelection(curSeq);
-                QRect textRect = calculateTextRect(yRange, selected);
-                QRect buttonRect = calculateButtonRect(textRect);
-                if (buttonRect.contains(origin)) {
-                    m->toggle(curSeq);
-                    QWidget::mousePressEvent(e);
-                    return;
-                }
-            }
-        }
-        startSelectingSeq = curSeq;
-        MSAEditorSelection s = seqArea->getSelection();
-        if (s.getRect().contains(0,curSeq)) {
-            if (!ui->isCollapsibleMode()) {
-                shifting = true;
-            }
-        } else {
-            if (!seqArea->isSeqInRange(startSelectingSeq)) {
-                if (e->y() < origin.y()) {
-                    startSelectingSeq = 0;
-                } else {
-                    startSelectingSeq = ui->editor->getNumSequences() - 1;
-                }
-            }
-            rubberBand->setGeometry(QRect(origin, QSize()));
-            rubberBand->show();
-            seqArea->cancelSelection();
-            scribbling = true;
-        }
-        if (seqArea->isSeqInRange(curSeq)) {
-            singleSelecting = true;
-            scribbling = true;
-        }
-    }
-
-    QWidget::mousePressEvent(e);
-}
-
-void MSAEditorNameList::mouseMoveEvent(QMouseEvent* e) {
-    if ((e->buttons() & Qt::LeftButton) && scribbling) {
-        int newSeqNum = ui->seqArea->getSequenceNumByY(e->pos().y());
-        if (ui->seqArea->isSeqInRange(newSeqNum)) {
-            ui->seqArea->updateVBarPosition(newSeqNum);
-            if (singleSelecting) {
-                singleSelecting = false;
-            }
-        }
-        if (shifting) {
-            assert(!ui->isCollapsibleMode());
-            moveSelectedRegion(newSeqNum - curSeq);
-        } else {
-            rubberBand->setGeometry(QRect(origin, e->pos()).normalized());
-        }
-    }
-    QWidget::mouseMoveEvent(e);
-}
-
-void MSAEditorNameList::mouseReleaseEvent(QMouseEvent *e) {
-    rubberBand->hide();
-    if (scribbling) {
-        int newSeq = ui->seqArea->getSequenceNumByY(qMax(e->y(), 0));
-        if (!ui->seqArea->isSeqInRange(newSeq)) {
-            if (e->y() < origin.y()) {
-                newSeq = 0;
-            } else {
-                newSeq = ui->seqArea->getNumDisplayedSequences() - 1;
-            }
-        }
-        if (e->pos() == origin) {
-            // special case: click but don't drag
-            shifting = false;
-        }
-        if (shifting) {
-            assert(!ui->isCollapsibleMode());
-            int shift = 0;
-            int numSeq = ui->seqArea->getNumDisplayedSequences();
-            int selectionStart = ui->seqArea->getSelection().y();
-            int selectionSize = ui->seqArea->getSelection().height();
-            if (newSeq == 0) {
-                shift = -selectionStart;
-            } else if (newSeq == numSeq - 1) {
-                shift = numSeq - (selectionStart + selectionSize);
-            } else {
-                shift = newSeq - curSeq;
-            }
-            moveSelectedRegion(shift);
-            shifting = false;
-
-            emit si_stopMsaChanging(true);
-        } else {
-            int firstVisibleRow = ui->seqArea->getFirstVisibleSequence();
-            int lastVisibleRow = ui->seqArea->getNumVisibleSequences(true) + firstVisibleRow - 1;
-            bool selectionContainsSeqs = (startSelectingSeq <= lastVisibleRow || newSeq <= lastVisibleRow);
-
-            if (selectionContainsSeqs) {
-                if (singleSelecting) {
-                    curSeq = newSeq;
-                    singleSelecting = false;
-                } else {
-                    curSeq = (startSelectingSeq < firstVisibleRow) ? firstVisibleRow : startSelectingSeq;
-                    curSeq = (startSelectingSeq > lastVisibleRow) ? lastVisibleRow : startSelectingSeq;
-                    if (newSeq > lastVisibleRow || newSeq < firstVisibleRow) {
-                        newSeq = newSeq > 0 ? lastVisibleRow : 0;
-                    }
-                }
-                updateSelection(newSeq);
-            }
-            emit si_stopMsaChanging(false);
-        }
-        scribbling = false;
-    } else {
-        emit si_stopMsaChanging(false);
-    }
-    ui->seqArea->getVBar()->setupRepeatAction(QAbstractSlider::SliderNoAction);
-
-    QWidget::mouseReleaseEvent(e);
-}
-
-void MSAEditorNameList::updateSelection(int newSeq) {
-    CHECK(ui->seqArea->isSeqInRange(newSeq) || ui->seqArea->isSeqInRange(curSeq), );
-
-    int startSeq = qMin(curSeq, newSeq);
-    int width = editor->getAlignmentLen();
-    int height = qAbs(newSeq - curSeq) + 1;
-    MSAEditorSelection selection(0, startSeq, width, height);
-    ui->seqArea->setSelection(selection);
-}
-
-void MSAEditorNameList::wheelEvent(QWheelEvent *we) {
-    bool toMin = we->delta() > 0;
-    ui->seqArea->getVBar()->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
-    QWidget::wheelEvent(we);
-}
-
-void MSAEditorNameList::sl_startChanged(const QPoint& p, const QPoint& prev) {
-    if (p.y() == prev.y()) {
-        return;
-    }
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorNameList::sl_referenceSeqChanged(qint64) {
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorNameList::updateContent() {
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorNameList::sl_selectionChanged(const MSAEditorSelection& current, const MSAEditorSelection& prev)
-{
-    Q_UNUSED(current);
-    Q_UNUSED(prev);
-
-    if (current.y() == prev.y() && current.height() == prev.height()) {
-        return;
-    }
-    completeRedraw = true;
-    update();
-    updateActions();
-}
-
-void MSAEditorNameList::focusInEvent(QFocusEvent* fe) {
-    QWidget::focusInEvent(fe);
-    update();
-}
-
-void MSAEditorNameList::focusOutEvent(QFocusEvent* fe) {
-    QWidget::focusOutEvent(fe);
-    update();
-}
-
-void MSAEditorNameList::sl_fontChanged() {
-    completeRedraw = true;
-    updateScrollBar();
-    update();
-}
-
-void MSAEditorNameList::sl_modelChanged() {
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorNameList::sl_onGroupColorsChanged(const GroupColorSchema& colors) {
-    groupColors = colors;
-    completeRedraw = true;
-    update();
-}
-
-//////////////////////////////////////////////////////////////////////////
-// draw methods
-QFont MSAEditorNameList::getFont(bool selected) const {
-    QFont f = ui->editor->getFont();
-    f.setItalic(true);
-    if (selected) {
-        f.setBold(true);
-    }
-    return f;
-}
-
-QRect MSAEditorNameList::calculateTextRect(const U2Region& yRange, bool selected) const {
-    int w = width();
-    int textX = MARGIN_TEXT_LEFT;
-    int textW = w - MARGIN_TEXT_LEFT;
-    int textY = yRange.startPos + MARGIN_TEXT_TOP;
-    int textH = yRange.length - MARGIN_TEXT_TOP - MARGIN_TEXT_BOTTOM;
-    QRect textRect(textX, textY, textW, textH);
-    if (nhBar->isVisible()) {
-        QFontMetrics fm(getFont(selected));
-        int stepSize = fm.width('W');
-        int dx = stepSize * nhBar->value();
-        textRect = textRect.adjusted(-dx, 0, 0, 0);
-    }
-    return textRect;
-}
-
-QRect MSAEditorNameList::calculateButtonRect(const QRect& itemRect) const {
-    return QRect(itemRect.left() + CROSS_SIZE/2, itemRect.top() + (itemRect.height() - CROSS_SIZE)/2, CROSS_SIZE, CROSS_SIZE);
-}
-
-void MSAEditorNameList::drawAll() {
-    QSize s = size();
-    if (cachedView->size() != s) {
-        assert(completeRedraw);
-        delete cachedView;
-        cachedView = new QPixmap(s);
-    }
-    if (completeRedraw) {
-        QPainter pCached(cachedView);
-        drawContent(pCached);
-        completeRedraw = false;
-    }
-    QPainter p(this);
-    p.drawPixmap(0, 0, *cachedView);
-    drawSelection(p);
-    //drawFocus(p);
-}
-
-void MSAEditorNameList::drawContent(QPainter& p) {
-    p.fillRect(cachedView->rect(), Qt::white);
-
-    SAFE_POINT(NULL != ui, "MSA Editor UI is NULL", );
-    MSAEditorSequenceArea* seqArea = ui->getSequenceArea();
-    SAFE_POINT(NULL != seqArea, "MSA Editor sequence area is NULL", );
-
-    if (seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    int startSeq = seqArea->getFirstVisibleSequence();
-    int lastSeq = qBound(startSeq, seqArea->getLastVisibleSequence(true) + 1, seqArea->getNumDisplayedSequences() - 1);
-
-    if (labels) {
-        labels->setObjectName("");
-    }
-
-    MAlignmentObject* msaObj = editor->getMSAObject();
-    SAFE_POINT(NULL != msaObj, "NULL Msa Object in MSAEditorNameList::drawContent!",);
-
-    const MAlignment &al = msaObj->getMAlignment();
-
-    if (ui->isCollapsibleMode()) {
-        MSACollapsibleItemModel* m = ui->getCollapseModel();
-        QVector<U2Region> range;
-        m->getVisibleRows(startSeq, lastSeq, range);
-        U2Region yRange = seqArea->getSequenceYRange(startSeq, true);
-        int numRows = al.getNumRows();
-
-        int pos = startSeq;
-        foreach(const U2Region& r, range) {
-            int end = qMin(numRows, static_cast<int>(r.endPos()));
-            for (int s = r.startPos; s < end; s++) {
-                bool isSelected = isRowInSelection(pos);
-                drawSequenceItem(p, s, getTextForRow(s), isSelected, yRange, pos);
-                yRange.startPos += ui->editor->getRowHeight();
-                pos++;
-            }
-        }
-    } else {
-        for (int s = startSeq; s <= lastSeq; s++) {
-            bool isSelected = isRowInSelection(s);
-            drawSequenceItem(p, s, startSeq, getTextForRow(s), isSelected);
-        }
-    }
-}
-
-void MSAEditorNameList::drawSequenceItem(QPainter &p, int row, int firstVisibleRow, const QString &text, bool selected) {
-    p.setPen(Qt::black);
-    p.setFont(getFont(selected));
-
-    U2Region yRange = ui->seqArea->getSequenceYRange(row, firstVisibleRow, true);
-    QRect textRect = calculateTextRect(yRange, selected);
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    CHECK(maObj != NULL, );
-
-    p.fillRect(textRect, Qt::white);
-    if(groupColors.contains(text) && QColor(Qt::black) != groupColors[text]) {
-        p.fillRect(textRect, groupColors[text]);
-    }
-
-    U2OpStatusImpl os;
-    if (row == maObj->getMAlignment().getRowIndexByRowId(editor->getReferenceRowId(), os)) {
-        drawRefSequence(p, textRect);
-    }
-
-    p.drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, text);
-
-}
-
-void MSAEditorNameList::drawSequenceItem(QPainter& p, int s, bool selected) {
-    QString itemText = getTextForRow(s);
-    drawSequenceItem(p, s, ui->getCollapseModel()->getItemPos(ui->getSequenceArea()->getFirstVisibleSequence()), itemText, selected);
-
-    if (labels) {
-        labels->setObjectName(labels->objectName() + "|" + itemText);
-    }
-}
-
-void MSAEditorNameList::drawSequenceItem(QPainter& p, int s, const QString& , bool selected, const U2Region& yRange, int pos) {
-    p.setPen(Qt::black);
-    p.setFont(getFont(selected));
-
-    QRect textRect = calculateTextRect(yRange, selected);
-
-    MSACollapsibleItemModel const* model = ui->getCollapseModel();
-    int index = model->itemAt(pos);
-
-    QStyleOptionViewItemV2 branchOption;
-
-    int delta = 0;
-
-    if (index >= 0) {
-        branchOption.rect = calculateButtonRect(textRect);
-
-        const MSACollapsableItem& item = model->getItem(index);
-        if (item.isCollapsed) {
-            branchOption.state = QStyle::State_Children;
-        } else {
-            if (pos == model->getItemPos(index)) {
-                branchOption.state = QStyle::State_Open | QStyle::State_Children;
-            } else {
-                branchOption.rect.setTop(yRange.startPos);
-                branchOption.rect.setHeight(yRange.length);
-                int itemLastPos = model->getItemPos(index) + item.numRows - 1;
-                branchOption.state = QStyle::State_Item;
-                if (itemLastPos != pos) {
-                    branchOption.state |= QStyle::State_Sibling;
-                }
-                delta = CHILDREN_OFFSET;
-            }
-        }
-        style()->drawPrimitive(QStyle::PE_IndicatorBranch, &branchOption, &p, this);
-    }
-
-    textRect = QRect(textRect.left() + CROSS_SIZE*2 + delta, textRect.top(), textRect.width() - ((5*CROSS_SIZE)/2), textRect.height());
-    QString seqName = getTextForRow(s);
-
-    p.fillRect(textRect, Qt::white);
-    if(groupColors.contains(seqName)) {
-        if(QColor(Qt::black) != groupColors[seqName]) {
-            p.fillRect(textRect, groupColors[seqName]);
-        }
-    }
-
-    const MSAEditor *editor = ui->getEditor();
-    const MAlignment &alignment = editor->getMSAObject()->getMAlignment();
-    U2OpStatusImpl os;
-    if (s == alignment.getRowIndexByRowId(editor->getReferenceRowId(), os)) {
-        drawRefSequence(p, textRect);
-    }
-
-    p.drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, seqName);
-    if (labels) {
-        labels->setObjectName(labels->objectName() + "|" + seqName);
-    }
-}
-
-void MSAEditorNameList::drawRefSequence(QPainter &p, QRect r){
-    p.fillRect(r, QColor("#9999CC"));
-}
-
-QString MSAEditorNameList::getTextForRow(int s) {
-    MAlignmentObject* maObj = editor->getMSAObject();
-    const MAlignment& ma = maObj->getMAlignment();
-    const MAlignmentRow& row = ma.getRow(s);
-
-    return row.getName();
-}
-
-QString MSAEditorNameList::getSeqName(int s) {
-    return getTextForRow(s);
-}
-
-void MSAEditorNameList::drawSelection(QPainter& p) {
-    MSAEditorSelection sel = ui->seqArea->getSelection();
-
-    if (sel.height() == 0) {
-        return;
-    }
-
-    int startPos = sel.y();
-    int w = width();
-
-    U2Region yRange = ui->seqArea->getSequenceYRange(startPos, true);
-    QRect itemsRect(0, yRange.startPos, w - 1, sel.height()*yRange.length -1);
-
-    p.setPen(QPen(Qt::gray, 1, Qt::DashLine));
-    p.drawRect(itemsRect);
-}
-
-void MSAEditorNameList::drawFocus(QPainter& p) {
-    if (hasFocus()) {
-        p.setPen(QPen(Qt::black, 1, Qt::DotLine));
-        p.drawRect(0, 0, width()-1, height()-1);
-    }
-}
-
-void MSAEditorNameList::sl_onScrollBarActionTriggered(int scrollAction)
-{
-    if (scrollAction ==  QAbstractSlider::SliderSingleStepAdd || scrollAction == QAbstractSlider::SliderSingleStepSub) {
-        if (scribbling) {
-            // TODO: sync origin point
-            /*int y = origin.y();
-            int step = ui->seqArea->getVBar()->singleStep();
-            if (scrollAction == QAbstractSlider::SliderSingleStepAdd) {
-                origin.setY(y - step);
-            } else {
-                origin.setY(y + step);
-            }*/
-        }
-    }
-}
-
-void MSAEditorNameList::sl_editSequenceName()
-{
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj->isStateLocked()) {
-        return;
-    }
-
-    bool ok = false;
-    int n = getSelectedRow();
-    if (n<0) {
-        return;
-    }
-    const MAlignmentRow& row = maObj->getMAlignment().getRow(n);
-    QString curName = row.getName();
-    QString newName = QInputDialog::getText(this, tr("Rename"),
-            tr("New sequence name:"), QLineEdit::Normal, curName, &ok);
-    if (ok && !newName.isEmpty() && curName != newName) {
-        emit si_sequenceNameChanged(curName, newName);
-        maObj->renameRow(n,newName);
-    }
-}
-
-void MSAEditorNameList::mouseDoubleClickEvent(QMouseEvent *e) {
-    Q_UNUSED(e);
-    if (e->button() == Qt::LeftButton) {
-        sl_editSequenceName();
-    }
-}
-
-void MSAEditorNameList::moveSelectedRegion(int shift) {
-    if (shift == 0) {
-        return;
-    }
-
-    int numRowsInSelection = ui->seqArea->getSelection().height();
-    int firstRowInSelection = ui->seqArea->getSelection().y();
-    int lastRowInSelection = firstRowInSelection + numRowsInSelection - 1;
-
-    // "out-of-range" checks
-    if ((shift > 0 && lastRowInSelection + shift >= editor->getNumSequences())
-        || (shift < 0 && firstRowInSelection + shift < 0)
-        || (shift < 0 && firstRowInSelection + qAbs(shift) > editor->getNumSequences()))
-    {
-        return;
-    }
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (!maObj->isStateLocked()) {
-        maObj->moveRowsBlock(firstRowInSelection, numRowsInSelection, shift);
-        curSeq += shift;
-        startSelectingSeq = curSeq;
-        int selectionStart = firstRowInSelection + shift;
-        MSAEditorSelection selection(0, selectionStart, editor->getAlignmentLen(), numRowsInSelection);
-        ui->seqArea->setSelection(selection);
-    }
-}
-
-bool MSAEditorNameList::isRowInSelection(int seqnum) {
-    MSAEditorSelection s = ui->seqArea->getSelection();
-    int endPos = s.y() + s.height() - 1;
-    return seqnum >= s.y() && seqnum <= endPos;
-}
-
-qint64 MSAEditorNameList::sequenceIdAtPos(const QPoint &p) {
-    qint64 result = MAlignmentRow::invalidRowId();
-    curSeq = ui->seqArea->getSequenceNumByY(p.y());
-    if (!ui->seqArea->isSeqInRange(curSeq)) {
-        return result;
-    }
-    if (ui->isCollapsibleMode()) {
-        curSeq = ui->getCollapseModel()->mapToRow(curSeq);
-    }
-    if (curSeq != -1) {
-        MAlignmentObject* maObj = editor->getMSAObject();
-        result = maObj->getMAlignment().getRow(curSeq).getRowId();
-    }
-    return result;
-}
-
-void MSAEditorNameList::clearGroupsSelections() {
-    groupColors.clear();
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.h b/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.h
deleted file mode 100644
index 08694f0..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorNameList.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_NAME_LIST_H_
-#define _U2_MSA_EDITOR_NAME_LIST_H_
-
-#include "MSACollapsibleModel.h"
-
-#include <U2Core/global.h>
-#include <U2Core/U2Region.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QScrollBar>
-#include <QtGui/QRubberBand>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QRubberBand>
-#endif
-
-#include "PhyTrees/MSAEditorTreeViewer.h"
-
-namespace U2 {
-
-
-class MSAEditor;
-class MSAEditorUI;
-class GObjectView;
-class MAlignment;
-class MAlignmentModInfo;
-class MSAEditorSelection;
-
-class U2VIEW_EXPORT MSAEditorNameList: public QWidget {
-    Q_OBJECT
-    Q_DISABLE_COPY(MSAEditorNameList)
-public:
-    MSAEditorNameList(MSAEditorUI* ui, QScrollBar* nhBar);
-    virtual ~MSAEditorNameList();
-
-    void drawNames( QPixmap &p, const QList<qint64>& seqIdx, bool drawSelection = false);
-    void drawNames(QPainter& p, const QList<qint64>& seqIdx, bool drawSelection = false);
-
-private slots:
-    virtual void sl_buildStaticMenu(GObjectView* v, QMenu* m);
-    virtual void sl_buildContextMenu(GObjectView* v, QMenu* m);
-    void sl_copyCurrentSequence();
-    void sl_editSequenceName();
-    void sl_lockedStateChanged();
-    void sl_removeSequence();
-    void sl_selectReferenceSequence();
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&);
-    void sl_onScrollBarActionTriggered( int scrollAction );
-    void sl_referenceSeqChanged(qint64);
-
-    void sl_startChanged(const QPoint& p, const QPoint& prev);
-    void sl_selectionChanged(const MSAEditorSelection& current, const MSAEditorSelection& prev);
-
-    void sl_nameBarMoved(int n);
-    void sl_fontChanged();
-    void sl_modelChanged();
-
-    void sl_onGroupColorsChanged(const GroupColorSchema&);
-protected:
-    void updateContent();
-    virtual void updateScrollBar();
-
-protected:
-    void resizeEvent(QResizeEvent* e);
-    void paintEvent(QPaintEvent* e);
-    void keyPressEvent (QKeyEvent *e);
-    void mousePressEvent(QMouseEvent *e);
-    void mouseMoveEvent(QMouseEvent* e);
-    void mouseReleaseEvent(QMouseEvent *e);
-    void mouseDoubleClickEvent(QMouseEvent *e);
-    void focusOutEvent(QFocusEvent* fe);
-    void focusInEvent(QFocusEvent* fe);
-    void wheelEvent (QWheelEvent * we);
-    //todo context menu?
-    int getSelectedRow() const;
-    virtual QString getTextForRow(int s);
-    virtual QString getSeqName(int s);
-
-    bool                completeRedraw;
-
-public:
-    void drawContent(QPainter& p);
-    qint64 sequenceIdAtPos(const QPoint &p);
-    void clearGroupsSelections();
-
-signals:
-    void si_sequenceNameChanged(QString prevName, QString newName);
-    void si_startMsaChanging();
-    void si_stopMsaChanging(bool modified);
-
-private:
-    bool isRowInSelection(int row);
-    void updateActions();
-    void buildMenu(QMenu* m);
-    void updateSelection(int newSeqNum);
-    void moveSelectedRegion( int shift );
-    void drawAll();
-    void drawSelection(QPainter& p);
-    void drawSequenceItem(QPainter& p, int row, int firstVisibleRow, const QString& text, bool selected);
-    void drawSequenceItem(QPainter& p, int s, bool selected);
-    void drawSequenceItem(QPainter& p, int s, const QString& name, bool selected, const U2Region& yRange, int pos);
-    virtual void drawRefSequence(QPainter &p, QRect r);
-    void drawFocus(QPainter& p);
-    QFont getFont(bool selected) const;
-    QRect calculateTextRect(const U2Region& yRange, bool selected) const;
-    QRect calculateButtonRect(const QRect& itemRect) const;
-
-    QObject*            labels; // used in GUI tests
-    MSAEditorUI*        ui;
-    QScrollBar*         nhBar;
-    int                 curSeq;
-    int                 startSelectingSeq;
-    QPoint              origin;
-    bool                scribbling;
-    bool                shifting;
-    bool                singleSelecting;
-    GroupColorSchema    groupColors;
-
-    QRubberBand*        rubberBand;
-    QAction*            editSequenceNameAction;
-    QAction*            copyCurrentSequenceAction;
-    QAction*            removeSequenceAction;
-    QPixmap*            cachedView;
-
-    static const int CROSS_SIZE = 9;
-    static const int CHILDREN_OFFSET = 8;
-protected:
-    MSAEditor*          editor;
-
-};
-
-}//namespace
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.cpp
index 52b45d4..7406263 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,53 +25,55 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
+#include "MaEditorNameList.h"
+#include "McaEditor.h"
 #include "MSAEditor.h"
-#include "MSAEditorNameList.h"
-#include "MSAEditorSequenceArea.h"
-
 #include "MSAEditorOffsetsView.h"
+#include "MSAEditorSequenceArea.h"
+#include "helpers/DrawHelper.h"
+#include "helpers/RowHeightController.h"
+#include "helpers/ScrollController.h"
 
 namespace U2 {
 
-#define SETTINGS_ROOT QString("msaeditor/")
-
 #define SETTINGS_SHOW_OFFSETS "show_offsets"
 
-MSAEditorOffsetsViewController::MSAEditorOffsetsViewController(QObject* p, MSAEditor* ed, MSAEditorSequenceArea* sa)
-    : QObject(p)
+MSAEditorOffsetsViewController::MSAEditorOffsetsViewController(MaEditorWgt* maEditorUi, MaEditor* ed, MaEditorSequenceArea* sa)
+    : QObject(maEditorUi)
 {
     seqArea = sa;
     editor = ed;
 
-    lw = new MSAEditorOffsetsViewWidget(ed, seqArea, true);
+    lw = new MSAEditorOffsetsViewWidget(maEditorUi, ed, seqArea, true);
     lw->setObjectName("msa_editor_offsets_view_widget_left");
-    rw = new MSAEditorOffsetsViewWidget(ed, seqArea, false);
+    rw = new MSAEditorOffsetsViewWidget(maEditorUi, ed, seqArea, false);
     rw->setObjectName("msa_editor_offsets_view_widget_right");
 
-    connect(seqArea, SIGNAL(si_startChanged(const QPoint&,const QPoint&)), SLOT(sl_startChanged(const QPoint&,const QPoint&)));
-    connect(editor, SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_fontChanged()));
+    connect(maEditorUi->getScrollController(), SIGNAL(si_visibleAreaChanged()), SLOT(sl_updateOffsets()));
+    connect(editor, SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_updateOffsets()));
 
-    MAlignmentObject *mobj = editor->getMSAObject();
+    MultipleAlignmentObject *mobj = editor->getMaObject();
     SAFE_POINT(NULL != mobj, L10N::nullPointerError("multiple alignment object"), );
-    connect(mobj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
+    connect(mobj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+        SLOT(sl_updateOffsets()));
 
     seqArea->installEventFilter(this);
 
     Settings* s = AppContext::getSettings();
-    bool showOffsets = s->getValue(SETTINGS_ROOT + SETTINGS_SHOW_OFFSETS, true).toBool();
+    bool showOffsets = s->getValue(editor->getSettingsRoot() + SETTINGS_SHOW_OFFSETS, true).toBool();
 
     viewAction = new QAction(tr("Show offsets"), this);
     viewAction->setObjectName("show_offsets");
     viewAction->setCheckable(true);
     viewAction->setChecked(showOffsets);
     connect(viewAction, SIGNAL(triggered(bool)), SLOT(sl_showOffsets(bool)));
-    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_refSeqChanged(qint64)));
-
+    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_updateOffsets()));
+    connect(editor, SIGNAL(si_completeUpdate()), SLOT(sl_updateOffsets()));
     updateOffsets();
 }
 
@@ -87,23 +89,7 @@ QAction * MSAEditorOffsetsViewController::getToggleColumnsViewAction() const {
     return viewAction;
 }
 
-void MSAEditorOffsetsViewController::sl_alignmentChanged(const MAlignment &, const MAlignmentModInfo &) {
-    updateOffsets();
-}
-
-void MSAEditorOffsetsViewController::sl_startChanged(const QPoint &, const QPoint &) {
-    updateOffsets();
-}
-
-void MSAEditorOffsetsViewController::sl_fontChanged() {
-    updateOffsets();
-}
-
-void MSAEditorOffsetsViewController::sl_modelChanged() {
-    updateOffsets();
-}
-
-void MSAEditorOffsetsViewController::sl_refSeqChanged(qint64) {
+void MSAEditorOffsetsViewController::sl_updateOffsets() {
     updateOffsets();
 }
 
@@ -119,7 +105,8 @@ bool MSAEditorOffsetsViewController::eventFilter(QObject* o, QEvent* e) {
 void MSAEditorOffsetsViewController::sl_showOffsets(bool show) {
     updateOffsets();
     Settings* s = AppContext::getSettings();
-    s->setValue(SETTINGS_ROOT + SETTINGS_SHOW_OFFSETS, show);
+    SAFE_POINT(s != NULL, "AppContext settings is NULL", );
+    s->setValue(editor->getSettingsRoot() + SETTINGS_SHOW_OFFSETS, show);
 }
 
 void MSAEditorOffsetsViewController::updateOffsets() {
@@ -133,15 +120,23 @@ void MSAEditorOffsetsViewController::updateOffsets() {
     rw->updateView();
 }
 
-MSAEditorOffsetsViewWidget::MSAEditorOffsetsViewWidget(MSAEditor *ed, MSAEditorSequenceArea* sa, bool sp)
-    : seqArea(sa), editor(ed), showStartPos(sp), completeRedraw(true)
+MSAEditorOffsetsViewWidget::MSAEditorOffsetsViewWidget(MaEditorWgt *maEditorUi, MaEditor *ed, MaEditorSequenceArea* sa, bool sp)
+    : seqArea(sa),
+      editor(ed),
+      showStartPos(sp),
+      completeRedraw(true)
 {
+    connect(maEditorUi, SIGNAL(si_completeRedraw()), SLOT(sl_completeRedraw()));
+}
 
+void MSAEditorOffsetsViewWidget::sl_completeRedraw() {
+    completeRedraw = true;
+    update();
 }
 
 #define OFFS_WIDGET_BORDER 3
 void MSAEditorOffsetsViewWidget::updateView() {
-    const int aliLen = editor->getMSAObject()->getLength();
+    const int aliLen = editor->getMaObject()->getLength();
     QFont f = getOffsetsFont();
     QFontMetrics fm(f, this);
     int aliLenStrLen = int(log10((double)aliLen)) + 1;
@@ -154,9 +149,10 @@ void MSAEditorOffsetsViewWidget::updateView() {
 
 void MSAEditorOffsetsViewWidget::paintEvent(QPaintEvent*) {
     SAFE_POINT(isVisible(), "Attempting to paint an invisible widget", );
-    const QSize s = size();
+    const QSize s = size() * devicePixelRatio();
     if (s != cachedView.size()) {
         cachedView = QPixmap(s);
+        cachedView.setDevicePixelRatio(devicePixelRatio());
         completeRedraw = true;
     }
     if (completeRedraw) {
@@ -175,14 +171,13 @@ QFont MSAEditorOffsetsViewWidget::getOffsetsFont() {
 }
 
 int MSAEditorOffsetsViewWidget::getBaseCounts(int seqNum, int aliPos, bool inclAliPos) const {
-    const MAlignment &ma = editor->getMSAObject()->getMAlignment();
-    const MAlignmentRow &row = ma.getRow(seqNum);
+    const MultipleAlignmentRow &row = editor->getMaObject()->getRow(seqNum);
     const int endPos = inclAliPos ? aliPos + 1 : aliPos;
 
-    return (endPos < row.getCoreStart()) ? 0 : row.getBaseCount(endPos);
+    return (endPos < row->getCoreStart()) ? 0 : row->getBaseCount(endPos);
 }
 
-void MSAEditorOffsetsViewWidget::drawAll(QPainter& p) {
+void MSAEditorOffsetsViewWidget::drawAll(QPainter& painter) {
     QLinearGradient gradient(0, 0, width(), 0);
     QColor lg(0xDA, 0xDA, 0xDA);
     QColor dg(0x4A, 0x4A, 0x4A);
@@ -190,70 +185,54 @@ void MSAEditorOffsetsViewWidget::drawAll(QPainter& p) {
     gradient.setColorAt(0.25, Qt::white);
     gradient.setColorAt(0.75, Qt::white);
     gradient.setColorAt(1.00, lg);
-    p.fillRect(rect(), QBrush(gradient));
+    painter.fillRect(rect(), QBrush(gradient));
 
-    int w = width();
+    const int widgetWidth = width();
 
-    QFont f = getOffsetsFont();
-    QFontMetrics fm(f,this);
-    p.setFont(f);
+    QFont font = getOffsetsFont();
+    QFontMetrics fm(font,this);
+    painter.setFont(font);
 
-    int nSeqVisible = seqArea->getNumVisibleSequences(true);
-    int startSeq = seqArea->getFirstVisibleSequence();
-    int aliLen = editor->getMSAObject()->getLength();
+    MaEditorWgt* ui = editor->getUI();
+    int alignmentLength = editor->getMaObject()->getLength();
     int lbw = fm.width('[');
     int rbw = fm.width(']');
-    int pos = showStartPos ? seqArea->getFirstVisibleBase() : seqArea->getLastVisibleBase(true, true);
-
-    QVector<U2Region> visibleRows;
-    MSAEditorUI* ui = editor->getUI();
-    if (ui->isCollapsibleMode()) {
-        MSACollapsibleItemModel* m = ui->getCollapseModel();
-        int lastSeq = seqArea->getLastVisibleSequence(true);
-        m->getVisibleRows(startSeq, lastSeq, visibleRows);
-    } else {
-        visibleRows.append(U2Region(startSeq, nSeqVisible));
-    }
+    int pos = showStartPos ? ui->getScrollController()->getFirstVisibleBase(true) : ui->getScrollController()->getLastVisibleBase(seqArea->width(), true);
+
+    QList<int> visibleRows = ui->getDrawHelper()->getVisibleRowsIndexes(height());
 
-    int i=0;
-    const MSAEditor *editor = ui->getEditor();
-    const MAlignment &alignment = editor->getMSAObject()->getMAlignment();
+    const MultipleAlignment alignment = editor->getMaObject()->getMultipleAlignment();
     U2OpStatusImpl os;
-    const int refSeq = alignment.getRowIndexByRowId(editor->getReferenceRowId(), os);
-
-    const qint64 numRows = editor->getMSAObject()->getNumRows();
-    foreach(const U2Region& r, visibleRows) {
-        int end = static_cast<int>(qMin(r.endPos(), numRows));
-        for (int row = r.startPos; row < end; row++) {
-            U2Region yRange = seqArea->getSequenceYRange(startSeq + i, true);
-            int offs = getBaseCounts(row, pos, !showStartPos);
-            int seqSize = getBaseCounts(row, aliLen - 1, true);
-            QString  offset = QString::number(offs + 1);
-            if (showStartPos && offs == 0) {
-                p.setPen(Qt::black);
-                QRect lbr(OFFS_WIDGET_BORDER, yRange.startPos, lbw, yRange.length);
-                if (i == refSeq){
-                    drawRefSequence(p, lbr);
-                }
-                p.drawText(lbr, Qt::AlignCenter, "[");
-            } else if (!showStartPos && offs == seqSize) {
-                p.setPen(Qt::black);
-                QRect rbr(w - OFFS_WIDGET_BORDER - rbw, yRange.startPos, rbw, yRange.length);
-                if (row == refSeq){
-                    drawRefSequence(p, rbr);
-                }
-                p.drawText(rbr, Qt::AlignCenter, "]");
-                offset = QString::number(offs);
-            } else {
-                p.setPen(dg);
+    const int refSeq = alignment->getRowIndexByRowId(editor->getReferenceRowId(), os);
+
+    foreach (const int rowNumber, visibleRows) {
+        const U2Region yRange = ui->getRowHeightController()->getRowScreenRange(rowNumber);
+        int offs = getBaseCounts(rowNumber, pos, !showStartPos);
+        int seqSize = getBaseCounts(rowNumber, alignmentLength - 1, true);
+        QString offset = offs + 1 > seqSize ? QString::number(seqSize) : QString::number(offs + 1);
+        if (showStartPos && offs == 0) {
+            painter.setPen(Qt::black);
+            QRect lbr(OFFS_WIDGET_BORDER, yRange.startPos, lbw, yRange.length);
+            if (rowNumber == refSeq){
+                drawRefSequence(painter, lbr);
             }
-            QRect tr(OFFS_WIDGET_BORDER + (showStartPos ? lbw : 0), yRange.startPos, w - 2 * OFFS_WIDGET_BORDER - (showStartPos ? lbw : rbw), yRange.length);
-            if (row == refSeq){
-                drawRefSequence(p, tr);
+            painter.drawText(lbr, Qt::AlignTop, "[");
+        } else if (!showStartPos && offs == seqSize) {
+            painter.setPen(Qt::black);
+            QRect rbr(widgetWidth - OFFS_WIDGET_BORDER - rbw, yRange.startPos, rbw, yRange.length);
+            if (rowNumber == refSeq){
+                drawRefSequence(painter, rbr);
             }
-            p.drawText(tr, Qt::AlignRight | Qt::AlignVCenter, offset);
-            i++;
+            painter.drawText(rbr, Qt::AlignTop, "]");
+            offset = QString::number(offs);
+        } else {
+            painter.setPen(dg);
         }
+        QRect tr(OFFS_WIDGET_BORDER + (showStartPos ? lbw : 0), yRange.startPos, widgetWidth - 2 * OFFS_WIDGET_BORDER - (showStartPos ? lbw : rbw), yRange.length);
+        if (rowNumber == refSeq){
+            drawRefSequence(painter, tr);
+        }
+        painter.drawText(tr, Qt::AlignRight | Qt::AlignTop, offset);
     }
 }
 
@@ -261,6 +240,4 @@ void MSAEditorOffsetsViewWidget::drawRefSequence(QPainter &p, const QRect &r){
     p.fillRect(r, QColor("#9999CC"));
 }
 
-
 }//namespace
-
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.h b/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.h
index 649439f..74f8ecc 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorOffsetsView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,19 +24,21 @@
 
 #include <QWidget>
 
+#include <U2Core/MultipleSequenceAlignment.h>
+
 namespace U2 {
 
-class MSAEditor;
-class MAlignmentObject;
-class MAlignment;
-class MAlignmentModInfo;
-class MSAEditorSequenceArea;
+class MaEditor;
+class MaEditorWgt;
 class MSAEditorOffsetsViewWidget;
+class MaEditorSequenceArea;
+class MaModificationInfo;
+class MultipleSequenceAlignmentObject;
 
-class MSAEditorOffsetsViewController : public QObject {
+class U2VIEW_EXPORT MSAEditorOffsetsViewController : public QObject {
     Q_OBJECT
 public:
-    MSAEditorOffsetsViewController(QObject* p, MSAEditor* editor, MSAEditorSequenceArea* seqArea);
+    MSAEditorOffsetsViewController(MaEditorWgt *maEditorUi, MaEditor* editor, MaEditorSequenceArea* seqArea);
 
     MSAEditorOffsetsViewWidget* getLeftWidget() const;
     MSAEditorOffsetsViewWidget* getRightWidget() const;
@@ -45,27 +47,27 @@ public:
     bool eventFilter(QObject* o, QEvent* e);
 
 private slots:
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&);
-    void sl_startChanged(const QPoint& , const QPoint& );
-    void sl_fontChanged();
-    void sl_modelChanged();
-    void sl_refSeqChanged(qint64);
+    void sl_updateOffsets();
     void sl_showOffsets(bool);
 
 private:
     void updateOffsets();
 
-    MSAEditorSequenceArea*      seqArea;
-    MSAEditor*                  editor;
+    MaEditorSequenceArea*       seqArea;
+    MaEditor*                   editor;
     MSAEditorOffsetsViewWidget* lw;
     MSAEditorOffsetsViewWidget* rw;
     QAction*                    viewAction;
 };
 
 class MSAEditorOffsetsViewWidget : public QWidget {
+    Q_OBJECT
     friend class MSAEditorOffsetsViewController;
 public:
-    MSAEditorOffsetsViewWidget(MSAEditor *editor, MSAEditorSequenceArea *seqArea, bool showStartPos);
+    MSAEditorOffsetsViewWidget(MaEditorWgt *maEditorUi, MaEditor *editor, MaEditorSequenceArea *seqArea, bool showStartPos);
+
+private slots:
+    void sl_completeRedraw();
 
 protected:
     void paintEvent(QPaintEvent *e);
@@ -77,8 +79,8 @@ protected:
 private:
     int getBaseCounts(int seqNum, int aliPos, bool inclAliPos) const;
 
-    MSAEditorSequenceArea *     seqArea;
-    MSAEditor *                 editor;
+    MaEditorSequenceArea *      seqArea;
+    MaEditor *                  editor;
     bool                        showStartPos;
     bool                        completeRedraw;
     QPixmap                     cachedView;
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.cpp
index 7b9f0ce..fc89234 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,43 +19,33 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSAEditorOverviewArea.h"
+#include <QActionGroup>
+#include <QContextMenuEvent>
+#include <QVBoxLayout>
 
 #include "MSAEditor.h"
+#include "MSAEditorOverviewArea.h"
 #include "MSAEditorSequenceArea.h"
-#include "Overview/MSASimpleOverview.h"
-#include "Overview/MSAGraphOverview.h"
-#include "Overview/MSAOverviewContextMenu.h"
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QActionGroup>
-#else
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QActionGroup>
-#endif
+#include "Overview/MaGraphOverview.h"
+#include "Overview/MaOverviewContextMenu.h"
+#include "Overview/MaSimpleOverview.h"
 
 namespace U2 {
 
 const QString MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME  = "msa_overview_area";
 
-MSAEditorOverviewArea::MSAEditorOverviewArea(MSAEditorUI *ui) {
-    setObjectName(OVERVIEW_AREA_OBJECT_NAME);
-
-    simpleOverview = new MSASimpleOverview(ui);
-    graphOverview = new MSAGraphOverview(ui);
+MSAEditorOverviewArea::MSAEditorOverviewArea(MaEditorWgt *ui)
+    : MaEditorOverviewArea(ui, OVERVIEW_AREA_OBJECT_NAME)
+{
+    graphOverview = new MaGraphOverview(ui);
+    graphOverview->setObjectName(OVERVIEW_AREA_OBJECT_NAME + QString("_graph"));
 
+    simpleOverview = new MaSimpleOverview(ui);
     simpleOverview->setObjectName(OVERVIEW_AREA_OBJECT_NAME + QString("_simple"));
-    graphOverview->setObjectName(OVERVIEW_AREA_OBJECT_NAME + QString("_graph"));
 
-    QVBoxLayout* layout = new QVBoxLayout();
-    layout->setMargin(0);
-    layout->setSpacing(0);
-    layout->addWidget(simpleOverview);
-    layout->addWidget(graphOverview);
-    setLayout(layout);
+    addOverview(simpleOverview);
+    addOverview(graphOverview);
 
-    connect(ui, SIGNAL(customContextMenuRequested(QPoint)), SLOT(sl_onContextMenuRequested(QPoint)));
     connect(ui->getSequenceArea(), SIGNAL(si_highlightingChanged()),
             simpleOverview, SLOT(sl_highlightingChanged()));
     connect(ui->getSequenceArea(), SIGNAL(si_highlightingChanged()),
@@ -65,40 +55,32 @@ MSAEditorOverviewArea::MSAEditorOverviewArea(MSAEditorUI *ui) {
     connect(ui->getEditor(), SIGNAL(si_referenceSeqChanged(qint64)),
             simpleOverview, SLOT(sl_highlightingChanged()));
 
-    contextMenu =  new MSAOverviewContextMenu(simpleOverview, graphOverview);
+    contextMenu = new MaOverviewContextMenu(this, simpleOverview, graphOverview);
+    setContextMenuPolicy(Qt::DefaultContextMenu);
 
-    connect(contextMenu, SIGNAL(si_graphTypeSelected(MSAGraphOverviewDisplaySettings::GraphType)),
-            graphOverview, SLOT(sl_graphTypeChanged(MSAGraphOverviewDisplaySettings::GraphType)));
+    connect(contextMenu, SIGNAL(si_graphTypeSelected(MaGraphOverviewDisplaySettings::GraphType)),
+            graphOverview, SLOT(sl_graphTypeChanged(MaGraphOverviewDisplaySettings::GraphType)));
     connect(contextMenu, SIGNAL(si_colorSelected(QColor)),
             graphOverview, SLOT(sl_graphColorChanged(QColor)));
-    connect(contextMenu, SIGNAL(si_graphOrientationSelected(MSAGraphOverviewDisplaySettings::OrientationMode)),
-            graphOverview, SLOT(sl_graphOrientationChanged(MSAGraphOverviewDisplaySettings::OrientationMode)));
-    connect(contextMenu, SIGNAL(si_calculationMethodSelected(MSAGraphCalculationMethod)),
-            graphOverview, SLOT(sl_calculationMethodChanged(MSAGraphCalculationMethod)));
+    connect(contextMenu, SIGNAL(si_graphOrientationSelected(MaGraphOverviewDisplaySettings::OrientationMode)),
+            graphOverview, SLOT(sl_graphOrientationChanged(MaGraphOverviewDisplaySettings::OrientationMode)));
+    connect(contextMenu, SIGNAL(si_calculationMethodSelected(MaGraphCalculationMethod)),
+            graphOverview, SLOT(sl_calculationMethodChanged(MaGraphCalculationMethod)));
 
-    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
     setMaximumHeight( graphOverview->FIXED_HEIGHT + simpleOverview->FIXED_HEIGTH + 5 );
 }
 
-void MSAEditorOverviewArea::cancelRendering() {
-    graphOverview->cancelRendering();
-}
-
-bool MSAEditorOverviewArea::isOverviewWidget(QWidget *wgt) const {
-    if (wgt == simpleOverview || wgt == graphOverview || wgt == this) {
-        return true;
-    }
-    return false;
+void MSAEditorOverviewArea::contextMenuEvent(QContextMenuEvent *event) {
+    contextMenu->exec(event->globalPos());
 }
 
-void MSAEditorOverviewArea::sl_onContextMenuRequested(const QPoint &p) {
-    if (geometry().contains(p)) {
-        contextMenu->exec(QCursor::pos());
-    }
+void MSAEditorOverviewArea::cancelRendering() {
+    graphOverview->cancelRendering();
+    MaEditorOverviewArea::cancelRendering();
 }
 
 void MSAEditorOverviewArea::sl_show() {
-    setVisible( !isVisible() );
+    MaEditorOverviewArea::sl_show();
     if (graphOverview->isVisible()) {
         graphOverview->sl_unblockRendering(true);
     } else {
@@ -107,4 +89,4 @@ void MSAEditorOverviewArea::sl_show() {
     }
 }
 
-} // namespace
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.h b/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.h
index b9668ba..bb5fa67 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorOverviewArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,41 +22,38 @@
 #ifndef _U2_MSA_EDITOR_OVERVIEW_H_
 #define _U2_MSA_EDITOR_OVERVIEW_H_
 
+#include "Overview/MaEditorOverviewArea.h"
+
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QWidget>
-#endif
+#include <QAction>
+#include <QWidget>
 
 namespace U2 {
 
-class MSAEditorUI;
-class MSASimpleOverview;
-class MSAGraphOverview;
-class MSAOverviewContextMenu;
+class MaEditorWgt;
+class MaSangerOverview;
+class MaSimpleOverview;
+class MaGraphOverview;
+class MaOverviewContextMenu;
 
-class U2VIEW_EXPORT MSAEditorOverviewArea : public QWidget {
+class U2VIEW_EXPORT MSAEditorOverviewArea : public MaEditorOverviewArea {
     Q_OBJECT
 public:
-    MSAEditorOverviewArea(MSAEditorUI* ui);
-    void cancelRendering();
-    bool isOverviewWidget(QWidget* wgt) const;
+    MSAEditorOverviewArea(MaEditorWgt* ui);
 
-    MSASimpleOverview* getSimpleOverview() const { return simpleOverview; }
-    MSAGraphOverview* getGraphOverview() const { return graphOverview; }
+    void contextMenuEvent(QContextMenuEvent *event);
+    void cancelRendering();
 
     static const QString OVERVIEW_AREA_OBJECT_NAME;
-public slots:
-    void sl_onContextMenuRequested(const QPoint& p);
+
+private slots:
     void sl_show();
+
 private:
-    MSASimpleOverview*  simpleOverview;
-    MSAGraphOverview*   graphOverview;
-    MSAOverviewContextMenu* contextMenu;
+    MaGraphOverview*   graphOverview;
+    MaSimpleOverview*  simpleOverview;
+    MaOverviewContextMenu* contextMenu;
 };
 
 }
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
index 285fd84..4372387 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,6 +26,7 @@
 #include <QMouseEvent>
 #include <QPainter>
 #include <QTextStream>
+#include <QWidgetAction>
 
 #include <U2Algorithm/CreateSubalignmentTask.h>
 #include <U2Algorithm/MsaColorScheme.h>
@@ -42,8 +43,8 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/MsaDbiUtils.h>
 #include <U2Core/ProjectModel.h>
@@ -54,7 +55,6 @@
 #include <U2Core/Task.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/TaskWatchdog.h>
-#include <U2Core/TextUtils.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
@@ -75,50 +75,35 @@
 #include <U2Gui/ProjectTreeController.h>
 #include <U2Gui/ProjectTreeItemSelectorDialog.h>
 
-#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
-#include "Clipboard/SubalignmentToClipboardTask.h"
 #include "ColorSchemaSettingsController.h"
 #include "CreateSubalignmentDialogController.h"
-#include "Highlighting/MSAHighlightingTabFactory.h"
+#include "MaEditorNameList.h"
 #include "MSAEditor.h"
-#include "MSAEditorNameList.h"
 #include "MSAEditorSequenceArea.h"
+#include "Highlighting/MsaSchemesMenuBuilder.h"
+
+#include "AlignSequencesToAlignment/AlignSequencesToAlignmentTask.h"
+#include "Clipboard/SubalignmentToClipboardTask.h"
+#include "helpers/ScrollController.h"
+#include "Highlighting/MSAHighlightingTabFactory.h"
+#include "view_rendering/SequenceAreaRenderer.h"
 
 namespace U2 {
 
-#define SETTINGS_ROOT QString("msaeditor/")
-#define SETTINGS_COLOR_NUCL     "color_nucl"
-#define SETTINGS_COLOR_AMINO    "color_amino"
-#define SETTINGS_COLOR_RAW      "color_raw"
-#define SETTINGS_HIGHLIGHT_NUCL     "highlight_nucl"
-#define SETTINGS_HIGHLIGHT_AMINO    "highlight_amino"
-#define SETTINGS_HIGHLIGHT_RAW      "highlight_raw"
-#define SETTINGS_COPY_FORMATTED "copyformatted"
-
-MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, GScrollBar* vb)
-    : editor(_ui->editor), ui(_ui), shBar(hb), svBar(vb), editModeAnimationTimer(this), prevPressedButton(Qt::NoButton),
-    msaVersionBeforeShifting(-1), useDotsAction(NULL), colorScheme(NULL), highlightingScheme(NULL), changeTracker(editor->getMSAObject()->getEntityRef())
+MSAEditorSequenceArea::MSAEditorSequenceArea(MaEditorWgt* _ui, GScrollBar* hb, GScrollBar* vb)
+    : MaEditorSequenceArea(_ui, hb, vb)
 {
     setObjectName("msa_editor_sequence_area");
     setFocusPolicy(Qt::WheelFocus);
 
-    cachedView = new QPixmap();
-
-    completeRedraw = true;
-    selectionColor = Qt::black;
+    initRenderer();
 
-    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-    setMinimumSize(100, 100);
-    startPos = 0;
-    startSeq = 0;
-    highlightSelection = false;
-    selecting = false;
-    shifting = false;
+    connect(editor, SIGNAL(si_buildPopupMenu(GObjectView *, QMenu *)), SLOT(sl_buildContextMenu(GObjectView *, QMenu *)));
+    connect(editor, SIGNAL(si_buildStaticMenu(GObjectView *, QMenu *)), SLOT(sl_buildStaticMenu(GObjectView *, QMenu *)));
+    connect(editor, SIGNAL(si_buildStaticToolbar(GObjectView *, QToolBar *)), SLOT(sl_buildStaticToolbar(GObjectView *, QToolBar *)));
 
-    msaMode = ViewMode;
-    connect(&editModeAnimationTimer, SIGNAL(timeout()), SLOT(sl_changeSelectionColor()));
-
-    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
+    selectionColor = Qt::black;
+    editingEnabled = true;
 
     connect(ui->getCopySelectionAction(), SIGNAL(triggered()), SLOT(sl_copyCurrentSelection()));
     addAction(ui->getCopySelectionAction());
@@ -136,12 +121,6 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     addAction(delColAction);
     connect(delColAction, SIGNAL(triggered()), SLOT(sl_delCol()));
 
-    insSymAction = new QAction(tr("Fill selection with gaps"), this);
-    insSymAction->setObjectName("fill_selection_with_gaps");
-    connect(insSymAction, SIGNAL(triggered()), SLOT(sl_fillCurrentSelectionWithGaps()));
-    addAction(insSymAction);
-
-
     createSubaligniment = new QAction(tr("Save subalignment..."), this);
     createSubaligniment->setObjectName("Save subalignment");
     connect(createSubaligniment, SIGNAL(triggered()), SLOT(sl_createSubaligniment()));
@@ -187,13 +166,6 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     reverseComplementAction->setObjectName("replace_selected_rows_with_reverse-complement");
     connect(reverseComplementAction, SIGNAL(triggered()), SLOT(sl_reverseComplementCurrentSelection()));
 
-    replaceCharacterAction = new QAction(tr("Replace selected character"), this);
-    replaceCharacterAction->setObjectName("replace_selected_character");
-    replaceCharacterAction->setShortcut(QKeySequence(Qt::SHIFT | Qt::Key_R));
-    replaceCharacterAction->setShortcutContext(Qt::WidgetShortcut);
-    addAction(replaceCharacterAction);
-    connect(replaceCharacterAction, SIGNAL(triggered()), SLOT(sl_replaceSelectedCharacter()));
-
     reverseAction = new QAction(tr("Replace selected rows with reverse"), this);
     reverseAction->setObjectName("replace_selected_rows_with_reverse");
     connect(reverseAction, SIGNAL(triggered()), SLOT(sl_reverseCurrentSelection()));
@@ -202,228 +174,32 @@ MSAEditorSequenceArea::MSAEditorSequenceArea(MSAEditorUI* _ui, GScrollBar* hb, G
     complementAction->setObjectName("replace_selected_rows_with_complement");
     connect(complementAction, SIGNAL(triggered()), SLOT(sl_complementCurrentSelection()));
 
-    connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-    connect(editor->getMSAObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
-    connect(editor->getMSAObject(), SIGNAL(si_rowsRemoved(const QList<qint64> &)), SLOT(sl_updateCollapsingMode()));
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+        SLOT(sl_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)));
+    connect(editor->getMaObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
+    connect(editor->getMaObject(), SIGNAL(si_rowsRemoved(const QList<qint64> &)), SLOT(sl_updateCollapsingMode()));
 
-    connect(this,   SIGNAL(si_startMsaChanging()),
-            ui,     SIGNAL(si_startMsaChanging()));
-    connect(this,   SIGNAL(si_stopMsaChanging(bool)),
-            ui,     SIGNAL(si_stopMsaChanging(bool)));
+    connect(this,   SIGNAL(si_startMaChanging()),
+            ui,     SIGNAL(si_startMaChanging()));
+    connect(this,   SIGNAL(si_stopMaChanging(bool)),
+            ui,     SIGNAL(si_stopMaChanging(bool)));
 
-    connect(editor, SIGNAL(si_buildStaticMenu(GObjectView*, QMenu*)), SLOT(sl_buildStaticMenu(GObjectView*, QMenu*)));
-    connect(editor, SIGNAL(si_buildStaticToolbar(GObjectView*, QToolBar*)), SLOT(sl_buildStaticToolbar(GObjectView*, QToolBar*)));
-    connect(editor, SIGNAL(si_buildPopupMenu(GObjectView* , QMenu*)), SLOT(sl_buildContextMenu(GObjectView*, QMenu*)));
-    connect(editor, SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_zoomOperationPerformed(bool)));
+    connect(ui->getCollapseModel(), SIGNAL(si_toggled()), SLOT(sl_modelChanged()));
     connect(editor, SIGNAL(si_fontChanged(QFont)), SLOT(sl_fontChanged(QFont)));
-    connect(ui->getCollapseModel(), SIGNAL(toggled()), SLOT(sl_modelChanged()));
-    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_referenceSeqChanged(qint64)));
+    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_completeUpdate()));
 
-    QAction* undoAction = ui->getUndoAction();
-    QAction* redoAction = ui->getRedoAction();
-    addAction(undoAction);
-    addAction(redoAction);
-    connect(undoAction, SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
-    connect(redoAction, SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
+    connect(ui->getUndoAction(), SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
+    connect(ui->getRedoAction(), SIGNAL(triggered()), SLOT(sl_resetCollapsibleModel()));
 
-    connect(editor->getMSAObject(), SIGNAL(si_alphabetChanged(const MAlignmentModInfo &, const DNAAlphabet*)),
-        SLOT(sl_alphabetChanged(const MAlignmentModInfo &, const DNAAlphabet*)));
+    connect(editor->getMaObject(), SIGNAL(si_alphabetChanged(const MaModificationInfo &, const DNAAlphabet*)),
+        SLOT(sl_alphabetChanged(const MaModificationInfo &, const DNAAlphabet*)));
 
     updateColorAndHighlightSchemes();
-    updateActions();
-}
-
-MSAEditorSequenceArea::~MSAEditorSequenceArea() {
-    exitFromEditCharacterMode();
-    delete cachedView;
-    deleteOldCustomSchemes();
-    delete highlightingScheme;
-}
-
-void MSAEditorSequenceArea::updateColorAndHighlightSchemes() {
-    Settings* s = AppContext::getSettings();
-    if (!s || !editor){
-        return;
-    }
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (!maObj){
-        return;
-    }
-
-    const DNAAlphabet* al = maObj->getAlphabet();
-    if (!al){
-        return;
-    }
-
-    DNAAlphabetType atype = al->getType();
-    DNAAlphabetType currentAlphabet = DNAAlphabet_RAW;
-    bool colorSchemesActionsIsEmpty = colorSchemeMenuActions.isEmpty();
-    MsaColorSchemeRegistry* csr = AppContext::getMsaColorSchemeRegistry();
-    MsaHighlightingSchemeRegistry* hsr = AppContext::getMsaHighlightingSchemeRegistry();
-    if (!colorSchemesActionsIsEmpty) {
-        QString id = colorSchemeMenuActions.first()->data().toString();
-        MsaColorSchemeFactory* f = csr->getMsaColorSchemeFactoryById(id);
-        currentAlphabet = f->getAlphabetType();
-        if (currentAlphabet == atype) {
-            return;
-        }
-    }
-
-    QString csid;
-    QString hsid;
-    getColorAndHighlightingIds(csid, hsid, atype, colorSchemesActionsIsEmpty);
-    MsaColorSchemeFactory* csf = csr->getMsaColorSchemeFactoryById(csid);
-    if (csf == NULL) {
-        csf = getDefaultColorSchemeFactory();
-    }
-    SAFE_POINT(csf != NULL, "Color scheme factory is NULL", );
-    MsaHighlightingSchemeFactory* hsf = hsr->getMsaHighlightingSchemeFactoryById(hsid);
-    initColorSchemes(csf);
-    initHighlightSchemes(hsf, atype);
-}
-
-void MSAEditorSequenceArea::initHighlightSchemes(MsaHighlightingSchemeFactory* hsf, DNAAlphabetType atype) {
-    qDeleteAll(highlightingSchemeMenuActions);
-    highlightingSchemeMenuActions.clear();
-    SAFE_POINT(hsf != NULL, "Highlight scheme factory is NULL", );
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    delete highlightingScheme;
-
-    highlightingScheme = hsf->create(this, maObj);
-
-    MsaHighlightingSchemeRegistry* hsr = AppContext::getMsaHighlightingSchemeRegistry();
-    QList<MsaHighlightingSchemeFactory*> highFactories = hsr->getMsaHighlightingSchemes(atype);
-    foreach (MsaHighlightingSchemeFactory* factory, highFactories) {
-        QAction* action = new QAction(factory->getName(), this);
-        action->setObjectName(factory->getName());
-        action->setCheckable(true);
-        action->setChecked(factory == hsf);
-        action->setData(factory->getId());
-        connect(action, SIGNAL(triggered()), SLOT(sl_changeHighlightScheme()));
-        highlightingSchemeMenuActions.append(action);
-    }
-}
-
-void MSAEditorSequenceArea::initColorSchemes(MsaColorSchemeFactory *defaultColorSchemeFactory) {
-    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-    connect(msaColorSchemeRegistry, SIGNAL(si_customSettingsChanged()), SLOT(sl_registerCustomColorSchemes()));
-
-    registerCommonColorSchemes();
-    sl_registerCustomColorSchemes();
-
-    useDotsAction = new QAction(QString(tr("Use dots")), this);
-    useDotsAction->setCheckable(true);
-    useDotsAction->setChecked(false);
-    connect(useDotsAction, SIGNAL(triggered()), SLOT(sl_useDots()));
-
-    applyColorScheme(defaultColorSchemeFactory->getId());
-}
-
-void MSAEditorSequenceArea::registerCommonColorSchemes() {
-    qDeleteAll(colorSchemeMenuActions);
-    colorSchemeMenuActions.clear();
-
-    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-    QList<MsaColorSchemeFactory*> colorFactories = msaColorSchemeRegistry->getMsaColorSchemes(editor->getMSAObject()->getAlphabet()->getType());
-
-    foreach (MsaColorSchemeFactory *factory, colorFactories) {
-        QAction *action = new QAction(factory->getName(), this);
-        action->setObjectName(factory->getName());
-        action->setCheckable(true);
-        action->setData(factory->getId());
-        connect(action, SIGNAL(triggered()), SLOT(sl_changeColorScheme()));
-        colorSchemeMenuActions.append(action);
-    }
-}
-
-void MSAEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &hsid, DNAAlphabetType atype, bool isFirstInitialization) {
-    Settings* s = AppContext::getSettings();
-    switch (atype) {
-    case DNAAlphabet_RAW:
-        if (isFirstInitialization) {
-            csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_RAW, MsaColorScheme::EMPTY_RAW).toString();
-            hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_NUCL, MsaHighlightingScheme::EMPTY_RAW).toString();
-        } else {
-            csid = MsaColorScheme::EMPTY_RAW;
-            hsid = MsaHighlightingScheme::EMPTY_RAW;
-        }
-        break;
-    case DNAAlphabet_NUCL:
-        if (isFirstInitialization) {
-            csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_NUCL, MsaColorScheme::UGENE_NUCL).toString();
-            hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_NUCL, MsaHighlightingScheme::EMPTY_NUCL).toString();
-        } else {
-            csid = MsaColorScheme::UGENE_NUCL;
-            hsid = MsaHighlightingScheme::EMPTY_NUCL;
-        }
-        break;
-    case DNAAlphabet_AMINO:
-        if (isFirstInitialization) {
-            csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_AMINO, MsaColorScheme::UGENE_AMINO).toString();
-            hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_AMINO, MsaHighlightingScheme::EMPTY_AMINO).toString();
-        } else {
-            csid = MsaColorScheme::UGENE_AMINO;
-            hsid = MsaHighlightingScheme::EMPTY_AMINO;
-        }
-        break;
-    default:
-        csid = "";
-        hsid = "";
-        break;
-    }
-}
-
-void MSAEditorSequenceArea::applyColorScheme(const QString &id) {
-    CHECK(NULL != ui->editor->getMSAObject(), );
-
-    MsaColorSchemeFactory *factory = AppContext::getMsaColorSchemeRegistry()->getMsaColorSchemeFactoryById(id);
-    delete colorScheme;
-    colorScheme = factory->create(this, ui->editor->getMSAObject());
-
-    connect(factory, SIGNAL(si_factoryChanged()), SLOT(sl_colorSchemeFactoryUpdated()), Qt::UniqueConnection);
-    connect(factory, SIGNAL(destroyed(QObject *)), SLOT(sl_setDefaultColorScheme()), Qt::UniqueConnection);
-
-    QList<QAction *> tmpActions = QList<QAction *>() << colorSchemeMenuActions << customColorSchemeMenuActions;
-    foreach (QAction *action, tmpActions) {
-        action->setChecked(action->data() == id);
-    }
-
-    switch (factory->getAlphabetType()) {
-    case DNAAlphabet_RAW:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_RAW, id);
-        break;
-    case DNAAlphabet_NUCL:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_NUCL, id);
-        break;
-    case DNAAlphabet_AMINO:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_AMINO, id);
-        break;
-    default:
-        FAIL(tr("Unknown alphabet"), );
-        break;
-    }
-
-    completeRedraw = true;
-    update();
-    emit si_highlightingChanged();
+    sl_updateActions();
 }
 
-MsaColorSchemeFactory * MSAEditorSequenceArea::getDefaultColorSchemeFactory() {
-    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-
-    switch (editor->getMSAObject()->getAlphabet()->getType()) {
-    case DNAAlphabet_RAW:
-        return msaColorSchemeRegistry->getMsaColorSchemeFactoryById(MsaColorScheme::EMPTY_RAW);
-    case DNAAlphabet_NUCL:
-        return msaColorSchemeRegistry->getMsaColorSchemeFactoryById(MsaColorScheme::UGENE_NUCL);
-    case DNAAlphabet_AMINO:
-        return msaColorSchemeRegistry->getMsaColorSchemeFactoryById(MsaColorScheme::UGENE_AMINO);
-    default:
-        FAIL(tr("Unknown alphabet"), NULL);
-    }
-    return NULL;
+MSAEditor *MSAEditorSequenceArea::getEditor() const {
+    return qobject_cast<MSAEditor*>(editor);
 }
 
 QStringList MSAEditorSequenceArea::getAvailableHighlightingSchemes() const{
@@ -434,1434 +210,80 @@ QStringList MSAEditorSequenceArea::getAvailableHighlightingSchemes() const{
     return allSchemas;
 }
 
-QString MSAEditorSequenceArea::getCopyFormatedAlgorithmId() const{
-    return AppContext::getSettings()->getValue(SETTINGS_ROOT + SETTINGS_COPY_FORMATTED, BaseDocumentFormats::CLUSTAL_ALN).toString();
-}
-
-void MSAEditorSequenceArea::setCopyFormatedAlgorithmId(const QString& algoId){
-    AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COPY_FORMATTED, algoId);
-}
-
 bool MSAEditorSequenceArea::hasAminoAlphabet() {
-    MAlignmentObject* maObj = editor->getMSAObject();
-    SAFE_POINT(NULL != maObj, tr("MAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()"), false);
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    SAFE_POINT(NULL != maObj, tr("MultipleAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()"), false);
     const DNAAlphabet* alphabet = maObj->getAlphabet();
     SAFE_POINT(NULL != maObj, tr("DNAAlphabet is null in MSAEditorSequenceArea::hasAminoAlphabet()"), false);
     return DNAAlphabet_AMINO == alphabet->getType();
 }
 
-bool MSAEditorSequenceArea::drawContent(QPainter &p) {
-    qint64 seqNum = editor->getNumSequences();
-    if (ui->isCollapsibleMode()) {
-        seqNum = ui->getCollapseModel()->rowToMap(seqNum);
-    }
-    return drawContent(p, QRect(0, 0, editor->getAlignmentLen(), seqNum));
-}
-
-bool MSAEditorSequenceArea::drawContent(QPixmap &pixmap) {
-    CHECK(editor->getColumnWidth() * editor->getAlignmentLen() < 32768 &&
-           editor->getRowHeight() * editor->getNumSequences() < 32768, false);
-
-    qint64 seqNum = editor->getNumSequences();
-    if (ui->isCollapsibleMode()) {
-        seqNum = ui->getCollapseModel()->rowToMap(seqNum);
-    }
-    pixmap = QPixmap(editor->getColumnWidth() * editor->getAlignmentLen(),
-                      editor->getRowHeight() * seqNum);
-    QPainter p(&pixmap);
-    return drawContent(p, QRect(0, 0, editor->getAlignmentLen(), seqNum));
-}
-
-bool MSAEditorSequenceArea::drawContent(QPixmap &pixmap,
-                                          const U2Region &region,
-                                          const QList<qint64> &seqIdx) {
-    CHECK(!region.isEmpty(), false);
-    CHECK(!seqIdx.isEmpty(), false);
-
-    CHECK(editor->getColumnWidth() * region.length < 32768 &&
-           editor->getRowHeight() * seqIdx.size() < 32768, false);
-    pixmap = QPixmap(editor->getColumnWidth() * region.length,
-                     editor->getRowHeight() * seqIdx.size());
-    QPainter p(&pixmap);
-    return drawContent(p, region, seqIdx);
-}
-
-void MSAEditorSequenceArea::deleteOldCustomSchemes() {
-    qDeleteAll(customColorSchemeMenuActions);
-    customColorSchemeMenuActions.clear();
-}
-
-void MSAEditorSequenceArea::sl_changeColorSchemeOutside(const QString &name) {
-    QAction* a = GUIUtils::findAction(QList<QAction*>() << colorSchemeMenuActions << customColorSchemeMenuActions << highlightingSchemeMenuActions, name);
-    if (a != NULL) {
-        a->trigger();
-    }
-}
-
-void MSAEditorSequenceArea::sl_doUseDots(){
-    useDotsAction->trigger();
-}
-
-void MSAEditorSequenceArea::sl_useDots(){
-    completeRedraw = true;
-    update();
-    emit si_highlightingChanged();
-}
-
-void MSAEditorSequenceArea::sl_changeCopyFormat(const QString& alg){
-    setCopyFormatedAlgorithmId(alg);
-}
-
-void MSAEditorSequenceArea::sl_changeColorScheme() {
-    QAction *action = qobject_cast<QAction *>(sender());
-    if (NULL == action) {
-        action = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
-    }
-    CHECK(NULL != action, );
-
-    applyColorScheme(action->data().toString());
-}
-
-void MSAEditorSequenceArea::sl_changeHighlightScheme(){
-    QAction* a = qobject_cast<QAction*>(sender());
-    if (NULL == a) {
-        a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
-    }
-    CHECK(NULL != a, );
-
-    editor->saveHighlightingSettings(highlightingScheme->getFactory()->getId(), highlightingScheme->getSettings());
-
-    QString id = a->data().toString();
-    MsaHighlightingSchemeFactory* factory = AppContext::getMsaHighlightingSchemeRegistry()->getMsaHighlightingSchemeFactoryById(id);
-    SAFE_POINT(NULL != factory, L10N::nullPointerError("highlighting scheme"), );
-    if (ui->editor->getMSAObject() == NULL) {
-        return;
-    }
-
-    delete highlightingScheme;
-    highlightingScheme = factory->create(this, ui->editor->getMSAObject());
-    highlightingScheme->applySettings(editor->getHighlightingSettings(id));
-
-    const MAlignment &msa = ui->editor->getMSAObject()->getMAlignment();
-
-    U2OpStatusImpl os;
-    const int refSeq = msa.getRowIndexByRowId(editor->getReferenceRowId(), os);
-
-    MSAHighlightingFactory msaHighlightingFactory;
-    QString msaHighlightingId = msaHighlightingFactory.getOPGroupParameters().getGroupId();
-
-    CHECK(ui->getEditor(), );
-    CHECK(ui->getEditor()->getOptionsPanel(), );
-
-    if(!factory->isRefFree() && refSeq == -1 && ui->getEditor()->getOptionsPanel()->getActiveGroupId() != msaHighlightingId) {
-        QMessageBox::warning(ui, tr("No reference sequence selected"),
-            tr("Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it"));
-    }
-
-    foreach(QAction* action, highlightingSchemeMenuActions) {
-        action->setChecked(action == a);
-    }
-    switch (factory->getAlphabetType()) {
-    case DNAAlphabet_RAW:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_RAW, id);
-        break;
-    case DNAAlphabet_NUCL:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_NUCL, id);
-        break;
-    case DNAAlphabet_AMINO:
-        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_AMINO, id);
-        break;
-    default:
-        FAIL(tr("Unknown alphabet"), );
-        break;
-    }
-
-    completeRedraw = true;
-    update();
-    emit si_highlightingChanged();
-}
-
-void MSAEditorSequenceArea::exitFromEditCharacterMode() {
-    if (msaMode == EditCharacterMode) {
-        editModeAnimationTimer.stop();
-        highlightSelection = false;
-        selectionColor = Qt::black;
-        msaMode = ViewMode;
-        update();
-    }
-}
-
-void MSAEditorSequenceArea::updateActions() {
-    MAlignmentObject* maObj = editor->getMSAObject();
-    assert(maObj != NULL);
-    bool readOnly = maObj->isStateLocked();
-
-    createSubaligniment->setEnabled(!isAlignmentEmpty());
-    saveSequence->setEnabled(!isAlignmentEmpty());
-    addSeqFromProjectAction->setEnabled(!readOnly);
-    addSeqFromFileAction->setEnabled(!readOnly);
-    sortByNameAction->setEnabled(!readOnly && !isAlignmentEmpty());
-    collapseModeSwitchAction->setEnabled(!readOnly && !isAlignmentEmpty());
-
-//Update actions of "Edit" group
-    bool canEditAlignment = !readOnly && !isAlignmentEmpty();
-    bool canEditSelectedArea = canEditAlignment && !selection.isNull();
-    ui->delSelectionAction->setEnabled(canEditSelectedArea);
-
-    insSymAction->setEnabled(canEditSelectedArea);
-    bool oneCharacterIsSelected = selection.width() == 1 && selection.height() == 1;
-    replaceCharacterAction->setEnabled(canEditSelectedArea && oneCharacterIsSelected);
-    delColAction->setEnabled(canEditAlignment);
-    reverseComplementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
-    reverseAction->setEnabled(canEditSelectedArea);
-    complementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
-    removeAllGapsAction->setEnabled(canEditAlignment);
-
-    assert(checkState());
-}
-
-void MSAEditorSequenceArea::paintEvent(QPaintEvent *e) {
-    drawAll();
-    QWidget::paintEvent(e);
-}
-
-void MSAEditorSequenceArea::drawAll() {
-    QSize s = size();
-    if (cachedView->size() != s) {
-        assert(completeRedraw);
-        delete cachedView;
-        cachedView = new QPixmap(s);
-    }
-    if (completeRedraw) {
-        QPainter pCached(cachedView);
-        drawVisibleContent(pCached);
-        completeRedraw = false;
-    }
-    QPainter p(this);
-    p.drawPixmap(0, 0, *cachedView);
-    drawSelection(p);
-    drawFocus(p);
-}
-
-void MSAEditorSequenceArea::drawVisibleContent(QPainter& p) {
-    drawContent(p, QRect(startPos, getFirstVisibleSequence(), getNumVisibleBases(false), getNumVisibleSequences(true)));
-}
-
-bool MSAEditorSequenceArea::drawContent(QPainter &p, const QRect &area) {
-    QVector<U2Region> range;
-    if (ui->isCollapsibleMode()) {
-        ui->getCollapseModel()->getVisibleRows(area.y(), area.bottom(), range);
-    } else {
-        range.append(U2Region(area.y(), area.height()));
-    }
-
-    QList <qint64> seqIdx;
-    foreach(U2Region region, range) {
-        for (qint64 i = region.startPos; i < region.endPos(); i++) {
-            seqIdx.append(i);
-        }
-    }
-    p.fillRect(cachedView->rect(), Qt::white);
-    bool ok = drawContent(p, U2Region(area.x(), area.width()), seqIdx);
-    emit si_visibleRangeChanged();
-
-    return ok;
-}
-
-bool MSAEditorSequenceArea::drawContent(QPainter &p, const U2Region &region, const QList<qint64> &seqIdx) {
-    CHECK(!region.isEmpty(), false);
-    CHECK(!seqIdx.isEmpty(), false);
-
-    p.fillRect(QRect(0, 0, editor->getColumnWidth() * region.length,
-                      editor->getRowHeight() * seqIdx.size()),
-               Qt::white);
-    p.setPen(Qt::black);
-    p.setFont(editor->getFont());
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    SAFE_POINT(maObj != NULL, tr("Alignment object is NULL"), false);
-    const MAlignment &msa = maObj->getMAlignment();
-
-    U2OpStatusImpl os;
-    const int refSeq = msa.getRowIndexByRowId(editor->getReferenceRowId(), os);
-    QString refSeqName = editor->getReferenceRowName();
-    const MAlignmentRow *r = NULL;
-    if (MAlignmentRow::invalidRowId() != refSeq) {
-        r = &(msa.getRow(refSeq));
-    }
-
-    //Use dots to draw regions, which are similar to reference sequence
-    highlightingScheme->setUseDots(useDotsAction->isChecked());
-    //Highlighting scheme's settings
-    QString schemeName = highlightingScheme->metaObject()->className();
-    bool isGapsScheme = schemeName == "U2::MSAHighlightingSchemeGaps";
-
-    U2Region baseYRange = U2Region(0, editor->getRowHeight());
-    int columnWidth = editor->getColumnWidth();
-
-    bool isResizeMode = editor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent;
-    for (qint64 iSeq = 0; iSeq < seqIdx.size(); iSeq++) {
-        qint64 seq = seqIdx[iSeq];
-        qint64 regionEnd = region.endPos() - (int)(region.endPos() == editor->getAlignmentLen());
-        for (int pos = region.startPos; pos <= regionEnd; pos++) {
-            U2Region baseXRange = U2Region(columnWidth * (pos - region.startPos), columnWidth);
-            QRect cr(baseXRange.startPos, baseYRange.startPos, baseXRange.length + 1, baseYRange.length);
-            char c = msa.charAt(seq, pos);
-
-            bool highlight = false;
-            QColor color = colorScheme->getColor(seq, pos, c);
-            if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()) { //schemes which applied without reference
-                const char refChar = '\n';
-                highlightingScheme->process(refChar, c, color, highlight, pos, seq);
-            } else if (seq == refSeq || refSeqName.isEmpty()) {
-                highlight = true;
-            } else {
-                const char refChar = r->charAt(pos);
-                highlightingScheme->process(refChar, c, color, highlight, pos, seq);
-            }
-
-            if (color.isValid() && highlight) {
-                p.fillRect(cr, color);
-            }
-            if (isResizeMode) {
-                p.drawText(cr, Qt::AlignCenter, QString(c));
-            }
-        }
-        baseYRange.startPos += editor->getRowHeight();
-    }
-
-    return true;
-}
-
-void MSAEditorSequenceArea::drawSelection(QPainter &p) {
-    int x = selection.x();
-    int y = selection.y();
-
-    U2Region xRange = getBaseXRange(x, true);
-    U2Region yRange = getSequenceYRange(y, true);
-
-    QPen pen(highlightSelection || hasFocus()? selectionColor : Qt::gray);
-    if (msaMode != EditCharacterMode) {
-        pen.setStyle(Qt::DashLine);
-    }
-    pen.setWidth(highlightSelection ? 2 : 1);
-    p.setPen(pen);
-    if(yRange.startPos > 0) {
-        p.drawRect(xRange.startPos, yRange.startPos, xRange.length*selection.width(), yRange.length*selection.height());
-    }
-    else {
-        qint64 regionHeight = yRange.length*selection.height() + yRange.startPos + 1;
-        if(regionHeight <= 0) {
-            return;
-        }
-        p.drawRect(xRange.startPos, -1, xRange.length*selection.width(), regionHeight);
-    }
-}
-
-void MSAEditorSequenceArea::drawFocus(QPainter& p) {
-    if (hasFocus()) {
-        p.setPen(QPen(Qt::black, 1, Qt::DotLine));
-        p.drawRect(0, 0, width()-1, height()-1);
-    }
-}
-
-bool MSAEditorSequenceArea::isPosInRange(int p) const {
-    return p >= 0 && p < editor->getAlignmentLen();
-}
-
-bool MSAEditorSequenceArea::isSeqInRange(int s) const {
-    return s >= 0 && s < getNumDisplayedSequences();
-}
-
-bool MSAEditorSequenceArea::isInRange(const QPoint& p) const {
-    return isPosInRange(p.x()) && isSeqInRange(p.y());
-}
-
-bool MSAEditorSequenceArea::isVisible(const QPoint& p, bool countClipped) const {
-    return isPosVisible(p.x(), countClipped) && isSeqVisible(p.y(), countClipped);
-}
-
-bool MSAEditorSequenceArea::isPosVisible(int pos, bool countClipped) const {
-    if (pos != 0 && (pos < getFirstVisibleBase() || pos > getLastVisibleBase(countClipped))) {
-        return false;
-    }
-    return true;
-}
-
-bool MSAEditorSequenceArea::isSeqVisible(int seq, bool countClipped) const {
-    if (seq < getFirstVisibleSequence() || seq > getLastVisibleSequence(countClipped)) {
-        return false;
-    }
-    return true;
-}
-
-void MSAEditorSequenceArea::setFirstVisibleBase(int pos) {
-    if (pos == startPos) {
-        return;
-    }
-
-    if (!isAlignmentEmpty()) {
-        SAFE_POINT(isPosInRange(pos), tr("Position is out of range: %1").arg(QString::number(pos)), );
-
-        QPoint prev(startPos, startSeq);
-
-        int aliLen = editor->getAlignmentLen();
-        int effectiveFirst = qMin(aliLen - countWidthForBases(false), pos);
-        startPos = qMax(0, effectiveFirst);
-
-        QPoint p(startPos, startSeq);
-        emit si_startChanged(p, prev);
-    } else {
-        startPos = -1;
-    }
-
-    updateHScrollBar();
-
-    completeRedraw = true;
-    update();
-}
-
-void MSAEditorSequenceArea::setFirstVisibleSequence(int seq) {
-    if (seq == startSeq) {
-        return;
-    }
-
-    if (!isAlignmentEmpty()) {
-        SAFE_POINT(isSeqInRange(seq), tr("Sequence is out of range: %1").arg(QString::number(seq)), );
-
-        QPoint prev(startPos, startSeq);
-
-        int nSeq = getNumDisplayedSequences();
-        int effectiveFirst = qMin(nSeq - countHeightForSequences(false), seq);
-        startSeq = qMax(0, effectiveFirst);
-
-        QPoint p(startPos, startSeq);
-        emit si_startChanged(p, prev);
-    }
-
-    updateVScrollBar();
-
-    completeRedraw = true;
+void MSAEditorSequenceArea::focusInEvent(QFocusEvent* fe) {
+    QWidget::focusInEvent(fe);
     update();
-}
-
-void MSAEditorSequenceArea::resizeEvent(QResizeEvent *e) {
-    completeRedraw = true;
-    validateRanges();
-    QWidget::resizeEvent(e);
-}
-
-void MSAEditorSequenceArea::validateRanges() {
-    //check x dimension
-    int aliLen = editor->getAlignmentLen();
-    int visibleBaseCount = countWidthForBases(false);
-
-    if (isAlignmentEmpty()) {
-        setFirstVisibleBase(-1);
-    } else if (visibleBaseCount > aliLen) {
-        setFirstVisibleBase(0);
-    } else if (startPos + visibleBaseCount > aliLen) {
-        setFirstVisibleBase(aliLen - visibleBaseCount);
-    }
-
-    SAFE_POINT(0 <= startPos || isAlignmentEmpty(), tr("Negative startPos with non-empty alignment"), );
-    SAFE_POINT(startPos + visibleBaseCount <= aliLen || aliLen < visibleBaseCount, tr("startPos is too big"), );
-
-    updateHScrollBar();
-
-    //check y dimension
-    if (ui->isCollapsibleMode()) {
-        sl_modelChanged();
-        return;
-    }
-
-    int nSeqs = editor->getNumSequences();
-    int visibleSequenceCount = countHeightForSequences(false);
-
-    if (isAlignmentEmpty()) {
-        setFirstVisibleSequence(-1);
-    } else if (visibleSequenceCount > nSeqs) {
-        setFirstVisibleSequence(0);
-    } else if (startSeq + visibleSequenceCount > nSeqs) {
-        setFirstVisibleSequence(nSeqs - visibleSequenceCount);
-    }
-
-    SAFE_POINT(0 <= startSeq || isAlignmentEmpty(), tr("Negative startSeq with non-empty alignment"), );
-    SAFE_POINT(startSeq + visibleSequenceCount <= nSeqs || nSeqs < visibleSequenceCount, tr("startSeq is too big"), );
-
-    updateVScrollBar();
-}
-
-void MSAEditorSequenceArea::sl_onHScrollMoved(int pos) {
-    if (isAlignmentEmpty()) {
-        setFirstVisibleBase(-1);
-    } else {
-        SAFE_POINT(0 <= pos && pos <= editor->getAlignmentLen() - getNumVisibleBases(false), tr("Position is out of range: %1").arg(QString::number(pos)), );
-        setFirstVisibleBase(pos);
-    }
-}
-
-void MSAEditorSequenceArea::sl_onVScrollMoved(int seq) {
-    if (isAlignmentEmpty()) {
-        setFirstVisibleSequence(-1);
-    } else {
-        SAFE_POINT(0 <= seq && seq <= editor->getNumSequences() - getNumVisibleSequences(false), tr("Sequence is out of range: %1").arg(QString::number(seq)), );
-        setFirstVisibleSequence(seq);
-    }
-}
-
-void MSAEditorSequenceArea::updateHScrollBar() {
-    shBar->disconnect(this);
-
-    if (isAlignmentEmpty()) {
-        shBar->setVisible(false);
-    } else {
-        int numVisibleBases = getNumVisibleBases(false);
-        int alignmentLen = editor->getAlignmentLen();
-
-        SAFE_POINT(numVisibleBases <= alignmentLen, tr("Horizontal scrollbar appears unexpectedly: numVisibleBases is too small"), );
-
-        shBar->setMinimum(0);
-        shBar->setMaximum(alignmentLen - numVisibleBases);
-        shBar->setSliderPosition(getFirstVisibleBase());
-
-        shBar->setSingleStep(1);
-        shBar->setPageStep(numVisibleBases);
-
-        shBar->setVisible(numVisibleBases != alignmentLen);
-    }
-
-    connect(shBar, SIGNAL(valueChanged(int)), SLOT(sl_onHScrollMoved(int)));
-}
-
-void MSAEditorSequenceArea::updateVScrollBar() {
-    svBar->disconnect(this);
-
-    if (isAlignmentEmpty()) {
-        svBar->setVisible(false);
-    } else {
-        int start = getFirstVisibleSequence();
-        int numVisibleSequences = getNumVisibleSequences(false);
-        int nSeqs = getNumDisplayedSequences();
-
-        SAFE_POINT(numVisibleSequences <= nSeqs, tr("Vertical scrollbar appears unexpectedly: numVisibleSequences is too small"), );
-
-        svBar->setMinimum(0);
-        svBar->setMaximum(nSeqs - numVisibleSequences);
-        svBar->setSliderPosition(start);
-
-        svBar->setSingleStep(1);
-        svBar->setPageStep(numVisibleSequences);
-
-        svBar->setVisible(numVisibleSequences != nSeqs);
-    }
-
-    connect(svBar, SIGNAL(valueChanged(int)), SLOT(sl_onVScrollMoved(int)));
-
-    onVisibleRangeChanged();
-}
-
-void MSAEditorSequenceArea::onVisibleRangeChanged() {
-    exitFromEditCharacterMode();
-    qint64 firstVisibleSeq = getFirstVisibleSequence();
-    qint64 lastVisibleSeq  = getLastVisibleSequence(true);
-
-    QStringList rowNames = editor->getMSAObject()->getMAlignment().getRowNames();
-    QStringList visibleSeqs;
-
-    if (!isAlignmentEmpty()) {
-        QVector<U2Region> range;
-        if (ui->isCollapsibleMode()) {
-            ui->getCollapseModel()->getVisibleRows(firstVisibleSeq, lastVisibleSeq, range);
-        } else {
-            range.append(U2Region(firstVisibleSeq, lastVisibleSeq - firstVisibleSeq + 1));
-        }
-
-        foreach(const U2Region& region, range) {
-            int start = region.startPos;
-            int end = static_cast<int>(qMin(region.endPos(), lastVisibleSeq));
-            for (int seq = start; seq <= end; seq++) {
-                visibleSeqs.append(rowNames.at(seq));
-            }
-        }
-    }
-
-    emit si_visibleRangeChanged(visibleSeqs, getHeight());
-}
-
-bool MSAEditorSequenceArea::isAlignmentLocked() {
-    MAlignmentObject* obj = editor->getMSAObject();
-    SAFE_POINT(NULL != obj, tr("Alignment object is not available"), true);
-    return obj->isStateLocked();
-}
-
-int MSAEditorSequenceArea::countWidthForBases(bool countClipped, bool forOffset) const {
-    int seqAreaWidth = width();
-    int colWidth = editor->getColumnWidth();
-    int nVisible = seqAreaWidth / colWidth;
-
-    if(countClipped) {
-        bool colIsVisible = ((float)(seqAreaWidth % colWidth) / colWidth < 0.5) ? 0 : 1;
-        colIsVisible |= !forOffset;
-        nVisible += colIsVisible && (seqAreaWidth % colWidth != 0);
-    }
-
-    return nVisible;
-}
-
-int MSAEditorSequenceArea::countHeightForSequences(bool countClipped) const {
-    int seqAreaHeight = height();
-    int nVisible = seqAreaHeight / editor->getRowHeight() + (countClipped && (seqAreaHeight % editor->getRowHeight() != 0) ? 1 : 0);
-    return nVisible;
-}
-
-int MSAEditorSequenceArea::getNumVisibleBases(bool countClipped, bool forOffset) const {
-    if (isAlignmentEmpty()) {
-        return 0;
-    }
-
-    int lastVisible = getLastVisibleBase(countClipped, forOffset);
-    SAFE_POINT((startPos <= lastVisible || (!countClipped && lastVisible + 1 == startPos /*1 symbol is visible & clipped*/)),
-               tr("Last visible base is less than startPos"), 0);
-    SAFE_POINT(lastVisible < editor->getAlignmentLen(), tr("Last visible base is out of range"), 0);
-    int res = lastVisible - startPos + 1;
-    return res;
-}
-
-int MSAEditorSequenceArea::getLastVisibleBase(bool countClipped, bool forOffset) const {
-    if (isAlignmentEmpty()) {
-        return 0;
-    }
-
-    int nVisible = countWidthForBases(countClipped, forOffset);
-    int alignLen = editor->getAlignmentLen();
-    int res = qBound(0, startPos + nVisible - 1, alignLen - 1);
-    return res;
-}
-
-int MSAEditorSequenceArea::getLastVisibleSequence(bool countClipped) const {
-    if (isAlignmentEmpty()) {
-        return 0;
-    }
-
-    int nVisible = countHeightForSequences(countClipped);
-    int numSeqs = getNumDisplayedSequences();
-    int res = qBound(0, startSeq + nVisible - 1, numSeqs - 1);
-    return res;
-}
-
-int MSAEditorSequenceArea::getNumVisibleSequences(bool countClipped) const {
-    if (isAlignmentEmpty()) {
-        return 0;
-    }
-
-    int lastVisible =  getLastVisibleSequence(countClipped);
-    SAFE_POINT(startSeq <= lastVisible, tr("Last visible sequence is less than startSeq"), 0);
-    SAFE_POINT(lastVisible < editor->getNumSequences(), tr("Last visible sequence is out of range"), 0);
-
-    int sequencesNumber = 0;
-    if (ui->isCollapsibleMode()) {
-        QVector<U2Region> range;
-        ui->getCollapseModel()->getVisibleRows(startSeq, lastVisible, range);
-        foreach(U2Region region, range) {
-            sequencesNumber += region.length;
-        }
-        return sequencesNumber;
-    }
-    else {
-        sequencesNumber = lastVisible - startSeq + 1;
-        return sequencesNumber;
-    }
-}
-
-int MSAEditorSequenceArea::getNumDisplayedSequences() const {
-    if (isAlignmentEmpty()) {
-        return 0;
-    }
-
-    MSACollapsibleItemModel *model = ui->getCollapseModel();
-    SAFE_POINT(NULL != model, tr("Invalid collapsible item model!"), -1);
-    return model->displayedRowsCount();
-}
-
-int MSAEditorSequenceArea::getColumnNumByX(int x, bool selecting) const {
-    int colOffs = x / editor->getColumnWidth();
-    int pos = startPos + colOffs;
-    if (!selecting) {
-        if ((pos >= editor->getAlignmentLen()) || (pos < 0)) {
-            return -1;
-        }
-    }
-    else {
-        if (pos < 0) {
-            pos = 0;
-        }
-        if (pos >= editor->getAlignmentLen()) {
-            pos = editor->getAlignmentLen() - 1;
-        }
-    }
-    return pos;
-
-}
-
-int MSAEditorSequenceArea::getXByColumnNum(int columnNum) const {
-    return (columnNum + 0.5f)*editor->getColumnWidth();
-}
-
-int MSAEditorSequenceArea::getSequenceNumByY(int y) const {
-    int seqOffs = y / editor->getRowHeight();
-    int seq = startSeq + seqOffs;
-    const int countOfVisibleSeqs = getNumDisplayedSequences();
-    if (!selecting) {
-        if ((seqOffs >= countOfVisibleSeqs) || (seq < 0)) {
-            return -1;
-        }
-    }
-    else {
-        if (seq < 0) {
-            seq = 0;
-        }
-        if (seq >= countOfVisibleSeqs) {
-            seq = countOfVisibleSeqs - 1;
-        }
-    }
-    return seq;
-}
-
-int MSAEditorSequenceArea::getYBySequenceNum(int sequenceNum) const {
-    return (sequenceNum + 0.5f)*editor->getRowHeight();
-}
-
-U2Region MSAEditorSequenceArea::getBaseXRange(int pos, bool useVirtualCoords) const {
-    return getBaseXRange(pos, startPos, useVirtualCoords);
-}
-
-U2Region MSAEditorSequenceArea::getBaseXRange(int pos, int firstVisiblePos, bool useVirtualCoords) const {
-    U2Region res(editor->getColumnWidth() * (pos - firstVisiblePos), editor->getColumnWidth());
-    if (!useVirtualCoords) {
-        int w = width();
-        res = res.intersect(U2Region(0, w));
-    }
-    return res;
-}
-
-U2Region MSAEditorSequenceArea::getSequenceYRange(int seqNum, bool useVirtualCoords) const {
-    return getSequenceYRange(seqNum, startSeq, useVirtualCoords);
-}
-
-U2Region MSAEditorSequenceArea::getSequenceYRange(int seq, int firstVisibleRow, bool useVirtualCoords) const {
-    U2Region res(editor->getRowHeight()* (seq - firstVisibleRow), editor->getRowHeight());
-    if (!useVirtualCoords) {
-        int h = height();
-        res = res.intersect(U2Region(0, h));
-    }
-    return res;
-}
-
-#define SCROLL_STEP 1
-
-void MSAEditorSequenceArea::updateSelection(const QPoint& newPos) {
-    int width = qAbs(newPos.x() - cursorPos.x()) + 1;
-    int height = qAbs(newPos.y() - cursorPos.y()) + 1;
-    int left = qMin(newPos.x(), cursorPos.x());
-    int top = qMin(newPos.y(), cursorPos.y());
-
-    MSAEditorSelection s(left, top, width, height);
-    if (newPos.x()!=-1 && newPos.y()!=-1) {
-        setSelection(s);
-    }
-    bool selectionExists = !selection.isNull();
-    ui->getCopySelectionAction()->setEnabled(selectionExists);
-    ui->getCopyFormattedSelectionAction()->setEnabled(selectionExists);
-    emit si_copyFormattedChanging(selectionExists);
-}
-
-void MSAEditorSequenceArea::updateSelection() {
-    CHECK(!baseSelection.isNull(), );
-
-    if (!ui->isCollapsibleMode()) {
-        setSelection(baseSelection);
-        return;
-    }
-    MSACollapsibleItemModel* m = ui->getCollapseModel();
-    CHECK_EXT(NULL != m, cancelSelection(), );
-
-    int startPos = baseSelection.y();
-    int endPos = startPos + baseSelection.height();
-
-    // convert selected rows indexes to indexes of selected collapsible items
-    int newStart = m->rowToMap(startPos);
-    int newEnd = m->rowToMap(endPos);
-
-    SAFE_POINT_EXT(newStart >= 0 && newEnd >= 0, cancelSelection(), );
-
-    int selectionHeight = newEnd - newStart;
-    // accounting of collapsing children items
-    int itemIndex = m->itemAt(newEnd);
-    if (selectionHeight <= 1 && itemIndex >= 0) {
-        const MSACollapsableItem& collapsibleItem = m->getItem(itemIndex);
-        if(newEnd == collapsibleItem.row && !collapsibleItem.isCollapsed) {
-            newEnd = collapsibleItem.row ;
-            selectionHeight = qMax(selectionHeight, endPos - newStart + collapsibleItem.numRows);
-        }
-    }
-    if(selectionHeight > 0 && newStart + selectionHeight <= m->displayedRowsCount()) {
-        MSAEditorSelection s(selection.topLeft().x(), newStart, selection.width(), selectionHeight);
-        setSelection(s);
-    } else {
-        cancelSelection();
-    }
-}
-
-void MSAEditorSequenceArea::mouseMoveEvent(QMouseEvent* e) {
-    if (e->buttons() & Qt::LeftButton) {
-        QPoint newCurPos = coordToAbsolutePosOutOfRange(e->pos());
-        if (isInRange(newCurPos)) {
-            updateHBarPosition(newCurPos.x());
-            updateVBarPosition(newCurPos.y());
-        }
-
-        if (shifting) {
-            shiftSelectedRegion(newCurPos.x() - cursorPos.x());
-        } else if (selecting) {
-            rubberBand->setGeometry(QRect(origin, e->pos()).normalized());
-        }
-    }
-
-    QWidget::mouseMoveEvent(e);
-}
-
-void MSAEditorSequenceArea::mouseReleaseEvent(QMouseEvent *e) {
-    rubberBand->hide();
-    if (shifting) {
-        changeTracker.finishTracking();
-        editor->getMSAObject()->releaseState();
-    }
-
-    QPoint newCurPos = coordToAbsolutePos(e->pos());
-
-    int firstVisibleSeq = ui->seqArea->getFirstVisibleSequence();
-    int visibleRowsNums = getNumDisplayedSequences() - 1;
-
-    int yPosWithValidations = qMax(firstVisibleSeq, newCurPos.y());
-    yPosWithValidations = qMin(yPosWithValidations, visibleRowsNums + firstVisibleSeq);
-
-    newCurPos.setY(yPosWithValidations);
-
-    if (shifting) {
-        emit si_stopMsaChanging(msaVersionBeforeShifting != editor->getMSAObject()->getModificationVersion());
-    } else if (Qt::LeftButton == e->button() && Qt::LeftButton == prevPressedButton) {
-        updateSelection(newCurPos);
-    }
-    shifting = false;
-    selecting = false;
-    msaVersionBeforeShifting = -1;
-
-    shBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-    svBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-
-    QWidget::mouseReleaseEvent(e);
-}
-
-void MSAEditorSequenceArea::mousePressEvent(QMouseEvent *e) {
-    prevPressedButton = e->button();
-
-    if (!hasFocus()) {
-        setFocus();
-    }
-
-    if ((e->button() == Qt::LeftButton)) {
-        if (Qt::ShiftModifier == e->modifiers()) {
-            QWidget::mousePressEvent(e);
-            return;
-        }
-
-        origin = e->pos();
-        QPoint p = coordToPos(e->pos());
-        if(isInRange(p)) {
-            setCursorPos(p);
-
-            const MSAEditorSelection &s = ui->seqArea->getSelection();
-            if (s.getRect().contains(cursorPos) && !isAlignmentLocked()) {
-                shifting = true;
-                msaVersionBeforeShifting = editor->getMSAObject()->getModificationVersion();
-                U2OpStatus2Log os;
-                changeTracker.startTracking(os);
-                CHECK_OP(os, );
-                editor->getMSAObject()->saveState();
-                emit si_startMsaChanging();
-            }
-        }
-
-        if (!shifting) {
-            selecting = true;
-            origin = e->pos();
-            QPoint q = coordToAbsolutePos(e->pos());
-            if (isInRange(q)) {
-                setCursorPos(q);
-            }
-            rubberBand->setGeometry(QRect(origin, QSize()));
-            rubberBand->show();
-            ui->seqArea->cancelSelection();
-        }
-    }
-
-    QWidget::mousePressEvent(e);
-}
-
-void MSAEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
-    if (!hasFocus()) {
-        return;
-    }
-
-    int key = e->key();
-    if (msaMode == EditCharacterMode) {
-        processCharacterInEditMode(e);
-        return;
-    }
-
-    bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
-    const bool ctrl = e->modifiers().testFlag(Qt::ControlModifier);
-#ifdef Q_OS_MAC
-    // In one case it is better to use a Command key as modifier,
-    // in another - a Control key. genuineCtrl - Control key on Mac OS X.
-    const bool genuineCtrl = e->modifiers().testFlag(Qt::MetaModifier);
-#else
-    const bool genuineCtrl = ctrl;
-#endif
-    static QPoint selectionStart(0, 0);
-    static QPoint selectionEnd(0, 0);
-
-    if (ctrl && (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down)) {
-        //remap to page_up/page_down
-        shift = key == Qt::Key_Up || key == Qt::Key_Down;
-        key =  (key == Qt::Key_Up || key == Qt::Key_Left) ? Qt::Key_PageUp : Qt::Key_PageDown;
-    }
-    //part of these keys are assigned to actions -> so them never passed to keyPressEvent (action handling has higher priority)
-    int endX, endY;
-    switch(key) {
-        case Qt::Key_Escape:
-             cancelSelection();
-             break;
-        case Qt::Key_Left:
-            if(!(Qt::ShiftModifier & e->modifiers())) {
-                moveSelection(-1,0);
-                break;
-            }
-            if (selectionEnd.x() < 1) {
-                break;
-            }
-            selectionEnd.setX(selectionEnd.x() - 1);
-            endX = selectionEnd.x();
-            if (isPosInRange(endX)) {
-                if (endX != -1) {
-                    int firstColumn = qMin(selectionStart.x(),endX);
-                    int width = qAbs(endX - selectionStart.x()) + 1;
-                    int startSeq = selection.y();
-                    int height = selection.height();
-                    if (selection.isNull()) {
-                        startSeq = cursorPos.y();
-                        height = 1;
-                    }
-                    MSAEditorSelection _selection(firstColumn, startSeq, width, height);
-                    setSelection(_selection);
-                }
-            }
-            break;
-        case Qt::Key_Right:
-            if(!(Qt::ShiftModifier & e->modifiers())) {
-                moveSelection(1,0);
-                break;
-            }
-            if (selectionEnd.x() >= (editor->getAlignmentLen() - 1)) {
-                break;
-            }
-            selectionEnd.setX(selectionEnd.x() +  1);
-            endX = selectionEnd.x();
-            if (isPosInRange(endX)) {
-                if (endX != -1) {
-                    int firstColumn = qMin(selectionStart.x(),endX);
-                    int width = qAbs(endX - selectionStart.x()) + 1;
-                    int startSeq = selection.y();
-                    int height = selection.height();
-                    if (selection.isNull()) {
-                        startSeq = cursorPos.y();
-                        height = 1;
-                    }
-                    MSAEditorSelection _selection(firstColumn, startSeq, width, height);
-                    setSelection(_selection);
-                }
-            }
-            break;
-        case Qt::Key_Up:
-            if(!(Qt::ShiftModifier & e->modifiers())) {
-                moveSelection(0,-1);
-                break;
-            }
-            if(selectionEnd.y() < 1) {
-                break;
-            }
-            selectionEnd.setY(selectionEnd.y() - 1);
-            endY = selectionEnd.y();
-            if (isSeqInRange(endY)) {
-                if (endY != -1) {
-                    int startSeq = qMin(selectionStart.y(),endY);
-                    int height = qAbs(endY - selectionStart.y()) + 1;
-                    int firstColumn = selection.x();
-                    int width = selection.width();
-                    if (selection.isNull()) {
-                        firstColumn = cursorPos.x();
-                        width = 1;
-                    }
-                    MSAEditorSelection _selection(firstColumn, startSeq, width, height);
-                    setSelection(_selection);
-                }
-            }
-            break;
-        case Qt::Key_Down:
-            if(!(Qt::ShiftModifier & e->modifiers())) {
-                moveSelection(0,1);
-                break;
-            }
-            if (selectionEnd.y() >= (ui->collapseModel->displayedRowsCount() - 1)) {
-                break;
-            }
-            selectionEnd.setY(selectionEnd.y() + 1);
-            endY = selectionEnd.y();
-            if (isSeqInRange(endY)) {
-                if (endY != -1) {
-                    int startSeq = qMin(selectionStart.y(),endY);
-                    int height = qAbs(endY - selectionStart.y()) + 1;
-                    int firstColumn = selection.x();
-                    int width = selection.width();
-                    if (selection.isNull()) {
-                        firstColumn = cursorPos.x();
-                        width = 1;
-                    }
-                    MSAEditorSelection _selection(firstColumn, startSeq, width, height);
-                    setSelection(_selection);
-                }
-            }
-            break;
-        case Qt::Key_Delete:
-            if (!isAlignmentLocked() && !shift) {
-                emit si_startMsaChanging();
-                deleteCurrentSelection();
-            }
-            break;
-        case Qt::Key_Home:
-            cancelSelection();
-            if (shift) { //scroll namelist
-                setFirstVisibleSequence(0);
-                setCursorPos(QPoint(cursorPos.x(), 0));
-            } else { //scroll sequence
-                cancelSelection();
-                setFirstVisibleBase(0);
-                setCursorPos(QPoint(0, cursorPos.y()));
-            }
-            break;
-        case Qt::Key_End:
-            cancelSelection();
-            if (shift) { //scroll namelist
-                int n = getNumDisplayedSequences() - 1;
-                setFirstVisibleSequence(n);
-                setCursorPos(QPoint(cursorPos.x(), n));
-            } else { //scroll sequence
-                int n = editor->getAlignmentLen() - 1;
-                setFirstVisibleBase(n);
-                setCursorPos(QPoint(n, cursorPos.y()));
-            }
-            break;
-        case Qt::Key_PageUp:
-            cancelSelection();
-            if (shift) { //scroll namelist
-                int nVis = getNumVisibleSequences(false);
-                int fp = qMax(0, getFirstVisibleSequence() - nVis);
-                int cp = qMax(0, cursorPos.y() - nVis);
-                setFirstVisibleSequence(fp);
-                setCursorPos(QPoint(cursorPos.x(), cp));
-            } else { //scroll sequence
-                int nVis = getNumVisibleBases(false);
-                int fp = qMax(0, getFirstVisibleBase() - nVis);
-                int cp = qMax(0, cursorPos.x() - nVis);
-                setFirstVisibleBase(fp);
-                setCursorPos(QPoint(cp, cursorPos.y()));
-            }
-            break;
-        case Qt::Key_PageDown:
-            cancelSelection();
-            if (shift) { //scroll namelist
-                int nVis = getNumVisibleSequences(false);
-                int nSeq = getNumDisplayedSequences();
-                int fp = qMin(nSeq-1, getFirstVisibleSequence() + nVis);
-                int cp = qMin(nSeq-1, cursorPos.y() + nVis);
-                setFirstVisibleSequence(fp);
-                setCursorPos(QPoint(cursorPos.x(), cp));
-            } else { //scroll sequence
-                int nVis = getNumVisibleBases(false);
-                int len = editor->getAlignmentLen();
-                int fp  = qMin(len-1, getFirstVisibleBase() + nVis);
-                int cp  = qMin(len-1, cursorPos.x() + nVis);
-                setFirstVisibleBase(fp);
-                setCursorPos(QPoint(cp, cursorPos.y()));
-            }
-            break;
-        case Qt::Key_Backspace:
-            removeGapsPrecedingSelection(genuineCtrl ? 1 : -1);
-            break;
-        case Qt::Key_Insert:
-        case Qt::Key_Space:
-            // We can't use Command+Space on Mac OS X - it is reserved
-            if(!isAlignmentLocked()) {
-                emit si_startMsaChanging();
-                insertGapsBeforeSelection(genuineCtrl ? 1 : -1);
-            }
-            break;
-        case Qt::Key_Shift:
-            if (!selection.isNull()) {
-                selectionStart = selection.topLeft();
-                selectionEnd = selection.getRect().bottomRight();
-            } else {
-                selectionStart = cursorPos;
-                selectionEnd = cursorPos;
-            }
-            break;
-    }
-    QWidget::keyPressEvent(e);
-}
-
-void MSAEditorSequenceArea::keyReleaseEvent(QKeyEvent *ke) {
-    if ((ke->key() == Qt::Key_Space || ke->key() == Qt::Key_Delete) && !isAlignmentLocked() && !ke->isAutoRepeat()) {
-        emit si_stopMsaChanging(true);
-    }
-
-    QWidget::keyReleaseEvent(ke);
-}
-
-void MSAEditorSequenceArea::focusInEvent(QFocusEvent* fe) {
-    QWidget::focusInEvent(fe);
-    update();
-}
-
-void MSAEditorSequenceArea::focusOutEvent(QFocusEvent* fe) {
-    QWidget::focusOutEvent(fe);
-    exitFromEditCharacterMode();
-    update();
-}
-
-void MSAEditorSequenceArea::moveSelection(int dx, int dy, bool allowSelectionResize) {
-    int leftX = selection.x();
-    int topY = selection.y();
-    int bottomY = selection.y() + selection.height() - 1;
-    int rightX = selection.x() + selection.width() - 1;
-    QPoint baseTopLeft(leftX, topY);
-    QPoint baseBottomRight(rightX,bottomY);
-
-    QPoint newTopLeft = baseTopLeft + QPoint(dx,dy);
-    QPoint newBottomRight = baseBottomRight + QPoint(dx,dy);
-
-    if ((!isInRange(newTopLeft)) || (!isInRange(newBottomRight))) {
-        if (!allowSelectionResize) {
-            return;
-        } else {
-            MSAEditorSelection newSelection(selection.topLeft(),
-                                            qMin(selection.width(), editor->getAlignmentLen() - newTopLeft.x()),
-                                            qMin(selection.height(), editor->getNumSequences() - newTopLeft.y()));
-            setSelection(newSelection);
-        }
-    }
-
-    MSAEditorSelection newSelection(newTopLeft, selection.width(), selection.height());
-    setSelection(newSelection);
-}
-
-void MSAEditorSequenceArea::moveCursor(int dx, int dy) {
-    QPoint p = cursorPos + QPoint(dx, dy);
-    if (!isInRange(p)) {
-        return;
-    }
-
-    // Move only one cell selection?
-    // TODO: consider selection movement
-    int sz = selection.width()*selection.height();
-    if (sz != 1) {
-        return;
-    }
-
-    if (!isVisible(p, false)) {
-        if (isVisible(cursorPos, true)) {
-            if (dx != 0) {
-                setFirstVisibleBase(startPos + dx);
-            }
-            if (dy!=0) {
-                setFirstVisibleSequence(getFirstVisibleSequence()+dy);
-            }
-        } else {
-            setFirstVisibleBase(p.x());
-            setFirstVisibleSequence(p.y());
-        }
-    }
-    setCursorPos(p);
-    //setSelection(MSAEditorSelection(p, 1,1));
-}
-
-int MSAEditorSequenceArea::coordToPos(int x) const {
-    int y = getSequenceYRange(getFirstVisibleSequence(), false).startPos;
-    return coordToPos(QPoint(x, y)).x();
-}
-
-QPoint MSAEditorSequenceArea::coordToAbsolutePos(const QPoint& coord) const {
-    int column = getColumnNumByX(coord.x(), selecting);
-    int row = getSequenceNumByY(coord.y());
-
-    return QPoint(column, row);
-}
-
-QPoint MSAEditorSequenceArea::coordToAbsolutePosOutOfRange(const QPoint& coord) const {
-    CHECK(editor->getColumnWidth() > 0, QPoint(0, 0));
-    CHECK(editor->getRowHeight() > 0, QPoint(0, 0));
-    int column = startPos + (coord.x() / editor->getColumnWidth());
-    int row = startSeq + (coord.y() / editor->getRowHeight());
-
-    return QPoint(column, row);
-}
-
-const MSAEditorSelection & MSAEditorSequenceArea::getSelection() const {
-    SAFE_POINT(checkState(), "Invalid alignment state", selection);
-    return selection;
-}
-
-QPoint MSAEditorSequenceArea::coordToPos(const QPoint& coord) const {
-    QPoint res(-1, -1);
-    //Y: row
-    int lastSeq = getLastVisibleSequence(true);
-    if (ui->isCollapsibleMode()) {
-        lastSeq = getNumDisplayedSequences();
-    }
-    for (int i=getFirstVisibleSequence(); i<=lastSeq; i++) {
-        U2Region r = getSequenceYRange(i, false);
-        if (r.contains(coord.y())) {
-            res.setY(i);
-            break;
-        }
-    }
-
-    //X: position in sequence
-    for (int i=getFirstVisibleBase(), n = getLastVisibleBase(true); i<=n; i++) {
-        U2Region r = getBaseXRange(i, false);
-        if (r.contains(coord.x())) {
-            res.setX(i);
-            break;
-        }
-    }
-    return res;
-}
-
-void MSAEditorSequenceArea::setSelection(const MSAEditorSelection& s, bool newHighlightSelection) {
-    // TODO: assert(isInRange(s));
-    exitFromEditCharacterMode();
-    if (highlightSelection != newHighlightSelection) {
-        highlightSelection = newHighlightSelection;
-        update();
-    }
-    if (s == selection) {
-        return;
-    }
-
-    MSAEditorSelection prevSelection = selection;
-    selection = s;
-
-    int selEndPos = s.x() + s.width() - 1;
-    int ofRange = selEndPos - editor->getAlignmentLen();
-    if (ofRange >= 0) {
-        selection = MSAEditorSelection(s.topLeft(), s.width() - ofRange - 1, s.height());
-    }
-
-    bool selectionExists = !selection.isNull();
-    ui->getCopySelectionAction()->setEnabled(selectionExists);
-    ui->getCopyFormattedSelectionAction()->setEnabled(selectionExists);
-    emit si_copyFormattedChanging(selectionExists);
-
-    U2Region selectedRowsRegion = getSelectedRows();
-    baseSelection = MSAEditorSelection(selection.topLeft().x(), getSelectedRows().startPos, selection.width(), selectedRowsRegion.length);
-
-    selectedRowNames.clear();
-    for (int x = selectedRowsRegion.startPos; x < selectedRowsRegion.endPos(); x++) {
-        selectedRowNames.append(editor->getMSAObject()->getRow(x).getName());
-    }
-    emit si_selectionChanged(selectedRowNames);
-    emit si_selectionChanged(selection, prevSelection);
-    update();
-    updateActions();
-
-    const QPoint topLeft = selection.topLeft();
-    if (!selection.isNull() && !isVisible(topLeft, false)) {
-        if (isVisible(topLeft, true)) {
-            if (selection.x() - prevSelection.x() != 0) {
-                setFirstVisibleBase(startPos + selection.x() - prevSelection.x());
-            }
-            if (selection.y() - prevSelection.y() != 0) {
-                setFirstVisibleSequence(qMin(getFirstVisibleSequence() + selection.y() - prevSelection.y(), getNumDisplayedSequences() - getNumVisibleSequences(true)));
-            }
-        } else {
-            if (selection.x() - prevSelection.x() != 0) {
-                setFirstVisibleBase(topLeft.x());
-            }
-            if (selection.y() - prevSelection.y() != 0) {
-                setFirstVisibleSequence(topLeft.y());
-            }
-        }
-    }
-}
-
-void MSAEditorSequenceArea::setCursorPos(const QPoint& p) {
-    SAFE_POINT(isInRange(p), tr("Cursor position is out of range"), );
-    if (p == cursorPos) {
-        return;
-    }
-
-    cursorPos = p;
-
-    highlightSelection = false;
-    updateActions();
-}
-
-void MSAEditorSequenceArea::setCursorPos(int x, int y) {
-    setCursorPos(QPoint(x, y));
-}
-
-void MSAEditorSequenceArea::setCursorPos(int pos) {
-    setCursorPos(QPoint(pos, cursorPos.y()));
-}
-
-void MSAEditorSequenceArea::highlightCurrentSelection()  {
-    highlightSelection = true;
-    update();
-}
-
-void MSAEditorSequenceArea::removeGapsPrecedingSelection(int countOfGaps) {
-    const MSAEditorSelection selectionBackup = selection;
-    // check if selection exists
-    if (selectionBackup.isNull()) {
-        return;
-    }
-
-    const QPoint selectionTopLeftCorner(selectionBackup.topLeft());
-    // don't perform the deletion if the selection is at the alignment start
-    if (0 == selectionTopLeftCorner.x() || -1 > countOfGaps || 0 == countOfGaps) {
-        return;
-    }
-
-    int removedRegionWidth = (-1 == countOfGaps) ? selectionBackup.width() : countOfGaps;
-    QPoint topLeftCornerOfRemovedRegion(selectionTopLeftCorner.x() - removedRegionWidth,
-        selectionTopLeftCorner.y());
-    if (0 > topLeftCornerOfRemovedRegion.x()) {
-        removedRegionWidth -= qAbs(topLeftCornerOfRemovedRegion.x());
-        topLeftCornerOfRemovedRegion.setX(0);
-    }
-
-    MAlignmentObject *maObj = editor->getMSAObject();
-    if (NULL == maObj || maObj->isStateLocked()) {
-        return;
-    }
-
-    // if this method was invoked during a region shifting
-    // then shifting should be canceled
-    cancelShiftTracking();
-
-    const U2Region rowsContainingRemovedGaps(getSelectedRows());
-    U2OpStatus2Log os;
-    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
-    Q_UNUSED(userModStep);
-
-    const int countOfDeletedSymbols = maObj->deleteGap(rowsContainingRemovedGaps,
-        topLeftCornerOfRemovedRegion.x(), removedRegionWidth, os);
-
-    // if some symbols were actually removed and the selection is not located
-    // at the alignment end, then it's needed to move the selection
-    // to the place of the removed symbols
-    if (0 < countOfDeletedSymbols) {
-        const MSAEditorSelection newSelection(selectionBackup.x() - countOfDeletedSymbols,
-            topLeftCornerOfRemovedRegion.y(), selectionBackup.width(),
-            selectionBackup.height());
-        setSelection(newSelection);
-    }
-}
-
-void MSAEditorSequenceArea::sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo& modInfo) {
-    exitFromEditCharacterMode();
-    int nSeq = editor->getNumSequences();
-    int aliLen = editor->getAlignmentLen();
-    if (ui->isCollapsibleMode()) {
-        nSeq = getNumDisplayedSequences();
-        updateCollapsedGroups(modInfo);
-    }
+}
 
-    editor->updateReference();
+void MSAEditorSequenceArea::focusOutEvent(QFocusEvent* fe) {
+    QWidget::focusOutEvent(fe);
+    exitFromEditCharacterMode();
+    update();
+}
 
-    //todo: set in one method!
-    setFirstVisibleBase(qBound(0, startPos, aliLen-countWidthForBases(false)));
-    setFirstVisibleSequence(qBound(0, startSeq, nSeq - countHeightForSequences(false)));
+void MSAEditorSequenceArea::moveCursor(int dx, int dy) {
+    const QPoint newCursorPos = cursorPos + QPoint(dx, dy);
+    CHECK(isInRange(newCursorPos), );
 
-    if ((selection.x() > aliLen - 1) || (selection.y() > nSeq - 1)) {
-        cancelSelection();
-    } else {
-        const QPoint selTopLeft(qMin(selection.x(), aliLen - 1),
-            qMin(selection.y(), nSeq - 1));
-        const QPoint selBottomRight(qMin(selection.x() + selection.width() - 1, aliLen - 1),
-            qMin(selection.y() + selection.height() - 1, nSeq -1));
-
-        MSAEditorSelection newSelection(selTopLeft, selBottomRight);
-        // we don't emit "selection changed" signal to avoid redrawing
-        setSelection(newSelection);
-    }
+    // Move only one cell selection?
+    // TODO: consider selection movement
+    const int selectionSize = selection.width() * selection.height();
+    CHECK(selectionSize == 1, );
 
-    updateHScrollBar();
-    updateVScrollBar();
+    ui->getScrollController()->scrollToPoint(newCursorPos, size());
+    setCursorPos(newCursorPos);
 
-    completeRedraw = true;
-    updateActions();
-    update();
+    // SANGER_TODO: why is it under comment
+    //setSelection(MSAEditorSelection(p, 1,1));
 }
 
-void MSAEditorSequenceArea::updateCollapsedGroups(const MAlignmentModInfo& modInfo) {
+void MSAEditorSequenceArea::updateCollapsedGroups(const MaModificationInfo& modInfo) {
     U2OpStatus2Log os;
-    if(modInfo.sequenceContentChanged) {
+    if(modInfo.rowContentChanged) {
         QList<qint64> updatedRows;
         bool isModelChanged = false;
-        QMap<qint64, QList<U2MsaGap> > curGapModel = editor->getMSAObject()->getGapModel();
+        QMap<qint64, QList<U2MsaGap> > curGapModel = getEditor()->getMaObject()->getMapGapModel();
         QList<U2Region> updatedRegions;
         foreach (qint64 modifiedSeqId, modInfo.modifiedRowIds) {
-            int modifiedRowPos = editor->getMSAObject()->getRowPosById(modifiedSeqId);
-            const MAlignmentRow& modifiedRowRef = editor->getMSAObject()->getRow(modifiedRowPos);
+            int modifiedRowPos = editor->getMaObject()->getRowPosById(modifiedSeqId);
+            const MultipleSequenceAlignmentRow &modifiedRowRef = editor->getMaObject()->getRow(modifiedRowPos);
             modifiedRowPos = ui->getCollapseModel()->rowToMap(modifiedRowPos);
             const U2Region rowsCollapsibleGroup = ui->getCollapseModel()->mapSelectionRegionToRows(U2Region(modifiedRowPos, 1));
             if (updatedRegions.contains(rowsCollapsibleGroup)) {
                 continue;
             }
             for(int i = rowsCollapsibleGroup.startPos; i < rowsCollapsibleGroup.endPos(); i++) {
-                qint64 identicalRowId = editor->getMSAObject()->getRow(i).getRowId();
+                qint64 identicalRowId = editor->getMaObject()->getRow(i)->getRowId();
                 if(!updatedRows.contains(identicalRowId) && !modInfo.modifiedRowIds.contains(identicalRowId)) {
-                    isModelChanged = isModelChanged || modifiedRowRef.getGapModel() != curGapModel[identicalRowId];
-                    curGapModel[identicalRowId] = modifiedRowRef.getGapModel();
+                    isModelChanged = isModelChanged || modifiedRowRef->getGapModel() != curGapModel[identicalRowId];
+                    curGapModel[identicalRowId] = modifiedRowRef->getGapModel();
                     updatedRows.append(identicalRowId);
                 }
             }
             updatedRegions.append(rowsCollapsibleGroup);
         }
         if(isModelChanged) {
-            editor->getMSAObject()->updateGapModel(curGapModel, os);
+            getEditor()->getMaObject()->updateGapModel(os, curGapModel);
             return;
         }
     }
 }
 
-void MSAEditorSequenceArea::sl_buildStaticToolbar(GObjectView*, QToolBar* t) {
+void MSAEditorSequenceArea::sl_buildStaticToolbar(GObjectView* v, QToolBar* t) {
     t->addAction(ui->getUndoAction());
     t->addAction(ui->getRedoAction());
     t->addAction(gotoAction);
     t->addAction(removeAllGapsAction);
     t->addSeparator();
+
     t->addAction(collapseModeSwitchAction);
     t->addAction(collapseModeUpdateAction);
     t->addSeparator();
@@ -1878,11 +300,12 @@ void MSAEditorSequenceArea::sl_buildContextMenu(GObjectView*, QMenu* m) {
     SAFE_POINT(editMenu != NULL, "editMenu", );
 
     QList<QAction*> actions;
-    actions << insSymAction << replaceCharacterAction << reverseComplementAction << reverseAction << complementAction << delColAction << removeAllGapsAction;
+    actions << fillWithGapsinsSymAction << replaceCharacterAction << reverseComplementAction
+            << reverseAction << complementAction << delColAction << removeAllGapsAction;
 
     QMenu* copyMenu = GUIUtils::findSubMenu(m, MSAE_MENU_COPY);
     SAFE_POINT(copyMenu != NULL, "copyMenu", );
-    editMenu->insertAction(editMenu->actions().first(), ui->delSelectionAction);
+    editMenu->insertAction(editMenu->actions().first(), ui->getDelSelectionAction());
     if (rect().contains(mapFromGlobal(QCursor::pos()))) {
         editMenu->addActions(actions);
         copyMenu->addAction(ui->getCopySelectionAction());
@@ -1896,6 +319,10 @@ void MSAEditorSequenceArea::sl_showCustomSettings(){
     AppContext::getAppSettingsGUI()->showSettingsDialog(ColorSchemaSettingsPageId);
 }
 
+void MSAEditorSequenceArea::initRenderer() {
+    renderer = new SequenceAreaRenderer(ui, this);
+}
+
 void MSAEditorSequenceArea::buildMenu(QMenu* m) {
     QAction* copyMenuAction = GUIUtils::findAction(m->actions(), MSAE_MENU_LOAD);
     m->insertAction(copyMenuAction, gotoAction);
@@ -1908,8 +335,15 @@ void MSAEditorSequenceArea::buildMenu(QMenu* m) {
     QMenu* editMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EDIT);
     SAFE_POINT(editMenu != NULL, "editMenu", );
     QList<QAction*> actions;
-    actions << replaceCharacterAction << reverseComplementAction <<  reverseAction << complementAction << removeAllGapsAction;
+
+    MsaEditorWgt* msaWgt = getEditor()->getUI();
+    QAction* editSequenceNameAction = msaWgt->getEditorNameList()->getEditSequenceNameAction();
+    if (getSelection().height() != 1) {
+        editSequenceNameAction->setDisabled(true);
+    }
+    actions << editSequenceNameAction << fillWithGapsinsSymAction << replaceCharacterAction << reverseComplementAction << reverseAction << complementAction << delColAction << removeAllGapsAction;
     editMenu->insertActions(editMenu->isEmpty() ? NULL : editMenu->actions().first(), actions);
+    editMenu->insertAction(editMenu->actions().first(), ui->getDelSelectionAction());
 
     QMenu * exportMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EXPORT);
     SAFE_POINT(exportMenu != NULL, "exportMenu", );
@@ -1933,14 +367,15 @@ void MSAEditorSequenceArea::buildMenu(QMenu* m) {
     colorsSchemeMenu->menuAction()->setObjectName("Colors");
     colorsSchemeMenu->setIcon(QIcon(":core/images/color_wheel.png"));
     foreach(QAction* a, colorSchemeMenuActions) {
-        colorsSchemeMenu->addAction(a);
+        MsaSchemesMenuBuilder::addActionOrTextSeparatorToMenu(a, colorsSchemeMenu);
     }
+    colorsSchemeMenu->addSeparator();
 
     QMenu* customColorSchemaMenu = new QMenu(tr("Custom schemes"), colorsSchemeMenu);
     customColorSchemaMenu->menuAction()->setObjectName("Custom schemes");
 
     foreach(QAction* a, customColorSchemeMenuActions) {
-        customColorSchemaMenu->addAction(a);
+        MsaSchemesMenuBuilder::addActionOrTextSeparatorToMenu(a, customColorSchemaMenu);
     }
 
     if (!customColorSchemeMenuActions.isEmpty()){
@@ -1960,7 +395,7 @@ void MSAEditorSequenceArea::buildMenu(QMenu* m) {
     highlightSchemeMenu->menuAction()->setObjectName("Highlighting");
 
     foreach(QAction* a, highlightingSchemeMenuActions) {
-        highlightSchemeMenu->addAction(a);
+        MsaSchemesMenuBuilder::addActionOrTextSeparatorToMenu(a, highlightSchemeMenu);
     }
     highlightSchemeMenu->addSeparator();
     highlightSchemeMenu->addAction(useDotsAction);
@@ -1973,13 +408,13 @@ void MSAEditorSequenceArea::sl_fontChanged(QFont font) {
     repaint();
 }
 
-void MSAEditorSequenceArea::sl_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet) {
+void MSAEditorSequenceArea::sl_alphabetChanged(const MaModificationInfo &mi, const DNAAlphabet *prevAlphabet) {
     updateColorAndHighlightSchemes();
 
     QString message;
-    if (mi.alphabetChanged || mi.type != MAlignmentModType_Undo) {
+    if (mi.alphabetChanged || mi.type != MaModificationType_Undo) {
         message = tr("The alignment has been modified, so that its alphabet has been switched from \"%1\" to \"%2\". Use \"Undo\", if you'd like to restore the original alignment.")
-            .arg(prevAlphabet->getName()).arg(editor->getMSAObject()->getAlphabet()->getName());
+            .arg(prevAlphabet->getName()).arg(editor->getMaObject()->getAlphabet()->getName());
     }
 
     if (message.isEmpty()) {
@@ -1990,8 +425,37 @@ void MSAEditorSequenceArea::sl_alphabetChanged(const MAlignmentModInfo &mi, cons
     notificationStack->addNotification(message, Info_Not);
 }
 
+void MSAEditorSequenceArea::sl_updateActions() {
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    assert(maObj != NULL);
+    bool readOnly = maObj->isStateLocked();
+
+    createSubaligniment->setEnabled(!isAlignmentEmpty());
+    saveSequence->setEnabled(!isAlignmentEmpty());
+    addSeqFromProjectAction->setEnabled(!readOnly);
+    addSeqFromFileAction->setEnabled(!readOnly);
+    sortByNameAction->setEnabled(!readOnly && !isAlignmentEmpty());
+    collapseModeSwitchAction->setEnabled(!readOnly && !isAlignmentEmpty());
+
+//Update actions of "Edit" group
+    bool canEditAlignment = !readOnly && !isAlignmentEmpty();
+    bool canEditSelectedArea = canEditAlignment && !selection.isNull();
+    const bool isEditing = (maMode != ViewMode);
+    ui->getDelSelectionAction()->setEnabled(canEditSelectedArea);
+    ui->getPasteAction()->setEnabled(!readOnly);
+
+    fillWithGapsinsSymAction->setEnabled(canEditSelectedArea && !isEditing);
+    bool oneCharacterIsSelected = selection.width() == 1 && selection.height() == 1;
+    replaceCharacterAction->setEnabled(canEditSelectedArea && oneCharacterIsSelected);
+    delColAction->setEnabled(canEditAlignment);
+    reverseComplementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
+    reverseAction->setEnabled(canEditSelectedArea);
+    complementAction->setEnabled(canEditSelectedArea && maObj->getAlphabet()->isNucleic());
+    removeAllGapsAction->setEnabled(canEditAlignment);
+}
+
 void MSAEditorSequenceArea::sl_delCol() {
-    QObjectScopedPointer<DeleteGapsDialog> dlg = new DeleteGapsDialog(this, editor->getMSAObject()->getNumRows());
+    QObjectScopedPointer<DeleteGapsDialog> dlg = new DeleteGapsDialog(this, editor->getMaObject()->getNumRows());
     dlg->exec();
     CHECK(!dlg.isNull(), );
 
@@ -2007,8 +471,8 @@ void MSAEditorSequenceArea::sl_delCol() {
         // then shifting should be canceled
         cancelShiftTracking();
 
-        MAlignmentObject* msaObj = editor->getMSAObject();
-        int gapCount = GAP_COLUMN_ONLY;
+        MultipleSequenceAlignmentObject* msaObj = getEditor()->getMaObject();
+        int gapCount = 0;
         switch(deleteMode) {
         case DeleteByAbsoluteVal:
             gapCount = value;
@@ -2022,29 +486,17 @@ void MSAEditorSequenceArea::sl_delCol() {
             break;
         }
         case DeleteAll:
-            gapCount = GAP_COLUMN_ONLY;
+            gapCount = msaObj->getNumRows();
             break;
         default:
             FAIL("Unknown delete mode", );
         }
 
-        QList<qint64> columnsToDelete = msaObj->getColumnsWithGaps(gapCount);
-        if (columnsToDelete.isEmpty()) {
-            return;
-        }
         U2OpStatus2Log os;
         U2UseCommonUserModStep userModStep(msaObj->getEntityRef(), os);
         Q_UNUSED(userModStep);
         SAFE_POINT_OP(os, );
-        msaObj->deleteColumnWithGaps(gapCount);
-    }
-}
-
-void MSAEditorSequenceArea::sl_fillCurrentSelectionWithGaps() {
-    if(!isAlignmentLocked()) {
-        emit si_startMsaChanging();
-        insertGapsBeforeSelection();
-        emit si_stopMsaChanging(true);
+        msaObj->deleteColumnsWithGaps(os, gapCount);
     }
 }
 
@@ -2058,40 +510,17 @@ void MSAEditorSequenceArea::sl_goto() {
     dlg->exec();
 }
 
-void MSAEditorSequenceArea::sl_onPosChangeRequest(int pos) {
-    centerPos(pos-1);
-    setSelection(MSAEditorSelection(pos-1,selection.y(),1,1));
+void MSAEditorSequenceArea::sl_onPosChangeRequest(int position) {
+    ui->getScrollController()->centerBase(position, width());
+    setSelection(MaEditorSelection(position-1, selection.y(), 1, 1));
 }
 
 void MSAEditorSequenceArea::sl_lockedStateChanged() {
-    updateActions();
-}
-
-void MSAEditorSequenceArea::centerPos(const QPoint& pos) {
-    assert(isInRange(pos));
-    int newStartPos = qMax(0, pos.x() - getNumVisibleBases(false)/2);
-    setFirstVisibleBase(newStartPos);
-
-    int newStartSeq = qMax(0, pos.y() - getNumVisibleSequences(false)/2);
-    setFirstVisibleSequence(newStartSeq);
-}
-
-void MSAEditorSequenceArea::centerPos(int pos) {
-    centerPos(QPoint(pos, cursorPos.y()));
-}
-
-void MSAEditorSequenceArea::wheelEvent (QWheelEvent * we) {
-    bool toMin = we->delta() > 0;
-    if (we->modifiers() == 0) {
-        shBar->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
-    }  else if (we->modifiers() & Qt::SHIFT) {
-        svBar->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
-    }
-    QWidget::wheelEvent(we);
+    sl_updateActions();
 }
 
 void MSAEditorSequenceArea::sl_removeAllGaps() {
-    MAlignmentObject* msa = editor->getMSAObject();
+    MultipleSequenceAlignmentObject* msa = getEditor()->getMaObject();
     SAFE_POINT(NULL != msa, tr("NULL msa object!"), );
     assert(!msa->isStateLocked());
 
@@ -2109,84 +538,25 @@ void MSAEditorSequenceArea::sl_removeAllGaps() {
     SAFE_POINT_OP(os, );
 
     QMap<qint64, QList<U2MsaGap> > noGapModel;
-    const MAlignment &ma = msa->getMAlignment();
-    foreach (qint64 rowId, ma.getRowsIds()) {
+    foreach (qint64 rowId, msa->getMultipleAlignment()->getRowsIds()) {
         noGapModel[rowId] = QList<U2MsaGap>();
     }
 
-    msa->updateGapModel(noGapModel, os);
+    msa->updateGapModel(os, noGapModel);
 
     MsaDbiUtils::trim(msa->getEntityRef(), os);
-    msa->updateCachedMAlignment();
+    msa->updateCachedMultipleAlignment();
 
     SAFE_POINT_OP(os, );
 
-    setFirstVisibleBase(0);
-    setFirstVisibleSequence(0);
+    ui->getScrollController()->setFirstVisibleBase(0);
+    ui->getScrollController()->setFirstVisibleRowByNumber(0);
     SAFE_POINT_OP(os, );
 }
 
-bool MSAEditorSequenceArea::checkState() const {
-#ifdef _DEBUG
-    MAlignmentObject* maObj = editor->getMSAObject();
-    int aliLen = maObj->getLength();
-    int nSeqs = maObj->getNumRows();
-
-    assert((startPos >=0 && startSeq >=0) || isAlignmentEmpty());
-    int lastPos = getLastVisibleBase(true);
-    int lastSeq = getLastVisibleSequence(true);
-    assert((lastPos < aliLen && lastSeq < nSeqs) || isAlignmentEmpty());
-
-    // TODO: check selection is valid
-    //int cx = cursorPos.x();
-    //int cy = cursorPos.y();
-    //assert(cx >= 0 && cy >= 0);
-    //assert(cx < aliLen && cy < nSeqs);
-#endif
-    return true;
-}
-
-void MSAEditorSequenceArea::sl_zoomOperationPerformed(bool resizeModeChanged) {
-    Q_UNUSED(resizeModeChanged);
-    completeRedraw = true;
-    validateRanges();
-    updateActions();
-    update();
-    onVisibleRangeChanged();
-}
-
-void MSAEditorSequenceArea::sl_modelChanged() {
-    MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
-    SAFE_POINT(NULL != collapsibleModel, tr("NULL collapsible model!"), );
-
-    if (collapsibleModel->isEmpty()) {
-        collapseModeSwitchAction->setChecked(false);
-        collapseModeUpdateAction->setEnabled(false);
-    }
-
-    int startToLast = getNumDisplayedSequences() - getFirstVisibleSequence();
-    int availableNum = countHeightForSequences(false);
-    if (startToLast < availableNum) {
-        int newStartSeq = qMax(0, startSeq - availableNum + startToLast);
-        if (startSeq != newStartSeq) {
-            setFirstVisibleSequence(newStartSeq);
-            return;
-        }
-    }
-    updateSelection();
-
-    completeRedraw = true;
-    updateVScrollBar();
-    update();
-}
-
-void MSAEditorSequenceArea::sl_referenceSeqChanged(qint64){
-    completeRedraw = true;
-    update();
-}
-
 void MSAEditorSequenceArea::sl_createSubaligniment(){
-    QObjectScopedPointer<CreateSubalignmentDialogController> dialog = new CreateSubalignmentDialogController(editor->getMSAObject(), selection.getRect(), this);
+    CHECK(getEditor() != NULL, );
+    QObjectScopedPointer<CreateSubalignmentDialogController> dialog = new CreateSubalignmentDialogController(getEditor()->getMaObject(), selection.getRect(), this);
     dialog->exec();
     CHECK(!dialog.isNull(), );
 
@@ -2195,13 +565,14 @@ void MSAEditorSequenceArea::sl_createSubaligniment(){
         bool addToProject = dialog->getAddToProjFlag();
         QString path = dialog->getSavePath();
         QStringList seqNames = dialog->getSelectedSeqNames();
-        Task* csTask = new CreateSubalignmentAndOpenViewTask(editor->getMSAObject(),
+        Task* csTask = new CreateSubalignmentAndOpenViewTask(getEditor()->getMaObject(),
             CreateSubalignmentSettings(window, seqNames, path, true, addToProject, dialog->getFormatId()));
         AppContext::getTaskScheduler()->registerTopLevelTask(csTask);
     }
 }
 
 void MSAEditorSequenceArea::sl_saveSequence(){
+    CHECK(getEditor() != NULL, );
     int seqIndex = selection.y();
 
     if(selection.height() > 1){
@@ -2209,8 +580,9 @@ void MSAEditorSequenceArea::sl_saveSequence(){
         return;
     }
 
-    QString seqName = editor->getMSAObject()->getMAlignment().getRow(seqIndex).getName();
-    QObjectScopedPointer<SaveSelectedSequenceFromMSADialogController> d = new SaveSelectedSequenceFromMSADialogController((QWidget*)AppContext::getMainWindow()->getQMainWindow());
+    QString seqName = editor->getMaObject()->getMultipleAlignment()->getRow(seqIndex)->getName();
+    QObjectScopedPointer<SaveSelectedSequenceFromMSADialogController> d = new SaveSelectedSequenceFromMSADialogController(editor->getMaObject()->getDocument()->getURL().dirPath(),
+        GUrlUtils::fixFileName(seqName), (QWidget*)AppContext::getMainWindow()->getQMainWindow());
     const int rc = d->exec();
     CHECK(!d.isNull(), );
 
@@ -2219,7 +591,7 @@ void MSAEditorSequenceArea::sl_saveSequence(){
     }
     //TODO: OPTIMIZATION code below can be wrapped to task
     DNASequence seq;
-    foreach(DNASequence s,  MSAUtils::ma2seq(editor->getMSAObject()->getMAlignment(), d->trimGapsFlag)){
+    foreach(const DNASequence &s,  MSAUtils::ma2seq(getEditor()->getMaObject()->getMsa(), d->trimGapsFlag)){
         if (s.getName() == seqName){
             seq = s;
             break;
@@ -2270,111 +642,30 @@ void MSAEditorSequenceArea::sl_saveSequence(){
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
 
-void MSAEditorSequenceArea::sl_registerCustomColorSchemes() {
-    deleteOldCustomSchemes();
-
-    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
-    QList<MsaColorSchemeFactory *> customFactories = msaColorSchemeRegistry->getMsaCustomColorSchemes(editor->getMSAObject()->getAlphabet()->getType());
-
-    foreach (MsaColorSchemeFactory *factory, customFactories) {
-        QAction *action = new QAction(factory->getName(), this);
-        action->setObjectName(factory->getName());
-        action->setCheckable(true);
-        action->setData(factory->getId());
-        connect(action, SIGNAL(triggered()), SLOT(sl_changeColorScheme()));
-        customColorSchemeMenuActions.append(action);
-    }
-}
-
-void MSAEditorSequenceArea::sl_colorSchemeFactoryUpdated() {
-    applyColorScheme(colorScheme->getFactory()->getId());
-}
-
-void MSAEditorSequenceArea::sl_setDefaultColorScheme() {
-    MsaColorSchemeFactory *defaultFactory = getDefaultColorSchemeFactory();
-    SAFE_POINT(NULL != defaultFactory, L10N::nullPointerError("default color scheme factory"), );
-    applyColorScheme(defaultFactory->getId());
-}
-
-void MSAEditorSequenceArea::cancelSelection()
-{
-    MSAEditorSelection emptySelection;
-    setSelection(emptySelection);
-}
-
-void MSAEditorSequenceArea::updateHBarPosition(int base) {
-    if (isAlignmentEmpty()) {
-        shBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-        return;
-    }
-
-    if (base <= getFirstVisibleBase()) {
-        shBar->setupRepeatAction(QAbstractSlider::SliderSingleStepSub, 50, 10);
-    } else  if (base >= getLastVisibleBase(true)) {
-        shBar->setupRepeatAction(QAbstractSlider::SliderSingleStepAdd, 50, 10);
-    } else {
-        shBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-    }
-}
-
-void MSAEditorSequenceArea::updateVBarPosition(int seq) {
-    if (isAlignmentEmpty()) {
-        svBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-        return;
-    }
-
-    if (seq <= getFirstVisibleSequence()) {
-        svBar->setupRepeatAction(QAbstractSlider::SliderSingleStepSub, 50, 10);
-    } else if (seq >= getLastVisibleSequence(true)) {
-        svBar->setupRepeatAction(QAbstractSlider::SliderSingleStepAdd, 50, 10);
-    } else {
-        svBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
-    }
-}
-
-void MSAEditorSequenceArea::sl_replaceSelectedCharacter() {
-    msaMode = EditCharacterMode;
-    editModeAnimationTimer.start(500);
-    highlightCurrentSelection();
-}
-
-void MSAEditorSequenceArea::sl_delCurrentSelection()
-{
-    emit si_startMsaChanging();
-    deleteCurrentSelection();
-    emit si_stopMsaChanging(true);
-}
-
-U2Region MSAEditorSequenceArea::getSelectedRows() const {
-    return ui->getCollapseModel()->mapSelectionRegionToRows(U2Region(selection.y(), selection.height()));
-}
+void MSAEditorSequenceArea::sl_modelChanged() {
+    MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
+    SAFE_POINT(NULL != collapsibleModel, "NULL collapsible model", );
 
-U2Region MSAEditorSequenceArea::getRowsAt(int pos) const {
-    if (!ui->isCollapsibleMode()) {
-        return U2Region(pos, 1);
+    if (collapsibleModel->isEmpty()) {
+        collapseModeSwitchAction->setChecked(false);
+        collapseModeUpdateAction->setEnabled(false);
     }
 
-    MSACollapsibleItemModel* m = ui->getCollapseModel();
-    int itemIdx = m->itemAt(pos);
-    if (itemIdx >= 0) {
-        const MSACollapsableItem& item = m->getItem(itemIdx);
-        return U2Region(item.row, item.numRows);
-    }
-    return U2Region(m->mapToRow(pos), 1);
+    MaEditorSequenceArea::sl_modelChanged();
 }
 
 void MSAEditorSequenceArea::sl_copyCurrentSelection()
 {
+    CHECK(getEditor() != NULL, );
     // TODO: probably better solution would be to export selection???
 
     assert(isInRange(selection.topLeft()));
     assert(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)));
 
-    MAlignmentObject* maObj = editor->getMSAObject();
+    MultipleSequenceAlignmentObject* maObj = getEditor()->getMaObject();
     if (selection.isNull()) {
         return;
     }
-    const MAlignment& msa = maObj->getMAlignment();
 
     MSACollapsibleItemModel* m = ui->getCollapseModel();
     U2Region sel(m->mapToRow(selection.y()), m->mapToRow(selection.y() + selection.height()) - m->mapToRow(selection.y()));
@@ -2385,9 +676,8 @@ void MSAEditorSequenceArea::sl_copyCurrentSelection()
         if (ui->getCollapseModel()->rowToMap(i, true) < 0) {
             continue;
         }
-        const MAlignmentRow& row = msa.getRow(i);
         int len = selection.width();
-        QByteArray seqPart = row.mid(selection.x(), len, os).toByteArray(len, os);
+        QByteArray seqPart = maObj->getMsaRow(i)->mid(selection.x(), len, os)->toByteArray(os, len);
         selText.append(seqPart);
         if (i + 1 != sel.endPos()) { // do not add line break into the last line
             selText.append("\n");
@@ -2398,12 +688,12 @@ void MSAEditorSequenceArea::sl_copyCurrentSelection()
 
 void MSAEditorSequenceArea::sl_copyFormattedSelection(){
     const DocumentFormatId& formatId = getCopyFormatedAlgorithmId();
-    Task* clipboardTask = new SubalignmentToClipboardTask(editor, selection.getRect(), formatId);
+    Task* clipboardTask = new SubalignmentToClipboardTask(getEditor(), selection.getRect(), formatId);
     AppContext::getTaskScheduler()->registerTopLevelTask(clipboardTask);
 }
 
 void MSAEditorSequenceArea::sl_paste(){
-    MAlignmentObject* msaObject = editor->getMSAObject();
+    MultipleAlignmentObject* msaObject = editor->getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
@@ -2419,7 +709,8 @@ void MSAEditorSequenceArea::sl_paste(){
 }
 
 void MSAEditorSequenceArea::sl_pasteFinished(Task* _pasteTask){
-    MAlignmentObject* msaObject = editor->getMSAObject();
+    CHECK(getEditor() != NULL, );
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
@@ -2434,149 +725,10 @@ void MSAEditorSequenceArea::sl_pasteFinished(Task* _pasteTask){
     AppContext::getTaskScheduler()->registerTopLevelTask(task);
 }
 
-bool MSAEditorSequenceArea::shiftSelectedRegion(int shift) {
-    if (0 == shift) {
-        return true;
-    }
-
-    MAlignmentObject *maObj = editor->getMSAObject();
-    if (!maObj->isStateLocked()) {
-        const U2Region rows = getSelectedRows();
-        const int x = selection.x();
-        const int y = rows.startPos;
-        const int width = selection.width();
-        const int height = rows.length;
-        if (maObj->isRegionEmpty(x, y, width, height)) {
-            return true;
-        }
-        // backup current selection for the case when selection might disappear
-        const MSAEditorSelection selectionBackup = selection;
-
-        const int resultShift = maObj->shiftRegion(x, y, width, height, shift);
-        if (0 != resultShift) {
-            int newCursorPosX = (cursorPos.x() + resultShift >= 0) ? cursorPos.x() + resultShift : 0;
-            setCursorPos(newCursorPosX);
-
-            const MSAEditorSelection newSelection(selectionBackup.x() + resultShift, selectionBackup.y(),
-                selectionBackup.width(), selectionBackup.height());
-            setSelection(newSelection);
-            if ((selectionBackup.getRect().right() == getLastVisibleBase(false) && resultShift > 0)
-                || (selectionBackup.x() == getFirstVisibleBase() && 0 > resultShift))
-            {
-                setFirstVisibleBase(startPos + resultShift);
-            }
-            return true;
-        } else {
-            return false;
-        }
-    }
-    return false;
-}
-
-void MSAEditorSequenceArea::deleteCurrentSelection() {
-    if (selection.isNull()) {
-        return;
-    }
-    assert(isInRange(selection.topLeft()));
-    assert(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)));
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj == NULL || maObj->isStateLocked()) {
-        return;
-    }
-
-    const QRect areaBeforeSelection(0, 0, selection.x(), selection.height());
-    const QRect areaAfterSelection(selection.x() + selection.width(), selection.y(),
-        maObj->getLength() - selection.x() - selection.width(), selection.height());
-    if (maObj->isRegionEmpty(areaBeforeSelection.x(), areaBeforeSelection.y(), areaBeforeSelection.width(), areaBeforeSelection.height())
-        && maObj->isRegionEmpty(areaAfterSelection.x(), areaAfterSelection.y(), areaAfterSelection.width(), areaAfterSelection.height())
-        && selection.height() == maObj->getNumRows())
-    {
-        return;
-    }
-
-    // if this method was invoked during a region shifting
-    // then shifting should be canceled
-    cancelShiftTracking();
-
-    U2OpStatusImpl os;
-    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
-    Q_UNUSED(userModStep);
-    SAFE_POINT_OP(os, );
-
-    const U2Region& sel = getSelectedRows();
-    maObj->removeRegion(selection.x(), sel.startPos, selection.width(), sel.length, true);
-
-    if (selection.height() == 1 && selection.width() == 1) {
-        if (isInRange(selection.topLeft())) {
-            return;
-        }
-    }
-    cancelSelection();
-}
-
-void MSAEditorSequenceArea::processCharacterInEditMode(QKeyEvent *e) {
-    if (e->key() == Qt::Key_Escape) {
-        exitFromEditCharacterMode();
-        return;
-    }
-
-    QString text = e->text().toUpper();
-    if (1 == text.length()) {
-        QChar emDash(0x2015);
-        QRegExp latinCharacterOrGap(QString("([A-Z]| |-|%1)").arg(emDash));
-        if (latinCharacterOrGap.exactMatch(text)) {
-            QChar newChar = text.at(0);
-            newChar = (newChar == '-' || newChar == emDash || newChar == ' ') ? MAlignment_GapChar : newChar;
-            replaceSelectedCharacter(newChar.toLatin1());
-        }
-        else {
-            MainWindow *mainWindow = AppContext::getMainWindow();
-            const QString message = tr("It is not possible to insert the character into the alignment."
-                                       "Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').").arg(emDash);
-            mainWindow->addNotification(message, Error_Not);
-            exitFromEditCharacterMode();
-        }
-    }
-}
-
-void MSAEditorSequenceArea::replaceSelectedCharacter(char newCharacter) {
-    if (selection.isNull()) {
-        return;
-    }
-    SAFE_POINT(isInRange(selection.topLeft()), "Incorrect selection is detected!", );
-    MAlignmentObject* maObj = editor->getMSAObject();
-    if (maObj == NULL || maObj->isStateLocked()) {
-        return;
-    }
-
-    U2OpStatusImpl os;
-    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
-    Q_UNUSED(userModStep);
-    SAFE_POINT_OP(os, );
-
-    const U2Region& sel = getSelectedRows();
-    for (qint64 rowIndex = sel.startPos; rowIndex < sel.endPos(); rowIndex++) {
-        maObj->replaceCharacter(selection.x(), rowIndex, newCharacter);
-    }
-
-    exitFromEditCharacterMode();
-}
-
-void MSAEditorSequenceArea::addRowToSelection(int rowNumber) {
-    selectedRows.append(rowNumber);
-}
-
-void MSAEditorSequenceArea::deleteRowFromSelection(int rowNumber) {
-    selectedRows.removeAll(rowNumber);
-}
-
-void MSAEditorSequenceArea::clearSelection() {
-    selectedRows.clear();
-}
-
 void MSAEditorSequenceArea::sl_addSeqFromFile()
 {
-    MAlignmentObject* msaObject = editor->getMSAObject();
+    CHECK(getEditor() != NULL, );
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
@@ -2594,7 +746,7 @@ void MSAEditorSequenceArea::sl_addSeqFromFile()
 
     if (!urls.isEmpty()) {
         lod.url = urls.first();
-        cancelSelection();
+        sl_cancelSelection();
         AddSequencesFromFilesToAlignmentTask *task = new AddSequencesFromFilesToAlignmentTask(msaObject, urls);
         TaskWatchdog::trackResourceExistence(msaObject, task, tr("A problem occurred during adding sequences. The multiple alignment is no more available."));
         AppContext::getTaskScheduler()->registerTopLevelTask(task);
@@ -2604,7 +756,8 @@ void MSAEditorSequenceArea::sl_addSeqFromFile()
 
 void MSAEditorSequenceArea::sl_addSeqFromProject()
 {
-    MAlignmentObject* msaObject = editor->getMSAObject();
+    CHECK(getEditor() != NULL, );
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
@@ -2623,23 +776,24 @@ void MSAEditorSequenceArea::sl_addSeqFromProject()
         }
     }
     if (objectsToAdd.size() > 0) {
-        AddSequenceObjectsToAlignmentTask *addSeqObjTask = new AddSequenceObjectsToAlignmentTask(editor->getMSAObject(), objectsToAdd);
+        AddSequenceObjectsToAlignmentTask *addSeqObjTask = new AddSequenceObjectsToAlignmentTask(getEditor()->getMaObject(), objectsToAdd);
         AppContext::getTaskScheduler()->registerTopLevelTask(addSeqObjTask);
-        cancelSelection();
+        sl_cancelSelection();
     }
 }
 
 void MSAEditorSequenceArea::sl_sortByName() {
-    MAlignmentObject* msaObject = editor->getMSAObject();
+    CHECK(getEditor() != NULL, );
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
     if (msaObject->isStateLocked()) {
         return;
     }
-    MAlignment ma = msaObject->getMAlignment();
-    ma.sortRowsByName();
-    QStringList rowNames = ma.getRowNames();
-    if (rowNames != msaObject->getMAlignment().getRowNames()) {
+    MultipleSequenceAlignment msa = msaObject->getMultipleAlignmentCopy();
+    msa->sortRowsByName();
+    QStringList rowNames = msa->getRowNames();
+    if (rowNames != msaObject->getMultipleAlignment()->getRowNames()) {
         U2OpStatusImpl os;
-        msaObject->updateRowsOrder(ma.getRowsIds(), os);
+        msaObject->updateRowsOrder(os, msa->getRowsIds());
         SAFE_POINT_OP(os, );
     }
     if (ui->isCollapsibleMode()) {
@@ -2648,11 +802,11 @@ void MSAEditorSequenceArea::sl_sortByName() {
 }
 
 void MSAEditorSequenceArea::sl_setCollapsingMode(bool enabled) {
+    CHECK(getEditor() != NULL, );
     GCOUNTER(cvar, tvar, "Switch collapsing mode");
 
-    MAlignmentObject* msaObject = editor->getMSAObject();
-    int prevNumVisibleSequences = getNumVisibleSequences(false);
-    if (msaObject == NULL  || msaObject->isStateLocked()) {
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
+    if (msaObject == NULL || msaObject->isStateLocked()) {
         if (collapseModeSwitchAction->isChecked()) {
             collapseModeSwitchAction->setChecked(false);
             collapseModeUpdateAction->setEnabled(false);
@@ -2661,31 +815,25 @@ void MSAEditorSequenceArea::sl_setCollapsingMode(bool enabled) {
     }
 
     ui->setCollapsibleMode(enabled);
+    collapseModeUpdateAction->setEnabled(enabled);
     if (enabled) {
-        collapseModeUpdateAction->setEnabled(true);
         sl_updateCollapsingMode();
-    }
-    else {
-        collapseModeUpdateAction->setEnabled(false);
-
+    } else {
         MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
         SAFE_POINT(NULL != collapsibleModel, tr("NULL collapsible model!"), );
         collapsibleModel->reset();
     }
 
     updateSelection();
-    updateVScrollBar();
-    int emptyRowsCount = prevNumVisibleSequences - getNumVisibleSequences(false);
-    if(emptyRowsCount > 0) {
-        setFirstVisibleSequence(qMax(getFirstVisibleSequence() - emptyRowsCount, 0));
-    }
+    ui->getScrollController()->updateVerticalScrollBar();
 }
 
 void MSAEditorSequenceArea::sl_updateCollapsingMode() {
+    CHECK(getEditor() != NULL, );
     GCOUNTER(cvar, tvar, "Update collapsing mode");
 
     CHECK(ui->isCollapsibleMode(), );
-    MAlignmentObject *msaObject = editor->getMSAObject();
+    MultipleSequenceAlignmentObject *msaObject = getEditor()->getMaObject();
     SAFE_POINT(NULL != msaObject, tr("NULL Msa Object!"), );
 
     MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
@@ -2693,59 +841,27 @@ void MSAEditorSequenceArea::sl_updateCollapsingMode() {
     Document *doc = msaObject->getDocument();
     SAFE_POINT(NULL != doc, tr("NULL document!"), );
 
-    MAlignment ma = msaObject->getMAlignment();
+    MultipleSequenceAlignment msa = msaObject->getMultipleAlignmentCopy();
     QVector<U2Region> unitedRows;
-    bool sorted = ma.sortRowsBySimilarity(unitedRows);
+    bool sorted = msa->sortRowsBySimilarity(unitedRows);
     collapsibleModel->reset(unitedRows);
 
     U2OpStatusImpl os;
     if (sorted) {
-        msaObject->updateRowsOrder(ma.getRowsIds(), os);
+        msaObject->updateRowsOrder(os, msa->getRowsIds());
         SAFE_POINT_OP(os, );
     }
 
-    MAlignmentModInfo mi;
+    MaModificationInfo mi;
     mi.alignmentLengthChanged = false;
-    msaObject->updateCachedMAlignment(mi);
-}
-
-void MSAEditorSequenceArea::insertGapsBeforeSelection(int countOfGaps)
-{
-    if (selection.isNull() || 0 == countOfGaps || -1 > countOfGaps) {
-        return;
-    }
-    SAFE_POINT(isInRange(selection.topLeft()), tr("Top left corner of the selection has incorrect coords"), );
-    SAFE_POINT(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)),
-        tr("Bottom right corner of the selection has incorrect coords"), );
-
-    // if this method was invoked during a region shifting
-    // then shifting should be canceled
-    cancelShiftTracking();
-
-    MAlignmentObject *maObj = editor->getMSAObject();
-    if (NULL == maObj || maObj->isStateLocked()) {
-        return;
-    }
-    U2OpStatus2Log os;
-    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
-    Q_UNUSED(userModStep);
-    SAFE_POINT_OP(os,);
-
-    const MAlignment &msa = maObj->getMAlignment();
-    if (selection.width() == msa.getLength() && selection.height() == msa.getNumRows()) {
-        return;
-    }
-
-    const int removedRegionWidth = (-1 == countOfGaps) ? selection.width() : countOfGaps;
-    const U2Region& sequences = getSelectedRows();
-    maObj->insertGap(sequences,  selection.x() , removedRegionWidth);
-    moveSelection(removedRegionWidth, 0, true);
+    msaObject->updateCachedMultipleAlignment(mi);
 }
 
 void MSAEditorSequenceArea::reverseComplementModification(ModificationType& type) {
+    CHECK(getEditor() != NULL, );
     if (type == ModificationType::NoType)
         return;
-    MAlignmentObject* maObj = editor->getMSAObject();
+    MultipleSequenceAlignmentObject* maObj = getEditor()->getMaObject();
     if (maObj == NULL || maObj->isStateLocked()) {
         return;
     }
@@ -2762,15 +878,15 @@ void MSAEditorSequenceArea::reverseComplementModification(ModificationType& type
         // then shifting should be canceled
         cancelShiftTracking();
 
-        const MAlignment &ma = maObj->getMAlignment();
-        DNATranslation* trans =
-            AppContext::getDNATranslationRegistry()->lookupComplementTranslation(ma.getAlphabet());
+        const MultipleSequenceAlignment ma = maObj->getMultipleAlignment();
+        DNATranslation* trans = AppContext::getDNATranslationRegistry()->lookupComplementTranslation(ma->getAlphabet());
         if (trans == NULL || !trans->isOne2One()) {
             return;
         }
 
         U2OpStatus2Log os;
         U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+        Q_UNUSED(userModStep);
         SAFE_POINT_OP(os, );
 
         const U2Region& sel = getSelectedRows();
@@ -2778,8 +894,8 @@ void MSAEditorSequenceArea::reverseComplementModification(ModificationType& type
         QList<qint64> modifiedRowIds;
         modifiedRowIds.reserve(sel.length);
         for (int i = sel.startPos; i < sel.endPos(); i++) {
-            const MAlignmentRow &currentRow = ma.getRow(i);
-            QByteArray currentRowContent = currentRow.toByteArray(ma.getLength(), os);
+            const MultipleSequenceAlignmentRow currentRow = ma->getMsaRow(i);
+            QByteArray currentRowContent = currentRow->toByteArray(os, ma->getLength());
             switch (type.getType())
             {
             case ModificationType::Reverse:
@@ -2793,7 +909,7 @@ void MSAEditorSequenceArea::reverseComplementModification(ModificationType& type
                 trans->translate(currentRowContent.data(), currentRowContent.length());
                 break;
             }
-            QString name = currentRow.getName();
+            QString name = currentRow->getName();
             ModificationType oldType(ModificationType::NoType);
             if (name.endsWith("|revcompl")) {
                 name.resize(name.length() - QString("|revcompl").length());
@@ -2824,16 +940,16 @@ void MSAEditorSequenceArea::reverseComplementModification(ModificationType& type
             // Split the sequence into gaps and chars
             QByteArray seqBytes;
             QList<U2MsaGap> gapModel;
-            MsaDbiUtils::splitBytesToCharsAndGaps(currentRowContent, seqBytes, gapModel);
+            MaDbiUtils::splitBytesToCharsAndGaps(currentRowContent, seqBytes, gapModel);
 
-            maObj->updateRow(i, name, seqBytes, gapModel, os);
-            modifiedRowIds << currentRow.getRowId();
+            maObj->updateRow(os, i, name, seqBytes, gapModel);
+            modifiedRowIds << currentRow->getRowId();
         }
 
-        MAlignmentModInfo modInfo;
+        MaModificationInfo modInfo;
         modInfo.modifiedRowIds = modifiedRowIds;
         modInfo.alignmentLengthChanged = false;
-        maObj->updateCachedMAlignment(modInfo);
+        maObj->updateCachedMultipleAlignment(modInfo);
     }
 }
 
@@ -2852,35 +968,18 @@ void MSAEditorSequenceArea::sl_complementCurrentSelection() {
     reverseComplementModification(type);
 }
 
-QPair<QString, int> MSAEditorSequenceArea::getGappedColumnInfo() const{
-    if (isAlignmentEmpty()) {
-        return QPair<QString, int>(QString::number(0), 0);
-    }
-
-    const MAlignment& msa = editor->getMSAObject()->getMAlignment();
-    const MAlignmentRow& row = msa.getRow(getSelectedRows().startPos);
-    int len = row.getUngappedLength();
-    QChar current = row.charAt(selection.topLeft().x());
-    if(current == MAlignment_GapChar){
-        return QPair<QString, int>(QString("gap"),len);
-    }else{
-        int pos = row.getUngappedPosition(selection.topLeft().x());
-        return QPair<QString, int>(QString::number(pos + 1),len);
-    }
-}
-
 void MSAEditorSequenceArea::sl_resetCollapsibleModel() {
     editor->resetCollapsibleModel();
 }
 
 void MSAEditorSequenceArea::sl_setCollapsingRegions(const QList<QStringList>& collapsedGroups) {
+    CHECK(getEditor() != NULL, );
     MSACollapsibleItemModel* m = ui->getCollapseModel();
     SAFE_POINT(NULL != m, tr("Incorrect pointer to MSACollapsibleItemModel"),);
     m->reset();
 
-    MAlignmentObject* msaObject = editor->getMSAObject();
-    const MAlignment &ma = msaObject->getMAlignment();
-    QStringList rowNames = ma.getRowNames();
+    MultipleSequenceAlignmentObject* msaObject = getEditor()->getMaObject();
+    QStringList rowNames = msaObject->getMultipleAlignment()->getRowNames();
     QVector<U2Region> collapsedRegions;
 
     //Calculate regions of the groups
@@ -2909,121 +1008,13 @@ void MSAEditorSequenceArea::sl_setCollapsingRegions(const QList<QStringList>& co
 
     m->reset(collapsedRegions);
 
-    MAlignmentModInfo mi;
-    msaObject->updateCachedMAlignment(mi);
-
-    updateVScrollBar();
-}
-
-void MSAEditorSequenceArea::sl_changeSelectionColor() {
-    QColor black(Qt::black);
-    selectionColor = (black == selectionColor) ? Qt::darkGray : Qt::black;
-    update();
-}
-
-int MSAEditorSequenceArea::getHeight(){
-    return editor->getRowHeight() * getNumVisibleSequences(true);
-}
-
-QString MSAEditorSequenceArea::exportHighligtning(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose) {
-    QStringList result;
-
-    MAlignmentObject* maObj = editor->getMSAObject();
-    assert(maObj!=NULL);
-
-    const MAlignment& msa = maObj->getMAlignment();
-    const MSAEditor *editor = ui->getEditor();
-    const MAlignment &alignment = editor->getMSAObject()->getMAlignment();
-    U2OpStatusImpl os;
-    const int refSeq = alignment.getRowIndexByRowId(editor->getReferenceRowId(), os);
-    const MAlignmentRow *r = NULL;
-    if (MAlignmentRow::invalidRowId() != refSeq) {
-        r = &(msa.getRow(refSeq));
-    }
-
-    QString header;
-    header.append("Position\t");
-    QString refSeqName = editor->getReferenceRowName();
-    header.append(refSeqName);
-    header.append("\t");
-    foreach(QString name, maObj->getMAlignment().getRowNames()){
-        if(name != refSeqName){
-            header.append(name);
-            header.append("\t");
-        }
-    }
-    header.remove(header.length()-1,1);
-    result.append(header);
-
-
-    int posInResult = startingIndex;
-
-    for (int pos = startPos-1; pos < endPos; pos++) {
-        QString rowStr;
-        rowStr.append(QString("%1").arg(posInResult));
-        rowStr.append(QString("\t") + QString(msa.charAt(refSeq, pos)) + QString("\t"));
-        bool informative = false;
-        for (int seq = 0; seq < msa.getNumRows(); seq++) {  //FIXME possible problems when sequences have moved in view
-            if (seq == refSeq) continue;
-            char c = msa.charAt(seq, pos);
-
-            const char refChar = r->charAt(pos);
-            if (refChar == '-' && !keepGaps) {
-                continue;
-            }
-
-            QColor unused;
-            bool highlight = false;
-            highlightingScheme->setUseDots(useDotsAction->isChecked());
-            highlightingScheme->process(refChar, c, unused, highlight, pos, seq);
-
-            if (highlight) {
-                rowStr.append(c);
-                informative = true;
-            } else {
-                if (dots) {
-                    rowStr.append(".");
-                } else {
-                    rowStr.append(" ");
-                }
-            }
-            rowStr.append("\t");
-        }
-        if(informative){
-            header.remove(rowStr.length() - 1, 1);
-            result.append(rowStr);
-        }
-        posInResult++;
-    }
-
-    if (!transpose){
-        QStringList transposedRows = TextUtils::transposeCSVRows(result, "\t");
-        return transposedRows.join("\n");
-    }
-
-    return result.join("\n");
-}
-
-MsaColorScheme * MSAEditorSequenceArea::getCurrentColorScheme() const {
-    return colorScheme;
-}
-
-MsaHighlightingScheme * MSAEditorSequenceArea::getCurrentHighlightingScheme() const {
-    return highlightingScheme;
-}
-
-bool MSAEditorSequenceArea::getUseDotsCheckedState() const {
-    return useDotsAction->isChecked();
-}
+    MaModificationInfo mi;
+    msaObject->updateCachedMultipleAlignment(mi);
 
-void MSAEditorSequenceArea::cancelShiftTracking() {
-    shifting = false;
-    selecting = false;
-    changeTracker.finishTracking();
-    editor->getMSAObject()->releaseState();
+    ui->getScrollController()->updateVerticalScrollBar();
 }
 
-ExportHighligtningTask::ExportHighligtningTask(ExportHighligtingDialogController *dialog, MSAEditorSequenceArea *msaese_)
+ExportHighligtningTask::ExportHighligtningTask(ExportHighligtingDialogController *dialog, MaEditorSequenceArea *msaese_)
     : Task(tr("Export highlighting"), TaskFlags_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)
 {
     msaese = msaese_;
@@ -3037,7 +1028,7 @@ ExportHighligtningTask::ExportHighligtningTask(ExportHighligtingDialogController
 }
 
 void ExportHighligtningTask::run(){
-    QString exportedData = msaese->exportHighligtning(startPos, endPos, startingIndex, keepGaps, dots, transpose);
+    QString exportedData = msaese->exportHighlighting(startPos, endPos, startingIndex, keepGaps, dots, transpose);
 
     QFile resultFile(url.getURLString());
     CHECK_EXT(resultFile.open(QFile::WriteOnly | QFile::Truncate), url.getURLString(),);
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
index 087d92b..4c3ca96 100644
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
+++ b/src/corelibs/U2View/src/ov_msa/MSAEditorSequenceArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,47 +22,37 @@
 #ifndef _U2_MSA_EDITOR_SEQUENCE_AREA_H_
 #define _U2_MSA_EDITOR_SEQUENCE_AREA_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QMenu>
-#include <QtGui/QToolBar>
-#include <QtGui/QRubberBand>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QToolBar>
-#include <QtWidgets/QRubberBand>
-#endif
-#include <QTimer>
+#include <QMenu>
+#include <QToolBar>
+#include <QWidget>
 
-#include <U2Core/global.h>
-#include <U2Core/U2Region.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
-#include <U2Gui/GScrollBar.h>
-
+#include <U2Core/U2Region.h>
 
 #include "DeleteGapsDialog.h"
+#include "ExportHighlightedDialogController.h"
 #include "MSACollapsibleModel.h"
 #include "MsaEditorUserModStepController.h"
 #include "SaveSelectedSequenceFromMSADialogController.h"
-#include "ExportHighlightedDialogController.h"
+
+#include "view_rendering/MaEditorSequenceArea.h"
 
 namespace U2 {
 
-class MSAEditor;
-class MSAEditorUI;
 class GObjectView;
 class MsaColorScheme;
-class MsaHighlightingScheme;
-class MAlignment;
-class MAlignmentModInfo;
-class MAlignmentObject;
 class MsaColorSchemeFactory;
-class MsaHighlightingSchemeFactory;
 class MsaColorSchemeRegistry;
+class MSAEditor;
+class MsaEditorWgt;
+class MsaHighlightingScheme;
+class MsaHighlightingSchemeFactory;
 class MsaHighlightingSchemeRegistry;
+class MaModificationInfo;
+class MultipleSequenceAlignmentObject;
 class Settings;
+class SequenceAreaRenderer;
 
 class ModificationType {
 public:
@@ -118,241 +108,33 @@ private:
     int type;
 };
 
-class U2VIEW_EXPORT MSAEditorSelection {
-public:
-    MSAEditorSelection() { }
-    MSAEditorSelection(int left, int top, int width, int height) : selArea(left,top,width,height) { }
-    MSAEditorSelection(const QPoint& topLeft, const QPoint& bottomRight) : selArea(topLeft, bottomRight) { }
-    MSAEditorSelection(const QPoint& topLeft, int width, int height) : selArea(topLeft, QSize(width,height)) { }
-
-    // consider that selection may consist of several unconnected areas
-    bool isContiniuous() const { return true; }
-
-    bool isNull() const {return selArea.isNull(); }
-
-    QPoint topLeft() const { return selArea.topLeft(); }
-
-    const QRect& getRect() const {return selArea; }
-
-    int x() const { return selArea.x(); }
-
-    int y() const { return selArea.y(); }
-
-    int width() const { return selArea.width(); }
-
-    int height() const { return selArea.height(); }
-
-    bool operator==(const MSAEditorSelection& other) const {
-        return selArea == other.selArea;
-    }
-
-    MSAEditorSelection intersected(const MSAEditorSelection& selection) const {
-        QRect r = selArea.intersected(selection.selArea);
-        return MSAEditorSelection(r);
-    }
-
-private:
-    explicit MSAEditorSelection(QRect& rect) : selArea(rect) { }
-    QRect selArea;
-};
-
-class U2VIEW_EXPORT MSAEditorSequenceArea : public QWidget {
+class U2VIEW_EXPORT MSAEditorSequenceArea : public MaEditorSequenceArea {
     Q_OBJECT
     Q_DISABLE_COPY(MSAEditorSequenceArea)
-public:
-    MSAEditorSequenceArea(MSAEditorUI* ui, GScrollBar* hb, GScrollBar* vb);
-    ~MSAEditorSequenceArea();
-
-    // x dimension -> positions
-    int countWidthForBases(bool countClipped, bool forOffset = false) const;
-
-    int getFirstVisibleBase() const {return startPos;}
-
-    int getLastVisibleBase(bool countClipped, bool forOffset = false) const;
-
-    int getNumVisibleBases(bool countClipped, bool forOffset = false) const;
-
-    U2Region getBaseXRange(int pos, bool useVirtualCoords) const;
-    U2Region getBaseXRange(int pos, int firstVisiblePos, bool useVirtualCoords) const;
-
-    int getColumnNumByX(int x, bool selecting = false) const;
-    int getXByColumnNum(int columnNum) const;
-
-    void setFirstVisibleBase(int pos);
-
-
-    // y dimension -> sequences
-    int countHeightForSequences(bool countClipped) const;
-
-    int getFirstVisibleSequence() const {return startSeq;}
-
-    int getLastVisibleSequence(bool countClipped) const;
-    /*
-     * Returns count of sequences that are visible on a screen.
-     * @countClipped specifies whether include to result count or not last partially displayed row.
-     */
-    int getNumVisibleSequences(bool countClipped) const;
-    /*
-     * Returns count of sequences that are drawn on the widget by taking into account
-     * collapsed rows.
-     */
-    int getNumDisplayedSequences() const;
-
-    U2Region getSequenceYRange(int seqNum, bool useVirtualCoords) const;
-    U2Region getSequenceYRange(int seqNum, int firstVisibleRow, bool useVirtualCoords) const;
-
-    int getSequenceNumByY(int y) const;
-    int getYBySequenceNum(int sequenceNum) const;
-
-    void setFirstVisibleSequence(int seq);
-
-    bool isAlignmentEmpty() const { return editor->isAlignmentEmpty(); }
-
-    bool isPosInRange(int p) const;
-
-    bool isSeqInRange(int s) const;
-
-    bool isInRange(const QPoint& p) const;
+    friend class SequenceAreaRenderer;
+    friend class SequenceWithChromatogramAreaRenderer;
 
-    bool isVisible(const QPoint& p, bool countClipped) const;
-
-    bool isPosVisible(int pos, bool countClipped) const;
-
-    bool isSeqVisible(int seq, bool countClipped) const;
-
-    int coordToPos(int x) const;
-
-    // returns valid position only for visible area
-    QPoint coordToPos(const QPoint& coord) const;
-
-    // returns valid position if coords are out of visible area
-    QPoint coordToAbsolutePos(const QPoint& coord) const;
-    QPoint coordToAbsolutePosOutOfRange(const QPoint& coord) const;
-
-    const MSAEditorSelection& getSelection() const;
-
-    void updateSelection(const QPoint& newMousePos);
-
-    // update selection when collapsible model changed
-    void updateSelection();
-
-    void setSelection(const MSAEditorSelection& sel, bool newHighlightSelection = false);
-
-    void moveSelection(int dx, int dy, bool allowSelectionResize = false);
-
-    /**
-     * Shifts currently selected region to @shift.
-     * If @shift > 0, the region is moved to the right and "true" is returned.
-     * If @shift <= 0, the region is moved to the left only for the available number
-     * of columns (i.e. the columns with gaps). The returned value specifies
-     * whether the region was actually moved in this case.
-     */
-    bool shiftSelectedRegion(int shift);
-
-    void cancelSelection();
-
-    void deleteCurrentSelection();
-
-    void processCharacterInEditMode(QKeyEvent *e);
-    void replaceSelectedCharacter(char newCharacter);
-
-    void addRowToSelection(int rowNumber);
-    void deleteRowFromSelection(int rowNumber);
-    void clearSelection();
-
-    U2Region getSelectedRows() const;
-
-    U2Region getRowsAt(int seq) const;
-
-    QPair<QString, int> getGappedColumnInfo() const;
+public:
+    MSAEditorSequenceArea(MaEditorWgt* ui, GScrollBar* hb, GScrollBar* vb);
 
-    int getHeight();
+    MSAEditor *getEditor() const;
 
     QStringList getAvailableHighlightingSchemes() const;
 
     bool hasAminoAlphabet();
 
-    QString getCopyFormatedAlgorithmId() const;
-    void setCopyFormatedAlgorithmId(const QString& algoId);
-
 private:
     // emulating cursor mode with
-
-    void setCursorPos(const QPoint& p);
-
-    void setCursorPos(int x, int y);
-
-    void setCursorPos(int pos);
-
     void moveCursor(int dx, int dy);
 
-    void highlightCurrentSelection();
-
 public:
-    void centerPos(const QPoint& pos);
-
-    void centerPos(int pos);
-
-    void setFont(const QFont& f);
-
-    GScrollBar* getVBar() const {return svBar;}
-
-    GScrollBar* getHBar() const {return shBar;}
-
-    void updateHBarPosition(int base);
-
-    void updateVBarPosition(int seq);
-
-    void drawVisibleContent(QPainter& p);
-    bool drawContent(QPainter &p, const QRect &area);
-    bool drawContent(QPainter &p, const U2Region& region, const QList<qint64> &seqIdx);
-
-    bool drawContent(QPainter& p);
-    bool drawContent(QPixmap& pixmap);
-    bool drawContent(QPixmap& pixmap, const U2Region& region, const QList<qint64>& seqIdx);
-
-    QString exportHighligtning(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose);
-
-    MsaColorScheme * getCurrentColorScheme() const;
-    MsaHighlightingScheme * getCurrentHighlightingScheme() const;
-    bool getUseDotsCheckedState() const;
-
-    void onVisibleRangeChanged();
-
-    bool isAlignmentLocked();
-signals:
-    void si_startChanged(const QPoint& p, const QPoint& prev);
-    void si_selectionChanged(const MSAEditorSelection& current, const MSAEditorSelection& prev);
-    void si_selectionChanged(const QStringList& selectedRows);
-    void si_highlightingChanged();
-    void si_visibleRangeChanged(QStringList visibleSequences, int reqHeight);
-    void si_visibleRangeChanged();
-    void si_startMsaChanging();
-    void si_stopMsaChanging(bool msaUpdated);
-    void si_copyFormattedChanging(bool enabled);
-
-public slots:
-    void sl_changeColorSchemeOutside(const QString &name);
-    void sl_doUseDots();
-    void sl_changeCopyFormat(const QString& alg);
-    void sl_delCurrentSelection();
+    QString exportHighlighting(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose);
 
 protected:
-    void resizeEvent(QResizeEvent *);
-    void paintEvent(QPaintEvent *);
-    void mousePressEvent(QMouseEvent *);
-    void mouseReleaseEvent(QMouseEvent*);
-    void mouseMoveEvent(QMouseEvent*);
-    void keyPressEvent(QKeyEvent *);
-    void keyReleaseEvent(QKeyEvent *);
     void focusOutEvent(QFocusEvent* fe);
     void focusInEvent(QFocusEvent* fe);
 
 private slots:
-    void sl_onHScrollMoved(int pos);
-    void sl_onVScrollMoved(int pos);
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&);
-
     void sl_buildStaticMenu(GObjectView* v, QMenu* m);
     void sl_buildStaticToolbar(GObjectView* v, QToolBar* t);
     void sl_buildContextMenu(GObjectView* v, QMenu* m);
@@ -360,12 +142,10 @@ private slots:
     void sl_addSeqFromFile();
     void sl_addSeqFromProject();
 
-    void sl_replaceSelectedCharacter();
     void sl_copyCurrentSelection();
     void sl_copyFormattedSelection();
     void sl_paste();
     void sl_pasteFinished(Task* pasteTask);
-    void sl_fillCurrentSelectionWithGaps();
     void sl_delCol();
     void sl_goto();
     void sl_removeAllGaps();
@@ -376,131 +156,35 @@ private slots:
     void sl_reverseCurrentSelection();
     void sl_complementCurrentSelection();
 
-    void sl_onPosChangeRequest(int pos);
+    void sl_onPosChangeRequest(int position);
 
     void sl_createSubaligniment();
 
     void sl_saveSequence();
 
-    void sl_registerCustomColorSchemes();
-    void sl_colorSchemeFactoryUpdated();
-    void sl_setDefaultColorScheme();
-    void sl_changeColorScheme();
-    void sl_changeHighlightScheme();
-
-    void sl_zoomOperationPerformed(bool resizeModeChanged);
-
     void sl_modelChanged();
 
     void sl_showCustomSettings();
-    void sl_referenceSeqChanged(qint64);
 
     void sl_resetCollapsibleModel();
     void sl_setCollapsingRegions(const QList<QStringList>&);
-    void sl_useDots();
     void sl_fontChanged(QFont font);
 
-    void sl_alphabetChanged(const MAlignmentModInfo &mi, const DNAAlphabet *prevAlphabet);
-
-    void sl_changeSelectionColor();
+    void sl_alphabetChanged(const MaModificationInfo &mi, const DNAAlphabet *prevAlphabet);
 
-
-protected:
-    virtual void wheelEvent (QWheelEvent * event);
+    void sl_updateActions();
 
 private:
-    enum MsaMode {
-        ViewMode,
-        EditCharacterMode
-    };
+    void initRenderer();
 
     void buildMenu(QMenu* m);
-    void updateColorAndHighlightSchemes();
-
-    void initColorSchemes(MsaColorSchemeFactory* defaultColorSchemeFactory);
-    void registerCommonColorSchemes();
-    void initHighlightSchemes(MsaHighlightingSchemeFactory* hsf, DNAAlphabetType atype);
-
-    MsaColorSchemeFactory * getDefaultColorSchemeFactory();
-    void getColorAndHighlightingIds(QString &csid, QString &hsid, DNAAlphabetType atype, bool isFirstInitialization);
-    void applyColorScheme(const QString &id);
-
-    void exitFromEditCharacterMode();
-
-    void updateActions();
-
-    void updateHScrollBar();
-    void updateVScrollBar();
-
-    void drawAll();
-    void drawFocus(QPainter& p);
-    void drawSelection(QPainter &p);
-
-    /**
-     * Inserts a region consisting of gaps only before the selection. The inserted region width
-     * is specified by @countOfGaps parameter if 0 < @countOfGaps, its height is equal to the
-     * current selection's height.
-     *
-     * If there is no selection in MSA then the method does nothing.
-     *
-     * If -1 == @countOfGaps then the inserting region width is equal to
-     * the selection's width. If 1 > @countOfGaps and -1 != @countOfGaps then nothing happens.
-     */
-    void insertGapsBeforeSelection( int countOfGaps = -1 );
-
-    /**
-     * Reverse operation for @insertGapsBeforeSelection( ),
-     * removes the region preceding the selection if it consists of gaps only.
-     *
-     * If there is no selection in MSA then the method does nothing.
-     *
-     * @countOfGaps specifies maximum width of the removed region.
-     * If -1 == @countOfGaps then count of removed gap columns is equal to
-     * the selection width. If 1 > @countOfGaps and -1 != @countOfGaps then nothing happens.
-     */
-    void removeGapsPrecedingSelection( int countOfGaps = -1 );
-
-    void deleteOldCustomSchemes();
-
-    bool checkState() const;
-    void validateRanges();          //called on resize/refont like events
 
     void reverseComplementModification(ModificationType& type);
 
-    /*
-     * Interrupts the tracking of MSA modifications caused by a region shifting,
-     * also stops shifting. The method is used to keep consistence of undo/redo stack.
-     */
-    void cancelShiftTracking( );
-
-    void updateCollapsedGroups(const MAlignmentModInfo& modInfo);
-
-    MSAEditor*      editor;
-    MSAEditorUI*    ui;
-    GScrollBar*     shBar;
-    GScrollBar*     svBar;
-    QRubberBand*    rubberBand;
-
-    int             startPos; //first visible x pos
-    int             startSeq; //first visible y pos
-    MsaMode         msaMode;
-    QTimer          editModeAnimationTimer;
-    QColor          selectionColor;
-
-    bool                shifting;
-    bool                selecting;
-    Qt::MouseButton     prevPressedButton;
-    QPoint              origin; // global window coordinates
-    QPoint              cursorPos; // mouse cursor position in alignment coordinates
-    MSAEditorSelection  selection; // selection with rows indexes in collapsible model coordinates
-    MSAEditorSelection  baseSelection; // selection with rows indexes in absolute coordinates
-    QList<int>          selectedRows;
-    QStringList         selectedRowNames;
-    int                 msaVersionBeforeShifting;
+    void updateCollapsedGroups(const MaModificationInfo& modInfo);
 
     QAction*        copySelectionAction;
     QAction*        delColAction;
-    QAction*        insSymAction;
     QAction*        removeAllGapsAction;
     QAction*        gotoAction;
     QAction*        createSubaligniment;
@@ -510,35 +194,17 @@ private:
     QAction*        sortByNameAction;
     QAction*        collapseModeSwitchAction;
     QAction*        collapseModeUpdateAction;
-    QAction*        replaceCharacterAction;
     QAction*        reverseComplementAction;
     QAction*        reverseAction;
     QAction*        complementAction;
     QAction*        lookMSASchemesSettingsAction;
-    QAction*        useDotsAction;
-
-    QPixmap*        cachedView;
-    bool            completeRedraw;
-
-    MsaColorScheme* colorScheme;
-    MsaHighlightingScheme* highlightingScheme;
-    bool            highlightSelection;
-
-    QList<QAction*> colorSchemeMenuActions;
-    QList<QAction* > customColorSchemeMenuActions;
-    QList<QAction* > highlightingSchemeMenuActions;
-
-    // The member is intended for tracking MSA changes (handling U2UseCommonUserModStep objects)
-    // that does not fit into one method, e.g. shifting MSA region with mouse.
-    // If the changing action fits within one method it's recommended using
-    // the U2UseCommonUserModStep object explicitly.
-    MsaEditorUserModStepController changeTracker;
 };
 
+// SANGER_TODO: move to EditorTasks?
 class U2VIEW_EXPORT ExportHighligtningTask : public Task {
     Q_OBJECT
 public:
-    ExportHighligtningTask(ExportHighligtingDialogController *dialog, MSAEditorSequenceArea *msaese_);
+    ExportHighligtningTask(ExportHighligtingDialogController *dialog, MaEditorSequenceArea *msaese_);
 
     void run();
     QString generateReport() const;
@@ -552,7 +218,7 @@ private:
     bool dots;
     bool transpose;
     GUrl url;
-    MSAEditorSequenceArea *msaese;
+    MaEditorSequenceArea *msaese;
 };
 
 }//namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorState.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorState.cpp
deleted file mode 100644
index 8efec86..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorState.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorState.h"
-#include "MSAEditor.h"
-#include "MSAEditorFactory.h"
-
-#include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/DNASequenceSelection.h>
-
-namespace U2 {
-
-#define VIEW_ID     QString("view_id")
-#define MSA_OBJ     QString("msa_obj_ref")
-#define FONT        QString("font")
-#define FIRST_POS   QString("first_pos")
-#define ZOOM_FACTOR QString("zoom_factor")
-
-bool MSAEditorState::isValid() const {
-    return stateData.value(VIEW_ID) == MSAEditorFactory::ID;
-}
-
-GObjectReference MSAEditorState::getMSAObjectRef() const {
-    return stateData.contains(MSA_OBJ) ? stateData[MSA_OBJ].value<GObjectReference>() : GObjectReference();
-}
-
-void MSAEditorState::setMSAObjectRef(const GObjectReference& ref) {
-    stateData[MSA_OBJ] = QVariant::fromValue<GObjectReference>(ref);
-}
-
-QFont MSAEditorState::getFont() const {
-
-    QVariant v = stateData.value(FONT);
-    if (v.type() == QVariant::Font) {
-        return v.value<QFont>();
-    }
-    return QFont();
-}
-
-void MSAEditorState::setFont(const QFont &f) {
-
-    stateData[FONT] = f;
-}
-
-int MSAEditorState::getFirstPos() const {
-    QVariant v = stateData.value(FIRST_POS);
-    if (v.type() == QVariant::Int) {
-        return v.toInt();
-    }
-    return -1;
-}
-
-void MSAEditorState::setFirstPos(int y) {
-    stateData[FIRST_POS] = y;
-}
-
-float MSAEditorState::getZoomFactor() const {
-    QVariant v = stateData.value(ZOOM_FACTOR);
-    if (v.type() == QVariant::Double) {
-        return v.toDouble();
-    }
-    return 1.0;
-}
-
-void MSAEditorState::setZoomFactor(float zoomFactor) {
-    stateData[ZOOM_FACTOR] = zoomFactor;
-}
-
-QVariantMap MSAEditorState::saveState(MSAEditor* v) {
-    MSAEditorState ss;
-
-    ss.stateData[VIEW_ID]=MSAEditorFactory::ID;
-
-    MAlignmentObject* msaObj = v->getMSAObject();
-    if (msaObj) {
-        ss.setMSAObjectRef(GObjectReference(msaObj));
-    }
-
-    ss.setFont(v->getFont());
-    ss.setFirstPos(v->getFirstVisibleBase());
-
-    return ss.stateData;
-}
-
-} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorState.h b/src/corelibs/U2View/src/ov_msa/MSAEditorState.h
deleted file mode 100644
index 0b29753..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorState.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_STATE_H_
-#define _U2_MSA_EDITOR_STATE_H_
-
-#include <U2Core/U2Region.h>
-#include <U2Core/GObject.h>
-
-#include <QtCore/QVariant>
-
-namespace U2 {
-
-class MSAEditor;
-
-
-class U2VIEW_EXPORT MSAEditorState {
-public:
-    MSAEditorState(){}
-
-    MSAEditorState(const QVariantMap& _stateData) : stateData(_stateData){}
-
-    static QVariantMap saveState(MSAEditor* v);
-
-    bool isValid() const;
-
-    GObjectReference getMSAObjectRef() const;
-
-    void setMSAObjectRef(const GObjectReference& ref);
-
-    QFont getFont() const;
-    void setFont(const QFont &f);
-
-    int getFirstPos() const;
-    void setFirstPos(int y);
-
-    float getZoomFactor() const;
-    void setZoomFactor(float zoomFactor);
-
-    QVariantMap stateData;
-};
-
-
-
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.cpp
deleted file mode 100644
index 73273bb..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.cpp
+++ /dev/null
@@ -1,248 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorStatusBar.h"
-#include "MSAEditorSequenceArea.h"
-
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MSAUtils.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QHBoxLayout>
-#else
-#include <QtWidgets/QHBoxLayout>
-#endif
-#include <QtGui/QKeyEvent>
-
-namespace U2 {
-
-MSAEditorStatusWidget::MSAEditorStatusWidget(MAlignmentObject* mobj, MSAEditorSequenceArea* sa)
-: aliObj(mobj), seqArea(sa),
-lockedIcon(":core/images/lock.png"), unlockedIcon(":core/images/lock_open.png")
-{
-    setObjectName("msa_editor_status_bar");
-    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
-
-    QLabel* findLabel = new QLabel();
-    findLabel->setText(tr("Find:"));
-
-    prevButton = new QPushButton();
-    prevButton->setObjectName("Find backward");
-    prevButton->setToolTip(tr("Find backward <b>(SHIFT + Enter)</b>"));
-    prevButton->setIcon(QIcon(":core/images/msa_find_prev.png"));
-    prevButton->setFlat(true);
-    nextButton = new QPushButton();
-    nextButton->setObjectName("Find forward");
-    nextButton->setToolTip(tr("Find forward <b>(Enter)</b>"));
-    nextButton->setIcon(QIcon(":core/images/msa_find_next.png"));
-    nextButton->setFlat(true);
-
-    searchEdit = new QLineEdit();
-    searchEdit->setObjectName("searchEdit");
-    //searchEdit->setMinimumWidth(200);
-    searchEdit->installEventFilter(this);
-    searchEdit->setMaxLength(1000);
-    findLabel->setBuddy(searchEdit);
-
-    linesLabel = new QLabel();
-    linesLabel->setObjectName("Line");
-    linesLabel->setAlignment(Qt::AlignCenter);
-    colsLabel = new QLabel();
-    colsLabel->setObjectName("Column");
-    colsLabel->setAlignment(Qt::AlignCenter);
-    posLabel = new QLabel();
-    posLabel->setObjectName("Position");
-    posLabel->setAlignment(Qt::AlignCenter);
-
-    lockLabel = new QLabel();
-
-    QHBoxLayout* l = new QHBoxLayout();
-    l->setMargin(2);
-    l->addStretch(1);
-    l->addWidget(findLabel);
-    l->addWidget(prevButton);
-    l->addWidget(searchEdit);
-    l->addWidget(nextButton);
-//    l->addStretch(1);
-    l->addWidget(linesLabel);
-    l->addWidget(colsLabel);
-    l->addWidget(posLabel);
-    l->addWidget(lockLabel);
-    setLayout(l);
-
-    connect(seqArea, SIGNAL(si_selectionChanged(const MSAEditorSelection& , const MSAEditorSelection& )),
-        SLOT(sl_selectionChanged(const MSAEditorSelection& , const MSAEditorSelection&)));
-    connect(mobj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-    connect(mobj, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockStateChanged()));
-
-    connect(prevButton, SIGNAL(clicked()), SLOT(sl_findPrev()));
-    connect(nextButton, SIGNAL(clicked()), SLOT(sl_findNext()));
-
-    findAction = new QAction(tr("Find in alignment"), this);//this action is used only to enable shortcut to change focus today
-    findAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_F));
-    findAction->setShortcutContext(Qt::WindowShortcut);
-    connect(findAction, SIGNAL(triggered()), SLOT(sl_findFocus()));
-    addAction(findAction);
-
-    updateCoords();
-    updateLock();
-}
-
-void MSAEditorStatusWidget::updateLock() {
-    bool locked = aliObj->isStateLocked();
-    lockLabel->setPixmap(locked ? lockedIcon : unlockedIcon);
-    lockLabel->setToolTip(locked ? tr("Alignment object is locked") : tr("Alignment object is not locked"));
-}
-
-void MSAEditorStatusWidget::updateCoords() {
-    const QPoint& pos = seqArea->getSelection().topLeft();
-    int aliLen = aliObj->getLength();
-    int nSeq = aliObj->getNumRows();
-    QFontMetrics fm(linesLabel->font(),this);
-
-    QString lpattern = QString(tr("Ln %1 / %2"));
-    qint64 shownLine = seqArea->isAlignmentEmpty() ? pos.y() : pos.y() + 1;
-    QString ltext = lpattern.arg(shownLine).arg(nSeq);
-    linesLabel->setText(ltext);
-    linesLabel->setToolTip(tr("Line %1 of %2").arg(pos.y() + 1).arg(nSeq));
-    linesLabel->setMinimumWidth(10 + fm.width(lpattern.arg(nSeq).arg(nSeq)));
-
-    QString cpattern = QString(tr("Col %1 / %2"));
-    qint64 shownCol = seqArea->isAlignmentEmpty() ? pos.x() : pos.x() + 1;
-    QString ctext = cpattern.arg(shownCol).arg(aliLen);
-    colsLabel->setText(ctext);
-    colsLabel->setToolTip(tr("Column %1 of %2").arg(pos.x() + 1).arg(aliLen));
-    colsLabel->setMinimumWidth(10 + fm.width(cpattern.arg(aliLen).arg(aliLen)));
-
-    QPair<QString, int> pp = seqArea->getGappedColumnInfo();
-    QString ppattern = QString(tr("Pos %1 / %2"));
-    QString ptext = ppattern.arg(pp.first).arg(pp.second);
-    posLabel->setText(ptext);
-    posLabel->setToolTip(tr("Position %1 of %2").arg(pp.first).arg(pp.second));
-    posLabel->setMinimumWidth(10 + fm.width(ppattern.arg(pp.second).arg(pp.second)));
-}
-
-bool MSAEditorStatusWidget::eventFilter(QObject*, QEvent* ev) {
-    if (ev->type() == QEvent::KeyPress) {
-        QKeyEvent* kev = (QKeyEvent*)ev;
-        if (kev->key() == Qt::Key_Enter || kev->key() == Qt::Key_Return) {
-            if (kev->modifiers() == Qt::SHIFT) {
-                prevButton->click();
-            } else {
-                nextButton->click();
-            }
-        } else if (kev->key() == Qt::Key_Escape) {
-            seqArea->setFocus();
-        }
-    }
-    return false;
-}
-
-void MSAEditorStatusWidget::sl_findNext( ) {
-    if (seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    QByteArray pat = searchEdit->text( ).toLocal8Bit( );
-    if ( pat.isEmpty( ) ) {
-        return;
-    }
-    const MAlignment &ma = aliObj->getMAlignment( );
-    if ( !ma.getAlphabet( )->isCaseSensitive( ) ) {
-        pat = pat.toUpper( );
-    }
-    const int aliLen = ma.getLength( );
-    const int nSeq = seqArea->getNumDisplayedSequences( );
-    QPoint selectionTopLeft = seqArea->getSelection( ).topLeft( );
-
-    if ( selectionTopLeft == lastSearchPos ) {
-        selectionTopLeft.setX( selectionTopLeft.x( ) + 1 );
-    }
-    for (int s = selectionTopLeft.y(); s < nSeq; s++) {
-        const U2Region rowsAtPosition = seqArea->getRowsAt( s );
-        SAFE_POINT( 0 <= rowsAtPosition.startPos, "Invalid row number!", );
-        const MAlignmentRow &row = ma.getRow( rowsAtPosition.startPos );
-        // if s == pos.y -> search from the current base, otherwise search from the seq start
-        int p = ( s == selectionTopLeft.y( ) ) ? selectionTopLeft.x( ) : 0;
-        for ( ; p < ( aliLen - pat.length( ) + 1 ); p++ ) {
-            char c = row.charAt( p );
-            int selLength = 0;
-            if ( MAlignment_GapChar != c && MSAUtils::equalsIgnoreGaps(row, p, pat, selLength) ) {
-                // select the result now
-                MSAEditorSelection sel( p, s, selLength, 1 );
-                seqArea->setSelection( sel, true );
-                seqArea->centerPos( sel.topLeft( ) );
-                lastSearchPos = seqArea->getSelection( ).topLeft( );
-                return;
-            }
-        }
-    }
-}
-
-void MSAEditorStatusWidget::sl_findPrev( ) {
-    if (seqArea->isAlignmentEmpty()) {
-        return;
-    }
-
-    QByteArray pat = searchEdit->text( ).toLocal8Bit( );
-    if ( pat.isEmpty( ) ) {
-        return;
-    }
-    const MAlignment &ma = aliObj->getMAlignment();
-    if ( !ma.getAlphabet( )->isCaseSensitive( ) ) {
-        pat = pat.toUpper( );
-    }
-    int aliLen = ma.getLength( );
-    QPoint pos = seqArea->getSelection( ).topLeft( );
-    if ( pos == lastSearchPos ) {
-        pos.setX( pos.x( ) - 1 );
-    }
-    for ( int s = pos.y( ); 0 <= s; s-- ) {
-        const U2Region rowsAtPosition = seqArea->getRowsAt( s );
-        SAFE_POINT( 0 <= rowsAtPosition.startPos, "Invalid row number!", );
-        const MAlignmentRow &row = ma.getRow( rowsAtPosition.startPos );
-        //if s == pos.y -> search from the current base, otherwise search from the seq end
-        int p = ( s == pos.y( ) ? pos.x( ) : ( aliLen - pat.length( ) + 1) );
-        while ( 0 <= p ) {
-            int selectionLength = 0;
-            if ( MAlignment_GapChar != row.charAt( p )
-                && MSAUtils::equalsIgnoreGaps( row, p, pat, selectionLength ) )
-            {
-                // select the result now
-                MSAEditorSelection sel( p, s, selectionLength, 1 );
-                seqArea->setSelection( sel, true );
-                seqArea->centerPos( sel.topLeft( ) );
-                lastSearchPos = seqArea->getSelection( ).topLeft( );
-                return;
-            }
-            p--;
-        }
-    }
-}
-
-void MSAEditorStatusWidget::sl_findFocus() {
-    searchEdit->setFocus();
-}
-
-}//namespace
-
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.h b/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.h
deleted file mode 100644
index c25e585..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorStatusBar.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_STATUS_BAR_H_
-#define _U2_MSA_EDITOR_STATUS_BAR_H_
-
-#include <QtCore/QObject>
-#include <QtCore/QVector>
-#include <QtCore/QEvent>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#endif
-
-namespace U2 {
-
-class MAlignmentObject;
-class MAlignment;
-class MAlignmentModInfo;
-class MSAEditorSequenceArea;
-class MSAEditorSelection;
-
-class MSAEditorStatusWidget : public QWidget {
-    Q_OBJECT
-public:
-    MSAEditorStatusWidget(MAlignmentObject* mobj, MSAEditorSequenceArea* seqArea);
-
-    bool eventFilter(QObject* obj, QEvent* ev);
-
-private slots:
-    void sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&) {updateCoords();}
-    void sl_lockStateChanged() {updateLock();}
-    void sl_selectionChanged(const MSAEditorSelection& , const MSAEditorSelection& ){updateCoords();}
-    void sl_findNext();
-    void sl_findPrev();
-    void sl_findFocus();
-
-private:
-    void updateCoords();
-    void updateLock();
-    MAlignmentObject*           aliObj;
-    MSAEditorSequenceArea*      seqArea;
-    QPixmap                     lockedIcon;
-    QPixmap                     unlockedIcon;
-
-    QPushButton*                prevButton;
-    QPushButton*                nextButton;
-    QLineEdit*                  searchEdit;
-    QLabel*                     linesLabel;
-    QLabel*                     colsLabel;
-    QLabel*                     lockLabel;
-    QLabel*                     posLabel;
-    QPoint                      lastSearchPos;
-    QAction*                    findAction;
-
-};
-
-
-}//namespace;
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp
deleted file mode 100644
index 2248b9e..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.cpp
+++ /dev/null
@@ -1,311 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorTasks.h"
-#include "MSAEditor.h"
-#include "MSAEditorFactory.h"
-#include "MSAEditorState.h"
-#include "MSAEditorConsensusArea.h"
-
-#include <U2Algorithm/MSAConsensusAlgorithm.h>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/Log.h>
-#include <U2Core/L10n.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/SaveDocumentTask.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/TextObject.h>
-#include <U2Core/UnloadedObject.h>
-
-#include <U2Gui/OpenViewTask.h>
-
-#include <U2Formats/DocumentFormatUtils.h>
-
-#include <QtCore/QSet>
-
-namespace U2 {
-
-/* TRANSLATOR U2::MSAEditor */
-/* TRANSLATOR U2::ObjectViewTask */
-
-//////////////////////////////////////////////////////////////////////////
-/// open new view
-
-OpenMSAEditorTask::OpenMSAEditorTask(MAlignmentObject* _obj)
-: ObjectViewTask(MSAEditorFactory::ID), msaObject(_obj)
-{
-    assert(!msaObject.isNull());
-}
-
-OpenMSAEditorTask::OpenMSAEditorTask(UnloadedObject* _obj)
-: ObjectViewTask(MSAEditorFactory::ID), unloadedReference(_obj)
-{
-    assert(_obj->getLoadedObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT);
-    documentsToLoad.append(_obj->getDocument());
-}
-
-OpenMSAEditorTask::OpenMSAEditorTask(Document* doc)
-: ObjectViewTask(MSAEditorFactory::ID), msaObject(NULL)
-{
-    assert(!doc->isLoaded());
-    documentsToLoad.append(doc);
-}
-
-void OpenMSAEditorTask::open() {
-    if (stateInfo.hasError() || (msaObject.isNull() && documentsToLoad.isEmpty())) {
-        return;
-    }
-    if (msaObject.isNull()) {
-        Document* doc = documentsToLoad.first();
-        if(!doc){
-            stateInfo.setError(tr("Documet removed from project"));
-            return;
-        }
-        QList<GObject*> objects;
-        if (unloadedReference.isValid()) {
-            GObject* obj = doc->findGObjectByName(unloadedReference.objName);
-            if (obj!=NULL && obj->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT) {
-                msaObject = qobject_cast<MAlignmentObject*>(obj);
-            }
-        } else {
-            QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT, UOF_LoadedAndUnloaded);
-            msaObject = objects.isEmpty() ? NULL : qobject_cast<MAlignmentObject*>(objects.first());
-        }
-        if (msaObject.isNull()) {
-            stateInfo.setError(tr("Multiple alignment object not found"));
-            return;
-        }
-    }
-    viewName = GObjectViewUtils::genUniqueViewName(msaObject->getDocument(), msaObject);
-    uiLog.details(tr("Opening MSA editor for object: %1").arg(msaObject->getGObjectName()));
-
-    MSAEditor* v = new MSAEditor(viewName, msaObject);
-    GObjectViewWindow* w = new GObjectViewWindow(v, viewName, false);
-    MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
-    mdiManager->addMDIWindow(w);
-
-}
-
-void OpenMSAEditorTask::updateTitle(MSAEditor* msaEd) {
-    const QString& oldViewName = msaEd->getName();
-    GObjectViewWindow* w = GObjectViewUtils::findViewByName(oldViewName);
-    if (w != NULL) {
-        MAlignmentObject* msaObject = msaEd->getMSAObject();
-        QString newViewName = GObjectViewUtils::genUniqueViewName(msaObject->getDocument(), msaObject);
-        msaEd->setName(newViewName);
-        w->setWindowTitle(newViewName);
-    }
-}
-
-//////////////////////////////////////////////////////////////////////////
-// open view from state
-
-OpenSavedMSAEditorTask::OpenSavedMSAEditorTask(const QString& viewName, const QVariantMap& stateData)
-: ObjectViewTask(MSAEditorFactory::ID, viewName, stateData)
-{
-    MSAEditorState state(stateData);
-    GObjectReference ref = state.getMSAObjectRef();
-    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
-    if (doc == NULL) {
-        doc = createDocumentAndAddToProject(ref.docUrl, AppContext::getProject(), stateInfo);
-        CHECK_OP_EXT(stateInfo, stateIsIllegal = true ,);
-    }
-    if (!doc->isLoaded()) {
-        documentsToLoad.append(doc);
-    }
-
-}
-
-void OpenSavedMSAEditorTask::open() {
-    CHECK_OP(stateInfo, );
-
-    MSAEditorState state(stateData);
-    GObjectReference ref = state.getMSAObjectRef();
-    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
-    if (doc == NULL) {
-        stateIsIllegal = true;
-        stateInfo.setError(L10N::errorDocumentNotFound(ref.docUrl));
-        return;
-    }
-    GObject* obj = NULL;
-    if (doc->isDatabaseConnection() && ref.entityRef.isValid()) {
-        obj = doc->getObjectById(ref.entityRef.entityId);
-    } else {
-        obj = doc->findGObjectByName(ref.objName);
-    }
-    if (obj == NULL || obj->getGObjectType() != GObjectTypes::MULTIPLE_ALIGNMENT) {
-        stateIsIllegal = true;
-        stateInfo.setError(tr("Alignment object not found: %1").arg(ref.objName));
-        return;
-    }
-    MAlignmentObject* msaObject = qobject_cast<MAlignmentObject*>(obj);
-    assert(msaObject!=NULL);
-
-    MSAEditor* v = new MSAEditor(viewName, msaObject);
-    GObjectViewWindow* w = new GObjectViewWindow(v, viewName, true);
-    MWMDIManager* mdiManager =     AppContext::getMainWindow()->getMDIManager();
-    mdiManager->addMDIWindow(w);
-
-    updateRanges(stateData, v);
-}
-
-void OpenSavedMSAEditorTask::updateRanges(const QVariantMap& stateData, MSAEditor* ctx) {
-    Q_UNUSED(ctx);
-    MSAEditorState state(stateData);
-
-    QFont f = state.getFont();
-    if (!f.isCopyOf(QFont())) {
-        ctx->setFont(f);
-    }
-
-    int firstPos = state.getFirstPos();
-    ctx->setFirstVisibleBase(firstPos);
-
-    float zoomFactor = state.getZoomFactor();
-    ctx->setZoomFactor(zoomFactor);
-}
-
-
-//////////////////////////////////////////////////////////////////////////
-// update
-UpdateMSAEditorTask::UpdateMSAEditorTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData)
-: ObjectViewTask(v, stateName, stateData)
-{
-}
-
-void UpdateMSAEditorTask::update() {
-    if (view.isNull() || view->getFactoryId() != MSAEditorFactory::ID) {
-        return; //view was closed;
-    }
-
-    MSAEditor* msaView = qobject_cast<MSAEditor*>(view.data());
-    assert(msaView!=NULL);
-
-    OpenSavedMSAEditorTask::updateRanges(stateData, msaView);
-}
-
-
-ExportMSAConsensusTask::ExportMSAConsensusTask(const ExportMSAConsensusTaskSettings& s )
-: DocumentProviderTask(tr("Export consensus to MSA")
-, (TaskFlags(TaskFlag_NoRun) | TaskFlag_FailOnSubtaskError | TaskFlag_CancelOnSubtaskCancel))
-, settings(s), extractConsensus(NULL) {
-    setVerboseLogMode(true);
-    SAFE_POINT_EXT(s.msa != NULL, setError("Given msa pointer is NULL"), );
-}
-
-void ExportMSAConsensusTask::prepare(){
-    extractConsensus = new ExtractConsensusTask(settings.keepGaps, settings.msa);
-    addSubTask(extractConsensus);
-}
-
-QList<Task*> ExportMSAConsensusTask::onSubTaskFinished( Task* subTask ){
-    QList<Task*> result;
-    if(subTask == extractConsensus && !isCanceled() && !hasError()) {
-        Document *takenDoc = createDocument();
-        CHECK_OP(stateInfo, result);
-        SaveDocumentTask *saveTask = new SaveDocumentTask(takenDoc, takenDoc->getIOAdapterFactory(), takenDoc->getURL());
-        saveTask->addFlag(SaveDoc_Overwrite);
-        Project *proj = AppContext::getProject();
-        if(proj != NULL){
-            if(proj->findDocumentByURL(takenDoc->getURL()) != NULL){
-                result.append(saveTask);
-                return result;
-            }
-        }
-        saveTask->addFlag(SaveDoc_OpenAfter);
-        result.append(saveTask);
-    }
-    return result;
-}
-
-Document *ExportMSAConsensusTask::createDocument(){
-    filteredConsensus = extractConsensus->getExtractedConsensus();
-    CHECK_EXT(!filteredConsensus.isEmpty(), setError("Consensus is empty!"), NULL);
-    QString fullPath = GUrlUtils::prepareFileLocation(settings.url, stateInfo);
-    CHECK_OP(stateInfo, NULL);
-    GUrl url(fullPath);
-
-    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(settings.url));
-    DocumentFormat *df = AppContext::getDocumentFormatRegistry()->getFormatById(settings.format);
-    CHECK_EXT(df, setError("Document format is NULL!"), NULL);
-    GObject *obj = NULL;
-    QScopedPointer<Document> doc(df->createNewLoadedDocument(iof, fullPath, stateInfo));
-    CHECK_OP(stateInfo, NULL);
-    if (df->getFormatId() == BaseDocumentFormats::PLAIN_TEXT){
-        obj = TextObject::createInstance(filteredConsensus, settings.name, doc->getDbiRef(), stateInfo);
-    }else{
-        obj = DocumentFormatUtils::addSequenceObject(doc->getDbiRef(), settings.name, filteredConsensus, false, QVariantMap(), stateInfo);
-    }
-    CHECK_OP(stateInfo, NULL);
-    doc->addObject(obj);
-    return doc.take();
-}
-
-ExtractConsensusTask::ExtractConsensusTask( bool keepGaps_, MSAEditor* msa_ )
-: Task(tr("Export consensus to MSA"), TaskFlags(TaskFlag_None)),
-keepGaps(keepGaps_), msa(msa_){
-    setVerboseLogMode(true);
-    SAFE_POINT_EXT(msa != NULL, setError("Given msa pointer is NULL"), );
-}
-
-void ExtractConsensusTask::run() {
-    CHECK(msa->getUI(), );
-    CHECK(msa->getUI()->getConsensusArea(), );
-    CHECK(msa->getUI()->getConsensusArea()->getConsensusCache(),);
-
-    MSAConsensusAlgorithm *algorithm = msa->getUI()->getConsensusArea()->getConsensusAlgorithm();
-    MAlignment ma = msa->getMSAObject()->getMAlignment();
-    for (int i = 0, n = ma.getLength(); i < n; i++) {
-        if (stateInfo.isCoR()) {
-            return;
-        }
-        int count = 0;
-        int nSeq = ma.getNumRows();
-        SAFE_POINT(0 != nSeq, tr("No sequences in alignment"), );
-
-        QChar c = algorithm->getConsensusCharAndScore(ma, i, count);
-        if (c != MAlignment_GapChar || keepGaps) {
-            filteredConsensus.append(c);
-        }
-    }
-}
-
-const QByteArray& ExtractConsensusTask::getExtractedConsensus() const {
-    return filteredConsensus;
-}
-
-
-ExportMSAConsensusTaskSettings::ExportMSAConsensusTaskSettings(): keepGaps(true), msa(NULL),
-format(BaseDocumentFormats::PLAIN_TEXT)
-{}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.h b/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.h
deleted file mode 100644
index cee49c2..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorTasks.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_TASKS_H_
-#define _U2_MSA_EDITOR_TASKS_H_
-
-#include <U2Core/GObjectReference.h>
-#include <U2Gui/ObjectViewTasks.h>
-#include <U2Core/DocumentProviderTask.h>
-namespace U2 {
-
-class MAlignmentObject;
-class UnloadedObject;
-class MSAEditor;
-
-class OpenMSAEditorTask : public ObjectViewTask {
-    Q_OBJECT
-public:
-    OpenMSAEditorTask(MAlignmentObject* obj);
-    OpenMSAEditorTask(UnloadedObject* obj);
-    OpenMSAEditorTask(Document* doc);
-
-    virtual void open();
-
-    static void updateTitle(MSAEditor* msaEd);
-
-private:
-    QPointer<MAlignmentObject>  msaObject;
-    GObjectReference            unloadedReference;
-};
-
-class OpenSavedMSAEditorTask : public ObjectViewTask {
-    Q_OBJECT
-public:
-    OpenSavedMSAEditorTask(const QString& viewName, const QVariantMap& stateData);
-    virtual void open();
-
-    static void updateRanges(const QVariantMap& stateData, MSAEditor* ctx);
-    static void addAnnotations(const QVariantMap& stateData, MSAEditor* ctx);
-};
-
-
-class UpdateMSAEditorTask : public ObjectViewTask {
-public:
-    UpdateMSAEditorTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData);
-
-    virtual void update();
-};
-
-class ExportMSAConsensusTaskSettings {
-public:
-    ExportMSAConsensusTaskSettings();
-
-    bool keepGaps;
-    MSAEditor* msa;
-    QString url;
-    DocumentFormatId format;
-    QString name;
-};
-
-class ExtractConsensusTask : public Task {
-    Q_OBJECT
-public:
-    ExtractConsensusTask( bool keepGaps, MSAEditor* msa);
-    void run();
-    const QByteArray& getExtractedConsensus() const;
-private:
-    bool keepGaps;
-    MSAEditor* msa;
-    QByteArray filteredConsensus;
-};
-
-class ExportMSAConsensusTask : public DocumentProviderTask {
-    Q_OBJECT
-public:
-    ExportMSAConsensusTask(const ExportMSAConsensusTaskSettings& s);
-
-    void prepare();
-protected:
-    QList<Task*> onSubTaskFinished(Task* subTask);
-private:
-    Document* createDocument();
-    ExportMSAConsensusTaskSettings settings;
-    ExtractConsensusTask *extractConsensus;
-    QByteArray filteredConsensus;
-};
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.cpp b/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.cpp
deleted file mode 100644
index 3016e34..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAEditorUndoFramework.h"
-#include "MSACollapsibleModel.h"
-
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignment.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-
-namespace U2 {
-
-MSAEditorUndoFramework::MSAEditorUndoFramework(QObject* p, MAlignmentObject* ma)
-: QUndoStack(p), maObj(ma), lastSavedObjectVersion(0), maxMemUse(20*1024*1024), stateComplete(true)
-{
-    if (maObj!=NULL) {
-        connect(maObj, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-                       SLOT(sl_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
-        connect(maObj, SIGNAL(si_completeStateChanged(bool)), SLOT(sl_completeStateChanged(bool)));
-        connect(maObj, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
-    }
-
-    setUndoLimit(100);
-
-    uAction = createUndoAction(this);
-    uAction->setObjectName("Undo");
-    uAction->setIcon(QIcon(":core/images/undo.png"));
-    uAction->setShortcut(QKeySequence::Undo);
-    uAction->setToolTip(QString("%1 (%2)").arg(uAction->text()).arg(uAction->shortcut().toString()));
-
-    rAction = createRedoAction(this);
-    rAction->setObjectName("Redo");
-    rAction->setIcon(QIcon(":core/images/redo.png"));
-    rAction->setShortcut(QKeySequence::Redo);
-    rAction->setToolTip(QString("%1 (%2)").arg(rAction->text()).arg(rAction->shortcut().toString()));
-
-
-    sl_lockedStateChanged();//updates action state
-}
-
-void MSAEditorUndoFramework::sl_lockedStateChanged() {
-    bool active = maObj ? !maObj->isStateLocked() : false;
-    setActive(active);
-
-    int activeIdx = index();
-    int cnt = count();
-    uAction->setEnabled(active && activeIdx > 0);
-    rAction->setEnabled(active && activeIdx + 1 < cnt);
-}
-
-void MSAEditorUndoFramework::applyUndoRedoAction(const MAlignment& ma) {
-    if (maObj) {
-        assert(!maObj->isStateLocked());
-        lastSavedObjectVersion = maObj->getModificationVersion()+1;
-        maObj->setMAlignment(ma);
-    }
-}
-
-void MSAEditorUndoFramework::sl_completeStateChanged(bool _stateCompele){
-    stateComplete = _stateCompele;
-}
-
-void MSAEditorUndoFramework::sl_alignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& mi) {
-    if (maObj == NULL || lastSavedObjectVersion == maObj->getModificationVersion() ||
-            ((maBefore.getRows() == maObj->getMAlignment().getRows()) && (maBefore.getRowNames() == maObj->getMAlignment().getRowNames())))
-    {
-        return;
-    }
-    if (mi.hints.value(MODIFIER) == MAROW_SIMILARITY_SORT) {return;}
-    if(!stateComplete){return;}
-
-    lastSavedObjectVersion = maObj->getModificationVersion();
-    const MAlignment& maAfter = maObj->getMAlignment();
-    int memUseBefore = 0;
-    int cntBefore = count();
-    for (int i=0; i < cntBefore;i++) {
-        memUseBefore+=(static_cast<const MSAEditorUndoCommand*>(command(i)))->getMemUsage();
-    }
-    MSAEditorUndoWholeAliCommand* cmd = new MSAEditorUndoWholeAliCommand(maBefore, maAfter);
-    cmd->fwk = this;
-    int cmdMemUse = cmd->getMemUsage();
-    int undoL = undoLimit();
-    if (memUseBefore + cmdMemUse < maxMemUse && cntBefore == undoL) {
-        setUndoLimit(undoL+1);
-    }
-    push(cmd);
-
-    int newMemUse = memUseBefore + cmdMemUse;
-    if (newMemUse > maxMemUse) {
-        int itemsToRemove = 0;
-        int dMem = 0;
-        int cnt  = count();
-        for (; itemsToRemove < cnt; itemsToRemove++) {
-            dMem+=(static_cast<const MSAEditorUndoCommand*>(command(itemsToRemove)))->getMemUsage();
-            if (newMemUse - dMem <= maxMemUse) {
-                break;
-            }
-        }
-        int newLimit = cnt - itemsToRemove;
-        setUndoLimit(newLimit);
-    }
-}
-
-void MSAEditorUndoWholeAliCommand::redo() {
-    fwk->applyUndoRedoAction(maAfter);
-}
-
-void MSAEditorUndoWholeAliCommand::undo() {
-    fwk->applyUndoRedoAction(maBefore);
-}
-
-} //namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.h b/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.h
deleted file mode 100644
index 2922143..0000000
--- a/src/corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_EDITOR_UNDO_FRAMEWOFK_H_
-#define _U2_MSA_EDITOR_UNDO_FRAMEWOFK_H_
-
-#include <U2Core/global.h>
-#include <U2Core/MAlignment.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QUndoStack>
-#else
-#include <QtWidgets/QUndoStack>
-#endif
-
-namespace U2 {
-
-class MAlignmentObject;
-class MAlignmentModInfo;
-
-class U2VIEW_EXPORT MSAEditorUndoFramework : protected QUndoStack {
-    Q_OBJECT
-public:
-    MSAEditorUndoFramework(QObject* p, MAlignmentObject* ma);
-    void applyUndoRedoAction(const MAlignment& ma);
-
-    QAction* getUndoAction() const {return uAction;}
-    QAction* getRedoAction() const {return rAction;}
-
-public slots:
-    void sl_alignmentChanged(const MAlignment& aliBefore, const MAlignmentModInfo& modInfo);
-    void sl_lockedStateChanged();
-    void sl_completeStateChanged(bool complete);
-
-private:
-    MAlignmentObject*   maObj;
-    int                 lastSavedObjectVersion;
-    int                 maxMemUse;//in bytes;
-    bool                stateComplete;
-
-    QAction*            uAction;
-    QAction*            rAction;
-
-};
-
-class MSAEditorUndoCommand : public QUndoCommand {
-    friend class MSAEditorUndoFramework;
-public:
-    MSAEditorUndoCommand() : fwk (NULL) {}
-    virtual int getMemUsage() const {return 0;} //in bytes, report non-0 if > 100k;
-
-protected:
-    MSAEditorUndoFramework* fwk;
-};
-
-class MSAEditorUndoWholeAliCommand : public MSAEditorUndoCommand {
-public:
-    MSAEditorUndoWholeAliCommand(const MAlignment& _maBefore, const MAlignment& _maAfter) : maBefore(_maBefore), maAfter(_maAfter){}
-
-    virtual int getMemUsage() const {return maBefore.estimateMemorySize();}
-
-    virtual void redo();
-    virtual void undo();
-
-protected:
-    MAlignment maBefore;
-    MAlignment maAfter;
-};
-
-
-} // namespace
-
-#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
index 7d623fa..065156b 100644
--- a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,35 +22,35 @@
 #include <QCheckBox>
 #include <QMessageBox>
 
-#include "MSASelectSubalignmentDialog.h"
-#include "MSAEditor.h"
+#include <U2Core/L10n.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
 
-#include <U2Core/L10n.h>
+#include "MaEditor.h"
+#include "MSASelectSubalignmentDialog.h"
 
 namespace U2 {
 
 
-SelectSubalignmentDialog::SelectSubalignmentDialog(MSAEditorUI *ui, const U2Region &region, const QList<qint64> &_selectedIndexes, QWidget *p)
+SelectSubalignmentDialog::SelectSubalignmentDialog(MaEditor *editor, const U2Region &region, const QList<int> &_selectedIndexes, QWidget *p)
     : QDialog(p),
-      ui(ui),
+      editor(editor),
       window(region),
       selectedIndexes(_selectedIndexes) {
-    SAFE_POINT(ui != NULL, L10N::nullPointerError("MSA Editor UI"), );
-    SAFE_POINT(ui->getEditor() != NULL, L10N::nullPointerError("MSA Editor"), );
+    SAFE_POINT(editor != NULL, L10N::nullPointerError("MaEditor"), );
 
     if (region.isEmpty() && selectedIndexes.isEmpty()) {
         int startSeq = -1;
         int endSeq = -1;
         int startPos = -1;
         int endPos = -1;
-        QRect selection = ui->getEditor()->getCurrentSelection();
+        QRect selection = editor->getCurrentSelection();
         if (selection.isNull()) {
             startPos = 0;
-            endPos = ui->getEditor()->getAlignmentLen();
+            endPos = editor->getAlignmentLen();
             startSeq = 0;
-            endSeq = ui->getEditor()->getNumSequences();
+            endSeq = editor->getNumSequences();
         } else {
             startSeq = selection.y();
             endSeq = selection.y() + selection.height();
@@ -66,9 +66,9 @@ SelectSubalignmentDialog::SelectSubalignmentDialog(MSAEditorUI *ui, const U2Regi
 }
 
 void SelectSubalignmentDialog::accept() {
-    int start = startPosBox->value() - 1;
-    int end = endPosBox->value() - 1;
-    int seqLen = ui->getEditor()->getAlignmentLen();
+    int start = startLineEdit->value() - 1;
+    int end = endLineEdit->value() - 1;
+    int seqLen = editor->getAlignmentLen();
 
     CHECK_EXT( start <= end,
                QMessageBox::critical(this, windowTitle(), tr("Start position must be less than end position!")), );
@@ -80,7 +80,7 @@ void SelectSubalignmentDialog::accept() {
 
     selectedNames.clear();
     selectedIndexes.clear();
-    for (qint64 i = 0; i < sequencesTableWidget->rowCount(); i++) {
+    for (int i = 0; i < sequencesTableWidget->rowCount(); i++) {
         QCheckBox *cb = qobject_cast<QCheckBox*>(sequencesTableWidget->cellWidget(i, 0));
         if(cb->isChecked()){
             selectedNames.append(cb->text());
@@ -116,18 +116,17 @@ void SelectSubalignmentDialog::sl_noneButtonClicked(){
 }
 
 void SelectSubalignmentDialog::init() {
-    SAFE_POINT(ui != NULL, tr("MSA Editor UI is NULL"), );
-    SAFE_POINT(ui->getEditor() != NULL, tr("MSA Editor is NULL"), );
+    SAFE_POINT(editor != NULL, tr("Ma Editor is NULL"), );
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223084");
+    new HelpButton(this, buttonBox, "20874988");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
 
     connect(allButton, SIGNAL(clicked()), SLOT(sl_allButtonClicked()));
     connect(noneButton, SIGNAL(clicked()), SLOT(sl_noneButtonClicked()));
     connect(invertButton, SIGNAL(clicked()), SLOT(sl_invertButtonClicked()));
 
-    MAlignmentObject *mobj = ui->getEditor()->getMSAObject();
+    MultipleAlignmentObject *mobj = editor->getMaObject();
     SAFE_POINT(mobj != NULL, tr("MSA Object is NULL"), );
 
     int rowNumber = mobj->getNumRows();
@@ -139,21 +138,16 @@ void SelectSubalignmentDialog::init() {
     sequencesTableWidget->verticalHeader()->setHidden( true );
     sequencesTableWidget->horizontalHeader()->setHidden( true );
     sequencesTableWidget->setShowGrid(false);
-#if (QT_VERSION < 0x050000) //Qt 5
-    sequencesTableWidget->horizontalHeader()->setResizeMode( 0, QHeaderView::Stretch );
-#else
     sequencesTableWidget->horizontalHeader()->setSectionResizeMode( 0, QHeaderView::Stretch );
-#endif
-
 
-    startPosBox->setMaximum(alignLength);
-    endPosBox->setMaximum(alignLength);
+    startLineEdit->setMaximum(alignLength);
+    endLineEdit->setMaximum(alignLength);
 
-    startPosBox->setValue(window.startPos + 1);
-    endPosBox->setValue(window.endPos());
+    startLineEdit->setValue(window.startPos + 1);
+    endLineEdit->setValue(window.endPos());
 
     for (int i = 0; i < rowNumber; i++) {
-        QCheckBox *cb = new QCheckBox(mobj->getMAlignment().getRow(i).getName(), this);
+        QCheckBox *cb = new QCheckBox(mobj->getMultipleAlignment()->getRow(i)->getName(), this);
         cb->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
         if (selectedIndexes.contains(i)) {
             cb->setChecked(true);
diff --git a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
index a1990be..be2ffdc 100644
--- a/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
+++ b/src/corelibs/U2View/src/ov_msa/MSASelectSubalignmentDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,24 +24,24 @@
 
 #include "ui_SelectSubalignmentDialog.h"
 
-#include <U2Core/global.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 
-class MSAEditorUI;
+class MaEditor;
 
 class SelectSubalignmentDialog : public QDialog, Ui_SelectSubalignmentDialog {
     Q_OBJECT
 public:
-    SelectSubalignmentDialog( MSAEditorUI *ui, const U2Region& region = U2Region(), const QList<qint64>& selectedIndexes = QList<qint64>(), QWidget *p = NULL);
+    SelectSubalignmentDialog( MaEditor *editor, const U2Region& region = U2Region(), const QList<int>& selectedIndexes = QList<int>(), QWidget *p = NULL);
 
     void accept();
 
     const U2Region getRegion() const { return window; }
 
     const QStringList& getSelectedSeqNames() const { return selectedNames; }
-    const QList<qint64>& getSelectedSeqIndexes() const { return selectedIndexes; }
+    const QList<int>& getSelectedSeqIndexes() const { return selectedIndexes; }
 
 public slots:
     void sl_allButtonClicked();
@@ -51,11 +51,11 @@ public slots:
 private:
     void init();
 
-    MSAEditorUI *ui;
+    MaEditor* editor;
 
     U2Region window;
     QStringList selectedNames;
-    QList<qint64> selectedIndexes;
+    QList<int> selectedIndexes;
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.cpp b/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.cpp
new file mode 100644
index 0000000..52d5fd1
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.cpp
@@ -0,0 +1,147 @@
+ /**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MSAConsensusAlgorithm.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNASequenceSelection.h>
+
+#include <U2Gui/GUIUtils.h>
+#include <U2Gui/Notification.h>
+
+#include "MaConsensusMismatchController.h"
+#include "McaEditor.h"
+#include "McaEditorSequenceArea.h"
+#include "MSAEditorConsensusCache.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+#include "ov_sequence/SequenceObjectContext.h"
+
+namespace U2 {
+
+MaConsensusMismatchController::MaConsensusMismatchController(QObject* p,
+                                                             const QSharedPointer<MSAEditorConsensusCache>& consCache,
+                                                             MaEditor* editor)
+    : QObject(p),
+      consCache(consCache),
+      editor(editor),
+      nextMismatch(NULL),
+      prevMismatch(NULL)
+{
+    mismatchCache = QBitArray(editor->getAlignmentLen(), false);
+    connect(consCache.data(), SIGNAL(si_cachedItemUpdated(int, char)), SLOT(sl_updateItem(int, char)));
+    connect(consCache.data(), SIGNAL(si_cacheResized(int)), SLOT(sl_resize(int)));
+
+    nextMismatch = new QAction(QIcon(":core/images/mismatch-forward.png"), tr("Jump to next variation"), this);
+    nextMismatch->setObjectName("next_mismatch");
+    nextMismatch->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_V);
+    GUIUtils::updateActionToolTip(nextMismatch);
+    connect(nextMismatch, SIGNAL(triggered(bool)), SLOT(sl_next()));
+
+    prevMismatch = new QAction(QIcon(":core/images/mismatch-backward.png"), tr("Jump to previous variation"), this);
+    prevMismatch->setShortcut(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V);
+    prevMismatch->setObjectName("prev_mismatch");
+    GUIUtils::updateActionToolTip(prevMismatch);
+    connect(prevMismatch, SIGNAL(triggered(bool)), SLOT(sl_prev()));
+}
+
+bool MaConsensusMismatchController::isMismatch(int pos) const {
+    SAFE_POINT(0 <= pos && pos < mismatchCache.size(), "Invalid pos", false);
+    return mismatchCache[pos];
+}
+
+QAction *MaConsensusMismatchController::getPrevMismatchAction() const {
+    return prevMismatch;
+}
+
+QAction *MaConsensusMismatchController::getNextMismatchAction() const {
+    return nextMismatch;
+}
+
+void MaConsensusMismatchController::sl_updateItem(int pos, char c) {
+    SAFE_POINT(0 <= pos && pos < mismatchCache.size(), "Invalid pos", );
+    mismatchCache[pos] = c != MSAConsensusAlgorithm::INVALID_CONS_CHAR && editor->getReferenceCharAt(pos) != c;
+}
+
+void MaConsensusMismatchController::sl_resize(int newSize) {
+    mismatchCache.resize(newSize);
+    mismatchCache.fill(false);
+}
+
+void MaConsensusMismatchController::sl_next() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Jump to next variation", editor->getFactoryId());
+    selectNextMismatch(Forward);
+}
+
+void MaConsensusMismatchController::sl_prev() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Jump to previous variation", editor->getFactoryId());
+    selectNextMismatch(Backward);
+}
+
+void MaConsensusMismatchController::selectNextMismatch(NavigationDirection direction) {
+    McaEditor* mcaEditor = qobject_cast<McaEditor*>(editor);
+    CHECK(mcaEditor != NULL, );
+
+    SequenceObjectContext* ctx = mcaEditor->getReferenceContext();
+    int initialPos = -1;
+
+    if (ctx->getSequenceSelection()->isEmpty()) {
+        // find next/prev from visible range
+        MaEditorSequenceArea* seqArea = mcaEditor->getUI()->getSequenceArea();
+        initialPos = seqArea->getFirstVisibleBase() != 0
+                ? seqArea->getFirstVisibleBase() - 1
+                : mismatchCache.size() - 1;
+    } else {
+        // find next/prev from referenece selection
+        DNASequenceSelection* selection = ctx->getSequenceSelection();
+        initialPos = selection->getSelectedRegions().first().startPos;
+    }
+
+    int pos = initialPos;
+    do {
+        switch (direction) {
+        case Forward:
+            pos++;
+            if (pos == mismatchCache.size()) {
+                pos = 0;
+            }
+            break;
+        default:
+            pos--;
+            if (pos == -1) {
+                pos = mismatchCache.size() - 1;
+            }
+            break;
+        }
+        consCache->updateCacheItem(pos);
+        if (mismatchCache[pos] == true) {
+            emit si_selectMismatch(pos);
+            return;
+        }
+    } while (pos != initialPos);
+
+    // no mismatches - show notification
+    const NotificationStack *notificationStack = AppContext::getMainWindow()->getNotificationStack();
+    CHECK(notificationStack != NULL, );
+    notificationStack->addNotification(tr("There are no variations in the consensus sequence."), Info_Not);
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.h b/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.h
new file mode 100644
index 0000000..498f0bf
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaConsensusMismatchController.h
@@ -0,0 +1,71 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_CONSENSUS_MISMATCH_CONTROLLER_H_
+#define _U2_MA_CONSENSUS_MISMATCH_CONTROLLER_H_
+
+#include "MSAEditorConsensusCache.h"
+
+#include <QBitArray>
+#include <QObject>
+
+class QAction;
+
+namespace U2 {
+
+class MaEditor;
+
+class MaConsensusMismatchController : public QObject {
+    Q_OBJECT
+public:
+    MaConsensusMismatchController(QObject* p,
+                                  const QSharedPointer<MSAEditorConsensusCache>& consCache,
+                                  MaEditor* editor);
+    bool isMismatch(int pos) const;
+
+    QAction *getPrevMismatchAction() const;
+    QAction *getNextMismatchAction() const;
+
+signals:
+    void si_selectMismatch(int pos);
+
+private slots:
+    void sl_updateItem(int pos, char c);
+    void sl_resize(int newSize);
+
+    void sl_next();
+    void sl_prev();
+
+private:
+    void selectNextMismatch(NavigationDirection direction);
+
+private:
+    QBitArray mismatchCache;
+    QSharedPointer<MSAEditorConsensusCache> consCache;
+    MaEditor* editor;
+
+    QAction* nextMismatch;
+    QAction* prevMismatch;
+};
+
+} // namespace U2
+
+#endif // _U2_MA_CONSENSUS_MISMATCH_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditor.cpp b/src/corelibs/U2View/src/ov_msa/MaEditor.cpp
new file mode 100644
index 0000000..3fc882f
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditor.cpp
@@ -0,0 +1,470 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QFontDialog>
+
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/Settings.h>
+#include <U2Core/U2DbiUtils.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Gui/ExportDocumentDialogController.h>
+#include <U2Gui/ExportObjectUtils.h>
+#include <U2Gui/GUIUtils.h>
+
+#include <U2View/MSAEditorSequenceArea.h>
+#include <U2View/MSAEditorOffsetsView.h>
+#include <U2View/MSAEditorOverviewArea.h>
+
+#include "MaEditor.h"
+#include "MaEditorState.h"
+#include "MaEditorTasks.h"
+#include "helpers/ScrollController.h"
+#include "view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+SNPSettings::SNPSettings()
+    : seqId(U2MsaRow::INVALID_ROW_ID) {
+}
+
+const float MaEditor::zoomMult = 1.25;
+
+MaEditor::MaEditor(GObjectViewFactoryId factoryId, const QString &viewName, GObject *obj)
+    : GObjectView(factoryId, viewName),
+      ui(NULL),
+      cachedColumnWidth(0),
+      resizeMode(ResizeMode_FontAndContent),
+      zoomFactor(0),
+      exportHighlightedAction(NULL)
+{
+    maObject = qobject_cast<MultipleAlignmentObject*>(obj);
+    objects.append(maObject);
+
+    onObjectAdded(maObject);
+
+    requiredObjects.append(maObject);
+    GCOUNTER(cvar,tvar,factoryId);
+
+    if (!U2DbiUtils::isDbiReadOnly(maObject->getEntityRef().dbiRef)) {
+        U2OpStatus2Log os;
+        maObject->setTrackMod(os, TrackOnUpdate);
+    }
+
+    // SANGER_TODO: move to separate method
+    // do that in createWidget along with initActions?
+    saveAlignmentAction = new QAction(QIcon(":core/images/msa_save.png"), tr("Save alignment"), this);
+    saveAlignmentAction->setObjectName("Save alignment");
+    connect(saveAlignmentAction, SIGNAL(triggered()), SLOT(sl_saveAlignment()));
+
+    saveAlignmentAsAction = new QAction(QIcon(":core/images/msa_save_as.png"), tr("Save alignment as"), this);
+    saveAlignmentAsAction->setObjectName("Save alignment as");
+    connect(saveAlignmentAsAction, SIGNAL(triggered()), SLOT(sl_saveAlignmentAs()));
+
+    zoomInAction = new QAction(QIcon(":core/images/zoom_in.png"), tr("Zoom In"), this);
+    zoomInAction->setObjectName("Zoom In");
+    connect(zoomInAction, SIGNAL(triggered()), SLOT(sl_zoomIn()));
+
+    zoomOutAction = new QAction(QIcon(":core/images/zoom_out.png"), tr("Zoom Out"), this);
+    zoomOutAction->setObjectName("Zoom Out");
+    connect(zoomOutAction, SIGNAL(triggered()), SLOT(sl_zoomOut()));
+
+    zoomToSelectionAction = new QAction(QIcon(":core/images/zoom_reg.png"), tr("Zoom To Selection"), this);
+    zoomToSelectionAction->setObjectName("Zoom To Selection");
+    connect(zoomToSelectionAction, SIGNAL(triggered()), SLOT(sl_zoomToSelection()));
+
+    resetZoomAction = new QAction(QIcon(":core/images/zoom_whole.png"), tr("Reset Zoom"), this);
+    resetZoomAction->setObjectName("Reset Zoom");
+    connect(resetZoomAction, SIGNAL(triggered()), SLOT(sl_resetZoom()));
+
+    changeFontAction = new QAction(QIcon(":core/images/font.png"), tr("Change Font"), this);
+    changeFontAction->setObjectName("Change Font");
+    connect(changeFontAction, SIGNAL(triggered()), SLOT(sl_changeFont()));
+
+    exportHighlightedAction = new QAction(tr("Export highlighted"), this);
+    exportHighlightedAction->setObjectName("Export highlighted");
+    connect(exportHighlightedAction, SIGNAL(triggered()), this, SLOT(sl_exportHighlighted()));
+    exportHighlightedAction->setDisabled(true);
+
+    connect(maObject, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
+    connect(this, SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_resetColumnWidthCache()));
+    connect(this, SIGNAL(si_fontChanged(QFont)), SLOT(sl_resetColumnWidthCache()));
+}
+
+QVariantMap MaEditor::saveState() {
+    return MaEditorState::saveState(this);
+}
+
+Task* MaEditor::updateViewTask(const QString& stateName, const QVariantMap& stateData) {
+    return new UpdateMaEditorTask(this, stateName, stateData);
+}
+
+int MaEditor::getAlignmentLen() const {
+    return maObject->getLength();
+}
+
+int MaEditor::getNumSequences() const {
+    return maObject->getNumRows();
+}
+
+bool MaEditor::isAlignmentEmpty() const {
+    return getAlignmentLen() == 0 || getNumSequences() == 0;
+}
+
+const QRect& MaEditor::getCurrentSelection() const {
+    return ui->getSequenceArea()->getSelection().getRect();
+}
+
+int MaEditor::getRowContentIndent(int) const {
+    return 0;
+}
+
+int MaEditor::getSequenceRowHeight() const {
+    QFontMetrics fm(font, ui);
+    return fm.height() * zoomMult;
+}
+
+int MaEditor::getColumnWidth() const {
+    if (0 == cachedColumnWidth) {
+        QFontMetrics fm(font, ui);
+        cachedColumnWidth = fm.width('W') * zoomMult;
+
+        cachedColumnWidth = (int)(cachedColumnWidth * zoomFactor);
+        cachedColumnWidth = qMax(cachedColumnWidth, MOBJECT_MIN_COLUMN_WIDTH);
+
+    }
+    return cachedColumnWidth;
+}
+
+QVariantMap MaEditor::getHighlightingSettings(const QString &highlightingFactoryId) const {
+    const QVariant v = snp.highlightSchemeSettings.value(highlightingFactoryId);
+    if (v.isNull()) {
+        return QVariantMap();
+    } else {
+        CHECK(v.type() == QVariant::Map, QVariantMap());
+        return v.toMap();
+    }
+}
+
+void MaEditor::saveHighlightingSettings( const QString &highlightingFactoryId, const QVariantMap &settingsMap /* = QVariant()*/ ) {
+    snp.highlightSchemeSettings.insert(highlightingFactoryId, QVariant(settingsMap));
+}
+
+void MaEditor::setReference(qint64 sequenceId) {
+    if(sequenceId == U2MsaRow::INVALID_ROW_ID){
+        exportHighlightedAction->setDisabled(true);
+    }else{
+        exportHighlightedAction->setEnabled(true);
+    }
+    if(snp.seqId != sequenceId) {
+        snp.seqId = sequenceId;
+        emit si_referenceSeqChanged(sequenceId);
+    }
+    //REDRAW OTHER WIDGETS
+}
+
+void MaEditor::updateReference(){
+    if(maObject->getRowPosById(snp.seqId) == -1){
+        setReference(U2MsaRow::INVALID_ROW_ID);
+    }
+}
+
+void MaEditor::resetCollapsibleModel() {
+    MSACollapsibleItemModel *collapsibleModel = ui->getCollapseModel();
+    SAFE_POINT(NULL != collapsibleModel, "NULL collapsible model!", );
+    collapsibleModel->reset();
+}
+
+void MaEditor::sl_zoomIn() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Zoom in", getFactoryId());
+    int pSize = font.pointSize();
+
+    if (resizeMode == ResizeMode_OnlyContent) {
+        setZoomFactor(zoomFactor * zoomMult);
+    } else if ( (pSize < MOBJECT_MAX_FONT_SIZE) && (resizeMode == ResizeMode_FontAndContent) ) {
+        font.setPointSize(pSize+1);
+        setFont(font);
+    }
+
+    bool resizeModeChanged = false;
+
+    if (zoomFactor >= 1) {
+        ResizeMode oldMode = resizeMode;
+        resizeMode = ResizeMode_FontAndContent;
+        resizeModeChanged = resizeMode != oldMode;
+        setZoomFactor(1);
+    }
+    updateActions();
+
+    emit si_zoomOperationPerformed(resizeModeChanged);
+}
+
+void MaEditor::sl_zoomOut() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Zoom out", getFactoryId());
+    int pSize = font.pointSize();
+
+    bool resizeModeChanged = false;
+
+    if (pSize > MOBJECT_MIN_FONT_SIZE) {
+        font.setPointSize(pSize-1);
+        setFont(font);
+    } else {
+        SAFE_POINT(zoomMult > 0, QString("Incorrect value of MSAEditor::zoomMult"),);
+        setZoomFactor(zoomFactor / zoomMult);
+        ResizeMode oldMode = resizeMode;
+        resizeMode = ResizeMode_OnlyContent;
+        resizeModeChanged = resizeMode != oldMode;
+    }
+    updateActions();
+
+    emit si_zoomOperationPerformed(resizeModeChanged);
+}
+
+void MaEditor::sl_zoomToSelection()
+{
+    ResizeMode oldMode = resizeMode;
+    int seqAreaWidth =  ui->getSequenceArea()->width();
+    MaEditorSelection selection = ui->getSequenceArea()->getSelection();
+    if (selection.isNull()) {
+        return;
+    }
+    int selectionWidth = selection.width();
+    float pixelsPerBase = (seqAreaWidth / float(selectionWidth)) * zoomMult;
+    int fontPointSize = int(pixelsPerBase / fontPixelToPointSize);
+    if (fontPointSize >= MOBJECT_MIN_FONT_SIZE) {
+        if (fontPointSize > MOBJECT_MAX_FONT_SIZE) {
+            fontPointSize = MOBJECT_MAX_FONT_SIZE;
+        }
+        font.setPointSize(fontPointSize);
+        setFont(font);
+        resizeMode = ResizeMode_FontAndContent;
+        setZoomFactor(1);
+    } else {
+        if (font.pointSize() != MOBJECT_MIN_FONT_SIZE) {
+            font.setPointSize(MOBJECT_MIN_FONT_SIZE);
+            setFont(font);
+        }
+        setZoomFactor(pixelsPerBase / (MOBJECT_MIN_FONT_SIZE * fontPixelToPointSize));
+        resizeMode = ResizeMode_OnlyContent;
+    }
+    ui->getScrollController()->setFirstVisibleBase(selection.x());
+    ui->getScrollController()->setFirstVisibleRowByNumber(selection.y());
+
+    updateActions();
+
+    emit si_zoomOperationPerformed(resizeMode != oldMode);
+}
+
+void MaEditor::sl_resetZoom() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Reset zoom", getFactoryId());
+    QFont f = getFont();
+    f.setPointSize(MOBJECT_DEFAULT_FONT_SIZE);
+    setFont(f);
+    setZoomFactor(MOBJECT_DEFAULT_ZOOM_FACTOR);
+    ResizeMode oldMode = resizeMode;
+    resizeMode = ResizeMode_FontAndContent;
+    emit si_zoomOperationPerformed(resizeMode != oldMode);
+
+    updateActions();
+}
+
+void MaEditor::sl_saveAlignment(){
+    AppContext::getTaskScheduler()->registerTopLevelTask(new SaveDocumentTask(maObject->getDocument()));
+}
+
+void MaEditor::sl_saveAlignmentAs(){
+
+    Document* srcDoc = maObject->getDocument();
+    if (srcDoc == NULL) {
+        return;
+    }
+    if (!srcDoc->isLoaded()) {
+        return;
+    }
+
+    QObjectScopedPointer<ExportDocumentDialogController> dialog = new ExportDocumentDialogController(srcDoc, ui);
+    dialog->setAddToProjectFlag(true);
+    dialog->setWindowTitle(tr("Save Alignment"));
+    ExportObjectUtils::export2Document(dialog);
+}
+
+void MaEditor::sl_changeFont() {
+    bool ok = false;
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Change of the characters font", getFactoryId());
+    // QFontDialog::DontUseNativeDialog - no color selector, affects only Mac OS
+    QFont f = QFontDialog::getFont(&ok, font, widget, tr("Characters Font"), QFontDialog::DontUseNativeDialog);
+    if (!ok) {
+        return;
+    }
+    setFont(f);
+    updateActions();
+    emit si_completeUpdate();
+}
+
+void MaEditor::sl_lockedStateChanged() {
+    updateActions();
+}
+
+void MaEditor::sl_exportHighlighted(){
+    QObjectScopedPointer<ExportHighligtingDialogController> d = new ExportHighligtingDialogController(ui, (QWidget*)AppContext::getMainWindow()->getQMainWindow());
+    d->exec();
+    CHECK(!d.isNull(), );
+
+    if (d->result() == QDialog::Accepted){
+        AppContext::getTaskScheduler()->registerTopLevelTask(new ExportHighligtningTask(d.data(), ui->getSequenceArea()));
+    }
+}
+
+void MaEditor::sl_resetColumnWidthCache() {
+    cachedColumnWidth = 0;
+}
+
+void MaEditor::initActions() {
+    saveScreenshotAction = new QAction(QIcon(":/core/images/cam2.png"), tr("Export as image"), this);
+    saveScreenshotAction->setObjectName("Export as image");
+    connect(saveScreenshotAction, SIGNAL(triggered()), ui, SLOT(sl_saveScreenshot()));
+    ui->addAction(saveScreenshotAction);
+
+    showOverviewAction = new QAction(QIcon(":/core/images/msa_show_overview.png"), tr("Overview"), this);
+    showOverviewAction->setObjectName("Show overview");
+    showOverviewAction->setCheckable(true);
+    showOverviewAction->setChecked(true);
+    connect(showOverviewAction, SIGNAL(triggered()), ui->getOverviewArea(), SLOT(sl_show()));
+    ui->addAction(showOverviewAction);
+}
+
+void MaEditor::initZoom() {
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppConext is NULL", );
+    zoomFactor = s->getValue(getSettingsRoot() + MOBJECT_SETTINGS_ZOOM_FACTOR, MOBJECT_DEFAULT_ZOOM_FACTOR).toFloat();
+    updateResizeMode();
+}
+
+void MaEditor::initFont() {
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppConext is NULL", );
+    font.setFamily(s->getValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_FAMILY, MOBJECT_DEFAULT_FONT_FAMILY).toString());
+    font.setPointSize(s->getValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_SIZE, MOBJECT_DEFAULT_FONT_SIZE).toInt());
+    font.setItalic(s->getValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_ITALIC, false).toBool());
+    font.setBold(s->getValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_BOLD, false).toBool());
+
+    calcFontPixelToPointSizeCoef();
+}
+
+void MaEditor::updateResizeMode() {
+    if ( (font.pointSize() >= MOBJECT_MIN_FONT_SIZE) && (zoomFactor < 1.0f) ) {
+        resizeMode = ResizeMode_OnlyContent;
+    } else {
+        resizeMode = ResizeMode_FontAndContent;
+    }
+}
+
+void MaEditor::addCopyMenu(QMenu* m) {
+    QMenu* cm = m->addMenu(tr("Copy/Paste"));
+    cm->menuAction()->setObjectName(MSAE_MENU_COPY);
+}
+
+void MaEditor::addEditMenu(QMenu* m) {
+    QMenu* em = m->addMenu(tr("Edit"));
+    em->menuAction()->setObjectName(MSAE_MENU_EDIT);
+}
+
+void MaEditor::addExportMenu(QMenu* m) {
+    QMenu* em = m->addMenu(tr("Export"));
+    em->menuAction()->setObjectName(MSAE_MENU_EXPORT);
+    em->addAction(exportHighlightedAction);
+    if(!ui->getSequenceArea()->getCurrentHighlightingScheme()->getFactory()->isRefFree() &&
+                getReferenceRowId() != U2MsaRow::INVALID_ROW_ID){
+        exportHighlightedAction->setEnabled(true);
+    }else{
+        exportHighlightedAction->setDisabled(true);
+    }
+}
+
+void MaEditor::addViewMenu(QMenu* m) {
+    QMenu* em = m->addMenu(tr("View"));
+    em->menuAction()->setObjectName(MSAE_MENU_VIEW);
+    if (ui->getOffsetsViewController() != NULL) {
+        em->addAction(ui->getOffsetsViewController()->getToggleColumnsViewAction());
+    }
+}
+
+void MaEditor::addLoadMenu( QMenu* m ) {
+    QMenu* lsm = m->addMenu(tr("Add"));
+    lsm->menuAction()->setObjectName(MSAE_MENU_LOAD);
+}
+
+void MaEditor::addAlignMenu(QMenu* m) {
+    QMenu* em = m->addMenu(tr("Align"));
+    em->setIcon(QIcon(":core/images/align.png"));
+    em->menuAction()->setObjectName(MSAE_MENU_ALIGN);
+}
+
+void MaEditor::setFont(const QFont& f) {
+    int pSize = f.pointSize();
+    font = f;
+    calcFontPixelToPointSizeCoef();
+    font.setPointSize(qBound(MOBJECT_MIN_FONT_SIZE, pSize, MOBJECT_MAX_FONT_SIZE));
+    updateResizeMode();
+    emit si_fontChanged(font);
+
+    Settings* s = AppContext::getSettings();
+    s->setValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_FAMILY, f.family());
+    s->setValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_SIZE, f.pointSize());
+    s->setValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_ITALIC, f.italic());
+    s->setValue(getSettingsRoot() + MOBJECT_SETTINGS_FONT_BOLD, f.bold());
+}
+
+void MaEditor::calcFontPixelToPointSizeCoef() {
+    QFontInfo info(font);
+    fontPixelToPointSize = (double) info.pixelSize() / (double) info.pointSize();
+}
+
+void MaEditor::setFirstVisiblePosSeq(int firstPos, int firstSeq) {
+    if (ui->getSequenceArea()->isPosInRange(firstPos)) {
+        ui->getScrollController()->setFirstVisibleBase(firstPos);
+        ui->getScrollController()->setFirstVisibleRowByIndex(firstSeq);
+    }
+}
+
+void MaEditor::setZoomFactor(double newZoomFactor) {
+    zoomFactor = newZoomFactor;
+    updateResizeMode();
+    Settings* s = AppContext::getSettings();
+    s->setValue(getSettingsRoot() + MOBJECT_SETTINGS_ZOOM_FACTOR, zoomFactor);
+    sl_resetColumnWidthCache();
+}
+
+void MaEditor::updateActions() {
+    zoomInAction->setEnabled(font.pointSize() < MOBJECT_MAX_FONT_SIZE);
+    zoomOutAction->setEnabled( getColumnWidth() > MOBJECT_MIN_COLUMN_WIDTH );
+    zoomToSelectionAction->setEnabled( font.pointSize() < MOBJECT_MAX_FONT_SIZE);
+    changeFontAction->setEnabled( resizeMode == ResizeMode_FontAndContent);
+    emit si_updateActions();
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditor.h b/src/corelibs/U2View/src/ov_msa/MaEditor.h
new file mode 100644
index 0000000..af51085
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditor.h
@@ -0,0 +1,202 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_H_
+#define _U2_MA_EDITOR_H_
+
+#include <U2Gui/ObjectViewModel.h>
+
+namespace U2 {
+
+#define MSAE_SETTINGS_ROOT QString("msaeditor/")
+#define MCAE_SETTINGS_ROOT QString("mcaeditor/")
+
+#define MSAE_MENU_COPY          "MSAE_MENU_COPY"
+#define MSAE_MENU_EDIT          "MSAE_MENU_EDIT"
+#define MSAE_MENU_EXPORT        "MSAE_MENU_EXPORT"
+#define MSAE_MENU_VIEW          "MSAE_MENU_VIEW"
+#define MSAE_MENU_ALIGN         "MSAE_MENU_ALIGN"
+#define MSAE_MENU_TREES         "MSAE_MENU_TREES"
+#define MSAE_MENU_STATISTICS    "MSAE_MENU_STATISTICS"
+#define MSAE_MENU_ADVANCED      "MSAE_MENU_ADVANCED"
+#define MSAE_MENU_LOAD          "MSAE_MENU_LOAD_SEQ"
+
+#define MOBJECT_MIN_FONT_SIZE 8
+#define MOBJECT_MAX_FONT_SIZE 18
+#define MOBJECT_MIN_COLUMN_WIDTH 1
+
+#define MOBJECT_SETTINGS_COLOR_NUCL     "color_nucl"
+#define MOBJECT_SETTINGS_COLOR_AMINO    "color_amino"
+#define MOBJECT_SETTINGS_FONT_FAMILY    "font_family"
+#define MOBJECT_SETTINGS_FONT_SIZE      "font_size"
+#define MOBJECT_SETTINGS_FONT_ITALIC    "font_italic"
+#define MOBJECT_SETTINGS_FONT_BOLD      "font_bold"
+#define MOBJECT_SETTINGS_ZOOM_FACTOR    "zoom_factor"
+
+#define MOBJECT_DEFAULT_FONT_FAMILY "Verdana"
+#define MOBJECT_DEFAULT_FONT_SIZE 10
+#define MOBJECT_DEFAULT_ZOOM_FACTOR 1.0
+
+class MaEditorWgt;
+class MultipleAlignmentObject;
+
+class SNPSettings {
+public:
+    SNPSettings();
+    QPoint clickPoint;
+    qint64 seqId;
+    QVariantMap highlightSchemeSettings;
+};
+
+class U2VIEW_EXPORT MaEditor : public GObjectView {
+    Q_OBJECT
+    friend class OpenSavedMaEditorTask;
+    friend class MaEditorState;
+public:
+    enum ResizeMode {
+        ResizeMode_FontAndContent, ResizeMode_OnlyContent
+    };
+    static const float zoomMult; // SANGER_TODO: should be dependable on the view
+
+public:
+    MaEditor(GObjectViewFactoryId factoryId, const QString& viewName, GObject* obj);
+
+    virtual QVariantMap saveState();
+
+    virtual Task* updateViewTask(const QString& stateName, const QVariantMap& stateData);
+
+    virtual QString getSettingsRoot() const = 0;
+
+    virtual MultipleAlignmentObject* getMaObject() const { return maObject; }
+
+    virtual MaEditorWgt* getUI() const { return ui; }
+
+    virtual OptionsPanel* getOptionsPanel() { return optionsPanel; }
+
+    const QFont& getFont() const { return font; }
+
+    ResizeMode getResizeMode() const { return resizeMode; }
+
+    int getAlignmentLen() const;
+
+    int getNumSequences() const;
+
+    bool isAlignmentEmpty() const;
+
+    const QRect& getCurrentSelection() const;
+
+    virtual int getRowContentIndent(int rowId) const;
+    int getSequenceRowHeight() const; // SANGER_TODO: order the methods
+
+    int getColumnWidth() const;
+
+    QVariantMap getHighlightingSettings(const QString &highlightingFactoryId) const;
+
+    void saveHighlightingSettings(const QString &highlightingFactoryId, const QVariantMap &settingsMap = QVariantMap());
+
+    qint64 getReferenceRowId() const { return snp.seqId; }
+
+    virtual QString getReferenceRowName() const = 0;
+
+    virtual char getReferenceCharAt(int pos) const = 0;
+
+    void setReference(qint64 sequenceId);
+
+    void updateReference();
+
+    void resetCollapsibleModel(); // SANGER_TODO: collapsible shouldn't be here
+
+    void exportHighlighted(){ sl_exportHighlighted(); }
+
+signals:
+    void si_fontChanged(const QFont& f);
+    void si_zoomOperationPerformed(bool resizeModeChanged);
+    void si_referenceSeqChanged(qint64 referenceId);
+    void si_sizeChanged(int newHeight, bool isMinimumSize, bool isMaximumSize);
+    void si_completeUpdate();
+    void si_updateActions();
+
+protected slots:
+    virtual void sl_onContextMenuRequested(const QPoint & pos) = 0;
+
+    void sl_zoomIn();
+    void sl_zoomOut();
+    void sl_zoomToSelection();
+    void sl_resetZoom();
+
+    void sl_saveAlignment();
+    void sl_saveAlignmentAs();
+    void sl_changeFont();
+
+    void sl_lockedStateChanged();
+
+    void sl_exportHighlighted();
+
+private slots:
+    void sl_resetColumnWidthCache();
+
+protected:
+    virtual QWidget* createWidget() = 0;
+    virtual void initActions();
+    virtual void initZoom();
+    virtual void initFont();
+    void updateResizeMode();
+
+    void addCopyMenu(QMenu* m);
+    void addEditMenu(QMenu* m);
+    virtual void addExportMenu(QMenu* m);
+    void addViewMenu(QMenu* m);
+    void addLoadMenu(QMenu* m);
+    void addAlignMenu(QMenu* m); // SANGER_TODO: should the align menu exist in MCA?
+
+    void setFont(const QFont& f);
+    void calcFontPixelToPointSizeCoef();
+
+    void setFirstVisiblePosSeq(int firstPos, int firstSeq);
+    void setZoomFactor(double newZoomFactor);
+
+    virtual void updateActions();
+
+    MultipleAlignmentObject*    maObject;
+    MaEditorWgt*                ui;
+
+    QFont       font;
+    ResizeMode  resizeMode;
+    SNPSettings snp;
+    double      zoomFactor;
+    double      fontPixelToPointSize;
+    mutable int cachedColumnWidth;
+
+    QAction*          saveAlignmentAction;
+    QAction*          saveAlignmentAsAction;
+    QAction*          zoomInAction;
+    QAction*          zoomOutAction;
+    QAction*          zoomToSelectionAction;
+    QAction*          showOverviewAction;
+    QAction*          changeFontAction;
+    QAction*          resetZoomAction;
+    QAction*          saveScreenshotAction;
+    QAction*          exportHighlightedAction;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.cpp
new file mode 100644
index 0000000..fcc17e3
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.cpp
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorConsensusAreaSettings.h"
+
+namespace U2 {
+
+const int MaEditorConsensusAreaSettings::RULER_NOTCH_SIZE = 3;
+
+MaEditorConsensusAreaSettings::MaEditorConsensusAreaSettings()
+    : visibleElements(MSAEditorConsElement_HISTOGRAM | MSAEditorConsElement_CONSENSUS_TEXT | MSAEditorConsElement_RULER),
+      highlightMismatches(false)
+{
+    // SANGER_TODO: currently the ruler cannot be drawn above the text - draw methods should be refactored
+    order << MSAEditorConsElement_HISTOGRAM
+          << MSAEditorConsElement_CONSENSUS_TEXT
+          << MSAEditorConsElement_RULER;
+}
+
+bool MaEditorConsensusAreaSettings::isVisible(const MaEditorConsElement element) const {
+    return visibleElements.testFlag(element);
+}
+
+const QFont &MaEditorConsensusAreaSettings::getRulerFont() const {
+    return rulerFont;
+}
+
+void MaEditorConsensusAreaSettings::setRulerFont(const QFont &font) {
+    rulerFont.setFamily("Arial");
+    rulerFont.setPointSize(qMax(8, qRound(font.pointSize() * 0.7)));
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.h b/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.h
new file mode 100644
index 0000000..77f4686
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorConsensusAreaSettings.h
@@ -0,0 +1,60 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_CONSENSUS_AREA_SETTINGS_H_
+#define _U2_MA_EDITOR_CONSENSUS_AREA_SETTINGS_H_
+
+#include <QFont>
+#include <QMap>
+
+namespace U2 {
+
+enum MaEditorConsElement {
+    MSAEditorConsElement_HISTOGRAM = 1 << 0,
+    MSAEditorConsElement_CONSENSUS_TEXT = 1 << 1,
+    MSAEditorConsElement_RULER = 1 << 2
+};
+Q_DECLARE_FLAGS(MaEditorConsElements, MaEditorConsElement)
+Q_DECLARE_OPERATORS_FOR_FLAGS(MaEditorConsElements)
+
+class MaEditorConsensusAreaSettings {
+public:
+    MaEditorConsensusAreaSettings();
+
+    bool isVisible(const MaEditorConsElement element) const;
+
+    const QFont &getRulerFont() const;
+    void setRulerFont(const QFont &font);
+
+    QFont font;
+    QList<MaEditorConsElement>  order;
+    MaEditorConsElements        visibleElements;
+    // SANGER_TODO: valid only for mca yet - can be separated
+    bool                        highlightMismatches;
+    static const int RULER_NOTCH_SIZE;
+
+private:
+    QFont rulerFont;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_EDITOR_CONSENSUS_AREA_SETTINGS_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorFactory.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorFactory.cpp
new file mode 100644
index 0000000..fefc1aa
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorFactory.cpp
@@ -0,0 +1,195 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorFactory.h"
+
+#include "MaEditorState.h"
+#include "MaEditorTasks.h"
+#include "McaEditor.h"
+#include "MSAEditor.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/SelectionUtils.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+
+namespace U2 {
+
+const GObjectViewFactoryId MsaEditorFactory::ID("MSAEditor");
+const GObjectViewFactoryId McaEditorFactory::ID("MCAEditor");
+
+
+/************************************************************************/
+/* MaEditorFactory */
+/************************************************************************/
+MaEditorFactory::MaEditorFactory(GObjectType type, GObjectViewFactoryId id)
+    : GObjectViewFactory(id, tr("Alignment Editor")),
+      type(type)
+{
+}
+
+bool MaEditorFactory::canCreateView(const MultiGSelection& multiSelection) {
+    bool hasMaDocuments = !SelectionUtils::findDocumentsWithObjects(type, &multiSelection, UOF_LoadedAndUnloaded, true).isEmpty();
+    if (hasMaDocuments) {
+        return true;
+    }
+    return false;
+}
+
+#define MAX_VIEWS 10
+
+Task* MaEditorFactory::createViewTask(const MultiGSelection& multiSelection, bool single) {
+    QList<GObject*> msaObjects = SelectionUtils::findObjects(type, &multiSelection, UOF_LoadedAndUnloaded);
+    QSet<Document*> docsWithMSA = SelectionUtils::findDocumentsWithObjects(type,
+        &multiSelection, UOF_LoadedAndUnloaded, false);
+    QList<OpenMaEditorTask*> resTasks;
+
+    foreach(Document* doc, docsWithMSA) {
+        QList<GObject*> docObjs = doc->findGObjectByType(type, UOF_LoadedAndUnloaded);
+        if (!docObjs.isEmpty()) {
+            foreach(GObject* obj, docObjs){
+                if(!msaObjects.contains(obj)){
+                    msaObjects.append(obj);
+                }
+            }
+
+        } else {
+            resTasks.append(getOpenMaEditorTask(doc));
+            if (resTasks.size() == MAX_VIEWS) {
+                break;
+            }
+        }
+    }
+
+    if (!msaObjects.isEmpty()) {
+        foreach(GObject* o, msaObjects) {
+            if (resTasks.size() == MAX_VIEWS) {
+                break;
+            }
+            if (o->getGObjectType() == GObjectTypes::UNLOADED) {
+                resTasks.append(getOpenMaEditorTask(qobject_cast<UnloadedObject*>(o)));
+            } else {
+                assert(o->getGObjectType() == type);
+                resTasks.append(getOpenMaEditorTask(qobject_cast<MultipleAlignmentObject*>(o)));
+            }
+        }
+    }
+
+    if (resTasks.isEmpty()) {
+        return NULL;
+    }
+
+    if (resTasks.size() == 1 || single) {
+        return resTasks.first();
+    }
+
+    Task* result = new Task(tr("Open multiple views"), TaskFlag_NoRun);
+    foreach(Task* t, resTasks) {
+        result->addSubTask(t);
+    }
+    return result;
+}
+
+bool MaEditorFactory::isStateInSelection(const MultiGSelection& multiSelection, const QVariantMap& stateData) {
+    MaEditorState state(stateData);
+    if (!state.isValid()) {
+        return false;
+    }
+    GObjectReference ref = state.getMaObjectRef();
+    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
+    if (doc == NULL) { //todo: accept to use invalid state removal routines of ObjectViewTask ???
+        return false;
+    }
+    //check that document is in selection
+    QList<Document*> selectedDocs = SelectionUtils::getSelectedDocs(multiSelection);
+    if (selectedDocs.contains(doc)) {
+        return true;
+    }
+    //check that object is in selection
+    QList<GObject*> selectedObjects = SelectionUtils::getSelectedObjects(multiSelection);
+    GObject* obj = doc->findGObjectByName(ref.objName);
+    bool res = obj!=NULL && selectedObjects.contains(obj);
+    return res;
+}
+
+Task* MaEditorFactory::createViewTask(const QString& viewName, const QVariantMap& stateData) {
+    return new OpenSavedMaEditorTask(type, this, viewName, stateData);
+}
+
+bool MaEditorFactory::supportsSavedStates() const {
+    return true;
+}
+
+/************************************************************************/
+/* MsaEditorFactory */
+/************************************************************************/
+MsaEditorFactory::MsaEditorFactory()
+    : MaEditorFactory(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, ID)
+{
+}
+
+MaEditor* MsaEditorFactory::getEditor(const QString& viewName, GObject* obj) {
+    MultipleSequenceAlignmentObject* msaObj = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
+    SAFE_POINT(msaObj != NULL, "Invalid GObject", NULL);
+    return new MSAEditor(viewName, msaObj);
+}
+
+OpenMaEditorTask* MsaEditorFactory::getOpenMaEditorTask(MultipleAlignmentObject* obj) {
+    return new OpenMsaEditorTask(obj);
+}
+
+OpenMaEditorTask* MsaEditorFactory::getOpenMaEditorTask(UnloadedObject* obj) {
+    return new OpenMsaEditorTask(obj);
+}
+
+OpenMaEditorTask* MsaEditorFactory::getOpenMaEditorTask(Document* doc) {
+    return new OpenMsaEditorTask(doc);
+}
+
+/************************************************************************/
+/* McaEditorFactory */
+/************************************************************************/
+McaEditorFactory::McaEditorFactory()
+    : MaEditorFactory(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT, ID)
+{
+}
+
+MaEditor* McaEditorFactory::getEditor(const QString& viewName, GObject* obj) {
+    MultipleChromatogramAlignmentObject* mcaObj = qobject_cast<MultipleChromatogramAlignmentObject*>(obj);
+    SAFE_POINT(mcaObj != NULL, "Invalid GObject", NULL);
+    return new McaEditor(viewName, mcaObj);
+}
+
+OpenMaEditorTask* McaEditorFactory::getOpenMaEditorTask(MultipleAlignmentObject* obj) {
+    return new OpenMcaEditorTask(obj);
+}
+
+OpenMaEditorTask* McaEditorFactory::getOpenMaEditorTask(UnloadedObject* obj) {
+    return new OpenMcaEditorTask(obj);
+}
+
+OpenMaEditorTask* McaEditorFactory::getOpenMaEditorTask(Document* doc) {
+    return new OpenMcaEditorTask(doc);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorFactory.h b/src/corelibs/U2View/src/ov_msa/MaEditorFactory.h
new file mode 100644
index 0000000..0e4357b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorFactory.h
@@ -0,0 +1,102 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_FACTORY_H_
+#define _U2_MA_EDITOR_FACTORY_H_
+
+#include <U2Core/GObjectTypes.h>
+#include <U2Gui/ObjectViewModel.h>
+
+namespace U2 {
+
+class MaEditor;
+class MultipleAlignmentObject;
+class OpenMaEditorTask;
+class UnloadedObject;
+
+/************************************************************************/
+/* MaEditorFactory */
+/************************************************************************/
+class U2VIEW_EXPORT MaEditorFactory : public GObjectViewFactory {
+    Q_OBJECT
+public:
+    MaEditorFactory(GObjectType type, GObjectViewFactoryId id);
+
+    virtual bool canCreateView(const MultiGSelection& multiSelection);
+
+    virtual Task* createViewTask(const MultiGSelection& multiSelection, bool single = false);
+
+    virtual bool isStateInSelection(const MultiGSelection& multiSelection, const QVariantMap& stateData);
+
+    virtual Task* createViewTask(const QString& viewName, const QVariantMap& stateData);
+
+    virtual bool supportsSavedStates() const;
+
+    virtual MaEditor* getEditor(const QString &viewName, GObject *obj) = 0;
+
+protected:
+    virtual OpenMaEditorTask* getOpenMaEditorTask(MultipleAlignmentObject* obj) = 0;
+    virtual OpenMaEditorTask* getOpenMaEditorTask(UnloadedObject* obj) = 0;
+    virtual OpenMaEditorTask* getOpenMaEditorTask(Document* doc) = 0;
+
+    GObjectType type;
+};
+
+/************************************************************************/
+/* MsaEditorFactory */
+/************************************************************************/
+class U2VIEW_EXPORT MsaEditorFactory : public MaEditorFactory {
+    Q_OBJECT
+public:
+    MsaEditorFactory();
+
+    MaEditor* getEditor(const QString &viewName, GObject *obj);
+
+    static const GObjectViewFactoryId ID;
+private:
+    OpenMaEditorTask* getOpenMaEditorTask(MultipleAlignmentObject* obj);
+    OpenMaEditorTask* getOpenMaEditorTask(UnloadedObject* obj);
+    OpenMaEditorTask* getOpenMaEditorTask(Document* doc);
+
+};
+
+/************************************************************************/
+/* McaEditorFactory */
+/************************************************************************/
+class U2VIEW_EXPORT McaEditorFactory : public MaEditorFactory {
+    Q_OBJECT
+public:
+    McaEditorFactory();
+
+    MaEditor* getEditor(const QString &viewName, GObject *obj);
+
+    static const GObjectViewFactoryId ID;
+private:
+    OpenMaEditorTask* getOpenMaEditorTask(MultipleAlignmentObject* obj);
+    OpenMaEditorTask* getOpenMaEditorTask(UnloadedObject* obj);
+    OpenMaEditorTask* getOpenMaEditorTask(Document* doc);
+
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_FACTORY_H_
+
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorNameList.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorNameList.cpp
new file mode 100644
index 0000000..a63136c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorNameList.cpp
@@ -0,0 +1,910 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include <QClipboard>
+#include <QInputDialog>
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2Core/Counter.h>
+#include <U2Core/U2Mod.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include "helpers/DrawHelper.h"
+#include "helpers/RowHeightController.h"
+#include "helpers/ScrollController.h"
+#include "MaEditorNameList.h"
+#include "McaEditor.h"
+#include "McaEditorNameList.h"
+#include "McaEditorSequenceArea.h"
+#include "MSAEditor.h"
+
+#include "view_rendering/MaEditorSequenceArea.h"
+#include "view_rendering/MaEditorWgt.h"
+#include "view_rendering/SequenceWithChromatogramAreaRenderer.h"
+
+namespace U2 {
+
+#define CHILDREN_OFFSET 8
+
+MaEditorNameList::MaEditorNameList(MaEditorWgt* _ui, QScrollBar* _nhBar)
+    : labels(NULL),
+      ui(_ui),
+      nhBar(_nhBar),
+      singleSelecting(false),
+      editor(_ui->getEditor())
+{
+    setObjectName("msa_editor_name_list");
+    setFocusPolicy(Qt::WheelFocus);
+    cachedView = new QPixmap();
+    completeRedraw = true;
+    scribbling = false;
+    shifting = false;
+    curRowNumber = 0;
+    nextSequenceToSelect = 0;
+    startSelectingRowNumber = curRowNumber;
+    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
+
+    editSequenceNameAction = new QAction(tr("Edit sequence name"), this);
+    editSequenceNameAction->setObjectName("edit_sequence_name");
+    editSequenceNameAction->setShortcut(QKeySequence(Qt::Key_F2));
+    editSequenceNameAction->setShortcutContext(Qt::WidgetShortcut);
+    connect(editSequenceNameAction, SIGNAL(triggered()), SLOT(sl_editSequenceName()));
+    addAction(editSequenceNameAction);
+
+    copyCurrentSequenceAction = new QAction(tr("Copy current sequence"), this);
+    copyCurrentSequenceAction->setObjectName("Copy current sequence");
+    connect(copyCurrentSequenceAction, SIGNAL(triggered()), SLOT(sl_copyCurrentSequence()));
+
+    removeSequenceAction = new QAction(tr("Remove sequence(s)"), this);
+    removeSequenceAction->setObjectName("Remove sequence");
+    removeSequenceAction->setShortcutContext(Qt::WidgetShortcut);
+    connect(removeSequenceAction, SIGNAL(triggered()), SLOT(sl_removeSequence()));
+    addAction(removeSequenceAction);
+
+    if (editor->getMaObject()) {
+        connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+            SLOT(sl_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)));
+        connect(editor->getMaObject(), SIGNAL(si_lockedStateChanged()), SLOT(sl_lockedStateChanged()));
+    }
+
+    connect(this,   SIGNAL(si_startMaChanging()),
+            ui,     SIGNAL(si_startMaChanging()));
+    connect(this,   SIGNAL(si_stopMaChanging(bool)),
+            ui,     SIGNAL(si_stopMaChanging(bool)));
+
+    if (ui->getSequenceArea()) {
+        connect(ui->getSequenceArea(), SIGNAL(si_selectionChanged(const MaEditorSelection &, const MaEditorSelection &)),
+            SLOT(sl_selectionChanged(const MaEditorSelection &, const MaEditorSelection &)));
+        connect(ui->getEditor(), SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_completeUpdate()));
+    }
+    connect(ui->getCollapseModel(), SIGNAL(si_toggled()), SLOT(sl_completeUpdate()));
+    connect(editor, SIGNAL(si_referenceSeqChanged(qint64)), SLOT(sl_completeRedraw()));
+    connect(editor, SIGNAL(si_completeUpdate()), SLOT(sl_completeUpdate()));
+    connect(editor, SIGNAL(si_updateActions()), SLOT(sl_updateActions()));
+    connect(ui, SIGNAL(si_completeRedraw()), SLOT(sl_completeRedraw()));
+    connect(ui->getScrollController(), SIGNAL(si_visibleAreaChanged()), SLOT(sl_completeRedraw()));
+    connect(ui->getScrollController()->getVerticalScrollBar(), SIGNAL(actionTriggered(int)), SLOT(sl_vScrollBarActionPerfermed()));
+
+    nhBar->setParent(this);
+    nhBar->setVisible(false);
+    sl_updateActions();
+
+    QObject *labelsParent = new QObject(this);
+    labelsParent->setObjectName("labels_parent");
+    labels = new QObject(labelsParent);
+}
+
+MaEditorNameList::~MaEditorNameList() {
+    delete cachedView;
+}
+
+QSize MaEditorNameList::getCanvasSize(const QList<int> &seqIdx) const {
+    return QSize(width(), ui->getRowHeightController()->getRowsHeight(seqIdx));
+}
+
+void MaEditorNameList::drawNames(QPixmap &pixmap, const QList<int> &seqIdx, bool drawSelection) {
+    CHECK(!seqIdx.isEmpty(), );
+
+    SAFE_POINT(NULL != ui, tr("MSA Editor UI is NULL"), );
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    SAFE_POINT(NULL != seqArea, tr("MSA Editor sequence area is NULL"), );
+    CHECK(!seqArea->isAlignmentEmpty(), );
+
+    const int rowsHeight = ui->getRowHeightController()->getRowsHeight(seqIdx);
+    CHECK(rowsHeight < 32768, );
+
+    pixmap = QPixmap(width(), rowsHeight);
+
+    QPainter painter(&pixmap);
+    drawNames(painter, seqIdx, drawSelection);
+}
+
+void MaEditorNameList::drawNames(QPainter &painter, const QList<int> &seqIdx, bool drawSelection) {
+    painter.fillRect(painter.viewport(), Qt::white);
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    SAFE_POINT(NULL != maObj, tr("MSA Object is NULL"), );
+    const MultipleAlignment ma = maObj->getMultipleAlignment();
+
+    const QStringList seqNames = ma->getRowNames();
+    for (int number = 0; number < seqIdx.size(); number++) {
+        const int index = seqIdx[number];
+        SAFE_POINT(index < seqNames.size(), tr("Invalid sequence index"), );
+        const bool isSelected = drawSelection && isRowInSelection(index);
+        const U2Region yRange = ui->getRowHeightController()->getRowGlobalRange(index, seqIdx);
+        drawSequenceItem(painter, index, yRange, getTextForRow(index), isSelected);
+    }
+}
+
+QAction *MaEditorNameList::getEditSequenceNameAction() const {
+    return editSequenceNameAction;
+}
+
+QAction *MaEditorNameList::getRemoveSequenceAction() const {
+    return removeSequenceAction;
+}
+
+U2Region MaEditorNameList::getSelection() const {
+    const MaEditorSelection& selection = ui->getSequenceArea()->getSelection();
+    return U2Region(selection.y(), selection.height());
+}
+
+void MaEditorNameList::setSelection(int startSeq, int count) {
+    int width = editor->getAlignmentLen();
+    MaEditorSelection selection(0, startSeq, width, count);
+    ui->getSequenceArea()->setSelection(selection);
+}
+
+bool MaEditorNameList::isRowInSelection(int seqnum) const {
+    MaEditorSelection s = ui->getSequenceArea()->getSelection();
+    int endPos = s.y() + s.height() - 1;
+    return seqnum >= s.y() && seqnum <= endPos;
+}
+
+void MaEditorNameList::updateScrollBar() {
+    nhBar->disconnect(this);
+
+    QFont f = ui->getEditor()->getFont();
+    f.setItalic(true);
+    QFontMetrics fm(f,this);
+    int maxNameWidth = 0;
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    foreach (const MultipleAlignmentRow& row, maObj->getMultipleAlignment()->getRows()) {
+        maxNameWidth = qMax(fm.width(row->getName()), maxNameWidth);
+    }
+    // adjustment for branch primitive in collapsing mode
+    if (ui->isCollapsibleMode()) {
+        maxNameWidth += 2*CROSS_SIZE + CHILDREN_OFFSET;
+    }
+
+    int availableWidth = getAvailableWidth();
+    int nSteps = 1;
+    int stepSize = fm.width('W');
+    if (availableWidth < maxNameWidth) {
+        int dw = maxNameWidth - availableWidth;
+        nSteps += dw / stepSize + (dw % stepSize != 0 ? 1 : 0);
+    }
+    nhBar->setMinimum(0);
+    nhBar->setMaximum(nSteps - 1);
+    nhBar->setValue(0);
+
+    nhBar->setVisible(nSteps > 1);
+    connect(nhBar, SIGNAL(valueChanged(int)), SLOT(sl_completeRedraw()));
+}
+
+int MaEditorNameList::getSelectedRow() const {
+    U2Region sel = getSelection();
+    CHECK(!sel.isEmpty(), -1);
+
+    int n = sel.startPos;
+    if (ui->isCollapsibleMode()) {
+        n = ui->getCollapseModel()->mapToRow(n);
+    }
+    return n;
+}
+
+void MaEditorNameList::sl_copyCurrentSequence() {
+    int n = getSelectedRow();
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (maObj) {
+        const MultipleAlignmentRow row = maObj->getRow(n);
+        //TODO: trim large sequence?
+        U2OpStatus2Log os;
+        QApplication::clipboard()->setText(row->toByteArray(os, maObj->getLength()));
+    }
+}
+
+void MaEditorNameList::sl_alignmentChanged(const MultipleAlignment&, const MaModificationInfo& mi) {
+    if (mi.rowListChanged) {
+        completeRedraw = true;
+        sl_updateActions();
+        updateScrollBar();
+        update();
+    }
+}
+
+void MaEditorNameList::sl_removeSequence() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Remove row", editor->getFactoryId());
+    U2Region sel = getSelection();
+    CHECK(!sel.isEmpty(), );
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    CHECK(maObj->getNumRows() > sel.length, );
+
+    U2OpStatusImpl os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    setSelection(0, 0);
+
+    U2Region mappedSelection = ui->getCollapseModel()->mapSelectionRegionToRows(sel);
+    maObj->removeRegion(0, mappedSelection.startPos, maObj->getLength(), mappedSelection.length, true);
+
+    qint64 numRows = editor->getUI()->getCollapseModel()->getDisplayableRowsCount();
+    if (sel.startPos < numRows) {
+        int count = qMin(sel.length, numRows - sel.startPos);
+        setSelection(sel.startPos, count);
+    }
+}
+
+void MaEditorNameList::sl_selectReferenceSequence() {
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (maObj) {
+        int n = getSelectedRow();
+        if (n < 0) {
+            return;
+        }
+        assert(!maObj->isStateLocked());
+        editor->setReference(maObj->getRow(n)->getRowId());
+    }
+}
+
+void MaEditorNameList::sl_lockedStateChanged() {
+    sl_updateActions();
+}
+
+void MaEditorNameList::resizeEvent(QResizeEvent* e) {
+    completeRedraw = true;
+    updateScrollBar();
+    QWidget::resizeEvent(e);
+}
+
+void MaEditorNameList::paintEvent(QPaintEvent*) {
+    drawAll();
+}
+
+void MaEditorNameList::keyPressEvent(QKeyEvent *e) {
+    int key = e->key();
+    bool isShiftPressed = e->modifiers().testFlag(Qt::ShiftModifier);
+    switch(key) {
+    case Qt::Key_Up: {
+        bool isSeqInRange = ui->getSequenceArea()->isSeqInRange(nextSequenceToSelect - 1);
+        U2Region sel = getSelection();
+        int selStart = sel.length != 0 ? getSelection().startPos : nextSequenceToSelect;
+        if (isSeqInRange && isShiftPressed) {
+            nextSequenceToSelect--;
+            moveSelection(0);
+            int seqAreaHeight = ui->getSequenceArea()->height();
+            ui->getScrollController()->scrollToRowByNumber(nextSequenceToSelect, seqAreaHeight);
+        } else if (!isShiftPressed && selStart > 0) {
+            if (0 <= curRowNumber - 1) {
+                curRowNumber--;
+            }
+            if (0 <= startSelectingRowNumber - 1) {
+                startSelectingRowNumber--;
+            }
+            nextSequenceToSelect--;
+            moveSelection(-1);
+        }
+        break;
+    }
+    case Qt::Key_Down: {
+        bool isSeqInRange = ui->getSequenceArea()->isSeqInRange(nextSequenceToSelect + 1);
+        int selEnd = getSelection().endPos() - 1;
+        int rowNum = ui->getSequenceArea()->getNumDisplayableSequences() - 1;
+        if (isSeqInRange && isShiftPressed) {
+            nextSequenceToSelect++;
+            moveSelection(0);
+            int seqAreaHeight = ui->getSequenceArea()->height();
+            ui->getScrollController()->scrollToRowByNumber(nextSequenceToSelect, seqAreaHeight);
+        } else if (!isShiftPressed && selEnd < rowNum) {
+            int numDisplayableSequences = ui->getSequenceArea()->getNumDisplayableSequences();
+            if (numDisplayableSequences > curRowNumber + 1) {
+                curRowNumber++;
+            }
+            if (numDisplayableSequences > startSelectingRowNumber + 1) {
+                startSelectingRowNumber++;
+            }
+            nextSequenceToSelect++;
+            moveSelection(1);
+        }
+        break;
+    }
+    case Qt::Key_Left:
+        nhBar->triggerAction(QAbstractSlider::SliderSingleStepSub);
+        break;
+    case Qt::Key_Right:
+        nhBar->triggerAction(QAbstractSlider::SliderSingleStepAdd);
+        break;
+    case Qt::Key_Home:
+        ui->getScrollController()->scrollToEnd(ScrollController::Up);
+        break;
+    case Qt::Key_End:
+        ui->getScrollController()->scrollToEnd(ScrollController::Down);
+        break;
+    case Qt::Key_PageUp:
+        ui->getScrollController()->scrollPage(ScrollController::Up);
+        break;
+    case Qt::Key_PageDown:
+        ui->getScrollController()->scrollPage(ScrollController::Down);
+        break;
+    case Qt::Key_Shift:
+        curRowNumber = startSelectingRowNumber;
+        break;
+    case Qt::Key_Escape:
+        ui->getSequenceArea()->sl_cancelSelection();
+        curRowNumber = 0;
+        startSelectingRowNumber = 0;
+        break;
+    case Qt::Key_Delete:
+        if (removeSequenceAction->isEnabled()) {
+            sl_removeSequence();
+        }
+        break;
+    }
+    QWidget::keyPressEvent(e);
+}
+
+void MaEditorNameList::mousePressEvent(QMouseEvent *e) {
+    setFocus();
+    SAFE_POINT(ui, "MSA Editor UI is NULL", );
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    SAFE_POINT(seqArea, "MSA Editor sequence area", );
+
+    if (seqArea->isAlignmentEmpty()) {
+        QWidget::mousePressEvent(e);
+        return;
+    }
+
+    if ((e->button() == Qt::LeftButton)) {
+        emit si_startMaChanging();
+
+        if(Qt::ShiftModifier == e->modifiers()) {
+            QWidget::mousePressEvent(e);
+            scribbling = true;
+            return;
+        }
+        selectionStartPoint = e->pos();
+        curRowNumber = ui->getRowHeightController()->screenYPositionToRowNumber(e->y());
+        nextSequenceToSelect = curRowNumber;
+        if (ui->isCollapsibleMode()) {
+            MSACollapsibleItemModel* m = ui->getCollapseModel();
+            if (curRowNumber >= m->getDisplayableRowsCount()) {
+                curRowNumber = m->getDisplayableRowsCount() - 1;
+                nextSequenceToSelect = curRowNumber;
+            }
+            if (m->isTopLevel(curRowNumber)) {
+                const U2Region yRange = ui->getRowHeightController()->getRowScreenRangeByNumber(curRowNumber);
+                bool selected = isRowInSelection(curRowNumber);
+                QRect textRect = calculateTextRect(yRange, selected);
+                QRect buttonRect = calculateButtonRect(textRect);
+                if (buttonRect.contains(selectionStartPoint)) {
+                    m->toggle(curRowNumber);
+                    sl_completeRedraw();
+                    QWidget::mousePressEvent(e);
+                    return;
+                }
+            }
+        }
+
+        startSelectingRowNumber = curRowNumber;
+
+        U2Region s = getSelection();
+        if (s.contains(curRowNumber)) {
+            if (!ui->isCollapsibleMode() || ui->getCollapseModel()->isFakeModel()) {
+                shifting = true;
+            }
+        } else {
+            if (!seqArea->isSeqInRange(startSelectingRowNumber)) {
+                if (e->y() < selectionStartPoint.y()) {
+                    startSelectingRowNumber = 0;
+                } else {
+                    startSelectingRowNumber = ui->getEditor()->getNumSequences() - 1;
+                }
+            }
+            rubberBand->setGeometry(QRect(selectionStartPoint, QSize()));
+            rubberBand->show();
+            seqArea->sl_cancelSelection();
+            scribbling = true;
+        }
+        if (seqArea->isSeqInRange(curRowNumber)) {
+            singleSelecting = true;
+            scribbling = true;
+        }
+    }
+
+    QWidget::mousePressEvent(e);
+}
+
+void MaEditorNameList::mouseMoveEvent(QMouseEvent* e) {
+    if ((e->buttons() & Qt::LeftButton) && scribbling) {
+        const int newSeqNum = ui->getRowHeightController()->screenYPositionToRowNumber(e->y());
+        if (ui->getSequenceArea()->isSeqInRange(newSeqNum)) {
+            if (ui->getSequenceArea()->isRowVisible(newSeqNum, false)) {
+                ui->getScrollController()->stopSmoothScrolling();
+            } else {
+                ScrollController::Directions direction = ScrollController::None;
+                if (newSeqNum < ui->getScrollController()->getFirstVisibleRowNumber(false)) {
+                    direction |= ScrollController::Up;
+                } else if (newSeqNum > ui->getScrollController()->getLastVisibleRowNumber(height(), false)) {
+                    direction |= ScrollController::Down;
+                }
+                ui->getScrollController()->scrollSmoothly(direction);
+            }
+
+            if (singleSelecting) {
+                singleSelecting = false;
+            }
+        }
+
+        if (shifting) {
+            assert(!ui->isCollapsibleMode() || ui->getCollapseModel()->isFakeModel());
+            moveSelectedRegion(newSeqNum - curRowNumber);
+        } else {
+            rubberBand->setGeometry(QRect(selectionStartPoint, e->pos()).normalized());
+        }
+    }
+    QWidget::mouseMoveEvent(e);
+}
+
+void MaEditorNameList::mouseReleaseEvent(QMouseEvent *e) {
+    rubberBand->hide();
+    if (scribbling) {
+        int newRowNumber = ui->getRowHeightController()->screenYPositionToRowNumber(qMax(e->y(), 0));
+        nextSequenceToSelect = newRowNumber;
+        if (!ui->getSequenceArea()->isSeqInRange(newRowNumber)) {
+            if (e->y() < selectionStartPoint.y()) {
+                newRowNumber = 0;
+            } else {
+                newRowNumber = ui->getSequenceArea()->getNumDisplayableSequences() - 1;
+            }
+        }
+
+        if (e->pos() == selectionStartPoint) {
+            // special case: click but don't drag
+            shifting = false;
+        }
+
+        if (shifting) {
+            assert(!ui->isCollapsibleMode() || ui->getCollapseModel()->isFakeModel());
+            int shift = 0;
+            int numSeq = ui->getSequenceArea()->getNumDisplayableSequences();
+            int selectionStart = getSelection().startPos;
+            int selectionSize = getSelection().length;
+            if (newRowNumber == 0) {
+                shift = -selectionStart;
+            } else if (newRowNumber == numSeq - 1) {
+                shift = numSeq - (selectionStart + selectionSize);
+            } else {
+                shift = newRowNumber - curRowNumber;
+            }
+            moveSelectedRegion(shift);
+            shifting = false;
+
+            emit si_stopMaChanging(true);
+        } else {
+            ui->getSequenceArea()->setSelection(MaEditorSelection());
+
+            const int firstVisibleRowNumber = ui->getScrollController()->getFirstVisibleRowNumber(true);
+            const int lastVisibleRowNumber = ui->getScrollController()->getLastVisibleRowNumber(height(), true);
+            bool selectionContainsSeqs = (startSelectingRowNumber <= lastVisibleRowNumber || newRowNumber <= lastVisibleRowNumber);
+
+            if (selectionContainsSeqs) {
+                if (singleSelecting) {
+                    curRowNumber = newRowNumber;
+                    singleSelecting = false;
+                } else {
+                    if (startSelectingRowNumber > newRowNumber) {
+                        curRowNumber = (startSelectingRowNumber < firstVisibleRowNumber) ? firstVisibleRowNumber : startSelectingRowNumber;
+                    } else {
+                        curRowNumber = (startSelectingRowNumber > lastVisibleRowNumber) ? lastVisibleRowNumber : startSelectingRowNumber;
+                    }
+                    if (newRowNumber > lastVisibleRowNumber || newRowNumber < firstVisibleRowNumber) {
+                        newRowNumber = newRowNumber > 0 ? lastVisibleRowNumber : 0;
+                    }
+                }
+                updateSelection(newRowNumber);
+            }
+            emit si_stopMaChanging(false);
+        }
+        scribbling = false;
+    } else {
+        emit si_stopMaChanging(false);
+    }
+    ui->getScrollController()->stopSmoothScrolling();
+
+    QWidget::mouseReleaseEvent(e);
+}
+
+void MaEditorNameList::updateSelection(int newSeq) {
+    CHECK(ui->getSequenceArea()->isSeqInRange(newSeq) || ui->getSequenceArea()->isSeqInRange(curRowNumber), );
+
+    int start = qMin(curRowNumber, newSeq);
+    int count = qAbs(newSeq - curRowNumber) + 1;
+    setSelection(start, count);
+    int height = ui->getSequenceArea()->height();
+    ui->getScrollController()->scrollToRowByNumber(newSeq, height);
+}
+
+void MaEditorNameList::wheelEvent(QWheelEvent *we) {
+    bool toMin = we->delta() > 0;
+    ui->getScrollController()->scrollStep(toMin ? ScrollController::Up : ScrollController::Down);
+    QWidget::wheelEvent(we);
+}
+
+void MaEditorNameList::sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev)
+{
+    Q_UNUSED(current);
+    Q_UNUSED(prev);
+
+    if (current.y() == prev.y() && current.height() == prev.height()) {
+        return;
+    }
+    completeRedraw = true;
+    update();
+    sl_updateActions();
+}
+
+void MaEditorNameList::sl_updateActions() {
+    SAFE_POINT(NULL != ui, tr("MSA Editor UI is NULL"), );
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    SAFE_POINT(NULL != seqArea, tr("MSA Editor sequence area is NULL"), );
+
+    copyCurrentSequenceAction->setEnabled(!seqArea->isAlignmentEmpty());
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (maObj){
+        removeSequenceAction->setEnabled(!maObj->isStateLocked() && getSelectedRow() != -1);
+        editSequenceNameAction->setEnabled(!maObj->isStateLocked() && getSelectedRow() != -1);
+        addAction(ui->getCopySelectionAction());
+        addAction(ui->getPasteAction());
+    }
+}
+
+void MaEditorNameList::sl_vScrollBarActionPerfermed() {
+    CHECK(shifting, );
+    assert(!ui->isCollapsibleMode() || ui->getCollapseModel()->isFakeModel());
+
+    GScrollBar *vScrollBar = qobject_cast<GScrollBar *>(sender());
+    SAFE_POINT(NULL != vScrollBar, "vScrollBar is NULL", );
+
+    const QAbstractSlider::SliderAction action = vScrollBar->getRepeatAction();
+    CHECK(QAbstractSlider::SliderSingleStepAdd == action || QAbstractSlider::SliderSingleStepSub == action, );
+
+    const QPoint localPoint = mapFromGlobal(QCursor::pos());
+    const int newSeqNum = ui->getRowHeightController()->screenYPositionToRowNumber(localPoint.y());
+    moveSelectedRegion(newSeqNum - curRowNumber);
+}
+
+void MaEditorNameList::focusInEvent(QFocusEvent* fe) {
+    QWidget::focusInEvent(fe);
+    update();
+}
+
+void MaEditorNameList::focusOutEvent(QFocusEvent* fe) {
+    QWidget::focusOutEvent(fe);
+    update();
+}
+
+void MaEditorNameList::sl_completeUpdate() {
+    completeRedraw = true;
+    updateScrollBar();
+    update();
+}
+
+void MaEditorNameList::sl_completeRedraw() {
+    completeRedraw = true;
+    update();
+}
+
+void MaEditorNameList::sl_onGroupColorsChanged(const GroupColorSchema& colors) {
+    groupColors = colors;
+    completeRedraw = true;
+    update();
+}
+
+//////////////////////////////////////////////////////////////////////////
+// draw methods
+QFont MaEditorNameList::getFont(bool selected) const {
+    QFont f = ui->getEditor()->getFont();
+    f.setItalic(true);
+    if (selected) {
+        f.setBold(true);
+    }
+    return f;
+}
+
+QRect MaEditorNameList::calculateTextRect(const U2Region& yRange, bool selected) const {
+    int textX = MARGIN_TEXT_LEFT;
+    int textW = getAvailableWidth();
+    int textY = yRange.startPos + MARGIN_TEXT_TOP;
+    int textH = yRange.length - MARGIN_TEXT_TOP - MARGIN_TEXT_BOTTOM;
+    QRect textRect(textX, textY, textW, textH);
+    if (nhBar->isVisible()) {
+        QFontMetrics fm(getFont(selected));
+        int stepSize = fm.width('W');
+        int dx = stepSize * nhBar->value();
+        textRect = textRect.adjusted(-dx, 0, 0, 0);
+    }
+    return textRect;
+}
+
+QRect MaEditorNameList::calculateButtonRect(const QRect& itemRect) const {
+    return QRect(itemRect.left() + CROSS_SIZE/2, itemRect.top() + MARGIN_TEXT_TOP, CROSS_SIZE, CROSS_SIZE);
+}
+
+int MaEditorNameList::getAvailableWidth() const {
+    return width() - MARGIN_TEXT_LEFT;
+}
+
+void MaEditorNameList::drawAll() {
+    QSize s = size() * devicePixelRatio();
+    if (cachedView->size() != s) {
+        delete cachedView;
+        cachedView = new QPixmap(s);
+        cachedView->setDevicePixelRatio(devicePixelRatio());
+        completeRedraw = true;
+    }
+    if (completeRedraw) {
+        QPainter pCached(cachedView);
+        drawContent(pCached);
+        completeRedraw = false;
+    }
+    QPainter p(this);
+    p.drawPixmap(0, 0, *cachedView);
+    drawSelection(p);
+}
+
+void MaEditorNameList::drawContent(QPainter& painter) {
+    painter.fillRect(cachedView->rect(), Qt::white);
+
+    SAFE_POINT(NULL != ui, "MA Editor UI is NULL", );
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    SAFE_POINT(NULL != seqArea, "MA Editor sequence area is NULL", );
+
+    CHECK(!seqArea->isAlignmentEmpty(), );
+
+    if (labels) {
+        labels->setObjectName("");
+    }
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    SAFE_POINT(NULL != maObj, "NULL Ma Object in MAEditorNameList::drawContent", );
+
+    const MultipleAlignment ma = maObj->getMultipleAlignment();
+
+    U2OpStatusImpl os;
+    const int referenceIndex = editor->getReferenceRowId() == U2MsaRow::INVALID_ROW_ID ? U2MsaRow::INVALID_ROW_ID
+                                                                                       : ma->getRowIndexByRowId(editor->getReferenceRowId(), os);
+    SAFE_POINT_OP(os, );
+
+    if (ui->isCollapsibleMode()) {
+        MSACollapsibleItemModel* collapsibleModel = ui->getCollapseModel();
+        const QVector<U2Region> groupedRowsToDraw = ui->getDrawHelper()->getGroupedVisibleRowsIndexes(height());
+        foreach (const U2Region &group, groupedRowsToDraw) {
+            for (int rowIndex = group.startPos; rowIndex < group.endPos(); rowIndex++) {
+                const U2Region yRange = ui->getRowHeightController()->getRowScreenRange(rowIndex);
+                const int rowNumber = collapsibleModel->rowToMap(rowIndex, true);
+                const bool isSelected = isRowInSelection(rowNumber);
+                const bool isReference = (rowIndex == referenceIndex);
+
+                if (!collapsibleModel->isRowInGroup(rowNumber)) {
+                    painter.translate(CROSS_SIZE * 2, 0);
+                    drawSequenceItem(painter, getTextForRow(rowIndex), yRange, isSelected, isReference);
+                    painter.translate(-CROSS_SIZE * 2, 0);
+                } else {
+                    const MSACollapsableItem &item = collapsibleModel->getItemByRowIndex(rowIndex);
+                    SAFE_POINT(item.isValid(), QString("Collapsible item was nof found for row number %1").arg(rowIndex), );
+                    const QRect rect = calculateTextRect(yRange, isSelected);
+                    // SANGER_TODO: check reference
+                    if (collapsibleModel->isTopLevel(rowNumber)) {
+                        drawCollapsibileSequenceItem(painter, rowIndex, getTextForRow(rowIndex), rect, isSelected, item.isCollapsed, isReference);
+                    } else {
+                        drawChildSequenceItem(painter, getTextForRow(rowIndex), rect, isSelected, isReference);
+                    }
+                }
+            }
+        }
+    } else {
+        const QList<int> rowsToDrow = ui->getDrawHelper()->getVisibleRowsIndexes(height());
+        foreach (const int rowToDrow, rowsToDrow) {
+            const bool isSelected = isRowInSelection(rowToDrow);
+            drawSequenceItem(painter, rowToDrow, ui->getRowHeightController()->getRowScreenRange(rowToDrow), getTextForRow(rowToDrow), isSelected);
+        }
+    }
+}
+
+void MaEditorNameList::drawSequenceItem(QPainter& painter, const QString& text, const U2Region& yRange, bool selected, bool isReference) {
+    QRect rect = calculateTextRect(yRange, selected);
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    CHECK(maObj != NULL, );
+    drawBackground(painter, text, rect, isReference);
+    drawText(painter, text, rect, selected);
+}
+
+void MaEditorNameList::drawSequenceItem(QPainter &painter, int rowIndex, const U2Region &yRange, const QString &text, bool selected) {
+    // SANGER_TODO: simplify getting the reference status - no reference here!
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    CHECK(maObj != NULL, );
+    U2OpStatusImpl os;
+    bool isReference = (rowIndex == maObj->getMultipleAlignment()->getRowIndexByRowId(editor->getReferenceRowId(), os));
+    drawSequenceItem(painter, text, yRange, selected, isReference);
+}
+
+void MaEditorNameList::drawCollapsibileSequenceItem(QPainter &painter, int /*rowIndex*/, const QString &name, const QRect &rect,
+                                                    bool selected, bool collapsed, bool isReference) {
+    drawBackground(painter, name, rect, isReference);
+    drawCollapsePrimitive(painter, collapsed, rect);
+    drawText(painter, name, rect.adjusted(CROSS_SIZE * 2, 0, 0, 0), selected);
+}
+
+void MaEditorNameList::drawChildSequenceItem(QPainter &painter, const QString &name, const QRect &rect,
+                                             bool selected, bool isReference) {
+    drawBackground(painter, name, rect, isReference);
+    painter.translate(CROSS_SIZE * 2 + CHILDREN_OFFSET, 0);
+    drawText(painter, name, rect, selected);
+    painter.translate( - CROSS_SIZE * 2 - CHILDREN_OFFSET, 0);
+}
+
+void MaEditorNameList::drawBackground(QPainter& p, const QString& name, const QRect& rect, bool isReference) {
+    if (isReference) {
+        p.fillRect(rect, QColor("#9999CC")); // SANGER_TODO: create the const, reference  color
+        return;
+    }
+
+    p.fillRect(rect, Qt::white);
+    if (groupColors.contains(name)) {
+        if (QColor(Qt::black) != groupColors[name]) {
+            p.fillRect(rect, groupColors[name]);
+        }
+    }
+}
+
+void MaEditorNameList::drawText(QPainter& p, const QString& name, const QRect& rect, bool selected) {
+    p.setFont(getFont(selected));
+    p.drawText(rect, Qt::AlignTop | Qt::AlignLeft, name); // SANGER_TODO: check the alignment
+}
+
+void MaEditorNameList::drawCollapsePrimitive(QPainter& p, bool collapsed, const QRect& rect) {
+    QStyleOptionViewItemV2 branchOption;
+    branchOption.rect = calculateButtonRect(rect);
+    if (collapsed) {
+        branchOption.state = QStyle::State_Children | QStyle::State_Sibling; // test
+    } else {
+        branchOption.state = QStyle::State_Open | QStyle::State_Children;
+    }
+    style()->drawPrimitive(QStyle::PE_IndicatorBranch, &branchOption, &p, this);
+}
+
+void MaEditorNameList::drawRefSequence(QPainter &p, QRect r){
+    p.fillRect(r, QColor("#9999CC"));
+}
+
+QString MaEditorNameList::getTextForRow(int s) {
+    return editor->getMaObject()->getRow(s)->getName();
+}
+
+QString MaEditorNameList::getSeqName(int s) {
+    return getTextForRow(s);
+}
+
+void MaEditorNameList::drawSelection(QPainter &painter) {
+    const U2Region selection = getSelection();
+    CHECK(!selection.isEmpty(), );
+
+    const U2Region yRange = ui->getRowHeightController()->getRowsScreenRangeByNumbers(selection);
+    const QRect selectionRect(0, yRange.startPos, width() - 1, yRange.length - 1);
+    CHECK(selectionRect.isValid(), );
+
+    painter.setPen(QPen(Qt::gray, 1, Qt::DashLine));
+    painter.drawRect(selectionRect);
+}
+
+void MaEditorNameList::sl_editSequenceName() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Rename row", editor->getFactoryId());
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    CHECK(!maObj->isStateLocked(), );
+
+    bool ok = false;
+    int n = getSelectedRow();
+    CHECK(n >= 0, );
+
+    QString curName =  maObj->getMultipleAlignment()->getRow(n)->getName();
+    QString newName = QInputDialog::getText(this, tr("Rename"),
+            tr("New sequence name:"), QLineEdit::Normal, curName, &ok);
+    if (ok && !newName.isEmpty() && curName != newName) {
+        emit si_sequenceNameChanged(curName, newName);
+        maObj->renameRow(n,newName);
+    }
+}
+
+void MaEditorNameList::mouseDoubleClickEvent(QMouseEvent *e) {
+    Q_UNUSED(e);
+    if (e->button() == Qt::LeftButton) {
+        sl_editSequenceName();
+    }
+}
+
+void MaEditorNameList::moveSelectedRegion(int shift) {
+    CHECK(shift != 0, );
+
+    U2Region selection = getSelection();
+    int numRowsInSelection = selection.length;
+    int firstRowInSelection = selection.startPos;
+    int lastRowInSelection = selection.endPos() - 1;
+
+    // "out-of-range" checks
+    if ((shift > 0 && lastRowInSelection + shift >= editor->getNumSequences())
+        || (shift < 0 && firstRowInSelection + shift < 0)
+        || (shift < 0 && firstRowInSelection + qAbs(shift) > editor->getNumSequences()))
+    {
+        return;
+    }
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (!maObj->isStateLocked()) {
+        maObj->moveRowsBlock(firstRowInSelection, numRowsInSelection, shift);
+        curRowNumber += shift;
+        startSelectingRowNumber = curRowNumber;
+        setSelection(firstRowInSelection + shift, numRowsInSelection);
+    }
+}
+
+qint64 MaEditorNameList::sequenceIdAtPos(const QPoint &p) {
+    qint64 result = U2MsaRow::INVALID_ROW_ID;
+    curRowNumber = ui->getRowHeightController()->screenYPositionToRowNumber(p.y());
+    if (!ui->getSequenceArea()->isSeqInRange(curRowNumber)) {
+        return result;
+    }
+    if (curRowNumber != -1) {
+        MultipleAlignmentObject* maObj = editor->getMaObject();
+        result = maObj->getMultipleAlignment()->getRow(ui->getCollapseModel()->mapToRow(curRowNumber))->getRowId();
+    }
+    return result;
+}
+
+void MaEditorNameList::clearGroupsSelections() {
+    groupColors.clear();
+}
+
+void MaEditorNameList::moveSelection(int dy) {
+    ui->getSequenceArea()->moveSelection(0, dy);
+    updateSelection(nextSequenceToSelect);
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorNameList.h b/src/corelibs/U2View/src/ov_msa/MaEditorNameList.h
new file mode 100644
index 0000000..81cd5b5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorNameList.h
@@ -0,0 +1,171 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_NAME_LIST_H_
+#define _U2_MA_EDITOR_NAME_LIST_H_
+
+#include <QMenu>
+#include <QRubberBand>
+#include <QScrollBar>
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2Region.h>
+
+#include "MSACollapsibleModel.h"
+#include "PhyTrees/MSAEditorTreeViewer.h"
+
+namespace U2 {
+
+class GObjectView;
+class MaEditor;
+class MaEditorSelection;
+class MaEditorWgt;
+class MaModificationInfo;
+
+class U2VIEW_EXPORT MaEditorNameList: public QWidget {
+    Q_OBJECT
+    Q_DISABLE_COPY(MaEditorNameList)
+public:
+    MaEditorNameList(MaEditorWgt* ui, QScrollBar* nhBar);
+    virtual ~MaEditorNameList();
+
+    QSize getCanvasSize(const QList<int> &seqIdx) const;
+
+    void drawNames(QPixmap &pixmap, const QList<int> &seqIdx, bool drawSelection = false);
+    void drawNames(QPainter &painter, const QList<int> &seqIdx, bool drawSelection = false);
+
+    QAction *getEditSequenceNameAction() const;
+    QAction *getRemoveSequenceAction() const;
+
+protected slots:
+    void sl_completeRedraw();
+
+private slots:
+    void sl_copyCurrentSequence();
+    void sl_editSequenceName();
+    void sl_lockedStateChanged();
+    void sl_removeSequence();
+    void sl_selectReferenceSequence();
+    void sl_alignmentChanged(const MultipleAlignment &, const MaModificationInfo&);
+    void sl_vScrollBarActionPerfermed();
+    void sl_completeUpdate();
+    void sl_onGroupColorsChanged(const GroupColorSchema&);
+
+protected slots:
+    virtual void sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev);
+    virtual void sl_updateActions();
+
+protected:
+    virtual void updateScrollBar();
+
+protected:
+    void resizeEvent(QResizeEvent* e);
+    void paintEvent(QPaintEvent* e);
+    void keyPressEvent (QKeyEvent *e);
+    void mousePressEvent(QMouseEvent *e);
+    void mouseMoveEvent(QMouseEvent* e);
+    void mouseReleaseEvent(QMouseEvent *e);
+    void mouseDoubleClickEvent(QMouseEvent *e);
+    void focusOutEvent(QFocusEvent* fe);
+    void focusInEvent(QFocusEvent* fe);
+    void wheelEvent (QWheelEvent * we);
+    //todo context menu?
+    int getSelectedRow() const;
+    virtual QString getTextForRow(int s);
+    virtual QString getSeqName(int s);
+    virtual void moveSelection(int dy);
+
+    bool                completeRedraw;
+
+protected:
+    void drawContent(QPainter& p);
+public:
+    qint64 sequenceIdAtPos(const QPoint &p);
+    void clearGroupsSelections();
+
+    virtual U2Region getSelection() const;
+
+signals:
+    void si_sequenceNameChanged(QString prevName, QString newName);
+    void si_startMaChanging();
+    void si_stopMaChanging(bool modified);
+
+protected:
+    virtual void setSelection(int startSeq, int count);
+    virtual bool isRowInSelection(int row) const;
+
+    void updateSelection(int newSeqNum);
+    void moveSelectedRegion( int shift );
+    void drawAll();
+
+    void drawSelection(QPainter& p);
+    void drawSequenceItem(QPainter &painter, const QString &text, const U2Region &yRange, bool selected, bool isReference);
+    virtual void drawSequenceItem(QPainter &painter, int rowIndex, const U2Region &yRange, const QString &text, bool selected);
+
+    virtual void drawCollapsibileSequenceItem(QPainter &painter, int rowIndex, const QString &name, const QRect &rect,
+                                      bool selected, bool collapsed, bool isReference);
+    void drawChildSequenceItem(QPainter &painter, const QString &name, const QRect &rect,
+                                        bool selected, bool isReference);
+
+    // SANGER_TODO: drawSequenceItem should use these methods
+    void drawBackground(QPainter& p, const QString& name, const QRect& rect, bool isReferece);
+    virtual void drawText(QPainter& p, const QString& name, const QRect& rect, bool selected);
+    void drawCollapsePrimitive(QPainter& p, bool collapsed, const QRect& rect);
+
+    virtual void drawRefSequence(QPainter &p, QRect r);
+
+    QFont getFont(bool selected) const;
+    QRect calculateTextRect(const U2Region& yRange, bool selected) const;
+    QRect calculateButtonRect(const QRect& itemRect) const;
+
+    virtual int getAvailableWidth() const;
+
+    QObject*            labels; // used in GUI tests
+    MaEditorWgt*        ui;
+    QScrollBar*         nhBar;
+    int                 curRowNumber;
+    int                 startSelectingRowNumber;
+    int                 nextSequenceToSelect;
+    QPoint              selectionStartPoint;
+    bool                scribbling;
+    bool                shifting;
+    bool                singleSelecting;
+    GroupColorSchema    groupColors;
+
+    QRubberBand*        rubberBand;
+    QAction*            editSequenceNameAction;
+    QAction*            copyCurrentSequenceAction;
+    QAction*            removeSequenceAction;
+    QPixmap*            cachedView;
+
+    static const int CROSS_SIZE = 9;
+    static const int CHILDREN_OFFSET = 8;
+    static const int MARGIN_TEXT_LEFT = 5;
+    static const int MARGIN_TEXT_TOP = 2;
+    static const int MARGIN_TEXT_BOTTOM = 2;
+
+protected:
+    MaEditor*          editor;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_EDITOR_NAME_LIST_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorState.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorState.cpp
new file mode 100644
index 0000000..b8bed99
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorState.cpp
@@ -0,0 +1,126 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorState.h"
+#include "MSAEditor.h"
+#include "MaEditorFactory.h"
+#include "helpers/ScrollController.h"
+
+#include <U2Core/DocumentModel.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/DNASequenceSelection.h>
+
+namespace U2 {
+
+#define VIEW_ID     QString("view_id")
+#define MA_OBJ      QString("ma_obj_ref")
+#define FONT        QString("font")
+#define FIRST_POS   QString("first_pos")
+#define FIRST_SEQ   QString("first_seq")
+#define ZOOM_FACTOR QString("zoom_factor")
+
+bool MaEditorState::isValid() const {
+    return stateData.value(VIEW_ID) == MsaEditorFactory::ID || stateData.value(VIEW_ID) == McaEditorFactory::ID;
+}
+
+GObjectReference MaEditorState::getMaObjectRef() const {
+    return stateData.contains(MA_OBJ) ? stateData[MA_OBJ].value<GObjectReference>() : GObjectReference();
+}
+
+void MaEditorState::setMaObjectRef(const GObjectReference& ref) {
+    stateData[MA_OBJ] = QVariant::fromValue<GObjectReference>(ref);
+}
+
+QFont MaEditorState::getFont() const {
+    QVariant v = stateData.value(FONT);
+    if (v.type() == QVariant::Font) {
+        return v.value<QFont>();
+    }
+    return QFont();
+}
+
+void MaEditorState::setFont(const QFont &f) {
+
+    stateData[FONT] = f;
+}
+
+int MaEditorState::getFirstPos() const {
+    QVariant v = stateData.value(FIRST_POS);
+    if (v.type() == QVariant::Int) {
+        return v.toInt();
+    }
+    return -1;
+}
+
+void MaEditorState::setFirstPos(int y) {
+    stateData[FIRST_POS] = y;
+}
+
+int MaEditorState::getFirstSeq() const {
+    QVariant v = stateData.value(FIRST_SEQ);
+    if (v.type() == QVariant::Int) {
+        return v.toInt();
+    }
+    return -1;
+}
+
+void MaEditorState::setFirstSeq(int seq) {
+    stateData[FIRST_SEQ] = seq;
+}
+
+double MaEditorState::getZoomFactor() const {
+    QVariant v = stateData.value(ZOOM_FACTOR);
+    if (v.type() == QVariant::Double) {
+        return v.toDouble();
+    }
+    return 1.0;
+}
+
+void MaEditorState::setZoomFactor(double zoomFactor) {
+    stateData[ZOOM_FACTOR] = zoomFactor;
+}
+
+QVariantMap MaEditorState::saveState(MaEditor* v) {
+    MaEditorState ss;
+    ss.stateData[VIEW_ID]= v->getFactoryId();
+
+    MultipleAlignmentObject* maObj = v->getMaObject();
+    if (maObj) {
+        ss.setMaObjectRef(GObjectReference(maObj));
+    }
+
+    MaEditorWgt* wgt = v->getUI();
+    SAFE_POINT(wgt != NULL, "MaEditorWgt is NULL", QVariantMap());
+    ScrollController* scrollController = wgt->getScrollController();
+    SAFE_POINT(scrollController != NULL, "ScrollController is NULL", QVariantMap());
+
+    int firstBase = scrollController->getFirstVisibleBase();
+    int firstSeq = scrollController->getFirstVisibleRowIndex();
+
+    ss.setFirstPos(firstBase);
+    ss.setFirstSeq(firstSeq);
+    ss.setFont(v->getFont());
+    ss.setZoomFactor(v->zoomFactor);
+
+    return ss.stateData;
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorState.h b/src/corelibs/U2View/src/ov_msa/MaEditorState.h
new file mode 100644
index 0000000..c8f3f15
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorState.h
@@ -0,0 +1,64 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_STATE_H_
+#define _U2_MA_EDITOR_STATE_H_
+
+#include <U2Core/U2Region.h>
+#include <U2Core/GObject.h>
+
+#include <QVariant>
+
+namespace U2 {
+
+class MaEditor;
+
+class U2VIEW_EXPORT MaEditorState {
+public:
+    MaEditorState(){}
+
+    MaEditorState(const QVariantMap& _stateData) : stateData(_stateData){}
+
+    static QVariantMap saveState(MaEditor* v);
+
+    bool isValid() const;
+
+    GObjectReference getMaObjectRef() const;
+    void setMaObjectRef(const GObjectReference& ref);
+
+    QFont getFont() const;
+    void setFont(const QFont &f);
+
+    int getFirstPos() const;
+    void setFirstPos(int y);
+
+    int getFirstSeq() const;
+    void setFirstSeq(int seq);
+
+    double getZoomFactor() const;
+    void setZoomFactor(double zoomFactor);
+
+    QVariantMap stateData;
+};
+
+} // namespace
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.cpp
new file mode 100644
index 0000000..d310ff5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.cpp
@@ -0,0 +1,173 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QHBoxLayout>
+
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "MSAEditorSequenceArea.h"
+#include "MaEditorStatusBar.h"
+
+namespace U2 {
+
+const QString MaEditorStatusBar::NONE_MARK = "-";
+
+MaEditorStatusBar::TwoArgPatternLabel::TwoArgPatternLabel(QString textPattern, QString tooltipPattern,
+                                                          QString objectName, QWidget* parent)
+    : QLabel(textPattern, parent),
+      textPattern(textPattern),
+      tooltipPattern(tooltipPattern),
+      fm(QFontMetrics(font(),this)) {
+    setObjectName(objectName);
+    setAlignment(Qt::AlignCenter);
+}
+
+MaEditorStatusBar::TwoArgPatternLabel::TwoArgPatternLabel(QString objectName, QWidget* parent)
+    : QLabel(parent),
+      fm(QFontMetrics(font(),this)) {
+    setObjectName(objectName);
+    setAlignment(Qt::AlignCenter);
+}
+
+void MaEditorStatusBar::TwoArgPatternLabel::setPatterns(QString textPattern, QString tooltipPattern) {
+    this->textPattern = textPattern;
+    this->tooltipPattern = tooltipPattern;
+}
+
+void MaEditorStatusBar::TwoArgPatternLabel::update(QString firstArg, int minWidth) {
+    setText(textPattern.arg(firstArg));
+    setToolTip(tooltipPattern.arg(firstArg));
+    setMinimumWidth(minWidth);
+}
+
+void MaEditorStatusBar::TwoArgPatternLabel::update(QString firstArg, QString secondArg) {
+    setText(textPattern.arg(firstArg).arg(secondArg));
+    setToolTip(tooltipPattern.arg(firstArg).arg(secondArg));
+    setMinimumWidth(10 + fm.width(textPattern.arg(secondArg).arg(secondArg)));
+}
+
+void MaEditorStatusBar::TwoArgPatternLabel::updateMinWidth(QString maxLenArg) {
+    setMinimumWidth(10 + fm.width(textPattern.arg(maxLenArg).arg(maxLenArg)));
+}
+
+MaEditorStatusBar::MaEditorStatusBar(MultipleAlignmentObject* mobj, MaEditorSequenceArea* sa)
+    : aliObj(mobj),
+      seqArea(sa),
+      lockedIcon(":core/images/lock.png"),
+      unlockedIcon(":core/images/lock_open.png")
+{
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+
+    selectionPattern = tr("Sel %1");
+    lineLabel = new TwoArgPatternLabel(tr("Ln %1 / %2"), tr("Line %1 of %2"), "Line", this);
+    colomnLabel = new TwoArgPatternLabel(tr("Col %1 / %2"), tr("Column %1 of %2"), "Column", this);
+    positionLabel = new TwoArgPatternLabel(tr("Pos %1 / %2"), tr("Position %1 of %2"), "Position", this);
+    selectionLabel = new TwoArgPatternLabel(selectionPattern, tr("Selection width and height are %1"), "Selection", this);
+
+    lockLabel = new QLabel();
+
+    layout = new QHBoxLayout();
+    layout->setMargin(2);
+    layout->addStretch(1);
+    setLayout(layout);
+
+    connect(seqArea, SIGNAL(si_selectionChanged(const MaEditorSelection& , const MaEditorSelection& )),
+            SLOT(sl_update()));
+    connect(mobj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+            SLOT(sl_update()));
+    connect(mobj, SIGNAL(si_lockedStateChanged()), SLOT(sl_lockStateChanged()));
+
+    updateLock();
+}
+
+void MaEditorStatusBar::sl_update() {
+    updateLabels();
+}
+
+void MaEditorStatusBar::sl_lockStateChanged() {
+    updateLock();
+}
+
+const QString NONE_SELECTION = QObject::tr("none");
+
+QPair<QString, QString> MaEditorStatusBar::getGappedPositionInfo(const QPoint& pos) const{
+    if (pos.isNull()) {
+        return  QPair<QString, QString>(MaEditorStatusBar::NONE_MARK, MaEditorStatusBar::NONE_MARK);
+    }
+
+    QPair<QString, QString> p;
+    MaEditor* editor = seqArea->getEditor();
+    SAFE_POINT(editor != NULL, "Editor is NULL", p);
+    SAFE_POINT(editor->getMaObject(), "MaObject is NULL", p);
+    const MultipleAlignmentRow row = editor->getMaObject()->getRow(seqArea->getSelectedRows().startPos);
+    QString len = QString::number(row->getUngappedLength());
+    if (row->charAt(pos.x()) == U2Msa::GAP_CHAR){
+        return QPair<QString, QString>(QString("gap"), len);
+    } else{
+        return QPair<QString, QString>(QString::number(row->getUngappedPosition(pos.x()) + 1), len);
+    }
+}
+
+void MaEditorStatusBar::updateLock() {
+    bool locked = aliObj->isStateLocked();
+    lockLabel->setPixmap(locked ? lockedIcon : unlockedIcon);
+    lockLabel->setToolTip(locked ? tr("Alignment object is locked") : tr("Alignment object is not locked"));
+}
+
+void MaEditorStatusBar::updateLineLabel() {
+    MaEditorSelection selection = seqArea->getSelection();
+    lineLabel->update(selection.isEmpty() ? MaEditorStatusBar::NONE_MARK : QString::number(selection.y() + 1),
+                      QString::number(aliObj->getNumRows()));
+}
+
+void MaEditorStatusBar::updatePositionLabel() {
+    MaEditorSelection selection = seqArea->getSelection();
+    QPair<QString, QString> pp = getGappedPositionInfo(selection.topLeft());
+    positionLabel->update(pp.first, pp.second);
+    positionLabel->updateMinWidth(QString::number(aliObj->getLength()));
+}
+
+void MaEditorStatusBar::updateColumnLabel() {
+    MaEditorSelection selection = seqArea->getSelection();
+    const QPoint& pos = selection.topLeft();
+
+    colomnLabel->update(selection.isEmpty() ? MaEditorStatusBar::NONE_MARK : QString::number(pos.x() + 1),
+                        QString::number(aliObj->getLength()));
+}
+
+void MaEditorStatusBar::updateSelectionLabel() {
+    MaEditorSelection selection = seqArea->getSelection();
+    QString selSize;
+    if (selection.isEmpty()) {
+        selSize = NONE_SELECTION;
+    } else {
+        selSize = QString::number(selection.width()) + "x" + QString::number(selection.height());
+    }
+    QFontMetrics fm(lineLabel->font(),this);
+    int maxSelLength = fm.width(selectionPattern.arg(QString::number(aliObj->getLength()) + "x" + QString::number( aliObj->getNumRows())));
+    int nonSelLength = fm.width(selectionPattern.arg(NONE_SELECTION));
+
+    selectionLabel->update(selSize, 10 + qMax(maxSelLength, nonSelLength));
+}
+
+}//namespace
+
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.h b/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.h
new file mode 100644
index 0000000..4859269
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorStatusBar.h
@@ -0,0 +1,97 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_STATUS_BAR_H_
+#define _U2_MA_EDITOR_STATUS_BAR_H_
+
+#include <QLabel>
+#include <QVariant>
+
+class QHBoxLayout;
+
+namespace U2 {
+
+class MultipleAlignmentObject;
+class MaEditorSequenceArea;
+class MaEditorSelection;
+
+class MaEditorStatusBar : public QWidget {
+    Q_OBJECT
+protected:
+    class TwoArgPatternLabel : public QLabel {
+    public:
+        TwoArgPatternLabel(QString textPattern, QString tooltipPattern,
+                           QString objectName, QWidget* parent = NULL);
+        TwoArgPatternLabel(QString objectName, QWidget* parent = NULL);
+        void setPatterns(QString textPattern, QString tooltipPattern);
+
+        void update(QString firstArg, int minWidth);
+        void update(QString firstArg, QString secondArg);
+
+        void updateMinWidth(QString maxLenArg);
+
+    private:
+        QString         textPattern;
+        QString         tooltipPattern;
+        QFontMetrics    fm;
+    };
+
+public:
+    MaEditorStatusBar(MultipleAlignmentObject* mobj, MaEditorSequenceArea* seqArea);
+
+private slots:
+    void sl_update();
+    void sl_lockStateChanged();
+
+protected:
+    virtual void setupLayout() = 0;
+    virtual void updateLabels() = 0;
+    QPair<QString, QString> getGappedPositionInfo(const QPoint& pos) const;
+
+    void updateLock();
+    virtual void updateLineLabel();
+    void updatePositionLabel();
+    void updateColumnLabel();
+    void updateSelectionLabel();
+
+protected:
+    MultipleAlignmentObject*    aliObj;
+    MaEditorSequenceArea*       seqArea;
+    QPixmap                     lockedIcon;
+    QPixmap                     unlockedIcon;
+
+    QHBoxLayout*                layout;
+    TwoArgPatternLabel*         lineLabel;
+    TwoArgPatternLabel*         colomnLabel;
+    TwoArgPatternLabel*         positionLabel;
+    TwoArgPatternLabel*         selectionLabel;
+    QLabel*                     lockLabel;
+
+    static const QString NONE_MARK;
+private:
+    QString selectionPattern;
+};
+
+
+
+}//namespace;
+
+#endif // _U2_MA_EDITOR_STATUS_BAR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorTasks.cpp b/src/corelibs/U2View/src/ov_msa/MaEditorTasks.cpp
new file mode 100644
index 0000000..4336e66
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorTasks.cpp
@@ -0,0 +1,374 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QSet>
+
+#include <U2Algorithm/MSAConsensusAlgorithm.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/GObjectUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/Log.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/TextObject.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UnloadedObject.h>
+
+#include <U2Gui/OpenViewTask.h>
+
+#include <U2Formats/DocumentFormatUtils.h>
+
+#include "MaEditorFactory.h"
+#include "MaEditorState.h"
+#include "MaEditorTasks.h"
+#include "McaEditor.h"
+#include "MSAEditor.h"
+#include "MSAEditorConsensusArea.h"
+
+namespace U2 {
+
+/* TRANSLATOR U2::MSAEditor */
+/* TRANSLATOR U2::ObjectViewTask */
+
+//////////////////////////////////////////////////////////////////////////
+/// open new view
+
+OpenMaEditorTask::OpenMaEditorTask(MultipleAlignmentObject* _obj, GObjectViewFactoryId fid, GObjectType type)
+    : ObjectViewTask(fid),
+      type(type),
+      maObject(_obj)
+{
+    assert(!maObject.isNull());
+}
+
+OpenMaEditorTask::OpenMaEditorTask(UnloadedObject* _obj, GObjectViewFactoryId fid, GObjectType type)
+    : ObjectViewTask(fid),
+      type(type),
+      unloadedReference(_obj)
+{
+    assert(_obj->getLoadedObjectType() == type);
+    documentsToLoad.append(_obj->getDocument());
+}
+
+OpenMaEditorTask::OpenMaEditorTask(Document* doc, GObjectViewFactoryId fid, GObjectType type)
+    : ObjectViewTask(fid),
+      type(type),
+      maObject(NULL)
+{
+    assert(!doc->isLoaded());
+    documentsToLoad.append(doc);
+}
+
+void OpenMaEditorTask::open() {
+    if (stateInfo.hasError() || (maObject.isNull() && documentsToLoad.isEmpty())) {
+        return;
+    }
+    if (maObject.isNull()) {
+        Document* doc = documentsToLoad.first();
+        if(!doc){
+            stateInfo.setError(tr("Documet removed from project"));
+            return;
+        }
+        if (unloadedReference.isValid()) {
+            GObject* obj = doc->findGObjectByName(unloadedReference.objName);
+            if (obj!=NULL && obj->getGObjectType() == type) {
+                maObject = qobject_cast<MultipleAlignmentObject*>(obj);
+            }
+        } else {
+            QList<GObject*> objects = doc->findGObjectByType(type, UOF_LoadedAndUnloaded);
+            maObject = objects.isEmpty() ? NULL : qobject_cast<MultipleAlignmentObject*>(objects.first());
+        }
+        if (maObject.isNull()) {
+            stateInfo.setError(tr("Multiple alignment object not found"));
+            return;
+        }
+    }
+    viewName = GObjectViewUtils::genUniqueViewName(maObject->getDocument(), maObject);
+    uiLog.details(tr("Opening MSA editor for object: %1").arg(maObject->getGObjectName()));
+
+    MaEditor* v = getEditor(viewName, maObject);
+    GObjectViewWindow* w = new GObjectViewWindow(v, viewName, false);
+    MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
+    mdiManager->addMDIWindow(w);
+
+}
+
+void OpenMaEditorTask::updateTitle(MSAEditor* msaEd) {
+    const QString& oldViewName = msaEd->getName();
+    GObjectViewWindow* w = GObjectViewUtils::findViewByName(oldViewName);
+    if (w != NULL) {
+        MultipleAlignmentObject* msaObject = msaEd->getMaObject();
+        QString newViewName = GObjectViewUtils::genUniqueViewName(msaObject->getDocument(), msaObject);
+        msaEd->setName(newViewName);
+        w->setWindowTitle(newViewName);
+    }
+}
+
+OpenMsaEditorTask::OpenMsaEditorTask(MultipleAlignmentObject* obj)
+    : OpenMaEditorTask(obj, MsaEditorFactory::ID, GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)
+{
+}
+
+OpenMsaEditorTask::OpenMsaEditorTask(UnloadedObject* obj)
+    : OpenMaEditorTask(obj, MsaEditorFactory::ID, GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)
+{
+}
+
+OpenMsaEditorTask::OpenMsaEditorTask(Document* doc)
+    : OpenMaEditorTask(doc, MsaEditorFactory::ID, GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)
+{
+}
+
+MaEditor* OpenMsaEditorTask::getEditor(const QString& viewName, GObject* obj) {
+    return MsaEditorFactory().getEditor(viewName, obj);
+}
+
+OpenMcaEditorTask::OpenMcaEditorTask(MultipleAlignmentObject* obj)
+    : OpenMaEditorTask(obj, McaEditorFactory::ID, GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT)
+{
+}
+
+OpenMcaEditorTask::OpenMcaEditorTask(UnloadedObject* obj)
+    : OpenMaEditorTask(obj, McaEditorFactory::ID, GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT)
+{
+}
+
+OpenMcaEditorTask::OpenMcaEditorTask(Document* doc)
+    : OpenMaEditorTask(doc, McaEditorFactory::ID, GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT)
+{
+}
+
+MaEditor* OpenMcaEditorTask::getEditor(const QString& viewName, GObject* obj) {
+    QList<GObjectRelation> relations = obj->findRelatedObjectsByRole(ObjectRole_ReferenceSequence);
+    SAFE_POINT(relations.size() <= 1, "Wrong amount of reference sequences", NULL);
+    return McaEditorFactory().getEditor(viewName, obj);
+}
+
+//////////////////////////////////////////////////////////////////////////
+// open view from state
+
+OpenSavedMaEditorTask::OpenSavedMaEditorTask(GObjectType type, MaEditorFactory* factory,
+                                             const QString& viewName, const QVariantMap& stateData)
+    : ObjectViewTask(factory->getId(), viewName, stateData),
+      type(type),
+      factory(factory)
+{
+    MaEditorState state(stateData);
+    GObjectReference ref = state.getMaObjectRef();
+    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
+    if (doc == NULL) {
+        doc = createDocumentAndAddToProject(ref.docUrl, AppContext::getProject(), stateInfo);
+        CHECK_OP_EXT(stateInfo, stateIsIllegal = true ,);
+    }
+    if (!doc->isLoaded()) {
+        documentsToLoad.append(doc);
+    }
+
+}
+
+void OpenSavedMaEditorTask::open() {
+    CHECK_OP(stateInfo, );
+
+    MaEditorState state(stateData);
+    GObjectReference ref = state.getMaObjectRef();
+    Document* doc = AppContext::getProject()->findDocumentByURL(ref.docUrl);
+    if (doc == NULL) {
+        stateIsIllegal = true;
+        stateInfo.setError(L10N::errorDocumentNotFound(ref.docUrl));
+        return;
+    }
+    GObject* obj = NULL;
+    if (doc->isDatabaseConnection() && ref.entityRef.isValid()) {
+        obj = doc->getObjectById(ref.entityRef.entityId);
+    } else {
+        // TODO: this methods does not work! UGENE-4904
+//        obj = doc->findGObjectByName(ref.objName);
+        QList<GObject*> objs = doc->findGObjectByType(ref.objType);
+        foreach(GObject* curObj, objs) {
+            if (curObj->getGObjectName() == ref.objName) {
+                obj = curObj;
+                break;
+            }
+        }
+    }
+    if (obj == NULL || obj->getGObjectType() != type) {
+        stateIsIllegal = true;
+        stateInfo.setError(tr("Alignment object not found: %1").arg(ref.objName));
+        return;
+    }
+    MultipleAlignmentObject* maObject = qobject_cast<MultipleAlignmentObject*>(obj);
+    assert(maObject!=NULL);
+
+    MaEditor* v = factory->getEditor(viewName, maObject);
+    GObjectViewWindow* w = new GObjectViewWindow(v, viewName, true);
+    MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
+    mdiManager->addMDIWindow(w);
+
+    updateRanges(stateData, v);
+}
+
+void OpenSavedMaEditorTask::updateRanges(const QVariantMap& stateData, MaEditor* ctx) {
+    Q_UNUSED(ctx);
+    MaEditorState state(stateData);
+
+    QFont f = state.getFont();
+    if (!f.isCopyOf(QFont())) {
+        ctx->setFont(f);
+    }
+
+    ctx->setFirstVisiblePosSeq(state.getFirstPos(), state.getFirstSeq());
+    ctx->setZoomFactor(state.getZoomFactor());
+}
+
+
+//////////////////////////////////////////////////////////////////////////
+// update
+UpdateMaEditorTask::UpdateMaEditorTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData)
+: ObjectViewTask(v, stateName, stateData)
+{
+}
+
+void UpdateMaEditorTask::update() {
+    if (view.isNull() || (view->getFactoryId() != MsaEditorFactory::ID && view->getFactoryId() != McaEditorFactory::ID)) {
+        return; //view was closed;
+    }
+
+    MaEditor* maView = qobject_cast<MaEditor*>(view.data());
+    SAFE_POINT_EXT(maView != NULL, setError("MaEditor is NULL"), );
+
+    OpenSavedMaEditorTask::updateRanges(stateData, maView);
+}
+
+
+ExportMaConsensusTask::ExportMaConsensusTask(const ExportMaConsensusTaskSettings& s )
+    : DocumentProviderTask(tr("Export consensus"),
+                           (TaskFlags(TaskFlag_NoRun) | TaskFlag_FailOnSubtaskError | TaskFlag_CancelOnSubtaskCancel)),
+      settings(s),
+      extractConsensus(NULL) {
+    setVerboseLogMode(true);
+    SAFE_POINT_EXT(s.ma != NULL, setError("Given msa pointer is NULL"), );
+}
+
+void ExportMaConsensusTask::prepare(){
+    extractConsensus = new ExtractConsensusTask(settings.keepGaps, settings.ma);
+    addSubTask(extractConsensus);
+}
+
+QList<Task*> ExportMaConsensusTask::onSubTaskFinished( Task* subTask ){
+    QList<Task*> result;
+    if(subTask == extractConsensus && !isCanceled() && !hasError()) {
+        Document *takenDoc = createDocument();
+        CHECK_OP(stateInfo, result);
+        SaveDocumentTask *saveTask = new SaveDocumentTask(takenDoc, takenDoc->getIOAdapterFactory(), takenDoc->getURL());
+        saveTask->addFlag(SaveDoc_Overwrite);
+        Project *proj = AppContext::getProject();
+        if(proj != NULL){
+            if(proj->findDocumentByURL(takenDoc->getURL()) != NULL){
+                result.append(saveTask);
+                return result;
+            }
+        }
+        saveTask->addFlag(SaveDoc_OpenAfter);
+        result.append(saveTask);
+    }
+    return result;
+}
+
+Document *ExportMaConsensusTask::createDocument(){
+    filteredConsensus = extractConsensus->getExtractedConsensus();
+    CHECK_EXT(!filteredConsensus.isEmpty(), setError("Consensus is empty!"), NULL);
+    QString fullPath = GUrlUtils::prepareFileLocation(settings.url, stateInfo);
+    CHECK_OP(stateInfo, NULL);
+    GUrl url(fullPath);
+
+    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(settings.url));
+    DocumentFormat *df = AppContext::getDocumentFormatRegistry()->getFormatById(settings.format);
+    CHECK_EXT(df, setError("Document format is NULL!"), NULL);
+    GObject *obj = NULL;
+    QScopedPointer<Document> doc(df->createNewLoadedDocument(iof, fullPath, stateInfo));
+    CHECK_OP(stateInfo, NULL);
+    if (df->getFormatId() == BaseDocumentFormats::PLAIN_TEXT){
+        obj = TextObject::createInstance(filteredConsensus, settings.name, doc->getDbiRef(), stateInfo);
+    }else{
+        obj = DocumentFormatUtils::addSequenceObject(doc->getDbiRef(), settings.name, filteredConsensus, false, QVariantMap(), stateInfo);
+    }
+    CHECK_OP(stateInfo, NULL);
+    doc->addObject(obj);
+    return doc.take();
+}
+
+ExtractConsensusTask::ExtractConsensusTask( bool keepGaps_, MaEditor* ma_ )
+    : Task(tr("Extract consensus"), TaskFlags(TaskFlag_None)),
+      keepGaps(keepGaps_),
+      ma(ma_) {
+    setVerboseLogMode(true);
+    SAFE_POINT_EXT(ma != NULL, setError("Given ma pointer is NULL"), );
+}
+
+void ExtractConsensusTask::run() {
+    CHECK(ma->getUI(), );
+    CHECK(ma->getUI()->getConsensusArea(), );
+    CHECK(ma->getUI()->getConsensusArea()->getConsensusCache(),);
+
+    MSAConsensusAlgorithm *algorithm = ma->getUI()->getConsensusArea()->getConsensusAlgorithm();
+    const MultipleAlignment alignment = ma->getMaObject()->getMultipleAlignmentCopy();
+    for (int i = 0, n = alignment->getLength(); i < n; i++) {
+        if (stateInfo.isCoR()) {
+            return;
+        }
+        int count = 0;
+        int nSeq = alignment->getNumRows();
+        SAFE_POINT(0 != nSeq, tr("No sequences in alignment"), );
+
+        QChar c = algorithm->getConsensusCharAndScore(alignment, i, count);
+        if (c == MSAConsensusAlgorithm::INVALID_CONS_CHAR) {
+            c = U2Msa::GAP_CHAR;
+        }
+        if (c != U2Msa::GAP_CHAR || keepGaps) {
+            filteredConsensus.append(c);
+        }
+    }
+}
+
+const QByteArray& ExtractConsensusTask::getExtractedConsensus() const {
+    return filteredConsensus;
+}
+
+
+ExportMaConsensusTaskSettings::ExportMaConsensusTaskSettings()
+    : keepGaps(true),
+      ma(NULL),
+      format(BaseDocumentFormats::PLAIN_TEXT)
+{}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MaEditorTasks.h b/src/corelibs/U2View/src/ov_msa/MaEditorTasks.h
new file mode 100644
index 0000000..315a1d5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MaEditorTasks.h
@@ -0,0 +1,146 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_TASKS_H_
+#define _U2_MA_EDITOR_TASKS_H_
+
+#include <U2Core/GObjectReference.h>
+#include <U2Gui/ObjectViewTasks.h>
+#include <U2Core/DocumentProviderTask.h>
+namespace U2 {
+
+class MaEditor;
+class MaEditorFactory;
+class MSAEditor;
+class MultipleAlignmentObject;
+class UnloadedObject;
+
+/*!
+ * \brief The OpenMaEditorTask class
+ */
+class OpenMaEditorTask : public ObjectViewTask {
+    Q_OBJECT
+public:
+    OpenMaEditorTask(MultipleAlignmentObject* obj, GObjectViewFactoryId fid, GObjectType type);
+    OpenMaEditorTask(UnloadedObject* obj, GObjectViewFactoryId fid, GObjectType type);
+    OpenMaEditorTask(Document* doc, GObjectViewFactoryId fid, GObjectType type);
+
+    virtual void open();
+
+    static void updateTitle(MSAEditor* msaEd);
+
+    virtual MaEditor* getEditor(const QString& viewName, GObject* obj) = 0;
+
+protected:
+    GObjectType                         type;
+    QPointer<MultipleAlignmentObject>   maObject;
+    GObjectReference                    unloadedReference;
+};
+
+/*!
+ * \brief The OpenMsaEditorTaskOpenMsaEditorTask class
+ */
+class OpenMsaEditorTask : public OpenMaEditorTask {
+    Q_OBJECT
+public:
+    OpenMsaEditorTask(MultipleAlignmentObject* obj);
+    OpenMsaEditorTask(UnloadedObject* obj);
+    OpenMsaEditorTask(Document* doc);
+
+    MaEditor* getEditor(const QString &viewName, GObject *obj);
+};
+
+/*!
+ * \brief The OpenMcaEditorTask class
+ */
+class OpenMcaEditorTask : public OpenMaEditorTask {
+    Q_OBJECT
+public:
+    OpenMcaEditorTask(MultipleAlignmentObject* obj);
+    OpenMcaEditorTask(UnloadedObject* obj);
+    OpenMcaEditorTask(Document* doc);
+
+    MaEditor* getEditor(const QString &viewName, GObject *obj);
+};
+
+class OpenSavedMaEditorTask : public ObjectViewTask {
+    Q_OBJECT
+public:
+    OpenSavedMaEditorTask(GObjectType type, MaEditorFactory* factory,
+                          const QString& viewName, const QVariantMap& stateData);
+    virtual void open();
+
+    static void updateRanges(const QVariantMap& stateData, MaEditor* ctx);
+private:
+    GObjectType         type;
+    MaEditorFactory* factory;
+};
+
+
+class UpdateMaEditorTask : public ObjectViewTask {
+public:
+    UpdateMaEditorTask(GObjectView* v, const QString& stateName, const QVariantMap& stateData);
+
+    virtual void update();
+};
+
+class ExportMaConsensusTaskSettings {
+public:
+    ExportMaConsensusTaskSettings();
+
+    bool                keepGaps;
+    MaEditor*           ma;
+    QString             url;
+    DocumentFormatId    format;
+    QString             name;
+};
+
+class ExtractConsensusTask : public Task {
+    Q_OBJECT
+public:
+    ExtractConsensusTask( bool keepGaps, MaEditor* ma);
+    void run();
+    const QByteArray& getExtractedConsensus() const;
+private:
+    bool        keepGaps;
+    MaEditor*   ma;
+    QByteArray  filteredConsensus;
+};
+
+class ExportMaConsensusTask : public DocumentProviderTask {
+    Q_OBJECT
+public:
+    ExportMaConsensusTask(const ExportMaConsensusTaskSettings& s);
+
+    void prepare();
+protected:
+    QList<Task*> onSubTaskFinished(Task* subTask);
+private:
+    Document* createDocument();
+
+    ExportMaConsensusTaskSettings   settings;
+    ExtractConsensusTask*           extractConsensus;
+    QByteArray                      filteredConsensus;
+};
+
+} // namespace
+
+#endif
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditor.cpp b/src/corelibs/U2View/src/ov_msa/McaEditor.cpp
new file mode 100644
index 0000000..3d119b3
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditor.cpp
@@ -0,0 +1,315 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QToolBar>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/Settings.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Gui/GUIUtils.h>
+#include <U2Gui/OptionsPanel.h>
+#include <U2Gui/OPWidgetFactoryRegistry.h>
+
+#include "MaConsensusMismatchController.h"
+#include "MaEditorFactory.h"
+#include "McaEditor.h"
+#include "McaEditorConsensusArea.h"
+#include "McaEditorNameList.h"
+#include "McaEditorSequenceArea.h"
+#include "ExportConsensus/MaExportConsensusTabFactory.h"
+#include "General/McaGeneralTabFactory.h"
+#include "helpers/MaAmbiguousCharactersController.h"
+#include "ov_sequence/SequenceObjectContext.h"
+#include "Overview/MaEditorOverviewArea.h"
+#include "view_rendering/SequenceWithChromatogramAreaRenderer.h"
+
+namespace U2 {
+
+McaEditor::McaEditor(const QString &viewName,
+                     MultipleChromatogramAlignmentObject *obj)
+    : MaEditor(McaEditorFactory::ID, viewName, obj),
+      referenceCtx(NULL)
+{
+    GCOUNTER(cvar, tvar, "Sanger Reads Editor");
+    initZoom();
+    initFont();
+
+    U2OpStatusImpl os;
+    foreach (const MultipleChromatogramAlignmentRow& row, obj->getMca()->getMcaRows()) {
+        chromVisibility.insert(obj->getMca()->getRowIndexByRowId(row->getRowId(), os), true);
+    }
+
+    U2SequenceObject* referenceObj = obj->getReferenceObj();
+    SAFE_POINT(NULL != referenceObj, "Trying to open McaEditor without a reference", );
+    referenceCtx = new SequenceObjectContext(referenceObj, this);
+}
+
+MultipleChromatogramAlignmentObject *McaEditor::getMaObject() const {
+    return qobject_cast<MultipleChromatogramAlignmentObject*>(maObject);
+}
+
+McaEditorWgt *McaEditor::getUI() const {
+    return qobject_cast<McaEditorWgt *>(ui);
+}
+
+void McaEditor::buildStaticToolbar(QToolBar* tb) {
+    tb->addAction(showChromatogramsAction);
+    tb->addAction(showOverviewAction);
+    tb->addSeparator();
+
+    tb->addAction(zoomInAction);
+    tb->addAction(zoomOutAction);
+    tb->addAction(resetZoomAction);
+    tb->addSeparator();
+
+    GObjectView::buildStaticToolbar(tb);
+}
+
+void McaEditor::buildStaticMenu(QMenu* menu) {
+    addAlignmentMenu(menu);
+    addAppearanceMenu(menu);
+    addNavigationMenu(menu);
+    addEditMenu(menu);
+    menu->addSeparator();
+    menu->addAction(showConsensusTabAction);
+    menu->addSeparator();
+
+    GObjectView::buildStaticMenu(menu);
+    GUIUtils::disableEmptySubmenus(menu);
+}
+
+int McaEditor::getRowContentIndent(int rowId) const {
+    if (isChromVisible(rowId)) {
+        return SequenceWithChromatogramAreaRenderer::INDENT_BETWEEN_ROWS / 2;
+    }
+    return MaEditor::getRowContentIndent(rowId);
+}
+
+bool McaEditor::isChromVisible(qint64 rowId) const {
+    return isChromVisible(getMaObject()->getRowPosById(rowId));
+}
+
+bool McaEditor::isChromVisible(int rowIndex) const {
+    return !ui->getCollapseModel()->isItemCollapsed(rowIndex);
+}
+
+bool McaEditor::isChromatogramButtonChecked() const {
+    return showChromatogramsAction->isChecked();
+}
+
+QString McaEditor::getReferenceRowName() const {
+    return getMaObject()->getReferenceObj()->getSequenceName();
+}
+
+char McaEditor::getReferenceCharAt(int pos) const {
+    U2OpStatus2Log os;
+    SAFE_POINT(getMaObject()->getReferenceObj()->getSequenceLength() > pos, "Invalid position", '\n');
+    QByteArray seqData = getMaObject()->getReferenceObj()->getSequenceData(U2Region(pos, 1), os);
+    CHECK_OP(os, U2Msa::GAP_CHAR);
+    return seqData.isEmpty() ? U2Msa::GAP_CHAR : seqData.at(0);
+}
+
+SequenceObjectContext* McaEditor::getReferenceContext() const {
+    return referenceCtx;
+}
+
+void McaEditor::sl_onContextMenuRequested(const QPoint & /*pos*/) {
+    QMenu menu;
+    buildStaticMenu(&menu);
+    emit si_buildPopupMenu(this, &menu);
+    menu.exec(QCursor::pos());
+}
+
+void McaEditor::sl_showHideChromatograms(bool show) {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "'Show chromatogram' action triggered", getFactoryId());
+    ui->getCollapseModel()->collapseAll(!show);
+    sl_saveChromatogramState();
+    emit si_completeUpdate();
+}
+
+void McaEditor::sl_showGeneralTab() {
+    OptionsPanel* optionsPanel = getOptionsPanel();
+    SAFE_POINT(NULL != optionsPanel, "Internal error: options panel is NULL"
+        " when msageneraltab opening was initiated", );
+    optionsPanel->openGroupById(McaGeneralTabFactory::getGroupId());
+}
+
+void McaEditor::sl_showConsensusTab() {
+    OptionsPanel* optionsPanel = getOptionsPanel();
+    SAFE_POINT(NULL != optionsPanel, "Internal error: options panel is NULL"
+        " when msaconsensustab opening was initiated", );
+    optionsPanel->openGroupById(McaExportConsensusTabFactory::getGroupId());
+}
+
+QWidget* McaEditor::createWidget() {
+    Q_ASSERT(ui == NULL);
+    ui = new McaEditorWgt(this);
+
+    QString objName = "mca_editor_" + maObject->getGObjectName();
+    ui->setObjectName(objName);
+
+    connect(ui , SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(sl_onContextMenuRequested(const QPoint &)));
+
+    initActions();
+
+    optionsPanel = new OptionsPanel(this);
+    OPWidgetFactoryRegistry *opWidgetFactoryRegistry = AppContext::getOPWidgetFactoryRegistry();
+
+    QList<OPFactoryFilterVisitorInterface*> filters;
+    filters.append(new OPFactoryFilterVisitor(ObjViewType_ChromAlignmentEditor));
+
+    QList<OPWidgetFactory*> opWidgetFactories = opWidgetFactoryRegistry->getRegisteredFactories(filters);
+    foreach (OPWidgetFactory *factory, opWidgetFactories) {
+        optionsPanel->addGroup(factory);
+    }
+
+    qDeleteAll(filters);
+
+    updateActions();
+
+    return ui;
+}
+
+void McaEditor::initActions() {
+    MaEditor::initActions();
+
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+
+    zoomInAction->setText(tr("Zoom in"));
+    zoomInAction->setShortcut(QKeySequence::ZoomIn);
+    GUIUtils::updateActionToolTip(zoomInAction);
+    ui->addAction(zoomInAction);
+
+    zoomOutAction->setText(tr("Zoom out"));
+    zoomOutAction->setShortcut(QKeySequence::ZoomOut);
+    GUIUtils::updateActionToolTip(zoomOutAction);
+    ui->addAction(zoomOutAction);
+
+    resetZoomAction->setText(tr("Reset zoom"));
+    resetZoomAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_0));
+    GUIUtils::updateActionToolTip(resetZoomAction);
+    ui->addAction(resetZoomAction);
+
+    showChromatogramsAction = new QAction(QIcon(":/core/images/graphs.png"), tr("Show chromatograms"), this);
+    showChromatogramsAction->setObjectName("chromatograms");
+    showChromatogramsAction->setCheckable(true);
+    connect(showChromatogramsAction, SIGNAL(triggered(bool)), SLOT(sl_showHideChromatograms(bool)));
+    showChromatogramsAction->setChecked(s->getValue(getSettingsRoot() + MCAE_SETTINGS_SHOW_CHROMATOGRAMS, true).toBool());
+    ui->addAction(showChromatogramsAction);
+
+    showGeneralTabAction = new QAction(tr("Open \"General\" tab on the options panel"), this);
+    connect(showGeneralTabAction, SIGNAL(triggered()), SLOT(sl_showGeneralTab()));
+    ui->addAction(showGeneralTabAction);
+
+    showConsensusTabAction = new QAction(tr("Open \"Consensus\" tab on the options panel"), this);
+    connect(showConsensusTabAction, SIGNAL(triggered()), SLOT(sl_showConsensusTab()));
+    ui->addAction(showConsensusTabAction);
+
+    showOverviewAction->setText(tr("Show overview"));
+    showOverviewAction->setObjectName("overview");
+    connect(showOverviewAction, SIGNAL(triggered(bool)), SLOT(sl_saveOverviewState()));
+    bool overviewVisible = s->getValue(getSettingsRoot() + MCAE_SETTINGS_SHOW_OVERVIEW, true).toBool();
+    showOverviewAction->setChecked(overviewVisible);
+    ui->getOverviewArea()->setVisible(overviewVisible);
+    changeFontAction->setText(tr("Change characters font..."));
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, overviewVisible, "'Show overview' is checked on the view opening", getFactoryId());
+    GRUNTIME_NAMED_CONDITION_COUNTER(ccvar, ttvar, !overviewVisible, "'Show overview' is unchecked on the view opening", getFactoryId());
+}
+
+void McaEditor::sl_saveOverviewState() {
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "'Show overview' action triggered", getFactoryId());
+    s->setValue(getSettingsRoot() + MCAE_SETTINGS_SHOW_OVERVIEW, showOverviewAction->isChecked());
+}
+
+void McaEditor::sl_saveChromatogramState() {
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+    s->setValue(getSettingsRoot() + MCAE_SETTINGS_SHOW_CHROMATOGRAMS, showChromatogramsAction->isChecked());
+}
+
+void McaEditor::addAlignmentMenu(QMenu *menu) {
+    QMenu *alignmentMenu = menu->addMenu(tr("Alignment"));
+    alignmentMenu->menuAction()->setObjectName(MCAE_MENU_ALIGNMENT);
+
+    alignmentMenu->addAction(showGeneralTabAction);
+}
+
+void McaEditor::addAppearanceMenu(QMenu *menu) {
+    QMenu* appearanceMenu = menu->addMenu(tr("Appearance"));
+    appearanceMenu->menuAction()->setObjectName(MCAE_MENU_APPEARANCE);
+
+    appearanceMenu->addAction(showChromatogramsAction);
+    appearanceMenu->addMenu(getUI()->getSequenceArea()->getTraceActionsMenu());
+    appearanceMenu->addAction(showOverviewAction);
+    appearanceMenu->addAction(getUI()->getToogleColumnsAction());
+    appearanceMenu->addSeparator();
+    appearanceMenu->addAction(zoomInAction);
+    appearanceMenu->addAction(zoomOutAction);
+    appearanceMenu->addAction(resetZoomAction);
+    appearanceMenu->addSeparator();
+    appearanceMenu->addAction(getUI()->getSequenceArea()->getIncreasePeaksHeightAction());
+    appearanceMenu->addAction(getUI()->getSequenceArea()->getDecreasePeaksHeightAction());
+    appearanceMenu->addSeparator();
+    appearanceMenu->addAction(changeFontAction);
+    appearanceMenu->addSeparator();
+    appearanceMenu->addAction(getUI()->getClearSelectionAction());
+}
+
+void McaEditor::addNavigationMenu(QMenu *menu) {
+    QMenu *navigationMenu = menu->addMenu(tr("Navigation"));
+    navigationMenu->menuAction()->setObjectName(MCAE_MENU_NAVIGATION);
+
+    navigationMenu->addAction(getUI()->getSequenceArea()->getAmbiguousCharactersController()->getPreviousAction());
+    navigationMenu->addAction(getUI()->getSequenceArea()->getAmbiguousCharactersController()->getNextAction());
+    navigationMenu->addSeparator();
+    navigationMenu->addAction(getUI()->getConsensusArea()->getMismatchController()->getPrevMismatchAction());
+    navigationMenu->addAction(getUI()->getConsensusArea()->getMismatchController()->getNextMismatchAction());
+}
+
+void McaEditor::addEditMenu(QMenu* menu) {
+    QMenu* editMenu = menu->addMenu(tr("Edit"));
+    editMenu->menuAction()->setObjectName(MCAE_MENU_EDIT);
+
+    editMenu->addAction(getUI()->getSequenceArea()->getInsertAction());
+    editMenu->addAction(getUI()->getSequenceArea()->getReplaceCharacterAction());
+    editMenu->addAction(getUI()->getDelSelectionAction());
+    editMenu->addSeparator();
+    editMenu->addAction(getUI()->getSequenceArea()->getInsertGapAction());
+    editMenu->addAction(getUI()->getSequenceArea()->getRemoveGapBeforeSelectionAction());
+    editMenu->addAction(getUI()->getSequenceArea()->getRemoveColumnsOfGapsAction());
+    editMenu->addSeparator();
+    editMenu->addAction(getUI()->getSequenceArea()->getTrimLeftEndAction());
+    editMenu->addAction(getUI()->getSequenceArea()->getTrimRightEndAction());
+    editMenu->addSeparator();
+    editMenu->addAction(getUI()->getEditorNameList()->getEditSequenceNameAction());
+    editMenu->addAction(getUI()->getEditorNameList()->getRemoveSequenceAction());
+    editMenu->addSeparator();
+    editMenu->addAction(getUI()->getUndoAction());
+    editMenu->addAction(getUI()->getRedoAction());
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditor.h b/src/corelibs/U2View/src/ov_msa/McaEditor.h
new file mode 100644
index 0000000..8512c3e
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditor.h
@@ -0,0 +1,106 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_H_
+#define _U2_MCA_EDITOR_H_
+
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+
+#include "MaEditor.h"
+#include "McaEditorWgt.h"
+#include "view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+class McaEditor;
+class SequenceObjectContext;
+
+#define     MCAE_MENU_ALIGNMENT     "MCAE_MENU_ALIGNMENT"
+#define     MCAE_MENU_APPEARANCE    "MCAE_MENU_APPEARANCE"
+#define     MCAE_MENU_NAVIGATION    "MCAE_MENU_NAVIGATION"
+#define     MCAE_MENU_EDIT          "MCAE_MENU_EDIT"
+
+#define MCAE_SETTINGS_SHOW_CHROMATOGRAMS    "show_chromatograms"
+#define MCAE_SETTINGS_SHOW_OVERVIEW         "show_overview"
+#define MCAE_SETTINGS_PEAK_HEIGHT           "peak_height"
+#define MCAE_SETTINGS_CONSENSUS_TYPE        "consensus_type"
+
+class U2VIEW_EXPORT McaEditor : public MaEditor {
+    Q_OBJECT
+    friend class McaEditorSequenceArea;
+public:
+    McaEditor(const QString& viewName,
+              MultipleChromatogramAlignmentObject* obj);
+
+    QString getSettingsRoot() const { return MCAE_SETTINGS_ROOT; }
+
+    MultipleChromatogramAlignmentObject* getMaObject() const;
+    McaEditorWgt *getUI() const;
+
+    virtual void buildStaticToolbar(QToolBar* tb);
+
+    virtual void buildStaticMenu(QMenu* menu);
+
+    virtual int getRowContentIndent(int rowId) const;
+
+    bool isChromVisible(qint64 rowId) const;
+    bool isChromVisible(int rowIndex) const;
+    bool isChromatogramButtonChecked() const;
+
+    QString getReferenceRowName() const;
+
+    char getReferenceCharAt(int pos) const;
+
+    SequenceObjectContext* getReferenceContext() const;
+
+protected slots:
+    void sl_onContextMenuRequested(const QPoint & pos);
+    void sl_showHideChromatograms(bool show);
+
+private slots:
+    void sl_showGeneralTab();
+    void sl_showConsensusTab();
+
+    void sl_saveOverviewState();
+    void sl_saveChromatogramState();
+
+protected:
+    QWidget* createWidget();
+    void initActions();
+
+    QAction*          showChromatogramsAction;
+    QAction*          showGeneralTabAction;
+    QAction*          showConsensusTabAction;
+
+    QMap<qint64, bool>  chromVisibility;
+
+    SequenceObjectContext*  referenceCtx;
+
+private:
+    void addAlignmentMenu(QMenu *menu);
+    void addAppearanceMenu(QMenu *menu);
+    void addNavigationMenu(QMenu *menu);
+    void addEditMenu(QMenu *menu);
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.cpp
new file mode 100644
index 0000000..4ad794c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.cpp
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QToolBar>
+
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
+
+#include <U2Core/AppContext.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include "McaEditorConsensusArea.h"
+#include "McaEditor.h"
+#include "MSAEditor.h" // for menu names consts
+#include "view_rendering/McaConsensusAreaRenderer.h"
+
+#include "ov_msa/MaConsensusMismatchController.h"
+
+namespace U2 {
+
+/************************************************************************/
+/* McaEditorConsensusArea */
+/************************************************************************/
+McaEditorConsensusArea::McaEditorConsensusArea(McaEditorWgt *ui)
+    : MaEditorConsensusArea(ui) {
+    initCache();
+
+    mismatchController = new MaConsensusMismatchController(this, consensusCache, editor);
+    addAction(mismatchController->getPrevMismatchAction());
+    addAction(mismatchController->getNextMismatchAction());
+
+    initRenderer();
+    setupFontAndHeight();
+}
+
+void McaEditorConsensusArea::buildStaticToolbar(QToolBar *t) {
+    t->addAction(mismatchController->getPrevMismatchAction());
+    t->addAction(mismatchController->getNextMismatchAction());
+}
+
+void McaEditorConsensusArea::initRenderer() {
+    renderer = new McaConsensusAreaRenderer(this);
+}
+
+bool McaEditorConsensusArea::highlightConsensusChar(int pos) {
+    return consensusSettings.highlightMismatches && mismatchController->isMismatch(pos);
+}
+
+QString McaEditorConsensusArea::getLastUsedAlgoSettingsKey() const {
+    return editor->getSettingsRoot() + MCAE_SETTINGS_CONSENSUS_TYPE;
+}
+
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.h b/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.h
new file mode 100644
index 0000000..9e3dbc6
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorConsensusArea.h
@@ -0,0 +1,58 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_CONSENSUS_AREA_H_
+#define _U2_MCA_EDITOR_CONSENSUS_AREA_H_
+
+#include <QWidget>
+
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
+
+#include "view_rendering/MaEditorConsensusArea.h"
+
+namespace U2 {
+
+class MaConsensusMismatchController;
+class McaEditorWgt;
+
+class U2VIEW_EXPORT McaEditorConsensusArea : public MaEditorConsensusArea {
+    Q_OBJECT
+    Q_DISABLE_COPY(McaEditorConsensusArea)
+
+public:
+    McaEditorConsensusArea(McaEditorWgt* ui);
+
+    QString getDefaultAlgorithmId() const { return BuiltInConsensusAlgorithms::SIMPLE_EXTENDED_ALGO; }
+
+    MaConsensusMismatchController* getMismatchController() { return mismatchController; }
+    void buildStaticToolbar(QToolBar* tb);
+
+private:
+    void initRenderer();
+    bool highlightConsensusChar(int pos);
+    QString getLastUsedAlgoSettingsKey() const;
+
+private:
+    MaConsensusMismatchController*  mismatchController;
+};
+
+} // namespace
+#endif // _U2_MCA_EDITOR_CONSENSUS_AREA_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorNameList.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorNameList.cpp
new file mode 100644
index 0000000..5d6ccb4
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorNameList.cpp
@@ -0,0 +1,152 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Gui/GraphUtils.h>
+
+#include "McaEditor.h"
+#include "McaEditorNameList.h"
+#include "McaEditorSequenceArea.h"
+#include "helpers/RowHeightController.h"
+#include "view_rendering/MaEditorSelection.h"
+
+namespace U2 {
+
+const int McaEditorNameList::MARGIN_ARROW_LEFT = 5;
+const int McaEditorNameList::MARGIN_ARROW_RIGHT = 5;
+const qreal McaEditorNameList::ARROW_LINE_WIDTH = 2;
+const qreal McaEditorNameList::ARROW_LENGTH = 25;
+const qreal McaEditorNameList::ARROW_HEAD_WIDTH = 6;
+const qreal McaEditorNameList::ARROW_HEAD_LENGTH = 7;
+const QColor McaEditorNameList::ARROW_DIRECT_COLOR = "blue"; // another possible color: "#4EADE1";
+const QColor McaEditorNameList::ARROW_REVERSE_COLOR = "green"; // another possible color: "#03c03c";
+
+McaEditorNameList::McaEditorNameList(McaEditorWgt *ui, QScrollBar *nhBar)
+    : MaEditorNameList(ui, nhBar)
+{
+    setObjectName("mca_editor_name_list");
+
+    connect(ui, SIGNAL(si_clearSelection()), SLOT(sl_clearSelection()));
+
+    editSequenceNameAction->setText(tr("Rename read"));
+    editSequenceNameAction->setShortcut(Qt::Key_F2);
+
+    removeSequenceAction->setText(tr("Remove read"));
+
+    setMinimumWidth(getMinimumWidgetWidth());
+}
+
+U2Region McaEditorNameList::getSelection() const {
+    return localSelection;
+}
+
+void McaEditorNameList::sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection &oldSelection) {
+    setSelection(current.y(), current.height());
+    sl_updateActions();
+}
+
+void McaEditorNameList::sl_clearSelection() {
+    setSelection(0, 0);
+}
+
+void McaEditorNameList::sl_updateActions() {
+    MaEditorNameList::sl_updateActions();
+
+    const bool hasSequenceSelection = !ui->getSequenceArea()->getSelection().isEmpty();
+    const bool hasRowSelection = !getSelection().isEmpty();
+    const bool isWholeReadSelected = hasRowSelection && !hasSequenceSelection;
+
+    removeSequenceAction->setShortcut(isWholeReadSelected ? QKeySequence::Delete : QKeySequence());
+}
+
+void McaEditorNameList::drawCollapsibileSequenceItem(QPainter &painter, int rowIndex, const QString &name, const QRect &rect, bool selected, bool collapsed, bool isReference) {
+    const bool isReversed = isRowReversed(rowIndex);
+    const QRectF arrowRect = calculateArrowRect(U2Region(rect.y(), rect.height()));
+    MaEditorNameList::drawCollapsibileSequenceItem(painter, rowIndex, name, rect, selected, collapsed, isReference);
+    drawArrow(painter, isReversed, arrowRect);
+}
+
+void McaEditorNameList::setSelection(int startSeq, int count) {
+    localSelection = U2Region(startSeq, count);
+    completeRedraw = true;
+    update();
+    sl_updateActions();
+    emit si_selectionChanged();
+}
+
+bool McaEditorNameList::isRowInSelection(int row) const {
+    return localSelection.contains(row);
+}
+
+McaEditor* McaEditorNameList::getEditor() const {
+    return qobject_cast<McaEditor*>(editor);
+}
+
+bool McaEditorNameList::isRowReversed(int rowIndex) const {
+    return getEditor()->getMaObject()->getMcaRow(rowIndex)->isReversed();
+}
+
+void McaEditorNameList::drawText(QPainter &painter, const QString &text, const QRect &rect, bool selected) {
+    const QFontMetrics fontMetrics(getFont(selected));
+    const QString elidedText = fontMetrics.elidedText(text, Qt::ElideRight, rect.width());
+    MaEditorNameList::drawText(painter, elidedText, rect, selected);
+}
+
+void McaEditorNameList::drawArrow(QPainter &painter, bool isReversed, const QRectF &arrowRect) {
+    GraphUtils::ArrowConfig config;
+    config.lineWidth = ARROW_LINE_WIDTH;
+    config.lineLength = arrowRect.width();
+    config.arrowHeadWidth = ARROW_HEAD_WIDTH;
+    config.arrowHeadLength = ARROW_HEAD_LENGTH;
+    config.color = isReversed ? ARROW_REVERSE_COLOR : ARROW_DIRECT_COLOR;
+    config.direction = isReversed ? GraphUtils::RightToLeft : GraphUtils::LeftToRight;
+    GraphUtils::drawArrow(painter, arrowRect, config);
+}
+
+QRectF McaEditorNameList::calculateArrowRect(const U2Region &yRange) const {
+    const int widgetWidth = width();
+    const qreal arrowWidth = ARROW_LENGTH;
+    const qreal arrowHeight = ARROW_HEAD_LENGTH;
+    const qreal arrowX = widgetWidth - arrowWidth - MARGIN_ARROW_RIGHT;
+    const qreal arrowY = yRange.startPos + (qreal)(ui->getRowHeightController()->getSequenceHeight() - arrowHeight) / 2;
+    return QRectF(arrowX, arrowY, arrowWidth, arrowHeight);
+}
+
+int McaEditorNameList::getAvailableWidth() const {
+    return MaEditorNameList::getAvailableWidth() - getIconColumnWidth();
+}
+
+int McaEditorNameList::getMinimumWidgetWidth() const {
+    return 2 * CROSS_SIZE + getIconColumnWidth() + 20;
+}
+
+int McaEditorNameList::getIconColumnWidth() const {
+    static int iconColumnWidth = MARGIN_ARROW_LEFT + ARROW_LENGTH + MARGIN_ARROW_RIGHT;
+    return iconColumnWidth;
+}
+
+void McaEditorNameList::moveSelection(int dy) {
+    MaEditorNameList::moveSelection(dy);
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    seqArea->sl_cancelSelection();
+    updateSelection(nextSequenceToSelect);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorNameList.h b/src/corelibs/U2View/src/ov_msa/McaEditorNameList.h
new file mode 100644
index 0000000..113095e
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorNameList.h
@@ -0,0 +1,82 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_NAME_LIST_H_
+#define _U2_MCA_EDITOR_NAME_LIST_H_
+
+#include "MaEditorNameList.h"
+
+namespace U2 {
+
+class McaEditor;
+class McaEditorWgt;
+
+class U2VIEW_EXPORT McaEditorNameList : public MaEditorNameList {
+    Q_OBJECT
+public:
+    McaEditorNameList(McaEditorWgt* ui, QScrollBar* nhBar);
+
+    U2Region getSelection() const;
+
+protected slots:
+    void sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& oldSelection);
+
+private slots:
+    void sl_clearSelection();
+    void sl_updateActions();
+
+signals:
+    void si_selectionChanged();
+
+protected:
+    void drawCollapsibileSequenceItem(QPainter &painter, int rowIndex, const QString &name, const QRect &rect, bool selected, bool collapsed, bool isReference);
+
+    void setSelection(int startSeq, int count);
+    bool isRowInSelection(int row) const;
+
+private:
+    McaEditor* getEditor() const;
+    bool isRowReversed(int rowIndex) const;
+    void drawText(QPainter &painter, const QString &text, const QRect &rect, bool selected);
+    void drawArrow(QPainter &painter, bool isReversed, const QRectF &arrowRect);
+    QRectF calculateArrowRect(const U2Region &yRange) const;
+    void moveSelection(int dy);
+
+    int getAvailableWidth() const;
+    int getMinimumWidgetWidth() const;
+
+    int getIconColumnWidth() const;
+
+    U2Region localSelection;
+
+    static const int MARGIN_ARROW_LEFT;
+    static const int MARGIN_ARROW_RIGHT;
+    static const qreal ARROW_LINE_WIDTH;
+    static const qreal ARROW_LENGTH;
+    static const qreal ARROW_HEAD_WIDTH;
+    static const qreal ARROW_HEAD_LENGTH;
+    static const QColor ARROW_DIRECT_COLOR;
+    static const QColor ARROW_REVERSE_COLOR;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_NAME_LIST_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.cpp
new file mode 100644
index 0000000..31198dc
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.cpp
@@ -0,0 +1,40 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaEditorOverviewArea.h"
+#include "Overview/MaSangerOverview.h"
+
+namespace U2 {
+
+const QString McaEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME  = "mca_overview_area";
+
+McaEditorOverviewArea::McaEditorOverviewArea(MaEditorWgt *ui)
+    : MaEditorOverviewArea(ui, OVERVIEW_AREA_OBJECT_NAME)
+{
+    isWidgetResizable = true;
+
+    sangerOverview = new MaSangerOverview(ui);
+    sangerOverview->setObjectName(OVERVIEW_AREA_OBJECT_NAME + QString("_sanger"));
+
+    addOverview(sangerOverview);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.h b/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.h
new file mode 100644
index 0000000..2ddb30a
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorOverviewArea.h
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_OVERVIEW_AREA_H_
+#define _U2_MCA_EDITOR_OVERVIEW_AREA_H_
+
+#include "Overview/MaEditorOverviewArea.h"
+
+namespace U2 {
+
+class MaSangerOverview;
+class McaEditorWgt;
+
+class McaEditorOverviewArea : public MaEditorOverviewArea {
+    Q_OBJECT
+public:
+    McaEditorOverviewArea(MaEditorWgt* ui);
+
+    static const QString OVERVIEW_AREA_OBJECT_NAME;
+
+private:
+    MaSangerOverview*  sangerOverview;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_OVERVIEW_AREA_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.cpp
new file mode 100644
index 0000000..b35d03b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.cpp
@@ -0,0 +1,369 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/SignalBlocker.h>
+#include <U2Core/U2Region.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/SequenceObjectContext.h>
+
+#include "McaEditor.h"
+#include "McaEditorConsensusArea.h"
+#include "McaEditorReferenceArea.h"
+#include "McaEditorSequenceArea.h"
+#include "MSAEditorConsensusArea.h"
+#include "helpers/DrawHelper.h"
+#include "helpers/ScrollController.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+
+#include <QApplication>
+
+namespace U2 {
+
+McaEditorReferenceArea::McaEditorReferenceArea(McaEditorWgt *ui, SequenceObjectContext *ctx)
+    : PanView(ui, ctx, McaEditorReferenceRenderAreaFactory(ui, NULL != ui ? ui->getEditor() : NULL)),
+    editor(NULL != ui ? ui->getEditor() : NULL),
+    ui(ui),
+    renderer(dynamic_cast<McaReferenceAreaRenderer *>(getRenderArea()->getRenderer())),
+    lastMouseReleasePos(-1),
+    selectionCountFromStartPos(1),
+    expandToTheRight(true)
+{
+    SAFE_POINT(NULL != renderer, "Renderer is NULL", );
+
+    setObjectName("mca_editor_reference_area");
+    singleBaseSelection = true;
+    setLocalToolbarVisible(false);
+    isShiftPressed = false;
+    settings->showMainRuler = false;
+
+    scrollBar->hide();
+    rowBar->hide();
+
+    connect(ui->getEditor()->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+            SLOT(completeUpdate()));
+
+    connect(ui->getScrollController(), SIGNAL(si_visibleAreaChanged()), SLOT(sl_visibleRangeChanged()));
+    connect(ctx->getSequenceSelection(),
+        SIGNAL(si_selectionChanged(LRegionsSelection*, const QVector<U2Region>&, const QVector<U2Region>&)),
+        SLOT(sl_onSelectionChanged(LRegionsSelection*, const QVector<U2Region>&, const QVector<U2Region>&)));
+
+    connect(this, SIGNAL(si_selectionChanged()),
+            ui->getSequenceArea(), SLOT(sl_backgroundSelectionChanged()));
+    connect(editor, SIGNAL(si_fontChanged(const QFont &)), SLOT(sl_fontChanged(const QFont &)));
+
+    connect(ui->getConsensusArea(), SIGNAL(si_mismatchRedrawRequired()), SLOT(completeUpdate()));
+    connect(scrollBar, SIGNAL(valueChanged(int)), ui->getScrollController()->getHorizontalScrollBar(), SLOT(setValue(int)));
+    connect(ui->getScrollController()->getHorizontalScrollBar(), SIGNAL(valueChanged(int)), scrollBar, SLOT(setValue(int)));
+
+    connectSignalsAndSlots();
+
+    sl_fontChanged(editor->getFont());
+}
+
+void McaEditorReferenceArea::sl_selectMismatch(int pos) {
+    MaEditorSequenceArea* seqArea = ui->getSequenceArea();
+    if (seqArea->getFirstVisibleBase() > pos || seqArea->getLastVisibleBase(false) < pos) {
+        seqArea->centerPos(pos);
+    }
+    seqArea->sl_cancelSelection();
+    setSelection(U2Region(pos, 1));
+}
+
+void McaEditorReferenceArea::sl_visibleRangeChanged() {
+    const U2Region visibleRange = ui->getDrawHelper()->getVisibleBases(ui->getSequenceArea()->width());
+    setVisibleRange(visibleRange);
+    update();
+}
+
+void McaEditorReferenceArea::sl_selectionChanged(const MaEditorSelection &current, const MaEditorSelection &) {
+    U2Region selection(current.x(), current.width());
+    setSelection(selection);
+}
+
+void McaEditorReferenceArea::sl_clearSelection() {
+    ctx->getSequenceSelection()->clear();
+    lastMouseReleasePos = -1;
+}
+
+void McaEditorReferenceArea::sl_fontChanged(const QFont &newFont) {
+    renderer->setFont(newFont);
+    setFixedHeight(renderer->getMinimumHeight());
+}
+
+void McaEditorReferenceArea::mousePressEvent(QMouseEvent* e) {
+    Qt::KeyboardModifiers km = QApplication::keyboardModifiers();
+    isShiftPressed = km.testFlag(Qt::ShiftModifier);
+    bool accept = false;
+    if (e->button() == Qt::LeftButton) {
+        if (isShiftPressed) {
+            setReferenceSelection(e);
+            accept = true;
+        } else {
+            selectionCountFromStartPos = 1;
+        }
+        int value = lastMouseReleasePos;
+        disconnect(connectionUiClearSelection);
+        disconnect(connectionSequenceClearSelection);
+        disconnect(connectionSequenceChangeSelection);
+        emit ui->si_clearSelection();
+        connectSignalsAndSlots();
+
+        lastMouseReleasePos = value;
+    }
+
+    if (accept) {
+        e->accept();
+    } else {
+        PanView::mousePressEvent(e);
+    }
+}
+
+void McaEditorReferenceArea::mouseMoveEvent(QMouseEvent* e) {
+    if (isShiftPressed) {
+        setReferenceSelection(e);
+    } else {
+        QPoint areaPoint = toRenderAreaPoint(e->pos());
+        qint64 pos = renderArea->coordToPos(areaPoint);
+        qint64 selStart = qMin(lastPressPos, pos);
+        qint64 selLen = qAbs(pos - lastPressPos) + 1;
+        setSelection(U2Region(selStart, selLen));
+    }
+
+    e->accept();
+}
+
+void McaEditorReferenceArea::mouseReleaseEvent(QMouseEvent* e) {
+    bool accept = false;
+    if (e->button() == Qt::LeftButton){
+        if (isShiftPressed) {
+            expandToTheRight = true;
+            setReferenceSelection(e);
+            QVector<U2Region> regions = ctx->getSequenceSelection()->getSelectedRegions();
+            if (!regions.isEmpty()) {
+                if (lastMouseReleasePos == -1) {
+                    lastMouseReleasePos = regions.first().startPos;
+                }
+                selectionCountFromStartPos = regions.first().length;
+            }
+            accept = true;
+        } else {
+            lastMouseReleasePos = lastPressPos;
+        }
+    }
+
+    if (accept) {
+        e->accept();
+    } else {
+        PanView::mouseReleaseEvent(e);
+    }
+}
+
+void McaEditorReferenceArea::keyPressEvent(QKeyEvent *event) {
+    const int key = event->key();
+    bool accepted = false;
+    DNASequenceSelection * const selection = ctx->getSequenceSelection();
+    U2Region selectedRegion = (NULL != selection && !selection->isEmpty() ? selection->getSelectedRegions().first() : U2Region());
+    Qt::KeyboardModifiers km = QApplication::keyboardModifiers();
+    bool isShiftPressed = km.testFlag(Qt::ShiftModifier);
+
+    switch(key) {
+    case Qt::Key_Left:
+        if (!selectedRegion.isEmpty() && selectedRegion.startPos > 0) {
+            if (isShiftPressed) {
+                if (expandToTheRight) {
+                    selectionCountFromStartPos = (selectionCountFromStartPos - 1) != 0 ? (selectionCountFromStartPos - 1) : -1;
+                    if (selectionCountFromStartPos > 0) {
+                        selectedRegion.length--;
+                    } else {
+                        selectedRegion.startPos--;
+                        selectedRegion.length++;
+                    }
+                } else {
+                    selectionCountFromStartPos = (selectionCountFromStartPos + 1) != 0 ? (selectionCountFromStartPos + 1) : 1;
+                    if (selectionCountFromStartPos > 0) {
+                        selectedRegion.startPos--;
+                        selectedRegion.length++;
+                    } else {
+                        selectedRegion.length--;
+                    }
+                }
+            } else {
+                selectedRegion.startPos--;
+            }
+            ctx->getSequenceSelection()->setSelectedRegions(QVector<U2Region>() << selectedRegion);
+            ui->getScrollController()->scrollToBase(selectedRegion.startPos, width());
+        }
+        accepted = true;
+        break;
+    case Qt::Key_Up:
+        accepted = true;
+        break;
+    case Qt::Key_Right:
+        if (!selectedRegion.isEmpty() && selectedRegion.endPos() < ctx->getSequenceLength()) {
+            if (isShiftPressed) {
+                expandToTheRight = selectionCountFromStartPos == 1 ? true : expandToTheRight;
+                if (expandToTheRight) {
+                    selectionCountFromStartPos++;
+                    if (selectionCountFromStartPos <= 0) {
+                        selectedRegion.startPos++;
+                        selectedRegion.length--;
+                    } else{
+                        selectedRegion.length = (selectionCountFromStartPos == 1 ? selectionCountFromStartPos += 1 : selectionCountFromStartPos);
+                    }
+                } else {
+                    selectionCountFromStartPos = (selectionCountFromStartPos - 1) != 0 ? (selectionCountFromStartPos - 1) : -1;
+                    if (selectionCountFromStartPos > 0) {
+                        selectedRegion.startPos++;
+                        selectedRegion.length--;
+                    } else {
+                        selectedRegion.length = qAbs(selectionCountFromStartPos == -1 ? selectionCountFromStartPos += 1 : selectionCountFromStartPos);
+                    }
+                }
+            } else {
+                selectedRegion.startPos++;
+            }
+            ctx->getSequenceSelection()->setSelectedRegions(QVector<U2Region>() << selectedRegion);
+            ui->getScrollController()->scrollToBase(selectedRegion.endPos() - 1, width());
+        }
+        accepted = true;
+        break;
+    case Qt::Key_Down:
+        accepted = true;
+        break;
+    case Qt::Key_Home:
+        ui->getScrollController()->scrollToEnd(ScrollController::Left);
+        accepted = true;
+        break;
+    case Qt::Key_End:
+        ui->getScrollController()->scrollToEnd(ScrollController::Right);
+        accepted = true;
+        break;
+    case Qt::Key_PageUp:
+        ui->getScrollController()->scrollPage(ScrollController::Left);
+        accepted = true;
+        break;
+    case Qt::Key_PageDown:
+        ui->getScrollController()->scrollPage(ScrollController::Right);
+        accepted = true;
+        break;
+    }
+
+
+    if (accepted) {
+        event->accept();
+    } else {
+        PanView::keyPressEvent(event);
+    }
+}
+
+void McaEditorReferenceArea::setReferenceSelection(QMouseEvent* e) {
+    QPoint p = e->pos();
+    QPoint areaPoint = toRenderAreaPoint(p);
+    qint64 pos = renderArea->coordToPos(areaPoint);
+    qint64 start = 0;
+    qint64 count = 0;
+    if (lastMouseReleasePos != -1) {
+        start = qMin(pos, lastMouseReleasePos);
+        count = qAbs(pos - lastMouseReleasePos) + 1;
+        expandToTheRight = pos >= lastMouseReleasePos;
+    } else {
+        start = pos;
+        count = 1;
+    }
+    U2Region reg(start, count);
+    setSelection(reg);
+}
+
+void McaEditorReferenceArea::updateScrollBar() {
+    SignalBlocker signalBlocker(scrollBar);
+    Q_UNUSED(signalBlocker);
+
+    const QScrollBar * const hScrollbar = ui->getScrollController()->getHorizontalScrollBar();
+
+    scrollBar->setMinimum(hScrollbar->minimum());
+    scrollBar->setMaximum(hScrollbar->maximum());
+    scrollBar->setSliderPosition(hScrollbar->value());
+    scrollBar->setSingleStep(hScrollbar->singleStep());
+    scrollBar->setPageStep(hScrollbar->pageStep());
+}
+
+void McaEditorReferenceArea::connectSignalsAndSlots() {
+    connectionUiClearSelection = connect(ui, SIGNAL(si_clearSelection()), SLOT(sl_clearSelection()));
+    connectionSequenceClearSelection = connect(ui->getSequenceArea(), SIGNAL(si_clearReferenceSelection()),
+        SLOT(sl_clearSelection()));
+    connectionSequenceChangeSelection = connect(ui->getSequenceArea(), SIGNAL(si_selectionChanged(MaEditorSelection, MaEditorSelection)),
+        SLOT(sl_selectionChanged(MaEditorSelection, MaEditorSelection)));
+}
+
+void McaEditorReferenceArea::sl_onSelectionChanged(LRegionsSelection * /*selection*/, const QVector<U2Region> &addedRegions, const QVector<U2Region> &removedRegions) {
+    if (addedRegions.size() == 1) {
+        const U2Region addedRegion = addedRegions.first();
+        qint64 baseToScrollTo = -1;
+        if (removedRegions.size() == 1) {
+            if (removedRegions.first() == addedRegions.first()) {
+                int hSchrollValue = ui->getScrollController()->getHorizontalScrollBar()->value();
+                ui->getScrollController()->setHScrollbarValue(hSchrollValue);
+            } else {
+                const U2Region removedRegion = removedRegions.first();
+                if (addedRegion.startPos == removedRegion.startPos || addedRegion.startPos == removedRegion.endPos() - 1) {
+                    baseToScrollTo = addedRegion.endPos() - 1;
+                } else {
+                    baseToScrollTo = addedRegion.startPos;
+                }
+            }
+        } else {
+            baseToScrollTo = addedRegion.startPos;
+        }
+        if (baseToScrollTo != -1) {
+            ui->getScrollController()->scrollToBase(static_cast<int>(baseToScrollTo), width());
+        }
+    }
+    emit si_selectionChanged();
+}
+
+McaEditorReferenceRenderArea::McaEditorReferenceRenderArea(McaEditorWgt *_ui, PanView *d, PanViewRenderer *renderer)
+    : PanViewRenderArea(d, renderer),
+    ui(_ui) {
+}
+
+qint64 McaEditorReferenceRenderArea::coordToPos(int x) const {
+    qint64 res = 0;
+    if (ui != NULL) {
+        res = qBound(0, ui->getBaseWidthController()->screenXPositionToColumn(x), ui->getEditor()->getAlignmentLen());
+    }
+    return res;
+}
+
+McaEditorReferenceRenderAreaFactory::McaEditorReferenceRenderAreaFactory(McaEditorWgt *_ui, McaEditor *_editor)
+    : PanViewRenderAreaFactory(),
+    ui(_ui),
+    maEditor(_editor) {
+
+}
+
+PanViewRenderArea * McaEditorReferenceRenderAreaFactory::createRenderArea(PanView *panView) const {
+    return new McaEditorReferenceRenderArea(ui, panView, new McaReferenceAreaRenderer(panView, panView->getSequenceContext(), maEditor));
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.h b/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.h
new file mode 100644
index 0000000..0889560
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorReferenceArea.h
@@ -0,0 +1,96 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_REFERENCE_VIEW_H_
+#define _U2_MCA_EDITOR_REFERENCE_VIEW_H_
+
+#include <U2View/PanView.h>
+
+#include "view_rendering/MaEditorSelection.h"
+#include "view_rendering/McaReferenceAreaRenderer.h"
+
+namespace U2 {
+
+class McaEditor;
+class McaEditorWgt;
+
+class U2VIEW_EXPORT McaEditorReferenceArea : public PanView {
+    Q_OBJECT
+public:
+    McaEditorReferenceArea(McaEditorWgt* ui, SequenceObjectContext* ctx);
+
+signals:
+    void si_selectionChanged();
+
+public slots:
+    void sl_selectMismatch(int pos);
+
+private slots:
+    void sl_visibleRangeChanged();
+    void sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev);
+    void sl_onSelectionChanged(LRegionsSelection *selection, const QVector<U2Region> &addedRegions, const QVector<U2Region> &removedRegions);
+    void sl_clearSelection();
+    void sl_fontChanged(const QFont &newFont);
+
+private:
+    void setReferenceSelection(QMouseEvent* e);
+    void connectSignalsAndSlots();
+    void mousePressEvent(QMouseEvent* e);
+    void mouseMoveEvent(QMouseEvent* e);
+    void mouseReleaseEvent(QMouseEvent* e);
+    void keyPressEvent(QKeyEvent *event);
+    void updateScrollBar();
+
+    McaEditor* editor;
+    McaEditorWgt* ui;
+    McaReferenceAreaRenderer *renderer;
+    QMetaObject::Connection connectionUiClearSelection;
+    QMetaObject::Connection connectionSequenceClearSelection;
+    QMetaObject::Connection connectionSequenceChangeSelection;
+    qint64 lastMouseReleasePos;
+    qint64 selectionCountFromStartPos;
+    bool isShiftPressed;
+    bool expandToTheRight;
+};
+
+class McaEditorReferenceRenderArea : public PanViewRenderArea {
+public:
+    McaEditorReferenceRenderArea(McaEditorWgt* _ui, PanView *d, PanViewRenderer *renderer);
+
+    virtual qint64 coordToPos(int x) const;
+private:
+    McaEditorWgt* ui;
+};
+
+class McaEditorReferenceRenderAreaFactory : public PanViewRenderAreaFactory {
+public:
+    McaEditorReferenceRenderAreaFactory(McaEditorWgt *_ui, McaEditor *_editor);
+
+    PanViewRenderArea *createRenderArea(PanView *panView) const;
+
+private:
+    McaEditorWgt *ui;
+    MaEditor *maEditor;
+};
+
+} // namespace U2
+
+#endif // _U2_MCA_EDITOR_REFERENCE_VIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.cpp
new file mode 100644
index 0000000..6a90c2b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.cpp
@@ -0,0 +1,468 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QToolButton>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/U2Mod.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include "McaEditorSequenceArea.h"
+#include "helpers/MaAmbiguousCharactersController.h"
+#include "helpers/ScrollController.h"
+#include "helpers/RowHeightController.h"
+#include "ov_msa/McaEditorConsensusArea.h"
+#include "ov_sequence/SequenceObjectContext.h"
+#include "view_rendering/SequenceWithChromatogramAreaRenderer.h"
+
+namespace U2 {
+
+McaEditorSequenceArea::McaEditorSequenceArea(McaEditorWgt *ui, GScrollBar *hb, GScrollBar *vb)
+    : MaEditorSequenceArea(ui, hb, vb) {
+    initRenderer();
+
+    setObjectName("mca_editor_sequence_area");
+    connect(ui, SIGNAL(si_clearSelection()), SLOT(sl_cancelSelection()));
+
+    // TEST - remove the variable after fix
+    editingEnabled = true;
+
+    showQVAction = new QAction(tr("Show quality bars"), this);
+    showQVAction->setIcon(QIcon(":chroma_view/images/bars.png"));
+    showQVAction->setCheckable(true);
+    // SANGER_TODO: check quality
+//    showQVAction->setChecked(chroma.hasQV);
+//    showQVAction->setEnabled(chroma.hasQV);
+    connect(showQVAction, SIGNAL(toggled(bool)), SLOT(sl_completeUpdate()));
+
+    showAllTraces = new QAction(tr("Show all"), this);
+    connect(showAllTraces, SIGNAL(triggered()), SLOT(sl_showAllTraces()));
+    connect(editor, SIGNAL(si_buildStaticToolbar(GObjectView *, QToolBar *)), SLOT(sl_buildStaticToolbar(GObjectView *, QToolBar *)));
+
+    traceActionsMenu = new QMenu(tr("Show/hide trace"), this);
+    traceActionsMenu->setObjectName("traceActionsMenu");
+    traceActionsMenu->addAction( createToggleTraceAction("A") );
+    traceActionsMenu->addAction( createToggleTraceAction("C") );
+    traceActionsMenu->addAction( createToggleTraceAction("G") );
+    traceActionsMenu->addAction( createToggleTraceAction("T") ) ;
+    traceActionsMenu->addSeparator();
+    traceActionsMenu->addAction(showAllTraces);
+
+    insertAction = new QAction(tr("Insert character/gap"), this);
+    insertAction->setShortcut(Qt::SHIFT + Qt::Key_I);
+    connect(insertAction, SIGNAL(triggered()), SLOT(sl_addInsertion()));
+    addAction(insertAction);
+
+    replaceCharacterAction->setText(tr("Replace character/gap"));
+
+    removeGapBeforeSelectionAction = new QAction(tr("Remove gap at the left"), this);
+    removeGapBeforeSelectionAction->setShortcut(Qt::Key_Backspace);
+    connect(removeGapBeforeSelectionAction, SIGNAL(triggered()), SLOT(sl_removeGapBeforeSelection()));
+    addAction(removeGapBeforeSelectionAction);
+
+    removeColumnsOfGapsAction = new QAction(tr("Remove all columns of gaps"), this);
+    removeColumnsOfGapsAction->setObjectName("remove_columns_of_gaps");
+    removeColumnsOfGapsAction->setShortcut(Qt::SHIFT + Qt::Key_Delete);
+    connect(removeColumnsOfGapsAction, SIGNAL(triggered()), SLOT(sl_removeColumnsOfGaps()));
+    addAction(removeColumnsOfGapsAction);
+
+    trimLeftEndAction = new QAction(tr("Trim left end"), this);
+    trimLeftEndAction->setObjectName("trim_left_end");
+    trimLeftEndAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Backspace));
+    connect(trimLeftEndAction, SIGNAL(triggered()), SLOT(sl_trimLeftEnd()));
+    addAction(trimLeftEndAction);
+
+    trimRightEndAction = new QAction(tr("Trim right end"), this);
+    trimRightEndAction->setObjectName("trim_right_end");
+    trimRightEndAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Delete));
+    connect(trimRightEndAction, SIGNAL(triggered()), SLOT(sl_trimRightEnd()));
+    addAction(trimRightEndAction);
+
+    fillWithGapsinsSymAction->setText(tr("Insert gap"));
+    fillWithGapsinsSymAction->setShortcut(Qt::Key_Space);
+    fillWithGapsinsSymAction->setShortcutContext(Qt::WidgetShortcut);
+
+    scaleBar = new ScaleBar(Qt::Horizontal);
+    scaleBar->setRange(100, 1000);
+    scaleBar->setTickInterval(100);
+    scaleBar->setObjectName("peak_height_slider");
+
+    scaleBar->getPlusAction()->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Up));
+    addAction(scaleBar->getPlusAction());
+    GUIUtils::updateButtonToolTip(scaleBar->getPlusButton(), scaleBar->getPlusAction()->shortcut());
+
+    scaleBar->getMinusAction()->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Down));
+    addAction(scaleBar->getMinusAction());
+    GUIUtils::updateButtonToolTip(scaleBar->getMinusButton(), scaleBar->getMinusAction()->shortcut());
+
+    scaleAction = NULL;
+
+    ambiguousCharactersController = new MaAmbiguousCharactersController(ui);
+    addAction(ambiguousCharactersController->getPreviousAction());
+    addAction(ambiguousCharactersController->getNextAction());
+
+    SequenceWithChromatogramAreaRenderer* r = qobject_cast<SequenceWithChromatogramAreaRenderer*>(renderer);
+    scaleBar->setValue(r->getScaleBarValue());
+    connect(scaleBar, SIGNAL(valueChanged(int)), SLOT(sl_setRenderAreaHeight(int)));
+
+    updateColorAndHighlightSchemes();
+    sl_updateActions();
+}
+
+void McaEditorSequenceArea::adjustReferenceLength(U2OpStatus& os) {
+    McaEditor* mcaEditor = getEditor();
+    qint64 newLength = mcaEditor->getMaObject()->getLength();
+    qint64 currentLength = mcaEditor->getReferenceContext()->getSequenceLength();
+    if (newLength > currentLength) {
+        U2DataId id = mcaEditor->getMaObject()->getEntityRef().entityId;
+        U2Region region(currentLength, 0);
+        QByteArray insert(newLength - currentLength, U2Msa::GAP_CHAR);
+        DNASequence seq(insert);
+        mcaEditor->getReferenceContext()->getSequenceObject()->replaceRegion(id, region, seq, os);
+    }
+}
+
+const MaAmbiguousCharactersController * const McaEditorSequenceArea::getAmbiguousCharactersController() const {
+    return ambiguousCharactersController;
+}
+
+QMenu *McaEditorSequenceArea::getTraceActionsMenu() const {
+    return traceActionsMenu;
+}
+
+QAction *McaEditorSequenceArea::getIncreasePeaksHeightAction() const {
+    return scaleBar->getPlusAction();
+}
+
+QAction *McaEditorSequenceArea::getDecreasePeaksHeightAction() const {
+    return scaleBar->getMinusAction();
+}
+
+QAction *McaEditorSequenceArea::getInsertAction() const {
+    return insertAction;
+}
+
+QAction *McaEditorSequenceArea::getInsertGapAction() const {
+    return fillWithGapsinsSymAction;
+}
+
+QAction *McaEditorSequenceArea::getRemoveGapBeforeSelectionAction() const {
+    return removeGapBeforeSelectionAction;
+}
+
+QAction *McaEditorSequenceArea::getRemoveColumnsOfGapsAction() const {
+    return removeColumnsOfGapsAction;
+}
+
+QAction *McaEditorSequenceArea::getTrimLeftEndAction() const {
+    return trimLeftEndAction;
+}
+
+QAction *McaEditorSequenceArea::getTrimRightEndAction() const {
+    return trimRightEndAction;
+}
+
+void McaEditorSequenceArea::setSelection(const MaEditorSelection &sel, bool newHighlightSelection) {
+    if (sel.height() > 1 || sel.width() > 1) {
+        // ignore multi-selection
+        return;
+    }
+
+    if (getEditor()->getMaObject()->getMca()->isTrailingOrLeadingGap(sel.y(), sel.x())) {
+        // clear selection
+        emit si_clearReferenceSelection();
+        MaEditorSequenceArea::setSelection(MaEditorSelection(), newHighlightSelection);
+        return;
+    }
+    MaEditorSequenceArea::setSelection(sel, newHighlightSelection);
+}
+
+void McaEditorSequenceArea::moveSelection(int dx, int dy, bool) {
+    CHECK(selection.width() == 1 && selection.height() == 1, );
+
+    const MultipleChromatogramAlignment mca = getEditor()->getMaObject()->getMca();
+    if (dy == 0 && mca->isTrailingOrLeadingGap(selection.y(), selection.x() + dx)) {
+        return;
+    }
+
+    int nextRowToSelect = selection.y() + dy;
+    if (dy != 0) {
+        bool noRowAvailabe = true;
+        for ( ; nextRowToSelect >= 0 && nextRowToSelect < ui->getCollapseModel()->getDisplayableRowsCount(); nextRowToSelect += dy) {
+            if (!mca->isTrailingOrLeadingGap(ui->getCollapseModel()->mapToRow(nextRowToSelect), selection.x() + dx)) {
+                noRowAvailabe  = false;
+                break;
+            }
+        }
+        CHECK(!noRowAvailabe, );
+    }
+
+    QPoint newSelectedPoint(selection.x() + dx, nextRowToSelect);
+    MaEditorSelection newSelection(newSelectedPoint, selection.width(), selection.height());
+    setSelection(newSelection);
+    ui->getScrollController()->scrollToMovedSelection(dx, dy);
+}
+
+void McaEditorSequenceArea::sl_backgroundSelectionChanged() {
+    update();
+}
+
+void McaEditorSequenceArea::sl_showHideTrace() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Selection of a 'Show / hide trace' item", editor->getFactoryId());
+    QAction* traceAction = qobject_cast<QAction*> (sender());
+
+    if (!traceAction) {
+        return;
+    }
+
+    if (traceAction->text() == "A") {
+        settings.drawTraceA = traceAction->isChecked();
+    } else if (traceAction->text() == "C") {
+        settings.drawTraceC = traceAction->isChecked();
+    } else if(traceAction->text() == "G") {
+        settings.drawTraceG = traceAction->isChecked();
+    } else if(traceAction->text() == "T") {
+        settings.drawTraceT = traceAction->isChecked();
+    } else {
+        assert(0);
+    }
+
+    sl_completeUpdate();
+}
+
+void McaEditorSequenceArea::sl_showAllTraces() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Selection of a 'Show / hide trace' item", editor->getFactoryId());
+    settings.drawTraceA = true;
+    settings.drawTraceC = true;
+    settings.drawTraceG = true;
+    settings.drawTraceT = true;
+    QList<QAction*> actions = traceActionsMenu->actions();
+    foreach(QAction* action, actions) {
+        action->setChecked(true);
+    }
+    sl_completeUpdate();
+}
+
+void McaEditorSequenceArea::sl_setRenderAreaHeight(int k) {
+    //k = chromaMax
+    SequenceWithChromatogramAreaRenderer* r = qobject_cast<SequenceWithChromatogramAreaRenderer*>(renderer);
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, r->getAreaHeight() < k, "Increase peaks height", editor->getFactoryId());
+    GRUNTIME_NAMED_CONDITION_COUNTER(ccvar, ttvar, r->getAreaHeight() > k, "Decrease peaks height", editor->getFactoryId());
+    r->setAreaHeight(k);
+    sl_completeUpdate();
+}
+
+void McaEditorSequenceArea::sl_buildStaticToolbar(GObjectView *v, QToolBar *t) {
+    if (scaleAction != NULL) {
+        t->addAction(scaleAction);
+    } else {
+        scaleAction = t->addWidget(scaleBar);
+    }
+
+    t->addSeparator();
+    t->addAction(ambiguousCharactersController->getPreviousAction());
+    t->addAction(ambiguousCharactersController->getNextAction());
+    McaEditorConsensusArea* consensusArea = getEditor()->getUI()->getConsensusArea();
+    consensusArea->buildStaticToolbar(t);
+
+    t->addSeparator();
+    t->addAction(ui->getUndoAction());
+    t->addAction(ui->getRedoAction());
+}
+
+void McaEditorSequenceArea::sl_addInsertion() {
+    maMode = InsertCharMode;
+    editModeAnimationTimer.start(500);
+    highlightCurrentSelection();
+    sl_updateActions();
+}
+
+void McaEditorSequenceArea::sl_removeGapBeforeSelection() {
+    GCOUNTER(cvar, tvar, "Remove gap at the left");
+    emit si_startMaChanging();
+    removeGapsPrecedingSelection(1);
+    emit si_stopMaChanging(true);
+}
+
+void McaEditorSequenceArea::sl_removeColumnsOfGaps() {
+    GCOUNTER(cvar, tvar, "Remove all columns of gaps");
+    U2OpStatus2Log os;
+    U2UseCommonUserModStep userModStep(editor->getMaObject()->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+    editor->getMaObject()->deleteColumnsWithGaps(os);
+}
+
+void McaEditorSequenceArea::sl_trimLeftEnd() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Trim left end", editor->getFactoryId());
+    trimRowEnd(MultipleChromatogramAlignmentObject::Left);
+}
+
+void McaEditorSequenceArea::sl_trimRightEnd() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Trim right end", editor->getFactoryId());
+    trimRowEnd(MultipleChromatogramAlignmentObject::Right);
+}
+
+void McaEditorSequenceArea::sl_updateActions() {
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    SAFE_POINT(NULL != maObj, "MaObj is NULL", );
+
+    const bool readOnly = maObj->isStateLocked();
+    const bool canEditAlignment = !readOnly && !isAlignmentEmpty();
+    const bool canEditSelectedArea = canEditAlignment && !selection.isNull();
+    const bool isEditing = (maMode != ViewMode);
+    const bool isSingleSymbolSelected = (selection.getRect().size() == QSize(1, 1));
+    const bool hasGapBeforeSelection = (!selection.isEmpty() && selection.x() > 0 && maObj->getMultipleAlignment()->isGap(selection.y(), selection.x() - 1));
+
+    ui->getDelSelectionAction()->setEnabled(canEditSelectedArea);
+    updateTrimActions(canEditSelectedArea);
+    insertAction->setEnabled(canEditSelectedArea && isSingleSymbolSelected && !isEditing);
+    replaceCharacterAction->setEnabled(canEditSelectedArea && isSingleSymbolSelected && !isEditing);
+    fillWithGapsinsSymAction->setEnabled(canEditSelectedArea && isSingleSymbolSelected && !isEditing);
+    removeGapBeforeSelectionAction->setEnabled(hasGapBeforeSelection && !isEditing && canEditAlignment);
+    removeColumnsOfGapsAction->setEnabled(canEditAlignment);
+}
+
+void McaEditorSequenceArea::trimRowEnd(MultipleChromatogramAlignmentObject::TrimEdge edge) {
+    MultipleChromatogramAlignmentObject* mcaObj = getEditor()->getMaObject();
+    U2Region reg = getSelectedRows();
+    SAFE_POINT(!reg.isEmpty() && reg.length == 1, "Incorrect selection", )
+    U2OpStatus2Log os;
+    U2UseCommonUserModStep userModStep(mcaObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    SAFE_POINT(!getSelection().isEmpty(), "selection is empty", );
+    int currentPos = getSelection().x();
+
+    mcaObj->trimRow(reg.startPos, currentPos, os, edge);
+    CHECK_OP(os, );
+
+}
+
+void McaEditorSequenceArea::updateTrimActions(bool isEnabled) {
+    trimLeftEndAction->setEnabled(isEnabled);
+    trimRightEndAction->setEnabled(isEnabled);
+
+    CHECK(isEnabled, );
+    CHECK(!getSelection().isEmpty(), );
+
+    U2Region reg = getSelectedRows();
+    MultipleAlignmentRow row = editor->getMaObject()->getRow(reg.startPos);
+    int start = row->getCoreStart();
+    int end = row->getCoreEnd();
+    int currentSelection = getSelection().x();
+    if (start == currentSelection) {
+        trimLeftEndAction->setEnabled(false);
+    }
+    if (end - 1 == currentSelection) {
+        trimRightEndAction->setEnabled(false);
+    }
+}
+
+void McaEditorSequenceArea::initRenderer() {
+    renderer = new SequenceWithChromatogramAreaRenderer(ui, this);
+}
+
+void McaEditorSequenceArea::drawBackground(QPainter &painter) {
+    SequenceWithChromatogramAreaRenderer* r = qobject_cast<SequenceWithChromatogramAreaRenderer*>(renderer);
+    SAFE_POINT(r != NULL, "Wrong renderer: fail to cast renderer to SequenceWithChromatogramAreaRenderer", );
+    r->drawReferenceSelection(painter);
+    r->drawNameListSelection(painter);
+}
+
+void McaEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &hsid) {
+    csid = MsaColorScheme::UGENE_SANGER_NUCL;
+    hsid = MsaHighlightingScheme::DISAGREEMENTS;
+}
+
+QAction* McaEditorSequenceArea::createToggleTraceAction(const QString& actionName) {
+    QAction* showTraceAction = new QAction(actionName, this);
+    showTraceAction->setCheckable(true);
+    showTraceAction->setChecked(true);
+    showTraceAction->setEnabled(true);
+    connect(showTraceAction, SIGNAL(triggered(bool)), SLOT(sl_showHideTrace()));
+
+    return showTraceAction;
+}
+
+void McaEditorSequenceArea::insertChar(char newCharacter) {
+    CHECK(maMode == InsertCharMode, );
+    CHECK(getEditor() != NULL, );
+    CHECK(!selection.isNull(), );
+
+    assert(isInRange(selection.topLeft()));
+    assert(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)));
+
+    MultipleChromatogramAlignmentObject* maObj = getEditor()->getMaObject();
+    CHECK(maObj != NULL && !maObj->isStateLocked(), );
+
+    // if this method was invoked during a region shifting
+    // then shifting should be canceled
+    cancelShiftTracking();
+
+    U2OpStatusImpl os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    int xSelection = selection.x();
+    maObj->changeLength(os, maObj->getLength() + 1);
+    maObj->insertCharacter(selection.y(), xSelection, newCharacter);
+
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, newCharacter == U2Msa::GAP_CHAR, "Insert gap into a new column", editor->getFactoryId());
+    GRUNTIME_NAMED_CONDITION_COUNTER(ccvar, ttvar, newCharacter != U2Msa::GAP_CHAR, "Insert character into a new column", editor->getFactoryId());
+
+    // insert char into the reference
+    U2SequenceObject* ref = getEditor()->getMaObject()->getReferenceObj();
+    U2Region region = U2Region(xSelection, 0);
+    ref->replaceRegion(maObj->getEntityRef().entityId, region, DNASequence(QByteArray(1, U2Msa::GAP_CHAR)), os);
+    SAFE_POINT_OP(os, );
+
+    exitFromEditCharacterMode();
+}
+
+bool McaEditorSequenceArea::isCharacterAcceptable(const QString &text) const {
+    static const QString alphabetCharacters = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED())->getAlphabetChars();
+    static const QRegExp dnaExtendedCharacterOrGap(QString("([%1]| |-|%2)").arg(alphabetCharacters).arg(emDash));
+    return dnaExtendedCharacterOrGap.exactMatch(text);
+}
+
+const QString &McaEditorSequenceArea::getInacceptableCharacterErrorMessage() const {
+    static const QString message = tr("It is not possible to insert the character into the alignment. "
+                                      "Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character ('Space', '-' or '%1').").arg(emDash);
+    return message;
+}
+
+McaEditorWgt *McaEditorSequenceArea::getMcaEditorWgt() const {
+    return qobject_cast<McaEditorWgt *>(ui);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.h b/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.h
new file mode 100644
index 0000000..215f47b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorSequenceArea.h
@@ -0,0 +1,134 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_SEQUENCE_AREA_
+#define _U2_MCA_EDITOR_SEQUENCE_AREA_
+
+#include "view_rendering/MaEditorSequenceArea.h"
+#include "McaEditor.h"
+#include <U2Gui/ScaleBar.h>
+
+namespace U2 {
+
+class MaAmbiguousCharactersController;
+class McaEditor;
+
+class ChromatogramViewSettings {
+public:
+    ChromatogramViewSettings()  {
+        drawTraceA = true;
+        drawTraceC = true;
+        drawTraceG = true;
+        drawTraceT = true;
+    }
+    bool drawTraceA;
+    bool drawTraceC;
+    bool drawTraceG;
+    bool drawTraceT;
+};
+
+class U2VIEW_EXPORT McaEditorSequenceArea : public MaEditorSequenceArea {
+    Q_OBJECT
+public:
+    McaEditorSequenceArea(McaEditorWgt *ui, GScrollBar* hb, GScrollBar* vb);
+
+    McaEditor* getEditor() const { return qobject_cast<McaEditor*>(editor); }
+
+    const ChromatogramViewSettings&  getSettings() const { return settings; }
+    bool getShowQA() const {return showQVAction->isChecked(); }
+
+    void setSelection(const MaEditorSelection& sel, bool newHighlightSelection = false);
+
+    void moveSelection(int dx, int dy, bool allowSelectionResize = false);
+
+    virtual void adjustReferenceLength(U2OpStatus& os);
+
+    const MaAmbiguousCharactersController * const getAmbiguousCharactersController() const;
+
+    QMenu *getTraceActionsMenu() const;
+    QAction *getIncreasePeaksHeightAction() const;
+    QAction *getDecreasePeaksHeightAction() const;
+    QAction *getInsertAction() const;
+    QAction *getInsertGapAction() const;
+    QAction *getRemoveGapBeforeSelectionAction() const;
+    QAction *getRemoveColumnsOfGapsAction() const;
+    QAction *getTrimLeftEndAction() const;
+    QAction *getTrimRightEndAction() const;
+
+signals:
+    void si_clearReferenceSelection();
+
+public slots:
+    void sl_backgroundSelectionChanged();
+
+private slots:
+    void sl_showHideTrace();
+    void sl_showAllTraces();
+    void sl_setRenderAreaHeight(int k);
+
+    void sl_buildStaticToolbar(GObjectView* v, QToolBar* t);
+
+    void sl_addInsertion();
+    void sl_removeGapBeforeSelection();
+    void sl_removeColumnsOfGaps();
+    void sl_trimLeftEnd();
+    void sl_trimRightEnd();
+
+    void sl_updateActions();
+
+private:
+    void initRenderer();
+    void drawBackground(QPainter &p);
+
+    void getColorAndHighlightingIds(QString &csid, QString &hsid);
+
+    QAction* createToggleTraceAction(const QString& actionName);
+
+    void insertChar(char newCharacter);
+    bool isCharacterAcceptable(const QString &text) const;
+    const QString &getInacceptableCharacterErrorMessage() const;
+
+    McaEditorWgt *getMcaEditorWgt() const;
+
+    void trimRowEnd(MultipleChromatogramAlignmentObject::TrimEdge edge);
+
+    void updateTrimActions(bool isEnabled);
+
+    ChromatogramViewSettings    settings;
+    MaAmbiguousCharactersController *ambiguousCharactersController;
+
+    QAction*    showQVAction;
+    QAction*    showAllTraces;
+    QMenu*      traceActionsMenu;
+    ScaleBar*   scaleBar;
+    QAction*    scaleAction;
+
+    QAction*    insertAction;
+    QAction*    removeGapBeforeSelectionAction;
+    QAction*    removeColumnsOfGapsAction;
+    QAction*    trimLeftEndAction;
+    QAction*    trimRightEndAction;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_SEQUENCE_AREA_
+
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.cpp
new file mode 100644
index 0000000..a9a6aa8
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.cpp
@@ -0,0 +1,94 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QHBoxLayout>
+
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/SequenceObjectContext.h>
+
+#include "McaEditor.h"
+#include "McaEditorNameList.h"
+#include "McaEditorReferenceArea.h"
+#include "McaEditorStatusBar.h"
+#include "McaReferenceCharController.h"
+#include "view_rendering/MaEditorSelection.h"
+#include "view_rendering/MaEditorSequenceArea.h"
+
+namespace U2 {
+
+McaEditorStatusBar::McaEditorStatusBar(MultipleAlignmentObject* mobj,
+                                       MaEditorSequenceArea* seqArea,
+                                       McaEditorNameList* nameList,
+                                       McaReferenceCharController* refCharController)
+    : MaEditorStatusBar(mobj, seqArea),
+      refCharController(refCharController),
+      nameList(nameList)
+{
+    setObjectName("mca_editor_status_bar");
+
+    colomnLabel->setPatterns(tr("RefPos %1 / %2"),
+                             tr("Reference position %1 of %2"));
+    positionLabel->setPatterns(tr("ReadPos %1 / %2"),
+                               tr("Read position %1 of %2"));
+    selectionLabel->hide();
+
+    connect(nameList, SIGNAL(si_selectionChanged()), SLOT(sl_update()));
+
+    updateLabels();
+    setupLayout();
+}
+
+void McaEditorStatusBar::setupLayout() {
+    layout->addWidget(lineLabel);
+    layout->addWidget(colomnLabel);
+    layout->addWidget(positionLabel);
+    layout->addWidget(lockLabel);
+}
+
+void McaEditorStatusBar::updateLabels() {
+    updateLineLabel();
+    updatePositionLabel();
+
+    McaEditor* editor = qobject_cast<McaEditor*>(seqArea->getEditor());
+    SAFE_POINT(editor->getReferenceContext() != NULL, "Reference context is NULL", );
+    DNASequenceSelection* selection = editor->getReferenceContext()->getSequenceSelection();
+    SAFE_POINT(selection != NULL, "Reference selection is NULL", );
+
+    QString ungappedRefLen = QString::number(refCharController->getUngappedLength());
+    if (selection->isEmpty()) {
+        colomnLabel->update(MaEditorStatusBar::NONE_MARK, ungappedRefLen);
+    } else {
+        int startSelection = selection->getSelectedRegions().first().startPos;
+        int refPos = refCharController->getUngappedPosition(startSelection);
+        colomnLabel->update(refPos == -1 ? "gap" : QString::number(refPos + 1), ungappedRefLen);
+    }
+}
+
+void McaEditorStatusBar::updateLineLabel() {
+    const U2Region selection = nameList->getSelection();
+    lineLabel->update(selection.isEmpty() ? MaEditorStatusBar::NONE_MARK : QString::number(selection.startPos + 1),
+                      QString::number(aliObj->getNumRows()));
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.h b/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.h
new file mode 100644
index 0000000..a34b801
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorStatusBar.h
@@ -0,0 +1,51 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_STATUS_BAR_H_
+#define _U2_MCA_EDITOR_STATUS_BAR_H_
+
+#include "MaEditorStatusBar.h"
+
+namespace U2 {
+
+class McaEditorNameList;
+class McaReferenceCharController;
+
+class McaEditorStatusBar : public MaEditorStatusBar {
+    Q_OBJECT
+public:
+    McaEditorStatusBar(MultipleAlignmentObject* mobj,
+                       MaEditorSequenceArea *seqArea,
+                       McaEditorNameList *nameList,
+                       McaReferenceCharController* refCharController);
+
+private:
+    void setupLayout();
+    void updateLabels();
+    void updateLineLabel();
+
+    McaReferenceCharController* refCharController;
+    McaEditorNameList *nameList;
+};
+
+} // namespace
+
+#endif // _U2_MCA_EDITOR_STATUS_BAR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorWgt.cpp b/src/corelibs/U2View/src/ov_msa/McaEditorWgt.cpp
new file mode 100644
index 0000000..f41271c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorWgt.cpp
@@ -0,0 +1,178 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
+#include <U2Algorithm/MSAConsensusAlgorithm.h>
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/Settings.h>
+
+#include "MaConsensusMismatchController.h"
+#include "McaEditor.h"
+#include "McaEditorConsensusArea.h"
+#include "McaEditorNameList.h"
+#include "McaEditorOverviewArea.h"
+#include "McaEditorReferenceArea.h"
+#include "McaEditorSequenceArea.h"
+#include "McaEditorStatusBar.h"
+#include "McaEditorWgt.h"
+#include "McaReferenceCharController.h"
+#include "MSACollapsibleModel.h"
+#include "MSAEditorOffsetsView.h"
+#include "helpers/McaRowHeightController.h"
+#include "ov_sequence/SequenceObjectContext.h"
+
+namespace U2 {
+
+#define TOP_INDENT 10
+
+McaEditorWgt::McaEditorWgt(McaEditor *editor)
+    : MaEditorWgt(editor)
+{
+    rowHeightController = new McaRowHeightController(this);
+    refCharController = new McaReferenceCharController(this, editor);
+
+    initActions();
+    initWidgets();
+
+    refArea = new McaEditorReferenceArea(this, getEditor()->getReferenceContext());
+    connect(refArea, SIGNAL(si_selectionChanged()), statusBar, SLOT(sl_update()));
+    seqAreaHeaderLayout->insertWidget(0, refArea);
+
+    MaEditorConsensusAreaSettings consSettings;
+    consSettings.visibleElements = MSAEditorConsElement_CONSENSUS_TEXT | MSAEditorConsElement_RULER;
+    consSettings.highlightMismatches = true;
+    consArea->setDrawSettings(consSettings);
+
+    QString name = getEditor()->getReferenceContext()->getSequenceObject()->getSequenceName();
+    QWidget *refName = createHeaderLabelWidget(tr("Reference %1:").arg(name),
+                                               Qt::Alignment(Qt::AlignRight | Qt::AlignVCenter), refArea);
+    refName->setObjectName("reference label container widget");
+
+    nameAreaLayout->insertWidget(0, refName);
+    nameAreaLayout->setContentsMargins(0, TOP_INDENT, 0, 0);
+
+    QVector<U2Region> itemRegions;
+    for (int i = 0; i < editor->getNumSequences(); i++) {
+        itemRegions << U2Region(i, 1);
+    }
+
+    collapseModel->setTrivialGroupsPolicy(MSACollapsibleItemModel::Allow);
+    collapseModel->reset(itemRegions);
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+    bool showChromatograms = s->getValue(editor->getSettingsRoot() + MCAE_SETTINGS_SHOW_CHROMATOGRAMS, true).toBool();
+    collapseModel->collapseAll(!showChromatograms);
+    collapseModel->setFakeCollapsibleModel(true);
+    collapsibleMode = true;
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, showChromatograms, "'Show chromatograms' is checked on the view opening", editor->getFactoryId());
+    GRUNTIME_NAMED_CONDITION_COUNTER(ccvar, ttvar, !showChromatograms, "'Show chromatograms' is unchecked on the view opening", editor->getFactoryId());
+
+    McaEditorConsensusArea* mcaConsArea = qobject_cast<McaEditorConsensusArea*>(consArea);
+    SAFE_POINT(mcaConsArea != NULL, "Failed to cast consensus area to MCA consensus area", );
+    seqAreaHeaderLayout->setContentsMargins(0, TOP_INDENT, 0, 0);
+    seqAreaHeader->setStyleSheet("background-color: white;");
+    connect(mcaConsArea->getMismatchController(), SIGNAL(si_selectMismatch(int)), refArea, SLOT(sl_selectMismatch(int)));
+    MultipleChromatogramAlignmentObject* mcaObj = editor->getMaObject();
+    connect(mcaObj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)), SLOT(sl_alignmentChanged()));
+}
+
+void McaEditorWgt::sl_alignmentChanged() {
+    int size = editor->getNumSequences();
+    int collapseSize = collapseModel->getItemSize();
+    if (size > collapseSize) {
+        QVector<U2Region> itemRegions;
+        for (int i = 0; i < size; i++) {
+            itemRegions << U2Region(i, 1);
+        }
+        collapseModel->reset(itemRegions);
+        McaEditor* mcaEditor = getEditor();
+        bool isButtonChecked = mcaEditor->isChromatogramButtonChecked();
+        collapseModel->collapseAll(!isButtonChecked);
+    }
+}
+
+McaEditor *McaEditorWgt::getEditor() const {
+    return qobject_cast<McaEditor *>(editor);
+}
+
+McaEditorConsensusArea *McaEditorWgt::getConsensusArea() const {
+    return qobject_cast<McaEditorConsensusArea *>(consArea);
+}
+
+McaEditorNameList *McaEditorWgt::getEditorNameList() const {
+    return qobject_cast<McaEditorNameList *>(nameList);
+}
+
+McaEditorSequenceArea* McaEditorWgt::getSequenceArea() const {
+    return qobject_cast<McaEditorSequenceArea*>(seqArea);
+}
+
+McaReferenceCharController* McaEditorWgt::getRefCharController() const {
+    return refCharController;
+}
+
+QAction *McaEditorWgt::getClearSelectionAction() const {
+    return clearSelectionAction;
+}
+
+QAction* McaEditorWgt::getToogleColumnsAction() const {
+    SAFE_POINT(offsetsView != NULL, "Offset controller is NULL", NULL);
+    return offsetsView->getToggleColumnsViewAction();
+}
+
+void McaEditorWgt::initActions() {
+    MaEditorWgt::initActions();
+
+    clearSelectionAction = new QAction(tr("Clear selection"), this);
+    clearSelectionAction->setShortcut(Qt::Key_Escape);
+    connect(clearSelectionAction, SIGNAL(triggered()), SIGNAL(si_clearSelection()));
+    addAction(clearSelectionAction);
+
+    delSelectionAction->setText(tr("Remove character/gap"));
+}
+
+void McaEditorWgt::initSeqArea(GScrollBar* shBar, GScrollBar* cvBar) {
+    seqArea = new McaEditorSequenceArea(this, shBar, cvBar);
+}
+
+void McaEditorWgt::initOverviewArea() {
+    overviewArea = new McaEditorOverviewArea(this);
+}
+
+void McaEditorWgt::initNameList(QScrollBar* nhBar) {
+    nameList = new McaEditorNameList(this, nhBar);
+}
+
+void McaEditorWgt::initConsensusArea() {
+    consArea = new McaEditorConsensusArea(this);
+}
+
+void McaEditorWgt::initStatusBar() {
+    statusBar = new McaEditorStatusBar(editor->getMaObject(), seqArea, getEditorNameList(), refCharController);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/McaEditorWgt.h b/src/corelibs/U2View/src/ov_msa/McaEditorWgt.h
new file mode 100644
index 0000000..595d8c4
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaEditorWgt.h
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_WGT_H_
+#define _U2_MCA_EDITOR_WGT_H_
+
+#include "view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+class McaEditor;
+class McaEditorConsensusArea;
+class McaEditorNameList;
+class McaEditorReferenceArea;
+class McaEditorSequenceArea;
+class McaReferenceCharController;
+
+class U2VIEW_EXPORT McaEditorWgt : public MaEditorWgt {
+    Q_OBJECT
+public:
+    McaEditorWgt(McaEditor* editor);
+
+    McaEditor* getEditor() const;
+    McaEditorConsensusArea* getConsensusArea() const;
+    McaEditorNameList *getEditorNameList() const;
+    McaEditorSequenceArea* getSequenceArea() const;
+    McaReferenceCharController* getRefCharController() const;
+
+    QAction *getClearSelectionAction() const;
+    QAction *getToogleColumnsAction() const;
+
+signals:
+    void si_clearSelection();
+
+protected:
+    void initActions();
+    void initSeqArea(GScrollBar* shBar, GScrollBar* cvBar);
+    void initOverviewArea();
+    void initNameList(QScrollBar* nhBar);
+    void initConsensusArea();
+    void initStatusBar();
+
+private slots:
+    void sl_alignmentChanged();
+
+private:
+    McaEditorReferenceArea*     refArea;
+    McaReferenceCharController* refCharController;
+
+    QAction *clearSelectionAction;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_WGT_H_
diff --git a/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.cpp b/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.cpp
new file mode 100644
index 0000000..b125401
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.cpp
@@ -0,0 +1,161 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaEditor.h"
+#include "McaReferenceCharController.h"
+
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2View/SequenceObjectContext.h>
+
+namespace U2 {
+
+OffsetRegions::OffsetRegions() {
+
+}
+
+void OffsetRegions::append(const U2Region& region, int offset) {
+    regions.append(region);
+    offsets.append(offset);
+}
+
+int OffsetRegions::findIntersectedRegion(const U2Region& region) const {
+    return region.findIntersectedRegion(regions);
+}
+
+U2Region OffsetRegions::getRegion(int i) const {
+    SAFE_POINT(0 <= i && i < regions.size(), "Index out of range", U2Region());
+    return regions[i];
+}
+
+int OffsetRegions::getOffset(int i) const {
+    SAFE_POINT(0 <= i && i < offsets.size(), "Index out of range", 0);
+    return offsets[i];
+}
+
+int OffsetRegions::getSize() const {
+    SAFE_POINT(regions.size() == offsets.size(), "Invalid state!", 0);
+    return regions.size();
+}
+
+void OffsetRegions::clear() {
+    regions.clear();
+    offsets.clear();
+}
+
+McaReferenceCharController::McaReferenceCharController(QObject* p, McaEditor *editor)
+    : QObject(p),
+      refObject (NULL),
+      ungappedLength(-1) {
+    SequenceObjectContext* ctx = editor->getReferenceContext();
+    SAFE_POINT(ctx != NULL, "SequenceObjectContext is NULL", );
+    refObject = ctx->getSequenceObject();
+    SAFE_POINT(ctx != NULL, "Reference U2SequenceObject is NULL", );
+    initRegions();
+
+    connect(refObject, SIGNAL(si_sequenceChanged()), SLOT(sl_update()));
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+            SLOT(sl_update(MultipleAlignment,MaModificationInfo)));
+}
+
+OffsetRegions McaReferenceCharController::getCharRegions(const U2Region& region) const {
+    int i = charRegions.findIntersectedRegion(region);
+    CHECK(i != -1, OffsetRegions());
+
+    OffsetRegions result;
+    do {
+        result.append(region.intersect(charRegions.getRegion(i)),
+                      charRegions.getOffset(i));
+        if (charRegions.getRegion(i).contains(region.endPos())) {
+            return result;
+        }
+        i++;
+    } while (i < charRegions.getSize());
+    return result;
+}
+
+int McaReferenceCharController::getUngappedPosition(int pos) const {
+    CHECK(charRegions.getSize() != 0, -1);
+
+    int ungappedPos = 0;
+    int i = 0;
+    do {
+        if (charRegions.getRegion(i).contains(pos)) {
+            ungappedPos += pos - charRegions.getRegion(i).startPos;
+            return ungappedPos;
+        }
+        ungappedPos += charRegions.getRegion(i).length;
+        i++;
+    } while (i < charRegions.getSize());
+    return -1;
+}
+
+ int McaReferenceCharController::getUngappedLength() const {
+     return ungappedLength;
+ }
+
+void McaReferenceCharController::sl_update() {
+    initRegions();
+}
+
+void McaReferenceCharController::sl_update(const MultipleAlignment &, const MaModificationInfo &modInfo) {
+    if (modInfo.type == MaModificationType_Undo || modInfo.type == MaModificationType_Redo) {
+        initRegions();
+    }
+}
+
+void McaReferenceCharController::initRegions() {
+    charRegions.clear();
+    SAFE_POINT(refObject != NULL, "MCA reference object is NULL", );
+
+    U2OpStatusImpl os;
+    QByteArray data = refObject->getWholeSequenceData(os);
+
+    SAFE_POINT_OP(os, );
+    U2Region current;
+    int gapCounter = 0;
+    for (int i = 0; i < data.size(); i++) {
+        if (data.at(i) != U2Msa::GAP_CHAR) {
+            if (current.isEmpty()) {
+                // start new region
+                current = U2Region(i, 1);
+            } else {
+                // extend the current
+                current.length++;
+            }
+        } else {
+            if (!current.isEmpty()) {
+                // append the region to resut
+                charRegions.append(current, gapCounter);
+                current = U2Region();
+            }
+            gapCounter++;
+        }
+    }
+    if (!current.isEmpty()) {
+        charRegions.append(current, gapCounter);
+    }
+    ungappedLength = data.size() - gapCounter;
+}
+
+} // namepspace
diff --git a/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.h b/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.h
new file mode 100644
index 0000000..9063369
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/McaReferenceCharController.h
@@ -0,0 +1,77 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_REFERENCE_RULER_CONTROLLER_H_
+#define _U2_MCA_REFERENCE_RULER_CONTROLLER_H_
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class McaEditor;
+class U2SequenceObject;
+
+class MultipleAlignment;
+class MaModificationInfo;
+
+class OffsetRegions {
+public:
+    OffsetRegions();
+
+    void append(const U2Region& region, int offset);
+    int findIntersectedRegion(const U2Region& region) const;
+
+    U2Region getRegion(int i) const;
+    int getOffset(int i) const;
+    int getSize() const;
+
+    void clear();
+
+private:
+    QVector<U2Region>   regions;
+    QVector<int>        offsets;
+};
+
+class McaReferenceCharController : public QObject {
+    Q_OBJECT
+public:
+    McaReferenceCharController(QObject* p, McaEditor* editor);
+
+    OffsetRegions getCharRegions(const U2Region& region) const;
+
+    int getUngappedPosition(int pos) const;
+    int getUngappedLength() const;
+
+public slots:
+    void sl_update();
+    void sl_update(const MultipleAlignment &maBefore, const MaModificationInfo &modInfo);
+
+private:
+    void initRegions();
+
+    OffsetRegions       charRegions;
+    U2SequenceObject*   refObject;
+    int                 ungappedLength;
+};
+
+} // namespace
+
+#endif // _U2_MCA_REFERENCE_RULER_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.cpp
new file mode 100644
index 0000000..7014fea
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.cpp
@@ -0,0 +1,65 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Gui/GUIUtils.h>
+
+#include "MSAEditor.h"
+#include "MsaEditorNameList.h"
+
+namespace U2 {
+
+MsaEditorNameList::MsaEditorNameList(MaEditorWgt *ui, QScrollBar *nhBar)
+    : MaEditorNameList(ui, nhBar)
+{
+    connect(editor, SIGNAL(si_buildPopupMenu(GObjectView *, QMenu *)), SLOT(sl_buildContextMenu(GObjectView *, QMenu *)));
+    connect(editor, SIGNAL(si_buildStaticMenu(GObjectView *, QMenu *)), SLOT(sl_buildStaticMenu(GObjectView *, QMenu *)));
+}
+
+void MsaEditorNameList::sl_buildStaticMenu(GObjectView *, QMenu *menu) {
+    buildMenu(menu);
+}
+
+void MsaEditorNameList::sl_buildContextMenu(GObjectView *, QMenu *menu) {
+    buildMenu(menu);
+}
+
+void MsaEditorNameList::buildMenu(QMenu *menu) {
+    QMenu* editMenu = GUIUtils::findSubMenu(menu, MSAE_MENU_EDIT);
+    SAFE_POINT(editMenu != NULL, "editMenu not found", );
+
+    editMenu->insertAction(editMenu->actions().last(), removeSequenceAction);
+
+    CHECK(qobject_cast<MSAEditor*>(editor) != NULL, );
+    CHECK(rect().contains(mapFromGlobal(QCursor::pos())), );
+
+    QMenu* copyMenu = GUIUtils::findSubMenu(menu, MSAE_MENU_COPY);
+    SAFE_POINT(copyMenu != NULL, "copyMenu not found", );
+    copyMenu->addAction(copyCurrentSequenceAction);
+
+    copyCurrentSequenceAction->setDisabled(getSelectedRow() == -1);
+    editMenu->insertAction(editMenu->actions().first(), editSequenceNameAction);
+}
+
+MSAEditor* MsaEditorNameList::getEditor() const {
+    return qobject_cast<MSAEditor*>(editor);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.h b/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.h
new file mode 100644
index 0000000..f47c793
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorNameList.h
@@ -0,0 +1,46 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EDITOR_NAME_LIST_H_
+#define _U2_MSA_EDITOR_NAME_LIST_H_
+
+#include "MaEditorNameList.h"
+
+namespace U2 {
+
+class MsaEditorNameList : public MaEditorNameList {
+    Q_OBJECT
+public:
+    MsaEditorNameList(MaEditorWgt* ui, QScrollBar* nhBar);
+
+private slots:
+    void sl_buildStaticMenu(GObjectView *view, QMenu *menu);
+    void sl_buildContextMenu(GObjectView *view, QMenu *menu);
+
+private:
+    void buildMenu(QMenu *menu);
+
+    MSAEditor* getEditor() const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_EDITOR_NAME_LIST_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
index d2c1fd6..f2f2949 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,11 @@
 #include "MsaEditorSimilarityColumn.h"
 #include "MSAEditor.h"
 #include "MSAEditorSequenceArea.h"
+#include "view_rendering/MaEditorUtils.h"
 
 #include <U2Core/AppContext.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -42,8 +43,8 @@ const QString MsaEditorAlignmentDependentWidget::DataIsOutdatedMessage(QString("
 const QString MsaEditorAlignmentDependentWidget::DataIsValidMessage(QString("<FONT COLOR=#00FF00>%1</FONT>").arg(QObject::tr("Data is valid")));
 const QString MsaEditorAlignmentDependentWidget::DataIsBeingUpdatedMessage(QString("<FONT COLOR=#0000FF>%1</FONT>").arg(QObject::tr("Data is being updated")));
 
-MsaEditorSimilarityColumn::MsaEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings)
-    : MSAEditorNameList(ui, nhBar),
+MsaEditorSimilarityColumn::MsaEditorSimilarityColumn(MsaEditorWgt* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings)
+    : MaEditorNameList(ui, nhBar),
       matrix(NULL),
       autoUpdate(true)
 {
@@ -62,26 +63,25 @@ QString MsaEditorSimilarityColumn::getTextForRow( int s ) {
         return tr("-");
     }
 
-    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
+    const MultipleAlignment ma = editor->getMaObject()->getMultipleAlignment();
     const qint64 referenceRowId = editor->getReferenceRowId();
-    if(MAlignmentRow::invalidRowId() == referenceRowId) {
+    if(U2MsaRow::INVALID_ROW_ID == referenceRowId) {
         return tr("-");
     }
 
     U2OpStatusImpl os;
-    const int refSequenceIndex = ma.getRowIndexByRowId(referenceRowId, os);
+    const int refSequenceIndex = ma->getRowIndexByRowId(referenceRowId, os);
     CHECK_OP(os, QString());
-
+    
     int sim = matrix->getSimilarity(refSequenceIndex, s);
     CHECK(-1 != sim, tr("-"));
-    const QString units = matrix->areUsePercents() ? "%" : "";
+    const QString units = matrix->isPercentSimilarity() ? "%" : "";
     return QString("%1").arg(sim) + units;
 }
 
 QString MsaEditorSimilarityColumn::getSeqName(int s) {
-    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
-
-    return ma.getRowNames().at(s);
+    const MultipleAlignment ma = editor->getMaObject()->getMultipleAlignment();
+    return ma->getRowNames().at(s);
 }
 
 void MsaEditorSimilarityColumn::updateScrollBar() {
@@ -92,7 +92,6 @@ void MsaEditorSimilarityColumn::setSettings(const UpdatedWidgetSettings* _settin
     const SimilarityStatisticsSettings* set= static_cast<const SimilarityStatisticsSettings*>(_settings);
     CHECK(NULL != set,);
     autoUpdate = set->autoUpdate;
-    state = DataIsValid;
     if(curSettings.algoName != set->algoName) {
         state = DataIsOutdated;
     }
@@ -101,8 +100,8 @@ void MsaEditorSimilarityColumn::setSettings(const UpdatedWidgetSettings* _settin
     }
     if(curSettings.usePercents != set->usePercents) {
         if(NULL != matrix) {
-            matrix->showSimilarityInPercents(set->usePercents);
-            updateContent();
+            matrix->setPercentSimilarity(set->usePercents);
+            sl_completeRedraw();
         }
         curSettings.usePercents = set->usePercents;
     }
@@ -115,6 +114,10 @@ void MsaEditorSimilarityColumn::setSettings(const UpdatedWidgetSettings* _settin
     emit si_dataStateChanged(state);
 }
 
+void MsaEditorSimilarityColumn::cancelPendingTasks() {
+    createDistanceMatrixTaskRunner.cancel();
+}
+
 QString MsaEditorSimilarityColumn::getHeaderText() const {
     return curSettings.usePercents ? "%" : tr("score");
 }
@@ -129,7 +132,7 @@ void MsaEditorSimilarityColumn::updateDistanceMatrix() {
     createDistanceMatrixTaskRunner.run( createDistanceMatrixTask );
 }
 
-void MsaEditorSimilarityColumn::onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&) {
+void MsaEditorSimilarityColumn::onAlignmentChanged(const MultipleSequenceAlignment&, const MaModificationInfo&) {
     if(autoUpdate) {
         state = DataIsBeingUpdated;
         updateDistanceMatrix();
@@ -142,18 +145,23 @@ void MsaEditorSimilarityColumn::onAlignmentChanged(const MAlignment&, const MAli
 
 void MsaEditorSimilarityColumn::sl_createMatrixTaskFinished(Task* t) {
     CreateDistanceMatrixTask* task = qobject_cast<CreateDistanceMatrixTask*> (t);
-    if(NULL != task && !task->hasError() && !task->isCanceled()) {
+    bool finishedSuccessfully = NULL != task && !task->hasError() && !task->isCanceled();
+    if (finishedSuccessfully) {
         if(NULL != matrix) {
             delete matrix;
         }
         matrix = task->getResult();
         if(NULL != matrix) {
-            matrix->showSimilarityInPercents(newSettings.usePercents);
+            matrix->setPercentSimilarity(newSettings.usePercents);
         }
     }
-    updateContent();
-    state = DataIsValid;
-    curSettings = newSettings;
+    sl_completeRedraw();
+    if (finishedSuccessfully) {
+        state = DataIsValid;
+        curSettings = newSettings;
+    } else {
+        state = DataIsOutdated;
+    }
     emit si_dataStateChanged(state);
 }
 
@@ -161,7 +169,7 @@ CreateDistanceMatrixTask::CreateDistanceMatrixTask(const SimilarityStatisticsSet
     : BackgroundTask<MSADistanceMatrix*>(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC),
       s(_s),
       resMatrix(NULL) {
-    SAFE_POINT(NULL != s.ma, QString("Incorrect MAlignment in MsaEditorSimilarityColumnTask ctor!"), );
+    SAFE_POINT(NULL != s.ma, QString("Incorrect MultipleSequenceAlignment in MsaEditorSimilarityColumnTask ctor!"), );
     SAFE_POINT(NULL != s.ui, QString("Incorrect MSAEditorUI in MsaEditorSimilarityColumnTask ctor!"), );
     setVerboseLogMode(true);
 }
@@ -175,8 +183,7 @@ void CreateDistanceMatrixTask::prepare() {
         factory->resetFlag(DistanceAlgorithmFlag_ExcludeGaps);
     }
 
-    MSADistanceAlgorithm* algo = factory->createAlgorithm(s.ma->getMAlignment());
-    //connect(s.ma, SIGNAL(si_rowsAdded()), algo, SLOT(sl_addEmptyDistanceRow()));
+    MSADistanceAlgorithm* algo = factory->createAlgorithm(s.ma->getMultipleAlignment());
     CHECK(NULL != algo,);
     addSubTask(algo);
 }
@@ -187,14 +194,7 @@ QList<Task*> CreateDistanceMatrixTask::onSubTaskFinished(Task* subTask){
         return res;
     }
     MSADistanceAlgorithm* algo = qobject_cast<MSADistanceAlgorithm*>(subTask);
-    MSADistanceMatrix *matrix = new MSADistanceMatrix(algo, s.usePercents && s.excludeGaps);
-    if(NULL != algo) {
-        if(algo->hasError()) {
-            setError(algo->getError());
-            return res;
-        }
-        resMatrix = matrix;
-    }
+    resMatrix = new MSADistanceMatrix(algo->getMatrix());
     return res;
 }
 MsaEditorAlignmentDependentWidget::MsaEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget)
@@ -202,8 +202,8 @@ MsaEditorAlignmentDependentWidget::MsaEditorAlignmentDependentWidget(UpdatedWidg
     SAFE_POINT(NULL != _contentWidget, QString("Argument is NULL in constructor MsaEditorAlignmentDependentWidget()"),);
 
     settings = &contentWidget->getSettings();
-    connect(settings->ma, SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)),
-        this, SLOT(sl_onAlignmentChanged(const MAlignment&, const MAlignmentModInfo&)));
+    connect(settings->ma, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+        this, SLOT(sl_onAlignmentChanged(const MultipleAlignment&, const MaModificationInfo&)));
     connect(dynamic_cast<QObject*>(contentWidget), SIGNAL(si_dataStateChanged(DataState)),
         this, SLOT(sl_onDataStateChanged(DataState)));
     connect(settings->ui->getEditor(), SIGNAL(si_fontChanged(const QFont&)), SLOT(sl_onFontChanged(const QFont&)));
@@ -237,7 +237,7 @@ void MsaEditorAlignmentDependentWidget::createHeaderWidget() {
     headerLayout->addWidget(&nameWidget);
 
     state = DataIsValid;
-    headerWidget = new MSAWidget(settings->ui);
+    headerWidget = new MaUtilsWidget(settings->ui, settings->ui->getHeaderWidget());
     headerWidget->setLayout(headerLayout);
 }
 
@@ -248,8 +248,13 @@ void MsaEditorAlignmentDependentWidget::setSettings(const UpdatedWidgetSettings*
     nameWidget.setText(contentWidget->getHeaderText());
 }
 
-void MsaEditorAlignmentDependentWidget::sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) {
-    contentWidget->onAlignmentChanged(maBefore, modInfo);
+void MsaEditorAlignmentDependentWidget::cancelPendingTasks() {\
+    contentWidget->cancelPendingTasks();
+}
+
+void MsaEditorAlignmentDependentWidget::sl_onAlignmentChanged(const MultipleAlignment& maBefore, const MaModificationInfo& modInfo) {
+    const MultipleSequenceAlignment msaBefore = maBefore.dynamicCast<MultipleSequenceAlignment>();
+    contentWidget->onAlignmentChanged(msaBefore, modInfo);
 }
 
 void MsaEditorAlignmentDependentWidget::sl_onUpdateButonPressed() {
@@ -279,5 +284,3 @@ void MsaEditorAlignmentDependentWidget::sl_onFontChanged(const QFont& font) {
 }
 
 } //namespace
-
-
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h
index b41bdbd..a2bc8eb 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorSimilarityColumn.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,19 +26,17 @@
 #include <QPushButton>
 
 #include <U2Core/BackgroundTaskRunner.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
-#include "MSAEditorNameList.h"
-#include "MsaUpdatedWidgetInterface.h"
 
+#include "MaEditorNameList.h"
+#include "MsaUpdatedWidgetInterface.h"
 
-namespace U2
-{
+namespace U2 {
 
 class CreateDistanceMatrixTask;
-class MAlignmentRow;
 class MSADistanceMatrix;
-class MSAWidget;
+class MaUtilsWidget;
 class Task;
 
 class SimilarityStatisticsSettings : public UpdatedWidgetSettings {
@@ -49,14 +47,17 @@ public:
     bool                            excludeGaps;
 };
 
-class MsaEditorSimilarityColumn : public MSAEditorNameList, public UpdatedWidgetInterface {
+class MsaEditorSimilarityColumn : public MaEditorNameList, public UpdatedWidgetInterface {
     friend class GTUtilsMSAEditorSequenceArea;
     Q_OBJECT
 public:
-    MsaEditorSimilarityColumn(MSAEditorUI* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings);
+    MsaEditorSimilarityColumn(MsaEditorWgt* ui, QScrollBar* nhBar, const SimilarityStatisticsSettings* _settings);
     virtual ~MsaEditorSimilarityColumn();
 
     void setSettings(const UpdatedWidgetSettings* _settings);
+    
+    void cancelPendingTasks();
+    
     const UpdatedWidgetSettings& getSettings() const {return curSettings;}
     QWidget* getWidget(){return this;}
     void updateWidget(){updateDistanceMatrix();}
@@ -75,11 +76,9 @@ signals:
     void si_dataStateChanged(DataState newState);
 private slots:
 
-    void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
+    void onAlignmentChanged(const MultipleSequenceAlignment& maBefore, const MaModificationInfo& modInfo);
     void sl_createMatrixTaskFinished(Task*);
 private:
-    void sl_buildStaticMenu(GObjectView*, QMenu*) {}
-    void sl_buildContextMenu(GObjectView*, QMenu*) {}
     void updateDistanceMatrix();
 
     MSADistanceMatrix* matrix;
@@ -116,11 +115,12 @@ public:
     MsaEditorAlignmentDependentWidget(UpdatedWidgetInterface* _contentWidget);
 
     void setSettings(const UpdatedWidgetSettings* _settings);
+    void cancelPendingTasks();
     const DataState& getDataState() const{return state;}
     const UpdatedWidgetSettings* getSettings() const {return settings;}
 
 private slots:
-    void sl_onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo);
+    void sl_onAlignmentChanged(const MultipleAlignment &maBefore, const MaModificationInfo& modInfo);
     void sl_onUpdateButonPressed();
     void sl_onDataStateChanged(DataState newState);
     void sl_onFontChanged(const QFont&);
@@ -128,7 +128,7 @@ private:
     void createWidgetUI();
     void createHeaderWidget();
 
-    MSAWidget*                   headerWidget;
+    MaUtilsWidget*               headerWidget;
     QLabel                       statusBar;
     QLabel                       nameWidget;
     QPushButton                  updateButton;
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.cpp
new file mode 100644
index 0000000..35d4c7b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.cpp
@@ -0,0 +1,237 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MSAEditorSequenceArea.h"
+#include "MsaEditorStatusBar.h"
+
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleAlignmentObject.h>
+
+#include <QHBoxLayout>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QPushButton>
+
+namespace U2 {
+
+MsaEditorStatusBar::MsaEditorStatusBar(MultipleAlignmentObject* mobj, MaEditorSequenceArea* seqArea)
+    : MaEditorStatusBar(mobj, seqArea) {
+    setObjectName("msa_editor_status_bar");
+
+    connect(mobj, SIGNAL(si_alphabetChanged(const MaModificationInfo&, const DNAAlphabet *)), SLOT(sl_alphabetChanged()));
+
+    prevButton = new QPushButton();
+    prevButton->setObjectName("Find backward");
+    prevButton->setToolTip(tr("Find backward <b>(SHIFT + Enter)</b>"));
+    prevButton->setIcon(QIcon(":core/images/msa_find_prev.png"));
+    prevButton->setFlat(true);
+    nextButton = new QPushButton();
+    nextButton->setObjectName("Find forward");
+    nextButton->setToolTip(tr("Find forward <b>(Enter)</b>"));
+    nextButton->setIcon(QIcon(":core/images/msa_find_next.png"));
+    nextButton->setFlat(true);
+
+    connect(prevButton, SIGNAL(clicked()), SLOT(sl_findPrev()));
+    connect(nextButton, SIGNAL(clicked()), SLOT(sl_findNext()));
+
+    findLabel = new QLabel();
+    findLabel->setText(tr("Find:"));
+
+    searchEdit = new QLineEdit();
+    searchEdit->setObjectName("searchEdit");
+    searchEdit->installEventFilter(this);
+    searchEdit->setMaxLength(1000);
+    validator = new MaSearchValidator(mobj->getAlphabet(), this);
+    searchEdit->setValidator(validator);
+    findLabel->setBuddy(searchEdit);
+
+    findAction = new QAction(tr("Find in alignment"), this);//this action is used only to enable shortcut to change focus today
+    findAction->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_F));
+    findAction->setShortcutContext(Qt::WindowShortcut);
+    connect(findAction, SIGNAL(triggered()), SLOT(sl_findFocus()));
+    addAction(findAction);
+
+    updateLabels();
+    setupLayout();
+}
+
+bool MsaEditorStatusBar::eventFilter(QObject*, QEvent* ev) {
+    if (ev->type() == QEvent::KeyPress) {
+        QKeyEvent* kev = (QKeyEvent*)ev;
+        if (kev->key() == Qt::Key_Enter || kev->key() == Qt::Key_Return) {
+            if (kev->modifiers() == Qt::SHIFT) {
+                prevButton->click();
+            } else {
+                nextButton->click();
+            }
+        } else if (kev->key() == Qt::Key_Escape) {
+            seqArea->setFocus();
+        }
+    }
+    return false;
+}
+
+void MsaEditorStatusBar::sl_alphabetChanged(){
+    if (!aliObj->getAlphabet()->isRaw()){
+        QByteArray alphabetChars = aliObj->getAlphabet()->getAlphabetChars(true);
+        //remove special characters
+        alphabetChars.remove(alphabetChars.indexOf('*'), 1);
+        alphabetChars.remove(alphabetChars.indexOf('-'), 1);
+        validator->setRegExp(QRegExp(QString("[%1]+").arg(alphabetChars.constData())));
+    }else{
+        validator->setRegExp(QRegExp(".*"));
+    }
+
+    //check is pattern clean required
+    QString currentPattern = QString(searchEdit->text());
+    int pos = 0;
+    if(validator->validate(currentPattern, pos) != QValidator::Acceptable){
+        searchEdit->clear();
+    }
+}
+
+void MsaEditorStatusBar::sl_findNext( ) {
+    if (seqArea->isAlignmentEmpty()) {
+        return;
+    }
+
+    QByteArray pat = searchEdit->text( ).toLocal8Bit( );
+    if ( pat.isEmpty( ) ) {
+        return;
+    }
+    const MultipleAlignment msa = aliObj->getMultipleAlignment();
+    if ( !msa->getAlphabet( )->isCaseSensitive( ) ) {
+        pat = pat.toUpper( );
+    }
+    const int aliLen = msa->getLength( );
+    const int nSeq = seqArea->getNumDisplayableSequences( );
+    QPoint selectionTopLeft = seqArea->getSelection( ).topLeft( );
+
+    if ( selectionTopLeft == lastSearchPos ) {
+        selectionTopLeft.setX( selectionTopLeft.x( ) + 1 );
+    }
+    for (int s = selectionTopLeft.y(); s < nSeq; s++) {
+        const int rowIndex = seqArea->getEditor()->getUI()->getCollapseModel()->mapToRow(s);
+        const MultipleAlignmentRow row = msa->getRow(rowIndex);
+        // if s == pos.y -> search from the current base, otherwise search from the seq start
+        int p = ( s == selectionTopLeft.y( ) ) ? selectionTopLeft.x( ) : 0;
+        for ( ; p < ( aliLen - pat.length( ) + 1 ); p++ ) {
+            char c = row->charAt( p );
+            int selLength = 0;
+            if ( U2Msa::GAP_CHAR != c && MSAUtils::equalsIgnoreGaps(row, p, pat, selLength) ) {
+                // select the result now
+                MaEditorSelection sel( p, s, selLength, 1 );
+                seqArea->setSelection(sel, true);
+                seqArea->centerPos(sel.topLeft());
+                lastSearchPos = seqArea->getSelection().topLeft();
+                return;
+            }
+        }
+    }
+}
+
+void MsaEditorStatusBar::sl_findPrev( ) {
+    if (seqArea->isAlignmentEmpty()) {
+        return;
+    }
+
+    QByteArray pat = searchEdit->text( ).toLocal8Bit( );
+    if ( pat.isEmpty( ) ) {
+        return;
+    }
+    const MultipleAlignment msa = aliObj->getMultipleAlignment();
+    if ( !msa->getAlphabet( )->isCaseSensitive( ) ) {
+        pat = pat.toUpper( );
+    }
+    int aliLen = msa->getLength( );
+    QPoint pos = seqArea->getSelection( ).topLeft( );
+    if ( pos == lastSearchPos ) {
+        pos.setX( pos.x( ) - 1 );
+    }
+    for ( int s = pos.y( ); 0 <= s; s-- ) {
+        const int rowIndex = seqArea->getEditor()->getUI()->getCollapseModel()->mapToRow(s);
+        const MultipleAlignmentRow row = msa->getRow(rowIndex);
+        //if s == pos.y -> search from the current base, otherwise search from the seq end
+        int p = ( s == pos.y( ) ? pos.x( ) : ( aliLen - pat.length( ) + 1) );
+        while ( 0 <= p ) {
+            int selectionLength = 0;
+            if ( U2Msa::GAP_CHAR != row->charAt( p )
+                && MSAUtils::equalsIgnoreGaps( row, p, pat, selectionLength ) )
+            {
+                // select the result now
+                MaEditorSelection sel( p, s, selectionLength, 1 );
+                seqArea->setSelection( sel, true );
+                seqArea->centerPos( sel.topLeft( ) );
+                lastSearchPos = seqArea->getSelection( ).topLeft( );
+                return;
+            }
+            p--;
+        }
+    }
+}
+
+void MsaEditorStatusBar::sl_findFocus() {
+    searchEdit->setFocus();
+}
+
+void MsaEditorStatusBar::setupLayout() {
+    layout->addWidget(findLabel);
+    layout->addWidget(prevButton);
+    layout->addWidget(searchEdit);
+    layout->addWidget(nextButton);
+
+    layout->addWidget(lineLabel);
+    layout->addWidget(colomnLabel);
+    layout->addWidget(positionLabel);
+    layout->addWidget(selectionLabel);
+
+    layout->addWidget(lockLabel);
+}
+
+void MsaEditorStatusBar::updateLabels() {
+    updateLineLabel();
+    updatePositionLabel();
+    updateColumnLabel();
+    updateSelectionLabel();
+}
+
+MaSearchValidator::MaSearchValidator(const DNAAlphabet* alphabet, QObject *parent)
+: QRegExpValidator(parent)
+{
+    if (!alphabet->isRaw()){
+        QByteArray alphabetChars = alphabet->getAlphabetChars(true);
+        //remove special characters
+        alphabetChars.remove(alphabetChars.indexOf('*'), 1);
+        alphabetChars.remove(alphabetChars.indexOf('-'), 1);
+        setRegExp(QRegExp(QString("[%1]+").arg(alphabetChars.constData())));
+    }
+}
+
+QValidator::State MaSearchValidator::validate(QString &input, int &pos) const {
+    input = input.simplified();
+    input = input.toUpper();
+    input.remove(" ");
+    input.remove("-"); // Gaps are not used in search model
+    return QRegExpValidator::validate(input, pos);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.h b/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.h
new file mode 100644
index 0000000..d4e1af9
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorStatusBar.h
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EDITOR_STATUS_BAR_H_
+#define _U2_MSA_EDITOR_STATUS_BAR_H_
+
+#include "MaEditorStatusBar.h"
+
+#include <QRegExpValidator>
+
+class QLineEdit;
+class QPushButton;
+
+namespace U2 {
+
+class DNAAlphabet;
+class MaSearchValidator;
+
+class MsaEditorStatusBar : public MaEditorStatusBar {
+    Q_OBJECT
+public:
+    MsaEditorStatusBar(MultipleAlignmentObject* mobj, MaEditorSequenceArea* seqArea);
+
+    bool eventFilter(QObject* obj, QEvent* ev);
+
+private slots:
+    void sl_alphabetChanged();
+    void sl_findNext();
+    void sl_findPrev();
+    void sl_findFocus();
+
+private:
+    void setupLayout();
+    void updateLabels();
+
+private:
+    QLabel*                     findLabel;
+    QPushButton*                prevButton;
+    QPushButton*                nextButton;
+    QLineEdit*                  searchEdit;
+
+    QPoint                      lastSearchPos;
+    QAction*                    findAction;
+    MaSearchValidator*         validator;
+};
+
+class MaSearchValidator : public QRegExpValidator {
+public:
+    MaSearchValidator(const DNAAlphabet* alphabet, QObject* parent);
+    State validate(QString &input, int &pos) const;
+};
+
+} // namespace
+
+#endif // _U2_MSA_EDITOR_STATUS_BAR_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.cpp
index 6618a0e..dea1cdf 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.h b/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.h
index 4ccbf08..02fc4c8 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.h
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorUserModStepController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.cpp b/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.cpp
new file mode 100644
index 0000000..f09f53e
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.cpp
@@ -0,0 +1,159 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
+
+#include "MSAEditor.h"
+#include "MSAEditorConsensusArea.h"
+#include "MsaEditorNameList.h"
+#include "MSAEditorOverviewArea.h"
+#include "MSAEditorSequenceArea.h"
+#include "MsaEditorSimilarityColumn.h"
+#include "MsaEditorStatusBar.h"
+#include "MsaEditorWgt.h"
+#include "helpers/MsaRowHeightController.h"
+#include "PhyTrees/MSAEditorMultiTreeViewer.h"
+
+namespace U2 {
+
+MsaEditorWgt::MsaEditorWgt(MSAEditor* editor)
+    : MaEditorWgt(editor),
+      multiTreeViewer(NULL),
+      similarityStatistics(NULL) {
+    rowHeightController = new MsaRowHeightController(this);
+    initActions();
+    initWidgets();
+}
+
+MSAEditor *MsaEditorWgt::getEditor() const {
+    return qobject_cast<MSAEditor* >(editor);
+}
+
+MSAEditorSequenceArea* MsaEditorWgt::getSequenceArea() const {
+    return qobject_cast<MSAEditorSequenceArea* >(seqArea);
+}
+
+void MsaEditorWgt::sl_onTabsCountChanged(int curTabsNumber) {
+    if(curTabsNumber < 1) {
+        maSplitter.removeWidget(multiTreeViewer);
+        delete multiTreeViewer;
+        multiTreeViewer = NULL;
+        emit si_hideTreeOP();
+        nameList->clearGroupsSelections();
+    }
+}
+
+void MsaEditorWgt::createDistanceColumn(MSADistanceMatrix* matrix) {
+    dataList->setMatrix(matrix);
+    dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+    MsaEditorAlignmentDependentWidget* statisticsWidget = new MsaEditorAlignmentDependentWidget(dataList);
+
+    maSplitter.addWidget(nameAreaContainer, statisticsWidget, 0.04, 1);
+}
+
+void MsaEditorWgt::addTreeView(GObjectViewWindow* treeView) {
+    if (NULL == multiTreeViewer) {
+        multiTreeViewer = new MSAEditorMultiTreeViewer(tr("Tree view"), getEditor());
+        maSplitter.addWidget(nameAreaContainer, multiTreeViewer, 0.35);
+        multiTreeViewer->addTreeView(treeView);
+        emit si_showTreeOP();
+        connect(multiTreeViewer, SIGNAL(si_tabsCountChanged(int)), SLOT(sl_onTabsCountChanged(int)));
+    }
+    else {
+        multiTreeViewer->addTreeView(treeView);
+    }
+}
+
+void MsaEditorWgt::setSimilaritySettings( const SimilarityStatisticsSettings* settings ) {
+    similarityStatistics->setSettings(settings);
+}
+
+void MsaEditorWgt::refreshSimilarityColumn() {
+    dataList->updateWidget();
+}
+
+void MsaEditorWgt::showSimilarity() {
+    if(NULL == similarityStatistics) {
+        SimilarityStatisticsSettings settings;
+        settings.ma = getEditor()->getMaObject();
+        settings.algoName = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmIds().at(0);
+        settings.ui = this;
+
+        dataList = new MsaEditorSimilarityColumn(this, new QScrollBar(Qt::Horizontal), &settings);
+        dataList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+        similarityStatistics = new MsaEditorAlignmentDependentWidget(dataList);
+
+        maSplitter.addWidget(nameAreaContainer, similarityStatistics, 0.04, 1);
+    }
+    else {
+        similarityStatistics->show();
+    }
+
+}
+
+void MsaEditorWgt::hideSimilarity() {
+    if(NULL != similarityStatistics) {
+        similarityStatistics->hide();
+        similarityStatistics->cancelPendingTasks();
+    }
+}
+
+const MsaEditorAlignmentDependentWidget *MsaEditorWgt::getSimilarityWidget() {
+    return similarityStatistics;
+}
+
+void MsaEditorWgt::initSeqArea(GScrollBar* shBar, GScrollBar* cvBar) {
+    seqArea = new MSAEditorSequenceArea(this, shBar, cvBar);
+}
+
+void MsaEditorWgt::initOverviewArea() {
+    overviewArea = new MSAEditorOverviewArea(this);
+}
+
+void MsaEditorWgt::initNameList(QScrollBar *nhBar) {
+    nameList = new MsaEditorNameList(this, nhBar);
+}
+
+void MsaEditorWgt::initConsensusArea() {
+    consArea = new MSAEditorConsensusArea(this);
+}
+
+void MsaEditorWgt::initStatusBar() {
+    statusBar = new MsaEditorStatusBar(editor->getMaObject(), seqArea);
+}
+
+MSAEditorTreeViewer* MsaEditorWgt::getCurrentTree() const
+{
+    if(NULL == multiTreeViewer) {
+        return NULL;
+    }
+    GObjectViewWindow* page = qobject_cast<GObjectViewWindow*>(multiTreeViewer->getCurrentWidget());
+    if(NULL == page) {
+        return NULL;
+    }
+    return qobject_cast<MSAEditorTreeViewer*>(page->getObjectView());
+}
+
+MSAEditorMultiTreeViewer *MsaEditorWgt::getMultiTreeViewer(){
+    return multiTreeViewer;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.h b/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.h
new file mode 100644
index 0000000..862f83a
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/MsaEditorWgt.h
@@ -0,0 +1,90 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_EDITOR_WGT_H_
+#define _U2_MSA_EDITOR_WGT_H_
+
+#include "view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+class GObjectViewWindow;
+class MSADistanceMatrix;
+class MSAEditor;
+class MsaEditorAlignmentDependentWidget;
+class MSAEditorMultiTreeViewer;
+class MsaEditorSimilarityColumn;
+class MSAEditorTreeViewer;
+class SimilarityStatisticsSettings;
+
+class U2VIEW_EXPORT MsaEditorWgt : public MaEditorWgt {
+    Q_OBJECT
+    //todo: make public accessors:
+    friend class MSAEditorTreeViewer;
+    friend class MsaEditorSimilarityColumn;
+
+public:
+    MsaEditorWgt(MSAEditor* editor);
+
+    MSAEditor* getEditor() const;
+
+    MSAEditorSequenceArea* getSequenceArea() const;
+
+    void createDistanceColumn(MSADistanceMatrix* matrix);
+
+    void addTreeView(GObjectViewWindow* treeView);
+
+    void setSimilaritySettings(const SimilarityStatisticsSettings* settings);
+
+    void refreshSimilarityColumn();
+
+    void showSimilarity();
+    void hideSimilarity();
+
+    const MsaEditorAlignmentDependentWidget* getSimilarityWidget();
+
+    MSAEditorTreeViewer* getCurrentTree() const;
+
+    MSAEditorMultiTreeViewer* getMultiTreeViewer();
+
+private slots:
+    void sl_onTabsCountChanged(int tabsCount);
+signals:
+    void si_showTreeOP();
+    void si_hideTreeOP();
+
+protected:
+    void initSeqArea(GScrollBar* shBar, GScrollBar* cvBar);
+    void initOverviewArea();
+    void initNameList(QScrollBar *nhBar);
+    void initConsensusArea();
+    void initStatusBar();
+
+private:
+    MsaEditorSimilarityColumn*         dataList;
+    MSAEditorMultiTreeViewer*          multiTreeViewer;
+    MsaEditorAlignmentDependentWidget* similarityStatistics;
+    MSAEditorTreeViewer*               treeViewer;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_EDITOR_WGT_H_
diff --git a/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.cpp b/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.cpp
index 4c7cf8a..7ac12f0 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.cpp
+++ b/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.h b/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.h
index bf9359d..7918c43 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.h
+++ b/src/corelibs/U2View/src/ov_msa/MsaOpSavableTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h b/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h
index 7c142d7..e56cf34 100644
--- a/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h
+++ b/src/corelibs/U2View/src/ov_msa/MsaUpdatedWidgetInterface.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,7 @@
 #ifndef _U2_MSA_UPDATED_WIDGET_INTERFACE_H_
 #define _U2_MSA_UPDATED_WIDGET_INTERFACE_H_
 
-#include <qglobal.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include "MSAEditor.h"
 
 namespace U2 {
@@ -32,8 +31,8 @@ class UpdatedWidgetSettings {
 public:
     UpdatedWidgetSettings()
         : ma(NULL), ui(NULL), autoUpdate(true) {}
-    const MAlignmentObject* ma;
-    MSAEditorUI*            ui;
+    const MultipleSequenceAlignmentObject* ma;
+    MsaEditorWgt*            ui;
     bool                    autoUpdate;
 };
 
@@ -46,8 +45,9 @@ enum DataState {
 class UpdatedWidgetInterface{
 public:
     virtual ~UpdatedWidgetInterface() {}
-    virtual void onAlignmentChanged(const MAlignment& maBefore, const MAlignmentModInfo& modInfo) = 0;
+    virtual void onAlignmentChanged(const MultipleSequenceAlignment& maBefore, const MaModificationInfo& modInfo) = 0;
     virtual void setSettings(const UpdatedWidgetSettings* settings) = 0;
+    virtual void cancelPendingTasks() = 0;
     virtual QWidget* getWidget() = 0;
     virtual const UpdatedWidgetSettings& getSettings() const = 0;
     virtual void updateWidget() = 0;
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp
deleted file mode 100644
index ac86a52..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.cpp
+++ /dev/null
@@ -1,277 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QPolygonF>
-
-#include <U2Algorithm/MSAConsensusAlgorithmClustal.h>
-#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
-#include <U2Algorithm/MSAConsensusAlgorithmStrict.h>
-#include <U2Algorithm/MsaColorScheme.h>
-#include <U2Algorithm/MsaHighlightingScheme.h>
-
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2View/MSAEditor.h>
-
-#include "MSAGraphCalculationTask.h"
-
-namespace U2 {
-
-MSAGraphCalculationTask::MSAGraphCalculationTask(MAlignmentObject* msa, int width, int height)
-    : BackgroundTask<QPolygonF>(tr("Render overview"), TaskFlag_None),
-      memLocker(stateInfo),
-      msaLength(0),
-      seqNumber(0),
-      width(width),
-      height(height)
-{
-    SAFE_POINT_EXT(msa != NULL, setError(tr("MSA is NULL")), );
-    msaLength = msa->getLength();
-    seqNumber = msa->getNumRows();
-    if(!memLocker.tryAcquire(msa->getMAlignment().getLength() * msa->getMAlignment().getNumRows())) {
-        setError(memLocker.getError());
-        return;
-    }
-    ma.reset(new MAlignment(msa->getMAlignment()));
-    connect(msa, SIGNAL(si_invalidateAlignmentObject()), this, SLOT(cancel()));
-    connect(msa, SIGNAL(si_startMsaUpdating()), this, SLOT(cancel()));
-    connect(msa, SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)), this, SLOT(cancel()));
-}
-
-void MSAGraphCalculationTask::run() {
-    CHECK(!hasError(), );
-    emit si_calculationStarted();
-    constructPolygon(result);
-    emit si_calculationStoped();
-}
-
-void MSAGraphCalculationTask::constructPolygon(QPolygonF &polygon) {
-    SAFE_POINT_EXT(width != 0, setError(tr("Overview width is zero")), );
-    stateInfo.setProgress(0);
-    emit si_progressChanged();
-
-    if (msaLength == 0 || seqNumber == 0) {
-        polygon = QPolygonF();
-        return;
-    }
-
-    double stepY = height / static_cast<double>(100);
-    QVector<QPointF> points;
-    points.append(QPointF(0, height));
-
-    if ( msaLength < width ) {
-        double stepX = width / static_cast<double>(msaLength);
-        points.append(QPointF(0, qRound( height - stepY * static_cast<double>(getGraphValue(0)))));
-        for (int pos = 0; pos < msaLength; pos++) {
-            if (isCanceled()) {
-                polygon = QPolygonF();
-                return;
-            }
-            int percent = getGraphValue(pos);
-            points.append(QPointF(qRound( stepX * static_cast<double>(pos) + stepX / 2),
-                                  height - stepY * percent));
-            stateInfo.setProgress(100 * pos / msaLength);
-            emit si_progressChanged();
-        }
-        points.append(QPointF( width, qRound( height - stepY * static_cast<double>(getGraphValue(msaLength - 1)))));
-
-    } else {
-        double stepX = msaLength / static_cast<double>(width);
-        for (int pos = 0; pos < width; pos++) {
-            double average = 0;
-            int count = 0;
-            for (int i = stepX * pos; i < qRound( stepX * (pos + 1) ); i++) {
-                if (isCanceled()) {
-                    polygon = QPolygonF();
-                    return;
-                }
-                if (i > msaLength) {
-                    break;
-                }
-                average += getGraphValue(i);
-                count++;
-            }
-            CHECK(count != 0, );
-            average /= count;
-            points.append( QPointF(pos, height - stepY * average ));
-            stateInfo.setProgress(100 * pos / width);
-            emit si_progressChanged();
-        }
-    }
-
-    points.append(QPointF(width, height));
-    polygon = QPolygonF(points);
-    stateInfo.setProgress(100);
-    emit si_progressChanged();
-}
-
-MSAConsensusOverviewCalculationTask::MSAConsensusOverviewCalculationTask(MAlignmentObject* msa,
-                                    int width, int height)
-    : MSAGraphCalculationTask(msa, width, height)
-{
-    SAFE_POINT_EXT(AppContext::getMSAConsensusAlgorithmRegistry() != NULL, setError(tr("MSAConsensusAlgorithmRegistry is NULL!")), );
-
-    MSAConsensusAlgorithmFactory* factory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(BuiltInConsensusAlgorithms::STRICT_ALGO);
-    SAFE_POINT_EXT(factory != NULL, setError(tr("Strict consensus algorithm factory is NULL")), );
-
-    SAFE_POINT_EXT(msa != NULL, setError(tr("MSA is NULL")), );
-    const MAlignment& ma = msa->getMAlignment();
-    algorithm = factory->createAlgorithm(ma);
-    algorithm->setParent(this);
-}
-
-int MSAConsensusOverviewCalculationTask::getGraphValue(int pos) const {
-    int score;
-    algorithm->getConsensusCharAndScore(*ma, pos, score);
-    return qRound(score * 100. / seqNumber);
-}
-
-MSAGapOverviewCalculationTask::MSAGapOverviewCalculationTask(MAlignmentObject* msa, int width, int height)
-    : MSAGraphCalculationTask(msa, width, height) {}
-
-int MSAGapOverviewCalculationTask::getGraphValue(int pos) const {
-    int gapCounter = 0;
-    for (int seq = 0; seq < seqNumber; seq++) {
-        if (pos > ma->getLength()) {
-            continue;
-        }
-        uchar c = static_cast<uchar>(ma->charAt(seq, pos));
-        if (c == MAlignment_GapChar) {
-            gapCounter++;
-        }
-    }
-
-    return qRound(gapCounter * 100. / seqNumber);
-}
-
-MSAClustalOverviewCalculationTask::MSAClustalOverviewCalculationTask(MAlignmentObject *msa, int width, int height)
-    : MSAGraphCalculationTask(msa, width, height) {
-    SAFE_POINT_EXT(AppContext::getMSAConsensusAlgorithmRegistry() != NULL, setError(tr("MSAConsensusAlgorithmRegistry is NULL!")), );
-
-    MSAConsensusAlgorithmFactory* factory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(BuiltInConsensusAlgorithms::CLUSTAL_ALGO);
-    SAFE_POINT_EXT(factory != NULL, setError(tr("Clustal algorithm factory is NULL")), );
-
-    SAFE_POINT_EXT(msa != NULL, setError(tr("MSA is NULL")), );
-    algorithm = factory->createAlgorithm(*ma);
-    algorithm->setParent(this);
-}
-
-int MSAClustalOverviewCalculationTask::getGraphValue(int pos) const {
-    char c = algorithm->getConsensusChar(*ma, pos);
-
-    switch (c) {
-    case '*':
-        return 100;
-    case ':':
-        return 60;
-    case '.':
-        return 30;
-    default:
-        return 0;
-    }
-}
-
-MSAHighlightingOverviewCalculationTask::MSAHighlightingOverviewCalculationTask(MSAEditor *editor,
-                                                                               const QString &colorSchemeId,
-                                                                               const QString &highlightingSchemeId,
-                                                                               int width, int height)
-    : MSAGraphCalculationTask(editor->getMSAObject(), width, height) {
-
-    SAFE_POINT_EXT(AppContext::getMsaHighlightingSchemeRegistry() != NULL,
-                   setError(tr("MSA highlighting scheme registry is NULL")), );
-    MsaHighlightingSchemeFactory* f_hs = AppContext::getMsaHighlightingSchemeRegistry()->getMsaHighlightingSchemeFactoryById( highlightingSchemeId );
-    SAFE_POINT_EXT(f_hs != NULL, setError(tr("MSA highlighting scheme factory with '%1' id is NULL").arg(highlightingSchemeId)), );
-
-    highlightingScheme = f_hs->create(this, editor->getMSAObject());
-    schemeId = f_hs->getId();
-
-    MsaColorSchemeFactory* f_cs = AppContext::getMsaColorSchemeRegistry()->getMsaColorSchemeFactoryById( colorSchemeId );
-    colorScheme = f_cs->create(this, editor->getMSAObject());
-
-    U2OpStatusImpl os;
-    refSequenceId = ma->getRowIndexByRowId(editor->getReferenceRowId(), os);
-}
-
-bool MSAHighlightingOverviewCalculationTask::isCellHighlighted(const MAlignment &ma, MsaHighlightingScheme *highlightingScheme,
-                                                               MsaColorScheme *colorScheme,
-                                                               int seq, int pos,
-                                                               int refSeq)
-{
-    SAFE_POINT(colorScheme != NULL, tr("Color scheme is NULL"), false);
-    SAFE_POINT(highlightingScheme != NULL, tr("Highlighting scheme is NULL"), false);
-    SAFE_POINT(highlightingScheme->getFactory() != NULL, tr("Highlighting scheme factory is NULL"), false);
-    QString schemeId = highlightingScheme->getFactory()->getId();
-
-    if (seq == refSeq || isEmptyScheme(schemeId) ||
-            ((refSeq == MAlignmentRow::invalidRowId()) && !isGapScheme(schemeId) &&
-            !highlightingScheme->getFactory()->isRefFree())) {
-        if (colorScheme->getColor(seq, pos, ma.charAt(seq, pos)) != QColor()) {
-            return true;
-        }
-    }
-    else {
-        char refChar;
-        if (isGapScheme(schemeId) || highlightingScheme->getFactory()->isRefFree()) {
-            refChar = '\n';
-        } else {
-            refChar = ma.charAt(refSeq, pos);
-        }
-
-        char c = ma.charAt(seq, pos);
-        bool highlight = false;
-        QColor unused;
-        highlightingScheme->process(refChar, c, unused, highlight, pos, seq);
-        if (highlight) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-int MSAHighlightingOverviewCalculationTask::getGraphValue(int pos) const {
-    CHECK(seqNumber != 0, 0);
-
-    int counter = 0;
-    for (int i = 0; i < seqNumber; i++) {
-        if ( isCellHighlighted(i, pos) ) {
-            counter++;
-        }
-    }
-
-    return 100 * counter / seqNumber;
-}
-
-bool MSAHighlightingOverviewCalculationTask::isGapScheme(const QString &schemeId) {
-    return (schemeId == MsaHighlightingScheme::GAPS_AMINO || schemeId == MsaHighlightingScheme::GAPS_NUCL);
-}
-
-bool MSAHighlightingOverviewCalculationTask::isEmptyScheme(const QString &schemeId) {
-    return (schemeId == MsaHighlightingScheme::EMPTY_AMINO || schemeId == MsaHighlightingScheme::EMPTY_NUCL);
-}
-
-bool MSAHighlightingOverviewCalculationTask::isCellHighlighted(int seq, int pos) const {
-    return isCellHighlighted(*ma, highlightingScheme, colorScheme, seq, pos, refSequenceId);
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h
deleted file mode 100644
index 764b6e1..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphCalculationTask.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_GRAPH_CALCULATION_TASK_H_
-#define _U2_MSA_GRAPH_CALCULATION_TASK_H_
-
-#include <U2Core/AppResources.h>
-#include <U2Core/global.h>
-#include <U2Core/BackgroundTaskRunner.h>
-#include <U2View/MSAEditorConsensusCache.h>
-
-#include <U2Core/MAlignment.h>
-
-#include <QtGui/QPolygonF>
-
-namespace U2 {
-
-class MSAEditor;
-class MAlignmentObject;
-class MSAConsensusAlgorithm;
-class MsaColorScheme;
-class MsaHighlightingScheme;
-
-class MSAGraphCalculationTask : public BackgroundTask<QPolygonF> {
-    Q_OBJECT
-public:
-    MSAGraphCalculationTask(MAlignmentObject* msa, int width, int height);
-
-    void run();
-signals:
-    void si_calculationStarted();
-    void si_calculationStoped();
-protected:
-    void constructPolygon(QPolygonF &polygon);
-    virtual int getGraphValue(int) const { return height; }
-
-    QScopedPointer<MAlignment> ma;
-    MemoryLocker memLocker;
-    int msaLength;
-    int seqNumber;
-    int width;
-    int height;
-};
-
-class MSAConsensusOverviewCalculationTask : public MSAGraphCalculationTask {
-    Q_OBJECT
-public:
-    MSAConsensusOverviewCalculationTask(MAlignmentObject* msa,
-                                        int width, int height);
-private:
-    int getGraphValue(int pos) const;
-
-    MSAConsensusAlgorithm*  algorithm;
-};
-
-class MSAGapOverviewCalculationTask : public MSAGraphCalculationTask {
-    Q_OBJECT
-public:
-    MSAGapOverviewCalculationTask(MAlignmentObject* msa,
-                                  int width, int height);
-private:
-    int getGraphValue(int pos) const;
-};
-
-class MSAClustalOverviewCalculationTask : public MSAGraphCalculationTask {
-    Q_OBJECT
-public:
-    MSAClustalOverviewCalculationTask(MAlignmentObject* msa,
-                                      int width, int height);
-private:
-    int getGraphValue(int pos) const;
-
-    MSAConsensusAlgorithm*  algorithm;
-};
-
-class MSAHighlightingOverviewCalculationTask : public MSAGraphCalculationTask {
-    Q_OBJECT
-public:
-    MSAHighlightingOverviewCalculationTask(MSAEditor* _editor,
-                                           const QString &colorSchemeId,
-                                           const QString &highlightingSchemeId,
-                                           int width, int height);
-
-    static bool isCellHighlighted(const MAlignment &msa,
-                                  MsaHighlightingScheme* highlightingScheme,
-                                  MsaColorScheme* colorScheme,
-                                  int seq, int pos,
-                                  int refSeq);
-
-    static bool isGapScheme(const QString &schemeId);
-    static bool isEmptyScheme(const QString &schemeId);
-
-private:
-    int getGraphValue(int pos) const;
-
-    bool isCellHighlighted(int seq, int pos) const;
-
-    int refSequenceId;
-
-    MsaColorScheme*         colorScheme;
-    MsaHighlightingScheme*  highlightingScheme;
-    QString                 schemeId;
-};
-
-} // namespace
-
-#endif // _U2_MSA_GRAPH_CALCULATION_TASK_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
deleted file mode 100644
index 09f44bd..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QMouseEvent>
-#include <QPainter>
-
-#include <U2Algorithm/MsaColorScheme.h>
-#include <U2Algorithm/MsaHighlightingScheme.h>
-
-#include <U2Core/Settings.h>
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorConsensusArea.h>
-#include <U2View/MSAEditorConsensusCache.h>
-#include <U2View/MSAEditorNameList.h>
-#include <U2View/MSAEditorSequenceArea.h>
-
-#include "MSAGraphCalculationTask.h"
-#include "MSAGraphOverview.h"
-
-namespace U2 {
-
-MSAGraphOverview::MSAGraphOverview(MSAEditorUI *ui)
-    : MSAOverview(ui),
-      redrawGraph(true),
-      isBlocked(false),
-      lastDrawnVersion(-1),
-      method(Strict),
-      graphCalculationTask(NULL)
-{
-    setFixedHeight(FIXED_HEIGHT);
-
-    displaySettings = new MSAGraphOverviewDisplaySettings();
-
-    Settings *s = AppContext::getSettings();
-    CHECK(s != NULL, );
-    if (s->contains(MSA_GRAPH_OVERVIEW_COLOR_KEY)) {
-        displaySettings->color = s->getValue(MSA_GRAPH_OVERVIEW_COLOR_KEY).value<QColor>( );
-    }
-
-    if (s->contains(MSA_GRAPH_OVERVIEW_TYPE_KEY)) {
-        displaySettings->type = (MSAGraphOverviewDisplaySettings::GraphType)s->getValue(MSA_GRAPH_OVERVIEW_TYPE_KEY).toInt();
-    }
-
-    if (s->contains(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY)) {
-        displaySettings->orientation = (MSAGraphOverviewDisplaySettings::OrientationMode)s->getValue(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY).toInt();
-    }
-
-    connect(&graphCalculationTaskRunner,    SIGNAL(si_finished()),
-                                            SLOT(sl_redraw()));
-
-    connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-                                    SLOT(sl_drawGraph()));
-
-    connect(ui, SIGNAL(si_startMsaChanging()),
-                SLOT(sl_blockRendering()));
-    connect(ui, SIGNAL(si_stopMsaChanging(bool)),
-                SLOT(sl_unblockRendering(bool)));
-
-    sl_drawGraph();
-}
-
-void MSAGraphOverview::cancelRendering() {
-    if (isRendering) {
-        graphCalculationTaskRunner.cancel();
-        lastDrawnVersion = -1;
-    }
-}
-
-void MSAGraphOverview::sl_visibleRangeChanged() {
-    if (!isValid()) {
-        return;
-    }
-    update();
-}
-
-void MSAGraphOverview::sl_redraw() {
-    redrawGraph = true;
-    update();
-}
-
-void MSAGraphOverview::paintEvent(QPaintEvent *e) {
-
-    QPainter p(this);
-    if (!isValid()) {
-        showWarning(p, e, tr("Multiple sequence alignment is too big. Overview is unavailable."));
-        return;
-    }
-    if (isBlocked) {
-        p.fillRect(cachedView.rect(), Qt::gray);
-        p.drawText(cachedView.rect(), Qt::AlignCenter, tr("Waiting..."));
-        QWidget::paintEvent(e);
-        return;
-    }
-
-    if (!graphCalculationTaskRunner.isIdle()) {
-        cachedConsensus = QPixmap(size());
-        QPainter pConsensus(&cachedConsensus);
-        pConsensus.fillRect(cachedConsensus.rect(), Qt::gray);
-        pConsensus.drawText(cachedConsensus.rect(), Qt::AlignCenter, tr("Overview is rendering..."));
-    } else {
-        if (redrawGraph) {
-            cachedConsensus = QPixmap(size());
-            QPainter pConsensus(&cachedConsensus);
-            drawOverview(pConsensus);
-        }
-    }
-
-    cachedView = cachedConsensus;
-
-    QPainter pVisibleRange(&cachedView);
-    drawVisibleRange(pVisibleRange);
-
-    p.drawPixmap(0, 0, cachedView);
-    lastDrawnVersion = editor->getMSAObject()->getModificationVersion();
-
-    QWidget::paintEvent(e);
-}
-
-void MSAGraphOverview::resizeEvent(QResizeEvent *e) {
-    if (!isBlocked) {
-        redrawGraph = true;
-        sl_drawGraph();
-    }
-    QWidget::resizeEvent(e);
-}
-
-void MSAGraphOverview::drawVisibleRange(QPainter &p) {
-    if (editor->isAlignmentEmpty()) {
-        setVisibleRangeForEmptyAlignment();
-    } else {
-        stepX = width() / (double)editor->getAlignmentLen();
-
-        cachedVisibleRange.setY(0);
-        cachedVisibleRange.setHeight(FIXED_HEIGHT);
-
-        double consStep = editor->getAlignmentLen() / (double)(width());
-
-        cachedVisibleRange.setX(qRound(sequenceArea->getFirstVisibleBase() / consStep));
-        cachedVisibleRange.setWidth(qRound((sequenceArea->getLastVisibleBase(true) - sequenceArea->getFirstVisibleBase() + 1) / consStep));
-
-        if (cachedVisibleRange.width() == 0) {
-            cachedVisibleRange.setWidth(1);
-        }
-
-        if (cachedVisibleRange.width() < VISIBLE_RANGE_CRITICAL_SIZE || cachedVisibleRange.height() < VISIBLE_RANGE_CRITICAL_SIZE) {
-            p.setPen(Qt::red);
-        }
-    }
-
-    p.fillRect(cachedVisibleRange, VISIBLE_RANGE_COLOR);
-    p.drawRect(cachedVisibleRange.adjusted(0, 0, -1, -1));
-}
-
-void MSAGraphOverview::sl_drawGraph() {
-    if (!isVisible() || isBlocked) {
-        return;
-    }
-    graphCalculationTaskRunner.cancel();
-
-    switch (method) {
-    case Strict:
-        graphCalculationTask = new MSAConsensusOverviewCalculationTask(editor->getMSAObject(),
-                                                                       width(), FIXED_HEIGHT);
-        break;
-    case Gaps:
-        graphCalculationTask = new MSAGapOverviewCalculationTask(editor->getMSAObject(),
-                                                                 width(), FIXED_HEIGHT);
-        break;
-    case Clustal:
-        graphCalculationTask = new MSAClustalOverviewCalculationTask(editor->getMSAObject(),
-                                                                     width(), FIXED_HEIGHT);
-        break;
-    case Highlighting:
-        MsaHighlightingScheme* hScheme = sequenceArea->getCurrentHighlightingScheme();
-        QString hSchemeId = hScheme->getFactory()->getId();
-
-        MsaColorScheme* cScheme = sequenceArea->getCurrentColorScheme();
-        QString cSchemeId = cScheme->getFactory()->getId();
-
-        graphCalculationTask = new MSAHighlightingOverviewCalculationTask(editor,
-                                                                          cSchemeId,
-                                                                          hSchemeId,
-                                                                          width(), FIXED_HEIGHT);
-        break;
-    }
-
-    connect(graphCalculationTask, SIGNAL(si_calculationStarted()), SLOT(sl_startRendering()));
-    connect(graphCalculationTask, SIGNAL(si_calculationStoped()), SLOT(sl_stopRendering()));
-    graphCalculationTaskRunner.run( graphCalculationTask );
-
-    sl_redraw();
-}
-
-void MSAGraphOverview::sl_highlightingChanged() {
-    if (method == Highlighting) {
-        sl_drawGraph();
-    }
-}
-
-void MSAGraphOverview::sl_graphOrientationChanged(MSAGraphOverviewDisplaySettings::OrientationMode orientation) {
-    if (orientation != displaySettings->orientation) {
-        displaySettings->orientation = orientation;
-
-        Settings *s = AppContext::getSettings();
-        s->setValue(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY, orientation);
-
-        update();
-    }
-}
-
-void MSAGraphOverview::sl_graphTypeChanged(MSAGraphOverviewDisplaySettings::GraphType type) {
-    if (type != displaySettings->type) {
-        displaySettings->type = type;
-
-        Settings *s = AppContext::getSettings();
-        s->setValue(MSA_GRAPH_OVERVIEW_TYPE_KEY, type);
-
-        update();
-    }
-}
-
-void MSAGraphOverview::sl_graphColorChanged(QColor color) {
-    if (color != displaySettings->color) {
-        displaySettings->color = color;
-
-        Settings *s = AppContext::getSettings();
-        s->setValue(MSA_GRAPH_OVERVIEW_COLOR_KEY, color);
-
-        update();
-    }
-}
-
-void MSAGraphOverview::sl_calculationMethodChanged(MSAGraphCalculationMethod _method) {
-    if (method != _method) {
-        method = _method;
-        sl_drawGraph();
-    }
-}
-
-void MSAGraphOverview::sl_startRendering() {
-    isRendering = true;
-    emit si_renderingStateChanged(isRendering);
-}
-
-void MSAGraphOverview::sl_stopRendering() {
-    isRendering = false;
-    emit si_renderingStateChanged(isRendering);
-}
-
-void MSAGraphOverview::sl_blockRendering() {
-    disconnect(editor->getMSAObject(), 0, this, 0);
-    isBlocked = true;
-}
-
-void MSAGraphOverview::sl_unblockRendering(bool update) {
-    isBlocked = false;
-
-    if (update && lastDrawnVersion != editor->getMSAObject()->getModificationVersion()) {
-        sl_drawGraph();
-    } else {
-        this->update();
-    }
-
-    connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-            SLOT(sl_drawGraph()));
-}
-
-void MSAGraphOverview::drawOverview(QPainter &p) {
-    if (displaySettings->orientation == MSAGraphOverviewDisplaySettings::FromTopToBottom) {
-        // transform coordinate system
-        p.translate( 0, height());
-        p.scale(1, -1);
-    }
-
-    p.fillRect(cachedConsensus.rect(), Qt::white);
-
-    if (editor->getAlignmentLen() == 0) {
-        return;
-    }
-
-    p.setPen(displaySettings->color);
-    p.setBrush(displaySettings->color);
-
-    if (graphCalculationTaskRunner.getResult().isEmpty() && !editor->isAlignmentEmpty() && !isBlocked) {
-        sl_drawGraph();
-        return;
-    }
-
-    QPolygonF resultPolygon = graphCalculationTaskRunner.getResult();
-    if (!editor->isAlignmentEmpty() && resultPolygon.last().x() != width()) {
-        sl_drawGraph();
-        return;
-    }
-
-    // area graph
-    if (displaySettings->type == MSAGraphOverviewDisplaySettings::Area) {
-        p.drawPolygon( resultPolygon );
-    }
-
-    // line graph
-    if (displaySettings->type == MSAGraphOverviewDisplaySettings::Line) {
-        p.drawPolyline( resultPolygon );
-    }
-
-    // hystogram
-    if (displaySettings->type == MSAGraphOverviewDisplaySettings::Hystogram) {
-        int size = graphCalculationTaskRunner.getResult().size();
-        for (int i = 0; i < size; i++) {
-            const QPointF point = resultPolygon.at(i);
-            QPointF nextPoint;
-            if (i != size - 1) {
-                nextPoint = resultPolygon.at(i + 1);
-            } else {
-                nextPoint = QPointF(width(), point.y());
-            }
-
-            p.drawRect( point.x(), point.y(),
-                        static_cast<int>(nextPoint.x() - point.x()) - 2 * (width() > 2 * size),
-                        height() - point.y());
-        }
-    }
-
-    // gray frame
-    p.setPen(Qt::gray);
-    p.setBrush(Qt::transparent);
-    p.drawRect( rect().adjusted( 0, (displaySettings->orientation == MSAGraphOverviewDisplaySettings::FromTopToBottom),
-                                 -1, -1 * (displaySettings->orientation == MSAGraphOverviewDisplaySettings::FromBottomToTop)));
-
-}
-
-void MSAGraphOverview::moveVisibleRange(QPoint _pos) {
-    const QRect& overviewRect = rect();
-    QRect newVisibleRange(cachedVisibleRange);
-    newVisibleRange.moveLeft(_pos.x() - static_cast<double>(cachedVisibleRange.width()) / 2 );
-
-    if (!overviewRect.contains(newVisibleRange)) {
-        if (newVisibleRange.x() < 0) {
-            newVisibleRange.moveLeft(0);
-        } else if (newVisibleRange.topRight().x() > overviewRect.width()) {
-            newVisibleRange.moveRight(overviewRect.width());
-        }
-    }
-
-    int pos = newVisibleRange.x() / stepX;
-    CHECK(editor->getAlignmentLen() > pos, );
-    sequenceArea->setFirstVisibleBase(pos);
-    update();
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h
deleted file mode 100644
index e15ff32..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_GRAPH_OVERVIEW_H_
-#define _U2_MSA_GRAPH_OVERVIEW_H_
-
-#include <U2Core/global.h>
-#include <U2Core/BackgroundTaskRunner.h>
-
-#include "MSAOverview.h"
-
-namespace U2 {
-
-class MSAEditorConsensusCache;
-class MSAGraphCalculationTask;
-
-class MSAGraphOverviewDisplaySettings {
-public:
-    enum GraphType {
-        Hystogram = 0,
-        Line = 1,
-        Area = 2
-    };
-
-    enum OrientationMode {
-        FromTopToBottom = 0,
-        FromBottomToTop = 1
-    };
-
-    MSAGraphOverviewDisplaySettings()
-        : color( Qt::gray ),
-          type(Area),
-          orientation(FromBottomToTop) {}
-
-    QColor      color;
-    GraphType   type;
-    OrientationMode orientation;
-};
-
-enum MSAGraphCalculationMethod {
-    Strict,         // the most frequent nucleotide
-    Gaps,           // percent of gaps
-    Clustal,        // 0-30-60-100 groups
-    Highlighting    // count only highlighted cells
-};
-
-#define MSA_GRAPH_OVERVIEW_COLOR_KEY "msa_graph_overview_color"
-#define MSA_GRAPH_OVERVIEW_TYPE_KEY "msa_graph_overview_type"
-#define MSA_GRAPH_OVERVIEW_ORIENTAION_KEY "msa_graph_overview_orientation_key"
-
-class U2VIEW_EXPORT MSAGraphOverview : public MSAOverview {
-    Q_OBJECT
-public:
-    MSAGraphOverview(MSAEditorUI* ui);
-    bool isValid() const { return graphCalculationTaskRunner.getError().isEmpty(); }
-    QPixmap getView() { return cachedConsensus; }
-
-    const static int FIXED_HEIGHT = 70;
-
-    void cancelRendering();
-
-    QColor getCurrentColor() const { return displaySettings->color; }
-    MSAGraphOverviewDisplaySettings::GraphType getCurrentGraphType() const { return displaySettings->type; }
-    MSAGraphOverviewDisplaySettings::OrientationMode getCurrentOrientationMode() const
-    { return displaySettings->orientation; }
-    MSAGraphCalculationMethod getCurrentCalculationMethod() const { return method; }
-
-signals:
-    void si_renderingStateChanged(bool isRendering);
-
-public slots:
-    void sl_visibleRangeChanged();
-    void sl_redraw();
-    void sl_drawGraph();
-    void sl_highlightingChanged();
-
-    void sl_graphOrientationChanged(MSAGraphOverviewDisplaySettings::OrientationMode orientation);
-    void sl_graphTypeChanged(MSAGraphOverviewDisplaySettings::GraphType type);
-    void sl_graphColorChanged(QColor color);
-    void sl_calculationMethodChanged(MSAGraphCalculationMethod method);
-
-    void sl_startRendering();
-    void sl_stopRendering();
-
-    void sl_blockRendering();
-    void sl_unblockRendering(bool update);
-
-protected:
-    void paintEvent(QPaintEvent* e);
-    void resizeEvent(QResizeEvent* e);
-
-private:
-    void drawVisibleRange(QPainter& p);
-    void drawOverview(QPainter& p);
-    void moveVisibleRange(QPoint pos);
-
-    QPixmap             cachedConsensus;
-
-    bool redrawGraph;
-    bool isRendering;
-    bool isBlocked;
-    int lastDrawnVersion;
-
-    BackgroundTaskRunner<QPolygonF>     graphCalculationTaskRunner;
-
-    MSAGraphOverviewDisplaySettings*    displaySettings;
-    MSAGraphCalculationMethod           method;
-
-    MSAGraphCalculationTask*            graphCalculationTask;
-};
-
-} // namespace
-
-#endif // _U2_MSA_GRAPH_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.cpp
deleted file mode 100644
index 8f147b7..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MSAOverview.h"
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorSequenceArea.h>
-
-#include <QtGui/QMouseEvent>
-#include <QPainter>
-
-namespace U2 {
-
-MSAOverview::MSAOverview(MSAEditorUI *_ui)
-    : editor(_ui->getEditor()),
-      ui(_ui),
-      sequenceArea(_ui->getSequenceArea())
-{
-    connect(sequenceArea, SIGNAL(si_visibleRangeChanged()), this, SLOT(sl_visibleRangeChanged()));
-    connect(sequenceArea, SIGNAL(si_selectionChanged(MSAEditorSelection,MSAEditorSelection)),
-            SLOT(sl_selectionChanged()));
-    connect(editor->getMSAObject(), SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-            SLOT(sl_redraw()));
-}
-
-void MSAOverview::mousePressEvent(QMouseEvent *me) {
-    if (!isValid()) {
-        return;
-    }
-
-    if (me->buttons() == Qt::LeftButton) {
-        visibleRangeIsMoving = true;
-        setCursor(Qt::ClosedHandCursor);
-        moveVisibleRange(me->pos());
-    }
-    QWidget::mousePressEvent(me);
-}
-
-void MSAOverview::mouseMoveEvent(QMouseEvent *me) {
-    if (!isValid()) {
-        return;
-    }
-
-    if ((me->buttons() & Qt::LeftButton) && visibleRangeIsMoving) {
-        moveVisibleRange(me->pos());
-    }
-    QWidget::mouseMoveEvent(me);
-}
-
-void MSAOverview::mouseReleaseEvent(QMouseEvent *me) {
-    if (!isValid()) {
-        return;
-    }
-
-    if ((me->buttons() & Qt::LeftButton) && visibleRangeIsMoving) {
-        visibleRangeIsMoving = false;
-        setCursor(Qt::ArrowCursor);
-    }
-    QWidget::mouseReleaseEvent(me);
-}
-
-void MSAOverview::setVisibleRangeForEmptyAlignment() {
-    cachedVisibleRange = rect();
-}
-
-void MSAOverview::showWarning(QPainter& painter, QPaintEvent *e, const QString& warningMessage) {
-    painter.fillRect(rect(), Qt::gray);
-
-    QFontMetrics metrics(painter.font(), this);
-    painter.drawText(rect(), Qt::AlignCenter, metrics.elidedText(
-        warningMessage,
-        Qt::ElideRight,
-        rect().width()));
-
-    QWidget::paintEvent(e);
-    return;
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.h
deleted file mode 100644
index 3598de5..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverview.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_OVERVIEW_H_
-#define _U2_MSA_OVERVIEW_H_
-
-
-#include <U2Core/global.h>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-
-
-namespace U2 {
-
-class MSAEditor;
-class MSAEditorUI;
-class MSAEditorSequenceArea;
-
-#define VISIBLE_RANGE_COLOR QColor(230, 230, 230, 180)
-#define SELECTION_COLOR QColor(80, 160, 200, 180)
-#define VISIBLE_RANGE_CRITICAL_SIZE 5
-
-
-class U2VIEW_EXPORT MSAOverview : public QWidget {
-    Q_OBJECT
-public:
-    MSAOverview(MSAEditorUI *_ui);
-    virtual bool isValid() const { return false; }
-    virtual QPixmap getView() { return QPixmap(); }
-
-public slots:
-    virtual void sl_visibleRangeChanged(){}
-    virtual void sl_selectionChanged() {}
-    virtual void sl_redraw(){}
-
-protected:
-    void mousePressEvent(QMouseEvent* );
-    void mouseMoveEvent(QMouseEvent* );
-    void mouseReleaseEvent(QMouseEvent* );
-
-    virtual void drawOverview(QPainter&){}
-    virtual void drawVisibleRange(QPainter&){}
-    virtual void drawSelection(QPainter&){}
-
-    void setVisibleRangeForEmptyAlignment();
-
-    virtual void moveVisibleRange(QPoint){}
-    void showWarning(QPainter& painter, QPaintEvent *e, const QString& warningMessage);
-
-protected:
-    MSAEditor*      editor;
-    MSAEditorUI*    ui;
-    MSAEditorSequenceArea*  sequenceArea;
-
-    QPixmap cachedView;
-    QRect   cachedSelection;
-    QRect   cachedVisibleRange;
-
-    bool visibleRangeIsMoving;
-
-    double  stepX;
-    double  stepY;
-};
-
-} // namespace
-
-#endif // _U2_MSA_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp
deleted file mode 100644
index 6f66eb9..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QColorDialog>
-
-#include <U2Core/QObjectScopedPointer.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <U2Gui/ExportImageDialog.h>
-#include <U2Gui/MainWindow.h>
-
-#include "MSAOverviewContextMenu.h"
-#include "MSAOverviewImageExportTask.h"
-#include "MSASimpleOverview.h"
-#include "../MSAEditorOverviewArea.h"
-
-namespace U2 {
-
-MSAOverviewContextMenu::MSAOverviewContextMenu(MSASimpleOverview *sOverview, MSAGraphOverview *gOverview)
-    : simpleOverview(sOverview),
-      graphOverview(gOverview)
-{
-    SAFE_POINT(simpleOverview != NULL, tr("Overview is NULL"), );
-    SAFE_POINT(graphOverview != NULL, tr("Graph overview is NULL"), );
-
-    setObjectName("msa_overview_context_menu");
-
-    initSimpleOverviewAction();
-    initExportAsImageAction();
-    addSeparator();
-    initDisplaySettingsMenu();
-    initCalculationMethodMenu();
-
-    colorAction = new QAction(tr("Set color..."), this);
-    colorAction->setObjectName("Set color");
-    displaySettingsMenu->addAction(colorAction);
-
-    connectSlots();
-}
-
-void MSAOverviewContextMenu::connectSlots() {
-
-    connect(showSimpleOverviewAction, SIGNAL(toggled(bool)), simpleOverview, SLOT(setVisible(bool)));
-
-    connect(exportAsImage, SIGNAL(triggered()), SLOT(sl_exportAsImageTriggered()));
-    connect(graphOverview, SIGNAL(si_renderingStateChanged(bool)), exportAsImage, SLOT(setDisabled(bool)));
-
-    connect(graphTypeActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_graphTypeActionTriggered(QAction*)));
-
-    connect(orientationActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_graphOrientationActionTriggered(QAction*)));
-
-    connect(colorAction, SIGNAL(triggered()), SLOT(sl_colorActionTriggered()));
-
-    connect(calculationMethodActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_caclulationMethodActionTriggered(QAction*)));
-
-}
-
-void MSAOverviewContextMenu::sl_exportAsImageTriggered() {
-    MSAOverviewImageExportController factory(simpleOverview, graphOverview);
-    QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory, ExportImageDialog::MSA, ExportImageDialog::NoScaling, p);
-    dialog->exec();
-}
-
-void MSAOverviewContextMenu::sl_graphTypeActionTriggered(QAction *action) {
-    if (action == lineGraphAction) {
-        emit si_graphTypeSelected(MSAGraphOverviewDisplaySettings::Line);
-    }
-    if (action == areaGraphAction) {
-        emit si_graphTypeSelected(MSAGraphOverviewDisplaySettings::Area);
-    }
-    if (action == histogramGraphAction) {
-        emit si_graphTypeSelected(MSAGraphOverviewDisplaySettings::Hystogram);
-    }
-}
-
-void MSAOverviewContextMenu::sl_graphOrientationActionTriggered(QAction *action) {
-    if (action == topToBottomOrientationAction) {
-        emit si_graphOrientationSelected(MSAGraphOverviewDisplaySettings::FromTopToBottom);
-    } else {
-        emit si_graphOrientationSelected(MSAGraphOverviewDisplaySettings::FromBottomToTop);
-    }
-}
-
-void MSAOverviewContextMenu::sl_colorActionTriggered() {
-    QObjectScopedPointer<QColorDialog> colorDialog = new QColorDialog(graphOverview->getCurrentColor(), this);
-#ifdef Q_OS_MAC
-    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
-        colorDialog->setOption(QColorDialog::DontUseNativeDialog);
-    }
-#endif
-
-    colorDialog->exec();
-    CHECK(!colorDialog.isNull(), );
-
-    if (QDialog::Accepted == colorDialog->result()) {
-        emit si_colorSelected(colorDialog->selectedColor());
-    }
-}
-
-void MSAOverviewContextMenu::sl_caclulationMethodActionTriggered(QAction *action) {
-    if (action == strictMethodAction) {
-        emit si_calculationMethodSelected(Strict);
-    }
-    if (action == gapMethodAction) {
-        emit si_calculationMethodSelected(Gaps);
-    }
-    if (action == clustalMethodAction) {
-        emit si_calculationMethodSelected(Clustal);
-    }
-    if (action == highlightingMethodAction) {
-        emit si_calculationMethodSelected(Highlighting);
-    }
-}
-
-void MSAOverviewContextMenu::initSimpleOverviewAction() {
-    showSimpleOverviewAction = createCheckableAction(tr("Show simple overview"));
-    showSimpleOverviewAction->setObjectName("Show simple overview");
-    showSimpleOverviewAction->setChecked( simpleOverview->isVisible() );
-    addAction(showSimpleOverviewAction);
-}
-
-void MSAOverviewContextMenu::initExportAsImageAction() {
-    exportAsImage = new QAction(tr("Export as image"), this);
-    exportAsImage->setObjectName("Export as image");
-    addAction(exportAsImage);
-}
-
-void MSAOverviewContextMenu::initDisplaySettingsMenu() {
-    displaySettingsMenu = addMenu(tr("Display settings..."));
-    displaySettingsMenu->menuAction()->setObjectName("Display settings");
-    initGraphTypeSubmenu();
-    initOrientationSubmenu();
-}
-
-void MSAOverviewContextMenu::initCalculationMethodMenu() {
-    calculationMethodMenu = addMenu(tr("Calculation method..."));
-
-    calculationMethodActionGroup = new QActionGroup(calculationMethodMenu);
-    strictMethodAction = createCheckableAction(tr("Strict"), calculationMethodActionGroup);
-    gapMethodAction = createCheckableAction(tr("Gaps"), calculationMethodActionGroup);
-    clustalMethodAction = createCheckableAction(tr("Clustal"), calculationMethodActionGroup);
-    highlightingMethodAction = createCheckableAction(tr("Highlighting"), calculationMethodActionGroup);
-
-    calculationMethodMenu->menuAction()->setObjectName("Calculation method");
-    strictMethodAction->setObjectName("Strict");
-    gapMethodAction->setObjectName("Gaps");
-    clustalMethodAction->setObjectName("Clustal");
-    highlightingMethodAction->setObjectName("Highlighting");
-
-
-    switch (graphOverview->getCurrentCalculationMethod()) {
-    case Strict:
-        strictMethodAction->setChecked(true);
-        break;
-    case Gaps:
-        gapMethodAction->setChecked(true);
-        break;
-    case Clustal:
-        clustalMethodAction->setChecked(true);
-        break;
-    case Highlighting:
-        highlightingMethodAction->setChecked(true);
-        break;
-    }
-
-    calculationMethodMenu->addActions(calculationMethodActionGroup->actions());
-}
-
-void MSAOverviewContextMenu::initGraphTypeSubmenu() {
-    graphTypeMenu = displaySettingsMenu->addMenu(tr("Graph type"));
-    graphTypeMenu->menuAction()->setObjectName("Graph type");
-
-    graphTypeActionGroup = new QActionGroup(graphTypeMenu);
-    histogramGraphAction = createCheckableAction(tr("Histogram"), graphTypeActionGroup);
-    lineGraphAction = createCheckableAction(tr("Line graph"), graphTypeActionGroup);
-    areaGraphAction = createCheckableAction(tr("Area graph"), graphTypeActionGroup);
-
-    histogramGraphAction->setObjectName("Histogram");
-    lineGraphAction->setObjectName("Line graph");
-    areaGraphAction->setObjectName("Area graph");
-
-    switch (graphOverview->getCurrentGraphType()) {
-    case MSAGraphOverviewDisplaySettings::Hystogram:
-        histogramGraphAction->setChecked(true);
-        break;
-    case MSAGraphOverviewDisplaySettings::Line:
-        lineGraphAction->setChecked(true);
-        break;
-    default:
-        areaGraphAction->setChecked(true);
-    }
-
-    graphTypeMenu->addActions(graphTypeActionGroup->actions());
-}
-
-void MSAOverviewContextMenu::initOrientationSubmenu() {
-    orientationMenu = displaySettingsMenu->addMenu(tr("Orientation"));
-    orientationMenu->menuAction()->setObjectName("Orientation");
-
-    orientationActionGroup = new QActionGroup(orientationMenu);
-    topToBottomOrientationAction = createCheckableAction(tr("Top to bottom"), orientationActionGroup);
-    bottomToTopOrientationAction = createCheckableAction(tr("Bottom to top"), orientationActionGroup);
-    orientationMenu->addActions(orientationActionGroup->actions());
-
-    topToBottomOrientationAction->setObjectName("Top to bottom");
-    bottomToTopOrientationAction->setObjectName("Bottom to top");
-
-    if (graphOverview->getCurrentOrientationMode() == MSAGraphOverviewDisplaySettings::FromBottomToTop) {
-        bottomToTopOrientationAction->setChecked(true);
-    } else {
-        topToBottomOrientationAction->setChecked(true);
-    }
-}
-
-QAction* MSAOverviewContextMenu::createCheckableAction(const QString &text, QActionGroup* group) {
-    QAction* a = new QAction(text, this);
-    a->setCheckable(true);
-
-    if (group != NULL) {
-        group->addAction(a);
-    }
-
-    return a;
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.h
deleted file mode 100644
index 8d6f4b7..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewContextMenu.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
-#define _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
-
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
-
-#include "MSAGraphOverview.h"
-
-
-namespace U2 {
-
-class MSASimpleOverview;
-class MSAEditorOverviewArea;
-
-class MSAOverviewContextMenu : public QMenu {
-    Q_OBJECT
-public:
-    MSAOverviewContextMenu(MSASimpleOverview *so, MSAGraphOverview *go);
-private:
-    void connectSlots();
-signals:
-    void si_graphTypeSelected(MSAGraphOverviewDisplaySettings::GraphType type);
-    void si_graphOrientationSelected(MSAGraphOverviewDisplaySettings::OrientationMode orientation);
-    void si_colorSelected(QColor color);
-    void si_calculationMethodSelected(MSAGraphCalculationMethod method);
-
-public slots:
-    void sl_exportAsImageTriggered();
-    void sl_graphTypeActionTriggered(QAction*);
-    void sl_graphOrientationActionTriggered(QAction*);
-    void sl_colorActionTriggered();
-    void sl_caclulationMethodActionTriggered(QAction*);
-
-private:
-    void initSimpleOverviewAction();
-    void initExportAsImageAction();
-    void initDisplaySettingsMenu();
-    void initCalculationMethodMenu();
-
-    void initGraphTypeSubmenu();
-    void initOrientationSubmenu();
-
-    QAction*    createCheckableAction(const QString& text, QActionGroup* group = NULL);
-
-    MSASimpleOverview*  simpleOverview;
-    MSAGraphOverview*   graphOverview;
-
-    QAction*            showSimpleOverviewAction;
-    QAction*            exportAsImage;
-
-    QMenu*              displaySettingsMenu;
-    QMenu*              graphTypeMenu;
-
-    QActionGroup*   graphTypeActionGroup;
-    QAction*            histogramGraphAction;
-    QAction*            lineGraphAction;
-    QAction*            areaGraphAction;
-
-    QMenu*              orientationMenu;
-
-    QActionGroup*   orientationActionGroup;
-    QAction*            topToBottomOrientationAction;
-    QAction*            bottomToTopOrientationAction;
-
-    QAction*    colorAction;
-
-    QMenu*              calculationMethodMenu;
-
-    QActionGroup*   calculationMethodActionGroup;
-    QAction*            strictMethodAction;
-    QAction*            gapMethodAction;
-    QAction*            clustalMethodAction;
-    QAction*            highlightingMethodAction;
-};
-
-} // namespace
-
-#endif // _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.cpp
deleted file mode 100644
index bf3f950..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QtGui/QPainter>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QCheckBox>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QVBoxLayout>
-#endif
-
-#include "MSAOverviewImageExportTask.h"
-#include "MSASimpleOverview.h"
-#include "MSAGraphOverview.h"
-
-#include <U2Core/U2SafePoints.h>
-
-namespace U2 {
-
-
-MSAOverviewImageExportToBitmapTask::MSAOverviewImageExportToBitmapTask(MSASimpleOverview *simpleOverview,
-                                                                       MSAGraphOverview *graphOverview,
-                                                                       const MSAOverviewImageExportSettings &overviewSettings,
-                                                                       const ImageExportTaskSettings& settings)
-    : ImageExportTask(settings),
-      simpleOverview(simpleOverview),
-      graphOverview(graphOverview),
-      overviewSettings(overviewSettings)
-{
-    SAFE_POINT_EXT(simpleOverview != NULL, setError(tr("Overview is NULL")), );
-    SAFE_POINT_EXT(graphOverview != NULL, setError(tr("Graph overview is NULL")), );
-    CHECK_EXT( overviewSettings.exportGraphOverview || overviewSettings.exportSimpleOverview,
-            setError(tr("Nothing to export. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
-}
-
-void MSAOverviewImageExportToBitmapTask::run() {
-    SAFE_POINT_EXT( settings.isBitmapFormat(),
-                    setError(WRONG_FORMAT_MESSAGE.arg(settings.format).arg("MSAOverviewImageExportToBitmapTask")), );
-    QPixmap pixmap(settings.imageSize.width(), settings.imageSize.height());
-    QPainter p(&pixmap);
-
-    if (overviewSettings.exportSimpleOverview) {
-        const QPixmap pixmap = simpleOverview->getView();
-        p.drawPixmap(simpleOverview->rect(), pixmap);
-        p.translate(0, simpleOverview->height());
-    }
-    if (overviewSettings.exportGraphOverview) {
-        const QPixmap pixmap = graphOverview->getView();
-        p.drawPixmap(graphOverview->rect(), pixmap);
-    }
-    p.end();
-
-    CHECK_EXT( pixmap.save(settings.fileName, qPrintable(settings.format), settings.imageQuality), setError(tr("FAIL")), );
-}
-
-MSAOverviewImageExportController::MSAOverviewImageExportController(MSASimpleOverview *simpleOverview,
-                                                                     MSAGraphOverview *graphOverview)
-    : ImageExportController(),
-      simpleOverview(simpleOverview),
-      graphOverview(graphOverview)
-{
-    SAFE_POINT(simpleOverview != NULL, QObject::tr("Overview is NULL"), );
-    SAFE_POINT(graphOverview != NULL, QObject::tr("Graph overview is NULL"), );
-    shortDescription = tr("Alignment overview");
-    initSettingsWidget();
-}
-
-int MSAOverviewImageExportController::getImageWidth() const {
-    return graphOverview->width();
-}
-
-int MSAOverviewImageExportController::getImageHeight() const {
-    int h = 0;
-    if (exportSimpleOverview->isChecked()) {
-        h += simpleOverview->height();
-    }
-    if (exportGraphOverview->isChecked()) {
-        h += graphOverview->height();
-    }
-    return h;
-}
-
-Task* MSAOverviewImageExportController::getExportToBitmapTask(const ImageExportTaskSettings &settings) const {
-    MSAOverviewImageExportSettings overviewSettings(exportSimpleOverview->isChecked(),
-                                                    exportGraphOverview->isChecked());
-    // overview has fixed size
-    ImageExportTaskSettings copySettings = settings;
-    copySettings.imageSize = QSize(getImageWidth(), getImageHeight());
-    return new MSAOverviewImageExportToBitmapTask(simpleOverview, graphOverview,
-                                                  overviewSettings, copySettings);
-}
-
-void MSAOverviewImageExportController::initSettingsWidget() {
-    settingsWidget = new QWidget();
-    exportSimpleOverview = new QCheckBox(QObject::tr("Export simple overview"), settingsWidget);
-    exportGraphOverview = new QCheckBox(QObject::tr("Export graph overview"), settingsWidget);
-
-    exportSimpleOverview->setObjectName("export_msa_simple_overview");
-    exportGraphOverview->setObjectName("export_msa_graph_overview");
-
-    QVBoxLayout* layout = new QVBoxLayout(settingsWidget);
-    layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
-    layout->setContentsMargins(0, 0, 0, 0);
-
-    layout->addWidget(exportSimpleOverview);
-    layout->addWidget(exportGraphOverview);
-
-    if (!simpleOverview->isValid()) {
-        exportSimpleOverview->setDisabled(true);
-    } else {
-        exportSimpleOverview->setChecked(true);
-    }
-    exportGraphOverview->setChecked(true);
-
-    settingsWidget->setLayout(layout);
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.h b/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.h
deleted file mode 100644
index c37d23a..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSAOverviewImageExportTask.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
-#define _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
-
-#include <U2Gui/ImageExportTask.h>
-
-class QCheckBox;
-
-namespace U2 {
-
-class MSASimpleOverview;
-class MSAGraphOverview;
-
-class MSAOverviewImageExportSettings {
-public:
-    MSAOverviewImageExportSettings(bool exportSimpleOverview = false,
-                                   bool exportGraphOverview = true)
-        : exportSimpleOverview(exportSimpleOverview),
-          exportGraphOverview(exportGraphOverview) {}
-
-    bool exportSimpleOverview;
-    bool exportGraphOverview;
-};
-
-
-class MSAOverviewImageExportToBitmapTask : public ImageExportTask {
-    Q_OBJECT
-public:
-    MSAOverviewImageExportToBitmapTask(MSASimpleOverview *simpleOverview, MSAGraphOverview *graphOverview,
-                                       const MSAOverviewImageExportSettings &overviewSettings,
-                                       const ImageExportTaskSettings& settings);
-    void run();
-private:
-    MSASimpleOverview*  simpleOverview;
-    MSAGraphOverview*   graphOverview;
-    MSAOverviewImageExportSettings  overviewSettings;
-};
-
-
-class MSAOverviewImageExportController : public ImageExportController {
-    Q_OBJECT
-public:
-    MSAOverviewImageExportController(MSASimpleOverview *simpleOverview, MSAGraphOverview *graphOverview);
-
-    int getImageWidth() const;
-    int getImageHeight() const;
-
-protected:
-    void initSettingsWidget();
-
-    Task* getExportToBitmapTask(const ImageExportTaskSettings &settings) const;
-
-private:
-    MSASimpleOverview*  simpleOverview;
-    MSAGraphOverview*   graphOverview;
-
-    QCheckBox*   exportSimpleOverview;
-    QCheckBox*   exportGraphOverview;
-};
-
-} // namespace
-
-#endif // _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
deleted file mode 100644
index 5e6066e..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QMouseEvent>
-#include <QPainter>
-
-#include <U2Algorithm/MsaColorScheme.h>
-#include <U2Algorithm/MsaHighlightingScheme.h>
-
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorSequenceArea.h>
-
-#include "MSASimpleOverview.h"
-#include "MSAGraphCalculationTask.h"
-
-namespace U2 {
-
-MSASimpleOverview::MSASimpleOverview(MSAEditorUI *_ui)
-    : MSAOverview(_ui),
-      redrawMSAOverview(true),
-      redrawSelection(true)
-{
-    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-    setFixedHeight(FIXED_HEIGTH);
-
-    setVisible(false);
-}
-
-bool MSASimpleOverview::isValid() const {
-    if (width() < editor->getAlignmentLen() || height() < editor->getNumSequences()) {
-        return false;
-    }
-    return true;
-}
-
-
-QPixmap MSASimpleOverview::getView() {
-    resize(ui->width(), FIXED_HEIGTH);
-    if (cachedMSAOverview.isNull()) {
-        cachedMSAOverview = QPixmap(size());
-        QPainter pOverview(&cachedMSAOverview);
-        drawOverview(pOverview);
-        redrawMSAOverview = false;
-    }
-    return cachedMSAOverview;
-}
-
-void MSASimpleOverview::sl_visibleRangeChanged() {
-    if (!isValid()) {
-        return;
-    }
-    update();
-}
-
-void MSASimpleOverview::sl_selectionChanged() {
-    if (!isValid()) {
-        return;
-    }
-    redrawSelection = true;
-
-    update();
-}
-
-void MSASimpleOverview::sl_redraw() {
-    redrawMSAOverview = true;
-    redrawSelection = true;
-
-    update();
-}
-
-void MSASimpleOverview::sl_highlightingChanged() {
-    if (!isValid()) {
-        return;
-    }
-    redrawMSAOverview = true;
-    update();
-}
-
-void MSASimpleOverview::paintEvent(QPaintEvent *e) {
-    if (!isValid()) {
-        QPainter p(this);
-        showWarning(p, e, tr("Multiple sequence alignment is too big for current window size.\nSimple overview is unavailable."));
-        return;
-    }
-
-    if (redrawMSAOverview) {
-        cachedMSAOverview = QPixmap(size());
-        QPainter pOverview(&cachedMSAOverview);
-        drawOverview(pOverview);
-        redrawMSAOverview = false;
-    }
-    cachedView = cachedMSAOverview;
-
-    QPainter pVisibleRange(&cachedView);
-    drawVisibleRange(pVisibleRange);
-    pVisibleRange.end();
-
-    if (redrawSelection) {
-        recalculateSelection();
-        redrawSelection = false;
-    }
-
-    QPainter pSelection(&cachedView);
-    drawSelection(pSelection);
-    pSelection.end();
-
-    QPainter p(this);
-    p.drawPixmap(0, 0, cachedView);
-    QWidget::paintEvent(e);
-}
-
-void MSASimpleOverview::resizeEvent(QResizeEvent *e) {
-    redrawMSAOverview = true;
-    redrawSelection = true;
-    QWidget::resizeEvent(e);
-}
-
-void MSASimpleOverview::drawOverview(QPainter &p) {
-    p.fillRect(cachedMSAOverview.rect(), Qt::white);
-
-    if (editor->isAlignmentEmpty()) {
-        return;
-    }
-
-    recalculateScale();
-
-    QString highlightingSchemeId = sequenceArea->getCurrentHighlightingScheme()->getFactory()->getId();
-
-    MAlignmentObject* mAlignmentObj = editor->getMSAObject();
-    SAFE_POINT(NULL != mAlignmentObj, tr("Incorrect multiple alignment object!"), );
-    const MAlignment &mAlignment = mAlignmentObj->getMAlignment();
-
-    U2OpStatusImpl os;
-    for (int seq = 0; seq < editor->getNumSequences(); seq++) {
-        for (int pos = 0; pos < editor->getAlignmentLen(); pos++) {
-            QRect rect;
-            rect.setY( qRound( stepY * (double)seq ) );
-            rect.setX( qRound( stepX * (double)pos ) );
-
-            int prev = qRound( stepY * (double)seq );
-            int next = qRound( stepY * (double)(seq + 1) );
-            rect.setHeight( next - prev );
-
-            prev = qRound( stepX * (double)pos );
-            next = qRound( stepX * (double)(pos + 1) );
-            rect.setWidth( next - prev );
-
-            QColor color = sequenceArea->getCurrentColorScheme()->getColor(seq, pos, mAlignmentObj->charAt(seq, pos));
-            if (MSAHighlightingOverviewCalculationTask::isGapScheme(highlightingSchemeId)) {
-                color = Qt::gray;
-            }
-
-            bool drawColor = true;
-            int refPos = -1;;
-            qint64 refId = editor->getReferenceRowId();
-            if (refId != MAlignmentRow::invalidRowId()) {
-                refPos = mAlignment.getRowIndexByRowId(refId, os);
-                SAFE_POINT_OP(os, );
-            }
-            drawColor = MSAHighlightingOverviewCalculationTask::isCellHighlighted(
-                        mAlignment,
-                        sequenceArea->getCurrentHighlightingScheme(),
-                        sequenceArea->getCurrentColorScheme(),
-                        seq, pos,
-                        refPos);
-
-            if (color.isValid() && drawColor) {
-                p.fillRect(rect, color);
-            }
-        }
-    }
-    p.setPen(Qt::gray);
-    p.drawRect( rect().adjusted(0, 0, -1, -1) );
-}
-
-void MSASimpleOverview::drawVisibleRange(QPainter &p) {
-    if (editor->isAlignmentEmpty()) {
-        setVisibleRangeForEmptyAlignment();
-    } else {
-        stepX = width() / (double)editor->getAlignmentLen();
-
-        cachedVisibleRange.setX(qRound(stepX * sequenceArea->getFirstVisibleBase()));
-        cachedVisibleRange.setWidth(qRound(stepX * (sequenceArea->getLastVisibleBase(true) - sequenceArea->getFirstVisibleBase() + 1)));
-        cachedVisibleRange.setY(qRound(stepY * sequenceArea->getFirstVisibleSequence()));
-        cachedVisibleRange.setHeight(qRound(stepY * (sequenceArea->getLastVisibleSequence(true) - sequenceArea->getFirstVisibleSequence() + 1)));
-
-        if (cachedVisibleRange.width() < VISIBLE_RANGE_CRITICAL_SIZE || cachedVisibleRange.height() < VISIBLE_RANGE_CRITICAL_SIZE) {
-            p.setPen(Qt::red);
-        }
-    }
-
-    p.fillRect(cachedVisibleRange, VISIBLE_RANGE_COLOR);
-    p.drawRect(cachedVisibleRange.adjusted(0, 0, -1, -1));
-}
-
-void MSASimpleOverview::drawSelection(QPainter &p) {
-        p.fillRect(cachedSelection, SELECTION_COLOR);
-}
-
-void MSASimpleOverview::moveVisibleRange(QPoint _pos) {
-    const QRect& overviewRect = rect();
-    QRect newVisibleRange(cachedVisibleRange);
-    newVisibleRange.moveLeft(_pos.x() - (double)cachedVisibleRange.width() / 2 );
-
-    newVisibleRange.moveTop(_pos.y() - (double)cachedVisibleRange.height() / 2 );
-
-    if (!overviewRect.contains(newVisibleRange)) {
-        // fit in overview horizontally
-        if (newVisibleRange.x() < 0) {
-            newVisibleRange.moveLeft(0);
-        } else if (newVisibleRange.topRight().x() > overviewRect.width()) {
-            newVisibleRange.moveRight(overviewRect.width());
-        }
-
-        // fit in overview vertically
-        if (newVisibleRange.y() < 0) {
-            newVisibleRange.moveTop(0);
-        } else if (newVisibleRange.bottomRight().y() > overviewRect.height()) {
-            newVisibleRange.moveBottom(overviewRect.height());
-        }
-    }
-
-    int pos = qRound( newVisibleRange.x() / stepX );
-    sequenceArea->setFirstVisibleBase(pos);
-    pos = qRound( newVisibleRange.y() / stepY );
-    sequenceArea->setFirstVisibleSequence(pos);
-}
-
-void MSASimpleOverview::recalculateSelection() {
-    recalculateScale();
-
-    const MSAEditorSelection& selection = sequenceArea->getSelection();
-
-    cachedSelection.setX( qRound( selection.x() * stepX ) );
-    cachedSelection.setY( qRound( selection.y() * stepY ) );
-
-    //(!) [(a - b)*c] != [a*c] - [b*c]
-    cachedSelection.setWidth( qRound(stepX * (selection.x() + selection.width())) - qRound(stepX * selection.x()));
-    cachedSelection.setHeight( qRound(stepY * (selection.y() + selection.height())) - qRound(stepY * selection.y()));
-}
-
-void MSASimpleOverview::recalculateScale() {
-    stepX = width() / (double)editor->getAlignmentLen();
-    stepY = height() / (double)editor->getNumSequences();
-}
-
-} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
deleted file mode 100644
index ed007e1..0000000
--- a/src/corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MSA_SIMPLE_OVERVIEW_H_
-#define _U2_MSA_SIMPLE_OVERVIEW_H_
-
-#include <U2Core/global.h>
-
-#include <QWidget>
-#include "MSAOverview.h"
-
-
-namespace U2 {
-
-class MSAEditor;
-class MSAEditorUI;
-class MSAEditorSequenceArea;
-class MsaColorScheme;
-class MsaHighlightingScheme;
-
-
-class U2VIEW_EXPORT MSASimpleOverview : public MSAOverview {
-    Q_OBJECT
-public:
-    MSASimpleOverview(MSAEditorUI *ui);
-    const static int FIXED_HEIGTH = 70;
-    bool isValid() const;
-    QPixmap getView();
-
-public slots:
-    void sl_visibleRangeChanged();
-    void sl_selectionChanged();
-    void sl_redraw();
-    void sl_highlightingChanged();
-
-protected:
-    void paintEvent(QPaintEvent *e);
-    void resizeEvent(QResizeEvent *e);
-
-private:
-    void drawOverview(QPainter &p);
-    void drawVisibleRange(QPainter &p);
-    void drawSelection(QPainter &p);
-
-    void moveVisibleRange(QPoint pos);
-
-    void recalculateSelection();
-    void recalculateScale();
-
-private:
-    mutable QPixmap cachedMSAOverview;
-
-    mutable bool    redrawMSAOverview;
-    mutable bool    redrawSelection;
-};
-
-} // namespace
-
-#endif // _U2_MSA_SIMPLE_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.cpp
new file mode 100644
index 0000000..e385fe7
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.cpp
@@ -0,0 +1,62 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorOverviewArea.h"
+#include "MaGraphOverview.h"
+
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+#include <QVBoxLayout>
+
+namespace U2 {
+
+MaEditorOverviewArea::MaEditorOverviewArea(MaEditorWgt *ui, const QString& objectName)
+    : QWidget(ui),
+      isWidgetResizable(false)
+{
+    setObjectName(objectName);
+
+    layout = new QVBoxLayout();
+    layout->setMargin(0);
+    layout->setSpacing(0);
+    setLayout(layout);
+
+    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+    setContextMenuPolicy(Qt::PreventContextMenu);
+}
+
+void MaEditorOverviewArea::cancelRendering() {
+
+}
+
+bool MaEditorOverviewArea::isResizable() const {
+    return isWidgetResizable;
+}
+
+void MaEditorOverviewArea::sl_show() {
+    setVisible(!isVisible());
+}
+
+void MaEditorOverviewArea::addOverview(QWidget *overviewWgt) {
+    layout->addWidget(overviewWgt);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.h b/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.h
new file mode 100644
index 0000000..6bf6e17
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaEditorOverviewArea.h
@@ -0,0 +1,58 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_OVERVIEW_AREA_H_
+#define _U2_MA_EDITOR_OVERVIEW_AREA_H_
+
+#include <QWidget>
+
+class QVBoxLayout;
+
+namespace U2 {
+
+class MaEditorWgt;
+class MaGraphOverview;
+class MaOverviewContextMenu;
+
+class MaEditorOverviewArea : public QWidget {
+    Q_OBJECT
+public:
+    MaEditorOverviewArea(MaEditorWgt* ui, const QString& objectName);
+
+    virtual void cancelRendering();
+
+    bool isResizable() const;
+
+protected slots:
+    virtual void sl_show();
+
+protected:
+    void addOverview(QWidget* overviewWgt);
+
+    bool isWidgetResizable;
+
+private:
+    QVBoxLayout* layout;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_OVERVIEW_AREA_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.cpp
new file mode 100644
index 0000000..92d14c5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.cpp
@@ -0,0 +1,277 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPolygonF>
+
+#include <U2Algorithm/MSAConsensusAlgorithmClustal.h>
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+#include <U2Algorithm/MSAConsensusAlgorithmStrict.h>
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/MSAEditor.h>
+
+#include "MaGraphCalculationTask.h"
+
+namespace U2 {
+
+MaGraphCalculationTask::MaGraphCalculationTask(MultipleAlignmentObject* maObject, int width, int height)
+    : BackgroundTask<QPolygonF>(tr("Render overview"), TaskFlag_None),
+      ma(maObject->getMultipleAlignmentCopy()), // SANGER_TODO: getiing before any check
+      memLocker(stateInfo),
+      msaLength(0),
+      seqNumber(0),
+      width(width),
+      height(height)
+{
+    SAFE_POINT_EXT(maObject != NULL, setError(tr("MSA is NULL")), );
+    msaLength = maObject->getLength();
+    seqNumber = maObject->getNumRows();
+    if(!memLocker.tryAcquire(maObject->getMultipleAlignment()->getLength() * maObject->getMultipleAlignment()->getNumRows())) {
+        setError(memLocker.getError());
+        return;
+    }
+//    ma = msa->getMultipleAlignmentCopy();
+    connect(maObject, SIGNAL(si_invalidateAlignmentObject()), this, SLOT(cancel()));
+    connect(maObject, SIGNAL(si_startMaUpdating()), this, SLOT(cancel()));
+    connect(maObject, SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)), this, SLOT(cancel()));
+}
+
+void MaGraphCalculationTask::run() {
+    CHECK(!hasError(), );
+    emit si_calculationStarted();
+    constructPolygon(result);
+    emit si_calculationStoped();
+}
+
+void MaGraphCalculationTask::constructPolygon(QPolygonF &polygon) {
+    SAFE_POINT_EXT(width != 0, setError(tr("Overview width is zero")), );
+    stateInfo.setProgress(0);
+    emit si_progressChanged();
+
+    if (msaLength == 0 || seqNumber == 0) {
+        polygon = QPolygonF();
+        return;
+    }
+
+    double stepY = height / static_cast<double>(100);
+    QVector<QPointF> points;
+    points.append(QPointF(0, height));
+
+    if ( msaLength < width ) {
+        double stepX = width / static_cast<double>(msaLength);
+        points.append(QPointF(0, qRound( height - stepY * static_cast<double>(getGraphValue(0)))));
+        for (int pos = 0; pos < msaLength; pos++) {
+            if (isCanceled()) {
+                polygon = QPolygonF();
+                return;
+            }
+            int percent = getGraphValue(pos);
+            points.append(QPointF(qRound( stepX * static_cast<double>(pos) + stepX / 2),
+                                  height - stepY * percent));
+            stateInfo.setProgress(100 * pos / msaLength);
+            emit si_progressChanged();
+        }
+        points.append(QPointF( width, qRound( height - stepY * static_cast<double>(getGraphValue(msaLength - 1)))));
+
+    } else {
+        double stepX = msaLength / static_cast<double>(width);
+        for (int pos = 0; pos < width; pos++) {
+            double average = 0;
+            int count = 0;
+            for (int i = stepX * pos; i < qRound( stepX * (pos + 1) ); i++) {
+                if (isCanceled()) {
+                    polygon = QPolygonF();
+                    return;
+                }
+                if (i > msaLength) {
+                    break;
+                }
+                average += getGraphValue(i);
+                count++;
+            }
+            CHECK(count != 0, );
+            average /= count;
+            points.append( QPointF(pos, height - stepY * average ));
+            stateInfo.setProgress(100 * pos / width);
+            emit si_progressChanged();
+        }
+    }
+
+    points.append(QPointF(width, height));
+    polygon = QPolygonF(points);
+    stateInfo.setProgress(100);
+    emit si_progressChanged();
+}
+
+MaConsensusOverviewCalculationTask::MaConsensusOverviewCalculationTask(MultipleAlignmentObject* msa,
+                                    int width, int height)
+    : MaGraphCalculationTask(msa, width, height)
+{
+    SAFE_POINT_EXT(AppContext::getMSAConsensusAlgorithmRegistry() != NULL, setError(tr("MSAConsensusAlgorithmRegistry is NULL!")), );
+
+    MSAConsensusAlgorithmFactory* factory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(BuiltInConsensusAlgorithms::STRICT_ALGO);
+    SAFE_POINT_EXT(factory != NULL, setError(tr("Strict consensus algorithm factory is NULL")), );
+
+    SAFE_POINT_EXT(msa != NULL, setError(tr("MSA is NULL")), );
+    algorithm = factory->createAlgorithm(msa->getMultipleAlignment());
+    algorithm->setParent(this);
+}
+
+int MaConsensusOverviewCalculationTask::getGraphValue(int pos) const {
+    int score = 0;
+    algorithm->getConsensusCharAndScore(ma, pos, score);
+    return qRound(score * 100. / seqNumber);
+}
+
+MaGapOverviewCalculationTask::MaGapOverviewCalculationTask(MultipleAlignmentObject* msa, int width, int height)
+    : MaGraphCalculationTask(msa, width, height) {}
+
+int MaGapOverviewCalculationTask::getGraphValue(int pos) const {
+    int gapCounter = 0;
+    for (int seq = 0; seq < seqNumber; seq++) {
+        if (pos > ma->getLength()) {
+            continue;
+        }
+        uchar c = static_cast<uchar>(ma->charAt(seq, pos));
+        if (c == U2Msa::GAP_CHAR) {
+            gapCounter++;
+        }
+    }
+
+    return qRound(gapCounter * 100. / seqNumber);
+}
+
+MaClustalOverviewCalculationTask::MaClustalOverviewCalculationTask(MultipleAlignmentObject *msa, int width, int height)
+    : MaGraphCalculationTask(msa, width, height) {
+    SAFE_POINT_EXT(AppContext::getMSAConsensusAlgorithmRegistry() != NULL, setError(tr("MSAConsensusAlgorithmRegistry is NULL!")), );
+
+    MSAConsensusAlgorithmFactory* factory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(BuiltInConsensusAlgorithms::CLUSTAL_ALGO);
+    SAFE_POINT_EXT(factory != NULL, setError(tr("Clustal algorithm factory is NULL")), );
+
+    SAFE_POINT_EXT(msa != NULL, setError(tr("MSA is NULL")), );
+    algorithm = factory->createAlgorithm(ma);
+    algorithm->setParent(this);
+}
+
+int MaClustalOverviewCalculationTask::getGraphValue(int pos) const {
+    char c = algorithm->getConsensusChar(ma, pos);
+
+    switch (c) {
+    case '*':
+        return 100;
+    case ':':
+        return 60;
+    case '.':
+        return 30;
+    default:
+        return 0;
+    }
+}
+
+MaHighlightingOverviewCalculationTask::MaHighlightingOverviewCalculationTask(MaEditor *editor,
+                                                                               const QString &colorSchemeId,
+                                                                               const QString &highlightingSchemeId,
+                                                                               int width, int height)
+    : MaGraphCalculationTask(editor->getMaObject(), width, height) {
+
+    SAFE_POINT_EXT(AppContext::getMsaHighlightingSchemeRegistry() != NULL,
+                   setError(tr("MSA highlighting scheme registry is NULL")), );
+    MsaHighlightingSchemeFactory* f_hs = AppContext::getMsaHighlightingSchemeRegistry()->getSchemeFactoryById( highlightingSchemeId );
+    SAFE_POINT_EXT(f_hs != NULL, setError(tr("MSA highlighting scheme factory with '%1' id is NULL").arg(highlightingSchemeId)), );
+
+    highlightingScheme = f_hs->create(this, editor->getMaObject());
+    schemeId = f_hs->getId();
+
+    MsaColorSchemeFactory* f_cs = AppContext::getMsaColorSchemeRegistry()->getSchemeFactoryById( colorSchemeId );
+    colorScheme = f_cs->create(this, editor->getMaObject());
+
+    U2OpStatusImpl os;
+    refSequenceId = ma->getRowIndexByRowId(editor->getReferenceRowId(), os);
+}
+
+bool MaHighlightingOverviewCalculationTask::isCellHighlighted(const MultipleAlignment &ma, MsaHighlightingScheme *highlightingScheme,
+                                                               MsaColorScheme *colorScheme,
+                                                               int seq, int pos,
+                                                               int refSeq)
+{
+    SAFE_POINT(colorScheme != NULL, tr("Color scheme is NULL"), false);
+    SAFE_POINT(highlightingScheme != NULL, tr("Highlighting scheme is NULL"), false);
+    SAFE_POINT(highlightingScheme->getFactory() != NULL, tr("Highlighting scheme factory is NULL"), false);
+    QString schemeId = highlightingScheme->getFactory()->getId();
+
+    if (seq == refSeq || isEmptyScheme(schemeId) ||
+            ((refSeq == U2MsaRow::INVALID_ROW_ID) && !isGapScheme(schemeId) &&
+            !highlightingScheme->getFactory()->isRefFree())) {
+        if (colorScheme->getColor(seq, pos, ma->charAt(seq, pos)) != QColor()) {
+            return true;
+        }
+    }
+    else {
+        char refChar;
+        if (isGapScheme(schemeId) || highlightingScheme->getFactory()->isRefFree()) {
+            refChar = '\n';
+        } else {
+            refChar = ma->charAt(refSeq, pos);
+        }
+
+        char c = ma->charAt(seq, pos);
+        bool highlight = false;
+        QColor unused;
+        highlightingScheme->process(refChar, c, unused, highlight, pos, seq);
+        if (highlight) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+int MaHighlightingOverviewCalculationTask::getGraphValue(int pos) const {
+    CHECK(seqNumber != 0, 0);
+
+    int counter = 0;
+    for (int i = 0; i < seqNumber; i++) {
+        if ( isCellHighlighted(i, pos) ) {
+            counter++;
+        }
+    }
+
+    return 100 * counter / seqNumber;
+}
+
+bool MaHighlightingOverviewCalculationTask::isGapScheme(const QString &schemeId) {
+    return (schemeId == MsaHighlightingScheme::GAPS);
+}
+
+bool MaHighlightingOverviewCalculationTask::isEmptyScheme(const QString &schemeId) {
+    return (schemeId == MsaHighlightingScheme::EMPTY);
+}
+
+bool MaHighlightingOverviewCalculationTask::isCellHighlighted(int seq, int pos) const {
+    return isCellHighlighted(ma, highlightingScheme, colorScheme, seq, pos, refSequenceId);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.h b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.h
new file mode 100644
index 0000000..1c10992
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphCalculationTask.h
@@ -0,0 +1,125 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_GRAPH_CALCULATION_TASK_H_
+#define _U2_MSA_GRAPH_CALCULATION_TASK_H_
+
+#include <U2Core/AppResources.h>
+#include <U2Core/global.h>
+#include <U2Core/BackgroundTaskRunner.h>
+#include <U2View/MSAEditorConsensusCache.h>
+
+#include <U2Core/MultipleSequenceAlignment.h>
+
+#include <QPolygonF>
+
+namespace U2 {
+
+class MaEditor;
+class MultipleAlignmentObject;
+class MSAConsensusAlgorithm;
+class MsaColorScheme;
+class MsaHighlightingScheme;
+
+class MaGraphCalculationTask : public BackgroundTask<QPolygonF> {
+    Q_OBJECT
+public:
+    MaGraphCalculationTask(MultipleAlignmentObject* msa, int width, int height);
+
+    void run();
+signals:
+    void si_calculationStarted();
+    void si_calculationStoped();
+protected:
+    void constructPolygon(QPolygonF &polygon);
+    virtual int getGraphValue(int) const { return height; }
+
+    MultipleAlignment ma;
+    MemoryLocker memLocker;
+    int msaLength;
+    int seqNumber;
+    int width;
+    int height;
+};
+
+class MaConsensusOverviewCalculationTask : public MaGraphCalculationTask {
+    Q_OBJECT
+public:
+    MaConsensusOverviewCalculationTask(MultipleAlignmentObject* msa,
+                                        int width, int height);
+private:
+    int getGraphValue(int pos) const;
+
+    MSAConsensusAlgorithm*  algorithm;
+};
+
+class MaGapOverviewCalculationTask : public MaGraphCalculationTask {
+    Q_OBJECT
+public:
+    MaGapOverviewCalculationTask(MultipleAlignmentObject* msa,
+                                  int width, int height);
+private:
+    int getGraphValue(int pos) const;
+};
+
+class MaClustalOverviewCalculationTask : public MaGraphCalculationTask {
+    Q_OBJECT
+public:
+    MaClustalOverviewCalculationTask(MultipleAlignmentObject* msa,
+                                      int width, int height);
+private:
+    int getGraphValue(int pos) const;
+
+    MSAConsensusAlgorithm*  algorithm;
+};
+
+class MaHighlightingOverviewCalculationTask : public MaGraphCalculationTask {
+    Q_OBJECT
+public:
+    MaHighlightingOverviewCalculationTask(MaEditor* _editor,
+                                           const QString &colorSchemeId,
+                                           const QString &highlightingSchemeId,
+                                           int width, int height);
+
+    static bool isCellHighlighted(const MultipleAlignment &msa,
+                                  MsaHighlightingScheme* highlightingScheme,
+                                  MsaColorScheme* colorScheme,
+                                  int seq, int pos,
+                                  int refSeq);
+
+    static bool isGapScheme(const QString &schemeId);
+    static bool isEmptyScheme(const QString &schemeId);
+
+private:
+    int getGraphValue(int pos) const;
+
+    bool isCellHighlighted(int seq, int pos) const;
+
+    int refSequenceId;
+
+    MsaColorScheme*         colorScheme;
+    MsaHighlightingScheme*  highlightingScheme;
+    QString                 schemeId;
+};
+
+} // namespace
+
+#endif // _U2_MSA_GRAPH_CALCULATION_TASK_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.cpp
new file mode 100644
index 0000000..37b1fac
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.cpp
@@ -0,0 +1,357 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/Settings.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/MSAEditorConsensusCache.h>
+#include <U2View/MaEditorNameList.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include "MaGraphCalculationTask.h"
+#include "MaGraphOverview.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+MaGraphOverview::MaGraphOverview(MaEditorWgt *ui)
+    : MaOverview(ui),
+      redrawGraph(true),
+      isBlocked(false),
+      lastDrawnVersion(-1),
+      method(Strict),
+      graphCalculationTask(NULL)
+{
+    setFixedHeight(FIXED_HEIGHT);
+
+    displaySettings = new MaGraphOverviewDisplaySettings();
+
+    Settings *s = AppContext::getSettings();
+    CHECK(s != NULL, );
+    if (s->contains(MSA_GRAPH_OVERVIEW_COLOR_KEY)) {
+        displaySettings->color = s->getValue(MSA_GRAPH_OVERVIEW_COLOR_KEY).value<QColor>( );
+    }
+
+    if (s->contains(MSA_GRAPH_OVERVIEW_TYPE_KEY)) {
+        displaySettings->type = (MaGraphOverviewDisplaySettings::GraphType)s->getValue(MSA_GRAPH_OVERVIEW_TYPE_KEY).toInt();
+    }
+
+    if (s->contains(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY)) {
+        displaySettings->orientation = (MaGraphOverviewDisplaySettings::OrientationMode)s->getValue(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY).toInt();
+    }
+
+    connect(&graphCalculationTaskRunner,    SIGNAL(si_finished()),
+                                            SLOT(sl_redraw()));
+
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+                                    SLOT(sl_drawGraph()));
+
+    connect(ui, SIGNAL(si_startMaChanging()),
+                SLOT(sl_blockRendering()));
+    connect(ui, SIGNAL(si_stopMaChanging(bool)),
+                SLOT(sl_unblockRendering(bool)));
+
+    sl_drawGraph();
+}
+
+void MaGraphOverview::cancelRendering() {
+    if (isRendering) {
+        graphCalculationTaskRunner.cancel();
+        lastDrawnVersion = -1;
+    }
+}
+
+void MaGraphOverview::sl_redraw() {
+    redrawGraph = true;
+    MaOverview::sl_redraw();
+}
+
+void MaGraphOverview::paintEvent(QPaintEvent *e) {
+
+    QPainter p(this);
+    if (!isValid()) {
+        GUIUtils::showMessage(this, p, tr("Multiple sequence alignment is too big. Overview is unavailable."));
+        QWidget::paintEvent(e);
+        return;
+    }
+    if (isBlocked) {
+        GUIUtils::showMessage(this, p, tr("Waiting..."));
+        QWidget::paintEvent(e);
+        return;
+    }
+
+    if (!graphCalculationTaskRunner.isIdle()) {
+        GUIUtils::showMessage(this, p, tr("Overview is rendering..."));
+        QWidget::paintEvent(e);
+        return;
+    } else {
+        if (redrawGraph) {
+            cachedConsensus = QPixmap(size());
+            QPainter pConsensus(&cachedConsensus);
+            drawOverview(pConsensus);
+        }
+    }
+
+    cachedView = cachedConsensus;
+
+    QPainter pVisibleRange(&cachedView);
+    drawVisibleRange(pVisibleRange);
+
+    p.drawPixmap(0, 0, cachedView);
+    lastDrawnVersion = editor->getMaObject()->getModificationVersion();
+
+    QWidget::paintEvent(e);
+}
+
+void MaGraphOverview::resizeEvent(QResizeEvent *e) {
+    if (!isBlocked) {
+        redrawGraph = true;
+        sl_drawGraph();
+    }
+    QWidget::resizeEvent(e);
+}
+
+void MaGraphOverview::drawVisibleRange(QPainter &p) {
+    if (editor->isAlignmentEmpty()) {
+        setVisibleRangeForEmptyAlignment();
+    } else {
+        recalculateScale();
+
+        const int screenPositionX = editor->getUI()->getScrollController()->getScreenPosition().x();
+        const qint64 screenWidth = editor->getUI()->getSequenceArea()->width();
+
+        cachedVisibleRange.setY(0);
+        cachedVisibleRange.setHeight(FIXED_HEIGHT);
+        cachedVisibleRange.setX(qRound(screenPositionX / stepX));
+        cachedVisibleRange.setWidth(qRound(screenWidth / stepX));
+
+        if (cachedVisibleRange.width() == 0) {
+            cachedVisibleRange.setWidth(1);
+        }
+
+        if (cachedVisibleRange.width() < VISIBLE_RANGE_CRITICAL_SIZE || cachedVisibleRange.height() < VISIBLE_RANGE_CRITICAL_SIZE) {
+            p.setPen(Qt::red);
+        }
+    }
+
+    p.fillRect(cachedVisibleRange, VISIBLE_RANGE_COLOR);
+    p.drawRect(cachedVisibleRange.adjusted(0, 0, -1, -1));
+}
+
+void MaGraphOverview::sl_drawGraph() {
+    if (!isVisible() || isBlocked) {
+        return;
+    }
+    graphCalculationTaskRunner.cancel();
+
+    switch (method) {
+    case Strict:
+        graphCalculationTask = new MaConsensusOverviewCalculationTask(editor->getMaObject(),
+                                                                       width(), FIXED_HEIGHT);
+        break;
+    case Gaps:
+        graphCalculationTask = new MaGapOverviewCalculationTask(editor->getMaObject(),
+                                                                 width(), FIXED_HEIGHT);
+        break;
+    case Clustal:
+        graphCalculationTask = new MaClustalOverviewCalculationTask(editor->getMaObject(),
+                                                                     width(), FIXED_HEIGHT);
+        break;
+    case Highlighting:
+        MsaHighlightingScheme* hScheme = sequenceArea->getCurrentHighlightingScheme();
+        QString hSchemeId = hScheme->getFactory()->getId();
+
+        MsaColorScheme* cScheme = sequenceArea->getCurrentColorScheme();
+        QString cSchemeId = cScheme->getFactory()->getId();
+
+        graphCalculationTask = new MaHighlightingOverviewCalculationTask(editor,
+                                                                          cSchemeId,
+                                                                          hSchemeId,
+                                                                          width(), FIXED_HEIGHT);
+        break;
+    }
+
+    connect(graphCalculationTask, SIGNAL(si_calculationStarted()), SLOT(sl_startRendering()));
+    connect(graphCalculationTask, SIGNAL(si_calculationStoped()), SLOT(sl_stopRendering()));
+    graphCalculationTaskRunner.run( graphCalculationTask );
+
+    sl_redraw();
+}
+
+void MaGraphOverview::sl_highlightingChanged() {
+    if (method == Highlighting) {
+        sl_drawGraph();
+    }
+}
+
+void MaGraphOverview::sl_graphOrientationChanged(MaGraphOverviewDisplaySettings::OrientationMode orientation) {
+    if (orientation != displaySettings->orientation) {
+        displaySettings->orientation = orientation;
+
+        Settings *s = AppContext::getSettings();
+        s->setValue(MSA_GRAPH_OVERVIEW_ORIENTAION_KEY, orientation);
+
+        update();
+    }
+}
+
+void MaGraphOverview::sl_graphTypeChanged(MaGraphOverviewDisplaySettings::GraphType type) {
+    if (type != displaySettings->type) {
+        displaySettings->type = type;
+
+        Settings *s = AppContext::getSettings();
+        s->setValue(MSA_GRAPH_OVERVIEW_TYPE_KEY, type);
+
+        update();
+    }
+}
+
+void MaGraphOverview::sl_graphColorChanged(QColor color) {
+    if (color != displaySettings->color) {
+        displaySettings->color = color;
+
+        Settings *s = AppContext::getSettings();
+        s->setValue(MSA_GRAPH_OVERVIEW_COLOR_KEY, color);
+
+        update();
+    }
+}
+
+void MaGraphOverview::sl_calculationMethodChanged(MaGraphCalculationMethod _method) {
+    if (method != _method) {
+        method = _method;
+        sl_drawGraph();
+    }
+}
+
+void MaGraphOverview::sl_startRendering() {
+    isRendering = true;
+    emit si_renderingStateChanged(isRendering);
+}
+
+void MaGraphOverview::sl_stopRendering() {
+    isRendering = false;
+    emit si_renderingStateChanged(isRendering);
+}
+
+void MaGraphOverview::sl_blockRendering() {
+    disconnect(editor->getMaObject(), 0, this, 0);
+    isBlocked = true;
+}
+
+void MaGraphOverview::sl_unblockRendering(bool update) {
+    isBlocked = false;
+
+    if (update && lastDrawnVersion != editor->getMaObject()->getModificationVersion()) {
+        sl_drawGraph();
+    } else {
+        this->update();
+    }
+
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+            SLOT(sl_drawGraph()));
+}
+
+void MaGraphOverview::drawOverview(QPainter &p) {
+    if (displaySettings->orientation == MaGraphOverviewDisplaySettings::FromTopToBottom) {
+        // transform coordinate system
+        p.translate( 0, height());
+        p.scale(1, -1);
+    }
+
+    p.fillRect(cachedConsensus.rect(), Qt::white);
+
+    if (editor->getAlignmentLen() == 0) {
+        return;
+    }
+
+    p.setPen(displaySettings->color);
+    p.setBrush(displaySettings->color);
+
+    if (graphCalculationTaskRunner.getResult().isEmpty() && !editor->isAlignmentEmpty() && !isBlocked) {
+        sl_drawGraph();
+        return;
+    }
+
+    QPolygonF resultPolygon = graphCalculationTaskRunner.getResult();
+    if (!editor->isAlignmentEmpty() && resultPolygon.last().x() != width()) {
+        sl_drawGraph();
+        return;
+    }
+
+    // area graph
+    if (displaySettings->type == MaGraphOverviewDisplaySettings::Area) {
+        p.drawPolygon( resultPolygon );
+    }
+
+    // line graph
+    if (displaySettings->type == MaGraphOverviewDisplaySettings::Line) {
+        p.drawPolyline( resultPolygon );
+    }
+
+    // hystogram
+    if (displaySettings->type == MaGraphOverviewDisplaySettings::Hystogram) {
+        int size = graphCalculationTaskRunner.getResult().size();
+        for (int i = 0; i < size; i++) {
+            const QPointF point = resultPolygon.at(i);
+            QPointF nextPoint;
+            if (i != size - 1) {
+                nextPoint = resultPolygon.at(i + 1);
+            } else {
+                nextPoint = QPointF(width(), point.y());
+            }
+
+            p.drawRect( point.x(), point.y(),
+                        static_cast<int>(nextPoint.x() - point.x()) - 2 * (width() > 2 * size),
+                        height() - point.y());
+        }
+    }
+
+    // gray frame
+    p.setPen(Qt::gray);
+    p.setBrush(Qt::transparent);
+    p.drawRect( rect().adjusted( 0, (displaySettings->orientation == MaGraphOverviewDisplaySettings::FromTopToBottom),
+                                 -1, -1 * (displaySettings->orientation == MaGraphOverviewDisplaySettings::FromBottomToTop)));
+
+}
+
+void MaGraphOverview::moveVisibleRange(QPoint _pos) {
+    QRect newVisibleRange(cachedVisibleRange);
+    const QPoint newPos(qBound((cachedVisibleRange.width() - 1) / 2, _pos.x(), width() - (cachedVisibleRange.width() - 1 ) / 2), height() / 2);
+
+    newVisibleRange.moveCenter(newPos);
+
+    const int newScrollBarValue = newVisibleRange.x() * stepX;
+    ui->getScrollController()->setHScrollbarValue(newScrollBarValue);
+
+    update();
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.h
new file mode 100644
index 0000000..7a9ac0b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.h
@@ -0,0 +1,130 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_GRAPH_OVERVIEW_H_
+#define _U2_MSA_GRAPH_OVERVIEW_H_
+
+#include <U2Core/global.h>
+#include <U2Core/BackgroundTaskRunner.h>
+
+#include "MaOverview.h"
+
+namespace U2 {
+
+class MaGraphCalculationTask;
+
+class MaGraphOverviewDisplaySettings {
+public:
+    enum GraphType {
+        Hystogram = 0,
+        Line = 1,
+        Area = 2
+    };
+
+    enum OrientationMode {
+        FromTopToBottom = 0,
+        FromBottomToTop = 1
+    };
+
+    MaGraphOverviewDisplaySettings()
+        : color( Qt::gray ),
+          type(Area),
+          orientation(FromBottomToTop) {}
+
+    QColor      color;
+    GraphType   type;
+    OrientationMode orientation;
+};
+
+enum MaGraphCalculationMethod {
+    Strict,         // the most frequent nucleotide
+    Gaps,           // percent of gaps
+    Clustal,        // 0-30-60-100 groups
+    Highlighting    // count only highlighted cells
+};
+
+#define MSA_GRAPH_OVERVIEW_COLOR_KEY "msa_graph_overview_color"
+#define MSA_GRAPH_OVERVIEW_TYPE_KEY "msa_graph_overview_type"
+#define MSA_GRAPH_OVERVIEW_ORIENTAION_KEY "msa_graph_overview_orientation_key"
+
+class U2VIEW_EXPORT MaGraphOverview : public MaOverview {
+    Q_OBJECT
+public:
+    MaGraphOverview(MaEditorWgt* ui);
+    bool isValid() const { return graphCalculationTaskRunner.getError().isEmpty(); }
+    QPixmap getView() { return cachedConsensus; }
+
+    const static int FIXED_HEIGHT = 70;
+
+    void cancelRendering();
+
+    QColor getCurrentColor() const { return displaySettings->color; }
+    MaGraphOverviewDisplaySettings::GraphType getCurrentGraphType() const { return displaySettings->type; }
+    MaGraphOverviewDisplaySettings::OrientationMode getCurrentOrientationMode() const
+    { return displaySettings->orientation; }
+    MaGraphCalculationMethod getCurrentCalculationMethod() const { return method; }
+
+signals:
+    void si_renderingStateChanged(bool isRendering);
+
+public slots:
+    void sl_redraw();
+    void sl_drawGraph();
+    void sl_highlightingChanged();
+
+    void sl_graphOrientationChanged(MaGraphOverviewDisplaySettings::OrientationMode orientation);
+    void sl_graphTypeChanged(MaGraphOverviewDisplaySettings::GraphType type);
+    void sl_graphColorChanged(QColor color);
+    void sl_calculationMethodChanged(MaGraphCalculationMethod method);
+
+    void sl_startRendering();
+    void sl_stopRendering();
+
+    void sl_blockRendering();
+    void sl_unblockRendering(bool update);
+
+protected:
+    void paintEvent(QPaintEvent* e);
+    void resizeEvent(QResizeEvent* e);
+
+private:
+    void drawVisibleRange(QPainter& p);
+    void drawOverview(QPainter& p);
+    void moveVisibleRange(QPoint pos);
+
+    QPixmap             cachedConsensus;
+
+    bool redrawGraph;
+    bool isRendering;
+    bool isBlocked;
+    int lastDrawnVersion;
+
+    BackgroundTaskRunner<QPolygonF>    graphCalculationTaskRunner;
+
+    MaGraphOverviewDisplaySettings*    displaySettings;
+    MaGraphCalculationMethod           method;
+
+    MaGraphCalculationTask*            graphCalculationTask;
+};
+
+} // namespace
+
+#endif // _U2_MSA_GRAPH_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.cpp
new file mode 100644
index 0000000..ccf384b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.cpp
@@ -0,0 +1,120 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include "MaOverview.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+MaOverview::MaOverview(MaEditorWgt *ui)
+    : QWidget(ui),
+      editor(ui->getEditor()),
+      ui(ui),
+      sequenceArea(ui->getSequenceArea()),
+      stepX(0),
+      stepY(0)
+{
+    connect(sequenceArea, SIGNAL(si_visibleRangeChanged()), this, SLOT(sl_visibleRangeChanged()));
+    connect(sequenceArea, SIGNAL(si_selectionChanged(MaEditorSelection,MaEditorSelection)),
+            SLOT(sl_selectionChanged()));
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+            SLOT(sl_redraw()));
+    connect(ui->getScrollController(), SIGNAL(si_visibleAreaChanged()), SLOT(sl_redraw()));
+    connect(ui->getCollapseModel(), SIGNAL(si_toggled()), SLOT(sl_redraw()));
+}
+
+MaEditor *MaOverview::getEditor() const {
+    return editor;
+}
+
+void MaOverview::sl_visibleRangeChanged() {
+    if (!isValid()) {
+        return;
+    }
+    update();
+}
+
+void MaOverview::sl_redraw() {
+    update();
+}
+
+void MaOverview::mousePressEvent(QMouseEvent *me) {
+    if (!isValid()) {
+        return;
+    }
+
+    if (me->buttons() == Qt::LeftButton) {
+        visibleRangeIsMoving = true;
+        setCursor(Qt::ClosedHandCursor);
+        moveVisibleRange(me->pos());
+    }
+    QWidget::mousePressEvent(me);
+}
+
+void MaOverview::mouseMoveEvent(QMouseEvent *me) {
+    if (!isValid()) {
+        return;
+    }
+
+    if ((me->buttons() & Qt::LeftButton) && visibleRangeIsMoving) {
+        moveVisibleRange(me->pos());
+    }
+    QWidget::mouseMoveEvent(me);
+}
+
+void MaOverview::mouseReleaseEvent(QMouseEvent *me) {
+    if (!isValid()) {
+        return;
+    }
+
+    if ((me->buttons() & Qt::LeftButton) && visibleRangeIsMoving) {
+        visibleRangeIsMoving = false;
+        setCursor(Qt::ArrowCursor);
+    }
+    QWidget::mouseReleaseEvent(me);
+}
+
+void MaOverview::setVisibleRangeForEmptyAlignment() {
+    cachedVisibleRange = rect();
+}
+
+void MaOverview::recalculateScale() {
+    stepX = static_cast<double>(ui->getBaseWidthController()->getTotalAlignmentWidth()) / getContentWidgetWidth();
+    stepY = static_cast<double>(ui->getRowHeightController()->getTotalAlignmentHeight()) / getContentWidgetHeight();
+}
+
+int MaOverview::getContentWidgetWidth() const {
+    return width();
+}
+
+int MaOverview::getContentWidgetHeight() const {
+    return height();
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.h
new file mode 100644
index 0000000..04c622c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverview.h
@@ -0,0 +1,88 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_OVERVIEW_H_
+#define _U2_MSA_OVERVIEW_H_
+
+#include <U2Core/global.h>
+
+#include <QWidget>
+
+
+namespace U2 {
+
+class MaEditor;
+class MaEditorWgt;
+class MaEditorSequenceArea;
+
+#define VISIBLE_RANGE_COLOR QColor(230, 230, 230, 180)
+#define SELECTION_COLOR QColor(80, 160, 200, 180)
+#define VISIBLE_RANGE_CRITICAL_SIZE 5
+
+
+class U2VIEW_EXPORT MaOverview : public QWidget {
+    Q_OBJECT
+public:
+    MaOverview(MaEditorWgt *_ui);
+    virtual bool isValid() const { return false; }
+    virtual QPixmap getView() { return QPixmap(); }
+    MaEditor *getEditor() const;
+
+public slots:
+    void sl_visibleRangeChanged();
+    virtual void sl_selectionChanged() {}
+    virtual void sl_redraw();
+
+protected:
+    void mousePressEvent(QMouseEvent* );
+    void mouseMoveEvent(QMouseEvent* );
+    void mouseReleaseEvent(QMouseEvent* );
+
+    virtual void drawOverview(QPainter&){}
+    virtual void drawVisibleRange(QPainter&){}
+    virtual void drawSelection(QPainter&){}
+
+    void setVisibleRangeForEmptyAlignment();
+
+    virtual void moveVisibleRange(QPoint){}
+
+    void recalculateScale();
+
+    virtual int getContentWidgetWidth() const;
+    virtual int getContentWidgetHeight() const;
+
+    MaEditor*       editor;
+    MaEditorWgt*    ui;
+    MaEditorSequenceArea*  sequenceArea;
+
+    QPixmap cachedView;
+    QRect   cachedSelection;
+    QRect   cachedVisibleRange;
+
+    bool visibleRangeIsMoving;
+
+    double  stepX;
+    double  stepY;
+};
+
+} // namespace
+
+#endif // _U2_MSA_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.cpp
new file mode 100644
index 0000000..7214fdd
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.cpp
@@ -0,0 +1,250 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QColorDialog>
+
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ExportImageDialog.h>
+#include <U2Gui/MainWindow.h>
+
+#include "MaOverviewContextMenu.h"
+#include "MaOverviewImageExportTask.h"
+#include "MaSimpleOverview.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSAEditorOverviewArea.h"
+
+namespace U2 {
+
+MaOverviewContextMenu::MaOverviewContextMenu(QWidget *parent, MaSimpleOverview *sOverview, MaGraphOverview *gOverview)
+    : QMenu(parent),
+      simpleOverview(sOverview),
+      graphOverview(gOverview)
+{
+    SAFE_POINT(simpleOverview != NULL, tr("Overview is NULL"), );
+    SAFE_POINT(graphOverview != NULL, tr("Graph overview is NULL"), );
+
+    setObjectName("msa_overview_context_menu");
+
+    initSimpleOverviewAction();
+    initExportAsImageAction();
+    addSeparator();
+    initDisplaySettingsMenu();
+    initCalculationMethodMenu();
+
+    colorAction = new QAction(tr("Set color..."), this);
+    colorAction->setObjectName("Set color");
+    displaySettingsMenu->addAction(colorAction);
+
+    connectSlots();
+}
+
+void MaOverviewContextMenu::connectSlots() {
+
+    connect(showSimpleOverviewAction, SIGNAL(toggled(bool)), simpleOverview, SLOT(setVisible(bool)));
+
+    connect(exportAsImage, SIGNAL(triggered()), SLOT(sl_exportAsImageTriggered()));
+    connect(graphOverview, SIGNAL(si_renderingStateChanged(bool)), exportAsImage, SLOT(setDisabled(bool)));
+
+    connect(graphTypeActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_graphTypeActionTriggered(QAction*)));
+
+    connect(orientationActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_graphOrientationActionTriggered(QAction*)));
+
+    connect(colorAction, SIGNAL(triggered()), SLOT(sl_colorActionTriggered()));
+
+    connect(calculationMethodActionGroup, SIGNAL(triggered(QAction*)), SLOT(sl_caclulationMethodActionTriggered(QAction*)));
+
+}
+
+void MaOverviewContextMenu::sl_exportAsImageTriggered() {
+    MaOverviewImageExportController factory(simpleOverview, graphOverview);
+    QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
+    const QString fileName = GUrlUtils::fixFileName(graphOverview->getEditor()->getMaObject()->getGObjectName());
+    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory, ExportImageDialog::MSA, fileName, ExportImageDialog::NoScaling, p);
+    dialog->exec();
+}
+
+void MaOverviewContextMenu::sl_graphTypeActionTriggered(QAction *action) {
+    if (action == lineGraphAction) {
+        emit si_graphTypeSelected(MaGraphOverviewDisplaySettings::Line);
+    }
+    if (action == areaGraphAction) {
+        emit si_graphTypeSelected(MaGraphOverviewDisplaySettings::Area);
+    }
+    if (action == histogramGraphAction) {
+        emit si_graphTypeSelected(MaGraphOverviewDisplaySettings::Hystogram);
+    }
+}
+
+void MaOverviewContextMenu::sl_graphOrientationActionTriggered(QAction *action) {
+    if (action == topToBottomOrientationAction) {
+        emit si_graphOrientationSelected(MaGraphOverviewDisplaySettings::FromTopToBottom);
+    } else {
+        emit si_graphOrientationSelected(MaGraphOverviewDisplaySettings::FromBottomToTop);
+    }
+}
+
+void MaOverviewContextMenu::sl_colorActionTriggered() {
+    QObjectScopedPointer<QColorDialog> colorDialog = new QColorDialog(graphOverview->getCurrentColor(), this);
+#ifdef Q_OS_MAC
+    if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
+        colorDialog->setOption(QColorDialog::DontUseNativeDialog);
+    }
+#endif
+
+    colorDialog->exec();
+    CHECK(!colorDialog.isNull(), );
+
+    if (QDialog::Accepted == colorDialog->result()) {
+        emit si_colorSelected(colorDialog->selectedColor());
+    }
+}
+
+void MaOverviewContextMenu::sl_caclulationMethodActionTriggered(QAction *action) {
+    if (action == strictMethodAction) {
+        emit si_calculationMethodSelected(Strict);
+    }
+    if (action == gapMethodAction) {
+        emit si_calculationMethodSelected(Gaps);
+    }
+    if (action == clustalMethodAction) {
+        emit si_calculationMethodSelected(Clustal);
+    }
+    if (action == highlightingMethodAction) {
+        emit si_calculationMethodSelected(Highlighting);
+    }
+}
+
+void MaOverviewContextMenu::initSimpleOverviewAction() {
+    showSimpleOverviewAction = createCheckableAction(tr("Show simple overview"));
+    showSimpleOverviewAction->setObjectName("Show simple overview");
+    showSimpleOverviewAction->setChecked( simpleOverview->isVisible() );
+    addAction(showSimpleOverviewAction);
+}
+
+void MaOverviewContextMenu::initExportAsImageAction() {
+    exportAsImage = new QAction(tr("Export as image"), this);
+    exportAsImage->setObjectName("Export as image");
+    addAction(exportAsImage);
+}
+
+void MaOverviewContextMenu::initDisplaySettingsMenu() {
+    displaySettingsMenu = addMenu(tr("Display settings..."));
+    displaySettingsMenu->menuAction()->setObjectName("Display settings");
+    initGraphTypeSubmenu();
+    initOrientationSubmenu();
+}
+
+void MaOverviewContextMenu::initCalculationMethodMenu() {
+    calculationMethodMenu = addMenu(tr("Calculation method..."));
+
+    calculationMethodActionGroup = new QActionGroup(calculationMethodMenu);
+    strictMethodAction = createCheckableAction(tr("Strict"), calculationMethodActionGroup);
+    gapMethodAction = createCheckableAction(tr("Gaps"), calculationMethodActionGroup);
+    clustalMethodAction = createCheckableAction(tr("Clustal"), calculationMethodActionGroup);
+    highlightingMethodAction = createCheckableAction(tr("Highlighting"), calculationMethodActionGroup);
+
+    calculationMethodMenu->menuAction()->setObjectName("Calculation method");
+    strictMethodAction->setObjectName("Strict");
+    gapMethodAction->setObjectName("Gaps");
+    clustalMethodAction->setObjectName("Clustal");
+    highlightingMethodAction->setObjectName("Highlighting");
+
+
+    switch (graphOverview->getCurrentCalculationMethod()) {
+    case Strict:
+        strictMethodAction->setChecked(true);
+        break;
+    case Gaps:
+        gapMethodAction->setChecked(true);
+        break;
+    case Clustal:
+        clustalMethodAction->setChecked(true);
+        break;
+    case Highlighting:
+        highlightingMethodAction->setChecked(true);
+        break;
+    }
+
+    calculationMethodMenu->addActions(calculationMethodActionGroup->actions());
+}
+
+void MaOverviewContextMenu::initGraphTypeSubmenu() {
+    graphTypeMenu = displaySettingsMenu->addMenu(tr("Graph type"));
+    graphTypeMenu->menuAction()->setObjectName("Graph type");
+
+    graphTypeActionGroup = new QActionGroup(graphTypeMenu);
+    histogramGraphAction = createCheckableAction(tr("Histogram"), graphTypeActionGroup);
+    lineGraphAction = createCheckableAction(tr("Line graph"), graphTypeActionGroup);
+    areaGraphAction = createCheckableAction(tr("Area graph"), graphTypeActionGroup);
+
+    histogramGraphAction->setObjectName("Histogram");
+    lineGraphAction->setObjectName("Line graph");
+    areaGraphAction->setObjectName("Area graph");
+
+    switch (graphOverview->getCurrentGraphType()) {
+    case MaGraphOverviewDisplaySettings::Hystogram:
+        histogramGraphAction->setChecked(true);
+        break;
+    case MaGraphOverviewDisplaySettings::Line:
+        lineGraphAction->setChecked(true);
+        break;
+    default:
+        areaGraphAction->setChecked(true);
+    }
+
+    graphTypeMenu->addActions(graphTypeActionGroup->actions());
+}
+
+void MaOverviewContextMenu::initOrientationSubmenu() {
+    orientationMenu = displaySettingsMenu->addMenu(tr("Orientation"));
+    orientationMenu->menuAction()->setObjectName("Orientation");
+
+    orientationActionGroup = new QActionGroup(orientationMenu);
+    topToBottomOrientationAction = createCheckableAction(tr("Top to bottom"), orientationActionGroup);
+    bottomToTopOrientationAction = createCheckableAction(tr("Bottom to top"), orientationActionGroup);
+    orientationMenu->addActions(orientationActionGroup->actions());
+
+    topToBottomOrientationAction->setObjectName("Top to bottom");
+    bottomToTopOrientationAction->setObjectName("Bottom to top");
+
+    if (graphOverview->getCurrentOrientationMode() == MaGraphOverviewDisplaySettings::FromBottomToTop) {
+        bottomToTopOrientationAction->setChecked(true);
+    } else {
+        topToBottomOrientationAction->setChecked(true);
+    }
+}
+
+QAction* MaOverviewContextMenu::createCheckableAction(const QString &text, QActionGroup* group) {
+    QAction* a = new QAction(text, this);
+    a->setCheckable(true);
+
+    if (group != NULL) {
+        group->addAction(a);
+    }
+
+    return a;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.h b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.h
new file mode 100644
index 0000000..e017110
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewContextMenu.h
@@ -0,0 +1,99 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
+#define _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
+
+#include <QMenu>
+
+#include "MaGraphOverview.h"
+
+namespace U2 {
+
+class MaSimpleOverview;
+class MSAEditorOverviewArea;
+
+class MaOverviewContextMenu : public QMenu {
+    Q_OBJECT
+public:
+    MaOverviewContextMenu(QWidget *parent, MaSimpleOverview *so, MaGraphOverview *go);
+
+private:
+    void connectSlots();
+
+signals:
+    void si_graphTypeSelected(MaGraphOverviewDisplaySettings::GraphType type);
+    void si_graphOrientationSelected(MaGraphOverviewDisplaySettings::OrientationMode orientation);
+    void si_colorSelected(QColor color);
+    void si_calculationMethodSelected(MaGraphCalculationMethod method);
+
+public slots:
+    void sl_exportAsImageTriggered();
+    void sl_graphTypeActionTriggered(QAction*);
+    void sl_graphOrientationActionTriggered(QAction*);
+    void sl_colorActionTriggered();
+    void sl_caclulationMethodActionTriggered(QAction*);
+
+private:
+    void initSimpleOverviewAction();
+    void initExportAsImageAction();
+    void initDisplaySettingsMenu();
+    void initCalculationMethodMenu();
+
+    void initGraphTypeSubmenu();
+    void initOrientationSubmenu();
+
+    QAction*    createCheckableAction(const QString& text, QActionGroup* group = NULL);
+
+    MaSimpleOverview*  simpleOverview;
+    MaGraphOverview*   graphOverview;
+
+    QAction*            showSimpleOverviewAction;
+    QAction*            exportAsImage;
+
+    QMenu*              displaySettingsMenu;
+    QMenu*              graphTypeMenu;
+
+    QActionGroup*   graphTypeActionGroup;
+    QAction*            histogramGraphAction;
+    QAction*            lineGraphAction;
+    QAction*            areaGraphAction;
+
+    QMenu*              orientationMenu;
+
+    QActionGroup*   orientationActionGroup;
+    QAction*            topToBottomOrientationAction;
+    QAction*            bottomToTopOrientationAction;
+
+    QAction*    colorAction;
+
+    QMenu*              calculationMethodMenu;
+
+    QActionGroup*   calculationMethodActionGroup;
+    QAction*            strictMethodAction;
+    QAction*            gapMethodAction;
+    QAction*            clustalMethodAction;
+    QAction*            highlightingMethodAction;
+};
+
+} // namespace
+
+#endif // _U2_MSA_OVERVIEW_CONTEXT_MENU_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.cpp
new file mode 100644
index 0000000..4bfeb01
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.cpp
@@ -0,0 +1,132 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPainter>
+#include <QCheckBox>
+#include <QVBoxLayout>
+
+#include "MaOverviewImageExportTask.h"
+#include "MaSimpleOverview.h"
+#include "MaGraphOverview.h"
+
+#include <U2Core/U2SafePoints.h>
+
+namespace U2 {
+
+
+MaOverviewImageExportToBitmapTask::MaOverviewImageExportToBitmapTask(MaSimpleOverview *simpleOverview,
+                                                                       MaGraphOverview *graphOverview,
+                                                                       const MaOverviewImageExportSettings &overviewSettings,
+                                                                       const ImageExportTaskSettings& settings)
+    : ImageExportTask(settings),
+      simpleOverview(simpleOverview),
+      graphOverview(graphOverview),
+      overviewSettings(overviewSettings)
+{
+    SAFE_POINT_EXT(simpleOverview != NULL, setError(tr("Overview is NULL")), );
+    SAFE_POINT_EXT(graphOverview != NULL, setError(tr("Graph overview is NULL")), );
+    CHECK_EXT( overviewSettings.exportGraphOverview || overviewSettings.exportSimpleOverview,
+            setError(tr("Nothing to export. ") + EXPORT_FAIL_MESSAGE.arg(settings.fileName)), );
+}
+
+void MaOverviewImageExportToBitmapTask::run() {
+    SAFE_POINT_EXT( settings.isBitmapFormat(),
+                    setError(WRONG_FORMAT_MESSAGE.arg(settings.format).arg("MSAOverviewImageExportToBitmapTask")), );
+    QPixmap pixmap(settings.imageSize.width(), settings.imageSize.height());
+    QPainter p(&pixmap);
+
+    if (overviewSettings.exportSimpleOverview) {
+        const QPixmap pixmap = simpleOverview->getView();
+        p.drawPixmap(simpleOverview->rect(), pixmap);
+        p.translate(0, simpleOverview->height());
+    }
+    if (overviewSettings.exportGraphOverview) {
+        const QPixmap pixmap = graphOverview->getView();
+        p.drawPixmap(graphOverview->rect(), pixmap);
+    }
+    p.end();
+
+    CHECK_EXT( pixmap.save(settings.fileName, qPrintable(settings.format), settings.imageQuality), setError(tr("FAIL")), );
+}
+
+MaOverviewImageExportController::MaOverviewImageExportController(MaSimpleOverview *simpleOverview,
+                                                                     MaGraphOverview *graphOverview)
+    : ImageExportController(),
+      simpleOverview(simpleOverview),
+      graphOverview(graphOverview)
+{
+    SAFE_POINT(simpleOverview != NULL, QObject::tr("Overview is NULL"), );
+    SAFE_POINT(graphOverview != NULL, QObject::tr("Graph overview is NULL"), );
+    shortDescription = tr("Alignment overview");
+    initSettingsWidget();
+}
+
+int MaOverviewImageExportController::getImageWidth() const {
+    return graphOverview->width();
+}
+
+int MaOverviewImageExportController::getImageHeight() const {
+    int h = 0;
+    if (exportSimpleOverview->isChecked()) {
+        h += simpleOverview->height();
+    }
+    if (exportGraphOverview->isChecked()) {
+        h += graphOverview->height();
+    }
+    return h;
+}
+
+Task* MaOverviewImageExportController::getExportToBitmapTask(const ImageExportTaskSettings &settings) const {
+    MaOverviewImageExportSettings overviewSettings(exportSimpleOverview->isChecked(),
+                                                    exportGraphOverview->isChecked());
+    // overview has fixed size
+    ImageExportTaskSettings copySettings = settings;
+    copySettings.imageSize = QSize(getImageWidth(), getImageHeight());
+    return new MaOverviewImageExportToBitmapTask(simpleOverview, graphOverview,
+                                                  overviewSettings, copySettings);
+}
+
+void MaOverviewImageExportController::initSettingsWidget() {
+    settingsWidget = new QWidget();
+    exportSimpleOverview = new QCheckBox(QObject::tr("Export simple overview"), settingsWidget);
+    exportGraphOverview = new QCheckBox(QObject::tr("Export graph overview"), settingsWidget);
+
+    exportSimpleOverview->setObjectName("export_msa_simple_overview");
+    exportGraphOverview->setObjectName("export_msa_graph_overview");
+
+    QVBoxLayout* layout = new QVBoxLayout(settingsWidget);
+    layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
+    layout->setContentsMargins(0, 0, 0, 0);
+
+    layout->addWidget(exportSimpleOverview);
+    layout->addWidget(exportGraphOverview);
+
+    if (!simpleOverview->isValid()) {
+        exportSimpleOverview->setDisabled(true);
+    } else {
+        exportSimpleOverview->setChecked(true);
+    }
+    exportGraphOverview->setChecked(true);
+
+    settingsWidget->setLayout(layout);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.h b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.h
new file mode 100644
index 0000000..e929d39
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaOverviewImageExportTask.h
@@ -0,0 +1,83 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
+#define _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
+
+#include <U2Gui/ImageExportTask.h>
+
+class QCheckBox;
+
+namespace U2 {
+
+class MaSimpleOverview;
+class MaGraphOverview;
+
+class MaOverviewImageExportSettings {
+public:
+    MaOverviewImageExportSettings(bool exportSimpleOverview = false,
+                                   bool exportGraphOverview = true)
+        : exportSimpleOverview(exportSimpleOverview),
+          exportGraphOverview(exportGraphOverview) {}
+
+    bool exportSimpleOverview;
+    bool exportGraphOverview;
+};
+
+
+class MaOverviewImageExportToBitmapTask : public ImageExportTask {
+    Q_OBJECT
+public:
+    MaOverviewImageExportToBitmapTask(MaSimpleOverview *simpleOverview, MaGraphOverview *graphOverview,
+                                       const MaOverviewImageExportSettings &overviewSettings,
+                                       const ImageExportTaskSettings& settings);
+    void run();
+private:
+    MaSimpleOverview*  simpleOverview;
+    MaGraphOverview*   graphOverview;
+    MaOverviewImageExportSettings  overviewSettings;
+};
+
+
+class MaOverviewImageExportController : public ImageExportController {
+    Q_OBJECT
+public:
+    MaOverviewImageExportController(MaSimpleOverview *simpleOverview, MaGraphOverview *graphOverview);
+
+    int getImageWidth() const;
+    int getImageHeight() const;
+
+protected:
+    void initSettingsWidget();
+
+    Task* getExportToBitmapTask(const ImageExportTaskSettings &settings) const;
+
+private:
+    MaSimpleOverview*  simpleOverview;
+    MaGraphOverview*   graphOverview;
+
+    QCheckBox*   exportSimpleOverview;
+    QCheckBox*   exportGraphOverview;
+};
+
+} // namespace
+
+#endif // _U2_MSA_OVERVIEW_IMAGE_EXPORT_TASK_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.cpp
new file mode 100644
index 0000000..4f6725d
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.cpp
@@ -0,0 +1,311 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QHBoxLayout>
+#include <QPainter>
+#include <QPaintEvent>
+
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GraphUtils.h>
+
+#include "MaSangerOverview.h"
+#include "ov_msa/McaEditor.h"
+#include "ov_msa/McaReferenceCharController.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+
+namespace U2 {
+
+const int MaSangerOverview::READ_HEIGHT = 9;
+const int MaSangerOverview::MINIMUM_HEIGHT = 100;
+const qreal MaSangerOverview::ARROW_LINE_WIDTH = 2;
+const qreal MaSangerOverview::ARROW_HEAD_WIDTH = 6;
+const qreal MaSangerOverview::ARROW_HEAD_LENGTH = 7;
+const QColor MaSangerOverview::ARROW_DIRECT_COLOR = "blue";
+const QColor MaSangerOverview::ARROW_REVERSE_COLOR = "green";
+
+MaSangerOverview::MaSangerOverview(MaEditorWgt *ui)
+    : MaOverview(ui),
+      vScrollBar(new QScrollBar(Qt::Vertical, this)),
+      renderArea(new QWidget(this)),
+      completeRedraw(true)
+{
+    QHBoxLayout *mainLayout = new QHBoxLayout();
+    mainLayout->setSpacing(0);
+    mainLayout->setContentsMargins(0, 0, 0, 0);
+    mainLayout->setSizeConstraint(QLayout::SetMaximumSize);
+
+    mainLayout->addWidget(renderArea);
+    mainLayout->addWidget(vScrollBar);
+    setLayout(mainLayout);
+
+    renderArea->installEventFilter(this);
+
+    setMinimumHeight(MINIMUM_HEIGHT);
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)), SLOT(sl_updateScrollBar()));
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)), SLOT(sl_resetCaches()));
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)), SLOT(sl_completeRedraw()));
+    connect(ui, SIGNAL(si_completeRedraw()), SLOT(sl_completeRedraw()));
+    connect(ui->getScrollController()->getVerticalScrollBar(), SIGNAL(valueChanged(int)), SLOT(sl_screenMoved()));
+    connect(editor, SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_resetCaches()));
+    connect(editor, SIGNAL(si_fontChanged(QFont)), SLOT(sl_resetCaches()));
+    connect(vScrollBar, SIGNAL(valueChanged(int)), SLOT(sl_completeRedraw()));
+
+    sl_updateScrollBar();
+}
+
+bool MaSangerOverview::isValid() const {
+    return true;
+}
+
+QPixmap MaSangerOverview::getView() {
+    if (cachedView.isNull()) {
+        cachedView = QPixmap(renderArea->width(), getContentWidgetHeight() + getReferenceHeight());
+    }
+
+    if (cachedReferenceView.isNull()) {
+        cachedReferenceView = QPixmap(renderArea->width(), getReferenceHeight());
+    }
+
+    if (cachedReadsView.isNull()) {
+        cachedReadsView = QPixmap(renderArea->width(), getContentWidgetHeight());
+    }
+
+    if (completeRedraw) {
+        QPainter painter(&cachedView);
+        drawOverview(painter);
+        completeRedraw = false;
+    }
+    return cachedView;
+}
+
+void MaSangerOverview::sl_updateScrollBar() {
+    vScrollBar->setMinimum(0);
+    vScrollBar->setSingleStep(3);
+    const int maximum = getReadsHeight() - renderArea->height() + getReferenceHeight();
+    vScrollBar->setMaximum(maximum);
+
+    const bool prevVisibilityState = vScrollBar->isVisible();
+    vScrollBar->setVisible(maximum > 0);
+    const bool newVisibilityState = vScrollBar->isVisible();
+    if (prevVisibilityState != newVisibilityState) {
+        sl_completeRedraw();
+    }
+}
+
+void MaSangerOverview::sl_completeRedraw() {
+    completeRedraw = true;
+    renderArea->update();
+}
+
+void MaSangerOverview::sl_resetCaches() {
+    cachedReferenceHeight = -1;
+    cachedView = QPixmap();
+    cachedReferenceView = QPixmap();
+    cachedReadsView = QPixmap();
+    sl_completeRedraw();
+}
+
+void MaSangerOverview::sl_screenMoved() {
+    const int screenYPosition = ui->getScrollController()->getScreenPosition().y();
+    const int screenHeight = ui->getSequenceArea()->height();
+    const int mappedTopPosition = screenYPosition / stepY;
+    const int mappedBottomPosition = (screenYPosition + screenHeight) / stepY;
+
+    if (mappedTopPosition < getScrollBarValue()) {
+        vScrollBar->setValue(mappedTopPosition);
+    }
+    if (mappedBottomPosition > getScrollBarValue() + renderArea->height() - getReferenceHeight()) {
+        vScrollBar->setValue(mappedBottomPosition - (renderArea->height() - getReferenceHeight()));
+    }
+}
+
+McaEditor *MaSangerOverview::getEditor() const {
+    return qobject_cast<McaEditor *>(editor);
+}
+
+int MaSangerOverview::getContentWidgetWidth() const {
+    return renderArea->width();
+}
+
+int MaSangerOverview::getContentWidgetHeight() const {
+    return qMax(getReadsHeight(), (vScrollBar->isVisible() ? 0 : renderArea->height()) - getReferenceHeight());
+}
+
+int MaSangerOverview::getReadsHeight() const {
+    const int rowsCount = ui->getCollapseModel()->getDisplayableRowsCount();
+    return rowsCount * READ_HEIGHT;
+}
+
+int MaSangerOverview::getReferenceHeight() const {
+    if (-1 == cachedReferenceHeight) {
+        QFontMetrics fontMetrics(editor->getFont());
+        return fontMetrics.height() + 2 * 2 + 4;    // Some magic. These values were taken from GraphUtils::drawRuler()
+    }
+    return cachedReferenceHeight;
+}
+
+int MaSangerOverview::getScrollBarValue() const {
+    return vScrollBar->isVisible() ? vScrollBar->value() : 0;
+}
+
+void MaSangerOverview::resizeEvent(QResizeEvent *event) {
+    sl_resetCaches();
+    QWidget::resizeEvent(event);
+    sl_updateScrollBar();
+    sl_completeRedraw();
+}
+
+bool MaSangerOverview::eventFilter(QObject *object, QEvent *event) {
+    QPaintEvent *paintEvent = dynamic_cast<QPaintEvent *>(event);
+    CHECK(NULL != paintEvent, MaOverview::eventFilter(object, event));
+    if (object == renderArea) {
+        QPainter painter(renderArea);
+        painter.fillRect(renderArea->rect(), Qt::white);
+        painter.drawPixmap(QPoint(0, 0), getView());
+
+        drawVisibleRange(painter);
+    }
+    return true;
+}
+
+void MaSangerOverview::drawOverview(QPainter &painter) {
+    CHECK(!editor->isAlignmentEmpty(), );
+    recalculateScale();
+
+    drawReference();
+    drawReads();
+
+    painter.drawPixmap(cachedReferenceView.rect(), cachedReferenceView);
+    painter.drawPixmap(QRect(0, cachedReferenceView.height(), getContentWidgetWidth(), height() - cachedReferenceView.height()),
+                       cachedReadsView,
+                       QRect(0, getScrollBarValue(), cachedReadsView.width(), height() - cachedReferenceView.height()));
+}
+
+void MaSangerOverview::drawVisibleRange(QPainter &painter) {
+    if (editor->isAlignmentEmpty()) {
+        setVisibleRangeForEmptyAlignment();
+    } else {
+        recalculateScale();
+
+        const QPoint screenPosition = ui->getScrollController()->getScreenPosition();
+        const QSize screenSize = ui->getSequenceArea()->size();
+
+        cachedVisibleRange.setX(qRound(screenPosition.x() / stepX));
+        cachedVisibleRange.setWidth(qRound(screenSize.width() / stepX));
+        cachedVisibleRange.setY(qRound(screenPosition.y() / stepY) + getReferenceHeight() - getScrollBarValue());
+        cachedVisibleRange.setHeight(qMin(qRound(screenSize.height() / stepY), renderArea->height() - getReferenceHeight()));
+    }
+
+    painter.setClipRect(0, getReferenceHeight(), getContentWidgetWidth(), renderArea->height() - getReferenceHeight());
+    painter.fillRect(cachedVisibleRange, VISIBLE_RANGE_COLOR);
+    painter.drawRect(cachedVisibleRange.adjusted(0, 0, -1, -1));
+    painter.setClipping(false);
+}
+
+void MaSangerOverview::drawReference() {
+    QPainter painter(&cachedReferenceView);
+    painter.fillRect(cachedReferenceView.rect(), Qt::white);
+
+    const int referenceUngappedLength = getEditor()->getUI()->getRefCharController()->getUngappedLength();
+    GraphUtils::RulerConfig config;
+    config.drawArrow = false;
+    config.drawNumbers = true;
+    config.drawNotches = false;
+    config.drawAxis = false;
+    config.drawBorderNotches = false;
+
+    GraphUtils::drawRuler(painter, QPoint(0, 0), getContentWidgetWidth() - 1, 0, referenceUngappedLength, editor->getFont(), config);
+
+    const int yOffset = config.notchSize + QFontMetrics(editor->getFont()).height() + config.textOffset;
+    config.drawNotches = true;
+    config.drawNumbers = false;
+    config.drawAxis = true;
+    config.drawBorderNotches = true;
+
+    GraphUtils::drawRuler(painter, QPoint(0, yOffset), getContentWidgetWidth() - 1, 0, referenceUngappedLength, editor->getFont(), config);
+}
+
+void MaSangerOverview::drawReads() {
+    QPainter painter(&cachedReadsView);
+    painter.fillRect(cachedReadsView.rect(), Qt::white);
+
+    MultipleChromatogramAlignmentObject const * const mcaObject = getEditor()->getMaObject();
+    SAFE_POINT(NULL != mcaObject, tr("Incorrect multiple chromatogram alignment object"), );
+    const MultipleChromatogramAlignment mca = mcaObject->getMultipleAlignment();
+    const int rowsCount = editor->getUI()->getCollapseModel()->getDisplayableRowsCount();
+
+    double yOffset = 0;
+    const double yStep = qMax(static_cast<double>(READ_HEIGHT), static_cast<double>(cachedReadsView.height()) / rowsCount);
+    yOffset += (yStep - READ_HEIGHT) / 2;
+
+    for (int rowNumber = 0; rowNumber < rowsCount; rowNumber++) {
+        const MultipleChromatogramAlignmentRow row = mca->getMcaRow(ui->getCollapseModel()->mapToRow(rowNumber));
+        const U2Region coreRegion = row->getCoreRegion();
+        const U2Region positionRegion = editor->getUI()->getBaseWidthController()->getBasesGlobalRange(coreRegion);
+
+        QRect readRect;
+        readRect.setX(qRound(positionRegion.startPos / stepX));
+        readRect.setY(qRound(yOffset));
+        readRect.setHeight(READ_HEIGHT);
+        readRect.setWidth(positionRegion.length / stepX);
+
+        GraphUtils::ArrowConfig config;
+        config.lineWidth = ARROW_LINE_WIDTH;
+        config.lineLength = readRect.width();
+        config.arrowHeadWidth = ARROW_HEAD_WIDTH;
+        config.arrowHeadLength = ARROW_HEAD_LENGTH;
+        config.color = row->isReversed() ? ARROW_REVERSE_COLOR : ARROW_DIRECT_COLOR;
+        config.direction = row->isReversed() ? GraphUtils::RightToLeft : GraphUtils::LeftToRight;
+        GraphUtils::drawArrow(painter, readRect, config);
+
+        yOffset += yStep;
+    }
+}
+
+void MaSangerOverview::moveVisibleRange(QPoint pos) {
+    QRect newVisibleRange(cachedVisibleRange);
+    const int newPosX = qBound((cachedVisibleRange.width() - 1) / 2, pos.x(), width() - (cachedVisibleRange.width() - 1 ) / 2);
+    const int newPosY = qBound(getReferenceHeight() + (cachedVisibleRange.height() - 1) / 2, pos.y(), height() - (cachedVisibleRange.height() - 1 ) / 2);
+    const QPoint newPos(newPosX, newPosY);
+    newVisibleRange.moveCenter(newPos);
+
+    if (pos.y() < newPosY && 0 < getScrollBarValue()) {
+        vScrollBar->triggerAction(QScrollBar::SliderSingleStepSub);
+    }
+    if (newPosY < pos.y() && getScrollBarValue() < vScrollBar->maximum()) {
+        vScrollBar->triggerAction(QScrollBar::SliderSingleStepAdd);
+    }
+
+    const int newHScrollBarValue = newVisibleRange.x() * stepX;
+    ui->getScrollController()->setHScrollbarValue(newHScrollBarValue);
+    const int newVScrollBarValue = (newVisibleRange.y() - getReferenceHeight() + getScrollBarValue()) * stepY;
+    ui->getScrollController()->setVScrollbarValue(newVScrollBarValue);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.h
new file mode 100644
index 0000000..b02df2f
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaSangerOverview.h
@@ -0,0 +1,87 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_SANGER_OVERVIEW_H_
+#define _U2_MA_SANGER_OVERVIEW_H_
+
+#include "MaOverview.h"
+
+class QScrollBar;
+
+namespace U2 {
+
+class McaEditor;
+
+class MaSangerOverview : public MaOverview {
+    Q_OBJECT
+public:
+    MaSangerOverview(MaEditorWgt *ui);
+
+    bool isValid() const;
+    QPixmap getView();
+
+private slots:
+    void sl_updateScrollBar();
+    void sl_completeRedraw();
+    void sl_resetCaches();
+    void sl_screenMoved();
+
+private:
+    bool eventFilter(QObject *object, QEvent *event);
+    void resizeEvent(QResizeEvent *event);
+
+    void drawOverview(QPainter &painter);
+    void drawVisibleRange(QPainter &painter);
+    void drawReference();
+    void drawReads();
+
+    void moveVisibleRange(QPoint pos);
+
+    McaEditor* getEditor() const;
+
+    int getContentWidgetWidth() const;
+    int getContentWidgetHeight() const;
+    int getReadsHeight() const;
+    int getReferenceHeight() const;
+    int getScrollBarValue() const;
+
+    QScrollBar *vScrollBar;
+    QWidget *referenceArea;
+    QWidget *renderArea;
+
+    QPixmap cachedReadsView;
+    QPixmap cachedReferenceView;
+
+    bool completeRedraw;
+    int cachedReferenceHeight;
+
+    static const int READ_HEIGHT;
+    static const int MINIMUM_HEIGHT;
+    static const qreal ARROW_LINE_WIDTH;
+    static const qreal ARROW_HEAD_WIDTH;
+    static const qreal ARROW_HEAD_LENGTH;
+    static const QColor ARROW_DIRECT_COLOR;
+    static const QColor ARROW_REVERSE_COLOR;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_SANGER_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.cpp b/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.cpp
new file mode 100644
index 0000000..c2fd62a
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.cpp
@@ -0,0 +1,245 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QMouseEvent>
+#include <QPainter>
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MsaHighlightingScheme.h>
+
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include "MaGraphCalculationTask.h"
+#include "MaSimpleOverview.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+MaSimpleOverview::MaSimpleOverview(MaEditorWgt *_ui)
+    : MaOverview(_ui),
+      redrawMsaOverview(true),
+      redrawSelection(true)
+{
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+    setFixedHeight(FIXED_HEIGTH);
+
+    setVisible(false);
+}
+
+bool MaSimpleOverview::isValid() const {
+    if (width() < editor->getAlignmentLen() || height() < editor->getNumSequences()) {
+        return false;
+    }
+    return true;
+}
+
+
+QPixmap MaSimpleOverview::getView() {
+    resize(ui->width(), FIXED_HEIGTH);
+    if (cachedMSAOverview.isNull()) {
+        cachedMSAOverview = QPixmap(size());
+        QPainter pOverview(&cachedMSAOverview);
+        drawOverview(pOverview);
+        redrawMsaOverview = false;
+    }
+    return cachedMSAOverview;
+}
+
+void MaSimpleOverview::sl_selectionChanged() {
+    if (!isValid()) {
+        return;
+    }
+    redrawSelection = true;
+
+    update();
+}
+
+void MaSimpleOverview::sl_redraw() {
+    redrawMsaOverview = true;
+    redrawSelection = true;
+    MaOverview::sl_redraw();
+}
+
+void MaSimpleOverview::sl_highlightingChanged() {
+    if (!isValid()) {
+        return;
+    }
+    redrawMsaOverview = true;
+    update();
+}
+
+void MaSimpleOverview::paintEvent(QPaintEvent *e) {
+    if (!isValid()) {
+        QPainter messagePainter(this);
+        GUIUtils::showMessage(this, messagePainter, tr("Multiple sequence alignment is too big for current window size.\nSimple overview is unavailable."));
+        QWidget::paintEvent(e);
+        return;
+    }
+
+    if (redrawMsaOverview) {
+        cachedMSAOverview = QPixmap(size());
+        QPainter pOverview(&cachedMSAOverview);
+        drawOverview(pOverview);
+        redrawMsaOverview = false;
+    }
+    cachedView = cachedMSAOverview;
+
+    QPainter pVisibleRange(&cachedView);
+    drawVisibleRange(pVisibleRange);
+    pVisibleRange.end();
+
+    if (redrawSelection) {
+        recalculateSelection();
+        redrawSelection = false;
+    }
+
+    QPainter pSelection(&cachedView);
+    drawSelection(pSelection);
+    pSelection.end();
+
+    QPainter p(this);
+    p.drawPixmap(0, 0, cachedView);
+    QWidget::paintEvent(e);
+}
+
+void MaSimpleOverview::resizeEvent(QResizeEvent *e) {
+    redrawMsaOverview = true;
+    redrawSelection = true;
+    QWidget::resizeEvent(e);
+}
+
+void MaSimpleOverview::drawOverview(QPainter &p) {
+    p.fillRect(cachedMSAOverview.rect(), Qt::white);
+
+    if (editor->isAlignmentEmpty()) {
+        return;
+    }
+
+    recalculateScale();
+
+    QString highlightingSchemeId = sequenceArea->getCurrentHighlightingScheme()->getFactory()->getId();
+
+    MultipleAlignmentObject* mAlignmentObj = editor->getMaObject();
+    SAFE_POINT(NULL != mAlignmentObj, tr("Incorrect multiple alignment object!"), );
+    const MultipleAlignment ma = mAlignmentObj->getMultipleAlignment();
+
+    U2OpStatusImpl os;
+    for (int seq = 0; seq < editor->getNumSequences(); seq++) {
+        for (int pos = 0; pos < editor->getAlignmentLen(); pos++) {
+            U2Region yRange = ui->getRowHeightController()->getRowGlobalRange(seq);
+            U2Region xRange = ui->getBaseWidthController()->getBaseGlobalRange(pos);
+
+            QRect rect;
+            rect.setX(qRound(xRange.startPos / stepX));
+            rect.setY(qRound(yRange.startPos / stepY));
+            rect.setWidth(qRound(xRange.length / stepX));
+            rect.setHeight(qRound(yRange.length / stepY));
+
+            QColor color = sequenceArea->getCurrentColorScheme()->getColor(seq, pos, mAlignmentObj->charAt(seq, pos));
+            if (MaHighlightingOverviewCalculationTask::isGapScheme(highlightingSchemeId)) {
+                color = Qt::gray;
+            }
+
+            bool drawColor = true;
+            int refPos = -1;;
+            qint64 refId = editor->getReferenceRowId();
+            if (refId != U2MsaRow::INVALID_ROW_ID) {
+                refPos = ma->getRowIndexByRowId(refId, os);
+                SAFE_POINT_OP(os, );
+            }
+            drawColor = MaHighlightingOverviewCalculationTask::isCellHighlighted(
+                        ma,
+                        sequenceArea->getCurrentHighlightingScheme(),
+                        sequenceArea->getCurrentColorScheme(),
+                        seq, pos,
+                        refPos);
+
+            if (color.isValid() && drawColor) {
+                p.fillRect(rect, color);
+            }
+        }
+    }
+    p.setPen(Qt::gray);
+    p.drawRect( rect().adjusted(0, 0, -1, -1) );
+}
+
+void MaSimpleOverview::drawVisibleRange(QPainter &p) {
+    if (editor->isAlignmentEmpty()) {
+        setVisibleRangeForEmptyAlignment();
+    } else {
+        const QPoint screenPosition = editor->getUI()->getScrollController()->getScreenPosition();
+        const QSize screenSize = editor->getUI()->getSequenceArea()->size();
+
+        cachedVisibleRange.setX(qRound(screenPosition.x() / stepX));
+        cachedVisibleRange.setWidth(qRound(screenSize.width() / stepX));
+        cachedVisibleRange.setY(qRound(screenPosition.y() / stepY));
+        cachedVisibleRange.setHeight(qRound(screenSize.height() / stepY));
+
+        if (cachedVisibleRange.width() < VISIBLE_RANGE_CRITICAL_SIZE || cachedVisibleRange.height() < VISIBLE_RANGE_CRITICAL_SIZE) {
+            p.setPen(Qt::red);
+        }
+    }
+
+    p.fillRect(cachedVisibleRange, VISIBLE_RANGE_COLOR);
+    p.drawRect(cachedVisibleRange.adjusted(0, 0, -1, -1));
+}
+
+void MaSimpleOverview::drawSelection(QPainter &p) {
+    p.fillRect(cachedSelection, SELECTION_COLOR);
+}
+
+void MaSimpleOverview::moveVisibleRange(QPoint _pos) {
+    QRect newVisibleRange(cachedVisibleRange);
+    const int newPosX = qBound((cachedVisibleRange.width()) / 2, _pos.x(), width() - (cachedVisibleRange.width() - 1 ) / 2);
+    const int newPosY = qBound((cachedVisibleRange.height()) / 2, _pos.y(), height() - (cachedVisibleRange.height() - 1 ) / 2);
+    const QPoint newPos(newPosX, newPosY);
+    newVisibleRange.moveCenter(newPos);
+
+    const int newHScrollBarValue = newVisibleRange.x() * stepX;
+    ui->getScrollController()->setHScrollbarValue(newHScrollBarValue);
+    const int newVScrollBarValue = newVisibleRange.y() * stepY;
+    ui->getScrollController()->setVScrollbarValue(newVScrollBarValue);
+}
+
+void MaSimpleOverview::recalculateSelection() {
+    recalculateScale();
+
+    const MaEditorSelection& selection = sequenceArea->getSelection();
+
+    const U2Region selectionBasesRegion = ui->getBaseWidthController()->getBasesGlobalRange(selection.x(), selection.width());
+    const U2Region selectionRowsRegion = ui->getRowHeightController()->getRowsGlobalRange(selection.y(), selection.height());
+
+    cachedSelection.setX(qRound(selectionBasesRegion.startPos / stepX));
+    cachedSelection.setY(qRound(selectionRowsRegion.startPos / stepY));
+
+    //(!) [(a - b)*c] != [a*c] - [b*c]
+    cachedSelection.setWidth(qRound((selectionBasesRegion.startPos + selectionBasesRegion.length) / stepX) - qRound(selectionBasesRegion.startPos / stepX));
+    cachedSelection.setHeight(qRound((selectionRowsRegion.startPos + selectionRowsRegion.length) / stepY) - qRound(selectionRowsRegion.startPos / stepY));
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.h b/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.h
new file mode 100644
index 0000000..3e87b78
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.h
@@ -0,0 +1,75 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_SIMPLE_OVERVIEW_H_
+#define _U2_MSA_SIMPLE_OVERVIEW_H_
+
+#include <U2Core/global.h>
+
+#include <QWidget>
+#include "MaOverview.h"
+
+
+namespace U2 {
+
+class MSAEditor;
+class MaEditorWgt;
+class MSAEditorSequenceArea;
+class MsaColorScheme;
+class MsaHighlightingScheme;
+
+
+class U2VIEW_EXPORT MaSimpleOverview : public MaOverview {
+    Q_OBJECT
+public:
+    MaSimpleOverview(MaEditorWgt *ui);
+    const static int FIXED_HEIGTH = 70;
+    bool isValid() const;
+    QPixmap getView();
+
+public slots:
+    void sl_selectionChanged();
+    void sl_redraw();
+    void sl_highlightingChanged();
+
+protected:
+    void paintEvent(QPaintEvent *e);
+    void resizeEvent(QResizeEvent *e);
+
+private:
+    void drawOverview(QPainter &p);
+    void drawVisibleRange(QPainter &p);
+    void drawSelection(QPainter &p);
+
+    void moveVisibleRange(QPoint pos);
+
+    void recalculateSelection();
+
+private:
+    mutable QPixmap cachedMSAOverview;
+
+    mutable bool    redrawMsaOverview;
+    mutable bool    redrawSelection;
+};
+
+} // namespace
+
+#endif // _U2_MSA_SIMPLE_OVERVIEW_H_
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
index 8f5cc90..e4ad92b 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2Alphabet.h>
 #include <U2Core/U2DbiUtils.h>
@@ -55,17 +55,20 @@
 #include <U2Gui/U2WidgetStateStorage.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 #include <U2View/MSAEditorSequenceArea.h>
 #include <U2View/AlignmentAlgorithmGUIExtension.h>
 
 #include "PairAlign.h"
 #include "../SequenceSelectorWidgetController.h"
 
+#define    BadAlphabetWarning 0
+#define    DuplicateSequenceWarning 1
+
 inline U2::U2DataId getSequenceIdByRowId( U2::MSAEditor* msa, qint64 rowId, U2::U2OpStatus &os ) {
-    U2::MAlignmentRow row = msa->getMSAObject()->getMAlignment().getRowByRowId(rowId, os);
+    const U2::MultipleSequenceAlignmentRow row = msa->getMaObject()->getMsa()->getMsaRowByRowId(rowId, os);
     CHECK_OP(os, U2::U2DataId());
-    return row.getRowDBInfo().sequenceId;
+    return row->getRowDbInfo().sequenceId;
 }
 
 namespace U2 {
@@ -114,16 +117,24 @@ void PairAlign::initLayout() {
     mainLayout->insertWidget(2, showHideOutputWidget);
 }
 
+bool PairAlign::isValidSequenceId(qint64 sequenceId) const {
+    return msa->getMaObject()->getRowPosById(sequenceId) >= 0;
+}
+
 void PairAlign::initParameters() {
     if (2 == msa->getCurrentSelection().height()) {
         int selectionPos = msa->getCurrentSelection().y();
-        qint64 firstRowId = msa->getRowByLineNumber(selectionPos).getRowId();
+        qint64 firstRowId = msa->getRowByLineNumber(selectionPos)->getRowId();
         firstSeqSelectorWC->setSequenceId(firstRowId);
-        qint64 secondRowId = msa->getRowByLineNumber(selectionPos + 1).getRowId();
+        qint64 secondRowId = msa->getRowByLineNumber(selectionPos + 1)->getRowId();
         secondSeqSelectorWC->setSequenceId(secondRowId);
     } else {
-        firstSeqSelectorWC->setSequenceId(pairwiseAlignmentWidgetsSettings->firstSequenceId);
-        secondSeqSelectorWC->setSequenceId(pairwiseAlignmentWidgetsSettings->secondSequenceId);
+        if (isValidSequenceId(pairwiseAlignmentWidgetsSettings->firstSequenceId)) {
+            firstSeqSelectorWC->setSequenceId(pairwiseAlignmentWidgetsSettings->firstSequenceId);
+        }
+        if (isValidSequenceId(pairwiseAlignmentWidgetsSettings->secondSequenceId)) {
+            secondSeqSelectorWC->setSequenceId(pairwiseAlignmentWidgetsSettings->secondSequenceId);
+        }
     }
 
     inNewWindowCheckBox->setChecked(pairwiseAlignmentWidgetsSettings->inNewWindow);
@@ -145,15 +156,27 @@ void PairAlign::initParameters() {
 
     lblMessage->setStyleSheet(
         "color: " + L10N::errorColorLabelStr() + ";"
-        "font: bold;");
-    updateWarningMessage();
+        "font: bold;"
+        "padding-top: 15px;");
 
     sl_alignmentChanged();
 }
 
-void PairAlign::updateWarningMessage() {
-    QString alphabetName = msa->getMSAObject()->getAlphabet()->getName();
-    lblMessage->setText(tr("Pairwise alignment is not available for alignments with \"%1\" alphabet.").arg(alphabetName));
+void PairAlign::updateWarningMessage(int type) {
+    QString text;
+    switch (type) {
+        case DuplicateSequenceWarning:
+            text = tr("Please select 2 different sequences to align");
+            break;
+        case BadAlphabetWarning: {
+            QString alphabetName = msa->getMaObject()->getAlphabet()->getName();
+            text = tr("Pairwise alignment is not available for alignments with \"%1\" alphabet.").arg(alphabetName);
+            break;
+        }
+        default:
+            text = tr("Unexpected error");
+    }
+    lblMessage->setText(text);
 }
 
 void PairAlign::initSaveController() {
@@ -186,8 +209,8 @@ void PairAlign::connectSignals() {
 
     connect(firstSeqSelectorWC,         SIGNAL(si_selectionChanged()),         SLOT(sl_selectorTextChanged()));
     connect(secondSeqSelectorWC,        SIGNAL(si_selectionChanged()),         SLOT(sl_selectorTextChanged()));
-    connect(msa->getMSAObject(),        SIGNAL(si_lockedStateChanged()),       SLOT(sl_checkState()));
-    connect(msa->getMSAObject(),        SIGNAL(si_alignmentChanged(const MAlignment&, const MAlignmentModInfo&)), SLOT(sl_alignmentChanged()));
+    connect(msa->getMaObject(),        SIGNAL(si_lockedStateChanged()),       SLOT(sl_checkState()));
+    connect(msa->getMaObject(),        SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)), SLOT(sl_alignmentChanged()));
 }
 
 void PairAlign::sl_checkState(){
@@ -195,7 +218,7 @@ void PairAlign::sl_checkState(){
 }
 
 void PairAlign::sl_alignmentChanged() {
-    const DNAAlphabet* dnaAlphabet = msa->getMSAObject()->getAlphabet();
+    const DNAAlphabet* dnaAlphabet = msa->getMaObject()->getAlphabet();
     SAFE_POINT(NULL != dnaAlphabet, "Alignment alphabet is not defined.", );
     if(dnaAlphabet->getId() != pairwiseAlignmentWidgetsSettings->customSettings.value(PairwiseAlignmentTaskSettings::ALPHABET, "").toString()) {
         pairwiseAlignmentWidgetsSettings->customSettings.insert("alphabet", dnaAlphabet->getId());
@@ -204,7 +227,6 @@ void PairAlign::sl_alignmentChanged() {
         AlignmentAlgorithm* alg = getAlgorithmById(curAlgorithmId);
         SAFE_POINT(NULL != alg, QString("Algorithm %1 not found.").arg(curAlgorithmId), );
         alphabetIsOk = alg->checkAlphabet(dnaAlphabet);
-        updateWarningMessage();
 
         if(NULL != settingsWidget) {
             settingsWidget->updateWidget();
@@ -223,24 +245,33 @@ void PairAlign::checkState() {
     outputFileSelectButton->setEnabled(inNewWindowCheckBox->isChecked());
 
 
-    if (true == sequencesChanged) {
+    if (sequencesChanged) {
         updatePercentOfSimilarity();
     }
 
-    lblMessage->setVisible(!alphabetIsOk);
+    qint64 firstSequenceId = firstSeqSelectorWC->sequenceId();
+    qint64 secondSequenceId = secondSeqSelectorWC->sequenceId();
+    bool sameSequenceInBothSelectors = firstSequenceId == secondSequenceId && firstSequenceId != U2MsaRow::INVALID_ROW_ID;
+    if (!alphabetIsOk) {
+        updateWarningMessage(BadAlphabetWarning);
+    } else if (sameSequenceInBothSelectors) {
+        updateWarningMessage(DuplicateSequenceWarning);
+    }
+    lblMessage->setVisible(!alphabetIsOk || sameSequenceInBothSelectors);
+
     showHideSettingsWidget->setEnabled(alphabetIsOk);
     showHideOutputWidget->setEnabled(alphabetIsOk);
 
-    bool readOnly = msa->getMSAObject()->isStateLocked();
-    canDoAlign = ((MAlignmentRow::invalidRowId() != firstSeqSelectorWC->sequenceId())
-                  && (MAlignmentRow::invalidRowId() != secondSeqSelectorWC->sequenceId())
-                  && (firstSeqSelectorWC->sequenceId() != secondSeqSelectorWC->sequenceId())
+    bool readOnly = msa->getMaObject()->isStateLocked();
+    canDoAlign = ((U2MsaRow::INVALID_ROW_ID != firstSequenceId)
+                  && (U2MsaRow::INVALID_ROW_ID != secondSequenceId)
+                  && (firstSequenceId != secondSequenceId)
                   && sequenceNamesIsOk && alphabetIsOk && (!readOnly || inNewWindowCheckBox->isChecked()));
 
     alignButton->setEnabled(canDoAlign);
 
-    pairwiseAlignmentWidgetsSettings->firstSequenceId = firstSeqSelectorWC->sequenceId();
-    pairwiseAlignmentWidgetsSettings->secondSequenceId = secondSeqSelectorWC->sequenceId();
+    pairwiseAlignmentWidgetsSettings->firstSequenceId = firstSequenceId;
+    pairwiseAlignmentWidgetsSettings->secondSequenceId = secondSequenceId;
     pairwiseAlignmentWidgetsSettings->algorithmName = algorithmListComboBox->currentText();
     pairwiseAlignmentWidgetsSettings->inNewWindow = inNewWindowCheckBox->isChecked();
     pairwiseAlignmentWidgetsSettings->resultFileName = saveController->getSaveFileName();
@@ -264,14 +295,10 @@ void PairAlign::updatePercentOfSimilarity() {
     SAFE_POINT(NULL != distanceFactory, QString("%1 algorithm factory not found.").arg(BuiltInDistanceAlgorithms::SIMILARITY_ALGO), );
 
     U2OpStatusImpl os;
-    MAlignment ma;
-    const MAlignment &currentAlignment = msa->getMSAObject()->getMAlignment();
-    ma.addRow(firstSeqSelectorWC->text(),
-        currentAlignment.getRowByRowId(firstSeqSelectorWC->sequenceId(), os).getData(), -1, os);
-    CHECK_OP(os, );
-    ma.addRow(secondSeqSelectorWC->text(),
-        currentAlignment.getRowByRowId(secondSeqSelectorWC->sequenceId(), os).getData(), -1, os);
-    CHECK_OP(os, );
+    MultipleSequenceAlignment ma;
+    const MultipleSequenceAlignment currentAlignment = msa->getMaObject()->getMultipleAlignment();
+    ma->addRow(firstSeqSelectorWC->text(), currentAlignment->getMsaRowByRowId(firstSeqSelectorWC->sequenceId(), os)->getData(), -1);
+    ma->addRow(secondSeqSelectorWC->text(), currentAlignment->getMsaRowByRowId(secondSeqSelectorWC->sequenceId(), os)->getData(), -1);
     distanceCalcTask = distanceFactory->createAlgorithm(ma);
     distanceCalcTask->setExcludeGaps(true);
     connect(distanceCalcTask, SIGNAL(si_stateChanged()), SLOT(sl_distanceCalculated()));
@@ -279,7 +306,7 @@ void PairAlign::updatePercentOfSimilarity() {
 }
 
 bool PairAlign::checkSequenceNames( ) {
-    QList<qint64> rowIds = msa->getMSAObject( )->getMAlignment( ).getRowsIds( );
+    QList<qint64> rowIds = msa->getMaObject( )->getMultipleAlignment( )->getRowsIds( );
     return ( rowIds.contains( firstSeqSelectorWC->sequenceId( ) )
         && rowIds.contains( secondSeqSelectorWC->sequenceId( ) ) );
 }
@@ -299,7 +326,7 @@ void PairAlign::sl_algorithmSelected(const QString& algorithmName) {
     AlignmentAlgorithm* alg = getAlgorithmById(algorithmName);
     SAFE_POINT(NULL != alg, QString("Algorithm %1 not found.").arg(algorithmName), );
     QString firstAlgorithmRealization = alg->getRealizationsList().first();
-    alphabetIsOk = alg->checkAlphabet(msa->getMSAObject()->getAlphabet());
+    alphabetIsOk = alg->checkAlphabet(msa->getMaObject()->getAlphabet());
 
     AlignmentAlgorithmGUIExtensionFactory* algGUIFactory = alg->getGUIExtFactory(firstAlgorithmRealization);
     SAFE_POINT(NULL != algGUIFactory, QString("Algorithm %1 GUI factory not found.").arg(firstAlgorithmRealization), );
@@ -335,7 +362,7 @@ void PairAlign::sl_alignButtonPressed() {
     SAFE_POINT(true == canDoAlign, "Invalide state of PairAlign options panel widget. startAlignButton is not disabled.", );
 
     U2OpStatus2Log os;
-    U2EntityRef msaRef = msa->getMSAObject()->getEntityRef();
+    U2EntityRef msaRef = msa->getMaObject()->getEntityRef();
     DbiConnection con(msaRef.dbiRef, os);
     CHECK_OP(os, );
 
@@ -367,7 +394,7 @@ void PairAlign::sl_alignButtonPressed() {
 
     settings.inNewWindow = inNewWindowCheckBox->isChecked();
     settings.msaRef = msaRef;
-    settings.alphabet = U2AlphabetId(msa->getMSAObject()->getAlphabet()->getId());
+    settings.alphabet = U2AlphabetId(msa->getMaObject()->getAlphabet()->getId());
     settings.firstSequenceRef = firstSequenceRef;
     settings.secondSequenceRef = secondSequenceRef;
     settingsWidget->getAlignmentAlgorithmCustomSettings(true);
@@ -406,8 +433,8 @@ void PairAlign::sl_distanceCalculated() {
     if (NULL == distanceCalcTask)
         return;
     if (true == distanceCalcTask->isFinished()) {
-        MSADistanceMatrix distanceMatrix(distanceCalcTask, true);
-        similarityValueLabel->setText(QString::number(distanceMatrix.getSimilarity(0, 1)) + "%");
+        const MSADistanceMatrix& distanceMatrix = distanceCalcTask->getMatrix();
+        similarityValueLabel->setText(QString::number(distanceMatrix.getSimilarity(0, 1, true)) + "%");
         similarityWidget->setVisible(true);
         distanceCalcTask = NULL;
     }
@@ -418,11 +445,11 @@ void PairAlign::sl_alignComplete() {
     SAFE_POINT(NULL != pairwiseAlignmentWidgetsSettings->pairwiseAlignmentTask, "Can't process an unexpected align task", );
     if (true == pairwiseAlignmentWidgetsSettings->pairwiseAlignmentTask->isFinished()) {
         if(!inNewWindowCheckBox->isChecked()){
-            MAlignmentModInfo mi;
-            mi.sequenceListChanged = false;
+            MaModificationInfo mi;
+            mi.rowListChanged = false;
             mi.modifiedRowIds.append(pairwiseAlignmentWidgetsSettings->firstSequenceId);
             mi.modifiedRowIds.append(pairwiseAlignmentWidgetsSettings->secondSequenceId);
-            msa->getMSAObject()->updateCachedMAlignment(mi);
+            msa->getMaObject()->updateCachedMultipleAlignment(mi);
         }
         pairwiseAlignmentWidgetsSettings->pairwiseAlignmentTask = NULL;
     }
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
index f79a09b..1406125 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlign.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,8 +45,7 @@ namespace U2 {
 
 class AlignmentAlgorithm;
 class AlignmentAlgorithmMainWidget;
-class MAlignment;
-class MAlignmentModInfo;
+class MaModificationInfo;
 class MSADistanceAlgorithm;
 class MSAEditor;
 class PairwiseAlignmentTaskSettings;
@@ -81,8 +80,11 @@ private:
     void updatePercentOfSimilarity();
     bool checkSequenceNames();
     AlignmentAlgorithm* getAlgorithmById(const QString& algorithmId);
-    void updateWarningMessage();
+    /* Updates label with warning message. Types: 0 -> bad alphabet, 1 -> same sequences in selectors. */
+    void updateWarningMessage(int warningMessageType);
     void initSaveController();
+    /* Checks if the given sequence is in the alignment */
+    bool isValidSequenceId(qint64 sequenceId) const;
     static QString getDefaultFilePath();
 
     MSAEditor* msa;
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
index 8675bcd..e7538b1 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,8 +29,7 @@ namespace U2 {
 
 const QString PairAlignFactory::GROUP_ID = "OP_PAIRALIGN";
 const QString PairAlignFactory::GROUP_ICON_STR = ":core/images/pairwise.png";
-const QString PairAlignFactory::GROUP_TITLE = QString(QObject::tr("Pairwise Alignment"));
-const QString PairAlignFactory::GROUP_DOC_PAGE = "18223087";
+const QString PairAlignFactory::GROUP_DOC_PAGE = "20874991";
 
 
 PairAlignFactory::PairAlignFactory() {
@@ -55,7 +54,7 @@ QWidget* PairAlignFactory::createWidget(GObjectView* objView)
 
 
 OPGroupParameters PairAlignFactory::getOPGroupParameters(){
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Pairwise Alignment"), GROUP_DOC_PAGE);
 }
 
 
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.h b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.h
index f8536a2..f59d7fd 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairAlignFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui b/src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui
index 94fb1a6..afd89e6 100644
--- a/src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui
+++ b/src/corelibs/U2View/src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui
@@ -330,7 +330,7 @@
        <property name="minimumSize">
         <size>
          <width>198</width>
-         <height>0</height>
+         <height>23</height>
         </size>
        </property>
        <property name="maximumSize">
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
index 6022244..e3a3987 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -20,6 +20,8 @@
 */
 #include "MSAEditorMultiTreeViewer.h"
 #include "MsaEditorTreeTabArea.h"
+#include "ov_msa/view_rendering/MaEditorUtils.h"
+
 #include <U2View/GraphicsRectangularBranchItem.h>
 #include <U2View/MSAEditor.h>
 #include <U2Gui/ObjectViewModel.h>
@@ -32,8 +34,8 @@ namespace U2 {
 MSAEditorMultiTreeViewer::MSAEditorMultiTreeViewer(QString _title, MSAEditor* _editor)
 : editor(_editor) {
     treeTabs = new MsaEditorTreeTabArea(editor, this);
-    titleWidget = _editor->getUI()->createLabelWidget(_title);
-    MSAWidget* title = dynamic_cast<MSAWidget*>(titleWidget);
+    titleWidget = _editor->getUI()->createHeaderLabelWidget(_title);
+    MaUtilsWidget* title = dynamic_cast<MaUtilsWidget*>(titleWidget);
     title->setHeightMargin(-55);
     QVBoxLayout* treeAreaLayout = new QVBoxLayout(this);
     treeAreaLayout->setMargin(0);
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
index 9001dd4..eedf213 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorMultiTreeViewer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,23 +22,16 @@
 #ifndef _U2_MSAEDITOR_MULTI_TREE_VIEWER_H_
 #define _U2_MSAEDITOR_MULTI_TREE_VIEWER_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QToolBar>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QToolBar>
-#endif
-#include <QtCore/QString>
+#include <QStringList>
+#include <QToolBar>
+#include <QWidget>
+
 #include <U2Core/global.h>
-#include <QtCore/QStringList>
 
 namespace U2 {
 
 class MSAEditor;
 class MsaEditorTreeTabArea;
-class MSALabelWidget;
 class GObjectViewWindow;
 class MsaEditorTreeTab;
 
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
index d47b0eb..de66a22 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 #include <U2View/MSAEditorSequenceArea.h>
 
 #include "MSAEditorTreeManager.h"
@@ -91,7 +91,7 @@ void MSAEditorTreeManager::sl_onDocumentRemovedFromProject(Document *doc) {
 }
 
 void MSAEditorTreeManager::loadRelatedTrees() {
-    msaObject = editor->getMSAObject();
+    msaObject = editor->getMaObject();
     QList<GObjectRelation> relatedTrees = msaObject->findRelatedObjectsByRole(ObjectRole_PhylogeneticTree);
     CHECK(!relatedTrees.isEmpty(),);
 
@@ -105,7 +105,7 @@ void MSAEditorTreeManager::loadRelatedTrees() {
 }
 
 void MSAEditorTreeManager::buildTreeWithDialog() {
-    msaObject = editor->getMSAObject();
+    msaObject = editor->getMaObject();
     PhyTreeGeneratorRegistry* registry = AppContext::getPhyTreeGeneratorRegistry();
     QStringList list = registry->getNameList();
     addExistingTree = false;
@@ -120,7 +120,7 @@ void MSAEditorTreeManager::buildTreeWithDialog() {
     CHECK(!dlg.isNull(), );
     CHECK(rc == QDialog::Accepted, );
 
-    settings.rowsOrder = msaObject->getMAlignment().getRowNames();
+    settings.rowsOrder = msaObject->getMultipleAlignment()->getRowNames();
     buildTree(settings);
 }
 
@@ -135,10 +135,10 @@ void MSAEditorTreeManager::sl_refreshTree(MSAEditorTreeViewer* treeViewer) {
 }
 
 void MSAEditorTreeManager::createPhyTreeGeneratorTask(const CreatePhyTreeSettings& buildSettings, bool refreshExistingTree, MSAEditorTreeViewer* treeViewer) {
-    const MAlignment& ma = msaObject->getMAlignment();
+    const MultipleSequenceAlignment msa = msaObject->getMultipleAlignment();
     settings = buildSettings;
 
-    PhyTreeGeneratorLauncherTask* treeGeneratorTask = new PhyTreeGeneratorLauncherTask(ma, settings);
+    PhyTreeGeneratorLauncherTask* treeGeneratorTask = new PhyTreeGeneratorLauncherTask(msa, settings);
     if(refreshExistingTree) {
         activeRefreshTasks[treeViewer] = treeGeneratorTask;
         connect(new TaskSignalMapper(treeGeneratorTask), SIGNAL(si_taskSucceeded(Task*)), SLOT(sl_treeRebuildingFinished(Task*)));
@@ -166,7 +166,7 @@ void MSAEditorTreeManager::sl_treeRebuildingFinished(Task* _treeBuildTask) {
 }
 
 bool MSAEditorTreeManager::canRefreshTree(MSAEditorTreeViewer* treeViewer) {
-    bool canRefresh = (treeViewer->getParentAlignmentName() == msaObject->getMAlignment().getName());
+    bool canRefresh = (treeViewer->getParentAlignmentName() == msaObject->getMultipleAlignment()->getName());
     return canRefresh && !activeRefreshTasks.contains(treeViewer);
 }
 
@@ -285,12 +285,12 @@ void MSAEditorTreeManager::sl_openTreeTaskFinished(Task* t) {
 
             connect(w, SIGNAL(si_windowClosed(GObjectViewWindow*)), this, SLOT(sl_onWindowClosed(GObjectViewWindow*)));
 
-            MSAEditorUI* msaUI = editor->getUI();
+            MsaEditorWgt* msaUI = editor->getUI();
             msaUI->addTreeView(w);
 
             if(!addExistingTree) {
                 treeView->setCreatePhyTreeSettings(settings);
-                treeView->setParentAignmentName(msaObject->getMAlignment().getName());
+                treeView->setParentAignmentName(msaObject->getMultipleAlignment()->getName());
             }
 
             treeView->setMSAEditor(editor);
@@ -378,7 +378,7 @@ void MSAEditorTreeManager::sl_onWindowClosed(GObjectViewWindow* viewWindow) {
 
 MSAEditorMultiTreeViewer* MSAEditorTreeManager::getMultiTreeViewer() const {
     SAFE_POINT(NULL != editor, tr("Incorrect reference to the MSAEditor"), NULL);
-    MSAEditorUI* msaEditorUi = editor->getUI();
+    MsaEditorWgt* msaEditorUi = editor->getUI();
     SAFE_POINT(NULL != msaEditorUi, tr("Incorrect reference to the MSAEditor"), NULL);
     return msaEditorUi->getMultiTreeViewer();
 }
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.h
index 4c64fb4..69327ba 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,15 @@
 #ifndef _U2_MSAEDITOR_TREE_MANAGER_H_
 #define _U2_MSAEDITOR_TREE_MANAGER_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QPointer>
+#include <QObject>
+#include <QPointer>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <U2Core/PhyTree.h>
 
 namespace U2 {
 
 class MSAEditor;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 class PhyTreeGeneratorLauncherTask;
 class Task;
 class GObjectViewWindow;
@@ -69,7 +69,7 @@ private:
     MSAEditorMultiTreeViewer* getMultiTreeViewer() const;
 
     MSAEditor*                    editor;
-    QPointer<MAlignmentObject>   msaObject;
+    QPointer<MultipleSequenceAlignmentObject>   msaObject;
     CreatePhyTreeSettings         settings;
     bool                          addExistingTree;
     PhyTree                       phyTree;
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
index 426ecb5..1fcd6c6 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 #include <U2View/GraphicsButtonItem.h>
 #include <U2View/MSAEditor.h>
 #include <U2View/MSAEditorSequenceArea.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 
 #include <QCursor>
 #include <QDateTime>
@@ -118,10 +118,10 @@ bool MSAEditorTreeViewer::sync() {
         treeViewerUI->setSynchronizeMode(syncMode);
 
         CHECK(msa != NULL, false);
-        MSAEditorUI* msaUI = msa->getUI();
-        connect(msaUI->editor->getMSAObject(),  SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-                this,                           SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
-        connect(msaUI,                          SIGNAL(si_stopMsaChanging(bool)),
+        MsaEditorWgt* msaUI = msa->getUI();
+        connect(msaUI->editor->getMaObject(),  SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+                this,                           SLOT(sl_alignmentChanged(MultipleAlignment,MaModificationInfo)));
+        connect(msaUI,                          SIGNAL(si_stopMaChanging(bool)),
                 this,                           SLOT(sl_startTracking(bool)));
 
         connectSignals();
@@ -137,7 +137,7 @@ void MSAEditorTreeViewer::desync() {
     disconnectSignals();
 
     CHECK(msa != NULL, );
-    MSAEditorUI* msaUI = msa->getUI();
+    MsaEditorWgt* msaUI = msa->getUI();
     CHECK(msaUI != NULL, );
     msaUI->getEditorNameList()->clearGroupsSelections();
     msaUI->getEditorNameList()->update();
@@ -155,12 +155,12 @@ bool MSAEditorTreeViewer::isSynchronized() const {
 void MSAEditorTreeViewer::connectSignals() {
     CHECK(slotsAreConnected == false, );
     CHECK(msa != NULL, );
-    MSAEditorUI* msaUI = msa->getUI();
+    MsaEditorWgt* msaUI = msa->getUI();
     CHECK(msaUI != NULL, );
     MSAEditorTreeViewerUI* treeViewerUI = qobject_cast<MSAEditorTreeViewerUI*>(ui);
     CHECK(treeViewerUI != NULL, );
 
-    connect(msaUI,                      SIGNAL(si_startMsaChanging()),
+    connect(msaUI,                      SIGNAL(si_startMaChanging()),
             this,                       SLOT(sl_stopTracking()));
 
     connect(treeViewerUI,               SIGNAL(si_seqOrderChanged(const QStringList&)),
@@ -186,12 +186,12 @@ void MSAEditorTreeViewer::connectSignals() {
 void MSAEditorTreeViewer::disconnectSignals() {
     CHECK(slotsAreConnected == true, );
     CHECK(msa != NULL, );
-    MSAEditorUI* msaUI = msa->getUI();
+    MsaEditorWgt* msaUI = msa->getUI();
     CHECK(msaUI != NULL, );
     MSAEditorTreeViewerUI* treeViewerUI = qobject_cast<MSAEditorTreeViewerUI*>(ui);
     CHECK(treeViewerUI != NULL, );
 
-    disconnect(msaUI,                       SIGNAL(si_startMsaChanging()),
+    disconnect(msaUI,                       SIGNAL(si_startMaChanging()),
                this,                        SLOT(sl_stopTracking()));
 
     disconnect(treeViewerUI,                SIGNAL(si_seqOrderChanged(const QStringList&)),
@@ -215,9 +215,9 @@ void MSAEditorTreeViewer::disconnectSignals() {
 
 void MSAEditorTreeViewer::sl_startTracking(bool changed) {
     CHECK(msa != NULL, );
-    MSAEditorUI* msaUI = msa->getUI();
+    MsaEditorWgt* msaUI = msa->getUI();
     CHECK(msaUI != NULL, );
-    disconnect(msaUI,   SIGNAL(si_stopMsaChanging(bool)),
+    disconnect(msaUI,   SIGNAL(si_stopMaChanging(bool)),
                this,    SLOT(sl_startTracking(bool)));
 
     if (changed) {
@@ -236,10 +236,10 @@ void MSAEditorTreeViewer::sl_startTracking(bool changed) {
         int res = desyncQuestion->exec();
         if (res == QMessageBox::No) {
             // undo the change and synchronize
-            disconnect(msaUI->editor->getMSAObject(),   SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-                       this,                            SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
+            disconnect(msaUI->editor->getMaObject(),   SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+                       this,                            SLOT(sl_alignmentChanged(MultipleAlignment,MaModificationInfo)));
 
-            if (cachedModification.type != MAlignmentModType_Undo) {
+            if (cachedModification.type != MaModificationType_Undo) {
                 if (!msaUI->getUndoAction()->isEnabled()) {
                     desync();
                     FAIL("Processing the alignment change, but undo-redo stack is empty!", );
@@ -276,10 +276,10 @@ void MSAEditorTreeViewer::sl_stopTracking() {
     disconnectSignals();
 }
 
-void MSAEditorTreeViewer::sl_alignmentChanged(const MAlignment &/*ma*/, const MAlignmentModInfo &modInfo) {
+void MSAEditorTreeViewer::sl_alignmentChanged(const MultipleAlignment &/*ma*/, const MaModificationInfo &modInfo) {
     cachedModification = modInfo;
 
-    bool connectionIsNotBrokenOnAlignmentChange = slotsAreConnected && (modInfo.sequenceContentChanged || modInfo.sequenceListChanged || modInfo.alignmentLengthChanged);
+    bool connectionIsNotBrokenOnAlignmentChange = slotsAreConnected && (modInfo.rowContentChanged || modInfo.rowListChanged || modInfo.alignmentLengthChanged);
     if (connectionIsNotBrokenOnAlignmentChange) {
         // alignment was modified by undo-redo or outside of current msa editor
         MWMDIManager* mdiManager = AppContext::getMainWindow()->getMDIManager();
@@ -296,11 +296,11 @@ void MSAEditorTreeViewer::sl_alignmentChanged(const MAlignment &/*ma*/, const MA
 
         // the change outside the current msa editor detected -- desync the tree
         CHECK(msa != NULL, );
-        MSAEditorUI* msaUI = msa->getUI();
+        MsaEditorWgt* msaUI = msa->getUI();
         CHECK(msaUI != NULL, );
-        disconnect(msaUI->editor->getMSAObject(),   SIGNAL(si_alignmentChanged(MAlignment,MAlignmentModInfo)),
-                   this,                            SLOT(sl_alignmentChanged(MAlignment,MAlignmentModInfo)));
-        disconnect(msaUI,                          SIGNAL(si_stopMsaChanging(bool)),
+        disconnect(msaUI->editor->getMaObject(),   SIGNAL(si_alignmentChanged(MultipleAlignment,MaModificationInfo)),
+                   this,                            SLOT(sl_alignmentChanged(MultipleAlignment,MaModificationInfo)));
+        disconnect(msaUI,                          SIGNAL(si_stopMaChanging(bool)),
                    this,                           SLOT(sl_startTracking(bool)));
         desync();
     }
@@ -476,7 +476,7 @@ bool MSAEditorTreeViewerUI::canSynchronizeWithMSA(MSAEditor* msa) {
     if(!curLayoutIsRectangular) {
         return false;
     }
-    QStringList seqsNames = msa->getMSAObject()->getMAlignment().getRowNames();
+    QStringList seqsNames = msa->getMaObject()->getMultipleAlignment()->getRowNames();
     QList<QGraphicsItem*> items = scene()->items();
 
     int counter = 0;
@@ -630,6 +630,7 @@ void MSAEditorTreeViewerUI::highlightBranches() {
 
     QStack<GraphicsRectangularBranchItem*> graphicsItems;
     QList<GraphicsRectangularBranchItem*> groupRoots;
+    QList<GraphicsRectangularBranchItem*> collaspedRoots;
     graphicsItems.push(getRectRoot());
 
     int countOfListNodes = getListNodesOfTree().size();
@@ -643,7 +644,11 @@ void MSAEditorTreeViewerUI::highlightBranches() {
         }
         qreal node1Pos = node->sceneBoundingRect().left();
         qreal node2Pos = node->sceneBoundingRect().right();
-        if(node2Pos > subgroupSelectorPos && node1Pos < subgroupSelectorPos) {
+        if (node->isCollapsed() && node2Pos < subgroupSelectorPos && node1Pos < subgroupSelectorPos) {
+            collaspedRoots.append(node);
+            continue;
+        }
+        if(node2Pos > subgroupSelectorPos && node1Pos < subgroupSelectorPos && node->getNameText() == NULL) {
             groupRoots.append(node);
             continue;
         }
@@ -657,10 +662,11 @@ void MSAEditorTreeViewerUI::highlightBranches() {
         }
     } while(!graphicsItems.isEmpty());
 
-    if(groupRoots.isEmpty()) {
+    if (groupRoots.isEmpty() || groupRoots.size() == 1) {
         emit si_groupColorsChanged(GroupColorSchema());
         return;
     }
+    groupRoots << collaspedRoots;
 
     int colorIndex = 0;
     QMap<PhyNode*, QColor> colorSchema;
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
index bf61e2a..f19057c 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MSAEditorTreeViewer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,16 +23,11 @@
 #define _U2_MSAEditor_TREE_VIEWER_H_
 
 #include "U2View/TreeViewer.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsLineItem>
-#else
-#include <QtWidgets/QGraphicsLineItem>
-#endif
+#include <QGraphicsLineItem>
 
-#include <QtCore/QMap>
+#include <QMap>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 
-
 namespace U2 {
 
 typedef QMap<QString, QColor> GroupColorSchema;
@@ -90,7 +85,7 @@ private slots:
 
     void sl_stopTracking();
     void sl_startTracking(bool changed);
-    void sl_alignmentChanged(const MAlignment& ma, const MAlignmentModInfo& modInfo);
+    void sl_alignmentChanged(const MultipleAlignment &ma, const MaModificationInfo& modInfo);
 
 signals:
     void si_refreshTree(MSAEditorTreeViewer* treeViewer);
@@ -106,7 +101,7 @@ private:
     MSAEditor*            msa;
     SynchronizationMode   syncMode;
     bool                  slotsAreConnected;
-    MAlignmentModInfo     cachedModification;
+    MaModificationInfo     cachedModification;
 };
 
 class U2VIEW_EXPORT MSAEditorTreeViewerUI: public TreeViewerUI {
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp
index 22431a2..b64b28a 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -94,9 +94,10 @@ void MsaEditorTreeTab::deleteTree(int index) {
     Document* doc = obj->getDocument();
     GObjectReference treeRef(doc->getURLString(), "", GObjectTypes::PHYLOGENETIC_TREE);
     treeRef.objName = obj->getGObjectName();
-    msa->getMSAObject()->removeObjectRelation(GObjectRelation(treeRef, ObjectRole_PhylogeneticTree));
+    msa->getMaObject()->removeObjectRelation(GObjectRelation(treeRef, ObjectRole_PhylogeneticTree));
 
     removeTab(index);
+    delete win;
     emit si_tabsCountChanged(count());
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h
index cfe7d07..b239e01 100644
--- a/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h
+++ b/src/corelibs/U2View/src/ov_msa/PhyTrees/MsaEditorTreeTabArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
index 8ec5e80..1c679b2 100644
--- a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 
 #include "ui_SaveSelectedSequenceFromMSADialog.h"
 
+#include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/L10n.h>
 
@@ -35,13 +36,15 @@
 
 namespace U2 {
 
-SaveSelectedSequenceFromMSADialogController::SaveSelectedSequenceFromMSADialogController(QWidget* p)
+SaveSelectedSequenceFromMSADialogController::SaveSelectedSequenceFromMSADialogController(const QString &defaultDir, const QString &defaultFileName, QWidget* p)
     : QDialog(p),
+      defaultDir(defaultDir),
+      defaultFileName(defaultFileName),
       saveController(NULL),
       ui(new Ui_SaveSelectedSequenceFromMSADialog())
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223085");
+    new HelpButton(this, ui->buttonBox, "20874989");
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -75,6 +78,7 @@ void SaveSelectedSequenceFromMSADialogController::initSaveController() {
     config.fileNameEdit = ui->fileNameEdit;
     config.formatCombo = ui->formatCombo;
     config.parentWidget = this;
+    config.defaultFileName = defaultDir + "/" + defaultFileName + "." + AppContext::getDocumentFormatRegistry()->getFormatById(config.defaultFormatId)->getSupportedDocumentFileExtensions().first();
 
     DocumentFormatConstraints formatConstraints;
     formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE;
diff --git a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
index 3ef0ef4..b2251a6 100644
--- a/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
+++ b/src/corelibs/U2View/src/ov_msa/SaveSelectedSequenceFromMSADialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,12 +35,14 @@ class SaveDocumentController;
 class SaveSelectedSequenceFromMSADialogController : public QDialog {
     Q_OBJECT
 public:
-    SaveSelectedSequenceFromMSADialogController(QWidget* p);
+    SaveSelectedSequenceFromMSADialogController(const QString& defaultDir, const QString& defaultFileName, QWidget* p);
     ~SaveSelectedSequenceFromMSADialogController();
 
     virtual void accept();
 
     QString             url;
+    QString             defaultDir;
+    QString             defaultFileName;
     DocumentFormatId    format;
     bool                trimGapsFlag;
     bool                addToProjectFlag;
diff --git a/src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui b/src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui
index 9e9217a..17d9e45 100644
--- a/src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui
+++ b/src/corelibs/U2View/src/ov_msa/SelectSubalignmentDialog.ui
@@ -24,7 +24,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="startPosBox">
+      <widget class="QSpinBox" name="startLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
@@ -50,7 +50,7 @@
       </widget>
      </item>
      <item>
-      <widget class="QSpinBox" name="endPosBox">
+      <widget class="QSpinBox" name="endLineEdit">
        <property name="sizePolicy">
         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
          <horstretch>0</horstretch>
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui b/src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui
index 99d18ff..67aff2f 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui
@@ -114,20 +114,29 @@
             <string>Profile mode</string>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout_2">
-            <property name="margin">
+            <property name="leftMargin">
+             <number>5</number>
+            </property>
+            <property name="topMargin">
+             <number>5</number>
+            </property>
+            <property name="rightMargin">
+             <number>5</number>
+            </property>
+            <property name="bottomMargin">
              <number>5</number>
             </property>
             <item>
              <widget class="QRadioButton" name="countsButton">
               <property name="text">
-               <string>Counts</string>
+               <string>Count</string>
               </property>
              </widget>
             </item>
             <item>
              <widget class="QRadioButton" name="percentsButton">
               <property name="text">
-               <string>Percents</string>
+               <string>Percentage</string>
               </property>
              </widget>
             </item>
@@ -192,6 +201,19 @@
            </property>
           </widget>
          </item>
+         <item>
+          <spacer name="verticalSpacer">
+           <property name="orientation">
+            <enum>Qt::Vertical</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>20</width>
+             <height>40</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
         </layout>
        </widget>
       </item>
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
index 441a34b..817b32c 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include "SeqStatisticsWidget.h"
 
 #include <U2Core/AppContext.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
@@ -83,7 +83,7 @@ void SeqStatisticsWidget::copySettings() {
         settings = new SimilarityStatisticsSettings();
         settings->excludeGaps = false;
         settings->autoUpdate = true;
-        settings->ma = msa->getMSAObject();
+        settings->ma = msa->getMaObject();
         settings->usePercents = true;
         settings->ui = msa->getUI();
     }
@@ -165,7 +165,7 @@ void SeqStatisticsWidget::sl_onAutoUpdateChanged(int state) {
 }
 
 void SeqStatisticsWidget::sl_onRefSeqChanged(qint64 referenceRowId) {
-    if(MAlignmentRow::invalidRowId() == referenceRowId && statisticsIsShown) {
+    if(U2MsaRow::INVALID_ROW_ID == referenceRowId && statisticsIsShown) {
         ui.refSeqWarning->show();
     } else {
         ui.refSeqWarning->hide();
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
index e50abd7..058a328 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 namespace U2 {
 
 class MSAEditor;
-class MSAEditorUI;
+class MsaEditorWgt;
 class SimilarityStatisticsSettings;
 
 class U2VIEW_EXPORT SeqStatisticsWidget : public QWidget {
@@ -59,7 +59,7 @@ private:
     Ui_MSADistanceColumnSettingsForm ui;
 
     MSAEditor*      msa;
-    MSAEditorUI*    msaUI;
+    MsaEditorWgt*    msaUI;
 
     QWidget*        distancesStatisticsGroup;
 
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
index d8b4102..728b10f 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString SeqStatisticsWidgetFactory::GROUP_ID = "OP_SEQ_STATISTICS_WIDGET";
 const QString SeqStatisticsWidgetFactory::GROUP_ICON_STR = ":core/images/chart_bar.png";
-const QString SeqStatisticsWidgetFactory::GROUP_TITLE = QString(QObject::tr("Statistics"));
-const QString SeqStatisticsWidgetFactory::GROUP_DOC_PAGE = "18223096";
+const QString SeqStatisticsWidgetFactory::GROUP_DOC_PAGE = "20875000";
 
 
 SeqStatisticsWidgetFactory::SeqStatisticsWidgetFactory() {
@@ -56,7 +55,7 @@ QWidget * SeqStatisticsWidgetFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters SeqStatisticsWidgetFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Statistics"), GROUP_DOC_PAGE);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.h b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.h
index 9257940..5469701 100644
--- a/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,7 +37,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.cpp b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.cpp
index 8d8c028..0377cd7 100644
--- a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.cpp
+++ b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "SequenceSelectorWidgetController.h"
 
@@ -28,7 +29,7 @@ const int CURSOR_START_POSITION = 0;
 namespace U2 {
 
 SequenceSelectorWidgetController::SequenceSelectorWidgetController(MSAEditor* _msa)
-    : msa(_msa), defaultSeqName(""), seqId(MAlignmentRow::invalidRowId())
+    : msa(_msa), defaultSeqName(""), seqId(U2MsaRow::INVALID_ROW_ID)
 {
     setupUi(this);
     filler = new MSACompletionFiller();
@@ -43,8 +44,8 @@ SequenceSelectorWidgetController::SequenceSelectorWidgetController(MSAEditor* _m
     connect(addSeq, SIGNAL(clicked()), SLOT(sl_addSeqClicked()));
     connect(deleteSeq, SIGNAL(clicked()), SLOT(sl_deleteSeqClicked()));
 
-    connect(msa->getMSAObject(), SIGNAL(si_alignmentChanged(const MAlignment& , const MAlignmentModInfo&)),
-        SLOT(sl_seqLineEditEditingFinished(const MAlignment& , const MAlignmentModInfo&)));
+    connect(msa->getMaObject(), SIGNAL(si_alignmentChanged(const MultipleAlignment& , const MaModificationInfo&)),
+        SLOT(sl_seqLineEditEditingFinished(const MultipleAlignment& , const MaModificationInfo&)));
 
     connect(completer, SIGNAL(si_editingFinished()), SLOT(sl_seqLineEditEditingFinished()));
 
@@ -60,11 +61,15 @@ QString SequenceSelectorWidgetController::text() const {
 }
 
 void SequenceSelectorWidgetController::setSequenceId(qint64 newId) {
-    const MAlignment &ma = msa->getMSAObject()->getMAlignment();
     U2OpStatusImpl os;
-    const MAlignmentRow selectedRow = ma.getRowByRowId(newId, os);
+    if (newId == U2MsaRow::INVALID_ROW_ID) {
+        seqId = newId;
+        return;
+    }
+    const MultipleSequenceAlignmentRow &selectedRow = msa->getMaObject()->getMsa()->getMsaRowByRowId(newId, os);
+    CHECK_OP(os, );
     seqId = newId;
-    const QString selectedName = selectedRow.getName();
+    const QString selectedName = selectedRow->getName();
     if (seqLineEdit->text() != selectedName) {
         seqLineEdit->setText(selectedName);
         seqLineEdit->setCursorPosition(CURSOR_START_POSITION);
@@ -77,29 +82,24 @@ qint64 SequenceSelectorWidgetController::sequenceId( ) const {
 }
 
 void SequenceSelectorWidgetController::updateCompleter() {
-    MAlignmentObject* maObj = msa->getMSAObject();
-    const MAlignment& ma = maObj->getMAlignment();
-    QStringList newNamesList = ma.getRowNames();
+    QStringList newNamesList = msa->getMaObject()->getMultipleAlignment()->getRowNames();
     filler->updateSeqList(newNamesList);
     if (!newNamesList.contains(seqLineEdit->text())) {
         sl_seqLineEditEditingFinished();
     }
 }
 
-void SequenceSelectorWidgetController::sl_seqLineEditEditingFinished(const MAlignment& , const MAlignmentModInfo& modInfo){
-    if(!modInfo.sequenceListChanged) {
+void SequenceSelectorWidgetController::sl_seqLineEditEditingFinished(const MultipleAlignment& , const MaModificationInfo& modInfo){
+    if(!modInfo.rowListChanged) {
         return;
     }
-    MAlignmentObject* maObj = msa->getMSAObject();
-    const MAlignment& ma = maObj->getMAlignment();
-    filler->updateSeqList(ma.getRowNames());
+    filler->updateSeqList(msa->getMaObject()->getMultipleAlignment()->getRowNames());
     sl_seqLineEditEditingFinished();
 }
 
 void SequenceSelectorWidgetController::sl_seqLineEditEditingFinished() {
-    MAlignmentObject* maObj = msa->getMSAObject();
-    const MAlignment& ma = maObj->getMAlignment();
-    if (!ma.getRowNames().contains(seqLineEdit->text())) {
+    const MultipleSequenceAlignment ma = msa->getMaObject()->getMultipleAlignment();
+    if (!ma->getRowNames().contains(seqLineEdit->text())) {
         seqLineEdit->setText(defaultSeqName);
     } else {
         const QString selectedSeqName = seqLineEdit->text();
@@ -110,7 +110,7 @@ void SequenceSelectorWidgetController::sl_seqLineEditEditingFinished() {
         // index in popup list
         const int sequenceIndex = completer->getLastChosenItemIndex();
         if ( completer == QObject::sender( ) && -1 != sequenceIndex ) {
-            const QStringList rowNames = ma.getRowNames( );
+            const QStringList rowNames = ma->getRowNames( );
             SAFE_POINT( rowNames.contains( selectedSeqName ), "Unexpected sequence name is selected", );
             if ( 1 < rowNames.count( selectedSeqName ) ) { // case when there are sequences with identical names
                 int selectedRowIndex = -1;
@@ -118,9 +118,9 @@ void SequenceSelectorWidgetController::sl_seqLineEditEditingFinished() {
                 for ( int sameNameCounter = 0; sameNameCounter <= sequenceIndex; ++sameNameCounter ) {
                     selectedRowIndex = rowNames.indexOf( selectedSeqName, selectedRowIndex + 1 );
                 }
-                seqId = ma.getRow( selectedRowIndex ).getRowId( );
+                seqId = ma->getMsaRow( selectedRowIndex )->getRowId( );
             } else { // case when chosen name is unique in the msa
-                seqId = ma.getRow( selectedSeqName ).getRowId( );
+                seqId = ma->getMsaRow( selectedSeqName )->getRowId( );
             }
         }
     }
@@ -132,15 +132,15 @@ void SequenceSelectorWidgetController::sl_addSeqClicked() {
         return;
     }
 
-    const MAlignmentRow selectedRow = msa->getRowByLineNumber(msa->getCurrentSelection().y());
-    setSequenceId(selectedRow.getRowId());
+    const MultipleSequenceAlignmentRow selectedRow = msa->getRowByLineNumber(msa->getCurrentSelection().y());
+    setSequenceId(selectedRow->getRowId());
     emit si_selectionChanged();
 }
 
 void SequenceSelectorWidgetController::sl_deleteSeqClicked() {
     seqLineEdit->setText("");
     defaultSeqName = "";
-    setSequenceId(MAlignmentRow::invalidRowId());
+    setSequenceId(U2MsaRow::INVALID_ROW_ID);
     emit si_selectionChanged();
 }
 
diff --git a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
index aedbfb7..751ceba 100644
--- a/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
+++ b/src/corelibs/U2View/src/ov_msa/SequenceSelectorWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,7 +46,7 @@ signals:
 
 private slots:
     void sl_seqLineEditEditingFinished();
-    void sl_seqLineEditEditingFinished(const MAlignment& , const MAlignmentModInfo&);
+    void sl_seqLineEditEditingFinished(const MultipleAlignment & , const MaModificationInfo&);
     void sl_addSeqClicked();
     void sl_deleteSeqClicked();
     void sl_setDefaultLineEditValue();
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
index 4966c0f..6dc7715 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,16 +21,12 @@
 
 #include <QColorDialog>
 #include <QMainWindow>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QPlastiqueStyle>
-#else
 #include <QProxyStyle>
 #include <QStyleFactory>
-#endif
 
 #include <U2Core/AppContext.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
@@ -101,11 +97,7 @@ TreeOptionsWidget::~TreeOptionsWidget()
 }
 
 void TreeOptionsWidget::initColorButtonsStyle() {
-#if (QT_VERSION < 0x050000) //Qt 5
-    QStyle *buttonStyle = new QPlastiqueStyle;
-#else
     QStyle *buttonStyle = new QProxyStyle(QStyleFactory::create("fusion"));
-#endif
     buttonStyle->setParent(this);
     labelsColorButton->setStyle(buttonStyle);
     branchesColorButton->setStyle(buttonStyle);
@@ -141,9 +133,9 @@ void TreeOptionsWidget::updateAllWidgets()
     showPenSettings = viewSettings.showPenSettings;
     createGeneralSettingsWidgets();
 
-    QString fontLabel = showFontSettings ? "Hide font settings" : "Show font settings";
+    QString fontLabel = showFontSettings ? tr("Hide font settings") : tr("Show font settings");
     updateShowFontOpLabel(fontLabel);
-    QString penLabel = showPenSettings ? "Hide pen settings" : "Show pen settings";
+    QString penLabel = showPenSettings ? tr("Hide pen settings") : tr("Show pen settings");
     updateShowPenOpLabel(penLabel);
     fontSettingsWidget->setVisible(viewSettings.showFontSettings);
     penGroup->setVisible(viewSettings.showPenSettings);
@@ -319,14 +311,14 @@ void TreeOptionsWidget::sl_branchesColorButton() {
 void TreeOptionsWidget::sl_onLblLinkActivated(const QString& link) {
     if(SHOW_FONT_OPTIONS_LINK == link) {
         showFontSettings = !showFontSettings;
-        QString labelText = showFontSettings ? "Hide font settings" : "Show font settings";
+        QString labelText = showFontSettings ? tr("Hide font settings") : tr("Show font settings");
         updateShowFontOpLabel(labelText);
         fontSettingsWidget->setVisible(showFontSettings);
         return;
     }
     if(SHOW_PEN_OPTIONS_LINK == link) {
         showPenSettings = !showPenSettings;
-        QString labelText = showPenSettings ? "Hide pen settings" : "Show pen settings";
+        QString labelText = showPenSettings ? tr("Hide pen settings") : tr("Show pen settings");
         updateShowPenOpLabel(labelText);
         penGroup->setVisible(showPenSettings);
     }
@@ -395,12 +387,18 @@ AddTreeWidget::AddTreeWidget(MSAEditor* msa)
     buildTreeButton->setFixedWidth(102);
     buttonLayout->addWidget(buildTreeButton);
     buildTreeButton->setObjectName( "BuildTreeButton" );
-
+    
+    MultipleSequenceAlignmentObject* maObj = editor->getMaObject();
+    buildTreeButton->setDisabled(editor->getNumSequences() < 2 || maObj->isStateLocked());
+    
     mainLayout->addLayout(buttonLayout);
 
     connect(openTreeButton, SIGNAL(clicked()), SLOT(sl_onOpenTreeTriggered()));
     connect(buildTreeButton, SIGNAL(clicked()), SLOT(sl_onBuildTreeTriggered()));
+    connect(maObj, SIGNAL(si_lockedStateChanged()), SLOT(sl_updateBuildTreeButtonState()));
+    connect(maObj, SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)), SLOT(sl_updateBuildTreeButtonState()));
 }
+
 void AddTreeWidget::sl_onOpenTreeTriggered() {
     editor->getTreeManager()->openTreeFromFile();
 }
@@ -409,4 +407,8 @@ void AddTreeWidget::sl_onBuildTreeTriggered() {
     editor->getTreeManager()->buildTreeWithDialog();
 }
 
+void AddTreeWidget::sl_updateBuildTreeButtonState() {
+    buildTreeButton->setDisabled(editor->getNumSequences() < 2 || editor->getMaObject()->isStateLocked());
+}
+
 }
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
index 17d24c5..ba0a92c 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,6 +35,8 @@ class SimilarityStatisticsSettings;
 class ShowHideSubgroupWidget;
 class TreeViewer;
 class TreeViewerUI;
+class MultipleAlignment;
+class MaModificationInfo;
 
 struct TreeOpWidgetViewSettings {
     TreeOpWidgetViewSettings()
@@ -109,6 +111,8 @@ public:
 private slots:
     void sl_onOpenTreeTriggered();
     void sl_onBuildTreeTriggered();
+    void sl_updateBuildTreeButtonState();
+
 private:
     MSAEditor*   editor;
 
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
index 3472024..f081930 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString MSATreeOptionsWidgetFactory::GROUP_ID = "OP_MSA_TREES_WIDGET";
 const QString MSATreeOptionsWidgetFactory::GROUP_ICON_STR = ":core/images/tree.png";
-const QString MSATreeOptionsWidgetFactory::GROUP_TITLE = QString(QObject::tr("Tree Settings"));
-const QString MSATreeOptionsWidgetFactory::GROUP_DOC_PAGE = "18223134";
+const QString MSATreeOptionsWidgetFactory::GROUP_DOC_PAGE = "20875038";
 
 
 MSATreeOptionsWidgetFactory::MSATreeOptionsWidgetFactory()
@@ -64,7 +63,7 @@ QWidget* MSATreeOptionsWidgetFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters MSATreeOptionsWidgetFactory::getOPGroupParameters(){
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Tree Settings"), GROUP_DOC_PAGE);
 }
 
 void MSATreeOptionsWidgetFactory::sl_onWidgetViewSaved(const TreeOpWidgetViewSettings& settings) {
@@ -74,8 +73,7 @@ void MSATreeOptionsWidgetFactory::sl_onWidgetViewSaved(const TreeOpWidgetViewSet
 
 const QString TreeOptionsWidgetFactory::GROUP_ID = "OP_TREES_WIDGET";
 const QString TreeOptionsWidgetFactory::GROUP_ICON_STR = ":core/images/tree.png";
-const QString TreeOptionsWidgetFactory::GROUP_TITLE = QString(QObject::tr("Tree Settings"));
-const QString TreeOptionsWidgetFactory::GROUP_DOC_PAGE = "18223134";
+const QString TreeOptionsWidgetFactory::GROUP_DOC_PAGE = "20875038";
 
 TreeOptionsWidgetFactory::TreeOptionsWidgetFactory()
     : viewSettings(new TreeOpWidgetViewSettings)
@@ -106,7 +104,7 @@ QWidget* TreeOptionsWidgetFactory::createWidget(GObjectView* objView)
 }
 
 OPGroupParameters TreeOptionsWidgetFactory::getOPGroupParameters(){
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Tree Settings"), GROUP_DOC_PAGE);
 }
 
 void TreeOptionsWidgetFactory::sl_onWidgetViewSaved(const TreeOpWidgetViewSettings& settings) {
@@ -116,8 +114,7 @@ void TreeOptionsWidgetFactory::sl_onWidgetViewSaved(const TreeOpWidgetViewSettin
 
 const QString AddTreeWidgetFactory::GROUP_ID = "OP_MSA_ADD_TREE_WIDGET";
 const QString AddTreeWidgetFactory::GROUP_ICON_STR = ":core/images/tree.png";
-const QString AddTreeWidgetFactory::GROUP_TITLE = QString(QObject::tr("Tree Settings"));
-const QString AddTreeWidgetFactory::GROUP_DOC_PAGE = "18223134";
+const QString AddTreeWidgetFactory::GROUP_DOC_PAGE = "20875038";
 
 AddTreeWidgetFactory::AddTreeWidgetFactory() {
     objectViewOfWidget = ObjViewType_AlignmentEditor;
@@ -139,7 +136,7 @@ QWidget* AddTreeWidgetFactory::createWidget(GObjectView* objView)
 }
 
 OPGroupParameters AddTreeWidgetFactory::getOPGroupParameters(){
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Tree Settings"), GROUP_DOC_PAGE);
 }
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.h b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.h
index 2dda6b6..630e77d 100644
--- a/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.h
+++ b/src/corelibs/U2View/src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,6 @@ private slots:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 
     TreeOpWidgetViewSettings *viewSettings;
@@ -67,7 +66,6 @@ private slots:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 
     TreeOpWidgetViewSettings *viewSettings;
@@ -87,7 +85,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.cpp
new file mode 100644
index 0000000..72cf722
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.cpp
@@ -0,0 +1,120 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "BaseWidthController.h"
+#include "ScrollController.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+BaseWidthController::BaseWidthController(MaEditorWgt *maEditorWgt) :
+    QObject(maEditorWgt),
+    maEditor(maEditorWgt->getEditor()),
+    ui(maEditorWgt)
+{
+
+}
+
+int BaseWidthController::getFirstVisibleBaseGlobalOffset(bool countClipped) const {
+    return getBaseGlobalOffset(ui->getScrollController()->getFirstVisibleBase(countClipped));
+}
+
+int BaseWidthController::getFirstVisibleBaseScreenOffset(bool countClipped) const {
+    const int firstVisibleBaseGlobalOffset = getFirstVisibleBaseGlobalOffset(countClipped);
+    return firstVisibleBaseGlobalOffset - ui->getScrollController()->getScreenPosition().x();
+}
+
+int BaseWidthController::getBaseGlobalOffset(int position) const {
+    return getBaseWidth() * position;
+}
+
+int BaseWidthController::getBaseScreenOffset(int position) const {
+    return getBaseGlobalOffset(position) - ui->getScrollController()->getScreenPosition().x();
+}
+
+int BaseWidthController::getBaseScreenCenter(int position) const {
+    return getBaseScreenOffset(position) + getBaseWidth() / 2;
+}
+
+int BaseWidthController::getBaseWidth() const {
+    return maEditor->getColumnWidth();
+}
+
+int BaseWidthController::getBasesWidth(int count) const {
+    return count * getBaseWidth();
+}
+
+int BaseWidthController::getBasesWidth(const U2Region &region) const {
+    return getBasesWidth(static_cast<int>(region.length));
+}
+
+U2Region BaseWidthController::getBaseGlobalRange(int position) const {
+    return getBasesGlobalRange(position, 1);
+}
+
+U2Region BaseWidthController::getBasesGlobalRange(int startPosition, int count) const {
+    return U2Region(getBaseGlobalOffset(startPosition), getBasesWidth(count));
+}
+
+U2Region BaseWidthController::getBasesGlobalRange(const U2Region &region) const {
+    return getBasesGlobalRange(static_cast<int>(region.startPos), static_cast<int>(region.length));
+}
+
+U2Region BaseWidthController::getBaseScreenRange(int position) const {
+    return getBasesScreenRange(position, 1, ui->getScrollController()->getScreenPosition().x());
+}
+
+U2Region BaseWidthController::getBasesScreenRange(const U2Region &region) const {
+    return getBasesScreenRange(static_cast<int>(region.startPos), static_cast<int>(region.length), ui->getScrollController()->getScreenPosition().x());
+}
+
+U2Region BaseWidthController::getBaseScreenRange(int position, int screenXOrigin) const {
+    return getBasesScreenRange(position, 1, screenXOrigin);
+}
+
+U2Region BaseWidthController::getBasesScreenRange(int startPosition, int count, int screenXOrigin) const {
+    const U2Region globalRange = getBasesGlobalRange(startPosition, count);
+    return U2Region(globalRange.startPos - screenXOrigin, globalRange.length);
+}
+
+U2Region BaseWidthController::getBasesScreenRange(const U2Region &region, int screenXOrigin) const {
+    return getBasesScreenRange(static_cast<int>(region.startPos), static_cast<int>(region.length), screenXOrigin);
+}
+
+int BaseWidthController::getTotalAlignmentWidth() const {
+    return maEditor->getAlignmentLen() * getBaseWidth();
+}
+
+int BaseWidthController::globalXPositionToColumn(int x) const {
+    return x / getBaseWidth();
+}
+
+int BaseWidthController::screenXPositionToColumn(int x) const {
+    return globalXPositionToColumn(ui->getScrollController()->getScreenPosition().x() + x);
+}
+
+int BaseWidthController::screenXPositionToBase(int x) const {
+    const int column = screenXPositionToColumn(x);
+    return 0 <= column && column < maEditor->getAlignmentLen() ? column : -1;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.h b/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.h
new file mode 100644
index 0000000..9a193eb
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/BaseWidthController.h
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_BASE_WIDTH_CONTROLLER_H_
+#define _U2_BASE_WIDTH_CONTROLLER_H_
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class MaEditor;
+class MaEditorWgt;
+class U2Region;
+
+class U2VIEW_EXPORT BaseWidthController : public QObject {
+    Q_OBJECT
+public:
+    BaseWidthController(MaEditorWgt *ui);
+
+    int getFirstVisibleBaseGlobalOffset(bool countClipped) const;
+    int getFirstVisibleBaseScreenOffset(bool countClipped) const;
+
+    int getBaseGlobalOffset(int position) const;
+    int getBaseScreenOffset(int position) const;
+    int getBaseScreenCenter(int position) const;
+
+    int getBaseWidth() const;
+    int getBasesWidth(int count) const;
+    int getBasesWidth(const U2Region &region) const;
+
+    U2Region getBaseGlobalRange(int position) const;
+    U2Region getBasesGlobalRange(int startPosition, int count) const;
+    U2Region getBasesGlobalRange(const U2Region &region) const;
+
+    U2Region getBaseScreenRange(int position) const;
+    U2Region getBasesScreenRange(const U2Region &region) const;
+
+    U2Region getBaseScreenRange(int position, int screenXOrigin) const;
+    U2Region getBasesScreenRange(int startPosition, int count, int screenXOrigin) const;
+    U2Region getBasesScreenRange(const U2Region &region, int screenXOrigin) const;
+
+    int getTotalAlignmentWidth() const;
+
+    int globalXPositionToColumn(int x) const;       // can be out of MA boundaries
+    int screenXPositionToColumn(int x) const;       // can be out of MA boundaries
+    int screenXPositionToBase(int x) const;         // returns -1 if the column is out of alignment boundaries
+
+private:
+    MaEditor *maEditor;
+    MaEditorWgt *ui;
+};
+
+}   // namespace U2
+
+#endif // _U2_BASE_WIDTH_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.cpp b/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.cpp
new file mode 100644
index 0000000..d832571
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.cpp
@@ -0,0 +1,91 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "BaseWidthController.h"
+#include "DrawHelper.h"
+#include "RowHeightController.h"
+#include "ScrollController.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/view_rendering/MaEditorSelection.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+DrawHelper::DrawHelper(MaEditorWgt *maEditorWgt) :
+    ui(maEditorWgt),
+    scrollController(maEditorWgt->getScrollController()),
+    collapsibleModel(maEditorWgt->getCollapseModel())
+{
+
+}
+
+U2Region DrawHelper::getVisibleBases(int widgetWidth, bool countFirstClippedBase, bool countLastClippedBase) const {
+    const int firstVisibleBase = scrollController->getFirstVisibleBase(countFirstClippedBase);
+    const int lastVisibleBase = scrollController->getLastVisibleBase(widgetWidth, countLastClippedBase);
+    return U2Region(firstVisibleBase, lastVisibleBase - firstVisibleBase + 1);
+}
+
+U2Region DrawHelper::getVisibleRowsNumbers(int widgetHeight, bool countFirstClippedRow, bool countLastClippedRow) const {
+    const int firstVisibleRowNumber = scrollController->getFirstVisibleRowNumber(countFirstClippedRow);
+    const int lastVisibleRowNumber= scrollController->getLastVisibleRowNumber(widgetHeight, countLastClippedRow);
+    return U2Region(firstVisibleRowNumber, lastVisibleRowNumber - firstVisibleRowNumber + 1);
+}
+
+QList<int> DrawHelper::getVisibleRowsIndexes(int widgetHeight, bool countFirstClippedRow, bool countLastClippedRow) const {
+    QVector<U2Region> groupedRowsIndexes = getGroupedVisibleRowsIndexes(widgetHeight, countFirstClippedRow, countLastClippedRow);
+    QList<int> rowsIndexes;
+    foreach (const U2Region &group, groupedRowsIndexes) {
+        for (qint64 rowIndex = group.startPos; rowIndex < group.endPos(); rowIndex++) {
+            rowsIndexes << static_cast<int>(rowIndex);
+        }
+    }
+    return rowsIndexes;
+}
+
+QVector<U2Region> DrawHelper::getGroupedVisibleRowsIndexes(int widgetHeight, bool countFirstClippedRow, bool countLastClippedRow) const {
+    const int firstVisibleRowNumber = scrollController->getFirstVisibleRowNumber(countFirstClippedRow);
+    const int lastVisibleRowNumber = scrollController->getLastVisibleRowNumber(widgetHeight, countLastClippedRow);
+    QVector<U2Region> groupedRowsIndexes;
+    collapsibleModel->getVisibleRows(firstVisibleRowNumber, lastVisibleRowNumber, groupedRowsIndexes);
+    return groupedRowsIndexes;
+}
+
+int DrawHelper::getVisibleBasesCount(int widgetWidth, bool countFirstClippedBase, bool countLastClippedBase) const {
+    return getVisibleBases(widgetWidth, countFirstClippedBase,countLastClippedBase).length;
+}
+
+int DrawHelper::getVisibleRowsCount(int widgetHeight, bool countFirstClippedRow, bool countLastClippedRow) const {
+    return getVisibleRowsIndexes(widgetHeight, countFirstClippedRow,countLastClippedRow).length();
+}
+
+QRect DrawHelper::getSelectionScreenRect(const MaEditorSelection &selection) const {
+    CHECK(!selection.getRect().isEmpty(), QRect());
+
+    const U2Region xRange = ui->getBaseWidthController()->getBasesScreenRange(selection.getXRegion());
+    CHECK(!xRange.isEmpty(), QRect());
+
+    const U2Region yRange = ui->getRowHeightController()->getRowsScreenRangeByNumbers(selection.getYRegion());
+    CHECK(!yRange.isEmpty(), QRect());
+
+    return QRect(xRange.startPos, yRange.startPos, xRange.length - 1, yRange.length - 1);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.h b/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.h
new file mode 100644
index 0000000..6c744a5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/DrawHelper.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_DRAW_HELPER_H_
+#define _U2_DRAW_HELPER_H_
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class MaEditorWgt;
+class MaEditorSelection;
+class MSACollapsibleItemModel;
+class ScrollController;
+
+class U2VIEW_EXPORT DrawHelper {
+public:
+    DrawHelper(MaEditorWgt *maEditorWgt);
+
+    U2Region getVisibleBases(int widgetWidth, bool countFirstClippedBase = true, bool countLastClippedBase = true) const;
+    U2Region getVisibleRowsNumbers(int widgetHeight, bool countFirstClippedRow = true, bool countLastClippedRow = true) const;
+    QList<int> getVisibleRowsIndexes(int widgetHeight, bool countFirstClippedRow = true, bool countLastClippedRow = true) const;
+    QVector<U2Region> getGroupedVisibleRowsIndexes(int widgetHeight, bool countFirstClippedRow = true, bool countLastClippedRow = true) const;
+
+    int getVisibleBasesCount(int widgetWidth, bool countFirstClippedBase = true, bool countLastClippedBase = true) const;
+    int getVisibleRowsCount(int widgetHeight, bool countFirstClippedRow = true, bool countLastClippedRow = true) const;
+
+    QRect getSelectionScreenRect(const MaEditorSelection &selection) const;
+
+private:
+    MaEditorWgt *ui;
+    ScrollController *scrollController;
+    MSACollapsibleItemModel *collapsibleModel;
+};
+
+}   // namespace U2
+
+#endif // _U2_DRAW_HELPER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.cpp
new file mode 100644
index 0000000..2d833f7
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.cpp
@@ -0,0 +1,156 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QBitArray>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GUIUtils.h>
+#include <U2Gui/Notification.h>
+
+#include "MaAmbiguousCharactersController.h"
+#include "ScrollController.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+const QPoint MaAmbiguousCharactersController::INVALID_POINT = QPoint(-1, -1);
+
+MaAmbiguousCharactersController::MaAmbiguousCharactersController(MaEditorWgt *maEditorWgt)
+    : QObject(maEditorWgt),
+      maEditor(NULL != maEditorWgt ? maEditorWgt->getEditor() : NULL),
+      maEditorWgt(maEditorWgt),
+      nextAction(NULL),
+      previousAction(NULL)
+{
+    SAFE_POINT(NULL != maEditorWgt, "maEditorWgt is NULL", );
+    SAFE_POINT(NULL != maEditor, "maEditor is NULL", );
+
+    nextAction = new QAction(QIcon(":core/images/amb_forward.png"), tr("Jump to next ambiguous character"), this);
+    nextAction->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::Key_A));
+    nextAction->setObjectName("next_ambiguous");
+    GUIUtils::updateActionToolTip(nextAction);
+    connect(nextAction, SIGNAL(triggered(bool)), SLOT(sl_next()));
+
+    previousAction = new QAction(QIcon(":core/images/amb_backward.png"), tr("Jump to previous ambiguous character"), this);
+    previousAction->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_A));
+    previousAction->setObjectName("prev_ambiguous");
+    GUIUtils::updateActionToolTip(previousAction);
+    connect(previousAction, SIGNAL(triggered(bool)), SLOT(sl_previous()));
+
+    connect(maEditor->getMaObject(), SIGNAL(si_alignmentChanged(MultipleAlignment, MaModificationInfo)), SLOT(sl_resetCachedIterator()));
+    connect(maEditorWgt->getCollapseModel(), SIGNAL(si_toggled()), SLOT(sl_resetCachedIterator()));
+}
+
+QAction *MaAmbiguousCharactersController::getPreviousAction() const {
+    return previousAction;
+}
+
+QAction *MaAmbiguousCharactersController::getNextAction() const {
+    return nextAction;
+}
+
+void MaAmbiguousCharactersController::sl_next() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Jump to next ambiguous character", maEditor->getFactoryId());
+    scrollToNextAmbiguous(Forward);
+}
+
+void MaAmbiguousCharactersController::sl_previous() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Jump to previous ambiguous character", maEditor->getFactoryId());
+    scrollToNextAmbiguous(Backward);
+}
+
+void MaAmbiguousCharactersController::sl_resetCachedIterator() {
+    cachedIterator.reset();
+}
+
+void MaAmbiguousCharactersController::scrollToNextAmbiguous(NavigationDirection direction) const {
+    const QPoint nextAmbiguous = findNextAmbiguous(direction);
+    if (INVALID_POINT != nextAmbiguous) {
+        maEditorWgt->getScrollController()->centerPoint(nextAmbiguous, maEditorWgt->getSequenceArea()->size());
+        maEditorWgt->getSequenceArea()->setSelection(MaEditorSelection(nextAmbiguous, 1, 1));
+    } else {
+        // no mismatches - show notification
+        const NotificationStack *notificationStack = AppContext::getMainWindow()->getNotificationStack();
+        CHECK(notificationStack != NULL, );
+        notificationStack->addNotification(tr("There are no ambiguous characters in the alignment."), Info_Not);
+    }
+}
+
+QPoint MaAmbiguousCharactersController::getStartPosition() const {
+    const MaEditorSelection selection = maEditorWgt->getSequenceArea()->getSelection();
+    if (!selection.isEmpty()) {
+        return selection.topLeft();
+    }
+
+    return QPoint(maEditorWgt->getScrollController()->getFirstVisibleBase(),
+                  maEditorWgt->getScrollController()->getFirstVisibleRowIndex());
+}
+
+namespace {
+
+QBitArray getAmbiguousCharacters() {
+    QBitArray ambiguousCharacters(256);
+    const QByteArray ambiguousCharactersString = "MRWSYKVHDBNX";
+    for (int i = 0; i < ambiguousCharactersString.length(); i++) {
+        ambiguousCharacters.setBit(static_cast<int>(ambiguousCharactersString[i]));
+    }
+    return ambiguousCharacters;
+}
+
+}
+
+QPoint MaAmbiguousCharactersController::findNextAmbiguous(NavigationDirection direction) const {
+    static const QBitArray ambiguousCharacters = getAmbiguousCharacters();
+
+    const QPoint startPosition = getStartPosition();
+    prepareIterator(direction, startPosition);
+    SAFE_POINT(NULL != cachedIterator, "MaIterator is not valid", INVALID_POINT);
+
+    while (cachedIterator->hasNext()) {
+        if (ambiguousCharacters[cachedIterator->next()]) {
+            return cachedIterator->getMaPoint();
+        }
+        CHECK(cachedIterator->getMaPoint() != startPosition, INVALID_POINT);
+    }
+
+    return INVALID_POINT;
+}
+
+void MaAmbiguousCharactersController::prepareIterator(NavigationDirection direction, const QPoint &startPosition) const {
+    if (NULL == cachedIterator) {
+        cachedIterator.reset(new MaIterator(maEditor->getMaObject()->getMultipleAlignment(),
+                                            direction,
+                                            maEditorWgt->getCollapseModel()->getDisplayableRowsIndexes()));
+        cachedIterator->setCircular(true);
+        cachedIterator->setIterateInCoreRegionsOnly(true);
+    }
+    cachedIterator->setMaPoint(startPosition);
+    cachedIterator->setDirection(direction);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.h b/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.h
new file mode 100644
index 0000000..8940d30
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/MaAmbiguousCharactersController.h
@@ -0,0 +1,69 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_AMBIGUOUS_CHARACTERS_CONTROLLER_H_
+#define _U2_MA_AMBIGUOUS_CHARACTERS_CONTROLLER_H_
+
+#include <QObject>
+
+#include <U2Core/global.h>
+#include <U2Core/MaIterator.h>
+
+class QAction;
+
+namespace U2 {
+
+class MaEditor;
+class MaEditorWgt;
+
+class MaAmbiguousCharactersController : public QObject {
+    Q_OBJECT
+public:
+    MaAmbiguousCharactersController(MaEditorWgt *maEditorWgt);
+
+    QAction *getPreviousAction() const;
+    QAction *getNextAction() const;
+
+private slots:
+    void sl_next();
+    void sl_previous();
+    void sl_resetCachedIterator();
+
+private:
+    QPoint getStartPosition() const;
+    void scrollToNextAmbiguous(NavigationDirection direction) const;
+    QPoint findNextAmbiguous(NavigationDirection direction) const;
+    void prepareIterator(NavigationDirection direction, const QPoint &startPosition) const;
+
+    MaEditor *maEditor;
+    MaEditorWgt *maEditorWgt;
+
+    QAction *nextAction;
+    QAction *previousAction;
+
+    mutable QScopedPointer<MaIterator> cachedIterator;
+
+    static const QPoint INVALID_POINT;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_AMBIGUOUS_CHARACTERS_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.cpp
new file mode 100644
index 0000000..d97b72f
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.cpp
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaRowHeightController.h"
+#include "ov_msa/McaEditor.h"
+#include "ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.h"
+
+namespace U2 {
+
+McaRowHeightController::McaRowHeightController(McaEditorWgt *mcaEditorWgt)
+    : RowHeightController(mcaEditorWgt)
+{
+
+}
+
+int McaRowHeightController::getRowHeight(int rowIndex) const {
+    const int fontHeight = QFontMetrics(ui->getEditor()->getFont(), ui).height();
+
+    int rowHeigth = fontHeight;
+    if (!ui->getCollapseModel()->isItemCollapsed(rowIndex)) {
+        rowHeigth += SequenceWithChromatogramAreaRenderer::CHROMATOGRAM_MAX_HEIGHT;
+    }
+    rowHeigth = qRound(rowHeigth * ui->getEditor()->zoomMult);
+    return rowHeigth;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.h b/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.h
new file mode 100644
index 0000000..75e6d53
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/McaRowHeightController.h
@@ -0,0 +1,40 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_ROW_HEIGHT_CONTROLLER_H_
+#define _U2_MCA_ROW_HEIGHT_CONTROLLER_H_
+
+#include "RowHeightController.h"
+
+namespace U2 {
+
+class McaEditorWgt;
+
+class McaRowHeightController : public RowHeightController {
+public:
+    McaRowHeightController(McaEditorWgt *mcaEditorWgt);
+
+    int getRowHeight(int rowIndex) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_ROW_HEIGHT_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.cpp
new file mode 100644
index 0000000..545afc7
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.cpp
@@ -0,0 +1,40 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaRowHeightController.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/MSAEditor.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+MsaRowHeightController::MsaRowHeightController(MsaEditorWgt *msaEditortWgt) :
+    RowHeightController(msaEditortWgt)
+{
+
+}
+
+int MsaRowHeightController::getRowHeight(int rowIndex) const {
+    const bool isVisible = ui->getCollapseModel()->isRowVisible(rowIndex);
+    return isVisible ? getSequenceHeight() : 0;
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.h b/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.h
new file mode 100644
index 0000000..679fc61
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/MsaRowHeightController.h
@@ -0,0 +1,40 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_ROW_HEIGHT_CONTROLLER_H_
+#define _U2_MSA_ROW_HEIGHT_CONTROLLER_H_
+
+#include "RowHeightController.h"
+
+namespace U2 {
+
+class MsaEditorWgt;
+
+class MsaRowHeightController : public RowHeightController {
+public:
+    MsaRowHeightController(MsaEditorWgt *msaEditortWgt);
+
+    int getRowHeight(int rowIndex) const;
+};
+
+}   // namespace U2
+
+#endif // _U2_MSA_ROW_HEIGHT_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.cpp
new file mode 100644
index 0000000..4e68faa
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.cpp
@@ -0,0 +1,184 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "RowHeightController.h"
+#include "ScrollController.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+RowHeightController::RowHeightController(MaEditorWgt *maEditorWgt)
+    : QObject(maEditorWgt),
+      ui(maEditorWgt)
+{
+
+}
+
+int RowHeightController::getRowScreenOffset(int rowIndex) const {
+    return getRowScreenRange(rowIndex).startPos;
+}
+
+int RowHeightController::getRowScreenOffsetByNumber(int rowNumber) const {
+    return getRowScreenOffset(ui->getCollapseModel()->mapToRow(rowNumber));
+}
+
+int RowHeightController::getRowScreenCenterByNumber(int rowNumber) const {
+    return getRowScreenOffsetByNumber(rowNumber) + getRowHeightByNumber(rowNumber) / 2;
+}
+
+int RowHeightController::getRowGlobalOffset(int rowIndex) const {
+    int rowOffset = 0;
+    for (int i = 0; i < rowIndex; i++) {
+        rowOffset += getRowHeight(i);
+    }
+    return rowOffset;
+}
+
+int RowHeightController::getRowGlobalOffset(int rowIndex, const QList<int> &rowIndexes) const {
+    int rowOffset = 0;
+    foreach (const int currentIndex, rowIndexes) {
+        if (currentIndex != rowIndex) {
+            rowOffset += getRowHeight(currentIndex);
+        } else {
+            return rowOffset;
+        }
+    }
+    FAIL(false, 0);
+}
+
+int RowHeightController::getFirstVisibleRowGlobalOffset(bool countClipped) const {
+    return getRowGlobalOffset(ui->getScrollController()->getFirstVisibleRowIndex(countClipped));
+}
+
+int RowHeightController::getFirstVisibleRowScreenOffset(bool countClipped) const {
+    const int firstVisibleRowGlobalOffset = getFirstVisibleRowGlobalOffset(countClipped);
+    return firstVisibleRowGlobalOffset - ui->getScrollController()->getScreenPosition().y();
+}
+
+int RowHeightController::getRowHeightByNumber(int rowNumber) const {
+    return getRowHeight(ui->getCollapseModel()->mapToRow(rowNumber));
+}
+
+int RowHeightController::getRowsHeight(const QList<int> &rowIndexes) const {
+    int rowsHeight = 0;
+    foreach (int rowIndex, rowIndexes) {
+        rowsHeight += getRowHeight(rowIndex);
+    }
+    return rowsHeight;
+}
+
+int RowHeightController::getTotalAlignmentHeight() const {
+    return static_cast<int>(getRowsGlobalRange(0, ui->getCollapseModel()->getDisplayableRowsCount()).length);
+}
+
+int RowHeightController::getSequenceHeight() const {
+    const int fontHeight = QFontMetrics(ui->getEditor()->getFont(), ui).height();
+    const float zoomMult = ui->getEditor()->zoomMult;
+    return qRound(fontHeight * zoomMult);
+}
+
+int RowHeightController::globalYPositionToRowIndex(int y) const {
+    return ui->getCollapseModel()->mapToRow(globalYPositionToRowNumber(y));
+}
+
+int RowHeightController::globalYPositionToRowNumber(int y) const {
+    const int getDisplayableRowsCount = ui->getCollapseModel()->getDisplayableRowsCount();
+    int accumulatedHeight = 0;
+    for (int i = 0; i < getDisplayableRowsCount; i++) {
+        const int rowHeight = getRowHeightByNumber(i);
+        if (accumulatedHeight + rowHeight <= y) {
+            accumulatedHeight += rowHeight;
+        } else {
+            return i;
+        }
+    }
+    return -1;
+}
+
+int RowHeightController::screenYPositionToRowIndex(int y) const {
+    return globalYPositionToRowIndex(y + ui->getScrollController()->getScreenPosition().y());
+}
+
+int RowHeightController::screenYPositionToRowNumber(int y) const {
+    return globalYPositionToRowNumber(y + ui->getScrollController()->getScreenPosition().y());
+}
+
+U2Region RowHeightController::getRowGlobalRange(int rowIndex) const {
+    return U2Region(getRowGlobalOffset(rowIndex), getRowHeight(rowIndex));
+}
+
+U2Region RowHeightController::getRowGlobalRange(int rowIndex, const QList<int> &rowIndexes) const {
+    return U2Region(getRowGlobalOffset(rowIndex, rowIndexes), getRowHeight(rowIndex));
+}
+
+U2Region RowHeightController::getRowGlobalRangeByNumber(int rowNumber) const {
+    return getRowGlobalRange(ui->getCollapseModel()->mapToRow(rowNumber));
+}
+
+U2Region RowHeightController::getRowsGlobalRange(int startRowNumber, int count) const {
+    QList<int> rowIndexes;
+    for (int i = startRowNumber; i < startRowNumber + count; i++) {
+        rowIndexes << ui->getCollapseModel()->mapToRow(i);
+    }
+    return getRowsGlobalRange(rowIndexes);
+}
+
+U2Region RowHeightController::getRowsGlobalRange(const QList<int> &rowIndexes) const {
+    CHECK(!rowIndexes.isEmpty(), U2Region());
+    int length = 0;
+    foreach (const int rowIndex, rowIndexes) {
+        length += getRowHeight(rowIndex);
+    }
+    return U2Region(getRowGlobalRange(rowIndexes.first()).startPos, length);
+}
+
+U2Region RowHeightController::getRowScreenRange(int rowIndex) const {
+    return getRowScreenRange(rowIndex, ui->getScrollController()->getScreenPosition().y());
+}
+
+U2Region RowHeightController::getRowScreenRange(int rowIndex, const QList<int> &rowIndexes, int screenYOrigin) const {
+    const U2Region rowGlobalRange = getRowGlobalRange(rowIndex, rowIndexes);
+    return U2Region(rowGlobalRange.startPos - screenYOrigin, rowGlobalRange.length);
+}
+
+U2Region RowHeightController::getRowScreenRange(int rowIndex, int screenYOrigin) const {
+    const U2Region rowRange = getRowGlobalRange(rowIndex);
+    return U2Region(rowRange.startPos - screenYOrigin, rowRange.length);
+}
+
+U2Region RowHeightController::getRowScreenRangeByNumber(int rowNumber) const {
+    const int screenYOrigin = ui->getScrollController()->getScreenPosition().y();
+    return getRowScreenRange(ui->getCollapseModel()->mapToRow(rowNumber), screenYOrigin);
+}
+
+U2Region RowHeightController::getRowScreenRangeByNumber(int rowNumber, int screenYOrigin) const {
+    return getRowScreenRange(ui->getCollapseModel()->mapToRow(rowNumber), screenYOrigin);
+}
+
+U2Region RowHeightController::getRowsScreenRangeByNumbers(const U2Region &rowsNumbers) const {
+    const QList<int> rowsIndexes = ui->getCollapseModel()->numbersToIndexes(rowsNumbers);
+    const U2Region rowsGlobalRange = getRowsGlobalRange(rowsIndexes);
+    return U2Region(rowsGlobalRange.startPos - ui->getScrollController()->getScreenPosition().y(), rowsGlobalRange.length);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.h b/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.h
new file mode 100644
index 0000000..8a4f4a3
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/RowHeightController.h
@@ -0,0 +1,80 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_ROW_HEIGHT_CONTROLLER_H_
+#define _U2_ROW_HEIGHT_CONTROLLER_H_
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class MaEditorWgt;
+
+class U2VIEW_EXPORT RowHeightController : public QObject{
+    Q_OBJECT
+public:
+    RowHeightController(MaEditorWgt *ui);
+
+    int getRowScreenOffset(int rowIndex) const;
+    int getRowScreenOffsetByNumber(int rowNumber) const;
+
+    int getRowScreenCenterByNumber(int rowNumber) const;
+
+    int getRowGlobalOffset(int rowIndex) const;
+    int getRowGlobalOffset(int rowIndex, const QList<int> &rowIndexes) const;
+
+    int getFirstVisibleRowGlobalOffset(bool countClipped) const;
+    int getFirstVisibleRowScreenOffset(bool countClipped) const;
+
+    virtual int getRowHeight(int rowIndex) const = 0;
+    int getRowHeightByNumber(int rowNumber) const;
+    int getRowsHeight(const QList<int> &rowIndexes) const;
+
+    U2Region getRowGlobalRange(int rowIndex) const;
+    U2Region getRowGlobalRange(int rowIndex, const QList<int> &rowIndexes) const;
+    U2Region getRowGlobalRangeByNumber(int rowNumber) const;
+
+    U2Region getRowsGlobalRange(int startRowNumber, int count) const;
+    U2Region getRowsGlobalRange(const QList<int> &rowIndexes) const;
+
+    U2Region getRowScreenRange(int rowIndex) const;
+    U2Region getRowScreenRange(int rowIndex, const QList<int> &rowIndexes, int screenYOrigin) const;
+    U2Region getRowScreenRange(int rowIndex, int screenYOrigin) const;
+    U2Region getRowScreenRangeByNumber(int rowNumber) const;
+    U2Region getRowScreenRangeByNumber(int rowNumber, int screenYOrigin) const;
+
+    U2Region getRowsScreenRangeByNumbers(const U2Region &rowsNumbers) const;
+
+    int getTotalAlignmentHeight() const;
+    int getSequenceHeight() const;
+
+    int globalYPositionToRowIndex(int y) const;
+    int globalYPositionToRowNumber(int y) const;
+    int screenYPositionToRowIndex(int y) const;
+    int screenYPositionToRowNumber(int y) const;
+
+protected:
+    MaEditorWgt *ui;
+};
+
+}   // namespace U2
+
+#endif // _U2_ROW_HEIGHT_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.cpp b/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.cpp
new file mode 100644
index 0000000..2907af0
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.cpp
@@ -0,0 +1,457 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/SignalBlocker.h>
+
+#include "BaseWidthController.h"
+#include "DrawHelper.h"
+#include "RowHeightController.h"
+#include "ScrollController.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+
+namespace U2 {
+
+ScrollController::ScrollController(MaEditor *maEditor, MaEditorWgt *maEditorUi, MSACollapsibleItemModel *collapsibleModel)
+    : QObject(maEditorUi),
+      maEditor(maEditor),
+      ui(maEditorUi),
+      collapsibleModel(collapsibleModel),
+      savedFirstVisibleRowIndex(0),
+      savedFirstVisibleRowAdditionalOffset(0)
+{
+    connect(this, SIGNAL(si_visibleAreaChanged()), maEditorUi, SIGNAL(si_completeRedraw()));
+    connect(collapsibleModel, SIGNAL(si_aboutToBeToggled()), SLOT(sl_collapsibleModelIsAboutToBeChanged()));
+    connect(collapsibleModel, SIGNAL(si_toggled()), SLOT(sl_collapsibleModelChanged()));
+}
+
+void ScrollController::init(GScrollBar *hScrollBar, GScrollBar *vScrollBar) {
+    this->hScrollBar = hScrollBar;
+    hScrollBar->setValue(0);
+    connect(hScrollBar, SIGNAL(valueChanged(int)), SIGNAL(si_visibleAreaChanged()));
+
+    this->vScrollBar = vScrollBar;
+    vScrollBar->setValue(0);
+    connect(vScrollBar, SIGNAL(valueChanged(int)), SIGNAL(si_visibleAreaChanged()));
+
+    sl_updateScrollBars();
+}
+
+QPoint ScrollController::getScreenPosition() const {
+    return QPoint(hScrollBar->value(), vScrollBar->value());
+}
+
+void ScrollController::updateHorizontalScrollBar() {
+    updateHorizontalScrollBarPrivate();
+    emit si_visibleAreaChanged();
+}
+
+void ScrollController::updateVerticalScrollBar() {
+    updateVerticalScrollBarPrivate();
+    emit si_visibleAreaChanged();
+}
+
+void ScrollController::scrollToRowByNumber(int rowNumber, int widgetHeight) {
+    const U2Region rowRegion = ui->getRowHeightController()->getRowGlobalRangeByNumber(rowNumber);
+    const U2Region visibleRegion = getVerticalRangeToDrawIn(widgetHeight);
+    if (rowRegion.startPos < visibleRegion.startPos) {
+        vScrollBar->setValue(static_cast<int>(rowRegion.startPos));
+    } else if (rowRegion.endPos() >= visibleRegion.endPos()) {
+        if (rowRegion.length > visibleRegion.length) {
+            vScrollBar->setValue(static_cast<int>(rowRegion.startPos));
+        } else if (rowRegion.startPos > visibleRegion.startPos) {
+            vScrollBar->setValue(static_cast<int>(rowRegion.endPos() - widgetHeight));
+        }
+    }
+}
+
+void ScrollController::scrollToBase(int baseNumber, int widgetWidth) {
+    const U2Region baseRange = U2Region(ui->getBaseWidthController()->getBaseGlobalOffset(baseNumber), maEditor->getColumnWidth());
+    const U2Region visibleRange = getHorizontalRangeToDrawIn(widgetWidth);
+    if (baseRange.startPos < visibleRange.startPos) {
+        hScrollBar->setValue(static_cast<int>(baseRange.startPos));
+    } else if (baseRange.endPos() >= visibleRange.endPos()) {
+        hScrollBar->setValue(static_cast<int>(baseRange.endPos() - widgetWidth));
+    }
+}
+
+void ScrollController::scrollToPoint(const QPoint &maPoint, const QSize &screenSize) {
+    scrollToBase(maPoint.x(), screenSize.width());
+    scrollToRowByNumber(maPoint.y(), screenSize.height());
+}
+
+void ScrollController::centerBase(int baseNumber, int widgetWidth) {
+    const U2Region baseGlobalRange = ui->getBaseWidthController()->getBaseGlobalRange(baseNumber);
+    const U2Region visibleRange = getHorizontalRangeToDrawIn(widgetWidth);
+    const int newScreenXOffset = baseGlobalRange.startPos - visibleRange.length / 2;
+    hScrollBar->setValue(newScreenXOffset);
+}
+
+void ScrollController::centerRow(int rowNumber, int widgetHeight) {
+    const U2Region rowGlobalRange = ui->getRowHeightController()->getRowGlobalRangeByNumber(rowNumber);
+    const U2Region visibleRange = getVerticalRangeToDrawIn(widgetHeight);
+    const int newScreenYOffset = rowGlobalRange.startPos - visibleRange.length / 2;
+    vScrollBar->setValue(newScreenYOffset);
+}
+
+void ScrollController::centerPoint(const QPoint &maPoint, const QSize &widgetSize) {
+    centerBase(maPoint.x(), widgetSize.width());
+    centerRow(maPoint.y(), widgetSize.height());
+}
+
+void ScrollController::setHScrollbarValue(int value) {
+    hScrollBar->setValue(value);
+}
+
+void ScrollController::setVScrollbarValue(int value) {
+    vScrollBar->setValue(value);
+}
+
+void ScrollController::setFirstVisibleBase(int firstVisibleBase) {
+    hScrollBar->setValue(ui->getBaseWidthController()->getBaseGlobalOffset(firstVisibleBase));
+}
+
+void ScrollController::setFirstVisibleRowByNumber(int firstVisibleRowNumber) {
+    const int firstVisibleRowIndex = ui->getCollapseModel()->mapToRow(firstVisibleRowNumber);
+    setFirstVisibleRowByIndex(firstVisibleRowIndex);
+}
+
+void ScrollController::setFirstVisibleRowByIndex(int firstVisibleRowIndex) {
+    vScrollBar->setValue(ui->getRowHeightController()->getRowGlobalOffset(firstVisibleRowIndex));
+}
+
+void ScrollController::scrollSmoothly(const Directions &directions) {
+    QAbstractSlider::SliderAction horizontalAction = QAbstractSlider::SliderNoAction;
+    QAbstractSlider::SliderAction verticalAction = QAbstractSlider::SliderNoAction;
+
+    if (directions.testFlag(Up)) {
+        verticalAction = QAbstractSlider::SliderSingleStepSub;
+    }
+    if (directions.testFlag(Down)) {
+        verticalAction = QAbstractSlider::SliderSingleStepAdd;
+    }
+
+    if (directions.testFlag(Left)) {
+        horizontalAction = QAbstractSlider::SliderSingleStepSub;
+    }
+    if (directions.testFlag(Right)) {
+        horizontalAction = QAbstractSlider::SliderSingleStepAdd;
+    }
+
+    if (verticalAction != vScrollBar->getRepeatAction()) {
+        vScrollBar->setupRepeatAction(verticalAction, 500, 50);
+    }
+
+    if (horizontalAction != hScrollBar->getRepeatAction()) {
+        hScrollBar->setupRepeatAction(horizontalAction, 500, 50);
+    }
+}
+
+void ScrollController::stopSmoothScrolling() {
+    hScrollBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
+    vScrollBar->setupRepeatAction(QAbstractSlider::SliderNoAction);
+}
+
+void ScrollController::scrollStep(ScrollController::Direction direction) {
+    switch (direction) {
+    case Up:
+        vScrollBar->triggerAction(QAbstractSlider::SliderSingleStepSub);
+        break;
+    case Down:
+        vScrollBar->triggerAction(QAbstractSlider::SliderSingleStepAdd);
+        break;
+    case Left:
+        hScrollBar->triggerAction(QAbstractSlider::SliderSingleStepSub);
+        break;
+    case Right:
+        hScrollBar->triggerAction(QAbstractSlider::SliderSingleStepAdd);
+        break;
+    default:
+        FAIL("An unknown direction" ,);
+        break;
+    }
+}
+
+void ScrollController::scrollPage(ScrollController::Direction direction) {
+    switch (direction) {
+    case Up:
+        vScrollBar->triggerAction(QAbstractSlider::SliderPageStepSub);
+        break;
+    case Down:
+        vScrollBar->triggerAction(QAbstractSlider::SliderPageStepAdd);
+        break;
+    case Left:
+        hScrollBar->triggerAction(QAbstractSlider::SliderPageStepSub);
+        break;
+    case Right:
+        hScrollBar->triggerAction(QAbstractSlider::SliderPageStepAdd);
+        break;
+    default:
+        FAIL("An unknown direction" ,);
+        break;
+    }
+}
+
+void ScrollController::scrollToEnd(ScrollController::Direction direction) {
+    switch (direction) {
+    case Up:
+        vScrollBar->triggerAction(QAbstractSlider::SliderToMinimum);
+        break;
+    case Down:
+        vScrollBar->triggerAction(QAbstractSlider::SliderToMaximum);
+        break;
+    case Left:
+        hScrollBar->triggerAction(QAbstractSlider::SliderToMinimum);
+        break;
+    case Right:
+        hScrollBar->triggerAction(QAbstractSlider::SliderToMaximum);
+        break;
+    default:
+        FAIL("An unknown direction", );
+        break;
+    }
+}
+
+void ScrollController::scrollToMovedSelection(int deltaX, int deltaY) {
+    const Direction direction = (deltaX != 0 ? (deltaX < 0 ? ScrollController::Left : ScrollController::Right)
+                                             : (deltaY != 0 ? (deltaY < 0 ? ScrollController::Up
+                                                                          : ScrollController::Down)
+                                                            : ScrollController::None));
+    scrollToMovedSelection(direction);
+}
+
+void ScrollController::scrollToMovedSelection(ScrollController::Direction direction) {
+    U2Region fullyVisibleRegion;
+    U2Region selectionRegion;
+    const MaEditorSelection selection = ui->getSequenceArea()->getSelection();
+    int selectionEdgePosition = 0;
+    const QSize widgetWize = ui->getSequenceArea()->size();
+
+    switch (direction) {
+    case Up:
+        fullyVisibleRegion = ui->getDrawHelper()->getVisibleRowsNumbers(widgetWize.height(), false, false);
+        selectionRegion = selection.getYRegion();
+        selectionEdgePosition = static_cast<int>(selectionRegion.startPos);
+        break;
+    case Down:
+        fullyVisibleRegion = ui->getDrawHelper()->getVisibleRowsNumbers(widgetWize.height(), false, false);
+        selectionRegion = selection.getYRegion();
+        selectionEdgePosition = static_cast<int>(selectionRegion.endPos() - 1);
+        break;
+    case Left:
+        fullyVisibleRegion = ui->getDrawHelper()->getVisibleBases(widgetWize.width(), false, false);
+        selectionRegion = selection.getXRegion();
+        selectionEdgePosition = static_cast<int>(selectionRegion.startPos);
+        break;
+    case Right:
+        fullyVisibleRegion = ui->getDrawHelper()->getVisibleBases(widgetWize.width(), false, false);
+        selectionRegion = selection.getXRegion();
+        selectionEdgePosition = static_cast<int>(selectionRegion.endPos() - 1);
+        break;
+    case None:
+        return;
+    default:
+        FAIL("An unknown direction", );
+        break;
+    }
+
+    const bool selectionEdgeIsFullyVisible = fullyVisibleRegion.contains(selectionEdgePosition);
+    if (!selectionEdgeIsFullyVisible) {
+        switch (direction) {
+        case Up:
+        case Down:
+            scrollToRowByNumber(static_cast<int>(selectionEdgePosition), widgetWize.height());
+            break;
+        case Left:
+        case Right:
+            scrollToBase(static_cast<int>(selectionEdgePosition), widgetWize.width());
+            break;
+        case None:
+            return;
+        default:
+            FAIL("An unknown direction", );
+            break;
+        }
+    }
+}
+
+int ScrollController::getFirstVisibleBase(bool countClipped) const {
+    const bool removeClippedBase = !countClipped && (getAdditionalXOffset() != 0);
+    const int firstVisibleBase = ui->getBaseWidthController()->globalXPositionToColumn(hScrollBar->value()) + (removeClippedBase ? 1 : 0);
+    assert(firstVisibleBase < maEditor->getAlignmentLen());
+    return qMin(firstVisibleBase, maEditor->getAlignmentLen() - 1);
+}
+
+int ScrollController::getLastVisibleBase(int widgetWidth, bool countClipped) const {
+    const bool removeClippedBase = !countClipped && ((hScrollBar->value() + widgetWidth) % maEditor->getColumnWidth() != 0);
+    const int lastVisiblebase = ui->getBaseWidthController()->globalXPositionToColumn(hScrollBar->value() + widgetWidth - 1) - (removeClippedBase ? 1 : 0);
+    return qMin(lastVisiblebase, maEditor->getAlignmentLen() - 1);
+}
+
+int ScrollController::getFirstVisibleRowIndex(bool countClipped) const {
+    const bool removeClippedRow = !(countClipped || getAdditionalYOffset() == 0);
+    return ui->getRowHeightController()->globalYPositionToRowIndex(vScrollBar->value()) + (removeClippedRow ? 1 : 0);
+}
+
+int ScrollController::getFirstVisibleRowNumber(bool countClipped) const {
+    return collapsibleModel->rowToMap(getFirstVisibleRowIndex(countClipped));
+}
+
+int ScrollController::getLastVisibleRowIndex(int widgetHeight, bool countClipped) const {
+    return collapsibleModel->mapToRow(getLastVisibleRowNumber(widgetHeight, countClipped));
+}
+
+int ScrollController::getLastVisibleRowNumber(int widgetHeight, bool countClipped) const {
+    int lastVisibleRowNumber = ui->getRowHeightController()->globalYPositionToRowNumber(vScrollBar->value() + widgetHeight);
+    if (lastVisibleRowNumber < 0) {
+        lastVisibleRowNumber = collapsibleModel->getDisplayableRowsCount() - 1;
+    }
+    const U2Region lastRowScreenRegion = ui->getRowHeightController()->getRowScreenRangeByNumber(lastVisibleRowNumber);
+    const bool removeClippedRow = !countClipped && lastRowScreenRegion.endPos() > widgetHeight;
+    return lastVisibleRowNumber - (removeClippedRow ? 1 : 0);
+}
+
+QPoint ScrollController::getMaPointByScreenPoint(const QPoint &point) const {
+    const int columnNumber = ui->getBaseWidthController()->screenXPositionToColumn(point.x());
+    int rowNumber = ui->getRowHeightController()->screenYPositionToRowNumber(point.y());
+    if (-1 == rowNumber) {
+        rowNumber = ui->getCollapseModel()->getDisplayableRowsCount();
+    }
+    return QPoint(columnNumber, rowNumber);
+}
+
+GScrollBar *ScrollController::getHorizontalScrollBar() const {
+    return hScrollBar;
+}
+
+GScrollBar *ScrollController::getVerticalScrollBar() const {
+    return vScrollBar;
+}
+
+void ScrollController::sl_zoomScrollBars() {
+    zoomHorizontalScrollBarPrivate();
+    zoomVerticalScrollBarPrivate();
+    emit si_visibleAreaChanged();
+}
+
+void ScrollController::sl_updateScrollBars() {
+    updateHorizontalScrollBarPrivate();
+    updateVerticalScrollBarPrivate();
+    emit si_visibleAreaChanged();
+}
+
+void ScrollController::sl_collapsibleModelIsAboutToBeChanged() {
+    savedFirstVisibleRowIndex = getFirstVisibleRowIndex(true);
+    savedFirstVisibleRowAdditionalOffset = getScreenPosition().y() - ui->getRowHeightController()->getRowGlobalOffset(savedFirstVisibleRowIndex);
+}
+
+void ScrollController::sl_collapsibleModelChanged() {
+    const int newFirstVisibleRowIndex = collapsibleModel->rowToMap(savedFirstVisibleRowIndex);
+    const int newFirstVisibleRowOffset = ui->getRowHeightController()->getRowGlobalOffset(newFirstVisibleRowIndex);
+    setVScrollbarValue(newFirstVisibleRowOffset + savedFirstVisibleRowAdditionalOffset);
+}
+
+int ScrollController::getAdditionalXOffset() const {
+    return hScrollBar->value() % maEditor->getColumnWidth();
+}
+
+int ScrollController::getAdditionalYOffset() const {
+    const int firstVisibleRowIndex = ui->getRowHeightController()->globalYPositionToRowIndex(vScrollBar->value());
+    const int firstVisibleRowOffset = ui->getRowHeightController()->getRowGlobalOffset(firstVisibleRowIndex);
+    return vScrollBar->value() - firstVisibleRowOffset;
+}
+
+U2Region ScrollController::getHorizontalRangeToDrawIn(int widgetWidth) const {
+    return U2Region(hScrollBar->value(), widgetWidth);
+}
+
+U2Region ScrollController::getVerticalRangeToDrawIn(int widgetHeight) const {
+    return U2Region(vScrollBar->value(), widgetHeight);
+}
+
+void ScrollController::zoomHorizontalScrollBarPrivate() {
+    CHECK(!maEditor->isAlignmentEmpty(), );
+    SignalBlocker signalBlocker(hScrollBar);
+    Q_UNUSED(signalBlocker);
+
+    const int previousAlignmentWidth = hScrollBar->maximum() + ui->getSequenceArea()->width();
+    const double previousRelation = static_cast<double>(hScrollBar->value()) / previousAlignmentWidth;
+    updateHorizontalScrollBarPrivate();
+    hScrollBar->setValue(previousRelation * ui->getBaseWidthController()->getTotalAlignmentWidth());
+}
+
+void ScrollController::zoomVerticalScrollBarPrivate() {
+    CHECK(!maEditor->isAlignmentEmpty(), );
+    SignalBlocker signalBlocker(vScrollBar);
+    Q_UNUSED(signalBlocker);
+
+    const int previousAlignmentHeight = vScrollBar->maximum() + ui->getSequenceArea()->height();
+    const double previousRelation = static_cast<double>(vScrollBar->value()) / previousAlignmentHeight;
+    updateVerticalScrollBarPrivate();
+    vScrollBar->setValue(previousRelation * ui->getRowHeightController()->getTotalAlignmentHeight());
+}
+
+void ScrollController::updateHorizontalScrollBarPrivate() {
+    SAFE_POINT(NULL != hScrollBar, "Horizontal scrollbar is not initialized", );
+    SignalBlocker signalBlocker(hScrollBar);
+    Q_UNUSED(signalBlocker);
+
+    CHECK_EXT(!maEditor->isAlignmentEmpty(), hScrollBar->setVisible(false), );
+
+    const int alignmentLength = maEditor->getAlignmentLen();
+    const int columnWidth = maEditor->getColumnWidth();
+    const int sequenceAreaWidth = ui->getSequenceArea()->width();
+
+    hScrollBar->setMinimum(0);
+    hScrollBar->setMaximum(qMax(0, alignmentLength * columnWidth - sequenceAreaWidth));
+    hScrollBar->setSingleStep(columnWidth);
+    hScrollBar->setPageStep(sequenceAreaWidth);
+
+    const int numVisibleBases = getLastVisibleBase(sequenceAreaWidth) - getFirstVisibleBase();
+    SAFE_POINT(numVisibleBases <= alignmentLength, "Horizontal scrollbar appears unexpectedly: numVisibleBases is too small", );
+    hScrollBar->setVisible(numVisibleBases < alignmentLength);
+}
+
+void ScrollController::updateVerticalScrollBarPrivate() {
+    SAFE_POINT(NULL != vScrollBar, "Vertical scrollbar is not initialized", );
+    SignalBlocker signalBlocker(vScrollBar);
+    Q_UNUSED(signalBlocker);
+
+    CHECK_EXT(!maEditor->isAlignmentEmpty(), vScrollBar->setVisible(false), );
+
+    const int totalDisplayableSequences = ui->getSequenceArea()->getNumDisplayableSequences();
+    const int sequenceAreaHeight = ui->getSequenceArea()->height();
+    const int totalAlignmentHeight = ui->getRowHeightController()->getTotalAlignmentHeight();
+
+    vScrollBar->setMinimum(0);
+    vScrollBar->setMaximum(qMax(0, totalAlignmentHeight - sequenceAreaHeight));
+    vScrollBar->setSingleStep(ui->getRowHeightController()->getSequenceHeight());
+    vScrollBar->setPageStep(sequenceAreaHeight);
+
+    const int numVisibleSequences = getLastVisibleRowNumber(sequenceAreaHeight) - getFirstVisibleRowNumber() + 1;
+    SAFE_POINT(numVisibleSequences <= totalDisplayableSequences, "Vertical scrollbar appears unexpectedly: numVisibleSequences is too small", );
+    vScrollBar->setVisible(numVisibleSequences < totalDisplayableSequences);
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.h b/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.h
new file mode 100644
index 0000000..857dd34
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/helpers/ScrollController.h
@@ -0,0 +1,130 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SCROLL_CONTROLLER_H_
+#define _U2_SCROLL_CONTROLLER_H_
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class GScrollBar;
+class MaEditor;
+class MaEditorSelection;
+class MaEditorWgt;
+class MSACollapsibleItemModel;
+
+class U2VIEW_EXPORT ScrollController : public QObject {
+    Q_OBJECT
+public:
+    enum Direction {
+        None = 0,
+        Up = 1 << 0,
+        Down = 1 << 1,
+        Left = 1 << 2,
+        Right = 1 << 3
+    };
+    Q_DECLARE_FLAGS(Directions, Direction)
+
+    ScrollController(MaEditor *maEditor, MaEditorWgt *ui, MSACollapsibleItemModel *collapsibleModel);
+
+    void init(GScrollBar *hScrollBar, GScrollBar *vScrollBar);
+
+    QPoint getScreenPosition() const;       // in pixels
+
+    void updateHorizontalScrollBar();
+    void updateVerticalScrollBar();
+
+    void scrollToRowByNumber(int rowNumber, int widgetHeight);
+    void scrollToBase(int baseNumber, int widgetWidth);
+    void scrollToPoint(const QPoint &maPoint, const QSize &screenSize);
+
+    void centerBase(int baseNumber, int widgetWidth);
+    void centerRow(int rowNumber, int widgetHeight);
+    void centerPoint(const QPoint &maPoint, const QSize &widgetSize);
+
+    void setHScrollbarValue(int value);
+    void setVScrollbarValue(int value);
+
+    void setFirstVisibleBase(int firstVisibleBase);
+    void setFirstVisibleRowByNumber(int firstVisibleRowNumber);
+    void setFirstVisibleRowByIndex(int firstVisibleRowIndex);
+
+    void scrollSmoothly(const Directions &directions);
+    void stopSmoothScrolling();
+
+    void scrollStep(Direction direction);
+    void scrollPage(Direction direction);
+    void scrollToEnd(Direction direction);
+
+    void scrollToMovedSelection(int deltaX, int deltaY);
+    void scrollToMovedSelection(Direction direction);
+
+    int getFirstVisibleBase(bool countClipped = false) const;
+    int getLastVisibleBase(int widgetWidth, bool countClipped = false) const;
+    int getFirstVisibleRowIndex(bool countClipped = false) const;
+    int getFirstVisibleRowNumber(bool countClipped = false) const;
+    int getLastVisibleRowIndex(int widgetHeight, bool countClipped = false) const;
+    int getLastVisibleRowNumber(int widgetHeight, bool countClipped = false) const;
+
+    QPoint getMaPointByScreenPoint(const QPoint &point) const;    // can be out of MA boundaries
+
+    GScrollBar *getHorizontalScrollBar() const;
+    GScrollBar *getVerticalScrollBar() const;
+
+signals:
+    void si_visibleAreaChanged();
+
+public slots:
+    void sl_updateScrollBars();
+    void sl_zoomScrollBars();
+
+private slots:
+    void sl_collapsibleModelIsAboutToBeChanged();
+    void sl_collapsibleModelChanged();
+
+private:
+    int getAdditionalXOffset() const;       // in pixels;
+    int getAdditionalYOffset() const;       // in pixels;
+
+    U2Region getHorizontalRangeToDrawIn(int widgetWidth) const;     // in pixels
+    U2Region getVerticalRangeToDrawIn(int widgetHeight) const;       // in pixels
+
+    void zoomHorizontalScrollBarPrivate();
+    void zoomVerticalScrollBarPrivate();
+    void updateHorizontalScrollBarPrivate();
+    void updateVerticalScrollBarPrivate();
+
+    MaEditor *maEditor;
+    MaEditorWgt *ui;
+    MSACollapsibleItemModel *collapsibleModel;
+    GScrollBar *hScrollBar;
+    GScrollBar *vScrollBar;
+
+    int savedFirstVisibleRowIndex;
+    int savedFirstVisibleRowAdditionalOffset;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(ScrollController::Directions)
+
+}   // namespace U2
+
+#endif // _U2_SCROLL_CONTROLLER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.cpp
new file mode 100644
index 0000000..ca36ad7
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.cpp
@@ -0,0 +1,366 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MsaColorScheme.h>
+#include <U2Algorithm/MSAConsensusAlgorithm.h>
+
+#include <U2Core/MultipleAlignmentObject.h>
+
+#include <U2Gui/GraphUtils.h>
+
+#include "MaConsensusAreaRenderer.h"
+#include "MaEditorWgt.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSAEditorConsensusArea.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/DrawHelper.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+
+namespace U2 {
+
+ConsensusRenderSettings::ConsensusRenderSettings()
+    : columnWidth(0),
+      drawSelection(true),
+      colorScheme(NULL),
+      resizeMode(MaEditor::ResizeMode_FontAndContent),
+      highlightMismatches(false),
+      rulerWidth(0),
+      firstNotchedBasePosition(0),
+      lastNotchedBasePosition(0)
+{
+
+}
+
+bool ConsensusRenderData::isValid() const {
+    return data.size() == static_cast<int>(region.length) &&
+            mismatches.size() == static_cast<int>(region.length);
+}
+
+ConsensusCharRenderData::ConsensusCharRenderData()
+    : column(0),
+      consensusChar(U2Msa::GAP_CHAR),
+      isMismatch(false),
+      isSelected(false)
+{
+
+}
+
+QRect ConsensusCharRenderData::getCharRect() const {
+    return QRect(xRange.startPos, yRange.startPos, xRange.length + 1, yRange.length);
+}
+
+const QColor MaConsensusAreaRenderer::DEFAULT_MISMATCH_COLOR = Qt::red;
+
+MaConsensusAreaRenderer::MaConsensusAreaRenderer(MaEditorConsensusArea *area)
+    : QObject(area),
+      editor(area->getEditorWgt()->getEditor()),
+      ui(area->getEditorWgt()),
+      area(area)
+{
+
+}
+
+namespace {
+
+QFont getRulerFont(const QFont &font) {
+    QFont rulerFont = font;
+    rulerFont.setFamily("Arial");
+    rulerFont.setPointSize(qMax(8, qRound(font.pointSize() * 0.7)));
+    return rulerFont;
+}
+
+}
+
+void MaConsensusAreaRenderer::drawContent(QPainter &painter) {
+    CHECK(!editor->isAlignmentEmpty(), );
+
+    const MaEditorConsensusAreaSettings consensusSettings = area->getDrawSettings();
+    const ConsensusRenderData consensusRenderData = getScreenDataToRender();
+    const ConsensusRenderSettings renderSettings = getScreenRenderSettings(consensusSettings);
+
+    drawContent(painter, consensusRenderData, consensusSettings, renderSettings);
+}
+
+void MaConsensusAreaRenderer::drawContent(QPainter &painter,
+                                          const ConsensusRenderData &consensusRenderData,
+                                          const MaEditorConsensusAreaSettings &consensusSettings,
+                                          const ConsensusRenderSettings &renderSettings) {
+    SAFE_POINT(consensusRenderData.isValid(), "Incorrect consensus data to draw", );
+    SAFE_POINT(NULL != renderSettings.colorScheme, "Color scheme is NULL", );
+
+    if (consensusSettings.isVisible(MSAEditorConsElement_CONSENSUS_TEXT)) {
+        drawConsensus(painter, consensusRenderData, renderSettings);
+    }
+
+    if (consensusSettings.isVisible(MSAEditorConsElement_RULER)) {
+        drawRuler(painter, renderSettings);
+    }
+
+    if (consensusSettings.isVisible(MSAEditorConsElement_HISTOGRAM)) {
+        drawHistogram(painter, consensusRenderData, renderSettings);
+    }
+}
+
+ConsensusRenderData MaConsensusAreaRenderer::getConsensusRenderData(const QList<int> &seqIdx, const U2Region &region) const {
+    ConsensusRenderData consensusRenderData;
+    consensusRenderData.region = region;
+    consensusRenderData.selectedRegion = ui->getSequenceArea()->getSelection().getXRegion();
+    consensusRenderData.mismatches.resize(static_cast<int>(region.length));
+
+    MSAConsensusAlgorithm *algorithm = area->getConsensusAlgorithm();
+    const MultipleAlignment ma = editor->getMaObject()->getMultipleAlignment();
+    for (int i = 0, n = static_cast<int>(region.length); i < n; i++) {
+        const int column = region.startPos + i;
+        int score = 0;
+        const char consensusChar = algorithm->getConsensusCharAndScore(ma, column, score);
+        consensusRenderData.data += consensusChar;
+        consensusRenderData.percentage << qRound(score * 100. / seqIdx.size());
+        consensusRenderData.mismatches[i] = (consensusChar != editor->getReferenceCharAt(column));
+    }
+
+    return consensusRenderData;
+}
+
+ConsensusRenderSettings MaConsensusAreaRenderer::getRenderSettigns(const U2Region &region, const MaEditorConsensusAreaSettings &consensusSettings) const {
+    ConsensusRenderSettings renderSettings;
+    renderSettings.xRangeToDrawIn = U2Region(0, ui->getBaseWidthController()->getBasesWidth(region));
+    foreach (const MaEditorConsElement element, consensusSettings.order) {
+        renderSettings.yRangeToDrawIn.insert(element, getYRange(consensusSettings.visibleElements, element));
+    }
+    renderSettings.columnWidth = ui->getBaseWidthController()->getBaseWidth();
+    renderSettings.font = editor->getFont();
+    renderSettings.rulerFont = getRulerFont(editor->getFont());
+    renderSettings.drawSelection = false;
+    renderSettings.colorScheme = ui->getSequenceArea()->getCurrentColorScheme();
+    renderSettings.resizeMode = editor->getResizeMode();
+    renderSettings.highlightMismatches = consensusSettings.highlightMismatches;
+
+    renderSettings.rulerWidth = ui->getBaseWidthController()->getBasesWidth(region);
+    renderSettings.firstNotchedBasePosition = region.startPos;
+    renderSettings.lastNotchedBasePosition = region.endPos() - 1;
+    const int xCanvasOffset = ui->getBaseWidthController()->getBaseGlobalOffset(region.startPos);
+    renderSettings.firstNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(region.startPos, xCanvasOffset);
+    renderSettings.lastNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(region.endPos() - 1, xCanvasOffset);
+
+    return renderSettings;
+}
+
+int MaConsensusAreaRenderer::getHeight() const {
+    return getHeight(area->getDrawSettings().visibleElements);
+}
+
+int MaConsensusAreaRenderer::getHeight(const MaEditorConsElements &visibleElements) const {
+    int height = 0;
+    foreach (const MaEditorConsElement element, area->getDrawSettings().order) {
+        if (visibleElements.testFlag(element)) {
+            height += getYRangeLength(element);
+        }
+    }
+    return height + 1;
+}
+
+U2Region MaConsensusAreaRenderer::getYRange(const MaEditorConsElements &visibleElements, MaEditorConsElement element) const {
+    const MaEditorConsensusAreaSettings consensusSettings = area->getDrawSettings();
+    U2Region yRange;
+    for (QList<MaEditorConsElement>::const_iterator it = consensusSettings.order.constBegin(); it != consensusSettings.order.constEnd(); it++) {
+        if (*it == element) {
+            yRange.length = getYRangeLength(element) * visibleElements.testFlag(*it);
+            break;
+        } else {
+            yRange.startPos += getYRangeLength(*it) * visibleElements.testFlag(*it);
+        }
+    }
+    return yRange;
+}
+
+U2Region MaConsensusAreaRenderer::getYRange(MaEditorConsElement element) const {
+    return getYRange(area->getDrawSettings().visibleElements, element);
+}
+
+void MaConsensusAreaRenderer::drawConsensus(QPainter &painter, const ConsensusRenderData &consensusRenderData, const ConsensusRenderSettings &settings) {
+    painter.setPen(Qt::black);
+
+    QFont font = settings.font;
+    font.setWeight(QFont::DemiBold);
+    painter.setFont(font);
+
+    ConsensusCharRenderData charData;
+    charData.xRange = U2Region(settings.xRangeToDrawIn.startPos, settings.columnWidth);
+    charData.yRange = settings.yRangeToDrawIn[MSAEditorConsElement_CONSENSUS_TEXT];
+
+    for (int i = 0, n = static_cast<int>(consensusRenderData.region.length); i < n; i++) {
+        charData.column = static_cast<int>(consensusRenderData.region.startPos + i);
+        charData.consensusChar = consensusRenderData.data[i];
+        if (MSAConsensusAlgorithm::INVALID_CONS_CHAR == charData.consensusChar) {
+            charData.xRange.startPos += settings.columnWidth;
+            continue;
+        }
+        charData.isMismatch = consensusRenderData.mismatches[i];
+        charData.isSelected = settings.drawSelection && consensusRenderData.selectedRegion.contains(charData.column);
+
+        drawConsensusChar(painter, charData, settings);
+        charData.xRange.startPos += settings.columnWidth;
+    }
+}
+
+void MaConsensusAreaRenderer::drawConsensusChar(QPainter &painter, const ConsensusCharRenderData& charData, const ConsensusRenderSettings &settings) {
+    const QRect charRect = charData.getCharRect();
+
+    QColor color;
+    if (charData.isSelected) {
+        color = Qt::lightGray;
+        color = color.lighter(115);
+    }
+
+    if (settings.highlightMismatches && charData.isMismatch) {
+        color = settings.colorScheme->getColor(0, 0, charData.consensusChar);
+        if (!color.isValid()) {
+            color = DEFAULT_MISMATCH_COLOR;
+        }
+    }
+    if (color.isValid()) {
+        painter.fillRect(charRect, color);
+    }
+
+    if (settings.resizeMode == MaEditor::ResizeMode_FontAndContent) {
+        painter.drawText(charRect, Qt::AlignVCenter | Qt::AlignHCenter, QString(charData.consensusChar));
+    }
+}
+
+void MaConsensusAreaRenderer::drawRuler(QPainter &painter, const ConsensusRenderSettings &settings) {
+    painter.setPen(Qt::darkGray);
+
+    U2Region rulerYRange = settings.yRangeToDrawIn[MSAEditorConsElement_RULER];
+    U2Region consensusTextYRange = settings.yRangeToDrawIn[MSAEditorConsElement_CONSENSUS_TEXT];
+
+    // TODO: move this range calculations to getYRange method
+    const int dy = rulerYRange.startPos - consensusTextYRange.endPos();
+    rulerYRange.length += dy;
+    rulerYRange.startPos -= dy;
+
+    const int firstLastDistance = settings.lastNotchedBaseXRange.startPos - settings.firstNotchedBaseXRange.startPos;
+    QPoint startPoint(settings.firstNotchedBaseXRange.center(), rulerYRange.startPos);
+
+    const QFontMetrics fontMetrics(settings.rulerFont, painter.device());
+
+    GraphUtils::RulerConfig config;
+    config.singleSideNotches = true;
+    config.notchSize = MaEditorConsensusAreaSettings::RULER_NOTCH_SIZE;
+    config.textOffset = (rulerYRange.length - fontMetrics.ascent()) / 2;
+    config.extraAxisLenBefore = startPoint.x();
+    config.extraAxisLenAfter = settings.rulerWidth - (startPoint.x() + firstLastDistance);
+    config.textBorderStart = -settings.firstNotchedBaseXRange.length / 2;
+    config.textBorderEnd = -settings.firstNotchedBaseXRange.length / 2;
+
+    GraphUtils::drawRuler(painter, startPoint, firstLastDistance, settings.firstNotchedBasePosition + 1, settings.lastNotchedBasePosition + 1, settings.rulerFont, config);
+
+    startPoint.setY(rulerYRange.endPos());
+    config.drawNumbers = false;
+    config.textPosition = GraphUtils::LEFT;
+    GraphUtils::drawRuler(painter, startPoint, firstLastDistance, settings.firstNotchedBasePosition + 1, settings.lastNotchedBasePosition + 1, settings.rulerFont, config);
+}
+
+void MaConsensusAreaRenderer::drawHistogram(QPainter &painter, const ConsensusRenderData &consensusRenderData, const ConsensusRenderSettings &settings) {
+    QColor color("#255060");
+    painter.setPen(color);
+
+    // TODO: move calculations to getYRange method
+    U2Region yRange = settings.yRangeToDrawIn[MSAEditorConsElement_HISTOGRAM];
+    yRange.startPos++;
+    yRange.length -= 2; //keep borders
+
+    QBrush brush(color, Qt::Dense4Pattern);
+    painter.setBrush(brush);
+
+    QVector<QRect> rects;
+    U2Region xRange = U2Region(settings.xRangeToDrawIn.startPos, settings.columnWidth);
+    for (int i = 0, n = static_cast<int>(consensusRenderData.region.length); i < n; i++) {
+        const int height = qRound((double)consensusRenderData.percentage[i] * yRange.length / 100.0);
+        const QRect histogramRecT(xRange.startPos + 1, yRange.endPos() - height, xRange.length - 2, height);
+        rects << histogramRecT;
+        xRange.startPos += settings.columnWidth;
+    }
+
+    painter.drawRects(rects);
+}
+
+ConsensusRenderData MaConsensusAreaRenderer::getScreenDataToRender() const {
+    const QSharedPointer<MSAEditorConsensusCache> consensusCache = area->getConsensusCache();
+
+    ConsensusRenderData consensusRenderData;
+    consensusRenderData.region = ui->getDrawHelper()->getVisibleBases(area->width());
+    const MaEditorSelection selection = ui->getSequenceArea()->getSelection();
+    consensusRenderData.selectedRegion = U2Region(selection.x(), selection.width());
+    consensusRenderData.data = consensusCache->getConsensusLine(consensusRenderData.region, true);
+    consensusRenderData.percentage << consensusCache->getConsensusPercents(consensusRenderData.region);
+
+    consensusRenderData.mismatches.resize(consensusRenderData.region.length);
+    for (int i = 0, n = static_cast<int>(consensusRenderData.region.length); i < n; i++) {
+        const int column = static_cast<int>(consensusRenderData.region.startPos + i);
+        consensusRenderData.mismatches[i] = area->highlightConsensusChar(column);
+    }
+
+    return consensusRenderData;
+}
+
+ConsensusRenderSettings MaConsensusAreaRenderer::getScreenRenderSettings(const MaEditorConsensusAreaSettings &consensusSettings) const {
+    const U2Region region = ui->getDrawHelper()->getVisibleBases(area->width());
+
+    ConsensusRenderSettings renderSettings;
+    renderSettings.xRangeToDrawIn = ui->getBaseWidthController()->getBasesScreenRange(region);
+    foreach (const MaEditorConsElement element, consensusSettings.order) {
+        renderSettings.yRangeToDrawIn.insert(element, getYRange(element));
+    }
+    renderSettings.columnWidth = ui->getBaseWidthController()->getBaseWidth();
+    renderSettings.font = editor->getFont();
+    renderSettings.rulerFont = getRulerFont(editor->getFont());
+    renderSettings.drawSelection = true;
+    renderSettings.colorScheme = ui->getSequenceArea()->getCurrentColorScheme();
+    renderSettings.resizeMode = editor->getResizeMode();
+    renderSettings.highlightMismatches = consensusSettings.highlightMismatches;
+
+    renderSettings.rulerWidth = ui->getBaseWidthController()->getBasesWidth(region);
+    renderSettings.firstNotchedBasePosition = ui->getScrollController()->getFirstVisibleBase();
+    renderSettings.lastNotchedBasePosition = ui->getScrollController()->getLastVisibleBase(area->width());
+    renderSettings.firstNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(renderSettings.firstNotchedBasePosition);
+    renderSettings.lastNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(renderSettings.lastNotchedBasePosition);
+
+    return renderSettings;
+}
+
+int MaConsensusAreaRenderer::getYRangeLength(MaEditorConsElement element) const {
+    switch (element) {
+    case MSAEditorConsElement_HISTOGRAM:
+        return 50;
+    case MSAEditorConsElement_CONSENSUS_TEXT:
+        return ui->getRowHeightController()->getSequenceHeight();
+    case MSAEditorConsElement_RULER: {
+        QFontMetrics fm(area->getDrawSettings().getRulerFont());
+        return fm.height() + 2 * MaEditorConsensusAreaSettings::RULER_NOTCH_SIZE + 4;
+    }
+    default:
+        FAIL(false, 0);
+    }
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.h
new file mode 100644
index 0000000..2667de9
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaConsensusAreaRenderer.h
@@ -0,0 +1,126 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_CONSENSUS_AREA_RENDERER_H_
+#define _U2_MA_CONSENSUS_AREA_RENDERER_H_
+
+#include <QBitArray>
+
+#include <U2Core/U2Region.h>
+
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MaEditorConsensusAreaSettings.h"
+
+class QPainter;
+
+namespace U2 {
+
+class MsaColorScheme;
+class MaEditorConsensusArea;
+class MSAEditorConsensusCache;
+
+class ConsensusRenderSettings {
+public:
+    ConsensusRenderSettings();
+
+    U2Region                            xRangeToDrawIn;
+    QMap<MaEditorConsElement, U2Region> yRangeToDrawIn;
+
+    int                     columnWidth;
+    QFont                   font;
+    QFont                   rulerFont;
+    bool                    drawSelection;
+    MsaColorScheme*         colorScheme;
+    MaEditor::ResizeMode    resizeMode;
+    bool                    highlightMismatches;
+
+    int rulerWidth;
+    int firstNotchedBasePosition;
+    int lastNotchedBasePosition;
+    U2Region firstNotchedBaseXRange;
+    U2Region lastNotchedBaseXRange;
+};
+
+class ConsensusRenderData {
+public:
+    bool isValid() const;
+
+    U2Region        region;
+    U2Region        selectedRegion;
+    QByteArray      data;
+    QBitArray       mismatches;
+    QList<int>      percentage;
+};
+
+class ConsensusCharRenderData {
+public:
+    ConsensusCharRenderData();
+
+    QRect getCharRect() const;
+
+    U2Region    xRange;
+    U2Region    yRange;
+    int         column;
+    char        consensusChar;
+    bool        isMismatch;
+    bool        isSelected;
+};
+
+class MaConsensusAreaRenderer : public QObject {
+    Q_OBJECT
+public:
+    MaConsensusAreaRenderer(MaEditorConsensusArea *area);
+
+    void drawContent(QPainter &painter);
+    void drawContent(QPainter &painter,
+                            const ConsensusRenderData &consensusRenderData,
+                            const MaEditorConsensusAreaSettings &consensusSettings,
+                            const ConsensusRenderSettings &renderSettings);
+
+    ConsensusRenderData getConsensusRenderData(const QList<int> &seqIdx, const U2Region &region) const;
+    ConsensusRenderSettings getRenderSettigns(const U2Region &region, const MaEditorConsensusAreaSettings &consensusSettings) const;
+
+    int getHeight() const;
+    int getHeight(const MaEditorConsElements &visibleElements) const;
+    U2Region getYRange(const MaEditorConsElements &visibleElements, MaEditorConsElement element) const;
+    U2Region getYRange(MaEditorConsElement element) const;
+
+protected:
+    static void drawConsensus(QPainter &painter, const ConsensusRenderData &consensusRenderData, const ConsensusRenderSettings &settings);
+    static void drawConsensusChar(QPainter &painter, const ConsensusCharRenderData& charData, const ConsensusRenderSettings &settings);
+    virtual void drawRuler(QPainter &painter, const ConsensusRenderSettings &settings);
+    static void drawHistogram(QPainter &painter, const ConsensusRenderData &consensusRenderData, const ConsensusRenderSettings &settings);
+
+    ConsensusRenderData getScreenDataToRender() const;
+    ConsensusRenderSettings getScreenRenderSettings(const MaEditorConsensusAreaSettings &consensusSettings) const;
+
+    int getYRangeLength(MaEditorConsElement element) const;
+
+    MaEditor *editor;
+    MaEditorWgt *ui;
+    MaEditorConsensusArea *area;
+
+    static const QColor DEFAULT_MISMATCH_COLOR;
+};
+
+}   // namespace U2
+
+#endif // _U2_MA_CONSENSUS_AREA_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.cpp
new file mode 100644
index 0000000..d03dc85
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.cpp
@@ -0,0 +1,442 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
+#include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
+#include <U2Algorithm/MSAConsensusUtils.h>
+#include <U2Algorithm/MsaColorScheme.h>
+
+#include <QApplication>
+#include <QClipboard>
+#include <QHelpEvent>
+#include <QMenu>
+#include <QPainter>
+#include <QToolTip>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/Settings.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GUIUtils.h>
+#include <U2Gui/GraphUtils.h>
+#include <U2Gui/OPWidgetFactory.h>
+#include <U2Gui/OPWidgetFactoryRegistry.h>
+#include <U2Gui/OptionsPanel.h>
+
+// SANGER_TODO: remove relative paths
+#include "../McaEditor.h"
+#include "../MSAEditor.h"
+#include "../MSAEditorConsensusArea.h"
+#include "../MSAEditorSequenceArea.h"
+#include "../General/MSAGeneralTabFactory.h"
+#include "../helpers/BaseWidthController.h"
+#include "../helpers/ScrollController.h"
+#include "../view_rendering/MaConsensusAreaRenderer.h"
+
+namespace U2 {
+
+
+MaEditorConsensusArea::MaEditorConsensusArea(MaEditorWgt *_ui)
+    : editor(_ui->getEditor()),
+      ui(_ui),
+      renderer(NULL)
+{
+    assert(editor->getMaObject());
+    completeRedraw = true;
+    curPos = -1;
+    scribbling = false;
+    selecting = false;
+    cachedView = new QPixmap();
+
+    QObject *parent=new QObject(this);
+    parent->setObjectName("parent");
+
+    connect(ui->getSequenceArea(), SIGNAL(si_selectionChanged(const MaEditorSelection &, const MaEditorSelection &)),
+        SLOT(sl_selectionChanged(const MaEditorSelection &, const MaEditorSelection &)));
+    connect(ui->getEditor(), SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_zoomOperationPerformed(bool)));
+    connect(ui, SIGNAL(si_completeRedraw()), SLOT(sl_completeRedraw()));
+
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &)),
+                                    SLOT(sl_alignmentChanged()));
+
+    copyConsensusAction = new QAction(tr("Copy consensus"), this);
+    copyConsensusAction->setObjectName("Copy consensus");
+    connect(copyConsensusAction, SIGNAL(triggered()), SLOT(sl_copyConsensusSequence()));
+
+    copyConsensusWithGapsAction = new QAction(tr("Copy consensus with gaps"), this);
+    copyConsensusWithGapsAction->setObjectName("Copy consensus with gaps");
+    connect(copyConsensusWithGapsAction, SIGNAL(triggered()), SLOT(sl_copyConsensusSequenceWithGaps()));
+
+    configureConsensusAction = new QAction(tr("Consensus mode..."), this);
+    configureConsensusAction->setObjectName("Consensus mode");
+    connect(configureConsensusAction, SIGNAL(triggered()), SLOT(sl_configureConsensusAction()));
+
+    connect(editor, SIGNAL(si_fontChanged(QFont)), SLOT(setupFontAndHeight()));
+
+    setMouseTracking(true);
+    setFocusPolicy(Qt::StrongFocus);
+
+    addAction(ui->getCopySelectionAction());
+    addAction(ui->getPasteAction());
+
+    setObjectName("consArea");
+}
+
+MaEditorConsensusArea::~MaEditorConsensusArea() {
+    delete cachedView;
+}
+
+MaEditorWgt *MaEditorConsensusArea::getEditorWgt() const {
+    return ui;
+}
+
+QSize MaEditorConsensusArea::getCanvasSize(const U2Region &region, const MaEditorConsElements &elements) const {
+    return QSize(ui->getBaseWidthController()->getBasesWidth(region), renderer->getHeight(elements));
+}
+
+QSharedPointer<MSAEditorConsensusCache> MaEditorConsensusArea::getConsensusCache() {
+    return consensusCache;
+}
+
+U2Region MaEditorConsensusArea::getRullerLineYRange() const {
+    return renderer->getYRange(MSAEditorConsElement_RULER);
+}
+
+bool MaEditorConsensusArea::event(QEvent* e) {
+    switch (e->type()) {
+        case QEvent::ToolTip : {
+            QHelpEvent* he = static_cast<QHelpEvent *>(e);
+            QString tip = createToolTip(he);
+            if (!tip.isEmpty()) {
+                QToolTip::showText(he->globalPos(), tip);
+            }
+            return true;
+        }
+        case QEvent::FocusIn :
+            ui->getSequenceArea()->setFocus(static_cast<QFocusEvent *>(e)->reason());
+            break;
+        case QEvent::Wheel :
+            ui->getSequenceArea()->setFocus(Qt::MouseFocusReason);
+            break;
+        default:
+            ; // skip other events
+    }
+
+    return QWidget::event(e);
+}
+
+void MaEditorConsensusArea::initCache() {
+    MSAConsensusAlgorithmFactory *algo = getConsensusAlgorithmFactory();
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, QString("'%1' consensus type is selected on view opening").arg(algo->getName()), editor->getFactoryId());
+    consensusCache = QSharedPointer<MSAEditorConsensusCache>(new MSAEditorConsensusCache(NULL, editor->getMaObject(), algo));
+    connect(consensusCache->getConsensusAlgorithm(), SIGNAL(si_thresholdChanged(int)), SLOT(sl_onConsensusThresholdChanged(int)));
+    restoreLastUsedConsensusThreshold();
+}
+
+QString MaEditorConsensusArea::createToolTip(QHelpEvent* he) const {
+    const int x = he->pos().x();
+    const int column = ui->getBaseWidthController()->screenXPositionToColumn(x);
+    QString result;
+    if (0 <= column && column <= editor->getAlignmentLen()) {
+        assert(editor->getMaObject());
+        const MultipleAlignment ma = editor->getMaObject()->getMultipleAlignment();
+        result = MSAConsensusUtils::getConsensusPercentTip(ma, column, 0, 4);
+    }
+    return result;
+}
+
+void MaEditorConsensusArea::resizeEvent(QResizeEvent *e) {
+    completeRedraw = true;
+    QWidget::resizeEvent(e);
+}
+
+void MaEditorConsensusArea::paintEvent(QPaintEvent *e) {
+    QSize s = size() * devicePixelRatio();
+    QSize sas = ui->getSequenceArea()->size() * devicePixelRatio();
+
+    if (sas.width() != s.width()) { //this can happen due to the manual layouting performed by MSAEditor -> just wait for the next resize+paint
+        return;
+    }
+
+    assert(s.width() == sas.width());
+
+    if (cachedView->size() != s) {
+        delete cachedView;
+        cachedView = new QPixmap(s);
+        cachedView->setDevicePixelRatio(devicePixelRatio());
+        completeRedraw = true;
+    }
+
+    if (completeRedraw) {
+        QPainter pCached(cachedView);
+        pCached.fillRect(cachedView->rect(), Qt::white);
+        drawContent(pCached);
+        completeRedraw = false;
+    }
+
+    QPainter painter(this);
+    painter.drawPixmap(0, 0, *cachedView);
+
+    QWidget::paintEvent(e);
+}
+
+void MaEditorConsensusArea::drawContent(QPainter& painter) {
+    renderer->drawContent(painter);
+}
+
+void MaEditorConsensusArea::drawContent(QPainter &painter,
+                                         const QList<int> &seqIdx,
+                                         const U2Region &region,
+                                         const MaEditorConsensusAreaSettings &consensusSettings) {
+    const ConsensusRenderData consensusRenderData = renderer->getConsensusRenderData(seqIdx, region);
+    const ConsensusRenderSettings renderSettings = renderer->getRenderSettigns(region, consensusSettings);
+    renderer->drawContent(painter, consensusRenderData, consensusSettings, renderSettings);
+}
+
+bool MaEditorConsensusArea::highlightConsensusChar(int /*pos*/) {
+    return false;
+}
+
+MSAConsensusAlgorithmFactory* MaEditorConsensusArea::getConsensusAlgorithmFactory() {
+    MSAConsensusAlgorithmRegistry* reg = AppContext::getMSAConsensusAlgorithmRegistry();
+    SAFE_POINT(NULL != reg, "Consensus algorithm registry is NULL.", NULL);
+    QString lastUsedAlgoKey = getLastUsedAlgoSettingsKey();
+    QString lastUsedAlgo = AppContext::getSettings()->getValue(lastUsedAlgoKey).toString();
+    MSAConsensusAlgorithmFactory* algo = reg->getAlgorithmFactory(lastUsedAlgo);
+
+    const DNAAlphabet* al = editor->getMaObject()->getAlphabet();
+    ConsensusAlgorithmFlags alphaFlags = MSAConsensusAlgorithmFactory::getAphabetFlags(al);
+    if (algo == NULL || (algo->getFlags() & alphaFlags) != alphaFlags) {
+        algo = reg->getAlgorithmFactory(getDefaultAlgorithmId());
+        if ((algo->getFlags() & alphaFlags) != alphaFlags) {
+            QList<MSAConsensusAlgorithmFactory*> algorithms = reg->getAlgorithmFactories(MSAConsensusAlgorithmFactory::getAphabetFlags(al));
+            SAFE_POINT(algorithms.count() > 0, "There are no consensus algorithms for the current alphabet.", NULL);
+            algo = algorithms.first();
+        }
+        AppContext::getSettings()->setValue(lastUsedAlgoKey, algo->getId());
+    }
+    return algo;
+}
+
+void MaEditorConsensusArea::updateConsensusAlgorithm() {
+    MSAConsensusAlgorithmFactory* newAlgo = getConsensusAlgorithmFactory();
+    CHECK(consensusCache != NULL && newAlgo != NULL, );
+    ConsensusAlgorithmFlags cacheConsensusFlags = consensusCache->getConsensusAlgorithm()->getFactory()->getFlags();
+    ConsensusAlgorithmFlags curFlags = newAlgo->getFlags();
+    if ((curFlags & cacheConsensusFlags) != curFlags) {
+        consensusCache->setConsensusAlgorithm(newAlgo);
+    }
+    emit si_consensusAlgorithmChanged(newAlgo->getId());
+}
+
+void MaEditorConsensusArea::sl_alignmentChanged() {
+    updateConsensusAlgorithm();
+    completeRedraw = true;
+    emit si_mismatchRedrawRequired();
+    update();
+}
+
+void MaEditorConsensusArea::setupFontAndHeight() {
+    consensusSettings.font = ui->getEditor()->getFont();
+    consensusSettings.setRulerFont(ui->getEditor()->getFont());
+    setFixedHeight(renderer->getHeight());
+}
+
+void MaEditorConsensusArea::sl_zoomOperationPerformed( bool resizeModeChanged ) {
+    if (!(editor->getResizeMode() == MSAEditor::ResizeMode_OnlyContent && !resizeModeChanged)) {
+        setupFontAndHeight();
+    }
+    sl_completeRedraw();
+}
+
+void MaEditorConsensusArea::sl_completeRedraw() {
+    completeRedraw = true;
+    update();
+}
+
+void MaEditorConsensusArea::sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev) {
+    if (current.getXRegion() != prev.getXRegion()) {
+        sl_completeRedraw();
+    }
+}
+
+void MaEditorConsensusArea::sl_copyConsensusSequence() {
+    QApplication::clipboard()->setText(consensusCache->getConsensusLine(false));
+}
+
+void MaEditorConsensusArea::sl_copyConsensusSequenceWithGaps() {
+    QApplication::clipboard()->setText(consensusCache->getConsensusLine(true));
+}
+
+void MaEditorConsensusArea::sl_configureConsensusAction() {
+    OptionsPanel* optionsPanel = editor->getOptionsPanel();
+    SAFE_POINT(NULL != optionsPanel, "Internal error: options panel is NULL"
+        " when msageneraltab opening was initiated!",);
+
+    const QString& MSAGeneralTabFactoryId = MSAGeneralTabFactory::getGroupId();
+    optionsPanel->openGroupById(MSAGeneralTabFactoryId);
+}
+
+void MaEditorConsensusArea::sl_changeConsensusAlgorithm(const QString& algoId) {
+    MSAConsensusAlgorithmFactory* algoFactory = AppContext::getMSAConsensusAlgorithmRegistry()->getAlgorithmFactory(algoId);
+    if (getConsensusAlgorithm()->getFactory() != algoFactory) {
+        assert(algoFactory!=NULL);
+        setConsensusAlgorithm(algoFactory);
+    }
+    emit si_consensusAlgorithmChanged(algoId);
+}
+
+QString MaEditorConsensusArea::getThresholdSettingsKey(const QString& factoryId) const {
+    return getLastUsedAlgoSettingsKey() + "_" + factoryId + "_threshold";
+}
+
+void MaEditorConsensusArea::setConsensusAlgorithm(MSAConsensusAlgorithmFactory* algoFactory) {
+    MSAConsensusAlgorithm* oldAlgo = getConsensusAlgorithm();
+    if (oldAlgo!=NULL && algoFactory == oldAlgo->getFactory()) {
+        return;
+    }
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, QString("'%1' consensus algorithm is selected").arg(algoFactory->getName()), editor->getFactoryId());
+
+    //store threshold for the active algo
+    if (oldAlgo!=NULL && oldAlgo->supportsThreshold()) {
+        AppContext::getSettings()->setValue(getThresholdSettingsKey(oldAlgo->getId()), oldAlgo->getThreshold());
+    }
+
+    //store current algorithm selection
+    AppContext::getSettings()->setValue(getLastUsedAlgoSettingsKey(), algoFactory->getId());
+
+    consensusCache->setConsensusAlgorithm(algoFactory);
+    connect(consensusCache->getConsensusAlgorithm(), SIGNAL(si_thresholdChanged(int)), SLOT(sl_onConsensusThresholdChanged(int)));
+    restoreLastUsedConsensusThreshold();
+    completeRedraw = true;
+    emit si_mismatchRedrawRequired();
+    update();
+}
+
+void MaEditorConsensusArea::setConsensusAlgorithmConsensusThreshold(int val) {
+    MSAConsensusAlgorithm* algo = getConsensusAlgorithm();
+    if (algo->getThreshold() == val) {
+        return;
+    }
+    //store threshold as the last value
+    AppContext::getSettings()->setValue(getThresholdSettingsKey(algo->getId()), val);
+    algo->setThreshold(val);
+}
+
+const MaEditorConsensusAreaSettings &MaEditorConsensusArea::getDrawSettings() const {
+    return consensusSettings;
+}
+
+void MaEditorConsensusArea::setDrawSettings(const MaEditorConsensusAreaSettings& settings) {
+    consensusSettings = settings;
+    setFixedHeight(renderer->getHeight());
+}
+
+void MaEditorConsensusArea::sl_onConsensusThresholdChanged(int newValue) {
+    Q_UNUSED(newValue);
+    completeRedraw = true;
+    emit si_mismatchRedrawRequired();
+    update();
+}
+
+void MaEditorConsensusArea::restoreLastUsedConsensusThreshold() {
+    //restore last used threshold for new algorithm type if found
+    MSAConsensusAlgorithm* algo = getConsensusAlgorithm();
+    int threshold = AppContext::getSettings()->getValue(getThresholdSettingsKey(algo->getId()), algo->getDefaultThreshold()).toInt();
+    getConsensusAlgorithm()->setThreshold(threshold);
+}
+
+MSAConsensusAlgorithm* MaEditorConsensusArea::getConsensusAlgorithm() const {
+    return consensusCache->getConsensusAlgorithm();
+}
+
+void MaEditorConsensusArea::sl_changeConsensusThreshold(int val) {
+    setConsensusAlgorithmConsensusThreshold(val);
+    emit si_consensusThresholdChanged(val);
+}
+
+void MaEditorConsensusArea::sl_visibleAreaChanged() {
+    if (scribbling && selecting) {
+        const QPoint screenPoint = mapFromGlobal(QCursor::pos());
+        const int newPos = ui->getBaseWidthController()->screenXPositionToBase(screenPoint.x());
+        updateSelection(newPos);
+    }
+}
+
+void MaEditorConsensusArea::mousePressEvent(QMouseEvent *e) {
+    if (e->buttons() & Qt::LeftButton) {
+        selecting = true;
+        int lastPos = curPos;
+        curPos = qBound(0, ui->getBaseWidthController()->screenXPositionToColumn(e->x()), ui->getEditor()->getAlignmentLen() - 1);
+        const int selectionHeight = ui->getSequenceArea()->getNumDisplayableSequences();
+        // select current column
+        if ((Qt::ShiftModifier == e->modifiers()) && (lastPos != -1)) {
+            MaEditorSelection selection(qMin(lastPos, curPos), 0, abs(curPos - lastPos) + 1, selectionHeight);
+            ui->getSequenceArea()->setSelection(selection);
+            curPos = lastPos;
+        } else {
+            MaEditorSelection selection(curPos, 0, 1, selectionHeight);
+            ui->getSequenceArea()->setSelection(selection);
+        }
+        scribbling = true;
+    }
+    QWidget::mousePressEvent(e);
+}
+
+void MaEditorConsensusArea::mouseMoveEvent(QMouseEvent *event) {
+    if ((event->buttons() & Qt::LeftButton) && scribbling && selecting) {
+        const int newPos = qBound(0, ui->getBaseWidthController()->screenXPositionToColumn(event->x()), ui->getEditor()->getAlignmentLen() - 1);
+        updateSelection(newPos);
+    }
+    QWidget::mouseMoveEvent(event);
+}
+
+void MaEditorConsensusArea::mouseReleaseEvent(QMouseEvent *event) {
+    if (ui->getSequenceArea()->isAlignmentEmpty()) {
+        QWidget::mouseReleaseEvent(event);
+        return;
+    }
+
+    if (event->button() == Qt::LeftButton && selecting) {
+        const int newPos = qBound(0, ui->getBaseWidthController()->screenXPositionToColumn(event->x()), editor->getAlignmentLen() - 1);
+        updateSelection(newPos);
+        scribbling = false;
+        selecting = false;
+    }
+
+    ui->getScrollController()->stopSmoothScrolling();
+    QWidget::mouseReleaseEvent(event);
+}
+
+void MaEditorConsensusArea::updateSelection(int newPos) {
+    CHECK(newPos != curPos, );
+    CHECK(newPos != -1, );
+
+    int height = ui->getSequenceArea()->getNumDisplayableSequences();
+    int startPos = qMin(curPos, newPos);
+    int width = qAbs(newPos - curPos) + 1;
+    MaEditorSelection selection(startPos, 0, width, height);
+    ui->getSequenceArea()->setSelection(selection);
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.h
new file mode 100644
index 0000000..ffddf1b
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorConsensusArea.h
@@ -0,0 +1,151 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_CONSENSUS_AREA_H_
+#define _U2_MA_EDITOR_CONSENSUS_AREA_H_
+
+#include <QWidget>
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2Region.h>
+
+#include "../MSAEditorConsensusCache.h"
+#include "../MaEditorConsensusAreaSettings.h"
+
+class QHelpEvent;
+class QMenu;
+class QPainter;
+class QToolBar;
+
+
+namespace U2 {
+
+class GObjectView;
+class MSAConsensusAlgorithm;
+class MSAConsensusAlgorithmFactory;
+
+class MaConsensusAreaRenderer;
+class MaEditor;
+class MaEditorSelection;
+class MaEditorWgt;
+class MaModificationInfo;
+
+class U2VIEW_EXPORT MaEditorConsensusArea : public QWidget {
+    Q_OBJECT
+    Q_DISABLE_COPY(MaEditorConsensusArea)
+    friend class MaConsensusAreaRenderer;
+public:
+    MaEditorConsensusArea(MaEditorWgt* ui);
+    virtual ~MaEditorConsensusArea();
+
+    MaEditorWgt *getEditorWgt() const;
+    virtual QString getDefaultAlgorithmId() const = 0;
+
+    QSize getCanvasSize(const U2Region &region, const MaEditorConsElements &elements) const;
+
+    QSharedPointer<MSAEditorConsensusCache> getConsensusCache();
+
+    U2Region getRullerLineYRange() const;
+
+    void setConsensusAlgorithm(MSAConsensusAlgorithmFactory* algo);
+    void setConsensusAlgorithmConsensusThreshold(int val);
+
+    const MaEditorConsensusAreaSettings &getDrawSettings() const;
+    void setDrawSettings(const MaEditorConsensusAreaSettings& settings);
+
+    MSAConsensusAlgorithm* getConsensusAlgorithm() const;
+
+    void drawContent(QPainter &painter);
+    void drawContent(QPainter &painter,
+                     const QList<int> &seqIdx,
+                     const U2Region &region,
+                     const MaEditorConsensusAreaSettings &consensusSettings);
+
+
+protected:
+    bool event(QEvent* e);
+    void paintEvent(QPaintEvent*);
+    void resizeEvent(QResizeEvent*);
+    void mousePressEvent(QMouseEvent *e);
+    void mouseMoveEvent(QMouseEvent *e);
+    void mouseReleaseEvent(QMouseEvent *e);
+
+signals:
+    void si_consensusAlgorithmChanged(const QString& algoId);
+    void si_consensusThresholdChanged(int value);
+    // SANGER_TODO: should be moved to McaEditorConsensusArea
+    void si_mismatchRedrawRequired();
+
+protected slots:
+    void sl_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev);
+    void sl_alignmentChanged();
+    void sl_changeConsensusAlgorithm(const QString& algoId);
+    void sl_changeConsensusThreshold(int val);
+    void sl_onConsensusThresholdChanged(int newValue);
+    void sl_visibleAreaChanged();
+
+    void sl_copyConsensusSequence();
+    void sl_copyConsensusSequenceWithGaps();
+    void sl_configureConsensusAction();
+    void sl_zoomOperationPerformed(bool resizeModeChanged);
+
+    void sl_completeRedraw();
+
+    void setupFontAndHeight();
+
+protected:
+    void initCache();
+    QString createToolTip(QHelpEvent* he) const;
+    void restoreLastUsedConsensusThreshold();
+    virtual QString getLastUsedAlgoSettingsKey() const = 0;
+    QString getThresholdSettingsKey(const QString& factoryId) const;
+
+    virtual void initRenderer() = 0;
+    virtual bool highlightConsensusChar(int pos);
+
+    void updateSelection(int newPos);
+
+    MSAConsensusAlgorithmFactory* getConsensusAlgorithmFactory();
+    void updateConsensusAlgorithm();
+
+    MaEditor*           editor;
+    MaEditorWgt*        ui;
+    QFont               rulerFont;
+    int                 rulerFontHeight;
+    QAction*            copyConsensusAction;
+    QAction*            copyConsensusWithGapsAction;
+    QAction*            configureConsensusAction;
+    int                 curPos;
+    bool                scribbling;
+    bool                selecting;
+
+    MaEditorConsensusAreaSettings consensusSettings;
+    MaConsensusAreaRenderer      *renderer;
+
+    QSharedPointer<MSAEditorConsensusCache> consensusCache;
+
+    bool                                    completeRedraw;
+    QPixmap*                                cachedView;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_CONSENSUS_AREA_H_
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.cpp
new file mode 100644
index 0000000..3c889af
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.cpp
@@ -0,0 +1,110 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorSelection.h"
+
+namespace U2 {
+
+/************************************************************************/
+/* MaEditorSelection */
+/************************************************************************/
+MaEditorSelection::MaEditorSelection() {
+
+}
+
+MaEditorSelection::MaEditorSelection(int left, int top, int width, int height)
+    : selArea(left, top, width, height) {
+
+}
+
+MaEditorSelection::MaEditorSelection(const QPoint& topLeft, const QPoint& bottomRight)
+    : selArea(topLeft, bottomRight) {
+
+}
+
+MaEditorSelection::MaEditorSelection(const QPoint& topLeft, int width, int height)
+    : selArea(topLeft, QSize(width,height)) {
+
+}
+
+bool MaEditorSelection::isNull() const {
+    return selArea.isNull();
+}
+
+bool MaEditorSelection::isEmpty() const {
+    return selArea.isEmpty();
+}
+
+QPoint MaEditorSelection::topLeft() const {
+    return selArea.topLeft();
+}
+
+QPoint MaEditorSelection::bottomRight() const {
+    return selArea.bottomRight();
+}
+
+const QRect& MaEditorSelection::getRect() const {
+    return selArea;
+}
+
+int MaEditorSelection::x() const {
+    return selArea.x();
+}
+
+int MaEditorSelection::y() const {
+    return selArea.y();
+}
+
+int MaEditorSelection::width() const {
+    return selArea.width();
+}
+
+int MaEditorSelection::height() const {
+    return selArea.height();
+}
+
+int MaEditorSelection::bottom() const {
+    return selArea.bottom();
+}
+
+U2Region MaEditorSelection::getXRegion() const {
+    return U2Region(selArea.x(), selArea.width());
+}
+
+U2Region MaEditorSelection::getYRegion() const {
+    return U2Region(selArea.y(), selArea.height());
+}
+
+bool MaEditorSelection::operator==(const MaEditorSelection& other) const {
+    return selArea == other.selArea;
+}
+
+MaEditorSelection MaEditorSelection::intersected(const MaEditorSelection& selection) const {
+    QRect r = selArea.intersected(selection.selArea);
+    return MaEditorSelection(r);
+}
+
+MaEditorSelection::MaEditorSelection(QRect& rect)
+    : selArea(rect) {
+
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.h
new file mode 100644
index 0000000..4255b93
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSelection.h
@@ -0,0 +1,72 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_SELECTION_
+#define _U2_MA_EDITOR_SELECTION_
+
+#include <QRect>
+
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+/************************************************************************/
+/* MaEditorSelection */
+/************************************************************************/
+class U2VIEW_EXPORT MaEditorSelection {
+public:
+    MaEditorSelection();
+    MaEditorSelection(int left, int top, int width, int height);
+    MaEditorSelection(const QPoint& topLeft, const QPoint& bottomRight);
+    MaEditorSelection(const QPoint& topLeft, int width, int height);
+
+    bool isNull() const;
+    bool isEmpty() const;
+
+    QPoint topLeft() const;
+    QPoint bottomRight() const;
+
+    const QRect& getRect() const;
+
+    int x() const;
+    int y() const;
+
+    int width() const;
+    int height() const;
+
+    int bottom() const;
+
+    U2Region getXRegion() const;
+    U2Region getYRegion() const;
+
+    bool operator==(const MaEditorSelection& other) const;
+
+    MaEditorSelection intersected(const MaEditorSelection& selection) const;
+
+private:
+    explicit MaEditorSelection(QRect& rect);
+    QRect selArea;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_SELECTION_
+
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.cpp
new file mode 100644
index 0000000..008e35c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.cpp
@@ -0,0 +1,1596 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QMessageBox>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QRubberBand>
+
+#include <U2Algorithm/MsaHighlightingScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleAlignmentObject.h>
+#include <U2Core/Settings.h>
+#include <U2Core/TextUtils.h>
+#include <U2Core/U2Mod.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GScrollBar.h>
+#include <U2Gui/GUIUtils.h>
+#include <U2Gui/OptionsPanel.h>
+
+#include <U2View/MSAHighlightingTabFactory.h>
+
+#include "MaEditorSequenceArea.h"
+#include "MaEditorWgt.h"
+#include "SequenceAreaRenderer.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/McaEditorWgt.h"
+#include "ov_msa/MSACollapsibleModel.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/DrawHelper.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+#include "ov_msa/Highlighting/MsaSchemesMenuBuilder.h"
+
+namespace U2 {
+
+const QChar MaEditorSequenceArea::emDash = QChar(0x2015);
+
+MaEditorSequenceArea::MaEditorSequenceArea(MaEditorWgt *ui, GScrollBar *hb, GScrollBar *vb)
+    : editor(ui->getEditor()),
+      ui(ui),
+      colorScheme(NULL),
+      highlightingScheme(NULL),
+      shBar(hb),
+      svBar(vb),
+      editModeAnimationTimer(this),
+      prevPressedButton(Qt::NoButton),
+      maVersionBeforeShifting(-1),
+      useDotsAction(NULL),
+      replaceCharacterAction(NULL),
+      changeTracker(editor->getMaObject()->getEntityRef())
+{
+    rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
+    maMode = ViewMode;
+
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+    setMinimumSize(100, 100);
+    highlightSelection = false;
+    selecting = false;
+    shifting = false;
+    editingEnabled = false;
+
+    cachedView = new QPixmap();
+    completeRedraw = true;
+
+    useDotsAction = new QAction(QString(tr("Use dots")), this);
+    useDotsAction->setCheckable(true);
+    useDotsAction->setChecked(false);
+    connect(useDotsAction, SIGNAL(triggered()), SLOT(sl_useDots()));
+
+    replaceCharacterAction = new QAction(tr("Replace selected character"), this);
+    replaceCharacterAction->setObjectName("replace_selected_character");
+    replaceCharacterAction->setShortcut(QKeySequence(Qt::SHIFT | Qt::Key_R));
+    replaceCharacterAction->setShortcutContext(Qt::WidgetShortcut);
+    addAction(replaceCharacterAction);
+    connect(replaceCharacterAction, SIGNAL(triggered()), SLOT(sl_replaceSelectedCharacter()));
+
+    fillWithGapsinsSymAction = new QAction(tr("Fill selection with gaps"), this);
+    fillWithGapsinsSymAction->setObjectName("fill_selection_with_gaps");
+    connect(fillWithGapsinsSymAction, SIGNAL(triggered()), SLOT(sl_fillCurrentSelectionWithGaps()));
+    addAction(fillWithGapsinsSymAction);
+
+    QAction* undoAction = ui->getUndoAction();
+    QAction* redoAction = ui->getRedoAction();
+    addAction(undoAction);
+    addAction(redoAction);
+
+    connect(editor, SIGNAL(si_completeUpdate()), SLOT(sl_completeUpdate()));
+    connect(editor, SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_completeUpdate()));
+    connect(editor, SIGNAL(si_updateActions()), SLOT(sl_updateActions()));
+    connect(ui, SIGNAL(si_completeRedraw()), SLOT(sl_completeRedraw()));
+    connect(hb, SIGNAL(actionTriggered(int)), SLOT(sl_hScrollBarActionPerfermed()));
+
+
+    // SANGER_TODO: why is it commented?
+//    connect(editor, SIGNAL(si_fontChanged(QFont)), SLOT(sl_fontChanged(QFont)));
+
+    connect(&editModeAnimationTimer, SIGNAL(timeout()), SLOT(sl_changeSelectionColor()));
+
+    connect(editor->getMaObject(), SIGNAL(si_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)),
+        SLOT(sl_alignmentChanged(const MultipleAlignment&, const MaModificationInfo&)));
+}
+
+MaEditorSequenceArea::~MaEditorSequenceArea() {
+    exitFromEditCharacterMode();
+    delete cachedView;
+    deleteOldCustomSchemes();
+    delete highlightingScheme;
+}
+
+MaEditor *MaEditorSequenceArea::getEditor() const {
+    return editor;
+}
+
+QSize MaEditorSequenceArea::getCanvasSize(const QList<int> &seqIdx, const U2Region &region) const {
+    return QSize(ui->getBaseWidthController()->getBasesWidth(region), ui->getRowHeightController()->getRowsHeight(seqIdx));
+}
+
+int MaEditorSequenceArea::getFirstVisibleBase() const {
+    return ui->getScrollController()->getFirstVisibleBase();
+}
+
+int MaEditorSequenceArea::getLastVisibleBase(bool countClipped) const {
+    return getEditor()->getUI()->getScrollController()->getLastVisibleBase(width(), countClipped);
+}
+
+int MaEditorSequenceArea::getNumVisibleBases() const {
+    return ui->getDrawHelper()->getVisibleBasesCount(width());
+}
+
+int MaEditorSequenceArea::getDisplayableRowsCount() const {
+    return ui->getCollapseModel()->getDisplayableRowsCount();
+}
+
+int MaEditorSequenceArea::getNumDisplayableSequences() const {
+    CHECK(!isAlignmentEmpty(), 0);
+    MSACollapsibleItemModel *model = ui->getCollapseModel();
+    SAFE_POINT(NULL != model, tr("Invalid collapsible item model!"), -1);
+    return model->getDisplayableRowsCount();
+}
+
+bool MaEditorSequenceArea::isAlignmentEmpty() const {
+    return editor->isAlignmentEmpty();
+}
+
+bool MaEditorSequenceArea::isPosInRange(int position) const {
+    return position >= 0 && position < editor->getAlignmentLen();
+}
+
+bool MaEditorSequenceArea::isSeqInRange(int rowNumber) const {
+    return rowNumber >= 0 && rowNumber < getNumDisplayableSequences();
+}
+
+bool MaEditorSequenceArea::isInRange(const QPoint &point) const {
+    return isPosInRange(point.x()) && isSeqInRange(point.y());
+}
+
+QPoint MaEditorSequenceArea::boundWithVisibleRange(const QPoint &point) const {
+    return QPoint(qBound(0, point.x(), editor->getAlignmentLen() - 1), qBound(0, point.y(), ui->getCollapseModel()->getDisplayableRowsCount() - 1));
+}
+
+bool MaEditorSequenceArea::isVisible(const QPoint& p, bool countClipped) const {
+    return isPositionVisible(p.x(), countClipped) && isRowVisible(p.y(), countClipped);
+}
+
+bool MaEditorSequenceArea::isPositionVisible(int position, bool countClipped) const {
+    return ui->getDrawHelper()->getVisibleBases(width(), countClipped, countClipped).contains(position);
+}
+
+bool MaEditorSequenceArea::isRowVisible(int rowNumber, bool countClipped) const {
+    const int rowIndex = ui->getCollapseModel()->mapToRow(rowNumber);
+    return ui->getDrawHelper()->getVisibleRowsIndexes(height(), countClipped, countClipped).contains(rowIndex);
+}
+
+const MaEditorSelection & MaEditorSequenceArea::getSelection() const {
+    return selection;
+}
+
+void MaEditorSequenceArea::updateSelection(const QPoint& newPos) {
+    const int width = qAbs(newPos.x() - cursorPos.x()) + 1;
+    const int height = qAbs(newPos.y() - cursorPos.y()) + 1;
+    const int left = qMin(newPos.x(), cursorPos.x());
+    const int top = qMin(newPos.y(), cursorPos.y());
+    const QPoint topLeft = boundWithVisibleRange(QPoint(left, top));
+    const QPoint bottomRight = boundWithVisibleRange(QPoint(left + width - 1, top + height - 1));
+
+    MaEditorSelection s(topLeft, bottomRight);
+    if (newPos.x() != -1 && newPos.y() != -1) {
+        ui->getScrollController()->scrollToPoint(newPos, size());
+        setSelection(s);
+    }
+    bool selectionExists = !selection.isNull();
+    ui->getCopySelectionAction()->setEnabled(selectionExists);
+    ui->getCopyFormattedSelectionAction()->setEnabled(selectionExists);
+    emit si_copyFormattedChanging(selectionExists);
+}
+
+void MaEditorSequenceArea::updateSelection() {
+    CHECK(!baseSelection.isNull(), );
+
+    if (!ui->isCollapsibleMode()) {
+        setSelection(baseSelection);
+        return;
+    }
+    MSACollapsibleItemModel* m = ui->getCollapseModel();
+    CHECK_EXT(NULL != m, sl_cancelSelection(), );
+
+    int startPos = baseSelection.y();
+    int endPos = startPos + baseSelection.height();
+
+    // convert selected rows indexes to indexes of selected collapsible items
+    int newStart = m->rowToMap(startPos);
+    int newEnd = m->rowToMap(endPos);
+
+    SAFE_POINT_EXT(newStart >= 0 && newEnd >= 0, sl_cancelSelection(), );
+
+    int selectionHeight = newEnd - newStart;
+    // accounting of collapsing children items
+    int itemIndex = m->itemForRow(newEnd);
+    if (selectionHeight <= 1 && itemIndex >= 0) {
+        const MSACollapsableItem& collapsibleItem = m->getItem(itemIndex);
+        if(newEnd == collapsibleItem.row && !collapsibleItem.isCollapsed) {
+            newEnd = collapsibleItem.row ;
+            selectionHeight = qMax(selectionHeight, endPos - newStart + collapsibleItem.numRows);
+        }
+    }
+    if(selectionHeight > 0 && newStart + selectionHeight <= m->getDisplayableRowsCount()) {
+        MaEditorSelection s(selection.topLeft().x(), newStart, selection.width(), selectionHeight);
+        setSelection(s);
+    } else {
+        sl_cancelSelection();
+    }
+}
+
+void MaEditorSequenceArea::setSelection(const MaEditorSelection& s, bool newHighlightSelection) {
+    CHECK(!isAlignmentEmpty(), );
+    // TODO: assert(isInRange(s));
+    exitFromEditCharacterMode();
+    if (highlightSelection != newHighlightSelection) {
+        highlightSelection = newHighlightSelection;
+        update();
+    }
+
+    MaEditorSelection prevSelection = selection;
+    selection = s;
+
+    if (!selection.isEmpty()) {
+        Q_ASSERT(isInRange(selection.topLeft()));
+        Q_ASSERT(isInRange(selection.bottomRight()));
+        selection = MaEditorSelection(MaEditorSequenceArea::boundWithVisibleRange(selection.topLeft()),
+                                      MaEditorSequenceArea::boundWithVisibleRange(selection.bottomRight()));
+    }
+
+    int selEndPos = s.x() + s.width() - 1;
+    int ofRange = selEndPos - editor->getAlignmentLen();
+    if (ofRange >= 0) {
+        selection = MaEditorSelection(s.topLeft(), s.width() - ofRange - 1, s.height());
+    }
+
+    bool selectionExists = !selection.isNull();
+    ui->getCopySelectionAction()->setEnabled(selectionExists);
+    ui->getCopyFormattedSelectionAction()->setEnabled(selectionExists);
+    emit si_copyFormattedChanging(selectionExists);
+
+    U2Region selectedRowsRegion = getSelectedRows();
+    baseSelection = MaEditorSelection(selection.topLeft().x(), getSelectedRows().startPos, selection.width(), selectedRowsRegion.length);
+
+    QStringList selectedRowNames;
+    for (int x = selectedRowsRegion.startPos; x < selectedRowsRegion.endPos(); x++) {
+        selectedRowNames.append(editor->getMaObject()->getRow(x)->getName());
+    }
+    emit si_selectionChanged(selectedRowNames);
+    emit si_selectionChanged(selection, prevSelection);
+    update();
+    sl_updateActions();
+
+    CHECK(!selection.isNull(), );
+}
+
+void MaEditorSequenceArea::moveSelection(int dx, int dy, bool allowSelectionResize) {
+    int leftX = selection.x();
+    int topY = selection.y();
+    int bottomY = selection.y() + selection.height() - 1;
+    int rightX = selection.x() + selection.width() - 1;
+    QPoint baseTopLeft(leftX, topY);
+    QPoint baseBottomRight(rightX,bottomY);
+
+    QPoint newTopLeft = baseTopLeft + QPoint(dx,dy);
+    QPoint newBottomRight = baseBottomRight + QPoint(dx,dy);
+
+    if ((!isInRange(newTopLeft)) || (!isInRange(newBottomRight))) {
+        if (!allowSelectionResize) {
+            return;
+        } else {
+            MaEditorSelection newSelection(selection.topLeft(),
+                                            qMin(selection.width(), editor->getAlignmentLen() - newTopLeft.x()),
+                                            qMin(selection.height(), editor->getNumSequences() - newTopLeft.y()));
+            setSelection(newSelection);
+        }
+    }
+
+    MaEditorSelection newSelection(newTopLeft, selection.width(), selection.height());
+    setSelection(newSelection);
+    ui->getScrollController()->scrollToMovedSelection(dx, dy);
+}
+
+U2Region MaEditorSequenceArea::getSelectedRows() const {
+    return ui->getCollapseModel()->mapSelectionRegionToRows(U2Region(selection.y(), selection.height()));
+}
+
+QString MaEditorSequenceArea::getCopyFormatedAlgorithmId() const{
+    return AppContext::getSettings()->getValue(SETTINGS_ROOT + SETTINGS_COPY_FORMATTED, BaseDocumentFormats::CLUSTAL_ALN).toString();
+}
+
+void MaEditorSequenceArea::setCopyFormatedAlgorithmId(const QString& algoId){
+    AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COPY_FORMATTED, algoId);
+}
+
+
+void MaEditorSequenceArea::deleteCurrentSelection() {
+    CHECK(getEditor() != NULL, );
+    CHECK(!selection.isNull(), );
+
+    assert(isInRange(selection.topLeft()));
+    assert(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)));
+    MultipleAlignmentObject* maObj = getEditor()->getMaObject();
+    if (maObj == NULL || maObj->isStateLocked()) {
+        return;
+    }
+
+    const QRect areaBeforeSelection(0, 0, selection.x(), selection.height());
+    const QRect areaAfterSelection(selection.x() + selection.width(), selection.y(),
+        maObj->getLength() - selection.x() - selection.width(), selection.height());
+    if (maObj->isRegionEmpty(areaBeforeSelection.x(), areaBeforeSelection.y(), areaBeforeSelection.width(), areaBeforeSelection.height())
+        && maObj->isRegionEmpty(areaAfterSelection.x(), areaAfterSelection.y(), areaAfterSelection.width(), areaAfterSelection.height())
+        && selection.height() == maObj->getNumRows())
+    {
+        return;
+    }
+
+    // if this method was invoked during a region shifting
+    // then shifting should be canceled
+    cancelShiftTracking();
+
+    U2OpStatusImpl os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    const U2Region& sel = getSelectedRows();
+    const bool isGap = maObj->getRow(selection.topLeft().y())->isGap(selection.topLeft().x());
+    maObj->removeRegion(selection.x(), sel.startPos, selection.width(), sel.length, true);
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, "Delete current selection", editor->getFactoryId());
+
+    if (selection.height() == 1 && selection.width() == 1) {
+        GRUNTIME_NAMED_CONDITION_COUNTER(cvar2, tvar2, isGap, "Remove gap", editor->getFactoryId());
+        GRUNTIME_NAMED_CONDITION_COUNTER(cvar3, tvar3, !isGap, "Remove character", editor->getFactoryId());
+
+        if (isInRange(selection.topLeft())) {
+            return;
+        }
+    }
+    sl_cancelSelection();
+}
+
+bool MaEditorSequenceArea::shiftSelectedRegion(int shift) {
+    CHECK(shift != 0, true);
+
+    // shifting of selection
+    MultipleAlignmentObject *maObj = editor->getMaObject();
+    if (!maObj->isStateLocked()) {
+        const U2Region rows = getSelectedRows();
+        const int x = selection.x();
+        const int y = rows.startPos;
+        const int selectionWidth = selection.width();
+        const int height = rows.length;
+        if (maObj->isRegionEmpty(x, y, selectionWidth, height)) {
+            return true;
+        }
+        // backup current selection for the case when selection might disappear
+        const MaEditorSelection selectionBackup = selection;
+
+        const int resultShift = maObj->shiftRegion(x, y, selectionWidth, height, shift);
+        if (0 != resultShift) {
+            U2OpStatus2Log os;
+            adjustReferenceLength(os);
+
+            int newCursorPosX = (cursorPos.x() + resultShift >= 0) ? cursorPos.x() + resultShift : 0;
+            setCursorPos(newCursorPosX);
+
+            const MaEditorSelection newSelection(selectionBackup.x() + resultShift, selectionBackup.y(),
+                                                 selectionBackup.width(), selectionBackup.height());
+            setSelection(newSelection);
+            if (resultShift > 0) {
+                ui->getScrollController()->scrollToBase(static_cast<int>(newSelection.getXRegion().endPos() - 1), width());
+            } else {
+                ui->getScrollController()->scrollToBase(newSelection.x(), width());
+            }
+
+            return true;
+        } else {
+            return false;
+        }
+    }
+    return false;
+}
+
+void MaEditorSequenceArea::centerPos(const QPoint &point) {
+    SAFE_POINT(isInRange(point), QString("Point (%1, %2) is out of range").arg(point.x()).arg(point.y()), );
+    ui->getScrollController()->centerPoint(point, size());
+    update();
+}
+
+void MaEditorSequenceArea::centerPos(int position) {
+    SAFE_POINT(isPosInRange(position), QString("Base %1 is out of range").arg(position), );
+    ui->getScrollController()->centerBase(position, width());
+    update();
+}
+
+void MaEditorSequenceArea::onVisibleRangeChanged() {
+    exitFromEditCharacterMode();
+    CHECK(!isAlignmentEmpty(), );
+
+    const QStringList rowsNames = editor->getMaObject()->getMultipleAlignment()->getRowNames();
+    QStringList visibleRowsNames;
+
+    const QList<int> visibleRows =  ui->getDrawHelper()->getVisibleRowsIndexes(height());
+    foreach (const int rowIndex, visibleRows) {
+        SAFE_POINT(rowIndex < rowsNames.size(), QString("Row index is out of rowsNames boudaries: index is %1, size is %2").arg(rowIndex).arg(rowsNames.size()), );
+        visibleRowsNames << rowsNames[rowIndex];
+    }
+
+    const int rowsHeight = ui->getRowHeightController()->getRowsHeight(visibleRows);
+
+    emit si_visibleRangeChanged(visibleRowsNames, rowsHeight);
+}
+
+bool MaEditorSequenceArea::isAlignmentLocked() const {
+    MultipleAlignmentObject* obj = editor->getMaObject();
+    SAFE_POINT(NULL != obj, tr("Alignment object is not available"), true);
+    return obj->isStateLocked();
+}
+
+void MaEditorSequenceArea::drawVisibleContent(QPainter& painter) {
+    const U2Region basesToDraw = ui->getDrawHelper()->getVisibleBases(width());
+    const QList<int> seqIdx = ui->getDrawHelper()->getVisibleRowsIndexes(height());
+    CHECK(!basesToDraw.isEmpty(), );
+    CHECK(!seqIdx.isEmpty(), );
+    const int xStart = ui->getBaseWidthController()->getBaseScreenRange(basesToDraw.startPos).startPos;
+    const int yStart = ui->getRowHeightController()->getRowScreenRange(seqIdx.first()).startPos;
+    drawContent(painter, basesToDraw, seqIdx, xStart, yStart);
+}
+
+bool MaEditorSequenceArea::drawContent(QPainter &painter, const QRect &area) {
+    const int xStart = ui->getBaseWidthController()->getFirstVisibleBaseGlobalOffset(true);
+    const int yStart = ui->getRowHeightController()->getFirstVisibleRowGlobalOffset(true);
+    return drawContent(painter, area, xStart, yStart);
+}
+
+bool MaEditorSequenceArea::drawContent(QPainter &painter, const QRect &area, int xStart, int yStart) {
+    QList<int> seqIdx;
+    for (int rowNumber = 0; rowNumber < area.height(); rowNumber++) {
+        seqIdx << ui->getCollapseModel()->mapToRow(rowNumber);
+    }
+    bool ok = renderer->drawContent(painter, U2Region(area.x(), area.width()), seqIdx, xStart, yStart);
+    emit si_visibleRangeChanged();
+    return ok;
+}
+
+bool MaEditorSequenceArea::drawContent(QPainter &painter, const U2Region &region, const QList<int> &seqIdx) {
+    const int xStart = ui->getBaseWidthController()->getFirstVisibleBaseScreenOffset(true);
+    const int yStart = ui->getRowHeightController()->getFirstVisibleRowScreenOffset(true);
+    return drawContent(painter, region, seqIdx, xStart, yStart);
+}
+
+bool MaEditorSequenceArea::drawContent(QPainter &painter, const U2Region &region, const QList<int> &seqIdx, int xStart, int yStart) {
+    // SANGER_TODO: optimize
+    return renderer->drawContent(painter, region, seqIdx, xStart, yStart);
+}
+
+bool MaEditorSequenceArea::drawContent(QPainter &painter) {
+    const QRect areaToDraw = QRect(0, 0, editor->getAlignmentLen(), ui->getCollapseModel()->getDisplayableRowsCount());
+    return drawContent(painter, areaToDraw);
+}
+
+bool MaEditorSequenceArea::drawContent(QPixmap &pixmap) {
+    const int totalAlignmentWidth = ui->getBaseWidthController()->getTotalAlignmentWidth();
+    const int totalAlignmentHeight = ui->getRowHeightController()->getTotalAlignmentHeight();
+    CHECK(totalAlignmentWidth < 32768 && totalAlignmentHeight < 32768, false);
+
+    pixmap = QPixmap(totalAlignmentWidth, totalAlignmentHeight);
+    QPainter p(&pixmap);
+
+    const QRect areaToDraw = QRect(0, 0, editor->getAlignmentLen(), ui->getCollapseModel()->getDisplayableRowsCount());
+    return drawContent(p, areaToDraw, 0, 0);
+}
+
+bool MaEditorSequenceArea::drawContent(QPixmap &pixmap,
+                                       const U2Region &region,
+                                       const QList<int> &seqIdx) {
+    CHECK(!region.isEmpty(), false);
+    CHECK(!seqIdx.isEmpty(), false);
+
+    const int canvasWidth = ui->getBaseWidthController()->getBasesWidth(region);
+    const int canvasHeight = ui->getRowHeightController()->getRowsHeight(seqIdx);
+
+    CHECK(canvasWidth < 32768 &&
+          canvasHeight < 32768, false);
+    pixmap = QPixmap(canvasWidth, canvasHeight);
+    QPainter p(&pixmap);
+    return drawContent(p, region, seqIdx, 0, 0);
+}
+
+void MaEditorSequenceArea::highlightCurrentSelection()  {
+    highlightSelection = true;
+    update();
+}
+
+QString MaEditorSequenceArea::exportHighlighting(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose) {
+    CHECK(getEditor() != NULL, QString());
+    CHECK(qobject_cast<MSAEditor*>(editor) != NULL, QString());
+    SAFE_POINT(editor->getReferenceRowId() != U2MsaRow::INVALID_ROW_ID, "Export highlighting is not supported without a reference", QString());
+    QStringList result;
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    assert(maObj!=NULL);
+
+    const MultipleAlignment msa = maObj->getMultipleAlignment();
+
+    U2OpStatusImpl os;
+    const int refSeq = getEditor()->getMaObject()->getMultipleAlignment()->getRowIndexByRowId(editor->getReferenceRowId(), os);
+    SAFE_POINT_OP(os, QString());
+    MultipleAlignmentRow row = msa->getRow(refSeq);
+
+    QString header;
+    header.append("Position\t");
+    QString refSeqName = editor->getReferenceRowName();
+    header.append(refSeqName);
+    header.append("\t");
+    foreach(QString name, maObj->getMultipleAlignment()->getRowNames()){
+        if(name != refSeqName){
+            header.append(name);
+            header.append("\t");
+        }
+    }
+    header.remove(header.length()-1,1);
+    result.append(header);
+
+    int posInResult = startingIndex;
+
+    for (int pos = startPos-1; pos < endPos; pos++) {
+        QString rowStr;
+        rowStr.append(QString("%1").arg(posInResult));
+        rowStr.append(QString("\t") + QString(msa->charAt(refSeq, pos)) + QString("\t"));
+        bool informative = false;
+        for (int seq = 0; seq < msa->getNumRows(); seq++) {  //FIXME possible problems when sequences have moved in view
+            if (seq == refSeq) continue;
+            char c = msa->charAt(seq, pos);
+
+            const char refChar = row->charAt(pos);
+            if (refChar == '-' && !keepGaps) {
+                continue;
+            }
+
+            QColor unused;
+            bool highlight = false;
+            highlightingScheme->setUseDots(useDotsAction->isChecked());
+            highlightingScheme->process(refChar, c, unused, highlight, pos, seq);
+
+            if (highlight) {
+                rowStr.append(c);
+                informative = true;
+            } else {
+                if (dots) {
+                    rowStr.append(".");
+                } else {
+                    rowStr.append(" ");
+                }
+            }
+            rowStr.append("\t");
+        }
+        if(informative){
+            header.remove(rowStr.length() - 1, 1);
+            result.append(rowStr);
+        }
+        posInResult++;
+    }
+
+    if (!transpose){
+        QStringList transposedRows = TextUtils::transposeCSVRows(result, "\t");
+        return transposedRows.join("\n");
+    }
+
+    return result.join("\n");
+}
+
+MsaColorScheme * MaEditorSequenceArea::getCurrentColorScheme() const {
+    return colorScheme;
+}
+
+MsaHighlightingScheme * MaEditorSequenceArea::getCurrentHighlightingScheme() const {
+    return highlightingScheme;
+}
+
+bool MaEditorSequenceArea::getUseDotsCheckedState() const {
+    return useDotsAction->isChecked();
+}
+
+QAction *MaEditorSequenceArea::getReplaceCharacterAction() const {
+    return replaceCharacterAction;
+}
+
+void MaEditorSequenceArea::sl_changeColorSchemeOutside(const QString &id) {
+    QAction* a = GUIUtils::findActionByData(QList<QAction*>() << colorSchemeMenuActions << customColorSchemeMenuActions << highlightingSchemeMenuActions, id);
+    if (a != NULL) {
+        a->trigger();
+    }
+}
+
+void MaEditorSequenceArea::sl_changeCopyFormat(const QString& alg){
+    setCopyFormatedAlgorithmId(alg);
+}
+
+void MaEditorSequenceArea::sl_changeColorScheme() {
+    QAction *action = qobject_cast<QAction *>(sender());
+    if (NULL == action) {
+        action = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
+    }
+    CHECK(NULL != action, );
+
+    applyColorScheme(action->data().toString());
+}
+
+void MaEditorSequenceArea::sl_delCurrentSelection() {
+    emit si_startMaChanging();
+    deleteCurrentSelection();
+    emit si_stopMaChanging(true);
+}
+
+void MaEditorSequenceArea::sl_cancelSelection() {
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvat, tvar, qobject_cast<McaEditorWgt*>(sender()) != NULL, "Clear selection", editor->getFactoryId());
+    MaEditorSelection emptySelection;
+    setSelection(emptySelection);
+}
+
+void MaEditorSequenceArea::sl_fillCurrentSelectionWithGaps() {
+    GRUNTIME_NAMED_COUNTER(cvat, tvar, "Fill selection with gaps", editor->getFactoryId());
+    if(!isAlignmentLocked()) {
+        emit si_startMaChanging();
+        insertGapsBeforeSelection();
+        emit si_stopMaChanging(true);
+    }
+}
+
+void MaEditorSequenceArea::sl_alignmentChanged(const MultipleAlignment &, const MaModificationInfo &modInfo) {
+    exitFromEditCharacterMode();
+    int nSeq = editor->getNumSequences();
+    int aliLen = editor->getAlignmentLen();
+
+    if (ui->isCollapsibleMode()) {
+        nSeq = getNumDisplayableSequences();
+        updateCollapsedGroups(modInfo);
+    }
+
+    editor->updateReference();
+
+    if ((selection.x() > aliLen - 1) || (selection.y() > nSeq - 1)) {
+        sl_cancelSelection();
+    } else {
+        const QPoint selTopLeft(qMin(selection.x(), aliLen - 1),
+            qMin(selection.y(), nSeq - 1));
+        const QPoint selBottomRight(qMin(selection.x() + selection.width() - 1, aliLen - 1),
+            qMin(selection.y() + selection.height() - 1, nSeq -1));
+
+        MaEditorSelection newSelection(selTopLeft, selBottomRight);
+        // we don't emit "selection changed" signal to avoid redrawing
+        setSelection(newSelection);
+    }
+
+    ui->getScrollController()->sl_updateScrollBars();
+
+    completeRedraw = true;
+    sl_updateActions();
+    update();
+}
+
+void MaEditorSequenceArea::sl_completeUpdate(){
+    completeRedraw = true;
+    sl_updateActions();
+    update();
+    onVisibleRangeChanged();
+}
+
+void MaEditorSequenceArea::sl_completeRedraw() {
+    completeRedraw = true;
+    update();
+}
+
+void MaEditorSequenceArea::sl_triggerUseDots() {
+    useDotsAction->trigger();
+}
+
+void MaEditorSequenceArea::sl_useDots(){
+    completeRedraw = true;
+    update();
+    emit si_highlightingChanged();
+}
+
+void MaEditorSequenceArea::sl_registerCustomColorSchemes() {
+    deleteOldCustomSchemes();
+
+    MsaSchemesMenuBuilder::createAndFillColorSchemeMenuActions(customColorSchemeMenuActions,
+                                                               MsaSchemesMenuBuilder::Custom, getEditor()->getMaObject()->getAlphabet()->getType(),
+                                                               this);
+}
+
+void MaEditorSequenceArea::sl_colorSchemeFactoryUpdated() {
+    applyColorScheme(colorScheme->getFactory()->getId());
+}
+
+void MaEditorSequenceArea::sl_setDefaultColorScheme() {
+    MsaColorSchemeFactory *defaultFactory = getDefaultColorSchemeFactory();
+    SAFE_POINT(NULL != defaultFactory, L10N::nullPointerError("default color scheme factory"), );
+    applyColorScheme(defaultFactory->getId());
+}
+
+void MaEditorSequenceArea::sl_changeHighlightScheme(){
+    QAction* a = qobject_cast<QAction*>(sender());
+    if (NULL == a) {
+        a = GUIUtils::getCheckedAction(customColorSchemeMenuActions);
+    }
+    CHECK(NULL != a, );
+
+    editor->saveHighlightingSettings(highlightingScheme->getFactory()->getId(), highlightingScheme->getSettings());
+
+    QString id = a->data().toString();
+    MsaHighlightingSchemeFactory* factory = AppContext::getMsaHighlightingSchemeRegistry()->getSchemeFactoryById(id);
+    SAFE_POINT(NULL != factory, L10N::nullPointerError("highlighting scheme"), );
+    if (ui->getEditor()->getMaObject() == NULL) {
+        return;
+    }
+
+    delete highlightingScheme;
+    highlightingScheme = factory->create(this, ui->getEditor()->getMaObject());
+    highlightingScheme->applySettings(editor->getHighlightingSettings(id));
+
+    const MultipleAlignment ma = ui->getEditor()->getMaObject()->getMultipleAlignment();
+
+    U2OpStatusImpl os;
+    const int refSeq = ma->getRowIndexByRowId(editor->getReferenceRowId(), os);
+
+    MSAHighlightingFactory msaHighlightingFactory;
+    QString msaHighlightingId = msaHighlightingFactory.getOPGroupParameters().getGroupId();
+
+    CHECK(ui->getEditor(), );
+    CHECK(ui->getEditor()->getOptionsPanel(), );
+
+    if(!factory->isRefFree() && refSeq == -1 && ui->getEditor()->getOptionsPanel()->getActiveGroupId() != msaHighlightingId) {
+        QMessageBox::warning(ui, tr("No reference sequence selected"),
+            tr("Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it"));
+    }
+
+    foreach(QAction* action, highlightingSchemeMenuActions) {
+        action->setChecked(action == a);
+    }
+    if (factory->isAlphabetTypeSupported(DNAAlphabet_RAW)) {
+        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_RAW, id);
+    }
+    if (factory->isAlphabetTypeSupported(DNAAlphabet_NUCL)) {
+        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_NUCL, id);
+    }
+    if (factory->isAlphabetTypeSupported(DNAAlphabet_AMINO)) {
+        AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_AMINO, id);
+    }
+    if (factory->isAlphabetTypeSupported(DNAAlphabet_UNDEFINED)) {
+        FAIL(tr("Unknown alphabet"), );
+    }
+
+    completeRedraw = true;
+    update();
+    emit si_highlightingChanged();
+}
+
+void MaEditorSequenceArea::sl_replaceSelectedCharacter() {
+    maMode = ReplaceCharMode;
+    editModeAnimationTimer.start(500);
+    highlightCurrentSelection();
+    sl_updateActions();
+}
+
+void MaEditorSequenceArea::sl_changeSelectionColor() {
+    QColor black(Qt::black);
+    selectionColor = (black == selectionColor) ? Qt::darkGray : Qt::black;
+    update();
+}
+
+void MaEditorSequenceArea::sl_modelChanged() {
+    updateSelection();
+    ui->getScrollController()->updateVerticalScrollBar();
+    sl_completeRedraw();
+}
+
+void MaEditorSequenceArea::sl_hScrollBarActionPerfermed() {
+    CHECK((shifting && editingEnabled) || selecting, );
+    const QAbstractSlider::SliderAction action = shBar->getRepeatAction();
+    CHECK(QAbstractSlider::SliderSingleStepAdd == action || QAbstractSlider::SliderSingleStepSub == action, );
+
+    const QPoint localPoint = mapFromGlobal(QCursor::pos());
+    const QPoint newCurPos = ui->getScrollController()->getMaPointByScreenPoint(localPoint);
+
+    if (shifting && editingEnabled) {
+        shiftSelectedRegion(newCurPos.x() - cursorPos.x());
+    } else if (selecting) {
+        // There the correct geometry can be set
+//        rubberBand->setGeometry(QRect(rubberBandOrigin, localPoint).normalized());
+    }
+}
+
+void MaEditorSequenceArea::setCursorPos(const QPoint& p) {
+    CHECK(!isAlignmentEmpty(), )
+    SAFE_POINT(isInRange(p), tr("Cursor position is out of range"), );
+    CHECK(p != cursorPos, );
+
+    cursorPos = p;
+
+    highlightSelection = false;
+    sl_updateActions();
+}
+
+void MaEditorSequenceArea::setCursorPos(int x, int y) {
+    setCursorPos(QPoint(x, y));
+}
+
+void MaEditorSequenceArea::setCursorPos(int pos) {
+    setCursorPos(QPoint(pos, cursorPos.y()));
+}
+
+void MaEditorSequenceArea::resizeEvent(QResizeEvent *e) {
+    completeRedraw = true;
+    ui->getScrollController()->sl_updateScrollBars();
+    emit si_visibleRangeChanged();
+    QWidget::resizeEvent(e);
+}
+
+void MaEditorSequenceArea::paintEvent(QPaintEvent *e) {
+    drawAll();
+    QWidget::paintEvent(e);
+}
+
+void MaEditorSequenceArea::wheelEvent(QWheelEvent *we) {
+    bool toMin = we->delta() > 0;
+    if (we->modifiers() == 0) {
+        shBar->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
+    }  else if (we->modifiers() & Qt::SHIFT) {
+        svBar->triggerAction(toMin ? QAbstractSlider::SliderSingleStepSub : QAbstractSlider::SliderSingleStepAdd);
+    }
+    QWidget::wheelEvent(we);
+}
+
+void MaEditorSequenceArea::mousePressEvent(QMouseEvent *e) {
+    prevPressedButton = e->button();
+
+    if (!hasFocus()) {
+        setFocus();
+    }
+
+    if ((e->button() == Qt::LeftButton)) {
+        if (Qt::ShiftModifier == e->modifiers()) {
+            QWidget::mousePressEvent(e);
+            return;
+        }
+
+        rubberBandOrigin = e->pos();
+        const QPoint p = ui->getScrollController()->getMaPointByScreenPoint(e->pos());
+        setCursorPos(boundWithVisibleRange(p));
+        if (isInRange(p)) {
+            const MaEditorSelection &s = getSelection();
+            if (s.getRect().contains(cursorPos) && !isAlignmentLocked() && editingEnabled) {
+                shifting = true;
+                maVersionBeforeShifting = editor->getMaObject()->getModificationVersion();
+                U2OpStatus2Log os;
+                changeTracker.startTracking(os);
+                CHECK_OP(os, );
+                editor->getMaObject()->saveState();
+                emit si_startMaChanging();
+            }
+        }
+
+        if (!shifting) {
+            selecting = true;
+            rubberBandOrigin = e->pos();
+            rubberBand->setGeometry(QRect(rubberBandOrigin, QSize()));
+            const bool isMSAEditor = (qobject_cast<MSAEditor*>(getEditor()) != NULL);
+            if (isMSAEditor) {
+                rubberBand->show();
+            }
+            sl_cancelSelection();
+        }
+    }
+
+    QWidget::mousePressEvent(e);
+}
+
+void MaEditorSequenceArea::mouseReleaseEvent(QMouseEvent *e) {
+    rubberBand->hide();
+    if (shifting) {
+        changeTracker.finishTracking();
+        editor->getMaObject()->releaseState();
+    }
+
+    QPoint newCurPos = ui->getScrollController()->getMaPointByScreenPoint(e->pos());
+
+    if (shifting) {
+        emit si_stopMaChanging(maVersionBeforeShifting != editor->getMaObject()->getModificationVersion());
+    } else if (Qt::LeftButton == e->button() && Qt::LeftButton == prevPressedButton) {
+        updateSelection(newCurPos);
+    }
+    shifting = false;
+    selecting = false;
+    maVersionBeforeShifting = -1;
+
+    ui->getScrollController()->stopSmoothScrolling();
+
+    QWidget::mouseReleaseEvent(e);
+}
+
+void MaEditorSequenceArea::mouseMoveEvent(QMouseEvent* event) {
+    if (event->buttons() & Qt::LeftButton) {
+        const QPoint newCurPos = ui->getScrollController()->getMaPointByScreenPoint(event->pos());
+        if (isInRange(newCurPos)) {
+            if (isVisible(newCurPos, false)) {
+                ui->getScrollController()->stopSmoothScrolling();
+            } else {
+                ScrollController::Directions direction = ScrollController::None;
+                if (newCurPos.x() < ui->getScrollController()->getFirstVisibleBase(false)) {
+                    direction |= ScrollController::Left;
+                } else if (newCurPos.x() > ui->getScrollController()->getLastVisibleBase(width(), false)) {
+                    direction |= ScrollController::Right;
+                }
+
+                if (newCurPos.y() < ui->getScrollController()->getFirstVisibleRowNumber(false)) {
+                    direction |= ScrollController::Up;
+                } else if (newCurPos.y() > ui->getScrollController()->getLastVisibleRowNumber(height(), false)) {
+                    direction |= ScrollController::Down;
+                }
+                ui->getScrollController()->scrollSmoothly(direction);
+            }
+        }
+
+        if (shifting && editingEnabled) {
+            shiftSelectedRegion(newCurPos.x() - cursorPos.x());
+        } else if (selecting) {
+            rubberBand->setGeometry(QRect(rubberBandOrigin, event->pos()).normalized());
+        }
+    }
+
+    QWidget::mouseMoveEvent(event);
+}
+
+void MaEditorSequenceArea::keyPressEvent(QKeyEvent *e) {
+    if (!hasFocus()) {
+        setFocus();
+    }
+
+    int key = e->key();
+    if (maMode != ViewMode) {
+        processCharacterInEditMode(e);
+        return;
+    }
+
+    bool enlargeSelection = qobject_cast<MSAEditor*>(getEditor()) != NULL;
+
+    bool shift = e->modifiers().testFlag(Qt::ShiftModifier);
+    const bool ctrl = e->modifiers().testFlag(Qt::ControlModifier);
+#ifdef Q_OS_MAC
+    // In one case it is better to use a Command key as modifier,
+    // in another - a Control key. genuineCtrl - Control key on Mac OS X.
+    const bool genuineCtrl = e->modifiers().testFlag(Qt::MetaModifier);
+#else
+    const bool genuineCtrl = ctrl;
+#endif
+    static QPoint selectionStart(0, 0);
+    static QPoint selectionEnd(0, 0);
+
+    if (ctrl && (key == Qt::Key_Left || key == Qt::Key_Right || key == Qt::Key_Up || key == Qt::Key_Down)) {
+        //remap to page_up/page_down
+        shift = key == Qt::Key_Up || key == Qt::Key_Down;
+        key =  (key == Qt::Key_Up || key == Qt::Key_Left) ? Qt::Key_PageUp : Qt::Key_PageDown;
+    }
+    //part of these keys are assigned to actions -> so them never passed to keyPressEvent (action handling has higher priority)
+    int endX, endY;
+    switch(key) {
+        case Qt::Key_Escape:
+             sl_cancelSelection();
+             break;
+        case Qt::Key_Left:
+            if(!shift || !enlargeSelection) {
+                moveSelection(-1,0);
+                break;
+            }
+            if (selectionEnd.x() < 1) {
+                break;
+            }
+            selectionEnd.setX(selectionEnd.x() - 1);
+            endX = selectionEnd.x();
+            if (isPosInRange(endX)) {
+                if (endX != -1) {
+                    int firstColumn = qMin(selectionStart.x(),endX);
+                    int selectionWidth = qAbs(endX - selectionStart.x()) + 1;
+                    int startSeq = selection.y();
+                    int height = selection.height();
+                    if (selection.isNull()) {
+                        startSeq = cursorPos.y();
+                        height = 1;
+                    }
+                    MaEditorSelection _selection(firstColumn, startSeq, selectionWidth, height);
+                    setSelection(_selection);
+                    ui->getScrollController()->scrollToBase(endX, width());
+                }
+            }
+            break;
+        case Qt::Key_Right:
+            if(!shift || !enlargeSelection) {
+                moveSelection(1,0);
+                break;
+            }
+            if (selectionEnd.x() >= (editor->getAlignmentLen() - 1)) {
+                break;
+            }
+
+            selectionEnd.setX(selectionEnd.x() +  1);
+            endX = selectionEnd.x();
+            if (isPosInRange(endX)) {
+                if (endX != -1) {
+                    int firstColumn = qMin(selectionStart.x(),endX);
+                    int selectionWidth = qAbs(endX - selectionStart.x()) + 1;
+                    int startSeq = selection.y();
+                    int height = selection.height();
+                    if (selection.isNull()) {
+                        startSeq = cursorPos.y();
+                        height = 1;
+                    }
+                    MaEditorSelection _selection(firstColumn, startSeq, selectionWidth, height);
+                    setSelection(_selection);
+                    ui->getScrollController()->scrollToBase(endX, width());
+                }
+            }
+            break;
+        case Qt::Key_Up:
+            if(!shift || !enlargeSelection) {
+                moveSelection(0,-1);
+                break;
+            }
+            if(selectionEnd.y() < 1) {
+                break;
+            }
+            selectionEnd.setY(selectionEnd.y() - 1);
+            endY = selectionEnd.y();
+            if (isSeqInRange(endY)) {
+                if (endY != -1) {
+                    int startSeq = qMin(selectionStart.y(),endY);
+                    int height = qAbs(endY - selectionStart.y()) + 1;
+                    int firstColumn = selection.x();
+                    int width = selection.width();
+                    if (selection.isNull()) {
+                        firstColumn = cursorPos.x();
+                        width = 1;
+                    }
+                    MaEditorSelection _selection(firstColumn, startSeq, width, height);
+                    setSelection(_selection);
+                    ui->getScrollController()->scrollToRowByNumber(endY, this->height());
+                }
+            }
+            break;
+        case Qt::Key_Down:
+            if(!shift || !enlargeSelection) {
+                moveSelection(0, 1);
+                break;
+            }
+            if (selectionEnd.y() >= (ui->getCollapseModel()->getDisplayableRowsCount() - 1)) {
+                break;
+            }
+            selectionEnd.setY(selectionEnd.y() + 1);
+            endY = selectionEnd.y();
+            if (isSeqInRange(endY)) {
+                if (endY != -1) {
+                    int startSeq = qMin(selectionStart.y(),endY);
+                    int height = qAbs(endY - selectionStart.y()) + 1;
+                    int firstColumn = selection.x();
+                    int width = selection.width();
+                    if (selection.isNull()) {
+                        firstColumn = cursorPos.x();
+                        width = 1;
+                    }
+                    MaEditorSelection _selection(firstColumn, startSeq, width, height);
+                    setSelection(_selection);
+                    ui->getScrollController()->scrollToRowByNumber(endY, this->height());
+                }
+            }
+            break;
+        case Qt::Key_Delete:
+            if (!isAlignmentLocked() && !shift) {
+                emit si_startMaChanging();
+                deleteCurrentSelection();
+            }
+            break;
+        case Qt::Key_Home:
+            if (shift) {
+                // vertical scrolling
+                ui->getScrollController()->scrollToEnd(ScrollController::Up);
+                setCursorPos(QPoint(cursorPos.x(), 0));
+            } else {
+                // horizontal scrolling
+                ui->getScrollController()->scrollToEnd(ScrollController::Left);
+                setCursorPos(QPoint(0, cursorPos.y()));
+            }
+            break;
+        case Qt::Key_End:
+            if (shift) {
+                // vertical scrolling
+                ui->getScrollController()->scrollToEnd(ScrollController::Down);
+                setCursorPos(QPoint(cursorPos.x(), getNumDisplayableSequences() - 1));
+            } else {
+                // horizontal scrolling
+                ui->getScrollController()->scrollToEnd(ScrollController::Right);
+                setCursorPos(QPoint(editor->getAlignmentLen() - 1, cursorPos.y()));
+            }
+            break;
+        case Qt::Key_PageUp:
+            if (shift) {
+                // vertical scrolling
+                ui->getScrollController()->scrollPage(ScrollController::Up);
+            } else {
+                // horizontal scrolling
+                ui->getScrollController()->scrollPage(ScrollController::Left);
+            }
+            break;
+        case Qt::Key_PageDown:
+            if (shift) {
+                // vertical scrolling
+                ui->getScrollController()->scrollPage(ScrollController::Down);
+            } else {
+                // horizontal scrolling
+                ui->getScrollController()->scrollPage(ScrollController::Right);
+            }
+            break;
+        case Qt::Key_Backspace:
+            removeGapsPrecedingSelection(genuineCtrl ? 1 : -1);
+            break;
+        case Qt::Key_Insert:
+        case Qt::Key_Space:
+            // We can't use Command+Space on Mac OS X - it is reserved
+            if(!isAlignmentLocked()) {
+                emit si_startMaChanging();
+                insertGapsBeforeSelection(genuineCtrl ? 1 : -1);
+            }
+            break;
+        case Qt::Key_Shift:
+            if (!selection.isNull()) {
+                selectionStart = selection.topLeft();
+                selectionEnd = selection.getRect().bottomRight();
+            } else {
+                selectionStart = cursorPos;
+                selectionEnd = cursorPos;
+            }
+            break;
+    }
+    QWidget::keyPressEvent(e);
+}
+
+void MaEditorSequenceArea::keyReleaseEvent(QKeyEvent *ke) {
+    if ((ke->key() == Qt::Key_Space || ke->key() == Qt::Key_Delete) && !isAlignmentLocked() && !ke->isAutoRepeat()) {
+        emit si_stopMaChanging(true);
+    }
+
+    QWidget::keyReleaseEvent(ke);
+}
+
+void MaEditorSequenceArea::drawBackground(QPainter &) {
+
+}
+
+void MaEditorSequenceArea::insertGapsBeforeSelection(int countOfGaps) {
+    CHECK(getEditor() != NULL, );
+    if (selection.isNull() || 0 == countOfGaps || -1 > countOfGaps) {
+        return;
+    }
+    SAFE_POINT(isInRange(selection.topLeft()), tr("Top left corner of the selection has incorrect coords"), );
+    SAFE_POINT(isInRange(QPoint(selection.x() + selection.width() - 1, selection.y() + selection.height() - 1)),
+        tr("Bottom right corner of the selection has incorrect coords"), );
+
+    // if this method was invoked during a region shifting
+    // then shifting should be canceled
+    cancelShiftTracking();
+
+    MultipleAlignmentObject *maObj = editor->getMaObject();
+    if (NULL == maObj || maObj->isStateLocked()) {
+        return;
+    }
+    U2OpStatus2Log os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os,);
+
+    const MultipleAlignment ma = maObj->getMultipleAlignment();
+    if (selection.width() == ma->getLength() && selection.height() == ma->getNumRows()) {
+        return;
+    }
+
+    const int removedRegionWidth = (-1 == countOfGaps) ? selection.width() : countOfGaps;
+    const U2Region& sequences = getSelectedRows();
+    maObj->insertGap(sequences, selection.x(), removedRegionWidth);
+    adjustReferenceLength(os);
+    CHECK_OP(os,);
+    moveSelection(removedRegionWidth, 0, true);
+    if (!getSelection().isEmpty()) {
+        ui->getScrollController()->scrollToMovedSelection(ScrollController::Right);
+    }
+}
+
+void MaEditorSequenceArea::removeGapsPrecedingSelection(int countOfGaps) {
+    const MaEditorSelection selectionBackup = selection;
+    // check if selection exists
+    if (selectionBackup.isNull()) {
+        return;
+    }
+
+    const QPoint selectionTopLeftCorner(selectionBackup.topLeft());
+    // don't perform the deletion if the selection is at the alignment start
+    if (0 == selectionTopLeftCorner.x() || -1 > countOfGaps || 0 == countOfGaps) {
+        return;
+    }
+
+    int removedRegionWidth = (-1 == countOfGaps) ? selectionBackup.width() : countOfGaps;
+    QPoint topLeftCornerOfRemovedRegion(selectionTopLeftCorner.x() - removedRegionWidth,
+        selectionTopLeftCorner.y());
+    if (0 > topLeftCornerOfRemovedRegion.x()) {
+        removedRegionWidth -= qAbs(topLeftCornerOfRemovedRegion.x());
+        topLeftCornerOfRemovedRegion.setX(0);
+    }
+
+    MultipleAlignmentObject *maObj = editor->getMaObject();
+    if (NULL == maObj || maObj->isStateLocked()) {
+        return;
+    }
+
+    // if this method was invoked during a region shifting
+    // then shifting should be canceled
+    cancelShiftTracking();
+
+    const U2Region rowsContainingRemovedGaps(getSelectedRows());
+    U2OpStatus2Log os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+
+    const int countOfDeletedSymbols = maObj->deleteGap(os, rowsContainingRemovedGaps,
+        topLeftCornerOfRemovedRegion.x(), removedRegionWidth);
+
+    // if some symbols were actually removed and the selection is not located
+    // at the alignment end, then it's needed to move the selection
+    // to the place of the removed symbols
+    if (0 < countOfDeletedSymbols) {
+        const MaEditorSelection newSelection(selectionBackup.x() - countOfDeletedSymbols,
+            topLeftCornerOfRemovedRegion.y(), selectionBackup.width(),
+            selectionBackup.height());
+        setSelection(newSelection);
+    }
+}
+
+void MaEditorSequenceArea::cancelShiftTracking() {
+    shifting = false;
+    selecting = false;
+    changeTracker.finishTracking();
+    editor->getMaObject()->releaseState();
+}
+
+void MaEditorSequenceArea::drawAll() {
+    QSize s = size() * devicePixelRatio();
+    if (cachedView->size() != s) {
+        delete cachedView;
+        cachedView = new QPixmap(s);
+        cachedView->setDevicePixelRatio(devicePixelRatio());
+        completeRedraw = true;
+    }
+    if (completeRedraw) {
+        cachedView->fill(Qt::transparent);
+        QPainter pCached(cachedView);
+        drawVisibleContent(pCached);
+        completeRedraw = false;
+    }
+
+    QPainter painter(this);
+    painter.fillRect(QRect(QPoint(0, 0), s), Qt::white);
+    drawBackground(painter);
+
+    painter.drawPixmap(0, 0, *cachedView);
+    renderer->drawSelection(painter);
+    renderer->drawFocus(painter);
+}
+
+void MaEditorSequenceArea::updateColorAndHighlightSchemes() {
+    Settings* s = AppContext::getSettings();
+    if (!s || !editor){
+        return;
+    }
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (!maObj){
+        return;
+    }
+
+    const DNAAlphabet* al = maObj->getAlphabet();
+    if (!al){
+        return;
+    }
+
+    MsaColorSchemeRegistry* csr = AppContext::getMsaColorSchemeRegistry();
+    MsaHighlightingSchemeRegistry* hsr = AppContext::getMsaHighlightingSchemeRegistry();
+
+    QString csid;
+    QString hsid;
+    getColorAndHighlightingIds(csid, hsid);
+    MsaColorSchemeFactory* csf = csr->getSchemeFactoryById(csid);
+    MsaHighlightingSchemeFactory* hsf = hsr->getSchemeFactoryById(hsid);
+    initColorSchemes(csf);
+    initHighlightSchemes(hsf);
+}
+
+void MaEditorSequenceArea::initColorSchemes(MsaColorSchemeFactory *defaultColorSchemeFactory) {
+    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
+    connect(msaColorSchemeRegistry, SIGNAL(si_customSettingsChanged()), SLOT(sl_registerCustomColorSchemes()));
+
+    registerCommonColorSchemes();
+    sl_registerCustomColorSchemes();
+
+    applyColorScheme(defaultColorSchemeFactory->getId());
+}
+
+void MaEditorSequenceArea::registerCommonColorSchemes() {
+    qDeleteAll(colorSchemeMenuActions);
+    colorSchemeMenuActions.clear();
+
+    MsaSchemesMenuBuilder::createAndFillColorSchemeMenuActions(colorSchemeMenuActions, MsaSchemesMenuBuilder::Common, getEditor()->getMaObject()->getAlphabet()->getType(), this);
+}
+
+void MaEditorSequenceArea::initHighlightSchemes(MsaHighlightingSchemeFactory* hsf) {
+    qDeleteAll(highlightingSchemeMenuActions);
+    highlightingSchemeMenuActions.clear();
+    SAFE_POINT(hsf != NULL, "Highlight scheme factory is NULL", );
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    QVariantMap settings = highlightingScheme != NULL
+            ? highlightingScheme->getSettings()
+            : QVariantMap();
+    delete highlightingScheme;
+
+    highlightingScheme = hsf->create(this, maObj);
+    highlightingScheme->applySettings(settings);
+
+    MsaSchemesMenuBuilder::createAndFillHighlightingMenuActions(highlightingSchemeMenuActions, getEditor()->getMaObject()->getAlphabet()->getType(), this);
+    QList<QAction *> tmpActions = QList<QAction *>() << highlightingSchemeMenuActions;
+    foreach(QAction *action, tmpActions) {
+        action->setChecked(action->data() == hsf->getId());
+    }
+}
+
+MsaColorSchemeFactory * MaEditorSequenceArea::getDefaultColorSchemeFactory() const {
+    MsaColorSchemeRegistry *msaColorSchemeRegistry = AppContext::getMsaColorSchemeRegistry();
+
+    switch (editor->getMaObject()->getAlphabet()->getType()) {
+    case DNAAlphabet_RAW:
+        return msaColorSchemeRegistry->getSchemeFactoryById(MsaColorScheme::EMPTY);
+    case DNAAlphabet_NUCL:
+        return msaColorSchemeRegistry->getSchemeFactoryById(MsaColorScheme::UGENE_NUCL);
+    case DNAAlphabet_AMINO:
+        return msaColorSchemeRegistry->getSchemeFactoryById(MsaColorScheme::UGENE_AMINO);
+    default:
+        FAIL(tr("Unknown alphabet"), NULL);
+    }
+    return NULL;
+}
+
+MsaHighlightingSchemeFactory* MaEditorSequenceArea::getDefaultHighlightingSchemeFactory() const {
+    MsaHighlightingSchemeRegistry *hsr = AppContext::getMsaHighlightingSchemeRegistry();
+    MsaHighlightingSchemeFactory *hsf = hsr->getSchemeFactoryById(MsaHighlightingScheme::EMPTY);
+    return hsf;
+}
+
+void MaEditorSequenceArea::getColorAndHighlightingIds(QString &csid, QString &hsid) {
+    DNAAlphabetType atype = getEditor()->getMaObject()->getAlphabet()->getType();
+    Settings* s = AppContext::getSettings();
+    switch (atype) {
+    case DNAAlphabet_RAW:
+        csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_RAW, MsaColorScheme::EMPTY).toString();
+        hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_RAW, MsaHighlightingScheme::EMPTY).toString();
+        break;
+    case DNAAlphabet_NUCL:
+        csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_NUCL, MsaColorScheme::UGENE_NUCL).toString();
+        hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_NUCL, MsaHighlightingScheme::EMPTY).toString();
+        break;
+    case DNAAlphabet_AMINO:
+        csid = s->getValue(SETTINGS_ROOT + SETTINGS_COLOR_AMINO, MsaColorScheme::UGENE_AMINO).toString();
+        hsid = s->getValue(SETTINGS_ROOT + SETTINGS_HIGHLIGHT_AMINO, MsaHighlightingScheme::EMPTY).toString();
+        break;
+    default:
+        csid = "";
+        hsid = "";
+        break;
+    }
+
+    MsaColorSchemeRegistry* csr = AppContext::getMsaColorSchemeRegistry();
+    MsaHighlightingSchemeRegistry* hsr = AppContext::getMsaHighlightingSchemeRegistry();
+
+    MsaColorSchemeFactory* csf = csr->getSchemeFactoryById(csid);
+    if (csf == NULL) {
+        csid = getDefaultColorSchemeFactory()->getId();
+    }
+    MsaHighlightingSchemeFactory* hsf = hsr->getSchemeFactoryById(hsid);
+    if (hsf == NULL) {
+        hsid = getDefaultHighlightingSchemeFactory()->getId();
+    }
+
+
+    if (colorScheme != NULL && colorScheme->getFactory()->isAlphabetTypeSupported(atype)) {
+        csid = colorScheme->getFactory()->getId();
+    }
+    if (highlightingScheme != NULL && highlightingScheme->getFactory()->isAlphabetTypeSupported(atype)) {
+        hsid = highlightingScheme->getFactory()->getId();
+    }
+}
+
+void MaEditorSequenceArea::applyColorScheme(const QString &id) {
+    CHECK(NULL != ui->getEditor()->getMaObject(), );
+
+    MsaColorSchemeFactory *factory = AppContext::getMsaColorSchemeRegistry()->getSchemeFactoryById(id);
+    delete colorScheme;
+    colorScheme = factory->create(this, ui->getEditor()->getMaObject());
+
+    connect(factory, SIGNAL(si_factoryChanged()), SLOT(sl_colorSchemeFactoryUpdated()), Qt::UniqueConnection);
+    connect(factory, SIGNAL(destroyed(QObject *)), SLOT(sl_setDefaultColorScheme()), Qt::UniqueConnection);
+
+    QList<QAction *> tmpActions = QList<QAction *>() << colorSchemeMenuActions << customColorSchemeMenuActions;
+    foreach (QAction *action, tmpActions) {
+        action->setChecked(action->data() == id);
+    }
+
+    if (qobject_cast<MSAEditor*>(getEditor()) != NULL) { // to avoid setting of sanger scheme
+        switch (ui->getEditor()->getMaObject()->getAlphabet()->getType()) {
+        case DNAAlphabet_RAW:
+            AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_RAW, id);
+            break;
+        case DNAAlphabet_NUCL:
+            AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_NUCL, id);
+            break;
+        case DNAAlphabet_AMINO:
+            AppContext::getSettings()->setValue(SETTINGS_ROOT + SETTINGS_COLOR_AMINO, id);
+            break;
+        default:
+            FAIL(tr("Unknown alphabet"), );
+            break;
+        }
+    }
+
+    completeRedraw = true;
+    update();
+    emit si_highlightingChanged();
+}
+
+void MaEditorSequenceArea::processCharacterInEditMode(QKeyEvent *e) {
+    if (e->key() == Qt::Key_Escape) {
+        exitFromEditCharacterMode();
+        return;
+    }
+
+    QString text = e->text().toUpper();
+    if (1 == text.length()) {
+        if (isCharacterAcceptable(text)) {
+            QChar newChar = text.at(0);
+            newChar = (newChar == '-' || newChar == emDash || newChar == ' ') ? U2Msa::GAP_CHAR : newChar;
+            processCharacterInEditMode(newChar.toLatin1());
+        } else {
+            MainWindow *mainWindow = AppContext::getMainWindow();
+            mainWindow->addNotification(getInacceptableCharacterErrorMessage(), Error_Not);
+            exitFromEditCharacterMode();
+        }
+    }
+}
+
+void MaEditorSequenceArea::processCharacterInEditMode(char newCharacter) {
+    switch (maMode) {
+    case ReplaceCharMode:
+        replaceChar(newCharacter);
+        break;
+    case InsertCharMode:
+        insertChar(newCharacter);
+    case ViewMode:
+    default:
+        // do nothing
+        ;
+    }
+}
+
+void MaEditorSequenceArea::replaceChar(char newCharacter) {
+    CHECK(maMode == ReplaceCharMode, );
+    CHECK(getEditor() != NULL, );
+    if (selection.isNull()) {
+        return;
+    }
+    SAFE_POINT(isInRange(selection.topLeft()), "Incorrect selection is detected!", );
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    if (maObj == NULL || maObj->isStateLocked()) {
+        return;
+    }
+    if (maObj->getNumRows() == 1 && maObj->getRow(selection.y())->getCoreLength() == 1 && newCharacter == U2Msa::GAP_CHAR) {
+        exitFromEditCharacterMode();
+        return;
+    }
+
+    const bool isGap = maObj->getRow(selection.y())->isGap(selection.x());
+    GRUNTIME_NAMED_CONDITION_COUNTER(cvar, tvar, isGap, "Replace gap", editor->getFactoryId());
+    GRUNTIME_NAMED_CONDITION_COUNTER(ccvar, ttvar, !isGap, "Replace character", editor->getFactoryId());
+
+    U2OpStatusImpl os;
+    U2UseCommonUserModStep userModStep(maObj->getEntityRef(), os);
+    Q_UNUSED(userModStep);
+    SAFE_POINT_OP(os, );
+
+    // replacement is valid only for one symbol
+    const U2Region& sel = getSelectedRows();
+    for (qint64 rowIndex = sel.startPos; rowIndex < sel.endPos(); rowIndex++) {
+        maObj->replaceCharacter(selection.x(), rowIndex, newCharacter);
+    }
+
+    exitFromEditCharacterMode();
+}
+
+void MaEditorSequenceArea::exitFromEditCharacterMode() {
+    if (maMode != ViewMode) {
+        editModeAnimationTimer.stop();
+        highlightSelection = false;
+        selectionColor = Qt::black;
+        maMode = ViewMode;
+        sl_updateActions();
+        update();
+    }
+}
+
+bool MaEditorSequenceArea::isCharacterAcceptable(const QString &text) const {
+    static const QRegExp latinCharacterOrGap(QString("([A-Z]| |-|%1)").arg(emDash));
+    return latinCharacterOrGap.exactMatch(text);
+}
+
+const QString &MaEditorSequenceArea::getInacceptableCharacterErrorMessage() const {
+    static const QString message = tr("It is not possible to insert the character into the alignment. "
+                                      "Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').").arg(emDash);
+    return message;
+}
+
+void MaEditorSequenceArea::deleteOldCustomSchemes() {
+    qDeleteAll(customColorSchemeMenuActions);
+    customColorSchemeMenuActions.clear();
+}
+
+void MaEditorSequenceArea::updateCollapsedGroups(const MaModificationInfo&) {
+
+}
+
+MaEditorSequenceArea::MaMode MaEditorSequenceArea::getModInfo() {
+    return maMode;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.h
new file mode 100644
index 0000000..b36fa59
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorSequenceArea.h
@@ -0,0 +1,337 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_SEQUENCE_AREA_
+#define _U2_MA_EDITOR_SEQUENCE_AREA_
+
+#include <QColor>
+#include <QTimer>
+#include <QPainter>
+#include <QWidget>
+
+#include <U2Core/U2Region.h>
+#include <U2Core/MultipleAlignment.h>
+
+#include <U2Gui/GScrollBar.h>
+
+#include "MaEditorSelection.h"
+#include "../MaEditor.h"
+#include "../MsaEditorUserModStepController.h"
+
+class QRubberBand;
+
+namespace U2 {
+
+#define SETTINGS_ROOT QString("msaeditor/")
+#define SETTINGS_COLOR_NUCL     "color_nucl"
+#define SETTINGS_COLOR_AMINO    "color_amino"
+#define SETTINGS_COLOR_RAW      "color_raw"
+#define SETTINGS_HIGHLIGHT_NUCL     "highlight_nucl"
+#define SETTINGS_HIGHLIGHT_AMINO    "highlight_amino"
+#define SETTINGS_HIGHLIGHT_RAW      "highlight_raw"
+#define SETTINGS_COPY_FORMATTED "copyformatted"
+
+class GScrollBar;
+class MaEditor;
+class MaEditorWgt;
+class SequenceAreaRenderer;
+
+class MaModificationInfo;
+class MsaColorScheme;
+class MsaColorSchemeFactory;
+class MsaHighlightingScheme;
+class MsaHighlightingSchemeFactory;
+
+class U2VIEW_EXPORT MaEditorSequenceArea : public QWidget {
+    Q_OBJECT
+    friend class SequenceAreaRenderer;
+
+public:
+    MaEditorSequenceArea(MaEditorWgt* ui, GScrollBar* hb, GScrollBar* vb);
+    virtual ~MaEditorSequenceArea();
+
+    MaEditor *getEditor() const;
+
+    QSize getCanvasSize(const QList<int> &seqIdx, const U2Region &region) const;
+
+    int getFirstVisibleBase() const;
+    int getLastVisibleBase(bool countClipped) const;
+    int getNumVisibleBases() const;
+    int getDisplayableRowsCount() const;
+
+    /*
+     * Returns count of sequences that are drawn on the widget by taking into account
+     * collapsed rows.
+     */
+    int getNumDisplayableSequences() const;
+
+    bool isAlignmentEmpty() const;
+
+    bool isPosInRange(int position) const;
+    bool isSeqInRange(int rowNumber) const;
+    bool isInRange(const QPoint &point) const;
+    QPoint boundWithVisibleRange(const QPoint &point) const;
+
+    bool isVisible(const QPoint& p, bool countClipped) const;
+    bool isPositionVisible(int pos, bool countClipped) const;
+    bool isRowVisible(int rowNumber, bool countClipped) const;
+
+    const MaEditorSelection &getSelection() const;
+
+    void updateSelection(const QPoint &newMousePos);
+
+    // update selection when collapsible model changed
+    void updateSelection();
+
+    virtual void setSelection(const MaEditorSelection& sel, bool newHighlightSelection = false);
+
+    virtual void moveSelection(int dx, int dy, bool allowSelectionResize = false);
+
+    virtual void adjustReferenceLength(U2OpStatus& os) { Q_UNUSED(os); }
+
+    U2Region getSelectedRows() const;
+
+    QString getCopyFormatedAlgorithmId() const;
+    void setCopyFormatedAlgorithmId(const QString& algoId);
+
+    virtual void deleteCurrentSelection();
+
+    /**
+     * Shifts currently selected region to @shift.
+     * If @shift > 0, the region is moved to the right and "true" is returned.
+     * If @shift <= 0, the region is moved to the left only for the available number
+     * of columns (i.e. the columns with gaps). The returned value specifies
+     * whether the region was actually moved in this case.
+     */
+    bool shiftSelectedRegion(int shift);
+
+    void centerPos(const QPoint &point);
+    void centerPos(int pos);
+
+    void setFont(const QFont& f);
+
+    void onVisibleRangeChanged();
+
+    bool isAlignmentLocked() const;
+
+    void drawVisibleContent(QPainter &painter);
+
+    bool drawContent(QPainter &painter, const QRect &area);
+    bool drawContent(QPainter &painter, const QRect &area, int xStart, int yStart);
+    bool drawContent(QPainter &painter, const U2Region &region, const QList<int> &seqIdx);
+    bool drawContent(QPainter &painter, const U2Region &region, const QList<int> &seqIdx, int xStart, int yStart);
+
+    bool drawContent(QPainter &painter);
+    bool drawContent(QPixmap &pixmap);
+    bool drawContent(QPixmap &pixmap, const U2Region &region, const QList<int> &seqIdx);
+
+    void highlightCurrentSelection();
+
+    QString exportHighlighting(int startPos, int endPos, int startingIndex, bool keepGaps, bool dots, bool transpose);
+
+    MsaColorScheme *getCurrentColorScheme() const;
+    MsaHighlightingScheme *getCurrentHighlightingScheme() const;
+    bool getUseDotsCheckedState() const;
+
+    QAction *getReplaceCharacterAction() const;
+
+public slots:
+    void sl_changeColorSchemeOutside(const QString &id);
+    void sl_delCurrentSelection();
+    void sl_cancelSelection();
+
+protected slots:
+    void sl_changeCopyFormat(const QString& alg);
+    void sl_changeColorScheme();
+    void sl_fillCurrentSelectionWithGaps();
+
+    void sl_alignmentChanged(const MultipleAlignment &ma, const MaModificationInfo &modInfo);
+
+    void sl_completeUpdate();
+    void sl_completeRedraw();
+
+    virtual void sl_updateActions() = 0;
+
+    void sl_triggerUseDots();
+    void sl_useDots();
+
+    void sl_registerCustomColorSchemes();
+    void sl_colorSchemeFactoryUpdated();
+    void sl_setDefaultColorScheme();
+    void sl_changeHighlightScheme();
+
+    void sl_replaceSelectedCharacter();
+    void sl_changeSelectionColor();
+    virtual void sl_modelChanged();
+
+private slots:
+    void sl_hScrollBarActionPerfermed();
+
+signals:
+    void si_selectionChanged(const MaEditorSelection& current, const MaEditorSelection& prev);
+    void si_selectionChanged(const QStringList& selectedRows);
+    void si_highlightingChanged();
+    void si_visibleRangeChanged(QStringList visibleSequences, int reqHeight);
+    void si_visibleRangeChanged();
+    void si_startMaChanging();
+    void si_stopMaChanging(bool msaUpdated);
+    void si_copyFormattedChanging(bool enabled);
+
+protected:
+    void setCursorPos(const QPoint& p);
+    void setCursorPos(int x, int y);
+    void setCursorPos(int pos);
+
+    void resizeEvent(QResizeEvent *event);
+    void paintEvent(QPaintEvent *event);
+    void wheelEvent(QWheelEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
+
+    void keyPressEvent(QKeyEvent *);
+    void keyReleaseEvent(QKeyEvent *);
+
+    virtual void initRenderer() = 0;
+    virtual void drawBackground(QPainter& p);
+
+    /**
+     * Inserts a region consisting of gaps only before the selection. The inserted region width
+     * is specified by @countOfGaps parameter if 0 < @countOfGaps, its height is equal to the
+     * current selection's height.
+     *
+     * If there is no selection in MSA then the method does nothing.
+     *
+     * If -1 == @countOfGaps then the inserting region width is equal to
+     * the selection's width. If 1 > @countOfGaps and -1 != @countOfGaps then nothing happens.
+     */
+    void insertGapsBeforeSelection( int countOfGaps = -1 );
+
+    /**
+     * Reverse operation for @insertGapsBeforeSelection( ),
+     * removes the region preceding the selection if it consists of gaps only.
+     *
+     * If there is no selection in MSA then the method does nothing.
+     *
+     * @countOfGaps specifies maximum width of the removed region.
+     * If -1 == @countOfGaps then count of removed gap columns is equal to
+     * the selection width. If 1 > @countOfGaps and -1 != @countOfGaps then nothing happens.
+     */
+    void removeGapsPrecedingSelection( int countOfGaps = -1 );
+
+    /*
+     * Interrupts the tracking of MSA modifications caused by a region shifting,
+     * also stops shifting. The method is used to keep consistence of undo/redo stack.
+     */
+    void cancelShiftTracking( );
+
+    void drawAll();
+
+    void updateColorAndHighlightSchemes();
+
+    void initColorSchemes(MsaColorSchemeFactory* defaultColorSchemeFactory);
+
+    void registerCommonColorSchemes();
+
+    void initHighlightSchemes(MsaHighlightingSchemeFactory* hsf);
+
+    MsaColorSchemeFactory * getDefaultColorSchemeFactory() const;
+    MsaHighlightingSchemeFactory * getDefaultHighlightingSchemeFactory() const;
+
+    virtual void getColorAndHighlightingIds(QString &csid, QString &hsid);
+    void applyColorScheme(const QString &id);
+
+    void processCharacterInEditMode(QKeyEvent *e);
+    void processCharacterInEditMode(char newCharacter);
+    void replaceChar(char newCharacter);
+    virtual void insertChar(char ) {}
+    void exitFromEditCharacterMode();
+    virtual bool isCharacterAcceptable(const QString &text) const;
+    virtual const QString &getInacceptableCharacterErrorMessage() const;
+
+    void deleteOldCustomSchemes();
+
+    virtual void updateCollapsedGroups(const MaModificationInfo &maModificationInfo);
+
+protected:
+    enum MaMode {
+        ViewMode,
+        ReplaceCharMode,
+        InsertCharMode
+    };
+
+public:
+    MaMode getModInfo();
+
+protected:
+    MaEditor*       editor;
+    MaEditorWgt*    ui;
+
+    MsaColorScheme*         colorScheme;
+    MsaHighlightingScheme*  highlightingScheme;
+    bool                    highlightSelection;
+
+    GScrollBar*     shBar;
+    GScrollBar*     svBar;
+    QRubberBand*    rubberBand;
+
+    SequenceAreaRenderer*   renderer;
+
+    QPixmap*        cachedView;
+    bool            completeRedraw;
+
+    MaMode          maMode;
+    QTimer          editModeAnimationTimer;
+    QColor          selectionColor;
+
+    bool                editingEnabled;
+    bool                shifting;
+    bool                selecting;
+    Qt::MouseButton     prevPressedButton;
+    QPoint              rubberBandOrigin; // global window coordinates
+    QPoint              cursorPos; // mouse cursor position in alignment coordinates
+    MaEditorSelection   selection; // selection with rows indexes in collapsible model coordinates
+    MaEditorSelection   baseSelection; // selection with rows indexes in absolute coordinates
+
+    int                 maVersionBeforeShifting;
+
+    QAction*            useDotsAction;
+
+    QList<QAction*>     colorSchemeMenuActions;
+    QList<QAction* >    customColorSchemeMenuActions;
+    QList<QAction* >    highlightingSchemeMenuActions;
+
+    QAction*            replaceCharacterAction;
+    QAction*            fillWithGapsinsSymAction;
+
+    // The member is intended for tracking MSA changes (handling U2UseCommonUserModStep objects)
+    // that does not fit into one method, e.g. shifting MSA region with mouse.
+    // If the changing action fits within one method it's recommended using
+    // the U2UseCommonUserModStep object explicitly.
+    MsaEditorUserModStepController changeTracker;
+
+    static const QChar emDash;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_SEQUENCE_AREA_
+
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.cpp
new file mode 100644
index 0000000..1b41bb5
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.cpp
@@ -0,0 +1,180 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MaEditorUtils.h"
+#include "MaEditorWgt.h"
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include <QApplication>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QVBoxLayout>
+
+
+namespace U2 {
+
+/************************************************************************/
+/* MaSplitterController */
+/************************************************************************/
+MaSplitterController::MaSplitterController()
+    : seqArea(NULL)
+{
+    splitter = new QSplitter(Qt::Horizontal);
+    splitter->setObjectName("msa_editor_horizontal_splitter");
+}
+MaSplitterController::MaSplitterController(QSplitter *spliter)
+    : seqArea(NULL),
+      splitter(spliter)
+{
+}
+
+void MaSplitterController::setSequenceArea(MSAEditorSequenceArea* _seqArea) {
+    seqArea = _seqArea;
+}
+
+QSplitter* MaSplitterController::getSplitter() {
+    return splitter;
+}
+
+void MaSplitterController::addWidget( QWidget *wgt, int index, qreal coef)
+{
+    SAFE_POINT(coef >= 0, QString("Incorrect parameters were passed to SinchronizedObjectView::addObject: coef < 0"),);
+
+    widgets.append(wgt);
+    int baseSize = splitter->width();
+    widgetSizes.insert(index, qRound(coef * baseSize));
+    int widgetsWidth = 0;
+    foreach(int curSize, widgetSizes) {
+        widgetsWidth += curSize;
+    }
+    for(int i = 0; i < widgetSizes.size(); i++) {
+        widgetSizes[i] = widgetSizes[i] * baseSize / widgetsWidth;
+    }
+    splitter->insertWidget(index, wgt);
+    splitter->setSizes(widgetSizes);
+}
+void MaSplitterController::addWidget(QWidget *neighboringWidget, QWidget *wgt, qreal coef, int neighboringShift) {
+    int index = splitter->indexOf(neighboringWidget) + neighboringShift;
+    addWidget(wgt, index, coef);
+}
+
+void MaSplitterController::removeWidget( QWidget *wgt )
+{
+    int widgetsWidth = 0;
+    int baseSize = splitter->width();
+    int index = splitter->indexOf(wgt);
+    if(index < 0) {
+        return;
+    }
+    widgetSizes.removeAt(index);
+
+    foreach(int curSize, widgetSizes) {
+        widgetsWidth += curSize;
+    }
+    for(int i = 0; i < widgetSizes.size(); i++) {
+        widgetSizes[i] = widgetSizes[i] * baseSize / widgetsWidth;
+    }
+    foreach(QWidget *curObj, widgets) {
+        curObj->disconnect(wgt);
+        wgt->disconnect(curObj);
+    }
+    widgets.removeAll(wgt);
+    wgt->setParent(NULL);
+    splitter->setSizes(widgetSizes);
+}
+
+/************************************************************************/
+/* MSAWidget */
+/************************************************************************/
+MaUtilsWidget::MaUtilsWidget(MaEditorWgt* ui, QWidget* heightWidget)
+    : ui(ui),
+      heightWidget(heightWidget),
+      heightMargin(0)
+{
+    connect(ui->getEditor(), SIGNAL(si_zoomOperationPerformed(bool)), SLOT(sl_fontChanged()));
+    setMinimumHeight(heightWidget->height() + heightMargin);
+}
+
+void MaUtilsWidget::sl_fontChanged() {
+    update();
+    setMinimumHeight(heightWidget->height() + heightMargin);
+}
+
+const QFont& MaUtilsWidget::getMsaEditorFont() {
+    return ui->getEditor()->getFont();
+}
+
+void MaUtilsWidget::setHeightMargin(int _heightMargin) {
+    heightMargin = _heightMargin;
+    setMinimumHeight(heightWidget->height() + heightMargin);
+}
+
+void MaUtilsWidget::mousePressEvent( QMouseEvent * ) {
+    ui->getSequenceArea()->sl_cancelSelection();
+}
+void MaUtilsWidget::paintEvent(QPaintEvent *) {
+    QPainter p(this);
+    p.fillRect(rect(), Qt::white);
+    setMinimumHeight(heightWidget->height() + heightMargin);
+}
+
+/************************************************************************/
+/* MaLabelWidget */
+/************************************************************************/
+MaLabelWidget::MaLabelWidget(MaEditorWgt* ui, QWidget* heightWidget, const QString & t, Qt::Alignment a)
+    : MaUtilsWidget(ui, heightWidget) {
+    label = new QLabel(t, this);
+    label->setAlignment(a);
+    label->setTextFormat(Qt::RichText);
+    label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+
+    QVBoxLayout* layout = new QVBoxLayout(this);
+    layout->setContentsMargins(0, 0, 0, 0);
+    layout->addWidget(label);
+    setLayout(layout);
+}
+
+void MaLabelWidget::paintEvent(QPaintEvent * e) {
+    MaUtilsWidget::paintEvent(e);
+    label->setFont(getMsaEditorFont());
+}
+
+void MaLabelWidget::mousePressEvent( QMouseEvent * e ) {
+    ui->getSequenceArea()->sl_cancelSelection();
+    QMouseEvent eventForNameListArea(e->type(), QPoint(e->x(), 0), e->globalPos(), e->button(), e->buttons(), e->modifiers());
+    QApplication::instance()->notify((QObject*)ui->getEditorNameList(), &eventForNameListArea);
+}
+
+void MaLabelWidget::mouseReleaseEvent( QMouseEvent * e ) {
+    QMouseEvent eventForNameListArea(e->type(), QPoint(e->x(), qMax(e->y() - height(), 0)), e->globalPos(), e->button(), e->buttons(), e->modifiers());
+    QApplication::instance()->notify((QObject*)ui->getEditorNameList(), &eventForNameListArea);
+}
+
+void MaLabelWidget::mouseMoveEvent( QMouseEvent * e ) {
+    QMouseEvent eventForSequenceArea(e->type(), QPoint(e->x(), e->y() - height()), e->globalPos(), e->button(), e->buttons(), e->modifiers());
+    QApplication::instance()->notify((QObject*)ui->getEditorNameList(), &eventForSequenceArea);
+}
+
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.h
new file mode 100644
index 0000000..6bf3fee
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorUtils.h
@@ -0,0 +1,106 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_UTILS_H_
+#define _U2_MA_EDITOR_UTILS_H_
+
+#include <QLabel>
+#include <QSplitter>
+#include <QWidget>
+
+
+namespace U2 {
+
+class MaEditorWgt;
+class MSAEditorSequenceArea;
+
+/************************************************************************/
+/* MaSplitterController */
+/************************************************************************/
+class MaSplitterController : public QObject {
+    Q_OBJECT
+public:
+    MaSplitterController();
+    MaSplitterController(QSplitter *spliter);
+
+    void setSequenceArea(MSAEditorSequenceArea* _seqArea);
+
+    QSplitter* getSplitter();
+
+    void addWidget(QWidget *wgt, int index, qreal coef);
+    void addWidget(QWidget *neighboringWidget, QWidget *wgt, qreal coef, int neighboringShift = 0);
+
+    void removeWidget(QWidget *wgt);
+
+private:
+    MSAEditorSequenceArea* seqArea;
+    QSplitter*             splitter;
+
+    QList<QWidget *>       widgets;
+    QList<int>             widgetSizes;
+};
+
+/************************************************************************/
+/* MaUtilsWidget */
+/************************************************************************/
+class MaUtilsWidget : public QWidget {
+    Q_OBJECT
+public:
+    MaUtilsWidget(MaEditorWgt* _ui, QWidget* heightWidget);
+    virtual ~MaUtilsWidget() {}
+    const QFont& getMsaEditorFont();
+    void setHeightMargin(int _heightMargin);
+
+protected slots:
+    void sl_fontChanged();
+
+protected:
+    virtual void mousePressEvent(QMouseEvent *e);
+    virtual void paintEvent(QPaintEvent *e);
+
+    MaEditorWgt*    ui;
+    QWidget*        heightWidget;
+    int             heightMargin;
+};
+
+/************************************************************************/
+/* MaLabelWidget */
+/************************************************************************/
+class MaLabelWidget : public MaUtilsWidget {
+    Q_OBJECT
+public:
+    // SANGER_TODO: rename the class and reconsider the usage of it and its parent
+    MaLabelWidget(MaEditorWgt* _ui, QWidget* heightWidget, const QString & _t, Qt::Alignment _a);
+
+protected:
+    void paintEvent(QPaintEvent *e);
+    void mousePressEvent(QMouseEvent *e);
+    void mouseReleaseEvent(QMouseEvent *e);
+    void mouseMoveEvent(QMouseEvent *e);
+
+private:
+    QLabel* label;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_UTILS_H_
+
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.cpp
new file mode 100644
index 0000000..7ac603d
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.cpp
@@ -0,0 +1,289 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QGridLayout>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/GUrlUtils.h>
+
+#include <U2Gui/ExportImageDialog.h>
+
+#include <U2View/MaEditorStatusBar.h>
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/MaEditorNameList.h>
+#include <U2View/MSAEditorSequenceArea.h>
+#include <U2View/MSAEditorOffsetsView.h>
+#include <U2View/MSAEditorOverviewArea.h>
+#include <U2View/UndoRedoFramework.h>
+
+#include "MaEditorUtils.h"
+#include "MaEditorWgt.h"
+#include "SequenceAreaRenderer.h"
+#include "ov_msa/Export/MSAImageExportTask.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/DrawHelper.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+/************************************************************************/
+/* MaEditorWgt */
+/************************************************************************/
+MaEditorWgt::MaEditorWgt(MaEditor *editor)
+    : editor(editor),
+      seqArea(NULL),
+      nameList(NULL),
+      consArea(NULL),
+      overviewArea(NULL),
+      offsetsView(NULL),
+      statusBar(NULL),
+      nameAreaContainer(NULL),
+      seqAreaHeader(NULL),
+      seqAreaHeaderLayout(NULL),
+      seqAreaLayout(NULL),
+      nameAreaLayout(NULL),
+      collapseModel(new MSACollapsibleItemModel(this)),
+      collapsibleMode(false),
+      scrollController(new ScrollController(editor, this, collapseModel)),
+      baseWidthController(new BaseWidthController(this)),
+      rowHeightController(NULL),
+      drawHelper(new DrawHelper(this)),
+      delSelectionAction(NULL),
+      copySelectionAction(NULL),
+      copyFormattedSelectionAction(NULL),
+      pasteAction(NULL)
+{
+    undoFWK = new MsaUndoRedoFramework(this, editor->getMaObject());
+
+    connect(getUndoAction(), SIGNAL(triggered()), SLOT(sl_countUndo()));
+    connect(getRedoAction(), SIGNAL(triggered()), SLOT(sl_countRedo()));
+}
+
+QWidget* MaEditorWgt::createHeaderLabelWidget(const QString& text, Qt::Alignment ali, QWidget* heightTarget){
+    return new MaLabelWidget(this,
+                             heightTarget == NULL ? seqAreaHeader : heightTarget,
+                             QString("<p style=\"margin-right: 5px\">%1</p>").arg(text), ali);
+}
+
+ScrollController *MaEditorWgt::getScrollController() {
+    return scrollController;
+}
+
+BaseWidthController *MaEditorWgt::getBaseWidthController() {
+    return baseWidthController;
+}
+
+RowHeightController *MaEditorWgt::getRowHeightController() {
+    return rowHeightController;
+}
+
+DrawHelper *MaEditorWgt::getDrawHelper() {
+    return drawHelper;
+}
+
+QAction* MaEditorWgt::getUndoAction() const {
+    QAction *a = undoFWK->getUndoAction();
+    a->setObjectName("msa_action_undo");
+    return a;
+}
+
+QAction* MaEditorWgt::getRedoAction() const {
+    QAction *a = undoFWK->getRedoAction();
+    a->setObjectName("msa_action_redo");
+    return a;
+}
+
+void MaEditorWgt::sl_saveScreenshot(){
+    CHECK(qobject_cast<MSAEditor*>(editor) != NULL, );
+    MSAImageExportController controller(this);
+    QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
+    QString fileName = GUrlUtils::fixFileName(editor->getMaObject()->getGObjectName());
+    QObjectScopedPointer<ExportImageDialog> dlg = new ExportImageDialog(&controller, ExportImageDialog::MSA, fileName, ExportImageDialog::NoScaling, p);
+    dlg->exec();
+}
+
+void MaEditorWgt::initWidgets() {
+    setContextMenuPolicy(Qt::CustomContextMenu);
+    setMinimumSize(300, 200);
+
+    setWindowIcon(GObjectTypes::getTypeInfo(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT).icon);
+
+    GScrollBar* shBar = new GScrollBar(Qt::Horizontal);
+    shBar->setObjectName("horizontal_sequence_scroll");
+    shBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    QScrollBar* nhBar = new QScrollBar(Qt::Horizontal);
+    nhBar->setObjectName("horizontal_names_scroll");
+    GScrollBar* cvBar = new GScrollBar(Qt::Vertical);
+    cvBar->setObjectName("vertical_sequence_scroll");
+
+    initSeqArea(shBar, cvBar);
+    scrollController->init(shBar, cvBar);
+    seqArea->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    initOverviewArea();
+
+    initNameList(nhBar);
+    nameList->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+
+    initConsensusArea();
+    initStatusBar();
+
+    offsetsView = new MSAEditorOffsetsViewController(this, editor, seqArea);
+    offsetsView->getLeftWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+    offsetsView->getRightWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+
+    seqAreaHeader = new QWidget(this);
+    seqAreaHeader->setObjectName("alignment_header_widget");
+    seqAreaHeaderLayout = new QVBoxLayout();
+    seqAreaHeaderLayout->setContentsMargins(0, 0, 0, 0);
+    seqAreaHeaderLayout->setSpacing(0);
+    seqAreaHeaderLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
+
+    QWidget* label1 = createHeaderLabelWidget();
+    QWidget* label2 = createHeaderLabelWidget();
+
+    seqAreaHeaderLayout->addWidget(consArea);
+    seqAreaHeader->setLayout(seqAreaHeaderLayout);
+
+    seqAreaLayout = new QGridLayout();
+    seqAreaLayout->setContentsMargins(0, 0, 0, 0);
+    seqAreaLayout->setSpacing(0);
+
+    seqAreaLayout->addWidget(label1, 0, 0);
+    seqAreaLayout->addWidget(seqAreaHeader, 0, 1);
+    seqAreaLayout->addWidget(label2, 0, 2, 1, 2);
+
+    seqAreaLayout->addWidget(offsetsView->getLeftWidget(), 1, 0);
+    seqAreaLayout->addWidget(seqArea, 1, 1);
+    seqAreaLayout->addWidget(offsetsView->getRightWidget(), 1, 2);
+    seqAreaLayout->addWidget(cvBar, 1, 3);
+
+    seqAreaLayout->addWidget(shBar, 2, 0, 1, 3);
+
+    seqAreaLayout->setRowStretch(1, 1);
+    seqAreaLayout->setColumnStretch(1, 1);
+
+    QWidget* seqAreaContainer = new QWidget();
+    seqAreaContainer->setLayout(seqAreaLayout);
+
+    QWidget *label;
+    label = createHeaderLabelWidget(tr("Consensus:"), Qt::Alignment(Qt::AlignRight | Qt::AlignVCenter), consArea);
+    label->setMinimumHeight(consArea->height());
+
+    nameAreaLayout = new QVBoxLayout();
+    nameAreaLayout->setContentsMargins(0, 0, 0, 0);
+    nameAreaLayout->setSpacing(0);
+    nameAreaLayout->addWidget(label);
+    nameAreaLayout->addWidget(nameList);
+    nameAreaLayout->addWidget(nhBar);
+
+    nameAreaContainer = new QWidget();
+    nameAreaContainer->setLayout(nameAreaLayout);
+    nameAreaContainer->setStyleSheet("background-color: white;");
+
+    maSplitter.addWidget(nameAreaContainer, 0, 0.1);
+    maSplitter.addWidget(seqAreaContainer, 1, 3);
+
+    QVBoxLayout *maContainerLayout = new QVBoxLayout();
+    maContainerLayout->setContentsMargins(0, 0, 0, 0);
+    maContainerLayout->setSpacing(0);
+
+    maContainerLayout->addWidget(maSplitter.getSplitter());
+    maContainerLayout->setStretch(0, 1);
+    maContainerLayout->addWidget(statusBar);
+
+    QWidget *maContainer = new QWidget(this);
+    maContainer->setLayout(maContainerLayout);
+
+    QVBoxLayout *mainLayout = new QVBoxLayout();
+    mainLayout->setSpacing(0);
+    mainLayout->setContentsMargins(0, 0, 0, 0);
+    mainLayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
+
+    QSplitter *mainSplitter = new QSplitter(Qt::Vertical, this);
+    mainSplitter->addWidget(maContainer);
+    mainSplitter->setStretchFactor(0, 2);
+
+    if (overviewArea->isResizable()) {
+        mainSplitter->addWidget(overviewArea);
+        mainSplitter->setCollapsible(1, false);
+    } else {
+        maContainerLayout->addWidget(overviewArea);
+    }
+    mainLayout->addWidget(mainSplitter);
+    setLayout(mainLayout);
+
+    connect(collapseModel, SIGNAL(si_toggled()), offsetsView, SLOT(sl_updateOffsets()));
+    connect(collapseModel, SIGNAL(si_toggled()), seqArea,     SLOT(sl_modelChanged()));
+    connect(editor, SIGNAL(si_zoomOperationPerformed(bool)), scrollController, SLOT(sl_zoomScrollBars()));
+
+    connect(delSelectionAction, SIGNAL(triggered()), seqArea, SLOT(sl_delCurrentSelection()));
+
+    nameList->addAction(delSelectionAction);
+}
+
+void MaEditorWgt::initActions() {
+    // SANGER_TODO: check why delAction is not added
+    delSelectionAction = new QAction(tr("Remove selection"), this);
+    delSelectionAction->setObjectName("Remove selection");
+    delSelectionAction->setShortcut(QKeySequence::Delete);
+    delSelectionAction->setShortcutContext(Qt::WidgetShortcut);
+
+    copySelectionAction = new QAction(tr("Copy selection"), this);
+    copySelectionAction->setObjectName("copy_selection");
+    copySelectionAction->setShortcut(QKeySequence::Copy);
+    copySelectionAction->setShortcutContext(Qt::WidgetShortcut);
+    copySelectionAction->setToolTip(QString("%1 (%2)").arg(copySelectionAction->text())
+        .arg(copySelectionAction->shortcut().toString()));
+
+    addAction(copySelectionAction);
+
+    copyFormattedSelectionAction = new QAction(QIcon(":core/images/copy_sequence.png"), tr("Copy formatted"), this);
+    copyFormattedSelectionAction->setObjectName("copy_formatted");
+    copyFormattedSelectionAction->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_C));
+    copyFormattedSelectionAction->setShortcutContext(Qt::WidgetShortcut);
+    copyFormattedSelectionAction->setToolTip(QString("%1 (%2)").arg(copyFormattedSelectionAction->text())
+        .arg(copyFormattedSelectionAction->shortcut().toString()));
+
+    addAction(copyFormattedSelectionAction);
+
+    pasteAction = new QAction(tr("Paste"), this);
+    pasteAction->setObjectName("paste");
+    pasteAction->setShortcuts(QKeySequence::Paste);
+    pasteAction->setShortcutContext(Qt::WidgetShortcut);
+    pasteAction->setToolTip(QString("%1 (%2)").arg(pasteAction->text())
+        .arg(pasteAction->shortcut().toString()));
+
+    addAction(pasteAction);
+}
+
+void MaEditorWgt::sl_countUndo() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, tr("Undo"), editor->getFactoryId());
+}
+
+void MaEditorWgt::sl_countRedo() {
+    GRUNTIME_NAMED_COUNTER(cvar, tvar, tr("Redo"), editor->getFactoryId());
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.h b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.h
new file mode 100644
index 0000000..329b7d7
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/MaEditorWgt.h
@@ -0,0 +1,149 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MA_EDITOR_WGT_H_
+#define _U2_MA_EDITOR_WGT_H_
+
+#include <QWidget>
+
+#include <U2Core/global.h>
+
+#include "MaEditorUtils.h"
+
+class QGridLayout;
+class QScrollBar;
+class QVBoxLayout;
+
+namespace U2 {
+
+class BaseWidthController;
+class DrawHelper;
+class GScrollBar;
+class MSACollapsibleItemModel;
+class MaEditorConsensusArea;
+class MSAEditorOffsetsViewController;
+class MaEditorStatusBar;
+class MaEditor;
+class MaEditorNameList;
+class MaEditorOverviewArea;
+class MaEditorSequenceArea;
+class RowHeightController;
+class MsaUndoRedoFramework;
+class ScrollController;
+class SequenceAreaRenderer;
+
+/************************************************************************/
+/* MaEditorWgt */
+/************************************************************************/
+class U2VIEW_EXPORT MaEditorWgt : public QWidget {
+    Q_OBJECT
+public:
+    MaEditorWgt(MaEditor* editor);
+
+    QWidget* createHeaderLabelWidget(const QString& text = QString(),
+                                     Qt::Alignment ali = Qt::AlignCenter,
+                                     QWidget* heightTarget = NULL);
+
+    MaEditor*                       getEditor() const { return editor; }
+    MaEditorSequenceArea*           getSequenceArea() const { return seqArea; }
+    MaEditorNameList*               getEditorNameList() { return nameList; }
+    MaEditorConsensusArea*          getConsensusArea() { return consArea; }
+    MaEditorOverviewArea*           getOverviewArea() { return overviewArea; }
+    MSAEditorOffsetsViewController* getOffsetsViewController() { return offsetsView; }
+    ScrollController *              getScrollController();
+    BaseWidthController *           getBaseWidthController();
+    RowHeightController *           getRowHeightController();
+    DrawHelper *                    getDrawHelper();
+
+    QAction* getUndoAction() const;
+    QAction* getRedoAction() const;
+
+    QAction* getDelSelectionAction() const { return delSelectionAction; }
+    QAction* getCopySelectionAction() const { return copySelectionAction; }
+    QAction* getCopyFormattedSelectionAction() const { return copyFormattedSelectionAction; }
+    QAction* getPasteAction() const { return pasteAction; }
+
+    // SANGER_TODO: should be muted in case of chromatogram (crutch!)
+    // the best is to store it in the MCA widget, of course
+    bool isCollapsibleMode() const { return collapsibleMode; }
+    void setCollapsibleMode(bool collapse) { collapsibleMode = collapse; }
+    MSACollapsibleItemModel* getCollapseModel() const { return collapseModel; }
+
+    QWidget* getHeaderWidget() const { return seqAreaHeader; }
+
+signals:
+    void si_startMaChanging();
+    void si_stopMaChanging(bool modified = false);
+    void si_completeRedraw();
+
+public slots:
+    void sl_saveScreenshot();
+
+private slots:
+    void sl_countUndo();
+    void sl_countRedo();
+
+protected:
+    virtual void initWidgets();
+    virtual void initActions();
+
+    virtual void initSeqArea(GScrollBar* shBar, GScrollBar* cvBar) = 0;
+    virtual void initOverviewArea() = 0;
+    virtual void initNameList(QScrollBar* nhBar) = 0;
+    virtual void initConsensusArea() = 0;
+    virtual void initStatusBar() = 0;
+
+protected:
+    MaEditor*                       editor;
+    MaEditorSequenceArea*           seqArea;
+    MaEditorNameList*               nameList;
+    MaEditorConsensusArea*          consArea;
+    MaEditorOverviewArea*           overviewArea;
+    MSAEditorOffsetsViewController* offsetsView;
+    MaEditorStatusBar*              statusBar;
+
+    QWidget*                        nameAreaContainer;
+    QWidget*                        seqAreaHeader;
+    QVBoxLayout*                    seqAreaHeaderLayout;
+
+    QGridLayout*                    seqAreaLayout;
+    QVBoxLayout*                    nameAreaLayout;
+    MaSplitterController            maSplitter;
+
+    MsaUndoRedoFramework*           undoFWK;
+
+    MSACollapsibleItemModel*        collapseModel;
+    bool                            collapsibleMode;
+    ScrollController *              scrollController;
+    BaseWidthController *           baseWidthController;
+    RowHeightController *           rowHeightController;
+    DrawHelper *                    drawHelper;
+
+    QAction                         *delSelectionAction;
+    QAction                         *copySelectionAction;
+    QAction                         *copyFormattedSelectionAction;
+    QAction                         *pasteAction;
+};
+
+} // namespace
+
+#endif // _U2_MA_EDITOR_WGT_H_
+
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.cpp
new file mode 100644
index 0000000..aaaab5e
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.cpp
@@ -0,0 +1,58 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "McaConsensusAreaRenderer.h"
+
+#include "ov_msa/McaEditor.h"
+#include "ov_msa/McaEditorConsensusArea.h"
+#include "ov_msa/McaReferenceCharController.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+
+
+namespace U2 {
+
+McaConsensusAreaRenderer::McaConsensusAreaRenderer(MaEditorConsensusArea *area)
+    : MaConsensusAreaRenderer(area) {
+    McaEditorWgt* wgt = qobject_cast<McaEditorWgt*>(area->getEditorWgt());
+    SAFE_POINT(wgt != NULL, "McaEditorWgt is NULL", );
+    refCharController = wgt->getRefCharController();
+}
+
+void McaConsensusAreaRenderer::drawRuler(QPainter &painter, const ConsensusRenderSettings &renderSettings) {
+    McaEditorConsensusArea* mcaConsArea = qobject_cast<McaEditorConsensusArea*>(area);
+    SAFE_POINT(mcaConsArea != NULL, "Failed to cast consensus area to MCA consensus area", );
+    McaEditorWgt * wgt = qobject_cast<McaEditorWgt *>(mcaConsArea->getEditorWgt());
+    SAFE_POINT(wgt != NULL, "Failed to cast!", );
+    OffsetRegions charRegions = refCharController->getCharRegions(U2Region(renderSettings.firstNotchedBasePosition,
+                                                                       renderSettings.lastNotchedBasePosition - renderSettings.firstNotchedBasePosition + 1));
+    ConsensusRenderSettings cutRenderSettings = renderSettings;
+    for (int i = 0; i < charRegions.getSize(); i++) {
+        U2Region r = charRegions.getRegion(i);
+        cutRenderSettings.firstNotchedBasePosition = r.startPos - charRegions.getOffset(i);
+        cutRenderSettings.lastNotchedBasePosition = r.endPos() - 1 - charRegions.getOffset(i);
+
+        cutRenderSettings.firstNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(r.startPos);
+        cutRenderSettings.lastNotchedBaseXRange = ui->getBaseWidthController()->getBaseScreenRange(r.endPos() - 1);
+        MaConsensusAreaRenderer::drawRuler(painter, cutRenderSettings);
+    }
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.h b/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.h
new file mode 100644
index 0000000..01fe2d0
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/McaConsensusAreaRenderer.h
@@ -0,0 +1,43 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_CONSENSUS_AREA_RENDERER_H_
+#define _U2_MCA_CONSENSUS_AREA_RENDERER_H_
+
+#include "MaConsensusAreaRenderer.h"
+
+namespace U2 {
+
+class McaReferenceCharController;
+
+class McaConsensusAreaRenderer : public MaConsensusAreaRenderer {
+public:
+    McaConsensusAreaRenderer(MaEditorConsensusArea *area);
+
+private:
+    void drawRuler(QPainter &painter, const ConsensusRenderSettings &settings);
+
+    McaReferenceCharController* refCharController;
+};
+
+} // namespace
+
+#endif // _U2_MCA_CONSENSUS_AREA_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.cpp
new file mode 100644
index 0000000..04ea1ec
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.cpp
@@ -0,0 +1,96 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Algorithm/MsaColorScheme.h>
+
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "McaReferenceAreaRenderer.h"
+#include "ov_msa/MaEditor.h"
+#include "ov_msa/MSAEditorConsensusArea.h"
+#include "ov_msa/MSAEditorConsensusCache.h"
+#include "ov_msa/MSAEditorSequenceArea.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/ScrollController.h"
+#include "ov_msa/view_rendering/MaEditorWgt.h"
+#include "ov_msa/view_rendering/MaEditorSequenceArea.h"
+#include "ov_sequence/SequenceObjectContext.h"
+#include "ov_sequence/PanView.h"
+
+namespace U2 {
+
+#define SELECTION_LINE_WIDTH 1
+
+McaReferenceAreaRenderer::McaReferenceAreaRenderer(PanView *panView, SequenceObjectContext *ctx, MaEditor *maEditor)
+    : PanViewRenderer(panView, ctx),
+      maEditor(maEditor)
+{
+    SAFE_POINT(NULL != maEditor, "MA Editor is NULL", );
+    setFont(maEditor->getFont());
+}
+
+qint64 McaReferenceAreaRenderer::getMinimumHeight() const {
+    return commonMetrics.lineHeight;
+}
+
+float McaReferenceAreaRenderer::posToXCoordF(const qint64 position, const QSize &/*canvasSize*/, const U2Region &visibleRange) const {
+    const int baseCenterX = maEditor->getUI()->getBaseWidthController()->getBaseScreenRange(position).center();
+    const int columnWidth = maEditor->getUI()->getBaseWidthController()->getBaseWidth();
+    return baseCenterX - columnWidth / 2;
+}
+
+void McaReferenceAreaRenderer::setFont(const QFont &font) {
+    commonMetrics.sequenceFont = font;
+    QFontMetrics fm(commonMetrics.sequenceFont);
+    commonMetrics.lineHeight = fm.height() + 2 * commonMetrics.yCharOffset + 2 * SELECTION_LINE_WIDTH;
+}
+
+void McaReferenceAreaRenderer::drawSequence(QPainter &p, const QSize &/*canvasSize*/, const U2Region &region) {
+    U2OpStatusImpl os;
+    const QByteArray sequenceRegion = ctx->getSequenceData(region, os);
+    SAFE_POINT_OP(os, );
+
+    p.setPen(Qt::black);
+    p.setFont(commonMetrics.sequenceFont);
+
+    SAFE_POINT(maEditor->getUI() != NULL, "MaEditorWgt is NULL", );
+    MaEditorSequenceArea* seqArea = maEditor->getUI()->getSequenceArea();
+    SAFE_POINT(seqArea != NULL, "MaEditorSequenceArea is NULL", );
+    MsaColorScheme* scheme = seqArea->getCurrentColorScheme();
+    SAFE_POINT(scheme != NULL, "MsaColorScheme is NULL", );
+
+    for (int position = region.startPos; position < region.endPos(); position++) {
+        const U2Region baseXRange = maEditor->getUI()->getBaseWidthController()->getBaseScreenRange(position);
+
+        const char c = sequenceRegion[(int)(position - region.startPos)];
+        QRect charRect(baseXRange.startPos, 0, baseXRange.length + 1, commonMetrics.lineHeight);
+        const QColor color = scheme->getColor(0, 0, c);
+        if (color.isValid()) {
+            p.fillRect(charRect, color);
+        }
+        if (maEditor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent) {
+            p.drawText(charRect, Qt::AlignCenter, QString(c));
+        }
+    }
+}
+
+}   // namespace U2
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.h b/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.h
new file mode 100644
index 0000000..c7e39fc
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/McaReferenceAreaRenderer.h
@@ -0,0 +1,48 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_REFERENCE_AREA_RENDERER_H_
+#define _U2_MCA_REFERENCE_AREA_RENDERER_H_
+
+#include <U2View/PanViewRenderer.h>
+
+namespace U2 {
+
+class MaEditor;
+
+class U2VIEW_EXPORT McaReferenceAreaRenderer : public PanViewRenderer {
+public:
+    McaReferenceAreaRenderer(PanView *panView, SequenceObjectContext *ctx, MaEditor *maEditor);
+
+    qint64 getMinimumHeight() const;
+    float posToXCoordF(const qint64 position, const QSize &canvasSize, const U2Region &visibleRange) const;
+
+    void setFont(const QFont &font);
+
+private:
+    void drawSequence(QPainter &p, const QSize &canvasSize, const U2Region &region);
+
+    MaEditor *maEditor;
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_REFERENCE_AREA_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.cpp
new file mode 100644
index 0000000..f1907b3
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.cpp
@@ -0,0 +1,155 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPainter>
+
+#include <U2Algorithm/MsaHighlightingScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+
+#include <U2Core/U2OpStatusUtils.h>
+
+#include "SequenceAreaRenderer.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/DrawHelper.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+SequenceAreaRenderer::SequenceAreaRenderer(MaEditorWgt *ui, MaEditorSequenceArea *seqAreaWgt)
+    : QObject(seqAreaWgt),
+      ui(ui),
+      seqAreaWgt(seqAreaWgt),
+      drawLeadingAndTrailingGaps(true) {
+}
+
+bool SequenceAreaRenderer::drawContent(QPainter &painter, const U2Region &region, const QList<int> &seqIdx, int xStart, int yStart)  const {
+    CHECK(!region.isEmpty(), false);
+    CHECK(!seqIdx.isEmpty(), false);
+
+    MsaHighlightingScheme* highlightingScheme = seqAreaWgt->getCurrentHighlightingScheme();
+    MaEditor* editor = seqAreaWgt->getEditor();
+
+    painter.setPen(Qt::black);
+    painter.setFont(editor->getFont());
+
+    MultipleAlignmentObject* maObj = editor->getMaObject();
+    SAFE_POINT(maObj != NULL, tr("Alignment object is NULL"), false);
+    const MultipleAlignment ma = maObj->getMultipleAlignment();
+
+    //Use dots to draw regions, which are similar to reference sequence
+    highlightingScheme->setUseDots(seqAreaWgt->getUseDotsCheckedState());
+
+    int rowHeight = 0;
+    foreach (const int rowIndex, seqIdx) {
+        rowHeight = drawRow(painter, ma, rowIndex, region, xStart, yStart);
+        yStart += ui->getRowHeightController()->getRowHeight(rowIndex);
+    }
+
+    return true;
+}
+
+void SequenceAreaRenderer::drawSelection(QPainter &painter) const {
+    MaEditorSelection selection = seqAreaWgt->getSelection();
+
+    const QRect selectionRect = ui->getDrawHelper()->getSelectionScreenRect(selection);
+
+    QPen pen(seqAreaWgt->highlightSelection || seqAreaWgt->hasFocus()
+             ? seqAreaWgt->selectionColor
+             : Qt::gray);
+    if (seqAreaWgt->maMode == MaEditorSequenceArea::ViewMode) {
+        pen.setStyle(Qt::DashLine);
+    }
+    pen.setWidth(seqAreaWgt->highlightSelection ? 2 : 1);
+    painter.setPen(pen);
+
+    switch (seqAreaWgt->maMode) {
+    case MaEditorSequenceArea::ViewMode:
+    case MaEditorSequenceArea::ReplaceCharMode:
+        painter.drawRect(selectionRect);
+        break;
+    case MaEditorSequenceArea::InsertCharMode:
+        painter.drawLine(selectionRect.left(), selectionRect.top(), selectionRect.left(), selectionRect.bottom());
+        break;
+    }
+}
+
+void SequenceAreaRenderer::drawFocus(QPainter &painter) const {
+    if (seqAreaWgt->hasFocus()) {
+        painter.setPen(QPen(Qt::black, 1, Qt::DotLine));
+        painter.drawRect(0, 0, seqAreaWgt->width() - 1, seqAreaWgt->height() - 1);
+    }
+}
+
+int SequenceAreaRenderer::drawRow(QPainter &painter, const MultipleAlignment &ma, int rowIndex, const U2Region &region, int xStart, int yStart) const {
+    // SANGER_TODO: deal with frequent handlign of editor or h/color schemes through the editor etc.
+    // move to class parameter
+    MsaHighlightingScheme* highlightingScheme = seqAreaWgt->getCurrentHighlightingScheme();
+    highlightingScheme->setUseDots(seqAreaWgt->getUseDotsCheckedState());
+
+    MaEditor* editor = seqAreaWgt->getEditor();
+    QString schemeName = highlightingScheme->metaObject()->className();
+    bool isGapsScheme = schemeName == "U2::MSAHighlightingSchemeGaps";
+    bool isResizeMode = editor->getResizeMode() == MSAEditor::ResizeMode_FontAndContent;
+
+    U2OpStatusImpl os;
+    const int refSeq = ma->getRowIndexByRowId(editor->getReferenceRowId(), os);
+    QString refSeqName = editor->getReferenceRowName();
+
+    qint64 regionEnd = region.endPos() - (int)(region.endPos() == editor->getAlignmentLen());
+    MultipleAlignmentRow row = ma->getRow(rowIndex);
+    const int rowHeight = ui->getRowHeightController()->getSequenceHeight();
+    const int baseWidth = ui->getBaseWidthController()->getBaseWidth();
+    for (int pos = region.startPos; pos <= regionEnd; pos++) {
+        if (!drawLeadingAndTrailingGaps
+                && (pos < row->getCoreStart() || pos > row->getCoreStart() + row->getCoreLength() - 1)) {
+            xStart += baseWidth;
+            continue;
+        }
+
+        const QRect charRect(xStart, yStart, baseWidth, rowHeight);
+        char c = ma->charAt(rowIndex, pos);
+
+        bool highlight = false;
+        QColor color = seqAreaWgt->getCurrentColorScheme()->getColor(rowIndex, pos, c); //! SANGER_TODO: add NULL checks or do smt with the infrastructure
+        if (isGapsScheme || highlightingScheme->getFactory()->isRefFree()) { //schemes which applied without reference
+            const char refChar = '\n';
+            highlightingScheme->process(refChar, c, color, highlight, pos, rowIndex);
+        } else if (rowIndex == refSeq || refSeqName.isEmpty()) {
+            highlight = true;
+        } else {
+            const char refChar = editor->getReferenceCharAt(pos);
+            highlightingScheme->process(refChar, c, color, highlight, pos, rowIndex);
+        }
+
+        if (color.isValid() && highlight) {
+            painter.fillRect(charRect, color);
+        }
+        if (isResizeMode) {
+            painter.drawText(charRect, Qt::AlignCenter, QString(c));
+        }
+
+        xStart += baseWidth;
+    }
+    return rowHeight;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.h b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.h
new file mode 100644
index 0000000..d753e76
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceAreaRenderer.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_AREA_RENDERER_H_
+#define _U2_SEQUENCE_AREA_RENDERER_H_
+
+#include <U2Core/DNAChromatogram.h>
+
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include <QPen>
+
+namespace U2 {
+
+class SequenceAreaRenderer : public QObject {
+    Q_OBJECT
+public:
+    SequenceAreaRenderer(MaEditorWgt *ui, MaEditorSequenceArea* seqAreaWgt);
+
+    bool drawContent(QPainter &painter, const U2Region& region, const QList<int> &rowNumbers, int xStart, int yStart) const;
+
+    void drawSelection(QPainter &painter) const;
+    void drawFocus(QPainter &painter) const;
+
+protected:
+    // returns the height of the drawn row
+    virtual int drawRow(QPainter &painter, const MultipleAlignment &ma, int rowIndex, const U2Region &region, int xStart, int yStart) const;
+
+    MaEditorWgt *ui;
+    MaEditorSequenceArea* seqAreaWgt;
+
+    bool drawLeadingAndTrailingGaps;
+};
+
+} // namespace
+
+#endif // _U2_SEQUENCE_AREA_RENDERER_H_
+
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.cpp b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.cpp
new file mode 100644
index 0000000..34b069c
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.cpp
@@ -0,0 +1,497 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPainter>
+
+#include <U2Algorithm/MsaHighlightingScheme.h>
+#include <U2Algorithm/MsaColorScheme.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/Settings.h>
+
+#include <U2View/SequenceObjectContext.h>
+
+#include "SequenceWithChromatogramAreaRenderer.h"
+#include "ov_msa/McaEditorNameList.h"
+#include "ov_msa/McaEditorSequenceArea.h"
+#include "ov_msa/helpers/BaseWidthController.h"
+#include "ov_msa/helpers/RowHeightController.h"
+#include "ov_msa/helpers/ScrollController.h"
+
+namespace U2 {
+
+const int SequenceWithChromatogramAreaRenderer::INDENT_BETWEEN_ROWS = 15;
+const int SequenceWithChromatogramAreaRenderer::CHROMATOGRAM_MAX_HEIGHT = 100;
+const qreal SequenceWithChromatogramAreaRenderer::TRACE_OR_BC_LINES_DIVIDER = 2;
+
+SequenceWithChromatogramAreaRenderer::SequenceWithChromatogramAreaRenderer(MaEditorWgt *ui, McaEditorSequenceArea *seqAreaWgt)
+    : SequenceAreaRenderer(ui, seqAreaWgt),
+      linePen(Qt::gray, 1, Qt::DotLine)
+{
+    drawLeadingAndTrailingGaps = false;
+
+    QFontMetricsF fm(seqAreaWgt->getEditor()->getFont());
+    charWidth = fm.width('W');
+    charHeight = fm.ascent();
+
+    heightBC = seqAreaWgt->getEditor()->getSequenceRowHeight();
+    heightPD = getChromatogramHeight() - INDENT_BETWEEN_ROWS;
+    heightQuality = charHeight;
+
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+    SAFE_POINT(ui->getEditor() != NULL, "MaEditor is NULL", );
+    maxTraceHeight = s->getValue(ui->getEditor()->getSettingsRoot() + MCAE_SETTINGS_PEAK_HEIGHT, heightPD - heightBC).toInt();
+}
+
+void SequenceWithChromatogramAreaRenderer::drawReferenceSelection(QPainter &painter) const {
+    McaEditor* editor = getSeqArea()->getEditor();
+    SAFE_POINT(editor != NULL, "McaEditor is NULL", );
+    DNASequenceSelection* selection = editor->getReferenceContext()->getSequenceSelection();
+    SAFE_POINT(selection != NULL, "DNASequenceSelection is NULL", );
+    SAFE_POINT(selection->regions.size() <= 1, "Unexpected multiselection",);
+    CHECK(!selection->regions.isEmpty(), );
+
+    U2Region region = selection->regions.first();
+    const U2Region xRange = ui->getBaseWidthController()->getBasesScreenRange(region);
+
+    painter.save();
+    // SANGER_TODO: color can be const -- for consensus and here
+    QColor color(Qt::lightGray);
+    color = color.lighter(115);
+    color.setAlpha(127);
+    painter.fillRect(xRange.startPos, 0,
+               xRange.length, seqAreaWgt->height(),
+               color);
+    painter.restore();
+}
+
+void SequenceWithChromatogramAreaRenderer::drawNameListSelection(QPainter &painter) const {
+    McaEditor* editor = getSeqArea()->getEditor();
+    SAFE_POINT(editor != NULL, "McaEditor is NULL", );
+    SAFE_POINT(editor->getUI() != NULL, "McaEditor UI is NULL", );
+
+    MaEditorNameList* nameList = editor->getUI()->getEditorNameList();
+    SAFE_POINT(nameList != NULL, "MaEditorNameList is NULL", );
+    U2Region selection = nameList->getSelection();
+    CHECK(!selection.isEmpty(), );
+    U2Region selectionPxl = ui->getRowHeightController()->getRowsScreenRangeByNumbers(selection);
+    painter.save();
+    // SANGER_TODO: color can be const -- for consensus and here
+    QColor color(Qt::lightGray);
+    color = color.lighter(115);
+    color.setAlpha(127);
+    painter.fillRect(0, selectionPxl.startPos, seqAreaWgt->width(), selectionPxl.length, color);
+    painter.restore();
+}
+
+void SequenceWithChromatogramAreaRenderer::setAreaHeight(int h) {
+    maxTraceHeight = h;
+
+    Settings* s = AppContext::getSettings();
+    SAFE_POINT(s != NULL, "AppContext::settings is NULL", );
+    SAFE_POINT(ui->getEditor() != NULL, "MaEditor is NULL", );
+    s->setValue(ui->getEditor()->getSettingsRoot() + MCAE_SETTINGS_PEAK_HEIGHT, maxTraceHeight);
+}
+
+int SequenceWithChromatogramAreaRenderer::getAreaHeight() const {
+    return maxTraceHeight;
+}
+
+int SequenceWithChromatogramAreaRenderer::getScaleBarValue() const {
+    return maxTraceHeight;
+}
+
+int SequenceWithChromatogramAreaRenderer::drawRow(QPainter &painter, const MultipleAlignment &mca, int rowIndex, const U2Region &region, int xStart, int yStart) const {
+    McaEditor* editor = getSeqArea()->getEditor();
+    if (editor->isChromVisible(rowIndex)) {
+        painter.translate(0, INDENT_BETWEEN_ROWS / 2);
+    }
+    bool ok = SequenceAreaRenderer::drawRow(painter, mca, rowIndex, region, xStart, yStart);
+    CHECK(ok, -1);
+
+    SAFE_POINT(getSeqArea() != NULL, "seqAreaWgt is NULL", -1);
+    const int width = getSeqArea()->width();
+    const int seqRowHeight = editor->getUI()->getRowHeightController()->getSequenceHeight();
+    if (editor->isChromVisible(rowIndex)) {
+        painter.save();
+        painter.translate(0, yStart + seqRowHeight);
+        painter.setPen(QPen(Qt::gray, 1, Qt::DashLine));
+        painter.drawLine(0, - INDENT_BETWEEN_ROWS / 2 - seqRowHeight, width, - INDENT_BETWEEN_ROWS / 2 - seqRowHeight);
+
+        const MultipleChromatogramAlignmentRow& row = editor->getMaObject()->getMcaRow(rowIndex);
+        drawChromatogram(painter, row, region, xStart);
+        painter.setPen(QPen(Qt::gray, 1, Qt::DashLine));
+        painter.restore();
+        painter.translate(0, - INDENT_BETWEEN_ROWS / 2);
+    }
+    return seqRowHeight;
+}
+
+void SequenceWithChromatogramAreaRenderer::drawChromatogram(QPainter &painter, const MultipleChromatogramAlignmentRow &row, const U2Region &visibleRegion, int xStart) const {
+    const DNAChromatogram chroma = row->getGappedChromatogram();
+
+    // SANGER_TODO: should not be here
+    chromaMax = 0;
+    for (int i = 0; i < chroma.traceLength; i++)
+    {
+        if (chromaMax < chroma.A[i]) chromaMax = chroma.A[i];
+        if (chromaMax < chroma.C[i]) chromaMax = chroma.C[i];
+        if (chromaMax < chroma.G[i]) chromaMax = chroma.G[i];
+        if (chromaMax < chroma.T[i]) chromaMax = chroma.T[i];
+    }
+
+    U2Region regionToDraw = visibleRegion.intersect(row->getCoreRegion());
+    CHECK(!regionToDraw.isEmpty(), );
+
+    if (regionToDraw.startPos > visibleRegion.startPos) {
+        MaEditor* editor = seqAreaWgt->getEditor();
+        SAFE_POINT(editor != NULL, "MaEditor is NULL", );
+        const int emptySpaceWidth = ui->getBaseWidthController()->getBasesWidth(regionToDraw.startPos - visibleRegion.startPos);
+        painter.translate(emptySpaceWidth, 0);
+    }
+    regionToDraw.startPos -= row->getCoreStart();
+
+    painter.translate(xStart, 0);
+
+    const int regionWidth = ui->getBaseWidthController()->getBasesWidth(regionToDraw);
+    const QByteArray seq = row->getCore(); // SANGER_TODO: tmp, get only required region
+
+    // SANGER_TODO:
+//    GSLV_UpdateFlags uf = view->getUpdateFlags();
+    const bool completeRedraw = true; //uf.testFlag(GSLV_UF_NeedCompleteRedraw) || uf.testFlag(GSLV_UF_ViewResized) || uf.testFlag(GSLV_UF_VisibleRangeChanged);
+    bool drawQuality = chroma.hasQV && getSeqArea()->getShowQA();
+    const bool baseCallsLinesVisible = seqAreaWgt->getEditor()->getResizeMode() == MSAEditor::ResizeMode_FontAndContent;
+
+    if (completeRedraw) {
+        painter.setRenderHint(QPainter::Antialiasing, true);
+        painter.setPen(Qt::black);
+        if (baseCallsLinesVisible) {
+            // quality and base calls can be visible
+            if (drawQuality) {
+                drawQualityValues(chroma, regionWidth, heightQuality,
+                                  painter, regionToDraw, seq);
+                painter.translate(0, heightQuality);
+            }
+            drawOriginalBaseCalls(drawQuality * heightQuality, painter, regionToDraw, seq);
+        } else {
+            drawQuality = false; // to avoid shifting in case the base calls and quality was not visible
+        }
+
+        if (regionWidth / charWidth > regionToDraw.length / TRACE_OR_BC_LINES_DIVIDER) {
+            // draw continious trace
+            drawChromatogramTrace(chroma, 0, heightBC, heightPD - heightBC - drawQuality * heightQuality,
+                                  painter, regionToDraw);
+        } else {
+            // draw only "columns" of peaks
+            drawChromatogramBaseCallsLines(chroma, heightPD, painter, regionToDraw, seq);
+        }
+    }
+
+    painter.translate(-xStart, 0);
+}
+
+QColor SequenceWithChromatogramAreaRenderer::getBaseColor( char base ) const {
+    switch(base) {
+        case 'A':
+            return Qt::darkGreen;
+        case 'C':
+            return Qt::blue;
+        case 'G':
+            return Qt::black;
+        case 'T':
+            return Qt::red;
+        default:
+            return Qt::black;
+    }
+}
+
+namespace {
+
+static int getPreviousBaseCallEndPosition(const QVector<ushort>& baseCalls, int startPos) {
+    int res = 0;
+    SAFE_POINT(startPos > 0 && startPos < baseCalls.size(), "Out of array boundary", 0);
+    int prevStep = baseCalls[startPos] - baseCalls[startPos - 1];
+    //When many gaps was insered to the single place, the difference between current and previous baceCalls element may be very little.
+    //Because of it, left correct point to draw may be out of the left edge of visible area
+    //If it happends, we need to go to the left while we will find a correct point
+    if (prevStep <= 1) {
+        int pos = startPos - 1;
+        while (prevStep == 0 && pos > 0) {
+            prevStep = baseCalls[pos] - baseCalls[pos - 1];
+            pos--;
+        }
+        SAFE_POINT(pos >= 0, "Pos is the ordinal number of baseCalls element, it must be >= 0", 0);
+        res = baseCalls[startPos] - prevStep;
+    } else {
+        res = baseCalls[startPos] - prevStep / 2;
+    }
+    return res;
+}
+
+static int getCorrectPointsCountVariable(const QVector<ushort>& baseCalls, int pointsCount, int endPos, int currentNumBer) {
+    //The same situation as with "getPreviousBaseCallEndPosition" except in this case we look for correct point for right edge
+    if (currentNumBer != endPos - 1) {
+        return pointsCount;
+    }
+
+    int res = pointsCount;
+    int pos = endPos;
+    while (res == 0 && pos < baseCalls.size()) {
+        res = baseCalls[pos] - baseCalls[pos - 1];
+        pos++;
+    }
+    SAFE_POINT(pos <= baseCalls.size(), "Pos is the ordinal number of baseCalls element, it must be < baseCalls.size() ", 0);
+    return res;
+}
+
+}
+
+void SequenceWithChromatogramAreaRenderer::drawChromatogramTrace(const DNAChromatogram& chroma,
+                                                                 qreal x, qreal y, qreal h, QPainter& p,
+                                                                 const U2Region& visible) const
+{
+    if (chromaMax == 0) {
+        //nothing to draw
+        return;
+    }
+    //founding problems
+
+    p.setRenderHint(QPainter::Antialiasing, true);
+    p.translate(x, h + y);
+
+    QPolygonF polylineA;
+    QPolygonF polylineC;
+    QPolygonF polylineG;
+    QPolygonF polylineT;
+    int areaHeight = (heightPD - heightBC) * this->maxTraceHeight / 100;
+    qreal columnWidth = getSeqArea()->getEditor()->getColumnWidth();
+
+    int startPos = visible.startPos;
+    int prev = 0;
+    if (startPos != 0) {
+        prev = getPreviousBaseCallEndPosition(chroma.baseCalls, startPos);
+    }
+
+    qint64 endPos = visible.endPos();
+    for (int i = startPos; i < endPos; i++) {
+        SAFE_POINT(i < chroma.baseCalls.length(), "Base calls array is too short: visible range index is out range", );
+        int currentBaseCalls = chroma.baseCalls[i];
+        int pointsCount = currentBaseCalls - prev;
+
+        pointsCount = getCorrectPointsCountVariable(chroma.baseCalls, pointsCount, endPos, i);
+
+        qreal pxPerPoint = columnWidth / pointsCount;
+        for (int j = 0; j < pointsCount; j++) {
+            double x = columnWidth * (i - startPos) + columnWidth / 2 - (pointsCount - j) * pxPerPoint;
+            qreal yA = -qMin(static_cast<qreal>(chroma.A[prev + j]) * areaHeight / chromaMax, h);
+            qreal yC = -qMin(static_cast<qreal>(chroma.C[prev + j]) * areaHeight / chromaMax, h);
+            qreal yG = -qMin(static_cast<qreal>(chroma.G[prev + j]) * areaHeight / chromaMax, h);
+            qreal yT = -qMin(static_cast<qreal>(chroma.T[prev + j]) * areaHeight / chromaMax, h);
+            polylineA.append(QPointF(x, yA));
+            polylineC.append(QPointF(x, yC));
+            polylineG.append(QPointF(x, yG));
+            polylineT.append(QPointF(x, yT));
+        }
+        prev = chroma.baseCalls[i];
+    }
+
+    completePolygonsWithLastBaseCallTrace(polylineA, polylineC, polylineG, polylineT, chroma, columnWidth, visible, h);
+
+    if (getSettings().drawTraceA) {
+        p.setPen(getBaseColor('A'));
+        p.drawPolyline(polylineA);
+    }
+    if (getSettings().drawTraceC) {
+        p.setPen(getBaseColor('C'));
+        p.drawPolyline(polylineC);
+    }
+    if (getSettings().drawTraceG) {
+        p.setPen(getBaseColor('G'));
+        p.drawPolyline(polylineG);
+    }
+    if (getSettings().drawTraceT) {
+        p.setPen(getBaseColor('T'));
+        p.drawPolyline(polylineT);
+    }
+    p.translate(- x, - h - y);
+}
+
+void SequenceWithChromatogramAreaRenderer::completePolygonsWithLastBaseCallTrace(QPolygonF& polylineA, QPolygonF& polylineC, QPolygonF& polylineG, QPolygonF& polylineT,
+                                                               const DNAChromatogram& chroma, qreal columnWidth, const U2Region& visible, qreal h) const {
+    //The last character may not to be included in visible area, so the trace for this symbol may be necessary to draw separately.
+    int areaHeight = (heightPD - heightBC) * this->maxTraceHeight / 100;
+    int startPos = visible.startPos;
+    int endPos = visible.endPos();
+    int prev = 0;
+    int pointsCount = 0;
+    if (endPos == chroma.baseCalls.size()) {
+        prev = chroma.baseCalls.back();
+        pointsCount = 2;
+    } else {
+        prev = chroma.baseCalls[endPos - 1];
+        pointsCount = chroma.baseCalls[endPos] - prev;
+        pointsCount = getCorrectPointsCountVariable(chroma.baseCalls, pointsCount, endPos, endPos - 1);
+        pointsCount = pointsCount == 1 ? 2 : pointsCount;
+    }
+    qreal pxPerPoint = columnWidth / pointsCount;
+    for (int i = 0; i < pointsCount; i++) {
+        double x = columnWidth * (endPos - startPos) + columnWidth / 2 - (pointsCount - i) * pxPerPoint;
+        if (chroma.A.size() == prev + i) {
+            prev -= i;
+        }
+        qreal yA = -qMin(static_cast<qreal>(chroma.A[prev + i]) * areaHeight / chromaMax, h);
+        qreal yC = -qMin(static_cast<qreal>(chroma.C[prev + i]) * areaHeight / chromaMax, h);
+        qreal yG = -qMin(static_cast<qreal>(chroma.G[prev + i]) * areaHeight / chromaMax, h);
+        qreal yT = -qMin(static_cast<qreal>(chroma.T[prev + i]) * areaHeight / chromaMax, h);
+
+        polylineA.append(QPointF(x, yA));
+        polylineC.append(QPointF(x, yC));
+        polylineG.append(QPointF(x, yG));
+        polylineT.append(QPointF(x, yT));
+    }
+}
+
+void SequenceWithChromatogramAreaRenderer::drawOriginalBaseCalls(qreal h, QPainter& p, const U2Region& visible, const QByteArray& ba) const {
+    p.setPen(Qt::black);
+    p.translate( 0, h);
+
+    int colWidth = getSeqArea()->getEditor()->getColumnWidth();
+    for (int i = visible.startPos; i < visible.endPos(); i++) {
+        QColor color = getBaseColor(ba[i]);
+        p.setPen(color);
+
+        int xP = colWidth * (i - visible.startPos) + colWidth / 2;
+
+        p.setPen(linePen);
+        p.setRenderHint(QPainter::Antialiasing, false);
+        p.drawLine(xP, 0, xP, heightPD - h);
+    }
+    p.translate( 0, - h);
+}
+
+void SequenceWithChromatogramAreaRenderer::drawQualityValues(const DNAChromatogram& chroma, qreal w, qreal h,
+                                                             QPainter& p, const U2Region& visible, const QByteArray& ba) const
+{
+    p.translate(0, h);
+
+    //draw grid
+    p.setPen(linePen);
+    p.setRenderHint(QPainter::Antialiasing, false);
+    for (int i = 0; i < 5; ++i) {
+        p.drawLine(0, -h * i/4, w, -h * i/4);
+    }
+
+    QLinearGradient gradient(10, 0, 10, -h);
+    gradient.setColorAt(0, Qt::green);
+    gradient.setColorAt(0.33, Qt::yellow);
+    gradient.setColorAt(0.66, Qt::red);
+    QBrush brush(gradient);
+
+    p.setBrush(brush);
+    p.setPen(Qt::black);
+    p.setRenderHint(QPainter::Antialiasing, true);
+
+    int colWidth = getSeqArea()->getEditor()->getColumnWidth();
+    QRectF rectangle;
+    for (int i = visible.startPos; i < visible.endPos(); i++) {
+        int xP = colWidth * (i - visible.startPos);
+        switch (ba[i])  {
+        case 'A':
+            rectangle.setCoords(xP, 0, xP + charWidth, - h / 100 * chroma.prob_A[i]);
+            break;
+        case 'C':
+            rectangle.setCoords(xP, 0, xP + charWidth, - h / 100 * chroma.prob_C[i]);
+            break;
+        case 'G':
+            rectangle.setCoords(xP, 0, xP + charWidth, - h / 100 * chroma.prob_G[i]);
+            break;
+        case 'T':
+            rectangle.setCoords(xP, 0, xP + charWidth, - h / 100 * chroma.prob_T[i]);
+            break;
+        }
+        if (qAbs( rectangle.height() ) > h / 100) {
+            p.drawRoundedRect(rectangle, 1.0, 1.0);
+        }
+    }
+
+    p.translate( 0, - h);
+}
+
+
+void SequenceWithChromatogramAreaRenderer::drawChromatogramBaseCallsLines(const DNAChromatogram& chroma, qreal h, QPainter& p,
+                                                                          const U2Region& visible, const QByteArray& ba) const
+{
+    p.setRenderHint(QPainter::Antialiasing, false);
+    p.translate(0, h);
+
+    double yRes = 0;
+    int areaHeight = (heightPD - heightBC) * this->maxTraceHeight / 100;
+    int colWidth = getSeqArea()->getEditor()->getColumnWidth();
+    for (int i = visible.startPos; i < visible.startPos + visible.length; i++) {
+        SAFE_POINT(i < chroma.baseCalls.length(), "Base calls array is too short: visible range index is out range", );
+        int temp = chroma.baseCalls[i];
+        SAFE_POINT(temp <= chroma.traceLength, "Broken chromatogram data", );
+
+        double x = colWidth * (i - visible.startPos) + colWidth / 2;
+        bool drawBase = true;
+        p.setPen(getBaseColor(ba[i]));
+        switch (ba[i])  {
+            case 'A':
+                yRes = -qMin(static_cast<qreal>(chroma.A[temp])*areaHeight/chromaMax, h);
+                drawBase = getSettings().drawTraceA;
+                break;
+            case 'C':
+                yRes = -qMin(static_cast<qreal>(chroma.C[temp]) * areaHeight / chromaMax, h);
+                drawBase = getSettings().drawTraceC;
+                break;
+            case 'G':
+                yRes = -qMin(static_cast<qreal>(chroma.G[temp]) * areaHeight / chromaMax, h);
+                drawBase = getSettings().drawTraceG;
+                break;
+            case 'T':
+                yRes = -qMin(static_cast<qreal>(chroma.T[temp]) * areaHeight / chromaMax, h);
+                drawBase = getSettings().drawTraceT;
+                break;
+            case 'N':
+                continue;
+        };
+        if (drawBase) {
+            p.drawLine(x, 0, x, yRes);
+        }
+    }
+    p.translate( 0, - h);
+}
+
+McaEditorSequenceArea* SequenceWithChromatogramAreaRenderer::getSeqArea() const {
+    return qobject_cast<McaEditorSequenceArea*>(seqAreaWgt);
+}
+
+const ChromatogramViewSettings& SequenceWithChromatogramAreaRenderer::getSettings() const {
+    return getSeqArea()->getSettings();
+}
+
+int SequenceWithChromatogramAreaRenderer::getChromatogramHeight() {
+    return CHROMATOGRAM_MAX_HEIGHT * MaEditor::zoomMult;
+}
+
+} // namespace
diff --git a/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.h b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.h
new file mode 100644
index 0000000..1725087
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_msa/view_rendering/SequenceWithChromatogramAreaRenderer.h
@@ -0,0 +1,86 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_WITH_CHROMATOGRAM_AREA_RENDERER_H_
+#define _U2_SEQUENCE_WITH_CHROMATOGRAM_AREA_RENDERER_H_
+
+#include "SequenceAreaRenderer.h"
+
+#include <U2Core/MultipleChromatogramAlignmentRow.h>
+
+namespace U2 {
+
+class ChromatogramViewSettings;
+class McaEditorSequenceArea;
+
+class SequenceWithChromatogramAreaRenderer : public SequenceAreaRenderer {
+    Q_OBJECT
+public:
+    SequenceWithChromatogramAreaRenderer(MaEditorWgt *ui, McaEditorSequenceArea* seqAreaWgt);
+
+    void drawReferenceSelection(QPainter &painter) const;
+    void drawNameListSelection(QPainter &painter) const;
+
+    void setAreaHeight(int h);
+    int getAreaHeight() const;
+
+    int getScaleBarValue() const;
+
+    static const int INDENT_BETWEEN_ROWS;
+    static const int CHROMATOGRAM_MAX_HEIGHT;
+
+private:
+    int drawRow(QPainter &painter, const MultipleAlignment &mca, int rowIndex, const U2Region &region, int xStart, int yStart) const;
+
+    void drawChromatogram(QPainter &painter, const MultipleChromatogramAlignmentRow &row, const U2Region &visibleRange, int xStart) const;
+
+    QColor getBaseColor(char base) const;
+
+    void drawChromatogramTrace(const DNAChromatogram& chroma, qreal x, qreal y, qreal h, QPainter& p,
+                               const U2Region& visible) const;
+    void drawOriginalBaseCalls(qreal h, QPainter& p, const U2Region& visible, const QByteArray& ba) const;
+    void drawQualityValues(const DNAChromatogram& chroma, qreal w, qreal h,
+                           QPainter& p, const U2Region& visible, const QByteArray& ba) const;
+    void drawChromatogramBaseCallsLines(const DNAChromatogram& chroma, qreal h,
+                                        QPainter& p, const U2Region& visible, const QByteArray& ba) const;
+private:
+    McaEditorSequenceArea* getSeqArea() const;
+    const ChromatogramViewSettings& getSettings() const;
+    static int getChromatogramHeight();
+    void completePolygonsWithLastBaseCallTrace(QPolygonF& polylineA, QPolygonF& polylineC, QPolygonF& polylineG, QPolygonF& polylineT, const DNAChromatogram& chroma, qreal columnWidth, const U2Region& visible, qreal h) const;
+
+private:
+    qreal   charWidth;
+    qreal   charHeight;
+
+    mutable int     chromaMax;
+    QPen            linePen;
+    int             heightPD;
+    int             heightBC;
+    int             heightQuality;
+    int             maxTraceHeight;
+
+    static const qreal TRACE_OR_BC_LINES_DIVIDER;
+};
+
+} // namespace
+
+#endif // _U2_SEQUENCE_WITH_CHROMATOGRAM_AREA_RENDERER_H_
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateBranchesTask.h b/src/corelibs/U2View/src/ov_phyltree/CreateBranchesTask.h
index 06100b4..2514401 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateBranchesTask.h
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateBranchesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.cpp b/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.cpp
index d85095b..19e2662 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QStack>
+#include <QStack>
 
 #include "CreateCircularBranchesTask.h"
 #include "GraphicsCircularBranchItem.h"
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.h b/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.h
index ee44c71..7ce1e34 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.h
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateCircularBranchesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.cpp b/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.cpp
index 81f2099..c91f671 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.h b/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.h
index 51805c3..e6d7393 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.h
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateRectangularBranchesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.cpp b/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.cpp
index 662c77a..9b826d3 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QStack>
+#include <QStack>
 
 #include "CreateUnrootedBranchesTask.h"
 #include "GraphicsUnrootedBranchItem.h"
diff --git a/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.h b/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.h
index 3790fc7..4d5341d 100644
--- a/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.h
+++ b/src/corelibs/U2View/src/ov_phyltree/CreateUnrootedBranchesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.cpp b/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.cpp
index 3a714cd..c712465 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 #include "GraphicsButtonItem.h"
 #include "TreeViewerUtils.h"
 
-#include <QtGui/QPainter>
-#include <QtCore/QStack>
+#include <QPainter>
+#include <QStack>
 #include <U2Core/U2SafePoints.h>
 #include <QGraphicsScene>
 #include <QEvent>
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.h b/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.h
index beab58d..16bee08 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.h
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsBranchItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.cpp b/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.cpp
index 342b30b..a4d31d4 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/PhyTreeObject.h>
-#include <QtCore/QList>
+#include <QList>
 
 #include <QGraphicsScene>
 #include <QGraphicsSceneMouseEvent>
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.h b/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.h
index 2124d16..a146e21 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.h
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsButtonItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.cpp b/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.cpp
index 2f38b83..dc9a96f 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,25 +19,21 @@
  * MA 02110-1301, USA.
  */
 
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <QPainter>
+#include <QPen>
+#include <QStack>
+#include <QtMath>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/PhyTreeObject.h>
+
+#include "GraphicsButtonItem.h"
 #include "GraphicsCircularBranchItem.h"
 #include "GraphicsRectangularBranchItem.h"
-#include "GraphicsButtonItem.h"
 #include "TreeViewerUtils.h"
 
-#include <QtGui/QPainter>
-#include <QtGui/QPen>
-#include <QtCore/QStack>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsView>
-#else
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsView>
-#endif
-#include <U2Core/PhyTreeObject.h>
-#include <U2Core/AppContext.h>
-#include <qmath.h>
-
 namespace U2 {
 
 #ifndef M_PI
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.h b/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.h
index 8eb366b..cc1fa87 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.h
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsCircularBranchItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.cpp b/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.cpp
index 966a237..c6baec2 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,18 +23,12 @@
 #include "GraphicsButtonItem.h"
 #include "TreeViewerUtils.h"
 
-#include <QtGui/QPainter>
-#include <QtGui/QPen>
-#include <QtCore/QStack>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsView>
-#include <QtGui/QGraphicsSceneMouseEvent>
-#else
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsView>
-#include <QtWidgets/QGraphicsSceneMouseEvent>
-#endif
+#include <QPainter>
+#include <QPen>
+#include <QStack>
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <QGraphicsSceneMouseEvent>
 #include <U2Core/PhyTreeObject.h>
 #include <U2Core/AppContext.h>
 
@@ -225,8 +219,6 @@ void GraphicsRectangularBranchItem::swapSiblings() {
 }
 
 void GraphicsRectangularBranchItem::redrawBranches(int& current, qreal& minDistance, qreal& maxDistance, const PhyNode* root){
-    assert(this);
-
     int branches = 0;
     const PhyNode* node = NULL;
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.h b/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.h
index 4943c55..d287881 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.h
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsRectangularBranchItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.cpp b/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.cpp
index 9ca2e50..414f503 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,24 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "GraphicsUnrootedBranchItem.h"
-#include "GraphicsRectangularBranchItem.h"
-#include "GraphicsButtonItem.h"
-#include "TreeViewerUtils.h"
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <QPainter>
+#include <QPen>
+#include <QStack>
+#include <QtMath>
 
-#include <QtGui/QPainter>
-#include <QtGui/QPen>
-#include <QtCore/QStack>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsView>
-#else
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsView>
-#endif
-#include <U2Core/PhyTreeObject.h>
 #include <U2Core/AppContext.h>
-#include <qmath.h>
+#include <U2Core/PhyTreeObject.h>
+
+#include "GraphicsButtonItem.h"
+#include "GraphicsRectangularBranchItem.h"
+#include "GraphicsUnrootedBranchItem.h"
+#include "TreeViewerUtils.h"
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.h b/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.h
index cfa50a7..e9f2205 100644
--- a/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.h
+++ b/src/corelibs/U2View/src/ov_phyltree/GraphicsUnrootedBranchItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeSettings.h b/src/corelibs/U2View/src/ov_phyltree/TreeSettings.h
index cc81d15..a2c8a5e 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeSettings.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_TREE_SETTINGS_H_
 #define _U2_TREE_SETTINGS_H_
 
-#include <QtCore/QMap>
-#include <QtCore/QVariant>
+#include <QMap>
+#include <QVariant>
 #include <QDialog>
 #include <QFontInfo>
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewer.cpp b/src/corelibs/U2View/src/ov_phyltree/TreeViewer.cpp
index 12531ac..07be8d8 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewer.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewer.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@
 #include <QStack>
 #include <QSvgGenerator>
 #include <QVBoxLayout>
-#include <QtXml/QtXml>
+#include <QtMath>
 
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
 
@@ -43,6 +43,7 @@
 #include <U2Core/L10n.h>
 #include <U2Core/PhyTree.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2Region.h>
 #include <U2Core/U2SafePoints.h>
@@ -50,10 +51,11 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
 #include <U2Gui/GUIUtils.h>
-#include <U2Gui/OrderedToolbar.h>
 #include <U2Gui/OPWidgetFactoryRegistry.h>
 #include <U2Gui/OptionsPanel.h>
-#include <U2Core/QObjectScopedPointer.h>
+#include <U2Gui/OrderedToolbar.h>
+
+#include <U2View/MSAEditorTreeViewer.h>
 
 #include "CreateBranchesTask.h"
 #include "CreateCircularBranchesTask.h"
@@ -72,8 +74,6 @@
 #include "phyltree/TextSettingsDialog.h"
 #include "phyltree/TreeSettingsDialog.h"
 
-#include <U2View/MSAEditorTreeViewer.h>
-
 namespace U2 {
 
 
@@ -1119,7 +1119,7 @@ void TreeViewerUI::sl_captureTreeTriggered() {
     const GUrl& url = doc->getURL();
     const QString& fileName = url.baseFileName();
 
-    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(viewport(), ExportImageDialog::PHYTreeView, ExportImageDialog::NoScaling, this, fileName);
+    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(viewport(), ExportImageDialog::PHYTreeView, fileName, ExportImageDialog::NoScaling, this);
     dialog->exec();
 }
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewer.h b/src/corelibs/U2View/src/ov_phyltree/TreeViewer.h
index c2ab66a..311ca44 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewer.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,16 +22,14 @@
 #ifndef _U2_TREE_VIEWER_H_
 #define _U2_TREE_VIEWER_H_
 
-#include <qglobal.h>
-
 #include <QGraphicsView>
 #include <QToolBar>
 #include <QToolButton>
 #include <QScrollBar>
 
-#include <QtCore/QMap>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <QMap>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PhyTreeObject.h>
 #include <U2Core/PhyTree.h>
 #include <U2Core/Task.h>
@@ -40,7 +38,7 @@
 
 #include "TreeSettings.h"
 
-#include <QtGui/QTransform>
+#include <QTransform>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.cpp b/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.cpp
index 2fd4cb2..f5234dd 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.h b/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.h
index e4d9862..6eaaf29 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.cpp b/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.cpp
index eaceb99..a5db82d 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.h b/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.h
index 417ce8e..357f2ba 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerState.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/GObject.h>
 
-#include <QtCore/QVariant>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.cpp b/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.cpp
index 011f487..0445b67 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,7 +41,7 @@
 #include "ov_msa/MSAEditor.h"
 #include "ov_msa/PhyTrees/MSAEditorTreeManager.h"
 
-#include <QtCore/QSet>
+#include <QSet>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.h b/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.h
index eebd1f5..9c1fcae 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.cpp b/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.cpp
index 0d9b881..3e843b4 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.cpp
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
diff --git a/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.h b/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.h
index feb8524..2e2625c 100644
--- a/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.h
+++ b/src/corelibs/U2View/src/ov_phyltree/TreeViewerUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _TREE_VIEWER_UTILS_H_
 #define _TREE_VIEWER_UTILS_H_
 
-#include <QtGui/QFont>
+#include <QFont>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.cpp b/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.cpp
index d046903..58157a2 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.h b/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.h
index 6f9898e..d74fba2 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVAnnotationCreation.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVClipboard.cpp b/src/corelibs/U2View/src/ov_sequence/ADVClipboard.cpp
index 63e55f9..9afcb79 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVClipboard.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVClipboard.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVClipboard.h b/src/corelibs/U2View/src/ov_sequence/ADVClipboard.h
index 7cd3b01..02e5999 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVClipboard.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVClipboard.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
index 525676e..a8ae935 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
index 1f2da08..a4975bc 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVGraphModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,8 +26,8 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/BackgroundTaskRunner.h>
 
-#include <QtCore/QVector>
-#include <QtGui/QPixmap>
+#include <QVector>
+#include <QPixmap>
 #include <QPointer>
 
 #include "GraphLabelModel.h"
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
index 72fde13..6d58e67 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,191 +20,33 @@
  */
 
 #include "ADVSequenceObjectContext.h"
-
 #include "AnnotatedDNAView.h"
 
-#include <U2Core/AppContext.h>
-#include <U2Core/Counter.h>
-#include <U2Core/DNAAlphabet.h>
+#include <U2Core/AnnotationTableObject.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/DNASequenceSelection.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/GHints.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GObjectUtils.h>
 #include <U2Core/U2SafePoints.h>
-#include <U2Gui/MultiClickMenu.h>
 #include <U2View/CodonTable.h>
 
-
 namespace U2 {
 
 ADVSequenceObjectContext::ADVSequenceObjectContext(AnnotatedDNAView* v, U2SequenceObject* obj)
-: QObject(v), view(v), seqObj(obj), aminoTT(NULL), complTT(NULL), selection(NULL), translations(NULL), visibleFrames(NULL),rowChoosed(false)
-{
-    selection = new DNASequenceSelection(seqObj, this);
-    clarifyAminoTT = false;
-    const DNAAlphabet* al  = getAlphabet();
-    if (al->isNucleic()) {
-        DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
-        complTT = GObjectUtils::findComplementTT(seqObj->getAlphabet());
-        aminoTT = GObjectUtils::findAminoTT(seqObj, true);
-        clarifyAminoTT = aminoTT == NULL;
-
-        QList<DNATranslation*> aminoTs = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO);
-        if (!aminoTs.empty()) {
-            aminoTT = aminoTT == NULL ? tr->getStandardGeneticCodeTranslation(al) : aminoTT;
-            translations = new QActionGroup(this);
-            const CodonTableView *ct = v->getCodonTableView();
-            foreach(DNATranslation* t, aminoTs) {
-                QAction* a = translations->addAction(t->getTranslationName());
-                a->setObjectName(t->getTranslationName());
-                a->setCheckable(true);
-                a->setChecked(aminoTT == t);
-                a->setData(QVariant(t->getTranslationId()));
-                connect(a, SIGNAL(triggered()), SLOT(sl_setAminoTranslation()));
-                connect(a, SIGNAL(triggered()), ct, SLOT(sl_setAminoTranslation()));
-            }
-            visibleFrames = new QActionGroup(this);
-            visibleFrames->setExclusive(false);
-            for(int i = 0; i < 6; i++){
-                QAction* a;
-                if(i < 3){
-                    a = visibleFrames->addAction(QString("%1 direct translation frame").arg(i+1));
-                }else{
-                    a = visibleFrames->addAction(QString("%1 complementary translation frame").arg(i+1-3));
-                }
-                a->setCheckable(true);
-                a->setChecked(true);
-                //set row id
-                a->setData(i);
-                //save status
-                translationRowsStatus.append(a);
-                connect(a, SIGNAL(triggered()), SLOT(sl_toggleTranslations()));
-            }
-        }
-    }
-}
-
-void ADVSequenceObjectContext::guessAminoTT(const AnnotationTableObject *ao) {
-    const DNAAlphabet *al  = getAlphabet();
-    SAFE_POINT(al->isNucleic(), "Unexpected DNA alphabet detected!",);
-    DNATranslation *res = NULL;
-    DNATranslationRegistry *tr = AppContext::getDNATranslationRegistry();
-    // try to guess relevant translation from a CDS feature (if any)
-    foreach (Annotation *ann, ao->getAnnotationsByName("CDS")) {
-        QList<U2Qualifier> ql;
-        ann->findQualifiers("transl_table", ql);
-        if (ql.size() > 0) {
-            QString guess = "NCBI-GenBank #"+ql.first().value;
-            res = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO, guess);
-            if (res !=NULL) {
-                break;
-            }
+    : SequenceObjectContext(obj, v),
+      view(v) {
+    if (v != NULL && translations != NULL) {
+        const CodonTableView *ct = v->getCodonTableView();
+        foreach(QAction* a, translations->actions()) {
+            connect(a, SIGNAL(triggered()), ct, SLOT(sl_setAminoTranslation()));
         }
     }
-    if (res != NULL) {
-        clarifyAminoTT = false;
-        setAminoTranslation(res->getTranslationId());
-    }
-}
-
-
-qint64 ADVSequenceObjectContext::getSequenceLength() const {
-    return seqObj->getSequenceLength();
-}
-
-const DNAAlphabet* ADVSequenceObjectContext::getAlphabet() const {
-    return seqObj->getAlphabet();
-}
-
-QByteArray ADVSequenceObjectContext::getSequenceData(const U2Region &r, U2OpStatus &os) const {
-    return seqObj->getSequenceData(r, os);
-}
-
-U2EntityRef ADVSequenceObjectContext::getSequenceRef() const {
-    return seqObj->getSequenceRef();
-}
-
-QList<GObject *> ADVSequenceObjectContext::getAnnotationGObjects() const {
-    QList<GObject *> res;
-    foreach (AnnotationTableObject *ao, annotations) {
-        res.append(ao);
-    }
-    return res;
 }
 
-void ADVSequenceObjectContext::sl_showDirectOnly(){
-    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowDirectTranslationsOnly" );
-    bool needUpdate = false;
-    QList<QAction*> actionList = visibleFrames->actions();
-    translationRowsStatus.clear();
-    int i = 0;
-    for(; i < 3; i++){
-        QAction *a = actionList[i];
-        if(!a->isChecked()){
-            needUpdate = true;
-            a->setChecked(true);
-            translationRowsStatus.append(a);
-        }
-    }
-    for(; i < 6; i++){
-        QAction *a = actionList[i];
-        if(a->isChecked()){
-            needUpdate = true;
-            a->setChecked(false);
-        }
-    }
-    if(needUpdate){
-        emit si_translationRowsChanged();
-    }
-}
-
-void ADVSequenceObjectContext::sl_showComplOnly(){
-    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowComplementTranslationsOnly" );
-    bool needUpdate = false;
-    QList<QAction*> actionList = visibleFrames->actions();
-    translationRowsStatus.clear();
-    int i = 0;
-    for(; i < 3; i++){
-        QAction *a = actionList[i];
-        if(a->isChecked()){
-            needUpdate = true;
-            a->setChecked(false);
-        }
-    }
-    for(; i < 6; i++){
-        QAction *a = actionList[i];
-        if(!a->isChecked()){
-            needUpdate = true;
-            a->setChecked(true);
-            translationRowsStatus.append(a);
-        }
-    }
-    if(needUpdate){
-        emit si_translationRowsChanged();
-    }
-}
-
-void ADVSequenceObjectContext::sl_showShowAll(){
-    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowAllTranslations" );
-    bool needUpdate = false;
-    translationRowsStatus.clear();
-    foreach(QAction* a, visibleFrames->actions()){
-        if(!a->isChecked()) {
-            needUpdate = true;
-            a->setChecked(true);
-            translationRowsStatus.append(a);
-        }
-    }
-    if(needUpdate){
-        emit si_translationRowsChanged();
-    }
+AnnotationSelection* ADVSequenceObjectContext::getAnnotationsSelection() const {
+    return view->getAnnotationsSelection();
 }
 
 void ADVSequenceObjectContext::sl_onAnnotationRelationChange() {
     AnnotationTableObject* obj = qobject_cast<AnnotationTableObject*>(sender());
-    SAFE_POINT(obj != NULL, tr("Incorrect signal sender!"),);
+    SAFE_POINT(obj != NULL, tr("Incorrect signal sender!"), );
 
     if (!obj->hasObjectRelation(seqObj, ObjectRole_Sequence)) {
         disconnect(obj, SIGNAL(si_relationChanged()), this, SLOT(sl_onAnnotationRelationChange()));
@@ -212,168 +54,4 @@ void ADVSequenceObjectContext::sl_onAnnotationRelationChange() {
     }
 }
 
-QMenu * ADVSequenceObjectContext::createGeneticCodeMenu() {
-    CHECK(NULL != translations, NULL);
-    QMenu *menu = new QMenu(tr("Select genetic code"));
-    menu->setIcon(QIcon(":core/images/tt_switch.png"));
-    menu->menuAction()->setObjectName("AminoTranslationAction");
-
-    foreach (QAction *a, translations->actions()) {
-        menu->addAction(a);
-    }
-    return menu;
-}
-
-QMenu * ADVSequenceObjectContext::createTranslationFramesMenu(QAction *showTranslationAction) {
-    SAFE_POINT(visibleFrames != NULL, "ADVSequenceObjectContext: visibleFrames is NULL ?!", NULL);
-    QMenu *menu = new QMenu(tr("Show/hide amino acid translations"));
-    menu->setIcon(QIcon(":core/images/show_trans.png"));
-    menu->menuAction()->setObjectName("Translation frames");
-    new MultiClickMenu(menu);
-
-    menu->addAction(showTranslationAction);
-    menu->addSeparator();
-
-    menu->addAction(tr("Show direct only"), this, SLOT(sl_showDirectOnly()));
-    menu->addAction(tr("Show complementary only"), this, SLOT(sl_showComplOnly()));
-    menu->addAction(tr("Show all"), this, SLOT(sl_showShowAll()));
-    menu->addSeparator();
-
-    foreach(QAction* a, visibleFrames->actions()) {
-        menu->addAction(a);
-    }
-    return menu;
-}
-
-void ADVSequenceObjectContext::setAminoTranslation(const QString& tid) {
-    const DNAAlphabet* al = getAlphabet();
-    DNATranslation* aTT = AppContext::getDNATranslationRegistry()->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO, tid);
-    assert(aTT!=NULL);
-    if (aTT == aminoTT) {
-        return;
-    }
-    aminoTT = aTT;
-    foreach(QAction* a, translations->actions()) {
-        if (a->data().toString() == tid) {
-            a->setChecked(true);
-            break;
-        }
-    }
-    seqObj->getGHints()->set(AMINO_TT_GOBJECT_HINT, tid);
-    emit si_aminoTranslationChanged();
-}
-
-void ADVSequenceObjectContext::sl_setAminoTranslation() {
-    GCOUNTER( cvar, tvar, "DetView_SetAminoTranslation" );
-    QAction* a = qobject_cast<QAction*>(sender());
-    QString tid = a->data().toString();
-    setAminoTranslation(tid);
-}
-
-AnnotationSelection* ADVSequenceObjectContext::getAnnotationsSelection() const {
-    return view->getAnnotationsSelection();
-}
-
-void ADVSequenceObjectContext::removeSequenceWidget(ADVSequenceWidget* w) {
-    assert(seqWidgets.contains(w));
-    seqWidgets.removeOne(w);
-}
-
-void ADVSequenceObjectContext::addSequenceWidget(ADVSequenceWidget* w) {
-    assert(!seqWidgets.contains(w));
-    seqWidgets.append(w);
-}
-
-void ADVSequenceObjectContext::addAnnotationObject(AnnotationTableObject *obj) {
-    SAFE_POINT(!annotations.contains(obj), "Unexpected annotation table!",);
-    SAFE_POINT(obj->hasObjectRelation(seqObj, ObjectRole_Sequence), "Annotation table relates to unexpected sequence!",);
-    connect(obj, SIGNAL(si_relationChanged()), SLOT(sl_onAnnotationRelationChange()));
-    annotations.insert(obj);
-    emit si_annotationObjectAdded(obj);
-    if (clarifyAminoTT) {
-        guessAminoTT(obj);
-    }
-}
-
-void ADVSequenceObjectContext::removeAnnotationObject(AnnotationTableObject *obj) {
-    SAFE_POINT(annotations.contains(obj), "Unexpected annotation table!",);
-    annotations.remove(obj);
-    emit si_annotationObjectRemoved(obj);
-}
-
-QList<Annotation *> ADVSequenceObjectContext::selectRelatedAnnotations(const QList<Annotation *> &alist) const {
-    QList<Annotation *> res;
-    foreach (Annotation *a, alist) {
-        AnnotationTableObject* o = a->getGObject();
-        if (annotations.contains(o) || autoAnnotations.contains(o)) {
-            res.append(a);
-        }
-    }
-    return res;
-}
-
-GObject * ADVSequenceObjectContext::getSequenceGObject() const {
-    return seqObj;
-}
-
-void ADVSequenceObjectContext::addAutoAnnotationObject(AnnotationTableObject *obj) {
-    autoAnnotations.insert(obj);
-    emit si_annotationObjectAdded(obj);
-}
-
-QSet<AnnotationTableObject *> ADVSequenceObjectContext::getAnnotationObjects(
-    bool includeAutoAnnotations) const
-{
-    QSet<AnnotationTableObject *> result = annotations;
-    if (includeAutoAnnotations) {
-        result += autoAnnotations;
-    }
-
-    return result;
-}
-
-void ADVSequenceObjectContext::sl_toggleTranslations(){
-    translationRowsStatus.clear();
-    rowChoosed = true;
-    emit si_translationRowsChanged();
-    rowChoosed = false;
-}
-
-bool ADVSequenceObjectContext::isRowChoosed(){
-    return rowChoosed;
-}
-
-QVector<bool> ADVSequenceObjectContext::getTranslationRowsVisibleStatus(){
-    QVector<bool> result;
-    if (visibleFrames != NULL) {
-        foreach(QAction* a, visibleFrames->actions()) {
-            result.append(a->isChecked());
-        }
-    }
-    return result;
-}
-void ADVSequenceObjectContext::setTranslationsVisible(bool enable){
-    bool needUpdate = false;
-    if(!enable){
-        translationRowsStatus.clear();
-    }
-    foreach(QAction* a, visibleFrames->actions()){
-        if(!enable){//hide
-            if(a->isChecked()) {
-                needUpdate = true;
-                a->setChecked(false);
-                translationRowsStatus.append(a);
-            }
-        }else{//show
-            if(!a->isChecked() && (translationRowsStatus.contains(a) || translationRowsStatus.isEmpty())) {
-                needUpdate = true;
-                a->setChecked(true);
-            }
-        }
-    }
-    if(needUpdate){
-        emit si_translationRowsChanged();
-    }
-}
-
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
index 1341437..9b5661c 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceObjectContext.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,103 +22,25 @@
 #ifndef _U2_ADV_SEQUENCE_OBJECT_CONTEXT_H_
 #define _U2_ADV_SEQUENCE_OBJECT_CONTEXT_H_
 
-#include <U2Core/Annotation.h>
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/U2Type.h>
+#include "SequenceObjectContext.h"
 
-#include <QtCore/QSet>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QMenu>
-#endif
 
 namespace U2 {
 
-class AnnotatedDNAView;
-class U2SequenceObject;
-class DNAAlphabet;
-class DNATranslation;
-class DNASequenceSelection;
-class ADVSequenceWidget;
-class AnnotationSelection;
-class GObject;
-class Annotation;
-class U2Region;
-
-class U2VIEW_EXPORT ADVSequenceObjectContext : public QObject {
+class U2VIEW_EXPORT ADVSequenceObjectContext : public SequenceObjectContext {
     Q_OBJECT
 public:
     ADVSequenceObjectContext(AnnotatedDNAView* v, U2SequenceObject* obj);
 
     AnnotatedDNAView*   getAnnotatedDNAView() const {return view;}
-    DNATranslation*     getComplementTT() const {return complTT;}
-    DNATranslation*     getAminoTT() const {return aminoTT;}
-    U2SequenceObject*   getSequenceObject() const {return seqObj;}
-    GObject*            getSequenceGObject() const;
-
-    qint64 getSequenceLength() const;
-    const DNAAlphabet* getAlphabet() const;
-    QByteArray getSequenceData(const U2Region &r, U2OpStatus &os) const;
-    U2EntityRef getSequenceRef() const;
-    bool        isRowChoosed();
-
-    DNASequenceSelection*   getSequenceSelection() const {return selection;}
-
-    QSet<AnnotationTableObject *> getAnnotationObjects(bool includeAutoAnnotations = false) const;
-    QSet<AnnotationTableObject *> getAutoAnnotationObjects() const { return autoAnnotations; }
-    QList<GObject*> getAnnotationGObjects() const;
-
-    QMenu * createGeneticCodeMenu();
-    QMenu * createTranslationFramesMenu(QAction *showTranslationAction);
-    void setAminoTranslation(const QString& tid);
 
-    void addAnnotationObject(AnnotationTableObject *obj);
-    void addAutoAnnotationObject(AnnotationTableObject *obj);
-    void removeAnnotationObject(AnnotationTableObject *obj);
+    AnnotationSelection* getAnnotationsSelection() const;
 
-    AnnotationSelection * getAnnotationsSelection() const;
-
-    const QList<ADVSequenceWidget*>& getSequenceWidgets() const {return seqWidgets;}
-    void addSequenceWidget(ADVSequenceWidget* w);
-    void removeSequenceWidget(ADVSequenceWidget* w);
-
-    QList<Annotation *> selectRelatedAnnotations(const QList<Annotation *> &alist) const;
-    QVector<bool> getTranslationRowsVisibleStatus();
-    void setTranslationsVisible(bool enable);
-
-private slots:
-    void sl_setAminoTranslation();
-    void sl_toggleTranslations();
-    void sl_showDirectOnly();
-    void sl_showComplOnly();
-    void sl_showShowAll();
+protected slots:
     void sl_onAnnotationRelationChange();
-signals:
-    void si_aminoTranslationChanged();
-    void si_annotationObjectAdded(AnnotationTableObject *obj);
-    void si_annotationObjectRemoved(AnnotationTableObject *obj);
-    void si_translationRowsChanged();
 
 private:
-    void guessAminoTT(const AnnotationTableObject *ao);
-
-
     AnnotatedDNAView*               view;
-    U2SequenceObject*               seqObj;
-    DNATranslation*                 aminoTT;
-    DNATranslation*                 complTT;
-    DNASequenceSelection*           selection;
-    QActionGroup*                   translations;
-    QActionGroup*                   visibleFrames;
-    QVector<QAction*>               translationRowsStatus;
-    QList<ADVSequenceWidget*>       seqWidgets;
-    QSet<AnnotationTableObject *>     annotations;
-    QSet<AnnotationTableObject *>     autoAnnotations;
-    bool                            clarifyAminoTT;
-    bool                            rowChoosed;
 };
 
 } //namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.cpp
index 1a7c215..59542c6 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.h b/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.h
index 5863352..4b6c437 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSequenceWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,14 +25,8 @@
 #include <U2Core/global.h>
 #include <U2Core/U2Region.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QWidget>
-#endif
-
+#include <QAction>
+#include <QWidget>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
index f916548..854c095 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,6 +36,7 @@
 #include <U2Core/L10n.h>
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
@@ -567,7 +568,7 @@ void ADVSingleSequenceWidget::setupGeneticCodeMenu(ADVSequenceObjectContext *seq
 
 bool ADVSingleSequenceWidget::isWidgetOnlyObject(GObject* o) const {
     foreach(GSequenceLineView* v, lineViews) {
-        ADVSequenceObjectContext *ctx = v->getSequenceContext();
+        SequenceObjectContext *ctx = v->getSequenceContext();
         if(ctx->getSequenceGObject() == o) {
             return true;
         }
@@ -837,8 +838,9 @@ void ADVSingleSequenceWidget::sl_saveScreenshot() {
 
     SingleSequenceImageExportController controller(this);
 
+    QString fileName = GUrlUtils::fixFileName(getSequenceObject()->getGObjectName());
     QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&controller, ExportImageDialog::SequenceView, ExportImageDialog::NoScaling, p);
+    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&controller, ExportImageDialog::SequenceView, fileName, ExportImageDialog::NoScaling, p);
 
     dialog->exec();
 }
@@ -881,7 +883,7 @@ void ADVSingleSequenceWidget::sl_createCustomRuler() {
         offset = selection.first().startPos;
     }
 
-    QObjectScopedPointer<CreateRulerDialogController> d = new CreateRulerDialogController(namesToFilter, U2Region(0, getSequenceObject()->getSequenceLength()), offset);
+    QObjectScopedPointer<CreateRulerDialogController> d = new CreateRulerDialogController(namesToFilter, offset);
     const int rc = d->exec();
     CHECK(!d.isNull(), );
 
@@ -994,8 +996,6 @@ ADVSingleSequenceHeaderWidget::ADVSingleSequenceHeaderWidget(ADVSingleSequenceWi
 
     viewsToolBar = new OrderedToolbar(this);
     viewsToolBar->setObjectName("views_tool_bar_" + ctx->getSequenceObject()->getGObjectName());
-    // visual separator between standard toolbar and visibility toolbar
-    viewsToolBar->addSeparator();
     viewsToolBar->setStyleSheet(QString("QToolBar {spacing: %1px; margin: 0px; }").arg(ADV_HEADER_TOOLBAR_SPACING));
     viewsToolBar->setFixedHeight(ADV_HEADER_HEIGHT);
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
index bb16780..687541b 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSingleSequenceWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@
 #include <QSplitter>
 
 #ifdef Q_OS_UNIX
-#include <QtCore/QTimer>
+#include <QTimer>
 #endif // Q_OS_UNIX
 
 
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.h b/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.h
index 3d694e9..36e4629 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSplitWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.cpp b/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.cpp
index 281887d..c2dc3e7 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,6 +28,7 @@
 
 #include <U2Core/DNASequenceSelection.h>
 #include <U2Core/AnnotationTableObject.h>
+#include <U2Core/Counter.h>
 
 namespace U2 {
 
@@ -109,7 +110,6 @@ ADVSyncViewManager::ADVSyncViewManager(AnnotatedDNAView* v) : QObject(v), adv(v)
 
     toggleAutoAnnotationsAction = NULL;
 
-
     // visual mode ops
     toggleAllAction = new QAction("Toggle All sequence views", this);
     toggleAllAction->setObjectName("toggleAllSequenceViews");
@@ -263,7 +263,7 @@ void ADVSyncViewManager::sl_rangeChanged() {
 }
 
 void ADVSyncViewManager::sl_lock() {
-
+    GCOUNTER(tvar, cvar, "SequenceView::SyncViewManager::Lock scales");
     QObject* s = sender();
     bool buttonClicked = (s == lockButton);
 
@@ -293,10 +293,10 @@ void ADVSyncViewManager::sl_lock() {
         lockButton->setChecked(lockActionGroup->checkedAction() != NULL);
     }
 
-
 }
 
 void ADVSyncViewManager::sl_sync() {
+    GCOUNTER(tvar, cvar, "SequenceView::SyncViewManager::Adjust scales");
     QObject* s = sender();
     SyncMode m = SyncMode_Start;
     if (s == syncBySeqSelAction) {
@@ -524,6 +524,7 @@ void ADVSyncViewManager::updateAutoAnnotationActions() {
 
     foreach (ADVSequenceWidget* w, adv->getSequenceWidgets()) {
         QList<ADVSequenceWidgetAction*> actions = w->getADVSequenceWidgetActions();
+        bool active = false;
         foreach (ADVSequenceWidgetAction* action, actions) {
             AutoAnnotationsADVAction* aaAction = qobject_cast<AutoAnnotationsADVAction*>(action);
             if (aaAction != NULL) {
@@ -531,8 +532,10 @@ void ADVSyncViewManager::updateAutoAnnotationActions() {
                 foreach( QAction* toggleAction, aaToggleActions) {
                     if (toggleAction->isEnabled()) {
                         aaActionMap.insertMulti(toggleAction->text(), toggleAction);
+                        active = true;
                     }
                 }
+                aaAction->setVisible(active);
             }
         }
     }
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.h b/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.h
index 1ee3b5e..2f979aa 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVSyncViewManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVUtils.cpp b/src/corelibs/U2View/src/ov_sequence/ADVUtils.cpp
index a23bcfb..35e7d04 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVUtils.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/ADVUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/ADVUtils.h b/src/corelibs/U2View/src/ov_sequence/ADVUtils.h
index 12dda58..3ec6118 100644
--- a/src/corelibs/U2View/src/ov_sequence/ADVUtils.h
+++ b/src/corelibs/U2View/src/ov_sequence/ADVUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QSet>
+#include <QSet>
 
 
 namespace U2 {
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
index d538f6b..b5e6bc5 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,33 +31,24 @@
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
 #include <U2Core/AutoAnnotationsSupport.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/ClipboardController.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNASequenceSelection.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObjectRelationRoles.h>
-#include <U2Core/GObjectTypes.h>
 #include <U2Core/GObjectUtils.h>
-#include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/Log.h>
 #include <U2Core/ModifySequenceObjectTask.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/RemoveAnnotationsTask.h>
 #include <U2Core/ReverseSequenceTask.h>
 #include <U2Core/SelectionUtils.h>
 #include <U2Core/SequenceUtils.h>
-#include <U2Core/Task.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/Timer.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
-#include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Gui/CreateObjectRelationDialogController.h>
 #include <U2Gui/DialogUtils.h>
@@ -78,9 +69,7 @@
 #include "ADVConstants.h"
 #include "ADVSequenceObjectContext.h"
 #include "ADVSingleSequenceWidget.h"
-#include "ADVSplitWidget.h"
 #include "ADVSyncViewManager.h"
-#include "ADVUtils.h"
 #include "AnnotatedDNAView.h"
 #include "AnnotatedDNAViewFactory.h"
 #include "AnnotatedDNAViewState.h"
@@ -162,6 +151,7 @@ AnnotatedDNAView::AnnotatedDNAView(const QString& viewName, const QList<U2Sequen
     connect(removeSequenceObjectAction, SIGNAL(triggered()), SLOT(sl_removeSelectedSequenceObject()));
 
     reverseComplementSequenceAction = new QAction(tr("Reverse-complement sequence"), this);
+    reverseComplementSequenceAction ->setShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_R));
     reverseComplementSequenceAction->setObjectName(ACTION_EDIT_RESERVE_COMPLEMENT_SEQUENCE);
     connect(reverseComplementSequenceAction, SIGNAL(triggered()), SLOT(sl_reverseComplementSequence()));
 
@@ -1027,9 +1017,8 @@ void AnnotatedDNAView::addGraphs(ADVSequenceObjectContext* seqCtx)
 {
     foreach (ADVSequenceWidget* seqWidget, seqCtx->getSequenceWidgets())
     {
-        GraphMenuAction* graphMenuAction = new GraphMenuAction();
-
         ADVSingleSequenceWidget* singleSeqWidget = qobject_cast<ADVSingleSequenceWidget*>(seqWidget);
+        GraphMenuAction* graphMenuAction = new GraphMenuAction(singleSeqWidget->getSequenceObject()->getAlphabet());
         if (singleSeqWidget != NULL) {
             singleSeqWidget->addADVSequenceWidgetActionToViewsToolbar(graphMenuAction);
         } else {
@@ -1313,7 +1302,7 @@ void AnnotatedDNAView::sl_sequenceModifyTaskStateChanged() {
             if (regions.count() == 1) {
                 const U2Region r = regions.first();
                 foreach (ADVSequenceWidget *w, seqCtx->getSequenceWidgets()) {
-                    w->centerPosition(r.startPos);
+                    w->centerPosition((int) r.startPos);
                 }
             }
         }
@@ -1391,11 +1380,11 @@ void AnnotatedDNAView::sl_pasteFinished(Task* _pasteTask){
 }
 
 void AnnotatedDNAView::onObjectRenamed(GObject* obj, const QString& oldName) {
-    // 1. update title
-    OpenAnnotatedDNAViewTask::updateTitle(this);
-
-    // 2. update components
     if (obj->getGObjectType() == GObjectTypes::SEQUENCE) {
+        // 1. update title
+        OpenAnnotatedDNAViewTask::updateTitle(this);
+
+        // 2. update components
         U2SequenceObject* seqObj = qobject_cast<U2SequenceObject*>(obj);
         ADVSequenceObjectContext* ctx = getSequenceContext(seqObj);
         foreach(ADVSequenceWidget* w, ctx->getSequenceWidgets()) {
@@ -1418,15 +1407,11 @@ void AnnotatedDNAView::sl_complementSequence() {
 
 void AnnotatedDNAView::sl_selectionChanged() {
     ADVSequenceObjectContext* seqCtx = getSequenceInFocus();
+    CHECK(seqCtx != NULL, );
     DNASequenceSelection* selection = qobject_cast<DNASequenceSelection*>(sender());
-    if (selection != NULL) {
-        assert(seqCtx->getSequenceGObject() == selection->getSequenceObject());
-    }
-    if (!seqCtx->getSequenceSelection()->isEmpty()) {
-        replaceSequencePart->setEnabled(true);
-    } else {
-        replaceSequencePart->setEnabled(false);
-    }
+    CHECK(selection != NULL && seqCtx->getSequenceGObject() == selection->getSequenceObject(), );
+
+    replaceSequencePart->setEnabled(!seqCtx->getSequenceSelection()->isEmpty());
 }
 
 void AnnotatedDNAView::sl_aminoTranslationChanged() {
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
index 96eaf45..568de36 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -263,7 +263,7 @@ private:
     PositionSelector*   posSelector;
 
     QList<ADVSequenceObjectContext*>    seqContexts;
-    QList<AnnotationTableObject*>         annotations;
+    QList<AnnotationTableObject*>       annotations;
     QList<ADVObjectHandler*>            handlers;
     QList<ADVGlobalAction*>             advActions;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
index 119afd9..41e155b 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.h
index 51fd47a..56936b6 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.cpp
index bc3aa08..526f889 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.h
index 048d1ef..132b989 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewState.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/U2Region.h>
 #include <U2Core/GObject.h>
-#include <QtCore/QVariant>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.cpp
index 8d8b723..73fe48d 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,15 +40,9 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMessageBox>
-#endif
-
-#include <QtCore/QSet>
+#include <QApplication>
+#include <QMessageBox>
+#include <QSet>
 
 static const int SEQ_OBJS_PER_VIEW = 10;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.h b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.h
index d6f1108..121e5ca 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotatedDNAViewTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
index d236bc1..1410ffc 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -226,7 +226,11 @@ AnnotationsTreeView::AnnotationsTreeView(AnnotatedDNAView* _ctx) : ctx(_ctx), dn
     tree->addAction(editAction);
 
     addQualifierAction = new QAction(tr("Qualifier..."), this);
+#ifndef Q_OS_MAC
     addQualifierAction->setShortcut(QKeySequence(Qt::Key_Insert));
+#else
+    addQualifierAction->setShortcut(QKeySequence(Qt::SHIFT + Qt::Key_I));
+#endif
     addQualifierAction->setShortcutContext(Qt::WindowShortcut);
     addQualifierAction->setObjectName("add_qualifier_action");
     connect(addQualifierAction, SIGNAL(triggered()), SLOT(sl_addQualifier()));
diff --git a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
index 2c42187..b8b163c 100644
--- a/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
+++ b/src/corelibs/U2View/src/ov_sequence/AnnotationsTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
index b68d2ce..843cb43 100644
--- a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@ const QString AutoAnnotationsADVAction::ACTION_NAME("AutoAnnotationUpdateAction"
 
 AutoAnnotationsADVAction::AutoAnnotationsADVAction(ADVSequenceWidget* v,
                                                    AutoAnnotationObject* obj)
-: ADVSequenceWidgetAction(ACTION_NAME, tr("Automatic Annotations Highlighting")), aaObj(obj), updatesCount(0)
+: ADVSequenceWidgetAction(ACTION_NAME, tr("Automatic annotations highlighting")), aaObj(obj), updatesCount(0)
 {
     seqWidget = v;
     addToBar = true;
diff --git a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.h b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.h
index f4e0c83..976a5c1 100644
--- a/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.h
+++ b/src/corelibs/U2View/src/ov_sequence/AutoAnnotationUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
index 91ed7e1..5c022c9 100644
--- a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,34 +23,18 @@
 
 #include <U2Core/TextUtils.h>
 
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QSpinBox>
-#include <QtGui/QMessageBox>
-#include <QtGui/QColorDialog>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QColorDialog>
-#endif
-#include <QtGui/QPalette>
+#include <QPushButton>
+#include <QMessageBox>
+#include <QColorDialog>
 #include <U2Gui/HelpButton.h>
 
-
 namespace U2 {
 
-CreateRulerDialogController::CreateRulerDialogController(const QSet<QString>& namesToFilter,
-                                                         const U2Region& seqRange, int defaultOffset, QWidget* p)
+CreateRulerDialogController::CreateRulerDialogController(const QSet<QString>& namesToFilter, int defaultOffset, QWidget* p)
 : QDialog(p)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222973");
+    new HelpButton(this, buttonBox, "20874877");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -62,9 +46,9 @@ CreateRulerDialogController::CreateRulerDialogController(const QSet<QString>& na
 
     nameEdit->setText(TextUtils::variate(tr("New ruler"), "_", filter));
 
-    spinBox->setMinimum(INT_MIN + seqRange.length);
+    spinBox->setMinimum(INT_MIN);
     spinBox->setMaximum(INT_MAX);
-    spinBox->setValue(seqRange.contains(defaultOffset+1) ? defaultOffset + 1 : spinBox->minimum());
+    spinBox->setValue(defaultOffset);
 
     color = Qt::darkBlue;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
index 198f6e5..af86633 100644
--- a/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
+++ b/src/corelibs/U2View/src/ov_sequence/CreateRulerDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,24 +22,24 @@
 #ifndef _U2_CREATE_RULER_DIALOG_CONTROLLER_H_
 #define _U2_CREATE_RULER_DIALOG_CONTROLLER_H_
 
-
 #include <ui_CreateRulerDialog.h>
 
 #include <U2Core/U2Region.h>
 
-#include <QtCore/QSet>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QSet>
+#include <QDialog>
 
 namespace U2 {
 
 class U2VIEW_EXPORT CreateRulerDialogController : public QDialog, public Ui_CreateRulerDialog {
     Q_OBJECT
 public:
-    CreateRulerDialogController(const QSet<QString>& namesToFilter, const U2Region& range, int offset = -1, QWidget* p=NULL);
+    CreateRulerDialogController(
+            /* The names in this set are already used and are not allowed */
+            const QSet<QString>& namesToFilter,
+            /** Ruler offset selected by default */
+            int defaultOffset,
+            QWidget* p=NULL);
 
     virtual void accept ();
 
diff --git a/src/corelibs/U2View/src/ov_sequence/DetView.cpp b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
index 25f28e8..b3ca8ab 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@ namespace U2 {
 /************************************************************************/
 /* DetView */
 /************************************************************************/
-DetView::DetView(QWidget* p, ADVSequenceObjectContext* ctx)
+DetView::DetView(QWidget* p, SequenceObjectContext* ctx)
     : GSequenceLineViewAnnotated(p, ctx)
 {
     showComplementAction = new QAction(tr("Show complement strand"), this);
diff --git a/src/corelibs/U2View/src/ov_sequence/DetView.h b/src/corelibs/U2View/src/ov_sequence/DetView.h
index 90ee0fd..fceee9c 100644
--- a/src/corelibs/U2View/src/ov_sequence/DetView.h
+++ b/src/corelibs/U2View/src/ov_sequence/DetView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ class DetViewRenderer;
 class U2VIEW_EXPORT DetView : public GSequenceLineViewAnnotated {
     Q_OBJECT
 public:
-    DetView(QWidget* p, ADVSequenceObjectContext* ctx);
+    DetView(QWidget* p, SequenceObjectContext* ctx);
 
     DetViewRenderArea* getDetViewRenderArea() const;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.cpp
index e5cd8bb..42943bb 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,13 +43,16 @@
 
 namespace U2 {
 
-GSequenceGraphView::GSequenceGraphView(QWidget* p, ADVSequenceObjectContext* ctx, GSequenceLineView* _baseView, const QString& _vName)
-: GSequenceLineView(p, ctx), baseView(_baseView), vName(_vName), graphDrawer(NULL)
+GSequenceGraphView::GSequenceGraphView(QWidget* p, SequenceObjectContext* ctx,
+                                       GSequenceLineView* _baseView, const QString& _vName)
+    : GSequenceLineView(p, ctx),
+      baseView(_baseView),
+      vName(_vName),
+      graphDrawer(NULL)
 {
     GCOUNTER(cvar, tvar, "GSequenceGraphView");
     assert(baseView);
 
-
     visualPropertiesAction = new QAction(tr("Graph settings..."), this);
     visualPropertiesAction->setObjectName("visual_properties_action");
 
@@ -60,7 +63,7 @@ GSequenceGraphView::GSequenceGraphView(QWidget* p, ADVSequenceObjectContext* ctx
 
     connect(saveGraphCutoffsAction, SIGNAL(triggered(bool)), SLOT(sl_onSaveGraphCutoffs(bool)));
 
-    deleteAllLabelsAction = new QAction(tr("Delete all labels..."), this);
+    deleteAllLabelsAction = new QAction(tr("Delete all labels"), this);
     deleteAllLabelsAction->setObjectName("delete_all_labels");
 
     connect(deleteAllLabelsAction, SIGNAL(triggered()), SLOT(sl_onDeleteAllLabels()));
@@ -224,6 +227,7 @@ void GSequenceGraphView::buildPopupMenu(QMenu& menu)
     graphMenu->menuAction()->setObjectName("Graph");
 
     addActionsToGraphMenu(graphMenu);
+    
 
     // Inserting the Graphs menu at the top
     QAction *menuBeginning = *(menu.actions().begin());
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.h b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.h
index 06184d1..d4e6220 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include "GSequenceLineView.h"
 #include "ADVGraphModel.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
@@ -42,7 +38,7 @@ class GObjectView;
 class U2VIEW_EXPORT GSequenceGraphView : public GSequenceLineView {
     Q_OBJECT
 public:
-    GSequenceGraphView(QWidget* p, ADVSequenceObjectContext* ctx, GSequenceLineView* baseView, const QString& vName);
+    GSequenceGraphView(QWidget* p, SequenceObjectContext* ctx, GSequenceLineView* baseView, const QString& vName);
 
     ~GSequenceGraphView();
 
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.cpp
index 5a6faf2..43d69da 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.h b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.h
index 4b8a80b..c9ad9c0 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceGraphViewWithFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
index fe4d156..9ffeb85 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@
 
 namespace U2 {
 
-GSequenceLineView::GSequenceLineView(QWidget* p, ADVSequenceObjectContext* _ctx)
+GSequenceLineView::GSequenceLineView(QWidget* p, SequenceObjectContext* _ctx)
     : WidgetWithLocalToolbar(p),
       ctx(_ctx),
       renderArea(NULL),
@@ -50,7 +50,8 @@ GSequenceLineView::GSequenceLineView(QWidget* p, ADVSequenceObjectContext* _ctx)
       featureFlags(GSLV_FF_SupportsCustomRange),
       frameView(NULL),
       coherentRangeView(NULL),
-      ignoreMouseSelectionEvents(false)
+      ignoreMouseSelectionEvents(false),
+      singleBaseSelection(false)
 {
     GCOUNTER( cvar, tvar, "SequenceLineView" );
     seqLen = ctx->getSequenceLength();
@@ -188,13 +189,13 @@ void GSequenceLineView::mouseReleaseEvent(QMouseEvent* me) {
     if (!ignoreMouseSelectionEvents) {
         //click with 'alt' selects a single base
         Qt::KeyboardModifiers km = QApplication::keyboardModifiers();
-        bool singleBaseSelectionMode = km.testFlag(Qt::AltModifier);
+        bool singleBaseSelectionMode = km.testFlag(Qt::AltModifier) || singleBaseSelection;
         if (me->button() == Qt::LeftButton && singleBaseSelectionMode) {
             QPoint areaPoint = toRenderAreaPoint(me->pos());
             qint64 pos = renderArea->coordToPos(areaPoint);
             if (pos == lastPressPos) {
                 U2Region rgn(pos, 1);
-                if (rgn.startPos >=0 && rgn.endPos() <= seqLen) {
+                if (rgn.startPos >= 0 && rgn.endPos() <= seqLen) {
                     setSelection(rgn);
                 }
             }
@@ -536,12 +537,13 @@ void GSequenceLineViewRenderArea::drawFrame(QPainter& p) {
 
 
 void GSequenceLineViewRenderArea::paintEvent(QPaintEvent *e) {
-    QSize cachedViewSize = cachedView->size();
-    QSize currentSize = size();
+    QSize cachedViewSize = cachedView->size() * devicePixelRatio();
+    QSize currentSize = size() * devicePixelRatio();
     if (cachedViewSize != currentSize) {
         view->addUpdateFlags(GSLV_UF_NeedCompleteRedraw);
         delete cachedView;
         cachedView = new QPixmap(currentSize);
+        cachedView->setDevicePixelRatio(devicePixelRatio());
     }
 
     drawAll(this);
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
index fa69c01..f1f5913 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,27 +26,27 @@
 
 #include <U2Gui/WidgetWithLocalToolbar.h>
 
-#include <QtCore/QFlag>
+#include <QFlag>
 #include <QHBoxLayout>
 #include <QMenu>
 #include <QWidget>
 #include <QToolButton>
 
-#include <QtGui/QMouseEvent>
-#include <QtGui/QWheelEvent>
-#include <QtGui/QFocusEvent>
-#include <QtGui/QPainter>
+#include <QMouseEvent>
+#include <QWheelEvent>
+#include <QFocusEvent>
+#include <QPainter>
 
 
 namespace U2 {
 
-class GSequenceLineViewRenderArea;
 class DNASequenceSelection;
 class LRegionsSelection;
 class GScrollBar;
-class ADVSequenceObjectContext;
-class GObjectViewOpConstraints;
+class GSequenceLineViewRenderArea;
 class GObject;
+class GObjectViewOpConstraints;
+class SequenceObjectContext;
 class U2SequenceObject;
 
 enum GSLV_UpdateFlag {
@@ -70,11 +70,11 @@ typedef QFlags<GSLV_FeatureFlag> GSLV_FeatureFlags;
 class U2VIEW_EXPORT GSequenceLineView : public WidgetWithLocalToolbar {
     Q_OBJECT
 public:
-    GSequenceLineView(QWidget* p, ADVSequenceObjectContext* ctx);
+    GSequenceLineView(QWidget* p, SequenceObjectContext* ctx);
 
     const U2Region& getVisibleRange() const {return visibleRange;}
 
-    ADVSequenceObjectContext* getSequenceContext() const {return ctx;}
+    SequenceObjectContext* getSequenceContext() const {return ctx;}
 
     GSequenceLineViewRenderArea* getRenderArea() const {return renderArea;}
 
@@ -149,7 +149,7 @@ protected slots:
 
 protected:
     QPoint toRenderAreaPoint(const QPoint& p);
-    void updateScrollBar();
+    virtual void updateScrollBar();
     void setSelection(const U2Region& r);
     void addSelection(const U2Region& r);
     void removeSelection(const U2Region& r);
@@ -157,7 +157,7 @@ protected:
     virtual int getSingleStep() const;
     virtual int getPageStep() const;
 
-    ADVSequenceObjectContext*       ctx;
+    SequenceObjectContext*          ctx;
     GSequenceLineViewRenderArea*    renderArea;
     U2Region                        visibleRange;
     GScrollBar*                     scrollBar;
@@ -167,11 +167,12 @@ protected:
     GSLV_FeatureFlags               featureFlags;
     GSequenceLineView*              frameView;
     GSequenceLineView*              coherentRangeView;
-    double coefScrollBarMapping;
+    double                          coefScrollBarMapping;
 
     // special flag setup by child classes that tells to this class do or skip
     // any changes to selection on mouse ops
     bool                            ignoreMouseSelectionEvents;
+    bool                            singleBaseSelection;
 };
 
 class U2VIEW_EXPORT GSequenceLineViewRenderArea : public QWidget  {
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
index f555fa3..366ea7c 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,7 +46,7 @@
 
 namespace U2 {
 
-GSequenceLineViewAnnotated::GSequenceLineViewAnnotated(QWidget* p, ADVSequenceObjectContext* ctx)
+GSequenceLineViewAnnotated::GSequenceLineViewAnnotated(QWidget* p, SequenceObjectContext* ctx)
     : GSequenceLineView(p, ctx)
 {
     const QSet<AnnotationTableObject*> aObjs = ctx->getAnnotationObjects(true);
diff --git a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
index 945ba27..5197323 100644
--- a/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
+++ b/src/corelibs/U2View/src/ov_sequence/GSequenceLineViewAnnotated.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ class U2VIEW_EXPORT GSequenceLineViewAnnotated : public GSequenceLineView {
     Q_OBJECT
 public:
 
-                                            GSequenceLineViewAnnotated(QWidget *p, ADVSequenceObjectContext *ctx);
+                                            GSequenceLineViewAnnotated(QWidget *p, SequenceObjectContext *ctx);
 
     bool                                    isAnnotationVisible(Annotation *a) const;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.cpp b/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.cpp
index 6f600ef..72ec132 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.h b/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.h
index ec26e9c..eb93c7f 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.h
+++ b/src/corelibs/U2View/src/ov_sequence/GraphLabelModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
index 020b79e..9edabf2 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,23 +22,13 @@
 #include <U2Core/U2SafePoints.h>
 #include "ADVGraphModel.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QPushButton>
-#include <QtGui/QSpinBox>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QCheckBox>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QLabel>
+#include <QPushButton>
+#include <QSpinBox>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QCheckBox>
+#include <QMessageBox>
 #include <U2Gui/HelpButton.h>
 
 #include "GraphLabelsSelectDialog.h"
@@ -71,7 +61,7 @@ GraphLabelsSelectDialog::GraphLabelsSelectDialog(int maxWindowSize, QWidget* par
     QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
     QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
 
-    new HelpButton(this, buttonBox, "18223031");
+    new HelpButton(this, buttonBox, "20874935");
 
     mainLayout->addLayout(spinLayout);
     mainLayout->addWidget(usedIntervalsCheck);
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.h b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.h
index b505cb0..d0f3396 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.h
+++ b/src/corelibs/U2View/src/ov_sequence/GraphLabelsSelectDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,8 @@
 #define _U2_GRAPH_LABELS_SELECT_DIALOG_H_
 
 #include <U2Core/U2Region.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
-class GSequenceGraphDrawer;
 class QSpinBox;
 class QCheckBox;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphMenu.cpp b/src/corelibs/U2View/src/ov_sequence/GraphMenu.cpp
index 80d9d77..9a6f72d 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphMenu.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphMenu.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/L10n.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/DNAAlphabet.h>
 
 #include <U2Gui/GUIUtils.h>
 
@@ -113,14 +114,20 @@ const QString GraphMenuAction::ACTION_NAME("GraphMenuAction");
 /**
  * Creates a new graphs menu and adds it to toolbar
  */
-GraphMenuAction::GraphMenuAction() : ADVSequenceWidgetAction(ACTION_NAME, tr("Graphs")) {
+GraphMenuAction::GraphMenuAction(const DNAAlphabet* a) : ADVSequenceWidgetAction(ACTION_NAME, tr("Graphs")) {
     menu = new QMenu();
     this->setIcon(QIcon(":core/images/graphs.png"));
     this->setMenu(menu);
     addToBar = true;
+    
+    separator = menu->addSeparator();
+    
+    QAction* closeAllAction = new QAction(GraphMenuAction::tr("Close all graphs"), this);
+    menu->addAction(closeAllAction);
+    connect(closeAllAction, SIGNAL(triggered()), this, SLOT(sl_closeAllGraphs()));
+    setVisible(a->isNucleic());
 }
 
-
 /**
  * Searches for the graphs menu for the sequence
  *
@@ -153,9 +160,19 @@ void GraphMenuAction::addGraphAction(ADVSequenceObjectContext* ctx, GraphAction*
     SAFE_POINT(graphMenuAction, "GraphMenuAction is not available (while adding a new action)!",);
 
     action->setParent(graphMenuAction);
-    graphMenuAction->menu->addAction(action);
+    graphMenuAction->menu->insertAction(graphMenuAction->separator, action);
     action->setCheckable(true);
 }
 
+void GraphMenuAction::sl_closeAllGraphs() {
+    QList<QAction*> allActions = menu->actions();
+    foreach (QAction* a, allActions) {
+        GraphAction* graphAction = qobject_cast<GraphAction*>(a);
+        if (graphAction != NULL && graphAction->isChecked()) {
+            graphAction->trigger();
+        }
+    }    
+}
+
 
 }//namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphMenu.h b/src/corelibs/U2View/src/ov_sequence/GraphMenu.h
index ff8321e..ca43097 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphMenu.h
+++ b/src/corelibs/U2View/src/ov_sequence/GraphMenu.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,6 +31,7 @@
 
 namespace U2 {
 
+class DNAAlphabet;
 
 /**
  * Action for drawing a graph
@@ -61,12 +62,14 @@ class U2VIEW_EXPORT GraphMenuAction : public ADVSequenceWidgetAction
 {
     Q_OBJECT
 public:
-    GraphMenuAction();
+    GraphMenuAction(const DNAAlphabet* a);
     static void addGraphAction(ADVSequenceObjectContext*, GraphAction*);
-
+public slots:
+    void sl_closeAllGraphs();
 private:
     static const QString ACTION_NAME;
     QMenu* menu;
+    QAction* separator;
 
     static GraphMenuAction* findGraphMenuAction(ADVSequenceObjectContext*);
 };
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
index e286410..9866672 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,9 @@
  */
 
 #include <QColorDialog>
+#include <QProxyStyle>
 #include <QHBoxLayout>
+#include <QStyleFactory>
 #include <QLabel>
 #include <QMessageBox>
 #include <QPushButton>
@@ -39,43 +41,50 @@
 
 namespace U2 {
 
+namespace {
+
+void setButtonColor(QPushButton *button, const QColor &color) {
+    QPalette palette = button->palette();
+    palette.setColor(button->backgroundRole(), color);
+    button->setPalette(palette);
+}
+
+}
+
 GraphSettingsDialog::GraphSettingsDialog( GSequenceGraphDrawer* d, const U2Region& range, QWidget* parent )
 :QDialog(parent), colorMap(d->getColors())
 {
-
     const GSequenceGraphWindowData& windowData = d->getWindowData();
     const GSequenceGraphMinMaxCutOffData& cutOffData = d->getCutOffData();
     wss = new WindowStepSelectorWidget(this, range, windowData.window, windowData.step);
     mms = new MinMaxSelectorWidget(this, cutOffData.minEdge, cutOffData.maxEdge, cutOffData.enableCuttoff);
-    QVBoxLayout* l = new QVBoxLayout();
-    QHBoxLayout* buttonsLayout = new QHBoxLayout();
-    buttonsLayout->addStretch(10);
-
-    QList<QHBoxLayout*> cLayouts;
+    
+    QFormLayout* form = wss->getFormLayout();
     foreach(const QString& key, colorMap.keys()) {
-        QLabel* defaultColorName = new QLabel(QString("%1:").arg(key));
         QPushButton* colorChangeButton = new QPushButton();
         colorChangeButton->setObjectName(key);
-        colorChangeButton->setFixedSize(QSize(25,25));
         connect(colorChangeButton, SIGNAL(clicked()), SLOT(sl_onPickColorButtonClicked()));
         QColor color = colorMap.value(key);
-        colorChangeButton->setStyleSheet(QString(BACKGROUND_COLOR).arg(color.name()));
-        QHBoxLayout* cl = new QHBoxLayout();
-        cl->addSpacerItem(new QSpacerItem(50,25, QSizePolicy::Expanding));
-        cl->addWidget(defaultColorName);
-        cl->addWidget(colorChangeButton);
-        cl->addSpacerItem(new QSpacerItem(50,25, QSizePolicy::Expanding));
-        cLayouts.append(cl);
+
+        QStyle *buttonStyle = new QProxyStyle(QStyleFactory::create("fusion"));
+        buttonStyle->setParent(this);
+        colorChangeButton->setStyle(buttonStyle);
+
+        setButtonColor(colorChangeButton, color);
+
+        form->addRow(QString("%1:").arg(key), colorChangeButton);
     }
+    
     QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
     buttonBox->setObjectName("buttonBox");
 
+    QHBoxLayout* buttonsLayout = new QHBoxLayout();
+    buttonsLayout->addStretch(10);
     buttonsLayout->addWidget(buttonBox);
 
+    QVBoxLayout* l = new QVBoxLayout();
+    l->setSizeConstraint(QLayout::SetFixedSize);
     l->addWidget(wss);
-    foreach(QLayout* cl, cLayouts) {
-        l->addLayout(cl);
-    }
     l->addWidget(mms);
     l->addLayout(buttonsLayout);
 
@@ -83,12 +92,9 @@ GraphSettingsDialog::GraphSettingsDialog( GSequenceGraphDrawer* d, const U2Regio
     setWindowTitle(tr("Graph Settings"));
     setWindowIcon(QIcon(":core/images/graphs.png"));
 
-    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-    setMinimumWidth(200);
-
     QPushButton* okButton = buttonBox->button(QDialogButtonBox::Ok);
     QPushButton* cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
-    new HelpButton(this, buttonBox, "18223033");
+    new HelpButton(this, buttonBox, "20874937");
 
     connect(cancelButton, SIGNAL(clicked()), SLOT(sl_onCancelClicked()));
     connect(okButton, SIGNAL(clicked()), SLOT(sl_onOkClicked()));
@@ -113,7 +119,7 @@ void GraphSettingsDialog::sl_onPickColorButtonClicked()
     if (CD->result() == QDialog::Accepted){
         QColor newColor = CD->selectedColor();
         colorMap[colorName] = newColor;
-        colorButton->setStyleSheet(QString(BACKGROUND_COLOR).arg(newColor.name()));
+        setButtonColor(colorButton, newColor);
     }
 }
 
diff --git a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.h b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.h
index ffcb115..9f9a409 100644
--- a/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.h
+++ b/src/corelibs/U2View/src/ov_sequence/GraphSettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,12 +21,10 @@
 #ifndef _U2_GRAPH_SETTINGS_DIALOG_H_
 #define _U2_GRAPH_SETTINGS_DIALOG_H_
 
+#include <QDialog>
+#include <QMap>
+
 #include <U2Core/U2Region.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
 
 namespace U2{
 
diff --git a/src/corelibs/U2View/src/ov_sequence/Overview.cpp b/src/corelibs/U2View/src/ov_sequence/Overview.cpp
index 3a62073..313f885 100644
--- a/src/corelibs/U2View/src/ov_sequence/Overview.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/Overview.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -415,7 +415,7 @@ int OverviewRenderArea::getAnnotationDensity (int pos) const {
 
 void OverviewRenderArea::setAnnotationsOnPos() {
     annotationsOnPos.clear();
-    const ADVSequenceObjectContext *ctx = view->getSequenceContext();
+    const SequenceObjectContext *ctx = view->getSequenceContext();
     const qint64 len = ctx->getSequenceLength();
     annotationsOnPos.resize(len);
 
diff --git a/src/corelibs/U2View/src/ov_sequence/Overview.h b/src/corelibs/U2View/src/ov_sequence/Overview.h
index c48b8f4..8ba22f2 100644
--- a/src/corelibs/U2View/src/ov_sequence/Overview.h
+++ b/src/corelibs/U2View/src/ov_sequence/Overview.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_OVERVIEW_H_
 #define _U2_OVERVIEW_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QToolButton>
-#endif
+#include <QToolButton>
 
 #include <U2Core/Annotation.h>
 #include <U2Core/AnnotationGroup.h>
diff --git a/src/corelibs/U2View/src/ov_sequence/PanView.cpp b/src/corelibs/U2View/src/ov_sequence/PanView.cpp
index 6781dd8..1c3879c 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanView.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/PanView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,6 @@
 #include "ADVSequenceObjectContext.h"
 #include "ADVSingleSequenceWidget.h"
 #include "PanViewRows.h"
-#include "view_rendering/PanViewRenderer.h"
 
 #include <U2Core/AnnotationModification.h>
 #include <U2Core/AnnotationSettings.h>
@@ -141,15 +140,14 @@ void PanView::ZoomUseObject::releaseZoom() {
 }
 
 #define MAX_VISIBLE_ROWS_ON_START 10
-PanView::PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx)
-    : GSequenceLineViewAnnotated(p, ctx),
-    seqWidget(p)
+PanView::PanView(QWidget* p, SequenceObjectContext* ctx, const PanViewRenderAreaFactory &renderFactory)
+    : GSequenceLineViewAnnotated(p, ctx)
 {
     rowBar = new QScrollBar(this);
-
+    setObjectName("pan_view");
     settings = new PanViewLinesSettings();
     rowsManager = new PVRowsManager();
-    renderArea = new PanViewRenderArea(this);
+    renderArea = renderFactory.createRenderArea(this);
 
     updateNumVisibleRows();
 
@@ -216,7 +214,7 @@ void PanView::pack() {
     layout->setMargin(0);
     layout->setSpacing(0);
     layout->addWidget(renderArea, 0, 0, 1, 1);
-    layout->addWidget(rowBar, 0, 1, 2, 1);
+    layout->addWidget(rowBar, 0, 1, 1, 1);
     layout->addWidget(scrollBar, 1, 0, 1, 1);
     setContentLayout(layout);
 }
@@ -495,7 +493,7 @@ void PanView::setNumBasesVisible(qint64 n) {
 }
 
 PanViewRenderArea* PanView::getRenderArea() const {
-    return static_cast<PanViewRenderArea*>(renderArea);
+    return qobject_cast<PanViewRenderArea*>(renderArea);
 }
 
 QList<RulerInfo> PanView::getCustomRulers() const {
@@ -594,8 +592,12 @@ void PanView::sl_updateRows(){
 
 //////////////////////////////////////////////////////////////////////////
 /// render
-PanViewRenderArea::PanViewRenderArea(PanView* d) : GSequenceLineViewAnnotatedRenderArea(d, false), panView(d) {
-    renderer = new PanViewRenderer(d, d->getSequenceContext());
+PanViewRenderArea::PanViewRenderArea(PanView* d, PanViewRenderer *renderer)
+    : GSequenceLineViewAnnotatedRenderArea(d, false),
+      panView(d),
+      renderer(renderer)
+{
+    SAFE_POINT(NULL != renderer, "Renderer is NULL", );
 }
 
 PanViewRenderArea::~PanViewRenderArea() {
@@ -617,12 +619,13 @@ void PanViewRenderArea::drawAll(QPaintDevice* pd) {
 
     p.drawPixmap(0, 0, *cachedView);
 
-    ADVSingleSequenceWidget* ssw = panView->seqWidget;
-    SAFE_POINT(ssw != NULL, "ADVSingleSequenceWidget is NULL", );
-    if (!ssw->isOverviewCollapsed()) {
-        //! VIEW_RENDERER_REFACTORING: consider to move frame drawing to renderer
-        drawFrame(p);
-    }
+    // SANGER_TODO: should not be this kind of connection
+//    ADVSingleSequenceWidget* ssw = panView->seqWidget;
+//    SAFE_POINT(ssw != NULL, "ADVSingleSequenceWidget is NULL", );
+//    if (!ssw->isOverviewCollapsed()) {
+//        //! VIEW_RENDERER_REFACTORING: consider to move frame drawing to renderer
+//        drawFrame(p);
+//    }
 
     renderer->drawSelection(p, QSize(pd->width(), pd->height()), view->getVisibleRange());
 
@@ -641,6 +644,12 @@ int PanViewRenderArea::getRowLineHeight() const {
     return renderer->getRowLineHeight();
 }
 
+void PanViewRenderArea::setRenderer(PanViewRenderer *newRenderer) {
+    SAFE_POINT(NULL != newRenderer, "New renderer is NULL", );
+    delete renderer;
+    renderer = newRenderer;
+}
+
 bool PanViewRenderArea::isSequenceCharsVisible() const {
     return getCurrentScale() >= smallCharWidth;
 }
diff --git a/src/corelibs/U2View/src/ov_sequence/PanView.h b/src/corelibs/U2View/src/ov_sequence/PanView.h
index e7b93d6..657914e 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanView.h
+++ b/src/corelibs/U2View/src/ov_sequence/PanView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@
 #include <U2Gui/GraphUtils.h>
 
 #include "GSequenceLineViewAnnotated.h"
+#include "view_rendering/PanViewRenderer.h"
 
 namespace U2 {
 
@@ -41,8 +42,6 @@ class GObjectView;
 class PVRowsManager;
 class ADVSingleSequenceWidget;
 class PVRowData;
-class PanViewRenderer;
-
 
 class RulerInfo {
 public:
@@ -98,7 +97,7 @@ public:
         PanView *panView;
     };
 
-    PanView(ADVSingleSequenceWidget* p, ADVSequenceObjectContext* ctx);
+    PanView(QWidget* p, SequenceObjectContext* ctx, const PanViewRenderAreaFactory &rendererFactory = PanViewRenderAreaFactory());
     ~PanView();
 
     const U2Region& getFrameRange() const {return frameView->getVisibleRange();}
@@ -149,6 +148,7 @@ protected:
     virtual void registerAnnotations(const QList<Annotation *> &l);
     virtual void unregisterAnnotations(const QList<Annotation *> &l);
     virtual void ensureVisible(Annotation *a, int locationIdx);
+
 protected slots:
     virtual void sl_sequenceChanged();
     void sl_onAnnotationsModified(const AnnotationModification& md);
@@ -190,7 +190,7 @@ public:
 
     PanViewRenderArea* getRenderArea() const;
 
-    U2Region             frameRange;
+    U2Region            frameRange;
     int                 minNuclsPerScreen;
 
     QAction*            zoomInAction;
@@ -207,8 +207,6 @@ public:
     PanViewLinesSettings*     settings;
 
     int zoomUsing;
-
-    ADVSingleSequenceWidget*    seqWidget;
 };
 
 
@@ -216,7 +214,7 @@ class PanViewRenderArea : public GSequenceLineViewAnnotatedRenderArea {
     friend class PanView;
     Q_OBJECT
 public:
-    PanViewRenderArea(PanView* d);
+    PanViewRenderArea(PanView *d, PanViewRenderer *renderer);
     ~PanViewRenderArea();
 
     PanViewRenderer* getRenderer() { return renderer; }
@@ -225,6 +223,8 @@ public:
 
     int getRowLineHeight() const;
 
+    void setRenderer(PanViewRenderer *renderer);
+
 protected:
     virtual void drawAll(QPaintDevice* pd);
 
diff --git a/src/corelibs/U2View/src/ov_sequence/PanViewRows.cpp b/src/corelibs/U2View/src/ov_sequence/PanViewRows.cpp
index 9d6d44f..58af529 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanViewRows.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/PanViewRows.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QVarLengthArray>
+#include <QVarLengthArray>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/corelibs/U2View/src/ov_sequence/PanViewRows.h b/src/corelibs/U2View/src/ov_sequence/PanViewRows.h
index dfaa413..a4f2c82 100644
--- a/src/corelibs/U2View/src/ov_sequence/PanViewRows.h
+++ b/src/corelibs/U2View/src/ov_sequence/PanViewRows.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui
index 86600fb..bf9609c 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialog.ui
@@ -164,6 +164,12 @@
    </item>
   </layout>
  </widget>
+ <tabstops>
+  <tabstop>maxCutoffBox</tabstop>
+  <tabstop>minCutoffBox</tabstop>
+  <tabstop>outsideRadioButton</tabstop>
+  <tabstop>betweenRadioButton</tabstop>
+ </tabstops>
  <resources/>
  <connections>
   <connection>
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
index 3aa5ec0..2f6a514 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,16 +31,24 @@
 #include <U2Gui/HelpButton.h>
 
 #include <U2View/ADVAnnotationCreation.h>
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
 
 #include "SaveGraphCutoffsDialogController.h"
 
 namespace U2{
 
-SaveGraphCutoffsDialogController::SaveGraphCutoffsDialogController(GSequenceGraphDrawer *_d, QSharedPointer<GSequenceGraphData>& _gd, QWidget *parent, ADVSequenceObjectContext* _ctx)
-    :QDialog(parent), ctx(_ctx), d(_d), gd(_gd)
+SaveGraphCutoffsDialogController::SaveGraphCutoffsDialogController(GSequenceGraphDrawer *_d,
+                                                                   QSharedPointer<GSequenceGraphData>& _gd,
+                                                                   QWidget *parent,
+                                                                   SequenceObjectContext* ctx)
+    : QDialog(parent),
+      ctx(ctx),
+      d(_d),
+      gd(_gd)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223034");
+    new HelpButton(this, buttonBox, "20874938");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -134,6 +142,7 @@ void SaveGraphCutoffsDialogController::accept(){
         data.append(d);
     }
     AnnotationTableObject *aobj = mm.getAnnotationObject();
+    tryAddObject(aobj);
     Task *t  = new CreateAnnotationsTask(aobj, data, mm.groupName);
     AppContext::getTaskScheduler()->registerTopLevelTask(t) ;
     QDialog::accept();
@@ -159,4 +168,10 @@ bool SaveGraphCutoffsDialogController::validate(){
     return true;
 }
 
+void SaveGraphCutoffsDialogController::tryAddObject(AnnotationTableObject *annotationTableObject) {
+    ADVSequenceObjectContext *advContext = qobject_cast<ADVSequenceObjectContext *>(ctx);
+    CHECK(NULL != advContext, );
+    advContext->getAnnotatedDNAView()->tryAddObject(annotationTableObject);
+}
+
 }
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
index 841217a..0456f04 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,26 +25,30 @@
 #include <ui_SaveGraphCutoffsDialog.h>
 
 #include <U2View/ADVGraphModel.h>
-#include <U2View/ADVSequenceObjectContext.h>
 
 #include <U2Gui/CreateAnnotationWidgetController.h>
 
 namespace U2 {
 
+class SequenceObjectContext;
 class SaveGraphCutoffsDialogController : public QDialog, Ui_SaveGraphCutoffsDialog {
     Q_OBJECT
 public:
-    SaveGraphCutoffsDialogController(GSequenceGraphDrawer *_d, QSharedPointer<GSequenceGraphData>& _gd, QWidget *parent, ADVSequenceObjectContext* _ctx);
+    SaveGraphCutoffsDialogController(GSequenceGraphDrawer *d,
+                                     QSharedPointer<GSequenceGraphData>& gd,
+                                     QWidget *parent,
+                                     SequenceObjectContext* ctx);
 
     virtual void accept();
 private:
     inline bool isAcceptableValue(float val);
     bool validate();
+    void tryAddObject(AnnotationTableObject *annotationTableObject);
 
     CreateAnnotationWidgetController*   ac;
-    ADVSequenceObjectContext*           ctx;
+    SequenceObjectContext*              ctx;
     GSequenceGraphDrawer*               d;
-    QSharedPointer<GSequenceGraphData> gd;
+    QSharedPointer<GSequenceGraphData>  gd;
     QList<U2Region>                     resultRegions;
 };
 
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.cpp b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.cpp
index 7fbdf56..744437f 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.h b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.h
index bd11112..dc6c0e3 100644
--- a/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/SaveGraphCutoffsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
index 06625da..fc4fbc5 100644
--- a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,7 +44,7 @@ SearchQualifierDialog::SearchQualifierDialog(QWidget* p, AnnotationsTreeView *tr
     indexOfPrevResult(-1)
 {
      ui->setupUi(this);
-     new HelpButton(this, ui->buttonBox, "18223007");
+     new HelpButton(this, ui->buttonBox, "20874911");
      ui->buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Select all"));
      ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
      ui->buttonBox->button(QDialogButtonBox::Close)->setText(tr("Close"));
diff --git a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.h b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.h
index fc96372..c512369 100644
--- a/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.h
+++ b/src/corelibs/U2View/src/ov_sequence/SearchQualifierDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.cpp b/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.cpp
new file mode 100644
index 0000000..28e5dd8
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.cpp
@@ -0,0 +1,384 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SequenceObjectContext.h"
+
+#include "AnnotatedDNAView.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/GHints.h>
+#include <U2Core/GObjectRelationRoles.h>
+#include <U2Core/GObjectUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Gui/MultiClickMenu.h>
+#include <U2View/CodonTable.h>
+
+
+namespace U2 {
+
+
+SequenceObjectContext::SequenceObjectContext (U2SequenceObject* obj, QObject* parent)
+    : QObject(parent),
+      seqObj(obj),
+      aminoTT(NULL),
+      complTT(NULL),
+      selection(NULL),
+      translations(NULL),
+      visibleFrames(NULL),
+      rowChoosed(false)
+{
+    selection = new DNASequenceSelection(seqObj, this);
+    clarifyAminoTT = false;
+    const DNAAlphabet* al  = getAlphabet();
+    if (al->isNucleic()) {
+        DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
+        complTT = GObjectUtils::findComplementTT(seqObj->getAlphabet());
+        aminoTT = GObjectUtils::findAminoTT(seqObj, true);
+        clarifyAminoTT = aminoTT == NULL;
+
+        QList<DNATranslation*> aminoTs = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO);
+        if (!aminoTs.empty()) {
+            aminoTT = aminoTT == NULL ? tr->getStandardGeneticCodeTranslation(al) : aminoTT;
+            translations = new QActionGroup(this);
+            foreach(DNATranslation* t, aminoTs) {
+                QAction* a = translations->addAction(t->getTranslationName());
+                a->setObjectName(t->getTranslationName());
+                a->setCheckable(true);
+                a->setChecked(aminoTT == t);
+                a->setData(QVariant(t->getTranslationId()));
+                connect(a, SIGNAL(triggered()), SLOT(sl_setAminoTranslation()));
+            }
+            visibleFrames = new QActionGroup(this);
+            visibleFrames->setExclusive(false);
+            for(int i = 0; i < 6; i++){
+                QAction* a;
+                if(i < 3){
+                    a = visibleFrames->addAction(QString("%1 direct translation frame").arg(i+1));
+                }else{
+                    a = visibleFrames->addAction(QString("%1 complementary translation frame").arg(i+1-3));
+                }
+                a->setCheckable(true);
+                a->setChecked(true);
+                //set row id
+                a->setData(i);
+                //save status
+                translationRowsStatus.append(a);
+                connect(a, SIGNAL(triggered()), SLOT(sl_toggleTranslations()));
+            }
+        }
+    }
+    annSelection = new AnnotationSelection(this);
+}
+
+void SequenceObjectContext::guessAminoTT(const AnnotationTableObject *ao) {
+    const DNAAlphabet *al  = getAlphabet();
+    SAFE_POINT(al->isNucleic(), "Unexpected DNA alphabet detected!",);
+    DNATranslation *res = NULL;
+    DNATranslationRegistry *tr = AppContext::getDNATranslationRegistry();
+    // try to guess relevant translation from a CDS feature (if any)
+    foreach (Annotation *ann, ao->getAnnotationsByName("CDS")) {
+        QList<U2Qualifier> ql;
+        ann->findQualifiers("transl_table", ql);
+        if (ql.size() > 0) {
+            QString guess = "NCBI-GenBank #"+ql.first().value;
+            res = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO, guess);
+            if (res !=NULL) {
+                break;
+            }
+        }
+    }
+    if (res != NULL) {
+        clarifyAminoTT = false;
+        setAminoTranslation(res->getTranslationId());
+    }
+}
+
+qint64 SequenceObjectContext::getSequenceLength() const {
+    return seqObj->getSequenceLength();
+}
+
+const DNAAlphabet* SequenceObjectContext::getAlphabet() const {
+    return seqObj->getAlphabet();
+}
+
+QByteArray SequenceObjectContext::getSequenceData(const U2Region &r, U2OpStatus &os) const {
+    return seqObj->getSequenceData(r, os);
+}
+
+U2EntityRef SequenceObjectContext::getSequenceRef() const {
+    return seqObj->getSequenceRef();
+}
+
+QList<GObject *> SequenceObjectContext::getAnnotationGObjects() const {
+    QList<GObject *> res;
+    foreach (AnnotationTableObject *ao, annotations) {
+        res.append(ao);
+    }
+    return res;
+}
+
+void SequenceObjectContext::sl_showDirectOnly(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowDirectTranslationsOnly" );
+    bool needUpdate = false;
+    QList<QAction*> actionList = visibleFrames->actions();
+    translationRowsStatus.clear();
+    int i = 0;
+    for(; i < 3; i++){
+        QAction *a = actionList[i];
+        if(!a->isChecked()){
+            needUpdate = true;
+            a->setChecked(true);
+            translationRowsStatus.append(a);
+        }
+    }
+    for(; i < 6; i++){
+        QAction *a = actionList[i];
+        if(a->isChecked()){
+            needUpdate = true;
+            a->setChecked(false);
+        }
+    }
+    if(needUpdate){
+        emit si_translationRowsChanged();
+    }
+}
+
+void SequenceObjectContext::sl_showComplOnly(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowComplementTranslationsOnly" );
+    bool needUpdate = false;
+    QList<QAction*> actionList = visibleFrames->actions();
+    translationRowsStatus.clear();
+    int i = 0;
+    for(; i < 3; i++){
+        QAction *a = actionList[i];
+        if(a->isChecked()){
+            needUpdate = true;
+            a->setChecked(false);
+        }
+    }
+    for(; i < 6; i++){
+        QAction *a = actionList[i];
+        if(!a->isChecked()){
+            needUpdate = true;
+            a->setChecked(true);
+            translationRowsStatus.append(a);
+        }
+    }
+    if(needUpdate){
+        emit si_translationRowsChanged();
+    }
+}
+
+void SequenceObjectContext::sl_showShowAll(){
+    GCOUNTER( cvar, tvar, "SequenceView::DetView::ShowAllTranslations" );
+    bool needUpdate = false;
+    translationRowsStatus.clear();
+    foreach(QAction* a, visibleFrames->actions()){
+        if(!a->isChecked()) {
+            needUpdate = true;
+            a->setChecked(true);
+            translationRowsStatus.append(a);
+        }
+    }
+    if(needUpdate){
+        emit si_translationRowsChanged();
+    }
+}
+
+void SequenceObjectContext::sl_onAnnotationRelationChange() {
+    AnnotationTableObject* obj = qobject_cast<AnnotationTableObject*>(sender());
+    SAFE_POINT(obj != NULL, tr("Incorrect signal sender!"),);
+
+    if (!obj->hasObjectRelation(seqObj, ObjectRole_Sequence)) {
+        disconnect(obj, SIGNAL(si_relationChanged()), this, SLOT(sl_onAnnotationRelationChange()));
+    }
+}
+
+QMenu * SequenceObjectContext::createGeneticCodeMenu() {
+    CHECK(NULL != translations, NULL);
+    QMenu *menu = new QMenu(tr("Select genetic code"));
+    menu->setIcon(QIcon(":core/images/tt_switch.png"));
+    menu->menuAction()->setObjectName("AminoTranslationAction");
+
+    foreach (QAction *a, translations->actions()) {
+        menu->addAction(a);
+    }
+    return menu;
+}
+
+QMenu * SequenceObjectContext::createTranslationFramesMenu(QAction *showTranslationAction) {
+    SAFE_POINT(visibleFrames != NULL, "SequenceObjectContext: visibleFrames is NULL ?!", NULL);
+    QMenu *menu = new QMenu(tr("Show/hide amino acid translations"));
+    menu->setIcon(QIcon(":core/images/show_trans.png"));
+    menu->menuAction()->setObjectName("Translation frames");
+    new MultiClickMenu(menu);
+
+    menu->addAction(showTranslationAction);
+    menu->addSeparator();
+
+    menu->addAction(tr("Show direct only"), this, SLOT(sl_showDirectOnly()));
+    menu->addAction(tr("Show complementary only"), this, SLOT(sl_showComplOnly()));
+    menu->addAction(tr("Show all"), this, SLOT(sl_showShowAll()));
+    menu->addSeparator();
+
+    foreach(QAction* a, visibleFrames->actions()) {
+        menu->addAction(a);
+    }
+    return menu;
+}
+
+void SequenceObjectContext::setAminoTranslation(const QString& tid) {
+    const DNAAlphabet* al = getAlphabet();
+    DNATranslation* aTT = AppContext::getDNATranslationRegistry()->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO, tid);
+    assert(aTT!=NULL);
+    if (aTT == aminoTT) {
+        return;
+    }
+    aminoTT = aTT;
+    foreach(QAction* a, translations->actions()) {
+        if (a->data().toString() == tid) {
+            a->setChecked(true);
+            break;
+        }
+    }
+    seqObj->getGHints()->set(AMINO_TT_GOBJECT_HINT, tid);
+    emit si_aminoTranslationChanged();
+}
+
+void SequenceObjectContext::sl_setAminoTranslation() {
+    GCOUNTER( cvar, tvar, "DetView_SetAminoTranslation" );
+    QAction* a = qobject_cast<QAction*>(sender());
+    QString tid = a->data().toString();
+    setAminoTranslation(tid);
+}
+
+AnnotationSelection* SequenceObjectContext::getAnnotationsSelection() const {
+    return annSelection;
+}
+
+void SequenceObjectContext::removeSequenceWidget(ADVSequenceWidget* w) {
+    assert(seqWidgets.contains(w));
+    seqWidgets.removeOne(w);
+}
+
+void SequenceObjectContext::addSequenceWidget(ADVSequenceWidget* w) {
+    assert(!seqWidgets.contains(w));
+    seqWidgets.append(w);
+}
+
+void SequenceObjectContext::addAnnotationObject(AnnotationTableObject *obj) {
+    SAFE_POINT(!annotations.contains(obj), "Unexpected annotation table!",);
+    SAFE_POINT(obj->hasObjectRelation(seqObj, ObjectRole_Sequence), "Annotation table relates to unexpected sequence!",);
+    connect(obj, SIGNAL(si_relationChanged()), SLOT(sl_onAnnotationRelationChange()));
+    annotations.insert(obj);
+    emit si_annotationObjectAdded(obj);
+    if (clarifyAminoTT) {
+        guessAminoTT(obj);
+    }
+}
+
+void SequenceObjectContext::removeAnnotationObject(AnnotationTableObject *obj) {
+    SAFE_POINT(annotations.contains(obj), "Unexpected annotation table!",);
+    annotations.remove(obj);
+    emit si_annotationObjectRemoved(obj);
+}
+
+QList<Annotation *> SequenceObjectContext::selectRelatedAnnotations(const QList<Annotation *> &alist) const {
+    QList<Annotation *> res;
+    foreach (Annotation *a, alist) {
+        AnnotationTableObject* o = a->getGObject();
+        if (annotations.contains(o) || autoAnnotations.contains(o)) {
+            res.append(a);
+        }
+    }
+    return res;
+}
+
+GObject * SequenceObjectContext::getSequenceGObject() const {
+    return seqObj;
+}
+
+void SequenceObjectContext::addAutoAnnotationObject(AnnotationTableObject *obj) {
+    autoAnnotations.insert(obj);
+    emit si_annotationObjectAdded(obj);
+}
+
+QSet<AnnotationTableObject *> SequenceObjectContext::getAnnotationObjects(
+    bool includeAutoAnnotations) const
+{
+    QSet<AnnotationTableObject *> result = annotations;
+    if (includeAutoAnnotations) {
+        result += autoAnnotations;
+    }
+
+    return result;
+}
+
+void SequenceObjectContext::sl_toggleTranslations(){
+    translationRowsStatus.clear();
+    rowChoosed = true;
+    emit si_translationRowsChanged();
+    rowChoosed = false;
+}
+
+bool SequenceObjectContext::isRowChoosed(){
+    return rowChoosed;
+}
+
+QVector<bool> SequenceObjectContext::getTranslationRowsVisibleStatus(){
+    QVector<bool> result;
+    if (visibleFrames != NULL) {
+        foreach(QAction* a, visibleFrames->actions()) {
+            result.append(a->isChecked());
+        }
+    }
+    return result;
+}
+void SequenceObjectContext::setTranslationsVisible(bool enable){
+    bool needUpdate = false;
+    if(!enable){
+        translationRowsStatus.clear();
+    }
+    foreach(QAction* a, visibleFrames->actions()){
+        if(!enable){//hide
+            if(a->isChecked()) {
+                needUpdate = true;
+                a->setChecked(false);
+                translationRowsStatus.append(a);
+            }
+        }else{//show
+            if(!a->isChecked() && (translationRowsStatus.contains(a) || translationRowsStatus.isEmpty())) {
+                needUpdate = true;
+                a->setChecked(true);
+            }
+        }
+    }
+    if(needUpdate){
+        emit si_translationRowsChanged();
+    }
+}
+
+} // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.h b/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.h
new file mode 100644
index 0000000..13f42eb
--- /dev/null
+++ b/src/corelibs/U2View/src/ov_sequence/SequenceObjectContext.h
@@ -0,0 +1,122 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_OBJECT_CONTEXT_H_
+#define _U2_SEQUENCE_OBJECT_CONTEXT_H_
+
+#include <U2Core/AnnotationTableObject.h>
+#include <U2Core/global.h>
+
+#include <QMenu>
+#include <QSet>
+
+
+namespace U2 {
+
+class AnnotatedDNAView;
+class U2SequenceObject;
+class DNAAlphabet;
+class DNATranslation;
+class DNASequenceSelection;
+class ADVSequenceWidget;
+class AnnotationSelection;
+class GObject;
+class Annotation;
+class U2Region;
+
+class U2VIEW_EXPORT SequenceObjectContext : public QObject {
+    Q_OBJECT
+public:
+    SequenceObjectContext(U2SequenceObject* obj, QObject* parent);
+
+    DNATranslation*     getComplementTT() const {return complTT;}
+    DNATranslation*     getAminoTT() const {return aminoTT;}
+    U2SequenceObject*   getSequenceObject() const {return seqObj;}
+    GObject*            getSequenceGObject() const;
+
+    qint64 getSequenceLength() const;
+    const DNAAlphabet* getAlphabet() const;
+    QByteArray getSequenceData(const U2Region &r, U2OpStatus &os) const;
+    U2EntityRef getSequenceRef() const;
+    bool        isRowChoosed();
+
+    DNASequenceSelection*   getSequenceSelection() const {return selection;}
+
+    QSet<AnnotationTableObject *> getAnnotationObjects(bool includeAutoAnnotations = false) const;
+    QSet<AnnotationTableObject *> getAutoAnnotationObjects() const { return autoAnnotations; }
+    QList<GObject*> getAnnotationGObjects() const;
+
+    QMenu * createGeneticCodeMenu();
+    QMenu * createTranslationFramesMenu(QAction *showTranslationAction);
+    void setAminoTranslation(const QString& tid);
+
+    void addAnnotationObject(AnnotationTableObject *obj);
+    void addAutoAnnotationObject(AnnotationTableObject *obj);
+    void removeAnnotationObject(AnnotationTableObject *obj);
+
+    // temporary virtual
+    virtual AnnotationSelection * getAnnotationsSelection() const;
+
+    const QList<ADVSequenceWidget*>& getSequenceWidgets() const {return seqWidgets;}
+    void addSequenceWidget(ADVSequenceWidget* w);
+    void removeSequenceWidget(ADVSequenceWidget* w);
+
+    QList<Annotation *> selectRelatedAnnotations(const QList<Annotation *> &alist) const;
+    QVector<bool> getTranslationRowsVisibleStatus();
+    void setTranslationsVisible(bool enable);
+private slots:
+    void sl_setAminoTranslation();
+    void sl_toggleTranslations();
+    void sl_showDirectOnly();
+    void sl_showComplOnly();
+    void sl_showShowAll();
+signals:
+    void si_aminoTranslationChanged();
+    void si_annotationObjectAdded(AnnotationTableObject *obj);
+    void si_annotationObjectRemoved(AnnotationTableObject *obj);
+    void si_translationRowsChanged();
+
+protected slots:
+    virtual void sl_onAnnotationRelationChange();
+
+protected:
+    void guessAminoTT(const AnnotationTableObject *ao);
+
+    U2SequenceObject*               seqObj;
+    DNATranslation*                 aminoTT;
+    DNATranslation*                 complTT;
+    DNASequenceSelection*           selection;
+    QActionGroup*                   translations;
+    QActionGroup*                   visibleFrames;
+    QVector<QAction*>               translationRowsStatus;
+    QList<ADVSequenceWidget*>       seqWidgets;
+    QSet<AnnotationTableObject *>   annotations;
+    QSet<AnnotationTableObject *>   autoAnnotations;
+    bool                            clarifyAminoTT;
+    bool                            rowChoosed;
+
+    // SANGER_TODO:
+    AnnotationSelection* annSelection;
+};
+
+} // namespace U2
+
+#endif // _U2_SEQUENCE_OBJECT_CONTEXT_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.cpp b/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.cpp
index 1a16e18..83f80fc 100644
--- a/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include "WindowStepSelectorWidget.h"
+#include <limits.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QFormLayout>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QFormLayout>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QPushButton>
+#include <QMessageBox>
+#include <QLineEdit>
 
-#include <limits.h>
+#include "WindowStepSelectorWidget.h"
 
 namespace U2 {
 
@@ -45,20 +39,20 @@ WindowStepSelectorWidget::WindowStepSelectorWidget(QWidget* p, const U2Region& w
     windowEdit = new QSpinBox(this);
     windowEdit->setRange(winRange.startPos, winRange.endPos());
     windowEdit->setValue(win);
-    windowEdit->setAlignment(Qt::AlignRight);
+    windowEdit->setAlignment(Qt::AlignLeft);
     windowEdit->setObjectName("windowEdit");
 
     stepsPerWindowEdit = new QSpinBox(this);
     stepsPerWindowEdit->setRange(1, winRange.endPos());
     stepsPerWindowEdit->setValue(win/step);
-    stepsPerWindowEdit->setAlignment(Qt::AlignRight);
+    stepsPerWindowEdit->setAlignment(Qt::AlignLeft);
     stepsPerWindowEdit->setObjectName("stepsPerWindowEdit");
 
-    QFormLayout* l = new QFormLayout(this);
-    l->addRow(tr("Window:"), windowEdit);
-    l->addRow(tr("Steps per window:"), stepsPerWindowEdit);
-    setLayout(l);
-
+    formLayout = new QFormLayout(this);
+    formLayout->setMargin(0);
+    formLayout->addRow(tr("Window"), windowEdit);
+    formLayout->addRow(tr("Steps per window"), stepsPerWindowEdit);
+    setLayout(formLayout);
 }
 
 int WindowStepSelectorWidget::getWindow() const {
@@ -88,6 +82,11 @@ QString WindowStepSelectorWidget::validate() const {
 //////////////////////////////////////////////////////////////////////////
 ///
 
+class MinMaxDoubleSpinBox : public QDoubleSpinBox {
+public:
+    QLineEdit* getLineEdit() const { return lineEdit();}
+};
+
 MinMaxSelectorWidget::MinMaxSelectorWidget(QWidget* p, double min, double max, bool enabled) {
     Q_UNUSED(p);
 
@@ -97,28 +96,36 @@ MinMaxSelectorWidget::MinMaxSelectorWidget(QWidget* p, double min, double max, b
     minmaxGroup->setObjectName("minmaxGroup");
 
     //for range use min max of type
-    minBox = new QDoubleSpinBox;
+    minBox = new MinMaxDoubleSpinBox;
     minBox->setRange(INT_MIN,INT_MAX );
     minBox->setValue(min);
     minBox->setDecimals(2);
-    minBox->setAlignment(Qt::AlignRight);
+    minBox->setAlignment(Qt::AlignLeft);
     minBox->setObjectName("minBox");
 
-    maxBox = new QDoubleSpinBox;
+    maxBox = new MinMaxDoubleSpinBox ;
     maxBox->setRange(INT_MIN,INT_MAX);
     maxBox->setValue(max);
     maxBox->setDecimals(2);
-    maxBox->setAlignment(Qt::AlignRight);
+    maxBox->setAlignment(Qt::AlignLeft);
     maxBox->setObjectName("maxBox");
 
+    normalPalette = maxBox->palette();
+    
     QFormLayout* l = new QFormLayout;
-    l->addRow(tr("Minimum:"), minBox);
-    l->addRow(tr("Maximum:"), maxBox);
+    l->setSizeConstraint(QLayout::SetMinAndMaxSize);
+    l->addRow(tr("Minimum"), minBox);
+    l->addRow(tr("Maximum"), maxBox);
     minmaxGroup->setLayout(l);
 
     QVBoxLayout* mainLayout = new QVBoxLayout;
+    mainLayout->setSizeConstraint(QLayout::SetFixedSize);
+    mainLayout->setMargin(0);
     mainLayout->addWidget(minmaxGroup);
     setLayout(mainLayout);
+    
+    connect(minBox, SIGNAL(valueChanged(const QString &)), SLOT(sl_valueChanged(const QString &)));
+    connect(maxBox, SIGNAL(valueChanged(const QString &)), SLOT(sl_valueChanged(const QString &)));
 }
 
 double MinMaxSelectorWidget::getMin() const {
@@ -136,6 +143,17 @@ bool MinMaxSelectorWidget::getState() const {
     return minmaxGroup->isChecked();
 }
 
+void MinMaxSelectorWidget::sl_valueChanged(const QString &) {
+    double min = minBox->value();
+    double max = maxBox->value();
+    QPalette p = normalPalette;
+    if (min >= max) {
+        p.setColor(QPalette::Base, QColor(255,200,200));
+    } 
+    ((MinMaxDoubleSpinBox*)minBox)->getLineEdit()->setPalette(p);
+    ((MinMaxDoubleSpinBox*)maxBox)->getLineEdit()->setPalette(p);
+}
+
 
 QString MinMaxSelectorWidget::validate() const {
     if (!minmaxGroup->isChecked()) return QString();
@@ -143,7 +161,7 @@ QString MinMaxSelectorWidget::validate() const {
     double max = maxBox->value();
     if (min >= max) {
         minBox->setFocus(Qt::NoFocusReason);
-        return tr("Invalid cutoff values");
+        return tr("Invalid cutoff range");
     }
     return QString();
 }
@@ -171,8 +189,8 @@ WindowStepSelectorDialog::WindowStepSelectorDialog(QWidget* p, const U2Region& w
     setWindowTitle(tr("Graph Settings"));
     setWindowIcon(QIcon(":core/images/graphs.png"));
 
-    setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
-    setMinimumWidth(200);
+    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    setMinimumWidth(400);
 
     connect(cancelButton, SIGNAL(clicked(bool)), SLOT(sl_onCancelClicked(bool)));
     connect(okButton, SIGNAL(clicked(bool)), SLOT(sl_onOkClicked(bool)));
diff --git a/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.h b/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.h
index 1b11d58..d46ce0e 100644
--- a/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/WindowStepSelectorWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,17 +23,11 @@
 #define _U2_WINDOW_STEP_SELECTOR_WIDGET_
 
 #include <U2Core/U2Region.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QSpinBox>
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QGroupBox>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QDoubleSpinBox>
-#include <QtWidgets/QGroupBox>
-#endif
+#include <QDialog>
+#include <QSpinBox>
+#include <QDoubleSpinBox>
+#include <QGroupBox>
+#include <QFormLayout>
 
 namespace U2 {
 
@@ -45,10 +39,11 @@ public:
 
     int getWindow() const;
     int getStep() const;
-
+    QFormLayout* getFormLayout() const {return formLayout;}
 private:
     QSpinBox*   windowEdit;
     QSpinBox*   stepsPerWindowEdit;
+    QFormLayout* formLayout;
 };
 
 class U2VIEW_EXPORT MinMaxSelectorWidget : public QWidget {
@@ -61,10 +56,14 @@ public:
     double getMax() const;
     bool getState() const;
 
+private slots:
+    void sl_valueChanged(const QString &);
+    
 private:
     QGroupBox* minmaxGroup;
     QDoubleSpinBox* minBox;
     QDoubleSpinBox* maxBox;
+    QPalette normalPalette;
 };
 
 class U2VIEW_EXPORT WindowStepSelectorDialog : public QDialog {
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.cpp
index df3e3da..646dea9 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h
index d73047e..3dcde85 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,6 @@
 
 #include <ui_AnnotHighlightSettings.h>
 
-#include <QtGui/QtGui>
-
-
 namespace U2 {
 
 class AnnotationSettings;
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
index 0ea2f4d..f58c1fc 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include "AnnotHighlightTree.h"
-#include "AnnotHighlightTreeItem.h"
+#include <QColorDialog>
+#include <QHeaderView>
 
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/U2SafePoints.h>
 
+#include "AnnotHighlightTree.h"
+#include "AnnotHighlightTreeItem.h"
 
 namespace U2 {
 
 const int AnnotHighlightTree::COL_NUM_ANNOT_NAME = 0;
 const int AnnotHighlightTree::COL_NUM_COLOR = 1;
 
-const QString AnnotHighlightTree::HEADER_ANNOT_NAMES = QObject::tr("Annotation");
-const QString AnnotHighlightTree::HEADER_COLORS = QObject::tr("Color");
-
 const int AnnotHighlightTree::ANNOT_COLUMN_WIDTH = 140;
 const int AnnotHighlightTree::COLOR_COLUMN_WIDTH = 10;
 const int AnnotHighlightTree::INITIAL_TREE_HEIGHT = 25;
@@ -51,17 +50,13 @@ AnnotHighlightTree::AnnotHighlightTree()
     annotTreeHeight = INITIAL_TREE_HEIGHT;
 
     QStringList headerLabels;
-    headerLabels << HEADER_ANNOT_NAMES << HEADER_COLORS;
+    headerLabels << QObject::tr("Annotation") << QObject::tr("Color");
     setHeaderLabels(headerLabels);
 
     header()->resizeSection(COL_NUM_ANNOT_NAME, ANNOT_COLUMN_WIDTH);
     header()->resizeSection(COL_NUM_COLOR, COLOR_COLUMN_WIDTH);
     header()->setStretchLastSection(false);
-#if (QT_VERSION < 0x050000) // Qt 5
-    header()->setResizeMode(0, QHeaderView::Stretch);
-#else
     header()->setSectionResizeMode(0, QHeaderView::Stretch);
-#endif
 
     setStyleSheet("QTreeWidget#OP_ANNOT_HIGHLIGHT_TREE { "
         "border-style: solid;"
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.h b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.h
index dccd0a3..76e7a0d 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTree.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_ANNOT_HIGHLIGHT_TREE_H_
 #define _U2_ANNOT_HIGHLIGHT_TREE_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
+#include <QTreeWidget>
 
 namespace U2 {
 
@@ -85,10 +80,6 @@ private:
     virtual void insertTopLevelItem(int index, QTreeWidgetItem* item) { QTreeWidget::insertTopLevelItem(index, item); }
     virtual void insertTopLevelItems(int index,  const QList<QTreeWidgetItem *>& items) { QTreeWidget::insertTopLevelItems(index, items); }
 
-    /** Columns names */
-    static const QString HEADER_ANNOT_NAMES;
-    static const QString HEADER_COLORS;
-
     /** Size of the tree elements */
     static const int ANNOT_COLUMN_WIDTH;
     static const int COLOR_COLUMN_WIDTH;
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.cpp
index 87df025..05a9e03 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.cpp
@@ -1,6 +1,6 @@
  /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.h b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.h
index 5d1923a..aaf2c86 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightTreeItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp
index 4e49903..f5e8ee3 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,14 @@
  * MA 02110-1301, USA.
  */
 
+#include <QPushButton>
+
 #include "AnnotHighlightWidget.h"
 
 #include <U2Core/AnnotationSelection.h>
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/Counter.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/U2SafePoints.h>
@@ -37,14 +40,12 @@
 
 namespace U2 {
 
-const QString ShowAllAnnotTypesLabel::SHOW_ALL_ANNOT_TYPES = QObject::tr("Show all annotation names");
-const QString ShowAllAnnotTypesLabel::SHOW_ANNOT_TYPES_FOR_SEQ = QObject::tr("Show names for the sequence only");
 
 ShowAllAnnotTypesLabel::ShowAllAnnotTypesLabel()
 {
     // By default, show only types for the sequence
     showAllIsSelected = false;
-    setText(SHOW_ALL_ANNOT_TYPES);
+    setText(QObject::tr("Show all annotation names"));
 
     setStyleSheet(
         "text-decoration: underline;"
@@ -58,11 +59,11 @@ void ShowAllAnnotTypesLabel::mousePressEvent(QMouseEvent* event)
     Q_UNUSED(event);
     if (showAllIsSelected) {
         showAllIsSelected = false;
-        setText(SHOW_ALL_ANNOT_TYPES);
+        setText(QObject::tr("Show all annotation names"));
     }
     else {
         showAllIsSelected = true;
-        setText(SHOW_ANNOT_TYPES_FOR_SEQ);
+        setText(QObject::tr("Show names for the sequence only"));
     }
 
     emit si_showAllStateChanged();
@@ -282,10 +283,12 @@ QList<AnnotatedRegion> AnnotHighlightWidget::getAllAnnotatedRegionsByStartPos(qi
 }
 
 void AnnotHighlightWidget::sl_onNextAnnotationClick() {
+    GCOUNTER(cvar, tvar, "Annotations navigation: next annotation");
     selectNextAnnotation(true);
 }
 
 void AnnotHighlightWidget::sl_onPrevAnnotationClick() {
+    GCOUNTER(cvar, tvar, "Annotations navigation: previous annotation");
     selectNextAnnotation(false);
 }
 
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.h b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.h
index f36f5d8..8ce94ed 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,6 +25,8 @@
 #include "AnnotHighlightSettings.h"
 #include "AnnotHighlightTree.h"
 
+class QPushButton;
+
 namespace U2 {
 
 class ADVSequenceObjectContext;
@@ -50,9 +52,6 @@ signals:
 private:
     virtual void mousePressEvent(QMouseEvent*);
 
-    static const QString SHOW_ALL_ANNOT_TYPES;
-    static const QString SHOW_ANNOT_TYPES_FOR_SEQ;
-
     bool showAllIsSelected;
 };
 
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp
index 5257761..8dac653 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString AnnotHighlightWidgetFactory::GROUP_ID = "OP_ANNOT_HIGHLIGHT";
 const QString AnnotHighlightWidgetFactory::GROUP_ICON_STR = ":core/images/annotation_settings.png";
-const QString AnnotHighlightWidgetFactory::GROUP_TITLE = QObject::tr("Annotations Highlighting");
-const QString AnnotHighlightWidgetFactory::GROUP_DOC_PAGE = "18222996";
+const QString AnnotHighlightWidgetFactory::GROUP_DOC_PAGE = "20874900";
 
 AnnotHighlightWidgetFactory::AnnotHighlightWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
@@ -56,7 +55,7 @@ QWidget * AnnotHighlightWidgetFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters AnnotHighlightWidgetFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Annotations Highlighting"), GROUP_DOC_PAGE);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.h b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.h
index 63d59e0..1467c68 100644
--- a/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.h
+++ b/src/corelibs/U2View/src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,7 +37,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp
index 5f5c2c2..40a1268 100644
--- a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.cpp
@@ -8,23 +8,14 @@
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
 
-#include <QtCore/QUrl>
-#include <QtGui/QDesktopServices>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QScrollArea>
-#include <QtGui/QScrollBar>
-#include <QtGui/QSizePolicy>
-#include <QtGui/QTableWidget>
-#include <QtGui/QHeaderView>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QScrollArea>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QSizePolicy>
-#include <QtWidgets/QTableWidget>
-#include <QtWidgets/QHeaderView>
-#endif
+#include <QUrl>
+#include <QDesktopServices>
+#include <QApplication>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QSizePolicy>
+#include <QTableWidget>
+#include <QHeaderView>
 
 namespace U2 {
 
@@ -46,33 +37,18 @@ CodonTableView::CodonTableView(AnnotatedDNAView *view)
     table->verticalHeader()->hide();
 
     table->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding);
-#if (QT_VERSION < 0x050000) //Qt 5
-    table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
-    table->verticalHeader()->setResizeMode(QHeaderView::Fixed);
-#else
     table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
     table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
-#endif
 
     const int rowHeight = 18;
     table->verticalHeader()->setDefaultSectionSize(rowHeight);
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    table->horizontalHeader()->setResizeMode(0, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setResizeMode(3, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setResizeMode(5, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setResizeMode(7, QHeaderView::ResizeToContents);
-    table->horizontalHeader()->setResizeMode(9, QHeaderView::ResizeToContents);
-#else
     table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
     table->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
     table->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);
     table->horizontalHeader()->setSectionResizeMode(5, QHeaderView::ResizeToContents);
     table->horizontalHeader()->setSectionResizeMode(7, QHeaderView::ResizeToContents);
     table->horizontalHeader()->setSectionResizeMode(9, QHeaderView::ResizeToContents);
-#endif
-
 
     // Fill the table
     QStringList nucleobases;
diff --git a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h
index f206ce6..e8d845e 100644
--- a/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h
+++ b/src/corelibs/U2View/src/ov_sequence/codon_table/CodonTable.h
@@ -7,15 +7,9 @@
 #include <U2View/ADVSplitWidget.h>
 #include <U2View/ADVSequenceWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QTableWidget>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QTableWidget>
-#endif
+#include <QLabel>
+#include <QVBoxLayout>
+#include <QTableWidget>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.cpp b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.cpp
index b12aa44..bb38b28 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.h b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.h
index 9cae38f..11f1efc 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_FIND_PATTERN_TASK_H_
 #define _U2_FIND_PATTERN_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Algorithm/FindAlgorithmTask.h>
 
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.cpp b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.cpp
index 86b0335..40a93d6 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -215,10 +215,6 @@ const static QString SHOW_OPTIONS_LINK("show_options_link");
 const int FindPatternWidget::DEFAULT_RESULTS_NUM_LIMIT = 100000;
 const int FindPatternWidget::DEFAULT_REGEXP_RESULT_LENGTH_LIMIT = 10000;
 
-const QString FindPatternWidget::ALGORITHM_SETTINGS = QObject::tr("Search algorithm");
-const QString FindPatternWidget::SEARCH_IN_SETTINGS = QObject::tr("Search in");
-const QString FindPatternWidget::OTHER_SETTINGS = QObject::tr("Other settings");
-
 FindPatternWidget::FindPatternWidget(AnnotatedDNAView* _annotatedDnaView) :
     annotatedDnaView(_annotatedDnaView),
     iterPos(1),
@@ -307,9 +303,9 @@ void FindPatternWidget::initLayout() {
     initResultsLimit();
 
     subgroupsLayout->setSpacing(0);
-    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(ALGORITHM_SETTINGS, ALGORITHM_SETTINGS, widgetAlgorithm, false));
-    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(SEARCH_IN_SETTINGS, SEARCH_IN_SETTINGS, widgetSearchIn, false));
-    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(OTHER_SETTINGS, OTHER_SETTINGS, widgetOther, false));
+    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(QObject::tr("Search algorithm"), QObject::tr("Search algorithm"), widgetAlgorithm, false));
+    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(QObject::tr("Search in"), QObject::tr("Search in"), widgetSearchIn, false));
+    subgroupsLayout->addWidget(new ShowHideSubgroupWidget(QObject::tr("Other settings"), QObject::tr("Other settings"), widgetOther, false));
     subgroupsLayout->addWidget(annotsWidget);
 
     updateLayout();
@@ -496,8 +492,10 @@ void FindPatternWidget::sl_onAlgorithmChanged(int index)
     selectedAlgorithm = boxAlgorithm->itemData(index).toInt();
     updatePatternText(previousAlgorithm);
     updateLayout();
-    verifyPatternAlphabet();
-    sl_activateNewSearch(true);
+    bool noValidationErrors = verifyPatternAlphabet();
+    if (noValidationErrors) {
+        sl_activateNewSearch(true);
+    }
 }
 
 
@@ -820,8 +818,8 @@ void FindPatternWidget::sl_onSearchPatternChanged()
 
         // Show a warning if the pattern alphabet doesn't match,
         // but do not block the "Search" button
-        verifyPatternAlphabet();
-        if(patterns != previousPatternString){
+        bool noValidationErrors = verifyPatternAlphabet();
+        if (noValidationErrors && patterns != previousPatternString) {
             previousPatternString = patterns;
             sl_activateNewSearch(false);
         }
@@ -890,7 +888,7 @@ void FindPatternWidget::setRegionToWholeSequence()
     boxRegion->setCurrentIndex(boxRegion->findData(RegionSelectionIndex_WholeSequence));
 }
 
-void FindPatternWidget::verifyPatternAlphabet()
+bool FindPatternWidget::verifyPatternAlphabet()
 {
     U2OpStatusImpl os;
 
@@ -903,7 +901,6 @@ void FindPatternWidget::verifyPatternAlphabet()
     QString patterns = patternNoNames.join("");
 
     bool alphabetIsOk = checkAlphabet(patterns);
-
     if (!alphabetIsOk) {
         showHideMessage(true, PatternAlphabetDoNotMatch);
     }
@@ -911,16 +908,20 @@ void FindPatternWidget::verifyPatternAlphabet()
         showHideMessage(false, PatternAlphabetDoNotMatch);
     }
 
-    if(selectedAlgorithm == FindAlgorithmPatternSettings_RegExp){
+    bool result = alphabetIsOk;
+
+    if (selectedAlgorithm == FindAlgorithmPatternSettings_RegExp) {
         QRegExp regExp(textPattern->toPlainText());
-        if(regExp.isValid()){
+        if (regExp.isValid()) {
             showHideMessage(false, PatternWrongRegExp);
-        }else{
+        } else {
             showHideMessage(true, PatternWrongRegExp);
+            result = false;
         }
-    }else{
+    } else {
         showHideMessage(false, PatternWrongRegExp);
     }
+    return result;
 }
 
 void FindPatternWidget::sl_onSequenceTranslationChanged(int /* index */)
@@ -1001,6 +1002,9 @@ void FindPatternWidget::checkState()
                 showHideMessage(false, PatternIsTooLong);
             }
         }
+    } else {
+        doNotHighlightBackground(textPattern);
+        showHideMessage(false, PatternAlphabetDoNotMatch);
     }
 
     showHideMessage(false, AnnotationNotValidFastaParsedName);
@@ -1111,6 +1115,9 @@ void FindPatternWidget::sl_onFileSelectorToggled(bool on)
 {
     textPattern->setDisabled(on);
     checkState();
+    if (!on) { // if returning to input-pattern mode -> recheck it's content
+        verifyPatternAlphabet();
+    }
     sl_activateNewSearch(true);
 }
 
@@ -1128,6 +1135,7 @@ void FindPatternWidget::initFindPatternTask(const QList<NamePattern> &patterns)
     U2OpStatusImpl os;
     settings.sequence = activeContext->getSequenceObject()->getWholeSequenceData(os);
     CHECK_OP_EXT(os, showTooLongSequenceError(), ); // suppose that if the sequence cannot be fetched from the DB, UGENE ran out of memory
+    settings.sequenceAlphabet = activeContext->getSequenceObject()->getAlphabet();
     settings.searchIsCircular = activeContext->getSequenceObject()->isCircular();
 
     // Strand
@@ -1225,6 +1233,10 @@ void FindPatternWidget::sl_loadPatternTaskStateChanged() {
     updateAnnotationsWidget();
 }
 
+bool compareByRegionStartPos(const SharedAnnotationData &r1, const SharedAnnotationData &r2) {
+    return r1->getRegions().first().startPos < r2->getRegions().first().startPos;
+}
+
 void FindPatternWidget::sl_findPatrernTaskStateChanged() {
     FindPatternListTask *findTask = qobject_cast<FindPatternListTask *>(sender());
     CHECK(NULL != findTask, );
@@ -1240,6 +1252,7 @@ void FindPatternWidget::sl_findPatrernTaskStateChanged() {
             getAnnotationsPushButton->setDisabled(true);
         } else {
             iterPos = 1;
+            qSort(findPatternResults.begin(), findPatternResults.end(), compareByRegionStartPos);
             showCurrentResultAndStopProgress(iterPos, findPatternResults.size());
             nextPushButton->setEnabled(true);
             prevPushButton->setEnabled(true);
@@ -1439,7 +1452,7 @@ void FindPatternWidget::sl_getAnnotationsButtonClicked() {
 
     AnnotationTableObject *aTableObj = annotModel.getAnnotationObject();
     SAFE_POINT(aTableObj != NULL, "Invalid annotation table detected!", );
-
+    annotatedDnaView->tryAddObject(aTableObj);
     QList<SharedAnnotationData> annotationsToCreate = findPatternResults;
 
     for(int i = 0; i < findPatternResults.size(); i++){
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h
index 302f314..c743d58 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -160,7 +160,8 @@ private:
     /** Allows showing of several error messages. */
     void showHideMessage(bool show, MessageFlag messageFlag, const QString& additionalMsg = QString());
 
-    void verifyPatternAlphabet();
+    /** Checks pattern alphabet and sets error message if needed. Returns false on error or true if no error found */
+    bool verifyPatternAlphabet();
     bool checkAlphabet(const QString& pattern);
     void showTooLongSequenceError();
 
@@ -220,10 +221,6 @@ private:
     static const int DEFAULT_RESULTS_NUM_LIMIT;
     static const int DEFAULT_REGEXP_RESULT_LENGTH_LIMIT;
 
-    static const QString ALGORITHM_SETTINGS;
-    static const QString SEARCH_IN_SETTINGS;
-    static const QString OTHER_SETTINGS;
-
     QList<SharedAnnotationData> findPatternResults;
     int iterPos;
     Task *searchTask;
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp
index 5e56bca..870f672 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString FindPatternWidgetFactory::GROUP_ID = "OP_FIND_PATTERN";
 const QString FindPatternWidgetFactory::GROUP_ICON_STR = ":core/images/find_dialog.png";
-const QString FindPatternWidgetFactory::GROUP_TITLE = QString(QObject::tr("Search in Sequence"));
-const QString FindPatternWidgetFactory::GROUP_DOC_PAGE = "18222978";
+const QString FindPatternWidgetFactory::GROUP_DOC_PAGE = "20874882";
 
 FindPatternWidgetFactory::FindPatternWidgetFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
@@ -56,7 +55,7 @@ QWidget * FindPatternWidgetFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters FindPatternWidgetFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Search in Sequence"), GROUP_DOC_PAGE);
 }
 
 const QString & FindPatternWidgetFactory::getGroupId() {
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.h b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.h
index 78d9e13..0e40039 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.h
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.cpp b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.cpp
index caeda9c..de353c6 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.h b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.h
index 5765f93..c1f4a4e 100644
--- a/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.h
+++ b/src/corelibs/U2View/src/ov_sequence/find_pattern/FindPatternWidgetSavableTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_FIND_PATTERN_SAVABLE_TAB_H_
 #define _U2_FIND_PATTERN_SAVABLE_TAB_H_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 #include <U2Gui/U2SavableWidget.h>
 
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/ExportImagePainter.h b/src/corelibs/U2View/src/ov_sequence/image_export/ExportImagePainter.h
index e1691b1..abc8b8a 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/ExportImagePainter.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/ExportImagePainter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp b/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp
index 7566112..fbfc5c0 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h b/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h
index aabbad6..bd84ee4 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequenceExportSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
index eaa58f8..591a5a6 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@
 
 namespace U2 {
 
-bool checkAnnotationsCountInRegion(ADVSequenceObjectContext* ctx, const U2Region& region) {
+bool checkAnnotationsCountInRegion(SequenceObjectContext* ctx, const U2Region& region) {
     SAFE_POINT(ctx != NULL, "SequenceContext is NULL", false);
     int count = 0;
     foreach (AnnotationTableObject* table, ctx->getAnnotationObjects(true)) {
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
index 580a195..2e8decf 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SequencePainter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.cpp b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.cpp
index 060f8cb..1963ee0 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.h b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.h
index a4dae5d..fede261 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.cpp b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.cpp
index 4f40a20..055738d 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 
 #include <U2Gui/RegionSelector.h>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 #include <QPrinter>
 #include <QSvgGenerator>
 
diff --git a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.h b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.h
index e409c59..717c1df 100644
--- a/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/image_export/SingleSequenceImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.cpp b/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.cpp
index 0ef32fb..c4eec7b 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.h b/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.h
index ca6bfae..5e52e31 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/CharOccurTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.cpp b/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.cpp
index 3b068ed..89cfbd8 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.h b/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.h
index 18bff42..866eac2 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/DNAStatisticsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/BackgroundTaskRunner.h>
 #include <U2Core/U2Region.h>
 #include <U2Core/U2Type.h>
-#include <QtCore/QVector>
-#include <QtCore/QMap>
+#include <QVector>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.cpp b/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.cpp
index 7a7f2db..120ffda 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.h b/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.h
index 7d3c438..75d3df6 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/DinuclOccurTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp
index 4e69adc..58c3453 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h
index 1774ff0..efb09f2 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp
index c2044cc..ea6d7fb 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,7 @@ namespace U2 {
 
 const QString SequenceInfoFactory::GROUP_ID = "OP_SEQ_INFO";
 const QString SequenceInfoFactory::GROUP_ICON_STR = ":core/images/chart_bar.png";
-const QString SequenceInfoFactory::GROUP_TITLE = QObject::tr("Statistics");
-const QString SequenceInfoFactory::GROUP_DOC_PAGE = "18222967";
+const QString SequenceInfoFactory::GROUP_DOC_PAGE = "20874871";
 
 SequenceInfoFactory::SequenceInfoFactory() {
     objectViewOfWidget = ObjViewType_SequenceView;
@@ -56,7 +55,7 @@ QWidget * SequenceInfoFactory::createWidget(GObjectView* objView) {
 }
 
 OPGroupParameters SequenceInfoFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Statistics"), GROUP_DOC_PAGE);
 }
 
 } // namespace U2
diff --git a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.h b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.h
index 540a057..bea08ae 100644
--- a/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.h
+++ b/src/corelibs/U2View/src/ov_sequence/sequence_info/SequenceInfoFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 };
 
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
index 3f540c9..c8d702f 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ namespace U2 {
 /* DetViewMultiLineRenderer */
 /************************************************************************/
 const int DetViewMultiLineRenderer::INDENT_BETWEEN_LINES = 30;
-DetViewMultiLineRenderer::DetViewMultiLineRenderer(DetView *detView, ADVSequenceObjectContext *ctx)
+DetViewMultiLineRenderer::DetViewMultiLineRenderer(DetView *detView, SequenceObjectContext *ctx)
     : DetViewRenderer(detView, ctx),
       extraIndent(0) {
     singleLinePainter = new DetViewSingleLineRenderer(detView, ctx);
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h
index c34b432..7f60342 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewMultiLineRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,7 +33,7 @@ class DetViewSingleLineRenderer;
 /************************************************************************/
 class DetViewMultiLineRenderer: public DetViewRenderer {
 public:
-    DetViewMultiLineRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+    DetViewMultiLineRenderer(DetView* detView, SequenceObjectContext* ctx);
     ~DetViewMultiLineRenderer();
 
     qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
index c941a8e..8402fdc 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 
 namespace U2 {
 
-DetViewRenderer::DetViewRenderer(DetView* detView, ADVSequenceObjectContext* ctx)
+DetViewRenderer::DetViewRenderer(DetView* detView, SequenceObjectContext* ctx)
     : SequenceViewAnnotatedRenderer(ctx),
       detView(detView)   {
 
@@ -43,7 +43,7 @@ qint64 DetViewRenderer::getSymbolsPerLine(const qint64 width) const {
     return width / commonMetrics.charWidth;
 }
 
-DetViewRenderer* DetViewRendererFactory::createRenderer(DetView *detView, ADVSequenceObjectContext *ctx, bool multiLine) {
+DetViewRenderer* DetViewRendererFactory::createRenderer(DetView *detView, SequenceObjectContext *ctx, bool multiLine) {
     if (multiLine) {
         return new DetViewMultiLineRenderer(detView, ctx);
     } else {
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h
index 5d0e879..377dc85 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ class DetView;
 /************************************************************************/
 class DetViewRenderer : public SequenceViewAnnotatedRenderer {
 public:
-    DetViewRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+    DetViewRenderer(DetView* detView, SequenceObjectContext* ctx);
     virtual ~DetViewRenderer() {}
 
     double getCurrentScale() const;
@@ -60,7 +60,7 @@ protected:
 /************************************************************************/
 class DetViewRendererFactory {
 public:
-    static DetViewRenderer* createRenderer(DetView* detView, ADVSequenceObjectContext* ctx, bool multiLine = false);
+    static DetViewRenderer* createRenderer(DetView* detView, SequenceObjectContext* ctx, bool multiLine = false);
 };
 
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp
index 19ebb54..ede8932 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -71,7 +71,7 @@ DetViewSingleLineRenderer::TranslationMetrics::TranslationMetrics(DetView* detVi
     fontIS.setItalic(true);
 }
 
-DetViewSingleLineRenderer::DetViewSingleLineRenderer(DetView *detView, ADVSequenceObjectContext *ctx)
+DetViewSingleLineRenderer::DetViewSingleLineRenderer(DetView *detView, SequenceObjectContext *ctx)
     : DetViewRenderer(detView, ctx) {
 
 }
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h
index 11d468c..9245f5e 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/DetViewSingleLineRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -55,7 +55,7 @@ private:
         QFont fontIS;
     };
 public:
-    DetViewSingleLineRenderer(DetView* detView, ADVSequenceObjectContext* ctx);
+    DetViewSingleLineRenderer(DetView* detView, SequenceObjectContext* ctx);
 
     virtual qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp
index ce3f015..8c1a5c7 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,18 +34,15 @@
 #include <U2View/PanView.h>
 #include <U2View/PanViewRows.h>
 
-#include <QFontMetrics>
-
-
 namespace U2 {
 
 
 const int PanViewRenderer::RULER_NOTCH_SIZE = 2;
-const int PanViewRenderer::MAX_VISIBLE_ROWS  = 20;
-const int PanViewRenderer::MAX_VISIBLE_ROWS_ON_START = 10;
-const int PanViewRenderer::LINE_TEXT_OFFSET = 10;
+//const int PanViewRenderer::MAX_VISIBLE_ROWS  = 20;
+//const int PanViewRenderer::MAX_VISIBLE_ROWS_ON_START = 10;
+const int PanViewRenderer::LINE_TEXT_OFFSET = 8;
 
-PanViewRenderer::PanViewRenderer(PanView *panView, ADVSequenceObjectContext *ctx)
+PanViewRenderer::PanViewRenderer(PanView *panView, SequenceObjectContext *ctx)
     : SequenceViewAnnotatedRenderer(ctx),
       panView(panView) {
     s = panView->getLinesSettings();
@@ -85,7 +82,7 @@ qint64 PanViewRenderer::getMinimumHeight() const {
 }
 
 QSize PanViewRenderer::getBaseCanvasSize(const U2Region &visibleRange) const {
-    float halfChar = getCurrentScale() / 2;
+    double halfChar = getCurrentScale() / 2;
     int firstCharCenter = qRound(halfChar);
     int lastCharCenter = qRound(visibleRange.length * getCurrentScale() + halfChar);
 
@@ -95,8 +92,9 @@ QSize PanViewRenderer::getBaseCanvasSize(const U2Region &visibleRange) const {
     }
 
     PVRowsManager *rm = panView->getRowsManager();
-    return QSize(firstLastWidth + 2 * halfChar + 5,
-                 commonMetrics.lineHeight * (rm->getNumRows() + s->showCustomRulers * s->customRulers.size() + s->showMainRuler + isSequenceCharsVisible() + 1) + 6 );
+    int width = (int)(firstLastWidth + 2 * halfChar + 5);
+    int height = commonMetrics.lineHeight * (rm->getNumRows() + s->showCustomRulers * s->customRulers.size() + s->showMainRuler + isSequenceCharsVisible() + 1) + 6;
+    return QSize(width, height);
 }
 
 void PanViewRenderer::drawAll(QPainter &p, const U2Region &visibleRange) {
@@ -116,8 +114,8 @@ void PanViewRenderer::drawAll(QPainter &p, const QSize &canvasSize, const U2Regi
 
     GraphUtils::RulerConfig c;
 
-    int hCenter = getContentIndentY(canvasSize, visibleRange);
-    float halfChar = getCurrentScale() / 2;
+    int hCenter = (int) getContentIndentY(canvasSize, visibleRange);
+    double halfChar = getCurrentScale() / 2;
     int firstCharCenter = qRound(posToXCoordF(visibleRange.startPos, canvasSize, visibleRange) + halfChar);
     int lastCharCenter = qRound(posToXCoordF(visibleRange.endPos() - 1, canvasSize, visibleRange) + halfChar);
     int firstLastWidth = lastCharCenter - firstCharCenter;
@@ -145,7 +143,7 @@ void PanViewRenderer::drawAll(QPainter &p, const QSize &canvasSize, const U2Regi
 }
 
 void PanViewRenderer::drawSelection(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange) {
-    int hCenter = getContentIndentY(canvasSize, visibleRange);
+    int hCenter = (int) getContentIndentY(canvasSize, visibleRange);
     p.translate(0, hCenter);
 
     drawSequence(p, canvasSize, visibleRange);
@@ -211,8 +209,8 @@ void PanViewRenderer::drawSequence(QPainter &p, const QSize &canvasSize, const U
     CHECK(isSequenceCharsVisible(), );
 
     p.setPen(Qt::black);
-    float halfCharByScale = getCurrentScale() / 2;
-    float halfCharByFont = 0.0f;
+    double halfCharByScale = getCurrentScale() / 2;
+    float halfCharByFont;
     if (getCurrentScale() >= commonMetrics.charWidth) {
         p.setFont(commonMetrics.sequenceFont);
         halfCharByFont = commonMetrics.charWidth / 2.0f;
@@ -263,7 +261,7 @@ void PanViewRenderer::drawSequenceSelection(QPainter& p, const QSize &canvasSize
         unitType = "bp";
     }
 
-    QString rangePattern = " " + panView->tr("[%1 %2]")+" ";
+    QString rangePattern = " " + panView->tr("[%1 %2]") + " ";
     foreach(const U2Region& r, selection) {
         if (!visibleRange.intersects(r)) {
             continue;
@@ -272,11 +270,11 @@ void PanViewRenderer::drawSequenceSelection(QPainter& p, const QSize &canvasSize
         int x2 = qMin(canvasSize.width(), posToXCoord(r.endPos(), canvasSize, visibleRange));
 
         p.setPen(pen1);
-        if (visibleRange.contains(r.startPos)) {
-            p.drawLine(x1, - getContentIndentY(canvasSize, visibleRange), x1, ly);
+        if (visibleRange.contains(r.startPos) && s->numLines > 1) {
+            p.drawLine(x1, - (int) getContentIndentY(canvasSize, visibleRange), x1, ly);
         }
-        if (visibleRange.contains(r.endPos()-1)) {
-            p.drawLine(x2, - getContentIndentY(canvasSize, visibleRange), x2, ly);
+        if (visibleRange.contains(r.endPos() - 1) && s->numLines > 1) {
+            p.drawLine(x2, - (int) getContentIndentY(canvasSize, visibleRange), x2, ly);
         }
 
         if (drawRect) {
@@ -308,7 +306,7 @@ void PanViewRenderer::drawSequenceSelection(QPainter& p, const QSize &canvasSize
                 rtRect.translate(rtx, rty);
                 p.fillRect(rtRect, Qt::white);
                 p.drawText(rtRect, Qt::AlignCenter, rangeText);
-            }  else if (!rangeTextInTheMiddle) { //if range text is not in the middle glue it to one of the boundary texts
+            }  else { //if range text is not in the middle glue it to one of the boundary texts
                 QString newT2 = t2 + rangeText;
                 QRect newT2Rect = rfm.boundingRect(newT2).translated(x2 + tOffs, rty);
                 if (newT2Rect.right() < canvasSize.width()) {
@@ -363,11 +361,11 @@ void PanViewRenderer::drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U
 
 void PanViewRenderer::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
                                        int firstCharCenter, int lastCharCenter,
-                                       int w, int predefinedY, bool ignoreVisbileRange) {
+                                       int w, int predefinedY, bool ignoreVisibleRange) {
     CHECK(s->showCustomRulers && !s->customRulers.isEmpty(), );
 
-    float pixelsPerChar = getCurrentScale();
-    float halfChar =  pixelsPerChar / 2;
+    double pixelsPerChar = getCurrentScale();
+    double halfChar = pixelsPerChar / 2;
     QFont crf = commonMetrics.rulerFont;
     crf.setBold(true);
     QFontMetrics fm(crf);
@@ -377,14 +375,16 @@ void PanViewRenderer::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p,
         int _w = fm.width(ri.name);
         maxRulerTextWidth = qMax(maxRulerTextWidth, _w);
     }
+    QTextOption rulerTo;
+    rulerTo.setWrapMode(QTextOption::NoWrap);
     for (int i = 0, n = s->customRulers.count();  i < n; i++) {
         const RulerInfo& ri = s->customRulers[i];
         p.setPen(ri.color);
         p.setFont(crf);
         int y = (predefinedY == -1) ? getLineY(s->getCustomRulerLine(i)) + c.notchSize : predefinedY - i * commonMetrics.lineHeight;
-        p.drawText(QRect(ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET, y, maxRulerTextWidth, commonMetrics.lineHeight),
-                   ri.name);
-        int rulerStartOffset = maxRulerTextWidth + (ignoreVisbileRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET);
+        QRect rulerTextRect(ignoreVisibleRange ? firstCharCenter + LINE_TEXT_OFFSET : LINE_TEXT_OFFSET, y, maxRulerTextWidth, commonMetrics.lineHeight);
+        p.drawText(rulerTextRect, ri.name, rulerTo);
+        int rulerStartOffset = maxRulerTextWidth + 2 * LINE_TEXT_OFFSET + (ignoreVisibleRange ? firstCharCenter : 0);
         if (rulerStartOffset >= w)  {
             continue;
         }
@@ -395,7 +395,7 @@ void PanViewRenderer::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p,
         if (firstCharCenter <= rulerStartOffset) {
             int deltaPixels = rulerStartOffset - firstCharCenter;
             int nChars = qMax(1, qRound(deltaPixels / pixelsPerChar));
-            int deltaPixels2 = nChars * pixelsPerChar;
+            double deltaPixels2 = nChars * pixelsPerChar;
             startPos += nChars;
             x += deltaPixels2;
         }
@@ -405,12 +405,12 @@ void PanViewRenderer::drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p,
             rulerWidth--; // make the end of the ruler visible
         }
 
-        int offsetToFirstNotch = c.predefinedChunk - visibleRange.startPos % c.predefinedChunk;
+        int offsetToFirstNotch = (int) (c.predefinedChunk - visibleRange.startPos % c.predefinedChunk);
         qint64 mainRuler = visibleRange.startPos + offsetToFirstNotch;
         qint64 newStartPos = visibleRange.startPos - ri.offset + offsetToFirstNotch;
         qint64 lim = startPos + ri.offset;
         for(; mainRuler < lim; mainRuler += c.predefinedChunk, newStartPos += c.predefinedChunk) ;
-        c.correction = newStartPos;
+        c.correction = (int) newStartPos;
 
         GraphUtils::drawRuler(p, QPoint(x, y), rulerWidth, startPos, endPos, commonMetrics.rulerFont, c);
     }
@@ -423,4 +423,16 @@ const QString PanViewRenderer::getText(const PVRowData * rData) const {
     return text;
 }
 
+PanViewRenderAreaFactory::PanViewRenderAreaFactory() {
+
+}
+
+PanViewRenderAreaFactory::~PanViewRenderAreaFactory() {
+
+}
+
+PanViewRenderArea *PanViewRenderAreaFactory::createRenderArea(PanView *panView) const {
+    return new PanViewRenderArea(panView, new PanViewRenderer(panView, panView->getSequenceContext()));
+}
+
 } // namespace
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h
index e4ee211..a33d9af 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,21 +22,24 @@
 #ifndef _U2_PAN_VIEW_PAINTER_H_
 #define _U2_PAN_VIEW_PAINTER_H_
 
-#include "SequenceViewAnnotatedRenderer.h"
-
-#include <U2View/PanView.h>
+#include <U2Gui/GraphUtils.h>
 
+#include "SequenceViewAnnotatedRenderer.h"
 
 namespace U2 {
 
 class ADVSequenceObjectContext;
+class PanView;
+class PanViewLinesSettings;
+class PanViewRenderArea;
+class PVRowData;
 
 /************************************************************************/
 /* DetViewAnnotationPainter */
 /************************************************************************/
 class PanViewRenderer : public SequenceViewAnnotatedRenderer {
 public:
-    PanViewRenderer(PanView* panView, ADVSequenceObjectContext* ctx);
+    PanViewRenderer(PanView* panView, SequenceObjectContext* ctx);
     virtual ~PanViewRenderer() {}
 
     qint64 coordToPos(const QPoint &p, const QSize &canvasSize, const U2Region &visibleRange) const;
@@ -57,32 +60,38 @@ public:
 
     void drawAnnotations(QPainter &p, const QSize &canvasSize, const U2Region &visibleRange, const AnnotationDisplaySettings& displaySettings);
 
-private:
+protected:
     int getLineY(int line) const;
-
     bool isSequenceCharsVisible() const;
 
-    void drawSequence(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
+    PanView*            panView;
+    PanViewLinesSettings*   s;
+
+private:
+    virtual void drawSequence(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
     void drawSequenceSelection(QPainter& p, const QSize& canvasSize, const U2Region& visibleRange);
 
-    void drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth);
+    virtual void drawRuler(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange, int firstCharCenter, int firstLastWidth);
     void drawCustomRulers(GraphUtils::RulerConfig c,  QPainter& p, const U2Region &visibleRange,
                           int firstCharCenter, int lastCharCenter,
-                          int width, int predefinedY = -1, bool ignoreVisbileRange = false);
+                          int width, int predefinedY = -1, bool ignoreVisibleRange = false);
 
     const QString getText(const PVRowData * rData) const;
 
-private:
-    PanView*            panView;
-
-    PanViewLinesSettings*   s;
-
     static const int RULER_NOTCH_SIZE;
-    static const int MAX_VISIBLE_ROWS;
-    static const int MAX_VISIBLE_ROWS_ON_START;
+//    static const int MAX_VISIBLE_ROWS;
+//    static const int MAX_VISIBLE_ROWS_ON_START;
     static const int LINE_TEXT_OFFSET;
 };
 
+class PanViewRenderAreaFactory {
+public:
+    PanViewRenderAreaFactory();
+    virtual ~PanViewRenderAreaFactory();
+
+    virtual PanViewRenderArea *createRenderArea(PanView *panView) const;
+};
+
 } // namespace
 
 #endif // _U2_PAN_VIEW_PAINTER_H_
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp
index 72cd3ef..f92238e 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -79,7 +79,7 @@ const int SequenceViewAnnotatedRenderer::CUT_SITE_HALF_HEIGHT = 2;
 
 const int SequenceViewAnnotatedRenderer::MAX_VIRTUAL_RANGE = 10000;
 
-SequenceViewAnnotatedRenderer::SequenceViewAnnotatedRenderer(ADVSequenceObjectContext* ctx)
+SequenceViewAnnotatedRenderer::SequenceViewAnnotatedRenderer(SequenceObjectContext* ctx)
     : SequenceViewRenderer(ctx) {
 
 }
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h
index 05fe5f5..a38cd72 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewAnnotatedRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -72,7 +72,7 @@ protected:
     };
 
 public:
-    SequenceViewAnnotatedRenderer(ADVSequenceObjectContext* ctx);
+    SequenceViewAnnotatedRenderer(SequenceObjectContext* ctx);
 
     virtual qint64 coordToPos(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
 
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp
index e434b2d..9e7565d 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@ CommonSequenceViewMetrics::CommonSequenceViewMetrics() {
 /************************************************************************/
 /* SequenceViewRenderer */
 /************************************************************************/
-SequenceViewRenderer::SequenceViewRenderer(ADVSequenceObjectContext *ctx)
+SequenceViewRenderer::SequenceViewRenderer(SequenceObjectContext *ctx)
     : ctx(ctx) {
 
 }
diff --git a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h
index 490374b..f790028 100644
--- a/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h
+++ b/src/corelibs/U2View/src/ov_sequence/view_rendering/SequenceViewRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 namespace U2 {
 
-class ADVSequenceObjectContext;
+class SequenceObjectContext;
 class U2Region;
 
 struct CommonSequenceViewMetrics {
@@ -50,7 +50,7 @@ struct CommonSequenceViewMetrics {
 /************************************************************************/
 class SequenceViewRenderer {
 public:
-    SequenceViewRenderer(ADVSequenceObjectContext* ctx);
+    SequenceViewRenderer(SequenceObjectContext* ctx);
 
     virtual qint64 coordToPos(const QPoint& p, const QSize& canvasSize, const U2Region& visibleRange) const = 0;
 
@@ -70,7 +70,7 @@ public:
     virtual QSize getBaseCanvasSize(const U2Region& visibleRange) const = 0;
 
 protected:
-    ADVSequenceObjectContext*   ctx;
+    SequenceObjectContext*      ctx;
     CommonSequenceViewMetrics   commonMetrics;
 
 };
diff --git a/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.cpp b/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.cpp
index e9e37b3..fe2e4f1 100644
--- a/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.cpp
+++ b/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,13 +31,8 @@
 #include <U2Core/TextObject.h>
 #include <U2Core/SelectionUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QScrollBar>
-#else
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QScrollBar>
-#endif
+#include <QVBoxLayout>
+#include <QScrollBar>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.h b/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.h
index 1feb795..96fbf73 100644
--- a/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.h
+++ b/src/corelibs/U2View/src/ov_text/SimpleTextObjectView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Core/TextSelection.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPlainTextEdit>
-#else
-#include <QtWidgets/QPlainTextEdit>
-#endif
+#include <QPlainTextEdit>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.cpp b/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.cpp
index 4cb32a1..ff8af53 100644
--- a/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.cpp
+++ b/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.h b/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.h
index 6b9ed45..3e92f5e 100644
--- a/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.h
+++ b/src/corelibs/U2View/src/ov_text/SimpleTextObjectViewTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.cpp
index 11f7bd6..eb11845 100644
--- a/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.h b/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.h
index 76bed7d..640e293 100644
--- a/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/BaseSettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
index f45bd8b..bd02649 100644
--- a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,12 +20,8 @@
  */
 
 #include <QColorDialog>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QPlastiqueStyle>
-#else
 #include <QProxyStyle>
 #include <QStyleFactory>
-#endif
 
 #include <U2Gui/HelpButton.h>
 
@@ -39,17 +35,13 @@ BranchSettingsDialog::BranchSettingsDialog(QWidget *parent, const OptionsMap& se
     changedSettings[BRANCH_COLOR] = settings[BRANCH_COLOR];
     changedSettings[BRANCH_THICKNESS] = settings[BRANCH_THICKNESS];
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223135");
+    new HelpButton(this, buttonBox, "20875039");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     thicknessSpinBox->setValue(changedSettings[BRANCH_THICKNESS].toInt());
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    QStyle *buttonStyle = new QPlastiqueStyle;
-#else
     QStyle *buttonStyle = new QProxyStyle(QStyleFactory::create("fusion"));
-#endif
     buttonStyle->setParent(colorButton);
     colorButton->setStyle(buttonStyle);
 
diff --git a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
index ed4c772..9b07613 100644
--- a/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/BranchSettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui
index 2097c95..091b2d1 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialog.ui
@@ -6,13 +6,13 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>380</width>
-    <height>189</height>
+    <width>650</width>
+    <height>185</height>
    </rect>
   </property>
   <property name="minimumSize">
    <size>
-    <width>0</width>
+    <width>650</width>
     <height>0</height>
    </size>
   </property>
@@ -107,7 +107,7 @@
        <item>
         <widget class="QPushButton" name="storeSettings">
          <property name="text">
-          <string>Remember Settings</string>
+          <string>Save Settings</string>
          </property>
         </widget>
        </item>
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
index cb222b3..0a87301 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PluginModel.h>
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
@@ -51,9 +51,9 @@
 
 namespace U2 {
 
-CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, const MAlignmentObject* mobj, CreatePhyTreeSettings& _settings) :
+CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, const MultipleSequenceAlignmentObject* mobj, CreatePhyTreeSettings& _settings) :
     QDialog(parent),
-    msa(mobj->getMAlignment()),
+    msa(mobj->getMsaCopy()),
     settings(_settings),
     settingsWidget(NULL),
     ui(new Ui_CreatePhyTree),
@@ -62,9 +62,9 @@ CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, co
     ui->setupUi(this);
 
     QMap<QString, QString> helpPagesMap;
-    helpPagesMap.insert("PHYLIP Neighbor Joining","18223093");
-    helpPagesMap.insert("MrBayes","18223094");
-    helpPagesMap.insert("PhyML Maximum Likelihood","18223092");
+    helpPagesMap.insert("PHYLIP Neighbor Joining","20874997");
+    helpPagesMap.insert("MrBayes","20874998");
+    helpPagesMap.insert("PhyML Maximum Likelihood","20874996");
     new ComboboxDependentHelpButton(this, ui->buttonBox, ui->algorithmBox, helpPagesMap);
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
@@ -91,7 +91,6 @@ CreatePhyTreeDialogController::CreatePhyTreeDialogController(QWidget* parent, co
 void CreatePhyTreeDialogController::accept() {
     settings.algorithmId = ui->algorithmBox->currentText();
 
-    CHECK(checkLicense(), );
     CHECK(checkFileName(), );
     SAFE_POINT(NULL != settingsWidget, "Settings widget is NULL", );
     settingsWidget->fillSettings(settings);
@@ -123,24 +122,6 @@ void CreatePhyTreeDialogController::sl_onRestoreDefault(){
     settingsWidget->restoreDefault();
 }
 
-bool CreatePhyTreeDialogController::checkLicense() {
-    if (settings.algorithmId == "PHYLIP Neighbor Joining") { // This is a bad hack :(
-        QList<Plugin *> plugins = AppContext::getPluginSupport()->getPlugins();
-        foreach (Plugin *plugin, plugins) {
-            if (plugin->getName() == "PHYLIP") {
-                if (!plugin->isLicenseAccepted()) {
-                    QObjectScopedPointer<LicenseDialog> licenseDialog = new LicenseDialog(plugin);
-                    const int ret = licenseDialog->exec();
-                    CHECK(!licenseDialog.isNull(), false);
-                    return (ret == QDialog::Accepted);
-                }
-            }
-        }
-    }
-
-    return true;
-}
-
 bool CreatePhyTreeDialogController::checkFileName() {
     const QString fileName = saveController->getSaveFileName();
     if (fileName.isEmpty()) {
@@ -189,7 +170,7 @@ bool CreatePhyTreeDialogController::checkMemory() {
     return true;
 }
 
-void CreatePhyTreeDialogController::initSaveController(const MAlignmentObject *mobj) {
+void CreatePhyTreeDialogController::initSaveController(const MultipleSequenceAlignmentObject *mobj) {
     SaveDocumentControllerConfig config;
     config.defaultFileName = GUrlUtils::getNewLocalUrlByExtention(mobj->getDocument()->getURLString(), mobj->getGObjectName(), ".nwk", "");
     config.defaultFormatId = BaseDocumentFormats::NEWICK;
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
index 0eaa991..3f66dee 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,20 +27,20 @@
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 
 #include <U2Core/global.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 class Ui_CreatePhyTree;
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 class CreatePhyTreeWidget;
 class SaveDocumentController;
 
 class U2VIEW_EXPORT CreatePhyTreeDialogController : public QDialog {
     Q_OBJECT
 public:
-    CreatePhyTreeDialogController(QWidget* parent, const MAlignmentObject* mobj, CreatePhyTreeSettings& settings);
+    CreatePhyTreeDialogController(QWidget* parent, const MultipleSequenceAlignmentObject* mobj, CreatePhyTreeSettings& settings);
     ~CreatePhyTreeDialogController();
 
 private slots:
@@ -50,13 +50,12 @@ private slots:
     void sl_onRestoreDefault();
 
 private:
-    bool checkLicense();
     bool checkFileName();
     bool checkSettings();
     bool checkMemory();
-    void initSaveController(const MAlignmentObject *mobj);
+    void initSaveController(const MultipleSequenceAlignmentObject *mobj);
 
-    MAlignment msa;
+    MultipleSequenceAlignment msa;
     CreatePhyTreeSettings& settings;
     QList<CreatePhyTreeWidget*> childWidgets;
     CreatePhyTreeWidget *settingsWidget;
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
index a09f021..f2cbf4f 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ bool CreatePhyTreeWidget::checkSettings(QString &, const CreatePhyTreeSettings &
     return true;
 }
 
-bool CreatePhyTreeWidget::checkMemoryEstimation(QString &, const MAlignment &, const CreatePhyTreeSettings &) {
+bool CreatePhyTreeWidget::checkMemoryEstimation(QString &, const MultipleSequenceAlignment &, const CreatePhyTreeSettings &) {
     return true;
 }
 
diff --git a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.h b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.h
index 3777415..89c5111 100644
--- a/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.h
+++ b/src/corelibs/U2View/src/phyltree/CreatePhyTreeWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,11 @@
 
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 
-#include <U2Core/global.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
 class CreatePhyTreeSettings;
-class MAlignment;
 class PhyTreeDisplayOptionsWidget;
 
 class U2VIEW_EXPORT CreatePhyTreeWidget : public QWidget {
@@ -42,7 +41,7 @@ public:
     virtual void storeSettings() = 0;
     virtual void restoreDefault() = 0;
     virtual bool checkSettings(QString &message, const CreatePhyTreeSettings &settings);
-    virtual bool checkMemoryEstimation(QString &message, const MAlignment &ma, const CreatePhyTreeSettings &settings);
+    virtual bool checkMemoryEstimation(QString &message, const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &settings);
     virtual bool insertOutputOptionWidget(PhyTreeDisplayOptionsWidget *outputOptionsWidget);
 
     static QString settingsPath();
diff --git a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
index e674838..ed42a11 100644
--- a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
+++ b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.h b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.h
index d8fe9d8..8f9dd81 100644
--- a/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.h
+++ b/src/corelibs/U2View/src/phyltree/PhyTreeDisplayOptionsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
index 7c50a24..24addce 100644
--- a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,12 +20,8 @@
  */
 
 #include <QColorDialog>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QPlastiqueStyle>
-#else
 #include <QProxyStyle>
 #include <QStyleFactory>
-#endif
 
 #include <U2Gui/HelpButton.h>
 
@@ -37,17 +33,13 @@ TextSettingsDialog::TextSettingsDialog(QWidget *parent, const OptionsMap& settin
 : BaseSettingsDialog(parent) {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223140");
+    new HelpButton(this, buttonBox, "20875044");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     curColor = qvariant_cast<QColor>(settings[LABEL_COLOR]);
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    QStyle *buttonStyle = new QPlastiqueStyle;
-#else
     QStyle *buttonStyle = new QProxyStyle(QStyleFactory::create("fusion"));
-#endif
     buttonStyle->setParent(colorButton);
     colorButton->setStyle(buttonStyle);
 
diff --git a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
index e09057e..22bddfd 100644
--- a/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/TextSettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
index 812dce3..dc071b5 100644
--- a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
+++ b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ namespace U2 {
 TreeSettingsDialog::TreeSettingsDialog(QWidget *parent, const OptionsMap &settings, bool isRectLayout)
 : BaseSettingsDialog(parent) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223134");
+    new HelpButton(this, buttonBox, "20875038");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
index 74a0160..e1adc98 100644
--- a/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
+++ b/src/corelibs/U2View/src/phyltree/TreeSettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui
index ad75c63..f22d259 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui
+++ b/src/corelibs/U2View/src/util_dna_assembly/AssemblyToRefDialog.ui
@@ -45,22 +45,6 @@
     </layout>
    </item>
    <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType">
-      <enum>QSizePolicy::Fixed</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>15</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
     <layout class="QGridLayout" name="gridLayout">
      <property name="sizeConstraint">
       <enum>QLayout::SetMinAndMaxSize</enum>
@@ -231,7 +215,7 @@
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
-       <height>15</height>
+       <height>0</height>
       </size>
      </property>
     </spacer>
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
index 43ef6ff..9227b78 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,12 +48,12 @@ BuildIndexDialog::BuildIndexDialog(const DnaAssemblyAlgRegistry* registry, QWidg
 {
     setupUi(this);
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("BWA","18223211");
-    helpPagesMap.insert("BWA-MEM","18223245");
-    helpPagesMap.insert("BWA-SW","18223239");
-    helpPagesMap.insert("Bowtie","18223208");
-    helpPagesMap.insert("Bowtie2","18223236");
-    helpPagesMap.insert("UGENE Genome Aligner","18223214");
+    helpPagesMap.insert("BWA","20875115");
+    helpPagesMap.insert("BWA-MEM","20875149");
+    helpPagesMap.insert("BWA-SW","20875143");
+    helpPagesMap.insert("Bowtie","20875112");
+    helpPagesMap.insert("Bowtie2","20875140");
+    helpPagesMap.insert("UGENE Genome Aligner","20875118");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -123,8 +123,7 @@ void BuildIndexDialog::updateState() {
 }
 
 void BuildIndexDialog::addGuiExtension() {
-    int insertPos = verticalLayout->count() - 2;
-
+    
     // cleanup previous extension
     if (customGUI != NULL) {
         layout()->removeWidget(customGUI);
@@ -142,6 +141,7 @@ void BuildIndexDialog::addGuiExtension() {
     DnaAssemblyGUIExtensionsFactory* gui = env->getGUIExtFactory();
     if (gui!=NULL && gui->hasBuildIndexWidget()) {
         customGUI = gui->createBuildIndexWidget(this);
+        int insertPos = verticalLayout->count() - 1;
         verticalLayout->insertWidget(insertPos, customGUI);
         if (!refSeqEdit->text().isEmpty()) {
             buildIndexUrl(refSeqEdit->text());
@@ -173,13 +173,18 @@ void BuildIndexDialog::buildIndexUrl(const GUrl& refUrl ) {
 void BuildIndexDialog::accept()
 {
 
-    if ((getAlgorithmName() == "Bowtie") || (getAlgorithmName() == "Bowtie2")) {
+    if ((getAlgorithmName() == "Bowtie") || (getAlgorithmName() == "Bowtie2") || (getAlgorithmName() == "BWA") || (getAlgorithmName() == "BWA-MEM") || (getAlgorithmName() == "BWA-SW")) {
         QString externalToolName;
+        
         if (getAlgorithmName() == "Bowtie2") {
             externalToolName = "Bowtie 2 build indexer";
-        } else {
+        } 
+        if (getAlgorithmName() == "Bowtie"){
             externalToolName = "Bowtie build indexer";
         }
+        if ((getAlgorithmName() == "BWA") || (getAlgorithmName() == "BWA-MEM") || (getAlgorithmName() == "BWA-SW")){
+            externalToolName = "BWA";
+        }
         if(AppContext::getExternalToolRegistry()->getByName(externalToolName)->getPath().isEmpty()) {
             QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(this);
             msgBox->setWindowTitle(tr("DNA Assembly"));
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
index e4c5941..4942aa4 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/GUrl.h>
 #include <ui_BuildIndexFromRefDialog.h>
 
-#include <QtCore/QVariant>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui
index 1080c75..8a3e5a0 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui
+++ b/src/corelibs/U2View/src/util_dna_assembly/BuildIndexFromRefDialog.ui
@@ -53,7 +53,7 @@
       </layout>
      </item>
      <item>
-      <spacer name="verticalSpacer_2">
+      <spacer name="topSpacer">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
@@ -127,7 +127,7 @@
       </layout>
      </item>
      <item>
-      <spacer name="verticalSpacer">
+      <spacer name="bottomSpacer">
        <property name="orientation">
         <enum>Qt::Vertical</enum>
        </property>
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
index 70110e1..515747a 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,7 +44,7 @@ ConvertAssemblyToSamDialog::ConvertAssemblyToSamDialog(QWidget* parent, QString
       saveController(NULL)
 {
     ui->setupUi(this);
-    new HelpButton(this, ui->buttonBox, "18223215");
+    new HelpButton(this, ui->buttonBox, "20875119");
 
     ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Convert"));
     ui->buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
index f37f29b..cfa7739 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/ConvertAssemblyToSamDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
index b5c4a64..e4f17df 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -67,12 +67,12 @@ DnaAssemblyDialog::DnaAssemblyDialog(QWidget* p, const QStringList& shortReadsUr
 {
     setupUi(this);
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("BWA","18223210");
-    helpPagesMap.insert("BWA-MEM","18223244");
-    helpPagesMap.insert("BWA-SW","18223238");
-    helpPagesMap.insert("Bowtie","18223207");
-    helpPagesMap.insert("Bowtie2","18223235");
-    helpPagesMap.insert("UGENE Genome Aligner","18223213");
+    helpPagesMap.insert("BWA","20875114");
+    helpPagesMap.insert("BWA-MEM","20875148");
+    helpPagesMap.insert("BWA-SW","20875142");
+    helpPagesMap.insert("Bowtie","20875111");
+    helpPagesMap.insert("Bowtie2","20875139");
+    helpPagesMap.insert("UGENE Genome Aligner","20875117");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
index 41c931d..a1c9966 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.cpp b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.cpp
index 1c72ee7..e67364b 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.h b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.h
index 892b0e8..53c10a1 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyGUIExtension.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,16 +22,11 @@
 #ifndef _U2_DNA_ASSEMBLEY_GUI_EXTENSION_H_
 #define _U2_DNA_ASSEMBLEY_GUI_EXTENSION_H_
 
-
 #include <U2Core/global.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/Task.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include <U2Algorithm/DnaAssemblyTask.h>
 
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.cpp b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.cpp
index 1789577..4278be9 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -70,7 +70,7 @@ DnaAssemblySupport::DnaAssemblySupport()
     connect( convertAssemblyToSamAction, SIGNAL( triggered() ), SLOT( sl_showConvertToSamDialog() ) );
     ToolsMenu::addAction(ToolsMenu::NGS_MENU, convertAssemblyToSamAction);
 
-    QAction* genomeAssemblyAction = new QAction( tr("Genome de novo assembly..."), this );
+    QAction* genomeAssemblyAction = new QAction( tr("Reads de novo assembly (with SPAdes)..."), this );
     genomeAssemblyAction->setObjectName(ToolsMenu::NGS_DENOVO);
     genomeAssemblyAction->setIcon(QIcon(":core/images/align.png"));
     connect( genomeAssemblyAction, SIGNAL( triggered() ), SLOT( sl_showGenomeAssemblyDialog() ) );
@@ -89,8 +89,7 @@ DnaAssemblySupport::DnaAssemblySupport()
     ToolsMenu::addAction(ToolsMenu::NGS_MENU, buildIndexAction);
 }
 
-void DnaAssemblySupport::sl_showDnaAssemblyDialog()
-{
+void DnaAssemblySupport::sl_showDnaAssemblyDialog() {
     DnaAssemblyAlgRegistry* registry = AppContext::getDnaAssemblyAlgRegistry();
     if (registry->getRegisteredAlgorithmIds().isEmpty()) {
         QMessageBox::information(QApplication::activeWindow(), tr("DNA Assembly"),
@@ -297,12 +296,13 @@ void FilterUnpairedReadsTask::run() {
         CHECK_OP(stateInfo, );
         QString tmpFileDownstream = getTmpFilePath(downstream[i].url);
         CHECK_OP(stateInfo, );
-        compareFiles(upstream[i].url.getURLString(), downstream[i].url.getURLString(),
-                     tmpFileUpstream, tmpFileDownstream);
-        CHECK_OP(stateInfo, );
 
         filteredReads << ShortReadSet(GUrl(tmpFileUpstream), ShortReadSet::PairedEndReads, ShortReadSet::UpstreamMate);
         filteredReads << ShortReadSet(GUrl(tmpFileDownstream), ShortReadSet::PairedEndReads, ShortReadSet::DownstreamMate);
+
+        compareFiles(upstream[i].url.getURLString(), downstream[i].url.getURLString(),
+                     tmpFileUpstream, tmpFileDownstream);
+        CHECK_OP(stateInfo, );
     }
 }
 
@@ -323,9 +323,9 @@ void FilterUnpairedReadsTask::compareFiles(const GUrl &upstream, const GUrl &dow
     CHECK_OP(stateInfo, );
 
     if (comparator.getUnpairedCount() != 0) {
-        stateInfo.addWarning(tr("%1 pairs are complete, %2 reads without a pair were found in files %3 and %4.")
+        stateInfo.addWarning(tr("%1 read pairs were mapped, %2 reads without a pair from files \"%3\" and \"%4\" were skipped.")
                              .arg(comparator.getPairsCount()).arg(comparator.getUnpairedCount())
-                             .arg(upstream.getURLString()).arg(downstream.getURLString()));
+                             .arg(QFileInfo(upstream.getURLString()).fileName()).arg(QFileInfo(downstream.getURLString()).fileName()));
     }
 }
 
@@ -357,7 +357,7 @@ void DnaAssemblyTaskWithConversions::prepare() {
     }
 
     if (0 == conversionTasksCount) {
-        if (settings.filterUnpaired) {
+        if (settings.filterUnpaired && settings.pairedReads) {
             addSubTask(new FilterUnpairedReadsTask(settings));
             return;
         }
@@ -369,6 +369,10 @@ void DnaAssemblyTaskWithConversions::prepare() {
 
 QList<Task*> DnaAssemblyTaskWithConversions::onSubTaskFinished(Task *subTask) {
     QList<Task*> result;
+    FilterUnpairedReadsTask* filterTask = qobject_cast<FilterUnpairedReadsTask*>(subTask);
+    if (filterTask != NULL) {
+        settings.shortReadSets = filterTask->getFilteredReadList();
+    }
     CHECK(!subTask->hasError(), result);
     CHECK(!hasError(), result);
 
@@ -387,7 +391,7 @@ QList<Task*> DnaAssemblyTaskWithConversions::onSubTaskFinished(Task *subTask) {
         conversionTasksCount--;
 
         if (0 == conversionTasksCount) {
-            if (settings.filterUnpaired) {
+            if (settings.filterUnpaired && settings.pairedReads) {
                 result << new FilterUnpairedReadsTask(settings);
                 return result;
             }
@@ -395,9 +399,7 @@ QList<Task*> DnaAssemblyTaskWithConversions::onSubTaskFinished(Task *subTask) {
             result << assemblyTask;
         }
     }
-    FilterUnpairedReadsTask* filterTask = qobject_cast<FilterUnpairedReadsTask*>(subTask);
     if (settings.filterUnpaired && filterTask != NULL) {
-        settings.shortReadSets = filterTask->getFilteredReadList();
         assemblyTask = new DnaAssemblyMultiTask(settings, viewResult, justBuildIndex);
         result << assemblyTask;
     }
diff --git a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.h b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.h
index a351fef..b93dfaf 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/DnaAssemblyUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
index d365f62..da11de3 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
+++ b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-
-#include <QtGui/QKeyEvent>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QKeyEvent>
+#include <QMessageBox>
 
 #include <U2Algorithm/GenomeAssemblyRegistry.h>
 
@@ -63,7 +56,7 @@ GenomeAssemblyDialog::GenomeAssemblyDialog(QWidget* p)
     setupUi(this);
 
     QMap<QString,QString> helpPagesMap;
-    helpPagesMap.insert("SPAdes","18223246");
+    helpPagesMap.insert("SPAdes","20875150");
     new ComboboxDependentHelpButton(this, buttonBox, methodNamesBox, helpPagesMap);
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -208,7 +201,7 @@ void GenomeAssemblyDialog::accept() {
 
     if (resultDirNameEdit->text().isEmpty() ) {
         QMessageBox::information(this, tr("Genome Assembly"),
-            tr("Result assembly directory is not set!") );
+            tr("Result assembly folder is not set!") );
         validated = false;
     } else {
         if(GenomeAssemblyUtils::hasRightReads(libraryComboBox->currentText())){
@@ -271,7 +264,7 @@ void GenomeAssemblyDialog::accept() {
             if (!d.exists()) {
                 if (!d.mkdir(outputDirUrl)) {
                     QMessageBox::information(this, tr("Genome Assembly"),
-                        tr("Unable to create output directory for result assembly.\r\nDirectory Path: %1").arg(outputDirUrl));
+                        tr("Unable to create output folder for result assembly.\r\nDirectory Path: %1").arg(outputDirUrl));
                 }
             }
             QDialog::accept();
@@ -336,7 +329,7 @@ void GenomeAssemblyDialog::sl_onRemoveShortReadsButtonClicked() {
 void GenomeAssemblyDialog::sl_onOutDirButtonClicked(){
     LastUsedDirHelper lod("assemblyRes");
 
-    lod.url = U2FileDialog::getExistingDirectory(this, tr("Select output directory"), lod.dir);
+    lod.url = U2FileDialog::getExistingDirectory(this, tr("Select output folder"), lod.dir);
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
index fbc38e3..50c9b84 100644
--- a/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
+++ b/src/corelibs/U2View/src/util_dna_assembly/GenomeAssemblyDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,9 @@
 
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QVariant>
-#include <QtCore/QStringList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QVariant>
+#include <QStringList>
+#include <QWidget>
 
 #include <ui_GenomeAssemblyDialog.h>
 
diff --git a/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.cpp b/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.cpp
index d6d5276..2a36554 100644
--- a/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.cpp
+++ b/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.h b/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.h
index 3f66762..ca2c9a7 100644
--- a/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.h
+++ b/src/corelibs/U2View/src/util_msa_align/AlignmentAlgorithmGUIExtension.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,19 +24,13 @@
 
 #include <U2Core/global.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QMap>
-#include <QtCore/QVariantMap>
-#include <QtCore/QString>
-#include <QtCore/QVariant>
-#include <QtCore/QPointer>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
-
+#include <QObject>
+#include <QMap>
+#include <QVariantMap>
+#include <QString>
+#include <QVariant>
+#include <QPointer>
+#include <QWidget>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
index 1ffff88..42159ae 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,6 +43,7 @@
 #include <U2Gui/HelpButton.h>
 #include <U2Core/QObjectScopedPointer.h>
 
+#include <U2View/AnnotatedDNAView.h>
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/LicenseDialog.h>
 
@@ -53,7 +54,7 @@ namespace U2 {
 SecStructDialog::SecStructDialog( ADVSequenceObjectContext* _ctx, QWidget *p ) : QDialog(p), rangeStart(0), rangeEnd(0), ctx(_ctx), task(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223186");
+    new HelpButton(this, buttonBox, "20875090");
 
     sspr = AppContext::getSecStructPredictAlgRegistry();
     algorithmComboBox->addItems(sspr->getAlgNameList());
@@ -223,6 +224,7 @@ void SecStructDialog::sl_onSaveAnnotations() {
     if (rc != QDialog::Accepted) {
         return;
     }
+    ctx->getAnnotatedDNAView()->tryAddObject(m.getAnnotationObject());
 
     U1AnnotationUtils::addDescriptionQualifier(results, m.description);
 
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h
index 7abbbe3..10e93e4 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.cpp b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.cpp
index 79e6617..0fc28e4 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.cpp
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.h b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.h
index dfc7eff..877e712 100644
--- a/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.h
+++ b/src/corelibs/U2View/src/util_sec_struct_predict/SecStructPredictUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
index 8b10a60..df60692 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,6 +45,7 @@
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
 
 #include "SmithWatermanDialogImpl.h"
 #include "SubstMatrixDialog.h"
@@ -59,7 +60,7 @@ extern const qint32 STRING_HAS_NO_KEY_MESSAGE;
 const quint8 COUNT_OF_TEMPLATE_BUTTONS_IN_ROW = 2;
 const char * RUN_BUTTON_ANNOT_RESULT_LABEL = "Search";
 const char * RUN_BUTTON_MA_RESULT_LABEL = "Align";
-const char * RESULT_DIR_NOT_FOUND_MESSAGE = "Directory you have chosen for alignment files does not exist";
+const char * RESULT_DIR_NOT_FOUND_MESSAGE = "Folder you have chosen for alignment files does not exist";
 const QString DEFAULT_PATTERN_SEQUENCE_NAME = "P";
 const QChar DEFAULT_SHORTHANDS_SEPARATOR = '_';
 
@@ -72,7 +73,7 @@ SmithWatermanDialog::SmithWatermanDialog(QWidget* w, ADVSequenceObjectContext* c
     dialogConfig = _dialogConfig;
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223193");
+    new HelpButton(this, buttonBox, "20875097");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Remote run"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -483,11 +484,13 @@ void SmithWatermanDialog::sl_bttnRun()
                 QMessageBox::critical(this, L10N::errorTitle(), tr("Cannot create an annotation object. Please check settings."));
                 return;
             }
+
             const CreateAnnotationModel& m = annotationController->getModel();
             AnnotationTableObject *obj = m.getAnnotationObject();
             U2FeatureType annotationType = m.data->type;
             QString annotationName = m.data->name;
             QString annotationGroup = m.groupName;
+            ctxSeq->getAnnotatedDNAView()->tryAddObject(obj);
 
             config.resultCallback = new SmithWatermanReportCallbackAnnotImpl(obj, annotationType, annotationName,
                 annotationGroup, m.description, addPatternContentQualifier->isChecked());
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.h b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.h
index 6c9b343..75dc864 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.h
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui
index ebdbc57..37176a0 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogBase.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>765</width>
-    <height>426</height>
+    <height>448</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -707,7 +707,16 @@
                  </item>
                  <item row="5" column="0" colspan="3">
                   <layout class="QGridLayout" name="tmplButtonsLayout">
-                   <property name="margin">
+                   <property name="leftMargin">
+                    <number>0</number>
+                   </property>
+                   <property name="topMargin">
+                    <number>0</number>
+                   </property>
+                   <property name="rightMargin">
+                    <number>0</number>
+                   </property>
+                   <property name="bottomMargin">
                     <number>0</number>
                    </property>
                    <property name="spacing">
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
index 50091d1..cc53915 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
+++ b/src/corelibs/U2View/src/util_smith_waterman/SmithWatermanDialogImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.cpp b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.cpp
index 889097b..09001c5 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.cpp
+++ b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,17 +22,10 @@
 #include "SubstMatrixDialog.h"
 
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QScrollBar>
-#include <QtGui/QHeaderView>
-#include <QtGui/QTableWidgetItem>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QScrollBar>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QTableWidgetItem>
-#endif
+#include <QPushButton>
+#include <QScrollBar>
+#include <QHeaderView>
+#include <QTableWidgetItem>
 
 namespace U2 {
 
@@ -119,14 +112,8 @@ void SubstMatrixDialog::prepareTable() {
         tableMatrix->setItem(0, i+1, ptwi);
     }
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    tableMatrix->verticalHeader()->setResizeMode(QHeaderView::Stretch);
-    tableMatrix->horizontalHeader()->setResizeMode(QHeaderView::Stretch);
-#else
     tableMatrix->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);
     tableMatrix->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
-#endif
-
     tableMatrix->setMinimumSize(CELL_WIDTH * (n + 1) + 20, CELL_WIDTH * (n + 1) + 20); //+20 is for borders
 }
 
diff --git a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
index 595911c..a4c9eed 100644
--- a/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
+++ b/src/corelibs/U2View/src/util_smith_waterman/SubstMatrixDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Core/global.h>
 #include <U2Core/SMatrix.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 namespace U2 {
 
diff --git a/src/corelibs/U2View/transl/english.ts b/src/corelibs/U2View/transl/english.ts
index 6087250..5a2ae18 100644
--- a/src/corelibs/U2View/transl/english.ts
+++ b/src/corelibs/U2View/transl/english.ts
@@ -14,33 +14,33 @@ Probably the data is too big.</translation>
 <context>
     <name>AssemblyToRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="88"/>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="112"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="72"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="96"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="177"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="161"/>
         <source>Path</source>
         <translation>Path</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="182"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
         <source>Type</source>
         <translation>Type</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="187"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="171"/>
         <source>Order</source>
         <translation>Order</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="210"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="194"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="217"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="201"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -65,52 +65,52 @@ Probably the data is too big.</translation>
         <translation>Select required align short reads method</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="71"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="55"/>
         <source>Select a DNA sequence to align short reads to. This parameter is <b>required</b>.</source>
         <translation>Select a DNA sequence to align short reads to. This parameter is <b>required</b>.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="74"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="58"/>
         <source>Reference sequence</source>
         <translation>Reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="95"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="79"/>
         <source>File in UGENE database format or SAM format (if the box SAM output check), to write the result of the alignment into. This parameter is <b>required</b>.</source>
         <translation>File in UGENE database format or SAM format (if the box SAM output check), to write the result of the alignment into. This parameter is <b>required</b>.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="98"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="82"/>
         <source>Result file name</source>
         <translation>Result file name</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="107"/>
         <source>Library</source>
         <translation>Library</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="131"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="115"/>
         <source>Single-end</source>
         <translation>Single-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="120"/>
         <source>Paired-end</source>
         <translation>Paired-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="157"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="141"/>
         <source>SAM output</source>
         <translation>SAM output</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="150"/>
         <source>Add short reads here. <b>At least one read</b> should be presented.</source>
         <translation>Add short reads here. <b>At least one read</b> should be presented.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="169"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="153"/>
         <source>Short reads</source>
         <translation>Short reads</translation>
     </message>
@@ -235,6 +235,10 @@ Probably the data is too big.</translation>
         <translation>Create and modify custom color schemes</translation>
     </message>
     <message>
+        <source>Folder to save color scheme:</source>
+        <translation type="vanished">Folder to save color scheme:</translation>
+    </message>
+    <message>
         <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="35"/>
         <source>Directory to save color scheme:</source>
         <translation>Directory to save color scheme:</translation>
@@ -307,8 +311,12 @@ Probably the data is too big.</translation>
     </message>
     <message>
         <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="110"/>
+        <source>Save Settings</source>
+        <translation>Save Settings</translation>
+    </message>
+    <message>
         <source>Remember Settings</source>
-        <translation>Remember Settings</translation>
+        <translation type="vanished">Remember Settings</translation>
     </message>
     <message>
         <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="117"/>
@@ -362,47 +370,47 @@ Probably the data is too big.</translation>
         <translation>From </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="51"/>
         <source> to </source>
         <translation> to </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="76"/>
         <source>Selected sequences</source>
         <translation>Selected sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="105"/>
         <source>Invert selection</source>
         <translation>Invert selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="112"/>
         <source>Select all</source>
         <translation>Select all</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="119"/>
         <source>Clear selection</source>
         <translation>Clear selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="127"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="130"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="137"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="140"/>
         <source>File name</source>
         <translation>File name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="144"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="147"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="173"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="176"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -437,25 +445,6 @@ Probably the data is too big.</translation>
     </message>
 </context>
 <context>
-    <name>EditAnnotationDialog</name>
-    <message>
-        <source>Edit Annotation</source>
-        <translation type="vanished">Edit Annotation</translation>
-    </message>
-    <message>
-        <source>Annotation name</source>
-        <translation type="vanished">Annotation name</translation>
-    </message>
-    <message>
-        <source>Location</source>
-        <translation type="vanished">Location</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation type="vanished">...</translation>
-    </message>
-</context>
-<context>
     <name>ExportConsensusDialog</name>
     <message>
         <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="14"/>
@@ -511,32 +500,32 @@ Probably the data is too big.</translation>
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="34"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="37"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="44"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="61"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="75"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="88"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="82"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="78"/>
         <source>Info: alphabet of the consensus is undefined, the sequence can only be saved into a plain text document.</source>
         <translation>Info: alphabet of the consensus is undefined, the sequence can only be saved into a plain text document.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="121"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
@@ -544,46 +533,42 @@ Probably the data is too big.</translation>
 <context>
     <name>ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="14"/>
-        <source>Export the Assembly Coverage</source>
-        <translation>Export the Assembly Coverage</translation>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="20"/>
+        <source>Export Assembly Coverage</source>
+        <translation>Export Assembly Coverage</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="23"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="29"/>
         <source>Export to:</source>
         <translation>Export to:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="35"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="44"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="50"/>
         <source>Format:</source>
         <translation>Format:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="69"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="75"/>
         <source>Compress the file</source>
         <translation>Compress the file</translation>
     </message>
     <message>
-        <source>Additional options</source>
-        <translation type="vanished">Additional options</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="124"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="142"/>
         <source>Export coverage value</source>
         <translation>Export coverage value</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="134"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="152"/>
         <source>Export bases quantity</source>
         <translation>Export bases quantity</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="83"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="101"/>
         <source>Threshold:</source>
         <translation>Threshold:</translation>
     </message>
@@ -682,10 +667,6 @@ Probably the data is too big.</translation>
         <translation>Export Assembly Region</translation>
     </message>
     <message>
-        <source>Export to file</source>
-        <translation type="vanished">Export to file</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="22"/>
         <source>Save to file</source>
         <translation>Save to file</translation>
@@ -812,32 +793,12 @@ Probably the data is too big.</translation>
         <translation>Sequence number:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="117"/>
-        <source>Consensus type:</source>
-        <translation>Consensus type:</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="129"/>
-        <source>Threshold:</source>
-        <translation>Threshold:</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="136"/>
-        <source>Reset to default value</source>
-        <translation>Reset to default value</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="176"/>
-        <source>%</source>
-        <translation>%</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="203"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="120"/>
         <source>Format:</source>
         <translation>Format:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="213"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="130"/>
         <source>Copy</source>
         <translation>Copy</translation>
     </message>
@@ -875,6 +836,10 @@ Probably the data is too big.</translation>
         <translation>File in UGENE database format or SAM format (if the box SAM output check), to write the result of the alignment into. This parameter is <b>required</b>.</translation>
     </message>
     <message>
+        <source>Output folder</source>
+        <translation type="vanished">Output folder</translation>
+    </message>
+    <message>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="82"/>
         <source>Output directory</source>
         <translation>Output directory</translation>
@@ -974,27 +939,37 @@ Probably the data is too big.</translation>
         <translation>Distance algorithm:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="147"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="132"/>
+        <source>Count</source>
+        <translation>Count</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="139"/>
+        <source>Percentage</source>
+        <translation>Percentage</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="156"/>
         <source>Automatic updating</source>
         <translation>Automatic updating</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="162"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="171"/>
         <source><dataState></source>
         <translation><dataState></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="169"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="178"/>
         <source>Refresh distances</source>
         <translation>Refresh distances</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="172"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="181"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="191"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="200"/>
         <source><hint></source>
         <translation><hint></translation>
     </message>
@@ -1004,17 +979,15 @@ Probably the data is too big.</translation>
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="123"/>
         <source>Counts</source>
-        <translation>Counts</translation>
+        <translation type="vanished">Counts</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="130"/>
         <source>Percents</source>
-        <translation>Percents</translation>
+        <translation type="vanished">Percents</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="137"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="146"/>
         <source>Exclude gaps</source>
         <translation>Exclude gaps</translation>
     </message>
@@ -1063,6 +1036,52 @@ Probably the data is too big.</translation>
     </message>
 </context>
 <context>
+    <name>MaConsensusModeWidget</name>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>Form</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="20"/>
+        <source>Consensus type:</source>
+        <translation>Consensus type:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="32"/>
+        <source>Threshold:</source>
+        <translation>Threshold:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="39"/>
+        <source>Reset to default value</source>
+        <translation>Reset to default value</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="85"/>
+        <source>%</source>
+        <translation>%</translation>
+    </message>
+</context>
+<context>
+    <name>McaGeneralTab</name>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>Form</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="52"/>
+        <source>Sequence number:</source>
+        <translation>Sequence number:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="59"/>
+        <source>Length:</source>
+        <translation>Length:</translation>
+    </message>
+</context>
+<context>
     <name>PairwiseAlignmentOptionsPanelWidget</name>
     <message>
         <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
@@ -1166,63 +1185,63 @@ Probably the data is too big.</translation>
         <translation>Collapse</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="57"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="52"/>
         <source>Save As</source>
         <translation>Save As</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="66"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="61"/>
         <source>Replace file</source>
         <translation>Replace file</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="67"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="62"/>
         <source>%1 already exists.
 Do you want to replace it?</source>
         <translation>%1 already exists.
 Do you want to replace it?</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="173"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="167"/>
         <source>The following sequences contain unrecognizable symbols:
 </source>
         <translation>The following sequences contain unrecognizable symbols:
 </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="177"/>
         <source>and others...
 </source>
         <translation>and others...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="186"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="180"/>
         <source>Some algorithms will not work for these sequences.</source>
         <translation>Some algorithms will not work for these sequences.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="187"/>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="196"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="181"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="190"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="81"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="76"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="82"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="77"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="114"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="109"/>
         <source>Export simple overview</source>
         <translation>Export simple overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="115"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="110"/>
         <source>Export graph overview</source>
         <translation>Export graph overview</translation>
     </message>
@@ -1234,220 +1253,229 @@ Double-click to collapse the branch</source>
 Double-click to collapse the branch</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyInfoWidget.cpp" line="125"/>
+        <location filename="../src/ov_assembly/AssemblyInfoWidget.cpp" line="152"/>
         <source>Assembly Statistics</source>
         <translation>Assembly Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyNavigationWidget.cpp" line="134"/>
+        <location filename="../src/ov_assembly/AssemblyNavigationWidget.cpp" line="155"/>
         <source>Navigation</source>
         <translation>Navigation</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="175"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="186"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="965"/>
         <source>Lock here</source>
         <translation>Lock here</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <source>Shift+move mouse</source>
         <translation>Shift+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <source>Zoom the Assembly Overview to selection</source>
         <translation>Zoom the Assembly Overview to selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
         <source>Ctrl+wheel</source>
         <translation>Ctrl+wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
         <source>Zoom the Assembly Overview</source>
         <translation>Zoom the Assembly Overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
         <source>Alt+click</source>
         <translation>Alt+click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
         <source>Zoom the Assembly Overview in 100x</source>
         <translation>Zoom the Assembly Overview in 100x</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
         <source>Wheel+move mouse</source>
         <translation>Wheel+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
         <source>Move the Assembly Overview</source>
         <translation>Move the Assembly Overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <source>Wheel</source>
         <translation>Wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <source>Zoom the Reads Area</source>
         <translation>Zoom the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
         <source>Double-click</source>
         <translation>Double-click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
         <source>Zoom in the Reads Area</source>
         <translation>Zoom in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <source>+/-</source>
         <translation>+/-</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <source>Zoom in/Zoom out the Reads Area</source>
         <translation>Zoom in/Zoom out the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
         <source>Click+move mouse</source>
         <translation>Click+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
         <source>Move the Reads Area</source>
         <translation>Move the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
         <source>Arrow</source>
         <translation>Arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
         <source>Move one base in the corresponding direction in the Reads Area</source>
         <translation>Move one base in the corresponding direction in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
         <source>Ctrl+arrow</source>
         <translation>Ctrl+arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
         <source>Move one page in the corresponding direction in the Reads Area</source>
         <translation>Move one page in the corresponding direction in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
         <source>Page up/Page down</source>
         <translation>Page up/Page down</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
         <source>Move one page up/down in the Reads Area</source>
         <translation>Move one page up/down in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
         <source>Home/End</source>
         <translation>Home/End</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
         <source>Move to the beginning/end of the assembly in the Reads Area</source>
         <translation>Move to the beginning/end of the assembly in the Reads Area</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="350"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
         <source>Ctrl+G</source>
         <translation>Ctrl+G</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="350"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
         <source>Focus to the <i>Go to position</i> field on the toolbar</source>
         <translation>Focus to the <i>Go to position</i> field on the toolbar</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="74"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="69"/>
         <source>no information</source>
         <translation>no information</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="89"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="105"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="152"/>
         <source>direct</source>
         <translation>direct</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="90"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="105"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="152"/>
         <source>complement</source>
         <translation>complement</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="164"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="156"/>
         <source>Unmapped</source>
         <translation>Unmapped</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblySettingsWidget.cpp" line="233"/>
+        <location filename="../src/ov_assembly/AssemblySettingsWidget.cpp" line="260"/>
         <source>Assembly Browser Settings</source>
         <translation>Assembly Browser Settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="62"/>
         <source>Export Consensus</source>
         <translation>Export Consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/MSAGeneralTabFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="100"/>
+        <source>Consensus</source>
+        <translation>Consensus</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MSAGeneralTabFactory.cpp" line="62"/>
+        <location filename="../src/ov_msa/General/McaGeneralTabFactory.cpp" line="59"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp" line="34"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp" line="55"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
         <source>Data is outdated</source>
         <translation>Data is outdated</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
         <source>Data is valid</source>
         <translation>Data is valid</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="44"/>
         <source>Data is being updated</source>
         <translation>Data is being updated</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlignFactory.cpp" line="32"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlignFactory.cpp" line="57"/>
         <source>Pairwise Alignment</source>
         <translation>Pairwise Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp" line="36"/>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfoFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp" line="58"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfoFactory.cpp" line="58"/>
         <source>Statistics</source>
         <translation>Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="36"/>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="77"/>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="119"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="66"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="107"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="139"/>
         <source>Tree Settings</source>
         <translation>Tree Settings</translation>
     </message>
@@ -1457,37 +1485,37 @@ Double-click to collapse the branch</translation>
         <translation>Default color</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="34"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="53"/>
         <source>Annotation</source>
         <translation>Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="35"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="53"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp" line="36"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp" line="58"/>
         <source>Annotations Highlighting</source>
         <translation>Annotations Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="218"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="306"/>
         <source>Search algorithm</source>
         <translation>Search algorithm</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="219"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="307"/>
         <source>Search in</source>
         <translation>Search in</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="220"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="308"/>
         <source>Other settings</source>
         <translation>Other settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp" line="36"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp" line="58"/>
         <source>Search in Sequence</source>
         <translation>Search in Sequence</translation>
     </message>
@@ -1507,12 +1535,13 @@ Double-click to collapse the branch</translation>
         <translation>Bedgraph</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="40"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="48"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="62"/>
         <source>Show all annotation names</source>
         <translation>Show all annotation names</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="41"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="66"/>
         <source>Show names for the sequence only</source>
         <translation>Show names for the sequence only</translation>
     </message>
@@ -1521,6 +1550,11 @@ Double-click to collapse the branch</translation>
         <source>Restriction Site</source>
         <translation>Restriction Site</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="110"/>
+        <source>none</source>
+        <translation>none</translation>
+    </message>
 </context>
 <context>
     <name>SaveGraphCutoffsDialog</name>
@@ -1743,6 +1777,14 @@ Double-click to collapse the branch</translation>
         <translation>Smith-Waterman Search</translation>
     </message>
     <message>
+        <source>Advanced</source>
+        <translation type="obsolete">Advanced</translation>
+    </message>
+    <message>
+        <source>View</source>
+        <translation type="obsolete">View</translation>
+    </message>
+    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="478"/>
         <source>Input and output</source>
         <translation>Input and output</translation>
@@ -1868,6 +1910,10 @@ Double-click to collapse the branch</translation>
         <translation>Alignment files directory path</translation>
     </message>
     <message>
+        <source>Alignment files folder path</source>
+        <translation type="vanished">Alignment files folder path</translation>
+    </message>
+    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="611"/>
         <source>...</source>
         <translation>...</translation>
@@ -1893,7 +1939,7 @@ Double-click to collapse the branch</translation>
         <translation>Template for pattern subsequences names</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="721"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="730"/>
         <source>Pattern sequence name</source>
         <translation>Pattern sequence name</translation>
     </message>
@@ -2155,58 +2201,25 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::ADVSequenceObjectContext</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="207"/>
+        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="49"/>
         <source>Incorrect signal sender!</source>
         <translation>Incorrect signal sender!</translation>
     </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="217"/>
-        <source>Select genetic code</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="229"/>
-        <source>Show/hide amino acid translations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="237"/>
-        <source>Show direct only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="238"/>
-        <source>Show complementary only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="239"/>
-        <source>Show all</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Amino translation</source>
-        <translation type="vanished">Amino translation</translation>
-    </message>
-    <message>
-        <source>Translation frames</source>
-        <translation type="vanished">Translation frames</translation>
-    </message>
 </context>
 <context>
     <name>U2::ADVSingleSequenceHeaderWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="971"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
         <source>Alphabet: <b>%1</b></source>
         <translation>Alphabet: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="972"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="974"/>
         <source> Sequence size: <b>%1</b></source>
         <translation> Sequence size: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="975"/>
         <source> File:&nbsp;<b>%1</b></source>
         <translation>File:&nbsp;<b>%1</b></translation>
     </message>
@@ -2249,113 +2262,113 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::ADVSingleSequenceWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="99"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="100"/>
         <source>Select sequence region...</source>
         <translation>Select sequence region...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="105"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="106"/>
         <source>Sequence region...</source>
         <translation>Sequence region...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="109"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="110"/>
         <source>Sequence between selected annotations</source>
         <translation>Sequence between selected annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="113"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="114"/>
         <source>Sequence around selected annotations</source>
         <translation>Sequence around selected annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="117"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="118"/>
         <source>Zoom to range...</source>
         <translation>Zoom to range...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="121"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="122"/>
         <source>Create new ruler...</source>
         <translation>Create new ruler...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="203"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="204"/>
         <source>Export image</source>
         <translation>Export image</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="219"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="220"/>
         <source>Remove sequence</source>
         <translation>Remove sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="443"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="444"/>
         <source>Zoom</source>
         <translation>Zoom</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="520"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="521"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="535"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="536"/>
         <source>Rulers...</source>
         <translation>Rulers...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="546"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="547"/>
         <source>Remove '%1'</source>
         <translation>Remove '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="707"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="708"/>
         <source>Zoom to range</source>
         <translation>Zoom to range</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="310"/>
         <source>Show all views</source>
         <translation>Show all views</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="310"/>
         <source>Hide all views</source>
         <translation>Hide all views</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="927"/>
         <source>Show zoom view</source>
         <translation>Show zoom view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="927"/>
         <source>Hide zoom view</source>
         <translation>Hide zoom view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="932"/>
         <source>Show details view</source>
         <translation>Show details view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="932"/>
         <source>Hide details view</source>
         <translation>Hide details view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="240"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="937"/>
         <source>Show overview</source>
         <translation>Show overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="240"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="937"/>
         <source>Hide overview</source>
         <translation>Hide overview</translation>
     </message>
@@ -2363,42 +2376,42 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::ADVSyncViewManager</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="41"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="42"/>
         <source>Lock scales: visible range start</source>
         <translation>Lock scales: visible range start</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="46"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="47"/>
         <source>Lock scales: selected sequence</source>
         <translation>Lock scales: selected sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="51"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="52"/>
         <source>Lock scales: selected annotation</source>
         <translation>Lock scales: selected annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="62"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="63"/>
         <source>Adjust scales: visible range start</source>
         <translation>Adjust scales: visible range start</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="66"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="67"/>
         <source>Adjust scales: selected sequence</source>
         <translation>Adjust scales: selected sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="70"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="71"/>
         <source>Adjust scales: selected annotation</source>
         <translation>Adjust scales: selected annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="74"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="75"/>
         <source>Lock scales</source>
         <translation>Lock scales</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="78"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="79"/>
         <source>Adjust scales</source>
         <translation>Adjust scales</translation>
     </message>
@@ -2448,12 +2461,12 @@ Double-click to collapse the branch</translation>
         <translation>Show all overviews</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="586"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="589"/>
         <source>Hide %1</source>
         <translation>Hide %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="588"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="591"/>
         <source>Show %1</source>
         <translation>Show %1</translation>
     </message>
@@ -2474,17 +2487,17 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AddTreeWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="369"/>
         <source>There are no displayed trees so settings are hidden.</source>
         <translation>There are no displayed trees so settings are hidden.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="385"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
         <source>Open tree</source>
         <translation>Open tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="394"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="386"/>
         <source>Build tree</source>
         <translation>Build tree</translation>
     </message>
@@ -2510,37 +2523,37 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AnnotHighlightWidget</name>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="93"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="94"/>
         <source>Select an annotation name:</source>
         <translation>Select an annotation name:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="114"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="115"/>
         <source>Configure the annotations:</source>
         <translation>Configure the annotations:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="126"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="127"/>
         <source>Previous annotation</source>
         <translation>Previous annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="134"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="135"/>
         <source>Next annotation</source>
         <translation>Next annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="212"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="213"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="323"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="326"/>
         <source>The sequence doesn't have any annotations.</source>
         <translation>The sequence doesn't have any annotations.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="326"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="329"/>
         <source>The sequences do not have any annotations.</source>
         <translation>The sequences do not have any annotations.</translation>
     </message>
@@ -2548,121 +2561,117 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AnnotatedDNAView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="122"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="111"/>
         <source>Go to position...</source>
         <translation>Go to position...</translation>
     </message>
     <message>
-        <source>Rename item</source>
-        <translation type="vanished">Rename item</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="141"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="130"/>
         <source>Find pattern...</source>
         <translation>Find pattern...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="146"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="135"/>
         <source>Insert subsequence...</source>
         <translation>Insert subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="151"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="140"/>
         <source>Remove subsequence...</source>
         <translation>Remove subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="155"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="144"/>
         <source>Replace subsequence...</source>
         <translation>Replace subsequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="160"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="149"/>
         <source>Selected sequence from view</source>
         <translation>Selected sequence from view</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="164"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="153"/>
         <source>Reverse-complement sequence</source>
         <translation>Reverse-complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="172"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="162"/>
         <source>Complement sequence</source>
         <translation>Complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="363"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="353"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="534"/>
         <source>Analyze</source>
         <translation>Analyze</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="554"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
         <source>Add</source>
         <translation>Add</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="560"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="550"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="566"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="556"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="572"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="562"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="585"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="575"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1095"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1084"/>
         <source>Show codon table</source>
-        <translation type="unfinished"></translation>
+        <translation>Show codon table</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1346"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1335"/>
         <source>No sequence in focus</source>
         <translation>No sequence in focus</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="168"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="158"/>
         <source>Reverse sequence</source>
         <translation>Reverse sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="764"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="754"/>
         <source>Disable '%1' highlighting</source>
         <translation>Disable '%1' highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="766"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="756"/>
         <source>Enable '%1' highlighting</source>
         <translation>Enable '%1' highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="816"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="806"/>
         <source>Select sequence to associate annotations with:</source>
         <translation>Select sequence to associate annotations with:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="834"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="824"/>
         <source>No sequence object found for annotations</source>
         <translation>No sequence object found for annotations</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="903"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="893"/>
         <source>Go To</source>
         <translation>Go To</translation>
     </message>
@@ -2684,7 +2693,7 @@ Double-click to collapse the branch</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="265"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="269"/>
         <source>Value</source>
         <translation>Value</translation>
     </message>
@@ -2710,19 +2719,19 @@ Double-click to collapse the branch</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier text</source>
         <translation>Copy qualifier text</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1141"/>
         <source>Copy qualifier URL</source>
         <translation>Copy qualifier URL</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="198"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1142"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1146"/>
         <source>Toggle column</source>
         <translation>Toggle column</translation>
     </message>
@@ -2743,121 +2752,101 @@ Double-click to collapse the branch</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="798"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="802"/>
         <source>Copy column text</source>
         <translation>Copy column text</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="812"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
         <source>copy column URL</source>
         <translation>copy column URL</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="221"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="399"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="446"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="403"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="450"/>
         <source>Annotation</source>
-        <translation type="unfinished">Annotation</translation>
+        <translation>Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1773"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1777"/>
         <source>Edit Group</source>
-        <translation type="unfinished"></translation>
+        <translation>Edit Group</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1824"/>
         <source>Edit Annotation</source>
-        <translation type="unfinished">Edit Annotation</translation>
+        <translation>Edit Annotation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1824"/>
         <source>Edit</source>
-        <translation type="unfinished">Edit</translation>
-    </message>
-    <message>
-        <source>Rename item</source>
-        <translation type="vanished">Rename item</translation>
+        <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="568"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="572"/>
         <source>At least one dragged annotation is out of the sequence range!</source>
         <translation>At least one dragged annotation is out of the sequence range!</translation>
     </message>
     <message>
-        <source>Rename Group</source>
-        <translation type="vanished">Rename Group</translation>
-    </message>
-    <message>
-        <source>Rename Qualifier</source>
-        <translation type="vanished">Rename Qualifier</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1970"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1974"/>
         <source>Create Permanent Annotation</source>
         <translation>Create Permanent Annotation</translation>
     </message>
     <message>
-        <source>Edit qualifier</source>
-        <translation type="vanished">Edit qualifier</translation>
-    </message>
-    <message>
-        <source>View qualifier</source>
-        <translation type="vanished">View qualifier</translation>
-    </message>
-    <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="228"/>
         <source>Qualifier...</source>
         <translation>Qualifier...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="235"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="239"/>
         <source>Make auto-annotations persistent</source>
         <translation>Make auto-annotations persistent</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="393"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="397"/>
         <source>Group</source>
-        <translation type="unfinished"></translation>
+        <translation>Group</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="396"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="400"/>
         <source>Qualifier</source>
-        <translation type="unfinished">Qualifier</translation>
+        <translation>Qualifier</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="804"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="808"/>
         <source>Copy column '%1' text</source>
         <translation>Copy column '%1' text</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="807"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="811"/>
         <source>Copy '%1' annotation location</source>
         <translation>Copy '%1' annotation location</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="820"/>
         <source>Copy column '%1' URL</source>
         <translation>Copy column '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="838"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="842"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1147"/>
         <source>Hide '%1' column</source>
         <translation>Hide '%1' column</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Copy qualifier '%1' value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1141"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Copy qualifier '%1' URL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1147"/>
         <source>Add '%1' column</source>
         <translation>Add '%1' column</translation>
     </message>
@@ -2865,152 +2854,152 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="208"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="209"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="152"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="153"/>
         <source>Failed to open assembly browser for %1, assembly %2: model length should be > 0</source>
         <translation>Failed to open assembly browser for %1, assembly %2: model length should be > 0</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="143"/>
         <source>Error opening open assembly browser for %1, assembly %2</source>
         <translation>Error opening open assembly browser for %1, assembly %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="219"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="220"/>
         <source>Internal error: only object with document can be added to browser</source>
         <translation>Internal error: only object with document can be added to browser</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="223"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="225"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="231"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="232"/>
         <source>The lengths of the sequence and assembly are different.</source>
         <translation>The lengths of the sequence and assembly are different.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="234"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="235"/>
         <source>The sequence and assembly names are different.</source>
         <translation>The sequence and assembly names are different.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="252"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="253"/>
         <source>It seems that sequence "%1", set as reference to assembly "%2", does not match it.</source>
         <translation>It seems that sequence "%1", set as reference to assembly "%2", does not match it.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="258"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="259"/>
         <source>Internal error: database is busy</source>
-        <translation type="unfinished"></translation>
+        <translation>Internal error: database is busy</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="293"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="294"/>
         <source>Internal error: broken variant track object</source>
         <translation>Internal error: broken variant track object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="299"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="300"/>
         <source>Only sequence or variant track  objects can be added to assembly browser</source>
         <translation>Only sequence or variant track  objects can be added to assembly browser</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="308"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="309"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="309"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="310"/>
         <source>This action requires changing the assembly object that is locked for editing</source>
         <translation>This action requires changing the assembly object that is locked for editing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="656"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
         <source>Zoom in</source>
         <translation>Zoom in</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="659"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="660"/>
         <source>Zoom out</source>
         <translation>Zoom out</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="662"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="663"/>
         <source>Linear</source>
         <translation>Linear</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="664"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <source>Logarithmic</source>
         <translation>Logarithmic</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="670"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="671"/>
         <source>Show coordinates on ruler</source>
         <translation>Show coordinates on ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="674"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="675"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Show coverage under ruler cursor</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="678"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="679"/>
         <source>Show information about read under cursor in pop-up hint</source>
         <translation>Show information about read under cursor in pop-up hint</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="683"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="684"/>
         <source>Export as image</source>
         <translation>Export as image</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="686"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="687"/>
         <source>Export assembly to SAM format</source>
         <translation>Export assembly to SAM format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="689"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="690"/>
         <source>Set reference</source>
         <translation>Set reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="693"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="694"/>
         <source>Export assembly region</source>
         <translation>Export assembly region</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1010"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1012"/>
         <source>Open file with a sequence</source>
         <translation>Open file with a sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1021"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1023"/>
         <source>An error occurred while setting reference to "%1" assembly. The selected file "%2" does not contain sequences.</source>
         <translation>An error occurred while setting reference to "%1" assembly. The selected file "%2" does not contain sequences.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1023"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1025"/>
         <source>An error occurred while setting reference to "%1" assembly. There are more than one sequence in file "%2". Please select the required sequence object in the Project View and click "Set reference" again.</source>
         <translation>An error occurred while setting reference to "%1" assembly. There are more than one sequence in file "%2". Please select the required sequence object in the Project View and click "Set reference" again.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1084"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1086"/>
         <source>An error occurred while setting reference to "%1". You have more than one sequence object selected in the Project View. Please select only one object and try again.</source>
         <translation>An error occurred while setting reference to "%1". You have more than one sequence object selected in the Project View. Please select only one object and try again.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1083"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1085"/>
         <source>Choose Reference Sequence</source>
         <translation>Choose Reference Sequence</translation>
     </message>
@@ -3031,7 +3020,7 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1204"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1206"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Assembly has no mapped reads. Nothing to visualize.</translation>
     </message>
@@ -3039,22 +3028,22 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyCellRendererFactoryRegistry</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="535"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="552"/>
         <source>Nucleotide</source>
         <translation>Nucleotide</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="537"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="554"/>
         <source>Difference</source>
         <translation>Difference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="539"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="556"/>
         <source>Strand direction</source>
         <translation>Strand direction</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="541"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="558"/>
         <source>Paired reads</source>
         <translation>Paired reads</translation>
     </message>
@@ -3126,12 +3115,12 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyCoverageGraph</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="63"/>
+        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="64"/>
         <source>Coverage calculation canceled</source>
         <translation>Coverage calculation canceled</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="63"/>
+        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="64"/>
         <source>Calculating coverage...</source>
         <translation>Calculating coverage...</translation>
     </message>
@@ -3182,59 +3171,59 @@ Double-click to collapse the branch</translation>
 <context>
     <name>U2::AssemblyModel</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="281"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="302"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="275"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="296"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="284"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="278"/>
         <source>No reference document found in the project</source>
         <translation>No reference document found in the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="287"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="281"/>
         <source>No reference object found in the project</source>
         <translation>No reference object found in the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="320"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="650"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="657"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="644"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="321"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="315"/>
         <source>A file '%1' with the reference sequence '%2' not found!
 Try to open another file with a reference sequence and associate it with the assembly.</source>
         <translation>A file '%1' with the reference sequence '%2' not found!
 Try to open another file with a reference sequence and associate it with the assembly.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="332"/>
         <source>Unexected object is set as reference</source>
         <translation>Unexected object is set as reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="373"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="367"/>
         <source>Errors</source>
         <translation>Errors</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="374"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="368"/>
         <source>The '%1' sequence is associated with the '%2' assembly?
 Do you want to remove the association?</source>
         <translation>The '%1' sequence is associated with the '%2' assembly?
 Do you want to remove the association?</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="494"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="488"/>
         <source>Reference document is not ready!</source>
         <translation>Reference document is not ready!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="645"/>
         <source>This action requires changing file:
 %1
 You don't have enough rights to change file</source>
@@ -3243,7 +3232,7 @@ You don't have enough rights to change file</source>
 You don't have enough rights to change file</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="658"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="652"/>
         <source>Database is opened in read-only mode. It might happen because file 
 %1
  is read only. If not try to reload file</source>
@@ -3270,7 +3259,7 @@ You don't have enough rights to change file</translation>
     <message>
         <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="94"/>
         <source><center><b>Assembly database is busy</b><br>Some task occupied database.<br> When the database is free all functionality of Assembly Browser will be available again.</center></source>
-        <translation type="unfinished"></translation>
+        <translation><center><b>Assembly database is busy</b><br>Some task occupied database.<br> When the database is free all functionality of Assembly Browser will be available again.</center></translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="114"/>
@@ -3303,57 +3292,57 @@ You don't have enough rights to change file</translation>
         <translation>Optimize rendering when scrolling</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="176"/>
         <source>Reads shadowing</source>
         <translation>Reads shadowing</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="180"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
         <source>Disabled</source>
         <translation>Disabled</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="182"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="180"/>
         <source>Free</source>
         <translation>Free</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="184"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="182"/>
         <source>Centered</source>
         <translation>Centered</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="192"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="190"/>
         <source>Jump to locked base</source>
         <translation>Jump to locked base</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="358"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="357"/>
         <source><a href="%1" style="color: %2">Zoom in to see the reads</a></source>
         <translation><a href="%1" style="color: %2">Zoom in to see the reads</a></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="362"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="361"/>
         <source>Please wait until overview rendering is finished, or <a href="%1">zoom in to see the reads</a></source>
         <translation>Please wait until overview rendering is finished, or <a href="%1">zoom in to see the reads</a></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="364"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="363"/>
         <source> or choose one of the well-covered regions:<br><br></source>
         <translation> or choose one of the well-covered regions:<br><br></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="953"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="952"/>
         <source>Export visible reads as sequence.</source>
-        <translation type="unfinished"></translation>
+        <translation>Export visible reads as sequence.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="954"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="953"/>
         <source>There are no reads in the current area. Nothing to export!</source>
-        <translation type="unfinished"></translation>
+        <translation>There are no reads in the current area. Nothing to export!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="960"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="959"/>
         <source>Locked to base</source>
         <translation>Locked to base</translation>
     </message>
@@ -3361,17 +3350,17 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::AssemblyReferenceArea</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="173"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="174"/>
         <source>Reference sequence</source>
         <translation>Reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="176"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="177"/>
         <source>Unassociate</source>
         <translation>Unassociate</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="199"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="200"/>
         <source>Reference is loading...</source>
         <translation>Reference is loading...</translation>
     </message>
@@ -3484,8 +3473,8 @@ You don't have enough rights to change file</translation>
     <name>U2::AutoAnnotationsADVAction</name>
     <message>
         <location filename="../src/ov_sequence/AutoAnnotationUtils.cpp" line="46"/>
-        <source>Automatic Annotations Highlighting</source>
-        <translation>Automatic Annotations Highlighting</translation>
+        <source>Automatic annotations highlighting</source>
+        <translation>Automatic annotations highlighting</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AutoAnnotationUtils.cpp" line="58"/>
@@ -3501,17 +3490,17 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::BranchSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="44"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="40"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="43"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="39"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="77"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="69"/>
         <source>Select Color</source>
         <translation>Select Color</translation>
     </message>
@@ -3540,28 +3529,28 @@ You don't have enough rights to change file</translation>
         <translation>Set index file name</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="185"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="190"/>
         <source>DNA Assembly</source>
         <translation>DNA assembly</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="186"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="191"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="212"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="215"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="217"/>
         <source>Build Index</source>
         <translation>Build Index</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="210"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="215"/>
         <source>Reference sequence url is not set!</source>
         <translation>Reference sequence url is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="212"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="217"/>
         <source>Index file name is not set!</source>
         <translation>Index file name is not set!</translation>
     </message>
@@ -3569,13 +3558,9 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CalculateCoveragePerBaseOnRegionTask</name>
     <message>
-        <source>Calculate coverage per base for assembly %1 on region (%2, %3)</source>
-        <translation type="vanished">Calculate coverage per base for assembly %1 on region (%2, %3)</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="35"/>
         <source>Calculate coverage per base for assembly on region (%1, %2)</source>
-        <translation type="unfinished"></translation>
+        <translation>Calculate coverage per base for assembly on region (%1, %2)</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="41"/>
@@ -3601,13 +3586,9 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CalculateCoveragePerBaseTask</name>
     <message>
-        <source>Calculate coverage per base for assembly %1</source>
-        <translation type="vanished">Calculate coverage per base for assembly %1</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="136"/>
         <source>Calculate coverage per base for assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Calculate coverage per base for assembly</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="141"/>
@@ -3620,22 +3601,6 @@ You don't have enough rights to change file</translation>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <source>Assembly DBI is NULL</source>
-        <translation type="vanished">Assembly DBI is NULL</translation>
-    </message>
-    <message>
-        <source>Attribute DBI is NULL</source>
-        <translation type="vanished">Attribute DBI is NULL</translation>
-    </message>
-    <message>
-        <source>Can't get the assembly length: attribute is missing</source>
-        <translation type="vanished">Can't get the assembly length: attribute is missing</translation>
-    </message>
-    <message>
-        <source>Assembly has zero length</source>
-        <translation type="vanished">Assembly has zero length</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="167"/>
         <source>An unexpected subtask</source>
         <translation>An unexpected subtask</translation>
@@ -3652,17 +3617,17 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CodonTableView</name>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="80"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="56"/>
         <source>1st base</source>
         <translation>1st base</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="81"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="57"/>
         <source>2nd base</source>
         <translation>2nd base</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="82"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="58"/>
         <source>3rd base</source>
         <translation>3rd base</translation>
     </message>
@@ -3683,7 +3648,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::ColorSchemaSettingsPageController</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="99"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="98"/>
         <source>Alignment Color Scheme</source>
         <translation>Alignment Color Scheme</translation>
     </message>
@@ -3692,8 +3657,8 @@ You don't have enough rights to change file</translation>
     <name>U2::ColorSchemaSettingsPageWidget</name>
     <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="370"/>
-        <source>Choose Directory</source>
-        <translation>Choose Directory</translation>
+        <source>Choose Folder</source>
+        <translation>Choose Folder</translation>
     </message>
 </context>
 <context>
@@ -3777,13 +3742,9 @@ You don't have enough rights to change file</translation>
         <translation>Nucleotide</translation>
     </message>
     <message>
-        <source>Ok</source>
-        <translation type="vanished">Ok</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="196"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="223"/>
@@ -3814,7 +3775,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateDistanceMatrixTask</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="161"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="169"/>
         <source>Generate distance matrix</source>
         <translation>Generate distance matrix</translation>
     </message>
@@ -3832,29 +3793,29 @@ You don't have enough rights to change file</translation>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="199"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="180"/>
         <source>Choose file name</source>
         <translation>Choose file name</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="168"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="182"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="128"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="149"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="163"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="128"/>
         <source>Please, input the file name.</source>
         <translation>Please, input the file name.</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="137"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="137"/>
         <source>Please, change the output file.</source>
         <translation>Please, change the output file.</translation>
     </message>
@@ -3870,33 +3831,33 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateRulerDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="54"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="38"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="55"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="39"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="63"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="47"/>
         <source>New ruler</source>
         <translation>New ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="97"/>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="102"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="81"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="86"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="97"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="81"/>
         <source>Ruler name is empty!</source>
         <translation>Ruler name is empty!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="102"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="86"/>
         <source>Ruler with the same name is already exists!</source>
         <translation>Ruler with the same name is already exists!</translation>
     </message>
@@ -3904,7 +3865,7 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateSubalignmentAndOpenViewTask</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="235"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="259"/>
         <source>Create sub-alignment and open view: %1</source>
         <translation>Create sub-alignment and open view: %1</translation>
     </message>
@@ -3912,52 +3873,48 @@ You don't have enough rights to change file</translation>
 <context>
     <name>U2::CreateSubalignmentDialogController</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="52"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
         <source>Extract</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="54"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="169"/>
-        <source>Directory to save does not exist</source>
-        <translation>Directory to save does not exist</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="193"/>
+        <source>Folder to save does not exist</source>
+        <translation>Folder to save does not exist</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="173"/>
-        <source>No write permission to '%1' directory</source>
-        <translation>No write permission to '%1' directory</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="197"/>
+        <source>No write permission to '%1' folder</source>
+        <translation>No write permission to '%1' folder</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="177"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="201"/>
         <source>No path specified</source>
         <translation>No path specified</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="181"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="205"/>
         <source>Filename to save is empty</source>
         <translation>Filename to save is empty</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="185"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="209"/>
         <source>No write permission to '%1' file</source>
         <translation>No write permission to '%1' file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="195"/>
-        <source>Start position must be less than end position!</source>
-        <translation>Start position must be less than end position!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="201"/>
-        <source>Entered region not contained in current sequence</source>
-        <translation>Entered region not contained in current sequence</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="219"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="225"/>
+        <source>Illegal region!</source>
+        <translation>Illegal region!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="208"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="232"/>
         <source>You must select at least one sequence</source>
         <translation>You must select at least one sequence</translation>
     </message>
@@ -4025,11 +3982,7 @@ You don't have enough rights to change file</translation>
     <message>
         <location filename="../src/ov_sequence/DetView.cpp" line="67"/>
         <source>Show/hide translations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show amino translations</source>
-        <translation type="vanished">Show amino translations</translation>
+        <translation>Show/hide translations</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/DetView.cpp" line="71"/>
@@ -4164,46 +4117,50 @@ Do you want to convert the files and run the aligner?</translation>
 <context>
     <name>U2::DnaAssemblySupport</name>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="60"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="67"/>
         <source>Convert UGENE assembly database to SAM...</source>
         <translation>Convert UGENE assembly database to SAM...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="66"/>
         <source>Genome de novo assembly...</source>
-        <translation>Genome de novo assembly...</translation>
+        <translation type="vanished">Genome de novo assembly...</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="73"/>
+        <source>Reads de novo assembly (with SPAdes)...</source>
+        <translation>Reads de novo assembly (with SPAdes)...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="72"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="79"/>
         <source>Map reads to reference...</source>
         <translation>Map reads to reference...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="78"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="85"/>
         <source>Build index for reads mapping...</source>
         <translation>Build index for reads mapping...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="89"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="142"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="95"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="148"/>
         <source>DNA Assembly</source>
         <translation>DNA assembly</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="90"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="143"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="96"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="149"/>
         <source>There are no algorithms for DNA assembly available.
 Please, check your plugin list.</source>
         <translation>There are no algorithms for DNA assembly available.
 Please, check your plugin list.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="117"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="123"/>
         <source>Genome Assembly</source>
         <translation>Genome Assembly</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="118"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="124"/>
         <source>There are no algorithms for genome assembly available.
 Please, check external tools in the settings.</source>
         <translation>There are no algorithms for genome assembly available.
@@ -4211,30 +4168,11 @@ Please, check external tools in the settings.</translation>
     </message>
 </context>
 <context>
-    <name>U2::EditAnnotationDialogController</name>
-    <message>
-        <source>Location is empty!</source>
-        <translation type="vanished">Location is empty!</translation>
-    </message>
-    <message>
-        <source>Invalid location!</source>
-        <translation type="vanished">Invalid location!</translation>
-    </message>
-    <message>
-        <source>Error!</source>
-        <translation type="vanished">Error!</translation>
-    </message>
-    <message>
-        <source>Annotation location empty or invalid!</source>
-        <translation type="vanished">Annotation location empty or invalid!</translation>
-    </message>
-    <message>
-        <source>Wrong annotation name!</source>
-        <translation type="vanished">Wrong annotation name!</translation>
-    </message>
+    <name>U2::DnaAssemblyTaskWithConversions</name>
     <message>
-        <source>New annotation locations is out of sequence bounds!</source>
-        <translation type="vanished">New annotation locations is out of sequence bounds!</translation>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="414"/>
+        <source>Cannot remove temporary file %1</source>
+        <translation>Cannot remove temporary file %1</translation>
     </message>
 </context>
 <context>
@@ -4406,17 +4344,9 @@ Please, check external tools in the settings.</translation>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="112"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="113"/>
         <source>Export coverage</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Compressed </source>
-        <translation type="vanished">Compressed </translation>
-    </message>
-    <message>
-        <source>Export to...</source>
-        <translation type="vanished">Export to...</translation>
+        <translation>Export coverage</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="99"/>
@@ -4445,13 +4375,9 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportCoverageTask</name>
     <message>
-        <source>Export coverage per base for %1</source>
-        <translation type="vanished">Export coverage per base for %1</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="62"/>
         <source>Export assembly coverage per base</source>
-        <translation type="unfinished"></translation>
+        <translation>Export assembly coverage per base</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="70"/>
@@ -4469,10 +4395,6 @@ Please, check external tools in the settings.</translation>
         <translation></translation>
     </message>
     <message>
-        <source>Assembly DBI is NULL</source>
-        <translation type="vanished">Assembly DBI is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="84"/>
         <source>Can't write the compressed file: IOAdapterFactory is NULL</source>
         <translation>Can't write the compressed file: IOAdapterFactory is NULL</translation>
@@ -4491,68 +4413,45 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportHighligtingDialogController</name>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="49"/>
-        <source>Export</source>
-        <translation type="unfinished">Export</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="50"/>
-        <source>Cancel</source>
-        <translation type="unfinished">Cancel</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="96"/>
-        <source>Warning</source>
-        <translation type="unfinished">Warning</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="96"/>
-        <source>Export to file URL is empty!</source>
-        <translation type="unfinished">Export to file URL is empty!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="123"/>
-        <source>Select file to save...</source>
-        <translation type="unfinished">Select file to save...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExportHighligtningDialogController</name>
-    <message>
         <source>Export</source>
-        <translation type="vanished">Export</translation>
+        <translation>Export</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="51"/>
         <source>Cancel</source>
-        <translation type="vanished">Cancel</translation>
+        <translation>Cancel</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="97"/>
         <source>Warning</source>
-        <translation type="vanished">Warning</translation>
+        <translation>Warning</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="97"/>
         <source>Export to file URL is empty!</source>
-        <translation type="vanished">Export to file URL is empty!</translation>
+        <translation>Export to file URL is empty!</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="124"/>
         <source>Select file to save...</source>
-        <translation type="vanished">Select file to save...</translation>
+        <translation>Select file to save...</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3027"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1018"/>
         <source>Export highlighting</source>
         <translation>Export highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1046"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1046"/>
         <source>Result file:</source>
         <translation>Result file:</translation>
     </message>
@@ -4560,9 +4459,16 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExportMSAConsensusTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="218"/>
         <source>Export consensus to MSA</source>
-        <translation>Export consensus to MSA</translation>
+        <translation type="vanished">Export consensus to MSA</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExportMaConsensusTask</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="274"/>
+        <source>Export consensus</source>
+        <translation>Export consensus</translation>
     </message>
 </context>
 <context>
@@ -4604,18 +4510,14 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExtractAssemblyRegionDialog</name>
     <message>
-        <source>Export consensus</source>
-        <translation type="vanished">Export consensus</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="46"/>
         <source>Export</source>
-        <translation type="unfinished">Export</translation>
+        <translation>Export</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="47"/>
         <source>Cancel</source>
-        <translation type="unfinished">Cancel</translation>
+        <translation>Cancel</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="51"/>
@@ -4626,7 +4528,7 @@ Please, check external tools in the settings.</translation>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="87"/>
         <source>Export Assembly Region</source>
-        <translation type="unfinished">Export Assembly Region</translation>
+        <translation>Export Assembly Region</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
@@ -4655,17 +4557,44 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::ExtractConsensusTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="274"/>
         <source>Export consensus to MSA</source>
-        <translation>Export consensus to MSA</translation>
+        <translation type="vanished">Export consensus to MSA</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="331"/>
+        <source>Extract consensus</source>
+        <translation>Extract consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="293"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="351"/>
         <source>No sequences in alignment</source>
         <translation>No sequences in alignment</translation>
     </message>
 </context>
 <context>
+    <name>U2::FilterUnpairedReadsTask</name>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="272"/>
+        <source>Filter unpaired reads task</source>
+        <translation>Filter unpaired reads task</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="281"/>
+        <source>Filtering unpaired reads is launched on not-paired data</source>
+        <translation>Filtering unpaired reads is launched on not-paired data</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="292"/>
+        <source>The count of upstream files is not equal to the count of downstream files</source>
+        <translation>The count of upstream files is not equal to the count of downstream files</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="326"/>
+        <source>%1 read pairs were mapped, %2 reads without a pair from files "%3" and "%4" were skipped.</source>
+        <translation>%1 read pairs were mapped, %2 reads without a pair from files "%3" and "%4" were skipped.</translation>
+    </message>
+</context>
+<context>
     <name>U2::FindPatternListTask</name>
     <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternTask.cpp" line="122"/>
@@ -4694,208 +4623,208 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::FindPatternWidget</name>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="326"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="322"/>
         <source>Exact</source>
         <translation>Exact</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="328"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="324"/>
         <source>InsDel</source>
         <translation>InsDel</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="329"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="325"/>
         <source>Substitute</source>
         <translation>Substitute</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="331"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="327"/>
         <source>Regular expression</source>
         <translation>Regular expression</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="335"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="331"/>
         <source>Should match</source>
         <translation>Should match</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="412"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="408"/>
         <source>Search with ambiguous bases</source>
         <translation>Search with ambiguous bases</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="360"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="356"/>
         <source>Both</source>
         <translation>Both</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="361"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="357"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="362"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="358"/>
         <source>Reverse-coml.</source>
         <translation>Reverse-coml.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="368"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="364"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="369"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="365"/>
         <source>Translation</source>
         <translation>Translation</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="375"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="371"/>
         <source>Whole sequence</source>
         <translation>Whole sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="376"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="372"/>
         <source>Custom region</source>
         <translation>Custom region</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="377"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="373"/>
         <source>Selected region</source>
         <translation>Selected region</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="435"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="431"/>
         <source>Results no longer than:</source>
         <translation>Results no longer than:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="705"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="703"/>
         <source>The value is longer than the search region. Please input a shorter value or select another region!</source>
         <translation>The value is longer than the search region. Please input a shorter value or select another region!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="707"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="714"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="722"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="729"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="735"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="741"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="745"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="748"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="754"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="758"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="761"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="769"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="777"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="783"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="791"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="705"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="712"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="720"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="727"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="733"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="739"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="743"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="746"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="752"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="756"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="759"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="767"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="775"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="781"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="789"/>
         <source><b><font color=%1>%2</font><br></br></b></source>
-        <translation type="unfinished"></translation>
+        <translation><b><font color=%1>%2</font><br></br></b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="712"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="710"/>
         <source>Warning: input value contains characters that do not match the active alphabet!</source>
         <translation>Warning: input value contains characters that do not match the active alphabet!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="720"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="718"/>
         <source>Warning: file contains patterns that do not match the active alphabet! Those patterns were ignored </source>
         <translation>Warning: file contains patterns that do not match the active alphabet! Those patterns were ignored </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="727"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="725"/>
         <source>Warning: file contains patterns that longer than the search region! Those patterns were ignored. Please input a shorter value or select another region! </source>
         <translation>Warning: file contains patterns that longer than the search region! Those patterns were ignored. Please input a shorter value or select another region! </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="744"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="757"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="767"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="775"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="742"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="755"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="765"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="773"/>
         <source><b><font color=%1>%2</font></b></source>
-        <translation type="unfinished"></translation>
+        <translation><b><font color=%1>%2</font></b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="790"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="788"/>
         <source>Warning: current sequence is too long to search in.</source>
         <translation>Warning: current sequence is too long to search in.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1450"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1463"/>
         <source>Warning: can not get valid pattern name, annotation will be named 'misc_feature'</source>
         <translation>Warning: can not get valid pattern name, annotation will be named 'misc_feature'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1588"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1601"/>
         <source>Results:</source>
         <translation>Results:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="743"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="756"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="741"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="754"/>
         <source>Reason: </source>
         <translation>Reason: </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="734"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="732"/>
         <source>Info: please input at least one sequence pattern to search for. Use %1 to input multiple patterns. Alternatively, load patterns from a FASTA file.</source>
         <translation>Info: please input at least one sequence pattern to search for. Use %1 to input multiple patterns. Alternatively, load patterns from a FASTA file.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="747"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="745"/>
         <source> Please input valid annotation names. </source>
         <translation> Please input valid annotation names. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="753"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="751"/>
         <source>Warning: annotation names are invalid. </source>
         <translation>Warning: annotation names are invalid. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="760"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="758"/>
         <source> It will be automatically changed to acceptable name if 'Get annotations' button is pressed. </source>
         <translation> It will be automatically changed to acceptable name if 'Get annotations' button is pressed. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="766"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="774"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="764"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="772"/>
         <source>Warning: there is no pattern to search. </source>
         <translation>Warning: there is no pattern to search. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="768"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="776"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="766"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="774"/>
         <source> Please input a valid pattern or choose a file with patterns </source>
         <translation> Please input a valid pattern or choose a file with patterns </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="782"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="780"/>
         <source>Warning: invalid regexp. </source>
         <translation>Warning: invalid regexp. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1105"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1109"/>
         <source>Select file to open...</source>
         <translation>Select file to open...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1157"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1165"/>
         <source>Unable to search on the reverse-complement strand, searching on the direct strand only!</source>
         <translation>Unable to search on the reverse-complement strand, searching on the direct strand only!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="297"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1502"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="293"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1515"/>
         <source>Results: %1/%2</source>
         <translation>Results: %1/%2</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="740"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="738"/>
         <source>Warning: annotation name or annotation group name are invalid. </source>
         <translation>Warning: annotation name or annotation group name are invalid. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1305"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1318"/>
         <source>Sequence in focus is NULL</source>
         <translation>Sequence in focus is NULL</translation>
     </message>
@@ -4903,7 +4832,7 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2331"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2335"/>
         <source>Searching for a qualifier</source>
         <translation>Searching for a qualifier</translation>
     </message>
@@ -4941,38 +4870,38 @@ Please, check external tools in the settings.</translation>
     <message>
         <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="442"/>
         <source>Graph is not available. Try to change calculation settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>Graph is not available. Try to change calculation settings.</translation>
     </message>
 </context>
 <context>
     <name>U2::GSequenceGraphView</name>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="68"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="71"/>
         <source>Select all extremum points...</source>
         <translation>Select all extremum points...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="58"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="61"/>
         <source>Save cutoffs as annotations...</source>
         <translation>Save cutoffs as annotations...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="53"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="56"/>
         <source>Graph settings...</source>
         <translation>Graph settings...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="63"/>
-        <source>Delete all labels...</source>
-        <translation>Delete all labels...</translation>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="66"/>
+        <source>Delete all labels</source>
+        <translation>Delete all labels</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="222"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="225"/>
         <source>Graph</source>
         <translation>Graph</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="352"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="356"/>
         <source>%1 [%2, %3], Window: %4, Step %5</source>
         <translation>%1 [%2, %3], Window: %4, Step %5</translation>
     </message>
@@ -4998,69 +4927,81 @@ Please, check external tools in the settings.</translation>
 <context>
     <name>U2::GenomeAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="68"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="61"/>
         <source>Start</source>
         <translation>Start</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="69"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="185"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="188"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="178"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="181"/>
         <source>Add short reads</source>
         <translation>Add short reads</translation>
     </message>
     <message>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="196"/>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="203"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="216"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="209"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="215"/>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="222"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="229"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="258"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="264"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="273"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="251"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="257"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="266"/>
         <source>Genome Assembly</source>
         <translation>Genome Assembly</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="211"/>
-        <source>Result assembly directory is not set!</source>
-        <translation>Result assembly directory is not set!</translation>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="204"/>
+        <source>Result assembly folder is not set!</source>
+        <translation>Result assembly folder is not set!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="217"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="230"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="210"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="223"/>
         <source>No reads. Please, add file(s) with short reads.</source>
         <translation>No reads. Please, add file(s) with short reads.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="223"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="216"/>
         <source>In the paired-end mode a number of lift and right reads must be equal.</source>
         <translation>In the paired-end mode a number of lift and right reads must be equal.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="259"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="252"/>
         <source>Unknown file format of %1.</source>
         <translation>Unknown file format of %1.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="265"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="258"/>
         <source>File format of %1 is %2. Supported file formats of reads: %3.</source>
         <translation>File format of %1 is %2. Supported file formats of reads: %3.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="274"/>
-        <source>Unable to create output directory for result assembly.
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="267"/>
+        <source>Unable to create output folder for result assembly.
 Directory Path: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="339"/>
-        <source>Select output directory</source>
-        <translation>Select output directory</translation>
+        <source>Unable to create output folder for result assembly.
+Directory Path: %1</source>
+        <translation type="obsolete">Unable to create output folder for result assembly.
+Directory Path: %1</translation>
+    </message>
+    <message>
+        <source>Unable to create output folder for result assembly.
+Folder Path: %1</source>
+        <translation type="vanished">Unable to create output folder for result assembly.
+Folder Path: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="332"/>
+        <source>Select output folder</source>
+        <translation>Select output folder</translation>
     </message>
 </context>
 <context>
@@ -5068,22 +5009,22 @@ Directory Path: %1</source>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="194"/>
         <source>Attribute DBI is NULL</source>
-        <translation type="unfinished">Attribute DBI is NULL</translation>
+        <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="198"/>
         <source>Can't get the assembly length: attribute is missing</source>
-        <translation type="unfinished">Can't get the assembly length: attribute is missing</translation>
+        <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="201"/>
         <source>Assembly has zero length</source>
-        <translation type="unfinished">Assembly has zero length</translation>
+        <translation>Assembly has zero length</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.h" line="43"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.h" line="45"/>
         <source>Get length of Assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Get length of Assembly</translation>
     </message>
 </context>
 <context>
@@ -5091,12 +5032,12 @@ Directory Path: %1</source>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="54"/>
         <source>Assembly DBI is NULL</source>
-        <translation type="unfinished">Assembly DBI is NULL</translation>
+        <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.h" line="70"/>
         <source>Get visible name of Assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Get visible name of Assembly</translation>
     </message>
 </context>
 <context>
@@ -5110,17 +5051,17 @@ Directory Path: %1</source>
 <context>
     <name>U2::GraphLabelsSelectDialog</name>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="65"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="55"/>
         <source>Window size</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="69"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="59"/>
         <source>Mark labels only in selected area</source>
         <translation>Mark labels only in selected area</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="81"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="71"/>
         <source>Graph Settings</source>
         <translation>Graph Settings</translation>
     </message>
@@ -5128,15 +5069,20 @@ Directory Path: %1</source>
 <context>
     <name>U2::GraphMenuAction</name>
     <message>
-        <location filename="../src/ov_sequence/GraphMenu.cpp" line="116"/>
+        <location filename="../src/ov_sequence/GraphMenu.cpp" line="117"/>
         <source>Graphs</source>
         <translation>Graphs</translation>
     </message>
+    <message>
+        <location filename="../src/ov_sequence/GraphMenu.cpp" line="125"/>
+        <source>Close all graphs</source>
+        <translation>Close all graphs</translation>
+    </message>
 </context>
 <context>
     <name>U2::GraphSettingsDialog</name>
     <message>
-        <location filename="../src/ov_sequence/GraphSettingsDialog.cpp" line="83"/>
+        <location filename="../src/ov_sequence/GraphSettingsDialog.cpp" line="92"/>
         <source>Graph Settings</source>
         <translation>Graph Settings</translation>
     </message>
@@ -5186,174 +5132,57 @@ Directory Path: %1</source>
     </message>
 </context>
 <context>
-    <name>U2::MSAClustalOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
-        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
-        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="172"/>
-        <source>Clustal algorithm factory is NULL</source>
-        <translation>Clustal algorithm factory is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAConsensusOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
-        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
-        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="135"/>
-        <source>Strict consensus algorithm factory is NULL</source>
-        <translation>Strict consensus algorithm factory is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="137"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="136"/>
-        <source>Zoom In</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="140"/>
-        <source>Zoom Out</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="144"/>
-        <source>Zoom To Selection</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="148"/>
-        <source>Reset Zoom</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="152"/>
-        <source>Change Font</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="156"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="64"/>
         <source>Build Tree</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
-        <source>Copy/Paste</source>
-        <translation>Copy/Paste</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="508"/>
-        <source>Export as image</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="370"/>
-        <source>Select font for alignment</source>
-        <translation></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="224"/>
-        <source>Save Alignment</source>
-        <translation>Save Alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="132"/>
-        <source>Save alignment as</source>
-        <translation>Save alignment as</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
-        <source>Save alignment</source>
-        <translation>Save alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="184"/>
-        <source>Export highlighted</source>
-        <translation>Export highlighted</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="438"/>
-        <source>Edit</source>
-        <translation>Edit</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="443"/>
-        <source>Export</source>
-        <translation>Export</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="456"/>
-        <source>View</source>
-        <translation>View</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="464"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="196"/>
         <source>Align</source>
         <translation>Align</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="470"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="164"/>
         <source>Tree</source>
         <translation>Tree</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="171"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="482"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="176"/>
         <source>Statistics</source>
         <translation>Statistics</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="488"/>
-        <source>Add</source>
-        <translation>Add</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="200"/>
         <source>Align sequence to this alignment</source>
         <translation>Align sequence to this alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="204"/>
         <source>Set this sequence as reference</source>
         <translation>Set this sequence as reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="524"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="208"/>
         <source>Unset reference sequence</source>
         <translation>Unset reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="714"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="789"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="809"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="359"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="434"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="454"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
         <translation>A problem occurred during adding sequences. The multiple alignment is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="801"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="804"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="446"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="449"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
@@ -5361,407 +5190,208 @@ Directory Path: %1</source>
 <context>
     <name>U2::MSAEditorConsensusArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="78"/>
         <source>Copy consensus</source>
-        <translation>Copy consensus</translation>
+        <translation type="vanished">Copy consensus</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="82"/>
         <source>Copy consensus with gaps</source>
-        <translation>Copy consensus with gaps</translation>
+        <translation type="vanished">Copy consensus with gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="86"/>
         <source>Consensus mode...</source>
-        <translation>Consensus mode...</translation>
+        <translation type="vanished">Consensus mode...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="152"/>
         <source>MSA consensus algorothm is NULL</source>
-        <translation>MSA consensus algorothm is NULL</translation>
+        <translation type="vanished">MSA consensus algorothm is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="153"/>
         <source>MSA object is NULL</source>
-        <translation>MSA object is NULL</translation>
+        <translation type="vanished">MSA object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="173"/>
         <source>Percent value is out of [0..100] interval</source>
-        <translation>Percent value is out of [0..100] interval</translation>
+        <translation type="vanished">Percent value is out of [0..100] interval</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditorConsensusCache</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusCache.cpp" line="69"/>
+        <location filename="../src/ov_msa/MSAEditorConsensusCache.cpp" line="86"/>
         <source>Can not update consensus chache item</source>
         <translation>Can not update consensus chache item</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorFactory</name>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorFactory.cpp" line="44"/>
-        <source>Alignment Editor</source>
-        <translation>Alignment Editor</translation>
-    </message>
+    <name>U2::MSAEditorOffsetsViewController</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorFactory.cpp" line="104"/>
-        <source>Open multiple views</source>
-        <translation>Open multiple views</translation>
+        <location filename="../src/ov_msa/MSAEditorOffsetsView.cpp" line="70"/>
+        <source>Show offsets</source>
+        <translation>Show offsets</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorNameList</name>
+    <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="67"/>
-        <source>Edit sequence name</source>
-        <translation>Edit sequence name</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="117"/>
+        <source>Remove columns of gaps...</source>
+        <translation>Remove columns of gaps...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="70"/>
-        <source>Copy current sequence</source>
-        <translation>Copy current sequence</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="124"/>
+        <source>Save subalignment...</source>
+        <translation>Save subalignment...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="74"/>
-        <source>Remove sequence(s)</source>
-        <translation>Remove sequence(s)</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="128"/>
+        <source>Save sequence...</source>
+        <translation>Save sequence...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="117"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="146"/>
-        <source>MSA Editor UI is NULL</source>
-        <translation>MSA Editor UI is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="119"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="148"/>
-        <source>MSA Editor sequence area is NULL</source>
-        <translation>MSA Editor sequence area is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="134"/>
-        <source>MSA Object is NULL</source>
-        <translation>MSA Object is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="139"/>
-        <source>Invalid sequence index</source>
-        <translation>Invalid sequence index</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="859"/>
-        <source>Rename</source>
-        <translation>Rename</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
-        <source>New sequence name:</source>
-        <translation>New sequence name:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAEditorOffsetsViewController</name>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorOffsetsView.cpp" line="68"/>
-        <source>Show offsets</source>
-        <translation>Show offsets</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAEditorSequenceArea</name>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="132"/>
-        <source>Remove columns of gaps...</source>
-        <translation>Remove columns of gaps...</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="132"/>
+        <source>Go to position...</source>
+        <translation>Go to position...</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="139"/>
-        <source>Fill selection with gaps</source>
-        <translation>Fill selection with gaps</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="145"/>
-        <source>Save subalignment...</source>
-        <translation>Save subalignment...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="149"/>
-        <source>Save sequence...</source>
-        <translation>Save sequence...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="153"/>
-        <source>Go to position...</source>
-        <translation>Go to position...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="160"/>
         <source>Remove all gaps</source>
         <translation>Remove all gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="164"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="143"/>
         <source>Sequence from file...</source>
         <translation>Sequence from file...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="168"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="147"/>
         <source>Sequence from current project...</source>
         <translation>Sequence from current project...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="172"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="151"/>
         <source>Sort sequences by name</source>
         <translation>Sort sequences by name</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="155"/>
         <source>Switch on/off collapsing</source>
         <translation>Switch on/off collapsing</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="181"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="160"/>
         <source>Update collapsed groups</source>
         <translation>Update collapsed groups</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="186"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="165"/>
         <source>Replace selected rows with reverse-complement</source>
         <translation>Replace selected rows with reverse-complement</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="190"/>
-        <source>Replace selected character</source>
-        <translation>Replace selected character</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="197"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="169"/>
         <source>Replace selected rows with reverse</source>
         <translation>Replace selected rows with reverse</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="201"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="173"/>
         <source>Replace selected rows with complement</source>
         <translation>Replace selected rows with complement</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="316"/>
-        <source>Use dots</source>
-        <translation>Use dots</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="404"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="424"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="575"/>
-        <source>Unknown alphabet</source>
-        <translation>Unknown alphabet</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="447"/>
-        <source>MAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
-        <translation>MAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="449"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="217"/>
         <source>DNAAlphabet is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
         <translation>DNAAlphabet is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="557"/>
-        <source>No reference sequence selected</source>
-        <translation>No reference sequence selected</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="558"/>
-        <source>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</source>
-        <translation>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="682"/>
-        <source>Alignment object is NULL</source>
-        <translation>Alignment object is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="804"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="899"/>
-        <source>Position is out of range: %1</source>
-        <translation>Position is out of range: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="830"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="908"/>
-        <source>Sequence is out of range: %1</source>
-        <translation>Sequence is out of range: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="867"/>
-        <source>Negative startPos with non-empty alignment</source>
-        <translation>Negative startPos with non-empty alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="868"/>
-        <source>startPos is too big</source>
-        <translation>startPos is too big</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="889"/>
-        <source>Negative startSeq with non-empty alignment</source>
-        <translation>Negative startSeq with non-empty alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="890"/>
-        <source>startSeq is too big</source>
-        <translation>startSeq is too big</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="922"/>
-        <source>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</source>
-        <translation>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="947"/>
-        <source>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</source>
-        <translation>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="994"/>
-        <source>Alignment object is not available</source>
-        <translation>Alignment object is not available</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1025"/>
-        <source>Last visible base is less than startPos</source>
-        <translation>Last visible base is less than startPos</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1026"/>
-        <source>Last visible base is out of range</source>
-        <translation>Last visible base is out of range</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1059"/>
-        <source>Last visible sequence is less than startSeq</source>
-        <translation>Last visible sequence is less than startSeq</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1060"/>
-        <source>Last visible sequence is out of range</source>
-        <translation>Last visible sequence is out of range</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1083"/>
-        <source>Invalid collapsible item model!</source>
-        <translation>Invalid collapsible item model!</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="215"/>
+        <source>MultipleAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
+        <translation>MultipleAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1718"/>
-        <source>Cursor position is out of range</source>
-        <translation>Cursor position is out of range</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1932"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="366"/>
         <source>Colors</source>
         <translation>Colors</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1939"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="374"/>
         <source>Custom schemes</source>
         <translation>Custom schemes</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1950"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="385"/>
         <source>Create new color scheme</source>
         <translation>Create new color scheme</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1958"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="393"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1981"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="416"/>
         <source>The alignment has been modified, so that its alphabet has been switched from "%1" to "%2". Use "Undo", if you'd like to restore the original alignment.</source>
         <translation>The alignment has been modified, so that its alphabet has been switched from "%1" to "%2". Use "Undo", if you'd like to restore the original alignment.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2000"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2099"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2160"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2672"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="464"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="528"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="823"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2054"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="506"/>
         <source>Go To</source>
         <translation>Go To</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2095"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="524"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="579"/>
         <source>Warning!</source>
         <translation>Warning!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="579"/>
         <source>You must select only one sequence for export.</source>
         <translation>You must select only one sequence for export.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="622"/>
         <source>warning</source>
         <translation>warning</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="622"/>
         <source>The document already in the project</source>
         <translation>The document already in the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2534"/>
-        <source>It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
-        <translation>It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2590"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2593"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="742"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="745"/>
         <source>Open file with sequences</source>
         <translation>Open file with sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2599"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="751"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
         <translation>A problem occurred during adding sequences. The multiple alignment is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2689"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="837"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="842"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2717"/>
-        <source>Top left corner of the selection has incorrect coords</source>
-        <translation>Top left corner of the selection has incorrect coords</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2719"/>
-        <source>Bottom right corner of the selection has incorrect coords</source>
-        <translation>Bottom right corner of the selection has incorrect coords</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2878"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="978"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
@@ -5769,64 +5399,52 @@ Directory Path: %1</source>
 <context>
     <name>U2::MSAEditorStatusWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="46"/>
         <source>Find:</source>
-        <translation>Find:</translation>
+        <translation type="vanished">Find:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="50"/>
         <source>Find backward <b>(SHIFT + Enter)</b></source>
-        <translation>Find backward <b>(SHIFT + Enter)</b></translation>
+        <translation type="vanished">Find backward <b>(SHIFT + Enter)</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="55"/>
         <source>Find forward <b>(Enter)</b></source>
-        <translation>Find forward <b>(Enter)</b></translation>
+        <translation type="vanished">Find forward <b>(Enter)</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="101"/>
         <source>Find in alignment</source>
-        <translation>Find in alignment</translation>
+        <translation type="vanished">Find in alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="114"/>
         <source>Alignment object is locked</source>
-        <translation>Alignment object is locked</translation>
+        <translation type="vanished">Alignment object is locked</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="114"/>
         <source>Alignment object is not locked</source>
-        <translation>Alignment object is not locked</translation>
+        <translation type="vanished">Alignment object is not locked</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="123"/>
         <source>Ln %1 / %2</source>
-        <translation>Ln %1 / %2</translation>
+        <translation type="vanished">Ln %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="127"/>
         <source>Line %1 of %2</source>
-        <translation>Line %1 of %2</translation>
+        <translation type="vanished">Line %1 of %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="130"/>
         <source>Col %1 / %2</source>
-        <translation>Col %1 / %2</translation>
+        <translation type="vanished">Col %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="134"/>
         <source>Column %1 of %2</source>
-        <translation>Column %1 of %2</translation>
+        <translation type="vanished">Column %1 of %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="138"/>
         <source>Pos %1 / %2</source>
-        <translation>Pos %1 / %2</translation>
+        <translation type="vanished">Pos %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="141"/>
         <source>Position %1 of %2</source>
-        <translation>Position %1 of %2</translation>
+        <translation type="vanished">Position %1 of %2</translation>
     </message>
 </context>
 <context>
@@ -5909,47 +5527,19 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="919"/>
-        <source>Remove selection</source>
-        <translation>Remove selection</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="924"/>
-        <source>Copy selection</source>
-        <translation>Copy selection</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="933"/>
-        <source>Copy formatted</source>
-        <translation>Copy formatted</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="942"/>
-        <source>Paste</source>
-        <translation>Paste</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1001"/>
-        <source>Consensus</source>
-        <translation>Consensus</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1080"/>
         <source>Tree view</source>
-        <translation>Tree view</translation>
+        <translation type="vanished">Tree view</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAExportConsensusTab</name>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="132"/>
         <source>Save file</source>
-        <translation>Save file</translation>
+        <translation type="vanished">Save file</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="85"/>
         <source>A problem occurred during export consensus. The multiple alignment is no more available.</source>
-        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
+        <translation type="vanished">A problem occurred during export consensus. The multiple alignment is no more available.</translation>
     </message>
 </context>
 <context>
@@ -5971,139 +5561,84 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
     </message>
 </context>
 <context>
-    <name>U2::MSAGraphCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
-        <source>Overview width is zero</source>
-        <translation>Overview width is zero</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="41"/>
-        <source>Render overview</source>
-        <translation>Render overview</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAGraphOverview</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="104"/>
-        <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
-        <translation>Multiple sequence alignment is too big. Overview is unavailable.</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="109"/>
-        <source>Waiting...</source>
-        <translation>Waiting...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="118"/>
-        <source>Overview is rendering...</source>
-        <translation>Overview is rendering...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAHighlightingOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="201"/>
-        <source>MSA highlighting scheme registry is NULL</source>
-        <translation>MSA highlighting scheme registry is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="203"/>
-        <source>MSA highlighting scheme factory with '%1' id is NULL</source>
-        <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="220"/>
-        <source>Color scheme is NULL</source>
-        <translation>Color scheme is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="221"/>
-        <source>Highlighting scheme is NULL</source>
-        <translation>Highlighting scheme is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="222"/>
-        <source>Highlighting scheme factory is NULL</source>
-        <translation>Highlighting scheme factory is NULL</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAHighlightingTab</name>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="91"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="94"/>
         <source>Use dots</source>
         <translation>Use dots</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="95"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="98"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="103"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="108"/>
         <source>Highlight characters with conservation level:</source>
         <translation>Highlight characters with conservation level:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="106"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="107"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="111"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="112"/>
         <source> threshold</source>
         <translation> threshold</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="120"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="286"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="123"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="269"/>
         <source>Threshold: %1%</source>
         <translation>Threshold: %1%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="148"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
         <source>Color</source>
         <translation>Color</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="154"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="264"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="243"/>
+        <source>Info: set a reference sequence.</source>
+        <translation>Info: set a reference sequence.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="252"/>
+        <source>Info: export is not available for the selected highlighting.</source>
+        <translation>Info: export is not available for the selected highlighting.</translation>
+    </message>
+    <message>
         <source>Hint: select a reference above</source>
-        <translation>Hint: select a reference above</translation>
+        <translation type="vanished">Hint: select a reference above</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="186"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="257"/>
         <source>Alignment</source>
         <translation>Alignment</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="305"/>
         <source>MSA sequence area is NULL</source>
         <translation>MSA sequence area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="245"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="329"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="316"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="400"/>
         <source>MSA Collapsible Model is NULL</source>
         <translation>MSA Collapsible Model is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="278"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="349"/>
         <source>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</source>
         <translation>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="281"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="352"/>
         <source>Warning: selected region is too big to be exported. You can try to select another region.</source>
         <translation>Warning: selected region is too big to be exported. You can try to select another region.</translation>
     </message>
@@ -6111,17 +5646,18 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="41"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="43"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.h" line="88"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="49"/>
         <source>MSA Editor is NULL</source>
         <translation>MSA Editor is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.h" line="97"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="56"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="73"/>
         <source>MSA Consensus area is NULL</source>
         <translation>MSA Consensus area is NULL</translation>
     </message>
@@ -6129,18 +5665,18 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="66"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="108"/>
         <source>Nothing to export</source>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="75"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="84"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="147"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
         <source>Alignment is too big. </source>
         <translation>Alignment is too big. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="86"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="157"/>
         <source>Cannot save the file. </source>
         <translation>Cannot save the file. </translation>
     </message>
@@ -6148,204 +5684,994 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportToSvgTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="136"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="204"/>
         <source>Nothing to export</source>
         <translation>Nothing to export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="229"/>
         <source>The image size is too big.</source>
         <translation>The image size is too big.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="159"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="233"/>
         <source>SVG %1</source>
         <translation>SVG %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="160"/>
-        <source>SVG image of multiple alignment created by Unipro UGENE</source>
-        <translation>SVG image of multiple alignment created by Unipro UGENE</translation>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
+        <source>SVG image of multiple alignment created by Unipro UGENE</source>
+        <translation>SVG image of multiple alignment created by Unipro UGENE</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaAmbiguousCharactersController</name>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="53"/>
+        <source>Jump to next ambiguous character</source>
+        <translation>Jump to next ambiguous character</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="59"/>
+        <source>Jump to previous ambiguous character</source>
+        <translation>Jump to previous ambiguous character</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="100"/>
+        <source>There are no ambiguous characters in the alignment.</source>
+        <translation>There are no ambiguous characters in the alignment.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaClustalOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="169"/>
+        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
+        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="172"/>
+        <source>Clustal algorithm factory is NULL</source>
+        <translation>Clustal algorithm factory is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="174"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaConsensusMismatchController</name>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="53"/>
+        <source>Jump to next variation</source>
+        <translation>Jump to next variation</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="59"/>
+        <source>Jump to previous variation</source>
+        <translation>Jump to previous variation</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="144"/>
+        <source>There are no variations in the consensus sequence.</source>
+        <translation>There are no variations in the consensus sequence.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaConsensusOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="133"/>
+        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
+        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="136"/>
+        <source>Strict consensus algorithm factory is NULL</source>
+        <translation>Strict consensus algorithm factory is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="138"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditor</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="80"/>
+        <source>Save alignment</source>
+        <translation>Save alignment</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="84"/>
+        <source>Save alignment as</source>
+        <translation>Save alignment as</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="88"/>
+        <source>Zoom In</source>
+        <translation>Zoom In</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="92"/>
+        <source>Zoom Out</source>
+        <translation>Zoom Out</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="96"/>
+        <source>Zoom To Selection</source>
+        <translation>Zoom To Selection</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="100"/>
+        <source>Reset Zoom</source>
+        <translation>Reset Zoom</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="104"/>
+        <source>Change Font</source>
+        <translation>Change Font</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="108"/>
+        <source>Export highlighted</source>
+        <translation>Export highlighted</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="311"/>
+        <source>Save Alignment</source>
+        <translation>Save Alignment</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="319"/>
+        <source>Characters Font</source>
+        <translation>Characters Font</translation>
+    </message>
+    <message>
+        <source>Select font for alignment</source>
+        <translation type="vanished">Select font for alignment</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="347"/>
+        <source>Export as image</source>
+        <translation>Export as image</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="352"/>
+        <source>Overview</source>
+        <translation>Overview</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="387"/>
+        <source>Copy/Paste</source>
+        <translation>Copy/Paste</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="392"/>
+        <source>Edit</source>
+        <translation>Edit</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="397"/>
+        <source>Export</source>
+        <translation>Export</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="409"/>
+        <source>View</source>
+        <translation>View</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="417"/>
+        <source>Add</source>
+        <translation>Add</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="422"/>
+        <source>Align</source>
+        <translation>Align</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorConsensusArea</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="82"/>
+        <source>Copy consensus</source>
+        <translation>Copy consensus</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="86"/>
+        <source>Copy consensus with gaps</source>
+        <translation>Copy consensus with gaps</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="90"/>
+        <source>Consensus mode...</source>
+        <translation>Consensus mode...</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorFactory</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorFactory.cpp" line="46"/>
+        <source>Alignment Editor</source>
+        <translation>Alignment Editor</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorFactory.cpp" line="106"/>
+        <source>Open multiple views</source>
+        <translation>Open multiple views</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorNameList</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="70"/>
+        <source>Edit sequence name</source>
+        <translation>Edit sequence name</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="77"/>
+        <source>Copy current sequence</source>
+        <translation>Copy current sequence</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="81"/>
+        <source>Remove sequence(s)</source>
+        <translation>Remove sequence(s)</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="131"/>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="584"/>
+        <source>MSA Editor UI is NULL</source>
+        <translation>MSA Editor UI is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="133"/>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="586"/>
+        <source>MSA Editor sequence area is NULL</source>
+        <translation>MSA Editor sequence area is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="149"/>
+        <source>MSA Object is NULL</source>
+        <translation>MSA Object is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="155"/>
+        <source>Invalid sequence index</source>
+        <translation>Invalid sequence index</translation>
+    </message>
+    <message>
+        <source>Rename Read</source>
+        <translation type="vanished">Rename Read</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="849"/>
+        <source>Rename</source>
+        <translation>Rename</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="850"/>
+        <source>New sequence name:</source>
+        <translation>New sequence name:</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorSequenceArea</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="96"/>
+        <source>Replace selected character</source>
+        <translation>Replace selected character</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="103"/>
+        <source>Fill selection with gaps</source>
+        <translation>Fill selection with gaps</translation>
+    </message>
+    <message>
+        <source>Last visible base is less than startPos</source>
+        <translation type="vanished">Last visible base is less than startPos</translation>
+    </message>
+    <message>
+        <source>Last visible base is out of range</source>
+        <translation type="vanished">Last visible base is out of range</translation>
+    </message>
+    <message>
+        <source>Position is out of range: %1</source>
+        <translation type="vanished">Position is out of range: %1</translation>
+    </message>
+    <message>
+        <source>Last visible sequence is less than startSeq</source>
+        <translation type="vanished">Last visible sequence is less than startSeq</translation>
+    </message>
+    <message>
+        <source>Last visible sequence is out of range</source>
+        <translation type="vanished">Last visible sequence is out of range</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="163"/>
+        <source>Invalid collapsible item model!</source>
+        <translation>Invalid collapsible item model!</translation>
+    </message>
+    <message>
+        <source>Sequence is out of range: %1</source>
+        <translation type="vanished">Sequence is out of range: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="465"/>
+        <source>Alignment object is not available</source>
+        <translation>Alignment object is not available</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="784"/>
+        <source>No reference sequence selected</source>
+        <translation>No reference sequence selected</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="785"/>
+        <source>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</source>
+        <translation>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="801"/>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1402"/>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1483"/>
+        <source>Unknown alphabet</source>
+        <translation>Unknown alphabet</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="846"/>
+        <source>Cursor position is out of range</source>
+        <translation>Cursor position is out of range</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1213"/>
+        <source>Top left corner of the selection has incorrect coords</source>
+        <translation>Top left corner of the selection has incorrect coords</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1215"/>
+        <source>Bottom right corner of the selection has incorrect coords</source>
+        <translation>Bottom right corner of the selection has incorrect coords</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1578"/>
+        <source>It is not possible to insert the character into the alignment. Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation>It is not possible to insert the character into the alignment. Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</translation>
+    </message>
+    <message>
+        <source>Negative startPos with non-empty alignment</source>
+        <translation type="vanished">Negative startPos with non-empty alignment</translation>
+    </message>
+    <message>
+        <source>startPos is too big</source>
+        <translation type="vanished">startPos is too big</translation>
+    </message>
+    <message>
+        <source>Negative startSeq with non-empty alignment</source>
+        <translation type="vanished">Negative startSeq with non-empty alignment</translation>
+    </message>
+    <message>
+        <source>startSeq is too big</source>
+        <translation type="vanished">startSeq is too big</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="91"/>
+        <source>Use dots</source>
+        <translation>Use dots</translation>
+    </message>
+    <message>
+        <source>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</source>
+        <translation type="vanished">Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</translation>
+    </message>
+    <message>
+        <source>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</source>
+        <translation type="vanished">Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</translation>
+    </message>
+    <message>
+        <source>It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation type="vanished">It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="80"/>
+        <source>Sel %1</source>
+        <translation>Sel %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="81"/>
+        <source>Ln %1 / %2</source>
+        <translation>Ln %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="81"/>
+        <source>Line %1 of %2</source>
+        <translation>Line %1 of %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="82"/>
+        <source>Col %1 / %2</source>
+        <translation>Col %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="82"/>
+        <source>Column %1 of %2</source>
+        <translation>Column %1 of %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="83"/>
+        <source>Pos %1 / %2</source>
+        <translation>Pos %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="83"/>
+        <source>Position %1 of %2</source>
+        <translation>Position %1 of %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="84"/>
+        <source>Selection width and height are %1</source>
+        <translation>Selection width and height are %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="133"/>
+        <source>Alignment object is locked</source>
+        <translation>Alignment object is locked</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="133"/>
+        <source>Alignment object is not locked</source>
+        <translation>Alignment object is not locked</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorWgt</name>
+    <message>
+        <source>Consensus</source>
+        <translation type="vanished">Consensus</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="191"/>
+        <source>Consensus:</source>
+        <translation>Consensus:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="248"/>
+        <source>Remove selection</source>
+        <translation>Remove selection</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="253"/>
+        <source>Copy selection</source>
+        <translation>Copy selection</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="262"/>
+        <source>Copy formatted</source>
+        <translation>Copy formatted</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="271"/>
+        <source>Paste</source>
+        <translation>Paste</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="282"/>
+        <source>Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="286"/>
+        <source>Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaExportConsensusWidget</name>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp" line="91"/>
+        <source>A problem occurred during export consensus. The multiple alignment is no more available.</source>
+        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp" line="138"/>
+        <source>Save file</source>
+        <translation>Save file</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaGraphCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="41"/>
+        <source>Render overview</source>
+        <translation>Render overview</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="49"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="70"/>
+        <source>Overview width is zero</source>
+        <translation>Overview width is zero</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaGraphOverview</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="100"/>
+        <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
+        <translation>Multiple sequence alignment is too big. Overview is unavailable.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="105"/>
+        <source>Waiting...</source>
+        <translation>Waiting...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="111"/>
+        <source>Overview is rendering...</source>
+        <translation>Overview is rendering...</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaHighlightingOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="201"/>
+        <source>MSA highlighting scheme registry is NULL</source>
+        <translation>MSA highlighting scheme registry is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="203"/>
+        <source>MSA highlighting scheme factory with '%1' id is NULL</source>
+        <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="220"/>
+        <source>Color scheme is NULL</source>
+        <translation>Color scheme is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="221"/>
+        <source>Highlighting scheme is NULL</source>
+        <translation>Highlighting scheme is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="222"/>
+        <source>Highlighting scheme factory is NULL</source>
+        <translation>Highlighting scheme factory is NULL</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewContextMenu</name>
+    <name>U2::MaOverviewContextMenu</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="41"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="45"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="42"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="46"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="52"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="56"/>
         <source>Set color...</source>
         <translation>Set color...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="135"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="140"/>
         <source>Show simple overview</source>
         <translation>Show simple overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="142"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="147"/>
         <source>Export as image</source>
         <translation>Export as image</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="148"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="153"/>
         <source>Display settings...</source>
         <translation>Display settings...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="155"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="160"/>
         <source>Calculation method...</source>
         <translation>Calculation method...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="158"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="163"/>
         <source>Strict</source>
         <translation>Strict</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="159"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="164"/>
         <source>Gaps</source>
         <translation>Gaps</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="160"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="165"/>
         <source>Clustal</source>
         <translation>Clustal</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="161"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="166"/>
         <source>Highlighting</source>
         <translation>Highlighting</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="189"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="194"/>
         <source>Graph type</source>
         <translation>Graph type</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="193"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="198"/>
         <source>Histogram</source>
         <translation>Histogram</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="194"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="199"/>
         <source>Line graph</source>
         <translation>Line graph</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="195"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="200"/>
         <source>Area graph</source>
         <translation>Area graph</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="216"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="221"/>
         <source>Orientation</source>
         <translation>Orientation</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="220"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="225"/>
         <source>Top to bottom</source>
         <translation>Top to bottom</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="221"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="226"/>
         <source>Bottom to top</source>
         <translation>Bottom to top</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewImageExportController</name>
+    <name>U2::MaOverviewImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="83"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="78"/>
         <source>Alignment overview</source>
         <translation>Alignment overview</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewImageExportToBitmapTask</name>
+    <name>U2::MaOverviewImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="49"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="44"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="50"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="45"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="52"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="47"/>
         <source>Nothing to export. </source>
         <translation>Nothing to export. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="72"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="67"/>
         <source>FAIL</source>
         <translation>FAIL</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSASimpleOverview</name>
+    <name>U2::MaSangerOverview</name>
+    <message>
+        <source>Incorrect multiple alignment object!</source>
+        <translation type="vanished">Incorrect multiple alignment object!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaSangerOverview.cpp" line="259"/>
+        <source>Incorrect multiple chromatogram alignment object</source>
+        <translation>Incorrect multiple chromatogram alignment object</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaSimpleOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="102"/>
+        <location filename="../src/ov_msa/Overview/MaSimpleOverview.cpp" line="99"/>
         <source>Multiple sequence alignment is too big for current window size.
 Simple overview is unavailable.</source>
         <translation>Multiple sequence alignment is too big for current window size.
 Simple overview is unavailable.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="150"/>
+        <location filename="../src/ov_msa/Overview/MaSimpleOverview.cpp" line="148"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
 </context>
 <context>
+    <name>U2::McaEditor</name>
+    <message>
+        <source>Show/hide chromatogram(s)</source>
+        <translation type="vanished">Show/hide chromatogram(s)</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="200"/>
+        <source>Zoom in</source>
+        <translation>Zoom in</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="205"/>
+        <source>Zoom out</source>
+        <translation>Zoom out</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="210"/>
+        <source>Reset zoom</source>
+        <translation>Reset zoom</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="215"/>
+        <source>Show chromatograms</source>
+        <translation>Show chromatograms</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="222"/>
+        <source>Open "General" tab on the options panel</source>
+        <translation>Open "General" tab on the options panel</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="226"/>
+        <source>Open "Consensus" tab on the options panel</source>
+        <translation>Open "Consensus" tab on the options panel</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="230"/>
+        <source>Show overview</source>
+        <translation>Show overview</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="236"/>
+        <source>Change characters font...</source>
+        <translation>Change characters font...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="255"/>
+        <source>Alignment</source>
+        <translation>Alignment</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="262"/>
+        <source>Appearance</source>
+        <translation>Appearance</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="283"/>
+        <source>Navigation</source>
+        <translation>Navigation</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="294"/>
+        <source>Edit</source>
+        <translation>Edit</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorNameList</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorNameList.cpp" line="48"/>
+        <source>Rename read</source>
+        <translation>Rename read</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorNameList.cpp" line="51"/>
+        <source>Remove read</source>
+        <translation>Remove read</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorSequenceArea</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="57"/>
+        <source>Show quality bars</source>
+        <translation>Show quality bars</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="65"/>
+        <source>Show all</source>
+        <translation>Show all</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="69"/>
+        <source>Show/hide trace</source>
+        <translation>Show/hide trace</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="78"/>
+        <source>Insert character/gap</source>
+        <translation>Insert character/gap</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="83"/>
+        <source>Replace character/gap</source>
+        <translation>Replace character/gap</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="85"/>
+        <source>Remove gap at the left</source>
+        <translation>Remove gap at the left</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="90"/>
+        <source>Remove all columns of gaps</source>
+        <translation>Remove all columns of gaps</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="96"/>
+        <source>Trim left end</source>
+        <translation>Trim left end</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="102"/>
+        <source>Trim right end</source>
+        <translation>Trim right end</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="108"/>
+        <source>Insert gap</source>
+        <translation>Insert gap</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="459"/>
+        <source>It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation>It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</translation>
+    </message>
+    <message>
+        <source>Add insertion</source>
+        <translation type="vanished">Add insertion</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="50"/>
+        <source>RefPos %1 / %2</source>
+        <translation>RefPos %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="51"/>
+        <source>Reference position %1 of %2</source>
+        <translation>Reference position %1 of %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="52"/>
+        <source>ReadPos %1 / %2</source>
+        <translation>ReadPos %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="53"/>
+        <source>Read position %1 of %2</source>
+        <translation>Read position %1 of %2</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorWgt</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="71"/>
+        <source>Reference %1:</source>
+        <translation>Reference %1:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="150"/>
+        <source>Clear selection</source>
+        <translation>Clear selection</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="155"/>
+        <source>Remove character/gap</source>
+        <translation>Remove character/gap</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaExportConsensusTabFactory</name>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="86"/>
+        <source>Consensus mode</source>
+        <translation>Consensus mode</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="91"/>
+        <source>Export consensus</source>
+        <translation>Export consensus</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaGeneralTab</name>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTab.cpp" line="33"/>
+        <source>Alignment info</source>
+        <translation>Alignment info</translation>
+    </message>
+    <message>
+        <source>Consensus mode</source>
+        <translation type="vanished">Consensus mode</translation>
+    </message>
+</context>
+<context>
     <name>U2::MinMaxSelectorWidget</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="94"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="93"/>
         <source>Cutoff for minimum and maximum values</source>
         <translation>Cutoff for minimum and maximum values</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="115"/>
-        <source>Minimum:</source>
-        <translation>Minimum:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="117"/>
+        <source>Minimum</source>
+        <translation>Minimum</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="116"/>
-        <source>Maximum:</source>
-        <translation>Maximum:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="118"/>
+        <source>Maximum</source>
+        <translation>Maximum</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="164"/>
+        <source>Invalid cutoff range</source>
+        <translation>Invalid cutoff range</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="146"/>
         <source>Invalid cutoff values</source>
-        <translation>Invalid cutoff values</translation>
+        <translation type="vanished">Invalid cutoff values</translation>
     </message>
 </context>
 <context>
     <name>U2::MsaEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="62"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="68"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="76"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="63"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="69"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="77"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="119"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="122"/>
         <source>score</source>
         <translation>score</translation>
     </message>
 </context>
 <context>
+    <name>U2::MsaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="44"/>
+        <source>Find backward <b>(SHIFT + Enter)</b></source>
+        <translation>Find backward <b>(SHIFT + Enter)</b></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="49"/>
+        <source>Find forward <b>(Enter)</b></source>
+        <translation>Find forward <b>(Enter)</b></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="57"/>
+        <source>Find:</source>
+        <translation>Find:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="67"/>
+        <source>Find in alignment</source>
+        <translation>Find in alignment</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaEditorTreeTab</name>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
@@ -6369,9 +6695,51 @@ Simple overview is unavailable.</translation>
     </message>
 </context>
 <context>
+    <name>U2::MsaEditorWgt</name>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorWgt.cpp" line="74"/>
+        <source>Tree view</source>
+        <translation>Tree view</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaSchemesMenuBuilder</name>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="59"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="90"/>
+        <source>All alphabets</source>
+        <translation>All alphabets</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="60"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="91"/>
+        <source>Amino acid alphabet</source>
+        <translation>Amino acid alphabet</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="61"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="92"/>
+        <source>Nucleotide alphabet</source>
+        <translation>Nucleotide alphabet</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaUndoRedoFramework</name>
+    <message>
+        <location filename="../src/UndoRedoFramework.cpp" line="44"/>
+        <source>Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/UndoRedoFramework.cpp" line="50"/>
+        <source>Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::ObjectViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="275"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="269"/>
         <source>No sequence info found!</source>
         <translation>No sequence info found!</translation>
     </message>
@@ -6379,27 +6747,27 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::OpenAnnotatedDNAViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="153"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="147"/>
         <source>Sequences</source>
         <translation>Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="214"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="208"/>
         <source>Error reading sequence object from dbi! URL: '%1'', name: '%2', error: %3</source>
         <translation>Error reading sequence object from dbi! URL: '%1'', name: '%2', error: %3</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="218"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="212"/>
         <source>Maximum number of objects per view reached: %1</source>
         <translation>Maximum number of objects per view reached: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="222"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="216"/>
         <source>Sequence object not available! URL %1, name %2</source>
         <translation>Sequence object not available! URL %1, name %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="227"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="221"/>
         <source>No sequence objects found</source>
         <translation>No sequence objects found</translation>
     </message>
@@ -6413,27 +6781,27 @@ Simple overview is unavailable.</translation>
     </message>
 </context>
 <context>
-    <name>U2::OpenMSAEditorTask</name>
+    <name>U2::OpenMaEditorTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="90"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="99"/>
         <source>Documet removed from project</source>
         <translation>Documet removed from project</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="104"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="112"/>
         <source>Multiple alignment object not found</source>
-        <translation></translation>
+        <translation>Multiple alignment object not found</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="109"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="117"/>
         <source>Opening MSA editor for object: %1</source>
-        <translation></translation>
+        <translation>Opening MSA editor for object: %1</translation>
     </message>
 </context>
 <context>
     <name>U2::OpenSavedAnnotatedDNAViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="323"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="317"/>
         <source>DNA sequence object not found: %1</source>
         <translation>DNA sequence object not found: %1</translation>
     </message>
@@ -6449,7 +6817,14 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::OpenSavedMSAEditorTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="167"/>
+        <source>Alignment object not found: %1</source>
+        <translation type="vanished">Alignment object not found: %1</translation>
+    </message>
+</context>
+<context>
+    <name>U2::OpenSavedMaEditorTask</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="226"/>
         <source>Alignment object not found: %1</source>
         <translation>Alignment object not found: %1</translation>
     </message>
@@ -6541,51 +6916,57 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::PairAlign</name>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="111"/>
         <source>Sequences</source>
         <translation>Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="109"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="112"/>
         <source>Algorithm settings</source>
         <translation>Algorithm settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="110"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="113"/>
         <source>Output settings</source>
         <translation>Output settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="156"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="169"/>
+        <source>Please select 2 different sequences to align</source>
+        <translation>Please select 2 different sequences to align</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="173"/>
         <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
         <translation>Pairwise alignment is not available for alignments with "%1" alphabet.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="218"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="177"/>
+        <source>Unexpected error</source>
+        <translation>Unexpected error</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="240"/>
         <source>Either addFirstButton and addSecondButton are pressed. Sequence selection mode works incorrect.</source>
         <translation>Either addFirstButton and addSecondButton are pressed. Sequence selection mode works incorrect.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="254"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="285"/>
         <source>Not defined</source>
         <translation>Not defined</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="166"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="189"/>
         <source>Save file</source>
         <translation>Save file</translation>
     </message>
     <message>
-        <source>Clustal format (*.aln)</source>
-        <translation type="vanished">Clustal format (*.aln)</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="390"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="390"/>
         <source>Please, change the output file.</source>
         <translation>Please, change the output file.</translation>
     </message>
@@ -6593,37 +6974,37 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::PanView</name>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="161"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="159"/>
         <source>Zoom In</source>
         <translation>Zoom In</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="165"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="163"/>
         <source>Zoom Out</source>
         <translation>Zoom Out</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="169"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="167"/>
         <source>Zoom to Selection</source>
         <translation>Zoom to Selection</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="173"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="171"/>
         <source>Zoom to Whole Sequence</source>
         <translation>Zoom to Whole Sequence</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="177"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="175"/>
         <source>Show Main Ruler</source>
         <translation>Show Main Ruler</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="181"/>
         <source>Show Custom Rulers</source>
         <translation>Show Custom Rulers</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="485"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="483"/>
         <source>range change request: [%1, %2]</source>
         <translation>range change request: [%1, %2]</translation>
     </message>
@@ -6636,7 +7017,7 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::PanViewRenderer</name>
     <message>
-        <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="266"/>
+        <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="264"/>
         <source>[%1 %2]</source>
         <translation>[%1 %2]</translation>
     </message>
@@ -6658,20 +7039,38 @@ Simple overview is unavailable.</translation>
     </message>
 </context>
 <context>
+    <name>U2::Registry</name>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="121"/>
+        <source>All alphabets</source>
+        <translation>All alphabets</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="122"/>
+        <source>Amino acid alphabet</source>
+        <translation>Amino acid alphabet</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="123"/>
+        <source>Nucleotide alphabet</source>
+        <translation>Nucleotide alphabet</translation>
+    </message>
+</context>
+<context>
     <name>U2::SaveGraphCutoffsDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="44"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="52"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="45"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="53"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="100"/>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="156"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="108"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="165"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
@@ -6722,17 +7121,17 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialogController</name>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="45"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="48"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="46"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="59"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="62"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -6790,31 +7189,27 @@ Simple overview is unavailable.</translation>
 <context>
     <name>U2::SecStructDialog</name>
     <message>
-        <source>OK</source>
-        <translation type="vanished">OK</translation>
-    </message>
-    <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="65"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="66"/>
         <source>Predict</source>
-        <translation type="unfinished"></translation>
+        <translation>Predict</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="66"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="67"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="68"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="86"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="87"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="87"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="88"/>
         <source>Structure Type</source>
         <translation>Structure Type</translation>
     </message>
@@ -6842,22 +7237,12 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SelectSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="119"/>
-        <source>MSA Editor UI is NULL</source>
-        <translation>MSA Editor UI is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="120"/>
-        <source>MSA Editor is NULL</source>
-        <translation>MSA Editor is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="124"/>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="123"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="131"/>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="130"/>
         <source>MSA Object is NULL</source>
         <translation>MSA Object is NULL</translation>
     </message>
@@ -6876,6 +7261,11 @@ Please, load the corresponding plugins.</translation>
         <source>No sequences selected</source>
         <translation>No sequences selected</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="119"/>
+        <source>Ma Editor is NULL</source>
+        <translation>Ma Editor is NULL</translation>
+    </message>
 </context>
 <context>
     <name>U2::SeqStatisticsWidget</name>
@@ -6896,6 +7286,14 @@ Please, load the corresponding plugins.</translation>
     </message>
 </context>
 <context>
+    <name>U2::SequenceAreaRenderer</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/SequenceAreaRenderer.cpp" line="55"/>
+        <source>Alignment object is NULL</source>
+        <translation>Alignment object is NULL</translation>
+    </message>
+</context>
+<context>
     <name>U2::SequenceExportSettingsWidget</name>
     <message>
         <location filename="../src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp" line="39"/>
@@ -6942,14 +7340,47 @@ Please, load the corresponding plugins.</translation>
     </message>
 </context>
 <context>
+    <name>U2::SequenceObjectContext</name>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="213"/>
+        <source>Incorrect signal sender!</source>
+        <translation>Incorrect signal sender!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="222"/>
+        <source>Select genetic code</source>
+        <translation>Select genetic code</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="234"/>
+        <source>Show/hide amino acid translations</source>
+        <translation>Show/hide amino acid translations</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="242"/>
+        <source>Show direct only</source>
+        <translation>Show direct only</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="243"/>
+        <source>Show complementary only</source>
+        <translation>Show complementary only</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="244"/>
+        <source>Show all</source>
+        <translation>Show all</translation>
+    </message>
+</context>
+<context>
     <name>U2::SimpleTextObjectViewFactory</name>
     <message>
-        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="53"/>
+        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="48"/>
         <source>Text editor</source>
         <translation>Text editor</translation>
     </message>
     <message>
-        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="79"/>
+        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="74"/>
         <source>Open multiple views task</source>
         <translation>Open multiple views task</translation>
     </message>
@@ -6991,113 +7422,113 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SmithWatermanDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="76"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
         <source>Remote run</source>
         <translation>Remote run</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="79"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="92"/>
         <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="93"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="94"/>
         <source>No substitution matrices found.</source>
         <translation>No substitution matrices found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="100"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="101"/>
         <source>No filter registry found.</source>
         <translation>No filter registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="107"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="108"/>
         <source>No result names tag registry found.</source>
         <translation>No result names tag registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="114"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="115"/>
         <source>No algorithm registry found.</source>
         <translation>No algorithm registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="284"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="285"/>
         <source>Enter pattern here</source>
         <translation>Enter pattern here</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="287"/>
         <source>Pattern length: %1</source>
         <translation>Pattern length: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="325"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="326"/>
         <source>Add qualifier with corresponding pattern subsequences to result annotations</source>
         <translation>Add qualifier with corresponding pattern subsequences to result annotations</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="420"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="421"/>
         <source>Choose folder</source>
         <translation>Choose folder</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="432"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="433"/>
         <source>Matrix not found.</source>
         <translation>Matrix not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="483"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="484"/>
         <source>Cannot create an annotation object. Please check settings.</source>
         <translation>Cannot create an annotation object. Please check settings.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="508"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="511"/>
         <source>SmithWatermanTask</source>
         <translation>SmithWatermanTask</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="551"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="554"/>
         <source>Names of result alignment files or names of result subsequences cannot be empty.</source>
         <translation>Names of result alignment files or names of result subsequences cannot be empty.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="569"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="572"/>
         <source>Complement translation is not found.</source>
         <translation>Complement translation is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="581"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="584"/>
         <source>Algorithm is not found.</source>
         <translation>Algorithm is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="594"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="597"/>
         <source>Matrix %1 is not found.</source>
         <translation>Matrix %1 is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="627"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="630"/>
         <source>Filter is not found.</source>
         <translation>Filter is not found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="644"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="647"/>
         <source>Internal error</source>
         <translation>Internal error</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="652"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="655"/>
         <source>Pattern is empty</source>
         <translation>Pattern is empty</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="664"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="667"/>
         <source>Pattern contains unknown symbol</source>
         <translation>Pattern contains unknown symbol</translation>
     </message>
@@ -7105,7 +7536,7 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SubalignmentToClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="242"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="239"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -7113,22 +7544,22 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::SubstMatrixDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="46"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="39"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="48"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="41"/>
         <source>Scoring Matrix: %1</source>
         <translation>Scoring Matrix: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="52"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="45"/>
         <source>min score:</source>
         <translation>min score:</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="53"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="46"/>
         <source>max score:</source>
         <translation>max score:</translation>
     </message>
@@ -7136,12 +7567,12 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::TextSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="41"/>
+        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="37"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="42"/>
+        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="38"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -7149,37 +7580,61 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::TreeOptionsWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="124"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="116"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="126"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="118"/>
         <source>Labels</source>
         <translation>Labels</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="128"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="120"/>
         <source>Scale Bar</source>
         <translation>Scale Bar</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="130"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="122"/>
         <source>Branches</source>
         <translation>Branches</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="136"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="314"/>
+        <source>Hide font settings</source>
+        <translation>Hide font settings</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="136"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="314"/>
+        <source>Show font settings</source>
+        <translation>Show font settings</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="138"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="321"/>
+        <source>Hide pen settings</source>
+        <translation>Hide pen settings</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="138"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="321"/>
+        <source>Show pen settings</source>
+        <translation>Show pen settings</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Rectangular</source>
         <translation>Rectangular</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Circular</source>
         <translation>Circular</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Unrooted</source>
         <translation>Unrooted</translation>
     </message>
@@ -7187,27 +7642,27 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::TreeSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="34"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="35"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="35"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="36"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="92"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="93"/>
         <source>Default</source>
         <translation>Default</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="95"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="96"/>
         <source>Phylogram</source>
         <translation>Phylogram</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="98"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="99"/>
         <source>Cladogram</source>
         <translation>Cladogram</translation>
     </message>
@@ -7352,22 +7807,22 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::WindowStepSelectorDialog</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="161"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="179"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="162"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="180"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="171"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="189"/>
         <source>Graph Settings</source>
         <translation>Graph Settings</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="196"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="214"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
@@ -7375,22 +7830,22 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::WindowStepSelectorWidget</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="58"/>
-        <source>Window:</source>
-        <translation>Window:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="53"/>
+        <source>Window</source>
+        <translation>Window</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="59"/>
-        <source>Steps per window:</source>
-        <translation>Steps per window:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="54"/>
+        <source>Steps per window</source>
+        <translation>Steps per window</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="79"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="73"/>
         <source>Illegal step value</source>
         <translation>Illegal step value</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="84"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="78"/>
         <source>Invalid step value</source>
         <translation>Invalid step value</translation>
     </message>
@@ -7398,38 +7853,38 @@ Please, load the corresponding plugins.</translation>
 <context>
     <name>U2::ZoomableAssemblyOverview</name>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="75"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="67"/>
         <source>Zoom in</source>
         <translation>Zoom in</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="76"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="68"/>
         <source>Zoom out</source>
         <translation>Zoom out</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="77"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="69"/>
         <source>Zoom in 100x</source>
         <translation>Zoom in 100x</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="78"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="70"/>
         <source>Restore global overview</source>
         <translation>Restore global overview</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="79"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="71"/>
         <source>Export coverage...</source>
         <translation>Export coverage...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="127"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="121"/>
         <source>Background is rendering...</source>
         <translation>Background is rendering...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="305"/>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="327"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="300"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="322"/>
         <source>%1 to %2 (%3 bp)</source>
         <translation>%1 to %2 (%3 bp)</translation>
     </message>
diff --git a/src/corelibs/U2View/transl/russian.ts b/src/corelibs/U2View/transl/russian.ts
index 58e46ad..29a3500 100644
--- a/src/corelibs/U2View/transl/russian.ts
+++ b/src/corelibs/U2View/transl/russian.ts
@@ -14,18 +14,18 @@ Probably the data is too big.</source>
 <context>
     <name>AssemblyToRefDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="88"/>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="112"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="72"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="96"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="210"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="194"/>
         <source>Add</source>
         <translation>Добавить</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="217"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="201"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -50,67 +50,67 @@ Probably the data is too big.</source>
         <translation>Выберите требуемый метод выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="71"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="55"/>
         <source>Select a DNA sequence to align short reads to. This parameter is <b>required</b>.</source>
         <translation>Выберите референсную последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="74"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="58"/>
         <source>Reference sequence</source>
         <translation>Референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="95"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="79"/>
         <source>File in UGENE database format or SAM format (if the box SAM output check), to write the result of the alignment into. This parameter is <b>required</b>.</source>
         <translation>Результат сборки контигов в формате SAM.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="98"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="82"/>
         <source>Result file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="123"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="107"/>
         <source>Library</source>
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="131"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="115"/>
         <source>Single-end</source>
         <translation>Single-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="136"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="120"/>
         <source>Paired-end</source>
         <translation>Paired-end</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="157"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="141"/>
         <source>SAM output</source>
         <translation>Сохранить в формате SAM</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="150"/>
         <source>Add short reads here. <b>At least one read</b> should be presented.</source>
         <translation>Здесь показаны риды, которые будут выравнены на референтную последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="169"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="153"/>
         <source>Short reads</source>
         <translation>Короткие риды</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="177"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="161"/>
         <source>Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="182"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="166"/>
         <source>Type</source>
         <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="187"/>
+        <location filename="../src/util_dna_assembly/AssemblyToRefDialog.ui" line="171"/>
         <source>Order</source>
         <translation>Порядок</translation>
     </message>
@@ -235,9 +235,13 @@ Probably the data is too big.</source>
         <translation>Создание пользовательских цветовых схем</translation>
     </message>
     <message>
+        <source>Folder to save color scheme:</source>
+        <translation type="vanished">Папка для сохранения цветовой схемы:</translation>
+    </message>
+    <message>
         <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="35"/>
         <source>Directory to save color scheme:</source>
-        <translation>Директория для сохранения цветовой схемы:</translation>
+        <translation>Папка для сохранения:</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/ColorSchemaSettingsWidget.ui" line="47"/>
@@ -307,10 +311,14 @@ Probably the data is too big.</source>
     </message>
     <message>
         <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="110"/>
-        <source>Remember Settings</source>
+        <source>Save Settings</source>
         <translation>Сохранить настройки</translation>
     </message>
     <message>
+        <source>Remember Settings</source>
+        <translation type="vanished">Сохранить настройки</translation>
+    </message>
+    <message>
         <location filename="../src/phyltree/CreatePhyTreeDialog.ui" line="117"/>
         <source>Restore Default</source>
         <translation>Восстановить настройки</translation>
@@ -362,47 +370,47 @@ Probably the data is too big.</source>
         <translation>От </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="48"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="51"/>
         <source> to </source>
         <translation> до </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="73"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="76"/>
         <source>Selected sequences</source>
         <translation>Выбранные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="102"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="105"/>
         <source>Invert selection</source>
         <translation>Инвертировать выбор</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="109"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="112"/>
         <source>Select all</source>
         <translation>Выбрать всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="116"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="119"/>
         <source>Clear selection</source>
         <translation>Снять выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="127"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="130"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="137"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="140"/>
         <source>File name</source>
         <translation>Имя файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="144"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="147"/>
         <source>File format to use</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="173"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialog.ui" line="176"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -437,25 +445,6 @@ Probably the data is too big.</source>
     </message>
 </context>
 <context>
-    <name>EditAnnotationDialog</name>
-    <message>
-        <source>Edit Annotation</source>
-        <translation type="vanished">Редактирование аннотации</translation>
-    </message>
-    <message>
-        <source>Annotation name</source>
-        <translation type="vanished">Имя аннотации</translation>
-    </message>
-    <message>
-        <source>Location</source>
-        <translation type="vanished">Позиция</translation>
-    </message>
-    <message>
-        <source>...</source>
-        <translation type="vanished">...</translation>
-    </message>
-</context>
-<context>
     <name>ExportConsensusDialog</name>
     <message>
         <location filename="../src/ov_assembly/ExportConsensusDialog.ui" line="14"/>
@@ -511,32 +500,32 @@ Probably the data is too big.</source>
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="34"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="37"/>
         <source>Export to file</source>
         <translation>Экспорт в файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="44"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="47"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="58"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="61"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="75"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="88"/>
         <source>Keep gaps</source>
         <translation>Наличие пробелов</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="82"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="78"/>
         <source>Info: alphabet of the consensus is undefined, the sequence can only be saved into a plain text document.</source>
         <translation>Информация: алфавит консенсуса не определен, последовательность может быть сохранена только в текстовом формате.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="118"/>
+        <location filename="../src/ov_msa/ExportConsensus/ExportConsensusWidget.ui" line="121"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
@@ -544,46 +533,42 @@ Probably the data is too big.</source>
 <context>
     <name>ExportCoverageDialog</name>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="14"/>
-        <source>Export the Assembly Coverage</source>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="20"/>
+        <source>Export Assembly Coverage</source>
         <translation>Экспорт покрытия</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="23"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="29"/>
         <source>Export to:</source>
         <translation>Экспортировать в:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="35"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="41"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="44"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="50"/>
         <source>Format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="69"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="75"/>
         <source>Compress the file</source>
         <translation>Сжать файл</translation>
     </message>
     <message>
-        <source>Additional options</source>
-        <translation type="vanished">Дополнительные параметры</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="124"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="142"/>
         <source>Export coverage value</source>
         <translation>Экспортировать покрытие</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="134"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="152"/>
         <source>Export bases quantity</source>
         <translation>Эксспортировать количество оснований</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="83"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.ui" line="101"/>
         <source>Threshold:</source>
         <translation>Порог:</translation>
     </message>
@@ -682,10 +667,6 @@ Probably the data is too big.</source>
         <translation>Экспорт региона сборки</translation>
     </message>
     <message>
-        <source>Export to file</source>
-        <translation type="vanished">Экспорт в файл</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.ui" line="22"/>
         <source>Save to file</source>
         <translation>Сохранить в файл</translation>
@@ -711,12 +692,12 @@ Probably the data is too big.</source>
     <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="41"/>
         <source>Search for:</source>
-        <translation>Искать:</translation>
+        <translation>Поиск:</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="433"/>
         <source>Search in</source>
-        <translation>Искать в</translation>
+        <translation>Поиск в</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternForm.ui" line="526"/>
@@ -812,32 +793,12 @@ Probably the data is too big.</source>
         <translation>Число последовательностей:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="117"/>
-        <source>Consensus type:</source>
-        <translation>Тип консенсуса:</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="129"/>
-        <source>Threshold:</source>
-        <translation>Порог:</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="136"/>
-        <source>Reset to default value</source>
-        <translation>Восстановить значение по умолчанию</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="176"/>
-        <source>%</source>
-        <translation>%</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="203"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="120"/>
         <source>Format:</source>
         <translation>Формат:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="213"/>
+        <location filename="../src/ov_msa/General/GeneralTabOptionsPanelWidget.ui" line="130"/>
         <source>Copy</source>
         <translation>Копировать</translation>
     </message>
@@ -847,7 +808,7 @@ Probably the data is too big.</source>
     <message>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="20"/>
         <source>Assemble Genomes</source>
-        <translation>Геномы сборки</translation>
+        <translation>Сборка генома de novo</translation>
     </message>
     <message>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="28"/>
@@ -875,9 +836,13 @@ Probably the data is too big.</source>
         <translation>Результат сборки контигов в формате SAM.</translation>
     </message>
     <message>
+        <source>Output folder</source>
+        <translation type="vanished">Выходная папка</translation>
+    </message>
+    <message>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="82"/>
         <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <translation>Сохранить в</translation>
     </message>
     <message>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.ui" line="93"/>
@@ -974,27 +939,37 @@ Probably the data is too big.</source>
         <translation>Алгоритм построения:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="147"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="132"/>
+        <source>Count</source>
+        <translation>Значение</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="139"/>
+        <source>Percentage</source>
+        <translation>Проценты</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="156"/>
         <source>Automatic updating</source>
         <translation>Автоматическое обновление</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="162"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="171"/>
         <source><dataState></source>
         <translation><dataState></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="169"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="178"/>
         <source>Refresh distances</source>
         <translation>Обновить расстояния</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="172"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="181"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="191"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="200"/>
         <source><hint></source>
         <translation><hint></translation>
     </message>
@@ -1004,17 +979,15 @@ Probably the data is too big.</source>
         <translation>Способ профилирования</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="123"/>
         <source>Counts</source>
-        <translation>Значения</translation>
+        <translation type="vanished">Значения</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="130"/>
         <source>Percents</source>
-        <translation>Проценты</translation>
+        <translation type="vanished">Проценты</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="137"/>
+        <location filename="../src/ov_msa/SeqStatistics/MSADistancesColumnSettingsWidget.ui" line="146"/>
         <source>Exclude gaps</source>
         <translation>Исключить пробелы</translation>
     </message>
@@ -1063,6 +1036,52 @@ Probably the data is too big.</source>
     </message>
 </context>
 <context>
+    <name>MaConsensusModeWidget</name>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="20"/>
+        <source>Consensus type:</source>
+        <translation>Тип консенсуса:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="32"/>
+        <source>Threshold:</source>
+        <translation>Порог:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="39"/>
+        <source>Reset to default value</source>
+        <translation>Восстановить значение по умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MaConsensusModeWidget.ui" line="85"/>
+        <source>%</source>
+        <translation>%</translation>
+    </message>
+</context>
+<context>
+    <name>McaGeneralTab</name>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="14"/>
+        <source>Form</source>
+        <translation>Форма</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="52"/>
+        <source>Sequence number:</source>
+        <translation>Число прочтений:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTabOptionsPanelWidget.ui" line="59"/>
+        <source>Length:</source>
+        <translation>Длина:</translation>
+    </message>
+</context>
+<context>
     <name>PairwiseAlignmentOptionsPanelWidget</name>
     <message>
         <location filename="../src/ov_msa/PairAlign/PairwiseAlignmentOptionsPanelWidget.ui" line="20"/>
@@ -1166,62 +1185,62 @@ Probably the data is too big.</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="57"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="52"/>
         <source>Save As</source>
         <translation>Сохранить как</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="66"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="61"/>
         <source>Replace file</source>
         <translation>Заменить файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="67"/>
+        <location filename="../src/ov_phyltree/TreeViewerUtils.cpp" line="62"/>
         <source>%1 already exists.
 Do you want to replace it?</source>
         <translation>%1 уже существует.
 Вы уверены, что хотите заменить его?</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="173"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="167"/>
         <source>The following sequences contain unrecognizable symbols:
 </source>
         <translation>Следующие последовательности содержат символы, которые невозможно распознать:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="183"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="177"/>
         <source>and others...
 </source>
         <translation>и другие...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="186"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="180"/>
         <source>Some algorithms will not work for these sequences.</source>
         <translation>Некоторые алгоритмы не будут работать для этих последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="187"/>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="196"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="181"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="190"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="81"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="76"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="82"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="77"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="114"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="109"/>
         <source>Export simple overview</source>
         <translation>Экспорт выравнивания в миниатюре</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="115"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="110"/>
         <source>Export graph overview</source>
         <translation>Экспорт консенсусной последовательности</translation>
     </message>
@@ -1232,220 +1251,229 @@ Double-click to collapse the branch</source>
         <translation>Левый щелчок мышью выделяет ветвь, двойной щелчок сворачивает ветвь</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyInfoWidget.cpp" line="125"/>
+        <location filename="../src/ov_assembly/AssemblyInfoWidget.cpp" line="152"/>
         <source>Assembly Statistics</source>
         <translation>Статистика сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyNavigationWidget.cpp" line="134"/>
+        <location filename="../src/ov_assembly/AssemblyNavigationWidget.cpp" line="155"/>
         <source>Navigation</source>
         <translation>Навигация</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="175"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="186"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="965"/>
         <source>Lock here</source>
         <translation>Заблокировать здесь</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <source>Shift+move mouse</source>
         <translation>Shift+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="337"/>
         <source>Zoom the Assembly Overview to selection</source>
         <translation>Увеличить выделенное</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
         <source>Ctrl+wheel</source>
         <translation>Ctrl+wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="338"/>
         <source>Zoom the Assembly Overview</source>
         <translation>Увеличить общий вид сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
         <source>Alt+click</source>
         <translation>Alt+click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="339"/>
         <source>Zoom the Assembly Overview in 100x</source>
         <translation>Увеличить общий вид сборки в 100 раз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
         <source>Wheel+move mouse</source>
         <translation>Wheel+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="340"/>
         <source>Move the Assembly Overview</source>
         <translation>Переместить общий вид сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <source>Wheel</source>
         <translation>Wheel</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="341"/>
         <source>Zoom the Reads Area</source>
         <translation>Увеличить область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
         <source>Double-click</source>
         <translation>Double-click</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="342"/>
         <source>Zoom in the Reads Area</source>
         <translation>Увеличить в область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <source>+/-</source>
         <translation>+/-</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="343"/>
         <source>Zoom in/Zoom out the Reads Area</source>
         <translation>Увеличить/уменьшить область с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
         <source>Click+move mouse</source>
         <translation>Click+move mouse</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="344"/>
         <source>Move the Reads Area</source>
         <translation>Переместить област с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
         <source>Arrow</source>
         <translation>Arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="345"/>
         <source>Move one base in the corresponding direction in the Reads Area</source>
         <translation>Переместить один символ в указанном направлении в области с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
         <source>Ctrl+arrow</source>
         <translation>Ctrl+arrow</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="346"/>
         <source>Move one page in the corresponding direction in the Reads Area</source>
         <translation>Переместить одну область видимости в указанном направлении в области с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
         <source>Page up/Page down</source>
         <translation>Вверх/Вниз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="347"/>
         <source>Move one page up/down in the Reads Area</source>
         <translation>Переместить одну область видимости в области с ридами вверх/вниз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
         <source>Home/End</source>
         <translation>В начало/в конец</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="348"/>
         <source>Move to the beginning/end of the assembly in the Reads Area</source>
         <translation>Переместиться в начало/в конец сборки в области с ридами</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="350"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
         <source>Ctrl+G</source>
         <translation>Ctrl+G</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="350"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="349"/>
         <source>Focus to the <i>Go to position</i> field on the toolbar</source>
         <translation>Перейти к полю <i>Переместиться в позицию</i> на панели инструментов</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="74"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="69"/>
         <source>no information</source>
         <translation>нет информации</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="89"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="105"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="152"/>
         <source>direct</source>
         <translation>прямая</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="90"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="105"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="152"/>
         <source>complement</source>
         <translation>комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="164"/>
+        <location filename="../src/ov_assembly/AssemblyReadsAreaHint.cpp" line="156"/>
         <source>Unmapped</source>
         <translation>Несопоставленный</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblySettingsWidget.cpp" line="233"/>
+        <location filename="../src/ov_assembly/AssemblySettingsWidget.cpp" line="260"/>
         <source>Assembly Browser Settings</source>
         <translation>Настройки браузера сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="62"/>
         <source>Export Consensus</source>
         <translation>Экспорт консенсуса</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/General/MSAGeneralTabFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="100"/>
+        <source>Consensus</source>
+        <translation>Консенсус</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/General/MSAGeneralTabFactory.cpp" line="62"/>
+        <location filename="../src/ov_msa/General/McaGeneralTabFactory.cpp" line="59"/>
         <source>General</source>
-        <translation>Основные</translation>
+        <translation>Общая информация</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp" line="34"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTabFactory.cpp" line="55"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="41"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
         <source>Data is outdated</source>
         <translation>Данные устарели</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="42"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
         <source>Data is valid</source>
         <translation>Данные корректны</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="43"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="44"/>
         <source>Data is being updated</source>
         <translation>Данные обновляются</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlignFactory.cpp" line="32"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlignFactory.cpp" line="57"/>
         <source>Pairwise Alignment</source>
         <translation>Парное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp" line="36"/>
-        <location filename="../src/ov_sequence/sequence_info/SequenceInfoFactory.cpp" line="36"/>
+        <location filename="../src/ov_msa/SeqStatistics/SeqStatisticsWidgetFactory.cpp" line="58"/>
+        <location filename="../src/ov_sequence/sequence_info/SequenceInfoFactory.cpp" line="58"/>
         <source>Statistics</source>
         <translation>Статистика</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="36"/>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="77"/>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="119"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="66"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="107"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidgetFactory.cpp" line="139"/>
         <source>Tree Settings</source>
         <translation>Настройки дерева</translation>
     </message>
@@ -1455,37 +1483,37 @@ Double-click to collapse the branch</source>
         <translation>Цвет по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="34"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="53"/>
         <source>Annotation</source>
         <translation>Аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="35"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightTree.cpp" line="53"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp" line="36"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidgetFactory.cpp" line="58"/>
         <source>Annotations Highlighting</source>
         <translation>Выделение аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="218"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="306"/>
         <source>Search algorithm</source>
         <translation>Алгоритм поиска</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="219"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="307"/>
         <source>Search in</source>
-        <translation>Искать в</translation>
+        <translation>Поиск в</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="220"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="308"/>
         <source>Other settings</source>
         <translation>Другие настройки</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp" line="36"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidgetFactory.cpp" line="58"/>
         <source>Search in Sequence</source>
         <translation>Поиск в последовательности</translation>
     </message>
@@ -1505,12 +1533,13 @@ Double-click to collapse the branch</source>
         <translation>Bedgraph</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="40"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="48"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="62"/>
         <source>Show all annotation names</source>
         <translation>Показать все имена аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="41"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="66"/>
         <source>Show names for the sequence only</source>
         <translation>Показать имена только для последовательности</translation>
     </message>
@@ -1519,6 +1548,11 @@ Double-click to collapse the branch</source>
         <source>Restriction Site</source>
         <translation>Сайт рестрикции</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="110"/>
+        <source>none</source>
+        <translation>нет</translation>
+    </message>
 </context>
 <context>
     <name>SaveGraphCutoffsDialog</name>
@@ -1598,7 +1632,7 @@ Double-click to collapse the branch</source>
     <message>
         <location filename="../src/ov_sequence/SearchQualifierDialog.ui" line="122"/>
         <source>Search in:</source>
-        <translation>Искать в:</translation>
+        <translation>Поиск в:</translation>
     </message>
 </context>
 <context>
@@ -1741,6 +1775,16 @@ Double-click to collapse the branch</source>
         <translation>Поиск Смита-Ватермана</translation>
     </message>
     <message>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="273"/>
+        <source>Advanced..</source>
+        <translation>Ещё..</translation>
+    </message>
+    <message>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="339"/>
+        <source>View..</source>
+        <translation>Просмотр..</translation>
+    </message>
+    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="478"/>
         <source>Input and output</source>
         <translation>Ввод и вывод</translation>
@@ -1766,21 +1810,11 @@ Double-click to collapse the branch</source>
         <translation>Версия алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="273"/>
-        <source>Advanced..</source>
-        <translation>Дополнительно..</translation>
-    </message>
-    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="289"/>
         <source>Scoring matrix</source>
         <translation>Матрица весов</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="339"/>
-        <source>View..</source>
-        <translation>Смотреть..</translation>
-    </message>
-    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="352"/>
         <source>Gap scores</source>
         <translation>Веса пробелов</translation>
@@ -1831,6 +1865,10 @@ Double-click to collapse the branch</source>
         <translation>Путь до файлов выравнивания</translation>
     </message>
     <message>
+        <source>Alignment files folder path</source>
+        <translation type="vanished">Путь до файлов выравнивания</translation>
+    </message>
+    <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="611"/>
         <source>...</source>
         <translation>...</translation>
@@ -1856,14 +1894,14 @@ Double-click to collapse the branch</source>
         <translation>Пример для имен подпоследовательностей</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="721"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="730"/>
         <source>Pattern sequence name</source>
         <translation>Имя подстроки</translation>
     </message>
     <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="100"/>
         <source>Search in</source>
-        <translation>Искать в</translation>
+        <translation>Поиск в</translation>
     </message>
     <message>
         <location filename="../src/util_smith_waterman/SmithWatermanDialogBase.ui" line="115"/>
@@ -2153,58 +2191,25 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::ADVSequenceObjectContext</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="207"/>
+        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="49"/>
         <source>Incorrect signal sender!</source>
         <translation>Incorrect signal sender!</translation>
     </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="217"/>
-        <source>Select genetic code</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="229"/>
-        <source>Show/hide amino acid translations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="237"/>
-        <source>Show direct only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="238"/>
-        <source>Show complementary only</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/ADVSequenceObjectContext.cpp" line="239"/>
-        <source>Show all</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Amino translation</source>
-        <translation type="vanished">Таблицы трансляции</translation>
-    </message>
-    <message>
-        <source>Translation frames</source>
-        <translation type="vanished">Рамки трансляций</translation>
-    </message>
 </context>
 <context>
     <name>U2::ADVSingleSequenceHeaderWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="971"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
         <source>Alphabet: <b>%1</b></source>
         <translation>Алфавит: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="972"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="974"/>
         <source> Sequence size: <b>%1</b></source>
         <translation>Размер последовательности: <b>%1</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="973"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="975"/>
         <source> File:&nbsp;<b>%1</b></source>
         <translation>Файл:&nbsp;<b>%1</b></translation>
     </message>
@@ -2247,113 +2252,113 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::ADVSingleSequenceWidget</name>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="443"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="444"/>
         <source>Zoom</source>
         <translation>Масштаб</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="707"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="708"/>
         <source>Zoom to range</source>
         <translation>Выбор масштаба</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="121"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="122"/>
         <source>Create new ruler...</source>
         <translation>Создать новую шкалу...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="535"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="536"/>
         <source>Rulers...</source>
         <translation>Шкала обзора...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="546"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="547"/>
         <source>Remove '%1'</source>
         <translation>Удалить "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="99"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="100"/>
         <source>Select sequence region...</source>
         <translation>Выберите регион...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="105"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="106"/>
         <source>Sequence region...</source>
         <translation>Регион последовательности...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="109"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="110"/>
         <source>Sequence between selected annotations</source>
         <translation>Последовательность между выбранными аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="113"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="114"/>
         <source>Sequence around selected annotations</source>
         <translation>Последовательность под выбранными аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="117"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="118"/>
         <source>Zoom to range...</source>
         <translation>Выбрать масштаб...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="203"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="204"/>
         <source>Export image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="219"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="220"/>
         <source>Remove sequence</source>
         <translation>Удалить последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="520"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="521"/>
         <source>Select</source>
         <translation>Выделить</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="310"/>
         <source>Show all views</source>
         <translation>Показать всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="309"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="310"/>
         <source>Hide all views</source>
         <translation>Скрыть всё</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="927"/>
         <source>Show zoom view</source>
         <translation>Показать масштабируемое представление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="237"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="925"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="927"/>
         <source>Hide zoom view</source>
         <translation>Скрыть масштабируемое представление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="932"/>
         <source>Show details view</source>
         <translation>Показать детали</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="238"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="930"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="932"/>
         <source>Hide details view</source>
         <translation>Скрыть детали</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="240"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="937"/>
         <source>Show overview</source>
         <translation>Показать панораму</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="239"/>
-        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="935"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="240"/>
+        <location filename="../src/ov_sequence/ADVSingleSequenceWidget.cpp" line="937"/>
         <source>Hide overview</source>
         <translation>Скрыть панораму</translation>
     </message>
@@ -2401,42 +2406,42 @@ Double-click to collapse the branch</source>
         <translation>Показать все детали</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="41"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="42"/>
         <source>Lock scales: visible range start</source>
         <translation>Связать шкалы: по началу видимого региона</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="46"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="47"/>
         <source>Lock scales: selected sequence</source>
         <translation>Связать шкалы: по выбранному региону</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="51"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="52"/>
         <source>Lock scales: selected annotation</source>
         <translation>Связать шкалы: по выбранной аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="62"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="63"/>
         <source>Adjust scales: visible range start</source>
         <translation>Синхронизировать шкалы: по началу видимого региона</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="66"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="67"/>
         <source>Adjust scales: selected sequence</source>
         <translation>Синхронизировать шкалы: по выбранному региону</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="70"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="71"/>
         <source>Adjust scales: selected annotation</source>
         <translation>Синхронизировать шкалы: по выбранной аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="74"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="75"/>
         <source>Lock scales</source>
         <translation>Связать шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="78"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="79"/>
         <source>Adjust scales</source>
         <translation>Синхронизировать шкалы</translation>
     </message>
@@ -2446,12 +2451,12 @@ Double-click to collapse the branch</source>
         <translation>Переключить обзор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="586"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="589"/>
         <source>Hide %1</source>
         <translation>Скрыть %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="588"/>
+        <location filename="../src/ov_sequence/ADVSyncViewManager.cpp" line="591"/>
         <source>Show %1</source>
         <translation>Показать %1</translation>
     </message>
@@ -2472,17 +2477,17 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AddTreeWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="369"/>
         <source>There are no displayed trees so settings are hidden.</source>
         <translation>Настройки скрыты потому, что нет открытого дерева.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="385"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="377"/>
         <source>Open tree</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="394"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="386"/>
         <source>Build tree</source>
         <translation>Построить</translation>
     </message>
@@ -2508,37 +2513,37 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AnnotHighlightWidget</name>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="93"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="94"/>
         <source>Select an annotation name:</source>
         <translation>Выбрать имя аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="114"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="115"/>
         <source>Configure the annotations:</source>
         <translation>Задать аннотации:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="126"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="127"/>
         <source>Previous annotation</source>
         <translation>Предыдущая аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="134"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="135"/>
         <source>Next annotation</source>
         <translation>Следующая аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="212"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="213"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="323"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="326"/>
         <source>The sequence doesn't have any annotations.</source>
         <translation>Последовательность не имеет аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="326"/>
+        <location filename="../src/ov_sequence/annot_highlight/AnnotHighlightWidget.cpp" line="329"/>
         <source>The sequences do not have any annotations.</source>
         <translation>Последовательности не имеют аннотаций.</translation>
     </message>
@@ -2546,121 +2551,117 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AnnotatedDNAView</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="141"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="130"/>
         <source>Find pattern...</source>
         <translation>Поиск подстроки...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="122"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="111"/>
         <source>Go to position...</source>
         <translation>Перейти...</translation>
     </message>
     <message>
-        <source>Rename item</source>
-        <translation type="vanished">Переименовать элемент</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="146"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="135"/>
         <source>Insert subsequence...</source>
         <translation>Вставить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="151"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="140"/>
         <source>Remove subsequence...</source>
         <translation>Удалить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="155"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="144"/>
         <source>Replace subsequence...</source>
         <translation>Заменить подпоследовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="160"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="149"/>
         <source>Selected sequence from view</source>
         <translation>Удалить выделенную последовательность из отображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="164"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="153"/>
         <source>Reverse-complement sequence</source>
         <translation>Заменить на обратно-комплементарную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="172"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="162"/>
         <source>Complement sequence</source>
         <translation>Заменить на комплементарную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="363"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="353"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="534"/>
         <source>Analyze</source>
         <translation>Анализ</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="554"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="544"/>
         <source>Add</source>
         <translation>Аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="560"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="550"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="566"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="556"/>
         <source>Align</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="572"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="562"/>
         <source>Remove</source>
         <translation>Удаление</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="585"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="575"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1095"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1084"/>
         <source>Show codon table</source>
-        <translation type="unfinished"></translation>
+        <translation>Показать таблицу кодонов</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1346"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="1335"/>
         <source>No sequence in focus</source>
         <translation>No sequence in focus</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="168"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="158"/>
         <source>Reverse sequence</source>
         <translation>Заменить на обратную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="816"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="806"/>
         <source>Select sequence to associate annotations with:</source>
         <translation>Установить связь аннотаций с последовательностью:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="834"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="824"/>
         <source>No sequence object found for annotations</source>
         <translation>Не найдена связанная с аннотациями последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="764"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="754"/>
         <source>Disable '%1' highlighting</source>
         <translation>Не использовать подсветку для '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="766"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="756"/>
         <source>Enable '%1' highlighting</source>
         <translation>Задействовать подсветку для '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="903"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAView.cpp" line="893"/>
         <source>Go To</source>
         <translation>Выбор позиции</translation>
     </message>
@@ -2682,7 +2683,7 @@ Double-click to collapse the branch</source>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="124"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="265"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="269"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
@@ -2693,19 +2694,19 @@ Double-click to collapse the branch</source>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="192"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier text</source>
         <translation>Копировать значение квалификатора</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="195"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1141"/>
         <source>Copy qualifier URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="198"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1142"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1146"/>
         <source>Toggle column</source>
         <translation>Переключить столбец</translation>
     </message>
@@ -2726,35 +2727,35 @@ Double-click to collapse the branch</source>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="215"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="798"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="802"/>
         <source>Copy column text</source>
         <translation>Копировать значение</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="218"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="812"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
         <source>copy column URL</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="221"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="399"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="446"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="403"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="450"/>
         <source>Annotation</source>
-        <translation type="unfinished">Аннотация</translation>
+        <translation>Аннотация</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1773"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1777"/>
         <source>Edit Group</source>
         <translation>Редактировать группу</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1824"/>
         <source>Edit Annotation</source>
         <translation>Редактирование аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1820"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1824"/>
         <source>Edit</source>
         <translation>Редактировать</translation>
     </message>
@@ -2774,88 +2775,68 @@ Double-click to collapse the branch</source>
         <translation>Удалить выбранные аннотации и квалификаторы</translation>
     </message>
     <message>
-        <source>Rename item</source>
-        <translation type="vanished">Переименовать элемент</translation>
-    </message>
-    <message>
-        <source>Edit qualifier</source>
-        <translation type="vanished">Редактировать квалификатор</translation>
-    </message>
-    <message>
-        <source>View qualifier</source>
-        <translation type="vanished">Просмотреть квалификатор</translation>
-    </message>
-    <message>
         <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="228"/>
         <source>Qualifier...</source>
         <translation>Добавить квалификатор...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="235"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="239"/>
         <source>Make auto-annotations persistent</source>
         <translation>Сделать автоаннотации постоянными</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="393"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="397"/>
         <source>Group</source>
-        <translation type="unfinished"></translation>
+        <translation>Группа</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="396"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="400"/>
         <source>Qualifier</source>
-        <translation type="unfinished">Квалификатор</translation>
+        <translation>Квалификатор</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="568"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="572"/>
         <source>At least one dragged annotation is out of the sequence range!</source>
         <translation>Как минимум одна из аннотаций вне диапазона последовательности!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="804"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="808"/>
         <source>Copy column '%1' text</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="807"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="811"/>
         <source>Copy '%1' annotation location</source>
         <translation>Копировать позицию аннотации "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="816"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="820"/>
         <source>Copy column '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="838"/>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="842"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1147"/>
         <source>Hide '%1' column</source>
         <translation>Скрыть столбец "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1133"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
         <source>Copy qualifier '%1' value</source>
         <translation>Копировать значение "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1137"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1141"/>
         <source>Copy qualifier '%1' URL</source>
         <translation>Копировать ссылку "%1"</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1143"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1147"/>
         <source>Add '%1' column</source>
         <translation>Добавить столбец "%1"</translation>
     </message>
     <message>
-        <source>Rename Group</source>
-        <translation type="vanished">Переименовать группу</translation>
-    </message>
-    <message>
-        <source>Rename Qualifier</source>
-        <translation type="vanished">Переименовать квалификатор</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1970"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="1974"/>
         <source>Create Permanent Annotation</source>
         <translation>Создать постоянную аннотацию</translation>
     </message>
@@ -2863,152 +2844,152 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyBrowser</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="208"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="209"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="152"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="153"/>
         <source>Failed to open assembly browser for %1, assembly %2: model length should be > 0</source>
         <translation>Failed to open assembly browser for %1, assembly %2: model length should be > 0</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="142"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="143"/>
         <source>Error opening open assembly browser for %1, assembly %2</source>
         <translation>Error opening open assembly browser for %1, assembly %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="219"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="220"/>
         <source>Internal error: only object with document can be added to browser</source>
         <translation>Internal error: only object with document can be added to browser</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="223"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
         <source>Internal error: broken sequence object</source>
         <translation>Internal error: broken sequence object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="224"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="225"/>
         <source>Internal error: empty document format</source>
         <translation>Internal error: empty document format</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="231"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="232"/>
         <source>The lengths of the sequence and assembly are different.</source>
         <translation>Длины последовательноси и сборки не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="234"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="235"/>
         <source>The sequence and assembly names are different.</source>
         <translation>Имена последовательности и сборки не совпадают.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="252"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="253"/>
         <source>It seems that sequence "%1", set as reference to assembly "%2", does not match it.</source>
         <translation>Последовательность "%1", установленная в качестве референсной для сборки "%2", не соответствует ей.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="258"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="259"/>
         <source>Internal error: database is busy</source>
-        <translation type="unfinished"></translation>
+        <translation>Internal error: database is busy</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="293"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="294"/>
         <source>Internal error: broken variant track object</source>
         <translation>Internal error: broken variant track object</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="299"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="300"/>
         <source>Only sequence or variant track  objects can be added to assembly browser</source>
         <translation>Только последовательности или вариации могут быть добавлены в браузер сборок</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="308"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="309"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="309"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="310"/>
         <source>This action requires changing the assembly object that is locked for editing</source>
         <translation>Это действие требует изменения объекта сборки, который заблокирован для редактирования</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="656"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="657"/>
         <source>Zoom in</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="659"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="660"/>
         <source>Zoom out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="662"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="663"/>
         <source>Linear</source>
         <translation>Линейная</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="664"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="665"/>
         <source>Logarithmic</source>
         <translation>Логарифмическая</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="670"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="671"/>
         <source>Show coordinates on ruler</source>
         <translation>Показывать координаты на шкале</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="674"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="675"/>
         <source>Show coverage under ruler cursor</source>
         <translation>Показывать покрытие под шкалой курсора</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="678"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="679"/>
         <source>Show information about read under cursor in pop-up hint</source>
         <translation>Показывать информацию о риде в сплывающей подсказке под курсором</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="683"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="684"/>
         <source>Export as image</source>
         <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="686"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="687"/>
         <source>Export assembly to SAM format</source>
         <translation>Экспортировать сборку в формат SAM</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="689"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="690"/>
         <source>Set reference</source>
         <translation>Выбрать референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="693"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="694"/>
         <source>Export assembly region</source>
         <translation>Экспорт региона сборки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1010"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1012"/>
         <source>Open file with a sequence</source>
         <translation>Открыть файл с последовательностью</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1021"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1023"/>
         <source>An error occurred while setting reference to "%1" assembly. The selected file "%2" does not contain sequences.</source>
         <translation>Возникла ошибка при попытке установить референсную последовтельность для сборки "%1". Выбранный файл "%2" не содержит последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1023"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1025"/>
         <source>An error occurred while setting reference to "%1" assembly. There are more than one sequence in file "%2". Please select the required sequence object in the Project View and click "Set reference" again.</source>
         <translation>Возникла ошибка при попытке установить референсную последовтельность для сборки "%1". В файле "%2" содержится более одной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1084"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1086"/>
         <source>An error occurred while setting reference to "%1". You have more than one sequence object selected in the Project View. Please select only one object and try again.</source>
         <translation>Возникла ошибка при попытке установить референсную последовтельность для сборки "%1". В проекте выделено более одной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1083"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1085"/>
         <source>Choose Reference Sequence</source>
         <translation>Выбрать референсную последовательность</translation>
     </message>
@@ -3029,7 +3010,7 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyBrowserUi</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1204"/>
+        <location filename="../src/ov_assembly/AssemblyBrowser.cpp" line="1206"/>
         <source>Assembly has no mapped reads. Nothing to visualize.</source>
         <translation>Сборка не имеет ридов.</translation>
     </message>
@@ -3037,22 +3018,22 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyCellRendererFactoryRegistry</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="535"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="552"/>
         <source>Nucleotide</source>
         <translation>Нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="537"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="554"/>
         <source>Difference</source>
         <translation>Различия</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="539"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="556"/>
         <source>Strand direction</source>
         <translation>Прямое направление</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="541"/>
+        <location filename="../src/ov_assembly/AssemblyCellRenderer.cpp" line="558"/>
         <source>Paired reads</source>
         <translation>Парные риды</translation>
     </message>
@@ -3124,12 +3105,12 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyCoverageGraph</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="63"/>
+        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="64"/>
         <source>Coverage calculation canceled</source>
         <translation>Вычисление покрытия отменено</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="63"/>
+        <location filename="../src/ov_assembly/AssemblyCoverageGraph.cpp" line="64"/>
         <source>Calculating coverage...</source>
         <translation>Вычисление покрытия...</translation>
     </message>
@@ -3180,59 +3161,59 @@ Double-click to collapse the branch</source>
 <context>
     <name>U2::AssemblyModel</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="281"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="302"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="275"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="296"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="284"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="278"/>
         <source>No reference document found in the project</source>
         <translation>No reference document found in the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="287"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="281"/>
         <source>No reference object found in the project</source>
         <translation>No reference object found in the project</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="320"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="650"/>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="657"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="314"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="644"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="321"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="315"/>
         <source>A file '%1' with the reference sequence '%2' not found!
 Try to open another file with a reference sequence and associate it with the assembly.</source>
         <translation>Файл '%1' с референсной последовательностью '%2' не найден!
 Попробуйте открыть другой файл с референсной последовательностью и ассоциировать его со сборкой.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="338"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="332"/>
         <source>Unexected object is set as reference</source>
         <translation>Unexected object is set as reference</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="373"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="367"/>
         <source>Errors</source>
         <translation>Ошибки</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="374"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="368"/>
         <source>The '%1' sequence is associated with the '%2' assembly?
 Do you want to remove the association?</source>
         <translation>Последовательность '%1' ассоциирована со сборкой '%2'?
 Вы хотите удалить ассоциацию?</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="494"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="488"/>
         <source>Reference document is not ready!</source>
         <translation>Reference document is not ready!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="651"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="645"/>
         <source>This action requires changing file:
 %1
 You don't have enough rights to change file</source>
@@ -3241,11 +3222,17 @@ You don't have enough rights to change file</source>
 У вас недостаточно прав для его изменения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="658"/>
+        <location filename="../src/ov_assembly/AssemblyModel.cpp" line="652"/>
         <source>Database is opened in read-only mode. It might happen because file 
 %1
  is read only. If not try to reload file</source>
-        <translation>База данных открыта только для чтения. Возможно, из-за того, что файл 
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Database is opened in read-only mode. It might happen because file
+%1
+ is read only. If not try to reload file</source>
+        <translation type="vanished">База данных открыта только для чтения. Возможно, из-за того, что файл
 %1
 открыт только для чтения. Если нет, то попробуйте перезагрузить файл</translation>
     </message>
@@ -3268,7 +3255,7 @@ You don't have enough rights to change file</source>
     <message>
         <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="94"/>
         <source><center><b>Assembly database is busy</b><br>Some task occupied database.<br> When the database is free all functionality of Assembly Browser will be available again.</center></source>
-        <translation type="unfinished"></translation>
+        <translation><center><b>Assembly database is busy</b><br>Some task occupied database.<br> When the database is free all functionality of Assembly Browser will be available again.</center></translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="114"/>
@@ -3301,57 +3288,57 @@ You don't have enough rights to change file</source>
         <translation>Оптимизировать отображение в процессе перемещения</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="176"/>
         <source>Reads shadowing</source>
         <translation>Центрирование ридов в позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="180"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="178"/>
         <source>Disabled</source>
         <translation>Запрещено</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="182"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="180"/>
         <source>Free</source>
         <translation>Свободное перемещение</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="184"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="182"/>
         <source>Centered</source>
         <translation>В центре</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="192"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="190"/>
         <source>Jump to locked base</source>
         <translation>Вернуться к сохраненной позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="358"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="357"/>
         <source><a href="%1" style="color: %2">Zoom in to see the reads</a></source>
         <translation><a href="%1" style="color: %2">Увеличить для просмотра ридов</a></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="362"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="361"/>
         <source>Please wait until overview rendering is finished, or <a href="%1">zoom in to see the reads</a></source>
         <translation>Пожалуйста подождите пока завершится вычисление отображаемого участка, или <a href="%1">увеличьте, чтобы увидеть риды</a></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="364"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="363"/>
         <source> or choose one of the well-covered regions:<br><br></source>
         <translation> или выберите один из хорошо покрытых регионов:<br><br></translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="953"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="952"/>
         <source>Export visible reads as sequence.</source>
-        <translation type="unfinished"></translation>
+        <translation>Export visible reads as sequence.</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="954"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="953"/>
         <source>There are no reads in the current area. Nothing to export!</source>
-        <translation type="unfinished"></translation>
+        <translation>There are no reads in the current area. Nothing to export!</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="960"/>
+        <location filename="../src/ov_assembly/AssemblyReadsArea.cpp" line="959"/>
         <source>Locked to base</source>
         <translation>Сохранить позицию</translation>
     </message>
@@ -3359,17 +3346,17 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::AssemblyReferenceArea</name>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="173"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="174"/>
         <source>Reference sequence</source>
         <translation>Референсная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="176"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="177"/>
         <source>Unassociate</source>
         <translation>Убрать ассоциацию</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="199"/>
+        <location filename="../src/ov_assembly/AssemblyReferenceArea.cpp" line="200"/>
         <source>Reference is loading...</source>
         <translation>Загрузка референсной последовательности...</translation>
     </message>
@@ -3482,8 +3469,8 @@ You don't have enough rights to change file</source>
     <name>U2::AutoAnnotationsADVAction</name>
     <message>
         <location filename="../src/ov_sequence/AutoAnnotationUtils.cpp" line="46"/>
-        <source>Automatic Annotations Highlighting</source>
-        <translation>Автомаркировка аннотаций</translation>
+        <source>Automatic annotations highlighting</source>
+        <translation>Автоматическая подсветка аннотаций</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/AutoAnnotationUtils.cpp" line="58"/>
@@ -3499,17 +3486,17 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::BranchSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="44"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="40"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="43"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="39"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="77"/>
+        <location filename="../src/phyltree/BranchSettingsDialog.cpp" line="69"/>
         <source>Select Color</source>
         <translation>Выбрать цвет</translation>
     </message>
@@ -3538,28 +3525,28 @@ You don't have enough rights to change file</source>
         <translation>Установить имя индекс файла</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="185"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="190"/>
         <source>DNA Assembly</source>
         <translation>Сборка контигов</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="186"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="191"/>
         <source>Do you want to select it now?</source>
         <translation>Хотите выделить это?</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="212"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="215"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="217"/>
         <source>Build Index</source>
         <translation>Построить индекс</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="210"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="215"/>
         <source>Reference sequence url is not set!</source>
         <translation>Путь к референсной последовательности не указан!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="212"/>
+        <location filename="../src/util_dna_assembly/BuildIndexDialog.cpp" line="217"/>
         <source>Index file name is not set!</source>
         <translation>Имя индекс файла не установлено!</translation>
     </message>
@@ -3567,13 +3554,9 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CalculateCoveragePerBaseOnRegionTask</name>
     <message>
-        <source>Calculate coverage per base for assembly %1 on region (%2, %3)</source>
-        <translation type="vanished">Calculate coverage per base for assembly %1 on region (%2, %3)</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="35"/>
         <source>Calculate coverage per base for assembly on region (%1, %2)</source>
-        <translation type="unfinished"></translation>
+        <translation>Calculate coverage per base for assembly on region (%1, %2)</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="41"/>
@@ -3599,13 +3582,9 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CalculateCoveragePerBaseTask</name>
     <message>
-        <source>Calculate coverage per base for assembly %1</source>
-        <translation type="vanished">Calculate coverage per base for assembly %1</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="136"/>
         <source>Calculate coverage per base for assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Calculate coverage per base for assembly</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="141"/>
@@ -3618,22 +3597,6 @@ You don't have enough rights to change file</source>
         <translation>Invalid assembly ID</translation>
     </message>
     <message>
-        <source>Assembly DBI is NULL</source>
-        <translation type="vanished">Assembly DBI is NULL</translation>
-    </message>
-    <message>
-        <source>Attribute DBI is NULL</source>
-        <translation type="vanished">Attribute DBI is NULL</translation>
-    </message>
-    <message>
-        <source>Can't get the assembly length: attribute is missing</source>
-        <translation type="vanished">Can't get the assembly length: attribute is missing</translation>
-    </message>
-    <message>
-        <source>Assembly has zero length</source>
-        <translation type="vanished">Assembly has zero length</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="167"/>
         <source>An unexpected subtask</source>
         <translation>An unexpected subtask</translation>
@@ -3650,17 +3613,17 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CodonTableView</name>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="80"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="56"/>
         <source>1st base</source>
         <translation>Первое основание</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="81"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="57"/>
         <source>2nd base</source>
         <translation>Второе основание</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="82"/>
+        <location filename="../src/ov_sequence/codon_table/CodonTable.cpp" line="58"/>
         <source>3rd base</source>
         <translation>Третье основание</translation>
     </message>
@@ -3681,7 +3644,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::ColorSchemaSettingsPageController</name>
     <message>
-        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="99"/>
+        <location filename="../src/ov_msa/ColorSchemaSettingsController.cpp" line="98"/>
         <source>Alignment Color Scheme</source>
         <translation>Цветовая схема</translation>
     </message>
@@ -3690,8 +3653,8 @@ You don't have enough rights to change file</source>
     <name>U2::ColorSchemaSettingsPageWidget</name>
     <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="370"/>
-        <source>Choose Directory</source>
-        <translation>Выбрать директорию</translation>
+        <source>Choose Folder</source>
+        <translation>Выбрать папку</translation>
     </message>
 </context>
 <context>
@@ -3775,13 +3738,9 @@ You don't have enough rights to change file</source>
         <translation>Нуклеотиды</translation>
     </message>
     <message>
-        <source>Ok</source>
-        <translation type="vanished">ОК</translation>
-    </message>
-    <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="196"/>
         <source>OK</source>
-        <translation type="unfinished">OK</translation>
+        <translation>OK</translation>
     </message>
     <message>
         <location filename="../src/ov_msa/ColorSchemaDialogController.cpp" line="223"/>
@@ -3812,7 +3771,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateDistanceMatrixTask</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="161"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="169"/>
         <source>Generate distance matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
@@ -3830,29 +3789,29 @@ You don't have enough rights to change file</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="199"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="180"/>
         <source>Choose file name</source>
         <translation>Имя файла</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="168"/>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="182"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="128"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="149"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="163"/>
         <source>Warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="147"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="128"/>
         <source>Please, input the file name.</source>
         <translation>Пожалуйста, введите имя файла.</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="137"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="156"/>
+        <location filename="../src/phyltree/CreatePhyTreeDialogController.cpp" line="137"/>
         <source>Please, change the output file.</source>
         <translation>Измените выходной файл.</translation>
     </message>
@@ -3868,33 +3827,33 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateRulerDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="54"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="38"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="55"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="39"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="63"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="47"/>
         <source>New ruler</source>
         <translation>Новая шкала</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="97"/>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="102"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="81"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="86"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="97"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="81"/>
         <source>Ruler name is empty!</source>
         <translation>Необходимо указать название шкалы!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="102"/>
+        <location filename="../src/ov_sequence/CreateRulerDialogController.cpp" line="86"/>
         <source>Ruler with the same name is already exists!</source>
         <translation>Шкала с таким названием уже есть!</translation>
     </message>
@@ -3902,7 +3861,7 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateSubalignmentAndOpenViewTask</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="235"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="259"/>
         <source>Create sub-alignment and open view: %1</source>
         <translation>Создать выравнивание и открыть: %1</translation>
     </message>
@@ -3910,52 +3869,48 @@ You don't have enough rights to change file</source>
 <context>
     <name>U2::CreateSubalignmentDialogController</name>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="52"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
         <source>Extract</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="53"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="54"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="169"/>
-        <source>Directory to save does not exist</source>
-        <translation>Директория для сохранения не существует</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="193"/>
+        <source>Folder to save does not exist</source>
+        <translation>Папка для сохранения не существует</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="173"/>
-        <source>No write permission to '%1' directory</source>
-        <translation>Недостаточно прав для записи в директорию '%1'</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="197"/>
+        <source>No write permission to '%1' folder</source>
+        <translation>Недостаточно прав для записи в папку '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="177"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="201"/>
         <source>No path specified</source>
         <translation>Не задан путь</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="181"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="205"/>
         <source>Filename to save is empty</source>
         <translation>Имя сохраняемого файла пусто</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="185"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="209"/>
         <source>No write permission to '%1' file</source>
         <translation>Недостаточно прав для записи в файл '%1'</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="195"/>
-        <source>Start position must be less than end position!</source>
-        <translation>Начальная позиция должна быть меньше конечной позиции!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="201"/>
-        <source>Entered region not contained in current sequence</source>
-        <translation>Указанный регион не содержит последовательности</translation>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="219"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="225"/>
+        <source>Illegal region!</source>
+        <translation>Неверный регион!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="208"/>
+        <location filename="../src/ov_msa/CreateSubalignmentDialogController.cpp" line="232"/>
         <source>You must select at least one sequence</source>
         <translation>Выберите хотябы одну последовательность</translation>
     </message>
@@ -4023,11 +3978,7 @@ You don't have enough rights to change file</source>
     <message>
         <location filename="../src/ov_sequence/DetView.cpp" line="67"/>
         <source>Show/hide translations</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Show amino translations</source>
-        <translation type="vanished">Показывать транслированную последовательность</translation>
+        <translation>Показать/скрыть трансляции</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/DetView.cpp" line="71"/>
@@ -4162,75 +4113,60 @@ Do you want to convert the files and run the aligner?</source>
 <context>
     <name>U2::DnaAssemblySupport</name>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="60"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="67"/>
         <source>Convert UGENE assembly database to SAM...</source>
         <translation>Преобразование данных UGENE в формат SAM...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="66"/>
         <source>Genome de novo assembly...</source>
-        <translation>Сборка генома de novo...</translation>
+        <translation type="vanished">Сборка генома de novo...</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="73"/>
+        <source>Reads de novo assembly (with SPAdes)...</source>
+        <translation>Сборка ридов de novo (при помощи SPAdes)...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="72"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="79"/>
         <source>Map reads to reference...</source>
-        <translation>Выравнивание прочтений на референс...</translation>
+        <translation>Выравнивание ридов на референс...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="78"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="85"/>
         <source>Build index for reads mapping...</source>
         <translation>Построение индекса для выравнивания коротких прочтений...</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="89"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="142"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="95"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="148"/>
         <source>DNA Assembly</source>
         <translation>Сборка контигов</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="90"/>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="143"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="96"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="149"/>
         <source>There are no algorithms for DNA assembly available.
 Please, check your plugin list.</source>
         <translation>Нет доступных алгоритмов для сборки контигов. Проверьте список подключенных модулей.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="117"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="123"/>
         <source>Genome Assembly</source>
         <translation>Геномная сборка</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="118"/>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="124"/>
         <source>There are no algorithms for genome assembly available.
 Please, check external tools in the settings.</source>
         <translation>Нет доступных алгоритмов для сборки контигов. Проверьте список подключенных модулей в настройках.</translation>
     </message>
 </context>
 <context>
-    <name>U2::EditAnnotationDialogController</name>
+    <name>U2::DnaAssemblyTaskWithConversions</name>
     <message>
-        <source>Location is empty!</source>
-        <translation type="vanished">Регион пуст!</translation>
-    </message>
-    <message>
-        <source>Invalid location!</source>
-        <translation type="vanished">Неверная позиция!</translation>
-    </message>
-    <message>
-        <source>Error!</source>
-        <translation type="vanished">Ошибка!</translation>
-    </message>
-    <message>
-        <source>Annotation location empty or invalid!</source>
-        <translation type="vanished">Расположение аннотации пусто или некорректно!</translation>
-    </message>
-    <message>
-        <source>Wrong annotation name!</source>
-        <translation type="vanished">Нелегальные символы в имени аннотации. Допустимы только цифры, буквы и подчёркивания!</translation>
-    </message>
-    <message>
-        <source>New annotation locations is out of sequence bounds!</source>
-        <translation type="vanished">Набор (список) аннотированных регионов биологической последовательности!</translation>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="414"/>
+        <source>Cannot remove temporary file %1</source>
+        <translation>Cannot remove temporary file %1</translation>
     </message>
 </context>
 <context>
@@ -4402,17 +4338,9 @@ Please, check external tools in the settings.</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="112"/>
+        <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="113"/>
         <source>Export coverage</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Compressed </source>
-        <translation type="vanished">Сжат </translation>
-    </message>
-    <message>
-        <source>Export to...</source>
-        <translation type="vanished">Экспортировать в...</translation>
+        <translation>Экспортировать покрытие</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageDialog.cpp" line="99"/>
@@ -4441,13 +4369,9 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportCoverageTask</name>
     <message>
-        <source>Export coverage per base for %1</source>
-        <translation type="vanished">Экспорт покрытия по основанию для %1</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="62"/>
         <source>Export assembly coverage per base</source>
-        <translation type="unfinished"></translation>
+        <translation>Export assembly coverage per base</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="70"/>
@@ -4465,10 +4389,6 @@ Please, check external tools in the settings.</source>
         <translation></translation>
     </message>
     <message>
-        <source>Assembly DBI is NULL</source>
-        <translation type="vanished">Assembly DBI is NULL</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="84"/>
         <source>Can't write the compressed file: IOAdapterFactory is NULL</source>
         <translation>Can't write the compressed file: IOAdapterFactory is NULL</translation>
@@ -4487,64 +4407,45 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportHighligtingDialogController</name>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="49"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="50"/>
         <source>Export</source>
-        <translation type="unfinished">Экспорт</translation>
+        <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="50"/>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="51"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="96"/>
-        <source>Warning</source>
-        <translation type="unfinished">Внимание</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="96"/>
-        <source>Export to file URL is empty!</source>
-        <translation type="unfinished">Путь для экспорта пуст!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="123"/>
-        <source>Select file to save...</source>
-        <translation type="unfinished">Сохранение файла...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::ExportHighligtningDialogController</name>
-    <message>
-        <source>Export</source>
-        <translation type="vanished">Экспорт</translation>
-    </message>
-    <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="97"/>
         <source>Warning</source>
-        <translation type="vanished">Внимание</translation>
+        <translation>Внимание</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="97"/>
         <source>Export to file URL is empty!</source>
-        <translation type="vanished">Путь для экспорта пуст!</translation>
+        <translation>Путь для экспорта пуст!</translation>
     </message>
     <message>
+        <location filename="../src/ov_msa/ExportHighlightedDialogController.cpp" line="124"/>
         <source>Select file to save...</source>
-        <translation type="vanished">Сохранение файла...</translation>
+        <translation>Сохранить файл...</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportHighligtningTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3027"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1018"/>
         <source>Export highlighting</source>
         <translation>Экспорт подсвеченного</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1046"/>
         <source>Export highligtning finished successfully</source>
         <translation>Export highligtning finished successfully</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="3055"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1046"/>
         <source>Result file:</source>
         <translation>Выходной файл:</translation>
     </message>
@@ -4552,9 +4453,16 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExportMSAConsensusTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="218"/>
         <source>Export consensus to MSA</source>
-        <translation>Экспортировать консенсус в MSA</translation>
+        <translation type="vanished">Экспортировать консенсус в MSA</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExportMaConsensusTask</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="274"/>
+        <source>Export consensus</source>
+        <translation>Экспорт консенсуса</translation>
     </message>
 </context>
 <context>
@@ -4596,13 +4504,9 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExtractAssemblyRegionDialog</name>
     <message>
-        <source>Export consensus</source>
-        <translation type="vanished">Экспорт консенсуса</translation>
-    </message>
-    <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="46"/>
         <source>Export</source>
-        <translation type="unfinished">Экспорт</translation>
+        <translation>Экспорт</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="47"/>
@@ -4618,7 +4522,7 @@ Please, check external tools in the settings.</source>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="87"/>
         <source>Export Assembly Region</source>
-        <translation type="unfinished">Экспорт региона сборки</translation>
+        <translation>Экспорт региона сборки</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExtractAssemblyRegionDialog.cpp" line="110"/>
@@ -4647,17 +4551,44 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::ExtractConsensusTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="274"/>
         <source>Export consensus to MSA</source>
-        <translation>Экспортировать консенсус в MSA</translation>
+        <translation type="vanished">Экспортировать консенсус в MSA</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="293"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="331"/>
+        <source>Extract consensus</source>
+        <translation>Извлечь консенсус</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="351"/>
         <source>No sequences in alignment</source>
         <translation>No sequences in alignment</translation>
     </message>
 </context>
 <context>
+    <name>U2::FilterUnpairedReadsTask</name>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="272"/>
+        <source>Filter unpaired reads task</source>
+        <translation>Filter unpaired reads task</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="281"/>
+        <source>Filtering unpaired reads is launched on not-paired data</source>
+        <translation>Filtering unpaired reads is launched on not-paired data</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="292"/>
+        <source>The count of upstream files is not equal to the count of downstream files</source>
+        <translation>The count of upstream files is not equal to the count of downstream files</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/DnaAssemblyUtils.cpp" line="326"/>
+        <source>%1 read pairs were mapped, %2 reads without a pair from files "%3" and "%4" were skipped.</source>
+        <translation>%1 read pairs were mapped, %2 reads without a pair from files "%3" and "%4" were skipped.</translation>
+    </message>
+</context>
+<context>
     <name>U2::FindPatternListTask</name>
     <message>
         <location filename="../src/ov_sequence/find_pattern/FindPatternTask.cpp" line="122"/>
@@ -4686,209 +4617,209 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::FindPatternWidget</name>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="326"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="322"/>
         <source>Exact</source>
         <translation>Точный</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="328"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="324"/>
         <source>InsDel</source>
         <translation>Инсерции/делеции</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="329"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="325"/>
         <source>Substitute</source>
         <translation>Замены</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="331"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="327"/>
         <source>Regular expression</source>
         <translation>Регулярные выражения</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="335"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="331"/>
         <source>Should match</source>
         <translation>Точное совпадение</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="412"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="408"/>
         <source>Search with ambiguous bases</source>
         <translation>Поиск с неоднозначными базами</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="360"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="356"/>
         <source>Both</source>
         <translation>Оба</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="361"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="357"/>
         <source>Direct</source>
         <translation>Прямое</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="362"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="358"/>
         <source>Reverse-coml.</source>
         <translation>Обратно-компл.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="368"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="364"/>
         <source>Sequence</source>
         <translation>Последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="369"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="365"/>
         <source>Translation</source>
         <translation>Трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="375"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="371"/>
         <source>Whole sequence</source>
         <translation>Вся последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="376"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="372"/>
         <source>Custom region</source>
         <translation>Указанный регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="377"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="373"/>
         <source>Selected region</source>
         <translation>Выделенный регион</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="435"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="431"/>
         <source>Results no longer than:</source>
         <translation>Результаты не длиннее чем:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="705"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="703"/>
         <source>The value is longer than the search region. Please input a shorter value or select another region!</source>
         <translation>Значение длиннее чем регион поиска. Ввведите более короткое значение или выберите другой регион!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="707"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="714"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="722"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="729"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="735"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="741"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="745"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="748"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="754"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="758"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="761"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="769"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="777"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="783"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="791"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="705"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="712"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="720"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="727"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="733"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="739"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="743"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="746"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="752"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="756"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="759"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="767"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="775"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="781"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="789"/>
         <source><b><font color=%1>%2</font><br></br></b></source>
-        <translation type="unfinished"></translation>
+        <translation><b><font color=%1>%2</font><br></br></b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="712"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="710"/>
         <source>Warning: input value contains characters that do not match the active alphabet!</source>
         <translation>Предупреждение: входное значение содержит символы, которые не входят в текущий алфавит!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="720"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="718"/>
         <source>Warning: file contains patterns that do not match the active alphabet! Those patterns were ignored </source>
         <translation>Предупреждение: файл содержит паттерны, которые не совпадают с текущим алфавитом! Эти паттерны были проигнорированы </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="727"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="725"/>
         <source>Warning: file contains patterns that longer than the search region! Those patterns were ignored. Please input a shorter value or select another region! </source>
         <translation>Предупреждение: файл содержит паттерны, которые длиннее чем регион поиска! Эти паттерны были проигнорированы. Введите более короткое значение или выберите другой регион! </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="744"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="757"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="767"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="775"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="742"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="755"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="765"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="773"/>
         <source><b><font color=%1>%2</font></b></source>
-        <translation type="unfinished"></translation>
+        <translation><b><font color=%1>%2</font></b></translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="790"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="788"/>
         <source>Warning: current sequence is too long to search in.</source>
         <translation>Предупреждение: текущая последовательность слишком длинная для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1450"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1463"/>
         <source>Warning: can not get valid pattern name, annotation will be named 'misc_feature'</source>
         <translation>Warning: can not get valid pattern name, annotation will be named 'misc_feature'</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1588"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1601"/>
         <source>Results:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="743"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="756"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="741"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="754"/>
         <source>Reason: </source>
         <translation>Причина: </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="734"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="732"/>
         <source>Info: please input at least one sequence pattern to search for. Use %1 to input multiple patterns. Alternatively, load patterns from a FASTA file.</source>
         <translation>Информация: добавьте как минимум одну подстроку для поиска. Используйте %1, чтобы ввести несколько подстрок. Также вы можете загрузить подстроки из FASTA файла.
         </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="747"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="745"/>
         <source> Please input valid annotation names. </source>
         <translation>Введите корректные имена аннотаций. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="753"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="751"/>
         <source>Warning: annotation names are invalid. </source>
         <translation>Внимание: имена аннотаций некорректны. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="760"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="758"/>
         <source> It will be automatically changed to acceptable name if 'Get annotations' button is pressed. </source>
         <translation> Они будут автоматически изменены на доступные имена после того как кнопка 'Создать аннотации' будет нажата. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="766"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="774"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="764"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="772"/>
         <source>Warning: there is no pattern to search. </source>
         <translation>Предупреждение: нет паттернов для поиска. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="768"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="776"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="766"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="774"/>
         <source> Please input a valid pattern or choose a file with patterns </source>
         <translation>Введите паттерн или выберите файл с паттернами </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="782"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="780"/>
         <source>Warning: invalid regexp. </source>
         <translation>Предупреждение: некорректное регулярное выражение. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1105"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1109"/>
         <source>Select file to open...</source>
         <translation>Выберите файл...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1157"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1165"/>
         <source>Unable to search on the reverse-complement strand, searching on the direct strand only!</source>
         <translation>Невозможно выполнить поиск в обратно-комплементарной цепи, поиск только в прямой цепи!</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="297"/>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1502"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="293"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1515"/>
         <source>Results: %1/%2</source>
         <translation>Результаты: %1/%2</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="740"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="738"/>
         <source>Warning: annotation name or annotation group name are invalid. </source>
         <translation>Внимание: имя аннотации или имя группы аннотаций некорректно. </translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1305"/>
+        <location filename="../src/ov_sequence/find_pattern/FindPatternWidget.cpp" line="1318"/>
         <source>Sequence in focus is NULL</source>
         <translation>Sequence in focus is NULL</translation>
     </message>
@@ -4896,7 +4827,7 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::FindQualifierTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2331"/>
+        <location filename="../src/ov_sequence/AnnotationsTreeView.cpp" line="2335"/>
         <source>Searching for a qualifier</source>
         <translation>Поиск квалификатора</translation>
     </message>
@@ -4934,38 +4865,38 @@ Please, check external tools in the settings.</source>
     <message>
         <location filename="../src/ov_sequence/ADVGraphModel.cpp" line="442"/>
         <source>Graph is not available. Try to change calculation settings.</source>
-        <translation type="unfinished"></translation>
+        <translation>График недоступен. Измените настройки вычисления.</translation>
     </message>
 </context>
 <context>
     <name>U2::GSequenceGraphView</name>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="68"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="71"/>
         <source>Select all extremum points...</source>
         <translation>Выбрать все граничные значения...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="58"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="61"/>
         <source>Save cutoffs as annotations...</source>
         <translation>Сохранить обрезанные участки как аннотации...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="53"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="56"/>
         <source>Graph settings...</source>
         <translation>Настройки графика...</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="63"/>
-        <source>Delete all labels...</source>
-        <translation>Удалить все надписи...</translation>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="66"/>
+        <source>Delete all labels</source>
+        <translation>Удалить все надписи</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="222"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="225"/>
         <source>Graph</source>
         <translation>График</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="352"/>
+        <location filename="../src/ov_sequence/GSequenceGraphView.cpp" line="356"/>
         <source>%1 [%2, %3], Window: %4, Step %5</source>
         <translation>%1 [%2, %3], окно: %4, шаг: %5</translation>
     </message>
@@ -4991,69 +4922,81 @@ Please, check external tools in the settings.</source>
 <context>
     <name>U2::GenomeAssemblyDialog</name>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="68"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="61"/>
         <source>Start</source>
         <translation>Собрать</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="69"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="62"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="185"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="188"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="178"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="181"/>
         <source>Add short reads</source>
         <translation>Добавить выравниваемые последовательности</translation>
     </message>
     <message>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="196"/>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="203"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="210"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="216"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="209"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="215"/>
         <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="222"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="229"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="258"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="264"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="273"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="251"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="257"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="266"/>
         <source>Genome Assembly</source>
         <translation>Геномная сборка</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="211"/>
-        <source>Result assembly directory is not set!</source>
-        <translation>Директория для сохранения не указана!</translation>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="204"/>
+        <source>Result assembly folder is not set!</source>
+        <translation>Папка для сохранения не указана!</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="217"/>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="230"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="210"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="223"/>
         <source>No reads. Please, add file(s) with short reads.</source>
         <translation>Нет ридов. Добавьте файл(ы) с короткими ридами.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="223"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="216"/>
         <source>In the paired-end mode a number of lift and right reads must be equal.</source>
         <translation>В paired-end моде число левых и правых ридов должно совпадать.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="259"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="252"/>
         <source>Unknown file format of %1.</source>
         <translation>Неизвестный формат файла %1.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="265"/>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="258"/>
         <source>File format of %1 is %2. Supported file formats of reads: %3.</source>
         <translation>Формат %1 файла %2. Поддерживаемые форматы для пидов: %3.</translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="274"/>
-        <source>Unable to create output directory for result assembly.
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="267"/>
+        <source>Unable to create output folder for result assembly.
 Directory Path: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="339"/>
-        <source>Select output directory</source>
-        <translation>Выберите выходную директорию</translation>
+        <source>Unable to create output folder for result assembly.
+Directory Path: %1</source>
+        <translation type="obsolete">Unable to create output folder for result assembly.
+Directory Path: %1</translation>
+    </message>
+    <message>
+        <source>Unable to create output folder for result assembly.
+Folder Path: %1</source>
+        <translation type="vanished">Unable to create output folder for result assembly.
+Folder Path: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/util_dna_assembly/GenomeAssemblyDialog.cpp" line="332"/>
+        <source>Select output folder</source>
+        <translation>Выберите выходную папку</translation>
     </message>
 </context>
 <context>
@@ -5061,22 +5004,22 @@ Directory Path: %1</source>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="194"/>
         <source>Attribute DBI is NULL</source>
-        <translation type="unfinished">Attribute DBI is NULL</translation>
+        <translation>Attribute DBI is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="198"/>
         <source>Can't get the assembly length: attribute is missing</source>
-        <translation type="unfinished">Can't get the assembly length: attribute is missing</translation>
+        <translation>Can't get the assembly length: attribute is missing</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.cpp" line="201"/>
         <source>Assembly has zero length</source>
-        <translation type="unfinished">Assembly has zero length</translation>
+        <translation>Assembly has zero length</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.h" line="43"/>
+        <location filename="../src/ov_assembly/CalculateCoveragePerBaseTask.h" line="45"/>
         <source>Get length of Assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Get length of Assembly</translation>
     </message>
 </context>
 <context>
@@ -5084,12 +5027,12 @@ Directory Path: %1</source>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.cpp" line="54"/>
         <source>Assembly DBI is NULL</source>
-        <translation type="unfinished">Assembly DBI is NULL</translation>
+        <translation>Assembly DBI is NULL</translation>
     </message>
     <message>
         <location filename="../src/ov_assembly/ExportCoverageTask.h" line="70"/>
         <source>Get visible name of Assembly</source>
-        <translation type="unfinished"></translation>
+        <translation>Get visible name of Assembly</translation>
     </message>
 </context>
 <context>
@@ -5103,17 +5046,17 @@ Directory Path: %1</source>
 <context>
     <name>U2::GraphLabelsSelectDialog</name>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="65"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="55"/>
         <source>Window size</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="69"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="59"/>
         <source>Mark labels only in selected area</source>
         <translation>Пометить названия только в выделенной области</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="81"/>
+        <location filename="../src/ov_sequence/GraphLabelsSelectDialog.cpp" line="71"/>
         <source>Graph Settings</source>
         <translation>Настройки графика</translation>
     </message>
@@ -5121,15 +5064,20 @@ Directory Path: %1</source>
 <context>
     <name>U2::GraphMenuAction</name>
     <message>
-        <location filename="../src/ov_sequence/GraphMenu.cpp" line="116"/>
+        <location filename="../src/ov_sequence/GraphMenu.cpp" line="117"/>
         <source>Graphs</source>
         <translation>Графики</translation>
     </message>
+    <message>
+        <location filename="../src/ov_sequence/GraphMenu.cpp" line="125"/>
+        <source>Close all graphs</source>
+        <translation>Закрыть все графики</translation>
+    </message>
 </context>
 <context>
     <name>U2::GraphSettingsDialog</name>
     <message>
-        <location filename="../src/ov_sequence/GraphSettingsDialog.cpp" line="83"/>
+        <location filename="../src/ov_sequence/GraphSettingsDialog.cpp" line="92"/>
         <source>Graph Settings</source>
         <translation>Настройки графика</translation>
     </message>
@@ -5179,174 +5127,57 @@ Directory Path: %1</source>
     </message>
 </context>
 <context>
-    <name>U2::MSAClustalOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="169"/>
-        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
-        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="172"/>
-        <source>Clustal algorithm factory is NULL</source>
-        <translation>Clustal algorithm factory is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="174"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAConsensusOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="132"/>
-        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
-        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="135"/>
-        <source>Strict consensus algorithm factory is NULL</source>
-        <translation>Strict consensus algorithm factory is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="137"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAEditor</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="136"/>
-        <source>Zoom In</source>
-        <translation>Приблизить</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="140"/>
-        <source>Zoom Out</source>
-        <translation>Отдалить</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="144"/>
-        <source>Zoom To Selection</source>
-        <translation>Приблизить выбранный регион</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="148"/>
-        <source>Reset Zoom</source>
-        <translation>Вернуться к приближению "по умолчанию"</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="508"/>
-        <source>Export as image</source>
-        <translation>Экспортировать выравнивание в изображение</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="128"/>
-        <source>Save alignment</source>
-        <translation>Сохранить выравнивание</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="132"/>
-        <source>Save alignment as</source>
-        <translation>Сохранить выравнивание как</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="184"/>
-        <source>Export highlighted</source>
-        <translation>Экспортировать выравнивание с выделенными нуклеотидами</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="224"/>
-        <source>Save Alignment</source>
-        <translation>Сохранить выравнивание</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="433"/>
-        <source>Copy/Paste</source>
-        <translation>Копирование/Вставка</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="438"/>
-        <source>Edit</source>
-        <translation>Редактирование</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="443"/>
-        <source>Export</source>
-        <translation>Экспорт</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="464"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="512"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="196"/>
         <source>Align</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="470"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="164"/>
         <source>Tree</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="477"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="171"/>
         <source>Advanced</source>
         <translation>Дополнительные операции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="488"/>
-        <source>Add</source>
-        <translation>Добавление</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="516"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="200"/>
         <source>Align sequence to this alignment</source>
         <translation>Выровнять последовательность на это выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="520"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="204"/>
         <source>Set this sequence as reference</source>
         <translation>Сделать референсной</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="524"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="208"/>
         <source>Unset reference sequence</source>
         <translation>Отменить референсную последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="714"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="789"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="809"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="359"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="434"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="454"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
         <translation>A problem occurred during adding sequences. The multiple alignment is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="801"/>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="804"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="446"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="449"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="456"/>
-        <source>View</source>
-        <translation>Вид</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="152"/>
-        <source>Change Font</source>
-        <translation>Изменить шрифт</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="156"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="64"/>
         <source>Build Tree</source>
         <translation>Построить дерево</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="370"/>
-        <source>Select font for alignment</source>
-        <translation>Выбрать шрифт</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="482"/>
+        <location filename="../src/ov_msa/MSAEditor.cpp" line="176"/>
         <source>Statistics</source>
         <translation>Статистика</translation>
     </message>
@@ -5354,407 +5185,208 @@ Directory Path: %1</source>
 <context>
     <name>U2::MSAEditorConsensusArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="78"/>
         <source>Copy consensus</source>
-        <translation>Копировать консенсус</translation>
+        <translation type="vanished">Копировать консенсус</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="82"/>
         <source>Copy consensus with gaps</source>
-        <translation>Копировать консенсус с пробелами</translation>
+        <translation type="vanished">Копировать консенсус с пробелами</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="86"/>
         <source>Consensus mode...</source>
-        <translation>Алгоритм построения консенсуса...</translation>
+        <translation type="vanished">Алгоритм построения консенсуса...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="152"/>
         <source>MSA consensus algorothm is NULL</source>
-        <translation>MSA consensus algorothm is NULL</translation>
+        <translation type="vanished">MSA consensus algorothm is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="153"/>
         <source>MSA object is NULL</source>
-        <translation>MSA object is NULL</translation>
+        <translation type="vanished">MSA object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusArea.cpp" line="173"/>
         <source>Percent value is out of [0..100] interval</source>
-        <translation>Percent value is out of [0..100] interval</translation>
+        <translation type="vanished">Percent value is out of [0..100] interval</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAEditorConsensusCache</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorConsensusCache.cpp" line="69"/>
+        <location filename="../src/ov_msa/MSAEditorConsensusCache.cpp" line="86"/>
         <source>Can not update consensus chache item</source>
         <translation>Can not update consensus chache item</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorFactory</name>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorFactory.cpp" line="44"/>
-        <source>Alignment Editor</source>
-        <translation>Редактор выравниваний</translation>
-    </message>
+    <name>U2::MSAEditorOffsetsViewController</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorFactory.cpp" line="104"/>
-        <source>Open multiple views</source>
-        <translation>Открытие нескольких окон</translation>
+        <location filename="../src/ov_msa/MSAEditorOffsetsView.cpp" line="70"/>
+        <source>Show offsets</source>
+        <translation>Показывать колонки с положением прочтений</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAEditorNameList</name>
+    <name>U2::MSAEditorSequenceArea</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="67"/>
-        <source>Edit sequence name</source>
-        <translation>Изменить имя последовательности</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="117"/>
+        <source>Remove columns of gaps...</source>
+        <translation>Удалить столбцы пробелов...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="70"/>
-        <source>Copy current sequence</source>
-        <translation>Копировать текущую последовательность</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="74"/>
-        <source>Remove sequence(s)</source>
-        <translation>Удалить последовательность(и)</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="117"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="146"/>
-        <source>MSA Editor UI is NULL</source>
-        <translation>MSA Editor UI is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="119"/>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="148"/>
-        <source>MSA Editor sequence area is NULL</source>
-        <translation>MSA Editor sequence area is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="134"/>
-        <source>MSA Object is NULL</source>
-        <translation>MSA Object is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="139"/>
-        <source>Invalid sequence index</source>
-        <translation>Invalid sequence index</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="859"/>
-        <source>Rename</source>
-        <translation>Переименовать</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorNameList.cpp" line="860"/>
-        <source>New sequence name:</source>
-        <translation>Новое имя:</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAEditorOffsetsViewController</name>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorOffsetsView.cpp" line="68"/>
-        <source>Show offsets</source>
-        <translation>Показывать положение</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAEditorSequenceArea</name>
-    <message>
         <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="132"/>
-        <source>Remove columns of gaps...</source>
-        <translation>Удалить столбцы пробелов...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="153"/>
         <source>Go to position...</source>
         <translation>Перейти...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="160"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="139"/>
         <source>Remove all gaps</source>
         <translation>Удалить все пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="164"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="143"/>
         <source>Sequence from file...</source>
         <translation>Добавить последовательность из файла...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="168"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="147"/>
         <source>Sequence from current project...</source>
         <translation>Добавить последовательность из проекта...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="172"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="151"/>
         <source>Sort sequences by name</source>
         <translation>Отсортировать последовательности по имени</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="186"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="165"/>
         <source>Replace selected rows with reverse-complement</source>
         <translation>Заменить выделенные строки обратно-комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="190"/>
-        <source>Replace selected character</source>
-        <translation>Заменить выделенный символ</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="197"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="169"/>
         <source>Replace selected rows with reverse</source>
         <translation>Заменить выделенные строки обратными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="201"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="173"/>
         <source>Replace selected rows with complement</source>
         <translation>Заменить выделенные строки комплементарными</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="316"/>
-        <source>Use dots</source>
-        <translation>Использовать точки</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="404"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="424"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="575"/>
-        <source>Unknown alphabet</source>
-        <translation>Неизвестный алфавит</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="447"/>
-        <source>MAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
-        <translation>MAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="449"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="217"/>
         <source>DNAAlphabet is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
         <translation>DNAAlphabet is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="557"/>
-        <source>No reference sequence selected</source>
-        <translation>Не выбрана референсная последовательность</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="682"/>
-        <source>Alignment object is NULL</source>
-        <translation>Alignment object is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="804"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="899"/>
-        <source>Position is out of range: %1</source>
-        <translation>Позиция выходит за рамки региона: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="830"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="908"/>
-        <source>Sequence is out of range: %1</source>
-        <translation>Последовательность выходит за рамки региона: %1</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="867"/>
-        <source>Negative startPos with non-empty alignment</source>
-        <translation>Negative startPos with non-empty alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="868"/>
-        <source>startPos is too big</source>
-        <translation>startPos is too big</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="889"/>
-        <source>Negative startSeq with non-empty alignment</source>
-        <translation>Negative startSeq with non-empty alignment</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="890"/>
-        <source>startSeq is too big</source>
-        <translation>startSeq is too big</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="922"/>
-        <source>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</source>
-        <translation>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="947"/>
-        <source>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</source>
-        <translation>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="994"/>
-        <source>Alignment object is not available</source>
-        <translation>Alignment object is not available</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1025"/>
-        <source>Last visible base is less than startPos</source>
-        <translation>Last visible base is less than startPos</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1026"/>
-        <source>Last visible base is out of range</source>
-        <translation>Last visible base is out of range</translation>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="215"/>
+        <source>MultipleAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</source>
+        <translation>MultipleAlignmentObject is null in MSAEditorSequenceArea::hasAminoAlphabet()</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1059"/>
-        <source>Last visible sequence is less than startSeq</source>
-        <translation>Last visible sequence is less than startSeq</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1060"/>
-        <source>Last visible sequence is out of range</source>
-        <translation>Last visible sequence is out of range</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1083"/>
-        <source>Invalid collapsible item model!</source>
-        <translation>Invalid collapsible item model!</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1718"/>
-        <source>Cursor position is out of range</source>
-        <translation>Cursor position is out of range</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1939"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="374"/>
         <source>Custom schemes</source>
         <translation>Пользовательские схемы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1950"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="385"/>
         <source>Create new color scheme</source>
         <translation>Создать новую цветовую схему</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1958"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="393"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1981"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="416"/>
         <source>The alignment has been modified, so that its alphabet has been switched from "%1" to "%2". Use "Undo", if you'd like to restore the original alignment.</source>
         <translation>Выравнивание было изменено. Алфавит переключен с "%1" на "%2". Используйте опцию "Назад" если хотите вернуться к исходному выравниванию.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2000"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2099"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2160"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2672"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="464"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="528"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="823"/>
         <source>NULL collapsible model!</source>
         <translation>NULL collapsible model!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2095"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="524"/>
         <source>NULL msa object!</source>
         <translation>NULL msa object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="579"/>
         <source>Warning!</source>
         <translation>Внимание!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2208"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="579"/>
         <source>You must select only one sequence for export.</source>
         <translation>Необходимо выбрать только одну последовательность для экспорта.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="622"/>
         <source>warning</source>
         <translation>Внимание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2250"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="622"/>
         <source>The document already in the project</source>
         <translation>Документ уже содержится в проекте</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2534"/>
-        <source>It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
-        <translation>Невозможно вставить символ в выравнивание. Используйте символы A-Z или символы пробела ("Пробел", "-", "%1").</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2590"/>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2593"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="742"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="745"/>
         <source>Open file with sequences</source>
         <translation>Открыть</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2599"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="751"/>
         <source>A problem occurred during adding sequences. The multiple alignment is no more available.</source>
         <translation>A problem occurred during adding sequences. The multiple alignment is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2689"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="837"/>
         <source>NULL Msa Object!</source>
         <translation>NULL Msa Object!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2694"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="842"/>
         <source>NULL document!</source>
         <translation>NULL document!</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2717"/>
-        <source>Top left corner of the selection has incorrect coords</source>
-        <translation>Top left corner of the selection has incorrect coords</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2719"/>
-        <source>Bottom right corner of the selection has incorrect coords</source>
-        <translation>Bottom right corner of the selection has incorrect coords</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2878"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="978"/>
         <source>Incorrect pointer to MSACollapsibleItemModel</source>
         <translation>Incorrect pointer to MSACollapsibleItemModel</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="2054"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="506"/>
         <source>Go To</source>
         <translation>Выбор позиции</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="139"/>
-        <source>Fill selection with gaps</source>
-        <translation>Заполнить пробелами</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="145"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="124"/>
         <source>Save subalignment...</source>
         <translation>Экспортировать область выравнивания...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="149"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="128"/>
         <source>Save sequence...</source>
         <translation>Экспортировать последовательность...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="176"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="155"/>
         <source>Switch on/off collapsing</source>
         <translation>Включить/выключить режим схлопывания</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="181"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="160"/>
         <source>Update collapsed groups</source>
         <translation>Обновить схлопнутые группы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="558"/>
-        <source>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</source>
-        <translation>Референсная последовательность для текущей схемы подсветки не задана. Используйте контекстное меню или панель опций, чтобы задать референсную последовательность</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="1932"/>
+        <location filename="../src/ov_msa/MSAEditorSequenceArea.cpp" line="366"/>
         <source>Colors</source>
         <translation>Раскраска</translation>
     </message>
@@ -5762,64 +5394,52 @@ Directory Path: %1</source>
 <context>
     <name>U2::MSAEditorStatusWidget</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="46"/>
         <source>Find:</source>
-        <translation>Поиск:</translation>
+        <translation type="vanished">Поиск:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="50"/>
         <source>Find backward <b>(SHIFT + Enter)</b></source>
-        <translation>Искать назад <b>(SHIFT + Ввод)</b></translation>
+        <translation type="vanished">Искать назад <b>(SHIFT + Ввод)</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="55"/>
         <source>Find forward <b>(Enter)</b></source>
-        <translation>Искать вперёд <b>(Ввод)</b></translation>
+        <translation type="vanished">Искать вперёд <b>(Ввод)</b></translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="101"/>
         <source>Find in alignment</source>
-        <translation>Искать в выравнивании</translation>
+        <translation type="vanished">Искать в выравнивании</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="114"/>
         <source>Alignment object is locked</source>
-        <translation>Объект выравнивания заблокирован</translation>
+        <translation type="vanished">Объект выравнивания заблокирован</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="114"/>
         <source>Alignment object is not locked</source>
-        <translation>Объект выравнивания рвзблокирован</translation>
+        <translation type="vanished">Объект выравнивания рвзблокирован</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="123"/>
         <source>Ln %1 / %2</source>
-        <translation>Стр %1 / %2</translation>
+        <translation type="vanished">Стр %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="127"/>
         <source>Line %1 of %2</source>
-        <translation>Строка %1 из %2</translation>
+        <translation type="vanished">Строка %1 из %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="130"/>
         <source>Col %1 / %2</source>
-        <translation>Стб %1 / %2</translation>
+        <translation type="vanished">Стб %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="134"/>
         <source>Column %1 of %2</source>
-        <translation>Столбец %1 из %2</translation>
+        <translation type="vanished">Столбец %1 из %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="138"/>
         <source>Pos %1 / %2</source>
-        <translation>Позиция %1 / %2</translation>
+        <translation type="vanished">Позиция %1 / %2</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorStatusBar.cpp" line="141"/>
         <source>Position %1 of %2</source>
-        <translation>Позиция %1 из %2</translation>
+        <translation type="vanished">Позиция %1 из %2</translation>
     </message>
 </context>
 <context>
@@ -5902,47 +5522,19 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAEditorUI</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="919"/>
-        <source>Remove selection</source>
-        <translation>Удалить выделение</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="924"/>
-        <source>Copy selection</source>
-        <translation>Копировать выделенное</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="933"/>
-        <source>Copy formatted</source>
-        <translation>Копировать выделенное с учетом формата</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="942"/>
-        <source>Paste</source>
-        <translation>Вставить</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1080"/>
         <source>Tree view</source>
-        <translation>Дерево</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSAEditor.cpp" line="1001"/>
-        <source>Consensus</source>
-        <translation>Консенсус</translation>
+        <translation type="vanished">Дерево</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAExportConsensusTab</name>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="132"/>
         <source>Save file</source>
-        <translation>Сохранить файл</translation>
+        <translation type="vanished">Сохранить файл</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/ExportConsensus/MSAExportConsensusTab.cpp" line="85"/>
         <source>A problem occurred during export consensus. The multiple alignment is no more available.</source>
-        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
+        <translation type="vanished">A problem occurred during export consensus. The multiple alignment is no more available.</translation>
     </message>
 </context>
 <context>
@@ -5964,139 +5556,84 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
     </message>
 </context>
 <context>
-    <name>U2::MSAGraphCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="48"/>
-        <source>MSA is NULL</source>
-        <translation>MSA is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="69"/>
-        <source>Overview width is zero</source>
-        <translation>Overview width is zero</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="41"/>
-        <source>Render overview</source>
-        <translation>Рассчитать панораму</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAGraphOverview</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="104"/>
-        <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
-        <translation>Множественное выравнивание слишком большое. Обзорные график недоступен.</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="109"/>
-        <source>Waiting...</source>
-        <translation>Ожидание...</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphOverview.cpp" line="118"/>
-        <source>Overview is rendering...</source>
-        <translation>Панорама рассчитывается...</translation>
-    </message>
-</context>
-<context>
-    <name>U2::MSAHighlightingOverviewCalculationTask</name>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="201"/>
-        <source>MSA highlighting scheme registry is NULL</source>
-        <translation>MSA highlighting scheme registry is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="203"/>
-        <source>MSA highlighting scheme factory with '%1' id is NULL</source>
-        <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="220"/>
-        <source>Color scheme is NULL</source>
-        <translation>Color scheme is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="221"/>
-        <source>Highlighting scheme is NULL</source>
-        <translation>Highlighting scheme is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/Overview/MSAGraphCalculationTask.cpp" line="222"/>
-        <source>Highlighting scheme factory is NULL</source>
-        <translation>Highlighting scheme factory is NULL</translation>
-    </message>
-</context>
-<context>
     <name>U2::MSAHighlightingTab</name>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="91"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="94"/>
         <source>Use dots</source>
         <translation>Использовать точки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="95"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="98"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="103"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="108"/>
         <source>Highlight characters with conservation level:</source>
         <translation>Подсветить символы с уровнем сохранения:</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="106"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="107"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="111"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="112"/>
         <source> threshold</source>
         <translation> порог</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="120"/>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="286"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="123"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="269"/>
         <source>Threshold: %1%</source>
         <translation>Порог: %1%</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="148"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
         <source>Color</source>
         <translation>Цвет</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="151"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="154"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="264"/>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="243"/>
+        <source>Info: set a reference sequence.</source>
+        <translation>Инфо: укажите референсную последовательность.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MSAHighlightingTab.cpp" line="252"/>
+        <source>Info: export is not available for the selected highlighting.</source>
+        <translation>Инфо: экспорт невозможен для выбранного режима подсветки.</translation>
+    </message>
+    <message>
         <source>Hint: select a reference above</source>
-        <translation>Подсказка: выберите референсную последовательность</translation>
+        <translation type="vanished">Подсказка: выберите референсную последовательность</translation>
     </message>
 </context>
 <context>
     <name>U2::MSAImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="186"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="257"/>
         <source>Alignment</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="305"/>
         <source>MSA sequence area is NULL</source>
         <translation>MSA sequence area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="245"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="329"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="316"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="400"/>
         <source>MSA Collapsible Model is NULL</source>
         <translation>MSA Collapsible Model is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="278"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="349"/>
         <source>Warning: selected region is too big to be exported. You can try to zoom out the alignment or select another region.</source>
         <translation>Предупреждение: выделенный регион слишком большой для экспорта. Вы можете попробовать приблизить выравнивание или выделить другой регион.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="281"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="352"/>
         <source>Warning: selected region is too big to be exported. You can try to select another region.</source>
         <translation>Предупреждение: выделенный регион слишком большой для экспорта. Вы можете попробовать выделить другой регион.</translation>
     </message>
@@ -6104,17 +5641,18 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="41"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="43"/>
         <source>MSA Editor UI is NULL</source>
         <translation>MSA Editor UI is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.h" line="88"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="49"/>
         <source>MSA Editor is NULL</source>
         <translation>MSA Editor is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.h" line="97"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="56"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="73"/>
         <source>MSA Consensus area is NULL</source>
         <translation>MSA Consensus area is NULL</translation>
     </message>
@@ -6122,18 +5660,18 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="66"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="108"/>
         <source>Nothing to export</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="75"/>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="84"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="147"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
         <source>Alignment is too big. </source>
         <translation>Alignment is too big. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="86"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="157"/>
         <source>Cannot save the file. </source>
         <translation>Cannot save the file. </translation>
     </message>
@@ -6141,204 +5679,974 @@ All phylogenetic tree(s), opened in the same view, will be no more synchronized
 <context>
     <name>U2::MSAImageExportToSvgTask</name>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="136"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="204"/>
         <source>Nothing to export</source>
         <translation>Экспортировать нечего</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="155"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="229"/>
         <source>The image size is too big.</source>
         <translation>The image size is too big.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="159"/>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="233"/>
         <source>SVG %1</source>
         <translation>SVG %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="160"/>
-        <source>SVG image of multiple alignment created by Unipro UGENE</source>
-        <translation>SVG изображение множественного выравнивания создано Unipro UGENE</translation>
+        <location filename="../src/ov_msa/Export/MSAImageExportTask.cpp" line="234"/>
+        <source>SVG image of multiple alignment created by Unipro UGENE</source>
+        <translation>SVG изображение множественного выравнивания создано Unipro UGENE</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaAmbiguousCharactersController</name>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="53"/>
+        <source>Jump to next ambiguous character</source>
+        <translation>Перейти к следующему неоднозначному символу</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="59"/>
+        <source>Jump to previous ambiguous character</source>
+        <translation>Перейти к предыдущему неоднозначному символу</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/helpers/MaAmbiguousCharactersController.cpp" line="100"/>
+        <source>There are no ambiguous characters in the alignment.</source>
+        <translation>Выравнивание не содержит неоднозначных символов.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaClustalOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="169"/>
+        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
+        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="172"/>
+        <source>Clustal algorithm factory is NULL</source>
+        <translation>Clustal algorithm factory is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="174"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaConsensusMismatchController</name>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="53"/>
+        <source>Jump to next variation</source>
+        <translation>Перейти к следующей вариации</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="59"/>
+        <source>Jump to previous variation</source>
+        <translation>Перейти к предыдущей вариации</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaConsensusMismatchController.cpp" line="144"/>
+        <source>There are no variations in the consensus sequence.</source>
+        <translation>Консенсусная последовательность не содержит вариаций.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaConsensusOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="133"/>
+        <source>MSAConsensusAlgorithmRegistry is NULL!</source>
+        <translation>MSAConsensusAlgorithmRegistry is NULL!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="136"/>
+        <source>Strict consensus algorithm factory is NULL</source>
+        <translation>Strict consensus algorithm factory is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="138"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditor</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="80"/>
+        <source>Save alignment</source>
+        <translation>Сохранить выравнивание</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="84"/>
+        <source>Save alignment as</source>
+        <translation>Сохранить выравнивание как</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="88"/>
+        <source>Zoom In</source>
+        <translation>Приблизить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="92"/>
+        <source>Zoom Out</source>
+        <translation>Отдалить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="96"/>
+        <source>Zoom To Selection</source>
+        <translation>Приблизить выбранный регион</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="100"/>
+        <source>Reset Zoom</source>
+        <translation>Вернуться к приближению "по умолчанию"</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="104"/>
+        <source>Change Font</source>
+        <translation>Изменить шрифт</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="108"/>
+        <source>Export highlighted</source>
+        <translation>Экспортировать выравнивание с выделенными нуклеотидами</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="311"/>
+        <source>Save Alignment</source>
+        <translation>Сохранить выравнивание</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="319"/>
+        <source>Characters Font</source>
+        <translation>Шрифт</translation>
+    </message>
+    <message>
+        <source>Select font for alignment</source>
+        <translation type="vanished">Выбрать шрифт</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="347"/>
+        <source>Export as image</source>
+        <translation>Экспорт изображения</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="352"/>
+        <source>Overview</source>
+        <translation>Панорама</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="387"/>
+        <source>Copy/Paste</source>
+        <translation>Копирование/Вставка</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="392"/>
+        <source>Edit</source>
+        <translation>Редактирование</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="397"/>
+        <source>Export</source>
+        <translation>Экспорт</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="409"/>
+        <source>View</source>
+        <translation>Просмотр</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="417"/>
+        <source>Add</source>
+        <translation>Добавить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditor.cpp" line="422"/>
+        <source>Align</source>
+        <translation>Выровнять</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorConsensusArea</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="82"/>
+        <source>Copy consensus</source>
+        <translation>Копировать консенсус</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="86"/>
+        <source>Copy consensus with gaps</source>
+        <translation>Копировать консенсус с пробелами</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorConsensusArea.cpp" line="90"/>
+        <source>Consensus mode...</source>
+        <translation>Алгоритм построения консенсуса...</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorFactory</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorFactory.cpp" line="46"/>
+        <source>Alignment Editor</source>
+        <translation>Редактор выравниваний</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorFactory.cpp" line="106"/>
+        <source>Open multiple views</source>
+        <translation>Открыть несколько окон</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorNameList</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="70"/>
+        <source>Edit sequence name</source>
+        <translation>Изменить имя последовательности</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="77"/>
+        <source>Copy current sequence</source>
+        <translation>Копировать текущую последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="81"/>
+        <source>Remove sequence(s)</source>
+        <translation>Удалить последовательность(и)</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="131"/>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="584"/>
+        <source>MSA Editor UI is NULL</source>
+        <translation>MSA Editor UI is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="133"/>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="586"/>
+        <source>MSA Editor sequence area is NULL</source>
+        <translation>MSA Editor sequence area is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="149"/>
+        <source>MSA Object is NULL</source>
+        <translation>MSA Object is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="155"/>
+        <source>Invalid sequence index</source>
+        <translation>Invalid sequence index</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="849"/>
+        <source>Rename</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Rename Read</source>
+        <translation type="vanished">Переименовать</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorNameList.cpp" line="850"/>
+        <source>New sequence name:</source>
+        <translation>Новое имя:</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorSequenceArea</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="96"/>
+        <source>Replace selected character</source>
+        <translation>Заменить выделенный символ</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="103"/>
+        <source>Fill selection with gaps</source>
+        <translation>Заполнить пробелами</translation>
+    </message>
+    <message>
+        <source>Position is out of range: %1</source>
+        <translation type="vanished">Позиция выходит за рамки региона: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="163"/>
+        <source>Invalid collapsible item model!</source>
+        <translation>Invalid collapsible item model!</translation>
+    </message>
+    <message>
+        <source>Sequence is out of range: %1</source>
+        <translation type="vanished">Последовательность выходит за рамки региона: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="465"/>
+        <source>Alignment object is not available</source>
+        <translation>Alignment object is not available</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="784"/>
+        <source>No reference sequence selected</source>
+        <translation>Не выбрана референсная последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="785"/>
+        <source>Reference sequence for current highlighting scheme is not selected. Use context menu or Highlighting tab on Options panel to select it</source>
+        <translation>Референсная последовательность для текущей схемы подсветки не задана. Используйте контекстное меню или панель опций, чтобы задать референсную последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="801"/>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1402"/>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1483"/>
+        <source>Unknown alphabet</source>
+        <translation>Неизвестный алфавит</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="846"/>
+        <source>Cursor position is out of range</source>
+        <translation>Курсор выходит за допустимую область</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1213"/>
+        <source>Top left corner of the selection has incorrect coords</source>
+        <translation>Top left corner of the selection has incorrect coords</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1215"/>
+        <source>Bottom right corner of the selection has incorrect coords</source>
+        <translation>Bottom right corner of the selection has incorrect coords</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="1578"/>
+        <source>It is not possible to insert the character into the alignment. Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation>Невозможно вставить символ в выравнивание. Используйте символы A-Z или символы пробела ("Пробел", "-", "%1").</translation>
+    </message>
+    <message>
+        <source>Negative startPos with non-empty alignment</source>
+        <translation type="vanished">Negative startPos with non-empty alignment</translation>
+    </message>
+    <message>
+        <source>startPos is too big</source>
+        <translation type="vanished">startPos is too big</translation>
+    </message>
+    <message>
+        <source>Negative startSeq with non-empty alignment</source>
+        <translation type="vanished">Negative startSeq with non-empty alignment</translation>
+    </message>
+    <message>
+        <source>startSeq is too big</source>
+        <translation type="vanished">startSeq is too big</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorSequenceArea.cpp" line="91"/>
+        <source>Use dots</source>
+        <translation>Использовать точки</translation>
+    </message>
+    <message>
+        <source>Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</source>
+        <translation type="vanished">Horizontal scrollbar appears unexpectedly: numVisibleBases is too small</translation>
+    </message>
+    <message>
+        <source>Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</source>
+        <translation type="vanished">Vertical scrollbar appears unexpectedly: numVisibleSequences is too small</translation>
+    </message>
+    <message>
+        <source>It is not possible to insert the character into the alignment.Please use a character from set A-Z (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation type="vanished">Невозможно вставить символ в выравнивание. Используйте символы A-Z или символы пробела ("Пробел", "-", "%1").</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="80"/>
+        <source>Sel %1</source>
+        <translation>Выд %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="81"/>
+        <source>Ln %1 / %2</source>
+        <translation>Стр %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="81"/>
+        <source>Line %1 of %2</source>
+        <translation>Строка %1 из %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="82"/>
+        <source>Col %1 / %2</source>
+        <translation>Стб %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="82"/>
+        <source>Column %1 of %2</source>
+        <translation>Столбец %1 из %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="83"/>
+        <source>Pos %1 / %2</source>
+        <translation>Поз %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="83"/>
+        <source>Position %1 of %2</source>
+        <translation>Позиция %1 из %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="84"/>
+        <source>Selection width and height are %1</source>
+        <translation>Размеры выделения %1</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="133"/>
+        <source>Alignment object is locked</source>
+        <translation>Объект выравнивания заблокирован</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MaEditorStatusBar.cpp" line="133"/>
+        <source>Alignment object is not locked</source>
+        <translation>Объект выравнивания рвзблокирован</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaEditorWgt</name>
+    <message>
+        <source>Consensus</source>
+        <translation type="vanished">Консенсус</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="191"/>
+        <source>Consensus:</source>
+        <translation>Консенсусная последовательность:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="248"/>
+        <source>Remove selection</source>
+        <translation>Удалить выделение</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="253"/>
+        <source>Copy selection</source>
+        <translation>Копировать выделенное</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="262"/>
+        <source>Copy formatted</source>
+        <translation>Копировать выделенное с учетом формата</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="271"/>
+        <source>Paste</source>
+        <translation>Вставить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="282"/>
+        <source>Undo</source>
+        <translation>Отменить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/MaEditorWgt.cpp" line="286"/>
+        <source>Redo</source>
+        <translation>Повторить</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaExportConsensusWidget</name>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp" line="91"/>
+        <source>A problem occurred during export consensus. The multiple alignment is no more available.</source>
+        <translation>A problem occurred during export consensus. The multiple alignment is no more available.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusWidget.cpp" line="138"/>
+        <source>Save file</source>
+        <translation>Сохранить файл</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaGraphCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="41"/>
+        <source>Render overview</source>
+        <translation>Рассчитать панораму</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="49"/>
+        <source>MSA is NULL</source>
+        <translation>MSA is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="70"/>
+        <source>Overview width is zero</source>
+        <translation>Overview width is zero</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaGraphOverview</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="100"/>
+        <source>Multiple sequence alignment is too big. Overview is unavailable.</source>
+        <translation>Множественное выравнивание слишком большое. Обзорные график недоступен.</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="105"/>
+        <source>Waiting...</source>
+        <translation>Ожидание...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphOverview.cpp" line="111"/>
+        <source>Overview is rendering...</source>
+        <translation>Панорама рассчитывается...</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaHighlightingOverviewCalculationTask</name>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="201"/>
+        <source>MSA highlighting scheme registry is NULL</source>
+        <translation>MSA highlighting scheme registry is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="203"/>
+        <source>MSA highlighting scheme factory with '%1' id is NULL</source>
+        <translation>MSA highlighting scheme factory with '%1' id is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="220"/>
+        <source>Color scheme is NULL</source>
+        <translation>Color scheme is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="221"/>
+        <source>Highlighting scheme is NULL</source>
+        <translation>Highlighting scheme is NULL</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaGraphCalculationTask.cpp" line="222"/>
+        <source>Highlighting scheme factory is NULL</source>
+        <translation>Highlighting scheme factory is NULL</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewContextMenu</name>
+    <name>U2::MaOverviewContextMenu</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="41"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="45"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="42"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="46"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="52"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="56"/>
         <source>Set color...</source>
         <translation>Установить цвет...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="135"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="140"/>
         <source>Show simple overview</source>
         <translation>Показать простую панораму</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="142"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="147"/>
         <source>Export as image</source>
-        <translation>Экспортировать выравнивание в изображение</translation>
+        <translation>Экспорт изображения</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="148"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="153"/>
         <source>Display settings...</source>
         <translation>Показать настройки...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="155"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="160"/>
         <source>Calculation method...</source>
         <translation>Метод расчета...</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="158"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="163"/>
         <source>Strict</source>
         <translation>Точный</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="159"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="164"/>
         <source>Gaps</source>
         <translation>Пробелы</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="160"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="165"/>
         <source>Clustal</source>
         <translation>Clustal</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="161"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="166"/>
         <source>Highlighting</source>
         <translation>Выделение</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="189"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="194"/>
         <source>Graph type</source>
         <translation>Тип графика</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="193"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="198"/>
         <source>Histogram</source>
         <translation>Гистограмма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="194"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="199"/>
         <source>Line graph</source>
         <translation>Линейный график</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="195"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="200"/>
         <source>Area graph</source>
         <translation>Площади</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="216"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="221"/>
         <source>Orientation</source>
         <translation>Ориентация</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="220"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="225"/>
         <source>Top to bottom</source>
         <translation>Сверху вниз</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewContextMenu.cpp" line="221"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewContextMenu.cpp" line="226"/>
         <source>Bottom to top</source>
         <translation>Снизу вверх</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewImageExportController</name>
+    <name>U2::MaOverviewImageExportController</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="83"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="78"/>
         <source>Alignment overview</source>
         <translation>Панорама выравнивания</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSAOverviewImageExportToBitmapTask</name>
+    <name>U2::MaOverviewImageExportToBitmapTask</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="49"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="44"/>
         <source>Overview is NULL</source>
         <translation>Overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="50"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="45"/>
         <source>Graph overview is NULL</source>
         <translation>Graph overview is NULL</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="52"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="47"/>
         <source>Nothing to export. </source>
         <translation>Nothing to export. </translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSAOverviewImageExportTask.cpp" line="72"/>
+        <location filename="../src/ov_msa/Overview/MaOverviewImageExportTask.cpp" line="67"/>
         <source>FAIL</source>
         <translation>FAIL</translation>
     </message>
 </context>
 <context>
-    <name>U2::MSASimpleOverview</name>
+    <name>U2::MaSangerOverview</name>
+    <message>
+        <source>Incorrect multiple alignment object!</source>
+        <translation type="vanished">Incorrect multiple alignment object!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Overview/MaSangerOverview.cpp" line="259"/>
+        <source>Incorrect multiple chromatogram alignment object</source>
+        <translation>Incorrect multiple chromatogram alignment object</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MaSimpleOverview</name>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="102"/>
+        <location filename="../src/ov_msa/Overview/MaSimpleOverview.cpp" line="99"/>
         <source>Multiple sequence alignment is too big for current window size.
 Simple overview is unavailable.</source>
         <translation>Множественное выравнивание слишком большое для этого окна.
 Простая панорама недоступна.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/Overview/MSASimpleOverview.cpp" line="150"/>
+        <location filename="../src/ov_msa/Overview/MaSimpleOverview.cpp" line="148"/>
         <source>Incorrect multiple alignment object!</source>
         <translation>Incorrect multiple alignment object!</translation>
     </message>
 </context>
 <context>
+    <name>U2::McaEditor</name>
+    <message>
+        <source>Show/hide chromatogram(s)</source>
+        <translation type="vanished">Показать/скрыть хроматограмм(ы)</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="200"/>
+        <source>Zoom in</source>
+        <translation>Приблизить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="205"/>
+        <source>Zoom out</source>
+        <translation>Отдалить</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="210"/>
+        <source>Reset zoom</source>
+        <translation>Восстановить масштаб по умолчанию</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="215"/>
+        <source>Show chromatograms</source>
+        <translation>Показывать хроматограммы</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="222"/>
+        <source>Open "General" tab on the options panel</source>
+        <translation>Открыть основную вкладку на панели опций</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="226"/>
+        <source>Open "Consensus" tab on the options panel</source>
+        <translation>Открыть вкладку панели опций с настройками консенсуса</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="230"/>
+        <source>Show overview</source>
+        <translation>Показать панораму</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="236"/>
+        <source>Change characters font...</source>
+        <translation>Изменить шрифт...</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="255"/>
+        <source>Alignment</source>
+        <translation>Выравнивание</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="262"/>
+        <source>Appearance</source>
+        <translation>Внешний вид</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="283"/>
+        <source>Navigation</source>
+        <translation>Навигация</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditor.cpp" line="294"/>
+        <source>Edit</source>
+        <translation>Редактирование</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorNameList</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorNameList.cpp" line="48"/>
+        <source>Rename read</source>
+        <translation>Переименовать прочтение</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorNameList.cpp" line="51"/>
+        <source>Remove read</source>
+        <translation>Удалить прочтение</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorSequenceArea</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="57"/>
+        <source>Show quality bars</source>
+        <translation>Показать полосы качества</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="65"/>
+        <source>Show all</source>
+        <translation>Показать все</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="69"/>
+        <source>Show/hide trace</source>
+        <translation>Показывать/скрывать отдельные сигналы</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="78"/>
+        <source>Insert character/gap</source>
+        <translation>Вставить символ/пробел</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="83"/>
+        <source>Replace character/gap</source>
+        <translation>Заменить символ/пробел</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="85"/>
+        <source>Remove gap at the left</source>
+        <translation>Удалить пробел слева</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="90"/>
+        <source>Remove all columns of gaps</source>
+        <translation>Удалить все столбцы из пробелов</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="96"/>
+        <source>Trim left end</source>
+        <translation>Отсечь конец прочтения слева</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="102"/>
+        <source>Trim right end</source>
+        <translation>Отсечь конец прочтения справа</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="108"/>
+        <source>Insert gap</source>
+        <translation>Вставить пробел</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorSequenceArea.cpp" line="459"/>
+        <source>It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character ('Space', '-' or '%1').</source>
+        <translation>Невозможно вставить символ в выравнивание. Используйте символы A-Z или символы пробела ("Пробел", "-", "%1").</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="50"/>
+        <source>RefPos %1 / %2</source>
+        <translation>Поз. реф. %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="51"/>
+        <source>Reference position %1 of %2</source>
+        <translation>Позиция референса %1 из %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="52"/>
+        <source>ReadPos %1 / %2</source>
+        <translation>Поз. прочт. %1 / %2</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorStatusBar.cpp" line="53"/>
+        <source>Read position %1 of %2</source>
+        <translation>Позиция рида %1 из %2</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaEditorWgt</name>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="71"/>
+        <source>Reference %1:</source>
+        <translation>Последовательность %1:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="150"/>
+        <source>Clear selection</source>
+        <translation>Снять выделение</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/McaEditorWgt.cpp" line="155"/>
+        <source>Remove character/gap</source>
+        <translation>Удалить символ/пробел</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaExportConsensusTabFactory</name>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="86"/>
+        <source>Consensus mode</source>
+        <translation>Режим консенсуса</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.cpp" line="91"/>
+        <source>Export consensus</source>
+        <translation>Экспорт консенсуса</translation>
+    </message>
+</context>
+<context>
+    <name>U2::McaGeneralTab</name>
+    <message>
+        <location filename="../src/ov_msa/General/McaGeneralTab.cpp" line="33"/>
+        <source>Alignment info</source>
+        <translation>Информация о выравнивании</translation>
+    </message>
+    <message>
+        <source>Consensus mode</source>
+        <translation type="vanished">Режим консенсуса</translation>
+    </message>
+</context>
+<context>
     <name>U2::MinMaxSelectorWidget</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="94"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="93"/>
         <source>Cutoff for minimum and maximum values</source>
         <translation>Диапазон значений</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="115"/>
-        <source>Minimum:</source>
-        <translation>Минимум:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="117"/>
+        <source>Minimum</source>
+        <translation>Минимум</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="118"/>
+        <source>Maximum</source>
+        <translation>Максимум</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="116"/>
-        <source>Maximum:</source>
-        <translation>Максимум:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="164"/>
+        <source>Invalid cutoff range</source>
+        <translation>Некорректный диапазон</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="146"/>
         <source>Invalid cutoff values</source>
-        <translation>Некорректный диапазон: мин больше макс</translation>
+        <translation type="vanished">Некорректный диапазон: мин больше макс</translation>
     </message>
 </context>
 <context>
     <name>U2::MsaEditorSimilarityColumn</name>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="62"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="68"/>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="76"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="63"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="69"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="77"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="119"/>
+        <location filename="../src/ov_msa/MsaEditorSimilarityColumn.cpp" line="122"/>
         <source>score</source>
         <translation>счет</translation>
     </message>
 </context>
 <context>
+    <name>U2::MsaEditorStatusBar</name>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="44"/>
+        <source>Find backward <b>(SHIFT + Enter)</b></source>
+        <translation>Искать назад <b>(SHIFT + Ввод)</b></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="49"/>
+        <source>Find forward <b>(Enter)</b></source>
+        <translation>Искать вперёд <b>(Ввод)</b></translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="57"/>
+        <source>Find:</source>
+        <translation>Поиск:</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorStatusBar.cpp" line="67"/>
+        <source>Find in alignment</source>
+        <translation>Искать в выравнивании</translation>
+    </message>
+</context>
+<context>
     <name>U2::MsaEditorTreeTab</name>
     <message>
         <location filename="../src/ov_msa/PhyTrees/MsaEditorTreeTabArea.cpp" line="43"/>
@@ -6362,9 +6670,51 @@ Simple overview is unavailable.</source>
     </message>
 </context>
 <context>
+    <name>U2::MsaEditorWgt</name>
+    <message>
+        <location filename="../src/ov_msa/MsaEditorWgt.cpp" line="74"/>
+        <source>Tree view</source>
+        <translation>Дерево</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaSchemesMenuBuilder</name>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="59"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="90"/>
+        <source>All alphabets</source>
+        <translation>Все алфавиты</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="60"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="91"/>
+        <source>Amino acid alphabet</source>
+        <translation>Аминокислотный алфавит</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="61"/>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemesMenuBuilder.cpp" line="92"/>
+        <source>Nucleotide alphabet</source>
+        <translation>Нуклеотидный алфавит</translation>
+    </message>
+</context>
+<context>
+    <name>U2::MsaUndoRedoFramework</name>
+    <message>
+        <location filename="../src/UndoRedoFramework.cpp" line="44"/>
+        <source>Undo</source>
+        <translation>Отменить</translation>
+    </message>
+    <message>
+        <location filename="../src/UndoRedoFramework.cpp" line="50"/>
+        <source>Redo</source>
+        <translation>Повторить</translation>
+    </message>
+</context>
+<context>
     <name>U2::ObjectViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="275"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="269"/>
         <source>No sequence info found!</source>
         <translation>Информация о последовательности не найдена!</translation>
     </message>
@@ -6372,27 +6722,27 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::OpenAnnotatedDNAViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="153"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="147"/>
         <source>Sequences</source>
         <translation>Последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="214"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="208"/>
         <source>Error reading sequence object from dbi! URL: '%1'', name: '%2', error: %3</source>
         <translation>Error reading sequence object from dbi! URL: '%1'', name: '%2', error: %3</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="218"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="212"/>
         <source>Maximum number of objects per view reached: %1</source>
         <translation>Достигнут предел по кол-ву объектов на окно: %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="222"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="216"/>
         <source>Sequence object not available! URL %1, name %2</source>
         <translation>Последовательность не найдена: %2 из %1</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="227"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="221"/>
         <source>No sequence objects found</source>
         <translation>Последовательностей не найдено</translation>
     </message>
@@ -6406,19 +6756,19 @@ Simple overview is unavailable.</source>
     </message>
 </context>
 <context>
-    <name>U2::OpenMSAEditorTask</name>
+    <name>U2::OpenMaEditorTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="90"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="99"/>
         <source>Documet removed from project</source>
         <translation>Документ удален из проекта</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="104"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="112"/>
         <source>Multiple alignment object not found</source>
         <translation>Объект выравнивания не найден</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="109"/>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="117"/>
         <source>Opening MSA editor for object: %1</source>
         <translation>Открывается редактор выравниваний для "%1"</translation>
     </message>
@@ -6426,7 +6776,7 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::OpenSavedAnnotatedDNAViewTask</name>
     <message>
-        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="323"/>
+        <location filename="../src/ov_sequence/AnnotatedDNAViewTasks.cpp" line="317"/>
         <source>DNA sequence object not found: %1</source>
         <translation>Последовательность не найдена: "%1"</translation>
     </message>
@@ -6442,7 +6792,14 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::OpenSavedMSAEditorTask</name>
     <message>
-        <location filename="../src/ov_msa/MSAEditorTasks.cpp" line="167"/>
+        <source>Alignment object not found: %1</source>
+        <translation type="vanished">Alignment object not found: %1</translation>
+    </message>
+</context>
+<context>
+    <name>U2::OpenSavedMaEditorTask</name>
+    <message>
+        <location filename="../src/ov_msa/MaEditorTasks.cpp" line="226"/>
         <source>Alignment object not found: %1</source>
         <translation>Alignment object not found: %1</translation>
     </message>
@@ -6534,51 +6891,57 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::PairAlign</name>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="108"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="111"/>
         <source>Sequences</source>
         <translation>Последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="109"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="112"/>
         <source>Algorithm settings</source>
         <translation>Настройки алгоритма</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="110"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="113"/>
         <source>Output settings</source>
         <translation>Выходные настройки</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="156"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="169"/>
+        <source>Please select 2 different sequences to align</source>
+        <translation>Выберите две различные последовательности для выравнивания</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="173"/>
         <source>Pairwise alignment is not available for alignments with "%1" alphabet.</source>
         <translation>Парное выравнивание недоступно для выравниваний алфавита "%1".</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="218"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="177"/>
+        <source>Unexpected error</source>
+        <translation>Unexpected error</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="240"/>
         <source>Either addFirstButton and addSecondButton are pressed. Sequence selection mode works incorrect.</source>
         <translation>Either addFirstButton and addSecondButton are pressed. Sequence selection mode works incorrect.</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="254"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="285"/>
         <source>Not defined</source>
         <translation>Не найдено</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="166"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="189"/>
         <source>Save file</source>
         <translation>Сохранить файл</translation>
     </message>
     <message>
-        <source>Clustal format (*.aln)</source>
-        <translation type="vanished">Формат Clustal (*.aln)</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="390"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="363"/>
+        <location filename="../src/ov_msa/PairAlign/PairAlign.cpp" line="390"/>
         <source>Please, change the output file.</source>
         <translation>Измените выходной файл.</translation>
     </message>
@@ -6586,37 +6949,37 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::PanView</name>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="161"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="159"/>
         <source>Zoom In</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="165"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="163"/>
         <source>Zoom Out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="169"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="167"/>
         <source>Zoom to Selection</source>
         <translation>Масштабировать по выделению</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="173"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="171"/>
         <source>Zoom to Whole Sequence</source>
         <translation>Масштабировать ко всей последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="177"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="175"/>
         <source>Show Main Ruler</source>
         <translation>Показывать основную шкалу</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="183"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="181"/>
         <source>Show Custom Rulers</source>
         <translation>Показывать дополнительные шкалы</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/PanView.cpp" line="485"/>
+        <location filename="../src/ov_sequence/PanView.cpp" line="483"/>
         <source>range change request: [%1, %2]</source>
         <translation>Изменён видимый диапазон: [%1, %2]</translation>
     </message>
@@ -6629,7 +6992,7 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::PanViewRenderer</name>
     <message>
-        <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="266"/>
+        <location filename="../src/ov_sequence/view_rendering/PanViewRenderer.cpp" line="264"/>
         <source>[%1 %2]</source>
         <translation>[%1 %2]</translation>
     </message>
@@ -6651,20 +7014,38 @@ Simple overview is unavailable.</source>
     </message>
 </context>
 <context>
+    <name>U2::Registry</name>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="121"/>
+        <source>All alphabets</source>
+        <translation>Все алфавиты</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="122"/>
+        <source>Amino acid alphabet</source>
+        <translation>Аминокислотный алфавит</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/Highlighting/MsaSchemeComboBoxController.h" line="123"/>
+        <source>Nucleotide alphabet</source>
+        <translation>Нуклеотидный алфавит</translation>
+    </message>
+</context>
+<context>
     <name>U2::SaveGraphCutoffsDialogController</name>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="44"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="52"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="45"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="53"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="100"/>
-        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="156"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="108"/>
+        <location filename="../src/ov_sequence/SaveGraphCutoffsDialogController.cpp" line="165"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
@@ -6715,17 +7096,17 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::SaveSelectedSequenceFromMSADialogController</name>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="45"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="48"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="46"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="49"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="59"/>
+        <location filename="../src/ov_msa/SaveSelectedSequenceFromMSADialogController.cpp" line="62"/>
         <source>File name is empty!</source>
         <translation>Имя файла пусто!</translation>
     </message>
@@ -6783,31 +7164,27 @@ Simple overview is unavailable.</source>
 <context>
     <name>U2::SecStructDialog</name>
     <message>
-        <source>OK</source>
-        <translation type="vanished">OK</translation>
-    </message>
-    <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="65"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="66"/>
         <source>Predict</source>
-        <translation type="unfinished"></translation>
+        <translation>Предсказать</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="66"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="67"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="67"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="68"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="86"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="87"/>
         <source>Region</source>
         <translation>Регион</translation>
     </message>
     <message>
-        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="87"/>
+        <location filename="../src/util_sec_struct_predict/SecStructDialog.cpp" line="88"/>
         <source>Structure Type</source>
         <translation>Тип структуры</translation>
     </message>
@@ -6834,22 +7211,12 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SelectSubalignmentDialog</name>
     <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="119"/>
-        <source>MSA Editor UI is NULL</source>
-        <translation>MSA Editor UI is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="120"/>
-        <source>MSA Editor is NULL</source>
-        <translation>MSA Editor is NULL</translation>
-    </message>
-    <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="124"/>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="123"/>
         <source>Select</source>
         <translation>Выделить</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="131"/>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="130"/>
         <source>MSA Object is NULL</source>
         <translation>MSA Object is NULL</translation>
     </message>
@@ -6868,6 +7235,11 @@ Please, load the corresponding plugins.</source>
         <source>No sequences selected</source>
         <translation>Нет выделенных последовательностей</translation>
     </message>
+    <message>
+        <location filename="../src/ov_msa/MSASelectSubalignmentDialog.cpp" line="119"/>
+        <source>Ma Editor is NULL</source>
+        <translation>Ma Editor is NULL</translation>
+    </message>
 </context>
 <context>
     <name>U2::SeqStatisticsWidget</name>
@@ -6888,6 +7260,14 @@ Please, load the corresponding plugins.</source>
     </message>
 </context>
 <context>
+    <name>U2::SequenceAreaRenderer</name>
+    <message>
+        <location filename="../src/ov_msa/view_rendering/SequenceAreaRenderer.cpp" line="55"/>
+        <source>Alignment object is NULL</source>
+        <translation>Alignment object is NULL</translation>
+    </message>
+</context>
+<context>
     <name>U2::SequenceExportSettingsWidget</name>
     <message>
         <location filename="../src/ov_sequence/image_export/SequenceExportSettingsWidget.cpp" line="39"/>
@@ -6910,7 +7290,7 @@ Please, load the corresponding plugins.</source>
     <message>
         <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="102"/>
         <source>Characters Occurrence</source>
-        <translation>Characters Occurrence</translation>
+        <translation>Нуклеотиды</translation>
     </message>
     <message>
         <location filename="../src/ov_sequence/sequence_info/SequenceInfo.cpp" line="110"/>
@@ -6934,14 +7314,47 @@ Please, load the corresponding plugins.</source>
     </message>
 </context>
 <context>
+    <name>U2::SequenceObjectContext</name>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="213"/>
+        <source>Incorrect signal sender!</source>
+        <translation>Incorrect signal sender!</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="222"/>
+        <source>Select genetic code</source>
+        <translation>Выбрать генетический код</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="234"/>
+        <source>Show/hide amino acid translations</source>
+        <translation>Показать/скрыть амино трансляции</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="242"/>
+        <source>Show direct only</source>
+        <translation>Показать только прямую</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="243"/>
+        <source>Show complementary only</source>
+        <translation>Показать только комплементарную</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_sequence/SequenceObjectContext.cpp" line="244"/>
+        <source>Show all</source>
+        <translation>Показать все</translation>
+    </message>
+</context>
+<context>
     <name>U2::SimpleTextObjectViewFactory</name>
     <message>
-        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="79"/>
+        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="74"/>
         <source>Open multiple views task</source>
         <translation>Открытие нескольких окон</translation>
     </message>
     <message>
-        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="53"/>
+        <location filename="../src/ov_text/SimpleTextObjectView.cpp" line="48"/>
         <source>Text editor</source>
         <translation>Текстовый редактор</translation>
     </message>
@@ -6983,113 +7396,113 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SmithWatermanDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="92"/>
         <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="93"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="94"/>
         <source>No substitution matrices found.</source>
         <translation>Не найдены матрицы подстановки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="76"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
         <source>Remote run</source>
         <translation>Удаленный запуск</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="77"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="78"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="79"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="100"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="101"/>
         <source>No filter registry found.</source>
         <translation>No filter registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="107"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="108"/>
         <source>No result names tag registry found.</source>
         <translation>No result names tag registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="114"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="115"/>
         <source>No algorithm registry found.</source>
         <translation>No algorithm registry found.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="284"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="285"/>
         <source>Enter pattern here</source>
         <translation>Введите паттерн</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="286"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="287"/>
         <source>Pattern length: %1</source>
         <translation>Длина паттерна: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="325"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="326"/>
         <source>Add qualifier with corresponding pattern subsequences to result annotations</source>
-        <translation>Добавьте квалификатор с соответствующими подпоследовательностями для результирующих аннотаций</translation>
+        <translation>Добавить квалификатор с соответствующими подпоследовательностями</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="420"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="421"/>
         <source>Choose folder</source>
         <translation>Выбор папки</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="432"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="433"/>
         <source>Matrix not found.</source>
         <translation>Не найдена матрица подстановки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="483"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="484"/>
         <source>Cannot create an annotation object. Please check settings.</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="508"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="511"/>
         <source>SmithWatermanTask</source>
         <translation>Поиск алгоритмом Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="551"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="554"/>
         <source>Names of result alignment files or names of result subsequences cannot be empty.</source>
         <translation>Имена файлов выравнивания или имена подпоследовательностей не могут быть пустыми.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="581"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="584"/>
         <source>Algorithm is not found.</source>
         <translation>Алгоритм не найден.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="594"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="597"/>
         <source>Matrix %1 is not found.</source>
         <translation>Матрица %1 не найдена.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="627"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="630"/>
         <source>Filter is not found.</source>
         <translation>Фильтр не найден.</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="644"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="647"/>
         <source>Internal error</source>
         <translation>Внутренняя ошибка</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="652"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="655"/>
         <source>Pattern is empty</source>
         <translation>Не указан паттерн</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="664"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="667"/>
         <source>Pattern contains unknown symbol</source>
         <translation>Паттерн содержит символы не входящие в алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="569"/>
+        <location filename="../src/util_smith_waterman/SmithWatermanDialog.cpp" line="572"/>
         <source>Complement translation is not found.</source>
         <translation>Комплементарная трансляция не найдена.</translation>
     </message>
@@ -7097,7 +7510,7 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SubalignmentToClipboardTask</name>
     <message>
-        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="242"/>
+        <location filename="../src/ov_msa/Clipboard/SubalignmentToClipboardTask.cpp" line="239"/>
         <source>Copy formatted alignment to the clipboard</source>
         <translation>Copy formatted alignment to the clipboard</translation>
     </message>
@@ -7105,22 +7518,22 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::SubstMatrixDialog</name>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="46"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="39"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="48"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="41"/>
         <source>Scoring Matrix: %1</source>
         <translation>Матрица оценок: %1</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="52"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="45"/>
         <source>min score:</source>
         <translation>минимальная оценка:</translation>
     </message>
     <message>
-        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="53"/>
+        <location filename="../src/util_smith_waterman/SubstMatrixDialog.cpp" line="46"/>
         <source>max score:</source>
         <translation>максимальная оценка:</translation>
     </message>
@@ -7128,12 +7541,12 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::TextSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="41"/>
+        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="37"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="42"/>
+        <location filename="../src/phyltree/TextSettingsDialog.cpp" line="38"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -7141,37 +7554,61 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::TreeOptionsWidget</name>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="124"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="116"/>
         <source>General</source>
         <translation>Основные</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="126"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="118"/>
         <source>Labels</source>
         <translation>Названия</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="128"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="120"/>
         <source>Scale Bar</source>
         <translation>Шкала</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="130"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="122"/>
         <source>Branches</source>
         <translation>Ветви</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="136"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="314"/>
+        <source>Hide font settings</source>
+        <translation>Скрыть настройки шрифта</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="136"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="314"/>
+        <source>Show font settings</source>
+        <translation>Показать настройки шрифта</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="138"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="321"/>
+        <source>Hide pen settings</source>
+        <translation>Скрыть настройки пера</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="138"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="321"/>
+        <source>Show pen settings</source>
+        <translation>Показать настройки пера</translation>
+    </message>
+    <message>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Rectangular</source>
         <translation>Прямоугольное</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Circular</source>
         <translation>Круговое</translation>
     </message>
     <message>
-        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="258"/>
+        <location filename="../src/ov_msa/TreeOptions/TreeOptionsWidget.cpp" line="250"/>
         <source>Unrooted</source>
         <translation>Неукорененное</translation>
     </message>
@@ -7179,27 +7616,27 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::TreeSettingsDialog</name>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="34"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="35"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="35"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="36"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="92"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="93"/>
         <source>Default</source>
         <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="95"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="96"/>
         <source>Phylogram</source>
         <translation>Филограмма</translation>
     </message>
     <message>
-        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="98"/>
+        <location filename="../src/phyltree/TreeSettingsDialog.cpp" line="99"/>
         <source>Cladogram</source>
         <translation>Кладограмма</translation>
     </message>
@@ -7344,22 +7781,22 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::WindowStepSelectorDialog</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="161"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="179"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="162"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="180"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="171"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="189"/>
         <source>Graph Settings</source>
         <translation>Настройки графика</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="196"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="214"/>
         <source>Error!</source>
         <translation>Ошибка!</translation>
     </message>
@@ -7367,22 +7804,22 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::WindowStepSelectorWidget</name>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="58"/>
-        <source>Window:</source>
-        <translation>Окно:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="53"/>
+        <source>Window</source>
+        <translation>Окно</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="84"/>
-        <source>Invalid step value</source>
-        <translation>Недопустимая величина шага</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="54"/>
+        <source>Steps per window</source>
+        <translation>Шагов на окно</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="59"/>
-        <source>Steps per window:</source>
-        <translation>Шагов на окно:</translation>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="78"/>
+        <source>Invalid step value</source>
+        <translation>Недопустимая величина шага</translation>
     </message>
     <message>
-        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="79"/>
+        <location filename="../src/ov_sequence/WindowStepSelectorWidget.cpp" line="73"/>
         <source>Illegal step value</source>
         <translation>Некорректная величина шага</translation>
     </message>
@@ -7390,38 +7827,38 @@ Please, load the corresponding plugins.</source>
 <context>
     <name>U2::ZoomableAssemblyOverview</name>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="75"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="67"/>
         <source>Zoom in</source>
         <translation>Приблизить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="76"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="68"/>
         <source>Zoom out</source>
         <translation>Отдалить</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="77"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="69"/>
         <source>Zoom in 100x</source>
         <translation>Увеличить в 100 раз</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="78"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="70"/>
         <source>Restore global overview</source>
         <translation>Восстановить глобальную панораму</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="79"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="71"/>
         <source>Export coverage...</source>
         <translation>Экспортировать покрытие...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="127"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="121"/>
         <source>Background is rendering...</source>
         <translation>Фон рассчитывается...</translation>
     </message>
     <message>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="305"/>
-        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="327"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="300"/>
+        <location filename="../src/ov_assembly/ZoomableAssemblyOverview.cpp" line="322"/>
         <source>%1 to %2 (%3 bp)</source>
         <translation>%1 в %2 (%3 нукл.)</translation>
     </message>
diff --git a/src/include/U2Algorithm/MAlignmentUtilTasks.h b/src/include/U2Algorithm/MAlignmentUtilTasks.h
deleted file mode 100644
index 3d01141..0000000
--- a/src/include/U2Algorithm/MAlignmentUtilTasks.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Algorithm/src/util_msaedit/MAlignmentUtilTasks.h"
diff --git a/src/include/U2Algorithm/MsaUtilTasks.h b/src/include/U2Algorithm/MsaUtilTasks.h
new file mode 100644
index 0000000..4b2dce8
--- /dev/null
+++ b/src/include/U2Algorithm/MsaUtilTasks.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Algorithm/src/util_msaedit/MsaUtilTasks.h"
diff --git a/src/include/U2Core/ChromatogramUtils.h b/src/include/U2Core/ChromatogramUtils.h
new file mode 100644
index 0000000..d8c3c34
--- /dev/null
+++ b/src/include/U2Core/ChromatogramUtils.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/ChromatogramUtils.h"
diff --git a/src/include/U2Core/CopyFileTask.h b/src/include/U2Core/CopyFileTask.h
new file mode 100644
index 0000000..c275b7d
--- /dev/null
+++ b/src/include/U2Core/CopyFileTask.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/tasks/CopyFileTask.h"
diff --git a/src/include/U2Core/DbiConnection.h b/src/include/U2Core/DbiConnection.h
old mode 100644
new mode 100755
diff --git a/src/include/U2Core/DnaChromatogramUtils.h b/src/include/U2Core/DnaChromatogramUtils.h
new file mode 100644
index 0000000..477ed59
--- /dev/null
+++ b/src/include/U2Core/DnaChromatogramUtils.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/DnaChromatogramUtils.h"
diff --git a/src/include/U2Core/MAlignment.h b/src/include/U2Core/MAlignment.h
deleted file mode 100644
index 1909d92..0000000
--- a/src/include/U2Core/MAlignment.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/datatype/MAlignment.h"
diff --git a/src/include/U2Core/MAlignmentExporter.h b/src/include/U2Core/MAlignmentExporter.h
deleted file mode 100644
index 2ada26e..0000000
--- a/src/include/U2Core/MAlignmentExporter.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/util/MAlignmentExporter.h"
diff --git a/src/include/U2Core/MAlignmentImporter.h b/src/include/U2Core/MAlignmentImporter.h
deleted file mode 100644
index 1ce7c3c..0000000
--- a/src/include/U2Core/MAlignmentImporter.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/util/MAlignmentImporter.h"
diff --git a/src/include/U2Core/MAlignmentInfo.h b/src/include/U2Core/MAlignmentInfo.h
deleted file mode 100644
index 110ffbb..0000000
--- a/src/include/U2Core/MAlignmentInfo.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/datatype/MAlignmentInfo.h"
diff --git a/src/include/U2Core/MAlignmentObject.h b/src/include/U2Core/MAlignmentObject.h
deleted file mode 100644
index e9bf1b8..0000000
--- a/src/include/U2Core/MAlignmentObject.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/gobjects/MAlignmentObject.h"
diff --git a/src/include/U2Core/MAlignmentWalker.h b/src/include/U2Core/MAlignmentWalker.h
deleted file mode 100644
index c9623c3..0000000
--- a/src/include/U2Core/MAlignmentWalker.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Core/src/util/MAlignmentWalker.h"
diff --git a/src/include/U2Core/MaIterator.h b/src/include/U2Core/MaIterator.h
new file mode 100644
index 0000000..4d60b20
--- /dev/null
+++ b/src/include/U2Core/MaIterator.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MaIterator.h"
diff --git a/src/include/U2Core/MaModificationInfo.h b/src/include/U2Core/MaModificationInfo.h
new file mode 100644
index 0000000..e2fc6d0
--- /dev/null
+++ b/src/include/U2Core/MaModificationInfo.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MaModificationInfo.h"
diff --git a/src/include/U2Core/McaDbiUtils.h b/src/include/U2Core/McaDbiUtils.h
new file mode 100644
index 0000000..48e1af7
--- /dev/null
+++ b/src/include/U2Core/McaDbiUtils.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/McaDbiUtils.h"
diff --git a/src/include/U2Core/McaRowInnerData.h b/src/include/U2Core/McaRowInnerData.h
new file mode 100644
index 0000000..ad4b8c9
--- /dev/null
+++ b/src/include/U2Core/McaRowInnerData.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/McaRowInnerData.h"
diff --git a/src/include/U2Core/MultipleAlignment.h b/src/include/U2Core/MultipleAlignment.h
new file mode 100644
index 0000000..0283506
--- /dev/null
+++ b/src/include/U2Core/MultipleAlignment.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleAlignment.h"
diff --git a/src/include/U2Core/MultipleAlignmentInfo.h b/src/include/U2Core/MultipleAlignmentInfo.h
new file mode 100644
index 0000000..20ad486
--- /dev/null
+++ b/src/include/U2Core/MultipleAlignmentInfo.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleAlignmentInfo.h"
diff --git a/src/include/U2Core/MultipleAlignmentObject.h b/src/include/U2Core/MultipleAlignmentObject.h
new file mode 100644
index 0000000..69e3e09
--- /dev/null
+++ b/src/include/U2Core/MultipleAlignmentObject.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/gobjects/MultipleAlignmentObject.h"
diff --git a/src/include/U2Core/MultipleAlignmentRowInfo.h b/src/include/U2Core/MultipleAlignmentRowInfo.h
new file mode 100644
index 0000000..ac64317
--- /dev/null
+++ b/src/include/U2Core/MultipleAlignmentRowInfo.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleAlignmentRowInfo.h"
diff --git a/src/include/U2Core/MultipleChromatogramAlignment.h b/src/include/U2Core/MultipleChromatogramAlignment.h
new file mode 100644
index 0000000..0fedd0b
--- /dev/null
+++ b/src/include/U2Core/MultipleChromatogramAlignment.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignment.h"
diff --git a/src/include/U2Core/MultipleChromatogramAlignmentExporter.h b/src/include/U2Core/MultipleChromatogramAlignmentExporter.h
new file mode 100644
index 0000000..df4dac0
--- /dev/null
+++ b/src/include/U2Core/MultipleChromatogramAlignmentExporter.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MultipleChromatogramAlignmentExporter.h"
diff --git a/src/include/U2Core/MultipleChromatogramAlignmentImporter.h b/src/include/U2Core/MultipleChromatogramAlignmentImporter.h
new file mode 100644
index 0000000..a5e8ff0
--- /dev/null
+++ b/src/include/U2Core/MultipleChromatogramAlignmentImporter.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MultipleChromatogramAlignmentImporter.h"
diff --git a/src/include/U2Core/MultipleChromatogramAlignmentObject.h b/src/include/U2Core/MultipleChromatogramAlignmentObject.h
new file mode 100644
index 0000000..600079e
--- /dev/null
+++ b/src/include/U2Core/MultipleChromatogramAlignmentObject.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/gobjects/MultipleChromatogramAlignmentObject.h"
diff --git a/src/include/U2Core/MultipleChromatogramAlignmentRow.h b/src/include/U2Core/MultipleChromatogramAlignmentRow.h
new file mode 100644
index 0000000..e847d9d
--- /dev/null
+++ b/src/include/U2Core/MultipleChromatogramAlignmentRow.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleChromatogramAlignmentRow.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignment.h b/src/include/U2Core/MultipleSequenceAlignment.h
new file mode 100644
index 0000000..1030011
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignment.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignment.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentExporter.h b/src/include/U2Core/MultipleSequenceAlignmentExporter.h
new file mode 100644
index 0000000..9a4a489
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentExporter.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MultipleSequenceAlignmentExporter.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentImporter.h b/src/include/U2Core/MultipleSequenceAlignmentImporter.h
new file mode 100644
index 0000000..235e130
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentImporter.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MultipleSequenceAlignmentImporter.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentInfo.h b/src/include/U2Core/MultipleSequenceAlignmentInfo.h
new file mode 100644
index 0000000..5e15157
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentInfo.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentInfo.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentObject.h b/src/include/U2Core/MultipleSequenceAlignmentObject.h
new file mode 100644
index 0000000..3bc3b71
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentObject.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/gobjects/MultipleSequenceAlignmentObject.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentRow.h b/src/include/U2Core/MultipleSequenceAlignmentRow.h
new file mode 100644
index 0000000..d01096f
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentRow.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/datatype/msa/MultipleSequenceAlignmentRow.h"
diff --git a/src/include/U2Core/MultipleSequenceAlignmentWalker.h b/src/include/U2Core/MultipleSequenceAlignmentWalker.h
new file mode 100644
index 0000000..53e8dc4
--- /dev/null
+++ b/src/include/U2Core/MultipleSequenceAlignmentWalker.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/MultipleSequenceAlignmentWalker.h"
diff --git a/src/include/U2Core/QObjectScopedPointer.h b/src/include/U2Core/QObjectScopedPointer.h
old mode 100644
new mode 100755
diff --git a/src/include/U2Core/SignalBlocker.h b/src/include/U2Core/SignalBlocker.h
new file mode 100644
index 0000000..cce6d70
--- /dev/null
+++ b/src/include/U2Core/SignalBlocker.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/SignalBlocker.h"
\ No newline at end of file
diff --git a/src/include/U2Core/StrPackUtils.h b/src/include/U2Core/StrPackUtils.h
new file mode 100644
index 0000000..682a1f2
--- /dev/null
+++ b/src/include/U2Core/StrPackUtils.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Core/src/util/StrPackUtils.h"
diff --git a/src/include/U2Core/U2Mca.h b/src/include/U2Core/U2Mca.h
new file mode 100644
index 0000000..9b951d0
--- /dev/null
+++ b/src/include/U2Core/U2Mca.h
@@ -0,0 +1,2 @@
+#include "../../corelibs/U2Core/src/datatype/U2Mca.h"
+
diff --git a/src/include/U2Formats/AprFormat.h b/src/include/U2Formats/AprFormat.h
new file mode 100644
index 0000000..7a31357
--- /dev/null
+++ b/src/include/U2Formats/AprFormat.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Formats/src/apr/AprFormat.h"
diff --git a/src/include/U2Formats/AprImporter.h b/src/include/U2Formats/AprImporter.h
new file mode 100644
index 0000000..35ae18e
--- /dev/null
+++ b/src/include/U2Formats/AprImporter.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Formats/src/apr/AprImporter.h"
\ No newline at end of file
diff --git a/src/include/U2Gui/GroupedComboBoxDelegate.h b/src/include/U2Gui/GroupedComboBoxDelegate.h
new file mode 100644
index 0000000..cbd088d
--- /dev/null
+++ b/src/include/U2Gui/GroupedComboBoxDelegate.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/GroupedComboBoxDelegate.h"
diff --git a/src/include/U2Gui/ImportDialogsFactories.h b/src/include/U2Gui/ImportDialogsFactories.h
deleted file mode 100644
index 856f37a..0000000
--- a/src/include/U2Gui/ImportDialogsFactories.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2Gui/src/util/ImportDialogsFactories.h"
diff --git a/src/include/U2Gui/ImportWidget.h b/src/include/U2Gui/ImportWidget.h
new file mode 100644
index 0000000..c350faf
--- /dev/null
+++ b/src/include/U2Gui/ImportWidget.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/ImportWidgets/ImportWidget.h"
diff --git a/src/include/U2Gui/ImportWidgetsFactories.h b/src/include/U2Gui/ImportWidgetsFactories.h
new file mode 100644
index 0000000..5ac0d67
--- /dev/null
+++ b/src/include/U2Gui/ImportWidgetsFactories.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/ImportWidgetsFactories.h"
diff --git a/src/include/U2Gui/SearchBox.h b/src/include/U2Gui/SearchBox.h
new file mode 100644
index 0000000..598698d
--- /dev/null
+++ b/src/include/U2Gui/SearchBox.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2Gui/src/util/SearchBox.h"
diff --git a/src/include/U2View/BaseWidthController.h b/src/include/U2View/BaseWidthController.h
new file mode 100644
index 0000000..adcc9b0
--- /dev/null
+++ b/src/include/U2View/BaseWidthController.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/helpers/BaseWidthController.h"
diff --git a/src/include/U2View/DrawHelper.h b/src/include/U2View/DrawHelper.h
new file mode 100644
index 0000000..393c94b
--- /dev/null
+++ b/src/include/U2View/DrawHelper.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/helpers/DrawHelper.h"
diff --git a/src/include/U2View/MSAColorScheme.h b/src/include/U2View/MSAColorScheme.h
deleted file mode 100644
index 5665288..0000000
--- a/src/include/U2View/MSAColorScheme.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAColorScheme.h"
diff --git a/src/include/U2View/MSAEditorFactory.h b/src/include/U2View/MSAEditorFactory.h
deleted file mode 100644
index 5b069ab..0000000
--- a/src/include/U2View/MSAEditorFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorFactory.h"
diff --git a/src/include/U2View/MSAEditorNameList.h b/src/include/U2View/MSAEditorNameList.h
deleted file mode 100644
index abab961..0000000
--- a/src/include/U2View/MSAEditorNameList.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorNameList.h"
diff --git a/src/include/U2View/MSAEditorStatusBar.h b/src/include/U2View/MSAEditorStatusBar.h
deleted file mode 100644
index 942be6a..0000000
--- a/src/include/U2View/MSAEditorStatusBar.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorStatusBar.h"
diff --git a/src/include/U2View/MSAEditorTasks.h b/src/include/U2View/MSAEditorTasks.h
deleted file mode 100644
index a6a4999..0000000
--- a/src/include/U2View/MSAEditorTasks.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorTasks.h"
diff --git a/src/include/U2View/MSAEditorTreeViewer.h b/src/include/U2View/MSAEditorTreeViewer.h
old mode 100644
new mode 100755
diff --git a/src/include/U2View/MSAEditorUndoFramework.h b/src/include/U2View/MSAEditorUndoFramework.h
deleted file mode 100644
index 9baad76..0000000
--- a/src/include/U2View/MSAEditorUndoFramework.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/MSAEditorUndoFramework.h"
diff --git a/src/include/U2View/MSAExportConsensusTabFactory.h b/src/include/U2View/MSAExportConsensusTabFactory.h
deleted file mode 100644
index 81a6008..0000000
--- a/src/include/U2View/MSAExportConsensusTabFactory.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/ExportConsensus/MSAExportConsensusTabFactory.h"
diff --git a/src/include/U2View/MSAGraphOverview.h b/src/include/U2View/MSAGraphOverview.h
deleted file mode 100644
index d23fab2..0000000
--- a/src/include/U2View/MSAGraphOverview.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/Overview/MSAGraphOverview.h"
diff --git a/src/include/U2View/MSASimpleOverview.h b/src/include/U2View/MSASimpleOverview.h
deleted file mode 100644
index f263525..0000000
--- a/src/include/U2View/MSASimpleOverview.h
+++ /dev/null
@@ -1 +0,0 @@
-#include "../../corelibs/U2View/src/ov_msa/Overview/MSASimpleOverview.h"
diff --git a/src/include/U2View/MaEditorFactory.h b/src/include/U2View/MaEditorFactory.h
new file mode 100644
index 0000000..1d9b91c
--- /dev/null
+++ b/src/include/U2View/MaEditorFactory.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MaEditorFactory.h"
diff --git a/src/include/U2View/MaEditorNameList.h b/src/include/U2View/MaEditorNameList.h
new file mode 100644
index 0000000..ce80d56
--- /dev/null
+++ b/src/include/U2View/MaEditorNameList.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MaEditorNameList.h"
diff --git a/src/include/U2View/MaEditorStatusBar.h b/src/include/U2View/MaEditorStatusBar.h
new file mode 100644
index 0000000..03522ba
--- /dev/null
+++ b/src/include/U2View/MaEditorStatusBar.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MaEditorStatusBar.h"
diff --git a/src/include/U2View/MaEditorTasks.h b/src/include/U2View/MaEditorTasks.h
new file mode 100644
index 0000000..4de8f63
--- /dev/null
+++ b/src/include/U2View/MaEditorTasks.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MaEditorTasks.h"
diff --git a/src/include/U2View/MaExportConsensusTabFactory.h b/src/include/U2View/MaExportConsensusTabFactory.h
new file mode 100644
index 0000000..0f24f0c
--- /dev/null
+++ b/src/include/U2View/MaExportConsensusTabFactory.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/ExportConsensus/MaExportConsensusTabFactory.h"
diff --git a/src/include/U2View/MaGraphOverview.h b/src/include/U2View/MaGraphOverview.h
new file mode 100644
index 0000000..5fb689f
--- /dev/null
+++ b/src/include/U2View/MaGraphOverview.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/Overview/MaGraphOverview.h"
diff --git a/src/include/U2View/MaSimpleOverview.h b/src/include/U2View/MaSimpleOverview.h
new file mode 100644
index 0000000..a1cbdca
--- /dev/null
+++ b/src/include/U2View/MaSimpleOverview.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/Overview/MaSimpleOverview.h"
diff --git a/src/include/U2View/McaEditor.h b/src/include/U2View/McaEditor.h
new file mode 100644
index 0000000..489810c
--- /dev/null
+++ b/src/include/U2View/McaEditor.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditor.h"
diff --git a/src/include/U2View/McaEditorConsensusArea.h b/src/include/U2View/McaEditorConsensusArea.h
new file mode 100644
index 0000000..447124d
--- /dev/null
+++ b/src/include/U2View/McaEditorConsensusArea.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorConsensusArea.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaEditorNameList.h b/src/include/U2View/McaEditorNameList.h
new file mode 100644
index 0000000..e472322
--- /dev/null
+++ b/src/include/U2View/McaEditorNameList.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorNameList.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaEditorOverviewArea.h b/src/include/U2View/McaEditorOverviewArea.h
new file mode 100644
index 0000000..5c75ea8
--- /dev/null
+++ b/src/include/U2View/McaEditorOverviewArea.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorOverviewArea.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaEditorReferenceArea.h b/src/include/U2View/McaEditorReferenceArea.h
new file mode 100644
index 0000000..503c4c8
--- /dev/null
+++ b/src/include/U2View/McaEditorReferenceArea.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorReferenceArea.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaEditorSequenceArea.h b/src/include/U2View/McaEditorSequenceArea.h
new file mode 100644
index 0000000..1ce9f05
--- /dev/null
+++ b/src/include/U2View/McaEditorSequenceArea.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorSequenceArea.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaEditorWgt.h b/src/include/U2View/McaEditorWgt.h
new file mode 100644
index 0000000..c5baafc
--- /dev/null
+++ b/src/include/U2View/McaEditorWgt.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/McaEditorWgt.h"
\ No newline at end of file
diff --git a/src/include/U2View/McaGeneralTabFactory.h b/src/include/U2View/McaGeneralTabFactory.h
new file mode 100644
index 0000000..138090a
--- /dev/null
+++ b/src/include/U2View/McaGeneralTabFactory.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/General/McaGeneralTabFactory.h"
diff --git a/src/include/U2View/MsaEditorWgt.h b/src/include/U2View/MsaEditorWgt.h
new file mode 100644
index 0000000..8a90b34
--- /dev/null
+++ b/src/include/U2View/MsaEditorWgt.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/MsaEditorWgt.h"
diff --git a/src/include/U2View/PanViewRenderer.h b/src/include/U2View/PanViewRenderer.h
new file mode 100644
index 0000000..0606ad5
--- /dev/null
+++ b/src/include/U2View/PanViewRenderer.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_sequence/view_rendering/PanViewRenderer.h"
\ No newline at end of file
diff --git a/src/include/U2View/RowHeightController.h b/src/include/U2View/RowHeightController.h
new file mode 100644
index 0000000..447ae9a
--- /dev/null
+++ b/src/include/U2View/RowHeightController.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/helpers/RowHeightController.h"
diff --git a/src/include/U2View/ScrollController.h b/src/include/U2View/ScrollController.h
new file mode 100644
index 0000000..4d16df7
--- /dev/null
+++ b/src/include/U2View/ScrollController.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_msa/helpers/ScrollController.h"
diff --git a/src/include/U2View/SequenceObjectContext.h b/src/include/U2View/SequenceObjectContext.h
new file mode 100644
index 0000000..46d7f7e
--- /dev/null
+++ b/src/include/U2View/SequenceObjectContext.h
@@ -0,0 +1 @@
+#include "../../corelibs/U2View/src/ov_sequence/SequenceObjectContext.h"
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
index d37fdeb..eaff418 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
+++ b/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
@@ -40,15 +40,15 @@ namespace google_breakpad {
 
 #if defined(__i386__)
 
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.gregs[REG_ESP];
 }
 
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.gregs[REG_EIP];
 }
 
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
                                     const struct _libc_fpstate* fp) {
   const greg_t* regs = uc->uc_mcontext.gregs;
 
@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
 
 #elif defined(__x86_64)
 
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.gregs[REG_RSP];
 }
 
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.gregs[REG_RIP];
 }
 
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
                                     const struct _libc_fpstate* fpregs) {
   const greg_t* regs = uc->uc_mcontext.gregs;
 
@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
 
 #elif defined(__ARM_EABI__)
 
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.arm_sp;
 }
 
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.arm_pc;
 }
 
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
   out->context_flags = MD_CONTEXT_ARM_FULL;
 
   out->iregs[0] = uc->uc_mcontext.arm_r0;
@@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
 
 #elif defined(__aarch64__)
 
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.sp;
 }
 
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.pc;
 }
 
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
                                     const struct fpsimd_context* fpregs) {
   out->context_flags = MD_CONTEXT_ARM64_FULL;
 
@@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc,
 
 #elif defined(__mips__)
 
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP];
 }
 
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) {
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) {
   return uc->uc_mcontext.pc;
 }
 
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) {
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
   out->context_flags = MD_CONTEXT_MIPS_FULL;
 
   for (int i = 0; i < MD_CONTEXT_MIPS_GPR_COUNT; ++i)
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h b/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
index b6e77b4..2369a9a 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
+++ b/src/libs_3rdparty/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h
@@ -41,21 +41,21 @@ namespace google_breakpad {
 
 // Wraps platform-dependent implementations of accessors to ucontext structs.
 struct UContextReader {
-  static uintptr_t GetStackPointer(const struct ucontext* uc);
+  static uintptr_t GetStackPointer(const ucontext_t* uc);
 
-  static uintptr_t GetInstructionPointer(const struct ucontext* uc);
+  static uintptr_t GetInstructionPointer(const ucontext_t* uc);
 
   // Juggle a arch-specific ucontext into a minidump format
   //   out: the minidump structure
   //   info: the collection of register structures.
 #if defined(__i386__) || defined(__x86_64)
-  static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
+  static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
                              const struct _libc_fpstate* fp);
 #elif defined(__aarch64__)
-  static void FillCPUContext(RawContextCPU *out, const ucontext *uc,
+  static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc,
                              const struct fpsimd_context* fpregs);
 #else
-  static void FillCPUContext(RawContextCPU *out, const ucontext *uc);
+  static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc);
 #endif
 };
 
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc b/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc
index dca7e7f..c3157a0 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc
+++ b/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.cc
@@ -423,9 +423,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) {
   // Fill in all the holes in the struct to make Valgrind happy.
   memset(&context, 0, sizeof(context));
   memcpy(&context.siginfo, info, sizeof(siginfo_t));
-  memcpy(&context.context, uc, sizeof(struct ucontext));
+  memcpy(&context.context, uc, sizeof(ucontext_t));
 #if defined(__aarch64__)
-  struct ucontext *uc_ptr = (struct ucontext*)uc;
+  ucontext_t *uc_ptr = (ucontext_t*)uc;
   struct fpsimd_context *fp_ptr =
       (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved;
   if (fp_ptr->head.magic == FPSIMD_MAGIC) {
@@ -435,7 +435,7 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) {
   // FP state is not part of user ABI on ARM Linux.
   // In case of MIPS Linux FP state is already part of struct ucontext
   // and 'float_state' is not a member of CrashContext.
-  struct ucontext *uc_ptr = (struct ucontext*)uc;
+  ucontext_t *uc_ptr = (ucontext_t*)uc;
   if (uc_ptr->uc_mcontext.fpregs) {
     memcpy(&context.float_state,
            uc_ptr->uc_mcontext.fpregs,
@@ -459,7 +459,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) {
   // ExceptionHandler::HandleSignal().
   siginfo.si_code = SI_USER;
   siginfo.si_pid = getpid();
-  struct ucontext context;
+  ucontext_t context;
   getcontext(&context);
   return HandleSignal(sig, &siginfo, &context);
 }
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.h b/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.h
index 591c310..846df77 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.h
+++ b/src/libs_3rdparty/breakpad/src/client/linux/handler/exception_handler.h
@@ -191,7 +191,7 @@ class ExceptionHandler {
   struct CrashContext {
     siginfo_t siginfo;
     pid_t tid;  // the crashing thread.
-    struct ucontext context;
+    ucontext_t context;
 #if !defined(__ARM_EABI__) && !defined(__mips__)
     // #ifdef this out because FP state is not part of user ABI for Linux ARM.
     // In case of MIPS Linux FP state is already part of struct
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/handler/minidump_descriptor.h b/src/libs_3rdparty/breakpad/src/client/linux/handler/minidump_descriptor.h
index 3584c69..0cc38c7 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/handler/minidump_descriptor.h
+++ b/src/libs_3rdparty/breakpad/src/client/linux/handler/minidump_descriptor.h
@@ -38,7 +38,7 @@
 #include "common/using_std_string.h"
 
 // This class describes how a crash dump should be generated, either:
-// - Writing a full minidump to a file in a given directory (the actual path,
+// - Writing a full minidump to a file in a given folder (the actual path,
 //   inside the directory, is determined by this class).
 // - Writing a full minidump to a given fd.
 // - Writing a reduced microdump to the console (logcat on Android).
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc b/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
index 247387e..f29a569 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
+++ b/src/libs_3rdparty/breakpad/src/client/linux/microdump_writer/microdump_writer.cc
@@ -382,7 +382,7 @@ class MicrodumpWriter {
 
   void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); }
 
-  const struct ucontext* const ucontext_;
+  const ucontext_t* const ucontext_;
 #if !defined(__ARM_EABI__) && !defined(__mips__)
   const google_breakpad::fpstate_t* const float_state_;
 #endif
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/directory_reader.h b/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/directory_reader.h
index a4bde18..dc1867c 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/directory_reader.h
+++ b/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/directory_reader.h
@@ -42,7 +42,7 @@
 
 namespace google_breakpad {
 
-// A class for enumerating a directory without using diropen/readdir or other
+// A class for enumerating a folder without using diropen/readdir or other
 // functions which may allocate memory.
 class DirectoryReader {
  public:
@@ -51,7 +51,7 @@ class DirectoryReader {
         buf_used_(0) {
   }
 
-  // Return the next entry from the directory
+  // Return the next entry from the folder
   //   name: (output) the NUL terminated entry name
   //
   // Returns true iff successful (false on EOF).
diff --git a/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc b/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
index 9c1db99..3e8f28e 100644
--- a/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
+++ b/src/libs_3rdparty/breakpad/src/client/linux/minidump_writer/minidump_writer.cc
@@ -1244,7 +1244,7 @@ class MinidumpWriter {
   const int fd_;  // File descriptor where the minidum should be written.
   const char* path_;  // Path to the file where the minidum should be written.
 
-  const struct ucontext* const ucontext_;  // also from the signal handler
+  const ucontext_t* const ucontext_;  // also from the signal handler
 #if !defined(__ARM_EABI__) && !defined(__mips__)
   const google_breakpad::fpstate_t* const float_state_;  // ditto
 #endif
diff --git a/src/libs_3rdparty/breakpad/src/client/mac/handler/exception_handler.h b/src/libs_3rdparty/breakpad/src/client/mac/handler/exception_handler.h
index 9336a23..174ae47 100644
--- a/src/libs_3rdparty/breakpad/src/client/mac/handler/exception_handler.h
+++ b/src/libs_3rdparty/breakpad/src/client/mac/handler/exception_handler.h
@@ -214,7 +214,7 @@ class ExceptionHandler {
   bool SuspendThreads();
   bool ResumeThreads();
 
-  // The destination directory for the minidump
+  // The destination folder for the minidump
   string dump_path_;
 
   // The basename of the next minidump w/o extension
diff --git a/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.cc b/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.cc
index 358e490..a26a8a4 100644
--- a/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.cc
+++ b/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.cc
@@ -537,8 +537,8 @@ LONG ExceptionHandler::HandleException(EXCEPTION_POINTERS* exinfo) {
 
 #if _MSC_VER >= 1400  // MSVC 2005/8
 
-#ifndef STATUS_INVALID_PARAMETER
-#define STATUS_INVALID_PARAMETER ((DWORD)0xC000000DL)
+#ifndef STATUS_INVALID_PARAMETER
+#define STATUS_INVALID_PARAMETER ((DWORD)0xC000000DL)
 #endif
 
 // static
diff --git a/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.h b/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.h
index 6fc3388..bf538e3 100644
--- a/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.h
+++ b/src/libs_3rdparty/breakpad/src/client/windows/handler/exception_handler.h
@@ -69,7 +69,7 @@
 #include <string>
 #include <vector>
 
-#include <qglobal.h>
+#include <QtGlobal>
 
 #include "client/windows/common/ipc_protocol.h"
 #include "client/windows/crash_generation/crash_generation_client.h"
@@ -388,7 +388,7 @@ class Q_DECL_EXPORT ExceptionHandler{
 
   scoped_ptr<CrashGenerationClient> crash_generation_client_;
 
-  // The directory in which a minidump will be written, set by the dump_path
+  // The folder in which a minidump will be written, set by the dump_path
   // argument to the constructor, or set_dump_path.
   wstring dump_path_;
 
diff --git a/src/libs_3rdparty/qscore/src/QScoreAdapter.cpp b/src/libs_3rdparty/qscore/src/QScoreAdapter.cpp
index d90134c..8b0c164 100644
--- a/src/libs_3rdparty/qscore/src/QScoreAdapter.cpp
+++ b/src/libs_3rdparty/qscore/src/QScoreAdapter.cpp
@@ -5,26 +5,26 @@ extern double QScore(MSA_QScore* _msaTest, MSA_QScore* _msaRef);
 
 namespace U2 {
   
-  static void convertMAlignment2MSA(MSA_QScore& muscleMSA, const MAlignment& ma){
+  static void convertMAlignment2MSA(MSA_QScore& muscleMSA, const MultipleSequenceAlignment& ma){
 
-    for (int i=0, n = ma.getNumRows(); i<n; i++) {
-      const MAlignmentRow& aseq = ma.getRow(i);
+    for (int i=0, n = ma->getNumRows(); i<n; i++) {
+      const MultipleSequenceAlignmentRow aseq = ma->getMsaRow(i);
 
-      char *sequence = new char[ma.getLength() + 1];
-      for(int position = 0;position < ma.getLength();position++) {
-          sequence[position] = aseq.charAt(position);
+      char *sequence = new char[ma->getLength() + 1];
+      for(int position = 0;position < ma->getLength();position++) {
+          sequence[position] = aseq->charAt(position);
       }
-      sequence[ma.getLength()] = '\0';
+      sequence[ma->getLength()] = '\0';
 
-      char* name = new char[aseq.getName().length() + 1];
-      memcpy(name, aseq.getName().toLocal8Bit().data(), aseq.getName().length());
-      name[aseq.getName().length()] = '\0';
+      char* name = new char[aseq->getName().length() + 1];
+      memcpy(name, aseq->getName().toLocal8Bit().data(), aseq->getName().length());
+      name[aseq->getName().length()] = '\0';
 
-      muscleMSA.AppendSeq(sequence, ma.getLength(), name);
+      muscleMSA.AppendSeq(sequence, ma->getLength(), name);
     }
   }
 
-  double QScore(const MAlignment& maTest, const MAlignment& maRef, TaskStateInfo& ti) {
+  double QScore(const MultipleSequenceAlignment& maTest, const MultipleSequenceAlignment& maRef, TaskStateInfo& ti) {
     MSA_QScore msaTest, msaRef;
     try {
       convertMAlignment2MSA(msaTest, maTest);
diff --git a/src/libs_3rdparty/qscore/src/QScoreAdapter.h b/src/libs_3rdparty/qscore/src/QScoreAdapter.h
index 115210c..15317ee 100644
--- a/src/libs_3rdparty/qscore/src/QScoreAdapter.h
+++ b/src/libs_3rdparty/qscore/src/QScoreAdapter.h
@@ -1,11 +1,11 @@
 #ifndef _U2_QSCORE_ADAPTER_H_
 #define _U2_QSCORE_ADAPTER_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
 
 namespace U2 {
-	extern double QScore(const MAlignment& maTest, const MAlignment& maRef, TaskStateInfo& ti);
+	extern double QScore(const MultipleSequenceAlignment& maTest, const MultipleSequenceAlignment& maRef, TaskStateInfo& ti);
 }
 
 #endif //_U2_QSCORE_ADAPTER_H_
diff --git a/src/libs_3rdparty/qscore/src/qscore/qscore.h b/src/libs_3rdparty/qscore/src/qscore/qscore.h
index b319214..091982f 100644
--- a/src/libs_3rdparty/qscore/src/qscore/qscore.h
+++ b/src/libs_3rdparty/qscore/src/qscore/qscore.h
@@ -16,8 +16,13 @@
 
 #define UINT_MAX 0xffffffff
 #ifdef _MSC_VER
+#  if _MSC_VER < 1900
 #include <hash_map>
 typedef stdext::hash_map<std::string, unsigned> StrToInt;
+#  else
+#include <unordered_map>
+typedef std::unordered_map<std::string, unsigned> StrToInt;
+#  endif
 #else
 #include <ext/hash_map>
 #define HASH_MAP	
diff --git a/src/libs_3rdparty/qscore/src/qscore/sab_ids.h b/src/libs_3rdparty/qscore/src/qscore/sab_ids.h
index e1d2759..30af566 100644
--- a/src/libs_3rdparty/qscore/src/qscore/sab_ids.h
+++ b/src/libs_3rdparty/qscore/src/qscore/sab_ids.h
@@ -1,4 +1,4 @@
-char *SAB_Ids[] =
+const char *SAB_Ids[] =
 	{
 	"sf1",
 	"sf10",
diff --git a/src/libs_3rdparty/samtools/samtools.pri b/src/libs_3rdparty/samtools/samtools.pri
index cae44f7..dba40af 100644
--- a/src/libs_3rdparty/samtools/samtools.pri
+++ b/src/libs_3rdparty/samtools/samtools.pri
@@ -3,10 +3,10 @@ UGENE_RELATIVE_DESTDIR = ''
 
 TEMPLATE = lib
 CONFIG +=thread debug_and_release staticlib warn_off
-INCLUDEPATH += src src/samtools ../../include /usr/include
+INCLUDEPATH += src src/samtools ../../include
 win32 : INCLUDEPATH += src/samtools/win32
 DEFINES+="_FILE_OFFSET_BITS=64" _LARGEFILE64_SOURCE _USE_KNETFILE
-win32 : DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+win32 : DEFINES += _USE_MATH_DEFINES "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
 LIBS += -L../../_release
 
 use_bundled_zlib() {
@@ -58,6 +58,12 @@ win32-msvc2013 {
     DEFINES += NOMINMAX _XKEYCHECK_H
 }
 
+win32 {
+    !win32-msvc2015 {
+        DEFINES += "inline=__inline"
+    }
+}
+
 #unix {
 #    target.path = $$UGENE_INSTALL_DIR/$$UGENE_RELATIVE_DESTDIR
 #    INSTALLS += target
diff --git a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
index 6fad409..9c2ab70 100644
--- a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
+++ b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.h b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.h
index 7bf90b7..cde686e 100644
--- a/src/libs_3rdparty/samtools/src/SamtoolsAdapter.h
+++ b/src/libs_3rdparty/samtools/src/SamtoolsAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/libs_3rdparty/samtools/src/samtools/khash.h b/src/libs_3rdparty/samtools/src/samtools/khash.h
index a7e8056..59b1c09 100644
--- a/src/libs_3rdparty/samtools/src/samtools/khash.h
+++ b/src/libs_3rdparty/samtools/src/samtools/khash.h
@@ -115,7 +115,9 @@ typedef unsigned long long khint64_t;
 #endif
 
 #ifdef _MSC_VER
-#define inline __inline
+#  if _MSC_VER < 1900
+#    define inline __inline
+#  endif
 #endif
 
 typedef khint32_t khint_t;
diff --git a/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp b/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
index d05fb3a..b260b80 100644
--- a/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
+++ b/src/plugins/CoreTests/src/AnnotationTableObjectTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/GObject.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2FeatureType.h>
diff --git a/src/plugins/CoreTests/src/AnnotationTableObjectTest.h b/src/plugins/CoreTests/src/AnnotationTableObjectTest.h
index 8bcb3a6..b1be920 100644
--- a/src/plugins/CoreTests/src/AnnotationTableObjectTest.h
+++ b/src/plugins/CoreTests/src/AnnotationTableObjectTest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/U2Region.h>
 #include <U2Core/AnnotationTableObject.h>
 
diff --git a/src/plugins/CoreTests/src/AsnParserTests.cpp b/src/plugins/CoreTests/src/AsnParserTests.cpp
index cfe1dad..78d9e98 100644
--- a/src/plugins/CoreTests/src/AsnParserTests.cpp
+++ b/src/plugins/CoreTests/src/AsnParserTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/AsnParserTests.h b/src/plugins/CoreTests/src/AsnParserTests.h
index a813978..a6f340a 100644
--- a/src/plugins/CoreTests/src/AsnParserTests.h
+++ b/src/plugins/CoreTests/src/AsnParserTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <U2Core/IOAdapter.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/BinaryFindOpenCLTests.cpp b/src/plugins/CoreTests/src/BinaryFindOpenCLTests.cpp
index 84cb4cf..689421c 100644
--- a/src/plugins/CoreTests/src/BinaryFindOpenCLTests.cpp
+++ b/src/plugins/CoreTests/src/BinaryFindOpenCLTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,11 +21,12 @@
 
 #ifdef OPENCL_SUPPORT
 
-#include "BinaryFindOpenCLTests.h"
+#include <QDomElement>
+#include <QStringList>
 
 #include <U2Core/AppContext.h>
 
-#include <QtCore/QStringList>
+#include "BinaryFindOpenCLTests.h"
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/BinaryFindOpenCLTests.h b/src/plugins/CoreTests/src/BinaryFindOpenCLTests.h
index 7ce1c13..cf96c37 100644
--- a/src/plugins/CoreTests/src/BinaryFindOpenCLTests.h
+++ b/src/plugins/CoreTests/src/BinaryFindOpenCLTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #ifdef OPENCL_SUPPORT
 
-#include <QtCore/QVector>
+#include <QVector>
 
 #include <U2Algorithm/BinaryFindOpenCL.h>
 
diff --git a/src/plugins/CoreTests/src/BioStruct3DObjectTests.cpp b/src/plugins/CoreTests/src/BioStruct3DObjectTests.cpp
index 15a835d..c25ba67 100644
--- a/src/plugins/CoreTests/src/BioStruct3DObjectTests.cpp
+++ b/src/plugins/CoreTests/src/BioStruct3DObjectTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
@@ -438,7 +438,7 @@ void GTest_PDBFormatStressTest::init(XMLTestFormat *tf, const QDomElement& el) {
     QFileInfoList fileList  = dir.entryInfoList();
 
     if (fileList.empty()) {
-        stateInfo.setError(QString("Directory %1 is_empty").arg(dirName));
+        stateInfo.setError(QString("Folder %1 is_empty").arg(dirName));
         return;
     }
 
@@ -502,7 +502,7 @@ void GTest_ASNFormatStressTest::init(XMLTestFormat *tf, const QDomElement& el) {
     QFileInfoList fileList  = dir.entryInfoList();
 
     if (fileList.empty()) {
-        stateInfo.setError(QString("Directory %1 is_empty").arg(dirName));
+        stateInfo.setError(QString("Folder %1 is_empty").arg(dirName));
         return;
     }
 
diff --git a/src/plugins/CoreTests/src/BioStruct3DObjectTests.h b/src/plugins/CoreTests/src/BioStruct3DObjectTests.h
index a283bed..551b66a 100644
--- a/src/plugins/CoreTests/src/BioStruct3DObjectTests.h
+++ b/src/plugins/CoreTests/src/BioStruct3DObjectTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 #define _U2_BIOSTRUCT3D_OBJECT_TESTS_H_
 
 #include <U2Test/XMLTestUtils.h>
-#include <QtXml/QDomElement>
-#include <QtCore/QHash>
+#include <QDomElement>
+#include <QHash>
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/CMDLineTests.cpp b/src/plugins/CoreTests/src/CMDLineTests.cpp
index 742c3af..ca010ad 100644
--- a/src/plugins/CoreTests/src/CMDLineTests.cpp
+++ b/src/plugins/CoreTests/src/CMDLineTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
+#include <QApplication>
+#include <QCoreApplication>
+#include <QDomElement>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Log.h>
 #include <U2Core/CMDLineCoreOptions.h>
+#include <U2Core/Log.h>
+
 #include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/WorkflowUtils.h>
 
@@ -67,6 +64,7 @@ void GTest_RunCMDLine::init(XMLTestFormat *tf, const QDomElement& el) {
     proc = new QProcess(this);
     if (el.hasAttribute(WORKINK_DIR_ATTR)) {
         QString workingDir = el.attribute(WORKINK_DIR_ATTR);
+        QDir().mkpath(env->getVar(TEMP_DATA_DIR_ENV_ID) + "/" + workingDir);
         proc->setWorkingDirectory(env->getVar(TEMP_DATA_DIR_ENV_ID) + "/" + workingDir);
     }
     QString protosPath = env->getVar(COMMON_DATA_DIR_ENV_ID) + "/" +  env->getVar(CONFIG_PROTOTYPE);
@@ -79,7 +77,6 @@ void GTest_RunCMDLine::init(XMLTestFormat *tf, const QDomElement& el) {
     for (int i = 0; i < list.size(); ++i) {
         QFileInfo fIdest = list.at(i);
         QFileInfo fItarget(userScriptsDir.path() + "/" + fIdest.fileName());
-        QString destPath = fIdest.absoluteFilePath(), targetPath = fItarget.absoluteFilePath();
         if(!fItarget.exists()){
             QFile::copy(fIdest.absoluteFilePath(), fItarget.absoluteFilePath());
         }else if(fIdest.size() != fItarget.size()){
diff --git a/src/plugins/CoreTests/src/CMDLineTests.h b/src/plugins/CoreTests/src/CMDLineTests.h
index 4ec8283..d306410 100644
--- a/src/plugins/CoreTests/src/CMDLineTests.h
+++ b/src/plugins/CoreTests/src/CMDLineTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CMDLINE_TESTS_H_
 #define _U2_CMDLINE_TESTS_H_
 
-#include <QtCore/QProcess>
+#include <QProcess>
 #include <U2Test/XMLTestUtils.h>
 
 namespace U2 {
diff --git a/src/plugins/CoreTests/src/CoreTests.cpp b/src/plugins/CoreTests/src/CoreTests.cpp
index d126a80..64da95f 100644
--- a/src/plugins/CoreTests/src/CoreTests.cpp
+++ b/src/plugins/CoreTests/src/CoreTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/CoreTests.h b/src/plugins/CoreTests/src/CoreTests.h
index 17a5447..2736021 100644
--- a/src/plugins/CoreTests/src/CoreTests.h
+++ b/src/plugins/CoreTests/src/CoreTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/DNASequenceObjectTests.cpp b/src/plugins/CoreTests/src/DNASequenceObjectTests.cpp
index 6214561..66e49ba 100644
--- a/src/plugins/CoreTests/src/DNASequenceObjectTests.cpp
+++ b/src/plugins/CoreTests/src/DNASequenceObjectTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "DNASequenceObjectTests.h"
-
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/IOAdapter.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GObject.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Core/DNASequenceObject.h>
+#include "DNASequenceObjectTests.h"
 
 namespace U2 {
 
@@ -506,7 +506,7 @@ Task::ReportResult GTest_DNAMulSequenceAlphabetId::report() {
         return ReportResult_Finished;
     }
 
-    MAlignmentObject* myMSequence= qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* myMSequence= qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(myMSequence==NULL){
         stateInfo.setError(QString("can't cast to sequence from: %1").arg(obj->getGObjectName()));
         return ReportResult_Finished;
@@ -549,7 +549,7 @@ Task::ReportResult GTest_DNAMulSequenceSize::report() {
         return ReportResult_Finished;
     }
 
-    MAlignmentObject* myMSequence= qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* myMSequence= qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(myMSequence==NULL){
         stateInfo.setError(QString("can't cast to sequence from: %1").arg(obj->getGObjectName()));
         return ReportResult_Finished;
@@ -604,7 +604,7 @@ Task::ReportResult GTest_DNAMulSequencePart::report() {
         return ReportResult_Finished;
     }
 
-    MAlignmentObject* myMSequence= qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* myMSequence= qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(myMSequence==NULL){
         stateInfo.setError(QString("can't cast to sequence from: %1").arg(obj->getGObjectName()));
         return ReportResult_Finished;
@@ -620,11 +620,11 @@ Task::ReportResult GTest_DNAMulSequencePart::report() {
     }
     bool ok_flag=false;
     U2OpStatus2Log os;
-    const MAlignment ma = myMSequence->getMAlignment();
-    foreach(const MAlignmentRow& myItem , ma.getRows()){
-        if (myItem.getName() == seqName){
+    const MultipleSequenceAlignment ma = myMSequence->getMultipleAlignment();
+    foreach(const MultipleSequenceAlignmentRow& myItem , ma->getMsaRows()){
+        if (myItem->getName() == seqName){
             ok_flag=true;
-            QByteArray objSubSeq = myItem.mid(startPos, subseq.length(), os).toByteArray(subseq.length(), os);
+            QByteArray objSubSeq = myItem->mid(startPos, subseq.length(), os)->toByteArray(os, subseq.length());
             if (objSubSeq != subseq){
                 stateInfo.setError(QString("region not matched: %1, expected %2").arg(objSubSeq.constData()).arg(subseq.constData()));
                 return ReportResult_Finished;
@@ -671,15 +671,15 @@ Task::ReportResult GTest_DNAMulSequenceQuality::report() {
         return ReportResult_Finished;
     }
 
-    MAlignmentObject* myMSequence= qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* myMSequence= qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(myMSequence==NULL){
         stateInfo.setError(QString("Can not cast to alignment from: %1").arg(obj->getGObjectName()));
         return ReportResult_Finished;
     }
 
     bool ok_flag=false;
-    foreach(const MAlignmentRow& myItem , myMSequence->getMAlignment().getRows()){
-        if (myItem.getName() == seqName){
+    foreach(const MultipleSequenceAlignmentRow& myItem , myMSequence->getMsa()->getMsaRows()){
+        if (myItem->getName() == seqName){
             ok_flag = true;
             //QByteArray qualityCodes = myItem.getCoreQuality().qualCodes;
             //if (qualityCodes != expectedQuality){
@@ -728,7 +728,7 @@ Task::ReportResult GTest_DNASequencInMulSequence::report() {
         return ReportResult_Finished;
     }
 
-    MAlignmentObject* myMSequence= qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* myMSequence= qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(myMSequence==NULL){
         stateInfo.setError(QString("can't cast to sequence from: %1").arg(obj->getGObjectName()));
         return ReportResult_Finished;
@@ -774,36 +774,36 @@ Task::ReportResult GTest_DNAcompareMulSequencesInTwoObjects::report() {
     const QList<GObject*>& objs2 = doc2->getObjects();
     GObject*obj=NULL;
     GObject*obj2=NULL;
-    MAlignmentObject * myMSequence = 0;
-    MAlignmentObject * myMSequence2 = 0;
+    MultipleSequenceAlignmentObject * myMSequence = 0;
+    MultipleSequenceAlignmentObject * myMSequence2 = 0;
 
     for(int i=0;(i!=objs.size())&&(i!=objs2.size());i++){
         obj = objs.at(i);
         obj2 = objs2.at(i);
 
-        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence = qobject_cast<MAlignmentObject*>(obj);
+        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
             if(myMSequence==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj->getGObjectName()).arg(i));
                 return ReportResult_Finished;
             }
         }
-        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence2 = qobject_cast<MAlignmentObject*>(obj2);
+        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence2 = qobject_cast<MultipleSequenceAlignmentObject*>(obj2);
             if(myMSequence2==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj2->getGObjectName()).arg(i));
                 return ReportResult_Finished;
             }
         }
         if (myMSequence->getLength() != myMSequence2->getLength()) {
-           stateInfo.setError(QString("sequences size not matched: size1=%1, size2=%2").arg(myMSequence->getLength()).arg(myMSequence2->getMAlignment().getLength()));
+           stateInfo.setError(QString("sequences size not matched: size1=%1, size2=%2").arg(myMSequence->getLength()).arg(myMSequence2->getMultipleAlignment()->getLength()));
            return ReportResult_Finished;
         }
 
-        const MAlignment &one = myMSequence->getMAlignment();
-        const MAlignment &two = myMSequence2->getMAlignment();
-        const QList <MAlignmentRow>& alignedSeqs1 = one.getRows();
-        const QList <MAlignmentRow>& alignedSeqs2 = two.getRows();
+        MultipleSequenceAlignment one = myMSequence->getMultipleAlignment();
+        MultipleSequenceAlignment two = myMSequence2->getMultipleAlignment();
+        const QList <MultipleSequenceAlignmentRow> alignedSeqs1 = one->getMsaRows();
+        const QList <MultipleSequenceAlignmentRow> alignedSeqs2 = two->getMsaRows();
 
         if( alignedSeqs1.size() != alignedSeqs2.size() ) {
             stateInfo.setError(QString( "different_sequences_number_in_msa_in_%1_object" ).arg( i ));
@@ -811,21 +811,19 @@ Task::ReportResult GTest_DNAcompareMulSequencesInTwoObjects::report() {
         }
 
         if (sortValue == "true") {
-            MAlignment first = myMSequence->getMAlignment();
-            first.sortRowsByName();
-            MAlignment second = myMSequence2->getMAlignment();
-            second.sortRowsByName();
+            one->sortRowsByName();
+            two->sortRowsByName();
         }
 
         int seqSz = alignedSeqs1.size();
         for(int n = 0; n < seqSz; n++ ) {
-            const MAlignmentRow& myItem1=alignedSeqs1.at(i);
-            const MAlignmentRow& myItem2=alignedSeqs2.at(i);
-            if(myItem1.getName()!= myItem2.getName()){
-                stateInfo.setError(QString("names of regions in position %1 not matched: %2, expected %3").arg(n).arg(myItem2.getName()).arg(myItem1.getName()));
+            const MultipleSequenceAlignmentRow &myItem1 = alignedSeqs1.at(i);
+            const MultipleSequenceAlignmentRow &myItem2 = alignedSeqs2.at(i);
+            if (myItem1->getName() != myItem2->getName()){
+                stateInfo.setError(QString("names of regions in position %1 not matched: %2, expected %3").arg(n).arg(myItem2->getName()).arg(myItem1->getName()));
                 return ReportResult_Finished;
             }
-            if( myItem1 != myItem2) {
+            if (*myItem1 != *myItem2) {
                 stateInfo.setError(QString( "sequence_#%1_in_msa_in_object_#%2_not_matched" ).arg( n ).arg( i ));
             }
         }
@@ -868,22 +866,22 @@ Task::ReportResult GTest_DNAcompareMulSequencesNamesInTwoObjects::report() {
     const QList<GObject*>& objs2 = doc2->getObjects();
     GObject*obj=NULL;
     GObject*obj2=NULL;
-    MAlignmentObject * myMSequence = 0;
-    MAlignmentObject * myMSequence2 = 0;
+    MultipleSequenceAlignmentObject * myMSequence = 0;
+    MultipleSequenceAlignmentObject * myMSequence2 = 0;
 
     for(int i=0;(i!=objs.size())&&(i!=objs2.size());i++){
         obj = objs.at(i);
         obj2 = objs2.at(i);
 
-        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence = qobject_cast<MAlignmentObject*>(obj);
+        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
             if(myMSequence==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj->getGObjectName()).arg(i));
                 return ReportResult_Finished;
             }
         }
-        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence2 = qobject_cast<MAlignmentObject*>(obj2);
+        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence2 = qobject_cast<MultipleSequenceAlignmentObject*>(obj2);
             if(myMSequence2==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj2->getGObjectName()).arg(i));
                 return ReportResult_Finished;
@@ -891,19 +889,19 @@ Task::ReportResult GTest_DNAcompareMulSequencesNamesInTwoObjects::report() {
         }
 ////////////////////////////////////////
      if (myMSequence->getLength() != myMSequence2->getLength()) {
-        stateInfo.setError(QString("sequences size not matched: size1=%1, size2=%").arg(myMSequence->getLength(), myMSequence2->getMAlignment().getLength()));
+        stateInfo.setError(QString("sequences size not matched: size1=%1, size2=%").arg(myMSequence->getLength(), myMSequence2->getMultipleAlignment()->getLength()));
         return ReportResult_Finished;
     }
-    const MAlignment &one = myMSequence->getMAlignment();
-    const MAlignment &two = myMSequence2->getMAlignment();
-    const QList <MAlignmentRow>& myQList1 = one.getRows();
-    const QList <MAlignmentRow>& myQList2 = two.getRows();
+    const MultipleSequenceAlignment one = myMSequence->getMultipleAlignment();
+    const MultipleSequenceAlignment two = myMSequence2->getMultipleAlignment();
+    const QList<MultipleSequenceAlignmentRow> &myQList1 = one->getMsaRows();
+    const QList<MultipleSequenceAlignmentRow> &myQList2 = two->getMsaRows();
 
-    for(int n=0;(n!=myQList1.size())||(n!=myQList2.size());n++){
-        const MAlignmentRow& myItem1 = myQList1.at(i);
-        const MAlignmentRow&  myItem2=myQList2.at(i);
-        if(myItem1.getName() != myItem2.getName()){
-            stateInfo.setError(QString("names of regions in position %1 not matched: %2, expected %3").arg(n).arg(myItem2.getName()).arg(myItem1.getName()));
+    for (int n = 0; (n != myQList1.size()) || (n != myQList2.size()); n++) {
+        const MultipleSequenceAlignmentRow &myItem1 = myQList1.at(i);
+        const MultipleSequenceAlignmentRow &myItem2 = myQList2.at(i);
+        if (myItem1->getName() != myItem2->getName()) {
+            stateInfo.setError(QString("names of regions in position %1 not matched: %2, expected %3").arg(n).arg(myItem2->getName()).arg(myItem1->getName()));
             return ReportResult_Finished;
         }
     }
@@ -1123,22 +1121,22 @@ Task::ReportResult GTest_DNAcompareMulSequencesAlphabetIdInTwoObjects::report()
     const QList<GObject*>& objs2 = doc2->getObjects();
     GObject*obj=NULL;
     GObject*obj2=NULL;
-    MAlignmentObject * myMSequence = 0;
-    MAlignmentObject * myMSequence2 = 0;
+    MultipleSequenceAlignmentObject * myMSequence = 0;
+    MultipleSequenceAlignmentObject * myMSequence2 = 0;
 
     for(int i=0;(i!=objs.size())&&(i!=objs2.size());i++){
         obj = objs.at(i);
         obj2 = objs2.at(i);
 
-        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence = qobject_cast<MAlignmentObject*>(obj);
+        if(obj->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
             if(myMSequence==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj->getGObjectName()).arg(i));
                 return ReportResult_Finished;
             }
         }
-        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_ALIGNMENT){
-            myMSequence2 = qobject_cast<MAlignmentObject*>(obj2);
+        if(obj2->getGObjectType()== GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT){
+            myMSequence2 = qobject_cast<MultipleSequenceAlignmentObject*>(obj2);
             if(myMSequence2==NULL){
                 stateInfo.setError(QString("can't cast to sequence from: %1 in position %2").arg(obj2->getGObjectName()).arg(i));
                 return ReportResult_Finished;
diff --git a/src/plugins/CoreTests/src/DNASequenceObjectTests.h b/src/plugins/CoreTests/src/DNASequenceObjectTests.h
index b0e7543..9f1d3f5 100644
--- a/src/plugins/CoreTests/src/DNASequenceObjectTests.h
+++ b/src/plugins/CoreTests/src/DNASequenceObjectTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/DNAAlphabet.h>
 
 namespace U2 {
diff --git a/src/plugins/CoreTests/src/DNATranslationImplTests.cpp b/src/plugins/CoreTests/src/DNATranslationImplTests.cpp
index 911f841..0695899 100644
--- a/src/plugins/CoreTests/src/DNATranslationImplTests.cpp
+++ b/src/plugins/CoreTests/src/DNATranslationImplTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/DNATranslationImplTests.h b/src/plugins/CoreTests/src/DNATranslationImplTests.h
index 5c191d5..bd62ef3 100644
--- a/src/plugins/CoreTests/src/DNATranslationImplTests.h
+++ b/src/plugins/CoreTests/src/DNATranslationImplTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/DNAAlphabet.h>
 
 namespace U2 {
diff --git a/src/plugins/CoreTests/src/DnaAssemblyTests.cpp b/src/plugins/CoreTests/src/DnaAssemblyTests.cpp
index 7169eae..535fd33 100644
--- a/src/plugins/CoreTests/src/DnaAssemblyTests.cpp
+++ b/src/plugins/CoreTests/src/DnaAssemblyTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,22 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
+#include <QDomElement>
+
+#include <U2Algorithm/DnaAssemblyMultiTask.h>
+#include <U2Algorithm/DnaAssemblyTask.h>
+
 #include <U2Core/AppContext.h>
-#include <U2Core/GUrlUtils.h>
 #include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 
-#include <U2Formats/SAMFormat.h>
 #include <U2Formats/BAMUtils.h>
-
-
-#include <U2Algorithm/DnaAssemblyTask.h>
-#include <U2Algorithm/DnaAssemblyMultiTask.h>
+#include <U2Formats/SAMFormat.h>
 
 #include <U2View/DnaAssemblyUtils.h>
 
-
 #include "DnaAssemblyTests.h"
 
 namespace U2 {
diff --git a/src/plugins/CoreTests/src/DnaAssemblyTests.h b/src/plugins/CoreTests/src/DnaAssemblyTests.h
index d792a48..5df86bd 100644
--- a/src/plugins/CoreTests/src/DnaAssemblyTests.h
+++ b/src/plugins/CoreTests/src/DnaAssemblyTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DNA_ASSEMBLY_TESTS_H_
 #define _U2_DNA_ASSEMBLY_TESTS_H_
 
-#include <QtCore/QList>
+#include <QList>
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GUrl.h>
diff --git a/src/plugins/CoreTests/src/DocumentModelTests.cpp b/src/plugins/CoreTests/src/DocumentModelTests.cpp
index 7a64506..23c3f04 100644
--- a/src/plugins/CoreTests/src/DocumentModelTests.cpp
+++ b/src/plugins/CoreTests/src/DocumentModelTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,29 +19,30 @@
  * MA 02110-1301, USA.
  */
 
-#include "DocumentModelTests.h"
+#include <QCoreApplication>
+#include <QDir>
+#include <QStringList>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentImport.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/GObject.h>
+#include <U2Core/DocumentUtils.h>
 #include <U2Core/GHints.h>
+#include <U2Core/GObject.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
+#include <U2Core/SaveDocumentTask.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/SaveDocumentTask.h>
-#include <U2Core/DocumentUtils.h>
+#include <U2Formats/SAMFormat.h>
 
 #include <U2Test/GTest.h>
 
-#include <U2Formats/SAMFormat.h>
-
-#include <QStringList>
+#include "DocumentModelTests.h"
 
 namespace U2 {
 
@@ -201,6 +202,7 @@ void GTest_SaveDocument::init(XMLTestFormat* tf, const QDomElement& el) {
         return ;
     }
 
+    formatId = el.attribute("format");
 }
 
 void GTest_SaveDocument::prepare(){
@@ -208,9 +210,18 @@ void GTest_SaveDocument::prepare(){
     Document* doc = getContext<Document>(this, docContextName);
     if (doc == NULL) {
         stateInfo.setError(QString("document not found %1").arg(docContextName));
-        return ;
+        return;
     }
-    saveTask = new SaveDocumentTask(doc, iof, url);
+
+    SaveDocFlags saveTaskFlags = SaveDoc_Overwrite;
+    if (!formatId.isEmpty() && formatId != doc->getDocumentFormatId()) {
+        DocumentFormat *format = AppContext::getDocumentFormatRegistry()->getFormatById(formatId);
+        CHECK_EXT(NULL != format, stateInfo.setError(QString("Document format not found: %1").arg(formatId)), );
+        doc = doc->getSimpleCopy(format, iof, url);
+        saveTaskFlags |= SaveDoc_DestroyButDontUnload;
+    }
+
+    saveTask = new SaveDocumentTask(doc, iof, url, saveTaskFlags);
     addSubTask(saveTask);
     /////////////////////////
 }
@@ -864,7 +875,7 @@ QByteArray GTest_CompareFiles::getLine(IOAdapter* io) {
         CHECK(len != 0, "");
         CHECK_EXT(lineOk, setError("Line is too long"), "");
 
-        line = (QByteArray::fromRawData(buff, len)).trimmed();
+        line = (QByteArray(buff, len)).trimmed();
         commentString = false;
         foreach(const QString& comment, commentsStartWith){
             if (line.startsWith(comment.toLatin1())){
@@ -994,7 +1005,7 @@ QString GTest_Compare_VCF_Files::getLine(IOAdapter* io) {
         CHECK(len != 0, "");
         CHECK_EXT(lineOk, setError("Line is too long"), "");
 
-        line = (QByteArray::fromRawData(buff, len)).trimmed();
+        line = (QByteArray(buff, len)).trimmed();
     } while (line.startsWith(COMMENT_MARKER));
 
     return QString(line);
diff --git a/src/plugins/CoreTests/src/DocumentModelTests.h b/src/plugins/CoreTests/src/DocumentModelTests.h
index 10da461..b315e52 100644
--- a/src/plugins/CoreTests/src/DocumentModelTests.h
+++ b/src/plugins/CoreTests/src/DocumentModelTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <U2Core/IOAdapter.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
@@ -70,6 +70,7 @@ public:
 
 private:
      QString             url;
+     DocumentFormatId    formatId;
      IOAdapterFactory*   iof;
 
 
diff --git a/src/plugins/CoreTests/src/EditAlignmentTests.cpp b/src/plugins/CoreTests/src/EditAlignmentTests.cpp
index 899398e..a0e81da 100644
--- a/src/plugins/CoreTests/src/EditAlignmentTests.cpp
+++ b/src/plugins/CoreTests/src/EditAlignmentTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -101,9 +101,9 @@ void GTest_CreateSubalignimentTask::prepare(){
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
@@ -113,31 +113,31 @@ void GTest_CreateSubalignimentTask::prepare(){
         return;
     }
 
-    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
-    expectedMaobj = (MAlignmentObject*)expList.first();
+    expectedMaobj = (MultipleSequenceAlignmentObject*)expList.first();
 
-    maobj = (MAlignmentObject*)list.first();
+    maobj = (MultipleSequenceAlignmentObject*)list.first();
     t = new CreateSubalignmentTask(maobj, CreateSubalignmentSettings(window, seqNames, doc->getURL(), false,false, DocumentFormatId()));
     addSubTask(t);
 }
 
 Task::ReportResult GTest_CreateSubalignimentTask::report(){
-    const MAlignment &actual = maobj->getMAlignment(),
-                expected = expectedMaobj->getMAlignment();
-    if (actual.getRows().size() != expected.getRows().size()){
+    const MultipleSequenceAlignment actual = maobj->getMultipleAlignment();
+    const MultipleSequenceAlignment expected = expectedMaobj->getMultipleAlignment();
+    if (actual->getMsaRows().size() != expected->getMsaRows().size()){
         stateInfo.setError(GTest::tr("Expected and actual alignment sizes are different: %1 , %2")
-            .arg(expected.getRows().size())
-            .arg(actual.getRows().size()));
+            .arg(expected->getMsaRows().size())
+            .arg(actual->getMsaRows().size()));
         return ReportResult_Finished;
     }
-    for(int i = 0; i < actual.getRows().size(); i++){
-        const MAlignmentRow& actItem = actual.getRow(i), expItem = expected.getRow(i);
-        if (actItem != expItem){
+    for(int i = 0; i < actual->getMsaRows().size(); i++){
+        const MultipleSequenceAlignmentRow actItem = actual->getMsaRow(i), expItem = expected->getMsaRow(i);
+        if (*actItem != *expItem){
             stateInfo.setError(GTest::tr("Expected and actual alignments not equal"));
             return ReportResult_Finished;
         }
@@ -239,9 +239,9 @@ void GTest_RemoveAlignmentRegion::prepare(){
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
@@ -251,15 +251,15 @@ void GTest_RemoveAlignmentRegion::prepare(){
         return;
     }
 
-    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
-    expectedMaobj = (MAlignmentObject*)expList.first();
+    expectedMaobj = (MultipleSequenceAlignmentObject*)expList.first();
 
-    maobj = (MAlignmentObject*)list.first();
+    maobj = (MultipleSequenceAlignmentObject*)list.first();
 
 }
 
@@ -268,10 +268,10 @@ Task::ReportResult GTest_RemoveAlignmentRegion::report(){
     if (!hasError()) {
 
         maobj->removeRegion(startBase, startSeq, width, height, true);
-        const MAlignment &actual = maobj->getMAlignment(),
-            expected = expectedMaobj->getMAlignment();
+        const MultipleSequenceAlignment actual = maobj->getMultipleAlignment();
+        const MultipleSequenceAlignment expected = expectedMaobj->getMultipleAlignment();
 
-        if (actual != expected) {
+        if (*actual != *expected) {
             stateInfo.setError(GTest::tr("Expected and actual alignments not equal"));
         }
     }
@@ -318,9 +318,9 @@ void GTest_AddSequenceToAlignment::prepare(){
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
@@ -330,14 +330,14 @@ void GTest_AddSequenceToAlignment::prepare(){
         return;
     }
 
-    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> expList = expectedDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
-    expectedMaobj = (MAlignmentObject*)expList.first();
-    maobj = (MAlignmentObject*)list.first();
+    expectedMaobj = (MultipleSequenceAlignmentObject*)expList.first();
+    maobj = (MultipleSequenceAlignmentObject*)list.first();
 
     if (seqFileName.isEmpty()) {
         stateInfo.setError(GTest::tr("File with sequences has empty name"));
@@ -355,10 +355,10 @@ Task::ReportResult GTest_AddSequenceToAlignment::report(){
 
     if (!hasError()) {
 
-        const MAlignment& actual = maobj->getMAlignment();
-        const MAlignment& expected = expectedMaobj->getMAlignment();
+        const MultipleSequenceAlignment actual = maobj->getMultipleAlignment();
+        const MultipleSequenceAlignment expected = expectedMaobj->getMultipleAlignment();
 
-        if (actual != expected) {
+        if (*actual != *expected) {
             stateInfo.setError(GTest::tr("Expected and actual alignments not equal"));
         }
     }
@@ -382,26 +382,26 @@ void GTest_RemoveColumnsOfGaps::prepare(){
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
 
     GObject *obj = list.first();
     if (NULL == obj) {
-        stateInfo.setError(QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
     assert(NULL != obj);
 
-    MAlignmentObject *maObj = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *maObj = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if (NULL == maObj) {
         stateInfo.setError(QString("error can't cast to multiple alignment from GObject"));
         return;
     }
 
-    maObj->deleteColumnWithGaps();
+    maObj->deleteColumnsWithGaps(stateInfo);
 }
 
 
diff --git a/src/plugins/CoreTests/src/EditAlignmentTests.h b/src/plugins/CoreTests/src/EditAlignmentTests.h
index 32029b3..5f636ab 100644
--- a/src/plugins/CoreTests/src/EditAlignmentTests.h
+++ b/src/plugins/CoreTests/src/EditAlignmentTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,13 @@
 #ifndef _U2_EDIT_ALIGNMENT_TESTS_H_
 #define _U2_EDIT_ALIGNMENT_TESTS_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/GUrl.h>
 
 #include <U2Test/GTest.h>
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 #include <U2Algorithm/CreateSubalignmentTask.h>
 
@@ -44,8 +44,8 @@ public:
     Task::ReportResult report();
 
 private:
-    MAlignmentObject *maobj;
-    MAlignmentObject *expectedMaobj;
+    MultipleSequenceAlignmentObject *maobj;
+    MultipleSequenceAlignmentObject *expectedMaobj;
     QString docName;
     bool negativeTest;
     Task *t;
@@ -62,8 +62,8 @@ public:
     Task::ReportResult report();
 
 private:
-    MAlignmentObject *maobj;
-    MAlignmentObject *expectedMaobj;
+    MultipleSequenceAlignmentObject *maobj;
+    MultipleSequenceAlignmentObject *expectedMaobj;
     QString docName;
     QString expectedDocName;
     int startBase, startSeq, width, height;
@@ -78,8 +78,8 @@ public:
     Task::ReportResult report();
 
 private:
-    MAlignmentObject *maobj;
-    MAlignmentObject *expectedMaobj;
+    MultipleSequenceAlignmentObject *maobj;
+    MultipleSequenceAlignmentObject *expectedMaobj;
     QString docName;
     QString expectedDocName;
     QString seqFileName;
diff --git a/src/plugins/CoreTests/src/EditSequenceTests.cpp b/src/plugins/CoreTests/src/EditSequenceTests.cpp
index 4371fdf..aee4315 100644
--- a/src/plugins/CoreTests/src/EditSequenceTests.cpp
+++ b/src/plugins/CoreTests/src/EditSequenceTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/EditSequenceTests.h b/src/plugins/CoreTests/src/EditSequenceTests.h
index d1d2d95..322ca0c 100644
--- a/src/plugins/CoreTests/src/EditSequenceTests.h
+++ b/src/plugins/CoreTests/src/EditSequenceTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 #include <U2Core/ModifySequenceObjectTask.h>
 
diff --git a/src/plugins/CoreTests/src/FindAlgorithmTests.cpp b/src/plugins/CoreTests/src/FindAlgorithmTests.cpp
index e608659..9ce1e62 100644
--- a/src/plugins/CoreTests/src/FindAlgorithmTests.cpp
+++ b/src/plugins/CoreTests/src/FindAlgorithmTests.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -19,12 +19,14 @@
 * MA 02110-1301, USA.
 */
 
-#include "FindAlgorithmTests.h"
+#include <QDomElement>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 
+#include "FindAlgorithmTests.h"
+
 namespace U2 {
 
 //musthave attributes
diff --git a/src/plugins/CoreTests/src/FindAlgorithmTests.h b/src/plugins/CoreTests/src/FindAlgorithmTests.h
index 8494ab8..6f36731 100644
--- a/src/plugins/CoreTests/src/FindAlgorithmTests.h
+++ b/src/plugins/CoreTests/src/FindAlgorithmTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/FormatDetectionTests.cpp b/src/plugins/CoreTests/src/FormatDetectionTests.cpp
index f11773e..0e8c293 100644
--- a/src/plugins/CoreTests/src/FormatDetectionTests.cpp
+++ b/src/plugins/CoreTests/src/FormatDetectionTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/FormatDetectionTests.h b/src/plugins/CoreTests/src/FormatDetectionTests.h
index 436d1ec..ea5203a 100644
--- a/src/plugins/CoreTests/src/FormatDetectionTests.h
+++ b/src/plugins/CoreTests/src/FormatDetectionTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/GUrlTests.cpp b/src/plugins/CoreTests/src/GUrlTests.cpp
index 91f5469..78d0b1f 100644
--- a/src/plugins/CoreTests/src/GUrlTests.cpp
+++ b/src/plugins/CoreTests/src/GUrlTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "GUrlTests.h"
+#include <QDir>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/GObject.h>
+#include <U2Core/AppFileStorage.h>
 #include <U2Core/GHints.h>
+#include <U2Core/GObject.h>
 #include <U2Core/GUrl.h>
 #include <U2Core/U2SafePoints.h>
-#include <U2Core/AppFileStorage.h>
+
+#include "GUrlTests.h"
 
 namespace U2 {
 
@@ -84,7 +86,7 @@ Task::ReportResult GTest_CreateTmpDir::report() {
     if (!exists) {
         bool created = tmpDir.mkdir(url);
         if (!created) {
-            setError("Can not create a directory: " + url);
+            setError("Can not create a folder: " + url);
         }
     }
     return ReportResult_Finished;
diff --git a/src/plugins/CoreTests/src/GUrlTests.h b/src/plugins/CoreTests/src/GUrlTests.h
index c65782e..906fe02 100644
--- a/src/plugins/CoreTests/src/GUrlTests.h
+++ b/src/plugins/CoreTests/src/GUrlTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_GURL_TESTS_H_
 
 #include <U2Test/XMLTestUtils.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/LoadRemoteDocumentTests.cpp b/src/plugins/CoreTests/src/LoadRemoteDocumentTests.cpp
index 569e14a..1d0b84e 100644
--- a/src/plugins/CoreTests/src/LoadRemoteDocumentTests.cpp
+++ b/src/plugins/CoreTests/src/LoadRemoteDocumentTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include "LoadRemoteDocumentTests.h"
+#include <QDomElement>
 
 #include <U2Core/LoadRemoteDocumentTask.h>
 
+#include "LoadRemoteDocumentTests.h"
+
 #define DB_ATTR "database"
 #define DOC_ID_ATTR "document_id"
 #define EXPECTED_DOC_ATTR "expected_document"
diff --git a/src/plugins/CoreTests/src/LoadRemoteDocumentTests.h b/src/plugins/CoreTests/src/LoadRemoteDocumentTests.h
index f8275d4..be57200 100644
--- a/src/plugins/CoreTests/src/LoadRemoteDocumentTests.h
+++ b/src/plugins/CoreTests/src/LoadRemoteDocumentTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/PWMatrixTests.cpp b/src/plugins/CoreTests/src/PWMatrixTests.cpp
index 53fc626..912cda5 100644
--- a/src/plugins/CoreTests/src/PWMatrixTests.cpp
+++ b/src/plugins/CoreTests/src/PWMatrixTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "PWMatrixTests.h"
-#include <U2Core/AppContext.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/GObject.h>
-#include <U2Core/DNAAlphabet.h>
-
 #include <U2Algorithm/PWMConversionAlgorithm.h>
 #include <U2Algorithm/PWMConversionAlgorithmRegistry.h>
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObject.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "PWMatrixTests.h"
 
 namespace U2 {
 
@@ -152,13 +153,13 @@ Task::ReportResult GTest_PFMCreateTest::report() {
             return ReportResult_Finished;
         }
 
-        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (list.size() == 0) {
-            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
             return ReportResult_Finished;
         }
-        MAlignmentObject * myAlign = (MAlignmentObject*)list.first();
-        const MAlignment &al = myAlign->getMAlignment();
+        MultipleSequenceAlignmentObject *myAlign = qobject_cast<MultipleSequenceAlignmentObject *>(list.first());
+        const MultipleSequenceAlignment al = myAlign->getMultipleAlignment();
         PFMatrix pfm(al, type);
         for (int i = 0, n = (type == PFM_MONONUCLEOTIDE) ? 4 : 16; i < n; i++) {
             for (int j = 0, nn = (type == PFM_MONONUCLEOTIDE) ? length : length - 1; j < nn; j++) {
@@ -177,7 +178,7 @@ Task::ReportResult GTest_PFMCreateTest::report() {
 
         QList<GObject*> list = doc->findGObjectByType(GObjectTypes::SEQUENCE);
         if (list.size() == 0 || list.size() < size) {
-            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty or less than %2").arg(GObjectTypes::MULTIPLE_ALIGNMENT).arg(size));
+            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty or less than %2").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT).arg(size));
             return ReportResult_Finished;
         }
         QList<DNASequence*> data;
@@ -322,13 +323,13 @@ Task::ReportResult GTest_PWMCreateTest::report() {
             return ReportResult_Finished;
         }
 
-        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (list.size() == 0) {
-            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
             return ReportResult_Finished;
         }
-        MAlignmentObject * myAlign = (MAlignmentObject*)list.first();
-        const MAlignment &al = myAlign->getMAlignment();
+        MultipleSequenceAlignmentObject * myAlign = (MultipleSequenceAlignmentObject*)list.first();
+        const MultipleSequenceAlignment al = myAlign->getMultipleAlignment();
 
         PFMatrix pfm(al, pftype);
         pwm = algorithm->convert(pfm);
@@ -342,7 +343,7 @@ Task::ReportResult GTest_PWMCreateTest::report() {
 
         QList<GObject*> list = doc->findGObjectByType(GObjectTypes::SEQUENCE);
         if (list.size() == 0 || list.size() < size) {
-            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty or less than %2").arg(GObjectTypes::MULTIPLE_ALIGNMENT).arg(size));
+            stateInfo.setError(GTest::tr("container of object with type \"%1\" is empty or less than %2").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT).arg(size));
             return ReportResult_Finished;
         }
         QList<DNASequence*> data;
diff --git a/src/plugins/CoreTests/src/PWMatrixTests.h b/src/plugins/CoreTests/src/PWMatrixTests.h
index 05c66eb..721774d 100644
--- a/src/plugins/CoreTests/src/PWMatrixTests.h
+++ b/src/plugins/CoreTests/src/PWMatrixTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 #include <U2Core/PFMatrix.h>
 #include <U2Core/PWMatrix.h>
diff --git a/src/plugins/CoreTests/src/PhyTreeObjectTests.cpp b/src/plugins/CoreTests/src/PhyTreeObjectTests.cpp
index 2fd1d39..2da140f 100644
--- a/src/plugins/CoreTests/src/PhyTreeObjectTests.cpp
+++ b/src/plugins/CoreTests/src/PhyTreeObjectTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
-#include <U2Core/AppContext.h>
-#include <U2Core/PhyTreeObject.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/U2DbiRegistry.h>
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
 #include <U2Algorithm/PhyTreeGeneratorTask.h>
+
+#include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/PhyTreeObject.h>
+#include <U2Core/U2DbiRegistry.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "PhyTreeObjectTests.h"
 
@@ -76,7 +78,7 @@ void GTest_CalculateTreeFromAligment::prepare() {
         return;
     }
 
-    MAlignmentObject* maObj = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* maObj = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(maObj==NULL){
         stateInfo.setError(QString("can't cast to multimple alignment object from: %1").arg(obj->getGObjectName()));
         return;
@@ -92,7 +94,7 @@ void GTest_CalculateTreeFromAligment::prepare() {
         "sumt burnin=10;\n"
         "End;\n");
 
-    task = new PhyTreeGeneratorLauncherTask(maObj->getMAlignment(), settings);
+    task = new PhyTreeGeneratorLauncherTask(maObj->getMultipleAlignment(), settings);
 
     if (task == NULL) {
         stateInfo.setError(QString("Algorithm %1 not found").arg(algName));
diff --git a/src/plugins/CoreTests/src/PhyTreeObjectTests.h b/src/plugins/CoreTests/src/PhyTreeObjectTests.h
index a4b8c61..1a0d2c2 100644
--- a/src/plugins/CoreTests/src/PhyTreeObjectTests.h
+++ b/src/plugins/CoreTests/src/PhyTreeObjectTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 #define _U2_PHYLTREE_OBJECT_TESTS_H_
 
 #include <U2Test/XMLTestUtils.h>
-#include <QtXml/QDomElement>
-#include <QtCore/QHash>
+#include <QDomElement>
+#include <QHash>
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/SMatrixTests.cpp b/src/plugins/CoreTests/src/SMatrixTests.cpp
index e54e8be..d22ecfb 100644
--- a/src/plugins/CoreTests/src/SMatrixTests.cpp
+++ b/src/plugins/CoreTests/src/SMatrixTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,15 @@
  * MA 02110-1301, USA.
  */
 
-#include "SMatrixTests.h"
+#include <QDomElement>
 
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
 #include <U2Algorithm/SubstMatrixRegistry.h>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/SMatrix.h>
 
+#include "SMatrixTests.h"
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/SMatrixTests.h b/src/plugins/CoreTests/src/SMatrixTests.h
index 3473df2..0c891d1 100644
--- a/src/plugins/CoreTests/src/SMatrixTests.h
+++ b/src/plugins/CoreTests/src/SMatrixTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/SecStructPredictTests.cpp b/src/plugins/CoreTests/src/SecStructPredictTests.cpp
index 9e77220..7fa17e5 100644
--- a/src/plugins/CoreTests/src/SecStructPredictTests.cpp
+++ b/src/plugins/CoreTests/src/SecStructPredictTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/AppContext.h>
-#include <U2Core/U2DbiRegistry.h>
+#include <QDomElement>
+
 #include <U2Algorithm/SecStructPredictAlgRegistry.h>
-#include <U2Core/DNASequenceObject.h>
+#include <U2Algorithm/SecStructPredictTask.h>
+
 #include <U2Core/AnnotationTableObject.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include "SecStructPredictTests.h"
-#include <U2Algorithm/SecStructPredictTask.h>
 
 namespace U2 {
 
diff --git a/src/plugins/CoreTests/src/SecStructPredictTests.h b/src/plugins/CoreTests/src/SecStructPredictTests.h
index be3e51b..d85fe4e 100644
--- a/src/plugins/CoreTests/src/SecStructPredictTests.h
+++ b/src/plugins/CoreTests/src/SecStructPredictTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/SequenceWalkerTests.cpp b/src/plugins/CoreTests/src/SequenceWalkerTests.cpp
index 3434712..1eaeef4 100644
--- a/src/plugins/CoreTests/src/SequenceWalkerTests.cpp
+++ b/src/plugins/CoreTests/src/SequenceWalkerTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/SequenceWalkerTests.h b/src/plugins/CoreTests/src/SequenceWalkerTests.h
index b570b68..c9f2018 100644
--- a/src/plugins/CoreTests/src/SequenceWalkerTests.h
+++ b/src/plugins/CoreTests/src/SequenceWalkerTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/SequenceWalkerTask.h>
 
 namespace U2 {
diff --git a/src/plugins/CoreTests/src/TaskTests.cpp b/src/plugins/CoreTests/src/TaskTests.cpp
index 2f7be10..1b18ec0 100644
--- a/src/plugins/CoreTests/src/TaskTests.cpp
+++ b/src/plugins/CoreTests/src/TaskTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include "TaskTests.h"
+#include <QThread>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Task.h>
 
+#include "TaskTests.h"
+
 namespace U2 {
 
 #define VALUE_ATTR      "value"
diff --git a/src/plugins/CoreTests/src/TaskTests.h b/src/plugins/CoreTests/src/TaskTests.h
index 7eb04a6..3eed56d 100644
--- a/src/plugins/CoreTests/src/TaskTests.h
+++ b/src/plugins/CoreTests/src/TaskTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 namespace U2 {
 
 class StateOrderTestTask;
diff --git a/src/plugins/CoreTests/src/TextObjectTests.cpp b/src/plugins/CoreTests/src/TextObjectTests.cpp
index a6102c2..cfab31e 100644
--- a/src/plugins/CoreTests/src/TextObjectTests.cpp
+++ b/src/plugins/CoreTests/src/TextObjectTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDomElement>
+
 #include <U2Core/TextObject.h>
 
 #include "TextObjectTests.h"
diff --git a/src/plugins/CoreTests/src/TextObjectTests.h b/src/plugins/CoreTests/src/TextObjectTests.h
index 91295aa..10baaa2 100644
--- a/src/plugins/CoreTests/src/TextObjectTests.h
+++ b/src/plugins/CoreTests/src/TextObjectTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/CoreTests/src/UtilTestActions.cpp b/src/plugins/CoreTests/src/UtilTestActions.cpp
index 2851286..1919620 100644
--- a/src/plugins/CoreTests/src/UtilTestActions.cpp
+++ b/src/plugins/CoreTests/src/UtilTestActions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/PasswordStorage.h>
 #include <U2Core/Settings.h>
diff --git a/src/plugins/CoreTests/src/UtilTestActions.h b/src/plugins/CoreTests/src/UtilTestActions.h
index 86f7816..cf459ea 100644
--- a/src/plugins/CoreTests/src/UtilTestActions.h
+++ b/src/plugins/CoreTests/src/UtilTestActions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_UTIL_TEST_ACTIONS_H_
 
 #include <U2Test/XMLTestUtils.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/GUITestBase.pri b/src/plugins/GUITestBase/GUITestBase.pri
index dd6fa1f..7e1cfeb 100644
--- a/src/plugins/GUITestBase/GUITestBase.pri
+++ b/src/plugins/GUITestBase/GUITestBase.pri
@@ -5,8 +5,7 @@ PLUGIN_NAME=GUI Test Base
 PLUGIN_VENDOR=Unipro
 include( ../../ugene_plugin_common.pri )
 
-QT += testlib
-greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets
+QT += testlib webkitwidgets
 
 INCLUDEPATH += ../../corelibs/U2View/_tmp/ ../../libs_3rdparty/QSpec/src
 LIBS +=-L../../_release -lhumimit
@@ -30,6 +29,7 @@ unix {
 
 win32 {
     LIBS += User32.lib Gdi32.lib
+    QMAKE_CXXFLAGS += -bigobj
 }
 
 macx {
diff --git a/src/plugins/GUITestBase/GUITestBase.pro b/src/plugins/GUITestBase/GUITestBase.pro
index 94afb77..765ceb7 100644
--- a/src/plugins/GUITestBase/GUITestBase.pro
+++ b/src/plugins/GUITestBase/GUITestBase.pro
@@ -7,12 +7,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/crazy_user/GUICrazyUserTest.h \
 #   Runnables
 #   Runnables / Qt
-#            src/runnables/qt/ColorDialogFiller.h \
-#            src/runnables/qt/DefaultDialogFiller.h \
             src/runnables/qt/EscapeClicker.h \
-#            src/runnables/qt/FontDialogFiller.h \
-#            src/runnables/qt/MessageBoxFiller.h \
-#            src/runnables/qt/PopupChooser.h \
 #   Runnables / UGENE
 #   Runnables / UGENE / ugeneui
             src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h \
@@ -51,6 +46,8 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h \
             src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h \
             src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h \
+            src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h \
+            src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.h \
             src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h \
             src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h \
             src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h \
@@ -84,7 +81,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h \
             src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h \
             src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h \
-            src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h \
+            src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.h \
             src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h \
             src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h \
             src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h \
@@ -114,10 +111,12 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h \
             src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h \
 #   Runnables / UGENE / plugins / external_tools
+            src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h \
+            src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h \
             src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h \
 #   Runnables / UGENE / plugins / orf_marker
@@ -146,20 +145,21 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/GTDatabaseConfig.h \
             src/GTUtilsAnnotationsHighlightingTreeView.h \
             src/GTUtilsAnnotationsTreeView.h \
-#            src/GTUtilsApp.h \
             src/GTUtilsAssemblyBrowser.h \
             src/GTUtilsBookmarksTreeView.h \
             src/GTUtilsCircularView.h \
             src/GTUtilsDashboard.h \
-#            src/GTUtilsDialog.h \
             src/GTUtilsDocument.h \
             src/GTUtilsEscClicker.h \
             src/GTUtilsExternalTools.h \
             src/GTUtilsLog.h \
+            src/GTUtilsMcaEditor.h \
+            src/GTUtilsMcaEditorSequenceArea.h \
             src/GTUtilsMdi.h \
             src/GTUtilsMsaEditor.h \
             src/GTUtilsMsaEditorSequenceArea.h \
             src/GTUtilsNotifications.h \
+            src/GTUtilsOptionPanelMca.h \
             src/GTUtilsOptionPanelMSA.h \
             src/GTUtilsOptionPanelSequenceView.h \
             src/GTUtilsOptionsPanel.h \
@@ -173,18 +173,20 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/GTUtilsSharedDatabaseDocument.h \
             src/GTUtilsTask.h \
             src/GTUtilsTaskTreeView.h \
-#            src/GTUtilsToolTip.h \
             src/GTUtilsWizard.h \
             src/GTUtilsWorkflowDesigner.h \
             src/GTUtilsStartPage.h \
 #   Tests
-            src/tests/GUIInitialChecks.h \
+            src/tests/PosteriorActions.h \
+            src/tests/PosteriorChecks.h \
+            src/tests/PreliminaryActions.h \
 #   Tests/Regression Scenarios
             src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h \
+            src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h \
 #   Tests/Common Scenarios
             src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h \
             src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h \
@@ -203,6 +205,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/common_scenarios/cloning/GTTestsCloning.h \
             src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h \
             src/tests/common_scenarios/dp_view/GTTestsDpView.h \
+            src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.h \
             src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.h \
             src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h \
             src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h \
@@ -215,6 +218,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h \
             src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h \
             src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h \
+            src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.h \
             src/tests/common_scenarios/project/GTTestsProject.h \
             src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h \
             src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h \
@@ -227,6 +231,7 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h \
             src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h \
             src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h \
+            src/tests/common_scenarios/sanger/GTTestsSanger.h \
             src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h \
             src/tests/common_scenarios/sequence_view/GTTestsSequenceView.h \
             src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h \
@@ -238,52 +243,17 @@ HEADERS +=  src/GUITestBasePlugin.h \
             src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h \
             src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h \
             src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h \
-            src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h \
+            src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.h \
             src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h \
             src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h \
 #   UGENE primitives
             src/api/GTBaseCompleter.h \
+            src/api/GTGraphicsItem.h \
             src/api/GTMSAEditorStatusWidget.h \
             src/api/GTRegionSelector.h \
             src/api/GTSequenceReadingModeDialog.h \
             src/api/GTSequenceReadingModeDialogUtils.h \
-#   Qt primitives
-#            src/primitives/GTAction.h \
-#            src/api/GTCheckBox.h \
-#            src/system/GTClipboard.h \
-#            src/primitives/GTComboBox.h \
-#            src/api/GTDoubleSpinBox.h \
-#            src/system/GTFile.h \
-#            src/api/GTFileDialog.h \
-#            src/GTGlobals.h \
-            src/api/GTGraphicsItem.h \ #\
-    src/test_runner/GUITestRunner.h \
-    src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h
-#            src/api/GTGroupBox.h \
-#            src/drivers/GTKeyboardDriver.h \
-#            src/api/GTKeyboardUtils.h \
-#            src/primitives/GTLineEdit.h \
-#            src/api/GTListWidget.h \
-#            src/api/GTMesnu.h \
-#            src/api/GTMenuBar.h \
-#            src/api/GTMouse.h \
-#            src/drivers/GTMouseDriver.h \
-#            src/api/GTPlainTextEdit.h \
-#            src/api/GTRadioButton.h \
-#            src/api/GTScrollBar.h \
-#            src/api/GTSlider.h \
-#            src/primitives/GTSpinBox.h \
-#            src/api/GTTabBar.h \
-#            src/api/GTTabWidget.h \
-#            src/api/GTTableView.h  \
-#            src/api/GTTextEdit.h \
-#            src/api/GTThread.h \
-#            src/api/GTToolbar.h \
-#            src/api/GTTreeView.h \
-#            src/api/GTTreeWidget.h \
-#            src/api/GTWebView.h #\
-#            src/primitives/GTWidget.h \
-#            src/api/private/GTMenuPrivate.h
+            src/test_runner/GUITestRunner.h
 
 SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/crazy_user/GTAbstractGUIAction.cpp \
@@ -291,12 +261,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/crazy_user/GUICrazyUserTest.cpp \
 #   Runnables
 #   Runnables / Qt
-#            src/runnables/qt/ColorDialogFiller.cpp \
-#            src/runnables/qt/DefaultDialogFiller.cpp \
             src/runnables/qt/EscapeClicker.cpp \
-#            src/runnables/qt/FontDialogFiller.cpp \
-#            src/runnables/qt/MessageBoxFiller.cpp \
-#            src/runnables/qt/PopupChooser.cpp \
 #   Runnables / UGENE
 #   Runnables / UGENE / ugeneui
             src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp \
@@ -335,6 +300,8 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp \
+            src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.cpp \
+            src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp \
             src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp \
             src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp \
@@ -368,7 +335,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp \
             src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp \
             src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp \
-            src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp \
+            src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.cpp \
             src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp \
             src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.cpp \
             src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp \
@@ -398,10 +365,12 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp \
             src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp \
 #   Runnables / UGENE / plugins / external_tools
+            src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp \
+            src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp \
             src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp \
 #   Runnables / UGENE / plugins / orf_marker
@@ -430,20 +399,21 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/GTDatabaseConfig.cpp \
             src/GTUtilsAnnotationsHighlightingTreeView.cpp \
             src/GTUtilsAnnotationsTreeView.cpp \
-#            src/GTUtilsApp.cpp \
             src/GTUtilsAssemblyBrowser.cpp \
             src/GTUtilsBookmarksTreeView.cpp \
             src/GTUtilsCircularView.cpp \
             src/GTUtilsDashboard.cpp \
-#            src/GTUtilsDialog.cpp \
             src/GTUtilsDocument.cpp \
             src/GTUtilsEscClicker.cpp \
             src/GTUtilsExternalTools.cpp \
             src/GTUtilsLog.cpp \
+            src/GTUtilsMcaEditor.cpp \
+            src/GTUtilsMcaEditorSequenceArea.cpp \
             src/GTUtilsMdi.cpp \
             src/GTUtilsMsaEditor.cpp \
             src/GTUtilsMsaEditorSequenceArea.cpp \
             src/GTUtilsNotifications.cpp \
+            src/GTUtilsOptionPanelMca.cpp \
             src/GTUtilsOptionPanelMSA.cpp \
             src/GTUtilsOptionPanelSequenceView.cpp \
             src/GTUtilsOptionsPanel.cpp \
@@ -457,18 +427,20 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/GTUtilsSharedDatabaseDocument.cpp \
             src/GTUtilsTask.cpp \
             src/GTUtilsTaskTreeView.cpp \
-#            src/GTUtilsToolTip.cpp \
             src/GTUtilsWizard.cpp \
             src/GTUtilsWorkflowDesigner.cpp \
             src/GTUtilsStartPage.cpp \
 #   Tests
-            src/tests/GUIInitialChecks.cpp \
+            src/tests/PreliminaryActions.cpp \
+            src/tests/PosteriorActions.cpp \
+            src/tests/PosteriorChecks.cpp \
 #   Tests/Regression Scenarios
             src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.cpp \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.cpp \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.cpp \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.cpp \
             src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.cpp \
+            src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp \
 #   Tests/Common Scenarios
             src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.cpp \
             src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp \
@@ -487,6 +459,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/common_scenarios/cloning/GTTestsCloning.cpp \
             src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.cpp \
             src/tests/common_scenarios/dp_view/GTTestsDpView.cpp \
+            src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.cpp \
             src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.cpp \
             src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.cpp \
             src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp \
@@ -499,6 +472,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp \
             src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp \
             src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp \
+            src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.cpp \
             src/tests/common_scenarios/project/GTTestsProject.cpp \
             src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.cpp \
             src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp \
@@ -511,6 +485,7 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.cpp \
             src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.cpp \
             src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.cpp \
+            src/tests/common_scenarios/sanger/GTTestsSanger.cpp \
             src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.cpp \
             src/tests/common_scenarios/sequence_view/GTTestsSequenceView.cpp \
             src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.cpp \
@@ -522,63 +497,17 @@ SOURCES +=  src/GUITestBasePlugin.cpp \
             src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.cpp \
             src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.cpp \
             src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.cpp \
-            src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.cpp \
+            src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.cpp \
             src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.cpp \
             src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.cpp \
 #   UGENE primitives
             src/api/GTBaseCompleter.cpp \
+            src/api/GTGraphicsItem.cpp \
             src/api/GTMSAEditorStatusWidget.cpp \
             src/api/GTRegionSelector.cpp \
             src/api/GTSequenceReadingModeDialog.cpp \
             src/api/GTSequenceReadingModeDialogUtils.cpp \
-#   Qt primitives
-#            src/api/GTAction.cpp \
-#            src/api/GTCheckBox.cpp \
-#            src/api/GTClipboard.cpp \
-#            src/api/GTComboBox.cpp \
-#            src/api/GTDoubleSpinBox.cpp \
-#            src/api/GTFile.cpp \
-#            src/api/GTFileDialog.cpp \
-#            src/api/GTGlobals.cpp \
-            src/api/GTGraphicsItem.cpp \ #\
-    src/test_runner/GUITestRunner.cpp \
-    src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp
-#            src/api/GTGroupBox.cpp \
-#            src/api/GTKeyboardDriver.cpp \
-#            src/api/GTKeyboardDriverLinux.cpp \
-#            src/api/GTKeyboardDriverMac.cpp \
-#            src/api/GTKeyboardDriverWindows.cpp \
-#            src/api/GTKeyboardUtils.cpp \
-#            src/api/GTLineEdit.cpp \
-#            src/api/GTListWidget.cpp \
-#            src/api/GTMenu.cpp \
-#            src/api/GTMenuBar.cpp \
-#            src/api/GTMouse.cpp \
-#            src/api/GTMouseDriver.cpp \
-#            src/api/GTMouseDriverLinux.cpp \
-#            src/api/GTMouseDriverMac.cpp \
-#            src/api/GTMouseDriverWindows.cpp \
-#            src/api/GTPlainTextEdit.cpp \
-#            src/api/GTRadioButton.cpp \
-#            src/api/GTScrollBar.cpp \
-#            src/api/GTSlider.cpp \
-#            src/api/GTSpinBox.cpp \
-#            src/api/GTTabBar.cpp \
-#            src/api/GTTabWidget.cpp \
-#            src/api/GTTableView.cpp \
-#            src/api/GTTextEdit.cpp \
-#            src/api/GTThread.cpp \
-#            src/api/GTToolbar.cpp \
-#            src/api/GTTreeView.cpp \
-#            src/api/GTTreeWidget.cpp \
-#            src/api/GTWebView.cpp #\
-#            src/api/GTWidget.cpp \
-#            src/api/private/GTMenuPrivate.cpp
-
-#macx {
-#OBJECTIVE_HEADERS += src/api/private/GTMenuPrivateMac.h
-#OBJECTIVE_SOURCES += src/api/private/GTMenuPrivateMac.mm
-#}
+            src/test_runner/GUITestRunner.cpp
 
 FORMS += \
     src/test_runner/GUITestRunner.ui
diff --git a/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp b/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
index c001e89..c659a39 100644
--- a/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
+++ b/src/plugins/GUITestBase/src/GTDatabaseConfig.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QSettings>
+#include <QSettings>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/PasswordStorage.h>
diff --git a/src/plugins/GUITestBase/src/GTDatabaseConfig.h b/src/plugins/GUITestBase/src/GTDatabaseConfig.h
index 7fd92f3..39a962d 100644
--- a/src/plugins/GUITestBase/src/GTDatabaseConfig.h
+++ b/src/plugins/GUITestBase/src/GTDatabaseConfig.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_DATABASE_CONFIG_H_
 #define _U2_GUI_DATABASE_CONFIG_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
index 049a9e2..659ee18 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
index f2bbb6a..39a0936 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsHighlightingTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
index bd28e73..54666ae 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
index 191fe6a..51ced1c 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAnnotationsTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
index c8dd91c..f01baa4 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QSharedPointer>
+#include <QSharedPointer>
 #include <QApplication>
 #include <QLabel>
 #include <QScrollBar>
-
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QLineEdit>
 
 #include <U2View/AssemblyBrowser.h>
 #include <U2View/AssemblyModel.h>
diff --git a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
index 6ba68fe..56343df 100644
--- a/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
+++ b/src/plugins/GUITestBase/src/GTUtilsAssemblyBrowser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,6 @@
 #ifndef _U2_GT_UTILS_ASSEMBLY_BROWSER_H_
 #define _U2_GT_UTILS_ASSEMBLY_BROWSER_H_
 
-#include <QtGlobal>
 #include <QModelIndex>
 #include <GTGlobals.h>
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
index 4518c08..1993f8d 100644
--- a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "qglobal.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QMainWindow>
+#include <QTreeWidget>
+
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <utils/GTUtilsDialog.h>
 
 #include <U2Core/ProjectModel.h>
 
@@ -36,15 +38,8 @@
 #include <U2View/AnnotationsTreeView.h>
 
 #include "GTUtilsBookmarksTreeView.h"
-#include "utils/GTUtilsDialog.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTLineEdit.h>
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTWidget.h>
-#include "primitives/PopupChooser.h"
 
 namespace U2 {
 using namespace HI;
@@ -54,7 +49,7 @@ using namespace HI;
 const QString GTUtilsBookmarksTreeView::widgetName = ACTION_BOOKMARK_TREE_VIEW;
 
 #define GT_METHOD_NAME "getTreeWidget"
-QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
+QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(GUITestOpStatus &os) {
 
     QTreeWidget *treeWidget = qobject_cast<QTreeWidget*>(GTWidget::findWidget(os, widgetName, NULL, false));
 
@@ -69,7 +64,7 @@ QTreeWidget* GTUtilsBookmarksTreeView::getTreeWidget(HI::GUITestOpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "findItem"
-QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
+QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
 
     GT_CHECK_RESULT(itemName.isEmpty() == false, "Item name is empty", NULL);
 
@@ -97,7 +92,7 @@ QTreeWidgetItem* GTUtilsBookmarksTreeView::findItem(HI::GUITestOpStatus &os, con
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedItem"
-QString GTUtilsBookmarksTreeView::getSelectedItem(HI::GUITestOpStatus &os)
+QString GTUtilsBookmarksTreeView::getSelectedItem(GUITestOpStatus &os)
 {
     QTreeWidget *treeWidget = getTreeWidget(os);
     GT_CHECK_RESULT(treeWidget != NULL, "Tree widget is NULL", NULL);
@@ -114,21 +109,44 @@ QString GTUtilsBookmarksTreeView::getSelectedItem(HI::GUITestOpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "addBookmark"
-void GTUtilsBookmarksTreeView::addBookmark(HI::GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName) {
+void GTUtilsBookmarksTreeView::addBookmark(GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName) {
     Q_UNUSED(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK));
     GTMouseDriver::moveTo(getItemCenter(os, viewName));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep(500);
 
-    QWidget *bookmarkLineEdit = getTreeWidget(os)->itemWidget(getTreeWidget(os)->currentItem(), 0);
-    GTLineEdit::setText(os, qobject_cast<QLineEdit *>(bookmarkLineEdit), bookmarkName);
+    if (!bookmarkName.isEmpty()) {
+        QWidget *bookmarkLineEdit = getTreeWidget(os)->itemWidget(getTreeWidget(os)->currentItem(), 0);
+        GTLineEdit::setText(os, qobject_cast<QLineEdit *>(bookmarkLineEdit), bookmarkName);
+    }
     GTKeyboardDriver::keyClick(Qt::Key_Enter);
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "deleteBookmark"
+void GTUtilsBookmarksTreeView::deleteBookmark(GUITestOpStatus &os, const QString &bookmarkName) {
+    clickBookmark(os, bookmarkName);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickBookmark"
+void GTUtilsBookmarksTreeView::clickBookmark(GUITestOpStatus &os, const QString &bookmarkName) {
+    GTMouseDriver::moveTo(getItemCenter(os, bookmarkName));
+    GTMouseDriver::click();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "doubleClickBookmark"
+void GTUtilsBookmarksTreeView::doubleClickBookmark(GUITestOpStatus &os, const QString &bookmarkName) {
+    GTMouseDriver::moveTo(getItemCenter(os, bookmarkName));
+    GTMouseDriver::doubleClick();
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "getItemCenter"
-QPoint GTUtilsBookmarksTreeView::getItemCenter(HI::GUITestOpStatus &os, const QString &itemName) {
+QPoint GTUtilsBookmarksTreeView::getItemCenter(GUITestOpStatus &os, const QString &itemName) {
 
     QTreeWidgetItem* item = findItem(os, itemName);
     GT_CHECK_RESULT(item != NULL, "Item " + itemName + " is NULL", QPoint());
diff --git a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
index bd81c48..f19c994 100644
--- a/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsBookmarksTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_BOOKMARKS_TREE_VIEW_UTILS_H_
 #define _U2_GUI_BOOKMARKS_TREE_VIEW_UTILS_H_
 
-#include "GTGlobals.h"
+#include <GTGlobals.h>
 
 class QTreeWidget;
 class QTreeWidgetItem;
@@ -36,13 +36,16 @@ public:
 
     // returns center or item's rect
     // fails if the item wasn't found
-    static QPoint getItemCenter(HI::GUITestOpStatus &os, const QString &itemName);
+    static QPoint getItemCenter(GUITestOpStatus &os, const QString &itemName);
 
-    static QTreeWidgetItem* findItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
-    static QString getSelectedItem(HI::GUITestOpStatus &os);
-//	static QString getBookmarkItemName(HI::GUITestOpStatus &os, AVItem* avItem);
+    static QTreeWidgetItem* findItem(GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
+    static QString getSelectedItem(GUITestOpStatus &os);
 
-    static void addBookmark(HI::GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName);
+    static void addBookmark(GUITestOpStatus &os, const QString &viewName, const QString &bookmarkName = QString());
+    static void deleteBookmark(GUITestOpStatus &os, const QString &bookmarkName);
+
+    static void clickBookmark(GUITestOpStatus &os, const QString &bookmarkName);
+    static void doubleClickBookmark(GUITestOpStatus &os, const QString &bookmarkName);
 
     static const QString widgetName;
 };
diff --git a/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp b/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
index 9e9de2e..2a31297 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsDashboard.cpp
@@ -1,23 +1,23 @@
 /**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
-* http://ugene.net
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-* MA 02110-1301, USA.
-*/
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
 
 #include <QTabWidget>
 #include <QWebElement>
@@ -30,6 +30,7 @@
 #include "GTUtilsDashboard.h"
 
 namespace U2 {
+using namespace HI;
 
 #define GT_CLASS_NAME "GTUtilsDashboard"
 QMap<QString, GTUtilsDashboard::Tabs> GTUtilsDashboard::initTabMap(){
@@ -50,6 +51,42 @@ QTabWidget* GTUtilsDashboard::getTabWidget(HI::GUITestOpStatus &os){
     return GTWidget::findExactWidget<QTabWidget*>(os, "WorkflowTabView");
 }
 
+QStringList GTUtilsDashboard::getOutputFiles(HI::GUITestOpStatus &os, const QString &producerName) {
+    const HIWebElement outputFilesWidget = GTWebView::findElementById(os, getDashboard(os), "output files", "table");
+    const QList<HIWebElement> outputFilesButtons = GTWebView::findElementsById(os, getDashboard(os), producerName, "button", outputFilesWidget);
+    QStringList outputFilesNames;
+    foreach (const HIWebElement &outputFilesButton, outputFilesButtons) {
+        const QString outputFileName = outputFilesButton.toPlainText();
+        if (!outputFileName.isEmpty()) {
+            outputFilesNames << outputFileName;
+        }
+    }
+    return outputFilesNames;
+}
+
+#define GT_METHOD_NAME "clickOutputFile"
+void GTUtilsDashboard::clickOutputFile(GUITestOpStatus &os, const QString &outputFileName, const QString &producerName) {
+    const QList<HIWebElement> outputFilesButtons = GTWebView::findElementsById(os, getDashboard(os), producerName, "button");
+    foreach (const HIWebElement &outputFilesButton, outputFilesButtons) {
+        QString buttonText = outputFilesButton.toPlainText();
+        if (buttonText == outputFileName) {
+            click(os, outputFilesButton);
+            return;
+        }
+
+        if (buttonText.endsWith("...")) {
+            buttonText.chop(QString("...").length());
+            if (!buttonText.isEmpty() && outputFileName.startsWith(buttonText)) {
+                click(os, outputFilesButton);
+                return;
+            }
+        }
+    }
+
+    GT_CHECK(false, QString("The output file with name '%1' produced by '%2' not found").arg(outputFileName).arg(producerName));
+}
+#undef GT_METHOD_NAME
+
 HIWebElement GTUtilsDashboard::findElement(HI::GUITestOpStatus &os, QString text, QString tag, bool exactMatch){
     return GTWebView::findElement(os, getDashboard(os), text, tag, exactMatch);
 }
@@ -76,9 +113,8 @@ void GTUtilsDashboard::openTab(HI::GUITestOpStatus &os, Tabs tab){
     HIWebElement el = GTWebView::findElement(os, getDashboard(os), tabMap.key(tab), "A");
     GTWebView::click(os, getDashboard(os), el);
 }
-
 #undef GT_METHOD_NAME
 
 #undef GT_CLASS_NAME
-}
 
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsDashboard.h b/src/plugins/GUITestBase/src/GTUtilsDashboard.h
index d584936..5270606 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDashboard.h
+++ b/src/plugins/GUITestBase/src/GTUtilsDashboard.h
@@ -1,27 +1,26 @@
 /**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
-* http://ugene.net
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-* MA 02110-1301, USA.
-*/
-
-
-#ifndef GTUTILSDASHBOARD_H
-#define GTUTILSDASHBOARD_H
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GT_UTILS_DASHBOARD_H_
+#define _U2_GT_UTILS_DASHBOARD_H_
 
 #include "GTGlobals.h"
 #include <primitives/GTWebView.h>
@@ -31,19 +30,20 @@ class QWebElement;
 class QTabWidget;
 
 namespace U2 {
-using namespace HI;
 
-class GTUtilsDashboard
-{
+class GTUtilsDashboard {
 public:
     enum Tabs{Overview, Input, ExternalTools};
     static QWebView* getDashboard(HI::GUITestOpStatus &os);
     static QTabWidget* getTabWidget(HI::GUITestOpStatus &os);
 
-    static HIWebElement findElement(HI::GUITestOpStatus &os, QString text, QString tag = "*", bool exactMatch = false);
-    static HIWebElement findTreeElement(HI::GUITestOpStatus &os, QString text);
-    static HIWebElement findContextMenuElement(HI::GUITestOpStatus &os, QString text);
-    static void click(HI::GUITestOpStatus &os, HIWebElement el, Qt::MouseButton button = Qt::LeftButton);
+    static QStringList getOutputFiles(HI::GUITestOpStatus &os, const QString &producerName = "");
+    static void clickOutputFile(HI::GUITestOpStatus &os, const QString &outputFileName, const QString &producerName = "");
+
+    static HI::HIWebElement findElement(HI::GUITestOpStatus &os, QString text, QString tag = "*", bool exactMatch = false);
+    static HI::HIWebElement findTreeElement(HI::GUITestOpStatus &os, QString text);
+    static HI::HIWebElement findContextMenuElement(HI::GUITestOpStatus &os, QString text);
+    static void click(HI::GUITestOpStatus &os, HI::HIWebElement el, Qt::MouseButton button = Qt::LeftButton);
     static bool areThereProblems(HI::GUITestOpStatus &os);
     static void openTab(HI::GUITestOpStatus &os, Tabs tab);
 
@@ -52,6 +52,6 @@ private:
     static const QMap<QString, Tabs> tabMap;
 };
 
-}
+}   // namespace U2
 
-#endif // GTUTILSDASHBOARD_H
+#endif // _U2_GT_UTILS_DASHBOARD_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
index 76171d6..8f67e9f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsDocument.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,14 +31,8 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/ProjectModel.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-
+#include <QApplication>
+#include <QTreeWidgetItem>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsDocument.h b/src/plugins/GUITestBase/src/GTUtilsDocument.h
index fe22df3..3b9b21b 100644
--- a/src/plugins/GUITestBase/src/GTUtilsDocument.h
+++ b/src/plugins/GUITestBase/src/GTUtilsDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
index 2124b0c..4a32b78 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsEscClicker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsEscClicker.h b/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
index 2038499..2ce92df 100644
--- a/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
+++ b/src/plugins/GUITestBase/src/GTUtilsEscClicker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp b/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
index 4407c47..1199f7f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsExternalTools.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsExternalTools.h b/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
index d64c6a9..7d2038f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
+++ b/src/plugins/GUITestBase/src/GTUtilsExternalTools.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsLog.cpp b/src/plugins/GUITestBase/src/GTUtilsLog.cpp
index c5009bd..5f7c94b 100644
--- a/src/plugins/GUITestBase/src/GTUtilsLog.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsLog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,8 +56,14 @@ QList<LogMessage*> GTLogTracer::getMessages(){
 }
 
 bool GTLogTracer::checkMessage(QString s){
-    foreach (LogMessage* message, getMessages()){
-        if(message->text.contains(s,Qt::CaseInsensitive)){
+    QList<LogMessage*> messages = getMessages();
+    QList<QString> textMessages;
+    foreach(LogMessage* message, messages){
+        textMessages.append(message->text);
+    }
+
+    foreach(QString message, textMessages){
+        if (message.contains(s, Qt::CaseInsensitive)){
             return true;
         }
     }
diff --git a/src/plugins/GUITestBase/src/GTUtilsLog.h b/src/plugins/GUITestBase/src/GTUtilsLog.h
index b22f579..84a9978 100644
--- a/src/plugins/GUITestBase/src/GTUtilsLog.h
+++ b/src/plugins/GUITestBase/src/GTUtilsLog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,6 @@ public:
     static void checkContainsError(HI::GUITestOpStatus &os, const GTLogTracer& logTracer, const QString &messagePart);
     static void checkContainsMessage(HI::GUITestOpStatus &os, const GTLogTracer& logTracer, bool expected = true);
     static QStringList getErrors(HI::GUITestOpStatus &os, const GTLogTracer &logTracer);
-
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsMcaEditor.cpp b/src/plugins/GUITestBase/src/GTUtilsMcaEditor.cpp
new file mode 100644
index 0000000..e3ea219
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsMcaEditor.cpp
@@ -0,0 +1,259 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QLabel>
+#include <QTextDocument>
+
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTWidget.h>
+
+#include <U2Core/U2SafePoints.h>
+
+#include <U2View/McaEditorConsensusArea.h>
+#include <U2View/McaEditor.h>
+#include <U2View/McaEditorNameList.h>
+#include <U2View/McaEditorSequenceArea.h>
+#include <U2View/McaEditorWgt.h>
+#include <U2View/MSAEditorOffsetsView.h>
+
+#include "GTUtilsMcaEditor.h"
+#include "GTUtilsMcaEditorSequenceArea.h"
+#include "GTUtilsMdi.h"
+
+namespace U2 {
+using namespace HI;
+
+#define GT_CLASS_NAME "GTUtilsMcaEditor"
+
+#define GT_METHOD_NAME "getEditor"
+McaEditor *GTUtilsMcaEditor::getEditor(GUITestOpStatus &os) {
+    McaEditorWgt *editorUi = getEditorUi(os);
+    CHECK_OP(os, NULL);
+    McaEditor *editor = editorUi->getEditor();
+    GT_CHECK_RESULT(NULL != editor, "MCA Editor is NULL", NULL);
+    return editor;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getEditorUi"
+McaEditorWgt *GTUtilsMcaEditor::getEditorUi(GUITestOpStatus &os) {
+    QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
+    CHECK_OP(os, NULL);
+    McaEditorWgt *mcaEditorWgt = activeWindow->findChild<McaEditorWgt *>();
+    GT_CHECK_RESULT(NULL != mcaEditorWgt, "MCA Editor widget is NULL", NULL);
+    return mcaEditorWgt;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceLabel"
+QLabel *GTUtilsMcaEditor::getReferenceLabel(GUITestOpStatus &os) {
+    QWidget *referenceLabelContainerWidget = GTWidget::findExactWidget<QWidget *>(os, "reference label container widget", getEditorUi(os));
+    GT_CHECK_RESULT(NULL != referenceLabelContainerWidget, "Reference label not found", NULL);
+    return GTWidget::findExactWidget<QLabel *>(os, "", referenceLabelContainerWidget);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getNameListArea"
+McaEditorNameList *GTUtilsMcaEditor::getNameListArea(GUITestOpStatus &os) {
+    return GTWidget::findExactWidget<McaEditorNameList *>(os, "mca_editor_name_list", getEditorUi(os));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSequenceArea"
+McaEditorSequenceArea *GTUtilsMcaEditor::getSequenceArea(GUITestOpStatus &os) {
+    return GTWidget::findExactWidget<McaEditorSequenceArea *>(os, "mca_editor_sequence_area", getEditorUi(os));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getConsensusArea"
+McaEditorConsensusArea* GTUtilsMcaEditor::getConsensusArea(GUITestOpStatus &os) {
+    QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
+    CHECK_OP(os, NULL);
+    return GTWidget::findExactWidget<McaEditorConsensusArea*>(os, "consArea", activeWindow);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getMcaRow"
+MultipleAlignmentRowData* GTUtilsMcaEditor::getMcaRow(GUITestOpStatus &os, int rowNum) {
+    McaEditor* mcaEditor = GTUtilsMcaEditor::getEditor(os);
+    GT_CHECK_RESULT(NULL != mcaEditor, "McaEditor not found", NULL);
+
+    MultipleChromatogramAlignmentObject* maObj = mcaEditor->getMaObject();
+    GT_CHECK_RESULT(NULL != maObj, "MultipleChromatogramAlignmentObject not found", NULL);
+
+    MultipleAlignmentRow row = maObj->getRow(rowNum);
+
+    return row.data();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getOffsetAction"
+QAction* GTUtilsMcaEditor::getOffsetAction(GUITestOpStatus &os) {
+    McaEditorWgt* editorWgt = GTUtilsMcaEditor::getEditorUi(os);
+    GT_CHECK_RESULT(editorWgt != NULL, "McaEditorWgt not found", NULL);
+
+    MSAEditorOffsetsViewController* offsetController = editorWgt->getOffsetsViewController();
+    GT_CHECK_RESULT(offsetController != NULL, "MSAEditorOffsetsViewController is NULL", NULL);
+    return offsetController->getToggleColumnsViewAction();
+}
+
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceLabelText"
+QString GTUtilsMcaEditor::getReferenceLabelText(GUITestOpStatus &os) {
+    QLabel *referenceLabel = getReferenceLabel(os);
+    GT_CHECK_RESULT(NULL != referenceLabel, "Reference label is NULL", "");
+    if (referenceLabel->textFormat() != Qt::PlainText) {
+        QTextDocument textDocument;
+        textDocument.setHtml(referenceLabel->text());
+        return textDocument.toPlainText();
+    } else {
+        return referenceLabel->text();
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReadsCount"
+int GTUtilsMcaEditor::getReadsCount(GUITestOpStatus &os) {
+    QWidget *statusBar = GTWidget::findWidget(os, "mca_editor_status_bar", getEditorUi(os));
+    QLabel *readsCountLabel = GTWidget::findExactWidget<QLabel *>(os, "Line", statusBar);
+
+    QRegExp readsCounRegExp("Ln \\d+|\\- / (\\d+)");
+    readsCounRegExp.indexIn(readsCountLabel->text());
+    const QString totalReadsCountString = readsCounRegExp.cap(1);
+
+    bool isNumber = false;
+    const int totalReadsCount =  totalReadsCountString.toInt(&isNumber);
+    GT_CHECK_RESULT(isNumber, QString("Can't convert the reads count string to number: %1").arg(totalReadsCountString), -1);
+
+    return totalReadsCount;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReadsNames"
+const QStringList GTUtilsMcaEditor::getReadsNames(GUITestOpStatus &os) {
+    return getEditor(os)->getMaObject()->getMultipleAlignment()->getRowNames();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getDirectReadsNames"
+const QStringList GTUtilsMcaEditor::getDirectReadsNames(GUITestOpStatus &os) {
+    QStringList directReadsNames;
+    MultipleChromatogramAlignmentObject *mcaObject = getEditor(os)->getMaObject();
+    const int rowsCount = mcaObject->getNumRows();
+    for (int i = 0; i < rowsCount; i++) {
+        if (!mcaObject->getMcaRow(i)->isReversed()) {
+            directReadsNames << mcaObject->getMcaRow(i)->getName();
+        }
+    }
+    return directReadsNames;
+
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReverseComplementReadsNames"
+const QStringList GTUtilsMcaEditor::getReverseComplementReadsNames(GUITestOpStatus &os) {
+    QStringList reverseComplementedReadsNames;
+    MultipleChromatogramAlignmentObject *mcaObject = getEditor(os)->getMaObject();
+    const int rowsCount = mcaObject->getNumRows();
+    for (int i = 0; i < rowsCount; i++) {
+        if (mcaObject->getMcaRow(i)->isReversed()) {
+            reverseComplementedReadsNames << mcaObject->getMcaRow(i)->getName();
+        }
+    }
+    return reverseComplementedReadsNames;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReadNameRect"
+QRect GTUtilsMcaEditor::getReadNameRect(GUITestOpStatus &os, const QString &readName) {
+    McaEditorNameList *nameList = getNameListArea(os);
+    GT_CHECK_RESULT(NULL != nameList, "McaEditorNameList not found", QRect());
+
+    const QStringList names = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    const int rowNumber = names.indexOf(readName);
+    GT_CHECK_RESULT(0 <= rowNumber, QString("Read '%1' not found").arg(readName), QRect());
+    return getReadNameRect(os, rowNumber);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getRedNameRect"
+QRect GTUtilsMcaEditor::getReadNameRect(GUITestOpStatus &os, int rowNumber) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(0 <= rowNumber, QString("Read '%1' not found").arg(rowNumber), QRect());
+
+    McaEditorNameList *nameList = getNameListArea(os);
+    GT_CHECK_RESULT(NULL != nameList, "McaEditorNameList not found", QRect());
+
+    const int rowHeight = GTUtilsMcaEditorSequenceArea::getRowHeight(os, rowNumber);
+
+    return QRect(nameList->mapToGlobal(QPoint(0, rowHeight * rowNumber)), nameList->mapToGlobal(QPoint(nameList->width(), rowHeight * (rowNumber + 1))));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveToReadName"
+void GTUtilsMcaEditor::moveToReadName(GUITestOpStatus &os, const QString &readName) {
+    const QRect sequenceNameRect = getReadNameRect(os, readName);
+    GTMouseDriver::moveTo(sequenceNameRect.center());
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickReadName"
+void GTUtilsMcaEditor::clickReadName(GUITestOpStatus &os, const QString &readName, Qt::MouseButton mouseButton) {
+    moveToReadName(os, readName);
+    GTMouseDriver::click(mouseButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "undo"
+void GTUtilsMcaEditor::undo(GUITestOpStatus &os) {
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_undo"));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "redo"
+void GTUtilsMcaEditor::redo(GUITestOpStatus &os) {
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_redo"));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "zoomIn"
+void GTUtilsMcaEditor::zoomIn(HI::GUITestOpStatus &os) {
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Zoom In"));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "zoomOut"
+void GTUtilsMcaEditor::zoomOut(HI::GUITestOpStatus &os) {
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Zoom Out"));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "resetZoom"
+void GTUtilsMcaEditor::resetZoom(HI::GUITestOpStatus &os) {
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Reset Zoom"));
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsMcaEditor.h b/src/plugins/GUITestBase/src/GTUtilsMcaEditor.h
new file mode 100644
index 0000000..0c25752
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsMcaEditor.h
@@ -0,0 +1,74 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GT_UTILS_MCA_EDITOR_H_
+#define _U2_GT_UTILS_MCA_EDITOR_H_
+
+class QLabel;
+
+namespace HI{
+class GUITestOpStatus;
+}
+
+namespace U2 {
+
+class McaEditor;
+class McaEditorConsensusArea;
+class McaEditorNameList;
+class McaEditorSequenceArea;
+class McaEditorWgt;
+class MultipleAlignmentRowData;
+
+class GTUtilsMcaEditor {
+public:
+    static McaEditor *getEditor(HI::GUITestOpStatus &os);
+    static McaEditorWgt *getEditorUi(HI::GUITestOpStatus &os);
+    static QLabel *getReferenceLabel(HI::GUITestOpStatus &os);
+    static McaEditorNameList *getNameListArea(HI::GUITestOpStatus &os);
+    static McaEditorSequenceArea *getSequenceArea(HI::GUITestOpStatus &os);
+    static McaEditorConsensusArea* getConsensusArea(HI::GUITestOpStatus &os);
+    static MultipleAlignmentRowData* getMcaRow(HI::GUITestOpStatus &os, int rowNum);
+
+    static QAction* getOffsetAction(HI::GUITestOpStatus &os);
+
+    static QString getReferenceLabelText(HI::GUITestOpStatus &os);
+
+    static int getReadsCount(HI::GUITestOpStatus &os);
+    static const QStringList getReadsNames(HI::GUITestOpStatus &os);
+    static const QStringList getDirectReadsNames(HI::GUITestOpStatus &os);
+    static const QStringList getReverseComplementReadsNames(HI::GUITestOpStatus &os);
+
+    static QRect getReadNameRect(HI::GUITestOpStatus &os, const QString &readName);
+    static QRect getReadNameRect(HI::GUITestOpStatus &os, int rowNumber);
+
+    static void moveToReadName(HI::GUITestOpStatus &os, const QString &readName);
+    static void clickReadName(HI::GUITestOpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton = Qt::LeftButton);
+
+    static void undo(HI::GUITestOpStatus &os);
+    static void redo(HI::GUITestOpStatus &os);
+    static void zoomIn(HI::GUITestOpStatus &os);
+    static void zoomOut(HI::GUITestOpStatus &os);
+    static void resetZoom(HI::GUITestOpStatus &os);
+};
+
+}   // namespace U2
+
+#endif // _U2_GT_UTILS_MCA_EDITOR_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.cpp b/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.cpp
new file mode 100644
index 0000000..296a97f
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.cpp
@@ -0,0 +1,515 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <QMainWindow>
+#include <QStyleOptionSlider>
+
+#include <drivers/GTMouseDriver.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2View/ADVSingleSequenceWidget.h>
+#include <U2View/BaseWidthController.h>
+#include <U2View/DrawHelper.h>
+#include <U2View/McaEditor.h>
+#include <U2View/McaEditorConsensusArea.h>
+#include <U2View/McaEditorNameList.h>
+#include <U2View/McaEditorReferenceArea.h>
+#include <U2View/McaEditorSequenceArea.h>
+#include <U2View/McaEditorConsensusArea.h>
+
+#include <U2View/McaEditorWgt.h>
+#include <U2View/PanView.h>
+#include <U2View/RowHeightController.h>
+#include <U2View/SequenceObjectContext.h>
+
+#include "GTUtilsMcaEditor.h"
+#include "GTUtilsMcaEditorSequenceArea.h"
+#include "GTUtilsMdi.h"
+
+namespace U2 {
+using namespace HI;
+
+#define GT_CLASS_NAME "GTUtilsMcaEditorSequenceArea"
+
+#define GT_METHOD_NAME "getSequenceArea"
+McaEditorSequenceArea* GTUtilsMcaEditorSequenceArea::getSequenceArea(GUITestOpStatus &os) {
+    QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
+    CHECK_OP(os, NULL);
+
+    McaEditorSequenceArea *result = qobject_cast<McaEditorSequenceArea*>(GTWidget::findWidget(os, "mca_editor_sequence_area", activeWindow));
+    GT_CHECK_RESULT(NULL != result, "MsaEditorSequenceArea is not found", NULL);
+    return result;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getVisibleNames"
+QStringList GTUtilsMcaEditorSequenceArea::getVisibleNames(GUITestOpStatus &os) {
+    Q_UNUSED(os);
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    CHECK_SET_ERR_RESULT(editor != NULL, "McaEditor not found", QStringList());
+
+    McaEditorNameList *nameListArea = GTUtilsMcaEditor::getNameListArea(os);
+    CHECK_SET_ERR_RESULT(NULL != nameListArea, "Mca Editor name list area is NULL", QStringList());
+
+    const QList<int> visibleRowsIndexes = editor->getUI()->getDrawHelper()->getVisibleRowsIndexes(nameListArea->height());
+
+    QStringList visibleRowNames;
+    foreach(const int rowIndex, visibleRowsIndexes) {
+        visibleRowNames << editor->getMaObject()->getRow(rowIndex)->getName();
+    }
+    return visibleRowNames;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getRowHeight"
+int GTUtilsMcaEditorSequenceArea::getRowHeight(GUITestOpStatus &os, int rowNumber) {
+    QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
+    GT_CHECK_RESULT(activeWindow != NULL, "active mdi window is NULL", 0);
+    McaEditorWgt* ui = GTUtilsMdi::activeWindow(os)->findChild<McaEditorWgt*>();
+    return ui->getRowHeightController()->getRowHeightByNumber(rowNumber);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickToPosition"
+void GTUtilsMcaEditorSequenceArea::clickToPosition(GUITestOpStatus &os, const QPoint &globalMaPosition) {
+    McaEditorSequenceArea *mcaSeqArea = GTWidget::findExactWidget<McaEditorSequenceArea *>(os, "mca_editor_sequence_area", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != mcaSeqArea, "MCA Editor sequence area is not found");
+    GT_CHECK(mcaSeqArea->isInRange(globalMaPosition), "Position is out of range");
+
+    scrollToPosition(os, globalMaPosition);
+    const QPoint positionCenter(mcaSeqArea->getEditor()->getUI()->getBaseWidthController()->getBaseScreenCenter(globalMaPosition.x()),
+        mcaSeqArea->getEditor()->getUI()->getRowHeightController()->getRowScreenRangeByNumber(globalMaPosition.y()).center());
+    GT_CHECK(mcaSeqArea->rect().contains(positionCenter, false), "Position is not visible");
+
+    GTMouseDriver::moveTo(mcaSeqArea->mapToGlobal(positionCenter));
+    GTMouseDriver::click();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "scrollToPosition"
+void GTUtilsMcaEditorSequenceArea::scrollToPosition(GUITestOpStatus &os, const QPoint &position) {
+    McaEditorSequenceArea *mcaSeqArea = GTWidget::findExactWidget<McaEditorSequenceArea *>(os, "mca_editor_sequence_area", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != mcaSeqArea, "MSA Editor sequence area is not found");
+    GT_CHECK(mcaSeqArea->isInRange(position), "Position is out of range");
+
+    // scroll down
+    GScrollBar* vBar = GTWidget::findExactWidget<GScrollBar *>(os, "vertical_sequence_scroll", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != vBar, "Vertical scroll bar is not found");
+
+    QStyleOptionSlider vScrollBarOptions;
+    vScrollBarOptions.initFrom(vBar);
+
+    while (!mcaSeqArea->isRowVisible(position.y(), false)) {
+        const QRect sliderSpaceRect = vBar->style()->subControlRect(QStyle::CC_ScrollBar, &vScrollBarOptions, QStyle::SC_ScrollBarGroove, vBar);
+        const QPoint bottomEdge(sliderSpaceRect.width() / 2, sliderSpaceRect.y() + sliderSpaceRect.height());
+
+        GTMouseDriver::moveTo(vBar->mapToGlobal(bottomEdge) - QPoint(0, 1));
+        GTMouseDriver::click();
+    }
+
+    // scroll right
+    GScrollBar* hBar = GTWidget::findExactWidget<GScrollBar *>(os, "horizontal_sequence_scroll", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != hBar, "Horisontal scroll bar is not found");
+
+    QStyleOptionSlider hScrollBarOptions;
+    hScrollBarOptions.initFrom(hBar);
+
+    while (!mcaSeqArea->isPositionVisible(position.x(), false)) {
+        const QRect sliderSpaceRect = hBar->style()->subControlRect(QStyle::CC_ScrollBar, &hScrollBarOptions, QStyle::SC_ScrollBarGroove, hBar);
+        const QPoint rightEdge(sliderSpaceRect.x() + sliderSpaceRect.width(), sliderSpaceRect.height() / 2);
+
+        GTMouseDriver::moveTo(hBar->mapToGlobal(rightEdge) - QPoint(1, 0));
+        GTMouseDriver::click();
+    }
+
+    SAFE_POINT(mcaSeqArea->isVisible(position, false), "The position is still invisible after scrolling", );
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickCollapseTriangle"
+void GTUtilsMcaEditorSequenceArea::clickCollapseTriangle(GUITestOpStatus &os, QString rowName, bool showChromatogram){
+    McaEditorSequenceArea *mcaEditArea = qobject_cast<McaEditorSequenceArea*>(GTWidget::findWidget(os, "mca_editor_sequence_area"));
+    GT_CHECK(mcaEditArea != NULL, "McaEditorSequenceArea not found");
+
+    int rowNum = getVisibleNames(os).indexOf(rowName);
+    GT_CHECK(rowNum != -1, "sequence not found in nameList");
+    QWidget* nameList = GTWidget::findWidget(os, "mca_editor_name_list");
+    int yPos = mcaEditArea->getEditor()->getUI()->getRowHeightController()->getRowScreenCenterByNumber(rowNum);
+    if (showChromatogram) {
+        yPos -= 65;
+    }
+    QPoint localCoord = QPoint(15, yPos);
+    QPoint globalCoord = nameList->mapToGlobal(localCoord);
+    GTMouseDriver::moveTo(globalCoord);
+    GTMouseDriver::click();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "isCollapsed"
+bool GTUtilsMcaEditorSequenceArea::isChromatogramShown(GUITestOpStatus &os, QString rowName){
+    McaEditorSequenceArea *mcaEditArea = qobject_cast<McaEditorSequenceArea*>(GTWidget::findWidget(os, "mca_editor_sequence_area"));
+    GT_CHECK_RESULT(mcaEditArea != NULL, "McaEditorSequenceArea not found", false);
+    int rowNum = GTUtilsMcaEditor::getReadsNames(os).indexOf(rowName);
+    GT_CHECK_RESULT(rowNum != -1, "sequence not found in nameList", false);
+    int rowHeight = mcaEditArea->getEditor()->getUI()->getRowHeightController()->getRowHeight(rowNum);
+    bool isCollapsed = rowHeight > 100;
+    return isCollapsed;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getNameList"
+QStringList GTUtilsMcaEditorSequenceArea::getNameList(GUITestOpStatus &os) {
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    CHECK_SET_ERR_RESULT(editor != NULL, "MsaEditor not found", QStringList());
+
+    QStringList result = editor->getMaObject()->getMultipleAlignment()->getRowNames();
+
+    return result;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "callContextMenu"
+void GTUtilsMcaEditorSequenceArea::callContextMenu(GUITestOpStatus &os, const QPoint &innerCoords) {
+    if (innerCoords.isNull()) {
+        GTWidget::click(os, getSequenceArea(os), Qt::RightButton);
+    } else {
+        moveTo(os, innerCoords);
+        GTMouseDriver::click(Qt::RightButton);
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveTo"
+void GTUtilsMcaEditorSequenceArea::moveTo(GUITestOpStatus &os, const QPoint &p)
+{
+    QPoint convP = convertCoordinates(os, p);
+
+    GTMouseDriver::moveTo(convP);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "convertCoordinates"
+QPoint GTUtilsMcaEditorSequenceArea::convertCoordinates(GUITestOpStatus &os, const QPoint p) {
+    QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
+    McaEditorSequenceArea *mcaEditArea = qobject_cast<McaEditorSequenceArea*>(GTWidget::findWidget(os, "mca_editor_sequence_area", activeWindow));
+    GT_CHECK_RESULT(mcaEditArea != NULL, "McaEditorSequenceArea not found", QPoint());
+
+    const int posX = static_cast<int>(mcaEditArea->getEditor()->getUI()->getBaseWidthController()->getBaseGlobalRange(p.x()).center());
+    const int posY = static_cast<int>(mcaEditArea->getEditor()->getUI()->getRowHeightController()->getRowGlobalRangeByNumber(p.y()).center());
+    return mcaEditArea->mapToGlobal(QPoint(posX, posY));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceReg"
+QString GTUtilsMcaEditorSequenceArea::getReferenceReg(GUITestOpStatus &os, int num, int length) {
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    GT_CHECK_RESULT(mw != NULL, "QMainWindow not found", QString());
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    GT_CHECK_RESULT(editor != NULL, "McaEditor not found", QString());
+    MultipleChromatogramAlignmentObject* obj = editor->getMaObject();
+    GT_CHECK_RESULT(obj != NULL, "MultipleChromatogramAlignmentObject not found", QString());
+
+    U2OpStatus2Log status;
+    QByteArray seq = obj->getReferenceObj()->getSequenceData(U2Region(num, length), status);
+    CHECK_OP(status, QString());
+
+    return seq;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceReg"
+QString GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(GUITestOpStatus &os) {
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    GT_CHECK_RESULT(mw != NULL, "QMainWindow not found", QString());
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    GT_CHECK_RESULT(editor != NULL, "McaEditor not found", QString());
+    MultipleChromatogramAlignmentObject* obj = editor->getMaObject();
+    GT_CHECK_RESULT(obj != NULL, "MultipleChromatogramAlignmentObject not found", QString());
+
+    U2Region sel = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    int num = sel.startPos;
+    int length = sel.length;
+
+    U2OpStatus2Log status;
+    QByteArray seq = obj->getReferenceObj()->getSequenceData(U2Region(num, length), status);
+
+    return seq;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveTheBorderBetweenAlignmentAndRead"
+void GTUtilsMcaEditorSequenceArea::moveTheBorderBetweenAlignmentAndRead(HI::GUITestOpStatus &os, int shift) {
+    QStringList visible = getVisibleNames(os);
+    GT_CHECK_RESULT(visible.size() != 0, "No visible reads", );
+    QString firstVisible = visible.first();
+
+    const QRect sequenceNameRect = GTUtilsMcaEditor::getReadNameRect(os, firstVisible);
+    GTMouseDriver::moveTo(QPoint (sequenceNameRect.right() + 2, sequenceNameRect.center().y()));
+    GTMouseDriver::press(Qt::LeftButton);
+    GTGlobals::sleep(1000);
+    GTMouseDriver::moveTo(QPoint(sequenceNameRect.right() + 2 + shift, sequenceNameRect.center().y()));
+    GTMouseDriver::release(Qt::LeftButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "dragAndDrop"
+void GTUtilsMcaEditorSequenceArea::dragAndDrop(HI::GUITestOpStatus &os, const QPoint p) {
+    GTMouseDriver::click();
+    GTGlobals::sleep(1000);
+    GTMouseDriver::press(Qt::LeftButton);
+    GTGlobals::sleep(1000);
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::release(Qt::LeftButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSelectedRowsNum"
+U2Region GTUtilsMcaEditorSequenceArea::getSelectedRowsNum(GUITestOpStatus &os) {
+    McaEditorNameList *mcaNameList = GTUtilsMcaEditor::getNameListArea(os);
+    CHECK_SET_ERR_RESULT(mcaNameList != NULL, "McaEditorNameList not found", U2Region());
+
+    U2Region selection = mcaNameList->getSelection();
+    return selection;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSelectedRowsNames"
+QStringList GTUtilsMcaEditorSequenceArea::getSelectedRowsNames(GUITestOpStatus &os) {
+    U2Region sel = getSelectedRowsNum(os);
+    QStringList names = getNameList(os);
+
+    QStringList res;
+    for (int i = sel.startPos; i < sel.endPos(); i++) {
+        res << names[i];
+    }
+
+    return res;
+}
+#undef GT_METHOD_NAME
+
+
+#define GT_METHOD_NAME "getSelectedRect"
+QRect GTUtilsMcaEditorSequenceArea::getSelectedRect(GUITestOpStatus &os) {
+    McaEditorSequenceArea *mcaEditArea = qobject_cast<McaEditorSequenceArea*>(GTWidget::findWidget(os, "mca_editor_sequence_area"));
+    GT_CHECK_RESULT(mcaEditArea != NULL, "McaEditorSequenceArea not found", QRect());
+
+    return mcaEditArea->getSelection().getRect();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickToReferencePosition"
+void GTUtilsMcaEditorSequenceArea::clickToReferencePosition(GUITestOpStatus &os, const qint64 num) {
+    QPoint selectedPoint(num, 2);
+    McaEditorSequenceArea *mcaSeqArea = GTWidget::findExactWidget<McaEditorSequenceArea *>(os, "mca_editor_sequence_area", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != mcaSeqArea, "MCA Editor sequence area is not found");
+    GT_CHECK(mcaSeqArea->isInRange(selectedPoint), "Position is out of range");
+
+    scrollToPosition(os, selectedPoint);
+
+    const QPoint positionCenter(mcaSeqArea->getEditor()->getUI()->getBaseWidthController()->getBaseScreenCenter(selectedPoint.x()), 2);
+    GT_CHECK(mcaSeqArea->rect().contains(positionCenter, false), "Position is not visible");
+
+    PanView *panView = qobject_cast<PanView*>(GTWidget::findWidget(os, "mca_editor_reference_area"));
+    GT_CHECK(panView != NULL, "Pan view area is not found");
+
+    QPoint p = panView->mapToGlobal(positionCenter);
+
+    GTMouseDriver::moveTo(p);
+    GTMouseDriver::click();
+
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getCharacterModificationMode"
+short GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(GUITestOpStatus &os) {
+    McaEditorSequenceArea* mcaSeqArea = GTUtilsMcaEditorSequenceArea::getSequenceArea(os);
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor sequence area is not found", 3);
+
+    short mod = mcaSeqArea->getModInfo();
+    return mod;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSelectedChar"
+char GTUtilsMcaEditorSequenceArea::getSelectedReadChar(GUITestOpStatus &os) {
+    QRect selection = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    GT_CHECK_RESULT(selection.width() > 0 && selection.height() > 0, "There is no selection", U2Mca::INVALID_CHAR);
+    GT_CHECK_RESULT(selection.width() <= 1 && selection.height() <= 1, "The selection is too big", U2Mca::INVALID_CHAR);
+    int rowNum = selection.y();
+    qint64 pos = selection.x();
+
+    McaEditorSequenceArea* mcaSeqArea = GTUtilsMcaEditorSequenceArea::getSequenceArea(os);
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor sequence area is not found", U2Mca::INVALID_CHAR);
+
+    McaEditor* mcaEditor = mcaSeqArea->getEditor();
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor is not found", U2Mca::INVALID_CHAR);
+
+    MultipleChromatogramAlignmentObject* mcaObj = mcaEditor->getMaObject();
+    GT_CHECK_RESULT(mcaObj != NULL, "MCA Object is not found", U2Mca::INVALID_CHAR);
+
+    const MultipleChromatogramAlignmentRow mcaRow = mcaObj->getRow(rowNum);
+
+    char selectedChar = mcaRow->charAt(pos);
+    return selectedChar;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReadCharByPos"
+char GTUtilsMcaEditorSequenceArea::getReadCharByPos(GUITestOpStatus &os, const QPoint p) {
+    int rowNum = p.y();
+    qint64 pos = p.x();
+
+    McaEditorSequenceArea* mcaSeqArea = GTUtilsMcaEditorSequenceArea::getSequenceArea(os);
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor sequence area is not found", U2Mca::INVALID_CHAR);
+
+    McaEditor* mcaEditor = mcaSeqArea->getEditor();
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor is not found", U2Mca::INVALID_CHAR);
+
+    MultipleChromatogramAlignmentObject* mcaObj = mcaEditor->getMaObject();
+    GT_CHECK_RESULT(mcaObj != NULL, "MCA Object is not found", U2Mca::INVALID_CHAR);
+
+    const MultipleChromatogramAlignmentRow mcaRow = mcaObj->getRow(rowNum);
+
+    char selectedChar = mcaRow->charAt(pos);
+    return selectedChar;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getRowLength"
+qint64 GTUtilsMcaEditorSequenceArea::getRowLength(GUITestOpStatus &os, const int numRow) {
+    McaEditorSequenceArea* mcaSeqArea = GTUtilsMcaEditorSequenceArea::getSequenceArea(os);
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor sequence area is not found", 0);
+
+    McaEditor* mcaEditor = mcaSeqArea->getEditor();
+    GT_CHECK_RESULT(mcaSeqArea != NULL, "MCA Editor is not found", 0);
+
+    MultipleChromatogramAlignmentObject* mcaObj = mcaEditor->getMaObject();
+    GT_CHECK_RESULT(mcaObj != NULL, "MCA Object is not found", 0);
+
+    const MultipleChromatogramAlignmentRow mcaRow = mcaObj->getRow(numRow);
+
+    qint64 rowLength = mcaRow->getCoreLength();
+    return rowLength;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceLength"
+qint64 GTUtilsMcaEditorSequenceArea::getReferenceLength(GUITestOpStatus &os) {
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    GT_CHECK_RESULT(mw != NULL, "QMainWindow not found", 0);
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    GT_CHECK_RESULT(editor != NULL, "McaEditor not found", 0);
+    MultipleChromatogramAlignmentObject* obj = editor->getMaObject();
+    GT_CHECK_RESULT(obj != NULL, "MultipleChromatogramAlignmentObject not found", 0);
+
+    U2OpStatus2Log status;
+    qint64 refLength = obj->getReferenceObj()->getSequenceLength();
+
+    return refLength;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceLength"
+qint64 GTUtilsMcaEditorSequenceArea::getReferenceLengthWithGaps(GUITestOpStatus &os) {
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    GT_CHECK_RESULT(mw != NULL, "QMainWindow not found", 0);
+    McaEditor* editor = mw->findChild<McaEditor*>();
+    GT_CHECK_RESULT(editor != NULL, "McaEditor not found", 0);
+    MultipleChromatogramAlignmentObject* obj = editor->getMaObject();
+    GT_CHECK_RESULT(obj != NULL, "MultipleChromatogramAlignmentObject not found", 0);
+
+    int length = obj->getReferenceLengthWithGaps();
+
+    return length;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getReferenceSelection"
+U2Region GTUtilsMcaEditorSequenceArea::getReferenceSelection(GUITestOpStatus &os) {
+    McaEditorReferenceArea *mcaEditArea = qobject_cast<McaEditorReferenceArea*>(GTWidget::findWidget(os, "mca_editor_reference_area"));
+    GT_CHECK_RESULT(mcaEditArea != NULL, "McaEditorReferenceArea not found", U2Region());
+
+    SequenceObjectContext* seqContext = mcaEditArea->getSequenceContext();
+    GT_CHECK_RESULT(seqContext != NULL, "SequenceObjectContext not found", U2Region());
+
+    DNASequenceSelection* dnaSel = seqContext->getSequenceSelection();
+    GT_CHECK_RESULT(dnaSel != NULL, "DNASequenceSelection not found", U2Region());
+
+    QVector<U2Region> region = dnaSel->getSelectedRegions();
+
+    CHECK(region.size() != 0, U2Region());
+
+    GT_CHECK_RESULT(region.size() == 1, "Incorrect selected region", U2Region());
+
+    return region.first();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSelectedConsensusReg"
+QString GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(GUITestOpStatus &os) {
+    McaEditorConsensusArea* consArea = GTUtilsMcaEditor::getConsensusArea(os);
+    GT_CHECK_RESULT(consArea != NULL, "Consensus area not found", QString());
+
+    QSharedPointer<MSAEditorConsensusCache> consCache = consArea->getConsensusCache();
+
+    U2Region sel = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    int start = sel.startPos;
+    int length = sel.length;
+
+    QString res;
+    for (int i = 0; i < length; i++) {
+        int pos = start + i;
+        char ch = consCache->getConsensusChar(pos);
+        res.append(ch);
+    }
+    return res;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getConsensusStringByPos"
+QString GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(GUITestOpStatus &os, const U2Region reg) {
+    McaEditorConsensusArea* consArea = GTUtilsMcaEditor::getConsensusArea(os);
+    GT_CHECK_RESULT(consArea != NULL, "Consensus area not found", QString());
+
+    QSharedPointer<MSAEditorConsensusCache> consCache = consArea->getConsensusCache();
+
+    int start = reg.startPos;
+    int length = reg.length;
+
+    QString res;
+    for (int i = 0; i < length; i++) {
+        int pos = start + i;
+        char ch = consCache->getConsensusChar(pos);
+        res.append(ch);
+    }
+    return res;
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}//namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.h b/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.h
new file mode 100644
index 0000000..12ce9b2
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsMcaEditorSequenceArea.h
@@ -0,0 +1,74 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef GTUTILSMCAEDITORSEQUENCEAREA_H
+#define GTUTILSMCAEDITORSEQUENCEAREA_H
+
+#include <GTGlobals.h>
+
+#include <U2View/McaEditorSequenceArea.h>
+
+namespace U2 {
+    using namespace HI;
+
+class GTUtilsMcaEditorSequenceArea {
+public:
+    static McaEditorSequenceArea* getSequenceArea(HI::GUITestOpStatus &os);
+    static QStringList getVisibleNames(HI::GUITestOpStatus &os);
+    static int getRowHeight(HI::GUITestOpStatus &os, int rowNumber);
+    static void clickToPosition(HI::GUITestOpStatus &os, const QPoint &globalMaPosition);
+    static void scrollToPosition(HI::GUITestOpStatus &os, const QPoint &position);
+    static void clickCollapseTriangle(HI::GUITestOpStatus &os, QString seqName, bool showChromatogram);
+    static bool isChromatogramShown(HI::GUITestOpStatus &os, QString seqName);
+    static QStringList getNameList(HI::GUITestOpStatus &os);
+    static void callContextMenu(HI::GUITestOpStatus &os, const QPoint &innerCoords = QPoint());
+    static void moveTo(HI::GUITestOpStatus &os, const QPoint &p);
+    static QPoint convertCoordinates(HI::GUITestOpStatus &os, const QPoint p);
+    static QString getReferenceReg(HI::GUITestOpStatus &os, int num, int length);
+    static QString getSelectedReferenceReg(HI::GUITestOpStatus &os);
+    static void moveTheBorderBetweenAlignmentAndRead(HI::GUITestOpStatus &os, int shift);
+    static void dragAndDrop(HI::GUITestOpStatus &os, const QPoint p);
+    static U2Region getSelectedRowsNum(GUITestOpStatus &os);
+    static QStringList getSelectedRowsNames(GUITestOpStatus &os);
+    static QRect getSelectedRect(GUITestOpStatus &os);
+    static void clickToReferencePosition(GUITestOpStatus &os, const qint64 num);
+    /**
+    *0 - ViewMode
+    *1 - ReplaceCharMode
+    *2 - InsertCharMode
+    *Return value of this function is not enum "MaMode" to avoid encapsulation violation
+    */
+    static short getCharacterModificationMode(GUITestOpStatus &os);
+    /**
+    *Valid just if one character in sequence area selected
+    */
+    static char getSelectedReadChar(GUITestOpStatus &os);
+    static char getReadCharByPos(GUITestOpStatus &os, const QPoint p);
+    static qint64 getRowLength(GUITestOpStatus &os, const int numRow);
+    static qint64 getReferenceLength(GUITestOpStatus &os);
+    static qint64 getReferenceLengthWithGaps(GUITestOpStatus &os);
+    static U2Region getReferenceSelection(GUITestOpStatus &os);
+    static QString getSelectedConsensusReg(GUITestOpStatus &os);
+    static QString getConsensusStringByRegion(GUITestOpStatus &os, const U2Region reg);
+};
+
+}//namespace
+#endif // GTUTILSMSAEDITORSEQUENCEAREA_H
diff --git a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
index ade48b1..84bbf27 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMdi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <QApplication>
 #include <QMainWindow>
+#include <QMdiArea>
 #include <QMdiSubWindow>
 #include <QMenu>
 
@@ -32,6 +33,7 @@
 #include "GTGlobals.h"
 #include "primitives/GTMenu.h"
 #include <drivers/GTMouseDriver.h>
+#include <drivers/GTKeyboardDriver.h>
 #include "utils/GTThread.h"
 #include <base_dialogs/MessageBoxFiller.h>
 
@@ -55,7 +57,21 @@ void GTUtilsMdi::click(HI::GUITestOpStatus &os, GTGlobals::WindowAction action)
 //    }
 
 #ifndef Q_OS_MAC
-    GTMenuBar::clickCornerMenu(os, mainWindow->menuBar(), action);
+	switch (action) {
+	case GTGlobals::Close: {
+#ifdef Q_OS_UNIX
+        GTMenu::clickMainMenuItem(os, QStringList() << "Window" << "Close active view");
+#else
+        GTKeyboardDriver::keyPress(Qt::Key_Control);
+		GTKeyboardDriver::keyClick(Qt::Key_F4);
+		GTKeyboardDriver::keyRelease(Qt::Key_Control);
+#endif
+		break;
+	}
+	default:
+		GTMenuBar::clickCornerMenu(os, mainWindow->menuBar(), action);
+		break;
+	}
 #else
     MWMDIWindow *mdiWindow = mw->getMDIManager()->getActiveWindow();
     GT_CHECK(mdiWindow != NULL, "MDIWindow == NULL");
@@ -116,6 +132,12 @@ QWidget * GTUtilsMdi::findWindow(HI::GUITestOpStatus &os, const QString &windowN
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "closeActiveWindow"
+void GTUtilsMdi::closeActiveWindow(GUITestOpStatus &os) {
+    closeWindow(os, activeWindowTitle(os));
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "closeWindow"
 void GTUtilsMdi::closeWindow(HI::GUITestOpStatus &os, const QString &windowName, const GTGlobals::FindOptions& options) {
     GT_CHECK(windowName.isEmpty() == false, "windowname is empty");
@@ -155,17 +177,25 @@ void GTUtilsMdi::closeAllWindows(HI::GUITestOpStatus &os) {
     QWidget *mdiWindow = NULL;
     GTGlobals::FindOptions options(false);
 
+    bool tabbedView = isTabbedLayout(os);
+
     while (NULL != (mdiWindow = GTUtilsMdi::activeWindow(os, options))) {
         GT_CHECK(prevWindow != mdiWindow, "Can't close MDI window");
         prevWindow = mdiWindow;
 
-        GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
+        MessageBoxDialogFiller *filler = new MessageBoxDialogFiller(os, QMessageBox::Discard);
+        GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, filler);
 
-        const QPoint closeButtonPos = GTWidget::getWidgetGlobalTopLeftPoint(os, mdiWindow) + QPoint(10, 5);
-        GTMouseDriver::moveTo(closeButtonPos);
-        GTMouseDriver::click();
+        if (!tabbedView) {
+            const QPoint closeButtonPos = GTWidget::getWidgetGlobalTopLeftPoint(os, mdiWindow) + QPoint(10, 5);
+            GTMouseDriver::moveTo(closeButtonPos);
+            GTMouseDriver::click();
+        } else {
+            GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Close active view");
+        }
         GTGlobals::sleep(100);
         GTThread::waitForMainThread();
+        GTUtilsDialog::removeRunnable(filler);
     }
 #endif
 }
@@ -194,6 +224,16 @@ void GTUtilsMdi::waitWindowOpened(HI::GUITestOpStatus &os, const QString &window
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "isTabbedLayout"
+bool GTUtilsMdi::isTabbedLayout(HI::GUITestOpStatus &os) {
+    MainWindow* mainWindow = AppContext::getMainWindow();
+    GT_CHECK_RESULT(mainWindow != NULL, "MainWindow == NULL", NULL);
+    QMdiArea *mdiArea = GTWidget::findExactWidget<QMdiArea *>(os, "MDI_Area", mainWindow->getQMainWindow());
+    GT_CHECK_RESULT(mdiArea != NULL, "mdiArea == NULL", NULL);
+    return mdiArea->viewMode() == QMdiArea::TabbedView;
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "activeWindow"
 QWidget* GTUtilsMdi::activeWindow(HI::GUITestOpStatus &os, const GTGlobals::FindOptions& options) {
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsMdi.h b/src/plugins/GUITestBase/src/GTUtilsMdi.h
index 27a4a14..2d401d9 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMdi.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMdi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,9 +46,12 @@ public:
     // fails if windowName is empty or because of FindOptions settings
     static QWidget* findWindow(HI::GUITestOpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
 
+    static void closeActiveWindow(HI::GUITestOpStatus &os);
     static void closeWindow(HI::GUITestOpStatus &os, const QString& windowName, const GTGlobals::FindOptions& = GTGlobals::FindOptions());
     static void closeAllWindows(HI::GUITestOpStatus &os);
     static void waitWindowOpened(HI::GUITestOpStatus &os, const QString &windowNamePart, qint64 timeout = 180000);
+
+    static bool isTabbedLayout(HI::GUITestOpStatus &os);
 };
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
index d5c1b18..279cc68 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,24 +19,30 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Gui/MainWindow.h>
-
-#include <U2View/MSAEditorConsensusArea.h>
-#include <U2View/MSAEditorNameList.h>
-#include <U2View/MSAEditorOverviewArea.h>
-#include <U2View/MSAGraphOverview.h>
-#include <U2View/MSASimpleOverview.h>
-
 #include <drivers/GTKeyboardDriver.h>
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTToolbar.h>
 #include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <utils/GTKeyboardUtils.h>
 #include <utils/GTThread.h>
 
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/MainWindow.h>
+
+#include <U2View/BaseWidthController.h>
+#include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/MaEditorNameList.h>
+#include <U2View/MSAEditorOverviewArea.h>
+#include <U2View/MaGraphOverview.h>
+#include <U2View/MaSimpleOverview.h>
+
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
+#include "GTUtilsProjectTreeView.h"
 #include "api/GTMSAEditorStatusWidget.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
 
@@ -46,55 +52,55 @@ using namespace HI;
 #define GT_CLASS_NAME "GTUtilsMsaEditor"
 
 #define GT_METHOD_NAME "getGraphOverviewTopLeftPixelColor"
-QColor GTUtilsMsaEditor::getGraphOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point) {
+QColor GTUtilsMsaEditor::getGraphOverviewPixelColor(GUITestOpStatus &os, const QPoint &point) {
     return GTWidget::getColor(os, getGraphOverview(os), point);
 }
 
-QColor GTUtilsMsaEditor::getSimpleOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point) {
+QColor GTUtilsMsaEditor::getSimpleOverviewPixelColor(GUITestOpStatus &os, const QPoint &point) {
     return GTWidget::getColor(os, getSimpleOverview(os), point);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getEditor"
-MSAEditor * GTUtilsMsaEditor::getEditor(HI::GUITestOpStatus &os) {
-    MSAEditorUI *editorUi = getEditorUi(os);
+MSAEditor * GTUtilsMsaEditor::getEditor(GUITestOpStatus &os) {
+    MsaEditorWgt *editorUi = getEditorUi(os);
     CHECK_OP(os, NULL);
     return editorUi->getEditor();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getEditorUi"
-MSAEditorUI * GTUtilsMsaEditor::getEditorUi(HI::GUITestOpStatus &os) {
+MsaEditorWgt * GTUtilsMsaEditor::getEditorUi(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
-    return activeWindow->findChild<MSAEditorUI *>();
+    return activeWindow->findChild<MsaEditorWgt *>();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getGraphOverview"
-MSAGraphOverview * GTUtilsMsaEditor::getGraphOverview(HI::GUITestOpStatus &os) {
+MaGraphOverview * GTUtilsMsaEditor::getGraphOverview(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
-    MSAGraphOverview *result = GTWidget::findExactWidget<MSAGraphOverview *>(os, MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME + QString("_graph"), activeWindow);
-    GT_CHECK_RESULT(NULL != result, "MSAGraphOverview is not found", NULL);
+    MaGraphOverview *result = GTWidget::findExactWidget<MaGraphOverview *>(os, MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME + QString("_graph"), activeWindow);
+    GT_CHECK_RESULT(NULL != result, "MaGraphOverview is not found", NULL);
     return result;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSimpleOverview"
-MSASimpleOverview * GTUtilsMsaEditor::getSimpleOverview(HI::GUITestOpStatus &os) {
+MaSimpleOverview * GTUtilsMsaEditor::getSimpleOverview(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
-    MSASimpleOverview *result = GTWidget::findExactWidget<MSASimpleOverview *>(os, MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME + QString("_simple"), activeWindow);
-    GT_CHECK_RESULT(NULL != result, "MSASimpleOverview is not found", NULL);
+    MaSimpleOverview *result = GTWidget::findExactWidget<MaSimpleOverview *>(os, MSAEditorOverviewArea::OVERVIEW_AREA_OBJECT_NAME + QString("_simple"), activeWindow);
+    GT_CHECK_RESULT(NULL != result, "MaSimpleOverview is not found", NULL);
     return result;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getTreeView"
-MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(HI::GUITestOpStatus &os) {
+MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
     return GTWidget::findExactWidget<MSAEditorTreeViewerUI *>(os, "treeView", activeWindow);
@@ -102,18 +108,18 @@ MSAEditorTreeViewerUI * GTUtilsMsaEditor::getTreeView(HI::GUITestOpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNameListArea"
-MSAEditorNameList * GTUtilsMsaEditor::getNameListArea(HI::GUITestOpStatus &os) {
+MaEditorNameList * GTUtilsMsaEditor::getNameListArea(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
-    MSAEditorNameList *result = GTWidget::findExactWidget<MSAEditorNameList *>(os, "msa_editor_name_list", activeWindow);
-    GT_CHECK_RESULT(NULL != result, "MSAGraphOverview is not found", NULL);
+    MaEditorNameList *result = GTWidget::findExactWidget<MaEditorNameList *>(os, "msa_editor_name_list", activeWindow);
+    GT_CHECK_RESULT(NULL != result, "MaGraphOverview is not found", NULL);
     return result;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getConsensusArea"
-MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(HI::GUITestOpStatus &os) {
+MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
     return GTWidget::findExactWidget<MSAEditorConsensusArea *>(os, "consArea", activeWindow);
@@ -121,28 +127,39 @@ MSAEditorConsensusArea * GTUtilsMsaEditor::getConsensusArea(HI::GUITestOpStatus
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceNameRect"
-MSAEditorSequenceArea * GTUtilsMsaEditor::getSequenceArea(HI::GUITestOpStatus &os) {
+MSAEditorSequenceArea * GTUtilsMsaEditor::getSequenceArea(GUITestOpStatus &os) {
     return GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceNameRect"
-QRect GTUtilsMsaEditor::getSequenceNameRect(HI::GUITestOpStatus &os, const QString &sequenceName) {
-    Q_UNUSED(os);
-    MSAEditorNameList *nameList = getNameListArea(os);
+QRect GTUtilsMsaEditor::getSequenceNameRect(GUITestOpStatus &os, const QString &sequenceName) {
+    MaEditorNameList *nameList = getNameListArea(os);
     GT_CHECK_RESULT(NULL != nameList, "MSAEditorNameList not found", QRect());
 
-    const int rowHeight = GTUtilsMSAEditorSequenceArea::getRowHeight(os);
     const QStringList names = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
     const int rowNumber = names.indexOf(sequenceName);
     GT_CHECK_RESULT(0 <= rowNumber, QString("Sequence '%1' not found").arg(sequenceName), QRect());
+    return getSequenceNameRect(os,  rowNumber);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getSequenceNameRect"
+QRect GTUtilsMsaEditor::getSequenceNameRect(GUITestOpStatus &os, int rowNumber) {
+    Q_UNUSED(os);
+    GT_CHECK_RESULT(0 <= rowNumber, QString("Sequence '%1' not found").arg(rowNumber), QRect());
+
+    MaEditorNameList *nameList = getNameListArea(os);
+    GT_CHECK_RESULT(NULL != nameList, "MSAEditorNameList not found", QRect());
+
+    const int rowHeight = GTUtilsMSAEditorSequenceArea::getRowHeight(os, rowNumber);
 
     return QRect(nameList->mapToGlobal(QPoint(0, rowHeight * rowNumber)), nameList->mapToGlobal(QPoint(nameList->width(), rowHeight * (rowNumber + 1))));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getColumnHeaderRect"
-QRect GTUtilsMsaEditor::getColumnHeaderRect(HI::GUITestOpStatus &os, int column) {
+QRect GTUtilsMsaEditor::getColumnHeaderRect(GUITestOpStatus &os, int column) {
     MSAEditorConsensusArea *consensusArea = getConsensusArea(os);
     GT_CHECK_RESULT(NULL != consensusArea, "Consensus area is NULL", QRect());
     MSAEditorSequenceArea *sequenceArea = getSequenceArea(os);
@@ -150,12 +167,16 @@ QRect GTUtilsMsaEditor::getColumnHeaderRect(HI::GUITestOpStatus &os, int column)
     MSAEditor *editor = getEditor(os);
     GT_CHECK_RESULT(NULL != editor, "MSA Editor is NULL", QRect());
 
-    return QRect(sequenceArea->getBaseXRange(column, false).startPos, consensusArea->geometry().top(), editor->getColumnWidth(), consensusArea->height());
+    BaseWidthController *baseWidthController = editor->getUI()->getBaseWidthController();
+    return QRect(consensusArea->mapToGlobal(QPoint(baseWidthController->getBaseScreenOffset(column),
+                                                   consensusArea->geometry().top())),
+                 QSize(baseWidthController->getBaseWidth(),
+                       consensusArea->height()));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "replaceSequence"
-void GTUtilsMsaEditor::replaceSequence(HI::GUITestOpStatus &os, const QString &sequenceToReplace, int targetPosition) {
+void GTUtilsMsaEditor::replaceSequence(GUITestOpStatus &os, const QString &sequenceToReplace, int targetPosition) {
     clickSequenceName(os, sequenceToReplace);
 
     targetPosition = qMax(0, qMin(getSequencesCount(os) - 1, targetPosition));
@@ -172,47 +193,135 @@ void GTUtilsMsaEditor::replaceSequence(HI::GUITestOpStatus &os, const QString &s
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "replaceSequence"
+void GTUtilsMsaEditor::replaceSequence(GUITestOpStatus &os, int rowNumber, int targetPosition) {
+    const QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
+    GT_CHECK(0 <= rowNumber && rowNumber <= names.size(), "Row number is out of boundaries");
+    replaceSequence(os, names[rowNumber], targetPosition);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "removeColumn"
-void GTUtilsMsaEditor::removeColumn(HI::GUITestOpStatus &os, int column) {
+void GTUtilsMsaEditor::removeColumn(GUITestOpStatus &os, int column) {
     clickColumn(os, column);
     GTKeyboardDriver::keyClick(Qt::Key_Delete);
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "clickSequenceName"
-void GTUtilsMsaEditor::clickSequenceName(HI::GUITestOpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton) {
+#define GT_METHOD_NAME "removeRows"
+void GTUtilsMsaEditor::removeRows(GUITestOpStatus &os, int firstRowNumber, int lastRowNumber) {
+    selectRows(os, firstRowNumber, lastRowNumber);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveToSequence"
+void GTUtilsMsaEditor::moveToSequence(GUITestOpStatus &os, int rowNumber) {
+    const QRect sequenceNameRect = getSequenceNameRect(os, rowNumber);
+    GTMouseDriver::moveTo(sequenceNameRect.center());
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "moveToSequenceName"
+void GTUtilsMsaEditor::moveToSequenceName(GUITestOpStatus &os, const QString &sequenceName) {
     const QRect sequenceNameRect = getSequenceNameRect(os, sequenceName);
     GTMouseDriver::moveTo(sequenceNameRect.center());
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickSequence"
+void GTUtilsMsaEditor::clickSequence(GUITestOpStatus &os, int rowNumber, Qt::MouseButton mouseButton) {
+    moveToSequence(os, rowNumber);
     GTMouseDriver::click(mouseButton);
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "clickColumn"
-void GTUtilsMsaEditor::clickColumn(HI::GUITestOpStatus &os, int column, Qt::MouseButton mouseButton) {
-    MSAEditorConsensusArea *consensusArea = getConsensusArea(os);
-    GT_CHECK(NULL != consensusArea, "Consensus area is NULL");
+#define GT_METHOD_NAME "clickSequenceName"
+void GTUtilsMsaEditor::clickSequenceName(GUITestOpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton) {
+    moveToSequenceName(os, sequenceName);
+    GTMouseDriver::click(mouseButton);
+}
+#undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "moveToColumn"
+void GTUtilsMsaEditor::moveToColumn(GUITestOpStatus &os, int column) {
     GTUtilsMSAEditorSequenceArea::scrollToPosition(os, QPoint(column, 1));
     const QRect columnHeaderRect = getColumnHeaderRect(os, column);
-    GTWidget::click(os, consensusArea, mouseButton, columnHeaderRect.center());
+    GTMouseDriver::moveTo(columnHeaderRect.center());
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clickColumn"
+void GTUtilsMsaEditor::clickColumn(GUITestOpStatus &os, int column, Qt::MouseButton mouseButton) {
+    moveToColumn(os, column);
+    GTMouseDriver::click(mouseButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "selectRows"
+void GTUtilsMsaEditor::selectRows(GUITestOpStatus &os, int firstRowNumber, int lastRowNumber, GTGlobals::UseMethod method) {
+    switch (method) {
+    case GTGlobals::UseKey:
+        clickSequence(os, firstRowNumber);
+        GTKeyboardDriver::keyPress(Qt::Key_Shift);
+        clickSequence(os, lastRowNumber);
+        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+        break;
+    case GTGlobals::UseMouse:
+        GTMouseDriver::dragAndDrop(getSequenceNameRect(os, firstRowNumber).center(),
+                                   getSequenceNameRect(os, lastRowNumber).center());
+        break;
+    case GTGlobals::UseKeyBoard:
+        GT_CHECK(false, "Not implemented");
+    default:
+        GT_CHECK(false, "An unknown method");
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "selectColumns"
+void GTUtilsMsaEditor::selectColumns(GUITestOpStatus &os, int firstColumnNumber, int lastColumnNumber, GTGlobals::UseMethod method) {
+    switch (method) {
+    case GTGlobals::UseKey:
+        clickColumn(os, firstColumnNumber);
+        GTKeyboardDriver::keyPress(Qt::Key_Shift);
+        clickColumn(os, lastColumnNumber);
+        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+        break;
+    case GTGlobals::UseMouse:
+        GTMouseDriver::dragAndDrop(getColumnHeaderRect(os, firstColumnNumber).center(),
+                                   getColumnHeaderRect(os, lastColumnNumber).center());
+        break;
+    case GTGlobals::UseKeyBoard:
+        GT_CHECK(false, "Not implemented");
+    default:
+        GT_CHECK(false, "An unknown method");
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "clearSelection"
+void GTUtilsMsaEditor::clearSelection(GUITestOpStatus &os) {
+    Q_UNUSED(os);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getReferenceSequenceName"
-QString GTUtilsMsaEditor::getReferenceSequenceName(HI::GUITestOpStatus &os) {
+QString GTUtilsMsaEditor::getReferenceSequenceName(GUITestOpStatus &os) {
     return GTUtilsOptionPanelMsa::getReference(os);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleCollapsingMode"
-void GTUtilsMsaEditor::toggleCollapsingMode(HI::GUITestOpStatus &os) {
+void GTUtilsMsaEditor::toggleCollapsingMode(GUITestOpStatus &os) {
     Q_UNUSED(os);
     GTWidget::click(os, GTToolbar::getWidgetForActionTooltip(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Switch on/off collapsing"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceCollapsed"
-bool GTUtilsMsaEditor::isSequenceCollapsed(HI::GUITestOpStatus &os, const QString &seqName){
+bool GTUtilsMsaEditor::isSequenceCollapsed(GUITestOpStatus &os, const QString &seqName){
     QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
     GT_CHECK_RESULT(names.contains(seqName), "sequence " + seqName + " not found in name list", false);
     QStringList visiablenames = GTUtilsMSAEditorSequenceArea::getVisibleNames(os);
@@ -222,7 +331,7 @@ bool GTUtilsMsaEditor::isSequenceCollapsed(HI::GUITestOpStatus &os, const QStrin
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "toggleCollapsingMode"
-void GTUtilsMsaEditor::toggleCollapsingGroup(HI::GUITestOpStatus &os, const QString &groupName) {
+void GTUtilsMsaEditor::toggleCollapsingGroup(GUITestOpStatus &os, const QString &groupName) {
     Q_UNUSED(os);
 
     const QRect sequenceNameRect = getSequenceNameRect(os, groupName);
@@ -238,33 +347,56 @@ void GTUtilsMsaEditor::toggleCollapsingGroup(HI::GUITestOpStatus &os, const QStr
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequencesCount"
-int GTUtilsMsaEditor::getSequencesCount(HI::GUITestOpStatus &os) {
+int GTUtilsMsaEditor::getSequencesCount(GUITestOpStatus &os) {
     QWidget *statusWidget = GTWidget::findWidget(os, "msa_editor_status_bar");
     return GTMSAEditorStatusWidget::getSequencesCount(os, statusWidget);
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getWholeData"
+QStringList GTUtilsMsaEditor::getWholeData(GUITestOpStatus &os) {
+    const QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
+    GT_CHECK_RESULT(!names.isEmpty(), "The name list is empty", QStringList());
+
+    clickSequenceName(os, names.first());
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    clickSequenceName(os, names.last());
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+
+    GTKeyboardUtils::copy(os);
+    GTGlobals::sleep(500);
+
+    return GTClipboard::text(os).split('\n');
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "undo"
-void GTUtilsMsaEditor::undo(HI::GUITestOpStatus &os) {
+void GTUtilsMsaEditor::undo(GUITestOpStatus &os) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_undo"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "redo"
-void GTUtilsMsaEditor::redo(HI::GUITestOpStatus &os) {
+void GTUtilsMsaEditor::redo(GUITestOpStatus &os) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "msa_action_redo"));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "buildPhylogeneticTree"
-void GTUtilsMsaEditor::buildPhylogeneticTree(HI::GUITestOpStatus &os, const QString &pathToSave) {
+void GTUtilsMsaEditor::buildPhylogeneticTree(GUITestOpStatus &os, const QString &pathToSave) {
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, pathToSave, 0, 0, true));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "dragAndDropSequenceFromProject"
+void GTUtilsMsaEditor::dragAndDropSequenceFromProject(GUITestOpStatus &os, const QStringList &pathToSequence) {
+    GTUtilsProjectTreeView::dragAndDrop(os, pathToSequence, getEditorUi(os));
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "setReference"
-void GTUtilsMsaEditor::setReference(HI::GUITestOpStatus &os, const QString &sequenceName) {
+void GTUtilsMsaEditor::setReference(GUITestOpStatus &os, const QString &sequenceName) {
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Set this sequence as reference", GTGlobals::UseMouse));
     clickSequenceName(os, sequenceName, Qt::RightButton);
     GTGlobals::sleep(100);
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
index c32a903..cdb907f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,12 +30,12 @@ namespace U2 {
 
 class MSAEditor;
 class MSAEditorConsensusArea;
-class MSAEditorNameList;
+class MaEditorNameList;
 class MSAEditorSequenceArea;
 class MSAEditorTreeViewerUI;
-class MSAEditorUI;
-class MSAGraphOverview;
-class MSASimpleOverview;
+class MsaEditorWgt;
+class MaGraphOverview;
+class MaSimpleOverview;
 
 // If you can't find an appropriate method check the GTUtilsMsaEditorSequenceArea class
 class GTUtilsMsaEditor {
@@ -44,23 +44,35 @@ public:
     static QColor getSimpleOverviewPixelColor(HI::GUITestOpStatus &os, const QPoint &point);
 
     static MSAEditor * getEditor(HI::GUITestOpStatus &os);
-    static MSAEditorUI * getEditorUi(HI::GUITestOpStatus &os);
-    static MSAGraphOverview * getGraphOverview(HI::GUITestOpStatus &os);
-    static MSASimpleOverview * getSimpleOverview(HI::GUITestOpStatus &os);
+    static MsaEditorWgt * getEditorUi(HI::GUITestOpStatus &os);
+    static MaGraphOverview * getGraphOverview(HI::GUITestOpStatus &os);
+    static MaSimpleOverview * getSimpleOverview(HI::GUITestOpStatus &os);
     static MSAEditorTreeViewerUI * getTreeView(HI::GUITestOpStatus &os);
-    static MSAEditorNameList * getNameListArea(HI::GUITestOpStatus &os);
+    static MaEditorNameList * getNameListArea(HI::GUITestOpStatus &os);
     static MSAEditorConsensusArea * getConsensusArea(HI::GUITestOpStatus &os);
     static MSAEditorSequenceArea * getSequenceArea(HI::GUITestOpStatus &os);
 
     static QRect getSequenceNameRect(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static QRect getSequenceNameRect(HI::GUITestOpStatus &os, int rowNumber);
     static QRect getColumnHeaderRect(HI::GUITestOpStatus &os, int column);
 
     static void replaceSequence(HI::GUITestOpStatus &os, const QString &sequenceToReplace, int targetPosition);
+    static void replaceSequence(HI::GUITestOpStatus &os, int rowNumber, int targetPosition);
     static void removeColumn(HI::GUITestOpStatus &os, int column);
+    static void removeRows(HI::GUITestOpStatus &os, int firstRowNumber, int lastRowNumber);
 
+    static void moveToSequence(HI::GUITestOpStatus &os, int rowNumber);
+    static void moveToSequenceName(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static void clickSequence(HI::GUITestOpStatus &os, int rowNumber, Qt::MouseButton mouseButton = Qt::LeftButton);
     static void clickSequenceName(HI::GUITestOpStatus &os, const QString &sequenceName, Qt::MouseButton mouseButton = Qt::LeftButton);
+    static void moveToColumn(HI::GUITestOpStatus &os, int column);
     static void clickColumn(HI::GUITestOpStatus &os, int column, Qt::MouseButton mouseButton = Qt::LeftButton);
 
+    static void selectRows(HI::GUITestOpStatus &os, int firstRowNumber, int lastRowNumber, GTGlobals::UseMethod method = GTGlobals::UseKey);
+    static void selectColumns(HI::GUITestOpStatus &os, int firstColumnNumber, int lastColumnNumber, GTGlobals::UseMethod method = GTGlobals::UseKey);
+
+    static void clearSelection(HI::GUITestOpStatus &os);
+
     static QString getReferenceSequenceName(HI::GUITestOpStatus &os);
     static void setReference(HI::GUITestOpStatus &os, const QString &sequenceName);
 
@@ -69,11 +81,14 @@ public:
     static bool isSequenceCollapsed(HI::GUITestOpStatus &os, const QString &seqName);
 
     static int getSequencesCount(HI::GUITestOpStatus &os);
+    static QStringList getWholeData(HI::GUITestOpStatus &os);
 
     static void undo(HI::GUITestOpStatus &os);
     static void redo(HI::GUITestOpStatus &os);
 
     static void buildPhylogeneticTree(HI::GUITestOpStatus &os, const QString &pathToSave);
+
+    static void dragAndDropSequenceFromProject(HI::GUITestOpStatus &os, const QStringList &pathToSequence);
 };
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
index 36fdd19..df85888 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,23 +23,30 @@
 #include <QStyle>
 #include <QStyleOptionSlider>
 
+#include <api/GTMSAEditorStatusWidget.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTThread.h>
+
 #include <U2Core/AppContext.h>
+#include <U2Core/U2SafePoints.h>
 
+#include <U2View/BaseWidthController.h>
+#include <U2View/DrawHelper.h>
 #include <U2View/MSAEditor.h>
 #include <U2View/MsaEditorSimilarityColumn.h>
+#include <U2View/MSAEditorConsensusArea.h>
+#include <U2View/RowHeightController.h>
+#include <U2View/ScrollController.h>
 
-#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
-#include "primitives/GTAction.h"
-#include "system/GTClipboard.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include "api/GTMSAEditorStatusWidget.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTWidget.h>
-#include <utils/GTThread.h>
-#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
 
 namespace U2 {
@@ -49,7 +56,7 @@ const QString GTUtilsMSAEditorSequenceArea::highlightningColorName = "#9999cc";
 #define GT_CLASS_NAME "GTUtilsMSAEditorSequenceArea"
 
 #define GT_METHOD_NAME "getSequenceArea"
-MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(HI::GUITestOpStatus &os) {
+MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(GUITestOpStatus &os) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow(os);
     CHECK_OP(os, NULL);
 
@@ -60,7 +67,7 @@ MSAEditorSequenceArea * GTUtilsMSAEditorSequenceArea::getSequenceArea(HI::GUITes
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "callContextMenu"
-void GTUtilsMSAEditorSequenceArea::callContextMenu(HI::GUITestOpStatus &os, const QPoint &innerCoords) {
+void GTUtilsMSAEditorSequenceArea::callContextMenu(GUITestOpStatus &os, const QPoint &innerCoords) {
     if (innerCoords.isNull()) {
         GTWidget::click(os, getSequenceArea(os), Qt::RightButton);
     } else {
@@ -71,7 +78,7 @@ void GTUtilsMSAEditorSequenceArea::callContextMenu(HI::GUITestOpStatus &os, cons
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "moveTo"
-void GTUtilsMSAEditorSequenceArea::moveTo(HI::GUITestOpStatus &os, const QPoint &p)
+void GTUtilsMSAEditorSequenceArea::moveTo(GUITestOpStatus &os, const QPoint &p)
 {
     QPoint convP = convertCoordinates(os,p);
 
@@ -80,71 +87,73 @@ void GTUtilsMSAEditorSequenceArea::moveTo(HI::GUITestOpStatus &os, const QPoint
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "convertCoordinates"
-QPoint GTUtilsMSAEditorSequenceArea::convertCoordinates(HI::GUITestOpStatus &os, const QPoint p){
+QPoint GTUtilsMSAEditorSequenceArea::convertCoordinates(GUITestOpStatus &os, const QPoint p){
     QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", activeWindow));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found",QPoint());
 
-    QWidget *msaOffsetLeft = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_left", activeWindow);
-    GT_CHECK_RESULT(msaOffsetLeft != NULL, "MsaOffset Left not found",QPoint());
-
-    QPoint shift = msaOffsetLeft->mapToGlobal(QPoint(0, 0));
-    if (msaOffsetLeft->isVisible()) {
-        shift = msaOffsetLeft->mapToGlobal(QPoint(msaOffsetLeft->rect().right(), 0));
-    }
-
-    int posX = msaEditArea->getXByColumnNum(p.x());
-    int posY = msaEditArea->getYBySequenceNum(p.y());
-
-    return shift+QPoint(posX, posY);
+    const int posX = static_cast<int>(msaEditArea->getEditor()->getUI()->getBaseWidthController()->getBaseGlobalRange(p.x()).center());
+    const int posY = static_cast<int>(msaEditArea->getEditor()->getUI()->getRowHeightController()->getRowGlobalRangeByNumber(p.y()).center());
+    return msaEditArea->mapToGlobal(QPoint(posX, posY));
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectArea"
-void GTUtilsMSAEditorSequenceArea::selectArea(HI::GUITestOpStatus &os, QPoint p1, QPoint p2)
-{
-    MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
-    GT_CHECK(msaEditArea != NULL, "MsaEditorSequenceArea not found");
-
-    p1.rx() = p1.x()==-1 ? msaEditArea->getNumVisibleBases(true)-1 : p1.x();
-    p2.rx() = p2.x()==-1 ? msaEditArea->getNumVisibleBases(true)-1 : p2.x();
-    p1.ry() = p1.y()==-1 ? msaEditArea->getNumVisibleSequences(true)-1 : p1.y();
-    p2.ry() = p2.y()==-1 ? msaEditArea->getNumVisibleSequences(true)-1 : p2.y();
-
-    moveTo(os, p1);
-    GTMouseDriver::press();
-    GTMouseDriver::moveTo(convertCoordinates(os,p2));
-    GTMouseDriver::release();
-    GTGlobals::sleep(1000);
+void GTUtilsMSAEditorSequenceArea::selectArea(GUITestOpStatus &os, QPoint p1, QPoint p2, GTGlobals::UseMethod method) {
+    MSAEditorSequenceArea *sequenceArea = qobject_cast<MSAEditorSequenceArea *>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
+    GT_CHECK(sequenceArea != NULL, "MsaEditorSequenceArea not found");
+
+    p1.rx() = (p1.x() == -1 ? sequenceArea->getNumVisibleBases() - 1 : p1.x());
+    p1.ry() = (p1.y() == -1 ? sequenceArea->getDisplayableRowsCount() - 1 : p1.y());
+
+    p2.rx() = (p2.x() == -1 ? sequenceArea->getNumVisibleBases() - 1 : p2.x());
+    p2.ry() = (p2.y() == -1 ? sequenceArea->getDisplayableRowsCount() - 1 : p2.y());
+
+    switch (method) {
+    case GTGlobals::UseKey:
+        clickToPosition(os, p1);
+        GTKeyboardDriver::keyPress(Qt::Key_Shift);
+        clickToPosition(os, p2);
+        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+        break;
+    case GTGlobals::UseMouse:
+        GTMouseDriver::dragAndDrop(convertCoordinates(os, p1), convertCoordinates(os, p2));
+        break;
+    case GTGlobals::UseKeyBoard:
+        GT_CHECK(false, "Not implemented");
+    default:
+        GT_CHECK(false, "An unknown method");
+    }
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "cancelSelection"
-void GTUtilsMSAEditorSequenceArea::cancelSelection(HI::GUITestOpStatus &os) {
+void GTUtilsMSAEditorSequenceArea::cancelSelection(GUITestOpStatus &os) {
     GTKeyboardDriver::keyClick(Qt::Key_Escape);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "click"
-void GTUtilsMSAEditorSequenceArea::click(HI::GUITestOpStatus &os, QPoint p) {
-    selectArea(os, p, p);
+void GTUtilsMSAEditorSequenceArea::click(GUITestOpStatus &os, const QPoint &screenMaPoint) {
+    GTMouseDriver::moveTo(convertCoordinates(os, screenMaPoint));
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scrollToPosition"
-void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, const QPoint &position) {
-    MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
+void GTUtilsMSAEditorSequenceArea::scrollToPosition(GUITestOpStatus &os, const QPoint &position) {
+    MSAEditorSequenceArea *msaSeqArea = GTWidget::findExactWidget<MSAEditorSequenceArea *>(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os));
     GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
     GT_CHECK(msaSeqArea->isInRange(position), "Position is out of range");
 
     // scroll down
-    GScrollBar* vBar = msaSeqArea->getVBar();
+    GScrollBar* vBar = GTWidget::findExactWidget<GScrollBar *>(os, "vertical_sequence_scroll", GTUtilsMdi::activeWindow(os));
     GT_CHECK(NULL != vBar, "Vertical scroll bar is not found");
 
     QStyleOptionSlider vScrollBarOptions;
     vScrollBarOptions.initFrom(vBar);
 
-    while (!msaSeqArea->isSeqVisible(position.y(), false)) {
+    while (!msaSeqArea->isRowVisible(position.y(), false)) {
         const QRect sliderSpaceRect = vBar->style()->subControlRect(QStyle::CC_ScrollBar, &vScrollBarOptions, QStyle::SC_ScrollBarGroove, vBar);
         const QPoint bottomEdge(sliderSpaceRect.width() / 2, sliderSpaceRect.y() + sliderSpaceRect.height());
 
@@ -153,13 +162,13 @@ void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, con
     }
 
     // scroll right
-    GScrollBar* hBar = msaSeqArea->getHBar();
+    GScrollBar* hBar = GTWidget::findExactWidget<GScrollBar *>(os, "horizontal_sequence_scroll", GTUtilsMdi::activeWindow(os));
     GT_CHECK(NULL != hBar, "Horisontal scroll bar is not found");
 
     QStyleOptionSlider hScrollBarOptions;
     hScrollBarOptions.initFrom(hBar);
 
-    while (!msaSeqArea->isPosVisible(position.x(), false)) {
+    while (!msaSeqArea->isPositionVisible(position.x(), false)) {
         const QRect sliderSpaceRect = hBar->style()->subControlRect(QStyle::CC_ScrollBar, &hScrollBarOptions, QStyle::SC_ScrollBarGroove, hBar);
         const QPoint rightEdge(sliderSpaceRect.x() + sliderSpaceRect.width(), sliderSpaceRect.height() / 2);
 
@@ -172,17 +181,14 @@ void GTUtilsMSAEditorSequenceArea::scrollToPosition(HI::GUITestOpStatus &os, con
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "scrollToBottom"
-void GTUtilsMSAEditorSequenceArea::scrollToBottom(HI::GUITestOpStatus &os) {
-    MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
-    GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
-
+void GTUtilsMSAEditorSequenceArea::scrollToBottom(GUITestOpStatus &os) {
     // scroll down
-    GScrollBar* vBar = msaSeqArea->getVBar();
+    GScrollBar* vBar = GTWidget::findExactWidget<GScrollBar *>(os, "vertical_sequence_scroll", GTUtilsMdi::activeWindow(os));
+    GT_CHECK(NULL != vBar, "Vertical scroll bar is not found");
 #ifdef Q_OS_MAC
     vBar->setValue(vBar->maximum());
     return;
 #endif
-    GT_CHECK(NULL != vBar, "Vertical scroll bar is not found");
 
     QStyleOptionSlider vScrollBarOptions;
     vScrollBarOptions.initFrom(vBar);
@@ -198,19 +204,23 @@ void GTUtilsMSAEditorSequenceArea::scrollToBottom(HI::GUITestOpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "clickToPosition"
-void GTUtilsMSAEditorSequenceArea::clickToPosition(HI::GUITestOpStatus &os, const QPoint &position) {
-    MSAEditorSequenceArea *msaSeqArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
+void GTUtilsMSAEditorSequenceArea::clickToPosition(GUITestOpStatus &os, const QPoint &globalMaPosition) {
+    MSAEditorSequenceArea *msaSeqArea = GTWidget::findExactWidget<MSAEditorSequenceArea *>(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os));
     GT_CHECK(NULL != msaSeqArea, "MSA Editor sequence area is not found");
-    GT_CHECK(msaSeqArea->isInRange(position), "Position is out of range");
+    GT_CHECK(msaSeqArea->isInRange(globalMaPosition), "Position is out of range");
+
+    scrollToPosition(os, globalMaPosition);
+    const QPoint positionCenter(msaSeqArea->getEditor()->getUI()->getBaseWidthController()->getBaseScreenCenter(globalMaPosition.x()),
+                                    msaSeqArea->getEditor()->getUI()->getRowHeightController()->getRowScreenRangeByNumber(globalMaPosition.y()).center());
+    GT_CHECK(msaSeqArea->rect().contains(positionCenter, false), "Position is not visible");
 
-    scrollToPosition(os, position);
-    const QPoint visibleStart(msaSeqArea->getFirstVisibleBase(), msaSeqArea->getFirstVisibleSequence());
-    click(os, position - visibleStart);
+    GTMouseDriver::moveTo(msaSeqArea->mapToGlobal(positionCenter));
+    GTMouseDriver::click();
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkSelectedRect"
-void GTUtilsMSAEditorSequenceArea::checkSelectedRect(HI::GUITestOpStatus &os, const QRect &expectedRect)
+void GTUtilsMSAEditorSequenceArea::checkSelectedRect(GUITestOpStatus &os, const QRect &expectedRect)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(msaEditArea != NULL, "MsaEditorSequenceArea not found");
@@ -222,7 +232,7 @@ void GTUtilsMSAEditorSequenceArea::checkSelectedRect(HI::GUITestOpStatus &os, co
 }
 #undef GT_METHOD_NAME
 #define GT_METHOD_NAME "checkSorted"
-void GTUtilsMSAEditorSequenceArea::checkSorted(HI::GUITestOpStatus &os, bool sortedState) {
+void GTUtilsMSAEditorSequenceArea::checkSorted(GUITestOpStatus &os, bool sortedState) {
 
     QStringList names = getNameList(os);
 
@@ -235,45 +245,40 @@ void GTUtilsMSAEditorSequenceArea::checkSorted(HI::GUITestOpStatus &os, bool sor
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNameList"
-QStringList GTUtilsMSAEditorSequenceArea::getNameList(HI::GUITestOpStatus &os) {
+QStringList GTUtilsMSAEditorSequenceArea::getNameList(GUITestOpStatus &os) {
 
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     MSAEditor* editor = mw->findChild<MSAEditor*>();
     CHECK_SET_ERR_RESULT(editor != NULL, "MsaEditor not found", QStringList());
 
-    QStringList result = editor->getMSAObject()->getMAlignment().getRowNames();
+    QStringList result = editor->getMaObject()->getMultipleAlignment()->getRowNames();
 
     return result;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getVisibleNames"
-QStringList GTUtilsMSAEditorSequenceArea::getVisibleNames(HI::GUITestOpStatus &os){
+QStringList GTUtilsMSAEditorSequenceArea::getVisibleNames(GUITestOpStatus &os){
     Q_UNUSED(os);
     QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
     MSAEditor* editor = mw->findChild<MSAEditor*>();
     CHECK_SET_ERR_RESULT(editor != NULL, "MsaEditor not found", QStringList());
 
-    MSAEditorSequenceArea* seqArea = editor->getUI()->getSequenceArea();
-    CHECK_SET_ERR_RESULT(NULL != seqArea, "MSA Editor sequence area is NULL", QStringList());
+    MaEditorNameList *nameListArea = GTUtilsMsaEditor::getNameListArea(os);
+    CHECK_SET_ERR_RESULT(NULL != nameListArea, "MSA Editor name list area is NULL", QStringList());
 
-    int startSeq = seqArea->getFirstVisibleSequence();
-    int lastSeq = seqArea->getLastVisibleSequence(true);
-    QVector<U2Region> rows;
-    editor->getUI()->getCollapseModel()->getVisibleRows(startSeq, lastSeq, rows);
+    const QList<int> visibleRowsIndexes = editor->getUI()->getDrawHelper()->getVisibleRowsIndexes(nameListArea->height());
 
-    QStringList visiableRowNames;
-    foreach(U2Region region, rows){
-        for(int x = region.startPos; x < region.endPos(); x++)
-            visiableRowNames.append(editor->getMSAObject()->getRow(x).getName());
+    QStringList visibleRowNames;
+    foreach (const int rowIndex, visibleRowsIndexes) {
+        visibleRowNames << editor->getMaObject()->getRow(rowIndex)->getName();
     }
-
-    return visiableRowNames;
+    return visibleRowNames;
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "removeSequence"
-void GTUtilsMSAEditorSequenceArea::removeSequence(HI::GUITestOpStatus &os, const QString &sequenceName) {
+void GTUtilsMSAEditorSequenceArea::removeSequence(GUITestOpStatus &os, const QString &sequenceName) {
     selectSequence(os, sequenceName);
     GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTThread::waitForMainThread();
@@ -282,7 +287,7 @@ void GTUtilsMSAEditorSequenceArea::removeSequence(HI::GUITestOpStatus &os, const
 
 
 #define GT_METHOD_NAME "getSimilarityValue"
-QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(HI::GUITestOpStatus &os, int row){
+QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(GUITestOpStatus &os, int row){
     //bad sulution, but better then nothing
     MsaEditorSimilarityColumn* simCol = dynamic_cast<MsaEditorSimilarityColumn*>(GTWidget::findWidget(os, "msa_editor_similarity_column"));
     GT_CHECK_RESULT(simCol != NULL, "SimilarityColumn is NULL", "");
@@ -292,15 +297,15 @@ QString GTUtilsMSAEditorSequenceArea::getSimilarityValue(HI::GUITestOpStatus &os
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "clickCollapceTriangle"
-void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(HI::GUITestOpStatus &os, QString seqName){
+#define GT_METHOD_NAME "clickCollapseTriangle"
+void GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(GUITestOpStatus &os, QString seqName){
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GT_CHECK(msaEditArea != NULL, "MsaEditorSequenceArea not found");
 
     int rowNum = getVisibleNames(os).indexOf(seqName);
     GT_CHECK(rowNum != -1, "sequence not found in nameList");
     QWidget* nameList = GTWidget::findWidget(os, "msa_editor_name_list");
-    QPoint localCoord = QPoint(15, msaEditArea->getYBySequenceNum(rowNum));
+    QPoint localCoord = QPoint(15, msaEditArea->getEditor()->getUI()->getRowHeightController()->getRowScreenCenterByNumber(rowNum));
     QPoint globalCoord = nameList->mapToGlobal(localCoord);
     GTMouseDriver::moveTo(globalCoord);
     GTMouseDriver::click();
@@ -308,7 +313,7 @@ void GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(HI::GUITestOpStatus &os
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isCollapsed"
-bool GTUtilsMSAEditorSequenceArea::isCollapsed(HI::GUITestOpStatus &os, QString seqName){
+bool GTUtilsMSAEditorSequenceArea::isCollapsed(GUITestOpStatus &os, QString seqName){
     QStringList names = getNameList(os);
     QStringList visiable = getVisibleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), "sequence " + seqName + " not found", false);
@@ -317,7 +322,7 @@ bool GTUtilsMSAEditorSequenceArea::isCollapsed(HI::GUITestOpStatus &os, QString
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "collapsingMode"
-bool GTUtilsMSAEditorSequenceArea::collapsingMode(HI::GUITestOpStatus &os){
+bool GTUtilsMSAEditorSequenceArea::collapsingMode(GUITestOpStatus &os){
     QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
     bool nameLists = getVisibleNames(os)==getNameList(os);
     if(nameLists && !collapce->isChecked()){
@@ -331,28 +336,28 @@ bool GTUtilsMSAEditorSequenceArea::collapsingMode(HI::GUITestOpStatus &os){
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLeftOffset"
-int GTUtilsMSAEditorSequenceArea::getLeftOffset(HI::GUITestOpStatus &os)
+int GTUtilsMSAEditorSequenceArea::getLeftOffset(GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
 
-    return msaEditArea->getFirstVisibleBase() + 1; // тут не уверен, есть еще класс MSAEditorOffsetsViewWidget (файл MSAEditorOffsetsViewWidget.h)
+    return msaEditArea->getEditor()->getUI()->getScrollController()->getFirstVisibleBase(true) + 1; // тут не уверен, есть еще класс MSAEditorOffsetsViewWidget (файл MSAEditorOffsetsViewWidget.h)
                                                    // мне кажется более правильно будет от туда офсет вытащить.
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLeftOffset"
-int GTUtilsMSAEditorSequenceArea::getRightOffset(HI::GUITestOpStatus &os)
+int GTUtilsMSAEditorSequenceArea::getRightOffset(GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
 
-    return msaEditArea->getLastVisibleBase(true, true) + 1; // тут такая же фигня как getLeftOffset()
+    return msaEditArea->getEditor()->getUI()->getScrollController()->getLastVisibleBase(msaEditArea->width(), true) + 1; // тут такая же фигня как getLeftOffset()
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getLength"
-int GTUtilsMSAEditorSequenceArea::getLength(HI::GUITestOpStatus &os) {
+int GTUtilsMSAEditorSequenceArea::getLength(GUITestOpStatus &os) {
 
     QWidget *statusWidget = GTWidget::findWidget(os, "msa_editor_status_bar");
     return GTMSAEditorStatusWidget::length(os, statusWidget);
@@ -360,16 +365,16 @@ int GTUtilsMSAEditorSequenceArea::getLength(HI::GUITestOpStatus &os) {
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getNumVisibleBases"
-int GTUtilsMSAEditorSequenceArea::getNumVisibleBases(HI::GUITestOpStatus &os) {
+int GTUtilsMSAEditorSequenceArea::getNumVisibleBases(GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", -1);
 
-    return msaEditArea->getNumVisibleBases(true);
+    return msaEditArea->getEditor()->getUI()->getDrawHelper()->getVisibleBasesCount(msaEditArea->width());
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSelectedRect"
-QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(HI::GUITestOpStatus &os) {
+QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", QRect());
 
@@ -377,8 +382,19 @@ QRect GTUtilsMSAEditorSequenceArea::getSelectedRect(HI::GUITestOpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "dragAndDropSelection"
+void GTUtilsMSAEditorSequenceArea::dragAndDropSelection(GUITestOpStatus &os, const QPoint &fromMaPosition, const QPoint &toMaPosition) {
+    const QRect selectionRect = getSelectedRect(os);
+    GT_CHECK(selectionRect.contains(fromMaPosition), QString("Position (%1, %2) is out of selected rect boundaries").arg(fromMaPosition.x()).arg(fromMaPosition.y()));
+
+    scrollToPosition(os, fromMaPosition);
+
+    GTMouseDriver::dragAndDrop(convertCoordinates(os, fromMaPosition), convertCoordinates(os, toMaPosition));
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "offsetsVisible"
-bool GTUtilsMSAEditorSequenceArea::offsetsVisible(HI::GUITestOpStatus &os) {
+bool GTUtilsMSAEditorSequenceArea::offsetsVisible(GUITestOpStatus &os) {
 
     QWidget *leftOffsetWidget = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_left");
     QWidget *rightOffsetWidget = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_right");
@@ -390,22 +406,20 @@ bool GTUtilsMSAEditorSequenceArea::offsetsVisible(HI::GUITestOpStatus &os) {
 }
 #undef GT_METHOD_NAME
 #define GT_METHOD_NAME "checkConsensus"
-void GTUtilsMSAEditorSequenceArea::checkConsensus(HI::GUITestOpStatus &os, QString cons){
-    QWidget *consArea = GTWidget::findWidget(os,"consArea");
+void GTUtilsMSAEditorSequenceArea::checkConsensus(GUITestOpStatus &os, QString cons){
+    MSAEditorConsensusArea* consArea = qobject_cast<MSAEditorConsensusArea*>
+            (GTWidget::findWidget(os,"consArea"));
     CHECK_SET_ERR(consArea!=NULL,"consArea is NULL");
 
-    QObject *parent = consArea->findChild<QObject*>("parent");
-    CHECK_SET_ERR(parent!=NULL,"parent is NULL");
-
-    QObject *child = parent->findChild<QObject*>();
-    CHECK_SET_ERR(child!=NULL,"child is NULL");
-    CHECK_SET_ERR(child->objectName()==cons,"Wrong consensus. Currens consensus is  "+child->objectName());
+    QSharedPointer<MSAEditorConsensusCache> cache = consArea->getConsensusCache();
+    CHECK_SET_ERR(QString(cache->getConsensusLine(true)) == cons,
+                  "Wrong consensus. Currens consensus is  " + cache->getConsensusLine(true));
     GTGlobals::sleep(1000);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "selectSequence"
-void GTUtilsMSAEditorSequenceArea::selectSequence(HI::GUITestOpStatus &os, const QString &seqName) {
+void GTUtilsMSAEditorSequenceArea::selectSequence(GUITestOpStatus &os, const QString &seqName) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
             (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(msaEditArea != NULL, "MsaEditorSequenceArea not found");
@@ -420,7 +434,7 @@ void GTUtilsMSAEditorSequenceArea::selectSequence(HI::GUITestOpStatus &os, const
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceSelected"
-bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(HI::GUITestOpStatus &os, const QString &seqName) {
+bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(GUITestOpStatus &os, const QString &seqName) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
             (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", false);
@@ -431,8 +445,9 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(HI::GUITestOpStatus &os, c
 //Seq names are drawn on widget, so this hack is needed
     U2Region selectedRowsRegion = msaEditArea->getSelectedRows();
     QStringList selectedRowNames;
-    for(int x = selectedRowsRegion.startPos; x < selectedRowsRegion.endPos(); x++)
-        selectedRowNames.append(editor->getMSAObject()->getRow(x).getName());
+    for(int x = selectedRowsRegion.startPos; x < selectedRowsRegion.endPos(); x++) {
+        selectedRowNames.append(editor->getMaObject()->getRow(x)->getName());
+    }
 
     if (selectedRowNames.contains(seqName)) {
         return true;
@@ -441,8 +456,8 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceSelected(HI::GUITestOpStatus &os, c
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME
-int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(HI::GUITestOpStatus &os) {
+#define GT_METHOD_NAME "getSelectedSequencesNum"
+int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(GUITestOpStatus &os) {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>
         (GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", 0);
@@ -452,15 +467,14 @@ int GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(HI::GUITestOpStatus &o
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceVisible"
-bool GTUtilsMSAEditorSequenceArea::isSequenceVisible(HI::GUITestOpStatus &os, const QString &seqName) {
+bool GTUtilsMSAEditorSequenceArea::isSequenceVisible(GUITestOpStatus &os, const QString &seqName) {
     QStringList visiableRowNames = getVisibleNames(os);
     return visiableRowNames.contains(seqName);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getSequenceData"
-QString GTUtilsMSAEditorSequenceArea::getSequenceData(HI::GUITestOpStatus &os, const QString &sequenceName) {
-    Q_UNUSED(os);
+QString GTUtilsMSAEditorSequenceArea::getSequenceData(GUITestOpStatus &os, const QString &sequenceName) {
     MSAEditorSequenceArea *sequenceArea = getSequenceArea(os);
     GT_CHECK_RESULT(NULL != sequenceArea, "Sequence area is NULL", "");
 
@@ -474,8 +488,22 @@ QString GTUtilsMSAEditorSequenceArea::getSequenceData(HI::GUITestOpStatus &os, c
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getSequenceData"
+QString GTUtilsMSAEditorSequenceArea::getSequenceData(GUITestOpStatus &os, int rowNumber) {
+    MSAEditorSequenceArea *sequenceArea = getSequenceArea(os);
+    GT_CHECK_RESULT(NULL != sequenceArea, "Sequence area is NULL", "");
+
+    const QStringList names = getNameList(os);
+    GT_CHECK_RESULT(0 <= rowNumber && rowNumber <= names.size(), QString("Row with number %1 is out of boundaries").arg(rowNumber), "");
+
+    GTUtilsMsaEditor::clickSequenceName(os, names[rowNumber]);
+    GTKeyboardUtils::copy(os);
+    return GTClipboard::text(os);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "selectColumnInConsensus"
-void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( HI::GUITestOpStatus &os, int columnNumber ) {
+void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( GUITestOpStatus &os, int columnNumber ) {
     QWidget *activeWindow = GTUtilsMdi::activeWindow( os );
     const MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea *>(
         GTWidget::findWidget( os, "msa_editor_sequence_area", activeWindow ) );
@@ -490,7 +518,7 @@ void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( HI::GUITestOpStatus
         shift = msaOffsetLeft->mapToGlobal( QPoint( msaOffsetLeft->rect( ).right( ), 0 ) );
     }
 
-    const int posX = msaEditArea->getXByColumnNum( columnNumber ) + shift.x( );
+    const int posX = msaEditArea->getEditor()->getUI()->getBaseWidthController()->getBaseScreenCenter(columnNumber) + shift.x();
 
     QWidget *consArea = GTWidget::findWidget( os,"consArea" );
     CHECK_SET_ERR( NULL != consArea,"consArea is NULL" );
@@ -502,7 +530,7 @@ void GTUtilsMSAEditorSequenceArea::selectColumnInConsensus( HI::GUITestOpStatus
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "hasAminoAlphabet"
-bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(HI::GUITestOpStatus &os)
+bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(GUITestOpStatus &os)
 {
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", false);
@@ -512,7 +540,7 @@ bool GTUtilsMSAEditorSequenceArea::hasAminoAlphabet(HI::GUITestOpStatus &os)
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "isSequenceHightighted"
-bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(HI::GUITestOpStatus &os, const QString &seqName){
+bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(GUITestOpStatus &os, const QString &seqName){
     QStringList names = getVisibleNames(os);
     GT_CHECK_RESULT(names.contains(seqName), QString("sequence with name %1 not found").arg(seqName), false);
 
@@ -524,8 +552,8 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(HI::GUITestOpStatus &os
     QWidget* nameList = GTWidget::findWidget(os, "msa_editor_name_list");
     GT_CHECK_RESULT(nameList !=NULL, "name list is NULL", false);
 
-    int initCoord = center.y() - getRowHeight(os)/2;
-    int finalCoord = center.y() + getRowHeight(os)/2;
+    int initCoord = center.y() - getRowHeight(os, row) / 2;
+    int finalCoord = center.y() + getRowHeight(os, row) / 2;
 
     for (int i = initCoord; i<finalCoord; i++){
         QPoint local = nameList->mapFromGlobal(QPoint(center.x(), i));
@@ -541,12 +569,12 @@ bool GTUtilsMSAEditorSequenceArea::isSequenceHightighted(HI::GUITestOpStatus &os
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getColor"
-QString GTUtilsMSAEditorSequenceArea::getColor(HI::GUITestOpStatus &os, QPoint p){
+QString GTUtilsMSAEditorSequenceArea::getColor(GUITestOpStatus &os, QPoint p){
     MSAEditorSequenceArea *msaEditArea = qobject_cast<MSAEditorSequenceArea*>(GTWidget::findWidget(os, "msa_editor_sequence_area", GTUtilsMdi::activeWindow(os)));
     GT_CHECK_RESULT(msaEditArea != NULL, "MsaEditorSequenceArea not found", "");
 
     QPoint global = convertCoordinates(os, p);
-    global.setY(global.y() + (getRowHeight(os)/2 - 1));
+    global.setY(global.y() + (getRowHeight(os, p.y())/2 - 1));
     QPoint local = msaEditArea->mapFromGlobal(global);
     QColor c = GTWidget::getColor(os, msaEditArea, local);
     QString name = c.name();
@@ -555,7 +583,7 @@ QString GTUtilsMSAEditorSequenceArea::getColor(HI::GUITestOpStatus &os, QPoint p
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkColor"
-bool GTUtilsMSAEditorSequenceArea::checkColor(HI::GUITestOpStatus &os, const QPoint &p, const QString &expectedColor){
+bool GTUtilsMSAEditorSequenceArea::checkColor(GUITestOpStatus &os, const QPoint &p, const QString &expectedColor){
     QColor c = getColor(os, p);
     bool result = (expectedColor == c.name());
     GT_CHECK_RESULT(result, QString("wrong color. Expected: %1, actual: %2").arg(expectedColor).arg(c.name()), result);
@@ -564,16 +592,16 @@ bool GTUtilsMSAEditorSequenceArea::checkColor(HI::GUITestOpStatus &os, const QPo
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "getRowHeight"
-int GTUtilsMSAEditorSequenceArea::getRowHeight(HI::GUITestOpStatus &os){
+int GTUtilsMSAEditorSequenceArea::getRowHeight(GUITestOpStatus &os, int rowNumber){
     QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
     GT_CHECK_RESULT(activeWindow != NULL, "active mdi window is NULL", 0);
-    MSAEditorUI* ui = GTUtilsMdi::activeWindow(os)->findChild<MSAEditorUI*>();
-    return ui->getEditor()->getRowHeight();
+    MsaEditorWgt* ui = GTUtilsMdi::activeWindow(os)->findChild<MsaEditorWgt*>();
+    return ui->getRowHeightController()->getRowHeightByNumber(rowNumber);
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "renameSequence"
-void GTUtilsMSAEditorSequenceArea::renameSequence(HI::GUITestOpStatus &os, const QString &seqToRename, const QString &newName){
+void GTUtilsMSAEditorSequenceArea::renameSequence(GUITestOpStatus &os, const QString &seqToRename, const QString &newName){
     int num = getVisibleNames(os).indexOf(seqToRename);
     GT_CHECK(num != -1, "sequence not found");
 
@@ -584,8 +612,16 @@ void GTUtilsMSAEditorSequenceArea::renameSequence(HI::GUITestOpStatus &os, const
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "replaceSymbol"
+void GTUtilsMSAEditorSequenceArea::replaceSymbol(GUITestOpStatus &os, const QPoint &maPoint, char newSymbol) {
+    clickToPosition(os, maPoint);
+    GTKeyboardDriver::keyClick('r', Qt::ShiftModifier);
+    GTKeyboardDriver::keyClick(newSymbol);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "createColorScheme"
-void GTUtilsMSAEditorSequenceArea::createColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName, const NewColorSchemeCreator::alphabet al){
+void GTUtilsMSAEditorSequenceArea::createColorScheme(GUITestOpStatus &os, const QString &colorSchemeName, const NewColorSchemeCreator::alphabet al){
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << "Create new color scheme" ) );
@@ -595,7 +631,7 @@ void GTUtilsMSAEditorSequenceArea::createColorScheme(HI::GUITestOpStatus &os, co
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "deleteColorScheme"
-void GTUtilsMSAEditorSequenceArea::deleteColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName){
+void GTUtilsMSAEditorSequenceArea::deleteColorScheme(GUITestOpStatus &os, const QString &colorSchemeName){
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(1, 1));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList( ) << "Colors"
         << "Custom schemes" << "Create new color scheme" ) );
@@ -606,7 +642,7 @@ void GTUtilsMSAEditorSequenceArea::deleteColorScheme(HI::GUITestOpStatus &os, co
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "checkSelection"
-void GTUtilsMSAEditorSequenceArea::checkSelection(HI::GUITestOpStatus &os, const QPoint &start, const QPoint &end, const QString &expected){
+void GTUtilsMSAEditorSequenceArea::checkSelection(GUITestOpStatus &os, const QPoint &start, const QPoint &end, const QString &expected){
     GTWidget::click(os, GTUtilsMdi::activeWindow(os));
     selectArea(os, start, end);
     GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
diff --git a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
index 1b3908b..7dc82a6 100644
--- a/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
+++ b/src/plugins/GUITestBase/src/GTUtilsMsaEditorSequenceArea.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,79 +22,83 @@
 #ifndef GTUTILSMSAEDITORSEQUENCEAREA_H
 #define GTUTILSMSAEDITORSEQUENCEAREA_H
 
-#include "GTGlobals.h"
-#include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
+#include <GTGlobals.h>
+
 #include <U2View/MSAEditorSequenceArea.h>
 
+#include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
+
 namespace U2 {
 
 class GTUtilsMSAEditorSequenceArea {
 public:
-    static MSAEditorSequenceArea * getSequenceArea(HI::GUITestOpStatus &os);
-    static void callContextMenu(HI::GUITestOpStatus &os, const QPoint &innerCoords = QPoint());  // zero-based position
+    static MSAEditorSequenceArea * getSequenceArea(GUITestOpStatus &os);
+    static void callContextMenu(GUITestOpStatus &os, const QPoint &innerCoords = QPoint());  // zero-based position
 
-    static void checkSelectedRect(HI::GUITestOpStatus &os, const QRect &expectedRect);
-    static void checkSorted(HI::GUITestOpStatus &os, bool sortedState = true);
+    static void checkSelectedRect(GUITestOpStatus &os, const QRect &expectedRect);
+    static void checkSorted(GUITestOpStatus &os, bool sortedState = true);
 
-    static void checkConsensus(HI::GUITestOpStatus &os, QString cons);
+    static void checkConsensus(GUITestOpStatus &os, QString cons);
     // may be used for selecting visible columns only
-    static void selectColumnInConsensus( HI::GUITestOpStatus &os, int columnNumber );
+    static void selectColumnInConsensus( GUITestOpStatus &os, int columnNumber );
 
     // MSAEditorNameList
-    static QStringList getNameList(HI::GUITestOpStatus &os);
-    static QStringList getVisibleNames(HI::GUITestOpStatus &os);
-    static QString getSimilarityValue(HI::GUITestOpStatus &os, int row);
-    static void clickCollapceTriangle(HI::GUITestOpStatus &os, QString seqName);
-    static bool isCollapsed(HI::GUITestOpStatus &os, QString seqName);
-    static bool collapsingMode(HI::GUITestOpStatus &os);
+    static QStringList getNameList(GUITestOpStatus &os);
+    static QStringList getVisibleNames(GUITestOpStatus &os);
+    static QString getSimilarityValue(GUITestOpStatus &os, int row);
+    static void clickCollapseTriangle(GUITestOpStatus &os, QString seqName);
+    static bool isCollapsed(GUITestOpStatus &os, QString seqName);
+    static bool collapsingMode(GUITestOpStatus &os);
 
-    static int getLeftOffset(HI::GUITestOpStatus &os);
-    static int getRightOffset(HI::GUITestOpStatus &os);
+    static int getLeftOffset(GUITestOpStatus &os);
+    static int getRightOffset(GUITestOpStatus &os);
 
-    static int getLength(HI::GUITestOpStatus &os);
-    static int getNumVisibleBases(HI::GUITestOpStatus &os);
+    static int getLength(GUITestOpStatus &os);
+    static int getNumVisibleBases(GUITestOpStatus &os);
 
-    static QRect getSelectedRect(HI::GUITestOpStatus &os);
+    static QRect getSelectedRect(GUITestOpStatus &os);
+    static void dragAndDropSelection(GUITestOpStatus &os, const QPoint &fromMaPosition, const QPoint &toMaPosition);
 
-    static void moveTo(HI::GUITestOpStatus &os, const QPoint &p);
+    static void moveTo(GUITestOpStatus &os, const QPoint &p);
 
     // selects area in MSA coordinats, if some p coordinate less than 0, it becomes max valid coordinate
     // zero-based position
-    static void selectArea(HI::GUITestOpStatus &os, QPoint p1 = QPoint(0, 0), QPoint p2 = QPoint(-1, -1));
-    static void cancelSelection(HI::GUITestOpStatus &os);
-    static QPoint convertCoordinates(HI::GUITestOpStatus &os, const QPoint p);
-    static void click(HI::GUITestOpStatus &os, QPoint p = QPoint(0, 0));
+    static void selectArea(GUITestOpStatus &os, QPoint p1 = QPoint(0, 0), QPoint p2 = QPoint(-1, -1), GTGlobals::UseMethod method = GTGlobals::UseKey);
+    static void cancelSelection(GUITestOpStatus &os);
+    static QPoint convertCoordinates(GUITestOpStatus &os, const QPoint p);
+    static void click(GUITestOpStatus &os, const QPoint &screenMaPoint = QPoint(0, 0));
 
     // scrolls to the position (in the MSA zero-based coordinates)
-    static void scrollToPosition(HI::GUITestOpStatus &os, const QPoint& position);
-    static void scrollToBottom(HI::GUITestOpStatus &os);
-    static void clickToPosition(HI::GUITestOpStatus &os, const QPoint& position);
+    static void scrollToPosition(GUITestOpStatus &os, const QPoint& position);
+    static void scrollToBottom(GUITestOpStatus &os);
+    static void clickToPosition(GUITestOpStatus &os, const QPoint& globalMaPosition);
 
-    static void selectSequence(HI::GUITestOpStatus &os, const QString &seqName);
-    static bool isSequenceSelected(HI::GUITestOpStatus &os, const QString &seqName);
-    static void removeSequence(HI::GUITestOpStatus &os, const QString &sequenceName);
-    static int getSelectedSequencesNum(HI::GUITestOpStatus &os);
-    static bool isSequenceVisible(HI::GUITestOpStatus &os, const QString &seqName);
-    static QString getSequenceData(HI::GUITestOpStatus &os, const QString &sequenceName);
+    static void selectSequence(GUITestOpStatus &os, const QString &seqName);
+    static bool isSequenceSelected(GUITestOpStatus &os, const QString &seqName);
+    static void removeSequence(GUITestOpStatus &os, const QString &sequenceName);
+    static int getSelectedSequencesNum(GUITestOpStatus &os);
+    static bool isSequenceVisible(GUITestOpStatus &os, const QString &seqName);
+    static QString getSequenceData(GUITestOpStatus &os, const QString &sequenceName);
+    static QString getSequenceData(GUITestOpStatus &os, int rowNumber);
 
-    static bool offsetsVisible(HI::GUITestOpStatus &os);
+    static bool offsetsVisible(GUITestOpStatus &os);
 
-    static bool hasAminoAlphabet(HI::GUITestOpStatus &os);
-    static bool isSequenceHightighted(HI::GUITestOpStatus &os, const QString& seqName);
-    static QString getColor(HI::GUITestOpStatus &os, QPoint p);
-    static bool checkColor(HI::GUITestOpStatus &os, const QPoint& p, const QString& expectedColor);
-    static int getRowHeight(HI::GUITestOpStatus &os);
+    static bool hasAminoAlphabet(GUITestOpStatus &os);
+    static bool isSequenceHightighted(GUITestOpStatus &os, const QString& seqName);
+    static QString getColor(GUITestOpStatus &os, QPoint p);
+    static bool checkColor(GUITestOpStatus &os, const QPoint& p, const QString& expectedColor);
+    static int getRowHeight(GUITestOpStatus &os, int rowNumber);
 
-    static void renameSequence(HI::GUITestOpStatus &os, const QString& seqToRename, const QString& newName);
+    static void renameSequence(GUITestOpStatus &os, const QString& seqToRename, const QString& newName);
+    static void replaceSymbol(GUITestOpStatus &os, const QPoint &maPoint, char newSymbol);
 
-    static void createColorScheme(HI::GUITestOpStatus &os, const QString& schemeName, const NewColorSchemeCreator::alphabet al);
-    static void deleteColorScheme(HI::GUITestOpStatus &os, const QString& schemeName);
+    static void createColorScheme(GUITestOpStatus &os, const QString& schemeName, const NewColorSchemeCreator::alphabet al);
+    static void deleteColorScheme(GUITestOpStatus &os, const QString& schemeName);
 
-    static void checkSelection(HI::GUITestOpStatus &os, const QPoint& start, const QPoint& end, const QString& expected);
+    static void checkSelection(GUITestOpStatus &os, const QPoint& start, const QPoint& end, const QString& expected);
 
     static const QString highlightningColorName;
 };
 
-
 } // namespace
 #endif // GTUTILSMSAEDITORSEQUENCEAREA_H
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
index 7f2d7eb..debd163 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsNotifications.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsNotifications.h b/src/plugins/GUITestBase/src/GTUtilsNotifications.h
index 1e114d8..3c3edde 100644
--- a/src/plugins/GUITestBase/src/GTUtilsNotifications.h
+++ b/src/plugins/GUITestBase/src/GTUtilsNotifications.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
index 328b5e0..cb38029 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,15 +26,21 @@
 #include <QToolButton>
 #include <QTreeWidget>
 
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
+
 #include <U2Core/U2IdTypes.h>
+
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
 #include "api/GTBaseCompleter.h"
-#include <primitives/GTComboBox.h>
-#include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTWidget.h>
-#include "utils/GTThread.h"
 
 namespace U2 {
 using namespace HI;
@@ -178,6 +184,13 @@ QString GTUtilsOptionPanelMsa::getColorScheme(HI::GUITestOpStatus &os) {
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "setHighlightingScheme"
+void GTUtilsOptionPanelMsa::setHighlightingScheme(GUITestOpStatus &os, const QString &highlightingSchemeName) {
+    openTab(os, Highlighting);
+    GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "highlightingScheme"), highlightingSchemeName);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "addFirstSeqToPA"
 void GTUtilsOptionPanelMsa::addFirstSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method){
     addSeqToPA(os, seqName, method, 1);
@@ -242,18 +255,106 @@ QToolButton* GTUtilsOptionPanelMsa::getDeleteButton(HI::GUITestOpStatus &os, int
 
 #define GT_METHOD_NAME "getAlignButton"
 QPushButton *GTUtilsOptionPanelMsa::getAlignButton(HI::GUITestOpStatus &os) {
-    // TODO: ensure that the Pairwise alignment" tab is opened.
+    openTab(os, PairwiseAlignment);
     return GTWidget::findExactWidget<QPushButton *>(os, "alignButton");
 }
 #undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "setPairwiseAlignmentAlgorithm"
 void GTUtilsOptionPanelMsa::setPairwiseAlignmentAlgorithm(HI::GUITestOpStatus &os, const QString &algorithm) {
-    // TODO: ensure that the Pairwise alignment" tab is opened.
+    openTab(os, PairwiseAlignment);
     GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algorithmListComboBox"), algorithm);
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "setThreshold"
+void GTUtilsOptionPanelMsa::setThreshold(GUITestOpStatus &os, int threshold) {
+    openTab(os, General);
+    GTSlider::setValue(os, GTWidget::findExactWidget<QSlider *>(os, "thresholdSlider"), threshold);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getThreshold"
+int GTUtilsOptionPanelMsa::getThreshold(GUITestOpStatus &os) {
+    openTab(os, General);
+    QSlider *thresholdSlider = GTWidget::findExactWidget<QSlider *>(os, "thresholdSlider");
+    GT_CHECK_RESULT(NULL != thresholdSlider, "thresholdSlider is NULL", -1);
+    return thresholdSlider->value();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setThresholdComparison"
+void GTUtilsOptionPanelMsa::setThresholdComparison(GUITestOpStatus &os, GTUtilsOptionPanelMsa::ThresholdComparison comparison) {
+    openTab(os, Highlighting);
+    switch (comparison) {
+    case LessOrEqual:
+        GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "thresholdLessRb"));
+        break;
+    case GreaterOrEqual:
+        GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "thresholdMoreRb"));
+        break;
+    default:
+        GT_CHECK(false, QString("An unknown threshold comparison type: %1").arg(comparison));
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getThresholdComparison"
+GTUtilsOptionPanelMsa::ThresholdComparison GTUtilsOptionPanelMsa::getThresholdComparison(GUITestOpStatus &os) {
+    openTab(os, Highlighting);
+    QRadioButton *thresholdLessRb = GTWidget::findExactWidget<QRadioButton *>(os, "thresholdLessRb");
+    GT_CHECK_RESULT(NULL != thresholdLessRb, "thresholdLessRb is NULL", LessOrEqual);
+    QRadioButton *thresholdMoreRb = GTWidget::findExactWidget<QRadioButton *>(os, "thresholdMoreRb");
+    GT_CHECK_RESULT(NULL != thresholdMoreRb, "thresholdMoreRb is NULL", LessOrEqual);
+    const bool lessOrEqual = thresholdLessRb->isChecked();
+    const bool greaterOrEqual = thresholdMoreRb->isChecked();
+    GT_CHECK_RESULT(lessOrEqual ^ greaterOrEqual, "Incorrect state of threshold comparison radiobuttons", LessOrEqual);
+    return lessOrEqual ? LessOrEqual : GreaterOrEqual;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setUseDotsOption"
+void GTUtilsOptionPanelMsa::setUseDotsOption(GUITestOpStatus &os, bool useDots) {
+    openTab(os, Highlighting);
+    GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "useDots"), useDots);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "isUseDotsOptionSet"
+bool GTUtilsOptionPanelMsa::isUseDotsOptionSet(GUITestOpStatus &os) {
+    openTab(os, Highlighting);
+    QCheckBox *useDots = GTWidget::findExactWidget<QCheckBox *>(os, "useDots");
+    GT_CHECK_RESULT(NULL != useDots, "useDots checkbox is NULL", false);
+    return useDots->isChecked();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setExportConsensusOutputPath"
+void GTUtilsOptionPanelMsa::setExportConsensusOutputPath(GUITestOpStatus &os, const QString &filePath) {
+    openTab(os, ExportConsensus);
+    GTLineEdit::setText(os, "pathLe", filePath, NULL);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getExportConsensusOutputPath"
+QString GTUtilsOptionPanelMsa::getExportConsensusOutputPath(GUITestOpStatus &os) {
+    return GTLineEdit::getText(os, "pathLe");
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setExportConsensusOutputFormat"
+void GTUtilsOptionPanelMsa::setExportConsensusOutputFormat(GUITestOpStatus &os, const QString &format) {
+    openTab(os, ExportConsensus);
+    GTComboBox::setIndexWithText(os, "formatCb", NULL, format);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getExportConsensusOutputFormat"
+QString GTUtilsOptionPanelMsa::getExportConsensusOutputFormat(GUITestOpStatus &os) {
+    return GTComboBox::getCurrentText(os, "formatCb");
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "getSeqLineEdit"
 QLineEdit* GTUtilsOptionPanelMsa::getSeqLineEdit(HI::GUITestOpStatus &os, int number){
     QLineEdit* result = qobject_cast<QLineEdit*>(getWidget(os, "sequenceLineEdit", number));
@@ -262,7 +363,7 @@ QLineEdit* GTUtilsOptionPanelMsa::getSeqLineEdit(HI::GUITestOpStatus &os, int nu
 }
 #undef GT_METHOD_NAME
 
-#define GT_METHOD_NAME "agetWidget"
+#define GT_METHOD_NAME "getWidget"
 QWidget* GTUtilsOptionPanelMsa::getWidget(HI::GUITestOpStatus &os, const QString& widgetName, int number){
     QWidget* sequenceContainerWidget = GTWidget::findWidget(os, "sequenceContainerWidget");
     GT_CHECK_RESULT(sequenceContainerWidget != NULL, "sequenceContainerWidget not found", NULL);
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
index 7c8b06c..b3d7985 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMSA.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#ifndef U2_GTUTILS_OPTION_PANEL_MSA_H
-#define U2_GTUTILS_OPTION_PANEL_MSA_H
+#ifndef _U2_GT_UTILS_OPTION_PANEL_MSA_H_
+#define _U2_GT_UTILS_OPTION_PANEL_MSA_H_
 
-#include "GTGlobals.h"
+#include <GTGlobals.h>
 
 class QLineEdit;
 class QPushButton;
@@ -30,10 +30,26 @@ class QToolButton;
 
 namespace U2 {
 
-class GTUtilsOptionPanelMsa{
+class GTUtilsOptionPanelMsa {
 public:
-    enum Tabs{General, Highlighting, PairwiseAlignment, TreeSettings, ExportConsensus, Statistics};
-    enum AddRefMethod{Button, Completer};
+    enum Tabs {
+        General,
+        Highlighting,
+        PairwiseAlignment,
+        TreeSettings,
+        ExportConsensus,
+        Statistics
+    };
+
+    enum AddRefMethod {
+        Button,
+        Completer
+    };
+
+    enum ThresholdComparison {
+        LessOrEqual,
+        GreaterOrEqual
+    };
 
     static const QMap<Tabs, QString> tabsNames;
     static const QMap<Tabs, QString> innerWidgetNames;
@@ -55,27 +71,41 @@ public:
     static void setColorScheme(HI::GUITestOpStatus &os, const QString &colorSchemeName);
     static QString getColorScheme(HI::GUITestOpStatus &os);
 
-    //functions for accessing PA gui elements
+    static void setHighlightingScheme(HI::GUITestOpStatus &os, const QString &highlightingSchemeName);
+
+    // functions for accessing PA gui elements
     static QToolButton* getAddButton(HI::GUITestOpStatus &os, int number);
     static QLineEdit* getSeqLineEdit(HI::GUITestOpStatus &os, int number);
     static QToolButton* getDeleteButton(HI::GUITestOpStatus &os, int number);
     static QPushButton *getAlignButton(HI::GUITestOpStatus &os);
     static void setPairwiseAlignmentAlgorithm(HI::GUITestOpStatus &os, const QString &algorithm);
 
+    // functions for accessing Highlighting schemes options elements
+    static void setThreshold(HI::GUITestOpStatus &os, int threshold);
+    static int getThreshold(HI::GUITestOpStatus &os);
+
+    static void setThresholdComparison(HI::GUITestOpStatus &os, ThresholdComparison comparison);
+    static ThresholdComparison getThresholdComparison(HI::GUITestOpStatus &os);
+
+    static void setUseDotsOption(HI::GUITestOpStatus &os, bool useDots);
+    static bool isUseDotsOptionSet(HI::GUITestOpStatus &os);
+
+    // functions for accessing "Export consensus" options elements
+    static void setExportConsensusOutputPath(HI::GUITestOpStatus &os, const QString &filePath);
+    static QString getExportConsensusOutputPath(HI::GUITestOpStatus &os);
+
+    static void setExportConsensusOutputFormat(HI::GUITestOpStatus &os, const QString &format);
+    static QString getExportConsensusOutputFormat(HI::GUITestOpStatus &os);
+
 private:
     static QWidget* getWidget(HI::GUITestOpStatus &os, const QString& widgetName, int number);
 
     static void addSeqToPA(HI::GUITestOpStatus &os, QString seqName, AddRefMethod method, int number);
 
-
-private:
     static QMap<Tabs, QString> initNames();
     static QMap<Tabs, QString> initInnerWidgetNames();
 };
 
-
 }
 
-
-
-#endif // GTUTILSOPTIONPANELMSA_H
+#endif // _U2_GT_UTILS_OPTION_PANEL_MSA_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.cpp
new file mode 100644
index 0000000..4b3d720
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.cpp
@@ -0,0 +1,157 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <QComboBox>
+#include <QApplication>
+#include <QLabel>
+#include <QToolButton>
+
+#include <primitives/GTComboBox.h>
+#include <primitives/GTWidget.h>
+#include <primitives/GTSlider.h>
+
+#include "GTUtilsOptionPanelMca.h"
+
+namespace U2 {
+    using namespace HI;
+
+QMap<GTUtilsOptionPanelMca::Tabs, QString> GTUtilsOptionPanelMca::initNames() {
+    QMap<Tabs, QString> result;
+    result.insert(General, "OP_MCA_GENERAL");
+    result.insert(Consensus, "OP_CONSENSUS");
+    return result;
+}
+
+QMap<GTUtilsOptionPanelMca::Tabs, QString> GTUtilsOptionPanelMca::initInnerWidgetNames() {
+    QMap<Tabs, QString> result;
+    result.insert(General, "McaGeneralTab");
+    result.insert(Consensus, "ExportConsensusWidget");
+    return result;
+}
+
+const QMap<GTUtilsOptionPanelMca::Tabs, QString> GTUtilsOptionPanelMca::tabsNames = initNames();
+const QMap<GTUtilsOptionPanelMca::Tabs, QString> GTUtilsOptionPanelMca::innerWidgetNames = initInnerWidgetNames();
+
+#define GT_CLASS_NAME "GTUtilsOptionPanelMca"
+
+#define GT_METHOD_NAME "toggleTab"
+void GTUtilsOptionPanelMca::toggleTab(HI::GUITestOpStatus &os, Tabs tab) {
+    GTWidget::click(os, GTWidget::findWidget(os, tabsNames[tab]));
+    GTGlobals::sleep(500);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "openTab"
+void GTUtilsOptionPanelMca::openTab(HI::GUITestOpStatus &os, Tabs tab) {
+    if (!isTabOpened(os, tab)) {
+       toggleTab(os, tab);
+   }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "closeTab"
+void GTUtilsOptionPanelMca::closeTab(HI::GUITestOpStatus &os, Tabs tab) {
+    if (isTabOpened(os, tab)) {
+        toggleTab(os, tab);
+    }
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "isTabOpened"
+bool GTUtilsOptionPanelMca::isTabOpened(HI::GUITestOpStatus &os, Tabs tab) {
+        GTGlobals::FindOptions options;
+        options.failIfNotFound = false;
+        QWidget *innerTabWidget = GTWidget::findWidget(os, innerWidgetNames[tab], NULL, options);
+        return NULL != innerTabWidget && innerTabWidget->isVisible();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setConsensusType"
+void GTUtilsOptionPanelMca::setConsensusType(HI::GUITestOpStatus &os, const QString &consensusTypeName) {
+    openTab(os, Consensus);
+    GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "consensusType"), consensusTypeName);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getConsensusType"
+QString GTUtilsOptionPanelMca::getConsensusType(HI::GUITestOpStatus &os) {
+    openTab(os, Consensus);
+    return GTComboBox::getCurrentText(os, GTWidget::findExactWidget<QComboBox *>(os, "consensusType"));
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getConsensusTypes"
+QStringList GTUtilsOptionPanelMca::getConsensusTypes(HI::GUITestOpStatus &os) {
+    openTab(os, Consensus);
+    QStringList types = GTComboBox::getValues(os, GTWidget::findExactWidget<QComboBox *>(os, "consensusType"));
+    return types;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getHeight"
+int GTUtilsOptionPanelMca::getHeight(HI::GUITestOpStatus &os){
+    QLabel* alignmentHeightLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "seqNumLabel"));
+    GT_CHECK_RESULT(alignmentHeightLabel != NULL, "alignmentHeightLabel not found", -1);
+    bool ok;
+    int result = alignmentHeightLabel->text().toInt(&ok);
+    GT_CHECK_RESULT(ok == true, "label text is not int", -1);
+    return result;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getLength"
+int GTUtilsOptionPanelMca::getLength(HI::GUITestOpStatus &os){
+    QLabel* alignmentLengthLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "lengthLabel"));
+    GT_CHECK_RESULT(alignmentLengthLabel != NULL, "alignmentLengthLabel not found", -1);
+    bool ok;
+    int result = alignmentLengthLabel->text().toInt(&ok);
+    GT_CHECK_RESULT(ok == true, "label text is not int", -1);
+    return result;
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setThreshold"
+void GTUtilsOptionPanelMca::setThreshold(GUITestOpStatus &os, int threshold) {
+    openTab(os, Consensus);
+    GTSlider::setValue(os, GTWidget::findExactWidget<QSlider *>(os, "thresholdSlider"), threshold);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getThreshold"
+int GTUtilsOptionPanelMca::getThreshold(GUITestOpStatus &os) {
+    openTab(os, Consensus);
+    QSlider *thresholdSlider = GTWidget::findExactWidget<QSlider *>(os, "thresholdSlider");
+    GT_CHECK_RESULT(NULL != thresholdSlider, "thresholdSlider is NULL", -1);
+    return thresholdSlider->value();
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "pushResetButton"
+void GTUtilsOptionPanelMca::pushResetButton(HI::GUITestOpStatus &os) {
+    openTab(os, Consensus);
+    QToolButton* result = GTWidget::findExactWidget<QToolButton *>(os, "thresholdResetButton");
+    result->click();
+}
+#undef GT_METHOD_NAME
+
+#undef GT_METHOD_NAME
+
+}//namespace
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.h b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.h
new file mode 100644
index 0000000..fdcaefc
--- /dev/null
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelMca.h
@@ -0,0 +1,61 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_GT_UTILS_OPTION_PANEL_MCA_H_
+#define _U2_GT_UTILS_OPTION_PANEL_MCA_H_
+
+#include <GTGlobals.h>
+
+namespace U2 {
+class GTUtilsOptionPanelMca {
+public:
+    enum Tabs {
+        General,
+        Consensus,
+    };
+
+    static const QMap<Tabs, QString> tabsNames;
+    static const QMap<Tabs, QString> innerWidgetNames;
+
+    static void toggleTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void openTab(HI::GUITestOpStatus &os, Tabs tab);
+    static void closeTab(HI::GUITestOpStatus &os, Tabs tab);
+    static bool isTabOpened(HI::GUITestOpStatus &os, Tabs tab);
+
+    static void setConsensusType(HI::GUITestOpStatus &os, const QString &consensusTypeName);
+    static QString getConsensusType(HI::GUITestOpStatus &os);
+    static QStringList getConsensusTypes(HI::GUITestOpStatus &os);
+
+    static int getHeight(HI::GUITestOpStatus &os);
+    static int getLength(HI::GUITestOpStatus &os);
+
+    static void setThreshold(HI::GUITestOpStatus &os, int threshold);
+    static int getThreshold(HI::GUITestOpStatus &os);
+
+    static void pushResetButton(HI::GUITestOpStatus &os);
+
+private:
+    static QMap<Tabs, QString> initNames();
+    static QMap<Tabs, QString> initInnerWidgetNames();
+};
+}
+
+#endif // _U2_GT_UTILS_OPTION_PANEL_MCA_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
index 7ef4c68..1902e9d 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,21 +25,23 @@
 #include <QTextEdit>
 #include <QTreeWidget>
 
-#include <U2Core/global.h>
-#include "GTUtilsMdi.h"
-#include "GTUtilsMsaEditorSequenceArea.h"
-#include "GTUtilsOptionPanelSequenceView.h"
-#include "GTUtilsTaskTreeView.h"
+#include <drivers/GTKeyboardDriver.h>
 #include <primitives/GTCheckBox.h>
-#include "system/GTClipboard.h"
 #include <primitives/GTComboBox.h>
-#include <drivers/GTKeyboardDriver.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTTableView.h>
 #include <primitives/GTTextEdit.h>
-#include "utils/GTThread.h"
 #include <primitives/GTWidget.h>
+#include <system/GTClipboard.h>
+#include <utils/GTThread.h>
+
+#include <U2Core/U2SafePoints.h>
+
+#include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditorSequenceArea.h"
+#include "GTUtilsOptionPanelSequenceView.h"
+#include "GTUtilsTaskTreeView.h"
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
index d709ccc..f8b0401 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionPanelSequenceView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
index 4b3af49..fd691cd 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,15 +32,9 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/U2OpStatus.h>
 #include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QMainWindow>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QApplication>
+#include <QMainWindow>
+#include <QTreeWidget>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
index d61a684..7b2b935 100644
--- a/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
+++ b/src/plugins/GUITestBase/src/GTUtilsOptionsPanel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
index c9a2cb3..1fa5aac 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsPcr.h b/src/plugins/GUITestBase/src/GTUtilsPcr.h
index f9d07b8..546e83a 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPcr.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPcr.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
index c31dcbe..755c085 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPhyTree.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,14 +23,17 @@
 
 #include <QGraphicsItem>
 
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <utils/GTThread.h>
+
+#include <U2Core/U2SafePoints.h>
+
 #include <U2View/GraphicsButtonItem.h>
 #include <U2View/GraphicsRectangularBranchItem.h>
 
 #include "GTUtilsMdi.h"
 #include "GTUtilsPhyTree.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTWidget.h>
-#include <utils/GTThread.h>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsPhyTree.h b/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
index ef071e0..96cd784 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPhyTree.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
index e34e339..4ed5e35 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
index 59f13e6..a7765ca 100644
--- a/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
+++ b/src/plugins/GUITestBase/src/GTUtilsPrimerLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsProject.cpp b/src/plugins/GUITestBase/src/GTUtilsProject.cpp
index d7755d9..1bbddda 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProject.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsProject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -125,12 +125,19 @@ void GTUtilsProject::openFilesWithDialog(HI::GUITestOpStatus &os, const QList<QU
 }
 
 #define GT_METHOD_NAME "openFileExpectSequence"
-ADVSingleSequenceWidget * GTUtilsProject::openFileExpectSequence(HI::GUITestOpStatus &os,
-                                                                const QString &path,
+ADVSingleSequenceWidget *GTUtilsProject::openFileExpectSequence(HI::GUITestOpStatus &os,
+                                                                const QString &dirPath,
                                                                 const QString &fileName,
-                                                                const QString &seqName)
-{
-    GTFileDialog::openFile(os, path, fileName);
+                                                                const QString &seqName) {
+    return openFileExpectSequence(os, dirPath + "/" + fileName, seqName);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "openFileExpectSequence"
+ADVSingleSequenceWidget *GTUtilsProject::openFileExpectSequence(GUITestOpStatus &os,
+                                                                const QString &filePath,
+                                                                const QString &seqName) {
+    GTFileDialog::openFile(os, filePath);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GT_CHECK_OP_RESULT(os, "Error opening file!", NULL);
 
@@ -153,18 +160,23 @@ ADVSingleSequenceWidget * GTUtilsProject::openFileExpectSequence(HI::GUITestOpSt
 }
 #undef GT_METHOD_NAME
 
-
 #define GT_METHOD_NAME "openFileExpectRawSequence"
-ADVSingleSequenceWidget * GTUtilsProject::openFileExpectRawSequence(HI::GUITestOpStatus &os,
-                                                                 const QString &path,
+ADVSingleSequenceWidget *GTUtilsProject::openFileExpectRawSequence(HI::GUITestOpStatus &os,
+                                                                 const QString &dirPath,
                                                                  const QString &fileName,
-                                                                 const QString &seqName)
-{
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    return openFileExpectSequence(os, path, fileName, seqName);
+                                                                 const QString &seqName) {
+    return openFileExpectRawSequence(os, dirPath + "/" + fileName, seqName);
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "openFileExpectRawSequence"
+ADVSingleSequenceWidget *GTUtilsProject::openFileExpectRawSequence(GUITestOpStatus &os,
+                                                                   const QString &filePath,
+                                                                   const QString &seqName) {
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+    return openFileExpectSequence(os, filePath, seqName);
+}
+#undef GT_METHOD_NAME
 
 #define GT_METHOD_NAME "openFileExpectSequences"
 QList<ADVSingleSequenceWidget*> GTUtilsProject::openFileExpectSequences(HI::GUITestOpStatus &os,
diff --git a/src/plugins/GUITestBase/src/GTUtilsProject.h b/src/plugins/GUITestBase/src/GTUtilsProject.h
index a8f4025..f6cd798 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProject.h
+++ b/src/plugins/GUITestBase/src/GTUtilsProject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -63,8 +63,13 @@ public:
      * Verifies that the sequence name is @seqName.
      * Returns the sequence widget.
      */
-    static ADVSingleSequenceWidget * openFileExpectSequence(HI::GUITestOpStatus &os, const QString &path, const QString &fileName,
-        const QString &seqName);
+    static ADVSingleSequenceWidget *openFileExpectSequence(HI::GUITestOpStatus &os,
+                                                            const QString &dirPath,
+                                                            const QString &fileName,
+                                                            const QString &seqName);
+    static ADVSingleSequenceWidget *openFileExpectSequence(HI::GUITestOpStatus &os,
+                                                            const QString &filePath,
+                                                            const QString &seqName);
 
      /**
      * Opens file @path\@fileName and expects a sequence with raw alphabet to be opened.
@@ -72,8 +77,14 @@ public:
      * Verifies that the sequence name is @seqName.
      * Returns the sequence widget.
      */
-    static ADVSingleSequenceWidget * openFileExpectRawSequence(HI::GUITestOpStatus &os, const QString &path, const QString &fileName,
-        const QString &seqName);
+    static ADVSingleSequenceWidget *openFileExpectRawSequence(HI::GUITestOpStatus &os,
+                                                              const QString &dirPath,
+                                                              const QString &fileName,
+                                                              const QString &seqName);
+
+    static ADVSingleSequenceWidget *openFileExpectRawSequence(HI::GUITestOpStatus &os,
+                                                              const QString &filePath,
+                                                              const QString &seqName);
 
     /**
      * Opens file @path\@fileName.
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
index 05963ee..3e44c05 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -197,7 +197,10 @@ void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString &itemN
     GT_CHECK(itemIndex.isValid(), "Item index is invalid");
     getTreeView(os)->scrollTo(itemIndex);
 
-    GTMouseDriver::moveTo(getItemCenter(os, itemIndex));
+    QPoint p = getItemCenter(os, itemIndex); // clicking on the center does not select the item (Linux)
+    p.setX(p.x() + 1);
+    p.setY(p.y() + 5);
+    GTMouseDriver::moveTo(p);
     GTMouseDriver::click(button);
 }
 #undef GT_METHOD_NAME
@@ -215,6 +218,18 @@ void GTUtilsProjectTreeView::click(HI::GUITestOpStatus &os, const QString& itemN
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "callContextMenu"
+void GTUtilsProjectTreeView::callContextMenu(GUITestOpStatus &os, const QString &itemName) {
+    click(os, itemName, Qt::RightButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "getTreeWidget"
+void GTUtilsProjectTreeView::callContextMenu(GUITestOpStatus &os, const QString &itemName, const QString &parentName) {
+    click(os, itemName, parentName, Qt::RightButton);
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "getTreeWidget"
 QTreeView* GTUtilsProjectTreeView::getTreeView(HI::GUITestOpStatus &os) {
 
@@ -268,6 +283,16 @@ QModelIndex GTUtilsProjectTreeView::findIndex(HI::GUITestOpStatus &os, QTreeView
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "findIndex"
+QModelIndex GTUtilsProjectTreeView::findIndex(GUITestOpStatus &os, const QStringList &itemPath, const GTGlobals::FindOptions &options) {
+    QModelIndex item;
+    foreach (const QString &itemName, itemPath) {
+        item = findIndex(os, itemName, item, options);
+    }
+    return item;
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "findIndecies"
 QModelIndexList GTUtilsProjectTreeView::findIndecies(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex &parent, int parentDepth, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
@@ -419,6 +444,13 @@ void GTUtilsProjectTreeView::checkFilteredGroup(HI::GUITestOpStatus &os, const Q
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "ensureFilteringIsDisabled"
+void GTUtilsProjectTreeView::ensureFilteringIsDisabled(GUITestOpStatus &os) {
+    openView(os);
+    GTLineEdit::checkText(os, "nameFilterEdit", NULL, "");
+}
+#undef GT_METHOD_NAME
+
 #define GT_METHOD_NAME "checkItem"
 bool GTUtilsProjectTreeView::checkItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions &options) {
     QTreeView *treeView = getTreeView(os);
@@ -557,14 +589,25 @@ bool GTUtilsProjectTreeView::isVisible( HI::GUITestOpStatus &os ){
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "dragAndDrop"
 void GTUtilsProjectTreeView::dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, const QModelIndex &to) {
     sendDragAndDrop(os, getItemCenter(os, from), getItemCenter(os, to));
 }
+#undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "dragAndDrop"
 void GTUtilsProjectTreeView::dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, QWidget *to) {
     sendDragAndDrop(os, getItemCenter(os, from), to);
 }
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "dragAndDrop"
+void GTUtilsProjectTreeView::dragAndDrop(GUITestOpStatus &os, const QStringList &from, QWidget *to) {
+    dragAndDrop(os, findIndex(os, from), to);
+}
+#undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "isVisible"
 void GTUtilsProjectTreeView::dragAndDropSeveralElements(HI::GUITestOpStatus &os, QModelIndexList from, QModelIndex to) {
     QTreeView *treeView = getTreeView(os);
 
@@ -581,6 +624,7 @@ void GTUtilsProjectTreeView::dragAndDropSeveralElements(HI::GUITestOpStatus &os,
 
     sendDragAndDrop(os, enterPos, dropPos);
 }
+#undef GT_METHOD_NAME
 
 void GTUtilsProjectTreeView::sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, const QPoint &dropPos) {
     GTMouseDriver::dragAndDrop(enterPos, dropPos);
@@ -603,6 +647,26 @@ void GTUtilsProjectTreeView::markSequenceAsCircular(HI::GUITestOpStatus &os, con
 }
 #undef GT_METHOD_NAME
 
+#define GT_METHOD_NAME "getDocuments"
+QMap<QString, QStringList> GTUtilsProjectTreeView::getDocuments(GUITestOpStatus &os) {
+    ensureFilteringIsDisabled(os);
+    GTGlobals::FindOptions options(false, Qt::MatchContains, 1);
+    const QModelIndexList documentsItems = findIndecies(os, "", QModelIndex(), 0, options);
+
+    QMap<QString, QStringList> documents;
+    foreach (const QModelIndex &documentItem, documentsItems) {
+        const QModelIndexList objectsItems = findIndecies(os, "", documentItem, 0, options);
+        QStringList objects;
+        foreach (const QModelIndex &objectItem, objectsItems) {
+            objects << objectItem.data().toString();
+        }
+        documents.insert(documentItem.data().toString(), objects);
+    }
+
+    return documents;
+}
+#undef GT_METHOD_NAME
+
 #undef GT_CLASS_NAME
 
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
index 1d4eca9..457c413 100644
--- a/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsProjectTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,11 +58,15 @@ public:
     static void click(HI::GUITestOpStatus &os, const QString& itemName, Qt::MouseButton button = Qt::LeftButton);
     static void click(HI::GUITestOpStatus &os, const QString& itemName, const QString &parentName, Qt::MouseButton button = Qt::LeftButton);
 
+    static void callContextMenu(HI::GUITestOpStatus &os, const QString &itemName);
+    static void callContextMenu(HI::GUITestOpStatus &os, const QString &itemName, const QString &parentName);
+
     static QTreeView* getTreeView(HI::GUITestOpStatus &os);
     static QModelIndex findIndex(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
     static QModelIndex findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
     static QModelIndex findIndex(HI::GUITestOpStatus &os, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
     static QModelIndex findIndex(HI::GUITestOpStatus &os, QTreeView *treeView, const QString &itemName, const QModelIndex& parent, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
+    static QModelIndex findIndex(HI::GUITestOpStatus &os, const QStringList &itemPath, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
     static QModelIndexList findIndecies(HI::GUITestOpStatus &os,
                                         const QString &itemName,
                                         const QModelIndex &parent = QModelIndex(),
@@ -80,6 +84,7 @@ public:
     static QModelIndexList findFilteredIndexes(HI::GUITestOpStatus &os, const QString &substring, const QModelIndex &parentIndex = QModelIndex());
     static void checkFilteredGroup(HI::GUITestOpStatus &os, const QString &groupName, const QStringList &namesToCheck, const QStringList &alternativeNamesToCheck,
         const QStringList &excludedNames);
+    static void ensureFilteringIsDisabled(HI::GUITestOpStatus &os);
 
     // returns true if the item exists, does not set error unlike findIndex method
     static bool checkItem(HI::GUITestOpStatus &os, const QString &itemName, const GTGlobals::FindOptions& options = GTGlobals::FindOptions());
@@ -105,21 +110,23 @@ public:
 
     static void dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, const QModelIndex &to);
     static void dragAndDrop(HI::GUITestOpStatus &os, const QModelIndex &from, QWidget* to);
+    static void dragAndDrop(HI::GUITestOpStatus &os, const QStringList &from, QWidget* to);
     static void dragAndDropSeveralElements(HI::GUITestOpStatus &os, QModelIndexList from, QModelIndex to);
 
     static void expandProjectView(HI::GUITestOpStatus &os);
 
     static void markSequenceAsCircular(HI::GUITestOpStatus &os, const QString &sequenceObjectName);
 
+    // Get all documents names with their object names (database connections are processed incorrectly)
+    static QMap<QString, QStringList> getDocuments(HI::GUITestOpStatus &os);
+
     static const QString widgetName;
 
 private:
     static void sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, const QPoint &dropPos);
     static void sendDragAndDrop(HI::GUITestOpStatus &os, const QPoint &enterPos, QWidget* dropWidget);
-
-
 };
 
-} // namespace
+}   // namespace U2
 
 #endif
diff --git a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
index 5d732ce..171b1c0 100644
--- a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,15 +30,9 @@
 #include "GTUtilsMdi.h"
 
 #include <U2View/MSAEditor.h>
-#if (QT_VERSION < 0x050000) //Qt 5
 #include <QTreeWidget>
 #include <QGraphicsItem>
 #include <QGraphicsView>
-#else
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QGraphicsView>
-#endif
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
index 8e4678e..4bdb3a9 100644
--- a/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
+++ b/src/plugins/GUITestBase/src/GTUtilsQueryDesigner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
index c6d75bb..9446899 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSequenceView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QClipboard>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QPlainTextEdit>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QPlainTextEdit>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QClipboard>
+#include <QApplication>
+#include <QPushButton>
+#include <QPlainTextEdit>
+#include <QDialogButtonBox>
+#include <QMainWindow>
 
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/U1AnnotationUtils.h>
@@ -404,9 +395,6 @@ void GTUtilsSequenceView::clickAnnotationDet(HI::GUITestOpStatus &os, QString na
     GT_CHECK(anns.size() == 1, QString("Several annotation with name %1 and startPos %2. Number is: %3").arg(name).arg(startpos).arg(anns.size()));
 
     Annotation* a = anns.first();
-    int center = a->getLocation().data()->regions.first().center();
-    goToPosition(os, center);
-    GTGlobals::sleep();
 
     const SharedAnnotationData &aData = a->getData();
     AnnotationSettingsRegistry *asr = AppContext::getAnnotationsSettingsRegistry();
@@ -416,6 +404,12 @@ void GTUtilsSequenceView::clickAnnotationDet(HI::GUITestOpStatus &os, QString na
     const U2Region &vr = seq->getDetView()->getVisibleRange();
     const U2Region &r = a->getLocation().data()->regions.first();
 
+    if (!r.intersects(vr)) {
+        int center = r.center();
+        goToPosition(os, center);
+        GTGlobals::sleep();
+    }
+
     const U2Region visibleLocation = r.intersect(vr);
 
     U2Region y;
diff --git a/src/plugins/GUITestBase/src/GTUtilsSequenceView.h b/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
index 102c444..d929509 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsSequenceView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
index 43a34a5..230209f 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
index 61c939f..f003c03 100644
--- a/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
+++ b/src/plugins/GUITestBase/src/GTUtilsSharedDatabaseDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GUI_SHARED_DATABASE_DOCUMENT_UTILS_H_
 #define _U2_GUI_SHARED_DATABASE_DOCUMENT_UTILS_H_
 
-#include <QtCore/QModelIndex>
+#include <QModelIndex>
 
 #include "GTGlobals.h"
 
diff --git a/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp b/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
index 0d45a29..99075e9 100644
--- a/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsStartPage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsStartPage.h b/src/plugins/GUITestBase/src/GTUtilsStartPage.h
index 5bc35d0..ec2a4ee 100644
--- a/src/plugins/GUITestBase/src/GTUtilsStartPage.h
+++ b/src/plugins/GUITestBase/src/GTUtilsStartPage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsTask.cpp b/src/plugins/GUITestBase/src/GTUtilsTask.cpp
index 37305d3..79662cc 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTask.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsTask.h b/src/plugins/GUITestBase/src/GTUtilsTask.h
index 2a5c5cc..5678969 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTask.h
+++ b/src/plugins/GUITestBase/src/GTUtilsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
index d4e8597..95e6584 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,13 +30,9 @@
 #include <U2Core/Task.h>
 #include <U2Gui/MainWindow.h>
 #include <U2Core/AppContext.h>
-#include <QtCore/QTimer>
+#include <QTimer>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
index 1f4db04..629afaa 100644
--- a/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
+++ b/src/plugins/GUITestBase/src/GTUtilsTaskTreeView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/GTUtilsWizard.cpp b/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
index 6e358a7..ad40dff 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsWizard.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-
 #include <QApplication>
+#include <QDir>
+#include <QFileInfo>
 #include <QLabel>
 #include <QScrollArea>
 #include <QToolButton>
 #include <QWizard>
 
+#include <base_dialogs/GTFileDialog.h>
 #include <primitives/GTComboBox.h>
 #include <primitives/GTDoubleSpinBox.h>
-#include <base_dialogs/GTFileDialog.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTTabWidget.h>
@@ -37,6 +38,8 @@
 #include "GTUtilsWizard.h"
 
 namespace U2 {
+using namespace HI;
+
 QMap<QString, GTUtilsWizard::WizardButton> GTUtilsWizard::initButtonMap(){
    QMap<QString, WizardButton> result;
    result.insert("&Next >", Next);
@@ -53,28 +56,33 @@ const QMap<QString, GTUtilsWizard::WizardButton> GTUtilsWizard::buttonMap = GTUt
 #define GT_CLASS_NAME "GTUtilsWizard"
 
 #define GT_METHOD_NAME "setInputFiles"
-void GTUtilsWizard::setInputFiles(HI::GUITestOpStatus &os, QList<QStringList> inputFiles){
+void GTUtilsWizard::setInputFiles(HI::GUITestOpStatus &os, const QList<QStringList> &inputFiles){
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "wizard not found");
     int i = 0;
-    foreach (QStringList datasetFiles, inputFiles) {
+    foreach (const QStringList &datasetFiles, inputFiles) {
         QTabWidget* tabWidget = dialog->findChild<QTabWidget*>();
         GT_CHECK(tabWidget != NULL, "tabWidget not found");
         GTTabWidget::setCurrentIndex(os, tabWidget, i);
-        foreach (QString s, datasetFiles) {
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, s));
-            QList<QWidget*> adds = dialog->findChildren<QWidget*>("addFileButton");
+
+        QMap<QString, QStringList> dir2files;
+        foreach (const QString &datasetFile, datasetFiles) {
+            const QFileInfo fileInfo(datasetFile);
+            dir2files[fileInfo.absoluteDir().path()] << fileInfo.fileName();
+        }
+
+        foreach (const QString &dir, dir2files.keys()) {
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, dir, dir2files[dir]));
+            QList<QWidget*> adds = dialog->findChildren<QWidget *>("addFileButton");
             foreach (QWidget* add, adds) {
-                if(add->isVisible()){
+                if (add->isVisible()) {
                     GTWidget::click(os, add);
                     break;
                 }
             }
-            //GTWidget::click(os, GTWidget::findWidget(os, "addFileButton", dialog));
         }
+
         i++;
-        //QTabWidget* tabWidget = GTWidget::
-        //GTWidget::getAllWidgetsInfo(os, dialog);
     }
 }
 #undef GT_METHOD_NAME
@@ -234,4 +242,4 @@ QString GTUtilsWizard::getPageTitle(HI::GUITestOpStatus &os){
 
 #undef GT_CLASS_NAME
 
-}
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/GTUtilsWizard.h b/src/plugins/GUITestBase/src/GTUtilsWizard.h
index 73c0cfc..2567d96 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWizard.h
+++ b/src/plugins/GUITestBase/src/GTUtilsWizard.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,37 +19,38 @@
  * MA 02110-1301, USA.
  */
 
+#ifndef _U2_GT_UTILS_WIZARD_H_
+#define _U2_GT_UTILS_WIZARD_H_
 
-#ifndef GTUTILSWIZARD_H
-#define GTUTILSWIZARD_H
+#include <utils/GTUtilsDialog.h>
 
-#include "utils/GTUtilsDialog.h"
-//class QVariant;
 namespace U2 {
-using namespace HI;
 
-class GTUtilsWizard{
+class GTUtilsWizard {
 public:
-    enum WizardButton{Next, Back, Apply, Run, Cancel, Defaults, Setup};
-    static void setInputFiles(HI::GUITestOpStatus &os, QList<QStringList >  list);
+    enum WizardButton {
+        Next,
+        Back,
+        Apply,
+        Run,
+        Cancel,
+        Defaults,
+        Setup
+    };
+
+    static void setInputFiles(HI::GUITestOpStatus &os, const QList<QStringList> &list);
     static void setAllParameters(HI::GUITestOpStatus &os, QMap<QString, QVariant> map);
     static void setParameter(HI::GUITestOpStatus &os, QString parName, QVariant parValue);
     static QVariant getParameter(HI::GUITestOpStatus &os, QString parName);
     static void setValue(HI::GUITestOpStatus &os, QWidget* w, QVariant value);
     static void clickButton(HI::GUITestOpStatus &os, WizardButton button);
     static QString getPageTitle(HI::GUITestOpStatus &os);
+
 private:
     static const QMap<QString, WizardButton> buttonMap;
     static QMap<QString, WizardButton> initButtonMap();
 };
 
-class TuxedoWizardFiller: public Filler{
-public:
-    TuxedoWizardFiller(HI::GUITestOpStatus &os):Filler(os, "Tuxedo Wizard"){}
-    TuxedoWizardFiller(HI::GUITestOpStatus &os, CustomScenario* c):Filler(os, "Tuxedo Wizard", c){}
-    void commonScenario();
-};
-
-}
+}   // namespace U2
 
-#endif // GTUTILSWIZARD_H
+#endif // _U2_GT_UTILS_WIZARD_H_
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
index 2f1f461..0f270a6 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <QApplication>
 #include <QDialogButtonBox>
+#include <QFileInfo>
 #include <QGraphicsView>
 #include <QListWidget>
 #include <QMainWindow>
@@ -51,6 +52,7 @@
 #include <utils/GTThread.h>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2View/MSAEditor.h>
 
@@ -938,6 +940,10 @@ void GTUtilsWorkflowDesigner::setCellValue(HI::GUITestOpStatus &os, QWidget* par
 #endif
         break;
     }
+    case customDialogSelector: {
+        GTWidget::click(os, GTWidget::findButtonByText(os, "...", parent));
+        break;
+    }
     }
     GTGlobals::sleep(200);
 }
diff --git a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
index fbe13b6..8202855 100644
--- a/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
+++ b/src/plugins/GUITestBase/src/GTUtilsWorkflowDesigner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,16 @@ class WorkflowBusItem;
 class GTUtilsWorkflowDesigner {
 public:
     enum tab {algoriths,samples};
-    enum valueType { spinValue, doubleSpinValue, comboValue, textValue, ComboChecks, comboWithFileSelector, lineEditWithFileSelector };
+    enum valueType {
+        spinValue,
+        doubleSpinValue,
+        comboValue,
+        textValue,
+        ComboChecks,
+        comboWithFileSelector,
+        lineEditWithFileSelector,
+        customDialogSelector
+    };
 
     //returns algoriths or samples
     static tab currentTab(HI::GUITestOpStatus &os);
diff --git a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
index 9178905..b7c2f59 100644
--- a/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
+++ b/src/plugins/GUITestBase/src/GUITestBasePlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,9 @@
 #include <U2Gui/ToolsMenu.h>
 
 #include "GUITestBasePlugin.h"
-#include "tests/GUIInitialChecks.h"
+#include "tests/PosteriorActions.h"
+#include "tests/PosteriorChecks.h"
+#include "tests/PreliminaryActions.h"
 #include "tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h"
 #include "tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h"
 #include "tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h"
@@ -43,6 +45,7 @@
 #include "tests/common_scenarios/cloning/GTTestsCloning.h"
 #include "tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h"
 #include "tests/common_scenarios/dp_view/GTTestsDpView.h"
+#include "tests/common_scenarios/mca_editor/GTTestsMcaEditor.h"
 #include "tests/common_scenarios/msa_editor/GTTestsMsaEditor.h"
 #include "tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h"
 #include "tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h"
@@ -55,6 +58,7 @@
 #include "tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h"
 #include "tests/common_scenarios/pcr/GTTestsInSilicoPcr.h"
 #include "tests/common_scenarios/pcr/GTTestsPrimerLibrary.h"
+#include "tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.h"
 #include "tests/common_scenarios/project/GTTestsProject.h"
 #include "tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h"
 #include "tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h"
@@ -68,6 +72,7 @@
 #include "tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h"
 #include "tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h"
 #include "tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h"
+#include "tests/common_scenarios/sanger/GTTestsSanger.h"
 #include "tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h"
 #include "tests/common_scenarios/sequence_view/GTTestsSequenceView.h"
 #include "tests/common_scenarios/shared_database/GTTestsSharedDatabase.h"
@@ -79,7 +84,7 @@
 #include "tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h"
 #include "tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h"
 #include "tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h"
-#include "tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h"
+#include "tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.h"
 #include "tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h"
 #include "tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h"
 #include "tests/crazy_user/GUICrazyUserTest.h"
@@ -144,7 +149,7 @@ GUITestBasePlugin::GUITestBasePlugin() : Plugin(tr("GUITestBase"), tr("GUI Test
     UGUITestBase *guiTestBase = AppContext::getGUITestBase();
 
     registerTests(guiTestBase);
-    registerAdditionalChecks(guiTestBase);
+    registerAdditionalActions(guiTestBase);
 
     openGUITestRunnerAction = new QAction(tr("GUI Test runner"), this);
     openGUITestRunnerAction->setObjectName("GUI_TEST_RUNNER");
@@ -526,7 +531,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1658);
     REGISTER_TEST(GUITest_regression_scenarios::test_1660);
     REGISTER_TEST(GUITest_regression_scenarios::test_1661);
-    REGISTER_TEST_LABEL(GUITest_regression_scenarios::test_1662, "mem");
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1662);
     REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1664);
     REGISTER_TEST(GUITest_regression_scenarios::test_1668);
     REGISTER_TEST(GUITest_regression_scenarios::test_1672);
@@ -591,7 +596,8 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_1919);
     REGISTER_TEST(GUITest_regression_scenarios::test_1921);
     REGISTER_TEST(GUITest_regression_scenarios::test_1924);
-    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1946);
+    //REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_regression_scenarios::test_1946);
+    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_1946, "Not finished. Requires large data.");
     REGISTER_TEST(GUITest_regression_scenarios::test_1984);
     REGISTER_TEST(GUITest_regression_scenarios::test_1986);
 
@@ -878,7 +884,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3279);
     REGISTER_TEST(GUITest_regression_scenarios::test_3283);
     REGISTER_TEST(GUITest_regression_scenarios::test_3287);
-    REGISTER_TEST(GUITest_regression_scenarios::test_3288);
+    REGISTER_TEST_WITH_TIMEOUT(GUITest_regression_scenarios::test_3288, 420000);
     REGISTER_TEST(GUITest_regression_scenarios::test_3305);
     REGISTER_TEST(GUITest_regression_scenarios::test_3306);
     REGISTER_TEST(GUITest_regression_scenarios::test_3307);
@@ -886,6 +892,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3312);
     REGISTER_TEST(GUITest_regression_scenarios::test_3313);
     REGISTER_TEST(GUITest_regression_scenarios::test_3318);
+    REGISTER_TEST(GUITest_regression_scenarios::test_3319);
     REGISTER_TEST(GUITest_regression_scenarios::test_3321);
     REGISTER_TEST(GUITest_regression_scenarios::test_3328);
     REGISTER_TEST(GUITest_regression_scenarios::test_3332);
@@ -957,7 +964,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_3634);
     REGISTER_TEST(GUITest_regression_scenarios::test_3639);
     REGISTER_TEST(GUITest_regression_scenarios::test_3640);
-    REGISTER_TEST_IGNORED(GUITest_regression_scenarios::test_3645, "UGENE-3645");
+    REGISTER_TEST(GUITest_regression_scenarios::test_3645);
     REGISTER_TEST(GUITest_regression_scenarios::test_3649);
     REGISTER_TEST(GUITest_regression_scenarios::test_3656);
     REGISTER_TEST(GUITest_regression_scenarios::test_3658);
@@ -1155,6 +1162,9 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4588);
     REGISTER_TEST(GUITest_regression_scenarios::test_4588_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4588_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4591);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4591_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4591_2);
 
     REGISTER_TEST(GUITest_regression_scenarios::test_4606);
     REGISTER_TEST(GUITest_regression_scenarios::test_4620);
@@ -1164,6 +1174,9 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_4674);
     REGISTER_TEST(GUITest_regression_scenarios::test_4674_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4674_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4682);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4682_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_4682_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_4687);
     REGISTER_TEST(GUITest_regression_scenarios::test_4689_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_4689_2);
@@ -1268,10 +1281,12 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_5199);
 
     REGISTER_TEST(GUITest_regression_scenarios::test_5208);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5211);
     REGISTER_TEST(GUITest_regression_scenarios::test_5216);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5227);
     REGISTER_TEST(GUITest_regression_scenarios::test_5246);
     REGISTER_TEST(GUITest_regression_scenarios::test_5249);
-    REGISTER_TEST(GUITest_regression_scenarios::test_5227);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5252);
     REGISTER_TEST(GUITest_regression_scenarios::test_5268);
     REGISTER_TEST(GUITest_regression_scenarios::test_5278);
     REGISTER_TEST(GUITest_regression_scenarios::test_5295);
@@ -1280,15 +1295,71 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_regression_scenarios::test_5346);
     REGISTER_TEST(GUITest_regression_scenarios::test_5352);
     REGISTER_TEST(GUITest_regression_scenarios::test_5356);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5314);
     REGISTER_TEST(GUITest_regression_scenarios::test_5360);
     REGISTER_TEST(GUITest_regression_scenarios::test_5363_1);
     REGISTER_TEST(GUITest_regression_scenarios::test_5363_2);
     REGISTER_TEST(GUITest_regression_scenarios::test_5367);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5371);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5377);
 
     REGISTER_TEST(GUITest_regression_scenarios::test_5412);
-
     REGISTER_TEST(GUITest_regression_scenarios::test_5417);
     REGISTER_TEST(GUITest_regression_scenarios::test_5425);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5447_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5447_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5447_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5469);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5492);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5495);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5499);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5517);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5520_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5520_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5562_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5562_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5562_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5588);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5594_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5594_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5594_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5594_4);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5622);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5636);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5637);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5659);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5681);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5714_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5714_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5714_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5716);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5718);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5739);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5747);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5751);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5752);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5753);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5755);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5758);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5761);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5762);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5769_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5769_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5786_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5786_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5786_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5798_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5798_2);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5798_3);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5798_4);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5798_5);
+
+    REGISTER_TEST(GUITest_regression_scenarios::test_5815);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5818_1);
+    REGISTER_TEST(GUITest_regression_scenarios::test_5818_2);
 
     //////////////////////////////////////////////////////////////////////////
     // Common scenarios/project/
@@ -1328,7 +1399,6 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_project::test_0041);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0042);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0043);
-    REGISTER_TEST(GUITest_common_scenarios_project::test_0044);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0045);
     REGISTER_TEST(GUITest_common_scenarios_project::test_0046);
     REGISTER_TEST_IGNORED(GUITest_common_scenarios_project::test_0047, "UGENE-5042");
@@ -1421,6 +1491,19 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_project_filtering::test_0014);
 
     //////////////////////////////////////////////////////////////////////////
+    // Common scenarios/sanger/
+    //////////////////////////////////////////////////////////////////////////
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0001);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0002);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0003);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0004);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0005_1);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0005_2);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0005_3);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0005_4);
+    REGISTER_TEST(GUITest_common_scenarios_sanger::test_0006);
+
+    //////////////////////////////////////////////////////////////////////////
     // Common scenarios/Sequence view/
     //////////////////////////////////////////////////////////////////////////
     REGISTER_TEST(GUITest_common_scenarios_sequence_view::test_0002);
@@ -1538,12 +1621,12 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0002);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0003);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0004);
-    REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0005);
-    REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0006);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0007);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0008);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0009);
     REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0010);
+    REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0011);
+    REGISTER_TEST(GUITest_common_scenarios_project_remote_request::test_0012);
 
     //////////////////////////////////////////////////////////////////////////
     // Common scenarios/toggle view/
@@ -1693,8 +1776,6 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0011_2);
 
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0012);
-    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0012_1);
-    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0012_2);
 
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0013);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0013_1);
@@ -1713,8 +1794,6 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0017_2);
 
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0018);
-    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0018_1);
-    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0018_2);
 
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0019);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0019_1);
@@ -1832,7 +1911,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0064);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0065);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0066);
-    REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0068);
+    //REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0068); removed as obsolete
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0069);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0070);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0071);
@@ -1851,8 +1930,8 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0082);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_0083);
 
-
     REGISTER_TEST(GUITest_common_scenarios_msa_editor::test_fake);
+
     /////////////////////////////////////////////////////////////////////////
     // Common align sequences to an alignment
     /////////////////////////////////////////////////////////////////////////
@@ -1866,14 +1945,21 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0008);
     REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0009);
     REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0010);
+    REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0011);
+    REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0012);
+    REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0013);
+    REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0014);
+    REGISTER_TEST(GUITest_common_scenarios_align_sequences_to_msa::test_0015);
+
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/msa_editor/colors
     /////////////////////////////////////////////////////////////////////////
-
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0001);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0002);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0003);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0004);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0006);
+    REGISTER_TEST(GUITest_common_scenarios_msa_editor_colors::test_0007);
 
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/msa_editor/consensus
@@ -1991,6 +2077,64 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0020);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0021);
     REGISTER_TEST(GUITest_common_scenarios_msa_editor_overview::test_0022);
+    /////////////////////////////////////////////////////////////////////////
+    // Common scenarios/mca_editor
+    /////////////////////////////////////////////////////////////////////////
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0001);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0002);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0003);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0004);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0005);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0006);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0007);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0008);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0009);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0010);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0011);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0012_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0012_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0013_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0013_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0013_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0014);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0015_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0015_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0016_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0016_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0017_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0017_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0018_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0018_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0019);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0021);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0022_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0022_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0022_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0023_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0023_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0023_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0024_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0024_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0024_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0025_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0025_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0025_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0026_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0026_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0026_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0027_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0027_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0027_3);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0028);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0029);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0030);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0033);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0034);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0038);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0039);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0040_1);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0040_2);
+    REGISTER_TEST(GUITest_common_scenarios_mca_editor::test_0040_3);
     //////////////////////////////////////////////////////////////////////////
     // Common scenarios/document_from_text/
     //////////////////////////////////////////////////////////////////////////
@@ -2178,6 +2322,8 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_create_annotation_widget::test_0041);
     REGISTER_TEST(GUITest_common_scenarios_create_annotation_widget::test_0042);
     REGISTER_TEST(GUITest_common_scenarios_create_annotation_widget::test_0043);
+    REGISTER_TEST(GUITest_common_scenarios_create_annotation_widget::test_0044);
+    REGISTER_TEST(GUITest_common_scenarios_create_annotation_widget::test_0045);
 
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/annotations/edit
@@ -2466,23 +2612,24 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/Workflow designer
     /////////////////////////////////////////////////////////////////////////
-    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0002)//,"no such scheme on windows");
-        REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0002_1)//,"no such scheme on windows");
-        REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0003);
-    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0005)//,"no such scheme on windows");
-        REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0006);//"no such scheme on windows, https://ugene.net/tracker/browse/UGENE-2738 on mac");
-    REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0006_1);//"no such scheme on windows, https://ugene.net/tracker/browse/UGENE-2738 on mac");
-    REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0007);//"no such scheme on windows, https://ugene.net/tracker/browse/UGENE-2738 on mac");
-    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0009)//*,"no such scheme on windows");
-        REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0010)//,"no such scheme on windows");
-        REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0013);
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0002)
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0002_1)
+    REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0003);
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0005)
+    REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0006);
+    REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0006_1);
+    REGISTER_TEST_ONLY_LINUX(GUITest_common_scenarios_workflow_designer::test_0007);
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0009)
+    REGISTER_TEST_NOT_FOR_WINDOWS(GUITest_common_scenarios_workflow_designer::test_0010)
+    REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0013);
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0015);
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0017);
-    //REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0018);
+
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0058);
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0059);
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0060);
     REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0061);
+    REGISTER_TEST(GUITest_common_scenarios_workflow_designer::test_0062);
 
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/Workflow designer/Workflow parameters validation
@@ -2516,6 +2663,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/NIAID_pipelines
     /////////////////////////////////////////////////////////////////////////
+    REGISTER_TEST(GUITest_common_scenarios_NIAID_pipelines::test_0001);
     REGISTER_TEST(GUITest_common_scenarios_NIAID_pipelines::test_0002);
     /////////////////////////////////////////////////////////////////////////
     // Common scenarios/Tree viewer
@@ -2734,7 +2882,7 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0014);
     REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0015);
     REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0016);
-
+    REGISTER_TEST(GUITest_common_scenarios_in_silico_pcr::test_0017);
     /////////////////////////////////////////////////////////////////////////
     // common_scenarios/pcr/primer_library
     /////////////////////////////////////////////////////////////////////////
@@ -2756,6 +2904,16 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_primer_library::test_0016);
 
     /////////////////////////////////////////////////////////////////////////
+    // common_scenarios/phyml
+    /////////////////////////////////////////////////////////////////////////
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0001);
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0002);
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0003);
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0004);
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0005);
+    REGISTER_TEST(GUITest_common_scenarios_phyml::test_0006);
+
+    /////////////////////////////////////////////////////////////////////////
     // common_scenarios/start_page
     /////////////////////////////////////////////////////////////////////////
     REGISTER_TEST(GUITest_common_scenarios_start_page::test_0001);
@@ -2766,24 +2924,23 @@ void GUITestBasePlugin::registerTests(UGUITestBase *guiTestBase) {
     REGISTER_TEST(GUITest_common_scenarios_start_page::test_0008);
 }
 
-void GUITestBasePlugin::registerAdditionalChecks(UGUITestBase *guiTestBase) {
+void GUITestBasePlugin::registerAdditionalActions(UGUITestBase *guiTestBase) {
     if (guiTestBase) {
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0000, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0001, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0002, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0003, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0004, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0005, UGUITestBase::PreAdditional);
-        guiTestBase->registerTest(new GUITest_initial_checks::pre_action_0006, UGUITestBase::PreAdditional);
-
-        guiTestBase->registerTest(new GUITest_initial_checks::post_check_0000, UGUITestBase::PostAdditionalChecks);
-        //guiTestBase->registerTest(new GUITest_initial_checks::post_check_0001, UGUITestBase::PostAdditionalChecks);
-        //temporary ignored. Causes problems on mac
-
-        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0000, UGUITestBase::PostAdditionalActions);
-        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0001, UGUITestBase::PostAdditionalActions);
-        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0002, UGUITestBase::PostAdditionalActions);
-        guiTestBase->registerTest(new GUITest_initial_checks::post_action_0003, UGUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0000, UGUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0001, UGUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0002, UGUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0003, UGUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0004, UGUITestBase::PreAdditional);
+        guiTestBase->registerTest(new GUITest_preliminary_actions::pre_action_0005, UGUITestBase::PreAdditional);
+
+        guiTestBase->registerTest(new GUITest_posterior_checks::post_check_0000, UGUITestBase::PostAdditionalChecks);
+        guiTestBase->registerTest(new GUITest_posterior_checks::post_check_0001, UGUITestBase::PostAdditionalChecks);
+
+        guiTestBase->registerTest(new GUITest_posterior_actions::post_action_0000, UGUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_posterior_actions::post_action_0001, UGUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_posterior_actions::post_action_0002, UGUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_posterior_actions::post_action_0003, UGUITestBase::PostAdditionalActions);
+        guiTestBase->registerTest(new GUITest_posterior_actions::post_action_0004, UGUITestBase::PostAdditionalActions);
     }
 }
 
diff --git a/src/plugins/GUITestBase/src/GUITestBasePlugin.h b/src/plugins/GUITestBase/src/GUITestBasePlugin.h
index c7f0a63..794324c 100644
--- a/src/plugins/GUITestBase/src/GUITestBasePlugin.h
+++ b/src/plugins/GUITestBase/src/GUITestBasePlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,7 @@ private slots:
     void sl_showWindow();
 private:
     void registerTests(UGUITestBase *guiTestBase);
-    void registerAdditionalChecks(UGUITestBase *guiTestBase);
+    void registerAdditionalActions(UGUITestBase *guiTestBase);
 
     QAction*        openGUITestRunnerAction;
     GUITestRunner*  view;
diff --git a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
index 1009aed..5566c77 100644
--- a/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
+++ b/src/plugins/GUITestBase/src/api/GTBaseCompleter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 #include <primitives/GTTreeWidget.h>
 #include <drivers/GTMouseDriver.h>
diff --git a/src/plugins/GUITestBase/src/api/GTBaseCompleter.h b/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
index d5fce62..dff7f82 100644
--- a/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
+++ b/src/plugins/GUITestBase/src/api/GTBaseCompleter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp b/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
index f207237..42d499b 100644
--- a/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
+++ b/src/plugins/GUITestBase/src/api/GTGraphicsItem.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,12 +20,7 @@
  */
 
 #include "api/GTGraphicsItem.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsView>
-#else
-#include <QtWidgets/QGraphicsView>
-#endif
-
+#include <QGraphicsView>
 
 namespace U2 {
 #define GT_CLASS_NAME "GTGraphicsItem"
diff --git a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h b/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
index 598886a..91e4f89 100644
--- a/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
+++ b/src/plugins/GUITestBase/src/api/GTGraphicsItem.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <U2Core/U2OpStatus.h>
 #include "GTGlobals.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <QGraphicsItem>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
index f26592c..fb7ba8c 100644
--- a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
+++ b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
index 0b7f6c0..7c2d26a 100644
--- a/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
+++ b/src/plugins/GUITestBase/src/api/GTMSAEditorStatusWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_GT_MSAEDITOR_STATUSWIDGET_H_
 
 #include "GTGlobals.h"
-#include <U2View/MSAEditorStatusBar.h>
+#include <U2View/MaEditorStatusBar.h>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp b/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
index 662eb59..a732ac3 100644
--- a/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
+++ b/src/plugins/GUITestBase/src/api/GTRegionSelector.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/api/GTRegionSelector.h b/src/plugins/GUITestBase/src/api/GTRegionSelector.h
index d84db07..865385d 100644
--- a/src/plugins/GUITestBase/src/api/GTRegionSelector.h
+++ b/src/plugins/GUITestBase/src/api/GTRegionSelector.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.cpp b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.cpp
index cdbb073..55f50e7 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.cpp
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
index 9f24d3b..88b70e0 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define GTSEQUENCEREADINGMODEDIALOG_H
 
 #include <U2Core/U2OpStatus.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QDialogButtonBox>
 
 #include <QString>
 #include "GTGlobals.h"
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
index c0445fb..c9223df 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,19 +26,11 @@
 #include <drivers/GTKeyboardDriver.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTWidget.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QWidget>
+#include <QApplication>
+#include <QWidget>
 #include <QCheckBox>
 #include <QLineEdit>
 #include <QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QPushButton>
-#endif
 #include <primitives/GTRadioButton.h>
 
 #define SEPARATE_MODE "separateMode"
diff --git a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
index f3c7752..1859852 100644
--- a/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
+++ b/src/plugins/GUITestBase/src/api/GTSequenceReadingModeDialogUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include "utils/GTUtilsDialog.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QSpinBox>
-#endif
+#include <QSpinBox>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
index 0d0c883..53023ed 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
+++ b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
index 17fd0f3..fc934b9 100644
--- a/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
+++ b/src/plugins/GUITestBase/src/runnables/qt/EscapeClicker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
index e6aae83..8351a2a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 #include <drivers/GTKeyboardDriver.h>
 #include <primitives/GTLineEdit.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
index 7c48023..9f98876 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddFolderDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
index f7c6c78..36af11b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
index d2269c2..ccb8f4d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
index 09ae178..77fa967 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
index 6f58632..2de94d0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
index e7324c6..72b7e1a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,23 +32,13 @@
 
 #include <U2Core/Log.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QListWidget>
-#include <QtGui/QToolButton>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QAbstractButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QAbstractButton>
-#endif
+#include <QApplication>
+#include <QListWidget>
+#include <QToolButton>
+#include <QTreeWidget>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QAbstractButton>
 
 #include <QTextBrowser>
 
@@ -62,7 +52,7 @@ QMap<AppSettingsDialogFiller::Tabs, QString> AppSettingsDialogFiller::initMap(){
         result.insert(Resourses, "  Resources");
         result.insert(Network, "  Network");
         result.insert(FileFormat, "  File Format");
-        result.insert(Directories, "  Directories");
+        result.insert(Directories, "  Folders");
         result.insert(Logging, "  Logging");
         result.insert(AlignmentColorScheme, "  Alignment Color Scheme");
         result.insert(GenomeAligner, "  Genome Aligner");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
index 6d4f769..9f3b34f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
index 58e5a9c..9770df9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.cpp
@@ -4,19 +4,11 @@
 #include <primitives/GTComboBox.h>
 #include <primitives/GTWidget.h>
 #include <primitives/GTLineEdit.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QLineEdit>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QLineEdit>
+#include <QComboBox>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
index 0a909f8..c771e42 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
index 5773d18..750b976 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 #include <U2Gui/ImportOptionsWidget.h>
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
index f6c09eb..b310c47 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CommonImportOptionsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
index e9128a8..0a3e3f3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,15 +21,9 @@
 
 #include "ConvertAssemblyToSAMDialogFiller.h"
 #include <primitives/GTWidget.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
index 439ea2a..ff2ddb3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ConvertAssemblyToSAMDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
index 560526e..36769bc 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
index 61ff6fd..4e13a21 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
index 58ec160..c452e38 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -54,7 +54,7 @@ Filler(_os, "CreateDocumentFromTextDialog"), customSettings(_customSettings), al
     QString __documentLocation = QDir::cleanPath(QDir::currentPath() + "/" + _documentLocation);
     documentLocation = QDir::toNativeSeparators(__documentLocation);
     comboBoxItems[FASTA] = "FASTA";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxAlphabetItems[StandardDNA] = "Standard DNA";
     comboBoxAlphabetItems[StandardRNA] = "Standard RNA";
     comboBoxAlphabetItems[ExtendedDNA] = "Extended DNA";
@@ -156,7 +156,7 @@ Filler(_os, "CreateDocumentFromTextDialog"), customSettings(_customSettings), al
     QString __documentLocation = QDir::cleanPath(QDir::currentPath() + "/" + _documentLocation);
     documentLocation = __documentLocation;
     comboBoxItems[FASTA] = "FASTA";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxAlphabetItems[StandardDNA] = "Standard DNA";
     comboBoxAlphabetItems[StandardRNA] = "Standard RNA";
     comboBoxAlphabetItems[ExtendedDNA] = "Extended DNA";
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
index cd78a1e..c9277ac 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateDocumentFromTextDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
index 1d43095..3c1e6cb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
index 036f690..a03e1a4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
index dc8dab4..26b085e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
index f69cad0..5792b3a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/CreateRulerDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
index abb4e38..3e955ff 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
+#include <QDir>
+#include <QFileInfo>
 
 #include "DownloadRemoteFileDialogFiller.h"
 #include <primitives/GTCheckBox.h>
@@ -31,19 +31,11 @@
 #include <primitives/GTWidget.h>
 #include <U2Core/U2SafePoints.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QListWidget>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QListWidget>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QListWidget>
+#include <QPushButton>
 
 namespace U2 {
 
@@ -131,7 +123,7 @@ void DownloadRemoteFileDialogFiller::setDatabase(const QVariant &actionData) {
 #define GT_METHOD_NAME "enterSaveToDirectoryPath"
 void DownloadRemoteFileDialogFiller::enterSaveToDirectoryPath(const QVariant &actionData) {
     CHECK_OP(os, );
-    GT_CHECK(actionData.canConvert<QString>(), "Can't get directory path from the action data");
+    GT_CHECK(actionData.canConvert<QString>(), "Can't get folder path from the action data");
     GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "saveFilenameLineEdit", dialog), actionData.toString());
 }
 #undef GT_METHOD_NAME
@@ -139,7 +131,7 @@ void DownloadRemoteFileDialogFiller::enterSaveToDirectoryPath(const QVariant &ac
 #define GT_METHOD_NAME "selectSaveToDirectoryPath"
 void DownloadRemoteFileDialogFiller::selectSaveToDirectoryPath(const QVariant &actionData) {
     CHECK_OP(os, );
-    GT_CHECK(actionData.canConvert<QString>(), "Can't get directory path from the action data");
+    GT_CHECK(actionData.canConvert<QString>(), "Can't get folder path from the action data");
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, QFileInfo(actionData.toString()).absoluteDir().absolutePath(), "", GTFileDialogUtils::Choose));
     GTWidget::click(os, GTWidget::findWidget(os, "saveFilenameToolButton", dialog));
 }
@@ -268,6 +260,11 @@ void RemoteDBDialogFillerDeprecated::commonScenario() {
         QComboBox* formatBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "formatBox"));
         GTComboBox::setCurrentIndex(os, formatBox, outFormatVal, true, useMethod);
     }
+    if (!addToProject){
+        QCheckBox *addToProjectButton = dialog->findChild<QCheckBox*>(QString::fromUtf8("chbAddToProjectCheck"));
+        GT_CHECK(addToProjectButton != NULL, "Check box not found");
+        GTCheckBox::setChecked(os, addToProjectButton, false);
+    }
     if (pressCancel) {
         QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
         GT_CHECK(box != NULL, "buttonBox is NULL");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
index bb38f32..a22de1e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -76,11 +76,12 @@ private:
 // Use DownloadRemoteFileDialogFiller instead
 class RemoteDBDialogFillerDeprecated : public Filler {
 public:
-    RemoteDBDialogFillerDeprecated(HI::GUITestOpStatus &_os, const QString _resID, int _DBItemNum, bool forceGetSequence = true, bool _pressCancel = false, const QString _saveDirPath = QString(),
+    RemoteDBDialogFillerDeprecated(HI::GUITestOpStatus &_os, const QString _resID, int _DBItemNum, bool addToProject = true, bool forceGetSequence = true, bool _pressCancel = false, const QString _saveDirPath = QString(),
                          GTGlobals::UseMethod _useMethod = GTGlobals::UseMouse, int _outFormatVal = -1)
         :Filler(_os, "DownloadRemoteFileDialog"),
           resID(_resID),
           DBItemNum(_DBItemNum),
+          addToProject(addToProject),
           forceGetSequence(forceGetSequence),
           pressCancel(_pressCancel),
           saveDirPath(_saveDirPath),
@@ -90,6 +91,7 @@ public:
 private:
     QString resID;
     int DBItemNum;
+    bool addToProject;
     bool forceGetSequence;
     bool pressCancel;
     QString saveDirPath;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
index 56ccb2f..fa77ad9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
index c2e77bb..1e38e86 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
index 6e2324f..0a69b7e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditConnectionDialogFiller.cpp
@@ -1,13 +1,6 @@
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QGroupBox>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QApplication>
+#include <QGroupBox>
+#include <QComboBox>
 
 #include "GTDatabaseConfig.h"
 #include "primitives/GTAction.h"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
index 81177f1..1037348 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,18 +27,11 @@
 #include <primitives/GTCheckBox.h>
 #include <drivers/GTKeyboardDriver.h>
 #include "utils/GTKeyboardUtils.h"
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
+#include <QToolButton>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
index c5cc097..163e573 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditGroupAnnotationsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
index 180cabf..3fba6b1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,19 +30,11 @@
 #include "utils/GTKeyboardUtils.h"
 #include <base_dialogs/MessageBoxFiller.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QToolButton>
-#endif
-
+#include <QDir>
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
+#include <QToolButton>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
index 10dd679..ebc05c1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditQualifierDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
index dbb9241..24d8bb9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -54,7 +54,7 @@ InsertSequenceFiller::InsertSequenceFiller(HI::GUITestOpStatus &_os, const QStri
     }
     documentLocation = QDir::toNativeSeparators(documentLocation);
     comboBoxItems[FASTA] = "FASTA";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     mergeAnnotations = _mergeAnnotations;
 }
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
index 41294a1..060b353 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/EditSequenceDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
index 3609731..4e22325 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,16 +25,10 @@
 #include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
index f9eb63a..0660d3d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
index d2e38ec..e73b5e9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,16 +25,10 @@
 #include <primitives/GTComboBox.h>
 #include <primitives/GTCheckBox.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
@@ -55,7 +49,7 @@ path(_path), name(_name), useMethod(method), format(_format), compressFile(compr
         path = QDir::toNativeSeparators(__path);
     }
 
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxItems[GFF] = "GFF";
     comboBoxItems[CLUSTALW] = "CLUSTALW";
     comboBoxItems[BAM] = "BAM";
@@ -64,6 +58,7 @@ path(_path), name(_name), useMethod(method), format(_format), compressFile(compr
     comboBoxItems[NWK] = "Newick Standard";
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[VectorNTI] = "Vector NTI sequence";
+    comboBoxItems[UGENEDB] = "UGENE Database";
 }
 
 #define GT_METHOD_NAME "commonScenario"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
index 4980726..ece1d30 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@ using namespace HI;
 
     class ExportDocumentDialogFiller : public Filler {
     public:
-        enum FormatToUse {Genbank, GFF, CLUSTALW, BAM, VCF, TEXT, NWK, FASTA, VectorNTI};
+        enum FormatToUse { Genbank, GFF, CLUSTALW, BAM, VCF, TEXT, NWK, FASTA, VectorNTI, UGENEDB };
         ExportDocumentDialogFiller(HI::GUITestOpStatus &_os, const QString &_path = "", const QString &_name = "",
             ExportDocumentDialogFiller::FormatToUse _format = ExportDocumentDialogFiller::Genbank, bool compressFile = false,
                                  bool addToProject = false, GTGlobals::UseMethod method = GTGlobals::UseMouse);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
index d5e55d1..271315c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -224,13 +224,13 @@ void SelectSubalignmentFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
-    QSpinBox* startPosBox = dialog->findChild<QSpinBox*>("startPosBox");
-    GT_CHECK(startPosBox != NULL, "startPosBox is NULL");
-    GTSpinBox::setValue(os, startPosBox, msaRegion.region.startPos, GTGlobals::UseKeyBoard);
+    QSpinBox* startLineEdit = dialog->findChild<QSpinBox*>("startLineEdit");
+    GT_CHECK(startLineEdit != NULL, "startLineEdit is NULL");
+    GTSpinBox::setValue(os, startLineEdit, msaRegion.region.startPos, GTGlobals::UseKeyBoard);
 
-    QSpinBox* endPosBox = dialog->findChild<QSpinBox*>("endPosBox");
-    GT_CHECK(endPosBox != NULL, "endPoxBox is NULL");
-    GTSpinBox::setValue(os, endPosBox, msaRegion.region.endPos(), GTGlobals::UseKeyBoard);
+    QSpinBox* endLineEdit = dialog->findChild<QSpinBox*>("endLineEdit");
+    GT_CHECK(endLineEdit != NULL, "endPoxBox is NULL");
+    GTSpinBox::setValue(os, endLineEdit, msaRegion.region.endPos(), GTGlobals::UseKeyBoard);
 
     QWidget *noneButton = dialog->findChild<QWidget*>("noneButton");
     GT_CHECK(noneButton!=NULL, "noneButton is NULL");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
index 381ba65..b7f8fd9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
index 83c5f99..eb529a7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
index 885c31c..449612d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
index ecc3ffe..f01fb5a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,21 +24,12 @@
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTTabWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QCheckBox>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QSpinBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QCheckBox>
+#include <QDialogButtonBox>
+#include <QSpinBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
index f09232f..27e56eb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
index 711b779..24759d8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,17 +24,10 @@
 #include <primitives/GTTabWidget.h>
 #include <primitives/GTLineEdit.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QAbstractButton>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
index cca308b..2513c38 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
index 0b882c3..add316e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
index 7305a4f..ad3cce5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphLabelsSelectDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
index 4b238cf..0086997 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
index 7636a1e..77ce989 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.cpp
new file mode 100644
index 0000000..647fd51
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.cpp
@@ -0,0 +1,82 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
+
+#include <QApplication>
+
+#include "ImportACEFileDialogFiller.h"
+
+namespace U2 {
+
+#define GT_CLASS_NAME "GTUtilsDialog::ImportBAMFileFiller"
+#define GT_METHOD_NAME "run"
+ImportACEFileFiller::ImportACEFileFiller(HI::GUITestOpStatus &os,
+                                         bool _isReadOnly,
+                                         QString dstUrl,
+                                         QString srcUrl,
+                                         int timeoutMs) :
+    Filler(os, "Select Document Format"),
+    isReadOnly(_isReadOnly),
+    sourceUrl(srcUrl),
+    destinationUrl(dstUrl) {
+    settings.timeout = timeoutMs;
+}
+
+ImportACEFileFiller::ImportACEFileFiller(HI::GUITestOpStatus &os, CustomScenario* _c)
+  : Filler(os, "Select Document Format", _c) {
+    settings.timeout = 120000;
+}
+
+void ImportACEFileFiller::commonScenario() {
+    GTGlobals::sleep(500);
+    QWidget* dialog = QApplication::activeModalWidget();
+    GT_CHECK(dialog, "activeModalWidget is NULL");
+
+    if (isReadOnly) {
+        QRadioButton* rb = GTWidget::findExactWidget<QRadioButton*>(os, "0_radio", dialog);
+        CHECK_SET_ERR(rb != NULL, "Radio Button not found");
+        GTRadioButton::click(os, rb);
+        GTGlobals::sleep();
+    } else {
+        QRadioButton* rb = GTWidget::findExactWidget<QRadioButton*>(os, "1_radio", dialog);
+        CHECK_SET_ERR(rb != NULL, "Radio Button not found");
+        GTRadioButton::click(os, rb);
+        GTGlobals::sleep();
+
+        if (!sourceUrl.isEmpty()) {
+            GTLineEdit::setText(os, "sourseLineEdit", sourceUrl, QApplication::activeModalWidget());
+        }
+
+        if (!destinationUrl.isEmpty()) {
+            GTLineEdit::setText(os, "fileNameEdit", destinationUrl, QApplication::activeModalWidget(), dialog);
+        }
+    }
+
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+}
+
+#undef GT_METHOD_NAME
+#undef GT_CLASS_NAME
+
+}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h
new file mode 100644
index 0000000..48341d7
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GT_RUNNABLES_IMPORT_ACE_FILE_DIALOG_FILLER_H_
+#define _U2_GT_RUNNABLES_IMPORT_ACE_FILE_DIALOG_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+
+namespace U2 {
+using namespace HI;
+
+class ImportACEFileFiller : public Filler {
+public:
+    ImportACEFileFiller(HI::GUITestOpStatus &os,
+                     bool isReadOnly,
+                     QString dstUrl = QString(),
+                     QString r = QString(),
+                     int timeoutMs = 120000);
+    ImportACEFileFiller(HI::GUITestOpStatus &os, CustomScenario *_c);
+
+    virtual void commonScenario();
+
+private:
+    bool isReadOnly;
+    const QString sourceUrl;
+    const QString destinationUrl;
+};
+
+}   // namespace U2
+
+#endif // _U2_GT_RUNNABLES_IMPORT_ACE_FILE_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.cpp
new file mode 100644
index 0000000..4ff54ba
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.cpp
@@ -0,0 +1,85 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
+
+#include <QApplication>
+
+#include "ImportAPRFileDialogFiller.h"
+
+namespace U2 {
+
+#define GT_CLASS_NAME "GTUtilsDialog::ImportBAMFileFiller"
+#define GT_METHOD_NAME "run"
+ImportAPRFileFiller::ImportAPRFileFiller(HI::GUITestOpStatus &os,
+                                   bool _isReadOnly,
+                                   QString dstUrl,
+                                   QString formatToConvertTo,
+                                   int timeoutMs) :
+    Filler(os, "Select Document Format"),
+    isReadOnly(_isReadOnly),
+    destinationUrl(dstUrl),
+    format(formatToConvertTo) {
+    settings.timeout = timeoutMs;
+}
+
+ImportAPRFileFiller::ImportAPRFileFiller(HI::GUITestOpStatus &os, CustomScenario* _c)
+  : Filler(os, "Select Document Format", _c) {
+    settings.timeout = 120000;
+}
+
+void ImportAPRFileFiller::commonScenario() {
+    GTGlobals::sleep(500);
+    QWidget* dialog = QApplication::activeModalWidget();
+    GT_CHECK(dialog, "activeModalWidget is NULL");
+
+    if (isReadOnly) {
+        QRadioButton* rb = GTWidget::findExactWidget<QRadioButton*>(os, "0_radio", dialog);
+        CHECK_SET_ERR(rb != NULL, "Radio Button not found");
+        GTRadioButton::click(os, rb);
+        GTGlobals::sleep();
+    } else {
+        QRadioButton* rb = GTWidget::findExactWidget<QRadioButton*>(os, "1_radio", dialog);
+        CHECK_SET_ERR(rb != NULL, "Radio Button not found");
+        GTRadioButton::click(os, rb);
+        GTGlobals::sleep();
+
+        if (!destinationUrl.isEmpty()) {
+            GTLineEdit::setText(os, "fileNameEdit", destinationUrl, QApplication::activeModalWidget());
+        }
+
+        if (!format.isEmpty()) {
+            QComboBox* cb = GTWidget::findExactWidget<QComboBox *>(os, "formatCombo", dialog);
+            CHECK_SET_ERR(cb != NULL, "Radio Button not found");
+            GTComboBox::setIndexWithText(os, cb, format);
+        }
+    }
+
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+}
+
+#undef GT_METHOD_NAME
+#undef GT_CLASS_NAME
+
+}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.h
new file mode 100644
index 0000000..025faa0
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GT_RUNNABLES_IMPORT_APR_FILE_DIALOG_FILLER_H_
+#define _U2_GT_RUNNABLES_IMPORT_APR_FILE_DIALOG_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+
+namespace U2 {
+using namespace HI;
+
+class ImportAPRFileFiller : public Filler {
+public:
+    ImportAPRFileFiller(HI::GUITestOpStatus &os,
+                     bool isReadOnly,
+                     QString dstUrl = QString(),
+                     QString formatToConvertTo = "fasta",
+                     int timeoutMs = 120000);
+    ImportAPRFileFiller(HI::GUITestOpStatus &os, CustomScenario *_c);
+
+    virtual void commonScenario();
+
+private:
+    bool isReadOnly;
+    const QString destinationUrl;
+    const QString format;
+};
+
+}   // namespace U2
+
+#endif // _U2_GT_RUNNABLES_IMPORT_APR_FILE_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
index 52e59ba..7c5d59f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,15 +26,9 @@
 #include <primitives/GTLineEdit.h>
 #include <base_dialogs/GTFileDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
@@ -61,7 +55,6 @@ ImportBAMFileFiller::ImportBAMFileFiller(HI::GUITestOpStatus &os, CustomScenario
 }
 
 void ImportBAMFileFiller::commonScenario() {
-
     GTGlobals::sleep(500);
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
index 942018c..2dbbf37 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
index 2443509..51b9619 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QCheckBox>
-#include <QtGui/QLineEdit>
-#include <QtGui/QRadioButton>
-#include <QtGui/QSpinBox>
-#else
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QSpinBox>
-#endif
+#include <QCheckBox>
+#include <QLineEdit>
+#include <QRadioButton>
+#include <QSpinBox>
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
index bdd968f..51d0394 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportOptionsWidgetFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_IMPORT_OPTIONS_WIDGET_FILLER_H_
 #define _U2_IMPORT_OPTIONS_WIDGET_FILLER_H_
 
-#include <QtCore/QVariantMap>
+#include <QVariantMap>
 #include <GTGlobals.h>
 
 namespace U2 {
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
index 1d1e355..e68ed36 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QHeaderView>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QDir>
+#include <QFileInfo>
+
+#include <QApplication>
+#include <QHeaderView>
+#include <QTreeWidget>
 
 #include "ImportToDatabaseDialogFiller.h"
 #include <base_dialogs/GTFileDialog.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
index a78d605..f85e8ce 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_IMPORT_TO_DATABASE_DIALOG_FILLER_H_
 #define _U2_IMPORT_TO_DATABASE_DIALOG_FILLER_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include "utils/GTUtilsDialog.h"
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
index b69a773..c459823 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 #include <U2Gui/ImportOptionsWidget.h>
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
index b7cfc4b..1d3634c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ItemToImportEditDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
index 1882809..3af929b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 #include <primitives/GTWidget.h>
 #include <drivers/GTKeyboardDriver.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QPushButton>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
index 40e4de5..db03ed4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
index 3b852c3..755ad7b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
index 3ab19ac..c9fd00b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
index 66c1939..df68801 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,17 +26,10 @@
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QTreeWidget>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
index ebcc410..c5487d4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
index 388adae..a7c6e4c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,17 +24,10 @@
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTRadioButton.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QToolButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
@@ -49,9 +42,10 @@ SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOp
     length = 0;
     len = _len;
     multipleRange = QString();
+    circular = false;
 }
 
-SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os) : Filler(_os, "RangeSelectionDialog")
+SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, CustomScenario* scenario) : Filler(_os, "RangeSelectionDialog", scenario)
 {
     rangeType = Single;
     selectAll = true;
@@ -61,6 +55,7 @@ SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOp
     length = 0;
     len = NULL;
     multipleRange = QString();
+    circular = false;
 }
 
 SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _minVal, int _maxVal) : Filler(_os, "RangeSelectionDialog")
@@ -73,6 +68,7 @@ SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOp
     length = 0;
     len = NULL;
     multipleRange = QString();
+    circular = false;
 }
 
 SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, const QString &range) : Filler(_os, "RangeSelectionDialog")
@@ -85,6 +81,7 @@ SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOp
     length = 0;
     len = NULL;
     multipleRange = range;
+    circular = false;
 }
 
 SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin) : Filler(_os, "RangeSelectionDialog")
@@ -97,8 +94,14 @@ SelectSequenceRegionDialogFiller::SelectSequenceRegionDialogFiller(HI::GUITestOp
     length = _length;
     len = NULL;
     multipleRange = QString();
+    circular = false;
 }
 
+void SelectSequenceRegionDialogFiller::setCircular(bool v) {
+    circular = v;
+}
+
+
 #define GT_METHOD_NAME "commonScenario"
 void SelectSequenceRegionDialogFiller::commonScenario()
 {
@@ -123,7 +126,7 @@ void SelectSequenceRegionDialogFiller::commonScenario()
             *len = endEdit->text().toInt();
         }
     } else if (rangeType == Single) {
-        GT_CHECK(minVal <= maxVal, "Value \"min\" greater then \"max\"");
+        GT_CHECK(circular || minVal <= maxVal, "Value \"min\" greater then \"max\"");
 
         QLineEdit *startEdit = dialog->findChild<QLineEdit*>("startEdit");
         QLineEdit *endEdit = dialog->findChild<QLineEdit*>("endEdit");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
index 82e7e1a..8ec0ab2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,17 +31,19 @@ using namespace HI;
     public:
         enum RangeType {Single, Multiple};
         SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int *_len);
-        SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os);
+        SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, CustomScenario* scenario = NULL);
         SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _minVal, int _maxVal);
         SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, const QString &range);
         SelectSequenceRegionDialogFiller(HI::GUITestOpStatus &_os, int _length, bool selectFromBegin = true);
 
         void commonScenario();
+        void setCircular(bool v);
     private:
         RangeType rangeType;
         bool selectAll, fromBegin;
         int minVal, maxVal, length, *len;
         QString multipleRange;
+        bool circular;
     };
 
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
index 65b23c5..30ed9b8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,13 +23,8 @@
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QPushButton>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
index 7dca032..27b6a88 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RangeSelectorFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
index 3123f5c..964c9dd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@ RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITe
     QString __saveToFile = QDir::cleanPath(QDir::currentPath() + "/" + _saveToFile);
     saveToFile = QDir::toNativeSeparators(__saveToFile);
     comboBoxItems[FASTA] = "FASTA";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
 }
 
 RemovePartFromSequenceDialogFiller::RemovePartFromSequenceDialogFiller(HI::GUITestOpStatus &_os, RemoveType _removeType)
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
index 1daebf2..3f658ff 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/RemovePartFromSequenceDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
index 92f5ddc..49456d5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QGroupBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QGroupBox>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QDialogButtonBox>
+#include <QGroupBox>
 
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTComboBox.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
index f41da00..542693d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/ReplaceSubsequenceDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
index a2808ed..c60b4fe 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
index 924e91a..943857e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SetSequenceOriginDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
index 96f1704..1b2f709 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QGroupBox>
-#include <QtGui/QListWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QListWidget>
-#endif
+#include <QApplication>
+#include <QComboBox>
+#include <QGroupBox>
+#include <QListWidget>
 
 #include <U2Core/U2IdTypes.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
index 4a44923..8c2142e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/SharedConnectionsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #undef DELETE
 #endif
 
-#include <QtCore/QFlags>
+#include <QFlags>
 
 #include "utils/GTUtilsDialog.h"
 #include <base_dialogs/GTFileDialog.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
index 986a031..72d6c2f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,8 @@
 #include <drivers/GTKeyboardDriver.h>
 #include <drivers/GTMouseDriver.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QPushButton>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
index 95aca0b..91f1f9a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.cpp
index 1b1ed8a..1714bce 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
index af27a2c..e4df677 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportConsensusDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.cpp
index 342fe4f..2132ad3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QFileInfo>
+#include <QDir>
+#include <QFileInfo>
 
 #include <QApplication>
 #include <QGroupBox>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
index 9cd0110..5734b2b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
index d92c4d8..aceca7d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,17 +21,10 @@
 
 #include "ExportReadsDialogFiller.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QLineEdit>
-#include <QtGui/QComboBox>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QCheckBox>
-#endif
+#include <QApplication>
+#include <QLineEdit>
+#include <QComboBox>
+#include <QCheckBox>
 
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTComboBox.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.h
index 313f787..a83c109 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExportReadsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp
index 0aded79..9af62bb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h
index 7014be6..7a2bd45 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_assembly/ExtractAssemblyRegionDialogFiller.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
index 69566b9..da50587 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -18,20 +18,13 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
+
 #include "BranchSettingsDialogFiller.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QColorDialog>
-#include <QtGui/QSpinBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QColorDialog>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QColorDialog>
+#include <QSpinBox>
+#include <QDialogButtonBox>
 
 #include <primitives/GTWidget.h>
 #include <primitives/GTSpinBox.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
index 31ae5de..280ffdc 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BranchSettingsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.cpp
index d2b776f..2a11e00 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -154,7 +154,7 @@ void BuildTreeDialogFillerPhyML::commonScenario() {
 
     if (bootstrap >= 0) {
         GTTabWidget::setCurrentIndex(os, GTWidget::findExactWidget<QTabWidget *>(os, "twSettings", dialog), 1);
-        GTCheckBox::setChecked(os, GTWidget::findExactWidget<QCheckBox *>(os, "bootstrapCheckBox"), true);
+        GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton *>(os, "bootstrapRadioButton"));
         GTSpinBox::setValue(os, GTWidget::findExactWidget<QSpinBox *>(os, "bootstrapSpinBox"), bootstrap);
     }
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
index 1c2d56e..ed8dc3d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
index 70b9df2..a175437 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,19 +24,11 @@
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTSpinBox.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QSpinBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QSpinBox>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
index 30315ba..b453cff 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.cpp
index c54354d..400a2bf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h
index ca55900..13a8948 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
index 2d63983..40725ee 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
index 7994a41..0da6c7f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.cpp
index ec350f6..34b6cfa 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,25 +28,13 @@
 #include <drivers/GTMouseDriver.h>
 #include <drivers/GTKeyboardDriver.h>
 
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QComboBox>
-#include <QtGui/QSpinBox>
-#include <QtGui/QCheckBox>
-#include <QtGui/QTableWidget>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QTableWidget>
-#include <QtWidgets/QDialogButtonBox>
-#endif
-
+#include <QApplication>
+#include <QPushButton>
+#include <QComboBox>
+#include <QSpinBox>
+#include <QCheckBox>
+#include <QTableWidget>
+#include <QDialogButtonBox>
 
 namespace U2 {
 using namespace HI;
@@ -59,15 +47,15 @@ void ExtractSelectedAsMSADialogFiller::commonScenario() {
     GT_CHECK(dialog, "activeModalWidget is NULL");
 
     if(from){
-        QSpinBox *fromSpin=dialog->findChild<QSpinBox*>("startPosBox");
+        QLineEdit *fromSpin = dialog->findChild<QLineEdit*>("startLineEdit");
         GT_CHECK(fromSpin!=NULL, "fromSpin is NULL")
-        GTSpinBox::setValue(os,fromSpin,from,GTGlobals::UseKey);
+        GTLineEdit::setText(os, fromSpin, QString::number(from));
     }
 
     if(to){
-        QSpinBox *toSpin=dialog->findChild<QSpinBox*>("endPosBox");
+        QLineEdit *toSpin = dialog->findChild<QLineEdit*>("endLineEdit");
         GT_CHECK(toSpin!=NULL, "toSpin is NULL")
-        GTSpinBox::setValue(os,toSpin,to,GTGlobals::UseKey);
+        GTLineEdit::setText(os,toSpin, QString::number(to));
     }
 
     QLineEdit *filepathEdit=dialog->findChild<QLineEdit*>("filepathEdit");
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
index 98d0ffa..368dd20 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
index 8a584b2..27c9305 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,23 +26,12 @@
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTGroupBox.h>
 
-
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QCheckBox>
-#include <QtGui/QRadioButton>
-#include <QtGui/QGroupBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QCheckBox>
+#include <QRadioButton>
+#include <QGroupBox>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
index 8fead6e..9429ab4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h
@@ -1,7 +1,7 @@
 /**
 
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
index 8c58a9c..781902f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
index 02585af..6b3717e 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
index d485dd5..b314de2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,27 +29,15 @@
 #include <primitives/GTTabWidget.h>
 #include <primitives/GTTextEdit.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QSpinBox>
-#include <QtGui/QRadioButton>
-#include <QtGui/QGroupBox>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QSpinBox>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QComboBox>
-#endif
-
-const int RESULT_INTERSECTION_FILTER_INDEX = 0;
+#include <QApplication>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QSpinBox>
+#include <QRadioButton>
+#include <QGroupBox>
+#include <QDialogButtonBox>
+#include <QComboBox>
+
 const QString TEST_NAME_FOR_MA_RESULTS = "_test]";
 const QString TEST_NAME_FOR_ANNOT_RESULTS = "test";
 const QString ANNOTATION_RESULT_FILE_NAME = "Annotations.gb";
@@ -168,7 +156,7 @@ void SmithWatermanDialogFiller::commonScenario() {
         GTComboBox::setCurrentIndex(os, comboRealization, swRealizationIndex);
 
         QComboBox * comboResultFilter = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "comboResultFilter", dialog));
-        GTComboBox::setCurrentIndex(os, comboResultFilter, RESULT_INTERSECTION_FILTER_INDEX);
+		GTComboBox::setIndexWithText(os, comboResultFilter, "filter-intersections");
 
         QSpinBox * spinScorePercent = qobject_cast<QSpinBox *>(GTWidget::findWidget(os, "spinScorePercent", dialog));
         GTSpinBox::setValue(os, spinScorePercent, RESULT_SCORE_PERCENTAGE, GTGlobals::UseKeyBoard);
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
index b29fda2..f58bae1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
index 0da8e01..c346c3a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,15 +21,9 @@
 
 #include "FindAnnotationCollocationsDialogFiller.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 #include <primitives/GTWidget.h>
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
index fd51ed1..591fe63 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/annotator/FindAnnotationCollocationsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include "utils/GTUtilsDialog.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QToolButton>
-#endif
+#include <QToolButton>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
index 36116d3..38f7c32 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-
 #include <QApplication>
 
 #include "StructuralAlignmentDialogFiller.h"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
index 30e84e3..69acdb9 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/biostruct3d_view/StructuralAlignmentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
index 2ec8177..6938ce4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
index be9ec91..c64440c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/cap3/CAP3SupportDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.cpp
index deee805..358cba5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,27 +36,54 @@ namespace U2 {
 
 #define GT_CLASS_NAME "GTUtilsDialog::ExportAnnotationsFiller"
 ExportAnnotationsFiller::ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, HI::GUITestOpStatus &os)
-: Filler(os, "U2__ExportAnnotationsDialog"), softMode(true), format(format), saveSequencesUnderAnnotations(false), saveSequenceNames(false), useMethod(GTGlobals::UseMouse)
+    : Filler(os, "U2__ExportAnnotationsDialog"),
+      softMode(true), format(format),
+      saveSequencesUnderAnnotations(false),
+      saveSequenceNames(false),
+      useMethod(GTGlobals::UseMouse)
 {
     init(exportToFile);
 }
 
 
-ExportAnnotationsFiller::ExportAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations,
-    bool _saveSequenceNames, GTGlobals::UseMethod method):
-Filler(_os, "U2__ExportAnnotationsDialog"), softMode(false), format(_format), saveSequencesUnderAnnotations(_saveSequencesUnderAnnotations), saveSequenceNames(_saveSequenceNames), useMethod(method)
+ExportAnnotationsFiller::ExportAnnotationsFiller(HI::GUITestOpStatus &_os,
+                                                 const QString &_exportToFile,
+                                                 fileFormat _format,
+                                                 bool _addToProject,
+                                                 bool _saveSequencesUnderAnnotations,
+                                                 bool _saveSequenceNames,
+                                                 GTGlobals::UseMethod method)
+    : Filler(_os, "U2__ExportAnnotationsDialog"),
+      softMode(false),
+      format(_format),
+      addToProject(_addToProject),
+      saveSequencesUnderAnnotations(_saveSequencesUnderAnnotations),
+      saveSequenceNames(_saveSequenceNames),
+      useMethod(method)
 {
     init(_exportToFile);
 }
 
+ExportAnnotationsFiller::ExportAnnotationsFiller(HI::GUITestOpStatus &os, CustomScenario *scenario)
+    : Filler(os, "U2__ExportAnnotationsDialog", scenario),
+      softMode(false),
+      format(genbank),
+      saveSequencesUnderAnnotations(false),
+      saveSequenceNames(false),
+      useMethod(GTGlobals::UseMouse)
+{
+
+}
+
 void ExportAnnotationsFiller::init(const QString &exportToFile) {
-    this->exportToFile = QDir::toNativeSeparators(QDir::cleanPath(QDir::currentPath() + "/" + exportToFile));
+    this->exportToFile = QDir::toNativeSeparators(QDir::cleanPath(exportToFile));
 
     comboBoxItems[bed] = "BED";
-    comboBoxItems[genbank] = "Genbank";
+    comboBoxItems[genbank] = "GenBank";
     comboBoxItems[gff] = "GFF";
     comboBoxItems[gtf] = "GTF";
     comboBoxItems[csv] = "CSV";
+    comboBoxItems[ugenedb] = "UGENE Database";
 }
 
 #define GT_METHOD_NAME "commonScenario"
@@ -77,6 +104,13 @@ void ExportAnnotationsFiller::commonScenario()
     if (comboBox->currentIndex() != index){
         GTComboBox::setCurrentIndex(os, comboBox, index, true, useMethod);
     }
+    if (!addToProject){
+        QCheckBox *addToProjectButton = dialog->findChild<QCheckBox*>(QString::fromUtf8("addToProjectCheck"));
+        GT_CHECK(addToProjectButton != NULL, "Check box not found");
+        if (addToProjectButton->isEnabled()) {
+            GTCheckBox::setChecked(os, addToProjectButton, false);
+        }
+    }
 
     if (!softMode) {
         QCheckBox *checkButton = dialog->findChild<QCheckBox*>(QString::fromUtf8("exportSequenceCheck"));
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
index 091b6f5..290d9c8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,25 +27,43 @@
 namespace U2 {
 using namespace HI;
 
-    class ExportAnnotationsFiller : public Filler {
-    public:
-        enum fileFormat {bed, genbank, gff, gtf, csv};
-        ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, HI::GUITestOpStatus &os);
-        ExportAnnotationsFiller(HI::GUITestOpStatus &_os, const QString &_exportToFile, fileFormat _format, bool _saveSequencesUnderAnnotations = true,
-                                bool _saveSequenceNames = true, GTGlobals::UseMethod method = GTGlobals::UseMouse);
-        void commonScenario();
-    private:
-        void init(const QString &exportToFile);
-        bool softMode;
-        QString exportToFile;
-        fileFormat format;
-        QMap<fileFormat, QString> comboBoxItems;
-        bool saveSequencesUnderAnnotations;
-        bool saveSequenceNames;
-
-        GTGlobals::UseMethod useMethod;
+class ExportAnnotationsFiller : public Filler {
+public:
+    enum fileFormat {
+        bed,
+        genbank,
+        gff,
+        gtf,
+        csv,
+        ugenedb
     };
 
+    ExportAnnotationsFiller(const QString &exportToFile, fileFormat format, HI::GUITestOpStatus &os);
+    ExportAnnotationsFiller(HI::GUITestOpStatus &_os,
+                            const QString &_exportToFile,
+                            fileFormat _format,
+                            bool _addToProject = false,
+                            bool _saveSequencesUnderAnnotations = true,
+                            bool _saveSequenceNames = true,
+                            GTGlobals::UseMethod method = GTGlobals::UseMouse);
+    ExportAnnotationsFiller(GUITestOpStatus &os, CustomScenario *scenario);
+
+    void commonScenario();
+
+private:
+    void init(const QString &exportToFile);
+
+    bool softMode;
+    QString exportToFile;
+    fileFormat format;
+    QMap<fileFormat, QString> comboBoxItems;
+    bool addToProject;
+    bool saveSequencesUnderAnnotations;
+    bool saveSequenceNames;
+
+    GTGlobals::UseMethod useMethod;
+};
+
 }
 
 #endif
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
index d8fd4fa..09fb182 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
index d391ff8..b4e1a32 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportBlastResultDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
index 038c484..40eae99 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,18 +25,11 @@
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTComboBox.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QComboBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
index 2011dbe..fac752a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
index e97d56e..a3cd2e8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,16 +26,10 @@
 #include <primitives/GTComboBox.h>
 #include <primitives/GTCheckBox.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QDir>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2 {
 
@@ -54,7 +48,7 @@ useMethod(method) {
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[FASTQ] = "FASTQ";
     comboBoxItems[GFF] = "GFF";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxItems[Swiss_Prot] = "Swiss_Prot";
 
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
index 2182c76..6e23835 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
index 2b16661..c4b1c8f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,17 +26,10 @@
 #include <primitives/GTComboBox.h>
 #include <primitives/GTCheckBox.h>
 
-#include <QtCore/QDir>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
-
+#include <QDir>
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2 {
 
@@ -54,7 +47,7 @@ ExportSelectedSequenceFromAlignment::ExportSelectedSequenceFromAlignment(HI::GUI
     comboBoxItems[FASTA] = "FASTA";
     comboBoxItems[FASTQ] = "FASTQ";
     comboBoxItems[GFF] = "GFF";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxItems[Swiss_Prot] = "Swiss_Prot";
 
 }
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
index fd4d56c..84c417c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.cpp
index 67ac785..0be78bb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
index 1d01770..c9875f1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.cpp
index 3609729..89fe944 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -126,7 +126,7 @@ ExportSequenceOfSelectedAnnotationsFiller::ExportSequenceOfSelectedAnnotationsFi
     comboBoxItems[Fasta] = "FASTA";
     comboBoxItems[Fastq] = "FASTQ";
     comboBoxItems[Gff] = "GFF";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
 
     mergeRadioButtons[SaveAsSeparate] = "separateButton";
     mergeRadioButtons[Merge] = "mergeButton";
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h
index 4133ff1..ed6fbf4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.cpp
index a4b9331..3c3c20c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -60,7 +60,7 @@ Filler(_os, "ImportAnnotationsFromCSVDialog"), fileToRead(_fileToRead), resultFi
     comboBoxItems[FPKM] = "FPKM";
     comboBoxItems[GFF] = "GFF";
     comboBoxItems[GTF] = "GTF";
-    comboBoxItems[Genbank] = "Genbank";
+    comboBoxItems[Genbank] = "GenBank";
     comboBoxItems[Swiss_Prot] = "Swiss_Prot";
 }
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
index 0dcafae..5fb677b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
index 4f85f8d..f2b806d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,15 +27,9 @@
 
 #include "GTUtilsTaskTreeView.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
index c3bf54f..2dadee8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
index 5231866..949e9b4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTCheckBox.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
index 0b89d3d..54f1938 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
index fccd01a..11aff7d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
index 99a67a1..13de83a 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
index c557455..6bf1460 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
index 6aad6a5..0185cae 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/CreateFragmentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
index da0a11e..233b191 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
index cfc8ad4..08e1cc0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
index 75bdfac..b53e966 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
index ca90303..8afdd82 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/EditFragmentDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
index 1a9dcb2..ab2663f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-
 #include <QApplication>
 #include <QCheckBox>
 #include <QTreeWidget>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
index 4656999..179aa9b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.cpp
new file mode 100644
index 0000000..f1c5700
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.cpp
@@ -0,0 +1,126 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include <QCheckBox>
+#include <QLineEdit>
+#include <QListWidget>
+#include <QSpinBox>
+
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTSpinBox.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTWidget.h>
+
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Test/UGUITest.h>
+
+#include "AlignToReferenceBlastDialogFiller.h"
+#include "GTUtilsTaskTreeView.h"
+
+namespace U2 {
+
+#define GT_CLASS_NAME "GTUtilsDialog::AlignToReferenceBlastDialogFiller"
+
+AlignToReferenceBlastDialogFiller::AlignToReferenceBlastDialogFiller(const Settings &settings, HI::GUITestOpStatus &os)
+: Filler(os, "AlignToReferenceBlastDialog"), settings(settings)
+{
+
+}
+
+AlignToReferenceBlastDialogFiller::AlignToReferenceBlastDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c)
+: Filler(os, "AlignToReferenceBlastDialog", c)
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
+void AlignToReferenceBlastDialogFiller::commonScenario() {
+    QWidget* dialog = QApplication::activeModalWidget();
+    GT_CHECK(dialog, "activeModalWidget is NULL");
+
+    setReference(os, settings.referenceUrl, dialog);
+    CHECK_OP(os, );
+
+    setReads(os, settings.readUrls, dialog);
+    CHECK_OP(os, );
+
+    QSpinBox* settingSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "minIdentitySpinBox", dialog));
+    GT_CHECK(settingSpinBox, "minIdentitySpinBox is NULL");
+    GTSpinBox::setValue(os, settingSpinBox, settings.minIdentity);
+
+    settingSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os, "qualitySpinBox", dialog));
+    GT_CHECK(settingSpinBox, "qualitySpinBox is NULL");
+    GTSpinBox::setValue(os, settingSpinBox, settings.qualityThreshold);
+
+    QCheckBox* checkBox = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "addToProjectCheckbox", dialog));
+    GT_CHECK(checkBox, "addToProjectCheckbox is NULL");
+    GTCheckBox::setChecked(os, checkBox, settings.addResultToProject);
+
+    setDestination(os, settings.outAlignment, dialog);
+    CHECK_OP(os, );
+
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setReference"
+void AlignToReferenceBlastDialogFiller::setReference(GUITestOpStatus &os, const QString &referenceUrl, QWidget *dialog) {
+    QLineEdit* reference = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "referenceLineEdit", dialog));
+    GT_CHECK(reference, "referenceLineEdit is NULL");
+    GTLineEdit::setText(os, reference, referenceUrl);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setReads"
+void AlignToReferenceBlastDialogFiller::setReads(GUITestOpStatus &os, const QStringList &readUrls, QWidget *dialog) {
+    QWidget* addReadButton = GTWidget::findWidget(os, "addReadButton");
+    GT_CHECK(addReadButton, "addReadButton is NULL");
+
+    QListWidget* readsListWidget = qobject_cast<QListWidget*>(GTWidget::findWidget(os, "readsListWidget", dialog));
+    GT_CHECK(readsListWidget, "readsListWidget is NULL");
+
+    QStringList uniqueReads;
+    foreach (const QString& read, readUrls) {
+        if (readsListWidget->findItems(read, Qt::MatchExactly).isEmpty()) {
+            uniqueReads << read;
+        }
+    }
+    CHECK(!uniqueReads.isEmpty(), );
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, uniqueReads));
+    GTWidget::click(os, addReadButton);
+}
+#undef GT_METHOD_NAME
+
+#define GT_METHOD_NAME "setDestination"
+void AlignToReferenceBlastDialogFiller::setDestination(GUITestOpStatus &os, const QString &destinationUrl, QWidget *dialog) {
+    QLineEdit* out = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "outputLineEdit", dialog));
+    GT_CHECK(out, "outputLineEdit is NULL");
+    GTLineEdit::setText(os, out, destinationUrl);
+}
+#undef GT_METHOD_NAME
+
+#undef GT_CLASS_NAME
+
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h
new file mode 100644
index 0000000..07e11a6
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h
@@ -0,0 +1,65 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_FILLER_
+#define _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_FILLER_
+
+#include "utils/GTUtilsDialog.h"
+
+namespace U2 {
+using namespace HI;
+
+/**
+ * @brief The AlignToReferenceBlastDialogFiller class
+ */
+class AlignToReferenceBlastDialogFiller : public Filler {
+public:
+    struct Settings {
+        Settings()
+            : minIdentity(80),
+              qualityThreshold(30),
+              addResultToProject(true)
+        {}
+        QString referenceUrl;
+        QStringList readUrls;
+        int minIdentity;
+        int qualityThreshold;
+        QString outAlignment;
+        bool addResultToProject;
+    };
+
+    AlignToReferenceBlastDialogFiller(const Settings &settings, HI::GUITestOpStatus &os);
+    AlignToReferenceBlastDialogFiller(HI::GUITestOpStatus &os, CustomScenario* c);
+
+    void commonScenario();
+
+    static void setReference(HI::GUITestOpStatus &os, const QString &referenceUrl, QWidget *dialog);
+    static void setReads(HI::GUITestOpStatus &os, const QStringList &readUrls, QWidget *dialog);
+    static void setDestination(HI::GUITestOpStatus &os, const QString &destinationUrl, QWidget *dialog);
+
+private:
+    Settings settings;
+};
+
+}
+
+#endif // _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_FILLER_
+
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
index 4464fab..40ae6f5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QApplication>
+#include <QComboBox>
 
 #include <U2Test/UGUITest.h>
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
index f2aae0d..4d9eb49 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
index 9b14c3b..5749572 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
index b60a812..2dd27c7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
index 0d1273c..e29eb37 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,17 +20,9 @@
  */
 
 #include <QToolButton>
-
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QGroupBox>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QApplication>
+#include <QGroupBox>
+#include <QComboBox>
 
 #include <primitives/GTWidget.h>
 #include <primitives/GTSpinBox.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
index eb4c047..330e218 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
index a4653ad..efea705 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,17 +27,10 @@
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTComboBox.h>
 #include <primitives/GTRadioButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QGroupBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QGroupBox>
+#include <QComboBox>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
index 845480b..bf45c5f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.cpp
new file mode 100644
index 0000000..773882a
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.cpp
@@ -0,0 +1,85 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SnpEffDatabaseDialogFiller.h"
+
+#include "primitives/GTLineEdit.h"
+#include "primitives/GTTableView.h"
+#include "primitives/GTWidget.h"
+
+#include <drivers/GTMouseDriver.h>
+
+#include <QApplication>
+#include <QTableView>
+
+//#include <U2
+
+namespace U2 {
+using namespace HI;
+
+SnpEffDatabaseDialogFiller::SnpEffDatabaseDialogFiller(GUITestOpStatus &os, const QString &dbName, bool dbShouldBeFound)
+    : Filler(os, "SnpEffDatabaseDialog"),
+      dbName(dbName),
+      dbShouldBeFound(dbShouldBeFound) {
+
+}
+
+#define GT_CLASS_NAME "SnpEffDatabaseDialogFiller"
+#define GT_METHOD_NAME "commonScenario"
+void SnpEffDatabaseDialogFiller::commonScenario() {
+    QWidget* dialog = QApplication::activeModalWidget();
+    GT_CHECK(dialog, "activeModalWidget is NULL");
+
+    QLineEdit* lineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "lineEdit", dialog);
+    GT_CHECK(lineEdit, "lineEdit is NULL");
+    GTLineEdit::setText(os, lineEdit, dbName, false, true);
+    GTGlobals::sleep();
+
+    QTableView* table = dynamic_cast<QTableView*>(GTWidget::findWidget(os, "tableView"));
+    GT_CHECK(table, "tableView is NULL");
+
+    QAbstractItemModel* model = table->model();
+    GT_CHECK(model, "model is NULL");
+
+    int rowCount = GTTableView::rowCount(os, table);
+    int row = -1;
+    for (int i = 0; i < rowCount; i++) {
+        QModelIndex idx = model->index(i, 0);
+        if (model->data(idx).toString() == dbName) {
+            row = i;
+            break;
+        }
+    }
+
+    if (dbShouldBeFound) {
+        GT_CHECK(row != -1, QString("Genome %1 is not found in the table").arg(dbName));
+
+        GTMouseDriver::moveTo(GTTableView::getCellPoint(os, table, row, 0));
+        GTMouseDriver::click();
+
+        GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+    } else {
+        GT_CHECK(row == -1, QString("Genome %1 is unexpectedly found").arg(dbName));
+        GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+    }
+}
+
+} // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h
new file mode 100644
index 0000000..4512969
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h
@@ -0,0 +1,42 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+
+#ifndef _U2_SNPEFF_DATABASE_DIALOG_FILLER_H_
+#define _U2_SNPEFF_DATABASE_DIALOG_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+
+namespace U2 {
+using namespace HI;
+
+class SnpEffDatabaseDialogFiller : public Filler {
+public:
+    SnpEffDatabaseDialogFiller(HI::GUITestOpStatus &os, const QString& dbName, bool dbShouldBeFound = true);
+    void commonScenario();
+
+private:
+    QString dbName;
+    bool dbShouldBeFound;
+};
+
+} // namespace U2
+#endif // _U2_SNPEFF_DATABASE_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
index 849e272..6bbb498 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
index abf6c02..4ba31fb 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
index 4c70cd7..87ffe9f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,8 @@
 
 #include "TCoffeeDailogFiller.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
 
 #include <primitives/GTWidget.h>
 #include <primitives/GTCheckBox.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
index 22e8d68..6366861 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
index 0aaef58..8d6aab8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
index 9fb72de..0b9946c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/orf_marker/OrfDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
index 9afd916..0793fcd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
index 8277925..f0caf04 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
index 693184d..b61dec5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
index ba82ce4..01d3486 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
index 392212f..b3f4b91 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
index ca3c137..89f54de 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
index 7a7d49e..4f99673 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
index 5539494..cd7876f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimerLibrarySelectorFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
index 50eb8f7..fb9138c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
index 4586a3c..3f8a4f1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/pcr/PrimersDetailsDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
index a8a999a..a8b79b1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
index 6497a06..19fe7b7 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
index a696f10..757b0e2 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
index 43be19a..e0ab338 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/weight_matrix/PwmSearchDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.cpp
index ab33216..ee27bbc 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,15 +20,9 @@
  */
 
 #include "AliasesDialogFiller.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QTableWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTableWidget>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QTableWidget>
 
 #include <primitives/GTWidget.h>
 #include <primitives/GTTableView.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
index 4b1d55d..dff29a8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp
index 0aefd1d..c7c24b1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
index f5743d0..2e5a891 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/ConfigurationWizardFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineFiller.cpp
index d8da3cd..5d0ebf0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineToolFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineToolFiller.h
index 7018d41..7a7f0d0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineToolFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithCommandLineToolFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
index af0d634..5b093aa 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
index 6ded38c..c4ba3cf 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.cpp
index ee05208..fdaccd1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
index 861112f..76ef542 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DashboardsManagerDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
index 64a926b..f2628a8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
index a7c6000..c4a64f0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DatasetNameEditDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
index 1c577ca..b806adc 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
index 0fa17cc..3f2cb3f 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/DefaultWizardFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.cpp
index fc7f5fb..56eacb1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.h
index 5ea29a0..5381ba1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/RPackageDialorFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
index 4505966..c11c163 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
index 124a030..ee0ebc8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
index f297905..b0018c3 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,23 +34,13 @@
 #include <base_dialogs/MessageBoxFiller.h>
 #include "../../src/corelibs/U2Designer/src/wizard/WDWizardPage.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QLabel>
-#include <QtGui/QRadioButton>
-#include <QtGui/QToolButton>
-#include <QtGui/QWizard>
-#include <QtGui/QScrollArea>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QWizard>
-#include <QtWidgets/QScrollArea>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QApplication>
+#include <QLabel>
+#include <QRadioButton>
+#include <QToolButton>
+#include <QWizard>
+#include <QScrollArea>
+#include <QComboBox>
 #include <QDir>
 
 #include "GTUtilsWizard.h"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
index 3fdff5b..575d806 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WizardFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 
 #include "utils/GTUtilsDialog.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QPushButton>
+#include <QToolButton>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
index 6d4e497..f34f0a1 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 #include <primitives/GTWidget.h>
 #include <primitives/GTLineEdit.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
+#include <QPushButton>
 
 namespace U2{
 #define GT_CLASS_NAME "GTUtilsDialog::StartupDialogFiller"
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
index 2b4f1db..2efc7f6 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
index e989bb7..67440ce 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,24 +19,50 @@
  * MA 02110-1301, USA.
  */
 
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTDoubleSpinBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+
 #include <QApplication>
-#include <QGroupBox>
 #include <QComboBox>
+#include <QGroupBox>
 
 #include "MAFFTSupportRunDialogFiller.h"
-#include <primitives/GTWidget.h>
-#include <primitives/GTSpinBox.h>
-#include <primitives/GTDoubleSpinBox.h>
-#include <primitives/GTCheckBox.h>
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTComboBox.h>
-#include <primitives/GTRadioButton.h>
 
 namespace U2 {
 
+MAFFTSupportRunDialogFiller::Parameters::Parameters():
+    ckeckBox_gapOpenCheckBox_checked(0),
+    doubleSpin_gapOpenSpinBox_value(1.53),
+    ckeckBox_gapExtCheckBox_checked(0),
+    doubleSpin_gapExtSpinBox_value(0),
+    ckeckBox_maxNumberIterRefinementCheckBox_checked(0),
+    spin_maxNumberIterRefinementSpinBox_value(0)
+{
+
+}
+
 #define GT_CLASS_NAME "GTUtilsDialog::MAFFTSupportRunDialogFiller"
-#define GT_METHOD_NAME "commonScenario"
 
+MAFFTSupportRunDialogFiller::MAFFTSupportRunDialogFiller(GUITestOpStatus &os, MAFFTSupportRunDialogFiller::Parameters *parameters)
+    : Filler(os, "MAFFTSupportRunDialog"),
+      parameters(parameters)
+{
+    CHECK_SET_ERR(parameters, "Invalid filler parameters: NULL pointer");
+}
+
+MAFFTSupportRunDialogFiller::MAFFTSupportRunDialogFiller(GUITestOpStatus &os, CustomScenario *scenario)
+    : Filler(os, "MAFFTSupportRunDialog", scenario),
+      parameters(NULL)
+{
+
+}
+
+#define GT_METHOD_NAME "commonScenario"
 void MAFFTSupportRunDialogFiller::commonScenario() {
     QWidget* dialog = QApplication::activeModalWidget();
     GT_CHECK(dialog, "activeModalWidget is NULL");
@@ -70,4 +96,4 @@ void MAFFTSupportRunDialogFiller::commonScenario() {
 #undef GT_METHOD_NAME
 #undef GT_CLASS_NAME
 
-}
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
index 68c6a21..3593266 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_GUI_MAFFT_SUPPORT_RUN_DIALOG_FILLER_H_
 #define _U2_GUI_MAFFT_SUPPORT_RUN_DIALOG_FILLER_H_
  
-#include "utils/GTUtilsDialog.h"
 #include <base_dialogs/GTFileDialog.h>
+#include <utils/GTUtilsDialog.h>
 
 namespace U2 {
 using namespace HI;
@@ -31,14 +31,8 @@ using namespace HI;
 class MAFFTSupportRunDialogFiller : public Filler {
 public:
     class Parameters {
-        public:
-        Parameters():
-            ckeckBox_gapOpenCheckBox_checked(0),
-            doubleSpin_gapOpenSpinBox_value(1.53),
-            ckeckBox_gapExtCheckBox_checked(0),
-            doubleSpin_gapExtSpinBox_value(0),
-            ckeckBox_maxNumberIterRefinementCheckBox_checked(0),
-            spin_maxNumberIterRefinementSpinBox_value(0){}
+    public:
+        Parameters();
 
         bool ckeckBox_gapOpenCheckBox_checked;
         double doubleSpin_gapOpenSpinBox_value;
@@ -48,23 +42,17 @@ public:
         int spin_maxNumberIterRefinementSpinBox_value;
     };
 
+    MAFFTSupportRunDialogFiller(GUITestOpStatus &os, Parameters* parameters);
+    MAFFTSupportRunDialogFiller(GUITestOpStatus &os, CustomScenario *scenario);
 
-    MAFFTSupportRunDialogFiller(HI::GUITestOpStatus &os, Parameters* parameters) :
-        Filler(os, "MAFFTSupportRunDialog"),
-        parameters(parameters) {
-            CHECK_SET_ERR(parameters, "Invalid filler parameters: NULL pointer");
-    }
-
-void commonScenario();
+    void commonScenario();
 
 private:
 
-Parameters* parameters;
+    Parameters* parameters;
 
 };
 
-}
-
-#endif
+}   // namespace U2
 
- 
+#endif // _U2_GUI_MAFFT_SUPPORT_RUN_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
index f75458d..2fe2018 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTDoubleSpinBox.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
index ce83626..a9a209b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.cpp
new file mode 100644
index 0000000..f0eb4e4
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.cpp
@@ -0,0 +1,53 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTWidget.h>
+
+#include "HmmerSearchDialogFiller.h"
+namespace U2 {
+
+#define GT_CLASS_NAME "UHMM3SearchDialogFiller"
+#define GT_METHOD_NAME "run"
+
+void HmmerSearchDialogFiller::commonScenario(){
+    QWidget *dialog = QApplication::activeModalWidget();
+    GT_CHECK(dialog != NULL, "dialog not found");
+
+    QLineEdit* queryHmmFileEdit = GTWidget::findExactWidget<QLineEdit*>(os, "queryHmmFileEdit", dialog);
+    GTLineEdit::setText(os, queryHmmFileEdit, profile);
+
+    QRadioButton* radio = GTWidget::findExactWidget<QRadioButton*>(os, "rbCreateNewTable", dialog);
+    CHECK_SET_ERR(radio != NULL, "rbCreateNewTable not found!");
+    GTRadioButton::click(os, radio);
+
+    QLineEdit* newFilePathle = GTWidget::findExactWidget<QLineEdit*>(os, "leNewTablePath", dialog);
+    GTLineEdit::setText(os, newFilePathle, newFilePath);
+
+    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+}
+
+#undef GT_METHOD_NAME
+#undef GT_CLASS_NAME
+}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.h
new file mode 100644
index 0000000..174306e
--- /dev/null
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.h
@@ -0,0 +1,41 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+
+#ifndef _U2_HMMER_SEARCH_DIALOG_FILLER_H_
+#define _U2_HMMER_SEARCH_DIALOG_FILLER_H_
+
+#include "utils/GTUtilsDialog.h"
+namespace U2 {
+using namespace HI;
+
+class HmmerSearchDialogFiller : public Filler
+{
+public:
+    HmmerSearchDialogFiller(HI::GUITestOpStatus &os, QString _profile, QString _newFilePath): Filler(os, "HmmerSearchDialog"),
+    profile(_profile),
+    newFilePath(_newFilePath){}
+    virtual void commonScenario();
+private:
+    QString profile, newFilePath;
+};
+}
+#endif // _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
index ffda7a5..a60069c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
index f4881ca..6b3dce8 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@ using namespace HI;
 class UHMM3PhmmerDialogFiller: public Filler
 {
 public:
-    UHMM3PhmmerDialogFiller(HI::GUITestOpStatus &os, QString _input):Filler(os, "UHMM3PhmmerDialog"), input(_input){}
+    UHMM3PhmmerDialogFiller(HI::GUITestOpStatus &os, QString _input):Filler(os, "PhmmerSearchDialog"), input(_input){}
     void commonScenario();
 private:
     QString input;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp
deleted file mode 100644
index f9dbf2f..0000000
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QApplication>
-
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTWidget.h>
-
-#include "UHMM3SearchDialogFiller.h"
-namespace U2 {
-
-#define GT_CLASS_NAME "UHMM3SearchDialogFiller"
-#define GT_METHOD_NAME "run"
-
-void UHMM3SearchDialogFiller::commonScenario(){
-    QWidget *dialog = QApplication::activeModalWidget();
-    GT_CHECK(dialog != NULL, "dialog not found");
-
-    QLineEdit* queryHmmFileEdit = GTWidget::findExactWidget<QLineEdit*>(os, "queryHmmFileEdit", dialog);
-    GTLineEdit::setText(os, queryHmmFileEdit, profile);
-
-    QLineEdit* newFilePathle = GTWidget::findExactWidget<QLineEdit*>(os, "leNewTablePath", dialog);
-    GTLineEdit::setText(os, newFilePathle, newFilePath);
-
-    GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-}
-
-#undef GT_METHOD_NAME
-#undef GT_CLASS_NAME
-}
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h
deleted file mode 100644
index c9949a6..0000000
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-
-#ifndef _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
-#define _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
-
-#include "utils/GTUtilsDialog.h"
-namespace U2 {
-using namespace HI;
-
-class UHMM3SearchDialogFiller : public Filler
-{
-public:
-    UHMM3SearchDialogFiller(HI::GUITestOpStatus &os, QString _profile, QString _newFilePath): Filler(os, "UHMM3SearchDialog"),
-    profile(_profile),
-    newFilePath(_newFilePath){}
-    virtual void commonScenario();
-private:
-    QString profile, newFilePath;
-};
-}
-#endif // _U2_UHMM3_SEARCH_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
index ed1831e..725570d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTDoubleSpinBox.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
index c4239b9..0f31056 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.cpp
index e4bffdd..dcc1444 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
index 678c0e4..33f3e2c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
index 735adee..2fd342d 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,19 +24,11 @@
 #include <primitives/GTWidget.h>
 #include <primitives/GTCheckBox.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QComboBox>
-#include <QtGui/QCheckBox>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QComboBox>
+#include <QCheckBox>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
index d768819..4e05308 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
index da2c585..68104bd 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-
 #include "ConvertAceToSqliteDialogFiller.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QDialogButtonBox>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTWidget.h>
 #include <base_dialogs/MessageBoxFiller.h>
+
 namespace U2{
 using namespace HI;
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
index 929b485..473e2fe 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
index c1f3421..839e7f0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,17 +23,10 @@
 #include <primitives/GTWidget.h>
 #include <primitives/GTLineEdit.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
index 972e29f..629b2a4 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/CreateNewProjectWidgetFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
index 0ea8f61..3f0ea0b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QLabel>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QLabel>
-#endif
+#include <QApplication>
+#include <QLabel>
 
 #include <primitives/GTComboBox.h>
 #include <primitives/GTRadioButton.h>
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
index b9c5e5c..64593f0 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
index 80572b1..eb85251 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
index b7d40ad..43c3090 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/DocumentProviderSelectorDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
index de49155..5f0ac25 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,17 +23,10 @@
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QAbstractButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QAbstractButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QAbstractButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
index 9e7327b..51db46c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/ExportProjectDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
index 59f09ae..6b6f38c 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -353,7 +353,7 @@ void NCBISearchDialogFillerDeprecated::commonScenario(){
         return;
     }
 
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "", 0, false, false, "", GTGlobals::UseMouse, 1));
+    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "", 0, true, false, false, "", GTGlobals::UseMouse, 1));
     QTreeWidget* w = dialog->findChild<QTreeWidget*>("treeWidget");
     GT_CHECK(w, "treeWidget not found");
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
index 48573fb..0195132 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/NCBISearchDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -105,8 +105,8 @@ private:
 
 }   // namespace U2
 
-typedef QPair<int, QString> intStringPair;
-Q_DECLARE_METATYPE(intStringPair)
+typedef QPair<int, QString> intStrStrPair;
+Q_DECLARE_METATYPE(intStrStrPair)
 Q_DECLARE_METATYPE(QList<int>)
 
 #endif // _U2_NCBI_SEARCH_DIALOG_FILLER_H_
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
index 74e9ede..e9eb7b5 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,13 +20,8 @@
  */
 
 #include "SaveProjectDialogFiller.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QApplication>
+#include <QPushButton>
 
 #include <primitives/GTWidget.h>
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
index 88c5c20..cf8b3ee 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SaveProjectDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define SAVEPROJECTDIALOGFILLER_H
 
 #include "utils/GTUtilsDialog.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QDialogButtonBox>
 
 namespace U2{
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
index bf1f583..1abbb44 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,9 @@
 #include "SelectDocumentFormatDialogFiller.h"
 #include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 using namespace HI;
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
index 1152ba7..4c9a1de 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
index 52691e6..0a9f31b 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QPushButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QPushButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
index c28a9cb..4eb00db 100644
--- a/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
+++ b/src/plugins/GUITestBase/src/runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
index ae66547..99f584c 100644
--- a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ GUITestRunner::GUITestRunner(UGUITestBase* _guiTestBase, QWidget *parent) :
 {
     setupUi(this);
     setWindowIcon(QIcon(QString(":gui_test/images/open_gui_test_runner.png")));
-    tree->setColumnWidth(0,300);
+    tree->setColumnWidth(0,550);
 
     const GUITests tests = guiTestBase->getTests();
     foreach(HI::GUITest* t, tests) {
diff --git a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
index 25c5d8a..7bef322 100644
--- a/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
+++ b/src/plugins/GUITestBase/src/test_runner/GUITestRunner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
deleted file mode 100644
index e3666bb..0000000
--- a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QApplication>
-#include <QDir>
-#include <QMainWindow>
-#include <QTreeView>
-
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/UserApplicationsSettings.h>
-
-#include <U2Gui/ObjectViewModel.h>
-
-#include "utils/GTUtilsDialog.h"
-#include "GTUtilsMdi.h"
-#include "GTUtilsProject.h"
-#include "GTUtilsProjectTreeView.h"
-#include "GTUtilsTaskTreeView.h"
-#include "GUIInitialChecks.h"
-#include "system/GTClipboard.h"
-#include "system/GTFile.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTWidget.h>
-#include <primitives/GTWidget.h>
-#include "runnables/qt/EscapeClicker.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
-
-namespace U2 {
-
-namespace GUITest_initial_checks {
-using namespace HI;
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0000) {
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-#ifdef Q_OS_WIN
-    QProcess::execute("closeAllErrors.exe"); //this exe file, compiled Autoit script
-#endif
-
-    GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
-
-#ifndef Q_OS_WIN
-    GTMouseDriver::release(Qt::RightButton);
-    GTMouseDriver::release();
-    GTKeyboardDriver::keyRelease( Qt::Key_Control);
-    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
-    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
-    uiLog.trace(QString("pre_action_0000: next keyboard modifiers are pressed before test: %1").arg(QGuiApplication::queryKeyboardModifiers()));
-#endif
-
-    GTUtilsDialog::startHangChecking(os);
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0001) {
-    CHECK_SET_ERR(AppContext::getProjectView() == NULL && AppContext::getProject() == NULL, "There is a project");
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0002) {
-    Q_UNUSED(os);
-    QMainWindow *mainWindow = AppContext::getMainWindow()->getQMainWindow();
-    CHECK_SET_ERR(mainWindow != NULL, "main window is NULL");
-
-    if (!mainWindow->isMaximized()) {
-        GTWidget::showMaximized(os, mainWindow);
-        GTGlobals::sleep(1000);
-    }
-
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0003) {
-    if(QDir(testDir).exists()){
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj1.uprj");
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2.uprj");
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj3.uprj");
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
-        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj5.uprj");
-    }
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0004) {
-    Q_UNUSED(os);
-    QDir dir(QDir().absoluteFilePath(screenshotDir));
-    if (!dir.exists(dir.absoluteFilePath(screenshotDir))) {
-        dir.mkpath(dir.path());
-    }
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0005) {
-    if(QDir(sandBoxDir).exists()){
-        GTFile::setReadWrite(os, sandBoxDir);
-        GTGlobals::sleep();
-        QDir sandBox = QDir(sandBoxDir);
-        foreach (QString path, sandBox.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden)) {
-            GTFile::removeDir(sandBox.absolutePath() + "/" + path);
-        }
-    }
-}
-
-GUI_TEST_CLASS_DEFINITION(pre_action_0006) {
-    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
-    CHECK_SET_ERR(mw != NULL, "main window is NULL");
-#ifdef Q_OS_MAC
-    GTWidget::click(os, mw, Qt::LeftButton, QPoint(200, 200));
-#endif
-}
-
-GUI_TEST_CLASS_DEFINITION(post_check_0000) {
-    GTUtilsDialog::cleanup(os);
-}
-
-GUI_TEST_CLASS_DEFINITION(post_check_0001) {
-    QWidget *modalWidget = QApplication::activeModalWidget();
-    if (NULL != modalWidget) {
-        CHECK_SET_ERR(NULL == modalWidget, QString("There is a modal widget after test finish: %1").arg(modalWidget->windowTitle()));
-    }
-
-    QWidget *popupWidget = QApplication::activePopupWidget();
-    CHECK_SET_ERR(NULL == popupWidget, "There is a popup widget after test finish");
-}
-
-GUI_TEST_CLASS_DEFINITION(post_action_0000) {
-    const Qt::KeyboardModifiers modifiers = QGuiApplication::queryKeyboardModifiers();
-    if (modifiers & Qt::ShiftModifier) {
-        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
-    }
-
-    if (modifiers & Qt::ControlModifier) {
-        GTKeyboardDriver::keyRelease( Qt::Key_Control);
-    }
-
-    if (modifiers & Qt::AltModifier) {
-        GTKeyboardDriver::keyRelease(Qt::Key_Alt);
-    }
-
-    uiLog.trace(QString("post_action_0000: next keyboard modifiers are pressed after test: %1").arg(QGuiApplication::queryKeyboardModifiers()));
-}
-
-GUI_TEST_CLASS_DEFINITION(post_action_0001) {
-    QWidget* popupWidget = QApplication::activePopupWidget();
-    while (popupWidget != NULL) {
-        GTWidget::close(os, popupWidget);
-        popupWidget = QApplication::activePopupWidget();
-    }
-
-    QWidget* modalWidget = QApplication::activeModalWidget();
-    while (modalWidget != NULL) {
-        GTWidget::close(os, modalWidget);
-        modalWidget = QApplication::activeModalWidget();
-    }
-
-    GTClipboard::clear(os);
-}
-
-GUI_TEST_CLASS_DEFINITION(post_action_0002) {
-    GTGlobals::sleep(1000);
-    // close project
-    if (AppContext::getProject() != NULL) {
-        GTGlobals::sleep();
-        GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
-        GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-        GTGlobals::sleep(100);
-
-        GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
-        GTUtilsDialog::waitForDialog(os, new AppCloseMessageBoxDialogFiller(os));
-        GTKeyboardDriver::keyClick( Qt::Key_Delete);
-        GTGlobals::sleep(500);
-#ifdef Q_OS_MAC
-        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
-#else
-        GTKeyboardDriver::keyClick( 'q', Qt::ControlModifier);
-        GTGlobals::sleep(100);
-#endif
-        GTGlobals::sleep(500);
-
-        GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
-        GTGlobals::sleep();
-    }
-
-    GTUtilsMdi::closeAllWindows(os);
-
-    //cancel all tasks
-    AppContext::getTaskScheduler()->cancelAllTasks();
-    GTUtilsTaskTreeView::waitTaskFinished(os, 60000);
-}
-
-GUI_TEST_CLASS_DEFINITION(post_action_0003) {
-    if(QDir(testDir).exists()){
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj1.uprj");
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2.uprj");
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj3.uprj");
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
-        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj5.uprj");
-    }
-    if(QDir(sandBoxDir).exists()){
-        GTFile::setReadWrite(os, sandBoxDir);
-        GTGlobals::sleep();
-        QDir sandBox = QDir(sandBoxDir);
-        foreach (QString path, sandBox.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden)) {
-            GTFile::removeDir(sandBox.absolutePath() + "/" + path);
-        }
-    }
-}
-
-} // GUITest_initial_checks namespace
-
-} // U2 namespace
diff --git a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h b/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h
deleted file mode 100644
index 96aeb88..0000000
--- a/src/plugins/GUITestBase/src/tests/GUIInitialChecks.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_GUI_INITIAL_CHECKS_H_
-#define _U2_GUI_INITIAL_CHECKS_H_
-
-#include <U2Test/UGUITestBase.h>
-
-namespace U2 {
-
-namespace GUITest_initial_checks {
-#undef GUI_TEST_SUITE
-#define GUI_TEST_SUITE "GUITest_initial_checks"
-
-// 'Pre action' do some actions that are needed to prepare UGENE for testing
-GUI_TEST_CLASS_DECLARATION(pre_action_0000)
-GUI_TEST_CLASS_DECLARATION(pre_action_0001)
-GUI_TEST_CLASS_DECLARATION(pre_action_0002)
-GUI_TEST_CLASS_DECLARATION(pre_action_0003)
-GUI_TEST_CLASS_DECLARATION(pre_action_0004)
-GUI_TEST_CLASS_DECLARATION(pre_action_0005)
-GUI_TEST_CLASS_DECLARATION(pre_action_0006)
-
-// 'Post check' checks UGENE state after test finish and can set error
-GUI_TEST_CLASS_DECLARATION(post_check_0000)
-GUI_TEST_CLASS_DECLARATION(post_check_0001)
-
-// 'Post action' do some actions that are needed to close UGENE after test finish
-GUI_TEST_CLASS_DECLARATION(post_action_0000)
-GUI_TEST_CLASS_DECLARATION(post_action_0001)
-GUI_TEST_CLASS_DECLARATION(post_action_0002)
-GUI_TEST_CLASS_DECLARATION(post_action_0003)
-
-#undef GUI_TEST_SUITE
-}
-
-} //namespace
-
-#endif
diff --git a/src/plugins/GUITestBase/src/tests/PosteriorActions.cpp b/src/plugins/GUITestBase/src/tests/PosteriorActions.cpp
new file mode 100644
index 0000000..766d26d
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PosteriorActions.cpp
@@ -0,0 +1,147 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <GTGlobals.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTWidget.h>
+#include <system/GTClipboard.h>
+#include <system/GTFile.h>
+#include <utils/GTUtilsDialog.h>
+
+#include <QApplication>
+#include <QDir>
+#include <QGuiApplication>
+#include <QTreeView>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Log.h>
+#include <U2Core/Task.h>
+
+#include "GTUtilsMdi.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "PosteriorActions.h"
+#include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
+
+namespace U2 {
+namespace GUITest_posterior_actions {
+
+POSTERIOR_ACTION_DEFINITION(post_action_0000) {
+    // Release all hold keyboard modifier keys
+
+    const Qt::KeyboardModifiers modifiers = QGuiApplication::queryKeyboardModifiers();
+    if (modifiers & Qt::ShiftModifier) {
+        GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    }
+
+    if (modifiers & Qt::ControlModifier) {
+        GTKeyboardDriver::keyRelease(Qt::Key_Control);
+    }
+
+    if (modifiers & Qt::AltModifier) {
+        GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    }
+
+    uiLog.trace(QString("post_action_0000: next keyboard modifiers are pressed after test: %1").arg(QGuiApplication::queryKeyboardModifiers()));
+}
+
+POSTERIOR_ACTION_DEFINITION(post_action_0001) {
+    // Close all popup widgets
+    // Close all modal widgets
+    // Clear the clipboard
+
+    QWidget* popupWidget = QApplication::activePopupWidget();
+    while (popupWidget != NULL) {
+        GTWidget::close(os, popupWidget);
+        popupWidget = QApplication::activePopupWidget();
+    }
+
+    QWidget* modalWidget = QApplication::activeModalWidget();
+    while (modalWidget != NULL) {
+        GTWidget::close(os, modalWidget);
+        modalWidget = QApplication::activeModalWidget();
+    }
+
+    GTClipboard::clear(os);
+}
+
+POSTERIOR_ACTION_DEFINITION(post_action_0002) {
+    // Clear the project
+    // Close the project
+    // Close all MDI windows
+    // Cancel all tasks
+
+    GTGlobals::sleep(1000);
+
+    if (AppContext::getProject() != NULL) {
+        GTWidget::click(os, GTUtilsProjectTreeView::getTreeView(os));
+        GTKeyboardDriver::keyClick('a', Qt::ControlModifier);
+        GTGlobals::sleep(100);
+
+        GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
+        GTUtilsDialog::waitForDialog(os, new AppCloseMessageBoxDialogFiller(os));
+        GTKeyboardDriver::keyClick(Qt::Key_Delete);
+        GTGlobals::sleep(500);
+#ifdef Q_OS_MAC
+        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
+#else
+        GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+        GTGlobals::sleep(100);
+#endif
+        GTGlobals::sleep(500);
+
+        GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
+        GTGlobals::sleep();
+    }
+
+    GTUtilsMdi::closeAllWindows(os);
+
+    AppContext::getTaskScheduler()->cancelAllTasks();
+    GTUtilsTaskTreeView::waitTaskFinished(os, 60000);
+}
+
+POSTERIOR_ACTION_DEFINITION(post_action_0003) {
+    // Restore backuped files
+
+    if (QDir(testDir).exists()) {
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj1.uprj");
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj2.uprj");
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj3.uprj");
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
+        GTFile::restore(os, testDir + "_common_data/scenarios/project/proj5.uprj");
+    }
+}
+
+POSTERIOR_ACTION_DEFINITION(post_action_0004) {
+    if (QDir(sandBoxDir).exists()) {
+        GTFile::setReadWrite(os, sandBoxDir, true);
+        QDir sandBox(sandBoxDir);
+        foreach (const QString &path, sandBox.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::NoSymLinks | QDir::Hidden)) {
+            GTFile::removeDir(sandBox.absolutePath() + "/" + path);
+        }
+    }
+}
+
+}   // namespace GUITest_posterior_actions
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/PosteriorActions.h b/src/plugins/GUITestBase/src/tests/PosteriorActions.h
new file mode 100644
index 0000000..7478327
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PosteriorActions.h
@@ -0,0 +1,47 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_POSTERIOR_ACTIONS_H_
+#define _U2_POSTERIOR_ACTIONS_H_
+
+#include <U2Test/UGUITest.h>
+
+namespace U2 {
+namespace GUITest_posterior_actions {
+
+#define POSTERIOR_ACTION_DECLARATION(className) GUI_TEST_CLASS_DECLARATION(className)
+#define POSTERIOR_ACTION_DEFINITION(className) GUI_TEST_CLASS_DEFINITION(className)
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_posterior_actions"
+
+POSTERIOR_ACTION_DECLARATION(post_action_0000)
+POSTERIOR_ACTION_DECLARATION(post_action_0001)
+POSTERIOR_ACTION_DECLARATION(post_action_0002)
+POSTERIOR_ACTION_DECLARATION(post_action_0003)
+POSTERIOR_ACTION_DECLARATION(post_action_0004)
+
+#undef GUI_TEST_SUITE
+
+}   // namespace GUITest_posterior_actions
+}   // namespace U2
+
+#endif // _U2_POSTERIOR_ACTIONS_H_
diff --git a/src/plugins/GUITestBase/src/tests/PosteriorChecks.cpp b/src/plugins/GUITestBase/src/tests/PosteriorChecks.cpp
new file mode 100644
index 0000000..6725587
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PosteriorChecks.cpp
@@ -0,0 +1,52 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <utils/GTUtilsDialog.h>
+
+#include <QApplication>
+
+#include "PosteriorChecks.h"
+
+namespace U2 {
+namespace GUITest_posterior_checks {
+
+POSTERIOR_CHECK_DEFINITION(post_check_0000) {
+    // Check dialog waiters state
+    // Stop dialogs hang checking
+
+    GTUtilsDialog::cleanup(os);
+}
+
+POSTERIOR_CHECK_DEFINITION(post_check_0001) {
+    // Check there are no modal widgets
+    // Check there are no popup widgets
+
+    QWidget *modalWidget = QApplication::activeModalWidget();
+    if (NULL != modalWidget) {
+        CHECK_SET_ERR(NULL == modalWidget, QString("There is a modal widget after test finish: %1").arg(modalWidget->windowTitle()));
+    }
+
+    QWidget *popupWidget = QApplication::activePopupWidget();
+    CHECK_SET_ERR(NULL == popupWidget, "There is a popup widget after test finish");
+}
+
+}   // namespace GUITest_posterior_checks
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/PosteriorChecks.h b/src/plugins/GUITestBase/src/tests/PosteriorChecks.h
new file mode 100644
index 0000000..41f1ab0
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PosteriorChecks.h
@@ -0,0 +1,44 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_POSTERIOR_CHECKS_H_
+#define _U2_POSTERIOR_CHECKS_H_
+
+#include <U2Test/UGUITest.h>
+
+namespace U2 {
+namespace GUITest_posterior_checks {
+
+#define POSTERIOR_CHECK_DECLARATION(className) GUI_TEST_CLASS_DECLARATION(className)
+#define POSTERIOR_CHECK_DEFINITION(className) GUI_TEST_CLASS_DEFINITION(className)
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_posterior_checks"
+
+POSTERIOR_CHECK_DECLARATION(post_check_0000)
+POSTERIOR_CHECK_DECLARATION(post_check_0001)
+
+#undef GUI_TEST_SUITE
+
+}   // namespace GUITest_posterior_checks
+}   // namespace U2
+
+#endif // _U2_POSTERIOR_CHECKS_H_
diff --git a/src/plugins/GUITestBase/src/tests/PreliminaryActions.cpp b/src/plugins/GUITestBase/src/tests/PreliminaryActions.cpp
new file mode 100644
index 0000000..bb1c37d
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PreliminaryActions.cpp
@@ -0,0 +1,125 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <GTGlobals.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTWidget.h>
+#include <system/GTFile.h>
+#include <utils/GTUtilsDialog.h>
+
+#include <QDir>
+#include <QGuiApplication>
+#include <QMainWindow>
+#include <QProcess>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Log.h>
+
+#include <U2Gui/MainWindow.h>
+
+#include "PreliminaryActions.h"
+#include "GTUtilsTaskTreeView.h"
+
+namespace U2 {
+namespace GUITest_preliminary_actions {
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0000) {
+    // Wait all startup tasks finished
+    // Close all unexpected system messageboxes on Windows
+    // Close all UGENE dialogs
+    // Release mouse and keyboard buttons
+    // Start dialogs hang checking
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+#ifdef Q_OS_WIN
+    QProcess::execute("closeAllErrors.exe"); //this exe file, compiled Autoit script
+#endif
+
+    GTUtilsDialog::cleanup(os, GTUtilsDialog::NoFailOnUnfinished);
+
+#ifndef Q_OS_WIN
+    GTMouseDriver::release(Qt::RightButton);
+    GTMouseDriver::release();
+    GTKeyboardDriver::keyRelease( Qt::Key_Control);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    uiLog.trace(QString("pre_action_0000: next keyboard modifiers are pressed before test: %1").arg(QGuiApplication::queryKeyboardModifiers()));
+#endif
+
+    GTUtilsDialog::startHangChecking(os);
+}
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0001) {
+    // Ensure there is no opened project
+
+    CHECK_SET_ERR(AppContext::getProjectView() == NULL && AppContext::getProject() == NULL, "There is a project");
+}
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0002) {
+    // Maximize the main window
+
+    Q_UNUSED(os);
+    QMainWindow *mainWindow = AppContext::getMainWindow()->getQMainWindow();
+    CHECK_SET_ERR(mainWindow != NULL, "main window is NULL");
+
+    if (!mainWindow->isMaximized()) {
+        GTWidget::showMaximized(os, mainWindow);
+        GTGlobals::sleep(1000);
+    }
+}
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0003) {
+    // backup some files
+
+    if (QDir(testDir).exists()) {
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj1.uprj");
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2-1.uprj");
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj2.uprj");
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj3.uprj");
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
+        GTFile::backup(os, testDir + "_common_data/scenarios/project/proj5.uprj");
+    }
+}
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0004) {
+    // create a directory for screenshots
+
+    Q_UNUSED(os);
+    QDir dir(QDir().absoluteFilePath(screenshotDir));
+    if (!dir.exists(dir.absoluteFilePath(screenshotDir))) {
+        dir.mkpath(dir.path());
+    }
+}
+
+PRELIMINARY_ACTION_DEFINITION(pre_action_0005) {
+    // Click somewhere to the main window in mac to be sure that the focus is on the application
+
+    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
+    CHECK_SET_ERR(mw != NULL, "main window is NULL");
+#ifdef Q_OS_MAC
+    GTWidget::click(os, mw, Qt::LeftButton, QPoint(200, 200));
+#endif
+}
+
+}   // namespace GUITest_preliminary_actions
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/PreliminaryActions.h b/src/plugins/GUITestBase/src/tests/PreliminaryActions.h
new file mode 100644
index 0000000..58d1c73
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/PreliminaryActions.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_PRELIMINARY_ACTIONS_H_
+#define _U2_PRELIMINARY_ACTIONS_H_
+
+#include <U2Test/UGUITest.h>
+
+namespace U2 {
+namespace GUITest_preliminary_actions {
+
+#define PRELIMINARY_ACTION_DECLARATION(className) GUI_TEST_CLASS_DECLARATION(className)
+#define PRELIMINARY_ACTION_DEFINITION(className) GUI_TEST_CLASS_DEFINITION(className)
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_preliminary_actions"
+
+// 'Pre action' do some actions that are needed to prepare UGENE for testing
+GUI_TEST_CLASS_DECLARATION(pre_action_0000)
+GUI_TEST_CLASS_DECLARATION(pre_action_0001)
+GUI_TEST_CLASS_DECLARATION(pre_action_0002)
+GUI_TEST_CLASS_DECLARATION(pre_action_0003)
+GUI_TEST_CLASS_DECLARATION(pre_action_0004)
+GUI_TEST_CLASS_DECLARATION(pre_action_0005)
+
+#undef GUI_TEST_SUITE
+
+}   // namespace GUITest_preliminary_actions
+}   // namespace U2
+
+#endif // _U2_PRELIMINARY_ACTIONS_H_
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.cpp
index f001bdf..013d17f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QApplication>
+#include <QDir>
 #include <QTableView>
 
 #include <U2Core/GUrlUtils.h>
@@ -456,7 +457,8 @@ GUI_TEST_CLASS_DEFINITION(test_0015) {
     GTUtilsWorkflowDesigner::clickParameter(os, "Output file");
     URLWidget *urlWidget = qobject_cast<URLWidget *>(GTUtilsWorkflowDesigner::getParametersTable(os)->findChild<URLWidget *>());
     GTKeyboardDriver::keySequence("aaa");
-    GTGlobals::sleep(1000);
+	GTKeyboardDriver::keyPress(Qt::Key_Enter);
+	GTGlobals::sleep(500);
     CHECK_SET_ERR(NULL != urlWidget, "Output file url widget was not found");
     QTreeWidget *completer = urlWidget->findChild<QTreeWidget *>();
     CHECK_SET_ERR(completer != NULL, "auto completer widget was not found");
@@ -571,7 +573,7 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
     GTUtilsProjectTreeView::click(os, "chrM.fa");
 
     //6. Click "Set reference sequence".
-    //7. Choose the file "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq".
+    //7. Choose the file "assembly_test_0018.fa" from sanbox.
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, sandBoxDir + "assembly_test_0018.fa"));
     GTWidget::click(os, GTAction::button(os, "setReferenceAction"));
 
@@ -915,10 +917,12 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
 //    1. Open assembly
     GTFile::copy(os, testDir + "_common_data/ugenedb/chrM.sorted.bam.ugenedb", sandBoxDir + "chrM.sorted.bam.ugenedb");
     GTFileDialog::openFile(os, sandBoxDir + "chrM.sorted.bam.ugenedb");
+	GTUtilsProjectTreeView::click(os, "chrM");
+
 //    2. Rename assembly object
     GTUtilsProjectTreeView::rename(os, "chrM", "new_name");
 //    Check UGENE title
-    GTUtilsApp::checkUGENETitle(os, "-* UGENE - [chrM.sorted.bam [as] new_name]");
+    GTUtilsApp::checkUGENETitle(os, "-* UGENE");
     GTGlobals::sleep(500);
 }
 
@@ -985,7 +989,6 @@ GUI_TEST_CLASS_DEFINITION(test_0036){
     QScrollBar* ver = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Vertical);
     QScrollBar* hor = GTUtilsAssemblyBrowser::getScrollBar(os, Qt::Horizontal);
 
-    int initVer = ver->value();
     int initHor = hor->value();
 
     for(int i = 0; i < 3; i++){
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h
index 7dafbcd..0a533ec 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/Assembly_browser/GTTestsAssemblyBrowser.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
index 003963b..8c8399f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
index 97f16b8..16ceab4 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/bowtie2/GTTestsBowtie2.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
index 8592be6..5667c66 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
index 3901243..6258a66 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsDnaAssembly.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.cpp
index 370bac9..b33eb11 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,24 +20,24 @@
  */
 
 #include <QApplication>
+#include <QDir>
+#include <QFileInfoList>
 
 #include <U2Gui/ToolsMenu.h>
 
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include <primitives/GTComboBox.h>
-#include "primitives/GTMenu.h"
-#include "system/GTFile.h"
+#include <primitives/GTMenu.h>
 #include <primitives/GTWidget.h>
+#include <system/GTFile.h>
 
+#include "GTTestsIndexReuse.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsTaskTreeView.h"
-
-#include <base_dialogs/DefaultDialogFiller.h>
-#include <base_dialogs/MessageBoxFiller.h>
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 
-#include "GTTestsIndexReuse.h"
-
 namespace U2 {
 namespace GUITest_index_reuse {
 
@@ -93,6 +93,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+	GTGlobals::sleep(1000);
 //    Expected state: index is built
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".1.ebwt"), "index1 not found");
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + refName + ".2.ebwt"), "index2 not found");
@@ -184,6 +185,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+	GTGlobals::sleep(1000);
 //    2. Delete one of the indes files
     QFile f(sandBoxDir + refName + ".3.ebwt");
     CHECK_SET_ERR(f.exists(), "index not built");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
index bf8dbeb..1500f5a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/GTTestsIndexReuse.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
index df46102..6992305 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
index 414700f..4755400 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/dna_assembly/conversions/GTTestsDnaAssemblyConversions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
index e510345..cd45d00 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
index f5a0848..b2b9d16 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Assembling/sam/GTTestsSAM.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
index c11eb80..3ebf3d2 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,21 +43,13 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ToolsMenu.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QWizard>
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QWizard>
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QApplication>
+#include <QGraphicsItem>
+#include <QWizard>
+#include <QLineEdit>
 
 #include <QProcess>
 
-
 namespace U2 {
 
 namespace GUITest_common_scenarios_NIAID_pipelines {
@@ -76,6 +68,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
     while(!scheduller->getTopLevelTasks().isEmpty()){
         GTGlobals::sleep();
     }
+	GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
 }
 #define GT_CLASS_NAME "GTUtilsDialog::WizardFiller0002"
 #define GT_METHOD_NAME "run"
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
index 3000a37..a896c13 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/NIAID_pipelines/GTTestsNiaidPipelines.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.cpp
index 16d0804..3cadc23 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,10 +49,10 @@ void test1(HI::GUITestOpStatus &os, QString s="") {
 //1. Open Query Designer
     GTUtilsQueryDesigner::openQueryDesigner(os);
 
-    QString array[] = {"CDD", "Base Content","HMM2","HMM3","ORF"};
+    QString array[] = {"CDD", "Base Content","HMM2","ORF"};
     QPoint p;
 //2. Add any algorithm to the scheme
-    for(int i=0;i<5; i++){
+    for(int i=0;i<4; i++){
 //3. Reduce any elements size by dragging its right corner as far to the left as possible
 //  (or a bit less than as far as possible)
     if (s=="arr"){
@@ -98,7 +98,7 @@ void test1(HI::GUITestOpStatus &os, QString s="") {
     QList<QGraphicsItem *> items = sceneView->items();
     CHECK_SET_ERR(items.size() == 2, "Delete shortcut is not working");//2 - is equal empty scene
     }
-//5. repeat from step 2 (do 5 iterations)
+//5. repeat from step 2 (do 4 iterations)
 //Expected state: UGENE not crashes.
 }
 GUI_TEST_CLASS_DEFINITION(test_0001){
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
index 5c7eaef..84c4cd3 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/Query_Designer/GTTestsQuerryDesigner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
index 80b8c12..0f39aea 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -749,8 +749,8 @@ GUI_TEST_CLASS_DEFINITION(test_0010_3) {
     GTGlobals::sleep();
     GTUtilsAnnotationsTreeView::selectItems(os, annList);
 
-    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0010_3.gtf",
-                                                                 ExportAnnotationsFiller::gtf, os));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, sandBoxDir + "ann_export_test_0010_3.gtf", 
+                                                                 ExportAnnotationsFiller::gtf, false, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
@@ -855,12 +855,11 @@ GUI_TEST_CLASS_DEFINITION(test_0011_3) {
 
     GTUtilsAnnotationsTreeView::selectItems(os, QStringList() << "ann");
 
-    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0011_1.gtf",
-                                                                 ExportAnnotationsFiller::gtf, os));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, sandBoxDir + "ann_export_test_0011_1.gtf",
+                                                                 ExportAnnotationsFiller::gtf, false, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
-
     GTUtilsLog::check(os, l);
 }
 
@@ -1004,8 +1003,8 @@ GUI_TEST_CLASS_DEFINITION(test_0012_3) {
 
     GTUtilsAnnotationsTreeView::selectItems(os, annList);
 
-    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(sandBoxDir + "ann_export_test_0012_3.gtf",
-                                                                 ExportAnnotationsFiller::gtf, os));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, sandBoxDir + "ann_export_test_0012_3.gtf",
+                                                                 ExportAnnotationsFiller::gtf, false, false, false));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
index af70704..315f498 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsAnnotations.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
index d43b399..8061827 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,36 +21,39 @@
 
 #include <QApplication>
 #include <QAbstractItemModel>
+#include <QDir>
 #include <QListWidget>
 #include <QTreeView>
 
-#include "GTTestsCreateAnnotationWidget.h"
-#include "GTUtilsAnnotationsTreeView.h"
-#include "utils/GTUtilsDialog.h"
-#include "GTUtilsMdi.h"
-#include "GTUtilsOptionPanelSequenceView.h"
-#include "GTUtilsProjectTreeView.h"
-#include "GTUtilsTaskTreeView.h"
-#include <primitives/GTCheckBox.h>
-#include <primitives/GTComboBox.h>
 #include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
 #include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTListWidget.h>
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
+#include <primitives/GTMenu.h>
 #include <primitives/GTRadioButton.h>
 #include <primitives/GTTabWidget.h>
 #include <primitives/GTTextEdit.h>
 #include <primitives/GTToolbar.h>
 #include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <utils/GTUtilsDialog.h>
+
+#include "GTTestsCreateAnnotationWidget.h"
+#include "GTUtilsAnnotationsTreeView.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsOptionPanelSequenceView.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
 #include "runnables/qt/EscapeClicker.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/utils_smith_waterman/SmithWatermanDialogBaseFiller.h"
 #include "runnables/ugene/plugins/orf_marker/OrfDialogFiller.h"
+#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
 namespace U2 {
 
@@ -586,7 +589,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
 //    4. Click "Predefined group names" button.
 //    Expected state: nothing happens, there is no popup menus.
-            GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new EscapeClicker(os));
+            GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new EscapeClicker(os));
             clickSelectGroupButton(os, dialog);
 
 //    5. Set the annotation name. Accept the dialog.
@@ -632,7 +635,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
 
 //    4. Click "Predefined group names" button.
 //    Expected state: nothing happens, there is no popup menus.
-            GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new EscapeClicker(os));
+            GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new EscapeClicker(os));
             clickSelectGroupButton(os, dialog);
 
 //    5. Set the annotation name. Accept the dialog.
@@ -671,7 +674,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
 //    4. Click "Predefined group names" button.
 //    Expected state: nothing happens, there is no popup menus.
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new EscapeClicker(os));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new EscapeClicker(os));
     clickSelectGroupButton(os);
 
 //    5. Set the annotation name. Create annotations.
@@ -2044,7 +2047,7 @@ GUI_TEST_CLASS_DEFINITION(test_0031) {
             clickSelectGroupButton(os, dialog);
 
 //    7. Close the popup menu. Set "NC_001363 annotations 2" in existing tables combobox.
-            setExistingTable(os, dialog, "NC_001363 annotations 2 [2annot_1seq.gb]");
+            setExistingTable(os, dialog, "2annot_1seq.gb [NC_001363 annotations 2]");
 
 //    8. Click "Predefined group names" button.
 //    Expected state: a popup menu contains all groups from the "NC_001363 annotations 2" table.
@@ -2157,7 +2160,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032) {
             clickSelectGroupButton(os, dialog);
 
 //    7. Close the popup menu. Set "NC_001363 annotations 2" in existing tables combobox.
-            setExistingTable(os, dialog, "NC_001363 annotations 2 [2annot_1seq.gb]");
+            setExistingTable(os, dialog, "2annot_1seq.gb [NC_001363 annotations 2]");
 
 //    8. Click "Predefined group names" button.
 //    Expected state: a popup menu contains all groups from the "NC_001363 annotations 2" table.
@@ -2266,7 +2269,7 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 //    7. Close the popup menu. Set "NC_001363 annotations 2" in existing tables combobox.
     GTUtilsOptionPanelSequenceView::openSaveAnnotationToShowHideWidget(os);
-    setExistingTable(os, NULL, "NC_001363 annotations 2 [2annot_1seq.gb]");
+    setExistingTable(os, NULL, "2annot_1seq.gb [NC_001363 annotations 2]");
     GTUtilsOptionPanelSequenceView::openSaveAnnotationToShowHideWidget(os, false);
 
 //    8. Click "Predefined group names" button.
@@ -2777,7 +2780,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 //        New table radio button - enabled
 //        New table lineedit - enabled
 //        New table browse button - enabled
-//        Auto table radio button - disabled
+//        Auto table radio button - not visible
             QRadioButton *rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable", dialog);
             CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
             CHECK_SET_ERR(!rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly enabled");
@@ -2804,12 +2807,12 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
             QRadioButton *rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable", dialog);
             CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    21. Cancel the dialog.
             // Dialog is applied to check boundaries.
             setSimpleLocation(os, 199950, 1, false, dialog);
-            GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid location! Location must be in GenBank format."));
+            GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid location! Location must be in GenBank format."));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
     };
@@ -2833,7 +2836,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 //        New table radio button - enabled
 //        New table lineedit - disabled
 //        New table browse button - disabled
-//        Auto table radio button - disabled
+//        Auto table radio button - not visible
             QRadioButton *rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable", dialog);
             CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
             CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
@@ -2860,7 +2863,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 
             QRadioButton *rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable", dialog);
             CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    24. Select "Create new table" option. Check if destination table widgets are enabled or disabled.
             GTWidget::click(os, rbCreateNewTable);
@@ -2872,14 +2875,14 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 //        New table radio button - enabled
 //        New table lineedit - enabled
 //        New table browse button - enabled
-//        Auto table radio button - disabled
+//        Auto table radio button - not visible
             CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
             CHECK_SET_ERR(!cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly enabled");
             CHECK_SET_ERR(!tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly enabled");
             CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
             CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled");
             CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    25. Select "Existing table" option. Check if destination table widgets are enabled or disabled.
             GTWidget::click(os, rbExistingTable);
@@ -2891,14 +2894,14 @@ GUI_TEST_CLASS_DEFINITION(test_0038) {
 //        New table radio button - enabled
 //        New table lineedit - disabled
 //        New table browse button - disabled
-//        Auto table radio button - disabled
+//        Auto table radio button - not visible
             CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
             CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disabled");
             CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disabled");
             CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
             CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled");
             CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    26. Select "GenBank/EMBL format" location style. Set location "join(1..100,200..199950)".
             setGenbankLocation(os, "join(1..100,200..199950)", dialog);
@@ -2997,7 +3000,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
 
             QRadioButton *rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable", dialog);
             CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
         }
@@ -3052,7 +3055,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
 
             QRadioButton *rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable", dialog);
             CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    7. Select "Create new table" option. Check if destination table widgets are enabled or disabled.
             GTWidget::click(os, GTWidget::findWidget(os, "rbCreateNewTable", dialog));
@@ -3071,7 +3074,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
             CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
             CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled");
             CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    8. Select "Existing table" option. Check if destination table widgets are enabled or disabled.
             GTWidget::click(os, GTWidget::findWidget(os, "rbExistingTable", dialog));
@@ -3090,7 +3093,7 @@ GUI_TEST_CLASS_DEFINITION(test_0039) {
             CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
             CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled");
             CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled");
-            CHECK_SET_ERR(!rbUseAutoTable->isEnabled(), "rbUseAutoTable is unexpectedly enabled");
+            CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
 
 //    9. Check "Use pattern name" checkbox state.
 //    Expected state: it is invisible.
@@ -3126,31 +3129,31 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //        Auto table radio button - invisible
     QRadioButton *rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable");
     CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
-    CHECK_SET_ERR(!rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly enabled");
+    CHECK_SET_ERR(!rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly enabled for human_T1");
 
     QComboBox *cbExistingTable = GTWidget::findExactWidget<QComboBox *>(os, "cbExistingTable");
     CHECK_SET_ERR(NULL != cbExistingTable, "cbExistingTable is NULL");
-    CHECK_SET_ERR(!cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly enabled");
+    CHECK_SET_ERR(!cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly enabled for human_T1");
 
     QToolButton *tbBrowseExistingTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseExistingTable");
     CHECK_SET_ERR(NULL != tbBrowseExistingTable, "tbBrowseExistingTable is NULL");
-    CHECK_SET_ERR(!tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly enabled");
+    CHECK_SET_ERR(!tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly enabled for human_T1");
 
     QRadioButton *rbCreateNewTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbCreateNewTable");
     CHECK_SET_ERR(NULL != rbCreateNewTable, "rbCreateNewTable is NULL");
-    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
+    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled for human_T1");
 
     QLineEdit *leNewTablePath = GTWidget::findExactWidget<QLineEdit *>(os, "leNewTablePath");
     CHECK_SET_ERR(NULL != leNewTablePath, "leNewTablePath is NULL");
-    CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled");
+    CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled for human_T1");
 
     QToolButton *tbBrowseNewTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseNewTable");
     CHECK_SET_ERR(NULL != tbBrowseNewTable, "tbBrowseNewTable is NULL");
-    CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled");
+    CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled for human_T1");
 
     QRadioButton *rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable");
     CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
+    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible for human_T1");
 
 //    4. Open "Annotation parameters" group. Check "Use pattern name" checkbox state.
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
@@ -3158,8 +3161,8 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //    Expected state: it is visible and enabled.
     QCheckBox *chbUsePatternNames = GTWidget::findExactWidget<QCheckBox *>(os, "chbUsePatternNames");
     CHECK_SET_ERR(NULL != chbUsePatternNames, "chbUsePatternNames is NULL");
-    CHECK_SET_ERR(chbUsePatternNames->isVisible(), "chbUsePatternNames is unexpectedly invisible");
-    CHECK_SET_ERR(chbUsePatternNames->isEnabled(), "chbUsePatternNames is unexpectedly disabled");
+    CHECK_SET_ERR(chbUsePatternNames->isVisible(), "chbUsePatternNames is unexpectedly invisible for human_T1");
+    CHECK_SET_ERR(chbUsePatternNames->isEnabled(), "chbUsePatternNames is unexpectedly disabled for human_T1");
 
     GTUtilsMdi::click(os, GTGlobals::Close);
 
@@ -3180,31 +3183,31 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //        Auto table radio button - invisible
     rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable");
     CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
-    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
+    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled for murine_1");
 
     cbExistingTable = GTWidget::findExactWidget<QComboBox *>(os, "cbExistingTable");
     CHECK_SET_ERR(NULL != cbExistingTable, "cbExistingTable is NULL");
-    CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disabled");
+    CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disabled for murine_1");
 
     tbBrowseExistingTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseExistingTable");
     CHECK_SET_ERR(NULL != tbBrowseExistingTable, "tbBrowseExistingTable is NULL");
-    CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disabled");
+    CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disabled for murine_1");
 
     rbCreateNewTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbCreateNewTable");
     CHECK_SET_ERR(NULL != rbCreateNewTable, "rbCreateNewTable is NULL");
-    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
+    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled for murine_1");
 
     leNewTablePath = GTWidget::findExactWidget<QLineEdit *>(os, "leNewTablePath");
     CHECK_SET_ERR(NULL != leNewTablePath, "leNewTablePath is NULL");
-    CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled");
+    CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled for murine_1");
 
     tbBrowseNewTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseNewTable");
     CHECK_SET_ERR(NULL != tbBrowseNewTable, "tbBrowseNewTable is NULL");
-    CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled");
+    CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled for murine_1");
 
     rbUseAutoTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbUseAutoTable");
     CHECK_SET_ERR(NULL != rbUseAutoTable, "rbUseAutoTable is NULL");
-    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
+    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible  for murine_1");
 
 //    8. Select "Create new table" option. Check if destination table widgets are enabled or disabled.
     GTWidget::click(os, GTWidget::findWidget(os, "rbCreateNewTable"));
@@ -3218,13 +3221,13 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //        New table lineedit - enabled
 //        New table browse button - enabled
 //        Auto table radio button - invisible
-    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
-    CHECK_SET_ERR(!cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly enabled");
-    CHECK_SET_ERR(!tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly enabled");
-    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
-    CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled");
-    CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled");
-    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
+    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled for murine_2");
+    CHECK_SET_ERR(!cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly enabled for murine_2");
+    CHECK_SET_ERR(!tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly enabled for murine_2");
+    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled for murine_2");
+    CHECK_SET_ERR(leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly disabled  for murine_2");
+    CHECK_SET_ERR(tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly disabled  for murine_2");
+    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible for murine_2");
 
 //    9. Select "Existing table" option. Check if destination table widgets are enabled or disabled.
     GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton*>(os, "rbExistingTable"));
@@ -3238,13 +3241,13 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //        New table lineedit - disabled
 //        New table browse button - disabled
 //        Auto table radio button - invisible
-    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
-    CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disabled");
-    CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disabled");
-    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled");
-    CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled");
-    CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled");
-    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible");
+    CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled for murine_3");
+    CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disabled for murine_3");
+    CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disabled for murine_3");
+    CHECK_SET_ERR(rbCreateNewTable->isEnabled(), "rbCreateNewTable is unexpectedly disabled for murine_3");
+    CHECK_SET_ERR(!leNewTablePath->isEnabled(), "leNewTablePath is unexpectedly enabled for murine_3");
+    CHECK_SET_ERR(!tbBrowseNewTable->isEnabled(), "tbBrowseNewTable is unexpectedly enabled for murine_3");
+    CHECK_SET_ERR(!rbUseAutoTable->isVisible(), "rbUseAutoTable is unexpectedly visible for murine_3");
 
 //    10. Open "Annotation parameters" group. Check "Use pattern name" checkbox state.
     GTUtilsOptionPanelSequenceView::openAnnotationParametersShowHideWidget(os);
@@ -3253,8 +3256,8 @@ GUI_TEST_CLASS_DEFINITION(test_0040) {
 //    Expected state: it is visible and enabled.
     chbUsePatternNames = GTWidget::findExactWidget<QCheckBox *>(os, "chbUsePatternNames");
     CHECK_SET_ERR(NULL != chbUsePatternNames, "chbUsePatternNames is NULL");
-    CHECK_SET_ERR(chbUsePatternNames->isVisible(), "chbUsePatternNames is unexpectedly invisible");
-    CHECK_SET_ERR(chbUsePatternNames->isEnabled(), "chbUsePatternNames is unexpectedly disabled");
+    CHECK_SET_ERR(chbUsePatternNames->isVisible(), "chbUsePatternNames is unexpectedly invisible for murine");
+    CHECK_SET_ERR(chbUsePatternNames->isEnabled(), "chbUsePatternNames is unexpectedly disabled for murine");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0041) {
@@ -3409,6 +3412,103 @@ GUI_TEST_CLASS_DEFINITION(test_0043) {
                   .arg("test_0043_2 description").arg(description));
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0044) {
+/* 1. Open "_common_data/genbank/1seq.gen".
+ * 2. Try to add annotation to opened file
+ * Expected state: option is avaliable and no errors showed
+*/
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            setAnnotationName(os, "test_0044", dialog);
+            setGenbankLocation(os, "10..20", dialog);
+            QRadioButton *rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable");
+            CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
+            CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
+
+            QComboBox *cbExistingTable = GTWidget::findExactWidget<QComboBox *>(os, "cbExistingTable");
+            CHECK_SET_ERR(NULL != cbExistingTable, "cbExistingTable is NULL");
+            CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disnabled");
+
+            QToolButton *tbBrowseExistingTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseExistingTable");
+            CHECK_SET_ERR(NULL != tbBrowseExistingTable, "tbBrowseExistingTable is NULL");
+            CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disnabled");
+
+            CHECK_SET_ERR(rbExistingTable->isChecked(), "rbExistingTable is unexpectedly unchecked");
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario));
+    openFileAndCallCreateAnnotationDialog(os, testDir + "_common_data/genbank/1seq.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: there is an annotation with type "Misc. Feature".
+    const QString type = GTUtilsAnnotationsTreeView::getAnnotationType(os, "test_0044");
+    CHECK_SET_ERR("Misc. Feature" == type, QString("An unexpected annotation type: expect '%1', got '%2'")
+                  .arg("Misc. Feature").arg(type));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0045) {
+/* 1. Open "_common_data/genbank/70Bp2.gen".
+ * 2. Try to add annotation to both sequences
+ * Expected state: option is avaliable and no errors showed
+*/
+    class Scenario : public CustomScenario {
+        QString annotationName;
+    public:
+        Scenario(QString annotationName) : annotationName(annotationName) {}
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            setAnnotationName(os, annotationName, dialog);
+            setGenbankLocation(os, "10..20", dialog);
+            QRadioButton *rbExistingTable = GTWidget::findExactWidget<QRadioButton *>(os, "rbExistingTable");
+            CHECK_SET_ERR(NULL != rbExistingTable, "rbExistingTable is NULL");
+            CHECK_SET_ERR(rbExistingTable->isEnabled(), "rbExistingTable is unexpectedly disabled");
+
+            QComboBox *cbExistingTable = GTWidget::findExactWidget<QComboBox *>(os, "cbExistingTable");
+            CHECK_SET_ERR(NULL != cbExistingTable, "cbExistingTable is NULL");
+            CHECK_SET_ERR(cbExistingTable->isEnabled(), "cbExistingTable is unexpectedly disnabled");
+
+            QToolButton *tbBrowseExistingTable = GTWidget::findExactWidget<QToolButton *>(os, "tbBrowseExistingTable");
+            CHECK_SET_ERR(NULL != tbBrowseExistingTable, "tbBrowseExistingTable is NULL");
+            CHECK_SET_ERR(tbBrowseExistingTable->isEnabled(), "tbBrowseExistingTable is unexpectedly disnabled");
+
+            CHECK_SET_ERR(rbExistingTable->isChecked(), "rbExistingTable is unexpectedly unchecked");
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/70Bp2.gen");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
+    GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario("test_0045_1")));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "New annotation");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_1"));
+    GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, new Scenario("test_0045_2")));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "New annotation");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: there is an annotation with type "Misc. Feature".
+    QString type = GTUtilsAnnotationsTreeView::getAnnotationType(os, "test_0045_1");
+    CHECK_SET_ERR("Misc. Feature" == type, QString("An unexpected annotation type: expect '%1', got '%2'")
+                  .arg("Misc. Feature").arg(type));
+
+    //Expected state: there is an annotation with type "Misc. Feature".
+    type = GTUtilsAnnotationsTreeView::getAnnotationType(os, "test_0045_2");
+        CHECK_SET_ERR("Misc. Feature" == type, QString("An unexpected annotation type: expect '%1', got '%2'")
+                      .arg("Misc. Feature").arg(type));
+
+}
+
 }   // namespace GUITest_common_scenarios_create_annotation_widget
 
 }   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
index 233c9d0..1ef9b13 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/GTTestsCreateAnnotationWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -74,6 +74,8 @@ GUI_TEST_CLASS_DECLARATION(test_0040)
 GUI_TEST_CLASS_DECLARATION(test_0041)
 GUI_TEST_CLASS_DECLARATION(test_0042)
 GUI_TEST_CLASS_DECLARATION(test_0043)
+GUI_TEST_CLASS_DECLARATION(test_0044)
+GUI_TEST_CLASS_DECLARATION(test_0045)
 
 #undef GUI_TEST_SUITE
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.cpp
index 6365863..b8478bd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,12 +56,12 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     // Expected state:
     //     1) Project view with document "1.gb" has been opened
     GTUtilsDocument::checkDocument(os, "1.gb");
-    //     2) UGENE window titled with text "proj2 UGENE"
+    //     2) UGENE window titled with text "UGENE"
     QString expectedTitle;
 #ifdef Q_OS_MAC
     expectedTitle = "proj2 UGENE";
 #else
-    expectedTitle = "proj2 UGENE - [Start Page]";
+    expectedTitle = "-* UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
index 85f083e..013886c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/edit/GTTestsAnnotationsEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.cpp
index ba1bcaa..aa773d0 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
index 8076d36..b586947 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations/qualifiers/GTTestsAnnotationsQualifiers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.cpp
index e12f0c1..6202c9c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -18,6 +18,7 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
+
 #include <base_dialogs/MessageBoxFiller.h>
 #include "GTTestsAnnotationsImport.h"
 #include <drivers/GTMouseDriver.h>
@@ -36,7 +37,6 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-//#include <QtGui/QApplication>
 #include "primitives/PopupChooser.h"
 #include "runnables/ugene/plugins/dna_export/ImportAnnotationsToCsvFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/EditAnnotationDialogFiller.h"
@@ -65,8 +65,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -93,8 +94,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -121,8 +123,9 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -149,8 +152,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -177,8 +181,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -205,8 +210,9 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -233,8 +239,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -261,8 +268,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -289,8 +297,9 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -317,8 +326,9 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -345,8 +355,9 @@ GUI_TEST_CLASS_DEFINITION(test_0004_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -374,8 +385,9 @@ GUI_TEST_CLASS_DEFINITION(test_0004_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -403,8 +415,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -432,8 +445,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -461,8 +475,9 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -490,8 +505,9 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -518,8 +534,9 @@ GUI_TEST_CLASS_DEFINITION(test_0006_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -546,8 +563,9 @@ GUI_TEST_CLASS_DEFINITION(test_0006_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -574,8 +592,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -602,8 +621,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -630,8 +650,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -658,8 +679,9 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -686,8 +708,9 @@ GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -714,8 +737,9 @@ GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -742,8 +766,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -770,8 +795,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009_1) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
@@ -798,8 +824,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << "import_annotations_from_CSV_file"));
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "se1.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "se1.fa", Qt::RightButton);
 
     GTGlobals::sleep(1000);
     GTUtilsProjectTreeView::findIndex(os, "result.gb");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
index e24978b..2e6149d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/annotations_import/GTTestsAnnotationsImport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.cpp
index 44af43f..2a0dc95 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
index d89a71c..64a9d94 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/circular_view/GTTestsCvGeneral.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
index 5e5b06a..965c896 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
index 821fa4f..4263ddd 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/cloning/GTTestsCloning.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.cpp
index d6bed10..d36058a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
index 288a57b..f429b23 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/document_from_text/GTTestsDocumentFromText.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.cpp
index 157c932..1e29ca9 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
index 58d4f2b..a787c8b 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/dp_view/GTTestsDpView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.cpp
new file mode 100644
index 0000000..b572d0b
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.cpp
@@ -0,0 +1,5647 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <base_dialogs/ColorDialogFiller.h>
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/FontDialogFiller.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTThread.h>
+
+#include <QApplication>
+#include <QList>
+
+#include <U2View/MaEditorNameList.h>
+
+#include "GTTestsMcaEditor.h"
+#include "runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h"
+
+#include "GTUtilsDashboard.h"
+#include "GTUtilsLog.h"
+#include "GTUtilsMcaEditor.h"
+#include "GTUtilsMcaEditorSequenceArea.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
+#include "GTUtilsNotifications.h"
+#include "GTUtilsOptionPanelMca.h"
+#include "GTUtilsOptionPanelMSA.h"
+#include "GTUtilsProject.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsSequenceView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GTUtilsWizard.h"
+#include "GTUtilsWorkflowDesigner.h"
+#include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_mca_editor {
+//using namespace HI
+
+const QString namesOfRow[16] = {"SZYD_Cas9_CR50",
+                                "SZYD_Cas9_CR51",
+                                "SZYD_Cas9_CR52",
+                                "SZYD_Cas9_CR53",
+                                "SZYD_Cas9_CR54",
+                                "SZYD_Cas9_CR55",
+                                "SZYD_Cas9_CR56",
+                                "SZYD_Cas9_CR60",
+                                "SZYD_Cas9_CR61",
+                                "SZYD_Cas9_CR62",
+                                "SZYD_Cas9_CR63",
+                                "SZYD_Cas9_CR64",
+                                "SZYD_Cas9_CR65",
+                                "SZYD_Cas9_CR66",
+                                "SZYD_Cas9_5B70",
+                                "SZYD_Cas9_5B71" };
+
+GUI_TEST_CLASS_DEFINITION(test_0001) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state :
+    //"reference_sanger_reads_alignment.ugenedb" in the Project View with object :
+    //-{'mc' Mapped reads} for multiple chromatogram alignment object in Project View
+    GTUtilsProject::checkProject(os);
+    GTUtilsProjectTreeView::openView(os);
+    bool check = GTUtilsProjectTreeView::checkItem(os, "Mapped reads");
+    CHECK_SET_ERR(check, "'Mapped reads' is not present in the project view");
+
+    //    Expected state : Reference name is  "KM099231" at the editor left corner
+    //    Expected state : 16 reads are present
+    int rows = GTUtilsMcaEditor::getReadsCount(os);
+    CHECK_SET_ERR(rows == 16, QString("Incorrect rows quantity, expected: 16, current: %1").arg(rows));
+    //    16 reads with names "SZYD_Cas9_CR50"..."SZYD_Cas9_CR56", "SZYD_Cas9_CR60"..."SZYD_Cas9_CR66", "SZYD_Cas9_CR70" and "SZYD_Cas9_CR71"
+    QList<QString> rowNames = GTUtilsMcaEditor::getReadsNames(os);
+    foreach(QString rowName, rowNames) {
+        bool checkCurrentName = false;
+        for (int i = 0; i < 16; i++) {
+            QString currentName = namesOfRow[i];
+            if (rowName == currentName) {
+                checkCurrentName = true;
+                break;
+            }
+        }
+        CHECK_SET_ERR(checkCurrentName, QString("Name %1 is missing").arg(rowName));
+    }
+
+    //5. Report with info
+    GTUtilsNotifications::waitForNotification(os, false, "Mapped reads (16)");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //number of filtered sequences with the names: 4
+    GTUtilsNotifications::waitForNotification(os, false, "Filtered by quality (4)");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //No Еrrors in the Log
+    QStringList errors = GTUtilsLog::getErrors(os, GTLogTracer("error"));
+    CHECK_SET_ERR(errors.isEmpty(), QString("Some errors found"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0002) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Uncheck "Add to project" option
+            GTCheckBox::setChecked(os, "addToProjectCheckbox", false);
+
+            //5. Push "..." in "Result aligment"
+            GTLineEdit::setText(os, "outputLineEdit", "...", QApplication::activeModalWidget());
+
+            //6. In "Select output file" dialog set file name "Sanger" in test directory without  extension.ugenedb
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+
+            //7.Push Save
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //Expected state : "Result alignment" is filled <path> / Sanger.ugenedb
+            output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutputContains = output.contains("Sanger.ugenedb");
+            CHECK_SET_ERR(checkOutputContains, QString("incorrect output line"));
+
+            //8. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : No Еrrors in the Log
+    //Be sure that file <path>/Sanger.ugenedb is created on the disk
+    QStringList errors = GTUtilsLog::getErrors(os, GTLogTracer("error"));
+    CHECK_SET_ERR(errors.isEmpty(), QString("Some errors found"));
+
+    //9. Open <path> / "Sanger.ugenedb" in the project
+    GTFileDialog::openFile(os, sandBoxDir + "Sanger.ugenedb");
+
+    //    Expected state :
+    //"reference_sanger_reads_alignment.ugenedb" in the Project View with object :
+    //-{'mc' Aligned reads} for multiple chromatogram alignment object in Project View
+    //    Expected state : Aligment editor has been opened
+    GTUtilsProject::checkProject(os);
+    GTUtilsProjectTreeView::openView(os);
+    //Expected state : Reference name is  "KM099231" at the editor left corner
+
+    //    Expected state : 16 reads are present
+    int rows = GTUtilsMcaEditor::getReadsCount(os);
+    CHECK_SET_ERR(rows == 16, QString("Incorrect rows quantity, expected: 16, current: %1").arg(rows));
+
+    //16 reads with names "SZYD_Cas9_CR50"..."SZYD_Cas9_CR56", "SZYD_Cas9_CR60"..."SZYD_Cas9_CR66", "SZYD_Cas9_5B70" and "SZYD_Cas9_5B71"
+    QList<QString> rowNames = GTUtilsMcaEditor::getReadsNames(os);
+    foreach(QString rowName, rowNames) {
+        bool checkCurrentName = false;
+        for (int i = 0; i < 16; i++) {
+            QString currentName = namesOfRow[i];
+            if (rowName == currentName) {
+                checkCurrentName = true;
+                break;
+            }
+        }
+        CHECK_SET_ERR(checkCurrentName, QString("Name %1 is missing").arg(rowName));
+    }
+
+    //No Еrrors in the Log
+    errors = GTUtilsLog::getErrors(os, GTLogTracer("error"));
+    CHECK_SET_ERR(errors.isEmpty(), QString("Some errors found"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0003) {
+    GTLogTracer logTracer;
+
+    //    1. Select "Tools>Workflow Designer"
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    //    2. Open "Trim and аlign Sanger reads" sample
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //    Expected state: "Trim and Align Sanger Reads" dialog has appered
+            QWidget *wizard = GTWidget::getActiveModalWidget(os);
+            const QString expectedTitle = "Map Sanger Reads to Reference";
+            const QString actualTitle = wizard->windowTitle();
+            CHECK_SET_ERR(expectedTitle == actualTitle, QString("Wizard title is incorrect: expected '%1', got '%2'").arg(expectedTitle).arg(actualTitle));
+
+            GTWidget::click(os, wizard);
+
+            //    3. Select Reference .../test/general/_common_data/sanger/reference.gb
+            GTUtilsWizard::setParameter(os, "Reference", testDir + "_common_data/sanger/reference.gb");
+
+            //    4. Push Next
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    5. On page "Input Sanger reads" add: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files) and click "Next" button
+            QStringList readsList;
+            for (int i = 1; i <= 20; i++) {
+                readsList << testDir + QString("_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsList);
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    6. Push Next on "Trim and Filtering" page
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    7. Push Run on Results page where "alignment.ugenedb" is result database by default
+            const QString expectedResultFileName = "alignment.ugenedb";
+            QString actualResultFileName = GTUtilsWizard::getParameter(os, "Mapped reads file").toString();
+            CHECK_SET_ERR(expectedResultFileName == actualResultFileName, QString("An incorrect result file name: expected '%1', got '%2'")
+                .arg(expectedResultFileName).arg(actualResultFileName));
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario()));
+
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and Map Sanger reads");
+
+    //    Expected state: The workflow task has been finished successfully; "alignment.ugenedb" has created
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList outputFiles = GTUtilsDashboard::getOutputFiles(os);
+    CHECK_SET_ERR(1 == outputFiles.size(), QString("Too many output files, exptected 1, got %1").arg(outputFiles.size()));
+
+    const QString expectedResultFileName = "alignment.ugenedb";
+    const QString actualResultFileName = outputFiles.first();
+    CHECK_SET_ERR(expectedResultFileName == actualResultFileName, QString("An incorrect output file name, exptected '%1', got '%2'")
+        .arg(expectedResultFileName).arg(actualResultFileName));
+
+    //    8. Click to "alignment.ugenedb" on the dashboard.
+    GTUtilsDashboard::clickOutputFile(os, actualResultFileName);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //    Expected state:
+    //        "alignment.ugenedb" in the Project View with object:
+    //        -{[mc] Aligned reads} for multiple chromatogram alignment object in Project View
+    QMap<QString, QStringList> documents = GTUtilsProjectTreeView::getDocuments(os);
+    CHECK_SET_ERR(1 == documents.count(), QString("An incorrect documents count: expected 1, got %1").arg(documents.count()));
+
+    const QString actualDocumentName = documents.keys().first();
+    CHECK_SET_ERR(expectedResultFileName == actualDocumentName, QString("An unexpected document name: expected '%1', got '%2'")
+        .arg(expectedResultFileName).arg(actualDocumentName));
+
+    CHECK_SET_ERR(1 == documents.first().count(), QString("An incorrect objects count in '%1' document: expected 1, got %2")
+        .arg(documents.keys().first()).arg(documents.first().count()));
+
+    const QString expectedObjectName = "[mc] Aligned reads";
+    const QString actualObjectName = documents.first().first();
+    CHECK_SET_ERR(expectedObjectName == actualObjectName, QString("An inexpected object name: expected '%1', got '%2'")
+        .arg(expectedObjectName).arg(actualObjectName));
+
+    //    Expected state: Aligment editor has been opened
+    GTUtilsMcaEditor::getEditorUi(os);
+
+    //    Expected state: Reference name is  "Reference KM099231:" at the editor left corner
+    const QString expectedReferenceLabelText = "Reference KM099231:";
+    const QString actualReferenceLabelText = GTUtilsMcaEditor::getReferenceLabelText(os);
+    CHECK_SET_ERR(expectedReferenceLabelText == actualReferenceLabelText, QString("An unexpected reference label text: expected '%1', got '%2'")
+        .arg(expectedReferenceLabelText).arg(actualReferenceLabelText));
+
+    //    Expected state: "Consensus" is placed under reference name
+    // untestable
+
+    //    Expected state: 16 reads are present
+    const int readsCount = GTUtilsMcaEditor::getReadsCount(os);
+    CHECK_SET_ERR(16 == readsCount, QString("Unexpected count of reads: expected 16, got %1").arg(readsCount));
+
+    //                    8 reads with names "SZYD_Cas9_CR60"..."SZYD_Cas9_CR66" and "SZYD_Cas9_5B71"
+    const QSet<QString> expectedDirectReadsNames = QSet<QString>() << "SZYD_Cas9_5B71"
+        << "SZYD_Cas9_CR60"
+        << "SZYD_Cas9_CR61"
+        << "SZYD_Cas9_CR62"
+        << "SZYD_Cas9_CR63"
+        << "SZYD_Cas9_CR64"
+        << "SZYD_Cas9_CR65"
+        << "SZYD_Cas9_CR66";
+    const QStringList actualDirectReadsNames = GTUtilsMcaEditor::getDirectReadsNames(os);
+    CHECK_SET_ERR(expectedDirectReadsNames == actualDirectReadsNames.toSet(), "Direct reads names are incorrect");
+
+    //                    8 reverse reads with names "SZYD_Cas9_CR50"... "SZYD_Cas9_CR56" and "SZYD_Cas9_5B70"
+    const QSet<QString> expectedReverseComplementReadsNames = QSet<QString>() << "SZYD_Cas9_CR50"
+        << "SZYD_Cas9_CR51"
+        << "SZYD_Cas9_CR52"
+        << "SZYD_Cas9_CR53"
+        << "SZYD_Cas9_CR54"
+        << "SZYD_Cas9_CR55"
+        << "SZYD_Cas9_CR56"
+        << "SZYD_Cas9_5B70";
+    const QStringList actualReverseComplementReadsNames = GTUtilsMcaEditor::getReverseComplementReadsNames(os);
+    CHECK_SET_ERR(expectedReverseComplementReadsNames == actualReverseComplementReadsNames.toSet(), "Reverse complement reads names are incorrect");
+
+    //                    No Еrrors in the Log
+    GTUtilsLog::check(os, logTracer);
+
+    //    9. Close active view
+    GTUtilsMdi::closeActiveWindow(os);
+
+    //    10. Select "Open view" from context menu and select "Open new view: "Alignment Editor" from context view
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Open view" << "Open new view: Alignment Editor", GTGlobals::UseMouse));
+    GTUtilsProjectTreeView::callContextMenu(os, "Aligned reads");
+
+    //    Expected state:  Chromatogram sanger view is opened
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsMcaEditor::getEditorUi(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0004) {
+    //    1. Select "Tools>Workflow Designer"
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    //    2. Open "Trim and аlign Sanger reads" sample
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //    Expected state: "Trim and Align Sanger Reads" dialog has appered
+            QWidget *wizard = GTWidget::getActiveModalWidget(os);
+            const QString expectedTitle = "Map Sanger Reads to Reference";
+            const QString actualTitle = wizard->windowTitle();
+            CHECK_SET_ERR(expectedTitle == actualTitle, QString("Wizard title is incorrect: expected '%1', got '%2'").arg(expectedTitle).arg(actualTitle));
+
+            GTWidget::click(os, wizard);
+
+            //    3. Select Reference .../test/general/_common_data/alphabets/extended_amino_1000.fa
+            GTUtilsWizard::setParameter(os, "Reference", testDir + "_common_data/alphabets/extended_amino_1000.fa");
+
+            //    4. Push Next
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    5. On page "Input Sanger reads" add: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files) and click "Next" button
+            QStringList readsList;
+            for (int i = 1; i <= 20; i++) {
+                readsList << testDir + QString("_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsList);
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    6. Push Next on "Trim and Filtering" page
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    7. Push Run on Results page where "alignment.ugenedb" is result database by default
+            const QString expectedResultFileName = "alignment.ugenedb";
+            QString actualResultFileName = GTUtilsWizard::getParameter(os, "Mapped reads file").toString();
+            CHECK_SET_ERR(expectedResultFileName == actualResultFileName, QString("An incorrect result file name: expected '%1', got '%2'")
+                .arg(expectedResultFileName).arg(actualResultFileName));
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario()));
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and Map Sanger reads");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Error:The input reference sequence 'seq6' contains characters that don't belong to DNA alphabet.
+    GTUtilsLog::checkContainsError(os, trace, QString("The input reference sequence 'seq6' contains characters that don't belong to DNA alphabet."));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  /test/general/_common_data/alphabets/extended_amino_1000.fa
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/alphabets/extended_amino_1000.fa");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Uncheck "Add to project" option
+            GTCheckBox::setChecked(os, "addToProjectCheckbox", false);
+
+            //5. Push "..." in "Result aligment"
+            GTLineEdit::setText(os, "outputLineEdit", "...", QApplication::activeModalWidget());
+
+            //6. In "Select output file" dialog set file name "Sanger" in test directory without  extension.ugenedb
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+
+            //7.Push Save
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //Expected state : "Result alignment" is filled <path> / Sanger.ugenedb
+            output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutputContains = output.contains("Sanger.ugenedb");
+            CHECK_SET_ERR(checkOutputContains, QString("incorrect output line"));
+
+            //8. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Error: The input reference sequence 'seq3' contains characters that don't belong to DNA alphabet.
+    GTUtilsLog::checkContainsError(os, trace, QString("Task {Map Sanger reads to reference} finished with error: The input reference sequence 'seq6' contains characters that don't belong to DNA alphabet."));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0006) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  /test/general/_common_data/alphabets/standard_dna_rna_amino_1000.fa
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/alphabets/standard_dna_rna_amino_1000.fa");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Uncheck "Add to project" option
+            GTCheckBox::setChecked(os, "addToProjectCheckbox", false);
+
+            //5. Push "..." in "Result aligment"
+            GTLineEdit::setText(os, "outputLineEdit", "...", QApplication::activeModalWidget());
+
+            //6. In "Select output file" dialog set file name "Sanger" in test directory without  extension.ugenedb
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+
+            //7.Push Save
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //Expected state : "Result alignment" is filled <path> / Sanger.ugenedb
+            output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutputContains = output.contains("Sanger.ugenedb");
+            CHECK_SET_ERR(checkOutputContains, QString("incorrect output line"));
+
+            //8. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Error: More than one sequence in the reference file:  <path>/alphabets/standard_dna_rna_amino_1000.fa
+    GTUtilsLog::checkContainsError(os, trace, QString("Task {Map Sanger reads to reference} finished with error: More than one sequence in the reference file:"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0007) {
+    //    1. Select "Tools>Workflow Designer"
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    //    2. Open "Trim and аlign Sanger reads" sample
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //    Expected state: "Trim and Align Sanger Reads" dialog has appered
+            QWidget *wizard = GTWidget::getActiveModalWidget(os);
+            const QString expectedTitle = "Map Sanger Reads to Reference";
+            const QString actualTitle = wizard->windowTitle();
+            CHECK_SET_ERR(expectedTitle == actualTitle, QString("Wizard title is incorrect: expected '%1', got '%2'").arg(expectedTitle).arg(actualTitle));
+
+            GTWidget::click(os, wizard);
+
+            //    3. Select Reference .../test/general/_common_data/alphabets/standard_dna_rna_amino_1000.fa
+            GTUtilsWizard::setParameter(os, "Reference", testDir + "_common_data/alphabets/standard_dna_rna_amino_1000.fa");
+
+            //    4. Push Next
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    5. On page "Input Sanger reads" add: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files) and click "Next" button
+            QStringList readsList;
+            for (int i = 1; i <= 20; i++) {
+                readsList << testDir + QString("_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsList);
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    6. Push Next on "Trim and Filtering" page
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    7. Push Run on Results page where "alignment.ugenedb" is result database by default
+            const QString expectedResultFileName = "alignment.ugenedb";
+            QString actualResultFileName = GTUtilsWizard::getParameter(os, "Mapped reads file").toString();
+            CHECK_SET_ERR(expectedResultFileName == actualResultFileName, QString("An incorrect result file name: expected '%1', got '%2'")
+                .arg(expectedResultFileName).arg(actualResultFileName));
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario()));
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and Map Sanger reads");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Error: More than one sequence in the reference file:  <path>/alphabets/standard_dna_rna_amino_1000.fa
+    GTUtilsLog::checkContainsError(os, trace, QString("More than one sequence in the reference file:"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0008) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  /test/general/_common_data/alphabets/standard_dna_rna_1000.fa
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/alphabets/standard_rna_1000.fa");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Uncheck "Add to project" option
+            GTCheckBox::setChecked(os, "addToProjectCheckbox", false);
+
+            //5. Push "..." in "Result aligment"
+            GTLineEdit::setText(os, "outputLineEdit", "...", QApplication::activeModalWidget());
+
+            //6. In "Select output file" dialog set file name "Sanger" in test directory without  extension.ugenedb
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+
+            //7.Push Save
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //Expected state : "Result alignment" is filled <path> / Sanger.ugenedb
+            output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutputContains = output.contains("Sanger.ugenedb");
+            CHECK_SET_ERR(checkOutputContains, QString("incorrect output line"));
+
+            //8. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Error: The input reference sequence 'seq3' contains characters that don't belong to DNA alphabet.
+    GTUtilsLog::checkContainsError(os, trace, QString("Task {Map Sanger reads to reference} finished with error: The input reference sequence 'seq3' contains characters that don't belong to DNA alphabet."));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0009) {
+    //    1. Select "Tools>Workflow Designer"
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    //    2. Open "Trim and аlign Sanger reads" sample
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            //    Expected state: "Trim and Align Sanger Reads" dialog has appered
+            QWidget *wizard = GTWidget::getActiveModalWidget(os);
+            const QString expectedTitle = "Map Sanger Reads to Reference";
+            const QString actualTitle = wizard->windowTitle();
+            CHECK_SET_ERR(expectedTitle == actualTitle, QString("Wizard title is incorrect: expected '%1', got '%2'").arg(expectedTitle).arg(actualTitle));
+
+            GTWidget::click(os, wizard);
+
+            //    3. Select Reference .../test/general/_common_data/alphabets/standard_rna_1000.fa
+            GTUtilsWizard::setParameter(os, "Reference", testDir + "_common_data/alphabets/standard_rna_1000.fa");
+
+            //    4. Push Next
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    5. On page "Input Sanger reads" add: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files) and click "Next" button
+            QStringList readsList;
+            for (int i = 1; i <= 20; i++) {
+                readsList << testDir + QString("_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsList);
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    6. Push Next on "Trim and Filtering" page
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            //    7. Push Run on Results page where "alignment.ugenedb" is result database by default
+            const QString expectedResultFileName = "alignment.ugenedb";
+            QString actualResultFileName = GTUtilsWizard::getParameter(os, "Mapped reads file").toString();
+            CHECK_SET_ERR(expectedResultFileName == actualResultFileName, QString("An incorrect result file name: expected '%1', got '%2'")
+                .arg(expectedResultFileName).arg(actualResultFileName));
+
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTLogTracer trace;
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario()));
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and Map Sanger reads");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Error: The input reference sequence 'seq3' contains characters that don't belong to DNA alphabet.
+    GTUtilsLog::checkContainsError(os, trace, QString("The input reference sequence 'seq3' contains characters that don't belong to DNA alphabet."));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0010) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select "SZYD_Cas9_5B71" read
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+
+    //6. Select position 2120
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+
+    //Expected state : aligned read sequence with chromatogram, black triangle, directed down and right before read name
+    bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_5B71");
+    CHECK_SET_ERR(isChromatogramShown, "Error: alighed read sequence should be displayed with chromatogram")
+
+    //7. Push black triangle
+    GTUtilsMcaEditorSequenceArea::clickCollapseTriangle(os, "SZYD_Cas9_5B71", true);
+
+    //Expected state : now it is white triangle, directed to the right
+    //Alighed read sequence has been displayed without chromatogram
+    isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_5B71");
+    CHECK_SET_ERR(!isChromatogramShown, "Error: alighed read sequence should be displayed without chromatogram")
+
+    //8. Push white triangle
+    GTUtilsMcaEditorSequenceArea::clickCollapseTriangle(os, "SZYD_Cas9_5B71", false);
+
+    //Expected state : now it is black triangle again
+    //Alighed read sequence has been displayed with chromatogram
+    isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_5B71");
+    CHECK_SET_ERR(isChromatogramShown, "Error: alighed read sequence should be displayed with chromatogram")
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0011) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : "Show/Hide Chromatograms" button is in pressed state
+    //All reads are expanded, chromatograms if any are displayed for each reads
+    QList<QString> rows = GTUtilsMcaEditor::getReadsNames(os);
+    foreach(QString row, rows) {
+        bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, row);
+        CHECK_SET_ERR(isChromatogramShown, QString("Error: read %1 should be displayed with chromatogram").arg(row));
+    }
+
+    //5. Push "Show/Hide Chromatograms" button in the main menu
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "chromatograms"));
+
+    //Expected state : "Show/Hide Chromatograms" button is in normal state
+    //All reads are collapsed
+    foreach(QString row, rows) {
+        bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, row);
+        CHECK_SET_ERR(!isChromatogramShown, QString("Error: read %1 should be displayed without chromatogram").arg(row));
+    }
+
+    //6. Push "Show/Hide Chromatograms" button again
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "chromatograms"));
+
+    //All reads are expanded, chromatograms if any are displayed for each reads
+    //Expected state : All reads are expanded, chromatograms(if any) are displayed for each reads
+    foreach(QString row, rows) {
+        bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, row);
+        CHECK_SET_ERR(isChromatogramShown, QString("Error: read %1 should be displayed with chromatogram").arg(row));
+    }
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0012_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select "SZYD_Cas9_5B71" read
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+
+    //6. Select position 2120
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+
+    //7. Push "Show/Hide Trace"combo from context menu
+    //Expected state : Combo with selected "A", "C", "G", "T" items and "Show all" item appeared
+    QList<QStringList> paths;
+    QList<QStringList> onlyLetterPaths;
+    paths.append(QStringList() << "Appearance" << "Show/hide trace" << "A");
+    onlyLetterPaths.append(QStringList() << "Appearance" << "Show/hide trace" << "A");
+    paths.append(QStringList() << "Appearance" << "Show/hide trace" << "C");
+    onlyLetterPaths.append(QStringList() << "Appearance" << "Show/hide trace" << "C");
+    paths.append(QStringList() << "Appearance" << "Show/hide trace" << "G");
+    onlyLetterPaths.append(QStringList() << "Appearance" << "Show/hide trace" << "G");
+    paths.append(QStringList() << "Appearance" << "Show/hide trace" << "T");
+    onlyLetterPaths.append(QStringList() << "Appearance" << "Show/hide trace" << "T");
+    paths.append(QStringList() << "Appearance" << "Show/hide trace" << "Show all");
+    //GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, paths, PopupChecker::CheckOptions(PopupChecker::Exists)));
+    QStringList menuPath;
+    menuPath << "Appearance" << "Show/hide trace";
+    QStringList itemsNames;
+    itemsNames << "A" << "C" << "G" << "T" << "Show all";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, itemsNames, PopupChecker::CheckOptions(PopupChecker::Exists)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //8. Select "A"
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show/hide trace" << "A"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : Green trace vanished from all chromatograms
+
+    //9. Select "C"
+    //Expected state : "A" is unchecked
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    QStringList intermediateCheck;
+    intermediateCheck << "A";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, intermediateCheck, PopupChecker::CheckOptions(PopupChecker::IsUnchecked)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show/hide trace" << "C"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : Blue trace vanished from all chromatograms
+
+    //10. Select "G"
+    //Expected state : "A" and "C"  are unchecked
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    intermediateCheck << "C";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, intermediateCheck, PopupChecker::CheckOptions(PopupChecker::IsUnchecked)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show/hide trace" << "G"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : Grey trace vanished from all chromatograms
+
+    //11. Select "T"
+    //Expected state : "A", "C", "G"  are unchecked
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));\
+    intermediateCheck << "G";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, intermediateCheck, PopupChecker::CheckOptions(PopupChecker::IsUnchecked)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show/hide trace" << "T"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : Red trace vanished from all chromatograms; there are no any traces on the screen
+
+    //12. Select "All"
+    //Expected state : All four traces are restored for all chromatograms
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    intermediateCheck << "T";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, intermediateCheck, PopupChecker::CheckOptions(PopupChecker::IsUnchecked)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show/hide trace" << "Show all"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+
+    //13. Expand combo once more
+    //Expected state : All four letters are checked
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, menuPath, intermediateCheck, PopupChecker::CheckOptions(PopupChecker::IsChecked)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0012_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select "SZYD_Cas9_5B71" read
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+
+    //6. Select position 2120
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+
+    //7. Push "Show/Hide Trace"combo from main menu
+    //Expected state : Combo with selected "A", "C", "G", "T" items and "Show all" item appeared
+    const QStringList menuPath = QStringList() << "Actions" << "Appearance" << "Show/hide trace";
+    const QStringList itemsNames = QStringList() << "A" << "C" << "G" << "T" << "Show all";
+    GTMenu::checkMainMenuItemsState(os, menuPath, itemsNames, PopupChecker::CheckOption(PopupChecker::Exists));
+
+    //8. Select "A"
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show/hide trace" << "A");;
+
+    //Expected state : Green trace vanished from all chromatograms
+
+    //9. Select "C"
+    //Expected state : "A" is unchecked
+    QStringList intermediateCheck = QStringList() << "A";
+    GTMenu::checkMainMenuItemsState(os, menuPath, intermediateCheck, PopupChecker::CheckOption(PopupChecker::IsUnchecked));
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show/hide trace" << "C");;
+
+    //Expected state : Blue trace vanished from all chromatograms
+
+    //10. Select "G"
+    //Expected state : "A" and "C"  are unchecked
+    intermediateCheck << "C";
+    GTMenu::checkMainMenuItemsState(os, menuPath, intermediateCheck, PopupChecker::CheckOption(PopupChecker::IsUnchecked));
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show/hide trace" << "G");;
+
+    //Expected state : Grey trace vanished from all chromatograms
+
+    //11. Select "T"
+    //Expected state : "A", "C", "G"  are unchecked
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    intermediateCheck << "G";
+    GTMenu::checkMainMenuItemsState(os, menuPath, intermediateCheck, PopupChecker::CheckOption(PopupChecker::IsUnchecked));
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show/hide trace" << "T");;
+
+    //Expected state : Red trace vanished from all chromatograms; there are no any traces on the screen
+
+    //12. Select "All"
+    //Expected state : All four traces are restored for all chromatograms
+    intermediateCheck << "T";
+    GTMenu::checkMainMenuItemsState(os, menuPath, intermediateCheck, PopupChecker::CheckOption(PopupChecker::IsUnchecked));
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show/hide trace" << "Show all");;
+
+    //13. Expand combo once more
+    //Expected state : All four letters are checked
+    GTMenu::checkMainMenuItemsState(os, menuPath, intermediateCheck, PopupChecker::CheckOption(PopupChecker::IsChecked));
+
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0013_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select "SZYD_Cas9_CR50" read
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR50");
+
+    //6. Push Remove seuence(s) button on main menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove read"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : the read is deleted
+    QStringList reads = GTUtilsMcaEditor::getReadsNames(os);
+    bool isReadWasDelete = true;
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_CR50") {
+            isReadWasDelete = false;
+        }
+    }
+    CHECK_SET_ERR(isReadWasDelete, "Error: read SZYD_Cas9_CR50 was not delete");
+
+    //7. Select 3 reads using Shift modifier
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B70");
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR51");
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+
+    //8. Push Remove seuence(s) button
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove read"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : 3 reads are deleted
+    //Expected state : No corresponding reads in the map
+    reads = GTUtilsMcaEditor::getReadsNames(os);
+    isReadWasDelete = true;
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_5B70" || read == "SZYD_Cas9_5B71" || read == "SZYD_Cas9_CR51") {
+            isReadWasDelete = false;
+        }
+    }
+    CHECK_SET_ERR(isReadWasDelete, "Error: read SZYD_Cas9_CR50 was not delete");
+
+    //9. Push undo
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state : 3 reads are restored in the same place
+    //Expected state : Map is restored too
+    reads = GTUtilsMcaEditor::getReadsNames(os);
+    int restoreReadsCount = 0;
+    QStringList removedReads;
+    removedReads << "SZYD_Cas9_5B70" << "SZYD_Cas9_5B71" << "SZYD_Cas9_5B70";
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_5B70") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_5B70");
+        }
+        if (read == "SZYD_Cas9_5B71") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_5B71");
+        }
+        if (read == "SZYD_Cas9_CR51") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_CR51");
+        }
+    }
+    CHECK_SET_ERR(restoreReadsCount == 3, QString("Error: read %1 was not restore").arg(removedReads.first()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0013_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select "SZYD_Cas9_CR50" read
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR50");
+
+    //6. Push Remove seuence(s) button on context menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove read");;
+
+    //Expected state : the read is deleted
+    QStringList reads = GTUtilsMcaEditor::getReadsNames(os);
+    bool isReadWasDelete = true;
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_CR50") {
+            isReadWasDelete = false;
+        }
+    }
+    CHECK_SET_ERR(isReadWasDelete, "Error: read SZYD_Cas9_CR50 was not delete");
+
+    //7. Select 3 reads using Shift modifier
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B70");
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR51");
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+
+    //8. Push Remove seuence(s) button
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove read");;
+
+    //Expected state : 3 reads are deleted
+    //Expected state : No corresponding reads in the map
+    reads = GTUtilsMcaEditor::getReadsNames(os);
+    isReadWasDelete = true;
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_5B70" || read == "SZYD_Cas9_5B71" || read == "SZYD_Cas9_CR51") {
+            isReadWasDelete = false;
+        }
+    }
+    CHECK_SET_ERR(isReadWasDelete, "Error: read SZYD_Cas9_CR50 was not delete");
+
+    //9. Push undo
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state : 3 reads are restored in the same place
+    //Expected state : Map is restored too
+    reads = GTUtilsMcaEditor::getReadsNames(os);
+    int restoreReadsCount = 0;
+    QStringList removedReads;
+    removedReads << "SZYD_Cas9_5B70" << "SZYD_Cas9_5B71" << "SZYD_Cas9_5B70";
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_5B70") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_5B70");
+        }
+        if (read == "SZYD_Cas9_5B71") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_5B71");
+        }
+        if (read == "SZYD_Cas9_CR51") {
+            restoreReadsCount++;
+            removedReads.removeOne("SZYD_Cas9_CR51");
+        }
+    }
+    CHECK_SET_ERR(restoreReadsCount == 3, QString("Error: read %1 was not restore").arg(removedReads.first()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0013_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select any symbol  in the "SZYD_Cas9_CR50" read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(5500, 2));
+
+    //6. Push Remove seuence(s) from main or context menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove read");
+
+    //Expected state: the read is deleted
+    QStringList reads = GTUtilsMcaEditor::getReadsNames(os);
+    bool isReadWasDelete = true;
+    foreach(QString read, reads) {
+        if (read == "SZYD_Cas9_CR50") {
+            isReadWasDelete = false;
+        }
+    }
+    CHECK_SET_ERR(isReadWasDelete, "Error: read SZYD_Cas9_CR50 was not delete");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0014) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select vertical slider between reads named and read area
+    //6. Move the slider to the left until part of the name becomes invisible
+    GTUtilsMcaEditorSequenceArea::moveTheBorderBetweenAlignmentAndRead(os, -250);
+    GTUtilsMcaEditorSequenceArea::moveTheBorderBetweenAlignmentAndRead(os, 5);
+
+    //Expected state : Horizontal scrolls bar appears
+    QScrollBar *hscroll = GTWidget::findExactWidget<QScrollBar *>(os, "horizontal_names_scroll");
+    bool isHidden = hscroll->isHidden();
+    CHECK_SET_ERR(!isHidden, "Horizontal scrolls bar not found");
+
+    //7. Move the slider to the right until all names become visible
+    GTUtilsMcaEditorSequenceArea::moveTheBorderBetweenAlignmentAndRead(os, 600);
+    GTUtilsMcaEditorSequenceArea::moveTheBorderBetweenAlignmentAndRead(os, -5);
+
+    //Expected state : Horizontal scrolls bar disappears
+    hscroll = GTWidget::findExactWidget<QScrollBar *>(os, "horizontal_names_scroll");
+    isHidden = hscroll->isHidden();
+    CHECK_SET_ERR(isHidden, "Horizontal scrolls bar is found");
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. In Option panelSelect consensuns mode = Strict
+    GTUtilsOptionPanelMca::setConsensusType(os, "Strict");
+    GTGlobals::sleep();
+
+    //6. Push "Ctrl+Alt+v"
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyClick('v', Qt::AltModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+    GTGlobals::sleep();
+
+    //Expected state : first difference between reference "T" and consensus "G"
+    QString referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    QString consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'G', QString("Incorrect symbols, Expected ref = T, con = G, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+
+    //7. Push "Jump to next variation" button twice
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_mismatch"));
+    GTGlobals::sleep();
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_mismatch"));
+
+    //Expected state : difference between reference "T" and consensus "G"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'G', QString("Incorrect symbols, Expected ref = T, con = G, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+    //8. Push "Jump to next variation" from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to next variation"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : difference between reference "T" and consensus "C"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'C', QString("Incorrect symbols, Expected ref = T, con = C, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+    //9. Push "Jump to next variation" from main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to next variation");
+
+    //Expected state : difference between reference "G" and consensus "A"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'G' && consensusChar[0] == 'A', QString("Incorrect symbols, Expected ref = G, con = G, current ref = %1, cons = %2").arg(referenceChar[0]).arg(consensusChar[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/sanger_01.ab1
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/sanger_01.ab1");
+
+            //3. Select Read: .../test/general/_common_data/sanger/sanger_01.ab1
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils* d = new GTFileDialogUtils(os, testDir + "_common_data/sanger/sanger_01.ab1");
+            GTUtilsDialog::waitForDialog(os, d);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep(5000);
+
+    //5. Push "Ctrl+Alt+v"
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyClick('v', Qt::AltModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //6. Push "Jump to next variation" button
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_mismatch"));
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //7. Push "Jump to next variation" from context menu
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to next variation"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //8. Push "Jump to next variation" from main menu
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to next variation");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0016_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. In Option panelSelect consensuns mode = Strict
+    GTUtilsOptionPanelMca::setConsensusType(os, "Strict");
+    GTGlobals::sleep();
+
+    //6. Push "Ctrl+Alt+Shift+v"
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Alt);
+    GTKeyboardDriver::keyClick('v', Qt::ShiftModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+	GTGlobals::sleep(500);
+
+    //Expected state : first difference between reference "T" and consensus GAP
+    QString referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    QString consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == U2Mca::GAP_CHAR, QString("Incorrect symbols, Expected ref = T, con = GAP, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+    //7. Push "Jump to previous variation" button twice
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_mismatch"));
+    GTGlobals::sleep();
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_mismatch"));
+
+    //Expected state : difference between reference "C" and consensus GAP
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'C' && consensusChar[0] == U2Mca::GAP_CHAR, QString("Incorrect symbols, Expected ref = C, con = GAP, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+    //8. Push "Jump to previous variation" from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to previous variation"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : difference between reference "G" and consensus GAP
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'G' && consensusChar[0] == U2Mca::GAP_CHAR, QString("Incorrect symbols, Expected ref = G, con = GAP, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+
+    //9. Push "Jump to next variation" from main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to previous variation");
+
+    //Expected state : difference between reference "T" and consensus GAP
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == U2Mca::GAP_CHAR, QString("Incorrect symbols, Expected ref = T, con = GAP, current ref = %1, cons = %2").arg(referenceChar[0]).arg(referenceChar[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0016_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/sanger_01.ab1
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/sanger_01.ab1");
+
+            //3. Select Read: .../test/general/_common_data/sanger/sanger_01.ab1
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils* d = new GTFileDialogUtils(os, testDir + "_common_data/sanger/sanger_01.ab1");
+            GTUtilsDialog::waitForDialog(os, d);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep(5000);
+
+    //5. Push "Ctrl+Alt+Shift+v"
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Alt);
+    GTKeyboardDriver::keyClick('v', Qt::ShiftModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+    GTGlobals::sleep();
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //6. Push "Jump to previous variation" button
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_mismatch"));
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //7. Push "Jump to previous variation" from context menu
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to previous variation"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //8. Push "Jump to previous variation" from main menu
+    //Expected state : Notification "There are no variations in the consensus sequence" will be shown
+    GTUtilsNotifications::waitForNotification(os, true, "There are no variations in the consensus sequence");
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to previous variation");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0017_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+#ifndef Q_OS_LINUX
+    //In linux, OS intercept this hotkey
+
+    //5. Push "Ctrl+Alt+a"
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyClick('a', Qt::AltModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+#endif
+
+    //6. Push "Jump to next variation" button
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_ambiguous"));
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //7. Push "Jump to next variation" from context menu
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to next ambiguous character"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //8. Push "Jump to next variation" from main menu
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to next ambiguous character");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0017_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Read: Select Read: .../test/general/_common_data/sanger_read_with_ambiguous/sanger_ambiguous_read.ab1
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils* d = new GTFileDialogUtils(os, testDir + "_common_data/sanger_read_with_ambiguous/sanger_ambiguous_read.ab1");
+            GTUtilsDialog::waitForDialog(os, d);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep(5000);
+
+#ifndef Q_OS_LINUX
+    //In linux, OS intercept this hotkey
+
+    //5. Push Ctrl + Alt + a
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyClick('a', Qt::AltModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+#else
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_ambiguous"));
+#endif
+    GTGlobals::sleep();
+
+    //Expected state : reference "C", consensus "N", read "N"
+    QString referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    QString consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    QPoint readSelection(reg.startPos, 0);
+    char readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'C' && consensusChar[0] == 'N' && readChar == 'N', QString("Incorrect symbols, Expected ref = C, con = N, read = N current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //6. Push "Jump to next ambiguous character" button twice
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_ambiguous"));
+    GTGlobals::sleep();
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "next_ambiguous"));
+
+    //Expected state : reference "C", consensus "M", read "M".
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'C' && consensusChar[0] == 'M' && readChar == 'M', QString("Incorrect symbols, Expected ref = C, con = M, read = M current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //7. Push "Jump to next ambiguous character" button from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to next ambiguous character"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : reference "T", consensus "W", read "W"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'W' && readChar == 'W', QString("Incorrect symbols, Expected ref = T, con = W, read = W current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //8.Push "Jump to next ambiguous character" button from main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to next ambiguous character");
+
+    //Expected state : reference "C", consensus "N", read "N"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'C' && consensusChar[0] == 'N' && readChar == 'N', QString("Incorrect symbols, Expected ref = C, con = N, read = N current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0018_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //5. Push "Ctrl+Alt+Shift+a"
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Alt);
+    GTKeyboardDriver::keyClick('a', Qt::ShiftModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //6. Push "Jump to previous variation" button
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_ambiguous"));
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //7. Push "Jump to next variation" from context menu
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to previous ambiguous character"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //8. Push "Jump to previous variation" from main menu
+    //Expected state : Notification "There are no ambiguous characters in the alignment.
+    GTUtilsNotifications::waitForNotification(os, true, "There are no ambiguous characters in the alignment.");
+
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to previous ambiguous character");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0018_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Read: Select Read: .../test/general/_common_data/sanger_read_with_ambiguous/sanger_ambiguous_read.ab1
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils* d = new GTFileDialogUtils(os, testDir + "_common_data/sanger_read_with_ambiguous/sanger_ambiguous_read.ab1");
+            GTUtilsDialog::waitForDialog(os, d);
+
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep(5000);
+
+    //5. Push "Ctrl+Alt+Shift+a"
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Alt);
+    GTKeyboardDriver::keyClick('a', Qt::ShiftModifier);
+    GTKeyboardDriver::keyRelease(Qt::Key_Alt);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+    GTGlobals::sleep();
+
+    //Expected state: reference "T", consensus "W", read "W"
+    QString referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    QString consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    QPoint readSelection(reg.startPos, 0);
+    char readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'W' && readChar == 'W', QString("Incorrect symbols, Expected ref = T, con = W, read = W current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //6. Push "Jump to previous variation" button twice
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_ambiguous"));
+    GTGlobals::sleep();
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "prev_ambiguous"));
+
+    //Expected state: reference "G", consensus "N", read "N"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'G' && consensusChar[0] == 'N' && readChar == 'N', QString("Incorrect symbols, Expected ref = G, con = N, read = N current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //7. Push "Jump to next variation" from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Navigation" << "Jump to previous ambiguous character"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: reference "C", consensus "N", read "N"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'C' && consensusChar[0] == 'N' && readChar == 'N', QString("Incorrect symbols, Expected ref = C, con = N, read = N current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+
+    //8. Push "Jump to previous variation" from main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Navigation" << "Jump to previous ambiguous character");
+
+    //Expected state: reference "T", consensus "W", read "W"
+    referenceChar = GTUtilsMcaEditorSequenceArea::getSelectedReferenceReg(os);
+    consensusChar = GTUtilsMcaEditorSequenceArea::getSelectedConsensusReg(os);
+    reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    readSelection = QPoint(reg.startPos, 0);
+    readChar = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, readSelection);
+    CHECK_SET_ERR(referenceChar.size() == 1 && consensusChar.size() == 1, QString("Incorrect selection size, Expected ref = 1, cons = 1, Curren ref = %1, cons = %2").arg(QString::number(referenceChar.size())).arg(QString::number(consensusChar.size())));
+    CHECK_SET_ERR(referenceChar[0] == 'T' && consensusChar[0] == 'W' && readChar == 'W', QString("Incorrect symbols, Expected ref = T, con = W, read = W current ref = %1, cons = %2, read = %3").arg(referenceChar[0]).arg(referenceChar[0]).arg(readChar));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0019) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select any read name by mouse
+    QStringList visibleRows = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    QString firstVisibleRow = visibleRows.first();
+    GTUtilsMcaEditor::moveToReadName(os, firstVisibleRow);
+
+    //6. Using 'drag'n drop' move the name in the another place and release mouse button
+    const QRect sequenceNameRect = GTUtilsMcaEditor::getReadNameRect(os, firstVisibleRow);
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, QPoint(sequenceNameRect.center().x() , sequenceNameRect.y() + (2 *sequenceNameRect.height())));
+
+    //Expected state : The read is replaced in another place
+    QStringList newOrederedVisibleRows = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    int size = visibleRows.size();
+    bool isNewOrder = false;
+    for (int i = 0; i < size; i++) {
+        if (visibleRows[i] != newOrederedVisibleRows[i]) {
+            isNewOrder = true;
+            break;
+        }
+    }
+    CHECK_SET_ERR(isNewOrder, "The order was not change");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0021) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select any read
+    QStringList visibleRows = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    QString firstVisibleRow = visibleRows.first();
+    GTUtilsMcaEditor::clickReadName(os, firstVisibleRow);
+    GTGlobals::sleep(500);
+
+    //6. Push Esc
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(500);
+
+    //Expected state : There is no selection
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getSelectedRowsNum(os);
+    CHECK_SET_ERR(reg.length == 0, "Some reads are selected");
+
+    //7. Select any region in the reference
+    GTUtilsMcaEditorSequenceArea::clickToReferencePosition(os, 500);
+    GTGlobals::sleep(500);
+
+    //8. Push Esc
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(500);
+
+    //Expected state : There is no selection
+    U2Region sel = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    CHECK_SET_ERR(sel == U2Region(), "Some reference character is lselected");
+
+    //9. Select any symbol in the read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTGlobals::sleep(500);
+
+    //10. Push Esc
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(500);
+
+    //Expected state : There is no selection
+    QRect selection = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(selection == QRect(), "Some character in alignent is lselected");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0022_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Press Shift + R keys on the keyboard.
+    GTKeyboardDriver::keyClick('R', Qt::ShiftModifier);
+    GTGlobals::sleep();
+
+    //Expected state : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //7. Press a key on the keyboard with another character of the same alphabet (e.g C key).
+    GTKeyboardDriver::keyClick('C');
+    GTGlobals::sleep();
+
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one (e.g 'A' was replaced with 'C').
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'A'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //9. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0022_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'C')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //Expected state: his is character 'C'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the context menu in the sequence area.
+    //Expected state: the menu contains an item "Edit > Replace character/gap".The item is enabled.A hotkey Shift + R is shown nearby.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit" << "Replace character/gap", PopupChecker::CheckOptions(PopupChecker::IsEnabled)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //7. Select the item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace character/gap"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //Expected state : the character is selected in the replacement mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //8. Press a key on the keyboard with another character of the same alphabet (e.g GAP key).
+    GTKeyboardDriver::keyClick(U2Mca::GAP_CHAR);
+    GTGlobals::sleep();
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one (e.g 'C' was replaced with GAP).
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == U2Mca::GAP_CHAR, "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //9. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+
+    //10. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character GAP
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == U2Mca::GAP_CHAR, "Incorrect selected character");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0022_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'C')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //Expected state: his is character 'C'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', QString("Incorrect selected character, expected: C, current: %1").arg(selectedChar));
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the main menu in the sequence area.
+    //Expected state: the menu contains an item "Actions > Edit > Replace character". The item is enabled. A hotkey Shift+R is shown nearby.
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Edit", QStringList() << "Replace character/gap", PopupChecker::CheckOption(PopupChecker::IsEnabled));
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //7. Select the item.
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace character/gap");
+
+    //Expected state : the character is selected in the replacement mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //8. Press a key on the keyboard with another character of the same alphabet (e.g GAP key).
+    GTKeyboardDriver::keyClick(U2Mca::GAP_CHAR);
+    GTGlobals::sleep();
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one (e.g 'C' was replaced with GAP).
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == U2Mca::GAP_CHAR, QString("Incorrect selected character, expected: GAP, current: %1").arg(selectedChar));
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //9. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', QString("Incorrect selected character, expected: C, current: %1").arg(selectedChar));
+
+    //10. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character GAP
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0023_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Press Shift + R keys on the keyboard.
+    GTKeyboardDriver::keyClick('R', Qt::ShiftModifier);
+    GTGlobals::sleep();
+
+    //Expected state : the character is selected in the replacement mode(i.e.the border of the character are drawn using another color and / or bold).
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //7. Press wrong symbol "#"
+    GTKeyboardDriver::keyClick('#');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0023_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'C')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //Expected state: his is character 'C'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep(500);
+
+    //6. Open the context menu in the sequence area.
+    //Expected state: the menu contains an item "Edit > Replace character/gap".The item is enabled.A hotkey Shift + R is shown nearby.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit" << "Replace character/gap", PopupChecker::CheckOptions(PopupChecker::IsEnabled)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    //GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //7. Select the item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Replace character/gap"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep(500);
+
+    //Expected state : the character is selected in the replacement mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //8. Push wrong symbol "!"
+    GTKeyboardDriver::keyClick('!');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0023_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'C')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //Expected state: his is character 'C'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'C', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the main menu in the sequence area.
+    //Expected state: the menu contains an item "Actions > Edit > Replace character". The item is enabled. A hotkey Shift+R is shown nearby.
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Edit", QStringList() << "Replace character/gap", PopupChecker::CheckOption(PopupChecker::IsEnabled));
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2116, 1));
+
+    //7. Select the item.
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace character/gap");
+
+    //Expected state : the character is selected in the replacement mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 1, "Incorrect modification state");
+
+    //8. Push wrong symbol "%"
+    GTKeyboardDriver::keyClick('%');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0024_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Press Shift + I keys on the keyboard.
+    GTKeyboardDriver::keyClick('I', Qt::ShiftModifier);
+    GTGlobals::sleep();
+
+    //Expected state :  the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //7. Press a key on the keyboard with another character of the same alphabet (e.g N key).
+    GTKeyboardDriver::keyClick('N');
+    GTGlobals::sleep();
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //Expected state: Gap column has been inserted in all reads for this coordinate;
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    int y = sel.y();
+    int rowNums = GTUtilsMcaEditorSequenceArea::getNameList(os).size();
+    bool isGapColoumn = true;
+    for (int i = 0; i < rowNums; i++) {
+        if (i == y) {
+            continue;
+        }
+        char ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, QPoint(x, i));
+        if (ch != U2Mca::GAP_CHAR) {
+            isGapColoumn = false;
+            break;
+        }
+    }
+    CHECK_SET_ERR(isGapColoumn, "Unexpected character in the row - not a GAP ");
+
+    //Expected state: Gap has been inserted in the reference;
+    QString refChar = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, x, 1);
+    CHECK_SET_ERR(refChar.size() == 1, "Incorrect reference selection");
+    CHECK_SET_ERR(refChar[0] == U2Mca::GAP_CHAR, "Incorrect reference character");
+
+    //Expected state: consensus  sequence is recomputed according to the settings in the Option Panel
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'N', QString("Incorrect consensus character, expected: N, current: %1").arg(consSel));
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'A'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //9. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0024_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the context menu in the sequence area.
+    //Expected state: the menu contains an item "Edit > Insert character/gap".The item is enabled.A hotkey Shift + R is shown nearby.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit" << "Insert character/gap", PopupChecker::CheckOptions(PopupChecker::IsEnabled)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //7. Select the item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Insert character/gap"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //Expected state : the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //8. Press a key on the keyboard with any character of the same alphabet (e.g "N" key)
+    GTKeyboardDriver::keyClick('N');
+    GTGlobals::sleep();
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //Expected state: Gap column has been inserted in all reads for this coordinate;
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    int y = sel.y();
+    int rowNums = GTUtilsMcaEditorSequenceArea::getNameList(os).size();
+    bool isGapColoumn = true;
+    for (int i = 0; i < rowNums; i++) {
+        if (i == y) {
+            continue;
+        }
+        char ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, QPoint(x, i));
+        if (ch != U2Mca::GAP_CHAR) {
+            isGapColoumn = false;
+            break;
+        }
+    }
+    CHECK_SET_ERR(isGapColoumn, "Unexpected character in the row - not a GAP ");
+
+    //Expected state: Gap has been inserted in the reference;
+    QString refChar = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, x, 1);
+    CHECK_SET_ERR(refChar.size() == 1, "Incorrect reference selection");
+    CHECK_SET_ERR(refChar[0] == U2Mca::GAP_CHAR, "Incorrect reference character");
+
+    //Expected state: consensus  sequence is recomputed according to the settings in the Option Panel
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'N', QString("Incorrect consensus character, expected: N, current: %1").arg(consSel));
+
+    //9. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'A'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //10. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0024_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the main menu in the sequence area.
+    //Expected state: the menu contains an item "Actions > Edit > Insert character/gap". The item is enabled.
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Edit", QStringList() << "Insert character/gap", PopupChecker::CheckOption(PopupChecker::IsEnabled));
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //7. Select the item.
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert character/gap");
+
+    //Expected state : the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //8. Press a key on the keyboard with any character of the same alphabet (e.g "N" key)
+    GTKeyboardDriver::keyClick('N');
+    GTGlobals::sleep();
+
+    //Expected state: Expected result: the original character of the alignment was replaced with the new one
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //Expected state: Gap column has been inserted in all reads for this coordinate;
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    int y = sel.y();
+    int rowNums = GTUtilsMcaEditorSequenceArea::getNameList(os).size();
+    bool isGapColoumn = true;
+    for (int i = 0; i < rowNums; i++) {
+        if (i == y) {
+            continue;
+        }
+        char ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, QPoint(x, i));
+        if (ch != U2Mca::GAP_CHAR) {
+            isGapColoumn = false;
+            break;
+        }
+    }
+    CHECK_SET_ERR(isGapColoumn, "Unexpected character in the row - not a GAP ");
+
+    //Expected state: Gap has been inserted in the reference;
+    QString refChar = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, x, 1);
+    CHECK_SET_ERR(refChar.size() == 1, "Incorrect reference selection");
+    CHECK_SET_ERR(refChar[0] == U2Mca::GAP_CHAR, "Incorrect reference character");
+
+    //Expected state: consensus  sequence is recomputed according to the settings in the Option Panel
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'N', QString("Incorrect consensus character, expected: N, current: %1").arg(consSel));
+
+    //9. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected state: This is character 'A'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //10. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: This is character 'C'
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'N', "Incorrect selected character");
+
+    //Expected state: selection is in normal mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0025_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Press Shift + I keys on the keyboard.
+    GTKeyboardDriver::keyClick('I', Qt::ShiftModifier);
+    GTGlobals::sleep();
+
+    //Expected state: the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //7. Press wrong symbol "\"
+    GTKeyboardDriver::keyClick('\\');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0025_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the context menu in the sequence area.
+    //Expected state: the menu contains an item "Edit > Insert character/gap".The item is enabled.A hotkey Shift + I is shown nearby.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit" << "Insert character/gap", PopupChecker::CheckOptions(PopupChecker::IsEnabled)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //7. Select the item.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Insert character/gap"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //Expected state: the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //8. Push wrong symbol "$"
+    GTKeyboardDriver::keyClick('$');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0025_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    GTGlobals::sleep();
+
+    //6. Open the main menu in the sequence area.
+    //Expected state: the menu contains an item "Actions > Edit > Insert character/gap". The item is enabled. A hotkey Shift+I is shown nearby.
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Edit", QStringList() << "Insert character/gap", PopupChecker::CheckOption(PopupChecker::IsEnabled));
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //7. Select the item.
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Insert character/gap");
+
+    //Expected state : the character is selected in the insertion mode.
+    modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 2, "Incorrect modification state");
+
+    //8. Push wrong symbol "@"
+    GTKeyboardDriver::keyClick('@');
+
+    //Expected state: Frame is vanished and error notification appears:
+    GTUtilsNotifications::waitForNotification(os, true, "It is not possible to insert the character into the alignment. Please use a character from DNA extended alphabet (upper-case or lower-case) or the gap character");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0026_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    qint64 refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    GTGlobals::sleep();
+
+    //6. Press Del keys on the keyboard.
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTGlobals::sleep();
+
+    //Expected state: the character is replaced by close character, the sequence is shifted one character to the left
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+    qint64 newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength + 1, "Incorrect row length");
+
+    //Expected state: Consensus sequence is recomputed according to the settings in the Option Panel
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+    //Expected state: Reference sequence is not changed
+    qint64 newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result: 'A' character appeared
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'A', QString("Incorrect consensus character, expected: A, current: %1").arg(consSel));
+
+    //Expected state: the sequence is shifted one character to the right
+    newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength, "Incorrect row length");
+
+    //9. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: the character is replaced by close character
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+
+    //Expected state: the sequence is shifted one character to the left
+    newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0026_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    qint64 refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    GTGlobals::sleep();
+
+    //6. Press "Remove selection" from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove character/gap"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //Expected state: the character is replaced by close character, the sequence is shifted one character to the left
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+    qint64 newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength + 1, "Incorrect row length");
+
+    //Expected state: Consensus sequence is recomputed according to the settings in the Option Panel
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+    //Expected state: Reference sequence is not changed
+    qint64 newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result: 'A' character appeared
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'A', QString("Incorrect consensus character, expected: A, current: %1").arg(consSel));
+
+    //Expected state: the sequence is shifted one character to the right
+    newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength, "Incorrect row length");
+
+    //9. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: the character is replaced by close character
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+
+    //Expected state: the sequence is shifted one character to the left
+    newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0026_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one character in the ane read (e.g. this is character 'A')
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2118, 1));
+
+    //Expected state: his is character 'A'
+    char selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected state: the character is selected in the normal mode(i.e.borders of the character are drawn using a dashed line).
+    short modState = GTUtilsMcaEditorSequenceArea::getCharacterModificationMode(os);
+    CHECK_SET_ERR(modState == 0, "Incorrect modification state");
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    qint64 refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    GTGlobals::sleep();
+
+    //6. Press "Remove character/gap" from main
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove character/gap");
+    GTGlobals::sleep();
+
+    //Expected state: the character is replaced by close character, the sequence is shifted one character to the left
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+    qint64 newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength + 1, "Incorrect row length");
+
+    //Expected state: Consensus sequence is recomputed according to the settings in the Option Panel
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    int x = sel.x();
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+    //Expected state: Reference sequence is not changed
+    qint64 newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result: 'A' character appeared
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'A', "Incorrect selected character");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'A', QString("Incorrect consensus character, expected: A, current: %1").arg(consSel));
+
+    //Expected state: the sequence is shifted one character to the right
+    newRowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(rowLength == newRowLength, "Incorrect row length");
+
+    //9. Push Redo (Ctrl+Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected state: the character is replaced by close character
+    selectedChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(selectedChar == 'G', "Incorrect selected character");
+
+    //Expected state: the sequence is shifted one character to the left
+    newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLength == newRefLength, "Error: reference length was changed");
+
+    //Expected result: consensus  sequence is restored
+    sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    x = sel.x();
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(x, 1));
+    CHECK_SET_ERR(consSel.size() == 1, "Incorrect consensus selection");
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Incorrect consensus character, expected: G, current: %1").arg(consSel));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0027_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Find the column, composed by gaps exept one symbol in the row
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2071, 1));
+    GTGlobals::sleep();
+
+    //6. Replace this symbol by gap
+    GTKeyboardDriver::keyClick('R', Qt::ShiftModifier);
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(U2Mca::GAP_CHAR);
+    GTGlobals::sleep(1000);
+
+    //7. Press Shift + Delete
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTGlobals::sleep(1000);
+
+    //Expected state: Gap column is vanished
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    QString refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    char rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result : gap column was restored
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == U2Mca::GAP_CHAR, QString("Invalid reference selected character, expected: GAP, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == U2Mca::GAP_CHAR, QString("Invalid row selected character, expected: GAP, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == U2Mca::GAP_CHAR, QString("Invalid consensus selected character, expected: GAP, current: %1").arg(consSel[0]))
+
+    //9. Push Redo(Ctrl + Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected result : Gap column is vanished
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0027_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Find the column, composed by gaps exept one symbol in the row
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2071, 1));
+    GTGlobals::sleep();
+
+    //6. Replace this symbol by gap
+    GTKeyboardDriver::keyClick('R', Qt::ShiftModifier);
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(U2Mca::GAP_CHAR);
+    GTGlobals::sleep(1000);
+
+    //7. Press "Remove all columns of gaps" from context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove all columns of gaps"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    //Expected state: Gap column is vanished
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    QString refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    char rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result : gap column was restored
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == U2Mca::GAP_CHAR, QString("Invalid reference selected character, expected: GAP, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == U2Mca::GAP_CHAR, QString("Invalid row selected character, expected: GAP, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == U2Mca::GAP_CHAR, QString("Invalid consensus selected character, expected: GAP, current: %1").arg(consSel[0]))
+
+    //9. Push Redo(Ctrl + Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected result : Gap column is vanished
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0027_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Find the column, composed by gaps exept one symbol in the row
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2071, 1));
+    GTGlobals::sleep();
+
+    //6. Replace this symbol by gap
+    GTKeyboardDriver::keyClick('R', Qt::ShiftModifier);
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(U2Mca::GAP_CHAR);
+    GTGlobals::sleep(1000);
+
+    //7. Press "Remove all columns of gaps" from main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove all columns of gaps");
+    GTGlobals::sleep();
+
+    //Expected state: Gap column is vanished
+    QRect sel = GTUtilsMcaEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    QString refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    char rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    QString consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+
+    //8. Push Undo (Ctrl+Z)
+    GTUtilsMcaEditor::undo(os);
+    GTGlobals::sleep();
+
+    //Expected result : gap column was restored
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == U2Mca::GAP_CHAR, QString("Invalid reference selected character, expected: GAP, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == U2Mca::GAP_CHAR, QString("Invalid row selected character, expected: GAP, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == U2Mca::GAP_CHAR, QString("Invalid consensus selected character, expected: GAP, current: %1").arg(consSel[0]))
+
+    //9. Push Redo(Ctrl + Y)
+    GTUtilsMcaEditor::redo(os);
+
+    //Expected result : Gap column is vanished
+    CHECK_SET_ERR(sel.width() == 1 && sel.height() == 1, "Incorrect selection after gaps column removing");
+    refSel = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, sel.x(), 1);
+    CHECK_SET_ERR(refSel[0] == 'G', QString("Invalid reference selected character, expected: G, current: %1").arg(refSel[0]));
+    rowChar = GTUtilsMcaEditorSequenceArea::getSelectedReadChar(os);
+    CHECK_SET_ERR(rowChar == 'G', QString("Invalid row selected character, expected: G, current: %1").arg(rowChar));
+    consSel = GTUtilsMcaEditorSequenceArea::getConsensusStringByRegion(os, U2Region(sel.x(), 1));
+    CHECK_SET_ERR(consSel[0] == 'G', QString("Invalid consensus selected character, expected: G, current: %1").arg(consSel[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0028) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one symbol in the read
+    QPoint point(2218, 1);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, point);
+    GTGlobals::sleep();
+
+    //6. Push Space key
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+    GTGlobals::sleep();
+
+    //Expected state : Gap is inserted before symbol
+    char ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, point);
+    CHECK_SET_ERR(ch == U2Mca::GAP_CHAR, QString("Incorrect character, expected GAP, current %1").arg(ch));
+
+    //7. Push Васkspace key
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace);
+    GTGlobals::sleep();
+
+    //Expected state : Gap is removed
+    ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, point);
+    CHECK_SET_ERR(ch == 'T', QString("Incorrect character, expected T, current %1").arg(ch));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0029) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select one symbol in the read
+    QPoint point(2218, 1);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, point);
+    GTGlobals::sleep();
+    QPoint startMousePosotion = GTMouseDriver::getMousePosition();
+
+    //6. Move mouse with pressed left button to the right on one position
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, QPoint(startMousePosotion.x() + 20, startMousePosotion.y()));
+    GTGlobals::sleep();
+
+    //Expected state: Gap is inserted before symbol
+    char ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, point);
+    CHECK_SET_ERR(ch == U2Mca::GAP_CHAR, QString("Incorrect character, expected GAP, current %1").arg(ch));
+
+    //7. Move mouse with pressed left button to the left on one position
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, startMousePosotion);
+    GTGlobals::sleep();
+
+    //Expected state : Gap is removed
+    ch = GTUtilsMcaEditorSequenceArea::getReadCharByPos(os, point);
+    CHECK_SET_ERR(ch == 'T', QString("Incorrect character, expected T, current %1").arg(ch));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0030) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    int startRowHeinght = GTUtilsMcaEditorSequenceArea::getRowHeight(os, 0);
+
+    //5. Push Zoom In
+    GTUtilsMcaEditor::zoomIn(os);
+    GTGlobals::sleep();
+
+    //Expected state : All Characters increased in size
+    int currentRowHeight = GTUtilsMcaEditorSequenceArea::getRowHeight(os, 0);
+    CHECK_SET_ERR(startRowHeinght < currentRowHeight, QString("Unexpected row height, must be higher then start height == %1, current %2").
+                                                                                                    arg(QString::number(startRowHeinght)).
+                                                                                                    arg(QString::number(currentRowHeight)));
+
+    //6. Push Zoom out
+    GTUtilsMcaEditor::zoomOut(os);
+    GTGlobals::sleep();
+
+    //Expected state : All Characters reduced in size
+    currentRowHeight = GTUtilsMcaEditorSequenceArea::getRowHeight(os, 0);
+    CHECK_SET_ERR(startRowHeinght == currentRowHeight, QString("Unexpected row height, must be equal start height == %1, current %2").
+                                                                                                    arg(QString::number(startRowHeinght)).
+                                                                                                    arg(QString::number(currentRowHeight)));
+
+    //7. Push Zoom In 2 times
+    GTUtilsMcaEditor::zoomIn(os);
+    GTGlobals::sleep(1000);
+    GTUtilsMcaEditor::zoomIn(os);
+    GTGlobals::sleep();
+
+    //Expected state : All Characters increased in size
+    currentRowHeight = GTUtilsMcaEditorSequenceArea::getRowHeight(os, 0);
+    CHECK_SET_ERR(startRowHeinght < currentRowHeight, QString("Unexpected row height, must be higher then start height == %1, current %2").
+                                                                                                    arg(QString::number(startRowHeinght)).
+                                                                                                    arg(QString::number(currentRowHeight)));
+
+    //8. Push Reset Zoom
+    GTUtilsMcaEditor::resetZoom(os);
+    GTGlobals::sleep();
+
+    //Expected state : All Characters reduced in size
+    currentRowHeight = GTUtilsMcaEditorSequenceArea::getRowHeight(os, 0);
+    CHECK_SET_ERR(startRowHeinght == currentRowHeight, QString("Unexpected row height, must be equal start height == %1, current %2").
+        arg(QString::number(startRowHeinght)).
+        arg(QString::number(currentRowHeight)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0033) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Push General button
+    GTUtilsOptionPanelMca::openTab(os, GTUtilsOptionPanelMca::General);
+    GTGlobals::sleep();
+
+    //Expected state :Sequence number: 16
+    int height = GTUtilsOptionPanelMca::getHeight(os);
+    CHECK_SET_ERR(height == 16, QString("Incorrect height, expected: 16, current: %1").arg(QString::number(height)));
+    GTGlobals::sleep();
+
+    //Expected state: Reference length: 11937
+    int length = GTUtilsOptionPanelMca::getLength(os);
+    CHECK_SET_ERR(length == 11933, QString("Incorrect length, expected: 11937, current: %1").arg(QString::number(length)))
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0034) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5.Push "Consensus" button
+    GTUtilsOptionPanelMca::openTab(os, GTUtilsOptionPanelMca::Consensus);
+
+    //Expected state :"Consenus mode" is expanded
+    bool isTabOpen = GTUtilsOptionPanelMca::isTabOpened(os, GTUtilsOptionPanelMca::Consensus);
+    CHECK_SET_ERR(isTabOpen, "Consensus tab is not open");
+
+    //Expected state :"Simple extended" by default (combo with 2 values: "Simple extended" and "Strict")
+    QStringList types = GTUtilsOptionPanelMca::getConsensusTypes(os);
+    bool hasMembers = true;
+    foreach(const QString& type, types) {
+        if (type != "Simple extended" && type != "Strict") {
+            hasMembers = false;
+        }
+    }
+    CHECK_SET_ERR(hasMembers, "There are no some consensus types");
+
+    //Expected state :Threshold = 100 % (can be changed)
+    int threshold = GTUtilsOptionPanelMca::getThreshold(os);
+    CHECK_SET_ERR(threshold == 100, QString("Unexpected threshold, expected: 100, current^ %1").arg(QString::number(threshold)));
+
+    //6. Set Threshold = 50 %
+    GTUtilsOptionPanelMca::setThreshold(os, 50);
+    GTGlobals::sleep();
+
+    //7. Push "Reset to default value"
+    GTUtilsOptionPanelMca::pushResetButton(os);
+    GTGlobals::sleep();
+
+    //Expected state : Threshold = 100 %
+    threshold = GTUtilsOptionPanelMca::getThreshold(os);
+    CHECK_SET_ERR(threshold == 100, QString("Unexpected threshold, expected: 100, current^ %1").arg(QString::number(threshold)));
+
+    //8. Collapse "Consenus mode"
+    GTUtilsOptionPanelMca::closeTab(os, GTUtilsOptionPanelMca::Consensus);
+
+    //Expected state : "Consenus mode" is collapsed
+    isTabOpen = GTUtilsOptionPanelMca::isTabOpened(os, GTUtilsOptionPanelMca::Consensus);
+    CHECK_SET_ERR(!isTabOpen, "Consensus tab is open");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0038) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: Aligned Reads Map is in the bottom screen by default. Show / Hide overview button is in pressed state
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Appearance", QStringList() << "Show overview", PopupChecker::CheckOption(PopupChecker::IsChecked));
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(200);
+
+    //5. Push Show / Hide overview button on the main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Appearance" << "Show overview");
+
+    //Expected state: There are no map on the screen. Show / Hide overview button is is in released state
+   // simple = GTWidget::findWidget(os, "mca_overview_area_sanger");
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Appearance", QStringList() << "Show overview", PopupChecker::CheckOption(PopupChecker::IsUnchecked));
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(200);
+
+    //6. Close editor and open it again(map state should be saved)
+
+    //Expected state: There is no map on the screen
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0039) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : Aligned Reads Map is in the bottom screen by default
+    GTMenu::checkMainMenuItemsState(os, QStringList() << "Actions" << "Appearance", QStringList() << "Show overview", PopupChecker::CheckOption(PopupChecker::IsChecked));
+    GTGlobals::sleep(200);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
+    GTGlobals::sleep(200);
+
+    //5. Select transparent square  and move it by mouse  down
+    QWidget* simple = GTWidget::findWidget(os, "mca_overview_area_sanger");
+    GTWidget::click(os, simple);
+    QStringList list = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    QPoint p = GTMouseDriver::getMousePosition();
+    QPoint rightP(p.x(), p.y() + 50);
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, rightP);
+    GTGlobals::sleep();
+
+    //Еxpected state : Alighed reads area moved down
+    QStringList listOne = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    CHECK_SET_ERR(list != listOne, "Visible area not change");
+
+    //6. Move it by mouse up
+    QPoint leftP(p.x(), p.y() - 50);
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, leftP);
+
+    //Еxpected state : Alighed reads area moved up
+    QStringList listTwo = GTUtilsMcaEditorSequenceArea::getVisibleNames(os);
+    CHECK_SET_ERR(list != listTwo, "Visible area not change");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0040_1) {
+    QString filePath = testDir + "_common_data/sanger/alignment.ugenedb";
+    QString fileName = "sanger_alignment.ugenedb";
+
+    GTFile::copy(os, filePath, sandBoxDir + "/" + fileName);
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+
+    // chrom show/hide
+    QAbstractButton* showChromsButton = GTAction::button(os, "chromatograms");
+    CHECK_SET_ERR(showChromsButton != NULL, "show/hide chromatograms button was not found");
+    GTWidget::click(os, showChromsButton);
+    bool chromCheckedState = showChromsButton->isChecked();
+
+    // overview show/hide
+    QAbstractButton* showOverviewButton = GTAction::button(os, "overview");
+    CHECK_SET_ERR(showOverviewButton != NULL, "overview button was not found");
+    GTWidget::click(os, showOverviewButton);
+    bool overviewCheckedState = showOverviewButton->isChecked();
+
+    // offsets show/hide
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Show offsets"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+
+    QAction* offsetAction = GTUtilsMcaEditor::getOffsetAction(os);
+    bool offsetCheckedState = offsetAction->isChecked();
+
+    // close the view
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
+    GTUtilsProjectTreeView::click(os, "sanger_alignment.ugenedb", Qt::RightButton);
+    GTGlobals::sleep();
+
+    // open the view again
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+
+    // check saved states
+    showChromsButton = GTAction::button(os, "chromatograms");
+    CHECK_SET_ERR(showChromsButton != NULL, "show/hide chromatograms button was not found");
+    CHECK_SET_ERR(chromCheckedState == showChromsButton->isChecked(), "Show/hide chromatograms button state was not saved");
+
+    showOverviewButton = GTAction::button(os, "overview");
+    CHECK_SET_ERR(showOverviewButton != NULL, "overview button was not found");
+    CHECK_SET_ERR(overviewCheckedState == showOverviewButton->isChecked(), "Show/hide overview button state was not saved");
+
+    offsetAction = GTUtilsMcaEditor::getOffsetAction(os);
+    CHECK_SET_ERR(offsetAction != NULL, "overview button was not found");
+    CHECK_SET_ERR(offsetCheckedState == offsetAction->isChecked(), "Show/hide offset button state was not saved");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0040_2) {
+    QString filePath = testDir + "_common_data/sanger/alignment.ugenedb";
+    QString fileName = "sanger_alignment.ugenedb";
+
+    GTFile::copy(os, filePath, sandBoxDir + "/" + fileName);
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+
+    // cons type and threshold
+    GTUtilsOptionPanelMca::setConsensusType(os, "Strict");
+    GTUtilsOptionPanelMca::setThreshold(os, 57);
+
+    // close the view with ugenedb
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
+    GTUtilsProjectTreeView::click(os, "sanger_alignment.ugenedb", Qt::RightButton);
+    GTGlobals::sleep();
+
+    // open COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
+    GTGlobals::sleep();
+
+    QComboBox *consensusCombo = qobject_cast<QComboBox*>(GTWidget::findWidget(os,"consensusType"));
+    CHECK_SET_ERR(consensusCombo!=NULL, "consensusCombo is NULL");
+    GTComboBox::setIndexWithText(os,consensusCombo, "Levitsky");
+
+    QSpinBox *thresholdSpinBox = qobject_cast<QSpinBox*>(GTWidget::findWidget(os,"thresholdSpinBox"));
+    CHECK_SET_ERR(thresholdSpinBox!=NULL, "consensusCombo is NULL");
+    GTSpinBox::setValue(os,thresholdSpinBox, 68, GTGlobals::UseKeyBoard);
+
+    // close the view with COI
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
+    GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
+    GTGlobals::sleep();
+
+    // open ugenedb and check consensus settings
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+    CHECK_SET_ERR(GTUtilsOptionPanelMca::getConsensusType(os) == "Strict", "Consensus algorithm type for MCA was not saved");
+    CHECK_SET_ERR(GTUtilsOptionPanelMca::getThreshold(os) == 57, "Consensus threshold for MCA was not saved");
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
+    GTUtilsProjectTreeView::click(os, "sanger_alignment.ugenedb", Qt::RightButton);
+
+    // open COI.aln and check consensus settings
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
+    GTGlobals::sleep();
+    consensusCombo = qobject_cast<QComboBox*>(GTWidget::findWidget(os,"consensusType"));
+    GTComboBox::checkCurrentValue(os, consensusCombo, "Levitsky");
+    CHECK_SET_ERR(GTUtilsOptionPanelMsa::getThreshold(os) == 68, "Consensus threshold for MSA was not saved");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0040_3) {
+    QString filePath = testDir + "_common_data/sanger/alignment.ugenedb";
+    QString fileName = "sanger_alignment.ugenedb";
+
+    GTFile::copy(os, filePath, sandBoxDir + "/" + fileName);
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+
+    GTUtilsDialog::waitForDialog(os, new FontDialogFiller(os));
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Appearance" << "Change characters font..."));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+
+    ScaleBar* scaleBar = GTWidget::findExactWidget<ScaleBar*>(os, "peak_height_slider");
+
+    QAbstractButton* plusButton = scaleBar->getPlusButton();
+    GTWidget::click(os, plusButton);
+    GTWidget::click(os, plusButton);
+    GTWidget::click(os, plusButton);
+    GTWidget::click(os, plusButton);
+    GTWidget::click(os, plusButton);
+
+    int peakHight = scaleBar->value();
+
+    // close ugenedb
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__remove_selected_action"));
+    GTUtilsProjectTreeView::click(os, "sanger_alignment.ugenedb", Qt::RightButton);
+    GTGlobals::sleep();
+
+    GTFileDialog::openFile(os, sandBoxDir, fileName);
+    scaleBar = GTWidget::findExactWidget<ScaleBar*>(os, "peak_height_slider");
+    CHECK_SET_ERR(scaleBar->value() == peakHight, "Peak height was not saved");
+}
+
+} //namespace GUITest_common_scenarios_mca_editor
+
+} //namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.h b/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.h
new file mode 100644
index 0000000..ddb96ac
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/mca_editor/GTTestsMcaEditor.h
@@ -0,0 +1,95 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef GTTESTSMCAEDITOR_H
+#define GTTESTSMCAEDITOR_H
+
+#include <U2Test/UGUITestBase.h>
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_mca_editor {
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_mca_editor"
+
+GUI_TEST_CLASS_DECLARATION(test_0001)
+GUI_TEST_CLASS_DECLARATION(test_0002)
+GUI_TEST_CLASS_DECLARATION(test_0003)
+GUI_TEST_CLASS_DECLARATION(test_0004)
+GUI_TEST_CLASS_DECLARATION(test_0005)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+GUI_TEST_CLASS_DECLARATION(test_0007)
+GUI_TEST_CLASS_DECLARATION(test_0008)
+GUI_TEST_CLASS_DECLARATION(test_0009)
+GUI_TEST_CLASS_DECLARATION(test_0010)
+GUI_TEST_CLASS_DECLARATION(test_0011)
+GUI_TEST_CLASS_DECLARATION(test_0012_1)
+GUI_TEST_CLASS_DECLARATION(test_0012_2)
+GUI_TEST_CLASS_DECLARATION(test_0013_1)
+GUI_TEST_CLASS_DECLARATION(test_0013_2)
+GUI_TEST_CLASS_DECLARATION(test_0013_3)
+GUI_TEST_CLASS_DECLARATION(test_0014)
+GUI_TEST_CLASS_DECLARATION(test_0015_1)
+GUI_TEST_CLASS_DECLARATION(test_0015_2)
+GUI_TEST_CLASS_DECLARATION(test_0016_1)
+GUI_TEST_CLASS_DECLARATION(test_0016_2)
+GUI_TEST_CLASS_DECLARATION(test_0017_1)
+GUI_TEST_CLASS_DECLARATION(test_0017_2)
+GUI_TEST_CLASS_DECLARATION(test_0018_1)
+GUI_TEST_CLASS_DECLARATION(test_0018_2)
+GUI_TEST_CLASS_DECLARATION(test_0019)
+GUI_TEST_CLASS_DECLARATION(test_0021)
+GUI_TEST_CLASS_DECLARATION(test_0022_1)
+GUI_TEST_CLASS_DECLARATION(test_0022_2)
+GUI_TEST_CLASS_DECLARATION(test_0022_3)
+GUI_TEST_CLASS_DECLARATION(test_0023_1)
+GUI_TEST_CLASS_DECLARATION(test_0023_2)
+GUI_TEST_CLASS_DECLARATION(test_0023_3)
+GUI_TEST_CLASS_DECLARATION(test_0024_1)
+GUI_TEST_CLASS_DECLARATION(test_0024_2)
+GUI_TEST_CLASS_DECLARATION(test_0024_3)
+GUI_TEST_CLASS_DECLARATION(test_0025_1)
+GUI_TEST_CLASS_DECLARATION(test_0025_2)
+GUI_TEST_CLASS_DECLARATION(test_0025_3)
+GUI_TEST_CLASS_DECLARATION(test_0026_1)
+GUI_TEST_CLASS_DECLARATION(test_0026_2)
+GUI_TEST_CLASS_DECLARATION(test_0026_3)
+GUI_TEST_CLASS_DECLARATION(test_0027_1)
+GUI_TEST_CLASS_DECLARATION(test_0027_2)
+GUI_TEST_CLASS_DECLARATION(test_0027_3)
+GUI_TEST_CLASS_DECLARATION(test_0028)
+GUI_TEST_CLASS_DECLARATION(test_0029)
+GUI_TEST_CLASS_DECLARATION(test_0030)
+GUI_TEST_CLASS_DECLARATION(test_0033)
+GUI_TEST_CLASS_DECLARATION(test_0034)
+GUI_TEST_CLASS_DECLARATION(test_0038)
+GUI_TEST_CLASS_DECLARATION(test_0039)
+GUI_TEST_CLASS_DECLARATION(test_0040_1)
+GUI_TEST_CLASS_DECLARATION(test_0040_2)
+GUI_TEST_CLASS_DECLARATION(test_0040_3)
+
+
+#undef GUI_TEST_SUITE
+}//namespace U2
+
+}//namespace
+
+#endif // GTTESTSMCAEDITOR_H
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.cpp
index 642eb76..4de5112 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,66 +19,69 @@
  * MA 02110-1301, USA.
  */
 
-#include <QApplication>
-
-#include "GTTestsMsaEditor.h"
-#include "primitives/GTAction.h"
-#include <primitives/GTComboBox.h>
-#include <primitives/GTCheckBox.h>
-#include <drivers/GTMouseDriver.h>
-#include <drivers/GTKeyboardDriver.h>
-#include "primitives/GTMenu.h"
-#include "system/GTFile.h"
+#include <base_dialogs/ColorDialogFiller.h>
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/FontDialogFiller.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "system/GTClipboard.h"
-#include <primitives/GTToolbar.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
-#include <primitives/GTSpinBox.h>
+#include <primitives/GTMenu.h>
 #include <primitives/GTRadioButton.h>
-#include "api/GTSequenceReadingModeDialogUtils.h"
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTThread.h>
+
+#include <QApplication>
+
+#include <U2Gui/ToolsMenu.h>
+
+#include <U2Test/UGUITest.h>
+
+#include <U2View/ADVConstants.h>
+#include <U2View/MSAEditor.h>
+#include <U2View/MaEditorNameList.h>
+
+#include "GTTestsMsaEditor.h"
+#include "GTUtilsBookmarksTreeView.h"
+#include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
-#include "GTUtilsProjectTreeView.h"
-#include "GTUtilsLog.h"
-#include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsNotifications.h"
+#include "GTUtilsOptionPanelMSA.h"
 #include "GTUtilsProject.h"
+#include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsOptionPanelMSA.h"
-#include <base_dialogs/DefaultDialogFiller.h>
-#include <base_dialogs/ColorDialogFiller.h>
-#include "primitives/PopupChooser.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include <base_dialogs/FontDialogFiller.h>
-#include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
-#include "runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
-#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExportHighlightedDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportMSA2MSADialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportSelectedSequenceFromAlignmentDialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
+#include "runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
-#include "utils/GTThread.h"
-
-#include <U2Gui/ToolsMenu.h>
-
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
-#include <U2View/ADVConstants.h>
-#include <U2Test/UGUITest.h>
-
+#include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 
 namespace U2 {
 
@@ -123,7 +126,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
-    GTUtilsMdi::click(os, GTGlobals::Maximize);
+    // GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
@@ -142,7 +145,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001_3) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
-    GTUtilsMdi::click(os, GTGlobals::Minimize);
+    // GTUtilsMdi::click(os, GTGlobals::Minimize);
     GTGlobals::sleep();
 
     int length = GTUtilsMSAEditorSequenceArea::getLength(os);
@@ -208,7 +211,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_1) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
 
-    GTUtilsMdi::click(os, GTGlobals::Maximize);
+    // GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
@@ -234,7 +237,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_2) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
-    GTUtilsMdi::click(os, GTGlobals::Maximize);
+    //GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
@@ -259,19 +262,16 @@ GUI_TEST_CLASS_DEFINITION(test_0002_3) {
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "revcompl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(1000);
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     CHECK_SET_ERR(mdiWindow != NULL, "MDI window == NULL");
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "View" << "Show offsets");
-    GTGlobals::sleep();
-    GTGlobals::sleep();
 
     bool offsetsVisible = GTUtilsMSAEditorSequenceArea::offsetsVisible(os);
     CHECK_SET_ERR(offsetsVisible == false, "Offsets are visible");
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTGlobals::sleep();
+    GTGlobals::sleep(1000);
 
     mdiWindow = GTUtilsMdi::activeWindow(os, false);
     CHECK_SET_ERR(mdiWindow == NULL, "There is an MDI window");
@@ -311,7 +311,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002_4) {
     GTMouseDriver::doubleClick();
     GTGlobals::sleep();
 
-    GTUtilsMdi::click(os, GTGlobals::Maximize);
+    //GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_VIEW << "show_offsets"));
@@ -379,7 +379,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003_3) {
     GTGlobals::sleep();
     GTGlobals::sleep();
 
-    GTUtilsMdi::click(os, GTGlobals::Maximize);
+    //GTUtilsMdi::click(os, GTGlobals::Maximize);
     GTGlobals::sleep();
 
     GTUtilsMSAEditorSequenceArea::checkSorted(os);
@@ -402,7 +402,8 @@ GUI_TEST_CLASS_DEFINITION(test_0003_4) {
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTGlobals::sleep(1000);
+    GTGlobals::sleep();
+    GTGlobals::sleep();
 #ifdef Q_OS_MAC
     GTMouseDriver::click();
     GTGlobals::sleep(1000);
@@ -968,31 +969,15 @@ GUI_TEST_CLASS_DEFINITION(test_0007_4) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0008) {
-
 //     1. Open document samples\CLUSTALW\COI.aln
-
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
 
 //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
-    QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("start bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "start bookmark");
 
-    int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
 //     3. Scroll msa to the middle.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 300));
@@ -1000,387 +985,248 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
 //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "middle bookmark");
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("middle bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+    const int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-//
 //     5. Scroll msa to the end.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 550));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
-//     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("end bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     6. Create bookmark. Rename "New bookmark" to "end bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "end bookmark");
 
-    int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
 //     Expected state: clicking on each bookmark will recall corresponding MSA position
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
+    GTGlobals::sleep(500);
 
-    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
+    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    int LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(midRO == RO && midLO == LO, "middle bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets aren't equal to the expected");
 
 //     7. Delete Start bookmark
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::click();
-    GTKeyboardDriver::keyClick(Qt::Key_Delete);
-    GTGlobals::sleep(500);
+    GTUtilsBookmarksTreeView::deleteBookmark(os, "end bookmark");
 
-//     Expected state: start bookmark doesn't present
-    QTreeWidgetItem* start = GTUtilsBookmarksTreeView::findItem(os,"start bookmark", GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(start==NULL, "Start bookmark not deleted");
+//     Expected state: start bookmark isn't present
+    QTreeWidgetItem *startBookmark = GTUtilsBookmarksTreeView::findItem(os, "start bookmark", GTGlobals::FindOptions(false));
+    CHECK_SET_ERR(startBookmark == NULL, "Start bookmark is not deleted");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0008_1) {  //CHANGES: default names used
+//     1. Open document samples\CLUSTALW\COI.aln
 
-    //     1. Open document samples\CLUSTALW\COI.aln
-
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
 
-    //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
-    QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     2. Create bookmark. Do not rename the new bookmark.
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI");
 
-    int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     3. Scroll msa to the middle.
+//     3. Scroll msa to the middle.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 300));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+//     4. Create bookmark. Do not rename the new bookmark.
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI");
 
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+    const int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    //
-    //     5. Scroll msa to the end.
+//     5. Scroll msa to the end.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 550));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
-    //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     6. Create bookmark. Do not rename the new bookmark.
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI");
 
-    int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     Expected state: clicking on each bookmark will recall corresponding MSA position
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+//     Expected state: clicking on each bookmark will recall corresponding MSA position
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark");
+    GTGlobals::sleep(500);
 
-    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
+    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    int LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark 2");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark 2");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(midRO == RO && midLO == LO, "middle bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark 3");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "New bookmark 3");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets aren't equal to the expected");
 
 //     7. Delete Start bookmark
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_REMOVE_BOOKMARK));
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "New bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep(500);
+    GTUtilsBookmarksTreeView::deleteBookmark(os, "New bookmark");
 
 //     Expected state: start bookmark doesn't present
-    QTreeWidgetItem* start = GTUtilsBookmarksTreeView::findItem(os,"New bookmark", GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(start==NULL, "bookmark not deleted");
+    QTreeWidgetItem *startBookmark = GTUtilsBookmarksTreeView::findItem(os, "New bookmark", GTGlobals::FindOptions(false));
+    CHECK_SET_ERR(startBookmark == NULL, "bookmark wasn't deleted");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0008_2) { //CHANGES: mid and end coordinates changed
-
-    //     1. Open document samples\CLUSTALW\COI.aln
-
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+GUI_TEST_CLASS_DEFINITION(test_0008_2) {
+    // CHANGES: mid and end coordinates changed
+//     1. Open document samples\CLUSTALW\COI.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
-
-    //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
-    QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "COI [m] COI");
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("start bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     2. Create bookmark. Rename "New bookmark" to "start bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "start bookmark");
 
-    int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     3. Scroll msa to the middle.
+//     3. Scroll msa to the middle.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 200));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+//     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "middle bookmark");
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("middle bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+    const int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    //
-    //     5. Scroll msa to the end.
+//     5. Scroll msa to the end.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 510));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
-    //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("end bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     6. Create bookmark. Rename "New bookmark" to "end bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "COI [m] COI", "end bookmark");
 
-    int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     Expected state: clicking on each bookmark will recall corresponding MSA position
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+//     Expected state: clicking on each bookmark will recall corresponding MSA position
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
+    GTGlobals::sleep(500);
 
-    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
+    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    int LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(midRO == RO && midLO == LO, "middle bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets aren't equal to the expected");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0008_3) { //CHANGES: mid and end coordinates changed, used another file
-
-    //     1. Open document samples\CLUSTALW\COI.aln
-
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "HIV-1.aln");
+GUI_TEST_CLASS_DEFINITION(test_0008_3) {
+    // CHANGES: mid and end coordinates changed, another file is used
+//     1. Open document samples\CLUSTALW\HIV-1.aln
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
 
-    //     2. Create bookmark. Rename "New bookmark" to "start bookmark"
-    QPoint p = GTUtilsBookmarksTreeView::getItemCenter(os, "HIV-1 [m] HIV-1");
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("start bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     2. Create bookmark. Rename "New bookmark" to "start bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [m] HIV-1", "start bookmark");
 
-    int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int startRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int startLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     3. Scroll msa to the middle.
+//     3. Scroll msa to the middle.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 600));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     QWidget *mdiWindow = GTUtilsMdi::activeWindow(os);
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    //     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+//     4. Create bookmark. Rename "New bookmark" to "middle bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [m] HIV-1", "middle bookmark");
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("middle bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+    const int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    int midRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int midLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    //
-    //     5. Scroll msa to the end.
+//     5. Scroll msa to the end.
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 1000));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
 
     GTMenu::showContextMenu(os, mdiWindow);
-    GTGlobals::sleep();
-    //     6. Create bookmark. Rename "New bookmark" to "end bookmark"
-    GTMouseDriver::moveTo(p);
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_ADD_BOOKMARK, GTGlobals::UseKey));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep();
-    GTKeyboardDriver::keySequence("end bookmark");
-    GTGlobals::sleep();
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
-    GTGlobals::sleep();
+//     6. Create bookmark. Rename "New bookmark" to "end bookmark"
+    GTUtilsBookmarksTreeView::addBookmark(os, "HIV-1 [m] HIV-1", "end bookmark");
 
-    int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
-    int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    const int endRO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    const int endLO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
 
-    //     Expected state: clicking on each bookmark will recall corresponding MSA position
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "start bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+//     Expected state: clicking on each bookmark will recall corresponding MSA position
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "start bookmark");
+    GTGlobals::sleep(500);
 
-    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets doesnt equal");
+    int RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    int LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(startRO == RO && startLO == LO, "start bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "middle bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "middle bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(midRO == RO && midLO == LO, "mid bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(midRO == RO && midLO == LO, "middle bookmark offsets aren't equal to the expected");
 
-    p = GTUtilsBookmarksTreeView::getItemCenter(os, "end bookmark");
-    GTMouseDriver::moveTo(p);
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
+    GTUtilsBookmarksTreeView::doubleClickBookmark(os, "end bookmark");
+    GTGlobals::sleep(500);
 
-    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os), LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
-    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets doesnt equal");
+    RO = GTUtilsMSAEditorSequenceArea::getRightOffset(os);
+    LO = GTUtilsMSAEditorSequenceArea::getLeftOffset(os);
+    CHECK_SET_ERR(endRO == RO && endLO == LO, "end bookmark offsets aren't equal to the expected");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0009) {
@@ -1493,100 +1339,78 @@ GUI_TEST_CLASS_DEFINITION(test_0009_2) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010) {
-
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
-    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
-
+    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010.aln"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTGlobals::sleep();
 // copy to clipboard
-//    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_COPY" << "copy_selection"));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 
-// Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "L\nS\nD\nS\nP\nK";
-
+// Expected state: every sequense name is the same as its amino translation
+    const QString clipboardText = GTClipboard::text(os);
+    const QString expectedMSA = "L\nS\nD\nS\nP\nK";
     CHECK_SET_ERR(clipboardText == expectedMSA, clipboardText);
-
-    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010_1) {
-
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
-    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
-
+    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010_1.aln"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os);
 // copy to clipboard
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
     GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
 
 // Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "L\nS\nD\nS\nP\nK";
-
+    const QString clipboardText = GTClipboard::text(os);
+    const QString expectedMSA = "L\nS\nD\nS\nP\nK";
     CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
-
-    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010_2) {
-
 // 1. Open file _common_data\scenarios\msa\translations_nucl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "translations_nucl.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/translations_nucl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Do document context menu {Export->Export aligniment to amino format}
 // 3. Translate with default settings
-    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os));
-
+    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, -1, sandBoxDir + "GUITest_common_scenarios_msa_editor_test_0010_2.aln"));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "amino_translation_of_alignment_rows"));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
-    GTGlobals::sleep();
-
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os);
 // copy to clipboard
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
     GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "L\nS\nD\nS\nP\nK";
+    const QString clipboardText = GTClipboard::text(os);
+    const QString expectedMSA = "L\nS\nD\nS\nP\nK";
     CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
 
-    QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    QStringList expectedNameList = QStringList() << "L" << "S" << "D" << "S" << "P" << "K";
-
+    const QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
+    const QStringList expectedNameList = QStringList() << "L" << "S" << "D" << "S" << "P" << "K";
     CHECK_SET_ERR(nameList == expectedNameList, "name lists differ");
-
-    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0011) {
@@ -1738,110 +1562,26 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
 // Add tests on alignment translation features (0002432)
 
 // 1. Open file _common_data\scenarios\msa\revcompl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-// 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-
-    GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTMouseDriver::click(Qt::RightButton);
-    GTWidget::click(os,GTUtilsMdi::activeWindow(os));
-
-// Expected state: result alignement must be
-// CAA---
-// --TGA-
-// ---ATC
-
-    GTGlobals::sleep();
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, -1), QPoint(-1, 0));
-// copy to clipboard
-
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep();
-
-// Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "CAA---\n--TGA-\n---ATC";
-
-    CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
-
-    GTGlobals::sleep();
-}
-
-GUI_TEST_CLASS_DEFINITION(test_0012_1) {
-// Add tests on alignment translation features (0002432)
-
-// 1. Open file _common_data\scenarios\msa\revcompl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/revcompl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-
     GTUtilsMSAEditorSequenceArea::selectArea(os);
     GTMouseDriver::click(Qt::RightButton);
     GTWidget::click(os,GTUtilsMdi::activeWindow(os));
 
-// Expected state: result alignement must be
-// CAA---
-// --TGA-
-// ---ATC
-
-    GTGlobals::sleep();
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, -1), QPoint(-1, 0));
-// copy to clipboard. CHANGES: copy by context menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(Qt::RightButton);
-
-// Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "CAA---\n--TGA-\n---ATC";
-
-    CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
-
-    GTGlobals::sleep();
-}
-
-GUI_TEST_CLASS_DEFINITION(test_0012_2) {
-// Add tests on alignment translation features (0002432)
-
-// 1. Open file _common_data\scenarios\msa\revcompl.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "revcompl.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-// 2. Select all sequences and do context menu {Edit->Replace selected rows with reverce complement}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "replace_selected_rows_with_reverse-complement"));
-
-    GTUtilsMSAEditorSequenceArea::selectArea(os);
-    GTMouseDriver::click(Qt::RightButton);
-
-// CHANGES: close and open MDI window
-    GTUtilsMdi::click(os, GTGlobals::Close);
-    GTGlobals::sleep();
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "revcompl"));
-    GTMouseDriver::doubleClick();
-    GTGlobals::sleep();
-
 // Expected state: result alignement must be
 // CAA---
 // --TGA-
 // ---ATC
-
-    GTGlobals::sleep();
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, -1), QPoint(-1, 0));
-// copy to clipboard. CHANGES: copy by context menu
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "copy_selection"));
-    GTMouseDriver::click(Qt::RightButton);
-
-// Expected state: every sequense name the same as it amino translation
-    QString clipboardText = GTClipboard::text(os);
-    QString expectedMSA = "CAA---\n--TGA-\n---ATC";
-
-    CHECK_SET_ERR(clipboardText == expectedMSA, "Clipboard string and expected MSA string differs");
-
-    GTGlobals::sleep();
+    const QStringList expectedData = QStringList() << "CAA---"
+                                                   << "--TGA-"
+                                                   << "---ATC";
+    const QStringList actualData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(actualData == expectedData, "Clipboard data and expected MSA data differs");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0013) {
@@ -2315,106 +2055,46 @@ GUI_TEST_CLASS_DEFINITION(test_0018) {
 // Shifting sequences in the Alignment Editor (UGENE-238)
 //
 // 1. Open file data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // 2. Click on some row in sequence names area
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
-// Expected state: row became selected
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 2, 604, 1));
-
-// 3. Click & drag selected row in sequence names area
-    QStringList list1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 2), QPoint(-10, 3));
-// Expected state: row order changes respectively
-    QStringList list2 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    CHECK_SET_ERR(list1 != list2, "Name list wasn't changed");
-
-// 4. Click & drag on unselected area
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
-// Expected state: multiple rows selected
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 0, 604, 2));
-
-// 5. Click & drag selected block
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
-// Expected state: whole selected block shifted
-    QStringList list3 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    CHECK_SET_ERR(list2 != list3, "Name list wasn't changed");
-
-// 6. Click on some row in selected block
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-9, 1));
-// Expected state: selection falls back to one row
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 1, 604, 1));
-}
+    GTUtilsMsaEditor::clickSequence(os, 2);
 
-GUI_TEST_CLASS_DEFINITION(test_0018_1) {
-// Shifting sequences in the Alignment Editor (UGENE-238)
-//
-// 1. Open file data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-// 2. Click on some row in sequence names area
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
 // Expected state: row became selected
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 2, 604, 1));
 
 // 3. Click & drag selected row in sequence names area
     QStringList list1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 2), QPoint(-10, 3));
-// Expected state: row order changes respectively
-    QStringList list2 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    CHECK_SET_ERR(list1 != list2, "Name list wasn't changed");
-
-// 4. Click & drag on unselected area
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
-// Expected state: multiple rows selected
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 0, 604, 2));
-
-// 5. Click & drag selected block
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
-// Expected state: whole selected block shifted
-    QStringList list3 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    CHECK_SET_ERR(list2 != list3, "Name list wasn't changed");
-
-// 6. Click on some row in selected block
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-9, 1));
-// Expected state: selection falls back to one row
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 1, 604, 1));
-}
 
-GUI_TEST_CLASS_DEFINITION(test_0018_2) {
-// Shifting sequences in the Alignment Editor (UGENE-238)
-//
-// 1. Open file data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-// 2. Click on some row in sequence names area
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-10, 2));
-// Expected state: row became selected
-    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 2, 604, 1));
+    QRect rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 2);
+    QRect destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 3);
+    GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
 
-// 3. Click & drag selected row in sequence names area
-    QStringList list1 = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 2), QPoint(-10, 3));
 // Expected state: row order changes respectively
     QStringList list2 = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(list1 != list2, "Name list wasn't changed");
 
 // 4. Click & drag on unselected area
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
+    rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 0);
+    destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 1);
+    GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
+
 // Expected state: multiple rows selected
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 0, 604, 2));
 
 // 5. Click & drag selected block
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-10, 0), QPoint(-9, 1));
+    rowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 0);
+    destinationRowNameRect = GTUtilsMsaEditor::getSequenceNameRect(os, 1);
+    GTMouseDriver::dragAndDrop(rowNameRect.center(), destinationRowNameRect.center());
+
 // Expected state: whole selected block shifted
     QStringList list3 = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(list2 != list3, "Name list wasn't changed");
 
 // 6. Click on some row in selected block
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-9, 1));
+    GTUtilsMsaEditor::clickSequence(os, 1);
+
 // Expected state: selection falls back to one row
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(0, 1, 604, 1));
 }
@@ -2636,25 +2316,27 @@ GUI_TEST_CLASS_DEFINITION(test_0022_1){//DIFFERENCE: Column label is tested
 //Expected state: Gaps are inserted, statistics "Pos" in right bottom is "Pos 1/14"
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0022_2){//DIFFERENCE: Line label is tested
+GUI_TEST_CLASS_DEFINITION(test_0022_2) { //DIFFERENCE: Line label is tested
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-//2. Select character â„–3 in "Phaneroptera_falcata"(G)
-    GTUtilsMSAEditorSequenceArea::click(os,QPoint(2,0));
-    QLabel* lineLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os,"Line"));
+
+//2. Select the thirs character in "Phaneroptera_falcata"(G)
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 0));
+
+//Expected state: Statistics "Ln" in right bottom is "Ln 1 / 10"
+    QLabel* lineLabel = GTWidget::findExactWidget<QLabel *>(os, "Line");
     CHECK_SET_ERR(lineLabel, "Line label not found");
-    CHECK_SET_ERR(lineLabel->text()=="Ln 1 / 10", "Expected text: Ln 1 / 10. Found: " + lineLabel->text());
-//Expected state: Statistics "Pos" in right bottom is "Pos 3/14"
+    CHECK_SET_ERR(lineLabel->text() == "Ln 1 / 10", "Expected text: Ln 1 / 10. Found: " + lineLabel->text());
 
-//3. Insert 3 gaps to first three positoons in "Phaneroptera_falcata"
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(-5,0),QPoint(-5,4));
+//3. Select and delete 5 lines
+    GTUtilsMsaEditor::selectRows(os, 3, 7);
     GTKeyboardDriver::keyClick(Qt::Key_Delete);
 
 //4. Select char at 4 position in "Phaneroptera_falcata"(A)
-    GTUtilsMSAEditorSequenceArea::click(os,QPoint(3,0));
-    CHECK_SET_ERR(lineLabel->text()=="Ln 1 / 5", "Expected text: Ln 1 / 5. Found: " + lineLabel->text());
-//Expected state: Gaps are inserted, statistics "Pos" in right bottom is "Pos 1/14"
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 0));
+//Expected state: Gaps are inserted, statistics "Ln" in right bottom is "Ln 1 / 5"
+    CHECK_SET_ERR(lineLabel->text() == "Ln 1 / 5", "Expected text: Ln 1 / 5. Found: " + lineLabel->text());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0023){
@@ -2715,7 +2397,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025){
     GTGlobals::sleep(500);
 
     QWidget* nameListWidget = GTWidget::findWidget(os,"msa_editor_COI");
-    MSAEditorUI* ui = qobject_cast<MSAEditorUI*>(nameListWidget);
+    MsaEditorWgt* ui = qobject_cast<MsaEditorWgt*>(nameListWidget);
 
     QFont f = ui->getEditor()->getFont();
     QString expectedFont = "Sans Serif,10,-1,5,50,0,0,0,0,0";
@@ -2741,7 +2423,7 @@ GUI_TEST_CLASS_DEFINITION(test_0025_1){
     GTGlobals::sleep(500);
 
     QWidget* nameListWidget = GTWidget::findWidget(os,"msa_editor_COI");
-    MSAEditorUI* ui = qobject_cast<MSAEditorUI*>(nameListWidget);
+    MsaEditorWgt* ui = qobject_cast<MsaEditorWgt*>(nameListWidget);
 
     QFont f = ui->getEditor()->getFont();
     QString expectedFont = "Verdana,10,-1,5,50,0,0,0,0,0";
@@ -2797,7 +2479,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_linux){
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp", "jpeg" ,100));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp", "JPG" ,100));
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 
     QAbstractButton* saveImage = GTAction::button(os,"Export as image");
@@ -2805,16 +2487,17 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_linux){
 
     GTWidget::click(os,saveImage);
 //    Expected state: export dialog appeared
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/smallImage.bmp","jpeg",50));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/smallImage.bmp","JPG",50));
     GTWidget::click(os,saveImage);
     GTGlobals::sleep(500);
 //    3. fill dialog:
 //    file name: test/_common_data/scenarios/sandbox/image.bmp
 //    press OK
-    qint64 bigSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/bigImage.jpeg");
-    qint64 smallSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/smallImage.jpeg");
+    qint64 bigSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/bigImage.jpg");
+    qint64 smallSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/smallImage.jpg");
 
-    CHECK_SET_ERR(bigSize==4800933 && smallSize==917068, QString().setNum(bigSize) + "  " + QString().setNum(smallSize));
+//    CHECK_SET_ERR(bigSize==4785325 && smallSize>914000, QString().setNum(bigSize) + "  " + QString().setNum(smallSize));
+	  CHECK_SET_ERR(bigSize == 5098695 && smallSize>997000, QString().setNum(bigSize) + "  " + QString().setNum(smallSize));
 //    Expected state: image is exported
 }
 
@@ -2823,7 +2506,7 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_windows){
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. press "export as image" on toolbar
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp","jpeg",100));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/bigImage.bmp","JPG",100));
     //GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
 
     QAbstractButton* saveImage = GTAction::button(os,"Export as image");
@@ -2831,52 +2514,52 @@ GUI_TEST_CLASS_DEFINITION(test_0026_2_windows){
 
     GTWidget::click(os,saveImage);
 //    Expected state: export dialog appeared
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/smallImage.bmp","jpeg",50));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/smallImage.bmp","JPG",50));
     GTWidget::click(os,saveImage);
 //    3. fill dialog:
 //    file name: test/_common_data/scenarios/sandbox/image.bmp
 //    press OK
-    qint64 bigSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/bigImage.jpeg");
-    qint64 smallSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/smallImage.jpeg");
+    qint64 bigSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/bigImage.jpg");
+    qint64 smallSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/smallImage.jpg");
 
-    CHECK_SET_ERR(bigSize > 4000000 && bigSize < 5500000  && smallSize > 800000 && smallSize < 1500000, QString().setNum(bigSize) + "  " + QString().setNum(smallSize));
+    CHECK_SET_ERR(bigSize > 3000000 && bigSize < 5500000  && smallSize > 700000 && smallSize < 1500000, QString().setNum(bigSize) + "  " + QString().setNum(smallSize));
 //    Expected state: image is exported
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0027){
+GUI_TEST_CLASS_DEFINITION(test_0027) {
 //    1. open document samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. select element 4 in sequence 3
-    GTUtilsMSAEditorSequenceArea::click(os,QPoint(3,2));
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(3, 2));
+
 //    3. Move selected left using mouse by 6
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(9,2));
-    GTGlobals::sleep(500);
+    GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(3, 2), QPoint(9, 2));
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(8,2));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
+//    Expected state: area is moved,position 4-9 filled with gaps
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(8, 2));
+    GTKeyboardUtils::copy(os);
+    const QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "------", "Expected: ------ Found: " + clipboardText);
-//    Expected stste: area is moved,position 4-9 filled with gaps
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0027_1){
+GUI_TEST_CLASS_DEFINITION(test_0027_1) {
 //    1. open document samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-//    2. select element 4 in sequence 3
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(3,3));
+
+//    2. select element 4 in sequences 2 and 3
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(3, 3));
+
 //    3. Move selected left using mouse by 6
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(9,2));
-    GTGlobals::sleep(500);
+    GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(3, 2), QPoint(9, 2));
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os,QPoint(3,2),QPoint(8,3));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText == "------\n------", "Expected: ------\n------ Found: " + clipboardText);
 //    Expected stste: area is moved,position 4-9 filled with gaps
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(3, 2), QPoint(8, 3));
+    GTKeyboardUtils::copy(os);
+    const QString clipboardText = GTClipboard::text(os);
+    CHECK_SET_ERR(clipboardText == "------\n------", "Expected: ------\n------ Found: " + clipboardText);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0028_linux){
@@ -2885,13 +2568,13 @@ GUI_TEST_CLASS_DEFINITION(test_0028_linux){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Context menu -- "Export as image"
-    GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("svg")));
+    GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("SVG")));
     GTUtilsDialog::waitForDialog( os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
 //    3. Fill dialog: svg format, output file
     qint64 fileSize = GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/test.svg");
-    CHECK_SET_ERR(fileSize > 7500000 && fileSize < 8000000, "Current size: " + QString().setNum(fileSize));
+    CHECK_SET_ERR(fileSize > 7000000 && fileSize < 8000000, "Current size: " + QString().setNum(fileSize));
 //    Expected state:  SVG is exported
 }
 
@@ -2901,7 +2584,7 @@ GUI_TEST_CLASS_DEFINITION(test_0028_windows){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Context menu -- "Export as image"
-    GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("svg")));
+    GTUtilsDialog::waitForDialog(os,new ExportMsaImage(os, testDir + "_common_data/scenarios/sandbox/test.svg", QString("SVG")));
     GTUtilsDialog::waitForDialog( os, new PopupChooser( os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
@@ -3565,11 +3248,11 @@ void test_0039_function(HI::GUITestOpStatus &os, int comboNum, QString extention
     //    File format: CLUSTALW(use other formats too, check extension change)
     //    Amino translation: Standart genetic code
     //    Add document to project: checked
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI"));
-    GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, comboNum, UGUITest::testDir + "_common_data/scenarios/sandbox/COI_transl.aln"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION<<ACTION_PROJECT__EXPORT_TO_AMINO_ACTION));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep(500);
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
+		<< "action_project__export_to_amino_action"));
+	GTUtilsDialog::waitForDialog(os, new ExportMSA2MSADialogFiller(os, comboNum, UGUITest::testDir + "_common_data/scenarios/sandbox/COI_transl.aln"));
+	GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //Expected state: transl.aln appeared in project
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os,"COI_transl." + extention));
@@ -3699,7 +3382,7 @@ GUI_TEST_CLASS_DEFINITION(test_0042_2) {
                                                         ExportMsaImage::Settings(true, false, true)/*include all*/,
                                                         true,
                                                         false, RegionMsa(),
-                                                        "bmp"));
+                                                        "BMP"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
 }
 
@@ -3814,7 +3497,7 @@ GUI_TEST_CLASS_DEFINITION(test_0046) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EXPORT << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os,
                                                         testDir + "_common_data/scenarios/sandbox/test_0046",
-                                                        "jpg", 50));
+                                                        "JPG",50));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
 }
 
@@ -3834,19 +3517,18 @@ GUI_TEST_CLASS_DEFINITION(test_0047) {
             QPushButton* ok = box->button(QDialogButtonBox::Ok);
             CHECK_SET_ERR(ok !=NULL, "ok button is NULL");
 
-            QSpinBox* startPosBox = dialog->findChild<QSpinBox*>("startPosBox");
-            CHECK_SET_ERR(startPosBox != NULL, "startPosBox is NULL");
-            GTSpinBox::setValue(os, startPosBox, 10);
+            QSpinBox* startLineEdit = dialog->findChild<QSpinBox*>("startLineEdit");
+            CHECK_SET_ERR(startLineEdit != NULL, "startLineEdit is NULL");
+            GTSpinBox::setValue(os, startLineEdit, 10);
 
-            QSpinBox* endPosBox = dialog->findChild<QSpinBox*>("endPosBox");
-            CHECK_SET_ERR(endPosBox != NULL, "endPoxBox is NULL");
-            GTSpinBox::setValue(os, endPosBox, 5);
+            QSpinBox* endLineEdit = dialog->findChild<QSpinBox*>("endLineEdit");
+            CHECK_SET_ERR(endLineEdit != NULL, "endLineEdit is NULL");
+            GTSpinBox::setValue(os, endLineEdit, 5);
 
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
             GTWidget::click(os, ok);
 
-            GTSpinBox::setValue(os, endPosBox, 15);
-
+            GTSpinBox::setValue(os, endLineEdit, 15);
             QWidget *noneButton = dialog->findChild<QWidget*>("noneButton");
             CHECK_SET_ERR(noneButton != NULL, "noneButton is NULL");
             GTWidget::click(os, noneButton);
@@ -4315,7 +3997,8 @@ GUI_TEST_CLASS_DEFINITION(test_0056){
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_project__export_import_menu_action"
                                                   << "export sequences as alignment"));
     GTUtilsProjectTreeView::click(os, "murine.gb", Qt::RightButton);
-    GTGlobals::sleep();
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+	
 //    "Use Genbank "SOURCE" tags..." checkbox
     QStringList nameList = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(nameList.size() == 1, QString("unexpected number of names: %1").arg(nameList.size()));
@@ -4500,7 +4183,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller()));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Colors" << "Custom schemes" << "Create new color scheme"));
-//    Select some color scheme directory. Check state
+//    Select some color scheme folder. Check state
     GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
 
     GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "GUITest_common_scenarios_msa_editor_test_0060", NewColorSchemeCreator::nucl));
@@ -4521,7 +4204,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 
             QLineEdit* colorsDirEdit = GTWidget::findExactWidget<QLineEdit*>(os, "colorsDirEdit", dialog);
             QString path = colorsDirEdit->text();
-            CHECK_SET_ERR(path.contains("_common_data/scenarios/sandbox"), "unexpected color directory: " + path);
+            CHECK_SET_ERR(path.contains("_common_data/scenarios/sandbox"), "unexpected color folder: " + path);
 
             GTGlobals::sleep(500);
 
@@ -4531,7 +4214,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
     GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new customAppSettingsFiller1()));
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Colors" << "Custom schemes" << "Create new color scheme"));
-//    Select some color scheme directory. Check state
+//    Select some color scheme folder. Check state
     GTMenu::showContextMenu(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os));
 }
 
@@ -4615,10 +4298,10 @@ GUI_TEST_CLASS_DEFINITION(test_0062){
 //    Check wrong parameters:
 //    Dir to save does not exists
             GTLineEdit::setText(os, filepathEdit, sandBoxDir + "some_dir/subalignment.aln");
-            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Directory to save does not exist"));
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Folder to save does not exist"));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
             GTGlobals::sleep(500);
-//    No permission  to write to directory
+//    No permission  to write to folder
             GTLineEdit::setText(os, filepathEdit, sandBoxDir + "read_only_dir/subalignment.aln");
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "No write permission to "));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
@@ -4640,13 +4323,14 @@ GUI_TEST_CLASS_DEFINITION(test_0062){
             GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "You must select at least one sequence"));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
 //    Start pos > end pos
-            QSpinBox* startPosBox = GTWidget::findExactWidget<QSpinBox*>(os, "startPosBox", dialog);
-            GTSpinBox::setValue(os, startPosBox, 50, GTGlobals::UseKeyBoard);
-            QSpinBox* endPosBox = GTWidget::findExactWidget<QSpinBox*>(os, "endPosBox", dialog);
-            GTSpinBox::setValue(os, endPosBox, 40, GTGlobals::UseKeyBoard);
+
+            QLineEdit* startLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "startLineEdit", dialog);
+            GTLineEdit::setText(os, startLineEdit, "50");
+            QLineEdit* endLineEdit = GTWidget::findExactWidget<QLineEdit*>(os, "endLineEdit", dialog);
+            GTLineEdit::setText(os, endLineEdit, "40");
 
 
-            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Start position must be less than end position!"));
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Illegal region!"));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
             GTGlobals::sleep(500);
 
@@ -4662,6 +4346,7 @@ GUI_TEST_CLASS_DEFINITION(test_0062){
 
     GTGlobals::sleep(500);
 
+    GTFile::setReadWrite(os, sandBoxDir + "read_only_dir");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0063){
@@ -4715,7 +4400,7 @@ GUI_TEST_CLASS_DEFINITION(test_0064){
     QString val1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
     QString val2 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 2);
     CHECK_SET_ERR(val1 == "0%", "1: unexpected valeu1: " + val1);
-    CHECK_SET_ERR(val2 == "19%", "1: unexpected valeu2: " + val2);
+    CHECK_SET_ERR(val2 == "20%", "1: unexpected valeu2: " + val2);
 //    Click "Show distance column". Check state
     GTCheckBox::setChecked(os, showDistancesColumnCheck, false);
     QWidget* column = GTWidget::findWidget(os, "msa_editor_similarity_column");
@@ -4725,7 +4410,7 @@ GUI_TEST_CLASS_DEFINITION(test_0064){
     val1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
     val2 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 2);
     CHECK_SET_ERR(val1 == "0%", "2: unexpected valeu1: " + val1);
-    CHECK_SET_ERR(val2 == "19%", "2: unexpected valeu2: " + val2);
+    CHECK_SET_ERR(val2 == "20%", "2: unexpected valeu2: " + val2);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0065){
@@ -4741,97 +4426,96 @@ GUI_TEST_CLASS_DEFINITION(test_0065){
     CHECK_SET_ERR(clipboardText.startsWith("TaAGttTatTaATtCGagCtGAAtTagG+CAaCCaGGtTat---+TaATT"), "unexpected consensus was exported: " + clipboardText);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0066){
+GUI_TEST_CLASS_DEFINITION(test_0066) {
 //    Open COI.aln consArea
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    Select some area on consensus with mouse
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(1, -3), QPoint(10, -3));
+    GTUtilsMsaEditor::selectColumns(os, 1, 10, GTGlobals::UseMouse);
+
 //    Check selection on consensus and alignment
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(1, 0), QPoint(10, 17)));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0067){
+GUI_TEST_CLASS_DEFINITION(test_0067) {
 //TODO: write this test when UGENE-4803 is fixed
 //    Open COI.aln
 //    Build tree displayed with msa
 //    Use context menu on tree tab(in tabWidget)
 //    Check all actions in popup menu
+    CHECK_SET_ERR(false, "The test is not implemented");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0068){
+GUI_TEST_CLASS_DEFINITION(test_0069) {
 //    Open COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/Chikungunya_E1.fasta");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-//    Press on some sequence in nameList with right button
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 2));
-//    Use context menu: {Copy->Copy current sequence}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_COPY << "Copy current sequence"));
-    GTMouseDriver::click(Qt::RightButton);
-//    Check the clipboard
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText.startsWith("TTAGTTTATTAATTCGAGCTGAACTAGGTCAACCAGGCTAT---TTAATTGGTGACGATCAAATTTACAAT"), "unexpected clipboard text: " + clipboardText);
-}
 
-GUI_TEST_CLASS_DEFINITION(test_0069){
-//    Open COI.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "Chikungunya_E1.fasta");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Press on some sequence in nameList
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(-5, 2));
-    QScrollBar* hscroll = GTWidget::findExactWidget<QScrollBar*>(os, "horizontal_names_scroll");
-    QScrollBar* vscroll = GTWidget::findExactWidget<QScrollBar*>(os, "vertical_sequence_scroll");
+    GTUtilsMsaEditor::clickSequence(os, 2);
+    QScrollBar *hscroll = GTWidget::findExactWidget<QScrollBar *>(os, "horizontal_names_scroll");
+    QScrollBar *vscroll = GTWidget::findExactWidget<QScrollBar *>(os, "vertical_sequence_scroll");
+
 //    Check keys:
 //    right,
-    for(int i = 0; i<3; i++){
+    for (int i = 0; i < 3; i++) {
         GTKeyboardDriver::keyClick(Qt::Key_Right);
         GTGlobals::sleep(500);
         GTThread::waitForMainThread();
     }
     CHECK_SET_ERR(hscroll->value() == 3, QString("right key works wrong. Scrollbar has value: %1").arg(hscroll->value()));
+
 //    left
-    for(int i = 0; i<2; i++){
+    for (int i = 0; i < 2; i++) {
         GTKeyboardDriver::keyClick(Qt::Key_Left);
         GTGlobals::sleep(500);
         GTThread::waitForMainThread();
     }
     CHECK_SET_ERR(hscroll->value() == 1, QString("left key works wrong. Scrollbar has value: %1").arg(hscroll->value()));\
+
 //    page down
-    GTKeyboardDriver::keyClick( Qt::Key_PageDown);
+    GTKeyboardDriver::keyClick(Qt::Key_PageDown);
     GTGlobals::sleep(500);
     GTThread::waitForMainThread();
     CHECK_SET_ERR(vscroll->value() > 20, QString("page down key works wrong: %1").arg(vscroll->value()));
+
 //    page up
-    GTKeyboardDriver::keyClick( Qt::Key_PageUp);
+    GTKeyboardDriver::keyClick(Qt::Key_PageUp);
     GTGlobals::sleep(500);
     GTThread::waitForMainThread();
     CHECK_SET_ERR(vscroll->value() == 0, QString("page up key works wrong: %1").arg(vscroll->value()));
+
 //    end
-    GTKeyboardDriver::keyClick( Qt::Key_End);
+    GTKeyboardDriver::keyClick(Qt::Key_End);
     GTGlobals::sleep(500);
     GTThread::waitForMainThread();
     CHECK_SET_ERR(vscroll->value() > 1650, QString("end key works wrong: %1").arg(vscroll->value()));
+
 //    home
-    GTKeyboardDriver::keyClick( Qt::Key_Home);
+    GTKeyboardDriver::keyClick(Qt::Key_Home);
     GTGlobals::sleep(500);
     GTThread::waitForMainThread();
     CHECK_SET_ERR(vscroll->value() == 0, QString("end key works wrong: %1").arg(vscroll->value()));
+
 //    mouse wheel
-    for(int i = 0; i<3; i++){
+    for (int i = 0; i < 3; i++) {
         GTMouseDriver::scroll(-1);
         GTGlobals::sleep(100);
         GTThread::waitForMainThread();
     }
-    CHECK_SET_ERR(vscroll->value() == 3, QString("scroll down works wrong. Scrollbar has value: %1").arg(vscroll->value()));
+    const int scrolledValue = vscroll->value();
+    CHECK_SET_ERR(scrolledValue > 0, QString("scroll down works wrong. Scrollbar has value: %1").arg(vscroll->value()));
     GTGlobals::sleep(500);
 
-    for(int i = 0; i<2; i++){
+    for (int i = 0; i < 2; i++) {
         GTMouseDriver::scroll(1);
         GTGlobals::sleep(500);
         GTThread::waitForMainThread();
     }
-    CHECK_SET_ERR(vscroll->value() == 1, QString("scroll up works wrong. Scrollbar has value: %1").arg(vscroll->value()));
+    CHECK_SET_ERR(0 < vscroll->value() && vscroll->value() < scrolledValue, QString("scroll up works wrong. Scrollbar has value: %1").arg(vscroll->value()));
 }
+
 GUI_TEST_CLASS_DEFINITION(test_0070){
 //    Open empty alignment
     GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.h
index c2c3df1..9913f80 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/GTTestsMsaEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -84,8 +84,6 @@ GUI_TEST_CLASS_DECLARATION(test_0011_1)
 GUI_TEST_CLASS_DECLARATION(test_0011_2)
 
 GUI_TEST_CLASS_DECLARATION(test_0012)
-GUI_TEST_CLASS_DECLARATION(test_0012_1)
-GUI_TEST_CLASS_DECLARATION(test_0012_2)
 
 GUI_TEST_CLASS_DECLARATION(test_0013)
 GUI_TEST_CLASS_DECLARATION(test_0013_1)
@@ -108,8 +106,6 @@ GUI_TEST_CLASS_DECLARATION(test_0017_1)
 GUI_TEST_CLASS_DECLARATION(test_0017_2)
 
 GUI_TEST_CLASS_DECLARATION(test_0018)
-GUI_TEST_CLASS_DECLARATION(test_0018_1)
-GUI_TEST_CLASS_DECLARATION(test_0018_2)
 
 GUI_TEST_CLASS_DECLARATION(test_0019)
 GUI_TEST_CLASS_DECLARATION(test_0019_1)
@@ -232,7 +228,6 @@ GUI_TEST_CLASS_DECLARATION(test_0064)
 GUI_TEST_CLASS_DECLARATION(test_0065)
 GUI_TEST_CLASS_DECLARATION(test_0066)
 GUI_TEST_CLASS_DECLARATION(test_0067)
-GUI_TEST_CLASS_DECLARATION(test_0068)
 GUI_TEST_CLASS_DECLARATION(test_0069)
 GUI_TEST_CLASS_DECLARATION(test_0070)
 GUI_TEST_CLASS_DECLARATION(test_0071)
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.cpp
index 1bcda49..b2b6354 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -18,24 +18,34 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "GTTestsAlignSequenceToMsa.h"
-#include <drivers/GTMouseDriver.h>
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <primitives/GTWidget.h>
+
+#include <GTGlobals.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "primitives/GTMenu.h"
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTSpinBox.h>
-#include "GTGlobals.h"
-#include "system/GTClipboard.h"
-#include "primitives/GTAction.h"
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTToolbar.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
 #include <primitives/GTComboBox.h>
 #include <primitives/GTLineEdit.h>
-#include <primitives/GTCheckBox.h>
-#include "utils/GTUtilsDialog.h"
+#include <primitives/GTMenu.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTUtilsDialog.h>
+
+#include <QApplication>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/ExternalToolRegistry.h>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include "GTTestsAlignSequenceToMsa.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
@@ -43,33 +53,25 @@
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "primitives/PopupChooser.h"
-#include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorSequenceArea.h>
+#include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 
 namespace U2 {
 namespace GUITest_common_scenarios_align_sequences_to_msa{
 using namespace HI;
 
-void checkAlignedRegion(HI::GUITestOpStatus& os, QRect selectionRect, const QString& expectedContent) {
+void checkAlignedRegion(HI::GUITestOpStatus& os, const QRect &selectionRect, const QString& expectedContent) {
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, selectionRect.center().x()));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "action_go_to_position"));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    int leftOffset = GTUtilsMSAEditorSequenceArea::getLeftOffset(os) - 1;
-
-    selectionRect.adjust(-leftOffset, 0, -leftOffset, 0);
-
     GTUtilsMSAEditorSequenceArea::selectArea(os, selectionRect.topLeft(), selectionRect.bottomRight());
-    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
-
+    GTKeyboardUtils::copy(os);
     GTGlobals::sleep(500);
-    QString clipboardTest = GTClipboard::text(os);
 
-    CHECK_SET_ERR(clipboardTest== expectedContent, QString("Incorrect alignment of the region\n Expected: \n%1 \nResult: \n%2").arg(expectedContent).arg(clipboardTest));
+    const QString clipboardText = GTClipboard::text(os);
+    CHECK_SET_ERR(clipboardText == expectedContent, QString("Incorrect alignment of the region\n Expected: \n%1 \nResult: \n%2").arg(expectedContent).arg(clipboardText));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0001){
@@ -134,13 +136,17 @@ GUI_TEST_CLASS_DEFINITION(test_0002){
     CHECK_SET_ERR(GTUtilsMsaEditor::getSequencesCount(os) == 3086, "Incorrect sequences count");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003){
+GUI_TEST_CLASS_DEFINITION(test_0003) {
     //Align short sequences with default settings(on platforms with MAFFT)
     //Expected state: MAFFT alignment started and finished succesfully with using option --addfragments
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
     GTLogTracer logTracer;
+
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/cmdline/primers/", "primers.fa");
     GTUtilsDialog::waitForDialog(os, ob);
@@ -155,7 +161,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
     const bool hasMessage = logTracer.checkMessage("--addfragments");
     CHECK_SET_ERR(hasMessage, "The expected message is not found in the log");
 
-    checkAlignedRegion(os, QRect(QPoint(86,17), QPoint(114,23)),
+    checkAlignedRegion(os, QRect(QPoint(86, 17), QPoint(114, 23)),
         QString("CATGCCTTTGTAATAATCTTCTTTATAGT\n"
                 "-----------------------------\n"
                 "-----------------------------\n"
@@ -192,6 +198,10 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0005){
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
     GTFileDialog::openFile(os, testDir + "_common_data/alignment/align_sequence_to_an_alignment/", "TUB.msf");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -351,6 +361,189 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     CHECK_SET_ERR(GTUtilsMsaEditor::getSequencesCount(os) == 3, "Incorrect sequences count");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0011) {
+//    Adding and aligning with MAFFT a sequence, which is longer than an alignment.
+
+//    1. Open "_common_data/scenarios/msa/ma.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Ensure that MAFFT tool is set.
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
+//    3. Click "Align sequence to this alignment" button on the toolbar.
+//    4. Select "_common_data/scenarios/msa/add_and_align_1.fa" in the dialog.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/msa/add_and_align_1.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+
+//    Expected state: an additional row appeared in the alignment, all old rows were shifted to be aligned with the new row.
+    const QStringList expectedMsaData = QStringList() << "----TAAGACTTCTAA------------"
+                                                      << "----TAAGCTTACTAA------------"
+                                                      << "----TTAGTTTATTAA------------"
+                                                      << "----TCAGTCTATTAA------------"
+                                                      << "----TCAGTTTATTAA------------"
+                                                      << "----TTAGTCTACTAA------------"
+                                                      << "----TCAGATTATTAA------------"
+                                                      << "----TTAGATTGCTAA------------"
+                                                      << "----TTAGATTATTAA------------"
+                                                      << "----TAAGTCTATTAA------------"
+                                                      << "----TTAGCTTATTAA------------"
+                                                      << "----TTAGCTTATTAA------------"
+                                                      << "----TTAGCTTATTAA------------"
+                                                      << "----TAAGTCTTTTAA------------"
+                                                      << "----TAAGTCTTTTAA------------"
+                                                      << "----TAAGTCTTTTAA------------"
+                                                      << "----TAAGAATAATTA------------"
+                                                      << "----TAAGCCTTTTAA------------"
+                                                      << "GCGCTAAGCCTTTTAAGCGCGCGCGCGC";
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+    const QStringList msaData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(expectedMsaData == msaData, "Unexpected MSA data");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0012) {
+//    Adding and aligning with MAFFT a sequence, which can be aligned with an alignment shifting
+
+//    1. Open "_common_data/scenarios/msa/ma.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Ensure that MAFFT tool is set.
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
+//    3. Click "Align sequence to this alignment" button on the toolbar.
+//    4. Select "_common_data/scenarios/msa/add_and_align_2.fa" in the dialog.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/msa/add_and_align_2.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+
+//    Expected state: an additional row appeared in the alignment, all old rows were shifted to be aligned with the new row.
+    const QStringList expectedMsaData = QStringList() << "------TAAGACTTCTAA"
+                                                      << "------TAAGCTTACTAA"
+                                                      << "------TTAGTTTATTAA"
+                                                      << "------TCAGTCTATTAA"
+                                                      << "------TCAGTTTATTAA"
+                                                      << "------TTAGTCTACTAA"
+                                                      << "------TCAGATTATTAA"
+                                                      << "------TTAGATTGCTAA"
+                                                      << "------TTAGATTATTAA"
+                                                      << "------TAAGTCTATTAA"
+                                                      << "------TTAGCTTATTAA"
+                                                      << "------TTAGCTTATTAA"
+                                                      << "------TTAGCTTATTAA"
+                                                      << "------TAAGTCTTTTAA"
+                                                      << "------TAAGTCTTTTAA"
+                                                      << "------TAAGTCTTTTAA"
+                                                      << "------TAAGAATAATTA"
+                                                      << "------TAAGCCTTTTAA"
+                                                      << "GCGCGCTAAGCC------";
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+	const QStringList msaData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(expectedMsaData == msaData, "Unexpected MSA data");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0013) {
+//    Adding and aligning with MAFFT a sequence to an alignment with columns of gaps
+
+//    1. Open "_common_data/scenarios/msa/ma2_gap_8_col.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_8_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Ensure that MAFFT tool is set.
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
+//    3. Click "Align sequence to this alignment" button on the toolbar.
+//    4. Select "_common_data/scenarios/msa/add_and_align_1.fa" in the dialog.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/msa/add_and_align_1.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+
+//    Expected state: an additional row appeared in the alignment, all old rows were shifted to be aligned with the new row, columns with gaps were removed
+    const QStringList expectedMsaData = QStringList() << "-----AAGCTTCTTTTAA----------"
+                                                      << "-----AAGTTACTAA-------------"
+                                                      << "-----TAG---TTATTAA----------"
+                                                      << "-----AAGC---TATTAA----------"
+                                                      << "-----TAGTTATTAA-------------"
+                                                      << "-----TAGTTATTAA-------------"
+                                                      << "-----TAGTTATTAA-------------"
+                                                      << "-----AAGCTTT---TAA----------"
+                                                      << "-----A--AGAATAATTA----------"
+                                                      << "-----AAGCTTTTAA-------------"
+                                                      << "GCGCTAAGCCTTTTAAGCGCGCGCGCGC";
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+	const QStringList msaData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(expectedMsaData == msaData, "Unexpected MSA data");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0014) {
+//    Adding and aligning with MAFFT should remove all columns of gaps from the source msa before the aligning, also it should be trimmed after the aligning.
+
+//    1. Open "_common_data/scenarios/msa/ma2_gap_8_col.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_8_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Ensure that MAFFT tool is set.
+    ExternalTool *mafftTool = AppContext::getExternalToolRegistry()->getByName("MAFFT");
+    CHECK_SET_ERR(NULL != mafftTool, "Can't find MAFFT tool in the registry");
+    CHECK_SET_ERR(mafftTool->isValid(), "MAFFT tool is not valid");
+
+//    3. Click "Align sequence to this alignment" button on the toolbar.
+//    4. Select "_common_data/scenarios/msa/add_and_align_3.fa" in the dialog.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/msa/add_and_align_3.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+
+//    Expected state: an additional row appeared in the alignment, the forth column doesn't consist only of gaps, there are no columns of gaps even in the end of the alignment.
+    const QStringList expectedMsaData = QStringList() << "AAGCTTCTTTTAA"
+                                                      << "AAGTTACTAA---"
+                                                      << "TAG---TTATTAA"
+                                                      << "AAGC---TATTAA"
+                                                      << "TAGTTATTAA---"
+                                                      << "TAGTTATTAA---"
+                                                      << "TAGTTATTAA---"
+                                                      << "AAGCTTT---TAA"
+                                                      << "A--AGAATAATTA"
+                                                      << "AAGCTTTTAA---"
+                                                      << "A--AGAATA----";
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+	const QStringList msaData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(expectedMsaData == msaData, "Unexpected MSA data");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0015) {
+//    Adding and aligning without MAFFT should remove all columns of gaps from the source msa before the aligning, also it should be trimmed after the aligning.
+
+//    2. Ensure that MAFFT tool is not set. Remove it, if it is set.
+    GTUtilsExternalTools::removeTool(os, "MAFFT");
+
+//    1. Open "_common_data/scenarios/msa/ma2_gap_8_col.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_8_col.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    3. Click "Align sequence to this alignment" button on the toolbar.
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/msa/add_and_align_3.fa"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
+
+//    4. Select "_common_data/scenarios/msa/add_and_align_3.fa" in the dialog.
+//    Expected state: an additional row appeared in the alignment, the forth column doesn't consist only of gaps, there are no columns of gaps even in the end of the alignment.
+    const QStringList expectedMsaData = QStringList() << "AAGCTTCTTTTAA"
+                                                      << "AAGTTACTAA---"
+                                                      << "TAG---TTATTAA"
+                                                      << "AAGC---TATTAA"
+                                                      << "TAGTTATTAA---"
+                                                      << "TAGTTATTAA---"
+                                                      << "TAGTTATTAA---"
+                                                      << "AAGCTTT---TAA"
+                                                      << "A--AGAATAATTA"
+                                                      << "AAGCTTTTAA---"
+                                                      << "AAGAATA------";
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    const QStringList msaData = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(expectedMsaData == msaData, "Unexpected MSA data");
+}
+
 } // namespace
 } // namespace U2
-
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
index 309d59c..8174294 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/align/GTTestsAlignSequenceToMsa.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,11 @@ GUI_TEST_CLASS_DECLARATION(test_0007)
 GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
+GUI_TEST_CLASS_DECLARATION(test_0011)
+GUI_TEST_CLASS_DECLARATION(test_0012)
+GUI_TEST_CLASS_DECLARATION(test_0013)
+GUI_TEST_CLASS_DECLARATION(test_0014)
+GUI_TEST_CLASS_DECLARATION(test_0015)
 
 #undef GUI_TEST_SUITE
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
index 2126886..9e85752 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -18,55 +18,61 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "GTTestsMSAEditorColors.h"
-#include <drivers/GTMouseDriver.h>
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <primitives/GTWidget.h>
+
+#include <GTGlobals.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "primitives/GTMenu.h"
-#include <primitives/GTTreeWidget.h>
-#include "GTGlobals.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
 #include <drivers/GTMouseDriver.h>
-#include "utils/GTUtilsApp.h"
+#include <primitives/GTMenu.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTUtilsApp.h>
+#include <utils/GTUtilsDialog.h>
+
+#include <U2Core/DNAAlphabet.h>
+
+#include <U2View/MSAEditor.h>
+#include <U2View/MSAEditorSequenceArea.h>
+
+#include "GTTestsMSAEditorColors.h"
+#include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsDocument.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
+#include "GTUtilsMsaEditorSequenceArea.h"
+#include "GTUtilsOptionPanelMSA.h"
+#include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
-#include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "utils/GTUtilsDialog.h"
-#include "GTUtilsMsaEditorSequenceArea.h"
-#include "primitives/PopupChooser.h"
+#include "GTUtilsTaskTreeView.h"
 #include "runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "GTUtilsMdi.h"
-#include "GTUtilsTaskTreeView.h"
 
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorSequenceArea.h>
 namespace U2 {
 
 namespace GUITest_common_scenarios_msa_editor_colors {
 using namespace HI;
-void checkColor(HI::GUITestOpStatus &os, QPoint p, QString expectedColor, int Xmove=0,int Ymove=0){
-    QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
-    CHECK_SET_ERR(seq!=NULL,"msa_editor_sequence_area widget is NULL")
 
-    QPixmap content;
-    content = QPixmap::grabWidget(seq,seq->rect());
+void checkColor(HI::GUITestOpStatus &os, const QPoint &p, const QString &expectedColor, int Xmove = 0, int Ymove = 0) {
+    QWidget *seq = GTWidget::findWidget(os, "msa_editor_sequence_area");
+    CHECK_SET_ERR(seq != NULL, "msa_editor_sequence_area widget is NULL");
 
     GTUtilsMSAEditorSequenceArea::click(os, p);
     QPoint p1 = GTMouseDriver::getMousePosition();
-    p1.setY(p1.y()+Ymove);
-    p1.setX(p1.x()+Xmove);
-
-    QRgb rgb = content.toImage().pixel(seq->mapFromGlobal(p1));
-    QColor color(rgb);
+    p1.setY(p1.y() + Ymove);
+    p1.setX(p1.x() + Xmove);
 
+    const QImage content = GTWidget::getImage(os, seq);
+    const QRgb rgb = content.pixel(seq->mapFromGlobal(p1));
+    const QColor color(rgb);
 
-    CHECK_SET_ERR(color.name()==expectedColor ,"Expected: " + expectedColor + " ,found: " + color.name());
+    CHECK_SET_ERR(color.name() == expectedColor , "Expected: " + expectedColor + " ,found: " + color.name());
     GTGlobals::sleep(500);
-    }
+}
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
@@ -178,9 +184,160 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     checkColor(os,QPoint(11, 2), "#ccccff",5);//chech12
     checkColor(os,QPoint(12, 2), "#ffffff",5);//chech13
     checkColor(os,QPoint(13, 2), "#ccccff",5);//chech14
+}
 
+GUI_TEST_CLASS_DEFINITION(test_0006) {
+//    Highlighting scheme options should be saved on the alphabet changing for a DNA MSA
+
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open "Highlighting" options panel tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
+//    3. Select "Conservation level" highlighting scheme.
+    GTUtilsOptionPanelMsa::setHighlightingScheme(os, "Conservation level");
+
+//    4. Set the next highlighting scheme options:
+//        threshold: 70%
+//        comparison: less or equal
+//        use dots: checked.
+    int expectedThreshold = 70;
+    GTUtilsOptionPanelMsa::ThresholdComparison expectedThresholdComparison = GTUtilsOptionPanelMsa::LessOrEqual;
+    bool expectedIsUseDotsOptionsSet = true;
+
+    GTUtilsOptionPanelMsa::setThreshold(os, expectedThreshold);
+    GTUtilsOptionPanelMsa::setThresholdComparison(os, expectedThresholdComparison);
+    GTUtilsOptionPanelMsa::setUseDotsOption(os, expectedIsUseDotsOptionsSet);
+
+//    5. Replace any symbol in the MSA to amino acid specific symbols, e.g. to 'Q'.
+    GTUtilsMSAEditorSequenceArea::replaceSymbol(os, QPoint(0, 0), 'q');
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: the alignment alphabet is changed to Raw, highlighting scheme options are the same.
+    const bool isAlphabetRaw = GTUtilsMsaEditor::getEditor(os)->getMaObject()->getAlphabet()->isRaw();
+    CHECK_SET_ERR(isAlphabetRaw, "Alphabet is not RAW after the symbol replacing");
+
+    int threshold = GTUtilsOptionPanelMsa::getThreshold(os);
+    GTUtilsOptionPanelMsa::ThresholdComparison thresholdComparison = GTUtilsOptionPanelMsa::getThresholdComparison(os);
+    bool isUseDotsOptionsSet = GTUtilsOptionPanelMsa::isUseDotsOptionSet(os);
+
+    CHECK_SET_ERR(expectedThreshold == threshold,
+                  QString("Threshold is incorrect: expected %1, got %2").arg(expectedThreshold).arg(threshold));
+    CHECK_SET_ERR(expectedThresholdComparison == thresholdComparison,
+                  QString("Threshold comparison is incorrect: expected %1, got %2").arg(expectedThresholdComparison).arg(thresholdComparison));
+    CHECK_SET_ERR(expectedIsUseDotsOptionsSet == isUseDotsOptionsSet,
+                  QString("Use dots option status is incorrect: expected %1, got %2").arg(expectedIsUseDotsOptionsSet).arg(isUseDotsOptionsSet));
+
+//    6. Set the next highlighting scheme options:
+//        threshold: 30%
+//        comparison: greater or equal
+//        use dots: unchecked.
+    expectedThreshold = 30;
+    expectedThresholdComparison = GTUtilsOptionPanelMsa::GreaterOrEqual;
+    expectedIsUseDotsOptionsSet = false;
+
+    GTUtilsOptionPanelMsa::setThreshold(os, expectedThreshold);
+    GTUtilsOptionPanelMsa::setThresholdComparison(os, expectedThresholdComparison);
+    GTUtilsOptionPanelMsa::setUseDotsOption(os, expectedIsUseDotsOptionsSet);
+
+//    7. Press "Undo" button on the toolbar.
+    GTUtilsMsaEditor::undo(os);
+
+//    Expected state: the alignment alphabet is changed to DNA, highlighting scheme options are the same.
+    const bool isAlphabetDna = GTUtilsMsaEditor::getEditor(os)->getMaObject()->getAlphabet()->isDNA();
+    CHECK_SET_ERR(isAlphabetDna, "Alphabet is not DNA after the undoing");
+
+    threshold = GTUtilsOptionPanelMsa::getThreshold(os);
+    thresholdComparison = GTUtilsOptionPanelMsa::getThresholdComparison(os);
+    isUseDotsOptionsSet = GTUtilsOptionPanelMsa::isUseDotsOptionSet(os);
+
+    CHECK_SET_ERR(expectedThreshold == threshold,
+                  QString("Threshold is incorrect: expected %1, got %2").arg(expectedThreshold).arg(threshold));
+    CHECK_SET_ERR(expectedThresholdComparison == thresholdComparison,
+                  QString("Threshold comparison is incorrect: expected %1, got %2").arg(expectedThresholdComparison).arg(thresholdComparison));
+    CHECK_SET_ERR(expectedIsUseDotsOptionsSet == isUseDotsOptionsSet,
+                  QString("Use dots option status is incorrect: expected %1, got %2").arg(expectedIsUseDotsOptionsSet).arg(isUseDotsOptionsSet));
 }
-} // namespace
-} // namespace U2
 
+GUI_TEST_CLASS_DEFINITION(test_0007) {
+//    Highlighting scheme options should be saved on the alphabet changing for an amino acid MSA
+
+//    1. Open "_common_data/fasta/RAW.fa".
+    GTUtilsProject::openFileExpectRawSequence(os, testDir + "_common_data/fasta/RAW.fa", "RAW263");
+
+//    2. Open "data/samples/CLUSTALW/ty3.aln.gz".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/ty3.aln.gz");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    3. Open "Highlighting" options panel tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
+
+//    4. Select "Conservation level" highlighting scheme.
+    GTUtilsOptionPanelMsa::setHighlightingScheme(os, "Conservation level");
+
+//    5. Set the next highlighting scheme options:
+//        threshold: 70%
+//        comparison: less or equal
+//        use dots: checked.
+    int expectedThreshold = 70;
+    GTUtilsOptionPanelMsa::ThresholdComparison expectedThresholdComparison = GTUtilsOptionPanelMsa::LessOrEqual;
+    bool expectedIsUseDotsOptionsSet = true;
+
+    GTUtilsOptionPanelMsa::setThreshold(os, expectedThreshold);
+    GTUtilsOptionPanelMsa::setThresholdComparison(os, expectedThresholdComparison);
+    GTUtilsOptionPanelMsa::setUseDotsOption(os, expectedIsUseDotsOptionsSet);
+
+//    6. Drag and drop "RAW263" sequence object from the Project View to the MSA Editor.
+    GTUtilsMsaEditor::dragAndDropSequenceFromProject(os, QStringList() << "RAW.fa" << "RAW263");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: the alignment alphabet is changed to Raw, highlighting scheme options are the same.
+    const bool isAlphabetRaw = GTUtilsMsaEditor::getEditor(os)->getMaObject()->getAlphabet()->isRaw();
+    CHECK_SET_ERR(isAlphabetRaw, "Alphabet is not RAW after the symbol replacing");
+
+    int threshold = GTUtilsOptionPanelMsa::getThreshold(os);
+    GTUtilsOptionPanelMsa::ThresholdComparison thresholdComparison = GTUtilsOptionPanelMsa::getThresholdComparison(os);
+    bool isUseDotsOptionsSet = GTUtilsOptionPanelMsa::isUseDotsOptionSet(os);
+
+    CHECK_SET_ERR(expectedThreshold == threshold,
+                  QString("Threshold is incorrect: expected %1, got %2").arg(expectedThreshold).arg(threshold));
+    CHECK_SET_ERR(expectedThresholdComparison == thresholdComparison,
+                  QString("Threshold comparison is incorrect: expected %1, got %2").arg(expectedThresholdComparison).arg(thresholdComparison));
+    CHECK_SET_ERR(expectedIsUseDotsOptionsSet == isUseDotsOptionsSet,
+                  QString("Use dots option status is incorrect: expected %1, got %2").arg(expectedIsUseDotsOptionsSet).arg(isUseDotsOptionsSet));
+
+//    6. Set the next highlighting scheme options:
+//        threshold: 30%
+//        comparison: greater or equal
+//        use dots: unchecked.
+    expectedThreshold = 30;
+    expectedThresholdComparison = GTUtilsOptionPanelMsa::GreaterOrEqual;
+    expectedIsUseDotsOptionsSet = false;
+
+    GTUtilsOptionPanelMsa::setThreshold(os, expectedThreshold);
+    GTUtilsOptionPanelMsa::setThresholdComparison(os, expectedThresholdComparison);
+    GTUtilsOptionPanelMsa::setUseDotsOption(os, expectedIsUseDotsOptionsSet);
+
+//    7. Press "Undo" button on the toolbar.
+    GTUtilsMsaEditor::undo(os);
+
+//    Expected state: the alignment alphabet is changed to Amino Acid, highlighting scheme options are the same.
+    const bool isAlphabetAmino = GTUtilsMsaEditor::getEditor(os)->getMaObject()->getAlphabet()->isAmino();
+    CHECK_SET_ERR(isAlphabetAmino, "Alphabet is not amino acid after the undoing");
+
+    threshold = GTUtilsOptionPanelMsa::getThreshold(os);
+    thresholdComparison = GTUtilsOptionPanelMsa::getThresholdComparison(os);
+    isUseDotsOptionsSet = GTUtilsOptionPanelMsa::isUseDotsOptionSet(os);
+
+    CHECK_SET_ERR(expectedThreshold == threshold,
+                  QString("Threshold is incorrect: expected %1, got %2").arg(expectedThreshold).arg(threshold));
+    CHECK_SET_ERR(expectedThresholdComparison == thresholdComparison,
+                  QString("Threshold comparison is incorrect: expected %1, got %2").arg(expectedThresholdComparison).arg(thresholdComparison));
+    CHECK_SET_ERR(expectedIsUseDotsOptionsSet == isUseDotsOptionsSet,
+                  QString("Use dots option status is incorrect: expected %1, got %2").arg(expectedIsUseDotsOptionsSet).arg(isUseDotsOptionsSet));
+}
 
+}   // namespace
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
index e49d83f..97024ea 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/colors/GTTestsMSAEditorColors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,6 +36,8 @@ GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0003)
 GUI_TEST_CLASS_DECLARATION(test_0004)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+GUI_TEST_CLASS_DECLARATION(test_0007)
 
 #undef GUI_TEST_SUITE
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
index c4ac1ab..1968689 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
index 1632785..17bbb9c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/consensus/GTTestsMSAEditorConsensus.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.cpp
index 273f784..f5a54a8 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,6 +49,7 @@
 #include "GTTestsMSAEditorEdit.h"
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
 #include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
@@ -147,100 +148,97 @@ GUI_TEST_CLASS_DEFINITION(test_0003_2){
 //Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTCTTT---TA-A, sequence length 15, right offset 14
 }
 
-void test_4(HI::GUITestOpStatus &os, int startPos, int endPos, QString expectedSeq, int i=0, int context=0){
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(startPos,i), QPoint(endPos, i));
+void test_4(HI::GUITestOpStatus &os, int startPos, int endPos, const QString &expectedSeq, int i = 0, int context = 0) {
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(startPos, i), QPoint(endPos, i));
 
-    if(context){
-        QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
+    if (0 != context) {
+        QWidget *seq = GTWidget::findWidget(os, "msa_editor_sequence_area");
         GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "Remove selection"));
-        GTMenu::showContextMenu(os,seq);
+        GTMenu::showContextMenu(os, seq);
+    } else {
+        GTKeyboardDriver::keyClick(Qt::Key_Delete);
     }
-    else{
-        GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    }
-
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,i), QPoint(14, i));
-    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
-
-    GTGlobals::sleep(500);
-    QString clipboardTest = GTClipboard::text(os);
 
-    CHECK_SET_ERR(clipboardTest==expectedSeq,clipboardTest);
+    const QString rowData = GTUtilsMSAEditorSequenceArea::getSequenceData(os, i);
+    CHECK_SET_ERR(rowData == expectedSeq, "Incorrect row:" + rowData);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0004){
+GUI_TEST_CLASS_DEFINITION(test_0004) {
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Select 1..5 region for Phaneroptera_falcata sequence. Press "delete".
-    test_4(os,0,4,"TTCTTTTAA-----");
 //    Expected state: Phaneroptera_falcata TTCTTTTAA-----, sequence length 14, right offset 9
+    test_4(os, 0, 4, "TTCTTTTAA-----");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0004_1){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0004_1) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,0,4,"---TATTAA-----",3);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima ---TATTAA-----, sequence length 14, right offset 9
+    test_4(os, 0, 4, "---TATTAA-----", 3);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0004_2){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0004_2) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,0,4,"TTT---TAA-----",7);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J TTT---TAA-----, sequence length 14, right offset 9
+    test_4(os, 0, 4, "TTT---TAA-----", 7);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005){
+GUI_TEST_CLASS_DEFINITION(test_0005) {
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Select 6..9 symbol for Phaneroptera_falcata sequence. Use context menu {Edit->Delete selection}.
-    test_4(os,5,8,"AAGACTTTAA----");
 //    Expected state: Phaneroptera_falcata AAGACTTTAA----, sequence length 14, right offsets 10
+    test_4(os, 5, 8, "AAGACTTTAA----");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005_1){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0005_1) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,5,8,"AAGTCATTAA----",3);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima AAGTCATTAA----, sequence length 14, right offset 10
+    test_4(os, 5, 8, "AAGTCATTAA----", 3);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005_2){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0005_2) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,5,8,"AAGTC--TAA----",7);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTC--TAA----, sequence length 14, right offset 10
+    test_4(os, 5, 8, "AAGTC--TAA----", 7);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0006){
+GUI_TEST_CLASS_DEFINITION(test_0006) {
 //    1. Open document _common_data\scenarios\msa\ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Select 13..14 symbol for Phaneroptera_falcata sequence. Use context menu {Edit->Delete selection}.
-    test_4(os,12,13,"AAGACTTCTTTT--",0,1);
 //    Expected state: Phaneroptera_falcata AAGACTTCTTTT--, sequence length 14, right offsets 12
+    test_4(os, 12, 13, "AAGACTTCTTTT--", 0, 1);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0006_1){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0006_1) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,12,13,"AAGTC---TATT--",3,1);
 //    Expected state: DIFFERENCE: Tettigonia_viridissima AAGTC---TATT--, sequence length 14, right offsets 12
+    test_4(os, 12, 13, "AAGTC---TATT--", 3, 1);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0006_2){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0006_2) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    test_4(os,12,13,"AAGTCTTT---T--",7,1);
 //    Expected state: DIFFERENCE: Mecopoda_elongata__Ishigaki__J AAGTCTTT---T--, sequence length 14, right offsets 12
+    test_4(os, 12, 13, "AAGTCTTT---T--", 7, 1);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0007){
@@ -426,114 +424,98 @@ Hetrodes_pupus_EF540832            AAGCTTTTAA---
 */
 }
 
-
-void test_9(HI::GUITestOpStatus &os, int i=0){
-    QWidget* seq=GTWidget::findWidget(os, "msa_editor_sequence_area");
+void test_9(HI::GUITestOpStatus &os, int i = 0) {
+    QWidget *seq = GTWidget::findWidget(os, "msa_editor_sequence_area");
     QString gaps;
-    QString expectedSeq;
 
-    if(i){
-        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(i,0), QPoint(i, 9));
-    }
-    else{
-        GTUtilsMSAEditorSequenceArea::click(os,QPoint(13,0));
+    if (0 != i) {
+        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(i, 0), QPoint(i, 9));
+    } else {
+        GTUtilsMSAEditorSequenceArea::click(os, QPoint(13, 0));
     }
 
     GTKeyboardDriver::keyClick( Qt::Key_Space);
-    GTGlobals::sleep(100);
     GTKeyboardDriver::keyClick( Qt::Key_Space);
-    GTGlobals::sleep(100);
-    GTWidget::click(os,seq);
-
-    if(i){
-        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(i,0), QPoint(i+1, 9));
-        GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
+    GTWidget::click(os, seq);
 
-        gaps=QString("--\n--\n--\n--\n--\n--\n--\n--\n--\n--");
-    }
-    else{
-        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(14,0), QPoint(15, 9));
-        GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
-        gaps=QString("-A\n--\n--\n--\n--\n--\n--\n--\n--\n--");
+//Expected state: two columns with gaps added to the end of sequence.
+    if (0 != i) {
+        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(i, 0), QPoint(i + 1, 9));
+        GTKeyboardUtils::copy(os);
+        gaps = QString("--\n--\n--\n--\n--\n--\n--\n--\n--\n--");
+    } else {
+        GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(14, 0), QPoint(15, 9));
+        GTKeyboardUtils::copy(os);
+        gaps = QString("-A\n--\n--\n--\n--\n--\n--\n--\n--\n--");
     }
 
-    GTGlobals::sleep(500);
-    QString clipboardTest = GTClipboard::text(os);
-
+    const QString clipboardText = GTClipboard::text(os);
+    CHECK_SET_ERR(clipboardText == gaps, "Expected:\n" + gaps + "\nFound:\n" + clipboardText);
 
-    CHECK_SET_ERR(clipboardTest==gaps,"\n Expected: \n" + gaps + "\nFound:\n" + clipboardTest);
-//Expected state: two columns with gaps added to the end of sequence.
 //3. Move cursor at 15th symbol in first sequence. Use msa editor context menu {Edit->Delete column of gaps}.
-
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "MSAE_MENU_EDIT" << "remove_columns_of_gaps"));
-    GTUtilsDialog::waitForDialog(os,new DeleteGapsDialogFiller(os,1));
-    GTMenu::showContextMenu(os,seq);
-
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14, 9));
-    GTKeyboardDriver::keyClick( 'c',Qt::ControlModifier);
-
-    GTGlobals::sleep(500);
-    clipboardTest = GTClipboard::text(os);
-    if(i){
-        expectedSeq=QString("AAGACTTCTTTTAA\n"
-                            "AAGCTTACTAA---\n"
-                            "TAGT---TTATTAA\n"
-                            "AAGTC---TATTAA\n"
-                            "TAGCTTATTAA---\n"
-                            "TAGCTTATTAA---\n"
-                            "TAGCTTATTAA---\n"
-                            "AAGTCTTT---TAA\n"
-                            "A---AGAATAATTA\n"
-                            "AAGCCTTTTAA---");
-    }
-    else{
-        expectedSeq=QString("AAGACTTCTTTTA-A\n"
-                            "AAGCTTACTAA----\n"
-                            "TAGT---TTATTAA-\n"
-                            "AAGTC---TATTAA-\n"
-                            "TAGCTTATTAA----\n"
-                            "TAGCTTATTAA----\n"
-                            "TAGCTTATTAA----\n"
-                            "AAGTCTTT---TAA-\n"
-                            "A---AGAATAATTA-\n"
-                            "AAGCCTTTTAA----");
-    }
-    CHECK_SET_ERR(clipboardTest==expectedSeq,"\n Expected: \n"+ expectedSeq  +"\nFound:\n" + clipboardTest);
-/*Expected state:
-Phaneroptera_falcata               AAGACTTCTTTTA-A
-Isophya_altaica_EF540820           AAGCTTACTAA----
-Bicolorana_bicolor_EF540830        TAGT---TTATTAA-
-Tettigonia_viridissima             AAGTC---TATTAA-
-Conocephalus_discolor              TAGCTTATTAA----
-Conocephalus_sp.                   TAGCTTATTAA----
-Conocephalus_percaudata            TAGCTTATTAA----
-Mecopoda_elongata__Ishigaki__J     AAGTCTTT---TAA-
-Podisma_sapporensis                A---AGAATAATTA-
-Hetrodes_pupus_EF540832            AAGCCTTTTAA----
-*/
-}
-GUI_TEST_CLASS_DEFINITION(test_0009){
+    GTUtilsDialog::waitForDialog(os, new DeleteGapsDialogFiller(os, 1));
+    GTMenu::showContextMenu(os, seq);
+
+//    Expected state:
+//    Phaneroptera_falcata               AAGACTTCTTTTA-A
+//    Isophya_altaica_EF540820           AAGCTTACTAA----
+//    Bicolorana_bicolor_EF540830        TAGT---TTATTAA-
+//    Tettigonia_viridissima             AAGTC---TATTAA-
+//    Conocephalus_discolor              TAGCTTATTAA----
+//    Conocephalus_sp.                   TAGCTTATTAA----
+//    Conocephalus_percaudata            TAGCTTATTAA----
+//    Mecopoda_elongata__Ishigaki__J     AAGTCTTT---TAA-
+//    Podisma_sapporensis                A---AGAATAATTA-
+//    Hetrodes_pupus_EF540832            AAGCCTTTTAA----
+    const QStringList msa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedMsa = (0 != i ? QStringList() << "AAGACTTCTTTTAA"
+                                                            << "AAGCTTACTAA---"
+                                                            << "TAGT---TTATTAA"
+                                                            << "AAGTC---TATTAA"
+                                                            << "TAGCTTATTAA---"
+                                                            << "TAGCTTATTAA---"
+                                                            << "TAGCTTATTAA---"
+                                                            << "AAGTCTTT---TAA"
+                                                            << "A---AGAATAATTA"
+                                                            << "AAGCCTTTTAA---"
+                                            : QStringList() << "AAGACTTCTTTTA-A"
+                                                            << "AAGCTTACTAA----"
+                                                            << "TAGT---TTATTAA-"
+                                                            << "AAGTC---TATTAA-"
+                                                            << "TAGCTTATTAA----"
+                                                            << "TAGCTTATTAA----"
+                                                            << "TAGCTTATTAA----"
+                                                            << "AAGTCTTT---TAA-"
+                                                            << "A---AGAATAATTA-"
+                                                            << "AAGCCTTTTAA----");
+    CHECK_SET_ERR(msa == expectedMsa, "Expected:\n" + expectedMsa.join("\n") + "\nFound:\n" + msa.join("\n"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0009) {
 //Check remove columns with gaps
 //1. Open document _common_data\scenarios\msa\ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Put cursor at last symbol in first sequence, click "Space" two times.
     test_9(os);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0009_1){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0009_1) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-//DIFFERENCE: 2. Select column 3, click "Space" two times.
-    test_9(os,2);
 
+//DIFFERENCE: 2. Select column 3, click "Space" two times.
+    test_9(os, 2);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0009_2){
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+GUI_TEST_CLASS_DEFINITION(test_0009_2) {
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //DIFFERENCE: 2. Select column 9, click "Space" two times.
-    test_9(os,8);
+    test_9(os, 8);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010){
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
index 63bad9d..3718ee1 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/edit/GTTestsMSAEditorEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.cpp
index 4ab340d..a437c40 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,31 +45,23 @@ namespace U2 {
 namespace GUITest_common_scenarios_msa_editor_overview {
 using namespace HI;
 
-GUI_TEST_CLASS_DEFINITION(test_0001){
+GUI_TEST_CLASS_DEFINITION(test_0001) {
     //1. Open "_common_data/fasta/empty.fa".
-    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "empty.fa");
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta/empty.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
     //Expected state: msa is empty, overview is pure white.
-    QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
-
-    QPixmap pixmap = QPixmap::grabWidget(simple, simple->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(simple->rect().center());
-    QColor c(rgb);
+    QWidget *simpleOverview = GTWidget::findWidget(os, "msa_overview_area_simple");
 
-    CHECK_SET_ERR(c.name()=="#ededed","simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+    QColor c = GTWidget::getColor(os, simpleOverview, simpleOverview->rect().center());
+    CHECK_SET_ERR(c.name() == "#ededed", "simple overview has wrong color. Expected: #ededed, Found: " + c.name());
 
-    simple = GTWidget::findWidget(os, "msa_overview_area_graph");
-    pixmap = QPixmap::grabWidget(simple, simple->rect());
-    img = pixmap.toImage();
-    rgb = img.pixel(simple->rect().center());
-    c = QColor(rgb);
-
-    CHECK_SET_ERR(c.name()=="#ededed","graph overview has wrong color. Expected: #ededed, Found: " + c.name());
+    QWidget *graphOverview = GTWidget::findWidget(os, "msa_overview_area_graph");
+    c = GTWidget::getColor(os, graphOverview, graphOverview->rect().center());
+    CHECK_SET_ERR(c.name() == "#ededed", "graph overview has wrong color. Expected: #ededed, Found: " + c.name());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002){
@@ -123,15 +115,18 @@ GUI_TEST_CLASS_DEFINITION(test_0004){
     CHECK_SET_ERR(!overview->isVisible(), "overview is visiable");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005){
+GUI_TEST_CLASS_DEFINITION(test_0005) {
 //    1. Open "_common_data/clustal/COI_na.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/COI na.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+
 //    Expected state: simple overview is enabled.
-    QWidget* simple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QWidget *simple = GTWidget::findWidget(os, "msa_overview_area_simple");
     CHECK_SET_ERR(simple->isVisible(), "simple overveiw is not visiable");
+
 //    2. Resize Ugene window to make overview area smaller.
     QMainWindow *window = AppContext::getMainWindow()->getQMainWindow();
     if (window->isMaximized()) {
@@ -139,18 +134,16 @@ GUI_TEST_CLASS_DEFINITION(test_0005){
         GTGlobals::sleep(500);
     }
     GTWidget::resizeWidget(os, window, QSize(550, 550));
+
 //    Expected state: at some moment simple overview is not displayed -
 //    there is a gray area with "MSA is too big for current window size. Simple overview is unavailable." text.
 
     // text can not be checked, check color
-    QPixmap pixmap = QPixmap::grabWidget(simple, simple->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(simple->rect().topLeft() + QPoint(5,5));
-    QColor c(rgb);
-    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
+    QColor c = GTWidget::getColor(os, simple, simple->rect().topLeft() + QPoint(5, 5));
+    CHECK_SET_ERR(c.name() == "#a0a0a4", "simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
 
     const int tasksCount = GTUtilsTaskTreeView::getTopLevelTasksCount(os);
-    CHECK_SET_ERR(0 == tasksCount,"An unexpected task is running. Ensure that the overview is not calculating");
+    CHECK_SET_ERR(0 == tasksCount, "An unexpected task is running. Ensure that the overview is not calculating");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0006){
@@ -161,11 +154,11 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 //    2. Resize main window.
     QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple1 = pixmapSimple1.toImage();
 
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
-    QPixmap pixmapGraph1 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));
+    QPixmap pixmapGraph1 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgGraph1 = pixmapGraph1.toImage();
 
     QMainWindow* window = AppContext::getMainWindow()->getQMainWindow();
@@ -173,9 +166,9 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 
     GTGlobals::sleep(1000);
 
-    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple2 = pixmapSimple2.toImage();
-    QPixmap pixmapGraph2 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));
+    QPixmap pixmapGraph2 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgGraph2 = pixmapGraph2.toImage();
 
     CHECK_SET_ERR(imgSimple1 != imgSimple2, "simple overview not updated");
@@ -197,10 +190,10 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
 
     for(int i=0; i<12; i++){
         //saving overviews' images
-        QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+        QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
         QImage imgSimple1 = pixmapSimple1.toImage();
 
-        QPixmap pixmapGraph1 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));
+        QPixmap pixmapGraph1 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));       // It should be replaces with GTWidget::getPixmap()
         QImage imgGraph1 = pixmapGraph1.toImage();
 
         GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(40,17));
@@ -208,9 +201,9 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
         GTGlobals::sleep(500);
 
         //checking images changed
-        QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+        QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
         QImage imgSimple2 = pixmapSimple2.toImage();
-        QPixmap pixmapGraph2 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));
+        QPixmap pixmapGraph2 = QPixmap::grabWidget(overviewGraph, QRect(QPoint(0,0), QPoint(200,overviewGraph->rect().height())));       // It should be replaces with GTWidget::getPixmap()
         QImage imgGraph2 = pixmapGraph2.toImage();
 
         CHECK_SET_ERR(imgSimple1 != imgSimple2, "simple overview not updated");
@@ -218,93 +211,85 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     }
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0008){
+GUI_TEST_CLASS_DEFINITION(test_0008) {
 //    1. Open "_common_data/clustal/COI_na.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/COI na.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
-    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    QWidget *overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
 
     //saving overviews' images
-    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple1 = pixmapSimple1.toImage();
 
 //    2. Select some area in msa view and move it with mouse.
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(10,10));
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,5));
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(10, 10));
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5, 5));
     GTMouseDriver::press();
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15,5));
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15, 5));
 
 //    Expected state: while mouse button is pressed graph overview is blocked. On mouse release overview updating starts.
 //    Simple overview updates simultaneously.
     //checking simple overview image changed
-    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple2 = pixmapSimple2.toImage();
 
     CHECK_SET_ERR(imgSimple1 != imgSimple2, "simple overview not updated");
 
-    QPixmap pixmapGraph = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmapGraph.toImage();
-
 #ifdef Q_OS_WIN
-    QRgb rgb = img.pixel(QPoint(6,6));
-    QColor c(rgb);
-
-    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
+    const QPoint point(6, 6);
 #else
-    QRgb rgb = img.pixel(overviewGraph->rect().center() - QPoint(0,20));
-    QColor c(rgb);
-
-    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
+    const QPoint point(overviewGraph->rect().center() - QPoint(0, 20));
 #endif
+    const QColor c = GTWidget::getColor(os, overviewGraph, point);
+    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
+
     GTMouseDriver::release();
     GTThread::waitForMainThread();
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0009){
+GUI_TEST_CLASS_DEFINITION(test_0009) {
 //    1. Open "_common_data/clustal/COI_na.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/COI na.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
-    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    QWidget *overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
 
     //saving overviews' images
-    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple1 = pixmapSimple1.toImage();
 
 //    2. Select one symbol.
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,5));
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5, 5));
     GTMouseDriver::click();
+
 //    3. Press Delete button and release it after a while.
     GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep(1000);
+
 //    Expected state: while button is pressed graph overview is blocked. Overview updating starts on button release.
 //    Simple overview updates simultaneously.
     //checking simple overview image changed
-    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple2 = pixmapSimple2.toImage();
 
     CHECK_SET_ERR(imgSimple1 != imgSimple2, "simple overview not updated");
 
-    QPixmap pixmapGraph = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmapGraph.toImage();
-    QRgb rgb = img.pixel(overviewGraph->rect().center() - QPoint(0,20));
-    QColor c(rgb);
-
+    const QColor c = GTWidget::getColor(os, overviewGraph, overviewGraph->rect().center() - QPoint(0, 20));
     CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
 
     GTKeyboardDriver::keyRelease(Qt::Key_Delete);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0010){
+GUI_TEST_CLASS_DEFINITION(test_0010) {
 //    1. Open "_common_data/clustal/COI_na.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/COI na.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
@@ -313,101 +298,91 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
     QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
 
     //saving overviews' images
-    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple1 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple1 = pixmapSimple1.toImage();
 
 //    2. Select one symbol.
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5,5));
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(5, 5));
     GTMouseDriver::click();
+
 //    3. Press Delete button and release it after a while.
     GTKeyboardDriver::keyPress(Qt::Key_Space);
     GTGlobals::sleep(1000);
+
 //    Expected state: while button is pressed graph overview is blocked. Overview updating starts on button release.
 //    Simple overview updates simultaneously.
     //checking simple overview image changed
-    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0,0), QPoint(200,overviewSimple->rect().height())));
+    QPixmap pixmapSimple2 = QPixmap::grabWidget(overviewSimple, QRect(QPoint(0, 0), QPoint(200, overviewSimple->rect().height())));       // It should be replaces with GTWidget::getPixmap()
     QImage imgSimple2 = pixmapSimple2.toImage();
 
     CHECK_SET_ERR(imgSimple1 != imgSimple2, "simple overview not updated");
 
-    QPixmap pixmapGraph = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmapGraph.toImage();
-    QRgb rgb = img.pixel(overviewGraph->rect().topLeft() + QPoint(5,5));
-    QColor c(rgb);
+    QColor c = GTWidget::getColor(os, overviewGraph, overviewGraph->rect().topLeft() + QPoint(5, 5));
 
     GTKeyboardDriver::keyRelease(Qt::Key_Space);
-#ifdef Q_OS_MAC
-    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
-#else
-    CHECK_SET_ERR(c.name()=="#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
-#endif
 
+    CHECK_SET_ERR(c.name() == "#a0a0a4","simple overview has wrong color. Expected: #a0a0a4, Found: " + c.name());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0011){
+GUI_TEST_CLASS_DEFINITION(test_0011) {
 //    1. Open "_common_data/phylip/seq_protein.ph".
-    GTFileDialog::openFile(os, testDir + "_common_data/phylip", "seq_protein.ph");
+    GTFileDialog::openFile(os, testDir + "_common_data/phylip/seq_protein.ph");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+
     //saving overview image
-    QPixmap pixmapGraph = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmapGraph.toImage();
-//    2. Go to MSA Overview context menu (right click on msa overview).
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    const QImage img = GTWidget::getImage(os, overviewGraph);
 
+//    2. Go to MSA Overview context menu (right click on msa overview).
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Display settings"
-                                                      << "Orientation"
-                                                      << "Top to bottom"));
+                                                                        << "Orientation"
+                                                                        << "Top to bottom"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
+
 //    3. Go to {Display settings... -> Orientation}
 //    4. Change graph orientation.
 //    Expected state: y-axis changes its orientation. No calculation task starts.
-    QPixmap pixmapGraph1 = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img1 = pixmapGraph1.toImage();
+    const QImage img1 = GTWidget::getImage(os, overviewGraph);
     CHECK_SET_ERR(img1 != img, "overview not inverted");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0012){
+GUI_TEST_CLASS_DEFINITION(test_0012) {
 //    1. Open "_common_data/stockholm/5_msa.sto".
-    GTFileDialog::openFile(os, testDir + "_common_data/stockholm", "5_msa.sto");
+    GTFileDialog::openFile(os, testDir + "_common_data/stockholm/5_msa.sto");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Go to MSA Overview context menu (right click on msa overview).
-    GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255,0,0));
+    GTUtilsDialog::waitForDialog(os, new ColorDialogFiller(os, 255, 0, 0));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Display settings"
-                                                      << "Set color"));
+                                                                        << "Set color"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area_graph"));
 
 //    3. Go to {Display settings -> Color}.
 //    Expected state: color dialog appears.
 //    4. Chenge current color.
 //    Expected state: graph color had changed.
-    QWidget* graph = GTWidget::findWidget(os, "msa_overview_area_graph");
-    QPixmap pixmap = QPixmap::grabWidget(graph, graph->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(QPoint(5, graph->rect().height() - 5));
-    QColor c(rgb);
-
-    CHECK_SET_ERR(c.name()=="#eda2a2","simple overview has wrong color. Expected: #eda2a2, Found: " + c.name());
+    QWidget *graph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    const QColor c = GTWidget::getColor(os, graph, QPoint(5, graph->rect().height() - 5));
+    CHECK_SET_ERR(c.name() == "#eda2a2","simple overview has wrong color. Expected: #eda2a2, Found: " + c.name());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0013){
+GUI_TEST_CLASS_DEFINITION(test_0013) {
 //    1. Open "_common_data/stockholm/5_msa.sto".
-    GTFileDialog::openFile(os, testDir + "_common_data/stockholm", "5_msa.sto");
+    GTFileDialog::openFile(os, testDir + "_common_data/stockholm/5_msa.sto");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Go to MSA Overview context menu (right click on msa overview).
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Display settings"
-                                                      << "Graph type"
-                                                      << "Line graph"));
+                                                                        << "Graph type"
+                                                                        << "Line graph"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area_graph"));
+
 //    3. Go to {Display settings -> Graph type};
 //    4. Change selected type.
 //    Expected state: graph type had changed.
-    QWidget* graph = GTWidget::findWidget(os, "msa_overview_area_graph");
-    QPixmap pixmap = QPixmap::grabWidget(graph, graph->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(QPoint(5, graph->rect().height() - 5));
-    QColor c(rgb);
-
-    CHECK_SET_ERR(c.name()=="#ededed","simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+    QWidget *graph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    const QColor c = GTWidget::getColor(os, graph, QPoint(5, graph->rect().height() - 5));
+    CHECK_SET_ERR(c.name() == "#ededed","simple overview has wrong color. Expected: #ededed, Found: " + c.name());
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0014){
@@ -431,140 +406,136 @@ GUI_TEST_CLASS_DEFINITION(test_0014){
 //    Expected state: in simple msa overview color scheme was changed.
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0015){
+GUI_TEST_CLASS_DEFINITION(test_0015) {
     //this is 0015 and 0016 scenarios
 //    1. Open "_common_data/CLUSLAL/COI_na.aln"
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "COI na.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/COI na.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Go to MSA overview context menu (right click on MSA Overview).
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
-                                                      << "Gaps"));
+                                                                        << "Gaps"));
     GTMenu::showContextMenu(os, overviewGraph);
+
 //    3. Select {Calculation method -> Strict}.
 //    Expected state: graph displays the percent of the most frequent nucleotide in column.
 //    Current graph corresponds to column over the consensus in sequence area.
-    QPixmap pixmap = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmap.toImage();
-    QRgb rgb = img.pixel(QPoint(5, overviewGraph->rect().height() - 5));
-    QColor c(rgb);
-
-    CHECK_SET_ERR(c.name()=="#ededed","simple overview has wrong color. Expected: #ededed, Found: " + c.name());
+    QColor c = GTWidget::getColor(os, overviewGraph, QPoint(5, overviewGraph->rect().height() - 5));
+    CHECK_SET_ERR(c.name() == "#ededed", "simple overview has wrong color. Expected: #ededed, Found: " + c.name());
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
-                                                      << "Highlighting"));
+                                                                        << "Highlighting"));
     GTMenu::showContextMenu(os, overviewGraph);
 
     overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
-    pixmap = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    img = pixmap.toImage();
-    rgb = img.pixel(QPoint(5, overviewGraph->rect().height() - 5));
-    c = QColor(rgb);
-
-    CHECK_SET_ERR(c.name()=="#d1d1d2","simple overview has wrong color. Expected: #d1d1d2, Found: " + c.name());
+    c = GTWidget::getColor(os, overviewGraph, QPoint(5, overviewGraph->rect().height() - 5));
+    CHECK_SET_ERR(c.name() == "#d1d1d2", "simple overview has wrong color. Expected: #d1d1d2, Found: " + c.name());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0017){
+GUI_TEST_CLASS_DEFINITION(test_0017) {
 //    1. Open "_common_data/CLUSLAL/HIV_1.aln"
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Go to MSA overview context menu (right click on MSA Overview).
 //    3. Select {Calculation method -> Gaps}.
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
-                                                      << "Gaps"));
+                                                                        << "Gaps"));
     GTMenu::showContextMenu(os, overviewGraph);
+
 //    Expected state: graph overview displays percent of gaps in each culumn.
     //save grahpView
-    QPixmap pixmap = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmap.toImage();
+    const QImage img = GTWidget::getImage(os, overviewGraph);
+
 //    4. Go to Highlighting tab on Options panel.
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTGlobals::sleep(500);
+
 //    5. Select Highlighting to "Gaps"
-    QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
+    QComboBox *combo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "highlightingScheme"));
     CHECK_SET_ERR(combo != NULL, "highlightingScheme not found!");
     GTComboBox::setIndexWithText(os, combo , "Gaps");
+
 //    6. Go to MSA overview context menu (right click on MSA Overview).
 //    7. Select {Calculation method -> Highlighting}.
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
-                                                      << "Highlighting"));
+                                                                        << "Highlighting"));
     GTMenu::showContextMenu(os, overviewGraph);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTGlobals::sleep(1000);
-//    Expected state: graph didn't change.
-
-    QPixmap pixmap1 = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img1 = pixmap1.toImage();
 
-    CHECK_SET_ERR(img==img1, "overview changed");
+//    Expected state: graph didn't change.
+    const QImage img1 = GTWidget::getImage(os, overviewGraph);
+    CHECK_SET_ERR(img == img1, "overview changed");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0019){
+GUI_TEST_CLASS_DEFINITION(test_0019) {
     //0019 and 0020 scenarios
 //    1. Open "_common_data/CLUSLAL/HIV_1.aln"
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "HIV-1.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Go to MSA overview context menu (right click on MSA Overview).
-    QWidget* overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
+    QWidget *overviewGraph = GTWidget::findWidget(os, "msa_overview_area_graph");
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Calculation method"
-                                                      << "Highlighting"));
+                                                                        << "Highlighting"));
     GTMenu::showContextMenu(os, overviewGraph);
+
 //    3. Select {Calculation method -> Highlighting}.
 //    4. Go to Highlighting tab on Options panel.
     //save grahpView
-    QPixmap pixmap = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img = pixmap.toImage();
+    const QImage img = GTWidget::getImage(os, overviewGraph);
 
     GTWidget::click(os, GTWidget::findWidget(os, "OP_MSA_HIGHLIGHTING"));
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "sf170");
     GTWidget::click(os, GTWidget::findWidget(os,"addSeq"));
+
 //    5. Change Highlighting.
-    QComboBox* combo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
+    QComboBox *combo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "highlightingScheme"));
     CHECK_SET_ERR(combo != NULL, "highlightingScheme not found!");
     GTComboBox::setIndexWithText(os, combo , "Agreements");
+
 //    Expected state: graph displays percent of highlighted cells in column.
     //save grahpView
-    QPixmap pixmap1 = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img1 = pixmap1.toImage();
-    CHECK_SET_ERR(img!=img1, "overview not changed");
+    const QImage img1 = GTWidget::getImage(os, overviewGraph);
+    CHECK_SET_ERR(img != img1, "overview not changed");
+
 //    Overview changes after each highlighting change.
     GTComboBox::setIndexWithText(os, combo , "Disagreements");
-    QPixmap pixmap2 = QPixmap::grabWidget(overviewGraph, overviewGraph->rect());
-    QImage img2 = pixmap2.toImage();
-    CHECK_SET_ERR(img!=img2, "overview not changed");
-
+    const QImage img2 = GTWidget::getImage(os, overviewGraph);
+    CHECK_SET_ERR(img != img2, "overview not changed");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0020){
+GUI_TEST_CLASS_DEFINITION(test_0020) {
 /* 1. Open "_common_data/clustal/test_1393.aln".
  * 2. Show simple overview.
  * 3. Select whole alignment.
  * Expected state: whole simple overview is filled with a selection rect.
  * 4. Click "Align sequence to this alignment" button on the tool bar and select "data/samples/fastq/eas.fastq".
  * Expected state: sequences are added, two of five sequences are selected both in the sequence area and simple overview.
- * Current state: sequences are added, two of five sequences are selected in the sequence area, but the simple overview if filled with a selection rect like whole alignment is selected.
+ * Current state: sequences are added, two of five sequences are selected in the sequence area, but the simple overview is filled with a selection rect like whole alignment is selected.
  */
 
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/test_1393.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5,0), QPoint(-5,2));
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
 
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/FASTQ/eas.fastq"));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTGlobals::sleep();
-    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
-    CHECK_SET_ERR(color.name() == "#ededed", "graph overview has wrong color. Expected: #ededed, Found: " + color.name());
+    QWidget *overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    const QColor color = GTWidget::getColor(os, overviewSimple, overviewSimple->geometry().topRight() - QPoint(5, -5));
+    CHECK_SET_ERR(color.name() == "#ededed", "simple overview has wrong color. Expected: #ededed, found: " + color.name());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0021){
+GUI_TEST_CLASS_DEFINITION(test_0021) {
 /* 1. Open "_common_data/clustal/test_1393.aln".
  * 2. Select whole alignment.
  * 3. Show simple overview.
@@ -572,21 +543,20 @@ GUI_TEST_CLASS_DEFINITION(test_0021){
  * Current state: selection not showed.
  */
 
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/test_1393.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-4,2), QPoint(-5,0));
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
-    GTGlobals::sleep();
-    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
-    CHECK_SET_ERR(color.name() == "#7eaecc", "graph overview has wrong color. Expected: #7eaecc, Found: " + color.name());
+    QWidget *overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    const QColor color = GTWidget::getColor(os, overviewSimple, overviewSimple->geometry().topRight() - QPoint(5, -5));
+    CHECK_SET_ERR(color.name() == "#7eaecc", "simple overview has wrong color. Expected: #7eaecc, Found: " + color.name());
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0022){
+GUI_TEST_CLASS_DEFINITION(test_0022) {
 /* 1. Open "_common_data/clustal/test_1393.aln".
  * 2. Open ProjectView if it closed
  * 3. Select whole alignment.
@@ -597,26 +567,24 @@ GUI_TEST_CLASS_DEFINITION(test_0022){
  * Current state: selection is not full.
  */
 
-    GTFileDialog::openFile(os, testDir + "_common_data/clustal", "test_1393.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/clustal/test_1393.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsProjectTreeView::openView(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-4,2), QPoint(-5,0));
+    GTUtilsMSAEditorSequenceArea::selectArea(os);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Show simple overview"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os, "msa_overview_area"));
 
     GTUtilsProjectTreeView::toggleView(os);
 
-    GTGlobals::sleep();
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    QWidget* overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
-    QColor color = GTWidget::getColor(os,overviewSimple,overviewSimple->geometry().topRight()-QPoint(5,-5));
-    CHECK_SET_ERR(color.name() == "#7eaecc", "graph overview has wrong color. Expected: #7eaecc, Found: " + color.name());
+    QWidget *overviewSimple = GTWidget::findWidget(os, "msa_overview_area_simple");
+    const QColor color = GTWidget::getColor(os, overviewSimple, overviewSimple->geometry().topRight() - QPoint(5, -5));
+    CHECK_SET_ERR(color.name() == "#7eaecc", "simple overview has wrong color. Expected: #7eaecc, Found: " + color.name());
 }
 
-
-}//namespace GUITest_common_scenarios_msa_editor
-
-}//namespace U2
+}   // namespace GUITest_common_scenarios_msa_editor
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
index 6830410..d22586b 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/overview/GTTestsMSAEditorOverview.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp
index d2b036b..c82b229 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -454,7 +454,7 @@ GUI_TEST_CLASS_DEFINITION(test_0015){
     GTUtilsMsaEditor::toggleCollapsingMode(os);
 
     //2. Enable collapsing mode
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Mecopoda_elongata__Ishigaki__J");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Mecopoda_elongata__Ishigaki__J");
 
     //3. Select a character in sequence inside of the collapsing group.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(9, 14), QPoint(9, 14));
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
index 141b630..07c3b5d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/msa_editor/replace_character/GTTestsMSAEditorReplaceCharacter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.cpp
index 099438d..a7f320d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
index 1493d8c..afbac70 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/GTTestsOptionPanel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.cpp
index 9eb0133..7a96b04 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QApplication>
+#include <QDir>
 #include <QGraphicsItem>
 #include <QMainWindow>
 
@@ -43,6 +44,7 @@
 #include "GTTestsOptionPanelMSA.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsOptionPanelMSA.h"
 #include "GTUtilsPhyTree.h"
@@ -172,26 +174,31 @@ GUI_TEST_CLASS_DEFINITION(general_test_0004){
     GTWidget::click(os, sequenceLineEdit);//needed to close completer
 }
 
-GUI_TEST_CLASS_DEFINITION(general_test_0005){
+GUI_TEST_CLASS_DEFINITION(general_test_0005) {
 //    1. Open file data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Open general option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
+
 //    3. Delete Hetrodes_pupus_EF540832
     GTUtilsMSAEditorSequenceArea::selectSequence(os, "Hetrodes_pupus_EF540832");
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep(300);
+
 //    Expected state: Sequence number is 17
-    int height = GTUtilsOptionPanelMsa::getHeight(os);
-    CHECK_SET_ERR( height == 17, QString("wrong height. expected 17, found %1").arg(height));
+    const int height = GTUtilsOptionPanelMsa::getHeight(os);
+    CHECK_SET_ERR(height == 17, QString("wrong height. expected 17, found %1").arg(height));
+
 //    4. Select one column. Press delete
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 0), QPoint(5,17));
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
+    GTUtilsMsaEditor::clickColumn(os, 5);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
     GTGlobals::sleep(300);
+
 //    Expected state: Length is 603
-    int length = GTUtilsOptionPanelMsa::getLength(os);
-    CHECK_SET_ERR( length== 603, QString("wrong length. expected 17, found %1").arg(length));
+    const int length = GTUtilsOptionPanelMsa::getLength(os);
+    CHECK_SET_ERR(length == 603, QString("wrong length. expected 603, found %1").arg(length));
 }
 
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0001){
@@ -853,8 +860,9 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0006){
             .arg("UGENE").arg(currentScheme));
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "UGENE", PopupChecker::IsChecked));
-    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
-    GTGlobals::sleep(500);
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);	
+
+	GTUtilsOptionPanelMsa::closeTab(os, GTUtilsOptionPanelMsa::Highlighting);
 }
 
 namespace {
@@ -875,10 +883,20 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0007){
     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
 //    4. Check no highlighting
     setHighlightingType(os, "No highlighting");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#fcff92");
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
+    GTGlobals::sleep();
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#a0a0a4");
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 2));
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,2), "#ff99b1");
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(2, 0));
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2,0), "#4eade1");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,0), "#70f970");
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(4, 0));
+    GTGlobals::sleep();
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,0), "#a0a0a4");
+    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(4, 2));
+    GTGlobals::sleep();
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(4,2), "#ffffff");
 }
 
@@ -907,7 +925,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0008){
     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
 //    4. Check Agreements highlighting type
     setHighlightingType(os, "Agreements");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#fcff92");
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#a0a0a4");
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,2), "#ffffff");
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(2,0), "#4eade1");
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(3,1), "#ffffff");
@@ -988,7 +1006,7 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0010_1){
     GTUtilsOptionPanelMsa::addReference(os, "CfT-1_Cladosporium_fulvum");
 //    4. Check Gaps highlighting type
     setHighlightingType(os, "Gaps");
-    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,0), "#c0c0c0");
+    GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(0,1), "#c0c0c0");
 }
 
 GUI_TEST_CLASS_DEFINITION(highlighting_test_0011){
@@ -1021,30 +1039,32 @@ GUI_TEST_CLASS_DEFINITION(highlighting_test_0012){
     GTUtilsMSAEditorSequenceArea::checkColor(os, QPoint(6,1), "#fcff92");
 }
 
-GUI_TEST_CLASS_DEFINITION(highlighting_test_0013){
+GUI_TEST_CLASS_DEFINITION(highlighting_test_0013) {
 //1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //2. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
-    QWidget* w = GTWidget::findWidget(os, "msa_editor_sequence_area");
-    QPixmap initPixmap = QPixmap::grabWidget(w, w->rect());
-    QImage initImg = initPixmap.toImage();//initial state
+    QWidget *w = GTWidget::findWidget(os, "msa_editor_sequence_area");
+    const QImage initImg = GTWidget::getImage(os, w);
+
 //3. Check "use dots" checkbox
     setHighlightingType(os, "Agreements");
-    QCheckBox* useDots = qobject_cast<QCheckBox*>(GTWidget::findWidget(os, "useDots"));
+    QCheckBox *useDots = qobject_cast<QCheckBox *>(GTWidget::findWidget(os, "useDots"));
     CHECK_SET_ERR(useDots != NULL, "use dots checkbox not found");
     GTCheckBox::setChecked(os, useDots, true);
+
 //Expected state: no effect
-    QPixmap pixmap = QPixmap::grabWidget(w, w->rect());
-    QImage img = pixmap.toImage();
+    QImage img = GTWidget::getImage(os, w);
     CHECK_SET_ERR(img == initImg, "sequence area unexpectedly changed");
+
 //4. Select Phaneroptera_falcata as reference.
     GTUtilsOptionPanelMsa::addReference(os, "Phaneroptera_falcata");
+
 //Expected state: not highlighted changed to dots
-    pixmap = QPixmap::grabWidget(w, w->rect());
-    img = pixmap.toImage();
-    CHECK_SET_ERR(img != initImg, "image not changed");//no way to check dots. Can only check that sequence area changed
+    img = GTWidget::getImage(os, w);
+    CHECK_SET_ERR(img != initImg, "image not changed");     // no way to check dots. Can only check that sequence area changed
 }
 
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001){
@@ -1061,12 +1081,12 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0001){
     CHECK_SET_ERR(!alignButton->isEnabled(), "alignButton is unexpectidly enabled");
 //    4. Add Isophya_altaica_EF540820 sequence
     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
-//    Expected state: Similarity label appeared. Similarity is 42%. Align button enabled
+//    Expected state: Similarity label appeared. Similarity is 43%. Align button enabled
     CHECK_SET_ERR(alignButton->isEnabled(), "align button is unexpectibly disabled");
     QLabel* similarityValueLabel = qobject_cast<QLabel*>(GTWidget::findWidget(os, "similarityValueLabel"));
     CHECK_SET_ERR(similarityValueLabel != NULL, "similarityValueLabel not found");
     QString percent = similarityValueLabel->text();
-    CHECK_SET_ERR(percent == "42%", QString("unexpected percent: %1").arg(percent));
+    CHECK_SET_ERR(percent == "43%", QString("unexpected percent: %1").arg(percent));
 //    (branches: amino, raw alphabets)
 }
 
@@ -1135,8 +1155,8 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0004){
     CHECK_SET_ERR(line2 != NULL, "lineEdit 2 not found");
     GTLineEdit::setText(os, line2, "wrong name");
     CHECK_SET_ERR(GTBaseCompleter::isEmpty(os), "Completer is not empty");
-
-    GTKeyboardDriver::keyClick( Qt::Key_Escape);
+	GTKeyboardDriver::keyClick(Qt::Key_Escape);
+	GTUtilsOptionPanelMsa::toggleTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    Expected state: empty popup helper appeared
 }
 
@@ -1390,6 +1410,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0008){
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009){
     GTLogTracer l;
     const QString fileName = "pairwise_alignment_test_0009.aln";
+	const QString dirName = "pairwise_alignment_test_0009";
 //    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -1400,21 +1421,27 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0009){
     GTUtilsOptionPanelMsa::addSecondSeqToPA(os, "Isophya_altaica_EF540820");
 //    4. Add Isophya_altaica_EF540820 sequence
 //    5. Select some existing read-only file as output
-    QString s = sandBoxDir + fileName;
+    QString s = sandBoxDir + "pairwise_alignment_test_0009";
+
+    QDir().mkpath(s);
+
+    s += "/" + fileName;
     QFile f(s);
     bool created = f.open(QFile::ReadWrite);
     CHECK_SET_ERR(created, "file not created");
     f.close();
     GTFile::setReadOnly(os, s);
 
-    setOutputPath(os, sandBoxDir,  fileName);
+	setOutputPath(os, sandBoxDir + dirName, fileName);
     align(os);
     GTGlobals::sleep(500);
-//    Expected state: error in log: Task {Pairwise alignment task} finished with error: No permission to write to 'COI_transl.aln' file.
+//    Expected state: error in log: Task {Pairwise alignment task} finished with error: No permission to write to 'pairwise_alignment_test_0009.aln' file.
     QString error = l.getError();
     QString expected;
     expected = QString("Task {Pairwise alignment task} finished with error: No permission to write to \'%1\' file.").arg(fileName);
     CHECK_SET_ERR(error.contains(expected), QString("enexpected error: %1").arg(error));
+
+    GTFile::setReadWrite(os, s);
 }
 
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
@@ -1433,7 +1460,7 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
 //    5. Select some existing read-only file as output
     QString s = sandBoxDir + dirName;
     bool ok = QDir().mkpath(s);
-    CHECK_SET_ERR(ok, "subdirectory not created");
+    CHECK_SET_ERR(ok, "subfolder not created");
 
     GTFile::setReadOnly(os, s);
 
@@ -1444,7 +1471,10 @@ GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0010){
     QString error = l.getError();
     QString expected = QString("Task {Pairwise alignment task} finished with error: No permission to write to \'%1\' file.").arg(fileName);
     CHECK_SET_ERR(error == expected, QString("enexpected error: %1").arg(error));
+
+    GTFile::setReadWrite(os, s);
 }
+
 GUI_TEST_CLASS_DEFINITION(pairwise_alignment_test_0011){
 //1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa", "ma2_gapped.aln");
@@ -1500,10 +1530,11 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0002){
     GTWidget::findWidget(os, "treeView");
 }
 
-GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003){
+GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003) {
 //    1. Open data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Open tree settings option panel tab. build tree
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
@@ -1511,46 +1542,48 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0003){
     GTGlobals::sleep(1000);
 
     //prepating widgets
-    QWidget* treeView = GTWidget::findWidget(os, "treeView");
+    QWidget *treeView = GTWidget::findWidget(os, "treeView");
     CHECK_SET_ERR(treeView != NULL, "tree view not found");
-    QWidget* heightSlider = GTWidget::findWidget(os, "heightSlider");
+    QWidget *heightSlider = GTWidget::findWidget(os, "heightSlider");
     CHECK_SET_ERR(heightSlider != NULL, "heightSlider not found");
-    QComboBox* layoutCombo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "layoutCombo"));
+    QComboBox *layoutCombo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "layoutCombo"));
     CHECK_SET_ERR(layoutCombo != NULL, "layoutCombo not found");
 
-    QPixmap init = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage initImage = init.toImage();
+    const QImage initImage = GTWidget::getImage(os, treeView);
 
 //    3. Select circular layout
     GTComboBox::setIndexWithText(os, layoutCombo, "Circular");
     GTGlobals::sleep(500);
+
 //    Expected state: layout changed, height slider is disabled
-    QPixmap circular = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage circularImage = circular.toImage();
+    const QImage circularImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage != circularImage, "tree view not changed to circular");
     CHECK_SET_ERR(!heightSlider->isEnabled(), "heightSlider in enabled for circular layout");
+
 //    4. Select unrooted layout
     GTComboBox::setIndexWithText(os, layoutCombo, "Unrooted");
     GTGlobals::sleep(500);
+
 //    Expected state: layout changed, height slider is disabled
-    QPixmap unrooted = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage unrootedImage = unrooted.toImage();
+    const QImage unrootedImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage != unrootedImage, "tree view not changed to unrooted");
     CHECK_SET_ERR(!heightSlider->isEnabled(), "heightSlider in enabled for unrooted layout");
+
 //    5. Select rectangular layout
     GTComboBox::setIndexWithText(os, layoutCombo, "Rectangular");
     GTGlobals::sleep(500);
+
 //    Expected state: tree is similar to the beginning, height slider is enabled
-    QPixmap rectangular = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage rectangularImage = rectangular.toImage();
+    const QImage rectangularImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage == rectangularImage, "final image is not equal to initial");
     CHECK_SET_ERR(heightSlider->isEnabled(), "heightSlider in disabled for rectangular layout");
 }
 
-GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004){
+GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004) {
 //    1. Open data/samples/CLUSTALW/COI.aln
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Open tree settings option panel tab. build tree
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::TreeSettings);
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, "default", 0, 0, true));
@@ -1558,34 +1591,35 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0004){
     GTGlobals::sleep(1000);
 
     //prepating widgets
-    QWidget* treeView = GTWidget::findWidget(os, "treeView");
+    QWidget *treeView = GTWidget::findWidget(os, "treeView");
     CHECK_SET_ERR(treeView != NULL, "tree view not found");
-    QComboBox* treeViewCombo = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "treeViewCombo"));
+    QComboBox *treeViewCombo = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "treeViewCombo"));
     CHECK_SET_ERR(treeViewCombo != NULL, "treeViewCombo not found");
 
-    QPixmap init = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage initImage = init.toImage();
+    const QImage initImage = GTWidget::getImage(os, treeView);
 
 //    3. Select phylogram view
     GTComboBox::setIndexWithText(os, treeViewCombo, "Phylogram");
     GTGlobals::sleep(500);
+
 //    Expected state: layout changed
-    QPixmap circular = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage circularImage = circular.toImage();
+    const QImage circularImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage != circularImage, "tree view not changed to Phylogram");
+
 //    4. Select cladogram view
     GTComboBox::setIndexWithText(os, treeViewCombo, "Cladogram");
     GTGlobals::sleep(500);
+
 //    Expected state: layout changed
-    QPixmap unrooted = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage unrootedImage = unrooted.toImage();
+    const QImage unrootedImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage != unrootedImage, "tree view not changed to unrooted");
+
 //    5. Select default view
     GTComboBox::setIndexWithText(os, treeViewCombo, "Default");
     GTGlobals::sleep(500);
+
 //    Expected state: tree is similar to the beginning
-    QPixmap rectangular = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage rectangularImage = rectangular.toImage();
+    const QImage rectangularImage = GTWidget::getImage(os, treeView);
     CHECK_SET_ERR(initImage == rectangularImage, "final image is not equal to initial");
 }
 
@@ -1654,22 +1688,19 @@ GUI_TEST_CLASS_DEFINITION(tree_settings_test_0005){
     GTCheckBox::setChecked(os, alignLabelsCheck, false);
     QWidget* w = GTWidget::findWidget(os, "treeView");
     CHECK_SET_ERR(w != NULL, "tree view not found");
-    QPixmap initPixmap = QPixmap::grabWidget(w, w->rect());
-    QImage initImg = initPixmap.toImage();//initial state
+    QImage initImg = GTWidget::getImage(os, w);//initial state
 
     GTCheckBox::setChecked(os, alignLabelsCheck, true);
 
 //    Expected state: labels are aligned
-    QPixmap alignedPixmap = QPixmap::grabWidget(w, w->rect());
-    QImage alignedImg = alignedPixmap.toImage();//initial state
+    QImage alignedImg = GTWidget::getImage(os, w);
     CHECK_SET_ERR(alignedImg != initImg, "labels not aligned");
 
 //    8. Uncheck "align labels" checkbox.
     GTCheckBox::setChecked(os, alignLabelsCheck, false);
 
 //    Expected state: labels are not aligned
-    QPixmap finalPixmap = QPixmap::grabWidget(w, w->rect());
-    QImage finalImg = finalPixmap.toImage();//initial state
+    QImage finalImg = GTWidget::getImage(os, w);
     CHECK_SET_ERR(finalImg == initImg, "tree ialigned");
 }
 
@@ -1689,28 +1720,27 @@ void setLabelsColor(HI::GUITestOpStatus &os, int r, int g, int b){
     GTWidget::click(os, labelsColorButton);
 }
 
-bool checkLabelColor(HI::GUITestOpStatus &os, QString expectedColorName){
-    QGraphicsView* w = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
+bool checkLabelColor(HI::GUITestOpStatus &os, const QString &expectedColorName) {
+    QGraphicsView *w = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
     CHECK_SET_ERR_RESULT(w != NULL, "tree view not found", false);
-    QList<QGraphicsSimpleTextItem*> labels = GTUtilsPhyTree::getVisiableLabels(os, w);
+    QList<QGraphicsSimpleTextItem *> labels = GTUtilsPhyTree::getVisiableLabels(os, w);
     CHECK_SET_ERR_RESULT(!labels.isEmpty(), "there are no visiable labels", false);
 
-    QPixmap pixmap = QPixmap::grabWidget(AppContext::getMainWindow()->getQMainWindow(), AppContext::getMainWindow()->getQMainWindow()->rect());
-    QImage img = pixmap.toImage();
+    const QImage img = GTWidget::getImage(os, AppContext::getMainWindow()->getQMainWindow());
 
     //hack
-    foreach(QGraphicsSimpleTextItem* label, labels){
+    foreach (QGraphicsSimpleTextItem *label, labels) {
         QRectF rect = label->boundingRect();
         w->ensureVisible(label);
-        for(int i = 0; i< rect.right(); i++){
-            for(int j = 0; j< rect.bottom(); j++){
-                QPoint p(i,j);
+        for (int i = 0; i < rect.right(); i++) {
+            for (int j = 0; j < rect.bottom(); j++) {
+                QPoint p(i, j);
                 QPoint global = w->viewport()->mapToGlobal(w->mapFromScene(label->mapToScene(p)));
 
                 QRgb rgb = img.pixel(global);
                 QColor c = QColor(rgb);
                 QString name = c.name();
-                if(name == expectedColorName){
+                if (name == expectedColorName) {
                     return true;
                 }
             }
@@ -1841,29 +1871,29 @@ void setBranchColor(HI::GUITestOpStatus &os, int r, int g, int b){
     GTWidget::click(os, branchesColorButton);
 }
 
-double colorPercent(HI::GUITestOpStatus & /*os*/, QWidget* w, const QString& c){
-    double total = 0;
-    double found = 0;
-    QPixmap pixmap = QPixmap::grabWidget(w, w->rect());
-    QImage img = pixmap.toImage();
-    QRect r = w->rect();
+double colorPercent(HI::GUITestOpStatus &os, QWidget *widget, const QString &colorName){
+    int total = 0;
+    int found = 0;
+    const QImage img = GTWidget::getImage(os, widget);
+    QRect r = widget->rect();
     int wid = r.width();
     int heig = r.height();
-    for(int i = 0; i < wid; i++){
-        for (int j = 0; j < heig; j++){
+    for (int i = 0; i < wid; i++) {
+        for (int j = 0; j < heig; j++) {
             total++;
-            QPoint p(i,j);
+            QPoint p(i, j);
             QRgb rgb = img.pixel(p);
             QColor color = QColor(rgb);
             QString name = color.name();
-            if(name == c){
+            if (name == colorName) {
                 found++;
             }
         }
     }
-    double result = found/total;
+    double result = static_cast<double>(found) / total;
     return result;
 }
+
 }
 
 GUI_TEST_CLASS_DEFINITION(tree_settings_test_0008){
@@ -1942,8 +1972,12 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
-//    3. Select some existing read-only file as output
-    QString s = sandBoxDir + fileName;
+//    3. Select existing read-only file "export_consensus_test_0002.aln" as output
+
+    QString s = sandBoxDir + "export_consensus_test_0002";
+    QDir().mkpath(s);
+
+    s += "/" + fileName;
     QFile f(s);
     bool created = f.open(QFile::ReadWrite);
     CHECK_SET_ERR(created, "file not created");
@@ -1951,15 +1985,17 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0002){
 
     GTFile::setReadOnly(os, s);
 
-    setConsensusOutputPath(os, sandBoxDir + fileName);
+    setConsensusOutputPath(os, s);
 //    4. Press export button
     GTWidget::click(os, GTWidget::findWidget(os, "exportBtn"));
     GTGlobals::sleep(300);
 //    Expected state: error in log: Task {Save document} finished with error: No permission to write to 'COI_transl.aln' file.
     QString error = l.getError();
     QString expected;
-    expected = QString("Task {Export consensus to MSA} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(fileName);
-    CHECK_SET_ERR(error.contains(expected), QString("enexpected error: %1").arg(error));
+    expected = QString("Task {Export consensus} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(fileName);
+    CHECK_SET_ERR(error.contains(expected), QString("Unexpected error: %1").arg(error));
+
+    GTFile::setReadWrite(os, s);
 }
 
 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
@@ -1971,10 +2007,10 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Open export consensus option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
-//    3. Select some existing read-only file as output
+//    3. Select some existing file in read-only directory as output
     QString s = sandBoxDir + dirName;
     bool ok = QDir().mkpath(s);
-    CHECK_SET_ERR(ok, "subdirectory not created");
+    CHECK_SET_ERR(ok, "subfolder not created");
     GTFile::setReadOnly(os, s);
 
     setConsensusOutputPath(os, sandBoxDir + dirName + '/' + fileName);
@@ -1983,8 +2019,10 @@ GUI_TEST_CLASS_DEFINITION(export_consensus_test_0003){
     GTGlobals::sleep(300);
 //    Expected state: error in log: Task {Pairwise Alignment Task} finished with error: No permission to write to 'COI_transl.aln' file.
     QString error = l.getError();
-    QString expected = QString("Task {Export consensus to MSA} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(fileName);
-    CHECK_SET_ERR(error == expected, QString("enexpected error: %1").arg(error));
+    QString expected = QString("Task {Export consensus} finished with error: Subtask {Save document} is failed: No permission to write to \'%1\' file.").arg(fileName);
+    CHECK_SET_ERR(error == expected, QString("Unexpected error: %1").arg(error));
+
+    GTFile::setReadWrite(os, s);
 }
 
 GUI_TEST_CLASS_DEFINITION(export_consensus_test_0004){
@@ -2045,7 +2083,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0001){
     QString s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
     CHECK_SET_ERR(s0 == "0%", QString("Unexpected similarity at line 1: %1").arg(s0));
     QString s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
-    CHECK_SET_ERR(s1 == "17%", QString("Unexpected similarity at line 2: %1").arg(s1));
+    CHECK_SET_ERR(s1 == "18%", QString("Unexpected similarity at line 2: %1").arg(s1));
 
 //    6. Check counts mode
     QRadioButton* countsButton = GTWidget::findExactWidget<QRadioButton*>(os, "countsButton");
@@ -2133,7 +2171,7 @@ GUI_TEST_CLASS_DEFINITION(statistics_test_0003){
     s0 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 0);
     CHECK_SET_ERR(s0 == "0%", QString("(2)Unexpected similarity at line 1: %1").arg(s0));
     s1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
-    CHECK_SET_ERR(s1 == "17%", QString("(2)Unexpected similarity at line 2: %1").arg(s1));
+    CHECK_SET_ERR(s1 == "18%", QString("(2)Unexpected similarity at line 2: %1").arg(s1));
 //    6. Press autoUpdate button
     GTWidget::click(os, updateButton);
     GTGlobals::sleep(500);
@@ -2469,7 +2507,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005){
 
     //set some values
     GTLineEdit::setText(os, pathLe, "some_path");
-    GTComboBox::setIndexWithText(os, formatCb, "Genbank");
+    GTComboBox::setIndexWithText(os, formatCb, "GenBank");
     GTCheckBox::setChecked(os, keepGapsChb, true);
 
     //close and open option panel
@@ -2484,7 +2522,7 @@ GUI_TEST_CLASS_DEFINITION(save_parameters_test_0005){
     keepGapsChb = GTWidget::findExactWidget<QCheckBox*>(os, "keepGapsChb");
 
     CHECK_SET_ERR(pathLe->text().contains("some_path"), QString("unexpected path: %1").arg(pathLe->text()));
-    CHECK_SET_ERR(formatCb->currentText() == "Genbank", QString("unexpected format: %1").arg(formatCb->currentText()));
+    CHECK_SET_ERR(formatCb->currentText() == "GenBank", QString("unexpected format: %1").arg(formatCb->currentText()));
     CHECK_SET_ERR(keepGapsChb->isChecked(), "keep gaps checkBox is unexpectidly unchecked");
 }
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
index 5ee6538..a7d9e28 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/msa/GTTestsOptionPanelMSA.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
index 92f97d1..6349282 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,13 +20,8 @@
  */
 
 #include <QTableWidget>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QGraphicsItem>
+#include <QMainWindow>
 
 #include "GTTestsOptionPanelSequenceView.h"
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
index 2641df0..42f1e17 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/options_panel/sequence_view/GTTestsOptionPanelSequenceView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
index e10781a..35d1c42 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -424,15 +424,15 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
     //5. Click "Find product(s) anyway".
     GTWidget::click(os, GTWidget::findWidget(os, "findProductButton"));
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);    
 
     //Expected: one product is found.
     CHECK_SET_ERR(1 == GTUtilsPcr::productsCount(os), "Wrong results count");
 
     //6. Choose "Inner" annotation extraction.
     QComboBox *annsComboBox = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "annsComboBox"));
-    GTComboBox::setCurrentIndex(os, annsComboBox, 0);
-
+    GTComboBox::setCurrentIndex(os, annsComboBox, 1);
+    
     //7. Click "Export product(s)".
     GTWidget::click(os, GTWidget::findWidget(os, "extractProductButton"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -443,7 +443,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 
     //8. Choose "All annotations" annotation extraction.
     GTUtilsProjectTreeView::doubleClickItem(os, "begin-end.gb");
-    GTComboBox::setCurrentIndex(os, annsComboBox, 1);
+    GTComboBox::setCurrentIndex(os, annsComboBox, 0);
 
     //9. Click "Export product(s)".
     GTWidget::click(os, GTWidget::findWidget(os, "extractProductButton"));
@@ -650,5 +650,23 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
     CHECK_SET_ERR(primerEdit->text().isEmpty(), "There are unexpected characters in PrimerLineEdit");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0017) {
+    // Reverse-complement for the extended DNA alphabet
+    // 1. Open the PCT OP
+    // 2. Enter primer with whitespaces 
+    // Expected state: whitespaces removed successfuly
+    GTUtilsPcr::clearPcrDir(os);
+
+    GTFileDialog::openFile(os, testDir + "_common_data/fasta", "pcr_test.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsOptionPanelSequenceView::openTab(os, GTUtilsOptionPanelSequenceView::InSilicoPcr);
+
+    QLineEdit *primerEdit = dynamic_cast<QLineEdit*>(GTWidget::findWidget(os, "primerEdit", GTWidget::findWidget(os, "forwardPrimerBox")));
+    GTLineEdit::setText(os, primerEdit, "AC\r\nCCTG   GAGAG\nCATCG\tAT", true, true);
+
+    CHECK_SET_ERR(primerEdit->text() == "ACCCTGGAGAGCATCGAT", "Incorrect whitespaces removing");
+}
+
 } // GUITest_common_scenarios_in_silico_pcr
 } // U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
index f2239d2..c5ff037 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsInSilicoPcr.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,6 +46,7 @@ GUI_TEST_CLASS_DECLARATION(test_0013)
 GUI_TEST_CLASS_DECLARATION(test_0014)
 GUI_TEST_CLASS_DECLARATION(test_0015)
 GUI_TEST_CLASS_DECLARATION(test_0016)
+GUI_TEST_CLASS_DECLARATION(test_0017)
 
 } // GUITest_common_scenarios_in_silico_pcr
 } // U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
index 941e5c0..1b965e8 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,23 +20,25 @@
  */
 
 #include <QApplication>
+#include <QDir>
+
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTLineEdit.h>
+#include <utils/GTUtilsDialog.h>
 
 #include "GTDatabaseConfig.h"
 #include "GTTestsPrimerLibrary.h"
 #include "GTUtilsAnnotationsTreeView.h"
-#include "GTUtilsOptionPanelSequenceView.h"
-#include "utils/GTUtilsDialog.h"
+#include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsOptionPanelSequenceView.h"
 #include "GTUtilsPcr.h"
 #include "GTUtilsPrimerLibrary.h"
 #include "GTUtilsProject.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTaskTreeView.h"
-#include "GTUtilsLog.h"
-#include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTLineEdit.h>
-#include <drivers/GTMouseDriver.h>
 #include "runnables/ugene/plugins/pcr/AddPrimerDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
@@ -61,7 +63,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     //3. Click the close button.
     GTUtilsPrimerLibrary::clickButton(os, GTUtilsPrimerLibrary::Close);
-
+    GTGlobals::sleep();
     //Expected: The window is closed.
     QWidget *libraryMdi3 = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(NULL == libraryMdi3, "Library MDI is not closed");
@@ -322,7 +324,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 //    3. Click "Export".
 //    4. Fill the dialog:
 //        Export to: "Local file";
-//        Format: "genbank";
+//        Format: "GenBank";
 //        File path: any valid path;
 //    and accept the dialog.
     class ExportToGenbankScenario : public CustomScenario {
@@ -330,7 +332,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
             QWidget *dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
             ExportPrimersDialogFiller::setExportTarget(os, ExportPrimersDialogFiller::LocalFile);
-            ExportPrimersDialogFiller::setFormat(os, "Genbank");
+            ExportPrimersDialogFiller::setFormat(os, "GenBank");
             ExportPrimersDialogFiller::setFilePath(os, sandBoxDir + "pcrlib/test_0007/primers.gb");
             GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
         }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
index 56d843f..48ec48e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/pcr/GTTestsPrimerLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.cpp
new file mode 100644
index 0000000..0dbe16a
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.cpp
@@ -0,0 +1,353 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <base_dialogs/GTFileDialog.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTWidget.h>
+
+#include <QApplication>
+
+#include "GTTestsCommonScenariosPhyml.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GTUtilsLog.h"
+#include "runnables/ugene/corelibs/U2View//ov_msa/BuildTreeDialogFiller.h"
+
+namespace U2 {
+namespace GUITest_common_scenarios_phyml {
+
+GUI_TEST_CLASS_DEFINITION(test_0001) {
+//# Test "Optimise" options: no options
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o ");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Ensure that all optimise options are unchecked.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+
+//6. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0001.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is no '-o' option in the launch parameters (or there can be '-o n' option, which means "none").
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, false);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0002) {
+//# Test "Optimise" options: check "Optimise tree topology" option.
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o tl");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Ensure that all optimize options are unchecked.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+
+//6. Check "Optimise tree topology" option.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", true, dialog);
+
+//Expected state: "Optimise tree topology" and "Optimise branch lengths" options are checked, "Optimise branch lengths" checkbox is disabled.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+            GTWidget::checkEnabled(os, "optBranchCheckbox", false, dialog);
+
+//7. Uncheck "Optimise tree topology" option.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", false, dialog);
+
+//Expected state: all options are unchecked, "Optimise branch lengths" checkbox is enabled.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+            GTWidget::checkEnabled(os, "optBranchCheckbox", true, dialog);
+
+//8. Check "Optimise branch lengths" option.
+            GTCheckBox::setChecked(os, "optBranchCheckbox", true, dialog);
+
+//Expected state: "Optimise branch length" is checked and enabled.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+            GTWidget::checkEnabled(os, "optBranchCheckbox", true, dialog);
+
+//9. Check "Optimise tree topology" option.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", true, dialog);
+
+//Expected state: "Optimise tree topology" and "Optimise branch lengths" options are checked, "Optimise branch lengths" checkbox is disabled.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+            GTWidget::checkEnabled(os, "optBranchCheckbox", false, dialog);
+
+//10. Uncheck "Optimise tree topology" option.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", false, dialog);
+
+//Expected state: "Optimise branch length" is checked and enabled.
+            GTCheckBox::checkState(os, "optTopologyCheckbox", false, dialog);
+            GTCheckBox::checkState(os, "optBranchCheckbox", true, dialog);
+            GTCheckBox::checkState(os, "optimiseSubstitutionRateCheckbox", false, dialog);
+            GTWidget::checkEnabled(os, "optBranchCheckbox", true, dialog);
+
+//11. Check "Optimise tree topology" option.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", true, dialog);
+
+//12. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0002.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is '-o tl' option in the launch parameters.
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, true);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0003) {
+//# Test "Optimise" options: "Optimise branch lengths" option.
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o l");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Check "Optimise branch lengths" option.
+            GTCheckBox::setChecked(os, "optBranchCheckbox", true, dialog);
+
+//6. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0003.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is '-o l' option in the launch parameters.
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, true);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0004) {
+//# Test "Optimise" options: "Optimise substitution rate" option.
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o r");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Check "Optimise substitution rate" option.
+            GTCheckBox::setChecked(os, "optimiseSubstitutionRateCheckbox", true, dialog);
+
+//6. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0004.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is '-o r' option in the launch parameters.
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, true);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005) {
+//# Test "Optimise" options: "Optimise branch lengths" and "Optimise substitution rate" options.
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o lr");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Check "Optimise branch lengths" and "Optimise substitution rate" options.
+            GTCheckBox::setChecked(os, "optBranchCheckbox", true, dialog);
+            GTCheckBox::setChecked(os, "optimiseSubstitutionRateCheckbox", true, dialog);
+
+//6. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0005.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is '-o lr' option in the launch parameters.
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, true);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0006) {
+//# Test "Optimise" options: "Optimise tree topology" and "Optimise substitution rate" options.
+
+//1. Open "_common_data/scenarios/msa/ma2_gapped.aln".
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Click the "Build Tree" button on the toolbar.
+
+    GTLogTracer logTracerTool("Launching PhyML Maximum Likelihood tool");
+    GTLogTracer logTracerParameter("-o tlr");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(GUITestOpStatus &os) {
+            QWidget * const dialog = GTWidget::getActiveModalWidget(os);
+
+//3. Select the "PhyML Maximum Likelihood" algorithm.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//4. Open the "Tree Searching" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Tree Searching");
+
+//5. Check "Optimise tree topology" and "Optimise substitution rate" options.
+            GTCheckBox::setChecked(os, "optTopologyCheckbox", true, dialog);
+            GTCheckBox::setChecked(os, "optimiseSubstitutionRateCheckbox", true, dialog);
+
+//6. Set other necessary options and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "GUITest_common_scenarios_phyml_test_0006.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: the tool is launched, there is '-o tlr' option in the launch parameters.
+    GTUtilsLog::checkContainsMessage(os, logTracerTool, true);
+    GTUtilsLog::checkContainsMessage(os, logTracerParameter, true);
+}
+
+}   // namespace GUITest_common_scenarios_phyml
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.h b/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.h
new file mode 100644
index 0000000..658e9d0
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/phyml/GTTestsCommonScenariosPhyml.h
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GT_TESTS_COMMON_SCENARIOS_PHYML_H_
+#define _U2_GT_TESTS_COMMON_SCENARIOS_PHYML_H_
+
+#include <U2Test/UGUITestBase.h>
+
+namespace U2 {
+namespace GUITest_common_scenarios_phyml {
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_phyml"
+
+GUI_TEST_CLASS_DECLARATION(test_0001)
+GUI_TEST_CLASS_DECLARATION(test_0002)
+GUI_TEST_CLASS_DECLARATION(test_0003)
+GUI_TEST_CLASS_DECLARATION(test_0004)
+GUI_TEST_CLASS_DECLARATION(test_0005)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+
+#undef GUI_TEST_SUITE
+
+}   // namespace GUITest_common_scenarios_phyml
+}   // namespace U2
+
+#endif // _U2_GT_TESTS_COMMON_SCENARIOS_PHYML_H_
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
index f5c801a..96043fa 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,8 @@
 #include <QWebElement>
 #include <QApplication>
 #include <QTreeWidget>
+#include <QDebug>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -31,7 +33,7 @@
 #include <U2View/ADVConstants.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
 #include <U2View/AssemblyBrowserFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "GTTestsProject.h"
 #include "utils/GTUtilsApp.h"
@@ -62,6 +64,7 @@
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h"
@@ -89,7 +92,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 #ifdef Q_OS_MAC
     expectedTitle = "proj1 UGENE";
 #else
-    expectedTitle = "proj1 UGENE - [Start Page]";
+    expectedTitle = "proj1 UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
@@ -97,7 +100,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 // Expected state: "Export Project" dialog has appeared
 //
 // 3. Fill the next field in dialog:
-//     {Destination Directory} _common_data/scenarios/sandbox
+//     {Destination folder} _common_data/scenarios/sandbox
 // 4. Click OK button
     GTUtilsDialog::waitForDialog(os, new ExportProjectDialogFiller(os, testDir+"_common_data/scenarios/sandbox"));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Export project...");
@@ -144,7 +147,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 #ifdef Q_OS_MAC
     expectedTitle = "proj1 UGENE";
 #else
-    expectedTitle = "proj1 UGENE - [Start Page]";
+    expectedTitle = "proj1 UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
@@ -160,7 +163,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
 #ifdef Q_OS_MAC
     expectedTitle = "proj2 UGENE";
 #else
-    expectedTitle = "proj2 UGENE - [Start Page]";
+    expectedTitle = "proj2 UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
@@ -175,7 +178,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
 #ifdef Q_OS_MAC
     expectedTitle = "UGENE";
 #else
-    expectedTitle = "UGENE - [Start Page]";
+    expectedTitle = "UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
@@ -200,7 +203,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
 GUI_TEST_CLASS_DEFINITION(test_0009) {
 
     GTUtilsProject::openFiles(os, dataDir + "samples/CLUSTALW/ty3.aln.gz");
-    GTUtilsDocument::checkDocument(os, "ty3.aln.gz", MSAEditorFactory::ID);
+    GTUtilsDocument::checkDocument(os, "ty3.aln.gz", MsaEditorFactory::ID);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0010) {
@@ -297,7 +300,9 @@ GUI_TEST_CLASS_DEFINITION(test_0016) {
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document", GTGlobals::UseMouse));
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "murine.gb"));
-    GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os));
+    GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, testDir + "_common_data/genbank/.dir/", "murine_copy1.gb",
+                                                   ExportDocumentDialogFiller::Genbank, false, true, GTGlobals::UseMouse));
+    
     GTMouseDriver::click(Qt::RightButton);
 
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "murine_copy1.gb"));
@@ -364,7 +369,7 @@ GUI_TEST_CLASS_DEFINITION(test_0020) {
     QModelIndex se2 = GTUtilsProjectTreeView::findIndex(os, "se2");
     GTUtilsProjectTreeView::itemActiveCheck(os, se2);
 
-    GTUtilsMdi::click(os, GTGlobals::Close);
+    GTUtilsMdi::closeActiveWindow(os);
     GTUtilsProjectTreeView::itemActiveCheck(os, se1, false);
     GTUtilsProjectTreeView::itemActiveCheck(os, se2, false);
 
@@ -382,38 +387,40 @@ GUI_TEST_CLASS_DEFINITION(test_0021) {
 
     QModelIndex item = GTUtilsProjectTreeView::findIndex(os, "se1");
     QFont font = GTUtilsProjectTreeView::getFont(os, item);
-    CHECK_SET_ERR(font.bold(), "se1 item font is not a bold");
+    CHECK_SET_ERR(font.bold(), "se1 item font is not a bold_1");
     item = GTUtilsProjectTreeView::findIndex(os, "se2");
     font = GTUtilsProjectTreeView::getFont(os, item);
-    CHECK_SET_ERR(font.bold(), "se2 item font is not a bold");
+    CHECK_SET_ERR(font.bold(), "se2 item font is not a bold_1");
 
-    GTUtilsMdi::click(os, GTGlobals::Close);
+	GTUtilsMdi::closeActiveWindow(os);
     GTGlobals::sleep(1000);
     item = GTUtilsProjectTreeView::findIndex(os, "se1");
     font = GTUtilsProjectTreeView::getFont(os, item);
-    CHECK_SET_ERR(!font.bold(), "se1 item font is not a bold");
+    CHECK_SET_ERR(!font.bold(), "se1 item font is not a bold_2");
 
     GTUtilsSequenceView::openSequenceView(os, "se1");
     item = GTUtilsProjectTreeView::findIndex(os, "se1");
     font = GTUtilsProjectTreeView::getFont(os, item);
-    CHECK_SET_ERR(font.bold(), "se1 item font is not a bold");
+    CHECK_SET_ERR(font.bold(), "se1 item font is not a bold_3");
 
     GTUtilsSequenceView::openSequenceView(os, "se2");
     item = GTUtilsProjectTreeView::findIndex(os, "se2");
     font = GTUtilsProjectTreeView::getFont(os, item);
-    CHECK_SET_ERR(font.bold(), "se2 item font is not a bold");
+    CHECK_SET_ERR(font.bold(), "se2 item font is not a bold_2");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0023) {
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/project/1m.fa");
     GTGlobals::sleep();
-    GTUtilsMdi::click(os, GTGlobals::Minimize);
+    // GTUtilsMdi::click(os, GTGlobals::Minimize);
 
     QWidget* w = GTUtilsMdi::findWindow(os, "1m [m] Multiple alignment");
     CHECK_SET_ERR(w != NULL, "Sequence view window title is not 1m [m] Multiple alignment");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0025) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
+
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -426,6 +433,10 @@ GUI_TEST_CLASS_DEFINITION(test_0025) {
     GTUtilsDialog::waitForDialog(os, new CreateAnnotationWidgetFiller(os, true, "<auto>", "misc_feature", "complement(1.. 20)"));
     GTKeyboardDriver::keyClick( 'n', Qt::ControlModifier);
     GTGlobals::sleep();
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0026) {
@@ -492,13 +503,13 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 //    2. Select "Open as multiple sequence alignment" item, accept the dialog.
 //    Expected state: file opens, document contains two malignment objects, the MSA Editor is shown.
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDocument::checkDocument(os, "ace_test_1.ace", MSAEditorFactory::ID);
+    GTUtilsDocument::checkDocument(os, "ace_test_1.ace", MsaEditorFactory::ID);
     GTUtilsProjectTreeView::checkObjectTypes(os,
-                                             QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT,
+                                             QSet<GObjectType>() << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT,
                                              GTUtilsProjectTreeView::findIndex(os, "ace_test_1.ace"));
 
 //    3. Open "_common_data/ACE/ace_test_2.ace".
@@ -506,8 +517,9 @@ GUI_TEST_CLASS_DEFINITION(test_0033) {
 
 //    4. Select "Open as assembly" item, accept the dialog.
 //    Expected state: file opens, document contains two assembly objects and two sequence objects, the Assembly Browser is shown.
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "project_test_0033.ugenedb"));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "project_test_0033.ugenedb"));
+	//GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    //GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "project_test_0033.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_2.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -525,6 +537,7 @@ GUI_TEST_CLASS_DEFINITION(test_0034) {
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
         PopupChecker::IsEnabled, GTGlobals::UseMouse));
     GTUtilsProjectTreeView::click(os, "murine.gb", Qt::RightButton);
+    GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0035) {
@@ -565,11 +578,12 @@ GUI_TEST_CLASS_DEFINITION(test_0037) {
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << "Open containing folder",
         PopupChecker::IsEnabled, GTGlobals::UseMouse));
     GTUtilsProjectTreeView::click(os, "sars.gb", Qt::RightButton);
+    GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0038){
     //test for several alignments in one document
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -583,9 +597,9 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
     QString title2 = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title2 == "BL060C3 [m] Contig2", "unexpected title for doc2: " + title2);
 
-    //reopening windows
+    //reopening windows z
     while(GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)) != NULL){
-        GTUtilsMdi::click(os, GTGlobals::Close);
+		GTUtilsMdi::closeActiveWindow(os);
     }
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view"));
     GTUtilsProjectTreeView::click(os, "BL060C3.ace", Qt::RightButton);
@@ -605,8 +619,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038){
 
 GUI_TEST_CLASS_DEFINITION(test_0038_1){
     //test for several assembly documents in one document
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_3637_1.ugenedb"));
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_3637_1.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -622,7 +635,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_1){
 
     //reopening windows
     while(GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)) != NULL){
-        GTUtilsMdi::click(os, GTGlobals::Close);
+		GTUtilsMdi::closeActiveWindow(os);
     }
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "action_open_view"));
     GTUtilsProjectTreeView::click(os, "test_3637_1.ugenedb", Qt::RightButton);
@@ -632,7 +645,7 @@ GUI_TEST_CLASS_DEFINITION(test_0038_1){
     title1 = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title1 == "test_3637_1 [as] Contig1", "unexpected title for doc1: " + title1);
 
-    //check for first document
+    //check for second document
     GTUtilsProjectTreeView::doubleClickItem(os, "Contig2");
     title2 = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(title2 == "test_3637_1 [as] Contig2", "unexpected title for doc2: " + title2);
@@ -724,23 +737,6 @@ GUI_TEST_CLASS_DEFINITION(test_0043){
     GTUtilsProjectTreeView::findIndex(os, "Tree");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0044){
-    GTFile::removeDir(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath());
-    //check document which format cant be saved by UGENE
-    GTUtilsProject::openFiles(os, dataDir + "samples/CLUSTALW/COI.aln");
-
-    GTUtilsProjectTreeView::click(os, "COI.aln");
-    QString fileContent = readFileToStr(dataDir + "samples/HMM/aligment15900.hmm");
-    GTClipboard::setText(os, fileContent);
-
-    GTKeyboardDriver::keyClick( 'v', Qt::ControlModifier);
-    GTGlobals::sleep();
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsProjectTreeView::findIndex(os, "aligment15900");
-
-    GTUtilsProjectTreeView::itemModificationCheck(os, GTUtilsProjectTreeView::findIndex(os, "clipboard.hmm"), false);
-}
-
 GUI_TEST_CLASS_DEFINITION(test_0045){
     GTFile::removeDir(AppContext::getAppSettings()->getUserAppsSettings()->getDefaultDataDirPath());
     //check document which format cant be saved by UGENE
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
index 72fe586..e251705 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/GTTestsProject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.cpp
index ac94a77..2d11d69 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -55,7 +55,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // 2. Use menu {File->Export Project}
 // Expected state: "Export Project" dialog has appeared
 // 3. Fill the next field in dialog:
-//     {Destination Directory} _common_data/scenarios/sandbox
+//     {Destination folder} _common_data/scenarios/sandbox
 //     {Project file name} proj2.uprj
 // 4. Click OK button
 // 5. Click NO in opened messagebox
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
index c501ce6..44c78bf 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/anonymous_project/GTTestsProjectAnonymousProject.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp
old mode 100644
new mode 100755
index bea2389..7cca152
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@
 #include <primitives/GTTreeWidget.h>
 #include "GTUtilsMdi.h"
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 #include <base_dialogs/GTFileDialog.h>
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 #include "primitives/PopupChooser.h"
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
old mode 100644
new mode 100755
index a5c1a34..1ce08d3
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/bookmarks/GTTestsBookmarks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.cpp
index aabe33b..4e6d806 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
index 028aea4..39fd38e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/document_modifying/GTTestsProjectDocumentModifying.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
index 2c88840..e310e33 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
index b423662..4e2118a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/multiple_docs/GTTestsProjectMultipleDocs.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.cpp
index 018a829..d2e7072 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
index cc81c8b..4157a8c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/project_filtering/GTTestsProjectFiltering.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.cpp
index eb0670f..bfc0485 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsProjectRelations.h"
 #include "GTGlobals.h"
-#include <drivers/GTMouseDriver.h>
-#include "GTUtilsProject.h"
-#include "utils/GTUtilsApp.h"
+#include "GTTestsProjectRelations.h"
 #include "GTUtilsDocument.h"
+#include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "utils/GTUtilsApp.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <system/GTFile.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
 
 namespace U2{
@@ -36,15 +39,18 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj2.uprj");
     GTUtilsDocument::checkDocument(os, "1.gb");
-
+	GTUtilsTaskTreeView::waitTaskFinished(os);
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
     GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsDocument::checkDocument(os, "1.gb");
     GTUtilsDocument::checkDocument(os, "2.gb");
 
@@ -53,6 +59,10 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
     GTMouseDriver::doubleClick();
     GTUtilsDocument::checkDocument(os, "1.gb", AnnotatedDNAViewFactory::ID);
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
index f314736..d938314 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/relations/GTTestsProjectRelations.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
index 348ff94..e118eb2 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2View/MSAEditorFactory.h>
+#include <QDir>
+
 #include <U2View/AnnotatedDNAViewFactory.h>
+#include <U2View/MaEditorFactory.h>
+
+#include <GTGlobals.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTTreeWidget.h>
+#include <utils/GTUtilsApp.h>
+#include <utils/GTUtilsToolTip.h>
 
 #include "GTTestsProjectRemoteRequest.h"
-#include "utils/GTUtilsApp.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
 #include "GTUtilsMdi.h"
@@ -32,15 +42,8 @@
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsSequenceView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include <primitives/GTTreeWidget.h>
 #include "runnables/ugene/corelibs/U2Gui/DownloadRemoteFileDialogFiller.h"
 #include "runnables/ugene/ugeneui/NCBISearchDialogFiller.h"
 
@@ -74,7 +77,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003) {
 //    2. Fill the dialog:
 //        Resource ID: NC_017775
 //        Database: NCBI GenBank (DNA sequence)
-//        Save to directory: any valid path
+//        Save to folder: any valid path
 //        Force download the appropriate sequence: unchecked
 //    and accept it.
 //    Expected state: after the downloading task finish a new document appears in the project, it contains an annotation table only.
@@ -104,7 +107,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 //    2. Fill the dialog:
 //        Resource ID: NC_017775
 //        Database: NCBI GenBank (DNA sequence)
-//        Save to directory: any valid path
+//        Save to folder: any valid path
 //        Force download the appropriate sequence: checked
 //    and accept it.
 //    Expected state: after the downloading task finish a new document appears in the project, it contains both a sequence and an annotation table.
@@ -127,65 +130,6 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTUtilsDocument::checkDocument(os, "NC_017775.gb", AnnotatedDNAViewFactory::ID);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0005) {
-//    1. Select {File -> Access remote database} menu item in the main menu.
-
-//    2. Fill the dialog:
-//        Resource ID: NC_017775
-//        Database: NCBI protein sequence database
-//        Save to directory: any valid path
-//        Force download the appropriate sequence: unchecked
-//    and accept it.
-//    Expected state: after the downloading task finish a new document appears in the project, it contains an annotation table only.
-
-    QDir().mkpath(sandBoxDir + "remote_request/test_0005");
-    QList<DownloadRemoteFileDialogFiller::Action> actions;
-
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetResourceIds, QStringList() << "NC_017775");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetDatabase, "NCBI protein sequence database");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::EnterSaveToDirectoryPath, sandBoxDir + "remote_request/test_0005");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetForceSequenceDownload, false);
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
-
-    GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
-    GTGlobals::sleep();
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    QSet<GObjectType> acceptableTypes;
-    acceptableTypes.insert(GObjectTypes::ANNOTATION_TABLE);
-    GTUtilsProjectTreeView::checkObjectTypes(os, acceptableTypes, GTUtilsProjectTreeView::findIndex(os, "NC_017775.gb"));
-}
-
-GUI_TEST_CLASS_DEFINITION(test_0006) {
-//    1. Select {File -> Access remote database} menu item in the main menu.
-
-//    2. Fill the dialog:
-//        Resource ID: NC_017775
-//        Database: NCBI protein sequence database
-//        Save to directory: any valid path
-//        Force download the appropriate sequence: checked
-//    and accept it.
-//    Expected state: after the downloading task finish a new document appears in the project, it contains both a sequence and an annotation table.
-
-    QDir().mkpath(sandBoxDir + "remote_request/test_0006");
-    QList<DownloadRemoteFileDialogFiller::Action> actions;
-
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetResourceIds, QStringList() << "NC_017775");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetDatabase, "NCBI protein sequence database");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::EnterSaveToDirectoryPath, sandBoxDir + "remote_request/test_0006");
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::SetForceSequenceDownload, true);
-    actions << DownloadRemoteFileDialogFiller::Action(DownloadRemoteFileDialogFiller::ClickOk, "");
-
-    GTUtilsDialog::waitForDialog(os, new DownloadRemoteFileDialogFiller(os, actions));
-    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
-    GTGlobals::sleep();
-    GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    GTUtilsDocument::isDocumentLoaded(os, "NC_017775.gb");
-    GTUtilsDocument::checkDocument(os, "NC_017775.gb", AnnotatedDNAViewFactory::ID);
-}
-
 GUI_TEST_CLASS_DEFINITION(test_0007) {
 //    1. Select {File -> Access remote database} menu item in the main menu.
 
@@ -228,7 +172,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     QList<NcbiSearchDialogFiller::Action> searchActions;
     QList<DownloadRemoteFileDialogFiller::Action> downloadActions;
 
-    searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetTerm, qVariantFromValue(intStringPair(0, "human")));
+    searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetTerm, qVariantFromValue(intStrStrPair(0, "human")));
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetDatabase, "nucleotide");
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::ClickSearch, "");
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::WaitTasksFinish, "");
@@ -266,7 +210,7 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     QList<NcbiSearchDialogFiller::Action> searchActions;
     QList<DownloadRemoteFileDialogFiller::Action> downloadActions;
 
-    searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetTerm, qVariantFromValue(intStringPair(0, "human")));
+    searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetTerm, qVariantFromValue(intStrStrPair(0, "human")));
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::SetDatabase, "protein");
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::ClickSearch, "");
     searchActions << NcbiSearchDialogFiller::Action(NcbiSearchDialogFiller::WaitTasksFinish, "");
@@ -299,7 +243,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
 //        Read resource ID(s) from source: required, "List of IDs";
 //        Resource ID(s): required, visible;
 //        File with resource IDs: invisible;
-//        Save file to directory: required.
+//        Save file to folder: required.
 
 //    2. Set parameter "Read resource ID(s) from source" to "File with IDs".
 //    Expected state:
@@ -317,7 +261,7 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterRequired(os, "Database"), "The 'Database' parameter is not required unexpectedly");
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterRequired(os, "Read resource ID(s) from source"), "The 'Read resource ID(s) from source' parameter is not required unexpectedly");
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterRequired(os, "Resource ID(s)"), "The 'Resource ID(s)' parameter is not required unexpectedly");
-    CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterRequired(os, "Save file to directory"), "The 'Save file to directory' parameter is not required unexpectedly");
+    CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterRequired(os, "Save file to folder"), "The 'Save file to folder' parameter is not required unexpectedly");
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterVisible(os, "Resource ID(s)"), "The 'Resource ID(s)' parameter is not visible unexpectedly");
     CHECK_SET_ERR(!GTUtilsWorkflowDesigner::isParameterVisible(os, "File with resource IDs"), "The 'File with resource IDs' parameter is visible unexpectedly");
 
@@ -327,5 +271,45 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     CHECK_SET_ERR(GTUtilsWorkflowDesigner::isParameterVisible(os, "File with resource IDs"), "The 'File with resource IDs' parameter is not visible unexpectedly");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_0011) {
+    
+    //    1.  File->Access remote database...
+    //    2.  Fill    "Resource ID": 1ezg
+    //                "Database": PDB
+    //                "Add to project": true
+    //        Open.
+    //    3.  Expected state: 1ezg appears in a project view. 
+
+        GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1ezg", 3, true, true, false,
+                                                                            sandBoxDir));
+        GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
+        
+        GTUtilsTaskTreeView::waitTaskFinished(os);
+        GTGlobals::sleep(20000);
+        GTUtilsDocument::isDocumentLoaded(os, "1ezg.pdb");
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0012) {
+    //    1.  File->Access remote database...
+    //    2.  Fill    "Resource ID": 1ezg
+    //                "Database": PDB
+    //                "Add to project": false
+    //        Open.
+    //    3.  Expected state: 1ezg doesn't appear in a project view. 
+
+    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1ezg", 3, false, true, false, sandBoxDir));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
+    
+    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1CRN", 3, true, true, false, sandBoxDir));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
+
+    GTGlobals::sleep(10000);//some time needed for request
+    GTUtilsDocument::isDocumentLoaded(os, "1CRN.pdb");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(!GTUtilsProjectTreeView::checkItem(os, "1ezg.pdb"), "Object shound not be in the project");
+}
+
 } // namespace
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
index 5f85779..c383d41 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/remote_request/GTTestsProjectRemoteRequest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,6 +40,8 @@ GUI_TEST_CLASS_DECLARATION(test_0007)
 GUI_TEST_CLASS_DECLARATION(test_0008)
 GUI_TEST_CLASS_DECLARATION(test_0009)
 GUI_TEST_CLASS_DECLARATION(test_0010)
+GUI_TEST_CLASS_DECLARATION(test_0011)
+GUI_TEST_CLASS_DECLARATION(test_0012)
 
 #undef GUI_TEST_SUITE
 }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.cpp
old mode 100644
new mode 100755
index e7d7894..40455ff
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@
 #include "runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h"
 
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 #include <U2Core/DocumentModel.h>
 #include <U2View/ADVConstants.h>
 #include <U2Core/AppContext.h>
@@ -64,9 +64,10 @@ namespace GUITest_common_scenarios_project_sequence_exporting {
 using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
-    GTGlobals::sleep();
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDocument::checkDocument(os, "1.gb");
     GTUtilsDocument::checkDocument(os, "2.gb");
@@ -83,7 +84,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
 #ifdef Q_OS_MAC
     expectedTitle = "proj4 UGENE";
 #else
-    expectedTitle = "proj4 UGENE - [Start Page]";
+    expectedTitle = "proj4 UGENE";
 #endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 
@@ -123,11 +124,17 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTGlobals::sleep();
 
     CHECK_SET_ERR(seq == "AAAT", "exported sequence differs from AAAT");
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1.gb" and "2.gb" is opened
@@ -164,10 +171,14 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
     GTMouseDriver::click(Qt::RightButton);
 
 // Expected state: sequence view C has been opened, with sequence "GAATAGAAAAG"
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0003)
-{
+GUI_TEST_CLASS_DEFINITION(test_0003) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     const QString doc1("1.gb"), doc2("2.gb");
 
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
@@ -216,11 +227,17 @@ GUI_TEST_CLASS_DEFINITION(test_0003)
 
 // Expected state: sequence view B part 1 of 3 has been opened, with sequence "ACCCCACCCGTAGGTGGCAAGCTAGCTTAAG"
     GTUtilsSequenceView::checkSequence(os, "ACCCCACCCGTAGGTGGCAAGCTAGCTTAAG");
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0004) {
-
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+
     GTUtilsDocument::checkDocument(os, "1.gb");
     GTUtilsDocument::checkDocument(os, "2.gb");
 
@@ -236,8 +253,13 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
     GTGlobals::sleep(1000);
     bool equals = GTFile::equals(os, testDir+"_common_data/scenarios/sandbox/1.csv", testDir+"_common_data/scenarios/project/test_0004.csv");
     CHECK_SET_ERR(equals == true, "Exported file differs from the test file");
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 GUI_TEST_CLASS_DEFINITION(test_0005) {
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -260,6 +282,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
         testDir+"_common_data/scenarios/sandbox/1.csv",
         ExportAnnotationsFiller::csv,
         true,
+        true,
         false
     );
     GTUtilsDialog::waitForDialog(os, filler);
@@ -268,6 +291,10 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTGlobals::sleep(1000);
     bool equals = GTFile::equals(os, testDir+"_common_data/scenarios/sandbox/1.csv", testDir+"_common_data/scenarios/project/test_0005.csv");
     CHECK_SET_ERR(equals == true, "Exported file differs from the test file");
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0007) {
@@ -323,7 +350,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
             CHECK_SET_ERR(!withAnnotationsBox->isEnabled(), "Export with annotations flag is enabled unexpectedly");
             CHECK_SET_ERR(!withAnnotationsBox->isChecked(), "Export with annotations flag is checked unexpectedly");
 
-            GTComboBox::setIndexWithText(os, formatCombo, "Genbank");
+            GTComboBox::setIndexWithText(os, formatCombo, "GenBank");
             CHECK_SET_ERR(withAnnotationsBox->isEnabled(), "Export with annotations flag is disabled unexpectedly");
             CHECK_SET_ERR(withAnnotationsBox->isChecked(), "Export with annotations flag is unchecked unexpectedly");
 
@@ -343,10 +370,11 @@ GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, new CustomExportSelectedRegion()));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_SEQUENCE));
+	GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, new CustomExportSelectedRegion()));
+	GTUtilsProjectTreeView::click(os, "NC_001363", Qt::RightButton);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0009) {
@@ -354,10 +382,9 @@ GUI_TEST_CLASS_DEFINITION(test_0009) {
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0009.fa"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+	GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0009.fa"));
+	GTUtilsProjectTreeView::click(os, "NC_001363 features", Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -372,10 +399,11 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTFileDialog::openFile(os, dataDir + "samples/GFF/", "5prime_utr_intron_A21.gff");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+	GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+	GTUtilsProjectTreeView::click(os, "Ca21chr5 features", Qt::RightButton);
+
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // the rest part of the test checks that a newly created association can be used for sequence export
 
@@ -386,11 +414,9 @@ GUI_TEST_CLASS_DEFINITION(test_0010) {
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, idxGff, seqArea);
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0010.fa"));
-    GTMouseDriver::click(Qt::RightButton);
-
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+	GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0010.fa"));
+	GTUtilsProjectTreeView::click(os, "Ca21chr5 features", Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     const QModelIndex docIndex = GTUtilsProjectTreeView::findIndex(os, "Project_export_test_0010.fa");
@@ -402,15 +428,14 @@ GUI_TEST_CLASS_DEFINITION(test_0011) {
 
     GTFileDialog::openFile(os, dataDir + "samples/Genbank", "murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363"));
-    GTMouseDriver::click();
+	
+	GTUtilsProjectTreeView::click(os, "NC_001363");
     GTKeyboardDriver::keyPress(Qt::Key_Delete);
     GTGlobals::sleep(200);
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTMouseDriver::click(Qt::RightButton);
+   
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+	GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+	GTUtilsProjectTreeView::click(os, "NC_001363 features", Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0012) {
@@ -426,11 +451,13 @@ GUI_TEST_CLASS_DEFINITION(test_0012) {
     GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
     GTUtilsProjectTreeView::dragAndDrop(os, annIdx, seqArea);
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
-    GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0012.fa"));
-    GTMouseDriver::click(Qt::RightButton);
-
+    //GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "NC_001363 features"));
+    //GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+    //GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0012.fa"));
+    //GTMouseDriver::click(Qt::RightButton);
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ));
+	GTUtilsDialog::waitForDialog(os, new ExportSelectedRegionFiller(os, sandBoxDir, "Project_export_test_0012.fa"));
+	GTUtilsProjectTreeView::click(os, "NC_001363 features", Qt::RightButton);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     const QModelIndex docIndex = GTUtilsProjectTreeView::findIndex(os, "Project_export_test_0012.fa");
@@ -444,16 +471,13 @@ GUI_TEST_CLASS_DEFINITION(test_0013) {
 
     GTKeyboardDriver::keyPress(Qt::Key_Control);
     GTGlobals::sleep(200);
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr5 features"));
-    GTMouseDriver::click();
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Ca21chr1 features"));
-    GTMouseDriver::click();
+	GTUtilsProjectTreeView::click(os, "Ca21chr5 features");    
+	GTUtilsProjectTreeView::click(os, "Ca21chr1 features");
     GTKeyboardDriver::keyRelease( Qt::Key_Control);
     GTGlobals::sleep(200);
 
-    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION
-        << ACTION_EXPORT_CORRESPONDING_SEQ, PopupChecker::NotExists));
-    GTMouseDriver::click(Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new PopupChecker(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CORRESPONDING_SEQ, PopupChecker::NotExists));
+    GTMouseDriver::click(Qt::RightButton);	
 }
 
 }
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
old mode 100644
new mode 100755
index 5c69e51..2f149bf
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/GTTestsProjectSequenceExporting.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.cpp
index 788e153..1aabfba 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,36 +19,37 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsFromProjectView.h"
-#include "GTGlobals.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <utils/GTThread.h>
-#include <drivers/GTMouseDriver.h>
-#include "primitives/GTMenu.h"
 #include "api/GTSequenceReadingModeDialogUtils.h"
-#include <primitives/GTTreeWidget.h>
-#include <base_dialogs/GTFileDialog.h>
-#include "GTUtilsProject.h"
+#include "GTGlobals.h"
+#include "GTTestsFromProjectView.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsLog.h"
-#include "utils/GTUtilsApp.h"
-#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsProject.h"
 #include "GTUtilsProjectTreeView.h"
-#include "GTUtilsTaskTreeView.h"
 #include "GTUtilsSequenceView.h"
-#include "GTUtilsMdi.h"
+#include "GTUtilsTaskTreeView.h"
+#include "primitives/GTMenu.h"
 #include "primitives/PopupChooser.h"
-#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
-#include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportMSA2SequencesDialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportSequences2MSADialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
+#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
+#include "utils/GTKeyboardUtils.h"
+#include "utils/GTUtilsApp.h"
+#include "utils/GTUtilsToolTip.h"
+#include <base_dialogs/GTFileDialog.h>
 #include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTreeWidget.h>
+#include <system/GTFile.h>
+#include <utils/GTThread.h>
 
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 namespace U2 {
 
@@ -57,8 +58,10 @@ using namespace HI;
 
 GUI_TEST_CLASS_DEFINITION(test_0001) {
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
 // Expected state:
 //     1) Project view with document "1.gb" and "2.gb" is opened, both documents are unloaded
@@ -102,12 +105,18 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     GTGlobals::sleep(3000);
 // Expected state: sequence view NC_001363 sequence has been opened, with sequence same as in 1.gb document
     GTUtilsDocument::checkDocument(os, "exp.fasta", AnnotatedDNAViewFactory::ID);
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0002) {
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/project/proj4.uprj");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 // Expected state:
 //     1) Project view with document "1.gb" and "2.gb" is opened, both documents are unloaded
     GTUtilsDocument::checkDocument(os, "1.gb", GTUtilsDocument::DocumentUnloaded);
@@ -141,12 +150,16 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 // Expected state: multiple aligniment view with NC_001363 sequence has been opened
     GTUtilsProject::openFiles(os, testDir+"_common_data/scenarios/sandbox/exp2.aln");
     GTUtilsDocument::checkDocument(os, "exp2.aln");
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0003) {
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os));
     GTUtilsProject::openFiles(os, testDir + "_common_data/scenarios/project/multiple.fa");
-    GTGlobals::sleep(1000);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "multiple.fa"));
     GTMouseDriver::click();
@@ -179,8 +192,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa", ExportToSequenceFormatFiller::FASTA, true, true));
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "HIV-1.aln"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "HIV-1.aln", Qt::RightButton);
     GTGlobals::sleep();
 
     QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "export1.fa");
@@ -206,9 +218,7 @@ GUI_TEST_CLASS_DEFINITION(test_0004) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0005) {
-
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
-
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
@@ -219,16 +229,10 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_PROJECT__EXPORT_AS_SEQUENCES_ACTION));
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa",
                                 ExportToSequenceFormatFiller::FASTA, true, false));
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+	GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(Qt::RightButton);
-    GTGlobals::sleep();
+	GTUtilsProjectTreeView::click(os, "Zychia_baranovi", Qt::RightButton);
     GTThread::waitForMainThread();
 
     QWidget *activeWindow =  GTUtilsMdi::activeWindow(os);
@@ -239,9 +243,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005) {
     }
 
 GUI_TEST_CLASS_DEFINITION(test_0005_1) {
-
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
-
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
@@ -253,16 +255,13 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa",
         ExportToSequenceFormatFiller::FASTA, true, true));
 
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI.aln"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "Zychia_baranovi", Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
@@ -277,10 +276,7 @@ GUI_TEST_CLASS_DEFINITION(test_0005_1) {
     }
 
 GUI_TEST_CLASS_DEFINITION(test_0005_2) {
-
-
     // 1. Use menu {File->Open}. Open project data/samples/CLUSTALW/COI.aln
-
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
@@ -291,17 +287,14 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_PROJECT__EXPORT_AS_SEQUENCES_ACTION));
     GTUtilsDialog::waitForDialog(os, new ExportToSequenceFormatFiller(os, dataDir + " _common_data/scenarios/sandbox/", "export1.fa",
         ExportToSequenceFormatFiller::FASTA, true, false));
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "COI"));
-    GTMouseDriver::click(Qt::RightButton);
+   
+	GTUtilsProjectTreeView::click(os, "COI.aln", Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Open View" << "Open New View", GTGlobals::UseMouse));
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "Zychia_baranovi"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "Zychia_baranovi", Qt::RightButton);
     GTGlobals::sleep(1000);
 
     GTGlobals::sleep(1000);
@@ -313,20 +306,20 @@ GUI_TEST_CLASS_DEFINITION(test_0005_2) {
 
     int sequenceLength = GTUtilsSequenceView::getLengthOfSequence(os);
     CHECK_SET_ERR(sequenceLength == 586, "Sequence length is " + QString::number(sequenceLength) + ", expected 586");
-
     }
 
 GUI_TEST_CLASS_DEFINITION(test_0006) {
-    const QString doc1("1.gb"), doc2("2.gb");
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
+    const QString doc1("1.gb"), doc2("2.gb");
 // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
-
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
 
 // Expected state:
 //     1) Project view with document "1.gb" and "2.gb" is opened, both documents are unloaded
+	GTUtilsProjectTreeView::click(os, doc1);
     GTUtilsProjectTreeView::findIndex(os, doc1);//checks inside
     GTUtilsProjectTreeView::findIndex(os, doc2);
     if (GTUtilsDocument::isDocumentLoaded(os, doc1) || GTUtilsDocument::isDocumentLoaded(os, doc2)) {
@@ -335,11 +328,12 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     }
 
 // 2. Double click on [a] Annotations sequence object, in project view tree
-    QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
-    GTMouseDriver::moveTo(itemPos);
+    //QPoint itemPos = GTUtilsProjectTreeView::getItemCenter(os, "Annotations");
+	GTUtilsProjectTreeView::click(os, "Annotations");
+    //GTMouseDriver::moveTo(itemPos);
     GTMouseDriver::doubleClick();
     GTGlobals::sleep();
-
+	
 // Expected result: NC_001363 sequence has been opened in sequence view
     GObjectViewWindow *activeWindow = qobject_cast<GObjectViewWindow*> (GTUtilsMdi::activeWindow(os));
     if (! activeWindow->getViewName().contains("NC_001363")) {
@@ -356,7 +350,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     Runnable *filler = new ExportSequenceAsAlignmentFiller(os, dataDir + "_common_data/scenarios/sandbox/",
         "exp2.msf", ExportSequenceAsAlignmentFiller::Msf);
     GTUtilsDialog::waitForDialog(os, filler);
-
+	 GTGlobals::sleep(1000);
     QModelIndex parent = GTUtilsProjectTreeView::findIndex(os, "1.gb");
     QModelIndex child = GTUtilsProjectTreeView::findIndex(os, "NC_001363 sequence", parent);
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, child));
@@ -372,14 +366,18 @@ GUI_TEST_CLASS_DEFINITION(test_0006) {
     if (GTUtilsProjectTreeView::getSelectedItem(os) != "[s] NC_001363 sequence") {
         os.setError("multiple alignment view with NC_001363 sequence has been not opened");
     }
+
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0007) {
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     const QString doc1("1.gb"), doc2("2.gb");
-
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
-
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/project/", "proj4.uprj");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep(1000);
@@ -431,10 +429,15 @@ GUI_TEST_CLASS_DEFINITION(test_0007) {
     if (GTUtilsProjectTreeView::getSelectedItem(os) != "[s] NC_001363 sequence") {
         os.setError("multiple alignment view with NC_001363 sequence has been not opened");
         }
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     }
 
 GUI_TEST_CLASS_DEFINITION(test_0007_1) {
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     const QString doc1("1.gb"), doc2("2.gb");
 
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
@@ -490,10 +493,17 @@ GUI_TEST_CLASS_DEFINITION(test_0007_1) {
     if (GTUtilsProjectTreeView::getSelectedItem(os) != "[s] NC_001363 sequence") {
         os.setError("multiple alignment view with NC_001363 sequence has been not opened");
         }
+
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     }
 
 GUI_TEST_CLASS_DEFINITION(test_0007_2) {
 
+    GTFile::backup(os, testDir + "_common_data/scenarios/project/proj4.uprj");
+
     const QString doc1("1.gb"), doc2("2.gb");
 
     // 1. Use menu {File->Open}. Open project _common_data/scenario/project/proj4.uprj
@@ -549,55 +559,40 @@ GUI_TEST_CLASS_DEFINITION(test_0007_2) {
     if (GTUtilsProjectTreeView::getSelectedItem(os) != "[s] NC_001363 sequence") {
         os.setError("multiple alignment view with NC_001363 sequence has been not opened");
         }
+
+    GTKeyboardDriver::keyClick('q', Qt::ControlModifier);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFile::restore(os, testDir + "_common_data/scenarios/project/proj4.uprj");
     }
+
 GUI_TEST_CLASS_DEFINITION(test_0008) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(1000);
 
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
-    GTGlobals::sleep(1000);
-
-    Runnable *filler = new ExportChromatogramFiller(os, sandBoxDir,
+       Runnable *filler = new ExportChromatogramFiller(os, sandBoxDir,
         "pagefile.sys", ExportChromatogramFiller::SCF, false, true, true);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTGlobals::sleep(1000);
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(Qt::RightButton);
-
+    GTUtilsProjectTreeView::click(os, "A01.abi", Qt::RightButton);
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_1) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(1000);
-
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
-    GTGlobals::sleep(1000);
 
+	GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
     Runnable *filler = new ExportChromatogramFiller(os, sandBoxDir,
         "pagefile.sys", ExportChromatogramFiller::SCF, true, true, true);
     GTUtilsDialog::waitForDialog(os, filler);
-    GTGlobals::sleep(1000);
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsProjectTreeView::click(os, "A01.abi", Qt::RightButton);
     }
 GUI_TEST_CLASS_DEFINITION(test_0008_2) {
     GTFileDialog::openFile(os, dataDir + "samples/ABIF/", "A01.abi");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(1000);
-
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ACTION_PROJECT__EXPORT_IMPORT_MENU_ACTION << ACTION_EXPORT_CHROMATOGRAM));
-    GTGlobals::sleep(1000);
-
     Runnable *filler = new ExportChromatogramFiller(os, sandBoxDir,
         "pagefile.sys", ExportChromatogramFiller::SCF, false, true, false);
-    GTUtilsDialog::waitForDialog(os, filler);
-    GTGlobals::sleep(1000);
-
-    GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "A01.abi"));
-    GTMouseDriver::click(Qt::RightButton);
+	GTUtilsDialog::waitForDialog(os, filler);
+	GTUtilsProjectTreeView::click(os, "A01.abi", Qt::RightButton);
     }
 
 } // namespace
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
index a27e3ed..dc495d5 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/sequence_exporting/from_project_view/GTTestsFromProjectView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.cpp
index e629a1d..b25e1a3 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,19 +39,11 @@
 
 #include <U2Core/DocumentModel.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QComboBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QRadioButton>
-#include <QtGui/QDialogButtonBox>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QDialogButtonBox>
-#endif
+#include <QApplication>
+#include <QComboBox>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QDialogButtonBox>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
index f7bd733..040052c 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/project/user_locking/GTTestsProjectUserLocking.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.cpp
index 5b4957f..480ae39 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
+#include <QTreeWidgetItem>
 
 #include "GTTestsRepeatFinder.h"
 #include <base_dialogs/GTFileDialog.h>
@@ -77,7 +72,7 @@ GUI_TEST_CLASS_DEFINITION(test_0001) {
     QTreeWidgetItem *annotationsRoot = GTUtilsAnnotationsTreeView::findItem(os, "repeat_unit  (0, 325)");
     GTMouseDriver::moveTo(GTTreeWidget::getItemCenter(os, annotationsRoot->child(0)));
     GTMouseDriver::doubleClick();
-    GTUtilsAnnotationsTreeView::findItem(os, "repeat_homology(%)");
+    GTUtilsAnnotationsTreeView::findItem(os, "repeat_identity");
 
 // 5. Close sequence view (it's needed to refresh screen since Ugene cannot close correctly on Win7 32bit)
     GTUtilsMdi::click(os, GTGlobals::Close);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
index 1dc5763..f640784 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/repeat_finder/GTTestsRepeatFinder.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.cpp
new file mode 100644
index 0000000..f8fbb4b
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.cpp
@@ -0,0 +1,480 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
+#include <QCheckBox>
+#include <QFileInfo>
+#include <QLineEdit>
+#include <QSpinBox>
+
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTWidget.h>
+
+#include "GTTestsSanger.h"
+#include "GTUtilsDashboard.h"
+#include "GTUtilsLog.h"
+#include "GTUtilsMcaEditor.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsProject.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GTUtilsWizard.h"
+#include "GTUtilsWorkflowDesigner.h"
+#include "runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_sanger {
+using namespace HI;
+GUI_TEST_CLASS_DEFINITION(test_0001) {
+    GTLogTracer l;
+
+    AlignToReferenceBlastDialogFiller::Settings settings;
+    settings.referenceUrl = testDir + "_common_data/sanger/reference.gb";
+    for (int i = 5; i <= 7; i++) {
+        settings.readUrls << QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+    }
+    settings.outAlignment = QFileInfo(sandBoxDir + "sanger_test_0001").absoluteFilePath();
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsLog::check(os, l);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0002) {
+    class CheckerFiller : public Filler {
+    public:
+        CheckerFiller(HI::GUITestOpStatus &os, const AlignToReferenceBlastDialogFiller::Settings& settings)
+            : Filler(os, "AlignToReferenceBlastDialog"),
+              settings(settings)
+        {}
+
+        virtual void run() {
+            QWidget* dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            QLineEdit* reference = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "referenceLineEdit", dialog));
+            CHECK_SET_ERR(reference, "referenceLineEdit is NULL");
+            GTLineEdit::setText(os, reference, settings.referenceUrl);
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+
+            QWidget* addReadButton = GTWidget::findWidget(os, "addReadButton");
+            CHECK_SET_ERR(addReadButton, "addReadButton is NULL");
+            foreach (const QString& read, settings.readUrls) {
+                GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, read));
+                GTWidget::click(os, addReadButton);
+                GTGlobals::sleep();
+            }
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    private:
+        AlignToReferenceBlastDialogFiller::Settings settings;
+    };
+
+    GTLogTracer l;
+
+    AlignToReferenceBlastDialogFiller::Settings settings;
+    settings.referenceUrl = testDir + "_common_data/sanger/reference.gb";
+    settings.readUrls << testDir + "_common_data/sanger/sanger_05.ab1";
+
+    GTUtilsDialog::waitForDialog(os, new CheckerFiller(os, settings));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsLog::check(os, l);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0003) {
+    GTLogTracer l;
+
+    AlignToReferenceBlastDialogFiller::Settings settings;
+    settings.referenceUrl = testDir + "_common_data/sanger/reference.gb";
+    for (int i = 11; i <= 13; i++) {
+        settings.readUrls << QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+    }
+    settings.outAlignment = QFileInfo(sandBoxDir + "sanger_test_0003").absoluteFilePath();
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::checkContainsError(os, l, "No read satisfy minimum similarity criteria");
+    GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
+
+    settings.minIdentity = 30;
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsProjectTreeView::checkItem(os, "sanger_test_0003");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0004) {
+    GTLogTracer l;
+
+    AlignToReferenceBlastDialogFiller::Settings settings;
+    settings.referenceUrl = testDir + "_common_data/sanger/reference.gb";
+    for (int i = 18; i <= 20; i++) {
+        settings.readUrls << QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+    }
+    settings.outAlignment = QFileInfo(sandBoxDir + "sanger_test_0004").absoluteFilePath();
+    settings.addResultToProject = false;
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsProject::checkProject(os, GTUtilsProject::NotExists);
+
+    settings.addResultToProject = true;
+    settings.outAlignment = QFileInfo(sandBoxDir + "sanger_test_0004_1").absoluteFilePath();
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(settings, os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsProjectTreeView::checkItem(os, "sanger_test_0004_4");
+
+    GTUtilsLog::check(os, l);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005_1) {
+//    // Check 'Sequence name from file' value of the 'Read name in result alignment' parameter in the 'Map Sanger Reads to Reference' dialog.
+//    1. Click "Tools" -> "Sanger data analysis" -> "Map reads to reference..." in the main menu.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "active modal widget is NULL");
+
+//    Expected state: 'Sequence name from file' value is set by default.
+            const QString expectedRowNamingPolicy = "Sequence name from file";
+            const QString currentRowNamingPolicy = GTComboBox::getCurrentText(os, "cbRowNaming", dialog);
+            CHECK_SET_ERR(expectedRowNamingPolicy == currentRowNamingPolicy,
+                          QString("An incorrect default value of the 'Read name in result alignment' parameter: expected '%1', got '%2'")
+                          .arg(expectedRowNamingPolicy).arg(currentRowNamingPolicy));
+
+//    2. Set input data from "_common_data/sanger/" directory and the output file.
+            AlignToReferenceBlastDialogFiller::setReference(os, testDir + "_common_data/sanger/reference.gb", dialog);
+
+            QStringList readsUrls;
+            for (int i = 1; i <= 20; i++) {
+                readsUrls << QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            AlignToReferenceBlastDialogFiller::setReads(os, readsUrls, dialog);
+
+            AlignToReferenceBlastDialogFiller::setDestination(os, sandBoxDir + "sanger_test_0005_1.ugenedb", dialog);
+
+//    3. Click the 'Map' button.
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+//    Expected state: the result alignment rows are named like "SZYD_Cas9_*".
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList expectedReadsnames = QStringList() << "SZYD_Cas9_5B70"
+                                                         << "SZYD_Cas9_5B71"
+                                                         << "SZYD_Cas9_CR50"
+                                                         << "SZYD_Cas9_CR51"
+                                                         << "SZYD_Cas9_CR52"
+                                                         << "SZYD_Cas9_CR53"
+                                                         << "SZYD_Cas9_CR54"
+                                                         << "SZYD_Cas9_CR55"
+                                                         << "SZYD_Cas9_CR56"
+                                                         << "SZYD_Cas9_CR60"
+                                                         << "SZYD_Cas9_CR61"
+                                                         << "SZYD_Cas9_CR62"
+                                                         << "SZYD_Cas9_CR63"
+                                                         << "SZYD_Cas9_CR64"
+                                                         << "SZYD_Cas9_CR65"
+                                                         << "SZYD_Cas9_CR66";
+    const QStringList readsNames = GTUtilsMcaEditor::getReadsNames(os);
+    CHECK_SET_ERR(expectedReadsnames == readsNames, "Incorrect reads names");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005_2) {
+//    // Check 'Sequence name from file' value of the 'Read name in result alignment' parameter in the 'Map Sanger Reads to Reference' dialog.
+//    1. Click "Tools" -> "Sanger data analysis" -> "Map reads to reference..." in the main menu.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "active modal widget is NULL");
+
+//    Expected state: 'Sequence name from file' value is set by default.
+            const QString expectedRowNamingPolicy = "Sequence name from file";
+            const QString currentRowNamingPolicy = GTComboBox::getCurrentText(os, "cbRowNaming", dialog);
+            CHECK_SET_ERR(expectedRowNamingPolicy == currentRowNamingPolicy,
+                          QString("An incorrect default value of the 'Read name in result alignment' parameter: expected '%1', got '%2'")
+                          .arg(expectedRowNamingPolicy).arg(currentRowNamingPolicy));
+
+//    2. Set input data from "_common_data/sanger/" directory and the output file.
+            AlignToReferenceBlastDialogFiller::setReference(os, testDir + "_common_data/sanger/reference.gb", dialog);
+
+            QStringList readsUrls;
+            for (int i = 1; i <= 20; i++) {
+                readsUrls << QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'));
+            }
+            AlignToReferenceBlastDialogFiller::setReads(os, readsUrls, dialog);
+
+            AlignToReferenceBlastDialogFiller::setDestination(os, sandBoxDir + "sanger_test_0005_2.ugenedb", dialog);
+
+//    3. Set 'Read name in result alignment' to 'File name'.
+            GTComboBox::setIndexWithText(os, "cbRowNaming", dialog, "File name");
+
+//    4. Click the 'Map' button.
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+//    Expected state: the result alignment rows are named like "sanger_*".
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList expectedReadsnames = QStringList() << "sanger_01"
+                                                         << "sanger_02"
+                                                         << "sanger_04"
+                                                         << "sanger_05"
+                                                         << "sanger_06"
+                                                         << "sanger_07"
+                                                         << "sanger_08"
+                                                         << "sanger_09"
+                                                         << "sanger_10"
+                                                         << "sanger_14"
+                                                         << "sanger_15"
+                                                         << "sanger_16"
+                                                         << "sanger_17"
+                                                         << "sanger_18"
+                                                         << "sanger_19"
+                                                         << "sanger_20";
+    const QStringList readsNames = GTUtilsMcaEditor::getReadsNames(os);
+    CHECK_SET_ERR(expectedReadsnames == readsNames, "Incorrect reads names");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005_3) {
+//    // Check 'Sequence name from file' value of the 'Read name in result alignment' parameter of the 'Map to Reference' workflow element.
+//    1. Open 'Trim and map Sanger reads' workflow sample.
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+
+//    Expected state: wizard has appeared.
+            QWidget *wizard = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != wizard, "active modal widget is NULL");
+            GTWidget::clickWindowTitle(os, wizard);
+
+//    2. Fill it with any valid data until the 'Mapping settings' page.
+            GTUtilsWizard::setParameter(os, "Reference", QFileInfo(testDir + "_common_data/sanger/reference.gb").absoluteFilePath());
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            QStringList readsUrls;
+            for (int i = 1; i <= 20; i++) {
+                readsUrls << QFileInfo(QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'))).absoluteFilePath();
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsUrls);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+//    Expected state: 'Sequence name from file' value is set by default for the 'Read name in result alignment' parameter.
+            const QString expectedRowNamingPolicy = "Sequence name from file";
+            const QString currentRowNamingPolicy = GTUtilsWizard::getParameter(os, "Read name in result alignment").toString();
+            CHECK_SET_ERR(expectedRowNamingPolicy == currentRowNamingPolicy,
+                          QString("An incorrect default value of the 'Read name in result alignment' parameter: expected '%1', got '%2'")
+                          .arg(expectedRowNamingPolicy).arg(currentRowNamingPolicy));
+
+//    3. Fill the wizard till the end. Run the workflow.
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::setParameter(os, "Mapped reads file", QFileInfo(sandBoxDir + "sanger_test_0005_3.ugenedb").absoluteFilePath());
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario));
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and map Sanger reads");
+
+//    Expected state: the result alignment rows are named like "SZYD_Cas9_*".
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDashboard::clickOutputFile(os, "sanger_test_0005_3.ugenedb", "align-to-reference");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList expectedReadsnames = QStringList() << "SZYD_Cas9_5B70"
+                                                         << "SZYD_Cas9_5B71"
+                                                         << "SZYD_Cas9_CR50"
+                                                         << "SZYD_Cas9_CR51"
+                                                         << "SZYD_Cas9_CR52"
+                                                         << "SZYD_Cas9_CR53"
+                                                         << "SZYD_Cas9_CR54"
+                                                         << "SZYD_Cas9_CR55"
+                                                         << "SZYD_Cas9_CR56"
+                                                         << "SZYD_Cas9_CR60"
+                                                         << "SZYD_Cas9_CR61"
+                                                         << "SZYD_Cas9_CR62"
+                                                         << "SZYD_Cas9_CR63"
+                                                         << "SZYD_Cas9_CR64"
+                                                         << "SZYD_Cas9_CR65"
+                                                         << "SZYD_Cas9_CR66";
+    const QStringList readsNames = GTUtilsMcaEditor::getReadsNames(os);
+    CHECK_SET_ERR(expectedReadsnames == readsNames, "Incorrect reads names");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005_4) {
+//    // Check 'Sequence name from file' value of the 'Read name in result alignment' parameter of the 'Map to Reference' workflow element.
+//    1. Open 'Trim and map Sanger reads' workflow sample.GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+
+//    Expected state: wizard has appeared.
+            QWidget *wizard = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != wizard, "active modal widget is NULL");
+            GTWidget::clickWindowTitle(os, wizard);
+
+//    2. Fill it with any valid data until the 'Mapping settings' page.
+            GTUtilsWizard::setParameter(os, "Reference", QFileInfo(testDir + "_common_data/sanger/reference.gb").absoluteFilePath());
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+            QStringList readsUrls;
+            for (int i = 1; i <= 20; i++) {
+                readsUrls << QFileInfo(QString(testDir + "_common_data/sanger/sanger_%1.ab1").arg(i, 2, 10, QChar('0'))).absoluteFilePath();
+            }
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << readsUrls);
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+
+//    Expected state: 'Sequence name from file' value is set by default for the 'Read name in result alignment' parameter.
+            const QString expectedRowNamingPolicy = "Sequence name from file";
+            const QString currentRowNamingPolicy = GTUtilsWizard::getParameter(os, "Read name in result alignment").toString();
+            CHECK_SET_ERR(expectedRowNamingPolicy == currentRowNamingPolicy,
+                          QString("An incorrect default value of the 'Read name in result alignment' parameter: expected '%1', got '%2'")
+                          .arg(expectedRowNamingPolicy).arg(currentRowNamingPolicy));
+
+
+//    3. Set the 'Read name in result alignment' to 'File name'.
+            GTUtilsWizard::setParameter(os, "Read name in result alignment", "File name");
+
+//    4. Fill the wizard till the end. Run the workflow.
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::setParameter(os, "Mapped reads file", QFileInfo(sandBoxDir + "sanger_test_0005_4.ugenedb").absoluteFilePath());
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Map Sanger Reads to Reference", new Scenario));
+    GTUtilsWorkflowDesigner::addSample(os, "Trim and map Sanger reads");
+
+//    Expected state: the result alignment rows are named like "sanger_*".
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDashboard::clickOutputFile(os, "sanger_test_0005_4.ugenedb", "align-to-reference");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    const QStringList expectedReadsnames = QStringList() << "sanger_01"
+                                                         << "sanger_02"
+                                                         << "sanger_04"
+                                                         << "sanger_05"
+                                                         << "sanger_06"
+                                                         << "sanger_07"
+                                                         << "sanger_08"
+                                                         << "sanger_09"
+                                                         << "sanger_10"
+                                                         << "sanger_14"
+                                                         << "sanger_15"
+                                                         << "sanger_16"
+                                                         << "sanger_17"
+                                                         << "sanger_18"
+                                                         << "sanger_19"
+                                                         << "sanger_20";
+    const QStringList readsNames = GTUtilsMcaEditor::getReadsNames(os);
+    CHECK_SET_ERR(expectedReadsnames == readsNames, "Incorrect reads names");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0006) {
+//    // Check that reads that consists of gaps and N only are skipped
+//    1. Select "Tools" -> "Sanger data analysis" -> "Map reads to reference..." item in the main menu.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+//    2. Set '_common_data/sanger/dataset3/reference.gb' as reference and the next files as reads:
+//        '_common_data/sanger/dataset3/gaps.ab1'
+//        '_common_data/sanger/dataset3/N.ab1'
+//        '_common_data/sanger/dataset3/N_and_gaps.ab1'
+//        '_common_data/sanger/dataset3/pFB7-CDK5RAP2_P1713799_009.ab1'
+//        Set 'Read name in result alignment' option to 'File name'.
+//        Accept the dialog.
+            AlignToReferenceBlastDialogFiller::setReference(os, QFileInfo(testDir + "_common_data/sanger/dataset3/reference.gb").absoluteFilePath(), dialog);
+
+            const QStringList reads = QStringList() << testDir + "_common_data/sanger/dataset3/gaps.ab1"
+                                                    << testDir + "_common_data/sanger/dataset3/N.ab1"
+                                                    << testDir + "_common_data/sanger/dataset3/N_and_gaps.ab1"
+                                                    << testDir + "_common_data/sanger/dataset3/pFB7-CDK5RAP2_P1713799_009.ab1";
+            AlignToReferenceBlastDialogFiller::setReads(os, reads, dialog);
+
+            GTComboBox::setIndexWithText(os, "cbRowNaming", dialog, "File name");
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: the report contains information about 3 filtered reads, their similarity is 0%. The result alignment contains one mapped read with the name 'pFB7-CDK5RAP2_P1713799_009'.
+    // It is too hard to check the report, because we change it too often. Just check the rows count.
+    const int rowsCount = GTUtilsMcaEditor::getReadsCount(os);
+    CHECK_SET_ERR(1 == rowsCount, QString("Unexpected rows count: expect 1, got %1").arg(rowsCount));
+}
+
+}   // namespace GUITest_common_scenarios_sanger
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.h b/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.h
new file mode 100644
index 0000000..2b1946d
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sanger/GTTestsSanger.h
@@ -0,0 +1,49 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_GUI_TEST_SANGER_H_
+#define _U2_GUI_TEST_SANGER_H_
+
+#include <U2Test/UGUITestBase.h>
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_sanger {
+
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_sanger"
+
+GUI_TEST_CLASS_DECLARATION(test_0001)
+GUI_TEST_CLASS_DECLARATION(test_0002)
+GUI_TEST_CLASS_DECLARATION(test_0003)
+GUI_TEST_CLASS_DECLARATION(test_0004)
+GUI_TEST_CLASS_DECLARATION(test_0005_1)
+GUI_TEST_CLASS_DECLARATION(test_0005_2)
+GUI_TEST_CLASS_DECLARATION(test_0005_3)
+GUI_TEST_CLASS_DECLARATION(test_0005_4)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+
+#undef GUI_TEST_SUITE
+
+}   // namespace GUITest_common_scenarios_sanger
+}   // namespace U2
+
+#endif // _U2_GUI_TEST_SANGER_H_
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.cpp
index 6a8e540..c9fecaf 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,7 +53,7 @@
 
 #include <U2Core/DocumentModel.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 #include <U2View/ADVConstants.h>
 
 namespace U2{
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
index 880e600..55af804 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_edit/GTTestsSequenceEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.cpp
index 3af7b7b..9a81e4d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -1168,6 +1168,7 @@ GUI_TEST_CLASS_DEFINITION(test_0032){
     };
     GTUtilsDialog::waitForDialog(os, new PopupChecker(os, new AllPopupChecker));
     GTWidget::click(os, translationsMenuToolbarButton);
+	GTKeyboardDriver::keyClick(Qt::Key_Escape);
 }
 #undef GET_ACTIONS
 
@@ -1829,7 +1830,7 @@ GUI_TEST_CLASS_DEFINITION(test_0056){
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
 
-            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid cutoff values"));
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Invalid cutoff range"));
             QGroupBox* minmaxGroup = GTWidget::findExactWidget<QGroupBox*>(os, "minmaxGroup", dialog);
             minmaxGroup->setChecked(true);
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.h
index fbdce18..59cb1e5 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/sequence_view/GTTestsSequenceView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.cpp
index cdfd24d..9f89cb6 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,11 +20,14 @@
  */
 
 #include <QApplication>
+#include <QDir>
+#include <QFileInfo>
 #include <QTreeWidgetItem>
 #include <QListWidget>
 
 #include <base_dialogs/GTFileDialog.h>
 #include <base_dialogs/MessageBoxFiller.h>
+#include <core/GUITest.h>
 #include <drivers/GTKeyboardDriver.h>
 #include <drivers/GTMouseDriver.h>
 #include <primitives/GTLineEdit.h>
@@ -38,8 +41,7 @@
 
 #include <U2Core/ImportToDatabaseOptions.h>
 #include <U2Core/U2ObjectDbi.h>
-
-#include <core/GUITest.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2View/AnnotationsTreeView.h>
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
index 473db13..c187432 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/shared_database/GTTestsSharedDatabase.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.cpp
index 6fe6a52..d59bb52 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 #include <U2View/ADVConstants.h>
 
@@ -143,7 +138,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "S"));
     GTMouseDriver::doubleClick();
-    GTGlobals::sleep(1000);
+    GTGlobals::sleep(3000);
 
 // 5. Check names and count of annotations
     QTreeWidget *treeWidget = GTUtilsAnnotationsTreeView::getTreeWidget(os);
@@ -158,7 +153,7 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
         }
     }
 
-    CHECK_SET_ERR(3 == annotationsCounter, "Result count mismatch detected");
+    CHECK_SET_ERR(3 == annotationsCounter, QString("Result count mismatch Expected= %1 Actual= %2").arg(3).arg(annotationsCounter));
 }
 
 } // namespace GUITest_common_scenarios_sw_dialog
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
index 17c80aa..b03a55e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/smith_waterman_dialog/GTTestsSWDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.cpp
index 2d61ad9..823bb48 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -107,9 +107,6 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
 //    Expected state: project is added to "Resent files" list
 //    Close project
     GTUtilsProject::closeProject(os);
-    GTGlobals::sleep(500);
-    GTWebView::traceAllWebElements(os, GTUtilsStartPage::getStartPage(os));
-    GTGlobals::sleep(500);
 //    Go to Start page
     GTUtilsStartPage::openStartPage(os);
 //    Click project name in "Resent projects" list
@@ -119,11 +116,7 @@ GUI_TEST_CLASS_DEFINITION(test_0006){
     GTUtilsDocument::checkDocument(os, "1CF7.PDB");
 
     QString expectedTitle;
-#ifdef Q_OS_MAC
     expectedTitle = "proj1 UGENE";
-#else
-    expectedTitle = "proj1 UGENE - [Start Page]";
-#endif
     GTUtilsApp::checkUGENETitle(os, expectedTitle);
 }
 
@@ -142,6 +135,7 @@ GUI_TEST_CLASS_DEFINITION(test_0008){
     CHECK_SET_ERR(title == "Start Page", "unexpected window title: " + title);
 //    Close Start page
     GTUtilsMdi::click(os, GTGlobals::Close);
+    GTGlobals::sleep();
     QWidget* window = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
     CHECK_SET_ERR(window == NULL, "start page was not closed");
 //    Repeat step 2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
index 46ca038..36a1376 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/start_page/GTTestsStartPage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.cpp
index a73eb89..65cdc2d 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@
 
 #include <U2View/ADVConstants.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "GTTestsToggleView.h"
 #include "GTUtilsAnnotationsTreeView.h"
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
index de2c67a..364a9ee 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/toggle_view/GTTestsToggleView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.cpp
index 9d086a6..b212d48 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -84,11 +84,11 @@ GUI_TEST_CLASS_DEFINITION(test_0001){
 
 //4. Use "Capture tree" button on toolbar to make screenshots
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Screen Capture"));
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "jpeg",50));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "JPG",50));
     GTWidget::click(os,GTWidget::findWidget(os,"cameraMenu"));
     GTGlobals::sleep();
 
-    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpeg");
+    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpg");
 //Expected state: images on screenshots same as on your screen
 }
 
@@ -113,10 +113,10 @@ GUI_TEST_CLASS_DEFINITION(test_0001_1){
 
 //4. Use "Capture tree" button on toolbar to make screenshots
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os,QStringList()<<"Export Tree Image"<<"Screen Capture"));
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "jpeg",50));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "JPG",50));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"treeView"));
 
-    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpeg");
+    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpg");
 //Expected state: images on screenshots same as on your screen
 }
 
@@ -139,10 +139,10 @@ GUI_TEST_CLASS_DEFINITION(test_0001_2){
 //Expected state: philogenetic tree appears
 
 //4. Use "Capture tree" button on toolbar to make screenshots
-    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "jpeg",50));
+    GTUtilsDialog::waitForDialog(os, new ExportImage(os,testDir + "_common_data/scenarios/sandbox/image.svg", "JPG",50));
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Export Tree Image" << "Screen Capture...");
 
-    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpeg");
+    GTFile::getSize(os,testDir + "_common_data/scenarios/sandbox/image.jpg");
 //Expected state: images on screenshots same as on your screen
 }
 
@@ -689,28 +689,27 @@ GUI_TEST_CLASS_DEFINITION(test_0009){
 //Expected state: UGENE not crash
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0010){
+GUI_TEST_CLASS_DEFINITION(test_0010) {
 //PhyTree branch settings
 
 //1. Open file _common_data/scenario/tree_view/COI.nwk
-    GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/", "COI.nwk");
+    GTFileDialog::openFile(os,testDir + "_common_data/scenarios/tree_view/COI.nwk");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(500);
 //Expected state: phylogenetic tree appears
 
 //2. Open context menu on branch and  select {change settings} menu item
-    QGraphicsView* treeView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os, "treeView"));
-    QList<QGraphicsItem*> list = treeView->scene()->items();
-    QList<GraphicsButtonItem*> nodeList;
+    QGraphicsView *treeView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "treeView"));
+    QList<QGraphicsItem *> list = treeView->scene()->items();
+    QList<GraphicsButtonItem *> nodeList;
 
-    foreach(QGraphicsItem* item, list){
-        GraphicsButtonItem* buttonItem = dynamic_cast<GraphicsButtonItem*>(item);
-        if(NULL != buttonItem){
+    foreach (QGraphicsItem *item, list) {
+        GraphicsButtonItem *buttonItem = dynamic_cast<GraphicsButtonItem *>(item);
+        if (NULL != buttonItem){
             nodeList.append(buttonItem);
         }
     }
 
-    QGraphicsItem* node = nodeList.last();
+    QGraphicsItem *node = nodeList.last();
     QPointF sceneCoord = node->mapToScene(node->boundingRect().center());
     QPoint viewCord = treeView->mapFromScene(sceneCoord);
     QPoint globalCoord = treeView->mapToGlobal(viewCord);
@@ -719,21 +718,15 @@ GUI_TEST_CLASS_DEFINITION(test_0010){
 
     //3. Change thickness and collor to differ than standard. Click OK
     //Expected state: selected branch changed
-
     GTUtilsDialog::waitForDialog(os, new BranchSettingsDialogFiller(os));
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Branch Settings"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Branch Settings"));
     GTMouseDriver::moveTo(globalCoord);
     GTMouseDriver::click();
     GTMouseDriver::click(Qt::RightButton);
 
+    globalCoord.setX(globalCoord.x() - 10);
 
-    globalCoord.setX(globalCoord.x()-10);
-    QPixmap content;
-    content = QPixmap::grabWidget(treeView,treeView->rect());
-
-    QRgb rgb = content.toImage().pixel(treeView->mapFromGlobal(globalCoord));
-    QColor color(rgb);
-
+    const QColor color = GTWidget::getColor(os, treeView, treeView->mapFromGlobal(globalCoord));
     CHECK_SET_ERR(color.name()=="#0000ff","Expected: #0000ff, found: " + color.name());
 }
 
@@ -1059,7 +1052,7 @@ GUI_TEST_CLASS_DEFINITION( test_0024 ) {
     // it does automatically
     GTUtilsProjectTreeView::openView(os);
     GTUtilsProjectTreeView::toggleView(os);
-    MSAEditorUI* ui = AppContext::getMainWindow()->getQMainWindow()->findChild<MSAEditorUI*>();
+    MsaEditorWgt* ui = AppContext::getMainWindow()->getQMainWindow()->findChild<MsaEditorWgt*>();
     QSplitter* splitter = ui->findChild<QSplitter*>();
     splitter->setSizes(QList<int>()<<100<<0<<0);
     GTGlobals::sleep(500);
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
index 80f50e5..876b50a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/tree_viewer/GTTestsCommonScenariousTreeviewer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.cpp
index a695110..505796e 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,30 +19,33 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsUndoRedo.h"
-#include <drivers/GTMouseDriver.h>
-#include <drivers/GTKeyboardDriver.h>
-#include <primitives/GTWidget.h>
+#include <GTGlobals.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "primitives/GTMenu.h"
-#include "primitives/GTAction.h"
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTMenu.h>
 #include <primitives/GTTreeWidget.h>
-#include "GTGlobals.h"
-#include "system/GTClipboard.h"
 #include <primitives/GTTreeWidget.h>
-#include "utils/GTUtilsDialog.h"
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <utils/GTUtilsDialog.h>
+
+#include <U2View/MSAEditor.h>
+
+#include "GTTestsUndoRedo.h"
 #include "GTUtilsMdi.h"
+#include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
 #include "GTUtilsProjectTreeView.h"
 #include "GTUtilsTaskTreeView.h"
-#include "primitives/PopupChooser.h"
+#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DeleteGapsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/ExtractSelectedAsMSADialogFiller.h"
-#include "runnables/ugene/corelibs/U2Gui/util/RenameSequenceFiller.h"
-#include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h"
-#include <U2View/MSAEditor.h>
+#include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 
 namespace U2{
 
@@ -464,424 +467,353 @@ GUI_TEST_CLASS_DEFINITION( test_0006_2 )
        "There are unexpected names in nameList" );
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0007){//remove columns with 3 or more gaps
+GUI_TEST_CLASS_DEFINITION(test_0007) {
+    // remove columns with 3 or more gaps
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-    QString expectedChangedAln = "AAGCTTCTTT\nAAGTTACTAA\nTAG---TTAT\nAAGC---TAT\n"
-                                 "TAGTTATTAA\nTAGTTATTAA\nTAGTTATTAA\nAAGCTTT---\n"
-                                 "A--AGAATAA\nAAGCTTTTAA";
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGCTTCTTT"
+                                                         << "AAGTTACTAA"
+                                                         << "TAG---TTAT"
+                                                         << "AAGC---TAT"
+                                                         << "TAGTTATTAA"
+                                                         << "TAGTTATTAA"
+                                                         << "TAGTTATTAA"
+                                                         << "AAGCTTT---"
+                                                         << "A--AGAATAA"
+                                                         << "AAGCTTTTAA";
 
     //fill remove columns of gaps dialog
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps",GTGlobals::UseMouse));
-    GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Number,3));
-    GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Number, 3));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln == expectedChangedAln,"remove gaps option works wrong");
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "remove gaps option works wrong");
 
     //undo
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    GTWidget::click(os, undo);
+    GTUtilsMsaEditor::undo(os);
 
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "undo works wrong");
 
     //redo
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
-    GTWidget::click(os, redo);
+    GTUtilsMsaEditor::redo(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong");
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "redo works wrong");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0007_1){//remove columns with 15 percents of gaps
+GUI_TEST_CLASS_DEFINITION(test_0007_1) {
+    // remove columns with 15 percents of gaps
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-    QString expectedChangedAln = "AAGCCTTT\nAAGTCTAA\nTAG-TTAT\nAAGC-TAT\nTAGTTTAA\nTAGTTTAA\n"
-                                 "TAGTTTAA\nAAGCT---\nA--AATAA\nAAGCTTAA";
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGCCTTT"
+                                                         << "AAGTCTAA"
+                                                         << "TAG-TTAT"
+                                                         << "AAGC-TAT"
+                                                         << "TAGTTTAA"
+                                                         << "TAGTTTAA"
+                                                         << "TAGTTTAA"
+                                                         << "AAGCT---"
+                                                         << "A--AATAA"
+                                                         << "AAGCTTAA";
 
     //fill remove columns of gaps dialog
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps",GTGlobals::UseMouse));
-    GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Percent,15));
-    GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Percent, 15));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln == expectedChangedAln,"remove gaps option works wrong\n" + changedAln + '\n' + expectedChangedAln);
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "remove gaps option works wrong:\nChenged MSA:\n" + changedMsa.join("\n") + "\nOriginal MSA:\n" + expectedChangedMsa.join("\n"));
 
     //undo
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    GTWidget::click(os, undo);
+    GTUtilsMsaEditor::undo(os);
 
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "undo works wrong");
 
     //redo
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
-    GTWidget::click(os, redo);
+    GTUtilsMsaEditor::redo(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    clipboardText=GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong");
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "redo works wrong");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0007_2){//remove columns of gaps is tested
+GUI_TEST_CLASS_DEFINITION(test_0007_2) {
+    // remove columns of gaps is tested
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-    QString expectedChangedAln = "AAGCTTCTTTTAA\nAAGTTACTAA---\nTAG---TTATTAA\nAAGC---TATTAA\nTAGTTATTAA---\n"
-                                 "TAGTTATTAA---\nTAGTTATTAA---\nAAGCTTT---TAA\nA--AGAATAATTA\nAAGCTTTTAA---";
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGCTTCTTTTAA"
+                                                         << "AAGTTACTAA---"
+                                                         << "TAG---TTATTAA"
+                                                         << "AAGC---TATTAA"
+                                                         << "TAGTTATTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "AAGCTTT---TAA"
+                                                         << "A--AGAATAATTA"
+                                                         << "AAGCTTTTAA---";
 
     //fill remove columns of gaps dialog
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps",GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "remove_columns_of_gaps", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new RemoveGapColsDialogFiller(os, RemoveGapColsDialogFiller::Column));
-    GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln == expectedChangedAln,"remove gaps option works wrong\n" + changedAln + '\n' + expectedChangedAln);
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "remove gaps option works wrong:\nChenged MSA:\n" + changedMsa.join("\n") + "\nOriginal MSA:\n" + expectedChangedMsa.join("\n"));
 
     //undo
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    GTWidget::click(os, undo);
+    GTUtilsMsaEditor::undo(os);
 
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "undo works wrong");
 
     //redo
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
-    GTWidget::click(os, redo);
+    GTUtilsMsaEditor::redo(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    clipboardText=GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong\n" + clipboardText);
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "redo works wrong");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0008){//remove all gaps is tested
+GUI_TEST_CLASS_DEFINITION(test_0008) {
+    // remove all gaps is tested
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //save initial state
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-    QString expectedChangedAln = "AAGCTTCTTTTAA\nAAGTTACTAA---\nTAGTTATTAA---\nAAGCTATTAA---\nTAGTTATTAA---\n"
-                                 "TAGTTATTAA---\nTAGTTATTAA---\nAAGCTTTTAA---\nAAGAATAATTA--\nAAGCTTTTAA---";
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGCTTCTTTTAA"
+                                                         << "AAGTTACTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "AAGCTATTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "TAGTTATTAA---"
+                                                         << "AAGCTTTTAA---"
+                                                         << "AAGAATAATTA--"
+                                                         << "AAGCTTTTAA---";
 
     //fill remove columns of gaps dialog
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove all gaps",GTGlobals::UseMouse));
-    GTMenu::showContextMenu(os,GTUtilsMdi::activeWindow(os));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove all gaps", GTGlobals::UseMouse));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln == expectedChangedAln,"remove gaps option works wrong\n" + changedAln + '\n' + expectedChangedAln);
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "remove gaps option works wrong:\nChenged MSA:\n" + changedMsa.join("\n") + "\nOriginal MSA:\n" + expectedChangedMsa.join("\n"));
 
     //undo
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    GTWidget::click(os, undo);
+    GTUtilsMsaEditor::undo(os);
 
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString clipboardText = GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==initAln, "undo works wrong");
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "undo works wrong");
 
     //redo
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
-    GTWidget::click(os, redo);
+    GTUtilsMsaEditor::redo(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    clipboardText=GTClipboard::text(os);
-    CHECK_SET_ERR(clipboardText==expectedChangedAln, "redo works wrong\n" + clipboardText);
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "redo works wrong");
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0009){//rename msa is tested
+GUI_TEST_CLASS_DEFINITION(test_0009) {
+    // rename msa is tested
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gap_col.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //rename msa
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<"Rename"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Rename"));
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gap_col"));
     GTMouseDriver::click(Qt::RightButton);
     GTKeyboardDriver::keySequence("some_name");
-    GTKeyboardDriver::keyClick( Qt::Key_Enter);
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
 
     //Expected state: msa renamed
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
 
     //undo
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
-    GTWidget::click(os, undo);
+    GTUtilsMsaEditor::undo(os);
 
     //Expected state: rename undone
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "ma2_gap_col"));
 
     //redo
-    GTWidget::click(os, redo);
+    GTUtilsMsaEditor::redo(os);
 
     //Expected state: rename redone
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "some_name"));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0010){//MUSCLE aligner undo test
+GUI_TEST_CLASS_DEFINITION(test_0010) {
+    // MUSCLE aligner undo test
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-    QString expectedAln("AAG---AATAATTA\n"
-                        "AAG---TCTATTAA\n"
-                        "AAGACTTCTTTTAA\n"
-                        "AAG---TCTTTTAA\n"
-                        "AAG---CCTTTTAA\n"
-                        "AAG---CTTACTAA\n"
-                        "TAG---TTTATTAA\n"
-                        "TAG---CTTATTAA\n"
-                        "TAG---CTTATTAA\n"
-                        "TAG---CTTATTAA");
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAG---AATAATTA"
+                                                         << "AAG---TCTATTAA"
+                                                         << "AAGACTTCTTTTAA"
+                                                         << "AAG---TCTTTTAA"
+                                                         << "AAG---CCTTTTAA"
+                                                         << "AAG---CTTACTAA"
+                                                         << "TAG---TTTATTAA"
+                                                         << "TAG---CTTATTAA"
+                                                         << "TAG---CTTATTAA"
+                                                         << "TAG---CTTATTAA";
 
     //Use context {Edit->Align with MUSCLE}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"Align with muscle", GTGlobals::UseMouse));
-    GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os,MuscleDialogFiller::Default,false));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with muscle", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default, false));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
-    GTGlobals::sleep(10000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
-
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "Unexpected alignment:\n" + changedMsa.join("\n"));
 
     //undo
-    GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::undo(os);
 
-    CHECK_SET_ERR(changedAln==initAln, "Undo works wrong\n" + changedAln);
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "Undo works wrong:\n" + undoneMsa.join("\n"));
 
     //redo
-    GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
-
-    CHECK_SET_ERR(changedAln==expectedAln, "Undo works wrong\n" + changedAln);
+    GTUtilsMsaEditor::redo(os);
 
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "Redo works wrong:\n" + redoneMsa.join("\n"));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0011){//Kalign undo test
+GUI_TEST_CLASS_DEFINITION(test_0011) {
+    // Kalign undo test
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-
-    QString expectedAln("AAGACTTCTTTTAA\n"
-                        "AAGCTTACT---AA\n"
-                        "TAGTTTATT---AA\n"
-                        "AAGTCTATT---AA\n"
-                        "TAGCTTATT---AA\n"
-                        "TAGCTTATT---AA\n"
-                        "TAGCTTATT---AA\n"
-                        "AAGTCTTTT---AA\n"
-                        "AAGAATAAT---TA\n"
-                        "AAGCCTTTT---AA");
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGACTTCTTTTAA"
+                                                         << "AAGCTTACT---AA"
+                                                         << "TAGTTTATT---AA"
+                                                         << "AAGTCTATT---AA"
+                                                         << "TAGCTTATT---AA"
+                                                         << "TAGCTTATT---AA"
+                                                         << "TAGCTTATT---AA"
+                                                         << "AAGTCTTTT---AA"
+                                                         << "AAGAATAAT---TA"
+                                                         << "AAGCCTTTT---AA";
 
     //Use context {Edit->Align with Kalign}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"align_with_kalign", GTGlobals::UseKey));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign", GTGlobals::UseKey));
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(10000);
-
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
 
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "Unexpected alignment:\n" + changedMsa.join("\n"));
 
     //undo
-    GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(3000);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::undo(os);
 
-    CHECK_SET_ERR(changedAln==initAln, "Undo works wrong\n" + changedAln);
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "Undo works wrong:\n" + undoneMsa.join("\n"));
 
     //redo
-    GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(3000);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::redo(os);
 
-    CHECK_SET_ERR(changedAln==expectedAln, "Undo works wrong\n" + changedAln);
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "Redo works wrong:\n" + redoneMsa.join("\n"));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0011_1){//Kalign undo test
+GUI_TEST_CLASS_DEFINITION(test_0011_1) {
+    //Kalign undo test
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-
-    QString expectedAln("AAGACTTCTTTTAA\n"
-                        "AAG-CTTACT--AA\n"
-                        "TAG-TTTATT--AA\n"
-                        "AAG-TCTATT--AA\n"
-                        "TAG-CTTATT--AA\n"
-                        "TAG-CTTATT--AA\n"
-                        "TAG-CTTATT--AA\n"
-                        "AAG-TCTTTT--AA\n"
-                        "AAG-AATAAT--TA\n"
-                        "AAG-CCTTTT--AA");
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "AAGACTTCTTTTAA"
+                                                         << "AAG-CTTACT--AA"
+                                                         << "TAG-TTTATT--AA"
+                                                         << "AAG-TCTATT--AA"
+                                                         << "TAG-CTTATT--AA"
+                                                         << "TAG-CTTATT--AA"
+                                                         << "TAG-CTTATT--AA"
+                                                         << "AAG-TCTTTT--AA"
+                                                         << "AAG-AATAAT--TA"
+                                                         << "AAG-CCTTTT--AA";
 
     //Use context {Edit->Align with Kalign}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"align_with_kalign", GTGlobals::UseMouse));
-    GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os,100));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os, 100));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment" + changedAln);
-
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "Unexpected alignment:\n" + changedMsa.join("\n"));
 
     //undo
-    GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::undo(os);
 
-    CHECK_SET_ERR(changedAln==initAln, "Undo works wrong\n" + changedAln);
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "Undo works wrong:\n" + undoneMsa.join("\n"));
 
     //redo
-    GTWidget::click(os,redo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::redo(os);
 
-    CHECK_SET_ERR(changedAln==expectedAln, "Undo works wrong\n" + changedAln);
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "Redo works wrong:\n" + redoneMsa.join("\n"));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_0012){//ClustalW aligner undo test
+GUI_TEST_CLASS_DEFINITION(test_0012) {
+    // ClustalW aligner undo test
     //Open file
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma2_gapped.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(14,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString initAln = GTClipboard::text(os);
-
-    QString expectedAln("---AAGACTTCTTTTAA\n"
-                        "---AAGCTT---ACTAA\n"
-                        "---TAGT---TTATTAA\n"
-                        "---AAGTC---TATTAA\n"
-                        "---TAGCTT---ATTAA\n"
-                        "---TAGCTT---ATTAA\n"
-                        "---TAGCTT---ATTAA\n"
-                        "---AAGTCTTT---TAA\n"
-                        "A---AGAAT--AATTA-\n"
-                        "---AAGCCT---TTTAA");
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
+    const QStringList expectedChangedMsa = QStringList() << "---AAGACTTCTTTTAA"
+                                                         << "---AAGCTT---ACTAA"
+                                                         << "---TAGT---TTATTAA"
+                                                         << "---AAGTC---TATTAA"
+                                                         << "---TAGCTT---ATTAA"
+                                                         << "---TAGCTT---ATTAA"
+                                                         << "---TAGCTT---ATTAA"
+                                                         << "---AAGTCTTT---TAA"
+                                                         << "A---AGAAT--AATTA-"
+                                                         << "---AAGCCT---TTTAA";
 
     //Use context {Edit->Align with Kalign}
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_ALIGN<<"Align with ClustalW", GTGlobals::UseMouse));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "Align with ClustalW", GTGlobals::UseMouse));
     GTUtilsDialog::waitForDialog(os, new ClustalWDialogFiller(os));
     GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
 
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(17,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    QString changedAln = GTClipboard::text(os);
-    CHECK_SET_ERR(changedAln==expectedAln, "Unexpected alignment\n" + changedAln);
-
-    QAbstractButton *undo= GTAction::button(os,"msa_action_undo");
-    QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
+    const QStringList changedMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(changedMsa == expectedChangedMsa, "Unexpected alignment:\n" + changedMsa.join("\n"));
 
     //undo
-    GTWidget::click(os,undo);
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::undo(os);
 
-    CHECK_SET_ERR(changedAln==initAln, "Undo works wrong\n" + changedAln);
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa, "Undo works wrong:\n" + undoneMsa.join("\n"));
 
     //redo
-    GTWidget::click(os,redo);
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,0), QPoint(17,10));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
-    GTGlobals::sleep(500);
-    changedAln = GTClipboard::text(os);
+    GTUtilsMsaEditor::redo(os);
 
-    CHECK_SET_ERR(changedAln==expectedAln, "Redo works wrong\n" + changedAln);
+    const QStringList redoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(redoneMsa == expectedChangedMsa, "Redo works wrong:\n" + redoneMsa.join("\n"));
 }
 
-}//namespace GUITest_common_scenarios_undo_redo
-
-}//namespace U2
+}   // namespace GUITest_common_scenarios_undo_redo
+}   // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
index 6bcce2e..78b27e5 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/undo_redo/GTTestsUndoRedo.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.cpp
index b014ec7..86d72b2 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,60 +19,54 @@
  * MA 02110-1301, USA.
  */
 
-#include "GTTestsWorkflowDesigner.h"
+#include <QApplication>
+#include <QDesktopWidget>
+#include <QDir>
+#include <QFileInfo>
+#include <QGraphicsItem>
+#include <QGraphicsView>
+#include <QProcess>
+#include <QScreen>
+#include <QTextEdit>
 
-#include <drivers/GTMouseDriver.h>
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <primitives/GTWidget.h>
+#include <GTGlobals.h>
 #include <base_dialogs/GTFileDialog.h>
-#include "primitives/GTMenu.h"
-#include "GTGlobals.h"
-#include <primitives/GTTreeWidget.h>
-#include "primitives/GTAction.h"
-#include "system/GTFile.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTMenu.h>
 #include <primitives/GTSpinBox.h>
 #include <primitives/GTTableView.h>
-#include "primitives/PopupChooser.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
-#include "runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h"
-#include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
-#include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
-#include "runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h"
-#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
-#include "utils/GTUtilsApp.h"
-#include "GTUtilsLog.h"
-#include "GTUtilsMdi.h"
-#include "GTUtilsProjectTreeView.h"
-#include "GTUtilsTaskTreeView.h"
-#include "GTUtilsWizard.h"
-#include "GTUtilsWorkflowDesigner.h"
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTUtilsApp.h>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ToolsMenu.h>
 
+#include <U2Lang/WorkflowSettings.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTextEdit>
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QGraphicsView>
-#include <QtGui/QDesktopWidget>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QGraphicsView>
-#include <QtWidgets/QDesktopWidget>
-#endif
-
-#include <QProcess>
-//#include <P
 #include "../../workflow_designer/src/WorkflowViewItems.h"
-#include <U2Lang/WorkflowSettings.h>
-#include <QtCore/QFileInfo>
+#include "GTTestsWorkflowDesigner.h"
+#include "GTUtilsLog.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsProjectTreeView.h"
+#include "GTUtilsTaskTreeView.h"
+#include "GTUtilsWizard.h"
+#include "GTUtilsWorkflowDesigner.h"
+#include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/AliasesDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/CreateElementWithScriptDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
+#include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
 namespace U2 {
 
@@ -84,107 +78,6 @@ namespace U2 {
 
 namespace GUITest_common_scenarios_workflow_designer {
 using namespace HI;
-GUI_TEST_CLASS_DEFINITION(test_0001){
-
-
-   /* GTUtilsWorkflowDesigner::openWorkfolwDesigner(os);
-    GTUtilsWorkflowDesigner::addSample(os, "call variants");
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "call variants"));
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::getParameter(os, "Max number of reads per input BAM");*/
-    int i = GTFile::getSize(os, dataDir + "cmdline/pwm-build.uwl");
-    CHECK_SET_ERR(false, QString("%1").arg(i));
-    /*GTUtilsWorkflowDesigner::createDataset(os, "some name");*/
-    //GTWidget::getAllWidgetsInfo(os, table);
-    //    QAbstractButton* edit = GTAction::button(os, GTAction::findActionByText(os, "Edit script of the element..."));
-//    GTWidget::click(os, edit);
-
-    /*WizardFiller::pairValList list;
-    list.append(WizardFiller::pairValLabel("bowtie version",new WizardFiller::ComboBoxValue(0)));
-    list.append(WizardFiller::pairValLabel("bowtie index directory", new WizardFiller::lineEditValue
-                                           (testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index",true)));
-    list.append(WizardFiller::pairValLabel("bowtie index basename",new WizardFiller::lineEditValue("chr6",false)));
-    list.append(WizardFiller::pairValLabel("tophat",new WizardFiller::lineEditValue(testDir + "_common_data/scenarios/sandbox",true)));
-    list.append(WizardFiller::pairValLabel("cufflinks",new WizardFiller::lineEditValue(testDir + "_common_data/scenarios/sandbox",true)));
-    list.append(WizardFiller::pairValLabel("cuffmerge",new WizardFiller::lineEditValue(testDir + "_common_data/scenarios/sandbox",true)));
-    list.append(WizardFiller::pairValLabel("cuffdiff",new WizardFiller::lineEditValue(testDir + "_common_data/scenarios/sandbox",true)));
-
-
-    GTUtilsDialog::waitForDialog(os,new ConfigureTuxedoWizardFiller(os,ConfigureTuxedoWizardFiller::full
-                                                                    ,ConfigureTuxedoWizardFiller::singleReads));
-    GTUtilsDialog::waitForDialog(os,new TuxedoWizardFiller(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data","lymph_aln.fastq",
-                                                           testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data","wbc_aln.fastq",list));
-
-
-
-
-    GTUtilsWorkflowDesigner::addSample(os,"tuxedo tools");
-
-
-
-    GTKeyboardDriver::keyClick( 'r' ,Qt::ControlModifier);
-    TaskScheduler* scheduller = AppContext::getTaskScheduler();
-
-    GTGlobals::sleep(5000);
-    while(!scheduller->getTopLevelTasks().isEmpty()){
-        GTGlobals::sleep();
-    }
-
-    bool eq;
-// *****************************************
-    //tophat1
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/tophat_out/junctions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out/junctions.bed");
-    CHECK_SET_ERR(eq,"junctions.bed files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/tophat_out/deletions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out/deletions.bed");
-    CHECK_SET_ERR(eq,"deletions.bed files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/tophat_out/insertions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out/insertions.bed");
-    CHECK_SET_ERR(eq,"insertions.bed files are not equal");
-
-    //tophat2
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/tophat_out/junctions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out_1/junctions.bed");
-    CHECK_SET_ERR(eq,"junctions.bed2 files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/tophat_out/deletions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out_1/deletions.bed");
-    CHECK_SET_ERR(eq,"deletions.bed2 files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/tophat_out/insertions.bed",
-                             testDir + "_common_data/scenarios/sandbox/tophat_out_1/insertions.bed");
-    CHECK_SET_ERR(eq,"insertions.bed2 files are not equal");
-// *****************************************
-    //cufflinks1
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/cufflinks_out/skipped.gtf",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out/skipped.gtf");
-    CHECK_SET_ERR(eq,"skipped.gtf files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/cufflinks_out/genes.fpkm_tracking",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out/genes.fpkm_tracking");
-    CHECK_SET_ERR(eq,"genes.fpkm_tracking files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/cufflinks_out/isoforms.fpkm_tracking",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out/isoforms.fpkm_tracking");
-    CHECK_SET_ERR(eq,"isoforms.fpkm_tracking files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0001/cufflinks_out/transcripts.gtf",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out/transcripts.gtf");
-    CHECK_SET_ERR(eq,"transcripts.gtf files are not equal");
-
-    //cufflinks2
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/cufflinks_out_1/skipped.gtf",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out_1/skipped.gtf");
-    CHECK_SET_ERR(eq,"skipped.gtf2 files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/cufflinks_out_1/genes.fpkm_tracking",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out_1/genes.fpkm_tracking");
-    CHECK_SET_ERR(eq,"genes.fpkm_tracking2 files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/cufflinks_out_1/isoforms.fpkm_tracking",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out_1/isoforms.fpkm_tracking");
-    CHECK_SET_ERR(eq,"isoforms.fpkm_tracking2 files are not equal");
-    eq = GTFile::equals(os,testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data_to_compare_with/test_0002/cufflinks_out_1/transcripts.gtf",
-                             testDir + "_common_data/scenarios/sandbox/cufflinks_out_1/transcripts.gtf");
-    CHECK_SET_ERR(eq,"transcripts.gtf2 files are not equal");*/
-//*****************************************
-
-}
 
 GUI_TEST_CLASS_DEFINITION(test_0002){
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
@@ -268,7 +161,7 @@ GUI_TEST_CLASS_DEFINITION(test_0003){
     GTWidget::click(os,GTAction::button(os,"Run workflow"));
 
     GTGlobals::sleep();
-//    2. If you don't want result file (T1.gb) in UGENE run directory, change this property in write genbank worker.Run schema.
+//    2. If you don't want result file (T1.gb) in UGENE run folder, change this property in write genbank worker.Run schema.
 //    Expected state: T1.gb file is saved to your disc
     GTFileDialog::openFile(os,testDir + "_common_data/scenarios/sandbox/","T1.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -352,11 +245,7 @@ GUI_TEST_CLASS_DEFINITION(test_0007){
     QPoint p(GTUtilsWorkflowDesigner::getItemLeft(os,"Read Alignment")+20,
              GTUtilsWorkflowDesigner::getItemTop(os,"Read Alignment")+20);
 
-#if (QT_VERSION < 0x050000) // deprecated method
-    QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());
-#else
     QPixmap pixmap = QGuiApplication::primaryScreen()->grabWindow(QApplication::desktop()->winId());
-#endif
     QImage img = pixmap.toImage();
     QRgb rgb = img.pixel(p);
     QColor c(rgb);
@@ -531,9 +420,9 @@ GUI_TEST_CLASS_DEFINITION(test_0017){
     //1. Open Workflow Designer
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
 
-    //2. Write the path to the directory which does not exist(in the StartupDialogFiller).
+    //2. Write the path to the folder which does not exist(in the StartupDialogFiller).
     //3. Click OK(in the StartupDialogFiller).
-    CHECK_SET_ERR(!l.hasError(), "There are error messages about write access in WD directory");
+    CHECK_SET_ERR(!l.hasError(), "There are error messages about write access in WD folder");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0058){
@@ -621,7 +510,7 @@ GUI_TEST_CLASS_DEFINITION(test_0060){
 
     GTUtilsWorkflowDesigner::click(os, "Write Annotations");
     GTGlobals::sleep();
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "bed", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "BED", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -682,7 +571,23 @@ GUI_TEST_CLASS_DEFINITION(test_0061) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(GTFile::check(os, sandBoxDir + "/test_ugene_5162.vcf"), "No resut file 1");
-    CHECK_SET_ERR(GTFile::check(os, sandBoxDir + "/test_ugene_5162_1.vcf"), "No resut file 2");
+    CHECK_SET_ERR(GTFile::check(os, sandBoxDir + "/test_ugene_5163.vcf"), "No resut file 2");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0062) {
+    // Test for SnpEff genome parameter
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    WorkflowProcessItem* snpEffItem = GTUtilsWorkflowDesigner::addElement(os, "SnpEff Annotation and Filtration");
+    CHECK_SET_ERR(snpEffItem != NULL, "Failed to add SnpEff Annotation and Filtration element");
+
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "fake_snpeff_genome123", false));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
+    GTGlobals::sleep();
 }
 
 } // namespace GUITest_common_scenarios_workflow_designer
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h
index f4b9acb..8d1fe6a 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/GTTestsWorkflowDesigner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,7 +31,6 @@ namespace GUITest_common_scenarios_workflow_designer {
 #undef GUI_TEST_SUITE
 #define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_designer"
 
-GUI_TEST_CLASS_DECLARATION(test_0001)
 GUI_TEST_CLASS_DECLARATION(test_0002)
 GUI_TEST_CLASS_DECLARATION(test_0002_1)
 GUI_TEST_CLASS_DECLARATION(test_0003)
@@ -51,6 +50,7 @@ GUI_TEST_CLASS_DECLARATION(test_0058)
 GUI_TEST_CLASS_DECLARATION(test_0059)
 GUI_TEST_CLASS_DECLARATION(test_0060)
 GUI_TEST_CLASS_DECLARATION(test_0061)
+GUI_TEST_CLASS_DECLARATION(test_0062)
 
 #undef GUI_TEST_SUITE
 } // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.cpp
index c3f8298..f2e2f0f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,11 +56,11 @@ GUI_TEST_CLASS_DEFINITION(test_0002) {
 //    3. Set valid input data.
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/c_elegans/c_elegans_test.bam");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam/accepted_hits_with_gaps.bam");
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/c_elegans/c.elegans_chr2.fasta");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/fasta/reference_ACGT_rand_1000.fa");
 //    4. Click an "Estimate scheme" button on the toolbar.
 //    Expected state: an info message box appears: there is a time estimation for the set input data and two buttons: close and run.
     GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Close,
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
index 8b0e4a1..db40d4f 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/estimating/GTTestsWorkflowEstimating.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.cpp
index 524bb6f..fac2fa7 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,11 +33,7 @@
 #include <U2Gui/ToolsMenu.h>
 #include <U2Core/U2SafePoints.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 namespace U2 {
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
index cee3e98..91e6d21 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/name_filter/GTTestsWorkflowNameFilter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.cpp
new file mode 100644
index 0000000..4bad2c0
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.cpp
@@ -0,0 +1,320 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "primitives/GTAction.h"
+#include "system/GTFile.h"
+#include <drivers/GTKeyboardDriver.h>
+#include "primitives/GTMenu.h"
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTWidget.h>
+#include "utils/GTUtilsDialog.h"
+#include "GTUtilsMdi.h"
+#include "GTUtilsLog.h"
+#include "GTUtilsWorkflowDesigner.h"
+#include "GTTestsWorkflowParameterValidation.h"
+#include <base_dialogs/MessageBoxFiller.h>
+#include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
+
+#include <U2Gui/ToolsMenu.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <QDir>
+
+
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_workflow_parameters_validation {
+using namespace HI;
+
+GUI_TEST_CLASS_DEFINITION(test_0001){
+    // 1. Open WD sample "Align Sequences with MUSCLE
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
+
+    // 2. Set some name for an output file
+    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
+    CHECK_SET_ERR(table,"tableView not found");
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,1));
+    GTMouseDriver::click();
+    QString s = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
+    GTKeyboardDriver::keySequence(s+"/wd_pv_0001.sto");
+    GTWidget::click(os,GTUtilsMdi::activeWindow(os));
+
+    // 3. Add the file "test/_common_data/clustal/align.aln" as input
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
+    GTMouseDriver::click();
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/clustal/align.aln");
+
+    // 4. Move this file somewhere from its folder
+    class RenameHelper {
+    public:
+        RenameHelper(const QString &url, HI::GUITestOpStatus &os)
+            : file(url), renamed(false) {
+                oldName = file.fileName();
+                renamed = file.rename("wd_pv_0001.aln");
+                if (!renamed) {
+                    os.setError("Can not rename the file");
+                }
+        }
+        ~RenameHelper() {
+            if (renamed) {
+                file.rename(oldName);
+            }
+        }
+    private:
+        QFile file;
+        QString oldName;
+        bool renamed;
+    };
+    QString inFile = QFileInfo(testDir + "_common_data/clustal/align.aln").absoluteFilePath();
+    RenameHelper h(inFile, os);
+    CHECK_OP(os, );
+
+    // 5. In WD press the "Validate" button
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow)."));
+    GTWidget::click(os,GTAction::button(os,"Validate workflow"));
+    GTGlobals::sleep(2000);
+
+    // Expected state: The "File not found" error has appeared in the "Error list"
+    GTUtilsWorkflowDesigner::checkErrorList(os, "Read alignment: File not found:");
+}
+
+GUI_TEST_CLASS_DEFINITION( test_0002 ) {
+//    Workflow dataset input folder validation
+//    1. Open WD sample "Align Sequences with MUSCLE"
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
+
+//    2. Set some name for an output file
+    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os, "table"));
+    CHECK_SET_ERR(table, "tableView not found");
+    QPoint writeAlignmentCenter = GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment");
+    GTMouseDriver::moveTo(writeAlignmentCenter);
+    GTMouseDriver::click();
+    QPoint cellPoint = GTTableView::getCellPosition(os, table, 1, 1);
+    GTMouseDriver::moveTo(cellPoint);
+    GTMouseDriver::click();
+    QString dirPath = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
+    GTKeyboardDriver::keySequence(dirPath + "/wd_pv_0002.sto");
+    QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
+    CHECK_SET_ERR(activeWindow, "Active window wasn't found");
+    GTWidget::click(os, activeWindow);
+
+//    3. Create a new empty folder somewhere (e.g. in the "test/_tmp" folder)
+    QDir outputDir(testDir + "_common_data/scenarios/sandbox/wd_pv_0002_out/1/2/3/4/");
+    bool success = outputDir.mkpath(outputDir.absolutePath());
+    CHECK_SET_ERR(success, QString("Can't create a new folder: '%1'").arg(outputDir.absolutePath()));
+
+//    4. Add that folder as input in WD
+    QPoint readAlignmentCenter = GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment");
+    GTMouseDriver::moveTo(readAlignmentCenter);
+    GTMouseDriver::click();
+	GTUtilsWorkflowDesigner::setDatasetInputFolder(os, outputDir.absolutePath());
+    GTGlobals::sleep(2000);
+    GTWidget::click(os, activeWindow);
+
+//    5. Delete this folder
+    QString s = outputDir.absolutePath();
+    GTFile::removeDir(s);
+    outputDir.rmpath(outputDir.absolutePath());
+
+//    6. In WD press the "Validate" button
+    MessageBoxDialogFiller* filler = new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow).");
+    GTUtilsDialog::waitForDialog(os, filler);
+    QAbstractButton* validateButton = GTAction::button(os, "Validate workflow");
+    CHECK_SET_ERR(validateButton, "Validate button wasn't found");
+    GTWidget::click(os, validateButton);
+    GTGlobals::sleep(2000);
+
+//    Expected state: The "folder not found" error has appeared in the "Error list"
+    GTUtilsWorkflowDesigner::checkErrorList(os, "Read alignment: folder not found:");
+	
+}
+
+GUI_TEST_CLASS_DEFINITION( test_0003 ) {
+    //1. Create the following workflow { Read Sequence -> Find Pattern -> Write Sequence }
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "Read Sequence", true );
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "Find Pattern" );
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "Write Sequence", true );
+
+    WorkflowProcessItem *seqReader = GTUtilsWorkflowDesigner::getWorker( os, "Read Sequence" );
+    WorkflowProcessItem *patternFinder = GTUtilsWorkflowDesigner::getWorker( os, "Find Pattern" );
+    WorkflowProcessItem *seqWriter = GTUtilsWorkflowDesigner::getWorker( os, "Write Sequence" );
+
+    GTUtilsWorkflowDesigner::connect( os, seqReader, patternFinder );
+    GTUtilsWorkflowDesigner::connect( os, patternFinder, seqWriter );
+
+    //2. Set some name for an output file
+
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
+    GTMouseDriver::click();
+    QTableView *table = qobject_cast<QTableView *>( GTWidget::findWidget( os, "table" ) );
+    CHECK_SET_ERR( table, "tableView not found" );
+    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 3 ) );
+    GTMouseDriver::click();
+    GTKeyboardDriver::keySequence("sequence.gb" );
+    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
+
+    //3. Add some valid sequence file as input
+
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
+    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/fasta/fa1.fa" );
+
+    //4. Set some nonexistent path to a file as the "Pattern file" parameter of the "Find Substrings" worker
+
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Find Pattern" ) );
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 2 ) );
+    GTMouseDriver::click();
+    GTKeyboardDriver::keySequence("pattern_file.txt" );
+    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
+
+    //5. In WD press the "Validate" button
+    GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Ok,
+        "Please fix issues listed in the error list (located under workflow)." ) );
+    GTWidget::click( os,GTAction::button( os,"Validate workflow" ) );
+    GTGlobals::sleep( 200 );
+
+    //Expected state: The "File not found" error has appeared in the "Error list"
+    GTUtilsWorkflowDesigner::checkErrorList( os, "File not found" );
+}
+
+GUI_TEST_CLASS_DEFINITION(test_0005){
+    GTLogTracer l;
+    QDir d(testDir + "_common_data/scenarios/sandbox/permDir");
+    bool sucsess = d.mkpath(d.absolutePath());
+    CHECK_SET_ERR(sucsess,QString("Can't create a new folder: '%1'").arg(d.absolutePath()));
+    // 1. Open WD sample "Align Sequences with MUSCLE
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
+
+    // 2. Set some name for an output file
+    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
+    CHECK_SET_ERR(table,"tableView not found");
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
+    GTMouseDriver::click();
+    //GTGlobals::sleep(60000);
+    QString s = QFileInfo(testDir + "_common_data/scenarios/sandbox/permDir").absoluteFilePath();
+    GTUtilsWorkflowDesigner::setParameter(os, "Output file", QVariant(s+"/wd_pv_0001.sto"), GTUtilsWorkflowDesigner::textValue);
+    GTWidget::click(os,GTUtilsMdi::activeWindow(os));
+
+    // 3. Add the file "test/_common_data/clustal/align.aln" as input
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
+    GTMouseDriver::click();
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/clustal/align.aln");
+    GTGlobals::sleep(2000);
+
+    QFile dir(testDir + "_common_data/scenarios/sandbox/permDir");
+    CHECK_SET_ERR(dir.exists(), "Sandbox not found");
+    QFile::Permissions p = dir.permissions();
+
+    p &= ~QFile::WriteOwner;
+    p &= ~QFile::WriteUser;
+    p &= ~QFile::WriteGroup;
+    p &= ~QFile::WriteOther;
+    bool res =  dir.setPermissions(p);
+    CHECK_SET_ERR(res, "Fucking test");
+
+    // 5. In WD press the "Validate" button
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow)."));
+    GTWidget::click(os,GTAction::button(os,"Validate workflow"));
+    GTGlobals::sleep(2000);
+
+    // Expected state: The "File not found" error has appeared in the "Error list"
+    p |= QFile::WriteOwner;
+    p |= QFile::WriteUser;
+    p |= QFile::WriteGroup;
+    p |= QFile::WriteOther;
+    res =  dir.setPermissions(p);
+    CHECK_SET_ERR(res, "Not good test");
+    int i = GTUtilsWorkflowDesigner::checkErrorList(os, "Can't access output file path:");
+    CHECK_SET_ERR(i==1, "There are no error messages about write access in WD folder");
+}
+
+
+GUI_TEST_CLASS_DEFINITION( test_0006 ) {
+    //Workflow worker folder parameter validation
+    //1. Create the following workflow { Read Sequence -> CD Search -> Write Sequence }
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "Read Sequence", true );
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "CD Search" );
+    GTUtilsWorkflowDesigner::addAlgorithm( os, "Write Sequence", true );
+
+    WorkflowProcessItem *seqReader = GTUtilsWorkflowDesigner::getWorker( os, "Read Sequence" );
+    WorkflowProcessItem *patternFinder = GTUtilsWorkflowDesigner::getWorker( os, "CD Search" );
+    WorkflowProcessItem *seqWriter = GTUtilsWorkflowDesigner::getWorker( os, "Write Sequence" );
+
+    GTUtilsWorkflowDesigner::connect( os, seqReader, patternFinder );
+    GTUtilsWorkflowDesigner::connect( os, patternFinder, seqWriter );
+
+    //2. Set some name for an output file
+
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
+    GTMouseDriver::click();
+    QTableView *table = qobject_cast<QTableView *>( GTWidget::findWidget( os, "table" ) );
+    CHECK_SET_ERR( table, "tableView not found" );
+    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 3 ) );
+    GTMouseDriver::click();
+    GTKeyboardDriver::keySequence("sequence.gb" );
+    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
+
+    //3. Add some valid sequence file as input
+
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
+    GTMouseDriver::click();
+    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/fasta/fa1.fa" );
+
+    //4. Create an empty folder somewhere (e.g. in the "test/_tmp" folder)
+    QDir newDir(testDir);
+    newDir.mkdir("_empty_tmp");
+
+    //5. Set the path to this folder as the "Database folder" parameter of the "CD Search" worker
+    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "CD Search" ) );
+    GTMouseDriver::click();
+    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 2 ) );
+    GTMouseDriver::click();
+    GTKeyboardDriver::keySequence(testDir + "_empty_tmp");
+    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
+
+    //6. Remove this folder
+    newDir.rmdir("_empty_tmp");
+
+    //7. In WD press the "Validate" button
+    GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Ok,
+        "Please fix issues listed in the error list (located under workflow)." ) );
+    GTWidget::click( os,GTAction::button( os,"Validate workflow" ) );
+    GTGlobals::sleep( 200 );
+
+    //Expected state: The "File not found" error has appeared in the "Error list"
+    GTUtilsWorkflowDesigner::checkErrorList( os, "Folder not found" );
+}
+
+} // namespace GUITest_common_scenarios_workflow_designer
+
+} // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.h
new file mode 100644
index 0000000..1a1c4f3
--- /dev/null
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParameterValidation.h
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+k
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef GTTESTS_WORKFLOW_PARAMETERS_VALIDATION_H_
+#define GTTESTS_WORKFLOW_PARAMETERS_VALIDATION_H_
+
+#include <U2Test/UGUITestBase.h>
+
+namespace U2 {
+
+namespace GUITest_common_scenarios_workflow_parameters_validation {
+#undef GUI_TEST_SUITE
+#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_parameters_validation"
+
+GUI_TEST_CLASS_DECLARATION(test_0001)
+GUI_TEST_CLASS_DECLARATION(test_0002)
+GUI_TEST_CLASS_DECLARATION(test_0003)
+GUI_TEST_CLASS_DECLARATION(test_0005)
+GUI_TEST_CLASS_DECLARATION(test_0006)
+
+#undef GUI_TEST_SUITE
+} // namespace U2
+
+} //namespace
+
+#endif // GTTESTS_WORKFLOW_DESIGNER_H_
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.cpp
deleted file mode 100644
index 50c2e87..0000000
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.cpp
+++ /dev/null
@@ -1,319 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "primitives/GTAction.h"
-#include "system/GTFile.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTTableView.h>
-#include <primitives/GTWidget.h>
-#include "utils/GTUtilsDialog.h"
-#include "GTUtilsMdi.h"
-#include "GTUtilsLog.h"
-#include "GTUtilsWorkflowDesigner.h"
-#include "GTTestsWorkflowParemeterValidation.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
-
-#include <U2Gui/ToolsMenu.h>
-#include <U2Core/U2SafePoints.h>
-
-#include <QtCore/QDir>
-
-
-
-namespace U2 {
-
-namespace GUITest_common_scenarios_workflow_parameters_validation {
-using namespace HI;
-
-GUI_TEST_CLASS_DEFINITION(test_0001){
-    // 1. Open WD sample "Align Sequences with MUSCLE
-    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
-
-    // 2. Set some name for an output file
-    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
-    CHECK_SET_ERR(table,"tableView not found");
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
-    GTMouseDriver::click();
-    GTMouseDriver::moveTo(GTTableView::getCellPosition(os,table,1,1));
-    GTMouseDriver::click();
-    QString s = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
-    GTKeyboardDriver::keySequence(s+"/wd_pv_0001.sto");
-    GTWidget::click(os,GTUtilsMdi::activeWindow(os));
-
-    // 3. Add the file "test/_common_data/clustal/align.aln" as input
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/clustal/align.aln");
-
-    // 4. Move this file somewhere from its directory
-    class RenameHelper {
-    public:
-        RenameHelper(const QString &url, HI::GUITestOpStatus &os)
-            : file(url), renamed(false) {
-                oldName = file.fileName();
-                renamed = file.rename("wd_pv_0001.aln");
-                if (!renamed) {
-                    os.setError("Can not rename the file");
-                }
-        }
-        ~RenameHelper() {
-            if (renamed) {
-                file.rename(oldName);
-            }
-        }
-    private:
-        QFile file;
-        QString oldName;
-        bool renamed;
-    };
-    QString inFile = QFileInfo(testDir + "_common_data/clustal/align.aln").absoluteFilePath();
-    RenameHelper h(inFile, os);
-    CHECK_OP(os, );
-
-    // 5. In WD press the "Validate" button
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow)."));
-    GTWidget::click(os,GTAction::button(os,"Validate workflow"));
-    GTGlobals::sleep(2000);
-
-    // Expected state: The "File not found" error has appeared in the "Error list"
-    GTUtilsWorkflowDesigner::checkErrorList(os, "Read alignment: File not found:");
-}
-
-GUI_TEST_CLASS_DEFINITION( test_0002 ) {
-//    Workflow dataset input directory validation
-//    1. Open WD sample "Align Sequences with MUSCLE"
-    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
-
-//    2. Set some name for an output file
-    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os, "table"));
-    CHECK_SET_ERR(table, "tableView not found");
-    QPoint writeAlignmentCenter = GTUtilsWorkflowDesigner::getItemCenter(os, "Write alignment");
-    GTMouseDriver::moveTo(writeAlignmentCenter);
-    GTMouseDriver::click();
-    QPoint cellPoint = GTTableView::getCellPosition(os, table, 1, 1);
-    GTMouseDriver::moveTo(cellPoint);
-    GTMouseDriver::click();
-    QString dirPath = QFileInfo(testDir + "_common_data/scenarios/sandbox/").absoluteFilePath();
-    GTKeyboardDriver::keySequence(dirPath + "/wd_pv_0002.sto");
-    QWidget* activeWindow = GTUtilsMdi::activeWindow(os);
-    CHECK_SET_ERR(activeWindow, "Active window wasn't found");
-    GTWidget::click(os, activeWindow);
-
-//    3. Create a new empty directory somewhere (e.g. in the "test/_tmp" directory)
-    QDir outputDir(testDir + "_common_data/scenarios/sandbox/wd_pv_0002_out/1/2/3/4/");
-    bool success = outputDir.mkpath(outputDir.absolutePath());
-    CHECK_SET_ERR(success, QString("Can't create a new directory: '%1'").arg(outputDir.absolutePath()));
-
-//    4. Add that directory as input in WD
-    QPoint readAlignmentCenter = GTUtilsWorkflowDesigner::getItemCenter(os, "Read alignment");
-    GTMouseDriver::moveTo(readAlignmentCenter);
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFolder(os, outputDir.path());
-    GTGlobals::sleep(2000);
-    GTWidget::click(os, activeWindow);
-
-//    5. Delete this directory
-    QString s = outputDir.absolutePath();
-    GTFile::removeDir(s);
-    outputDir.rmpath(outputDir.absolutePath());
-
-//    6. In WD press the "Validate" button
-    MessageBoxDialogFiller* filler = new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow).");
-    GTUtilsDialog::waitForDialog(os, filler);
-    QAbstractButton* validateButton = GTAction::button(os, "Validate workflow");
-    CHECK_SET_ERR(validateButton, "Validate button wasn't found");
-    GTWidget::click(os, validateButton);
-    GTGlobals::sleep(2000);
-
-//    Expected state: The "Directory not found" error has appeared in the "Error list"
-    GTUtilsWorkflowDesigner::checkErrorList(os, "Read alignment: Directory not found:");
-}
-
-GUI_TEST_CLASS_DEFINITION( test_0003 ) {
-    //1. Create the following workflow { Read Sequence -> Find Pattern -> Write Sequence }
-    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "Read Sequence", true );
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "Find Pattern" );
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "Write Sequence", true );
-
-    WorkflowProcessItem *seqReader = GTUtilsWorkflowDesigner::getWorker( os, "Read Sequence" );
-    WorkflowProcessItem *patternFinder = GTUtilsWorkflowDesigner::getWorker( os, "Find Pattern" );
-    WorkflowProcessItem *seqWriter = GTUtilsWorkflowDesigner::getWorker( os, "Write Sequence" );
-
-    GTUtilsWorkflowDesigner::connect( os, seqReader, patternFinder );
-    GTUtilsWorkflowDesigner::connect( os, patternFinder, seqWriter );
-
-    //2. Set some name for an output file
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click();
-    QTableView *table = qobject_cast<QTableView *>( GTWidget::findWidget( os, "table" ) );
-    CHECK_SET_ERR( table, "tableView not found" );
-    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 3 ) );
-    GTMouseDriver::click();
-    GTKeyboardDriver::keySequence("sequence.gb" );
-    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
-
-    //3. Add some valid sequence file as input
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/fasta/fa1.fa" );
-
-    //4. Set some nonexistent path to a file as the "Pattern file" parameter of the "Find Substrings" worker
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Find Pattern" ) );
-    GTMouseDriver::click();
-    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 2 ) );
-    GTMouseDriver::click();
-    GTKeyboardDriver::keySequence("pattern_file.txt" );
-    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
-
-    //5. In WD press the "Validate" button
-    GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Ok,
-        "Please fix issues listed in the error list (located under workflow)." ) );
-    GTWidget::click( os,GTAction::button( os,"Validate workflow" ) );
-    GTGlobals::sleep( 200 );
-
-    //Expected state: The "File not found" error has appeared in the "Error list"
-    GTUtilsWorkflowDesigner::checkErrorList( os, "File not found" );
-}
-
-GUI_TEST_CLASS_DEFINITION(test_0005){
-    GTLogTracer l;
-    QDir d(testDir + "_common_data/scenarios/sandbox/permDir");
-    bool sucsess = d.mkpath(d.absolutePath());
-    CHECK_SET_ERR(sucsess,QString("Can't create a new directory: '%1'").arg(d.absolutePath()));
-    // 1. Open WD sample "Align Sequences with MUSCLE
-    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    GTUtilsWorkflowDesigner::addSample(os, "Align sequences with MUSCLE");
-
-    // 2. Set some name for an output file
-    QTableView* table = qobject_cast<QTableView*>(GTWidget::findWidget(os,"table"));
-    CHECK_SET_ERR(table,"tableView not found");
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Write alignment"));
-    GTMouseDriver::click();
-    //GTGlobals::sleep(60000);
-    QString s = QFileInfo(testDir + "_common_data/scenarios/sandbox/permDir").absoluteFilePath();
-    GTUtilsWorkflowDesigner::setParameter(os, "Output file", QVariant(s+"/wd_pv_0001.sto"), GTUtilsWorkflowDesigner::textValue);
-    GTWidget::click(os,GTUtilsMdi::activeWindow(os));
-
-    // 3. Add the file "test/_common_data/clustal/align.aln" as input
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os,"Read alignment"));
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/clustal/align.aln");
-    GTGlobals::sleep(2000);
-
-    QFile dir(testDir + "_common_data/scenarios/sandbox/permDir");
-    CHECK_SET_ERR(dir.exists(), "Sandbox not found");
-    QFile::Permissions p = dir.permissions();
-
-    p &= ~QFile::WriteOwner;
-    p &= ~QFile::WriteUser;
-    p &= ~QFile::WriteGroup;
-    p &= ~QFile::WriteOther;
-    bool res =  dir.setPermissions(p);
-    CHECK_SET_ERR(res, "Fucking test");
-
-    // 5. In WD press the "Validate" button
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Please fix issues listed in the error list (located under workflow)."));
-    GTWidget::click(os,GTAction::button(os,"Validate workflow"));
-    GTGlobals::sleep(2000);
-
-    // Expected state: The "File not found" error has appeared in the "Error list"
-    p |= QFile::WriteOwner;
-    p |= QFile::WriteUser;
-    p |= QFile::WriteGroup;
-    p |= QFile::WriteOther;
-    res =  dir.setPermissions(p);
-    CHECK_SET_ERR(res, "Not good test");
-    int i = GTUtilsWorkflowDesigner::checkErrorList(os, "Can't access output file path:");
-    CHECK_SET_ERR(i==1, "There are no error messages about write access in WD directory");
-}
-
-
-GUI_TEST_CLASS_DEFINITION( test_0006 ) {
-    //Workflow worker directory parameter validation
-    //1. Create the following workflow { Read Sequence -> CD Search -> Write Sequence }
-    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "Read Sequence", true );
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "CD Search" );
-    GTUtilsWorkflowDesigner::addAlgorithm( os, "Write Sequence", true );
-
-    WorkflowProcessItem *seqReader = GTUtilsWorkflowDesigner::getWorker( os, "Read Sequence" );
-    WorkflowProcessItem *patternFinder = GTUtilsWorkflowDesigner::getWorker( os, "CD Search" );
-    WorkflowProcessItem *seqWriter = GTUtilsWorkflowDesigner::getWorker( os, "Write Sequence" );
-
-    GTUtilsWorkflowDesigner::connect( os, seqReader, patternFinder );
-    GTUtilsWorkflowDesigner::connect( os, patternFinder, seqWriter );
-
-    //2. Set some name for an output file
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
-    GTMouseDriver::click();
-    QTableView *table = qobject_cast<QTableView *>( GTWidget::findWidget( os, "table" ) );
-    CHECK_SET_ERR( table, "tableView not found" );
-    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 3 ) );
-    GTMouseDriver::click();
-    GTKeyboardDriver::keySequence("sequence.gb" );
-    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
-
-    //3. Add some valid sequence file as input
-
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Read Sequence" ) );
-    GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/fasta/fa1.fa" );
-
-    //4. Create an empty directory somewhere (e.g. in the "test/_tmp" directory)
-    QDir newDir(testDir);
-    newDir.mkdir("_empty_tmp");
-
-    //5. Set the path to this directory as the "Database directory" parameter of the "CD Search" worker
-    GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "CD Search" ) );
-    GTMouseDriver::click();
-    GTMouseDriver::moveTo(GTTableView::getCellPosition( os, table, 1, 2 ) );
-    GTMouseDriver::click();
-    GTKeyboardDriver::keySequence(testDir + "_empty_tmp");
-    GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
-
-    //6. Remove this directory
-    newDir.rmdir("_empty_tmp");
-
-    //7. In WD press the "Validate" button
-    GTUtilsDialog::waitForDialog( os, new MessageBoxDialogFiller( os, QMessageBox::Ok,
-        "Please fix issues listed in the error list (located under workflow)." ) );
-    GTWidget::click( os,GTAction::button( os,"Validate workflow" ) );
-    GTGlobals::sleep( 200 );
-
-    //Expected state: The "File not found" error has appeared in the "Error list"
-    GTUtilsWorkflowDesigner::checkErrorList( os, "Directory not found" );
-}
-
-} // namespace GUITest_common_scenarios_workflow_designer
-
-} // namespace U2
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h
deleted file mode 100644
index 2556b4b..0000000
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/parameters_validation/GTTestsWorkflowParemeterValidation.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
-k
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef GTTESTS_WORKFLOW_PARAMETERS_VALIDATION_H_
-#define GTTESTS_WORKFLOW_PARAMETERS_VALIDATION_H_
-
-#include <U2Test/UGUITestBase.h>
-
-namespace U2 {
-
-namespace GUITest_common_scenarios_workflow_parameters_validation {
-#undef GUI_TEST_SUITE
-#define GUI_TEST_SUITE "GUITest_common_scenarios_workflow_parameters_validation"
-
-GUI_TEST_CLASS_DECLARATION(test_0001)
-GUI_TEST_CLASS_DECLARATION(test_0002)
-GUI_TEST_CLASS_DECLARATION(test_0003)
-GUI_TEST_CLASS_DECLARATION(test_0005)
-GUI_TEST_CLASS_DECLARATION(test_0006)
-
-#undef GUI_TEST_SUITE
-} // namespace U2
-
-} //namespace
-
-#endif // GTTESTS_WORKFLOW_DESIGNER_H_
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.cpp
index a126c7b..f883998 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,14 +57,9 @@
 
 #include <U2Lang/WorkflowSettings.h>
 
-#include <QtCore/QProcess>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTextEdit>
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QTextEdit>
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <QProcess>
+#include <QTextEdit>
+#include <QGraphicsItem>
 
 namespace U2 {
 namespace GUITest_common_scenarios_workflow_scripting {
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
index c853529..cf53257 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/scripting/GTTestsWorkflowScripting.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.cpp b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.cpp
index e7cfc85..2b3c2a9 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.cpp
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
  */
 
 #include <QListWidget>
-
+#include <QDir>
 #include <U2Core/global.h>
 #include <U2Core/U2SafePoints.h>
 #include "primitives/GTAction.h"
@@ -88,8 +88,8 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0001) {
 
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
-
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0001_sequence" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -100,7 +100,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0002) {
     createTestConnection(os);
 
     QSet<GObjectType> acceptableTypes;
-    acceptableTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    acceptableTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ugene_gui_test", "et0003_alignment", acceptableTypes));
 
     QWidget *addFromDbButton = GTWidget::findWidget(os, "addFromDbButton");
@@ -112,7 +112,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0002) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0003_alignment" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -135,7 +135,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0003) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0002_features" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -158,7 +158,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0004) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0004_assembly" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -181,7 +181,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0005) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0006_text" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -204,7 +204,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0006) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(1 == datasetList->count(), "Invalid dataset item count");
+	CHECK_SET_ERR(1 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("1").arg(datasetList->count()));
     CHECK_SET_ERR("et0005_variations" == datasetList->item(0)->text(), "Invalid dataset item name");
 }
 
@@ -223,7 +223,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0008) {
     createTestConnection(os);
 
     QSet<GObjectType> acceptableTypes;
-    acceptableTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    acceptableTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ugene_gui_test", "pt0005_COI", acceptableTypes));
 
     QWidget *addFromDbButton = GTWidget::findWidget(os, "addFromDbButton");
@@ -238,9 +238,9 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0008) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(2 == datasetList->count(), "Invalid dataset item count");
-    CHECK_SET_ERR("pt0005_COI" == datasetList->item(0)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("export_tests" == datasetList->item(1)->text(), "Invalid dataset item name");
+	CHECK_SET_ERR(2 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("2").arg(datasetList->count()));
+    CHECK_SET_ERR("pt0005_COI" == datasetList->item(0)->text(), "Invalid dataset item name_1");
+    CHECK_SET_ERR("export_tests" == datasetList->item(1)->text(), "Invalid dataset item name_2");
 }
 
 GUI_TEST_CLASS_DEFINITION(read_gui_test_0009) {
@@ -264,16 +264,16 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0009) {
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ugene_gui_test", "et0004_assembly", acceptableTypes));
     GTWidget::click(os, addFromDbButton);
 
-    GTUtilsWorkflowDesigner::setDatasetInputFolder(os, testDir + "_common_data/bam");
+	GTUtilsWorkflowDesigner::setDatasetInputFolder(os, QDir(testDir + "_common_data/bam").absolutePath()); 
 
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(4 == datasetList->count(), "Invalid dataset item count");
-    CHECK_SET_ERR("view_test_0003" == datasetList->item(0)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("Klebsislla.sort.bam.ugenedb" == datasetList->item(1)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("et0004_assembly" == datasetList->item(2)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("bam" == datasetList->item(3)->text(), "Invalid dataset item name");
+	CHECK_SET_ERR(4 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("4").arg(datasetList->count()));
+    CHECK_SET_ERR("view_test_0003" == datasetList->item(0)->text(), "Invalid dataset item name_1");
+    CHECK_SET_ERR("Klebsislla.sort.bam.ugenedb" == datasetList->item(1)->text(), "Invalid dataset item name_2");
+    CHECK_SET_ERR("et0004_assembly" == datasetList->item(2)->text(), "Invalid dataset item name_3");
+    CHECK_SET_ERR("bam" == datasetList->item(3)->text(), "Invalid dataset item name_4");
 }
 
 GUI_TEST_CLASS_DEFINITION(read_gui_test_0010) {
@@ -305,12 +305,12 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0010) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(5 == datasetList->count(), "Invalid dataset item count");
-    CHECK_SET_ERR(!datasetList->findItems("et0001_sequence", Qt::MatchExactly).isEmpty(), "Invalid dataset item name");
-    CHECK_SET_ERR(!datasetList->findItems("et0007_seq", Qt::MatchExactly).isEmpty(), "Invalid dataset item name");
-    CHECK_SET_ERR(!datasetList->findItems("export_test_0007", Qt::MatchExactly).isEmpty(), "Invalid dataset item name");
-    CHECK_SET_ERR(!datasetList->findItems("export_test_0008", Qt::MatchExactly).isEmpty(), "Invalid dataset item name");
-    CHECK_SET_ERR(!datasetList->findItems("export_test_0009", Qt::MatchExactly).isEmpty(), "Invalid dataset item name");
+	CHECK_SET_ERR(5 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("5").arg(datasetList->count()));
+    CHECK_SET_ERR(!datasetList->findItems("et0001_sequence", Qt::MatchExactly).isEmpty(), "Invalid dataset item name_1");
+    CHECK_SET_ERR(!datasetList->findItems("et0007_seq", Qt::MatchExactly).isEmpty(), "Invalid dataset item nam_2");
+    CHECK_SET_ERR(!datasetList->findItems("export_test_0007", Qt::MatchExactly).isEmpty(), "Invalid dataset item name_3");
+    CHECK_SET_ERR(!datasetList->findItems("export_test_0008", Qt::MatchExactly).isEmpty(), "Invalid dataset item name_4");
+    CHECK_SET_ERR(!datasetList->findItems("export_test_0009", Qt::MatchExactly).isEmpty(), "Invalid dataset item name_5");
 }
 
 GUI_TEST_CLASS_DEFINITION(read_gui_test_0011) {
@@ -342,14 +342,14 @@ GUI_TEST_CLASS_DEFINITION(read_gui_test_0011) {
     QListWidget *datasetList = qobject_cast<QListWidget *>(GTWidget::findWidget(os, "itemsArea"));
     CHECK_SET_ERR(NULL != datasetList, "Unable to find dataset list widget");
 
-    CHECK_SET_ERR(7 == datasetList->count(), "Invalid dataset item count");
-    CHECK_SET_ERR("export_test_0008" == datasetList->item(0)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("export_test_0009" == datasetList->item(1)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("et0007_seq" == datasetList->item(2)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("et0001_sequence" == datasetList->item(3)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("pt0001_dir2" == datasetList->item(4)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("pt0006_dir2" == datasetList->item(5)->text(), "Invalid dataset item name");
-    CHECK_SET_ERR("pt0005_human_T1" == datasetList->item(6)->text(), "Invalid dataset item name");
+	CHECK_SET_ERR(7 == datasetList->count(), QString("Invalid dataset item count: expect %1, got %2").arg("7").arg(datasetList->count()));
+    CHECK_SET_ERR("export_test_0008" == datasetList->item(0)->text(), "Invalid dataset item name_1");
+    CHECK_SET_ERR("export_test_0009" == datasetList->item(1)->text(), "Invalid dataset item name_2");
+    CHECK_SET_ERR("et0007_seq" == datasetList->item(2)->text(), "Invalid dataset item name_3");
+    CHECK_SET_ERR("et0001_sequence" == datasetList->item(3)->text(), "Invalid dataset item name_4");
+    CHECK_SET_ERR("pt0001_dir2" == datasetList->item(4)->text(), "Invalid dataset item name_5");
+    CHECK_SET_ERR("pt0006_dir2" == datasetList->item(5)->text(), "Invalid dataset item name_6");
+    CHECK_SET_ERR("pt0005_human_T1" == datasetList->item(6)->text(), "Invalid dataset item name_7");
 }
 
 GUI_TEST_CLASS_DEFINITION(read_gui_neg_test_0012) {
@@ -364,7 +364,7 @@ GUI_TEST_CLASS_DEFINITION(read_gui_neg_test_0012) {
     createTestConnection(os);
 
     QSet<GObjectType> acceptableTypes;
-    acceptableTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    acceptableTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     GTUtilsDialog::waitForDialog(os, new ProjectTreeItemSelectorDialogFiller(os, "ugene_gui_test", "et0003_alignment", acceptableTypes,
         ProjectTreeItemSelectorDialogFiller::Single, 1));
 
diff --git a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
index 99507c7..3d7b478 100644
--- a/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
+++ b/src/plugins/GUITestBase/src/tests/common_scenarios/workflow_designer/shared_db/GTTestsSharedDbWd.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.cpp b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.cpp
index 3b35b09..7de7037 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.cpp
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
index fdc0fbf..7149b6f 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTAbstractGUIAction.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
index bc666b3..b986790 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,12 +23,8 @@
 #include <primitives/GTWidget.h>
 #include <base_dialogs/GTFileDialog.h>
 #include <core/GUITest.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QFileDialog>
-#else
-#include <QtWidgets/QFileDialog>
-#endif
-#include <QtCore/QDirIterator>
+#include <QFileDialog>
+#include <QDirIterator>
 #include <U2Core/U2SafePoints.h>
 #include <U2Test/UGUITest.h>
 
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.h b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.h
index 6b7e990..acf586d 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.h
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GTRandomGUIActionFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
index 609abed..79a245f 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include <base_dialogs/GTFileDialog.h>
 #include "GTRandomGUIActionFactory.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 #include <U2Core/U2SafePoints.h>
 
 namespace U2 {
diff --git a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
index e9084ae..abb1004 100644
--- a/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
+++ b/src/plugins/GUITestBase/src/tests/crazy_user/GUICrazyUserTest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.cpp
index 2394ba0..5682399 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,24 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/AppContext.h>
-#include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/U2ObjectDbi.h>
-
-#include <U2Gui/ProjectViewModel.h>
-#include <U2Gui/ToolsMenu.h>
-
-#include <U2View/ADVConstants.h>
-#include <U2View/ADVSingleSequenceWidget.h>
-#include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/AnnotationsTreeView.h>
-#include <U2View/AssemblyBrowser.h>
-#include <U2View/AssemblyModel.h>
-#include <U2View/AssemblyNavigationWidget.h>
-#include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
-#include <U2View/MSAEditorNameList.h>
-
 #include <QDialogButtonBox>
 #include <QFileDialog>
 #include <QHeaderView>
@@ -46,11 +28,13 @@
 #include <QPlainTextEdit>
 #include <QProgressBar>
 #include <QPushButton>
+#include <QStandardItemModel>
 #include <QTableWidget>
 #include <QWebElement>
 #include <QWebFrame>
 #include <QWebView>
 #include <QWizard>
+#include <QTextStream>
 
 #include <GTGlobals.h>
 #include <base_dialogs/DefaultDialogFiller.h>
@@ -82,7 +66,29 @@
 #include <utils/GTUtilsDialog.h>
 #include <utils/GTUtilsToolTip.h>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ProjectViewModel.h>
+#include <U2Gui/ToolsMenu.h>
+
+#include <U2View/ADVConstants.h>
+#include <U2View/ADVSingleSequenceWidget.h>
+#include <U2View/AnnotatedDNAViewFactory.h>
+#include <U2View/AnnotationsTreeView.h>
+#include <U2View/AssemblyBrowser.h>
+#include <U2View/AssemblyModel.h>
+#include <U2View/AssemblyNavigationWidget.h>
+#include <U2View/MSAEditor.h>
+#include <U2View/MaEditorFactory.h>
+#include <U2View/MaEditorNameList.h>
+
 #include "../../workflow_designer/src/WorkflowViewItems.h"
+#include "api/GTGraphicsItem.h"
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTDatabaseConfig.h"
 #include "GTTestsRegressionScenarios_1001_2000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
@@ -110,9 +116,6 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "api/GTGraphicsItem.h"
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "runnables/qt/EscapeClicker.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
@@ -131,6 +134,7 @@
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
@@ -179,11 +183,11 @@
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/hmm3/HmmerSearchDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 #include "runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h"
@@ -357,7 +361,7 @@ GUI_TEST_CLASS_DEFINITION(test_1015_1) {
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTUtilsMdi::click(os, GTGlobals::Minimize);
+    // GTUtilsMdi::click(os, GTGlobals::Minimize);
 
     GTGlobals::sleep(5000);
 }
@@ -409,7 +413,7 @@ GUI_TEST_CLASS_DEFINITION(test_1015_4) {
     GTGlobals::sleep();
 
     GTUtilsMdi::click(os, GTGlobals::Close);
-    GTUtilsMdi::click(os, GTGlobals::Minimize);
+    // GTUtilsMdi::click(os, GTGlobals::Minimize);
 
     GTMouseDriver::moveTo(GTUtilsProjectTreeView::getItemCenter(os, "human_T1.fa"));
     GTMouseDriver::click();
@@ -488,7 +492,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+        GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -507,8 +511,8 @@ GUI_TEST_CLASS_DEFINITION(test_1021) {
 
         // Expected state: there are no empty MDI window opened, no bookmarks
         GTGlobals::sleep();
-        QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-        CHECK_SET_ERR(activeWindow == NULL, "there is active window");
+        // QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)); //Start page blocks this check. It is enought without it.
+        // CHECK_SET_ERR(activeWindow == NULL, "there is active window");
 
         QTreeWidget* bookmarksTree = GTUtilsBookmarksTreeView::getTreeWidget(os);
         CHECK_SET_ERR(bookmarksTree != NULL, "bookmarksTreeWidget is NULL");
@@ -545,8 +549,8 @@ GUI_TEST_CLASS_DEFINITION(test_1021_1) {
 
         // Expected state: there are no empty MDI window opened, no bookmarks
         GTGlobals::sleep();
-        QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-        CHECK_SET_ERR(activeWindow == NULL, "there is active window");
+        // QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)); //Start page blocks this check. It is enought without it.
+        // CHECK_SET_ERR(activeWindow == NULL, "there is active window");
 
         QTreeWidget* bookmarksTree = GTUtilsBookmarksTreeView::getTreeWidget(os);
         CHECK_SET_ERR(bookmarksTree != NULL, "bookmarksTreeWidget is NULL");
@@ -583,8 +587,8 @@ GUI_TEST_CLASS_DEFINITION(test_1021_2) {
 
         // Expected state: there are no empty MDI window opened, no bookmarks
         GTGlobals::sleep();
-        QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-        CHECK_SET_ERR(activeWindow == NULL, "there is active window");
+        // QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)); //Start page blocks this check. It is enought without it.
+        // CHECK_SET_ERR(activeWindow == NULL, "there is active window");
 
         QTreeWidget* bookmarksTree = GTUtilsBookmarksTreeView::getTreeWidget(os);
         CHECK_SET_ERR(bookmarksTree != NULL, "bookmarksTreeWidget is NULL");
@@ -599,7 +603,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+        GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -609,7 +613,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
         GTGlobals::sleep();
 
         if (i==0) {
-            GTUtilsMdi::click(os, GTGlobals::Minimize);
+            // GTUtilsMdi::click(os, GTGlobals::Minimize);
             GTGlobals::sleep();
         }
 
@@ -623,8 +627,8 @@ GUI_TEST_CLASS_DEFINITION(test_1021_3) {
 
         // Expected state: there are no empty MDI window opened, no bookmarks
         GTGlobals::sleep();
-        QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-        CHECK_SET_ERR(activeWindow == NULL, "there is active window");
+        // QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false)); //Start page blocks this check. It is enought without it.
+        // CHECK_SET_ERR(activeWindow == NULL, "there is active window");
 
         QTreeWidget* bookmarksTree = GTUtilsBookmarksTreeView::getTreeWidget(os);
         CHECK_SET_ERR(bookmarksTree != NULL, "bookmarksTreeWidget is NULL");
@@ -639,7 +643,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
     for (int i=0; i<2; i++) {
         // 1) Open data\samples\FASTA\human_T1.fa
         GTFileDialog::openFile(os, dataDir+"samples/FASTA/", "human_T1.fa");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+        GTUtilsTaskTreeView::waitTaskFinished(os);
         GTGlobals::sleep();
 
         // 2) Click "build dotplot" tooltip
@@ -649,7 +653,7 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
         GTGlobals::sleep();
 
         if (i==0) {
-            GTUtilsMdi::click(os, GTGlobals::Minimize);
+            // GTUtilsMdi::click(os, GTGlobals::Minimize);
             GTGlobals::sleep();
         }
 
@@ -663,8 +667,8 @@ GUI_TEST_CLASS_DEFINITION(test_1021_4) {
 
         // Expected state: there are no empty MDI window opened, no bookmarks
         GTGlobals::sleep();
-        QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));
-        CHECK_SET_ERR(activeWindow == NULL, "there is active window");
+        // QWidget* activeWindow = GTUtilsMdi::activeWindow(os, GTGlobals::FindOptions(false));//Start page blocks this check. It is enought without it.
+        // CHECK_SET_ERR(activeWindow == NULL, "there is active window");
 
         QTreeWidget* bookmarksTree = GTUtilsBookmarksTreeView::getTreeWidget(os);
         CHECK_SET_ERR(bookmarksTree != NULL, "bookmarksTreeWidget is NULL");
@@ -694,7 +698,7 @@ GUI_TEST_CLASS_DEFINITION(test_1022) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1029) {
-//    1. Open all files from "samples/genbank/" directory in separate mode
+//    1. Open all files from "samples/genbank/" folder in separate mode
 //    2. Close all views except one
 //    3. Add other sequences to existing view using "add to view" from project context menu
 //    4. Close all opened circular views with buttons on sequence view toolbar
@@ -914,7 +918,7 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
     bool vis = GTWidget::findWidget(os, "AssemblyReadsAreaHint", GTUtilsMdi::activeWindow(os))->isVisible();
     CHECK_SET_ERR(!vis, "hint unexpectidly visiable");
 
-    GTUtilsMdi::activateWindow(os, "1.bam [as] chrM");
+    GTUtilsMdi::activateWindow(os, "1 [as] chrM");
 
     QWidget* w1 = GTUtilsMdi::activeWindow(os);
     GTWidget::click(os, w1);
@@ -924,7 +928,7 @@ GUI_TEST_CLASS_DEFINITION(test_1048){
     }
     GTGlobals::sleep();
     GTKeyboardDriver::keyClick( Qt::Key_Home);
-    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(10,10));
+    GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() + QPoint(20,20));
     GTGlobals::sleep(500);
     vis = GTWidget::findWidget(os, "AssemblyReadsAreaHint", GTUtilsMdi::activeWindow(os))->isVisible();
     CHECK_SET_ERR(vis, "hint unexpectidly invisiable");
@@ -1112,7 +1116,7 @@ GUI_TEST_CLASS_DEFINITION(test_1061) {
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Sequence", dataDir + "samples/Genbank/murine.gb");
 
     GTUtilsWorkflowDesigner::click(os, GTUtilsWorkflowDesigner::getWorker(os, "Write Sequence"));
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
 
     //3. Connect all elements, setup connections, provide any annotated sequence as an input
     GTUtilsWorkflowDesigner::connect(os, GTUtilsWorkflowDesigner::getWorker(os, "Read Sequence"), GTUtilsWorkflowDesigner::getWorker(os, "Sequence Marker"));
@@ -1204,7 +1208,7 @@ GUI_TEST_CLASS_DEFINITION(test_1065_1) {
 //        {reference sequence}		_common_data/scenarios/_regression/1065/e_coli_1000.fa
 //        {Index file name}		_tmp/e_coli_1000
 //    Click the "Start" button.
-//    Expected state: task completes successfully, there are six files in the _tmp directory:
+//    Expected state: task completes successfully, there are six files in the _tmp folder:
 //    e_coli_1000.1.ebwt
 //    e_coli_1000.2.ebwt
 //    e_coli_1000.3.ebwt
@@ -1335,8 +1339,24 @@ GUI_TEST_CLASS_DEFINITION(test_1071) {
     //1. Open edit annotation name and region dialog (by F2).
     //2. Enter an invalid region (e.g. asdfsadf12..25).
     //3. Click OK.
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
-    GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, "CDS", "asdfsadf12..25"));
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = GTWidget::getActiveModalWidget(os);
+
+            GTRadioButton::click(os, "rbGenbankFormat", dialog);
+            GTLineEdit::setText(os, "leLocation", "asdfsadf12..25", dialog);
+
+            GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+
+            GTGlobals::sleep(1000);
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new EditAnnotationFiller(os, new Scenario()));
     GTKeyboardDriver::keyClick( Qt::Key_F2);
     GTGlobals::sleep();
 
@@ -1621,7 +1641,7 @@ GUI_TEST_CLASS_DEFINITION(test_1115) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    6. Check that annotations are correctly exported.
-    GTUtilsDocument::checkDocument(os, "test_1115.aln", MSAEditorFactory::ID);
+    GTUtilsDocument::checkDocument(os, "test_1115.aln", MsaEditorFactory::ID);
 
     const QStringList names = GTUtilsMSAEditorSequenceArea::getNameList(os);
     CHECK_SET_ERR(expectedNames == names, QString("Unexpected msa rows names: expect '%1', got '%2'")
@@ -1662,17 +1682,17 @@ GUI_TEST_CLASS_DEFINITION(test_1122){
 //    Expected state: Result is the same as in the step 4.
 
     GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scenarios/CAP3/xyz.fa"
                                                                  << testDir + "_common_data/scenarios/CAP3/xyz.qual",
                                                                  sandBoxDir + "test_1122_1"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Reads de novo assembly (with CAP3)...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scenarios/CAP3/xyz.fastq",
                                                                  sandBoxDir + "test_1122_2"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Reads de novo assembly (with CAP3)...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     CHECK_SET_ERR(GTFile::equals(os, sandBoxDir + "test_1122_1.ace", sandBoxDir + "test_1122_2.ace"), "Files are not equal");
@@ -1691,11 +1711,11 @@ GUI_TEST_CLASS_DEFINITION(test_1123){
     // Expected state: task complete successfully, result file opens in the MSA Editor (or in the Assembly Viewer).
 
     GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_1123"));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/abif/19_022.ab1"
         << testDir + "_common_data/abif/39_034.ab1",
         sandBoxDir + "1123_abi.cap.ace"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Reads de novo assembly (with CAP3)...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 
@@ -1712,11 +1732,11 @@ GUI_TEST_CLASS_DEFINITION(test_1123_1){
     // Expected state: task complete successfully, result file opens in the MSA Editor (or in the Assembly Viewer).
 
     GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_1123_1"));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList() << testDir + "_common_data/scf/Sequence A.scf"
         << testDir + "_common_data/scf/Sequence A.scf",
         sandBoxDir + "1123_scf.cap.ace"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" <<"Reads de novo assembly (with CAP3)...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
@@ -1741,7 +1761,7 @@ GUI_TEST_CLASS_DEFINITION(test_1124){
         }
     };
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, new Scenario()));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Reads de novo assembly (with CAP3)...");
     GTGlobals::sleep();
 }
 
@@ -1823,6 +1843,8 @@ GUI_TEST_CLASS_DEFINITION(test_1155) {
 
     GTGlobals::sleep(100);
     GTUtilsWorkflowDesigner::runWorkflow(os);
+	GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+	
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
@@ -1844,7 +1866,7 @@ GUI_TEST_CLASS_DEFINITION(test_1154) {
     parameters.useBestMode = false;
     parameters.samOutput = false;
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, &parameters));
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "The short reads can't be mapped to the reference sequence!"));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "The short reads can't be mapped to the reference sequence!"));
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -1910,7 +1932,7 @@ GUI_TEST_CLASS_DEFINITION(test_1157) {
     WorkflowProcessItem *writeSequence = GTUtilsWorkflowDesigner::addElement(os, "Write Sequence");
 
     QString resultFilePath = testDir + "_common_data/scenarios/sandbox/test_1157.gb";
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir().absoluteFilePath(resultFilePath), GTUtilsWorkflowDesigner::textValue);
 
     WorkflowProcessItem *callocationSearch = GTUtilsWorkflowDesigner::addElement(os, "Collocation Search");
@@ -2050,8 +2072,8 @@ GUI_TEST_CLASS_DEFINITION(test_1180) {
 
     //3) Run Bowtie aligning on any data.
     //Expected state: UGENE not crashed.
-    AlignShortReadsFiller::Parameters parameters(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index/",
-        "chr6.fa",
+    AlignShortReadsFiller::Parameters parameters(testDir + "_common_data/fasta/",
+        "Mycobacterium.fna",
         testDir + "_common_data/e_coli/",
         "e_coli_1000.fastq",
         AlignShortReadsFiller::Parameters::Bowtie);
@@ -2491,7 +2513,7 @@ GUI_TEST_CLASS_DEFINITION(test_1219) {
     GTUtilsDocument::checkDocument(os, "P1_human_T1_6.aln", GTUtilsDocument::DocumentUnloaded);
     GTUtilsDocument::checkDocument(os, "P1_human_T1_7.aln", GTUtilsDocument::DocumentUnloaded);
 
-    const QSet<GObjectType> acceptableTypes = QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT;
+    const QSet<GObjectType> acceptableTypes = QSet<GObjectType>() << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     GTUtilsProjectTreeView::checkObjectTypes(os, acceptableTypes, GTUtilsProjectTreeView::findIndex(os, "P1_human_T1_1.aln"));
     GTUtilsProjectTreeView::checkObjectTypes(os, acceptableTypes, GTUtilsProjectTreeView::findIndex(os, "P1_human_T1_2.aln"));
     GTUtilsProjectTreeView::checkObjectTypes(os, acceptableTypes, GTUtilsProjectTreeView::findIndex(os, "P1_human_T1_3.aln"));
@@ -3036,23 +3058,7 @@ GUI_TEST_CLASS_DEFINITION(test_1266) {
 
 GUI_TEST_CLASS_DEFINITION(test_1274){
 //    1. Select "Tabbed documents" mode in the Application Settings.
-    class TabbedDoc : public CustomScenario {
-    public:
-        void run(HI::GUITestOpStatus &os) {
-            QWidget *dialog = QApplication::activeModalWidget();
-            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-
-            QWidget* tabbedMode = GTWidget::findWidget(os, "tabbedButton");
-            CHECK_SET_ERR(tabbedMode != NULL, "No tubbedButton");
-            GTWidget::click(os, tabbedMode);
-
-            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-        }
-    };
-
-
-    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new TabbedDoc()));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Window" << "Window layout" << "Tabbed documents");
 
 //    2. Open a document
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/", "murine.gb");
@@ -3069,20 +3075,7 @@ GUI_TEST_CLASS_DEFINITION(test_1273) {
 
     //2) Switch the windows layout to the tabbed documents mode
     //(Settings -> Preferences -> General -> Windows Layout -> Tabbed documents -> OK)
-    class Scenario : public CustomScenario {
-    public:
-        void run(HI::GUITestOpStatus &os) {
-            QList<QRadioButton*> buttons = GTRadioButton::getAllButtonsByText(os, "Tabbed documents", QApplication::activeModalWidget());
-            foreach (QRadioButton *tabbedMode, buttons) {
-                GTRadioButton::click(os, tabbedMode);
-                break;
-            }
-            GTUtilsDialog::clickButtonBox(os, QApplication::activeModalWidget(), QDialogButtonBox::Ok);
-        }
-    };
-
-    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new Scenario()));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Window" << "Window layout" << "Tabbed documents");
 
     //Expected: the name of the sequence view tab starts with "JQ040024.1", but not with "JQ040024".
     QTabBar *tabs = AppContext::getMainWindow()->getQMainWindow()->findChild<QTabBar*>("");
@@ -3138,24 +3131,7 @@ GUI_TEST_CLASS_DEFINITION(test_1289) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
-    class TabbedDoc : public CustomScenario {
-    public:
-        void run(HI::GUITestOpStatus &os) {
-            QWidget *dialog = QApplication::activeModalWidget();
-            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
-
-            QWidget* tabbedMode = GTWidget::findWidget(os, "tabbedButton");
-            CHECK_SET_ERR(tabbedMode != NULL, "No tubbedButton");
-            GTWidget::click(os, tabbedMode);
-
-            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
-        }
-    };
-
-    GTLogTracer l;
-
-    GTUtilsDialog::waitForDialog(os, new AppSettingsDialogFiller(os, new TabbedDoc()));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Window" << "Window layout" << "Tabbed documents");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1295) {
@@ -3322,6 +3298,7 @@ GUI_TEST_CLASS_DEFINITION(test_1300_2) {
 //    2. Close sequence view with murine.gb.
 //    Expected state: there is the "murine.gb" document in the project view, no views are opened.
     GTUtilsMdi::click(os, GTGlobals::Close);
+    GTGlobals::sleep(1000);
 
     sequenceViewIsVisible = GTUtilsMdi::isAnyPartOfWindowVisible(os, "murine [s] NC_001363");
     CHECK_SET_ERR(!sequenceViewIsVisible, "Sequence view is unexpectedly visible");
@@ -3423,13 +3400,13 @@ GUI_TEST_CLASS_DEFINITION(test_1310) {
             CHECK_SET_ERR(NULL != algorithmBox, "algorithmBox is NULL");
             GTComboBox::setIndexWithText(os, algorithmBox, "PHYLIP Neighbor Joining");
 
-            GTUtilsDialog::waitForDialog(os, new LicenseAgreementDialogFiller(os));
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
         }
     };
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario()));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1315_1) {
@@ -3501,9 +3478,9 @@ GUI_TEST_CLASS_DEFINITION(test_1319_1){
 //    3) Click the element.
     GTUtilsWorkflowDesigner::click(os, item);
 //    Expected state: bottom datasets panel is visible.
-//    4) Add directory as input files.
+//    4) Add folder as input files.
     GTUtilsWorkflowDesigner::setDatasetInputFolder(os, dataDir + "samples/FASTA");
-//    Expected state: the element's doc has the blue link to this directory.
+//    Expected state: the element's doc has the blue link to this folder.
 //    6) Right click on the link.
     GTUtilsWorkflowDesigner::clickLink(os, "Read Sequence", Qt::RightButton);
 //    Expected state: a context menu not showed.
@@ -3555,7 +3532,7 @@ GUI_TEST_CLASS_DEFINITION(test_1321_1) {
     const int annotationsCount = GTUtilsAnnotationsTreeView::findItems(os, "repeat_unit").size();
     CHECK_SET_ERR(1 == annotationsCount, QString("Unexpected annotations count: expect '%1', got '%2'").arg(1).arg(annotationsCount));
 
-    const QString homology = GTUtilsAnnotationsTreeView::getQualifierValue(os, "repeat_homology(%)", "repeat_unit");
+    const QString homology = GTUtilsAnnotationsTreeView::getQualifierValue(os, "repeat_identity", "repeat_unit");
     CHECK_SET_ERR("85" == homology, QString("Unexpected repeat homology: expect '%1', got '%2'").arg(85).arg(homology));
 
     const QString annotationRegions = GTUtilsAnnotationsTreeView::getAnnotationRegionString(os, "repeat_unit");
@@ -3714,16 +3691,16 @@ GUI_TEST_CLASS_DEFINITION(test_1338) {
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Annotations");
 
     const QString initialText = GTUtilsWorkflowDesigner::getWorkerText(os, "Write Annotations");
-    CHECK_SET_ERR(initialText.contains("genbank"), "Worker item doesn't contain format name");
+    CHECK_SET_ERR(initialText.contains("GenBank"), "Worker item doesn't contain format name");
 
     // 2. Select another document format
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "gff", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GFF", GTUtilsWorkflowDesigner::comboValue);
     GTGlobals::sleep(500);
 
     // 3. Click on the scene
     // Expected state : the file format is changed in the description of the element
     const QString textAfter = GTUtilsWorkflowDesigner::getWorkerText(os, "Write Annotations");
-    CHECK_SET_ERR(textAfter != initialText && textAfter.contains("gff"), "Worker item didn't change its content");
+    CHECK_SET_ERR(textAfter != initialText && textAfter.contains("GFF"), "Worker item didn't change its content");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1342) {
@@ -3870,7 +3847,7 @@ GUI_TEST_CLASS_DEFINITION(test_1362) {
     //    Profile mode: Percents.
     //    Exclude gaps: unchecked.
     //4) Run the task.
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix..."));
     DistanceMatrixDialogFiller *filler = new DistanceMatrixDialogFiller(os, false, false, false);
     filler->saveToFile = true;
     filler->format = DistanceMatrixDialogFiller::CSV;
@@ -3901,9 +3878,9 @@ GUI_TEST_CLASS_DEFINITION(test_1364) {
 //    Expected: Bottom datasets panel appears.
     GTUtilsWorkflowDesigner::click(os, "Read Sequence");
 //    4. Click "Add file" button.
-//    Expected: The file dialog appears with some directory A.
+//    Expected: The file dialog appears with some folder A.
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir+"samples/FASTA/human_T1.fa"));
-//    5. Choose some file from some directory B (A != B) and click "Open".
+//    5. Choose some file from some folder B (A != B) and click "Open".
     GTWidget::click(os, GTWidget::findWidget(os, "addFileButton"));
 //    6. Click "Add file" button again.
     class customFileDialog : public CustomScenario {
@@ -3919,7 +3896,7 @@ GUI_TEST_CLASS_DEFINITION(test_1364) {
             GTWidget::click(os, GTWidget::findButtonByText(os, "Cancel", dialog));
         }
     };
-//    Expected: The file dialog opens with the directory B.
+//    Expected: The file dialog opens with the folder B.
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, new customFileDialog()));
     GTWidget::click(os, GTWidget::findWidget(os, "addFileButton"));
 }
@@ -3955,16 +3932,13 @@ GUI_TEST_CLASS_DEFINITION(test_1368){
 GUI_TEST_CLASS_DEFINITION(test_1371) {
 //    1. Open file "data/samples/ACE/BL060C3.ace" as msa.
 //    Expected state: there are 2 MSA objects in document.
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
-
     GTUtilsProjectTreeView::checkItem(os, "Contig1");
     GTUtilsProjectTreeView::checkItem(os, "Contig2");
-    GTUtilsProjectTreeView::checkObjectTypes(os,
-                                             QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT,
-                                             GTUtilsProjectTreeView::findIndex(os, "BL060C3.ace"));
+    GTUtilsProjectTreeView::checkObjectTypes(os, QSet<GObjectType>() << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, GTUtilsProjectTreeView::findIndex(os, "BL060C3.ace"));
 
 //    2. Open file "data/samples/ACE/BL060C3.ace" as assembly.
 //    Expected state: there are 2 assembly objects in document.
@@ -3972,8 +3946,7 @@ GUI_TEST_CLASS_DEFINITION(test_1371) {
     GTUtilsDocument::removeDocument(os, "BL060C3.ace");
     QDir().mkpath(sandBoxDir + "test_1371");
 
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_1371/test_1371.ugenedb"));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_1371.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4361,8 +4334,6 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
     QLineEdit* line = qobject_cast<QLineEdit*>(table->findChild<QLineEdit*>());
     CHECK_SET_ERR(line, "QLineEdit not found. Widget in this cell might be not QLineEdit");
     GTLineEdit::setText(os, line, dataDir + "samples/FASTA/HMM/aligment15900.hmm");
-
-
     GTGlobals::sleep(1000);
 #ifdef Q_OS_MAC
     GTGlobals::sleep();
@@ -4372,6 +4343,7 @@ GUI_TEST_CLASS_DEFINITION(test_1426) {
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
     GTUtilsMdi::click(os, GTGlobals::Close);
+	GTGlobals::sleep(500);
 
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read HMM2 Profile");
@@ -4669,7 +4641,7 @@ GUI_TEST_CLASS_DEFINITION(test_1457){
 
 GUI_TEST_CLASS_DEFINITION(test_1458){
     //1. Open document "../Samples/ACE/BL060C3.ace"
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_1458.ace.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -4678,8 +4650,8 @@ GUI_TEST_CLASS_DEFINITION(test_1458){
     //3. Select "Export document"
     //4. Check, that for all output file formats export work correctly
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
-    GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "test_1458.fa", ExportDocumentDialogFiller::FASTA, false, true));
-    GTUtilsProjectTreeView::click(os, "BL060C3.ace", Qt::RightButton);
+    GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "test_1458.fa", ExportDocumentDialogFiller::UGENEDB, false, true));
+    GTUtilsProjectTreeView::click(os, "test_1458.ace.ugenedb", Qt::RightButton);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1435) {
@@ -4859,18 +4831,17 @@ GUI_TEST_CLASS_DEFINITION(test_1443){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1445) {
-/*  1. Open "data/samples/CLUSTALW/COI.aln"
-    2. Choose last sequence (i.e. in bottom) with mouse in sequences area
-    3. Choose { Edit -> Remove sequence } in context menu
-    Expected state: UGENE doesn't crash
-*/
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+//    1. Open "data/samples/CLUSTALW/COI.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 17), QPoint(-4, 17));
-    int numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
+//    2. Choose last sequence (i.e. in bottom) with mouse in sequences area
+    GTUtilsMsaEditor::clickSequence(os, 17);
+    const int numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 1, "There is no selection in MSA, but expected");
 
+//    3. Choose { Edit -> Remove sequence } in context menu
+//    Expected state: UGENE doesn't crash
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_EDIT << "Remove sequence", GTGlobals::UseMouse));
     GTMouseDriver::click(Qt::RightButton);
 }
@@ -4961,15 +4932,17 @@ GUI_TEST_CLASS_DEFINITION(test_1475) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1483){
+GUI_TEST_CLASS_DEFINITION(test_1483) {
 //    1. Open "data/COI.aln" in MSA view
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Press tool button "Enable collapsing"
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
+
 //    3. Start selection in sequences name list and then go for the lower boundary of the list
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 5), QPoint(-4, 20));
 //    Expected state: Ugene doesn't crashes
+    GTUtilsMsaEditor::selectRows(os, 5, 20, GTGlobals::UseMouse);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1491) {
@@ -5206,31 +5179,33 @@ GUI_TEST_CLASS_DEFINITION(test_1510) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1511) {
-/*
- * 1. Open "data/COI.aln" in MSA view
- * 2. Select some region in Sequence Area
- * 3. Press Esc key
- * Expected state: selection is removed
- * 4. Select some sequences in Name Area
- * 5. Press Esc key
- * Expected state: selection is removed
-*/
-    GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+//    1. Open "data/COI.aln" in MSA view
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2,2), QPoint(15,6));
+
+//    2. Select some region in Sequence Area
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 2), QPoint(15, 6));
     int numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 5, "There is no selection in MSA, but expected (check #1)");
-    GTKeyboardDriver::keyClick( Qt::Key_Escape);
+
+//    3. Press Esc key
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
     GTGlobals::sleep(200);
+
+//    Expected state: selection is removed
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 0, "There is selection in MSA, but not expected (check #1)");
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5,2), QPoint(-5,6));
+//    4. Select some sequences in Name Area
+    GTUtilsMsaEditor::selectRows(os, 2, 6);
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 5, "There is no selection in MSA, but expected (check #2)");
-    GTKeyboardDriver::keyClick( Qt::Key_Escape);
+
+//    5. Press Esc key
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
     GTGlobals::sleep(200);
+
+//    Expected state: selection is removed
     numSelectedSequences = GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os);
     CHECK_SET_ERR(numSelectedSequences == 0, "There is selection in MSA, but not expected(check #2)");
 }
@@ -5479,7 +5454,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
 //    4. Move the mouse cursor away from context menu and press the left mouse button.
 //    5. Press right mouse button on the same place.
 //    Expected state: there is no rename sequence dialog appeared.
-//    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os));
+//    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os));
     class Scenario : public CustomScenario {
         void run(HI::GUITestOpStatus &os) {
             GTMouseDriver::moveTo(GTMouseDriver::getMousePosition() - QPoint(5, 0));
@@ -5493,7 +5468,7 @@ GUI_TEST_CLASS_DEFINITION(test_1551) {
     GTWidget::click(os, GTUtilsMsaEditor::getNameListArea(os), Qt::RightButton);
 
     GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new PopupChecker(os, new Scenario));
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new RenameSequenceFiller(os, "test_1551"));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new RenameSequenceFiller(os, "test_1551"));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
@@ -5638,28 +5613,36 @@ GUI_TEST_CLASS_DEFINITION(test_1573) {
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(0, 4), QPoint(11, 4)));
 }
 
-GUI_TEST_CLASS_DEFINITION(test_1574){
+GUI_TEST_CLASS_DEFINITION(test_1574) {
 //    1. Open "_common_data/scenarios/msa/ma.aln".
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Turn on the collapsing mode with the "Switch on/off collapsing" button on the toolbar.
 //    Expected state: there are two collapsed groups.
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
+
 //    3. Try to select some area in the Sequence area (selection start point must be in the white space under sequences).
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 15), QPoint(2, 0));
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 15), QPoint(2, 0), GTGlobals::UseMouse);
+
 //    Expected state: A region from the alignment bottom to the selection end point is selected.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(2, 0), QPoint(2, 13)));
 
 //    4. Try to click to the white space under sequences.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 15));
+
 //    Expected state: Only one symbol is selected.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(2, 13), QPoint(2, 13)));
+
 //    5. Try to select some area in the NameList area (selection must start from the next row under the last row).
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 14), QPoint(-5, 10));
+    GTUtilsMsaEditor::selectRows(os, 14, 10, GTGlobals::UseMouse);
+
 //    Expected state: A region from the alignmnet bottom to the selection end point is selected.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(0, 10), QPoint(11, 13)));
+
 //    6. Try to select some area in the NameList area (selection must start from the bottom of widget.
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 30), QPoint(-5, 10));
+    GTUtilsMsaEditor::selectRows(os, 30, 10, GTGlobals::UseMouse);
+
 //    Expected state: A region from the alignment bottom to the selection end point is selected.
     GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(QPoint(0, 10), QPoint(11, 13)));
 }
@@ -5673,25 +5656,25 @@ GUI_TEST_CLASS_DEFINITION(test_1575) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
 //    3. Open any group and try to edit any sequence:
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Conocephalus_discolor");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Conocephalus_discolor");
 
 //    3.1 Insert gap by pressing SPACE.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 10));
-    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
 
 //    Expected state: gap was inserted in every sequence of this group.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 10), QPoint(0, 12));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
+    GTKeyboardUtils::copy(os);
     QString clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "-\n-\n-", "Unexpected selection: " + clipboardText);
 
 //    3.2 Select some region of the grouped sequences in the Sequence area and drag this selection to the right.
     GTUtilsMSAEditorSequenceArea::click(os, QPoint(2, 11));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 11), QPoint(3, 11));
+    GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(2, 11), QPoint(3, 11));
 
 //    Expected state: all sequences in the group are changed simultaneously.
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(2, 10), QPoint(2, 12));
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
+    GTKeyboardUtils::copy(os);
     clipboardText = GTClipboard::text(os);
     CHECK_SET_ERR(clipboardText == "-\n-\n-", "Unexpected selection 2: " + clipboardText);
 }
@@ -5799,7 +5782,7 @@ GUI_TEST_CLASS_DEFINITION(test_1585) {
 
     GTKeyboardDriver::keyClick( Qt::Key_Escape);
 
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Conocephalus_discolor");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Conocephalus_discolor");
     GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(6, 9), QPoint(11, 10));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(9, 9));
@@ -5817,42 +5800,33 @@ GUI_TEST_CLASS_DEFINITION(test_1585) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1586) {
-/*  1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
-    2. Use context menu {align->align with MUSCLE}
-    3. press undo toolbar button
-    Expected state: alignment is similar to initial
-    Bug state: alignments are not similar
-*/
-
-    GTFileDialog::openFile(os, testDir+"_common_data/scenarios/msa", "ma2_gapped.aln");
+//    1. Open file test/_common_data/scenarios/msa/ma2_gapped.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep();
+
     //Save the initial content
-    GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
-    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
-    GTGlobals::sleep(200);
-    const QString initialContent = GTClipboard::text( os );
+    const QStringList originalMsa = GTUtilsMsaEditor::getWholeData(os);
 
+//    2. Use context menu {align->align with MUSCLE}
     GTUtilsDialog::waitForDialog(os, new MuscleDialogFiller(os, MuscleDialogFiller::Default));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align" << "Align with MUSCLE..."));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
+//    3. press undo toolbar button
     GTUtilsMsaEditor::undo(os);
     GTThread::waitForMainThread();
 
+//    Expected state: alignment is similar to initial
+//    Bug state: alignments are not similar
     //Deselect alignment
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(15, 15));
-    GTMouseDriver::click();
+    GTUtilsMsaEditor::clearSelection(os);
 
     //Check the undone state
-    GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 13, 10 ) );
-    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
-    GTGlobals::sleep(200);
-    const QString undoneContent = GTClipboard::text( os );
-    CHECK_SET_ERR( undoneContent == initialContent,
-        "Undo works wrong. Found text is: " + undoneContent );
+    const QStringList undoneMsa = GTUtilsMsaEditor::getWholeData(os);
+    CHECK_SET_ERR(undoneMsa == originalMsa,
+                  "Undo works wrong. Found text is:\n" + undoneMsa.join("\n"));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1587) {
@@ -5889,19 +5863,18 @@ GUI_TEST_CLASS_DEFINITION(test_1587) {
 GUI_TEST_CLASS_DEFINITION(test_1588) {
 //    1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-//    2. Launch tuxedo pipeline with valid data(get from _common_data/NIAID_pipelines/tuxedo_pipeline/data)
+//    2. Launch tuxedo pipeline with valid data
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index/"));
-    map.insert("Bowtie index basename", "chr6");
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+    map.insert("Bowtie index basename", "e_coli");
     map.insert("Bowtie version", "Bowtie1");
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "Single-sample"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QStringList()<<testDir +
-                                                      "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq", map));
+                                                      "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq", map));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
 //    3. Wait for finishing
     GTUtilsWorkflowDesigner::runWorkflow(os);
-    //GTGlobals::sleep(5000);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    4. Go to dashboard, click "External tools" button
     GTUtilsDashboard::openTab(os, GTUtilsDashboard::ExternalTools);
@@ -5921,12 +5894,6 @@ GUI_TEST_CLASS_DEFINITION(test_1588) {
     GTUtilsDashboard::findElement(os, "tophat-2.0.8b", "SPAN", false);
 #endif
     GTUtilsDashboard::findElement(os, "Beginning TopHat run", "LI", false);
-
-
-
-//    GTMouseDriver::moveTo(dashboard->mapToGlobal(result.geometry().center()));
-//    GTMouseDriver::click();
-    GTGlobals::sleep(5000);
 }
 
 GUI_TEST_CLASS_DEFINITION( test_1594 ) {
@@ -5937,10 +5904,10 @@ GUI_TEST_CLASS_DEFINITION( test_1594 ) {
     GTUtilsWorkflowDesigner::connect(os, read, write);
 //    2. Set the input annotations file: "_common_data/bed/valid_input/Treatment_tags.bed".
     GTUtilsWorkflowDesigner::click(os, read);
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Chip-seq/input_data/chr4.bed");
-//    3. Set the correct output directory for the MACS element.
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bed/valid_input/Treatment_tags.bed");
+//    3. Set the correct output folder for the MACS element.
     GTUtilsWorkflowDesigner::click(os, write);
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", QDir().absoluteFilePath(sandBoxDir + "test_1594"), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", QDir().absoluteFilePath(sandBoxDir + "test_1594"), GTUtilsWorkflowDesigner::textValue);
     GTUtilsWorkflowDesigner::setTableValue(os, "Treatment features", 3, GTUtilsWorkflowDesigner::comboValue,
                                            GTUtilsWorkflowDesigner::getInputPortsTable(os, 0));
     GTUtilsWorkflowDesigner::click(os, read);
@@ -6162,28 +6129,31 @@ GUI_TEST_CLASS_DEFINITION( test_1600_6 ){
     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::collapsingMode(os) == false, "collapsing mode is unexpectidly on");
 }
 
-GUI_TEST_CLASS_DEFINITION( test_1600_7 ){
+GUI_TEST_CLASS_DEFINITION(test_1600_7) {
 //    1. Open file "test/_common_data/scenarios/msa/ma2_gap_col.aln"
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gap_col.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Turn the collapsing mode on by the "Switch on/off collapsing" button on the main toolbar
-    QAbstractButton* collapce = GTAction::button(os, "Enable collapsing");
+    QAbstractButton *collapce = GTAction::button(os, "Enable collapsing");
     GTWidget::click(os, collapce);
-    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::collapsingMode(os) == true, "collapsing mode is unexpectidly off");
-    GTGlobals::sleep(500);
+
 //    Expected state: One collapsible item has appeared in MSA
+    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::collapsingMode(os) == true, "collapsing mode is unexpectidly off");
 
 //    3. Select some area in MSA by left mouse button and press "Space" button
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,0));
-    GTKeyboardDriver::keyClick( Qt::Key_Space);
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 0));
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+
 //    Expected state: New gaps have been added, collapsible item has retained
     QString seq = GTUtilsMSAEditorSequenceArea::getSequenceData(os, "Phaneroptera_falcata");
     CHECK_SET_ERR(seq == "-AAG-CTTCTTTTAA", "unexpected sequence1: " + seq);
     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::collapsingMode(os) == true, "collapsing mode is unexpectidly off 1");
 
 //    4. Select some area in MSA by left mouse button, then drag the area to the right by mouse
-    GTUtilsMSAEditorSequenceArea::click(os, QPoint(0,1));
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0,1), QPoint(1,1));
+    GTUtilsMSAEditorSequenceArea::click(os, QPoint(0, 1));
+    GTUtilsMSAEditorSequenceArea::dragAndDropSelection(os, QPoint(0, 1), QPoint(1, 1));
+
 //    Expected state: New gaps have been added, collapsible item has retained
     seq = GTUtilsMSAEditorSequenceArea::getSequenceData(os, "Isophya_altaica_EF540820");
     CHECK_SET_ERR(seq == "-AAG-TTACTAA----", "unexpected sequence1: " + seq);
@@ -6224,6 +6194,7 @@ GUI_TEST_CLASS_DEFINITION( test_1603 ) {
     QAbstractButton *tree = GTAction::button(os,"Build Tree");
     GTWidget::click(os, tree);
     GTGlobals::sleep();
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsMdi::closeWindow(os, "COI [m] COI");
     QString docName = "1603.nwk";
@@ -6245,7 +6216,7 @@ GUI_TEST_CLASS_DEFINITION( test_1606 ) {
 //    Expected state: UGENE doesn't crash on closing.
     GTLogTracer l;
 
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1ezg", 3, true, false,
+    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "1ezg", 3, true, true, false,
                                                                         sandBoxDir));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -6268,8 +6239,8 @@ GUI_TEST_CLASS_DEFINITION(test_1607) {
     WorkflowProcessItem *writer = GTUtilsWorkflowDesigner::addElement(os, "Write Variations");
     GTUtilsWorkflowDesigner::connect(os, reader, writer);
 
-    //3. Use input file "_common_data/NIAID_pipelines/Call_variants/data_to_compare_with/test_0001/out.vcf"
-    GTUtilsWorkflowDesigner::addInputFile(os, "Read Variations", testDir + "_common_data/NIAID_pipelines/Call_variants/data_to_compare_with/test_0001/out.vcf");
+    //3. Use input file "_common_data/vcf/correct_chr_name.vcf"
+    GTUtilsWorkflowDesigner::addInputFile(os, "Read Variations", testDir + "_common_data/vcf/correct_chr_name.vcf");
 
     GTUtilsWorkflowDesigner::click(os, "Write Variations");
     QFile outputFile(sandBoxDir + "out.vcf");
@@ -6664,7 +6635,7 @@ GUI_TEST_CLASS_DEFINITION( test_1658 ){
     GTGlobals::sleep(5000);
 //    Expected state: Warning dialog appears
 
-//    7. Press "No to all" button or press "Yes" and save it in another directory
+//    7. Press "No to all" button or press "Yes" and save it in another folder
 
 //    8. Make double click on "COI.aln" item in project view
     GTUtilsProjectTreeView::doubleClickItem(os, "COI.aln");
@@ -6733,15 +6704,16 @@ GUI_TEST_CLASS_DEFINITION(test_1662){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Add sample: Multiple dataset tuxedo: Single-end
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-    map.insert("Bowtie index basename", "NC_010473");
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+    map.insert("Bowtie index basename", "e_coli");
+    map.insert("Bowtie version", "Bowtie1");
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "Full"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<
-                                                       testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq"<<
-                                                       testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_2.fastq")<<
-                                                      (QStringList()<<testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_1.fastq"<<
-                                                       testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_2.fastq"), map));
+                                                       testDir + "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq"<<
+                                                       testDir + "_common_data/e_coli/e_coli_reads/e_coli_1_2.fastq")<<
+                                                      (QStringList()<<testDir + "_common_data/e_coli/e_coli_reads/e_coli_2_1.fastq"<<
+                                                       testDir + "_common_data/e_coli/e_coli_reads/e_coli_2_2.fastq"), map));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
 //    3. Click {show wizard} toolbar button
 //    4. Add several files to each dataset. Fill other fields with proper data
@@ -6793,7 +6765,7 @@ GUI_TEST_CLASS_DEFINITION(test_1668){
 //    7) Deactivate the PWA tab
     GTUtilsOptionPanelMsa::closeTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    8) Select some bunch of sequences (more than two) in the name list area
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 2), QPoint(-5, 6));
+	GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 2), QPoint(-5, 6), GTGlobals::UseMouse);
 //    9) Activate the PWA tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    Expected state: previosly chosen two sequences and their order are saved
@@ -6804,7 +6776,7 @@ GUI_TEST_CLASS_DEFINITION(test_1668){
 //    10) Deactivate the PWA tab
     GTUtilsOptionPanelMsa::closeTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    11) Select exactly two sequences in the name list area
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 7), QPoint(-5, 8));
+	GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 7), QPoint(-5, 8), GTGlobals::UseMouse);
 //    12) Activate the PWA tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
 //    Expected state: last chosen two sequences has appeared on PWA tab
@@ -6966,7 +6938,7 @@ GUI_TEST_CLASS_DEFINITION(test_1677){
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq"));
+            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq"));
             QList<QWidget* > list = wizard->currentPage()->findChildren<QWidget*>("addFileButton");
             foreach (QWidget* w, list) {
                 if(w->isVisible()){
@@ -6976,9 +6948,10 @@ GUI_TEST_CLASS_DEFINITION(test_1677){
             }
 
             QMap<QString, QVariant> map;
-            map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-            map.insert("Bowtie index basename", "NC_010473");
-            map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/accepted_hits.bam"));
+            map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+            map.insert("Bowtie index basename", "e_coli");
+            map.insert("Bowtie version", "Bowtie1");
+            map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/e_coli/e_coli_1000.gff"));
             GTUtilsWizard::setAllParameters(os, map);
 
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Apply);
@@ -6992,8 +6965,8 @@ GUI_TEST_CLASS_DEFINITION(test_1677){
     GTGlobals::sleep();
 //    3. Press {show widget} toolbutton
 //    Expected state: wizard appears
-//    4. Add file {test/_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq} to {First short  reads files} window
-//    Expected state:Adding exp_1_2.fastq offer has appeared
+//    4. Add file {test/_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq} to {First short  reads files} window
+//    Expected state:Adding e_coli_1_2.fastq offer has appeared
 
 //    5. Fill all other fields with proper values except second dataset. Press {finish} at the end
 //    6. Press {validate schema} toolbar button
@@ -7073,14 +7046,15 @@ GUI_TEST_CLASS_DEFINITION(test_1681){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Add sample: Multiple dataset tuxedo: Single-end
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-    map.insert("Bowtie index basename", "NC_010473");
-    map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/accepted_hits.bam"));
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index"));
+    map.insert("Bowtie index basename", "e_coli");
+    map.insert("Bowtie version", "Bowtie1");
+    map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/e_coli/e_coli_1000.gff"));
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "No-new-transcripts"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<testDir +
-                                                      "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq")<<
-                                                      (QStringList()<<testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_1.fastq"), map));
+                                                      "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq")<<
+                                                      (QStringList()<<testDir + "_common_data/e_coli/e_coli_reads/e_coli_2_1.fastq"), map));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
 //    3. Click {show wizard} toolbar button
 //    4. Fill wizard with proper data
@@ -7090,6 +7064,10 @@ GUI_TEST_CLASS_DEFINITION(test_1681){
 
 //    5. Run schema
 //    Expected state: Pipeline executed without errors
+    GTLogTracer l;
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1681_1) {
@@ -7108,7 +7086,7 @@ GUI_TEST_CLASS_DEFINITION(test_1681_1) {
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq"));
+            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq"));
             QList<QWidget* > list = wizard->currentPage()->findChildren<QWidget*>("addFileButton");
             foreach (QWidget* w, list) {
                 if(w->isVisible()){
@@ -7121,7 +7099,7 @@ GUI_TEST_CLASS_DEFINITION(test_1681_1) {
             CHECK_SET_ERR(tabWidget != NULL, "tabWidget not found");
             GTTabWidget::setCurrentIndex(os, tabWidget, 1);
 
-            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_1.fastq"));
+            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/e_coli/e_coli_reads/e_coli_2_1.fastq"));
             list = wizard->currentPage()->findChildren<QWidget*>("addFileButton");
             foreach (QWidget* w, list) {
                 if(w->isVisible()){
@@ -7131,9 +7109,10 @@ GUI_TEST_CLASS_DEFINITION(test_1681_1) {
             }
 
             QMap<QString, QVariant> map;
-            map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-            map.insert("Bowtie index basename", "NC_010473");
-            map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/accepted_hits.bam"));
+            map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+            map.insert("Bowtie index basename", "e_coli");
+            map.insert("Bowtie version", "Bowtie1");
+            map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/e_coli/e_coli_1000.gff"));
             GTUtilsWizard::setAllParameters(os, map);
 
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Apply);
@@ -7152,6 +7131,10 @@ GUI_TEST_CLASS_DEFINITION(test_1681_1) {
     GTGlobals::sleep();
 //    5. Run schema
 //    Expected state: Pipeline executed without errors
+    GTLogTracer l;
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1681_2){
@@ -7159,12 +7142,13 @@ GUI_TEST_CLASS_DEFINITION(test_1681_2){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Add sample: Single dataset tuxedo: Single-end
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-    map.insert("Bowtie index basename", "NC_010473");
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+    map.insert("Bowtie index basename", "e_coli");
+    map.insert("Bowtie version", "Bowtie1");
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "Single-sample"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard",QStringList()<<testDir +
-                                                      "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq", map));
+                                                      "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq", map));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
 //    3. Click {show wizard} toolbar button
 //    4. Fill wizard with proper data
@@ -7174,6 +7158,10 @@ GUI_TEST_CLASS_DEFINITION(test_1681_2){
 
 //    5. Run schema
 //    Expected state: Pipeline executed without errors
+    GTLogTracer l;
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1681_3) {
@@ -7189,7 +7177,7 @@ GUI_TEST_CLASS_DEFINITION(test_1681_3) {
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq"));
+            GTUtilsDialog::waitForDialog(os, new customFileDialog_1681(os, testDir + "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq"));
             QList<QWidget* > list = wizard->currentPage()->findChildren<QWidget*>("addFileButton");
             foreach (QWidget* w, list) {
                 if(w->isVisible()){
@@ -7199,8 +7187,9 @@ GUI_TEST_CLASS_DEFINITION(test_1681_3) {
             }
 
             QMap<QString, QVariant> map;
-            map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-            map.insert("Bowtie index basename", "NC_010473");
+            map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+            map.insert("Bowtie index basename", "e_coli");
+            map.insert("Bowtie version", "Bowtie1");
             GTUtilsWizard::setAllParameters(os, map);
 
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Apply);
@@ -7219,6 +7208,10 @@ GUI_TEST_CLASS_DEFINITION(test_1681_3) {
     GTGlobals::sleep();
 //    5. Run schema
 //    Expected state: Pipeline executed without errors
+    GTLogTracer l;
+    GTUtilsWorkflowDesigner::runWorkflow(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1686){
@@ -7282,24 +7275,19 @@ GUI_TEST_CLASS_DEFINITION( test_1688 ) {
 
 GUI_TEST_CLASS_DEFINITION(test_1693) {
 //    1. Open WD.
-//    2. Launch tuxedo pipeline.
+//    2. Launch tuxedo pipeline. Not actually need 'Tuxedo pipeline', so 'Remote BLASTing' are used.
 //    3. Try to open any other sample while pipeline is running.
 //    Expected state: UGENE doesn't crash.
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    GTUtilsWorkflowDesigner::addSample(os, "Remote BLASTing");
+    GTGlobals::sleep();
+
+    GTUtilsWorkflowDesigner::click(os, "Read Sequence(s)");
+    GTUtilsWorkflowDesigner::setDatasetInputFile( os, dataDir + "samples/FASTA/human_T1.fa" );
 
-    QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-    map.insert("Bowtie index basename", "NC_010473");
-    GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
-                                                                   "Full"<<"Single-end"));
-    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<testDir +
-                                                      "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq")<<
-                                                      (QStringList()<<testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_1.fastq"), map));
-    GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
-    GTUtilsWorkflowDesigner::setCurrentTab(os, GTUtilsWorkflowDesigner::samples);
     GTUtilsWorkflowDesigner::runWorkflow(os);
 
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
     const int tasksCount = GTUtilsTaskTreeView::getTopLevelTasksCount(os);
     CHECK_SET_ERR(1 == tasksCount, QString("An unexpected top level tasks count: expect %1, got %2. Workflow didn't launch?").arg(1).arg(tasksCount));
 
@@ -7307,6 +7295,7 @@ GUI_TEST_CLASS_DEFINITION(test_1693) {
     QWidget *samplesWidget = GTWidget::findWidget(os, "samples");
     CHECK_SET_ERR(NULL != samplesWidget, "Samples widget is NULL");
     CHECK_SET_ERR(!samplesWidget->isEnabled(), "Samples widget is unexpectedly enabled");
+    GTUtilsTask::cancelTask(os, "Execute workflow");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1700) {
@@ -7408,7 +7397,7 @@ GUI_TEST_CLASS_DEFINITION( test_1704 ){
     GTFileDialog::openFile( os, testDir + "_common_data/regression/1704", "lrr_test_new.gb" );
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Find HMM3 signals with _common_data\_regession\1704\LRR_4.hmm model
-    GTUtilsDialog::waitForDialog(os, new UHMM3SearchDialogFiller(os, testDir + "_common_data/regression/1704/LRR_4.hmm",
+    GTUtilsDialog::waitForDialog(os, new HmmerSearchDialogFiller(os, testDir + "_common_data/regression/1704/LRR_4.hmm",
                                                                  sandBoxDir + "1704.gb"));
 
     GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Find HMM signals with HMMER3...");
@@ -7569,7 +7558,7 @@ GUI_TEST_CLASS_DEFINITION(test_1747){
     //Expected state: progress for "Generete distance matrix" correctly displays current state of calculation
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "ty3.aln.gz");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix..."));
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
 
@@ -7648,7 +7637,7 @@ GUI_TEST_CLASS_DEFINITION(test_1733){
     // 2) Open Workflow Designer
     // 3) Open Call Variant Pipeline scheme from the samples
     // 4) Try to specify parameters (using wizard or wd standard interface) with files
-    // (for example specify any of file from "data/samples/Genbank" directory as "Bed or position list file" on page #2 of wizard )
+    // (for example specify any of file from "data/samples/Genbank" folder as "Bed or position list file" on page #2 of wizard )
     // Expected state: UGENE doesn't ask to specify folder
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 
@@ -7676,11 +7665,11 @@ GUI_TEST_CLASS_DEFINITION(test_1734){
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bam/small.bam.sorted.bam"));
             GTWidget::click(os, GTWidget::findWidget(os, "addFileButton", wizard->currentPage()));
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bam/small.bam.sorted.bam"));
             GTWidget::click(os, GTWidget::findWidget(os, "addFileButton", wizard->currentPage()));
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bam/small.bam.sorted.bam"));
             GTWidget::click(os, GTWidget::findWidget(os, "addFileButton", wizard->currentPage()));
 
             QListWidget* itemsArea = GTWidget::findExactWidget<QListWidget*>(os, "itemsArea", wizard);
@@ -7694,7 +7683,7 @@ GUI_TEST_CLASS_DEFINITION(test_1734){
 //    3. Open wizard. Try to add several bams on the first page
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Call Variants Wizard", new custom()));
     GTWidget::click(os, GTAction::button(os, "Show wizard"));
-//    Expected state: adding several bams is enebled
+//    Expected state: adding several bams is allowed
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1735){
@@ -7711,10 +7700,10 @@ GUI_TEST_CLASS_DEFINITION(test_1735){
             QWizard* wizard = qobject_cast<QWizard*>(dialog);
             CHECK_SET_ERR(wizard, "activeModalWidget is not wizard");
 
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.fa"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/cmdline/call-variations/chrM.fa"));
             GTWidget::click(os, GTWidget::findWidget(os, "browseButton", GTWidget::findWidget(os, "Reference sequence file labeledWidget", dialog)));
 
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bam/chrM.sorted.bam"));
             GTWidget::click(os, GTWidget::findWidget(os, "addFileButton", wizard->currentPage()));
 
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
@@ -7837,7 +7826,7 @@ GUI_TEST_CLASS_DEFINITION(test_1759){
 
 //    3. Press the "Next" button
 
-//    Expected state: the "TopHat input" groupbox contains the following fields: "Bowtie index directory",
+//    Expected state: the "TopHat input" groupbox contains the following fields: "Bowtie index folder",
 //    "Bowtie index basename", "Bowtie version".
 
 //    4. Repeat 2nd and 3rd steps for all the versions of the Tuxedo pipeline
@@ -7962,13 +7951,13 @@ GUI_TEST_CLASS_DEFINITION(test_1771){
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
 
-            //    3. Set bowtie index and a known transcript file.(_common_data/NIAID_pipelines/tuxedo)
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index/chr6.1.ebwt"));
+            //    3. Set bowtie index and a known transcript file.
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bowtie/index/e_coli.1.ebwt"));
             GTWidget::click(os, GTWidget::findButtonByText(os, "Select\nbowtie index file", dialog));
 
             QString name = GTUtilsWizard::getParameter(os, "Bowtie index basename").toString();
             QString version = GTUtilsWizard::getParameter(os, "Bowtie version").toString();
-            CHECK_SET_ERR(name == "chr6", "unexpected name: " + name);
+            CHECK_SET_ERR(name == "e_coli", "unexpected name: " + name);
             CHECK_SET_ERR(version == "Bowtie1", "unexpected bowtie version: " + version);
 
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
@@ -7982,7 +7971,7 @@ GUI_TEST_CLASS_DEFINITION(test_1771){
 //    3. Select some configuration
 //    Expected state: wizard appeared
 //    4. go to "tophat settings" page. click button "Select bowtie index file"
-//    5. select file _common_data/NIAID_pipelines/tuxedo_pipeline/data/index/chr6.1.ebwt
+//    5. select file _common_data/bowtie/index/e_coli.1.ebwt
 //    Expected state: bowtie index basename is set to "chr6", bowtie version is set to "bowtie1"
 }
 
@@ -8171,8 +8160,8 @@ GUI_TEST_CLASS_DEFINITION(test_1834) {
     //4. Set the "Document format" parameter of the "File Format Conversion" element to "mega".
     GTUtilsWorkflowDesigner::click(os, "File Format Conversion");
     GTUtilsWorkflowDesigner::setParameter(os, "Document format", "mega", GTUtilsWorkflowDesigner::comboValue, GTGlobals::UseMouse);
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", 0, GTUtilsWorkflowDesigner::comboValue, GTGlobals::UseMouse);
-    GTUtilsWorkflowDesigner::setParameter(os, "Custom directory", QDir().absoluteFilePath(sandBoxDir + "regression_1834"), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", 0, GTUtilsWorkflowDesigner::comboValue, GTGlobals::UseMouse);
+    GTUtilsWorkflowDesigner::setParameter(os, "Custom folder", QDir().absoluteFilePath(sandBoxDir + "regression_1834"), GTUtilsWorkflowDesigner::textValue);
 
     //5. Run the scheme.
     GTWidget::click(os, GTAction::button(os, "Run workflow"));
@@ -8404,7 +8393,7 @@ GUI_TEST_CLASS_DEFINITION( test_1897 ) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //3) Selected any region on alignment view using mouse or keyboard
-    GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 40, 4 ), QPoint( 50, 12 ) );
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(40, 4), QPoint(50, 12));
 
     //4) Choose Highlighting/Gaps action from context-menu
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList( ) << "Highlighting"
@@ -8412,9 +8401,10 @@ GUI_TEST_CLASS_DEFINITION( test_1897 ) {
     GTMouseDriver::click(Qt::RightButton );
 
     //5) Look at Hightlighting/Gaps action again
-    QAction *action = GTAction::findActionByText( os, "Gaps" );
-    //Expected state: It must be checked
-    CHECK_SET_ERR( action->isChecked( ), "Action has to be checked!" );
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Highlighting"
+        << "Gaps", PopupChecker::IsChecked));
+    GTMouseDriver::click(Qt::RightButton);
+    GTKeyboardDriver::keyClick(Qt::Key_Escape);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_1908){
@@ -8458,8 +8448,8 @@ GUI_TEST_CLASS_DEFINITION(test_1918) {
     GTUtilsWorkflowDesigner::click(os, "File Format Conversion");
     GTUtilsWorkflowDesigner::setParameter(os, "Document format", "nexus", GTUtilsWorkflowDesigner::comboValue, GTGlobals::UseMouse);
     GTUtilsWorkflowDesigner::setParameter(os, "Excluded formats", QStringList("clustal"), GTUtilsWorkflowDesigner::ComboChecks);
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", 0, GTUtilsWorkflowDesigner::comboValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Custom directory", QDir().absoluteFilePath(sandBoxDir + "regression_1918")
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", 0, GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Custom folder", QDir().absoluteFilePath(sandBoxDir + "regression_1918")
                                           , GTUtilsWorkflowDesigner::textValue);
 
     //6. Run the scheme.
@@ -8552,14 +8542,15 @@ GUI_TEST_CLASS_DEFINITION( test_1946 ){
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Add tuxedo scheme from samples
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/"));
-    map.insert("Bowtie index basename", "NC_010473");
-    map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/accepted_hits.bam"));
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index/"));
+    map.insert("Bowtie index basename", "e_coli");
+    map.insert("Bowtie version", "Bowtie1");
+    map.insert("Input transcripts annotations", QDir().absoluteFilePath(testDir + "_common_data/e_coli/e_coli_1000.gff"));
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "No-new-transcripts"<<"Single-end"));
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<testDir +
-                                                      "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq1/exp_1_1.fastq")<<
-                                                      (QStringList()<<testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/fastq2/exp_2_1.fastq"), map));
+                                                      "_common_data/e_coli/e_coli_reads/e_coli_1_1.fastq")<<
+                                                      (QStringList()<<testDir + "_common_data/e_coli/e_coli_reads/e_coli_2_1.fastq"), map));
     GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
 //    3. fill all needed parameters and run schema
     GTUtilsWorkflowDesigner::runWorkflow(os);
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
index 0d8b229..9a62854 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1001_2000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.cpp
index 2730b76..610bf8a 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@
 #include <QWebFrame>
 #include <QWebView>
 #include <QWizard>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
@@ -49,10 +50,13 @@
 #include <U2View/DetView.h>
 #include <U2View/GSequenceGraphView.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 
 #include "../../workflow_designer/src/WorkflowViewItems.h"
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTDatabaseConfig.h"
+#include "GTGlobals.h"
 #include "GTTestsRegressionScenarios_1_1000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
 #include "GTUtilsAnnotationsTreeView.h"
@@ -60,7 +64,6 @@
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -78,39 +81,12 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
 #include "primitives/GTAction.h"
-#include <primitives/GTCheckBox.h>
-#include "system/GTClipboard.h"
-#include <primitives/GTComboBox.h>
-#include "system/GTFile.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
-#include <primitives/GTGroupBox.h>
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTListWidget.h>
 #include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTPlainTextEdit.h>
-#include <primitives/GTRadioButton.h>
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
-#include <primitives/GTSlider.h>
-#include <primitives/GTSpinBox.h>
-#include <primitives/GTTabWidget.h>
-#include <primitives/GTTableView.h>
-#include "utils/GTThread.h"
-#include <primitives/GTToolbar.h>
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTWidget.h>
-#include <base_dialogs/DefaultDialogFiller.h>
-#include "runnables/qt/EscapeClicker.h"
-#include <base_dialogs/MessageBoxFiller.h>
 #include "primitives/PopupChooser.h"
+#include "runnables/qt/EscapeClicker.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h"
@@ -129,6 +105,7 @@
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/GraphSettingsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h"
@@ -179,11 +156,10 @@
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 #include "runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h"
@@ -194,6 +170,32 @@
 #include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 #include "runnables/ugene/ugeneui/SelectDocumentFormatDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
+#include "system/GTClipboard.h"
+#include "system/GTFile.h"
+#include "utils/GTKeyboardUtils.h"
+#include "utils/GTThread.h"
+#include "utils/GTUtilsDialog.h"
+#include "utils/GTUtilsToolTip.h"
+
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTGroupBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include <primitives/GTPlainTextEdit.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWidget.h>
 
 namespace U2 {
 
@@ -898,7 +900,7 @@ GUI_TEST_CLASS_DEFINITION(test_0659){
 //    Write annotations worker is broken
 //    1. Open WD. Create simple scheme "read sequence"->"Write annotations"
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-//    2. Set "genbank" as output document format for "Write annotations" worker.
+//    2. Set "GenBank" as output document format for "Write annotations" worker.
     WorkflowProcessItem* read = GTUtilsWorkflowDesigner::addElement(os, "Read Sequence");
     WorkflowProcessItem* write = GTUtilsWorkflowDesigner::addElement(os, "Write Annotations");
     GTUtilsWorkflowDesigner::connect(os, read, write);
@@ -908,7 +910,7 @@ GUI_TEST_CLASS_DEFINITION(test_0659){
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, dataDir + "samples/Genbank/sars.gb");
     GTUtilsWorkflowDesigner::click(os, write);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir(sandBoxDir).absolutePath() + "/test_659", GTUtilsWorkflowDesigner::textValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: annotations has been written in single file
@@ -922,7 +924,7 @@ GUI_TEST_CLASS_DEFINITION(test_0659){
 // check csv format
     GTUtilsWorkflowDesigner::click(os, write);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir(sandBoxDir).absolutePath() +"/test_659_1", GTUtilsWorkflowDesigner::textValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "csv", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "CSV", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: annotations has been written in single file
@@ -934,7 +936,7 @@ GUI_TEST_CLASS_DEFINITION(test_0659){
 // check gff format
     GTUtilsWorkflowDesigner::click(os, write);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir(sandBoxDir).absolutePath() +"/test_659_2", GTUtilsWorkflowDesigner::textValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "gff", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GFF", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: annotations has been written in single file
@@ -1070,7 +1072,7 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
             CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
 
 //       Add created fragment.
-            GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "fragmentListWidget", dialog), "NC_004718 (sars.gb) Fragment (2000-9000) [7001 bp]");
+            GTListWidget::click(os, GTWidget::findExactWidget<QListWidget *>(os, "fragmentListWidget", dialog), "NC_004718 (sars.gb) Fragment (2000-9000) [core length - 7001 bp]");
             GTWidget::click(os, GTWidget::findWidget(os, "takeButton", dialog));
 
 //       Set "Make circular" option selected
@@ -1078,7 +1080,7 @@ GUI_TEST_CLASS_DEFINITION(test_0684) {
 
 //       The overhangs should be highlighted in green
             QTreeWidgetItem *item = GTTreeWidget::findItem(os, GTWidget::findExactWidget<QTreeWidget *>(os, "molConstructWidget", dialog),
-                                                            "NC_004718 (sars.gb) Fragment (2000-9000) [7001 bp]", NULL, 1);
+                                                            "NC_004718 (sars.gb) Fragment (2000-9000) [core length - 7001 bp]", NULL, 1);
             CHECK_SET_ERR(NULL != item, "Item is NULL");
 
             const QColor color1 = item->textColor(0);
@@ -1228,19 +1230,19 @@ GUI_TEST_CLASS_DEFINITION(test_0729){
 //    3) Click on "unset"
     GTUtilsWorkflowDesigner::click(os, item);
 //    Expected state: Dataset view opened
-    GTUtilsWorkflowDesigner::setDatasetInputFolder(os, dataDir + "samples/FASTA");
-//    4) Click "Add directory", select data/samples/Genbank
-    QListWidget* itemsArea = GTWidget::findExactWidget<QListWidget*>(os, "itemsArea");
-    GTListWidget::click(os, itemsArea, "FASTA", Qt::RightButton);
+	GTUtilsWorkflowDesigner::setDatasetInputFolder(os, dataDir + "samples/FASTA/*");
+//    4) Click "Add folder", select data/samples/FASTA
+//    QListWidget* itemsArea = GTWidget::findExactWidget<QListWidget*>(os, "itemsArea");
+//    GTListWidget::click(os, itemsArea, "FASTA", Qt::RightButton);
 //    5) Click on appeared item in the file list
 //    Expected state:
 //        the following widgets appears:
 //            Include mask, Exclude mask lineedits;
 //            Recursive checkbox
-    GTWidget::findWidget(os, "includeMaskEdit");
-    GTWidget::findWidget(os, "excludeMaskEdit");
-    GTWidget::findWidget(os, "recursiveBox");
-    GTWidget::click(os, GTUtilsMdi::activeWindow(os));
+ //   GTWidget::findWidget(os, "includeMaskEdit");
+ //   GTWidget::findWidget(os, "excludeMaskEdit");
+ //   GTWidget::findWidget(os, "recursiveBox");
+ //   GTWidget::click(os, GTUtilsMdi::activeWindow(os));
 
 }
 
@@ -1255,14 +1257,14 @@ GUI_TEST_CLASS_DEFINITION(test_0733) {
 
     //Expected state: Property editor appears, {parameters->Document format} is "fasta"
     QString format = GTUtilsWorkflowDesigner::getParameter(os, "Document format");
-    CHECK_SET_ERR("fasta" == format, "Wrong format");
+    CHECK_SET_ERR("FASTA" == format, "Wrong format");
 
     //3. Change {Parameters->Output file} to "result.gb".
     //Expected state: {Parameters->Output file} is "%some_path%/result.gb", {Parameters->Document format} is "fasta".
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "result.gb", GTUtilsWorkflowDesigner::textValue);
 
-    //4. Change {Parameters->Document Format} to "genbank" and press Enter.
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    //4. Change {Parameters->Document Format} to "GenBank" and press Enter.
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
 
     //Expected state: {Parameters->Output file} changes to "%some_path%/result.gb".
     QString url = GTUtilsWorkflowDesigner::getParameter(os, "utput file");
@@ -1496,7 +1498,7 @@ GUI_TEST_CLASS_DEFINITION(test_0776) {
     GTUtilsWorkflowDesigner::connect(os, search, write);
 
     GTUtilsWorkflowDesigner::click(os, write);
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", QDir(sandBoxDir).absolutePath() + "/test_0776.gb", GTUtilsWorkflowDesigner::textValue);
 
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -1563,12 +1565,12 @@ GUI_TEST_CLASS_DEFINITION(test_0779) {
     // The Read sequence element
     // The Write annotations element
     // 2. Connect the elements.
-    // 3. Switch the "File format" property of the Write annotations element from "genbank" (defualt) to "csv".
+    // 3. Switch the "File format" property of the Write annotations element from "GenBank" (defualt) to "csv".
     // 4. Click on the scheme area and you will get the crash.
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Read Sequence");
     GTUtilsWorkflowDesigner::addAlgorithm(os, "Write Annotations");
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "csv", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "CSV", GTUtilsWorkflowDesigner::comboValue);
     GTGlobals::sleep(500);
     GTUtilsWorkflowDesigner::connect(os, GTUtilsWorkflowDesigner::getWorker(os, "Read Sequence"), GTUtilsWorkflowDesigner::getWorker(os, "Write Annotations"));
 
@@ -1584,7 +1586,7 @@ GUI_TEST_CLASS_DEFINITION(test_0782){
 //    3. Press right mouse button in the graph area, choose {Graph -> Graph settings...}.
     QWidget* graphView = GTWidget::findWidget(os, "GSequenceGraphViewRenderArea");
     GTWidget::click(os, graphView);
-    QImage init = QPixmap::grabWidget(graphView).toImage();
+    QImage init = GTWidget::getImage(os, graphView);
     init.save("/home/vmalin/init", "BMP");
     class custom: public CustomScenario{
     public:
@@ -1600,7 +1602,7 @@ GUI_TEST_CLASS_DEFINITION(test_0782){
 //    4. In "Graph Settings" dialog change graph's color, then press "Cancel".
 
 //    Expected result: Graph's color didn't change.
-    QImage final = QPixmap::grabWidget(graphView).toImage();
+    QImage final = GTWidget::getImage(os, graphView);
     final.save("/home/vmalin/final", "BMP");
     CHECK_SET_ERR(final == init, "graph view changed");
 //    5. Repeat the third step, then check "Cutoff for minimum and maximum values".
@@ -1638,9 +1640,9 @@ GUI_TEST_CLASS_DEFINITION(test_0792) {
 //    2) Put "Read Sequence" worker on the scheme
     GTUtilsWorkflowDesigner::addElement(os, "Read Sequence");
 //    Expected state: Dataset view opened
-
-//    3) Click "Add directory", select data/samples/Genbank
-    GTUtilsWorkflowDesigner::setDatasetInputFolder(os, dataDir + "samples/Genbank");
+	
+//    3) Click "Add folder", select data/samples/Genbank
+    GTUtilsWorkflowDesigner::setDatasetInputFolder(os, dataDir + "samples/Genbank/*");
 //    4) Click on appeared item in the file list
     QWidget* datasetWidget = GTWidget::findWidget(os, "DatasetWidget");
     QListWidget* items = GTWidget::findExactWidget<QListWidget*>(os, "itemsArea", datasetWidget);
@@ -1659,7 +1661,7 @@ GUI_TEST_CLASS_DEFINITION(test_0798){
 //    1. File -> Open As.
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os,
         SequenceReadingModeSelectorDialogFiller::Merge));
-    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Genbank"));
+    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GenBank"));
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/798", "1.gb"));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2018,13 +2020,12 @@ GUI_TEST_CLASS_DEFINITION(test_0830) {
     //    Run
     QString outUrl = sandBoxDir + "830.ace";
     QFile(outUrl).remove();
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "830.ugenedb"));
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, outUrl));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList()
         << testDir + "_common_data/scenarios/CAP3/region2.fa"
         << testDir + "_common_data/scenarios/CAP3/region4.fa",
         outUrl));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Reads de novo assembly (with CAP3)...");
 
     //3) wait for task error, ensure that no output files are in the project
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -2263,6 +2264,7 @@ GUI_TEST_CLASS_DEFINITION(test_0846) {
 
 //    2. Add any annotations;
     GTUtilsAnnotationsTreeView::createAnnotation(os, "", "", "1..100");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Use popup menu {Export->Export annotations}
 //    4. Chose "csv" in combobox "File format"
@@ -2574,11 +2576,13 @@ GUI_TEST_CLASS_DEFINITION(test_0886) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "Gene.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
+	
     QStringList errors = GTUtilsLog::getErrors(os, l1);
     CHECK_SET_ERR(errors.size() == 1, "Wrong errors count 1");
     //CHECK_SET_ERR(errors[0].contains(""), " 1");
-
+	
     GTUtilsProjectTreeView::click(os, "Gene.fa");
+	GTGlobals::sleep();
     GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     GTLogTracer l2;
@@ -2587,9 +2591,10 @@ GUI_TEST_CLASS_DEFINITION(test_0886) {
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "Gene.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
+	GTGlobals::sleep();
     errors = GTUtilsLog::getErrors(os, l2);
     CHECK_SET_ERR(errors.size() == 2, "Wrong errors count 2");
-    GTGlobals::sleep(10000);
+    GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_0888) {
@@ -2745,7 +2750,7 @@ GUI_TEST_CLASS_DEFINITION(test_0899){
             //        1) opened dialog have File formats: {FASTA, FASTQ, GFF, Genbank, Vector NTI sequence}
             QComboBox* documentFormatComboBox = GTWidget::findExactWidget<QComboBox*>(os, "documentFormatComboBox", dialog);
             QStringList comboList;
-            comboList<<"FASTA"<<"FASTQ"<<"GFF"<<"Genbank"<<"Vector NTI sequence";
+            comboList<<"FASTA"<<"FASTQ"<<"GFF"<<"GenBank"<<"Vector NTI sequence";
             GTComboBox::checkValuesPresence(os, documentFormatComboBox, comboList);
 
             //        2) region: {whole sequence, visible, custom}
@@ -2754,7 +2759,7 @@ GUI_TEST_CLASS_DEFINITION(test_0899){
             regionComboList<<"Whole sequence"<<"Visible"<<"Custom region";
             GTComboBox::checkValuesPresence(os, region_type_combo, regionComboList);
 
-            GTComboBox::setIndexWithText(os, documentFormatComboBox, "Genbank");
+            GTComboBox::setIndexWithText(os, documentFormatComboBox, "GenBank");
             GTComboBox::setIndexWithText(os, region_type_combo, "Whole sequence");
 
             GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
@@ -3084,7 +3089,7 @@ GUI_TEST_CLASS_DEFINITION(test_0952) {
     //1. Start UGENE.
     //2. Press "Ctrl+O" or "Open" button on the main toolbar.
     //Expected state: "Select files to open..." dialog appears.
-    //3. Explore to the directory "data/samples/Genbank", then choose "CVU55762.gb" and "murine.gb" using Ctrl key
+    //3. Explore to the folder "data/samples/Genbank", then choose "CVU55762.gb" and "murine.gb" using Ctrl key
     //and press "Open" button.
     //Expected state: "Multiple sequence reading mode" dialog appears.
     //4. Set radio button "Merge sequence mode", set "New document name" if you need, then press "OK".
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
index 531486d..fea1b2b 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_1_1000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.cpp
index f16a03e..c63633c 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,9 +34,39 @@
 #include <QWebView>
 #include <QWizard>
 
+#include <GTGlobals.h>
+#include <base_dialogs/DefaultDialogFiller.h>
+#include <base_dialogs/GTFileDialog.h>
+#include <base_dialogs/MessageBoxFiller.h>
+#include <drivers/GTKeyboardDriver.h>
+#include <drivers/GTMouseDriver.h>
+#include <primitives/GTAction.h>
+#include <primitives/GTCheckBox.h>
+#include <primitives/GTComboBox.h>
+#include <primitives/GTLineEdit.h>
+#include <primitives/GTListWidget.h>
+#include <primitives/GTMenu.h>
+#include <primitives/GTRadioButton.h>
+#include <primitives/GTSlider.h>
+#include <primitives/GTSpinBox.h>
+#include <primitives/GTTabWidget.h>
+#include <primitives/GTTableView.h>
+#include <primitives/GTToolbar.h>
+#include <primitives/GTTreeWidget.h>
+#include <primitives/GTWebView.h>
+#include <primitives/GTWidget.h>
+#include <primitives/PopupChooser.h>
+#include <system/GTClipboard.h>
+#include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
+#include <utils/GTThread.h>
+#include <utils/GTUtilsDialog.h>
+#include <utils/GTUtilsToolTip.h>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ProjectViewModel.h>
 #include <U2Gui/ToolsMenu.h>
@@ -47,9 +77,11 @@
 #include <U2View/AnnotationsTreeView.h>
 #include <U2View/AssemblyNavigationWidget.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 
 #include "../../workflow_designer/src/WorkflowViewItems.h"
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTDatabaseConfig.h"
 #include "GTTestsRegressionScenarios_2001_3000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
@@ -58,7 +90,6 @@
 #include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
-#include "utils/GTUtilsDialog.h"
 #include "GTUtilsEscClicker.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
@@ -76,38 +107,9 @@
 #include "GTUtilsSharedDatabaseDocument.h"
 #include "GTUtilsTask.h"
 #include "GTUtilsTaskTreeView.h"
-#include "utils/GTUtilsToolTip.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "primitives/GTAction.h"
-#include <primitives/GTCheckBox.h>
-#include "system/GTClipboard.h"
-#include <primitives/GTComboBox.h>
-#include "system/GTFile.h"
-#include <base_dialogs/GTFileDialog.h>
-#include "GTGlobals.h"
-#include <drivers/GTKeyboardDriver.h>
-#include "utils/GTKeyboardUtils.h"
-#include <primitives/GTLineEdit.h>
-#include <primitives/GTListWidget.h>
-#include "primitives/GTMenu.h"
-#include <drivers/GTMouseDriver.h>
-#include <primitives/GTRadioButton.h>
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
-#include <primitives/GTSlider.h>
-#include <primitives/GTSpinBox.h>
-#include <primitives/GTTabWidget.h>
-#include <primitives/GTTableView.h>
-#include "utils/GTThread.h"
-#include <primitives/GTToolbar.h>
-#include <primitives/GTTreeWidget.h>
-#include <primitives/GTWebView.h>
-#include <primitives/GTWidget.h>
-#include <base_dialogs/DefaultDialogFiller.h>
 #include "runnables/qt/EscapeClicker.h"
-#include <base_dialogs/MessageBoxFiller.h>
-#include "primitives/PopupChooser.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/BuildIndexDialogFiller.h"
@@ -125,6 +127,7 @@
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
@@ -173,11 +176,10 @@
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 #include "runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h"
@@ -635,10 +637,11 @@ GUI_TEST_CLASS_DEFINITION( test_2026 ) {
     }
     GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(3000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: 5 sequences are selected
     CHECK_SET_ERR( 5 == GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os),
-        "Unexpected number of selected sequences");
+		QString("Unexpected number of selected sequences1. Got %1, Expected %2").arg(GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os)).arg(5));
     CHECK_SET_ERR( GTUtilsMSAEditorSequenceArea::isSequenceSelected(os, QString("Montana_montana")),
         "Expected sequence is not selected");
     CHECK_SET_ERR( GTUtilsMSAEditorSequenceArea::isSequenceSelected(os, QString("Zychia_baranovi")),
@@ -650,10 +653,11 @@ GUI_TEST_CLASS_DEFINITION( test_2026 ) {
     GTGlobals::sleep( 500 );
     GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTGlobals::sleep(3000);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected state: 6 sequences selected
     CHECK_SET_ERR( 6 == GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os),
-        "Unexpected number of selected sequences");
+		QString("Unexpected number of selected sequences2. Got %1, Expected %2").arg(GTUtilsMSAEditorSequenceArea::getSelectedSequencesNum(os)).arg(6));
     CHECK_SET_ERR( GTUtilsMSAEditorSequenceArea::isSequenceSelected(os, QString("Montana_montana")),
         "Expected sequence is not selected");
     CHECK_SET_ERR( GTUtilsMSAEditorSequenceArea::isSequenceSelected(os, QString("Zychia_baranovi")),
@@ -910,7 +914,7 @@ GUI_TEST_CLASS_DEFINITION( test_2089 )
     GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os, "!@#$%^&*()_+\";:?/", false));
 
     // 2. Open WD
-    // 3. Set any folder without write access as workflow output directory. Click OK.
+    // 3. Set any folder without write access as workflow output folder. Click OK.
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Workflow Designer...");
     GTGlobals::sleep();
 }
@@ -1504,11 +1508,11 @@ GUI_TEST_CLASS_DEFINITION( test_2192 ){
 //    3. Set valid input data.
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam/chrM.sorted.bam");
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.fa");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cmdline/call-variations/chrM.fa");
 //    4. Start the scheme.
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -1541,10 +1545,10 @@ GUI_TEST_CLASS_DEFINITION( test_2202 )
 //    1. Open Workflow Designer first time (e.g. remove UGENE.ini before it).
 //    Expected: the dialog appears.
 
-//    2. Write the path to the directory which does not exist.
+//    2. Write the path to the folder which does not exist.
 
 //    3. Click OK.
-//    Expected: the directory is created, there are no error messages about write access.
+//    Expected: the folder is created, there are no error messages about write access.
 
     QDir workflowOutputDir(testDir + "_common_data/scenarios/sandbox/regression_test_2202/1/2/3/4/");
     CHECK_SET_ERR(!workflowOutputDir.exists(), "Dir already exists");
@@ -1730,7 +1734,7 @@ GUI_TEST_CLASS_DEFINITION( test_2268 ) {
     toolDir.cdUp();
 #endif
 
-//    1. Forbid write access to the t-coffee directory (chmod 555 %t-coffee-dir%).
+//    1. Forbid write access to the t-coffee folder (chmod 555 %t-coffee-dir%).
     // Permissions will be returned to the original state, if UGENE won't crash.
     GTFile::setReadOnly(os, toolDir.path());
 
@@ -1760,20 +1764,40 @@ GUI_TEST_CLASS_DEFINITION( test_2314 ){
 //    1. Open 'COI.aln'
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Scroll sequence area to the last columns
     GTUtilsDialog::waitForDialog(os, new GoToDialogFiller(os, 604));
     GTKeyboardDriver::keyClick( 'g', Qt::ControlModifier);
     GTGlobals::sleep(500);
+
 //    3. Move to the right last column with mouse
     QWidget* consArea = GTWidget::findWidget(os, "consArea");
     QWidget* offset = GTWidget::findWidget(os, "msa_editor_offsets_view_widget_right");
     int w = offset->geometry().width();
     GTWidget::click(os, consArea, Qt::LeftButton, QPoint(consArea->geometry().right() - w - 10, consArea->geometry().height()/2));
     GTGlobals::sleep(500);
-//    Unexpected state: the column remains in the same place
+
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(603, 0));
+    QPoint p = GTMouseDriver::getMousePosition();
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(QPoint(p.x() + w, p.y()));
+    GTMouseDriver::release();
+
+//    Expected state: the column was moved
+    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLength(os) > 604, "The length of the alignement has not changed");
+
+    GTUtilsMsaEditor::undo(os);
+    GTGlobals::sleep();
+
 //    4. Move to the right any other region, that is close to the end of alignment
-//    Unexpected state: the region stands on the same place if mouse
-//    go beyond the right border of the alignment
+    GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(603, 5));
+    p = GTMouseDriver::getMousePosition();
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(QPoint(GTWidget::getWidgetCenter(os, offset).x(), p.y()));
+    GTMouseDriver::release();
+
+//    Expected state: the region is moved if mouse goes beyond the right border of the alignment
+    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getLength(os) > 604, "The length of the alignement has not changed");
 }
 
 GUI_TEST_CLASS_DEFINITION( test_2316 ) {
@@ -1847,26 +1871,25 @@ GUI_TEST_CLASS_DEFINITION( test_2270 ){
     GTUtilsLog::check(os, lt);
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2281 ){
+GUI_TEST_CLASS_DEFINITION(test_2281) {
     //1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-    QTabWidget* tabs = qobject_cast<QTabWidget*>(GTWidget::findWidget(os,"tabs"));
-    CHECK_SET_ERR(tabs!=NULL, "tabs widget not found");
+    QTabWidget *tabs = qobject_cast<QTabWidget *>(GTWidget::findWidget(os, "tabs"));
+    CHECK_SET_ERR(tabs != NULL, "tabs widget not found");
 
     //2. Click the "samples" bar. The samples hint is shown
-    GTTabWidget::setCurrentIndex(os,tabs,1);
+    GTTabWidget::setCurrentIndex(os, tabs, 1);
     GTGlobals::sleep(500);
-    QGraphicsView* sceneView = qobject_cast<QGraphicsView*>(GTWidget::findWidget(os,"sceneView"));
+    QGraphicsView *sceneView = qobject_cast<QGraphicsView *>(GTWidget::findWidget(os, "sceneView"));
 
-    QPixmap pixmap = QPixmap::grabWidget(sceneView, sceneView->rect());
-    QImage img = pixmap.toImage();
+    QImage img = GTWidget::getImage(os, sceneView);
 
+    const QColor yc = QColor(255, 255, 160);
     bool found = false;
-    for(int i=sceneView->rect().left(); i< sceneView->rect().right(); i+=10){
-        for(int j=sceneView->rect().top(); j< sceneView->rect().bottom(); j+=10){
-            QRgb rgb = img.pixel(QPoint(i,j));
-            QColor c(rgb);
-            QColor yc = QColor(255,255,160);
+    for (int i = sceneView->rect().left(); i < sceneView->rect().right(); i += 10) {
+        for (int j = sceneView->rect().top(); j < sceneView->rect().bottom(); j += 10) {
+            const QRgb rgb = img.pixel(QPoint(i,j));
+            const QColor c(rgb);
             if (c == yc){
                 found = true;
                 break;
@@ -1876,19 +1899,17 @@ GUI_TEST_CLASS_DEFINITION( test_2281 ){
     CHECK_SET_ERR(found, "hint not found");
 
     //3. Click the "elements" bar.
-    GTTabWidget::setCurrentIndex(os,tabs,0);
+    GTTabWidget::setCurrentIndex(os, tabs, 0);
     GTGlobals::sleep(500);
 
     //Expected: the samples hint is hidden
-    pixmap = QPixmap::grabWidget(sceneView, sceneView->rect());
-    img = pixmap.toImage();
+    img = GTWidget::getImage(os, sceneView);
     bool notFound = true;
-    for(int i=sceneView->rect().left(); i< sceneView->rect().right(); i+=10){
-        for(int j=sceneView->rect().top(); j< sceneView->rect().bottom(); j+=10){
-            QRgb rgb = img.pixel(QPoint(i,j));
-            QColor c(rgb);
-            QColor yc = QColor(255,255,160);
-            if (c == yc){
+    for (int i = sceneView->rect().left(); i < sceneView->rect().right(); i += 10) {
+        for (int j = sceneView->rect().top(); j < sceneView->rect().bottom(); j += 10) {
+            const QRgb rgb = img.pixel(QPoint(i, j));
+            const QColor c(rgb);
+            if (c == yc) {
                 notFound = false;
                 break;
             }
@@ -1896,17 +1917,14 @@ GUI_TEST_CLASS_DEFINITION( test_2281 ){
     }
 
     CHECK_SET_ERR(notFound, "hint is found");
-    GTGlobals::sleep(1000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2292) {
     QString destName = testDir + "_common_data/ugenedb/example-alignment.ugenedb";
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, destName));
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "There is opened view with destination file"));
     GTFileDialog::openFile(os, testDir + "_common_data/ugenedb/", "example-alignment.ugenedb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_2292.ace.ugenedb"));
     GTFileDialog::openFile(os, dataDir + "samples/ACE", "K26.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2060,7 +2078,7 @@ GUI_TEST_CLASS_DEFINITION( test_2285 ){
     CHECK_SET_ERR(visableNamesNum == 17,
                   QString("unexpected visable sequences number. Expected 17, actual: %1").arg(visableNamesNum));
 //    3. Expand the collapsed group ("Mecopoda_elongata__Ishigaki__J" is the head sequence).
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Mecopoda_elongata__Ishigaki__J");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Mecopoda_elongata__Ishigaki__J");
     GTGlobals::sleep(1000);
 
 //    4. Set the cursor to the 14 line (the "Mecopoda_elongata__Ishigaki__J" sequence), 45 base.
@@ -2523,7 +2541,7 @@ GUI_TEST_CLASS_DEFINITION( test_2377 ) {
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, assemblyReaderName ) );
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/sambroken_without_reads.sam" );
+    GTUtilsWorkflowDesigner::setDatasetInputFile( os, testDir + "_common_data/sam/broken_without_reads.sam" );
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, assemblyWriterName ) );
     GTMouseDriver::click();
@@ -2646,9 +2664,7 @@ GUI_TEST_CLASS_DEFINITION( test_2382 ) {
 
     QString sandboxDir = testDir + "_common_data/scenarios/sandbox/";
     QString assDocName = "test_2382.ugenedb";
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandboxDir + assDocName));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandboxDir + assDocName));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "capres4.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2666,9 +2682,7 @@ GUI_TEST_CLASS_DEFINITION( test_2382_1 ) {
 
     QString sandboxDir = testDir + "_common_data/scenarios/sandbox/";
     QString assDocName = "test_2382_1.ugenedb";
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandboxDir + assDocName));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandboxDir + assDocName));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "test_new.cap.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2726,9 +2740,7 @@ GUI_TEST_CLASS_DEFINITION( test_2400 ){
 //    1. Import samples/ACE/k26.ace to  ugenedb (via open file)
     QString fileName = "2400.ugenedb";
     QString ugenedb = sandBoxDir + fileName;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, ugenedb));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: assembly view for Contig_1 opened with refrence sequence added to it
@@ -2743,15 +2755,12 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
     QString sandbox = testDir + "_common_data/scenarios/sandbox/";
     QString fileName = "2401.ugenedb";
     QString ugenedb = sandbox + fileName;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, ugenedb));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     // Expected: the file is imported without errors, the assembly is opened.
     // 4. Close the project.
-    GTUtilsDialog::waitForDialog(os, new SaveProjectDialogFiller(os, QDialogButtonBox::No));
 #ifdef Q_OS_MAC
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Close project");
 #else
@@ -2763,9 +2772,7 @@ GUI_TEST_CLASS_DEFINITION( test_2401 ) {
     // 6. Set the same ugenedb path for import: "_common_data/scenarios/sandbox/2401.ugenedb".
     // 7. Click OK.
     // 8. Click Append.
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, ugenedb, ConvertAceToSqliteDialogFiller::APPEND));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, ugenedb));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_11_(error).ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -2898,7 +2905,7 @@ GUI_TEST_CLASS_DEFINITION( test_2406 ) {
 
 //    3. Change the file format to the genbank
 //    Expected: TEST.gb file name appears in the output file name field
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
 
     const QString expectedPostValue = "TEST.gb";
     const QString resultPostValue = GTUtilsWorkflowDesigner::getParameter(os, "Output file", true);
@@ -3094,7 +3101,7 @@ GUI_TEST_CLASS_DEFINITION(test_2437) {
     FormatDBSupportRunDialogFiller::Parameters p;
     p.inputFilePath = dataDir + "samples/FASTA/human_T1.fa";
     p.alphabetType = FormatDBSupportRunDialogFiller::Parameters::Nucleotide;
-    p.outputDirPath = sandBoxDir + "test_2437";
+	p.outputDirPath = QDir(sandBoxDir + "test_2437").absolutePath();
     QDir().mkpath(p.outputDirPath);
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, p));
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST make database...");
@@ -3213,29 +3220,28 @@ GUI_TEST_CLASS_DEFINITION(test_2459) {
     GTWidget::click(os, GTUtilsMSAEditorSequenceArea::getSequenceArea(os), Qt::RightButton);
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2460 ) {
+GUI_TEST_CLASS_DEFINITION(test_2460) {
     //1. Open "COI.aln".
-    //2. Remove all sequences except the first one.
-    //3. Align the result one-line-msa by kalign with default values.
-    //Expected state: Kalign task finishes with error. Redo button is disabled.
 
     GTLogTracer l;
-    GTFileDialog::openFile(os, dataDir+"samples/CLUSTALW/", "COI.aln");
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
+    //2. Remove all sequences except the first one.
     QStringList list = GTUtilsMSAEditorSequenceArea::getNameList(os);
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(-5, 1), QPoint(-5, list.size() - 1));
-    GTKeyboardDriver::keyPress(Qt::Key_Delete);
+    GTUtilsMsaEditor::removeRows(os, 1, list.size() - 1);
 
-    GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(-5, 0));
+    GTGlobals::sleep(500);
 
+    //3. Align the result one-line-msa by kalign with default values.
     GTUtilsDialog::waitForDialog(os, new KalignDialogFiller(os));
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << MSAE_MENU_ALIGN << "align_with_kalign"));
     GTMouseDriver::click(Qt::RightButton);
 
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    CHECK_SET_ERR( l.hasError() == true, "There is no error in the log");
+    //Expected state: Kalign task finishes with error. Redo button is disabled.
+    CHECK_SET_ERR(l.hasError() == true, "There is no error in the log");
 
     QAbstractButton *redo= GTAction::button(os,"msa_action_redo");
     CHECK_SET_ERR( NULL != redo, "There is no REDO button");
@@ -3251,7 +3257,7 @@ GUI_TEST_CLASS_DEFINITION(test_2470) {
     class OkClicker : public Filler {
     public:
         OkClicker(HI::GUITestOpStatus& _os, const QString &dbPath, const QString &outputPath)
-            : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath){};
+            : Filler(_os, "BlastDBCmdDialog"), dbPath(dbPath), outputPath(outputPath){}
         virtual void run() {
             QWidget *w = QApplication::activeWindow();
             CHECK(NULL != w, );
@@ -3349,7 +3355,7 @@ GUI_TEST_CLASS_DEFINITION( test_2475 ) {
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Find Splice Junctions with TopHat"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setParameter(os, "Bowtie index directory", testDir + "_common_data/bowtie2/index", GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Bowtie index folder", testDir + "_common_data/bowtie2/index", GTUtilsWorkflowDesigner::textValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Bowtie index basename", "human_T1_cutted", GTUtilsWorkflowDesigner::textValue);
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
@@ -3518,29 +3524,29 @@ GUI_TEST_CLASS_DEFINITION( test_2519 ) {
     GTGlobals::sleep(5000);
 }
 
-GUI_TEST_CLASS_DEFINITION( test_2538 ){
+GUI_TEST_CLASS_DEFINITION( test_2538 ) {
 //    1. Open file "_common_data/scenarios/tree_view/COI.nwk"
     GTFileDialog::openFile(os, dataDir + "/samples/Newick/", "COI.nwk");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
 //    2. Call context menu on node just near root. Click "Collapse"
-    GTGlobals::sleep(1000);
     GTMouseDriver::moveTo(GTUtilsPhyTree::getGlobalCoord(os, GTUtilsPhyTree::getNodes(os).at(1)));
     GTMouseDriver::click();
     GTGlobals::sleep(1000);
 
-    QWidget* treeView = GTWidget::findWidget(os, "treeView");
+    QWidget *treeView = GTWidget::findWidget(os, "treeView");
 
-    QPixmap pixmap = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage initImg = pixmap.toImage();
+    const QImage initImg = GTWidget::getImage(os, treeView);
 
     GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
+
 //    3. Call context menu on node just near root. Click "Expand"
     GTMouseDriver::doubleClick();
     GTGlobals::sleep(1000);
+
 //    Expected state: tree has the same view as at the beginning
-    pixmap = QPixmap::grabWidget(treeView, treeView->rect());
-    QImage finalImg = pixmap.toImage();
+    const QImage finalImg = GTWidget::getImage(os, treeView);
 
     //images have several pixels differ. so sizes are compared
     CHECK_SET_ERR(initImg.size() == finalImg.size(), "different images");
@@ -3844,11 +3850,11 @@ GUI_TEST_CLASS_DEFINITION( test_2568 ){
             GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/Assembly/chrM.fa"));
             QWidget* browse = GTWidget::findWidget(os, "browseButton", GTWidget::findWidget(os, "Reference sequence file labeledWidget", dialog));
             GTWidget::click(os, browse);
-            //    Expected: the file is chosen. (The file's directory is DIR)
+            //    Expected: the file is chosen. (The file's folder is DIR)
 
             //    5. Click to browse a BAM/SAM file
 
-            //    Expected: the open file dialog is opened with the directory DIR
+            //    Expected: the open file dialog is opened with the folder DIR
             GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, new customFileDialog()));
             GTWidget::click(os, GTWidget::findWidget(os, "addFileButton"));
 
@@ -3869,11 +3875,11 @@ GUI_TEST_CLASS_DEFINITION( test_2569 ){
 //    3. Set valid input data.
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam/chrM.sorted.bam");
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.fa");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cmdline/call-variations/chrM.fa");
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    4. Click "External Tools" on the appeared Dashboard.
@@ -4279,10 +4285,10 @@ GUI_TEST_CLASS_DEFINITION(test_2632){
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
 
-            //    3. Set bowtie index and a known transcript file.(_common_data/NIAID_pipelines/tuxedo)
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index/chr6.1.ebwt"));
+            //    3. Set bowtie index and a known transcript file.
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bowtie/index/e_coli.1.ebwt"));
             GTWidget::click(os, GTWidget::findButtonByText(os, "Select\nbowtie index file", dialog));
-            GTUtilsWizard::setParameter(os, "Known transcript file", QVariant(QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/hg19_chr6_refFlat_noRandomHapUn.gtf")));
+            GTUtilsWizard::setParameter(os, "Known transcript file", QVariant(QDir().absoluteFilePath(testDir + "_common_data/gtf/valid.gtf")));
 
             //    4. Revern to first page, then click next again
             //    UGENE crashes
@@ -4303,13 +4309,13 @@ GUI_TEST_CLASS_DEFINITION(test_2638){
 //    1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Select "tuxedo" sample
-//    3. Set proper input data(_common_data/NIAID_pipelines/tuxedo).
+//    3. Set proper input data.
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index"));
-    map.insert("Bowtie index basename", "chr6");
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index"));
+    map.insert("Bowtie index basename", "e_coli");
     map.insert("Bowtie version", "Bowtie1");
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<
-                                                     testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq"),
+                                                     testDir + "_common_data/e_coli/e_coli_1000.fastq"),
                                                       map));
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "Single-sample"<<"Single-end"));
@@ -4330,7 +4336,7 @@ GUI_TEST_CLASS_DEFINITION(test_2638){
     GTUtilsDashboard::click(os, GTUtilsDashboard::findElement(os, "Find Splice Junctions with TopHat", "LI"));
     GTUtilsDashboard::click(os, GTUtilsDashboard::findElement(os, "index", "BUTTON"));
     GTUtilsTaskTreeView::waitTaskFinished(os);
-//    Expected state: "Bowtie index directory" parameter's value is folder, it is not tried to be opened bu UGENE when clicking
+//    Expected state: "Bowtie index folder" parameter's value is folder, it is not tried to be opened bu UGENE when clicking
     QString finalTitle = GTUtilsMdi::activeWindowTitle(os);
     CHECK_SET_ERR(initTitle == finalTitle, "New window was opened unexpectidly: " + finalTitle);
 }
@@ -4356,7 +4362,7 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
 //    1. Open WD
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
 //    2. Select "tuxedo" sample
-//    3. Set proper input data(_common_data/NIAID_pipelines/tuxedo).
+//    3. Set proper input data
     QString expected;
 #ifdef Q_OS_MAC
     expected = "tophat-2.0.9/tophat -p 94 --output-dir";
@@ -4365,11 +4371,11 @@ GUI_TEST_CLASS_DEFINITION(test_2640){
 #endif
     GTLogTracer l(expected);
     QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index"));
-    map.insert("Bowtie index basename", "chr6");
+    map.insert("Bowtie index folder", QDir().absoluteFilePath(testDir + "_common_data/bowtie/index"));
+    map.insert("Bowtie index basename", "e_coli");
     map.insert("Bowtie version", "Bowtie1");
     GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<
-                                                     testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq"),
+                                                     testDir + "_common_data/e_coli/e_coli_1000.fastq"),
                                                       map));
     GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
                                                                    "Single-sample"<<"Single-end"));
@@ -4500,11 +4506,11 @@ GUI_TEST_CLASS_DEFINITION( test_2662 ){
 //    3. Set valid input data.
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Assembly (BAM/SAM)"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.sorted.bam");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bam/chrM.sorted.bam");
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter(os, "Read Sequence"));
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chrM/chrM.fa");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/cmdline/call-variations/chrM.fa");
 //    4. Start the scheme.
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4611,7 +4617,7 @@ GUI_TEST_CLASS_DEFINITION(test_2701) {
 //    3. Select vector format (svg, pdf or ps)
 //    Expected state: Quality tuning slider is not showed.
 
-//    4. Select jpeg format
+//    4. Select jpg format
 //    Expected state: Quality tuning slider is showed.
     GTFileDialog::openFile(os, dataDir + "/samples/Genbank/", "CVU55762.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -4630,18 +4636,16 @@ GUI_TEST_CLASS_DEFINITION(test_2701) {
             QComboBox* formatsBox = dialog->findChild<QComboBox*>("formatsBox");
             QWidget* spin = dialog->findChild<QSpinBox*>("qualitySpinBox");
 
-            GTComboBox::setIndexWithText(os, formatsBox, "svg");
+            GTComboBox::setIndexWithText(os, formatsBox, "SVG");
             CHECK_SET_ERR( !spin->isVisible(), "Quality spin box is visible!");
-            GTComboBox::setIndexWithText(os, formatsBox, "pdf");
+            GTComboBox::setIndexWithText(os, formatsBox, "PDF");
             CHECK_SET_ERR( !spin->isVisible(), "Quality spin box is visible!");
-            GTComboBox::setIndexWithText(os, formatsBox, "ps");
+            GTComboBox::setIndexWithText(os, formatsBox, "PS");
             CHECK_SET_ERR( !spin->isVisible(), "Quality spin box is visible!");
 
-            GTComboBox::setIndexWithText(os, formatsBox, "jpg");
-            CHECK_SET_ERR( spin->isVisible(), "Quality spin box not visible!");
-            GTComboBox::setIndexWithText(os, formatsBox, "jpeg");
+            GTComboBox::setIndexWithText(os, formatsBox, "JPG");
             CHECK_SET_ERR( spin->isVisible(), "Quality spin box not visible!");
-
+            
             QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox", dialog));
             CHECK_SET_ERR(box != NULL, "buttonBox is NULL");
             QPushButton* button = box->button(QDialogButtonBox::Cancel);
@@ -4736,10 +4740,15 @@ GUI_TEST_CLASS_DEFINITION(test_2713) {
     point.setY(point.y() + 1);
     GTMouseDriver::moveTo(point);
     GTMouseDriver::click();
+    QPoint endPoint = GTWidget::getWidgetCenter(os, GTUtilsAnnotationsTreeView::getTreeWidget(os));
 
+#ifdef Q_OS_MAC
+    GTMouseDriver::dragAndDrop(point, endPoint);
+#else
     GTMouseDriver::press();
-    GTMouseDriver::moveTo(GTWidget::getWidgetCenter(os, GTUtilsAnnotationsTreeView::getTreeWidget(os)));
+    GTMouseDriver::moveTo(endPoint);
     GTMouseDriver::release();
+#endif
 
 //    5. Open file {data/samples/Genbank/murine.gb} with text editor, then make some modification and save file
 //    Expected state: dialog about detected file modification has appeared in UGENE window
@@ -4778,7 +4787,7 @@ GUI_TEST_CLASS_DEFINITION(test_2721){
     class custom : public CustomScenario {
     public:
         void run(HI::GUITestOpStatus &os) {
-        //Expected state: wizard appeared - on the first page "Cistrome data directory" is set to "data/cistrome".
+        //Expected state: wizard appeared - on the first page "Cistrome data folder" is set to "data/cistrome".
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR(dialog!=NULL, "activeModalWidget is NULL");
 
@@ -4815,17 +4824,17 @@ GUI_TEST_CLASS_DEFINITION(test_2726) {
 
 GUI_TEST_CLASS_DEFINITION(test_2729) {
 //    1. Open {_common_data/fasta/AMINO.fa}
-//    Expected state: there is a "Graphs" button on the sequence toolbar, it is enabled.
+//    Expected state: there is no a "Graphs" button on the sequence toolbar for amino, it is invisible and disabled.
     GTFileDialog::openFile(os, testDir + "_common_data/fasta/", "AMINO.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QAbstractButton *graphsButton = GTAction::button(os, "GraphMenuAction", GTUtilsSequenceView::getSeqWidgetByNumber(os));
     CHECK_SET_ERR(NULL != graphsButton, "Graphs button is NULL");
-    CHECK_SET_ERR(graphsButton->isEnabled(), "Graphs button is unexpectedly disabled");
+    CHECK_SET_ERR(!graphsButton->isEnabled(), "Graphs button is unexpectedly enabled");
 
 //    2. Click the "Graphs" button.
 //    Expected state: menu is shown.
-    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()));
-    GTWidget::click(os, graphsButton);
+//    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()));
+//    GTWidget::click(os, graphsButton);
 
     GTGlobals::sleep();
 }
@@ -4976,7 +4985,7 @@ GUI_TEST_CLASS_DEFINITION(test_2761_2) {
             customFiller(HI::GUITestOpStatus &os): ExtractSelectedAsMSADialogFiller(os,testDir + "_common_data/scenarios/sandbox/test_2761_2/2761.aln",
                                                            QStringList() << "Bicolorana_bicolor_EF540830" << "Roeseliana_roeseli"){}
             void run(){
-                GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Directory to save does not exist"));
+                GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok, "Folder to save does not exist"));
                 ExtractSelectedAsMSADialogFiller::run();
                 GTGlobals::sleep(1000);
                 GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Cancel);
@@ -5506,18 +5515,18 @@ GUI_TEST_CLASS_DEFINITION(test_2887) {
 
 GUI_TEST_CLASS_DEFINITION(test_2891) {
     // 1. Open file "data/samples/workflow_samples/NGS/cistrome/chip_seq.uwl"
-    // 2. Set input file for the "Read Tags" element to "test/_common_data/NIAID_pipelines/Chip-seq/input_data/chr2.bed"
+    // 2. Set input file for the "Read Tags" element to "test/_common_data/bed/valid_input/tophat_output.bed"
     // 3. Press the "Validate workflow" button on the main toolbar
     // Expected state: the message box about workflow errors has appeared. The "Error list" tab has appeared below the workflow
     // 4. Press "OK"
     // Expected state: there is no messages about the "Read tags" element on the "Error list" tab
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, dataDir + "/workflow_samples/NGS/cistrome/", "chip_seq.uwl");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Read Tags");
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Chip-seq/input_data/chr2.bed");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/bed/valid_input/tophat_output.bed");
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTWidget::click(os,GTAction::button(os, "Validate workflow"));
@@ -5528,18 +5537,18 @@ GUI_TEST_CLASS_DEFINITION(test_2891) {
 }GUI_TEST_CLASS_DEFINITION(test_2891_1) {
 
     // 1. Open file "data/samples/workflow_samples/NGS/cistrome/chip_seq.uwl"
-    // 2. Set input file for the "Read Tags" element to "test/_common_data/NIAID_pipelines/Chip-seq/input_data/some_image.png"
+    // 2. Set input file for the "Read Tags" element to "test/_common_data/regression/1587/some_image.png"
     // 3. Press the "Validate workflow" button on the main toolbar
     // Expected state: the message box about workflow errors has appeared. The "Error list" tab has appeared below the workflow
     // 4. Press "OK"
     // Expected state: there is a warning about possible incompatibilities of the "Read tags" element on the "Error list" tab
-    GTUtilsDialog::waitForDialog(os, new StartupDialogFiller(os));
+    GTUtilsDialog::waitForDialogWhichMayRunOrNot(os, new StartupDialogFiller(os));
     GTFileDialog::openFile(os, dataDir + "/workflow_samples/NGS/cistrome/", "chip_seq.uwl");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::click(os, "Read Tags");
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/NIAID_pipelines/Chip-seq/input_data/some_image.png");
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/regression/1587/some_image.png");
 
     GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTWidget::click(os,GTAction::button(os, "Validate workflow"));
@@ -5667,11 +5676,11 @@ GUI_TEST_CLASS_DEFINITION(test_2899){
                 GTUtilsWizard::clickButton(os, GTUtilsWizard::Back);
             }
 
-            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index/NC_010473.1.bt2"));
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/bowtie2/index/human_T1_cutted.2.bt2"));
             GTWidget::click(os, GTWidget::findButtonByText(os, "Select\nbowtie index file", dialog));
             //    Expected state: index is set if it is valid (file has valid extension), no crash
-            bool basename = GTUtilsWizard::getParameter(os, "Bowtie index basename").toString() == "NC_010473";
-            bool dir = GTUtilsWizard::getParameter(os, "Bowtie index directory").toString().contains("_common_data/NIAID_pipelines/tuxedo_pipeline/data/test_0004/bowtie2_index");
+            bool basename = GTUtilsWizard::getParameter(os, "Bowtie index basename").toString() == "human_T1_cutted";
+            bool dir = GTUtilsWizard::getParameter(os, "Bowtie index folder").toString().contains("_common_data/bowtie2/index");
             CHECK_SET_ERR(basename, "unexpected basename");
             CHECK_SET_ERR(dir, "unexpected dir");
             GTUtilsWizard::clickButton(os, GTUtilsWizard::Cancel);
@@ -5982,9 +5991,7 @@ GUI_TEST_CLASS_DEFINITION(test_2929){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2930){
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_2930"));
+	GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_2930"));
     GTFileDialog::openFile(os, dataDir+"samples/ACE", "K26.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -5995,9 +6002,7 @@ GUI_TEST_CLASS_DEFINITION(test_2930){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_2931){
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-        (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_2931"));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_2931"));
     GTFileDialog::openFile(os, dataDir+"samples/ACE", "K26.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -6195,12 +6200,16 @@ GUI_TEST_CLASS_DEFINITION(test_2972){
     GTUtilsTaskTreeView::waitTaskFinished(os);
 //    2. Click the menu Tools -> HMMER tools -> HMM3 -> Search with HMM3 phmmer.
     GTUtilsDialog::waitForDialog(os, new UHMM3PhmmerDialogFiller(os, dataDir + "samples/Newick/COI.nwk"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "HMMER tools" << "Search with HMMER3 phmmer...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "HMMER tools" << "Search with phmmer...");
     GTGlobals::sleep();
 
     CHECK_SET_ERR(l.hasError(), "no error in log");
     QString error = l.getError();
-    QString expectedError = "No dna sequence objects found in document querySeq sequence";
+#ifdef Q_OS_WIN
+    QString expectedError = "Task {Search with phmmer} finished with error: Subtask {PHMMER search tool} is failed";
+#else
+    QString expectedError = "is empty or misformatted";
+#endif
 
     CHECK_SET_ERR(error.contains(expectedError), "actual error is " + error);
 //    3. Choose the query sequence file: any non-sequence format file (e.g. *.mp3).
@@ -6234,7 +6243,7 @@ GUI_TEST_CLASS_DEFINITION(test_2981) {
 //    2. Click a "Build Tree" button on the main toolbar.
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_3276_COI.wnk", 0, 0, true));
     GTWidget::click(os, GTAction::button(os, "Build Tree"));
-    GTGlobals::sleep(1000);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
 //    Expected state: a "Build Phyligenetic Tree" dialog appears.
 
 //    3. Set any acceptable path and build a tree with default parameters.
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
index 3dc82ee..e072efb 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_2001_3000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.cpp
index e70f756..a190d00 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,10 +29,12 @@
 #include <QProgressBar>
 #include <QPushButton>
 #include <QTableWidget>
+#include <QThreadPool>
 #include <QWebElement>
 #include <QWebFrame>
 #include <QWebView>
 #include <QWizard>
+#include <QTextStream>
 
 #include <GTGlobals.h>
 #include <base_dialogs/DefaultDialogFiller.h>
@@ -67,6 +69,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ProjectViewModel.h>
 #include <U2Gui/ToolsMenu.h>
@@ -78,9 +81,11 @@
 #include <U2View/AssemblyNavigationWidget.h>
 #include <U2View/DetView.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorNameList.h>
+#include <U2View/MaEditorNameList.h>
 
 #include "../../workflow_designer/src/WorkflowViewItems.h"
+#include "api/GTSequenceReadingModeDialog.h"
+#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "GTDatabaseConfig.h"
 #include "GTTestsRegressionScenarios_3001_4000.h"
 #include "GTUtilsAnnotationsHighlightingTreeView.h"
@@ -108,8 +113,6 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-#include "api/GTSequenceReadingModeDialog.h"
-#include "api/GTSequenceReadingModeDialogUtils.h"
 #include "runnables/qt/EscapeClicker.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AppSettingsDialogFiller.h"
@@ -128,6 +131,7 @@
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindTandemsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PositionSelectorFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h"
@@ -164,6 +168,7 @@
 #include "runnables/ugene/plugins/external_tools/ClustalOSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/TCoffeeDailogFiller.h"
 #include "runnables/ugene/plugins/weight_matrix/PwmBuildDialogFiller.h"
@@ -174,11 +179,10 @@
 #include "runnables/ugene/plugins/workflow_designer/StartupDialogFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins/workflow_designer/WorkflowMetadialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/clustalw/ClustalWDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3PhmmerDialogFiller.h"
-#include "runnables/ugene/plugins_3rdparty/hmm3/UHMM3SearchDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/kalign/KalignDialogFiller.h"
+#include "runnables/ugene/plugins_3rdparty/MAFFT/MAFFTSupportRunDialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/primer3/Primer3DialogFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
 #include "runnables/ugene/ugeneui/ConvertAceToSqliteDialogFiller.h"
@@ -209,7 +213,7 @@ GUI_TEST_CLASS_DEFINITION(test_3006){
 //    Expected state: the sequence list should be sorted, collapsing should be updated
     CHECK_SET_ERR(GTUtilsMsaEditor::isSequenceCollapsed(os, "Mecopoda_elongata__Sumatra_"),
                   "2 Mecopoda_elongata__Sumatra_ is not collapsed");
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Mecopoda_elongata__Ishigaki__J");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Mecopoda_elongata__Ishigaki__J");
     CHECK_SET_ERR(!GTUtilsMsaEditor::isSequenceCollapsed(os, "Mecopoda_elongata__Sumatra_"),
                   "3 Mecopoda_elongata__Sumatra_ is unexpectidly collapsed");
 
@@ -729,10 +733,7 @@ GUI_TEST_CLASS_DEFINITION(test_3126) {
 //    Expected: the file is imported, UGENE does not crash.
     GTLogTracer l;
 
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller
-                                 (os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os,
-                                                                        sandBoxDir + "test_3126"));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_3126"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_1.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -1158,15 +1159,12 @@ GUI_TEST_CLASS_DEFINITION(test_3170) {
 
 GUI_TEST_CLASS_DEFINITION(test_3175) {
     // 1. Open "_common_data/scenarios/msa/ma.aln".
-    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/", "ma.aln");
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTGlobals::sleep(200);
+
     // Expected: the first sequence is "TAAGACTTCTAA".
-    GTUtilsMSAEditorSequenceArea::selectArea( os, QPoint( 0, 0 ), QPoint( 12, 0 ) );
-    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
-    GTGlobals::sleep(200);
-    const QString selectionContent = GTClipboard::text( os );
-    CHECK_SET_ERR( "TAAGACTTCTAA" == selectionContent, "MSA changing is failed" );
+    const QString firstSequence = GTUtilsMSAEditorSequenceArea::getSequenceData(os, 0);
+    CHECK_SET_ERR("TAAGACTTCTAA" == firstSequence, "MSA changing is failed");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3180) {
@@ -1520,7 +1518,7 @@ GUI_TEST_CLASS_DEFINITION(test_3229){
     QString s = table.toInnerXml();
     int i = s.count("test.fa");
 
-    CHECK_SET_ERR( i==4, "unexpected table content: " + s);
+    CHECK_SET_ERR( i==3, "unexpected table content: " + s);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3245) {
@@ -1910,7 +1908,7 @@ GUI_TEST_CLASS_DEFINITION(test_3279){
     QString num1 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 1);
     QString num3 = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 3);
     CHECK_SET_ERR(num1 == "19%", "unexpected sumilarity value an line 1: " + num1);
-    CHECK_SET_ERR(num3 == "11%", "unexpected sumilarity value an line 3: " + num3);
+    CHECK_SET_ERR(num3 == "12%", "unexpected sumilarity value an line 3: " + num3);
 //    Current state: the addition column is shown, it contains sequence names.
 
 
@@ -1935,7 +1933,7 @@ GUI_TEST_CLASS_DEFINITION(test_3287) {
     ImageExportFormFiller::Parameters params;
     params.graphOverviewChecked = false;
     params.fileName = testDir + "_common_data/scenarios/sandbox/test_3287.bmp";
-    params.format = "bmp";
+    params.format = "BMP";
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export as image"));
     GTUtilsDialog::waitForDialog(os, new ImageExportFormFiller(os, params));
 
@@ -2165,6 +2163,27 @@ GUI_TEST_CLASS_DEFINITION(test_3318) {
     CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::isSequenceHightighted(os, "human_T1 (UCSC April 2002 chr7:115977709-117855134)"), "Unexpected reference sequence");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_3319) {
+    // 1. Open "data/samples/FASTA/human_T1.fa".
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Reverse complement sequence
+    GTKeyboardDriver::keyClick('r', Qt::ControlModifier | Qt::ShiftModifier);
+    GTGlobals::sleep(500);
+
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, 51, 102));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
+    GTMenu::showContextMenu(os, GTUtilsMdi::activeWindow(os));
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick('c', Qt::ControlModifier );
+    GTGlobals::sleep(400);
+    const QString clipboardText = GTClipboard::text( os );
+
+    CHECK_SET_ERR(clipboardText == "TTTAAACCACAGGTCATGACCCAGTAGATGAGGAAATTGGTTTAGTGGTTTA", "unexpected text in clipboard: " + clipboardText);
+    GTGlobals::sleep(500);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_3321){
 //    Open sequence
     GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
@@ -2411,7 +2430,7 @@ GUI_TEST_CLASS_DEFINITION(test_3348) {
 
     AVAnnotationItem *annotation = dynamic_cast<AVAnnotationItem *>(generalItem);
     CHECK_SET_ERR(NULL != annotation, "Annotation tree item not found");
-    CHECK_SET_ERR("76" == annotation->annotation->findFirstQualifierValue("repeat_homology(%)"), "Annotation qualifier not found");
+    CHECK_SET_ERR("76" == annotation->annotation->findFirstQualifierValue("repeat_identity"), "Annotation qualifier not found");
 
     GTUtilsMdi::click(os, GTGlobals::Close);
     GTMouseDriver::click();
@@ -2439,7 +2458,7 @@ GUI_TEST_CLASS_DEFINITION(test_3357) {
 GUI_TEST_CLASS_DEFINITION(test_3373) {
 //    1. Launch WD
 //    2. Create the following workflow: "Read Sequence" -> "Reverse Complement" -> "Write Sequence"
-//    3. Set output format "genbank" (to prevent warnings about annotation support) and the "result.gb" output file name
+//    3. Set output format "GenBank" (to prevent warnings about annotation support) and the "result.gb" output file name
 //    4. Set input file "test/_common_data/fasta/seq1.fa"
 //    5. Run the workflow
 //    Expected state: workflow is successfully finished. "result.gb" contains reverse complement sequence for "seq1.fa"
@@ -2460,7 +2479,7 @@ GUI_TEST_CLASS_DEFINITION(test_3373) {
 
     GTMouseDriver::moveTo(GTUtilsWorkflowDesigner::getItemCenter( os, "Write Sequence" ) );
     GTMouseDriver::click();
-    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "genbank", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Document format", "GenBank", GTUtilsWorkflowDesigner::comboValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", "result.gb", GTUtilsWorkflowDesigner::textValue);
     GTWidget::click( os, GTUtilsMdi::activeWindow( os ) );
 
@@ -2692,28 +2711,20 @@ GUI_TEST_CLASS_DEFINITION(test_3402){
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3414){
-//check time on dashboard
-//    1. Open WD
+/*  check time on dashboard
+ *  1. Open WD
+ *  2. Select "Remote BLASTing" sample
+ *  3. Set input file samples/FASTA/human_T1.fa
+ *  4. Execute workflow
+ *  5. Check elapsed time
+ * */
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
-//    2. Select "tuxedo" sample
-//    3. Set proper input data(_common_data/NIAID_pipelines/tuxedo).
-    QMap<QString, QVariant> map;
-    map.insert("Bowtie index directory", QDir().absoluteFilePath(testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/index"));
-    map.insert("Bowtie index basename", "chr6");
-    map.insert("Bowtie version", "Bowtie1");
-    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Tuxedo Wizard", QList<QStringList>()<<(QStringList()<<
-                                                     testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq"),
-                                                      map));
-    GTUtilsDialog::waitForDialog(os, new ConfigurationWizardFiller(os, "Configure Tuxedo Workflow", QStringList()<<
-                                                                   "Single-sample"<<"Single-end"));
-    GTUtilsWorkflowDesigner::addSample(os, "RNA-seq analysis with Tuxedo tools");
+    GTUtilsWorkflowDesigner::addSample(os, "Remote BLASTing");
     GTGlobals::sleep();
 
-    GTUtilsWorkflowDesigner::click(os, "Assemble Transcripts with Cufflinks");
-    GTKeyboardDriver::keyClick( Qt::Key_Delete);
-    GTGlobals::sleep(200);
+    GTUtilsWorkflowDesigner::click(os, "Read Sequence(s)");
+    GTUtilsWorkflowDesigner::setDatasetInputFile( os, dataDir + "samples/FASTA/human_T1.fa" );
 
-    //    Launch pipeline
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTGlobals::sleep(1000);
     HIWebElement initEl = GTUtilsDashboard::findElement(os, "00:00:0", "SPAN");
@@ -2722,6 +2733,7 @@ GUI_TEST_CLASS_DEFINITION(test_3414){
     HIWebElement finalEl = GTUtilsDashboard::findElement(os, "00:00:0", "SPAN");
     QString s1 = finalEl.toPlainText();
     CHECK_SET_ERR(s!=s1, "timer not changed");
+    GTUtilsTask::cancelTask(os, "Execute workflow");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3428){
@@ -2955,11 +2967,11 @@ GUI_TEST_CLASS_DEFINITION(test_3451) {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK_SET_ERR( dialog, "activeModalWidget is NULL");
 
-            QSpinBox *startPos = dialog->findChild<QSpinBox*>("startPosBox");
-            CHECK_SET_ERR( startPos != NULL, "startPosBox is NULL");
+            QSpinBox *startPos = dialog->findChild<QSpinBox*>("startLineEdit");
+            CHECK_SET_ERR( startPos != NULL, "startLineEdit is NULL");
 
-            QSpinBox *endPos = dialog->findChild<QSpinBox*>("endPosBox");
-            CHECK_SET_ERR( endPos != NULL, "endPosBox is NULL");
+            QSpinBox *endPos = dialog->findChild<QSpinBox*>("endLineEdit");
+            CHECK_SET_ERR( endPos != NULL, "endLineEdit is NULL");
 
             GTSpinBox::checkLimits(os, startPos, 1, 603);
             GTSpinBox::checkLimits(os, endPos, 2, 604);
@@ -3572,7 +3584,7 @@ GUI_TEST_CLASS_DEFINITION(test_3555) {
     MSAEditor* editor = mw->findChild<MSAEditor*>();
     CHECK_SET_ERR(editor != NULL, "MsaEditor not found");
 
-    MSAEditorNameList* nameList = editor->getUI()->getEditorNameList();
+    MaEditorNameList* nameList = editor->getUI()->getEditorNameList();
     CHECK_SET_ERR(nameList != NULL, "MSANameList is empty");
     GTWidget::click(os, nameList, Qt::LeftButton, QPoint(10, nameList->height() - 1));
 
@@ -3780,7 +3792,7 @@ GUI_TEST_CLASS_DEFINITION(test_3571_2) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3589) {
-    // 0. Copy "data/samples/Assembly/chrM.sam" to a new directory to avoid UGENE conversion cache.
+    // 0. Copy "data/samples/Assembly/chrM.sam" to a new folder to avoid UGENE conversion cache.
     // 1. Create a workflow: Read assembly.
     // 2. Set an input file: that copied chrM.sam.
     // 3. Run the workflow.
@@ -3962,7 +3974,7 @@ GUI_TEST_CLASS_DEFINITION(test_3612) {
     GTUtilsMsaEditor::toggleCollapsingMode(os);
 
 //    3. Expand "Conocephalus_discolor" group.
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Conocephalus_discolor");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Conocephalus_discolor");
 
 //    4. Open "Pairwise alignment" options panel tab.
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::PairwiseAlignment);
@@ -4179,7 +4191,7 @@ GUI_TEST_CLASS_DEFINITION(test_3629) {
     GTUtilsProjectTreeView::doubleClickItem(os, "human_T1.fa");
     GTThread::waitForMainThread();
     QList<QTreeWidgetItem*> list = GTUtilsAnnotationsTreeView::findItems(os, "misc_feature", GTGlobals::FindOptions(false));
-    CHECK_SET_ERR(list.isEmpty(), QString("%1 annotation(s) unexpectidly found").arg(list.isEmpty()));
+    CHECK_SET_ERR(list.isEmpty(), QString("%1 annotation(s) unexpectidly found").arg(list.count()));
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3645) {
@@ -4192,8 +4204,8 @@ GUI_TEST_CLASS_DEFINITION(test_3645) {
     GTUtilsOptionPanelSequenceView::toggleInputFromFilePattern(os);
     GTUtilsOptionPanelSequenceView::enterPatternFromFile(os, testDir + "_common_data/FindAlgorithm/", "find_pattern_op_2.fa");
 
-    GTUtilsOptionPanelSequenceView::clickPrev(os);
-    GTUtilsOptionPanelSequenceView::clickPrev(os);
+    GTUtilsOptionPanelSequenceView::clickNext(os);
+    GTUtilsOptionPanelSequenceView::clickNext(os);
     GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<< "Copy sequence",GTGlobals::UseMouse));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"ADV_single_sequence_widget_0"));
     QString clipStr = GTClipboard::text(os);
@@ -4512,7 +4524,7 @@ GUI_TEST_CLASS_DEFINITION(test_3697){
     GTUtilsDialog::waitForDialog(os, new EditConnectionDialogFiller(os, params2, EditConnectionDialogFiller::MANUAL));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Connect to UGENE shared database...");
 
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, "Ok"));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os, "Ok"));
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addElement(os, "Read Alignment");
     GTUtilsWorkflowDesigner::addElement(os, "Read Sequence");
@@ -4631,14 +4643,14 @@ GUI_TEST_CLASS_DEFINITION(test_3724) {
 
 //    3. Click "Generate".
 //    Expected state: the "Multiple Sequence Alignment Distance Matrix" view has appeared.
-    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix"));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix..."));
     GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
 
 //    4. Click right mouse button on the view.
 //    Expected state: nothing happens.
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new PopupChecker(os, QStringList()));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new PopupChecker(os, QStringList()));
     GTMouseDriver::click(Qt::RightButton);
     GTGlobals::sleep();
 }
@@ -4753,12 +4765,11 @@ GUI_TEST_CLASS_DEFINITION(test_3736) {
 GUI_TEST_CLASS_DEFINITION(test_3738) {
 //    Select {DNA Assembly -> Contig assembly with CAP3}
     GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "test_3738.ugenedb"));
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_3738.ugenedb"));
     GTUtilsDialog::waitForDialog(os, new CAP3SupportDialogFiller(os, QStringList()<<testDir + "_common_data/scf/Sequence A.scf"
                                                                  <<testDir + "_common_data/scf/Sequence B.scf",
                                                                  sandBoxDir + "test_3738.ace"));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Contig assembly with CAP3...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" <<  "Reads de novo assembly (with CAP3)...");
 
 //    menu item in the main menu.
 //    Set sequences "_common_data/scf/Sequence A.scf" and "_common_data/scf/Sequence B.scf" as input, set any valid output path and run the task.
@@ -4784,13 +4795,16 @@ GUI_TEST_CLASS_DEFINITION(test_3744) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTWidget::click(os, GTWidget::findWidget(os, "OP_FIND_PATTERN"));
     GTGlobals::sleep(500);
+   
+    GTUtilsOptionPanelSequenceView::setAlgorithm(os, "Regular expression");
 
-    QComboBox* algorithmBox = qobject_cast<QComboBox *>(GTWidget::findWidget(os, "boxAlgorithm"));
-    GTComboBox::setIndexWithText(os, algorithmBox, "Regular expression");
-
-    GTKeyboardDriver::keySequence("ACT.G");
+    GTUtilsOptionPanelSequenceView::enterPattern(os, "ACG.T", true);
+    GTGlobals::sleep(200);
 
     QWidget* createButton = GTWidget::findWidget(os, "getAnnotationsPushButton");
+
+    GTUtilsOptionPanelSequenceView::enterPattern(os, "", true);
+
     CHECK_SET_ERR(!createButton->isEnabled(), "prevPushButton is unexpectidly enabled")
 
 
@@ -4939,7 +4953,7 @@ GUI_TEST_CLASS_DEFINITION(test_3770) {
 //    Expected state: the task cancels within a half of a minute.
 //    Current state: the task doesn't cancel.
 
-    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "NW_003943623", 0, true, false,
+    GTUtilsDialog::waitForDialog(os, new RemoteDBDialogFillerDeprecated(os, "NW_003943623", 0, true, true, false,
                                                                         sandBoxDir));
     GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Access remote database...", GTGlobals::UseKey);
     GTUtilsTaskTreeView::cancelTask(os, "Download remote documents");
@@ -4984,8 +4998,10 @@ GUI_TEST_CLASS_DEFINITION(test_3773) {
  *   Expected state: Log not have errors
 */
     GTLogTracer logTracer;
+    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Plain text"));
     GTFileDialog::openFile(os, dataDir + "samples/HMM", "aligment15900.hmm");
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
     GTGlobals::sleep(200);
     GTUtilsProjectTreeView::click(os, "aligment15900.hmm");
     GTKeyboardDriver::keyClick( Qt::Key_Delete);
@@ -4996,7 +5012,7 @@ GUI_TEST_CLASS_DEFINITION(test_3773) {
 GUI_TEST_CLASS_DEFINITION(test_3773_1) {
     class OkClicker : public Filler {
     public:
-        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "UHMM3BuildDialog"){}
+        OkClicker(HI::GUITestOpStatus& _os) : Filler(_os, "HmmerBuildDialog"){}
         virtual void run() {
             QWidget* dialog = QApplication::activeModalWidget();
             CHECK(dialog, );
@@ -5092,8 +5108,7 @@ GUI_TEST_CLASS_DEFINITION(test_3778) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_3779) {
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AssemblyBrowser));
-    GTUtilsDialog::waitForDialog(os, new ConvertAceToSqliteDialogFiller(os, sandBoxDir + "regression_test_3779.ugenedb"));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "regression_test_3779.ugenedb"));
     GTFileDialog::openFile(os, testDir + "_common_data/ace/", "ace_test_4.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -5466,7 +5481,7 @@ GUI_TEST_CLASS_DEFINITION(test_3843) {
     GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "Enable collapsing"));
 
     // 3. Expand one of the collapsed sequences.
-    GTUtilsMSAEditorSequenceArea::clickCollapceTriangle(os, "Conocephalus_discolor");
+    GTUtilsMSAEditorSequenceArea::clickCollapseTriangle(os, "Conocephalus_discolor");
 
     // 4. Select some region within a sequence from the chosen collapsed group.
     // 5. Click "Ctrl+C"
@@ -5569,9 +5584,9 @@ GUI_TEST_CLASS_DEFINITION(test_3870) {
         GTUtilsMSAEditorSequenceArea::getNameList(os), length - 60, length - 1, true, false, false, false, true, "FASTA"));
     GTMenu::showContextMenu(os, GTWidget::findWidget(os,"msa_editor_sequence_area"));
 
-    QFile resFile(testDir + "_common_data/scenarios/sandbox/3870.fa");
-    QFile templateFile(testDir + "_common_data/scenarios/_regression/3870/3870.fa");
-    CHECK_SET_ERR(resFile.size() == templateFile.size(), "Result file is incorrect");
+   // QFile resFile(testDir + "_common_data/scenarios/sandbox/3870.fa");
+   // QFile templateFile(testDir + "_common_data/scenarios/_regression/3870/3870.fa");
+   // CHECK_SET_ERR(resFile.size() == templateFile.size(), "Result file is incorrect");
 }
 
 
@@ -5856,6 +5871,10 @@ GUI_TEST_CLASS_DEFINITION(test_3938) {
     GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
     GTUtilsWorkflowDesigner::addSample(os, "Variation annotation with SnpEff");
     GTUtilsWorkflowDesigner::addInputFile(os, "Input Variations File", testDir + "_common_data/vcf/valid.vcf");
+
+    GTUtilsWorkflowDesigner::click(os, "Annotate and Predict Effects with SnpEff");
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
     QString error = lt.getError();
@@ -5892,7 +5911,7 @@ GUI_TEST_CLASS_DEFINITION(test_3950) {
     GTUtilsWorkflowDesigner::click(os, "Align reads with BWA MEM");
     GTUtilsWorkflowDesigner::setParameter(os, "Reference genome", sandBoxDir + "test_3950.fa", GTUtilsWorkflowDesigner::textValue);
     QDir sandBox;
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", sandBox.absoluteFilePath(sandBoxDir), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", sandBox.absoluteFilePath(sandBoxDir), GTUtilsWorkflowDesigner::textValue);
 
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os, 480000);
@@ -5978,7 +5997,7 @@ GUI_TEST_CLASS_DEFINITION(test_3960) {
 
     GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/3960", "all.gb"));
 
-    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "Genbank"));
+    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "GenBank"));
 
     GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Merge));
 
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
index b0383a4..099f3a4 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_3001_4000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -110,6 +110,7 @@ GUI_TEST_CLASS_DECLARATION(test_3308)
 GUI_TEST_CLASS_DECLARATION(test_3312)
 GUI_TEST_CLASS_DECLARATION(test_3313)
 GUI_TEST_CLASS_DECLARATION(test_3318)
+GUI_TEST_CLASS_DECLARATION(test_3319)
 GUI_TEST_CLASS_DECLARATION(test_3321)
 GUI_TEST_CLASS_DECLARATION(test_3328)//should be launched in other thread but crashes
 GUI_TEST_CLASS_DECLARATION(test_3332)
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.cpp
index fe63045..bcffc74 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QClipboard>
 #include <QFile>
 #include <QGroupBox>
 #include <QListWidget>
@@ -26,18 +27,8 @@
 #include <QPlainTextEdit>
 #include <QTableView>
 #include <QWebElement>
-
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/DocumentModel.h>
-
-#include <U2Gui/ToolsMenu.h>
-
-#include <U2View/ADVConstants.h>
-#include <U2View/ADVSequenceObjectContext.h>
-#include <U2View/DetView.h>
-#include <U2View/MSAEditorNameList.h>
-#include <U2View/MSAEditorTreeViewer.h>
-#include <U2View/MSAGraphOverview.h>
+#include <QTextStream>
+#include <QDebug>
 
 #include <base_dialogs/DefaultDialogFiller.h>
 #include <base_dialogs/GTFileDialog.h>
@@ -62,9 +53,24 @@
 #include <primitives/PopupChooser.h>
 #include <system/GTClipboard.h>
 #include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
 #include <utils/GTThread.h>
 #include <utils/GTUtilsDialog.h>
 
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/ToolsMenu.h>
+
+#include <U2View/ADVConstants.h>
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/DetView.h>
+#include <U2View/MaEditorNameList.h>
+#include <U2View/MSAEditorTreeViewer.h>
+#include <U2View/MaGraphOverview.h>
+#include <U2View/ScrollController.h>
+
 #include "GTTestsRegressionScenarios_4001_5000.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
@@ -92,7 +98,6 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
-
 #include "runnables/ugene/corelibs/U2Gui/AddNewDocumentDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/AlignShortReadsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/CreateAnnotationWidgetFiller.h"
@@ -101,8 +106,9 @@
 #include "runnables/ugene/corelibs/U2Gui/ExportChromatogramFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ExportImageDialogFiller.h"
-#include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/FindQualifierDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/FindRepeatsDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportToDatabaseDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ProjectTreeItemSelectorDialogFiller.h"
@@ -120,6 +126,7 @@
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/RemoteBLASTDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h"
 #include "runnables/ugene/plugins/orf_marker/OrfDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ExportPrimersDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
@@ -175,7 +182,7 @@ GUI_TEST_CLASS_DEFINITION(test_4007) {
 
 
     GTGlobals::FindOptions murineOptions(false);
-    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findFirstAnnotation(os, murineOptions) == NULL, "Annotations are connected to murine.gb");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findFirstAnnotation(os, murineOptions) != NULL, "Annotations are connected to murine.gb");
 
     //    Expected state: the file is reloaded, annotations object still have an association only with human_T1 sequence (if annotations object exists and has the same name as before reloading),
     //there is no errors in the log.
@@ -682,27 +689,28 @@ GUI_TEST_CLASS_DEFINITION(test_4072) {
 
     QWidget *hSeqScroll = GTWidget::findWidget(os, "horizontal_sequence_scroll");
     CHECK_SET_ERR(hSeqScroll != NULL, "No scroll bar at the bottom of sequence area");
-    CHECK_SET_ERR(hSeqScroll->isVisible(), "Scroll bat at the bottom of sequence area is invisible");
+    CHECK_SET_ERR(hSeqScroll->isVisible(), "Scroll bar at the bottom of sequence area is invisible");
 
     QWidget *vSeqScroll = GTWidget::findWidget(os, "vertical_sequence_scroll");
+
     CHECK_SET_ERR(vSeqScroll != NULL, "No scroll bar at the bottom of sequence area");
-    CHECK_SET_ERR(!vSeqScroll->isVisible(), "Scroll bat at the rigth side of sequence area is visible");
+    CHECK_SET_ERR(!vSeqScroll->isVisible(), "Scroll bar at the rigth side of sequence area is visible");
 
     QWidget* hNameScroll = GTWidget::findWidget(os, "horizontal_names_scroll");
     CHECK_SET_ERR(hNameScroll != NULL, "No scroll bar at the bottom of name list area");
     CHECK_SET_ERR(!hNameScroll->isVisible(), "Scroll bar at the botton of name list area is visible");
 
-    QSplitter* splitter = qobject_cast<QSplitter*>(GTWidget::findWidget(os, "msa_editor_horizontal_splitter"));
+    QSplitter* splitter = qobject_cast<QSplitter *>(GTWidget::findWidget(os, "msa_editor_horizontal_splitter"));
     CHECK_SET_ERR(splitter != NULL, "MSA Splitter not found");
-    QSplitterHandle* handle = splitter->handle(1);
+    QSplitterHandle *handle = splitter->handle(1);
     CHECK_SET_ERR(handle != NULL, "MSA Splitter handle is NULL");
 
-    QWidget* nameList = GTWidget::findWidget(os, "msa_editor_name_list");
+    QWidget *nameList = GTWidget::findWidget(os, "msa_editor_name_list");
     CHECK_SET_ERR(nameList != NULL, "MSA Editor name list not found");
 
     GTWidget::click(os, handle);
     QPoint p = GTMouseDriver::getMousePosition();
-    p.setX( p.x() - 2*nameList->width()/3);
+    p.setX(p.x() - 2 * nameList->width() / 3);
     GTMouseDriver::press();
     GTMouseDriver::moveTo(p);
     GTMouseDriver::release();
@@ -711,10 +719,8 @@ GUI_TEST_CLASS_DEFINITION(test_4072) {
 
     CHECK_SET_ERR(hNameScroll->isVisible(), "Scroll bar at the botton of name list area is invisible");
 
-
     GTFileDialog::openFile(os, testDir + "_common_data/clustal/fungal - all.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
-    GTUtilsTaskTreeView::waitTaskFinished(os);
     hNameScroll = GTWidget::findWidget(os, "horizontal_names_scroll");
     CHECK_SET_ERR(hNameScroll != NULL, "No scroll bar at the bottom of name list area");
     CHECK_SET_ERR(hNameScroll->isVisible(), "Scroll bar at the botton of name list area is visible");
@@ -1028,9 +1034,8 @@ GUI_TEST_CLASS_DEFINITION(test_4106){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    MSAEditorSequenceArea* msaEdistorSequenceAres = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
-
-    int endPos = msaEdistorSequenceAres->getLastVisibleSequence(false);
+    MSAEditorSequenceArea* msaEdistorSequenceArea = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
+    const int endPos = msaEdistorSequenceArea->getEditor()->getUI()->getScrollController()->getLastVisibleRowNumber(msaEdistorSequenceArea->height());
 
     GTUtilsMSAEditorSequenceArea::click( os, QPoint( -5, endPos-1 ) );
     GTGlobals::sleep(200);
@@ -1328,7 +1333,7 @@ GUI_TEST_CLASS_DEFINITION(test_4124) {
     QFile::remove(sandBoxDir+"out.ugenedb");
     GTGlobals::sleep();
     GTUtilsDialog::waitForDialog(os, new AlignShortReadsFiller(os, new Scenario_test_4124()));
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os, QMessageBox::Ok));
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Map reads to reference...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTGlobals::sleep();
@@ -1697,6 +1702,10 @@ GUI_TEST_CLASS_DEFINITION(test_4164){
 //3. Set input file which contains spaces in path
     GTUtilsWorkflowDesigner::click(os, "Input Variations File");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/scenarios/sandbox/space dir/valid.vcf");
+
+    GTUtilsWorkflowDesigner::click(os, "Annotate and Predict Effects with SnpEff");
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
 //4. Run workflow
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTGlobals::sleep(5000);
@@ -1806,7 +1815,7 @@ GUI_TEST_CLASS_DEFINITION(test_4218) {
     GTGlobals::sleep();
 
     GTUtilsWorkflowDesigner::addInputFile(os, "Read Annotations",
-        testDir + "_common_data/NIAID_pipelines/Chip-seq/data_to_compare_with/test_0001/Default_peaks1.bed");
+        testDir + "_common_data/bedtools/introns.bed");
     GTUtilsWorkflowDesigner::click(os, "Write Annotations");
     const QString outputFilePath = QDir(sandBoxDir).absolutePath() +"/out.bed";
     GTUtilsWorkflowDesigner::setParameter(os, "Output file", outputFilePath, GTUtilsWorkflowDesigner::textValue);
@@ -2076,9 +2085,8 @@ GUI_TEST_CLASS_DEFINITION(test_4284){
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    MSAEditorSequenceArea* msaEdistorSequenceAres = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
-
-    int endPos = msaEdistorSequenceAres->getLastVisibleSequence(false);
+    MSAEditorSequenceArea* msaEdistorSequenceArea = GTUtilsMSAEditorSequenceArea::getSequenceArea(os);
+    const int endPos = msaEdistorSequenceArea->getEditor()->getUI()->getScrollController()->getLastVisibleRowNumber(msaEdistorSequenceArea->height());
 
     GTUtilsMSAEditorSequenceArea::click( os, QPoint( -5, endPos-1 ) );
     GTGlobals::sleep(200);
@@ -2098,8 +2106,10 @@ GUI_TEST_CLASS_DEFINITION(test_4284){
     GTKeyboardDriver::keyRelease(Qt::Key_Shift);
     GTUtilsMSAEditorSequenceArea::checkSelectedRect( os, QRect( 0, endPos-1, 1234, 4 ) );
 
-    CHECK_SET_ERR(msaEdistorSequenceAres->getFirstVisibleSequence() == 1, "MSA not scrolled");
+    const int firstVisibleSequence = msaEdistorSequenceArea->getEditor()->getUI()->getScrollController()->getFirstVisibleRowNumber(false);
+    CHECK_SET_ERR(firstVisibleSequence == 1, "MSA not scrolled");
 }
+
 GUI_TEST_CLASS_DEFINITION(test_4295) {
 /* 1. Open Workflow Designer
  * 2. Add elements Read File List and Write Plain Text
@@ -2207,18 +2217,22 @@ GUI_TEST_CLASS_DEFINITION(test_4306_1) {
 
     GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, sandBoxDir + "test_4306/test_4306.nwk", 0, 0, true));
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
-
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    3. Use context menu on tree view.
 //    Expected state: there are "Zoom in", "Zoom out" and "Reset zooming" actions in the menu.
-    QList<QStringList> items;
-    items << (QStringList() << "Zoom In");
-    items << (QStringList() << "Zoom Out");
-    items << (QStringList() << "Reset Zooming");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, items));
-    GTWidget::click(os, GTUtilsMsaEditor::getTreeView(os), Qt::RightButton);
-    GTGlobals::sleep();
+	//    Expected state: there are "Zoom in", "Zoom out" and "Reset zooming" actions in the menu.                                 
+	GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Zoom In", PopupChecker::IsEnabled));
+	GTWidget::click(os, GTUtilsMsaEditor::getTreeView(os), Qt::RightButton);
+	GTGlobals::sleep();
+
+	GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Zoom Out", PopupChecker::IsEnabled));
+	GTWidget::click(os, GTUtilsMsaEditor::getTreeView(os), Qt::RightButton);
+	GTGlobals::sleep();
+
+	GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Reset Zooming", PopupChecker::IsEnabled));
+	GTWidget::click(os, GTUtilsMsaEditor::getTreeView(os), Qt::RightButton);
+	GTGlobals::sleep();
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4306_2) {
@@ -2228,11 +2242,10 @@ GUI_TEST_CLASS_DEFINITION(test_4306_2) {
 
 //    2. Use context menu on the tree view.
 //    Expected state: there are "Zoom in", "Zoom out" and "Reset zooming" actions in the menu.
-    QList<QStringList> items;
-    items << (QStringList() << "Zoom In");
-    items << (QStringList() << "Zoom Out");
-    items << (QStringList() << "Reset Zooming");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, items));
+    QStringList items = QStringList() << "Zoom In"
+                                      << "Zoom Out"
+                                      << "Reset Zooming";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList(), items));
     GTWidget::click(os, GTUtilsMdi::activeWindow(os), Qt::RightButton);
     GTGlobals::sleep();
 }
@@ -2325,8 +2338,11 @@ GUI_TEST_CLASS_DEFINITION(test_4309_1) {
 
     QComboBox* box = qobject_cast<QComboBox*>(table->findChild<QComboBox*>());
     CHECK_SET_ERR(box, "QComboBox not found. Widget in this cell might be not QComboBox");
-    CHECK_SET_ERR(GTComboBox::getValues(os, box).contains(BaseDocumentFormats::VECTOR_NTI_SEQUENCE) == false, "Vector NTI format is present in WriteAnnotations worker");
-    CHECK_SET_ERR(GTComboBox::getValues(os, box).contains(BaseDocumentFormats::PLAIN_GENBANK), "Vector NTI format is present in WriteAnnotations worker");
+    QString vectorNtiFormatName = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::VECTOR_NTI_SEQUENCE)->getFormatName();
+    QString genbankFormatName = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK)->getFormatName();
+    QStringList boxData = GTComboBox::getValues(os, box);
+    CHECK_SET_ERR(boxData.contains(vectorNtiFormatName) == false, "Vector NTI format is present in WriteAnnotations worker");
+    CHECK_SET_ERR(boxData.contains(genbankFormatName), "GenBank format isn't present in WriteAnnotations worker");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4323_1) {
@@ -2735,8 +2751,8 @@ GUI_TEST_CLASS_DEFINITION(test_4391) {
     WorkflowProcessItem *cutAdapter = GTUtilsWorkflowDesigner::addElement(os, "Cut Adapter");
     GTUtilsWorkflowDesigner::connect(os, fileList, cutAdapter);
 
-//    2. Set "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq" as input.
-    GTUtilsWorkflowDesigner::addInputFile(os, "File List", testDir + "_common_data/NIAID_pipelines/tuxedo_pipeline/data/lymph_aln.fastq");
+//    2. Set "_common_data/fastq/illumina.fastq" as input.
+    GTUtilsWorkflowDesigner::addInputFile(os, "File List", testDir + "_common_data/fastq/illumina.fastq");
 
 //    3. Run the workflow.
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -2854,7 +2870,7 @@ GUI_TEST_CLASS_DEFINITION(test_4440) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4463) {
-//    1. Open attached file in "Genbank" format
+//    1. Open attached file in "GenBank" format
 //    2. Modify sequence
 //    3. Unload document
 //    Expected state: "Save document" dialog appeared
@@ -3076,7 +3092,7 @@ GUI_TEST_CLASS_DEFINITION(test_4524) {
     GTKeyboardDriver::keyClick( Qt::Key_Delete);
 
     // Export the msa to SVG.
-    GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, sandBoxDir + "test_4524.svg", "svg", 0));
+    GTUtilsDialog::waitForDialog(os, new ExportMsaImage(os, sandBoxDir + "test_4524.svg", "SVG", 0));
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export" << "Export as image"));
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(10, 10));
     GTMouseDriver::click(Qt::RightButton);
@@ -3178,11 +3194,11 @@ GUI_TEST_CLASS_DEFINITION(test_4563) {
 
 GUI_TEST_CLASS_DEFINITION(test_4587) {
     GTLogTracer l;
-    GTUtilsDialog::waitForDialog(os, new DocumentProviderSelectorDialogFiller(os, DocumentProviderSelectorDialogFiller::AlignmentEditor));
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "test_4587"));
     GTFileDialog::openFile(os, testDir + "_common_data/scenarios/_regression/4587/", "extended_dna.ace");
     GTUtilsTaskTreeView::waitTaskFinished(os);
     GTUtilsProjectTreeView::checkObjectTypes(os,
-        QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT,
+        QSet<GObjectType>() << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT,
         GTUtilsProjectTreeView::findIndex(os, "Contig1"));
     CHECK_SET_ERR(!l.hasError(), "logfile shouldn't contain errors");
 }
@@ -3309,6 +3325,91 @@ GUI_TEST_CLASS_DEFINITION(test_4588_2) {
     GTMouseDriver::click(Qt::RightButton);
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4591) {
+    
+    //1. Open a circular sequence of length N.
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
+    SelectSequenceRegionDialogFiller* filler = new SelectSequenceRegionDialogFiller(os, 140425, 2);
+    filler->setCircular(true);
+    GTUtilsDialog::waitForDialog(os, filler);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    //2. Open "Region selection" dialog {Ctrl+a} fill it with next data:
+    //        {Single range selection} checked
+    //        {Region:} 140425..2
+    
+    //3. Press 'Go' button
+    //Expected state: this regions are selected on the view
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<<"Copy sequence"));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
+    GTGlobals::sleep(500);
+    QString text = GTClipboard::text(os);
+    CHECK_SET_ERR(text == "ATTG", "unexpected selection: " + text);
+}
+      
+      
+GUI_TEST_CLASS_DEFINITION(test_4591_1) {
+    //1) Open samples/FASTA/human_T1.fa
+        GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+        GTUtilsTaskTreeView::waitTaskFinished(os);
+    
+    //2) Select 100..10 region of the sequence
+        class Scenario : public CustomScenario {
+        public:
+            void run(HI::GUITestOpStatus &os) {
+                QWidget *dialog = QApplication::activeModalWidget();
+                
+                QLineEdit *startEdit = dialog->findChild<QLineEdit*>("startEdit");
+                QLineEdit *endEdit = dialog->findChild<QLineEdit*>("endEdit");
+                CHECK_SET_ERR(startEdit != NULL, "QLineEdit \"startEdit\" not found");
+                CHECK_SET_ERR(endEdit != NULL, "QLineEdit \"endEdit\" not found");
+                
+                GTLineEdit::setText(os, startEdit, QString::number(321));
+                GTLineEdit::setText(os, endEdit, QString::number(123));
+                                
+                QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox"));
+                QPushButton* goButton = box->button(QDialogButtonBox::Ok);
+                CHECK_SET_ERR(goButton!= NULL, "Go button not found");
+                CHECK_SET_ERR(!goButton->isEnabled(), "Go button is enabled");
+                
+                GTLineEdit::setText(os, startEdit, QString::number(123));
+                GTLineEdit::setText(os, endEdit, QString::number(321));
+                CHECK_SET_ERR(goButton!= NULL, "Go button not found");
+                CHECK_SET_ERR(goButton->isEnabled(), "Go button is notenabled");
+
+                GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+            }
+        };
+        GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, new Scenario));
+        GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
+        GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0")); 
+        
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4591_2) {
+    
+    //1. Open a circular sequence of length N.
+    GTFileDialog::openFile(os, dataDir  + "samples/Genbank/NC_014267.1.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTWidget::click(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
+    SelectSequenceRegionDialogFiller* filler = new SelectSequenceRegionDialogFiller(os, 3, 3);
+    filler->setCircular(true);
+    GTUtilsDialog::waitForDialog(os, filler);
+    GTKeyboardDriver::keyClick( 'a', Qt::ControlModifier);
+    //2. Open "Region selection" dialog {Ctrl+a} fill it with next data:
+    //        {Single range selection} checked
+    //        {Region:} 140425..2
+    
+    //3. Press 'Go' button
+    //Expected state: this regions are selected on the view
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<ADV_MENU_COPY<<"Copy sequence"));
+    GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os)->getDetView(), Qt::RightButton);
+    GTGlobals::sleep(500);
+    QString text = GTClipboard::text(os);
+    CHECK_SET_ERR(text == "G", "unexpected selection: " + text);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4606) {
     //1. Create custom WD element
     //2. Do not fill "Description" and "Parameters description" fields
@@ -3590,6 +3691,94 @@ GUI_TEST_CLASS_DEFINITION(test_4674_2) {
     GTKeyboardDriver::keyClick( Qt::Key_Delete);
 }
 
+GUI_TEST_CLASS_DEFINITION(test_4682) {
+    // Check find from status bar
+
+    // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QWidget *msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
+    CHECK_SET_ERR(msaEditorStatusBar != NULL, "MSAEditorStatusBar is NULL");
+
+    QLineEdit *searchEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "searchEdit", msaEditorStatusBar));
+    QWidget *findForward = GTWidget::findWidget(os, "Find forward", msaEditorStatusBar);
+
+    // 2. Put '34c---t A' in text field at status bar. Click Find next button.
+    GTLineEdit::setText(os, searchEdit, "34c---t A", true);
+    CHECK_SET_ERR(searchEdit->text() == "CTA", "Wrong search pattern, validator does not work.");
+
+    GTWidget::click(os, findForward);
+    // Expected state: find result sequence Isophya_altaica_EF540820 region 8..10
+    GTGlobals::sleep();
+    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(7, 1, 3, 1));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4682_1) {
+    // Check find from status bar
+
+    // 1. Open document data/samples/Stockholm/CBS.sto
+    GTFileDialog::openFile(os, dataDir + "samples/Stockholm" , "CBS.sto");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    QWidget *msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
+    CHECK_SET_ERR(msaEditorStatusBar != NULL, "MSAEditorStatusBar is NULL");
+
+    QLineEdit *searchEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "searchEdit", msaEditorStatusBar));
+    QWidget *findForward = GTWidget::findWidget(os, "Find forward", msaEditorStatusBar);
+
+    // 2. Put ' Nn--G34..f' in text field at status bar. Click Find next button.
+    GTLineEdit::setText(os, searchEdit, " Nn--G34..f", true);
+    CHECK_SET_ERR(searchEdit->text() == "NNGF", "Wrong search pattern, validator does not work.");
+
+    GTWidget::click(os, findForward);
+    // Expected state: find result sequence O31698/88-139 region 25..30
+    GTGlobals::sleep();
+    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(24, 3, 6, 1));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_4682_2) {
+    // Check find from status bar
+
+    // 1. Open document _common_data\scenarios\msa\ma2_gapped.aln
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/" , "ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    // 2. Add AMINO.fa to ma2_gapped.aln
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/fasta/" , "AMINO.fa");
+    GTUtilsDialog::waitForDialog(os, ob);
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList()<<MSAE_MENU_LOAD<<"Sequence from file"));
+    GTMenu::showContextMenu(os,GTWidget::findWidget(os, "msa_editor_sequence_area"));
+
+    QWidget *msaEditorStatusBar = GTWidget::findWidget(os, "msa_editor_status_bar");
+    CHECK_SET_ERR(msaEditorStatusBar != NULL, "MSAEditorStatusBar is NULL");
+
+    QLineEdit *searchEdit = qobject_cast<QLineEdit*>(GTWidget::findWidget(os, "searchEdit", msaEditorStatusBar));
+    QWidget *findForward = GTWidget::findWidget(os, "Find forward", msaEditorStatusBar);
+
+    // 3. Put ' eE--F f' in text field at status bar. Click Find next button.
+    GTLineEdit::setText(os, searchEdit, " eE--F f", true);
+    CHECK_SET_ERR(searchEdit->text() == "EEFF", "Wrong search pattern, validator does not work.(EEFF)");
+
+    GTWidget::click(os, findForward);
+    // Expected state: find result sequence AMINO263 region 39..42
+    GTGlobals::sleep();
+    GTUtilsMSAEditorSequenceArea::checkSelectedRect(os, QRect(38, 10, 4, 1));
+
+    // 4. Undo changes
+    GTKeyboardDriver::keyClick( 'z', Qt::ControlModifier);
+    GTGlobals::sleep(500);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    CHECK_SET_ERR(searchEdit->text() == "", "Search field should be cleared.");
+
+    // 5. Put '34c---t A' in text field at status bar. Click Find next button.
+    GTLineEdit::setText(os, searchEdit, "34c---t A", true);
+    CHECK_SET_ERR(searchEdit->text() == "CTA", "Wrong search pattern, validator does not work.(CTA)");
+
+    GTWidget::click(os, findForward);
+}
+
 GUI_TEST_CLASS_DEFINITION(test_4687) {
     //1. Open COI.aln
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
@@ -3850,6 +4039,11 @@ GUI_TEST_CLASS_DEFINITION(test_4710){
     GTThread::waitForMainThread();
     GTUtilsWorkflowDesigner::click(os, "Input Variations File");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf/valid.vcf");
+
+    GTUtilsWorkflowDesigner::click(os, "Annotate and Predict Effects with SnpEff");
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
+
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTGlobals::sleep();
 
@@ -3973,14 +4167,14 @@ GUI_TEST_CLASS_DEFINITION(test_4714_1) {
     CHECK_SET_ERR(1 == sequencesCount, QString("An incorrect vount of sequences in the view: expect %1, got %2")
                   .arg(1).arg(sequencesCount));
 
-    const QList<QStringList> visibleItems = QList<QStringList>() << (QStringList() << "Edit new sequence")
-                                                                 << (QStringList() << "Edit existing sequence");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, visibleItems));
+    const QStringList visibleItems = QStringList() << "Edit new sequence"
+                                                   << "Edit existing sequence";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList(), visibleItems));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 
-    const QList<QStringList> invisibleItems = QList<QStringList>() << (QStringList() << "Remove edited sequence")
-                                                                   << (QStringList() << "Undo changes");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, invisibleItems, PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    const QStringList invisibleItems = QStringList() << "Remove edited sequence"
+                                                     << "Undo changes";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList(), invisibleItems, PopupChecker::CheckOptions(PopupChecker::NotExists)));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 }
 
@@ -4013,14 +4207,14 @@ GUI_TEST_CLASS_DEFINITION(test_4714_2) {
     CHECK_SET_ERR(1 == sequencesCount, QString("An incorrect vount of sequences in the view: expect %1, got %2")
                   .arg(1).arg(sequencesCount));
 
-    const QList<QStringList> visibleItems = QList<QStringList>() << (QStringList() << "Edit new sequence")
-                                                                 << (QStringList() << "Edit existing sequence");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, visibleItems));
+    const QStringList visibleItems = QStringList() << "Edit new sequence"
+                                                   << "Edit existing sequence";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList(), visibleItems));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 
-    const QList<QStringList> invisibleItems = QList<QStringList>() << (QStringList() << "Remove edited sequence")
-                                                                   << (QStringList() << "Undo changes");
-    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, invisibleItems, PopupChecker::CheckOptions(PopupChecker::NotExists)));
+    const QStringList invisibleItems = QStringList() << "Remove edited sequence"
+                                                     << "Undo changes";
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList(), invisibleItems, PopupChecker::CheckOptions(PopupChecker::NotExists)));
     GTWidget::click(os, GTUtilsSequenceView::getSeqWidgetByNumber(os), Qt::RightButton);
 }
 
@@ -4059,12 +4253,12 @@ GUI_TEST_CLASS_DEFINITION(test_4719_1) {
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    //    Expected state: "No colors" color scheme is selected, "No highlighting" highlight scheme is selected
+    //    Expected state: "UGENE" color scheme is selected, "No highlighting" highlight scheme is selected
     QComboBox* colorScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "colorScheme"));
     QComboBox* highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
-    GTComboBox::checkCurrentValue(os, colorScheme, "No colors");
-    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
-
+    GTComboBox::checkCurrentValue(os, colorScheme, "UGENE    ");
+    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting    ");
+ 
     //    4. Undo changes
     GTUtilsMsaEditor::undo(os);
     GTGlobals::sleep(500);
@@ -4075,6 +4269,7 @@ GUI_TEST_CLASS_DEFINITION(test_4719_1) {
     highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
     GTComboBox::checkCurrentValue(os, colorScheme, "UGENE");
     GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
+
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4719_2) {
@@ -4090,11 +4285,11 @@ GUI_TEST_CLASS_DEFINITION(test_4719_2) {
     GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align sequence to this alignment");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    //    Expected state: "No colors" color scheme is selected, "No highlighting" highlight scheme is selected
+    //    Expected state: "UGENE" color scheme is selected, "UGENE" highlight scheme is selected
     QComboBox* colorScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "colorScheme"));
     QComboBox* highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
-    GTComboBox::checkCurrentValue(os, colorScheme, "No colors");
-    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
+    GTComboBox::checkCurrentValue(os, colorScheme, "UGENE    ");
+    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting    ");
 
     //    4. Undo changes
     GTUtilsMsaEditor::undo(os);
@@ -4296,51 +4491,53 @@ GUI_TEST_CLASS_DEFINITION(test_4735) {
 
 GUI_TEST_CLASS_DEFINITION(test_4764_1) {
     //1. Open "COI.aln"
-    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW", "COI.aln");
-    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     //2. Add some gaps
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 5));
-    GTKeyboardDriver::keyClick( ' ');
+    GTKeyboardDriver::keyClick(' ');
     GTUtilsMSAEditorSequenceArea::clickToPosition(os, QPoint(5, 6));
-    GTKeyboardDriver::keyClick( ' ');
-    GTKeyboardDriver::keyClick( ' ');
-    GTKeyboardDriver::keyClick( ' ');
+    GTKeyboardDriver::keyClick(' ');
+    GTKeyboardDriver::keyClick(' ');
+    GTKeyboardDriver::keyClick(' ');
 
     //3. Select region with edited sequences, one of sequences should starts with gap
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5,5), QPoint(16, 9));
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(5, 5), QPoint(16, 9));
 
     //4. Copy this subalignment
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Copy/Paste" << "Copy formatted"));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
 
-    QMainWindow* mw = AppContext::getMainWindow()->getQMainWindow();
-    MSAEditor* editor = mw->findChild<MSAEditor*>();
+    QMainWindow *mw = AppContext::getMainWindow()->getQMainWindow();
+    MSAEditor *editor = mw->findChild<MSAEditor *>();
     QWidget *nameListWidget = editor->getUI()->getEditorNameList();
 
     //5. Open conext menu by right clicking "Name list area". Paste this subaliment throu context menu {Copy/Paste->Paste}
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Copy/Paste" << "Paste"));
     GTWidget::click(os, nameListWidget, Qt::RightButton);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
+
+    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os).size() == 23, "Number of sequences should be 23");
 
-    CHECK_SET_ERR(GTUtilsMSAEditorSequenceArea::getNameList(os).size() == 23, "Number of sequences should be 26");
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 18), QPoint(11, 27));
+    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 18), QPoint(11, 27), GTGlobals::UseMouse);
+
+    QString expectedClipboard = "-CTACTAATTCG\n---TTATTAATT\nTTGCTAATTCGA\nTTATTAATCCGG\nCTATTAATTCGA";
 
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Copy/Paste" << "Copy selection"));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
-    GTGlobals::sleep();
+    GTGlobals::sleep(500);
+
+    QString clipboardText = GTClipboard::text(os);
+    CHECK_SET_ERR(clipboardText == expectedClipboard, "expected test didn't equal to actual");
 
     //Expected state subalignment pasted correctly
-    QString expectedClipboard = "-CTACTAATTCG\n---TTATTAATT\nTTGCTAATTCGA\nTTATTAATCCGG\nCTATTAATTCGA";
-    GTKeyboardDriver::keyClick( 'c', Qt::ControlModifier);
+    GTKeyboardUtils::copy(os);
     GTGlobals::sleep(200);
-    QString clipboardText = GTClipboard::text(os);
+    clipboardText = GTClipboard::text(os);
     GTWidget::click(os, GTWidget::findWidget(os, "msa_editor_sequence_area"));
     CHECK_SET_ERR(clipboardText == expectedClipboard, "expected test didn't equal to actual");
-
-    GTGlobals::sleep(11000);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4764_2) {
@@ -4354,7 +4551,7 @@ GUI_TEST_CLASS_DEFINITION(test_4764_2) {
     MSAEditor* editor = mw->findChild<MSAEditor*>();
     QWidget *sequenceAreaWidget = editor->getUI()->getSequenceArea();
 
-    GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(15, 0));
+	GTUtilsMSAEditorSequenceArea::selectArea(os, QPoint(0, 0), QPoint(15, 0), GTGlobals::UseMouse);
     GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Copy/Paste" << "Copy selection"));
     GTWidget::click(os, sequenceAreaWidget, Qt::RightButton);
     GTGlobals::sleep();
@@ -4391,11 +4588,11 @@ GUI_TEST_CLASS_DEFINITION(test_4764_3) {
 
 GUI_TEST_CLASS_DEFINITION(test_4782) {
 //    1. Open "data/samples/genbank/murine.gb".
-    GTFileDialog::openFile(os, dataDir + "samples/genbank/murine.gb");
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Open "data/samples/Genbank/sars.gb".
-    GTFileDialog::openFile(os, dataDir + "samples/genbank/sars.gb");
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    Expected state: a Sequence View for "sars.gb" is active.
@@ -4449,10 +4646,10 @@ GUI_TEST_CLASS_DEFINITION(test_4782) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4784_1) {
-    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_1.fa");
+    QFile::copy(testDir + "_common_data/fasta/chr6.fa", sandBoxDir + "regression_test_4784_1.fa");
 
     //1. Click the menu Tools -> BLAST-> BLAST Search...
-    //2. Select "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa" as input file.
+    //2. Select "_common_data/fasta/chr6,fa" as input file.
     //3. Press "Select a database file".
     //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
     //6. Press "Search".
@@ -4474,9 +4671,9 @@ GUI_TEST_CLASS_DEFINITION(test_4784_1) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4784_2) {
-    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_2.fa");
+    QFile::copy(testDir + "_common_data/fasta/chr6.fa", sandBoxDir + "regression_test_4784_2.fa");
 
-    //1. Open "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa".
+    //1. Open "_common_data/fasta/chr6.fa".
     GTFileDialog::openFile(os, sandBoxDir + "regression_test_4784_2.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -4501,9 +4698,9 @@ GUI_TEST_CLASS_DEFINITION(test_4784_2) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4784_3) {
-    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_3.fa");
+    QFile::copy(testDir + "_common_data/fasta/chr6.fa", sandBoxDir + "regression_test_4784_3.fa");
 
-    //1. Open "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa".
+    //1. Open "_common_data/fasta/chr6.fa".
     GTFileDialog::openFile(os, sandBoxDir + "regression_test_4784_3.fa");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -4525,10 +4722,10 @@ GUI_TEST_CLASS_DEFINITION(test_4784_3) {
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4784_4) {
-    QFile::copy(testDir + "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa", sandBoxDir + "regression_test_4784_4.fa");
+    QFile::copy(testDir + "_common_data/fasta/chr6.fa", sandBoxDir + "regression_test_4784_4.fa");
 
     //1. Click the menu Tools -> BLAST-> BLAST+ Search...
-    //2. Select "_common_data/NIAID_pipelines/Call_variants/input_data/chr6/chr6.fa" as input file.
+    //2. Select "_common_data/fasta/chr6" as input file.
     //3. Press "Select a database file".
     //4. Choose "_common_data/cmdline/external-tool-support/blastplus/human_T1/human_T1.nhr".
     //5. Press "Search".
@@ -4613,11 +4810,11 @@ GUI_TEST_CLASS_DEFINITION(test_4795) {
     //    3. Open highlighting option panel tab
     GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Highlighting);
 
-    //    Expected state: "No colors" color scheme is selected, "No highlighting" highlight scheme is selected
+    //    Expected state: "UGENE" color scheme is selected, "No highlighting" highlight scheme is selected
     QComboBox* colorScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "colorScheme"));
     QComboBox* highlightingScheme = qobject_cast<QComboBox*>(GTWidget::findWidget(os, "highlightingScheme"));
-    GTComboBox::checkCurrentValue(os, colorScheme, "No colors");
-    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting");
+    GTComboBox::checkCurrentValue(os, colorScheme, "UGENE    ");
+    GTComboBox::checkCurrentValue(os, highlightingScheme, "No highlighting    ");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_4803_1) {
@@ -5086,7 +5283,7 @@ GUI_TEST_CLASS_DEFINITION(test_4885_2) {
 
 //    3. Doubleclick the first symbol of the first sequence.
 //    Expected state: UGENE doesn't ask about confirmation of the modification.
-    GTUtilsDialog::waitForDialogWhichMustNotBeRunned(os, new MessageBoxDialogFiller(os, QMessageBox::Cancel, "The alignment has been modified"));
+    GTUtilsDialog::waitForDialogWhichMustNotBeRun(os, new MessageBoxDialogFiller(os, QMessageBox::Cancel, "The alignment has been modified"));
 
     GTUtilsMSAEditorSequenceArea::moveTo(os, QPoint(0, 0));
     GTMouseDriver::doubleClick();
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h
index f4c92e4..c46be94 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_4001_5000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -144,6 +144,9 @@ GUI_TEST_CLASS_DECLARATION(test_4587)
 GUI_TEST_CLASS_DECLARATION(test_4588)
 GUI_TEST_CLASS_DECLARATION(test_4588_1)
 GUI_TEST_CLASS_DECLARATION(test_4588_2)
+GUI_TEST_CLASS_DECLARATION(test_4591)
+GUI_TEST_CLASS_DECLARATION(test_4591_1)
+GUI_TEST_CLASS_DECLARATION(test_4591_2)
 
 GUI_TEST_CLASS_DECLARATION(test_4606)
 GUI_TEST_CLASS_DECLARATION(test_4620)
@@ -153,6 +156,9 @@ GUI_TEST_CLASS_DECLARATION(test_4628)
 GUI_TEST_CLASS_DECLARATION(test_4674)
 GUI_TEST_CLASS_DECLARATION(test_4674_1)
 GUI_TEST_CLASS_DECLARATION(test_4674_2)
+GUI_TEST_CLASS_DECLARATION(test_4682)
+GUI_TEST_CLASS_DECLARATION(test_4682_1)
+GUI_TEST_CLASS_DECLARATION(test_4682_2)
 GUI_TEST_CLASS_DECLARATION(test_4687)
 GUI_TEST_CLASS_DECLARATION(test_4689_1)
 GUI_TEST_CLASS_DECLARATION(test_4689_2)
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp
index b3e71e3..2f163e8 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.cpp
@@ -1,6 +1,7 @@
+
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,9 +21,11 @@
  */
 
 #include <QApplication>
+#include <QDir>
 #include <QFile>
 #include <QListWidget>
 #include <QPlainTextEdit>
+#include <QRadioButton>
 #include <QTableView>
 #include <QTableWidget>
 #include <QWebElement>
@@ -36,7 +39,7 @@
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/DetView.h>
 #include <U2View/MSAEditorTreeViewer.h>
-#include <U2View/MSAGraphOverview.h>
+#include <U2View/MaGraphOverview.h>
 
 #include <base_dialogs/DefaultDialogFiller.h>
 #include <base_dialogs/GTFileDialog.h>
@@ -46,6 +49,7 @@
 #include <primitives/GTAction.h>
 #include <primitives/GTCheckBox.h>
 #include <primitives/GTComboBox.h>
+#include <primitives/GTGroupBox.h>
 #include <primitives/GTLineEdit.h>
 #include <primitives/GTListWidget.h>
 #include <primitives/GTMenu.h>
@@ -61,17 +65,21 @@
 #include <primitives/PopupChooser.h>
 #include <system/GTClipboard.h>
 #include <system/GTFile.h>
+#include <utils/GTKeyboardUtils.h>
 #include <utils/GTThread.h>
 #include <utils/GTUtilsDialog.h>
 
 #include "GTTestsRegressionScenarios_5001_6000.h"
 #include "GTUtilsAnnotationsTreeView.h"
 #include "GTUtilsAssemblyBrowser.h"
+#include "GTUtilsBookmarksTreeView.h"
 #include "GTUtilsCircularView.h"
 #include "GTUtilsDashboard.h"
 #include "GTUtilsDocument.h"
 #include "GTUtilsExternalTools.h"
 #include "GTUtilsLog.h"
+#include "GTUtilsMcaEditor.h"
+#include "GTUtilsMcaEditorSequenceArea.h"
 #include "GTUtilsMdi.h"
 #include "GTUtilsMsaEditor.h"
 #include "GTUtilsMsaEditorSequenceArea.h"
@@ -91,26 +99,37 @@
 #include "GTUtilsTaskTreeView.h"
 #include "GTUtilsWizard.h"
 #include "GTUtilsWorkflowDesigner.h"
+#include "runnables/ugene/corelibs/U2Gui/CreateObjectRelationDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ExportDocumentDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportACEFileDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/ImportAPRFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/ImportBAMFileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2Gui/PredictSecondaryStructureDialogFiller.h"
+#include "runnables/ugene/corelibs/U2Gui/RangeSelectionDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_assembly/ExportCoverageDialogFiller.h"
+#include "runnables/ugene/corelibs/U2View/ov_msa/BuildTreeDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/DistanceMatrixDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/GenerateAlignmentProfileDialogFiller.h"
 #include "runnables/ugene/corelibs/U2View/ov_msa/LicenseAgreementDialogFiller.h"
+#include "runnables/ugene/plugins/dna_export/ExportAnnotationsDialogFiller.h"
 #include "runnables/ugene/plugins/dna_export/ExportSequencesDialogFiller.h"
-#include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
 #include "runnables/ugene/plugins/dotplot/BuildDotPlotDialogFiller.h"
+#include "runnables/ugene/plugins/dotplot/DotPlotDialogFiller.h"
+#include "runnables/ugene/plugins/enzymes/ConstructMoleculeDialogFiller.h"
 #include "runnables/ugene/plugins/enzymes/DigestSequenceDialogFiller.h"
 #include "runnables/ugene/plugins/enzymes/FindEnzymesDialogFiller.h"
-#include "runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/AlignToReferenceBlastDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/BlastAllSupportDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/FormatDBDialogFiller.h"
+#include "runnables/ugene/plugins/external_tools/SnpEffDatabaseDialogFiller.h"
 #include "runnables/ugene/plugins/external_tools/SpadesGenomeAssemblyDialogFiller.h"
 #include "runnables/ugene/plugins/pcr/ImportPrimersDialogFiller.h"
+#include "runnables/ugene/plugins/workflow_designer/WizardFiller.h"
 #include "runnables/ugene/plugins_3rdparty/umuscle/MuscleDialogFiller.h"
+#include "runnables/ugene/ugeneui/DocumentFormatSelectorDialogFiller.h"
 #include "runnables/ugene/ugeneui/SaveProjectDialogFiller.h"
 #include "runnables/ugene/ugeneui/SequenceReadingModeSelectorDialogFiller.h"
 
-
 namespace U2 {
 
 namespace GUITest_regression_scenarios {
@@ -286,6 +305,11 @@ GUI_TEST_CLASS_DEFINITION(test_5027_1) {
     GTThread::waitForMainThread();
     GTUtilsWorkflowDesigner::click(os, "Input Variations File");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf/valid.vcf");
+
+    GTUtilsWorkflowDesigner::click(os, "Annotate and Predict Effects with SnpEff");
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
+
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -326,6 +350,11 @@ GUI_TEST_CLASS_DEFINITION(test_5027_2) {
     GTThread::waitForMainThread();
     GTUtilsWorkflowDesigner::click(os, "Input Variations File");
     GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + "_common_data/vcf/valid.vcf");
+
+    GTUtilsWorkflowDesigner::click(os, "Annotate and Predict Effects with SnpEff");
+    GTUtilsDialog::waitForDialog(os, new SnpEffDatabaseDialogFiller(os, "hg19"));
+    GTUtilsWorkflowDesigner::setParameter(os, "Genome", QVariant(), GTUtilsWorkflowDesigner::customDialogSelector);
+
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
@@ -534,6 +563,7 @@ GUI_TEST_CLASS_DEFINITION(test_5199) {
             GTUtilsTaskTreeView::waitTaskFinished(os);
 
             QTableWidget *resultsTable = GTWidget::findExactWidget<QTableWidget *>(os, "resultsTable", dialog);
+            GTGlobals::sleep();
             CHECK_SET_ERR(NULL != resultsTable, "resultsTable is NULL");
             const int resultsCount = resultsTable->rowCount();
             CHECK_SET_ERR(4 == resultsCount, QString("Unexpected results count: expected %1, got %2").arg(4).arg(resultsCount));
@@ -575,6 +605,61 @@ GUI_TEST_CLASS_DEFINITION(test_5208) {
     CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_5211) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Select the first sequence.
+    GTUtilsMsaEditor::clickSequenceName(os, "Phaneroptera_falcata");
+
+//    3. Copy it to the clipboard.
+    GTKeyboardUtils::copy(os);
+
+//    4. Press the next key sequence:
+//        Windows and Linux: Shift+Ins
+//        macOS: Meta+Y
+#ifndef Q_OS_MAC
+    GTKeyboardDriver::keyClick(Qt::Key_Insert, Qt::ShiftModifier);
+#else
+    GTKeyboardDriver::keyClick('y', Qt::MetaModifier);
+#endif
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: a new sequence is added to the alignment. There are no new objects and documents in the Project View.
+    int expectedSequencesCount = 19;
+    int sequencesCount = GTUtilsMsaEditor::getSequencesCount(os);
+    CHECK_SET_ERR(expectedSequencesCount == sequencesCount,
+                  QString("Incorrect count of sequences after the first insertion: expected %1, got %2")
+                  .arg(expectedSequencesCount).arg(sequencesCount));
+
+    const int expectedDocumentsCount = 2;
+    int documentsCount = GTUtilsProjectTreeView::findIndecies(os, "", QModelIndex(), 2).size();
+    CHECK_SET_ERR(expectedDocumentsCount == documentsCount,
+                  QString("Incorrect count of items in the Project View after the first insertion: expected %1, got %2")
+                  .arg(expectedDocumentsCount).arg(documentsCount));
+
+//    5. Press the next key sequence:
+//        Windows and Linux: Ctrl+V
+//        macOS: Cmd+V
+    GTKeyboardDriver::keyClick('v', Qt::ControlModifier);     // Qt::ControlModifier is for Cmd on Mac and for Ctrl on other systems
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: one more new sequence is added to the alignment. There are no new objects and documents in the Project View.
+    expectedSequencesCount = 20;
+    sequencesCount = GTUtilsMsaEditor::getSequencesCount(os);
+    CHECK_SET_ERR(expectedSequencesCount == sequencesCount,
+                  QString("Incorrect count of sequences after the second insertion: expected %1, got %2")
+                  .arg(expectedSequencesCount).arg(sequencesCount));
+
+    documentsCount = GTUtilsProjectTreeView::findIndecies(os, "", QModelIndex(), 2).size();
+    CHECK_SET_ERR(expectedDocumentsCount == documentsCount,
+                  QString("Incorrect count of items in the Project View after the second insertion: expected %1, got %2")
+                  .arg(expectedDocumentsCount).arg(documentsCount));
+}
+
 GUI_TEST_CLASS_DEFINITION(test_5216) {
     // 1. Connect to the public database
     //GTUtilsSharedDatabaseDocument::connectToUgenePublicDatabase(os);
@@ -662,9 +747,32 @@ GUI_TEST_CLASS_DEFINITION(test_5249) {
     CHECK_SET_ERR(!l.hasError(), "Error in the log");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_5252) {
+//    1. Open "data/samples/Genbank/murine.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open an additional view for the sequence.
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Open view" << "Open new view: Sequence View"));
+    GTUtilsProjectTreeView::click(os, "murine.gb", Qt::RightButton);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: there are two bookmarks: "murine [s] NC_001363" and "murine [s] NC_001363 2".
+    GTUtilsBookmarksTreeView::findItem(os, "murine [s] NC_001363");
+    GTUtilsBookmarksTreeView::findItem(os, "murine [s] NC_001363 2");
+
+//    3. Rename the annotation table object.
+    GTUtilsProjectTreeView::rename(os, "NC_001363 features", "test_5252");
+
+//    Expected state: bookmarks are not renamed.
+    GTUtilsBookmarksTreeView::findItem(os, "murine [s] NC_001363");
+    GTUtilsBookmarksTreeView::findItem(os, "murine [s] NC_001363 2");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_5268) {
 //    1. Open "data/samples/CLUSTALW/COI.aln".
     GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+	GTUtilsTaskTreeView::waitTaskFinished(os);
 
 //    2. Create a custom color scheme for the alignment with aan ppropriate alphabet.
     GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "test_5268", NewColorSchemeCreator::nucl));
@@ -677,14 +785,13 @@ GUI_TEST_CLASS_DEFINITION(test_5268) {
     GTUtilsOptionPanelMsa::setColorScheme(os, "test_5268");
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "Custom schemes" << "test_5268", PopupChecker::IsChecked));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
-
+	GTKeyboardDriver::keyClick(Qt::Key_Escape);
+	GTGlobals::sleep(500);
 //    5. Open {Settings -> Preferences -> Alignment Color Scheme}.
 //    6. Change color of the custom color scheme and click ok.
     GTUtilsDialog::waitForDialog(os, new NewColorSchemeCreator(os, "test_5268", NewColorSchemeCreator::nucl, NewColorSchemeCreator::Change));
     GTMenu::clickMainMenuItem(os, QStringList() << "Settings" << "Preferences...");
 
-    GTGlobals::sleep(500);
-
 //    Expected state: the settings dialog closed, new colors are applied for the opened MSA.
     const QString opColorScheme = GTUtilsOptionPanelMsa::getColorScheme(os);
     CHECK_SET_ERR(opColorScheme == "test_5268",
@@ -693,8 +800,8 @@ GUI_TEST_CLASS_DEFINITION(test_5268) {
 
     GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Colors" << "Custom schemes" << "test_5268", PopupChecker::IsChecked));
     GTUtilsMSAEditorSequenceArea::callContextMenu(os);
-
-    GTGlobals::sleep(500);
+	GTKeyboardDriver::keyClick(Qt::Key_Escape);
+	GTGlobals::sleep(500);
 }
 
 GUI_TEST_CLASS_DEFINITION(test_5278) {
@@ -714,7 +821,7 @@ GUI_TEST_CLASS_DEFINITION(test_5278) {
 
     GTGlobals::sleep();
     QTextEdit *textEdit = dynamic_cast<QTextEdit*>(GTWidget::findWidget(os, "reportTextEdit", GTUtilsMdi::activeWindow(os)));
-    CHECK_SET_ERR(textEdit->toPlainText().contains("1:    From AaaI (940) To AagI (24) - 3446 bp "), "Expected message is not found in the report text");
+    CHECK_SET_ERR(textEdit->toPlainText().contains("1:    From AaaI (944) To AagI (24) - 3442 bp "), "Expected message is not found in the report text");
 }
 
 GUI_TEST_CLASS_DEFINITION(test_5295) {
@@ -825,7 +932,7 @@ GUI_TEST_CLASS_DEFINITION(test_5352) {
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
-    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, "Close without Saving"));
+    GTUtilsDialog::waitForDialog(os, new MessageBoxDialogFiller(os, QMessageBox::Discard));
     HIWebElement element = GTUtilsDashboard::findElement(os, "", "BUTTON");
     GTUtilsDashboard::click(os, element);
 
@@ -851,9 +958,9 @@ GUI_TEST_CLASS_DEFINITION(test_5356) {
     GTUtilsWorkflowDesigner::addInputFile(os, "Read FASTQ Files with Reads 1", testDir + "_common_data/regression/5356/reads.fastq");
 
     GTUtilsWorkflowDesigner::click(os, "Cut Adapter");
-    GTUtilsWorkflowDesigner::setParameter(os, "FASTA file with adapters", QDir(testDir + "_common_data/regression/5356/adapter.fa").absolutePath(), GTUtilsWorkflowDesigner::textValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", "Custom", GTUtilsWorkflowDesigner::comboValue);
-    GTUtilsWorkflowDesigner::setParameter(os, "Custom directory", QDir(sandBoxDir).absolutePath(), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "FASTA file with 3' adapters", QDir(testDir + "_common_data/regression/5356/adapter.fa").absolutePath(), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", "Custom", GTUtilsWorkflowDesigner::comboValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Custom folder", QDir(sandBoxDir).absolutePath(), GTUtilsWorkflowDesigner::textValue);
 
     GTUtilsWorkflowDesigner::runWorkflow(os);
     GTUtilsTaskTreeView::waitTaskFinished(os);
@@ -874,7 +981,7 @@ GUI_TEST_CLASS_DEFINITION(test_5360) {
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsWorkflowDesigner::click(os, "Read FASTQ Files with Reads");
-    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + QString::fromLocal8Bit("_common_data/scenarios/_regression/5360/папка/риды.fastq"), true);
+    GTUtilsWorkflowDesigner::setDatasetInputFile(os, testDir + QString::fromUtf8("_common_data/scenarios/_regression/5360/папка/риды.fastq"), true);
 
     GTLogTracer lt;
     GTUtilsWorkflowDesigner::runWorkflow(os);
@@ -895,7 +1002,7 @@ GUI_TEST_CLASS_DEFINITION(test_5363_1) {
 
     FormatDBSupportRunDialogFiller::Parameters parametersDB;
     parametersDB.inputFilePath = dataDir + "/samples/Genbank/murine.gb";
-    parametersDB.outputDirPath = sandBoxDir;
+	parametersDB.outputDirPath = QDir(sandBoxDir).absolutePath();
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, parametersDB));
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST make database...");
 
@@ -923,6 +1030,7 @@ GUI_TEST_CLASS_DEFINITION(test_5363_1) {
 
     CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "blast result", U2Region(hitFrom, hitTo - hitFrom)),
                   QString("Cannot find blast result [%1, %2]").arg(hitFrom).arg(hitTo));
+
 }
 
 GUI_TEST_CLASS_DEFINITION(test_5363_2) {
@@ -938,7 +1046,7 @@ GUI_TEST_CLASS_DEFINITION(test_5363_2) {
 
     FormatDBSupportRunDialogFiller::Parameters parametersDB;
     parametersDB.inputFilePath = dataDir + "/samples/Genbank/murine.gb";
-    parametersDB.outputDirPath = sandBoxDir;
+	parametersDB.outputDirPath = QDir(sandBoxDir).absolutePath();
     GTUtilsDialog::waitForDialog(os, new FormatDBSupportRunDialogFiller(os, parametersDB));
     GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "BLAST" << "BLAST+ make database...");
 
@@ -992,9 +1100,87 @@ GUI_TEST_CLASS_DEFINITION(test_5367) {
     CHECK_SET_ERR(GTFile::equals(os, sandBoxDir + "/test_5367_coverage.txt", testDir + "/_common_data/bam/accepted_hits_with_gaps_coverage.txt"), "Exported coverage is wrong!");
 }
 
+GUI_TEST_CLASS_DEFINITION(test_5377) {
+//    1. Open file "_common_data/genbank/70Bp_new.gb".
+//    2. Search for restriction site HinFI.
+//    3. Digest into fragments, then reconstruct the original molecule.
+//    Expected state: the result sequence is equal to the original sequence. Fragments annotations have the same positions and lengths.
+    GTFileDialog::openFile(os, testDir + "_common_data/genbank/70Bp_new.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new FindEnzymesDialogFiller(os, QStringList() << "HinfI"));
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, MWTOOLBAR_ACTIVEMDI), "Find restriction sites"));
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new DigestSequenceDialogFiller(os));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Digest into fragments...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "Fragment 1", U2Region(36, 35)), "Fragment 1 is incorrect or not found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "Fragment 2", U2Region(1, 24)), "Fragment 2 is incorrect or not found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "Fragment 3", U2Region(28, 5)), "Fragment 3 is incorrect or not found");
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "activeModalWidget is NULL");
+
+            GTWidget::click(os, GTWidget::findWidget(os, "takeAllButton"));
+
+            QTreeWidget *tree = dynamic_cast<QTreeWidget*>(GTWidget::findWidget(os, "molConstructWidget"));
+            GTTreeWidget::click(os, GTTreeWidget::findItem(os, tree, "Blunt"));
+
+            GTWidget::click(os, GTWidget::findWidget(os, "downButton"));
+            GTWidget::click(os, GTWidget::findWidget(os, "downButton"));
+
+            QTabWidget* tabWidget = GTWidget::findExactWidget<QTabWidget*>(os, "tabWidget", dialog);
+            CHECK_SET_ERR(tabWidget != NULL, "tabWidget not found");
+            GTTabWidget::clickTab(os, tabWidget, "Output");
+
+            QLineEdit* linEdit = GTWidget::findExactWidget<QLineEdit*>(os, "filePathEdit");
+            CHECK_SET_ERR(linEdit != NULL, "filePathEdit not found");
+            GTLineEdit::setText(os, linEdit, QFileInfo(sandBoxDir + "test_5377").absoluteFilePath());
+
+            GTUtilsDialog::clickButtonBox(os, QApplication::activeModalWidget(), QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new ConstructMoleculeDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Cloning" << "Construct molecule...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    CHECK_SET_ERR(GTUtilsSequenceView::getSeqWidgetByNumber(os)->getSequenceLength() == 70, "The result length of the constructed molecule is wrong");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "A sequence Fragment 1", U2Region(36, 35)), "Constructed molecule: Fragment 1 is incorrect or not found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "A sequence Fragment 2", U2Region(1, 24)), "Constructed molecule: Fragment 2 is incorrect or not found");
+    CHECK_SET_ERR(GTUtilsAnnotationsTreeView::findRegion(os, "A sequence Fragment 3", U2Region(28, 5)), "Constructed molecule: Fragment 3 is incorrect or not found");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5371) {
+    //1. Open bam assembly with index with path containing non ASCII symbols
+    //Expected state: assembly opened successfully
+
+    GTLogTracer lt;
+    GTUtilsDialog::waitForDialog(os, new ImportBAMFileFiller(os, sandBoxDir + "5371.bam.ugenedb"));
+
+    GTFileDialogUtils *ob = new GTFileDialogUtils(os, testDir + "_common_data/scenarios/_regression/5371/папка/", "асс ссембли.bam", GTFileDialogUtils::Open,
+        GTGlobals::UseKey , GTFileDialogUtils::CopyPaste);
+    GTUtilsDialog::waitForDialog(os, ob);
+
+    ob->openFileDialog();
+    GTThread::waitForMainThread();
+    GTGlobals::sleep(100);
+
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    CHECK_SET_ERR(!lt.hasError(), "There is error in the log");
+}
+
 GUI_TEST_CLASS_DEFINITION(test_5412) {
 //    1. Open "/_common_data/reads/wrong_order/align_bwa_mem.uwl"
-//    2. Set input data: e_coli_mess_1.fastq nd e_coli_mess_2.fastq (the directory from step 1)
+//    2. Set input data: e_coli_mess_1.fastq nd e_coli_mess_2.fastq (the folder from step 1)
 //    3. Reference: "/_common_data/e_coli/NC_008253.fa"
 //    4. Set requiered output parameters
 //    5. Set "Filter unpaired reads" to false
@@ -1013,7 +1199,7 @@ GUI_TEST_CLASS_DEFINITION(test_5412) {
     GTUtilsWorkflowDesigner::addInputFile(os, "File List 2", testDir + "/_common_data/reads/wrong_order/e_coli_mess_2.fastq");
 
     GTUtilsWorkflowDesigner::click(os, "Align Reads with BWA MEM");
-    GTUtilsWorkflowDesigner::setParameter(os, "Output directory", QDir(sandBoxDir).absolutePath(), GTUtilsWorkflowDesigner::textValue);
+    GTUtilsWorkflowDesigner::setParameter(os, "Output folder", QDir(sandBoxDir).absolutePath(), GTUtilsWorkflowDesigner::textValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Output file name", "test_5412", GTUtilsWorkflowDesigner::textValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Reference genome", testDir + "/_common_data/e_coli/NC_008253.fa", GTUtilsWorkflowDesigner::textValue);
     GTUtilsWorkflowDesigner::setParameter(os, "Filter unpaired reads", false, GTUtilsWorkflowDesigner::comboValue);
@@ -1092,12 +1278,2612 @@ GUI_TEST_CLASS_DEFINITION(test_5425) {
     };
     GTUtilsDialog::waitForDialog(os, new SpadesGenomeAssemblyDialogFiller(os, "Paired-end (Interlaced)", QStringList() << testDir + "_common_data/cmdline/external-tool-support/spades/ecoli_1K_1.fq",
         QStringList(), sandBoxDir, "Single Cell", "Error correction only", "aaaaa", 1, 228));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Genome de novo assembly...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Reads de novo assembly (with SPAdes)...");
     GTUtilsTaskTreeView::waitTaskFinished(os);
 
     GTUtilsDialog::waitForDialog(os, new SpadesDialogSettingsChecker(os, "Paired-end (Interlaced)", "Single Cell", "Error correction only", "aaaaa", 1, 228));
-    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Genome de novo assembly...");
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "NGS data analysis" << "Reads de novo assembly (with SPAdes)...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5447_1) {
+//    1. Open "data/samples/Genbank/murine.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open the context menu on the "NC_001363 features" object in the project view.
+//    3. Select "Export/Import" -> "Export annotations..." menu item.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
+
+//    Expected state: an "Export Annotations" dialog opens, "GenBank" format is selected, there is an "Add to project" checkbox, it is enabled and checked.
+            GTComboBox::checkCurrentValue(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog), "GenBank");
+
+            QCheckBox *addToProjectCheck = GTWidget::findExactWidget<QCheckBox *>(os, "addToProjectCheck", dialog);
+            CHECK_SET_ERR(NULL != addToProjectCheck, "addToProjectCheck is NULL");
+            CHECK_SET_ERR(addToProjectCheck->isVisible(), "addToProjectCheck is not visible");
+            CHECK_SET_ERR(addToProjectCheck->isEnabled(), "addToProjectCheck is not enabled");
+            CHECK_SET_ERR(addToProjectCheck->isChecked(), "addToProjectCheck is not checked by default");
+
+//    4. Set a valid result file path, accept the dialog.
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "fileNameEdit", dialog), sandBoxDir + "test_5447_1.gb");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export annotations..."));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, new Scenario()));
+    GTUtilsProjectTreeView::callContextMenu(os, "NC_001363 features", "murine.gb");
+
+//    Expected state: the annotations were exported, a new document with an annotations table object was added to the project.
+    const qint64 fileSize = GTFile::getSize(os, sandBoxDir + "test_5447_1.gb");
+    CHECK_SET_ERR(0 != fileSize, "Result file is empty");
+
+    const QModelIndex annotationsTableObjectIndex = GTUtilsProjectTreeView::findIndex(os, "NC_001363 features", GTUtilsProjectTreeView::findIndex(os, "test_5447_1.gb"));
+    CHECK_SET_ERR(annotationsTableObjectIndex.isValid(), "Annotation object not found");
+
+//    5. Add the object to the "murine.gb" sequence.
+    GTUtilsDialog::waitForDialog(os, new CreateObjectRelationDialogFiller(os));
+    GTUtilsProjectTreeView::dragAndDrop(os, annotationsTableObjectIndex, GTUtilsSequenceView::getSeqWidgetByNumber(os));
+
+    GTGlobals::sleep(1000);
+
+//    Expected state: all annotations are doubled.
+    const QStringList oldGroups = GTUtilsAnnotationsTreeView::getGroupNames(os, "NC_001363 features [murine.gb]");
+    const QStringList newGroups = GTUtilsAnnotationsTreeView::getGroupNames(os, "NC_001363 features [test_5447_1.gb]");
+    bool oldCommentGroupExists = false;
+    foreach (const QString &oldGroup, oldGroups) {
+        if (oldGroup == "comment  (0, 1)") {
+            oldCommentGroupExists = true;
+            continue;
+        }
+        CHECK_SET_ERR(newGroups.contains(oldGroup), QString("'%1' group from the original file is not present in a new file").arg(oldGroup));
+    }
+    CHECK_SET_ERR(oldGroups.size() - (oldCommentGroupExists ? 1 : 0) == newGroups.size(),
+                  QString("Groups count from the original file is not equal to a groups count in a new file (%1 and %2").arg(oldGroups.size()).arg(newGroups.size()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5447_2) {
+//    1. Open "data/samples/Genbank/murine.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open the context menu on the "NC_001363 features" object in the project view.
+//    3. Select "Export/Import" -> "Export annotations..." menu item.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
+
+//    Expected state: an "Export Annotations" dialog opens, "GenBank" format is selected, there is an "Add to project" checkbox, it is enabled and checked.
+            GTComboBox::checkCurrentValue(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog), "GenBank");
+
+            QCheckBox *addToProjectCheck = GTWidget::findExactWidget<QCheckBox *>(os, "addToProjectCheck", dialog);
+            CHECK_SET_ERR(NULL != addToProjectCheck, "addToProjectCheck is NULL");
+            CHECK_SET_ERR(addToProjectCheck->isVisible(), "addToProjectCheck is not visible");
+            CHECK_SET_ERR(addToProjectCheck->isEnabled(), "addToProjectCheck is not enabled");
+            CHECK_SET_ERR(addToProjectCheck->isChecked(), "addToProjectCheck is not checked by default");
+
+//    4. Select "CSV" format.
+//    Expected state: a "CSV" format is selected, the "Add to project" checkbox is disabled.
+            GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog), "CSV");
+            CHECK_SET_ERR(addToProjectCheck->isVisible(), "addToProjectCheck is not visible");
+            CHECK_SET_ERR(!addToProjectCheck->isEnabled(), "addToProjectCheck is unexpectedly enabled");
+
+//    5. Set a valid result file path, accept the dialog.
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit *>(os, "fileNameEdit", dialog), sandBoxDir + "test_5447_2.csv");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export annotations..."));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, new Scenario()));
+    GTUtilsProjectTreeView::callContextMenu(os, "NC_001363 features", "murine.gb");
+
+//    Expected state: the annotations were exported, there are no new documents in the project.
+    const qint64 fileSize = GTFile::getSize(os, sandBoxDir + "test_5447_2.csv");
+    CHECK_SET_ERR(0 != fileSize, "Result file is empty");
+
+    const bool newDocumentExists = GTUtilsProjectTreeView::checkItem(os, "test_5447_2.csv", GTGlobals::FindOptions(false));
+    CHECK_SET_ERR(!newDocumentExists, "New document unexpectedly exists");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5447_3) {
+//    1. Open "data/samples/Genbank/murine.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open the context menu on the "NC_001363 features" object in the project view.
+//    3. Select "Export/Import" -> "Export annotations..." menu item.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
+
+//    Expected state: an "Export Annotations" dialog opens, "GenBank" format is selected, there is an "Add to project" checkbox, it is enabled and checked.
+            GTComboBox::checkCurrentValue(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog), "GenBank");
+
+            QCheckBox *addToProjectCheck = GTWidget::findExactWidget<QCheckBox *>(os, "addToProjectCheck", dialog);
+            CHECK_SET_ERR(NULL != addToProjectCheck, "addToProjectCheck is NULL");
+            CHECK_SET_ERR(addToProjectCheck->isVisible(), "addToProjectCheck is not visible");
+            CHECK_SET_ERR(addToProjectCheck->isEnabled(), "addToProjectCheck is not enabled");
+            CHECK_SET_ERR(addToProjectCheck->isChecked(), "addToProjectCheck is not checked by default");
+
+//    4. Select each format.
+//    Expected state: the "Add to project" checkbox becomes disabled only for CSV format.
+            const QStringList formats = GTComboBox::getValues(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog));
+            foreach (const QString &format, formats) {
+                GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox *>(os, "formatsBox", dialog), format);
+                CHECK_SET_ERR(addToProjectCheck->isVisible(), "addToProjectCheck is not visible");
+                CHECK_SET_ERR(addToProjectCheck->isEnabled() != (format == "CSV"), QString("addToProjectCheck is unexpectedly enabled for format '%1'").arg(format));
+            }
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export annotations..."));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, new Scenario()));
+    GTUtilsProjectTreeView::callContextMenu(os, "NC_001363 features", "murine.gb");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5469) {
+    // 1. Open two different GenBank sequences in one Sequence view.
+    // 2. Select two different annotations (one from the first sequence, and one from the second sequence) using the "Ctrl" keyboard button.
+    // Extected state: there is no crash
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/sars.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Add to view" << "Add to view: murine [s] NC_001363"));
+        GTUtilsProjectTreeView::click(os, "NC_004718", Qt::RightButton);
+        GTGlobals::sleep();
+
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTUtilsSequenceView::clickAnnotationDet(os, "misc_feature", 2);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsSequenceView::clickAnnotationDet(os, "5'UTR", 1, 1);
+	GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+	CHECK_SET_ERR(GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size() == 2, QString("Wrong number of selected annotations expect %1, got %2").arg("2").arg(GTUtilsAnnotationsTreeView::getAllSelectedItems(os).size()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5492) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_short.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select last symbol of the read and insert some gaps, until reference will increase for a few symbols
+    MultipleAlignmentRowData* row = GTUtilsMcaEditor::getMcaRow(os, 0);
+    int end = row->getCoreStart() + row->getCoreLength() - 1;
+    QPoint p(end, 0);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, p);
+
+    int i = 15;
+    while (i != 0) {
+        GTKeyboardDriver::keyClick(Qt::Key_Space);
+        GTGlobals::sleep(300);
+        i--;
+    }
+
+    //6. Select this last symbil again, press "Insert character" and insert gap
+    row = GTUtilsMcaEditor::getMcaRow(os, 0);
+    end = row->getCoreStart() + row->getCoreLength() - 1;
+    p = QPoint(end, 0);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, p);
+    GTGlobals::sleep(1000);
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace character/gap");
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+    GTGlobals::sleep(1000);
+
+    //Expected : all gaps since a place when you started to insert, will turn into trailing
+    row = GTUtilsMcaEditor::getMcaRow(os, 0);
+    int newRowLength = row->getCoreStart() + row->getCoreLength() - 1;
+    CHECK_SET_ERR(newRowLength < end, "Incorrect length");
+
+    int refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    //7. Press "Remove all coloumns of gaps "
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Remove all columns of gaps");
+
+    //Expected: Reference will be trimmed
+    int newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(newRefLength < refLength, QString("Expected: New ref length is less then old ref length, current: new = %1, old = %2").arg(QString::number(newRefLength)).arg(QString::number(refLength)));
+
+    //8. Press "undo"
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected: reference will be restored with gaps
+    newRefLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(newRefLength == refLength, QString("Expected: New ref length is equal old ref length, current: new = %1, old = %2").arg(QString::number(newRefLength)).arg(QString::number(refLength)));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5495) {
+    //1) Open samples/FASTA/human_T1.fa
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2) Select 100..10 region of the sequence
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+
+            QLineEdit *startEdit = dialog->findChild<QLineEdit*>("startEdit");
+            QLineEdit *endEdit = dialog->findChild<QLineEdit*>("endEdit");
+            CHECK_SET_ERR(startEdit != NULL, "QLineEdit \"startEdit\" not found");
+            CHECK_SET_ERR(endEdit != NULL, "QLineEdit \"endEdit\" not found");
+
+            GTLineEdit::setText(os, startEdit, QString::number(321));
+            GTLineEdit::setText(os, endEdit, QString::number(123));
+
+            QDialogButtonBox* box = qobject_cast<QDialogButtonBox*>(GTWidget::findWidget(os, "buttonBox"));
+            QPushButton* goButton = box->button(QDialogButtonBox::Ok);
+            CHECK_SET_ERR(goButton != NULL, "Go button not found");
+            CHECK_SET_ERR(!goButton->isEnabled(), "Go button is enabled");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new SelectSequenceRegionDialogFiller(os, new Scenario));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Select" << "Sequence region"));
+    GTMenu::showContextMenu(os, GTWidget::findWidget(os, "ADV_single_sequence_widget_0"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5499) {
+//    1. Open txt file (_common_data/text/text.txt).
+//    Expected state: "Select correct document format" dialog appears
+//    2. Select "Choose format manually" with the default ABIF format.
+//    3. Click Ok.
+    GTLogTracer logTracer;
+
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "_common_data/text/text.txt"));
+    GTUtilsDialog::waitForDialog(os, new DocumentFormatSelectorDialogFiller(os, "ABIF"));
+    GTUtilsDialog::waitForDialog(os, new SequenceReadingModeSelectorDialogFiller(os, SequenceReadingModeSelectorDialogFiller::Separate));
+    GTMenu::clickMainMenuItem(os, QStringList() << "File" << "Open as...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    Expected state: the message about "not ABIF format" appears, UGENE doesn't crash.
+    GTUtilsLog::checkContainsError(os, logTracer, "Not a valid ABIF file");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5517) {
+    //1. Open sequence
+    //2. Open build dotplot dialog
+    //3. Check both checkboxes direct and invert repeats search
+    //Expected state: UGENE not crashed
+    GTFileDialog::openFile(os, dataDir + "samples/FASTA/", "human_T1.fa");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTGlobals::sleep();
+
+    GTUtilsDialog::waitForDialog(os, new DotPlotFiller(os, 100, 0, true));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Build dotplot...", GTGlobals::UseMouse);
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5520_1) {
+    GTFileDialog::openFile(os, dataDir + "/samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "/_common_data/cmdline/external-tool-support/blastall/sars_middle.nhr"));
+            GTWidget::click(os, GTWidget::findWidget(os, "selectDatabasePushButton"));
+
+            QRadioButton* rbNewTable = GTWidget::findExactWidget<QRadioButton*>(os, "rbCreateNewTable");
+            CHECK_SET_ERR(rbNewTable != NULL, "rbCreateNewTable not found");
+            GTRadioButton::click(os, rbNewTable);
+            GTGlobals::sleep();
+
+            QLineEdit* leTablePath = GTWidget::findExactWidget<QLineEdit*>(os, "leNewTablePath");
+            CHECK_SET_ERR(leTablePath != NULL, "leNewTablePath not found");
+            GTLineEdit::setText(os, leTablePath, sandBoxDir + "/test_5520_1.gb");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5520_2) {
+    GTFileDialog::openFile(os, dataDir + "/samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal widget is NULL");
+
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, testDir + "/_common_data/cmdline/external-tool-support/blastall/sars_middle.nhr"));
+            GTWidget::click(os, GTWidget::findWidget(os, "selectDatabasePushButton"));
+
+            QRadioButton* rbNewTable = GTWidget::findExactWidget<QRadioButton*>(os, "rbCreateNewTable");
+            CHECK_SET_ERR(rbNewTable != NULL, "rbCreateNewTable not found");
+            GTRadioButton::click(os, rbNewTable);
+            GTGlobals::sleep();
+
+            QLineEdit* leTablePath = GTWidget::findExactWidget<QLineEdit*>(os, "leNewTablePath");
+            CHECK_SET_ERR(leTablePath != NULL, "leNewTablePath not found");
+            GTLineEdit::setText(os, leTablePath, sandBoxDir + "/test_5520_2.gb");
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BlastAllSupportDialogFiller(os, new Scenario()));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Analyze" << "Query with local BLAST+...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5562_1) {
+//1. Open File "\samples\CLUSTALW\HIV-1.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Open "Statistics" Options Panel tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::Statistics);
+
+//3. Click ">" button to set Reference sequence
+    GTUtilsOptionPanelMsa::addReference(os, "sf170");
+
+//4. Click check box "Show distance coloumn"
+    //GTWidget::findExactWidget<QComboBox*>(os, "showDistancesColumnCheck");
+    GTCheckBox::setChecked(os, "showDistancesColumnCheck", true);
+
+//5. Set combo box value "Hamming dissimilarity"
+    GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algoComboBox"), "Hamming dissimilarity");
+
+//6. Set radio button value "Percents"
+    GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton*>(os, "percentsButton"));
+
+//7. Click check box "Exclude gaps"
+    GTCheckBox::setChecked(os, "excludeGapsCheckBox", true);
     GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state: Percents near: "ug46" is 6%,
+//                               "primer_ed5" is 0%
+//                               "primer_es7" is 1%
+    QString val = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 8);
+    CHECK_SET_ERR("6%" == val, QString("incorrect similarity: expected %1, got %2").arg("6%").arg(val));
+    val = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 19);
+    CHECK_SET_ERR("0%" == val, QString("incorrect similarity: expected %1, got %2").arg("0%").arg(val));
+    val = GTUtilsMSAEditorSequenceArea::getSimilarityValue(os, 21);
+    CHECK_SET_ERR("1%" == val, QString("incorrect similarity: expected %1, got %2").arg("1%").arg(val));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5562_2) {
+//1. Open File "\samples\CLUSTALW\HIV-1.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//2. Open context menu in sequence area
+//3. Click "Statistick->Generate Distance Matrix"
+    class Scenario : public CustomScenario{
+        void run(HI::GUITestOpStatus &os) {
+            QWidget* dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog != NULL, "dialog not found");
+            //4. Set combo box value "Hamming dissimilarity"
+            GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algoCombo", dialog), "Hamming dissimilarity");
+            //5. Set radio button value "Percents"
+            GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton*>(os, "percentsRB", dialog));
+            //6. Click check box "Exclude gaps"
+            GTCheckBox::setChecked(os, "checkBox", true, dialog);
+            //7. Click check box "Save profile to file"
+            GTGroupBox::setChecked(os, "saveBox", dialog);
+            //8. Set radio button value "Hypertext"
+            //9. Set any valid file name
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "fileEdit", dialog), sandBoxDir + "5562_2_HTML.html");
+            //10. Accept the dialog.
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix..."));
+    GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, new Scenario));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//Expected state : row "ug46", coloumn "sf170" value 26 % ,
+//                 row "sf170", coloumn "ug46" value 6 % ,
+//                 row "primer_ed31", coloumn "sf170" value 7 %
+//                 row "sf170", coloumn "primer_ed31" value 0 %
+    QByteArray file = GTFile::readAll(os, sandBoxDir + "5562_2_HTML.html");
+    QByteArray find = "ug46</td><td bgcolor=#60ff00>26%</td><td bgcolor=#ff9c00>23%";
+    bool check = file.contains(find);
+    CHECK_SET_ERR(check, QString("incorrect similarity"));
+    find = "21%</td><td bgcolor=#ff5555>6%</td><td bgcolor=#ff9c00>19%";
+    file.contains(find);
+    CHECK_SET_ERR(check, QString("incorrect similarity"));
+    find = "primer_ed31< / td><td bgcolor = #ff5555>7 % < / td><td bgcolor = #ff5555>7 %";
+    file.contains(find);
+    CHECK_SET_ERR(check, QString("incorrect similarity"));
+    find = "0%</td><td bgcolor=#ff5555>0%</td><td bgcolor=#ff5555>1%";
+    file.contains(find);
+    CHECK_SET_ERR(check, QString("incorrect similarity"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5562_3) {
+    //1. Open File "\samples\CLUSTALW\HIV-1.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Open context menu in sequence area
+    //3. Click "Statistick->Generate Distance Matrix"
+    class Scenario : public CustomScenario{
+        void run(HI::GUITestOpStatus &os) {
+            QWidget* dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog != NULL, "dialog not found");
+            //4. Set combo box value "Hamming dissimilarity"
+            GTComboBox::setIndexWithText(os, GTWidget::findExactWidget<QComboBox*>(os, "algoCombo", dialog), "Hamming dissimilarity");
+            //5. Set radio button value "Percents"
+            GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton*>(os, "percentsRB", dialog));
+            //6. Click check box "Exclude gaps"
+            GTCheckBox::setChecked(os, "checkBox", true, dialog);
+            //7. Click check box "Save profile to file"
+            GTGroupBox::setChecked(os, "saveBox", dialog);
+            //8. Set radio button value "Comma Separated"
+            GTRadioButton::click(os, GTWidget::findExactWidget<QRadioButton*>(os, "csvRB", dialog));
+            //9. Set any valid file name
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "fileEdit", dialog), sandBoxDir + "5562_3_CSV.csv");
+            //10. Accept the dialog.
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Statistics" << "Generate distance matrix..."));
+    GTUtilsDialog::waitForDialog(os, new DistanceMatrixDialogFiller(os, new Scenario));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state : the file should look like a sample file "_common_data/scenarios/_regression/5562/5562.csv"
+    bool check = GTFile::equals(os, testDir + "_common_data/scenarios/_regression/5562/5562.csv", sandBoxDir + "5562_3_CSV.csv");
+    CHECK_SET_ERR(check, QString("files are not equal"));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5588) {
+    //1. Open File "/samples/CLUSTALW/HIV-1.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/HIV-1.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    //2. Select a 6th column with a mouse click to the consensus area
+    GTUtilsMsaEditor::clickColumn(os, 5);
+    //3. Press the Shift key
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    //4. Select a 15th column with a mouse click to the consensus area
+    GTUtilsMsaEditor::clickColumn(os, 14);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    //Expected state : All columns between 6th and 15th clicks are selected
+    QRect rect = GTUtilsMSAEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(rect == QRect(QPoint(5, 0), QPoint(14, 24)), QString("Incorrect selected area, %1, %2, %3, %4")
+        .arg(rect.topLeft().x()).arg(rect.topLeft().y()).arg(rect.bottomRight().x()).arg(rect.bottomRight().y()));
+
+    //5. Select a 30th column with a mouse click to the consensus area
+    GTUtilsMsaEditor::clickColumn(os, 29);
+    //6. Press the Shift key
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    //7. Select a 12th column with a mouse click to the consensus area
+    GTUtilsMsaEditor::clickColumn(os, 11);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    // Expected state : All columns between 12th and 30th clicks are selected
+    rect = GTUtilsMSAEditorSequenceArea::getSelectedRect(os);
+    CHECK_SET_ERR(rect == QRect(QPoint(11, 0), QPoint(29, 24)), QString("Incorrect selected area, %1, %2, %3, %4")
+        .arg(rect.topLeft().x()).arg(rect.topLeft().y()).arg(rect.bottomRight().x()).arg(rect.bottomRight().y()));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5594_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select reference pos 15
+    GTUtilsMcaEditorSequenceArea::clickToReferencePosition(os, 15);
+
+    //6. Press reference pos 35 with shift modifier
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTUtilsMcaEditorSequenceArea::clickToReferencePosition(os, 35);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTGlobals::sleep();
+
+    //Expected: selected length = 20
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    CHECK_SET_ERR(reg.length == 21, QString("Unexpexter selected length, expected: 20, current: %1").arg(reg.length));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5594_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Push "Show/Hide Chromatograms" button in the main menu
+    bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_5B70");
+    if (isChromatogramShown) {
+        GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "chromatograms"));
+    }
+
+    //6. Select read "SZYD_Cas9_CR51"
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR51");
+
+    //7. Select read "SZYD_Cas9_CR61" with shift modifier
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR61");
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTGlobals::sleep();
+
+    //Expected: selected length = 8
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getSelectedRowsNum(os);
+    CHECK_SET_ERR(reg.length == 8, QString("Unexpexter selected length, expected: 8, current: %1").arg(reg.length));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5594_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select reference pos 15
+    GTUtilsMcaEditorSequenceArea::clickToReferencePosition(os, 15);
+
+    //6. Press right 5 times with shift modifier
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    for (int i = 0; i < 5; i++) {
+        GTKeyboardDriver::keyClick(Qt::Key_Right);
+        GTGlobals::sleep(200);
+    }
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTGlobals::sleep();
+
+    //Expected: selected length = 20
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    CHECK_SET_ERR(reg.length == 6, QString("Unexpexter selected length, expected: 6, current: %1").arg(reg.length));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5594_4) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Push "Show/Hide Chromatograms" button in the main menu
+    bool isChromatogramShown = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_5B70");
+    if (isChromatogramShown) {
+        GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "chromatograms"));
+    }
+
+    //6. Select read "SZYD_Cas9_CR51"
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR51");
+
+    //7. Prss down 5 times with shift modifier
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    for (int i = 0; i < 5; i++) {
+        GTKeyboardDriver::keyClick(Qt::Key_Down);
+        GTGlobals::sleep(200);
+    }
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTGlobals::sleep();
+
+    //Expected: selected length = 6
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getSelectedRowsNum(os);
+    CHECK_SET_ERR(reg.length == 6, QString("Unexpexter selected length, expected: 6, current: %1").arg(reg.length));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5622) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference_gapped.gb (reference with gaps);
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_gapped.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: all gaps columns was removed
+    qint64 refLengthBeforeGapsRemove = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove all columns of gaps"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    qint64 refLengthAfterGapsRemove = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    CHECK_SET_ERR(refLengthBeforeGapsRemove == refLengthAfterGapsRemove, QString("Equals befor adn after gaps removing not equal, length before: %1, length after: %2").arg(QString::number(refLengthBeforeGapsRemove)).arg(QString::number(refLengthAfterGapsRemove)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5636) {
+    //1. Open File "\samples\CLUSTALW\COI.aln"
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+   //2. Click Actions->Align->Align sequence to profile with MUSCLE...
+    //3. Select "\samples\CLUSTALW\COI.aln"
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Align sequences to profile with MUSCLE..."));
+    GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils(os, dataDir + "samples/CLUSTALW/COI.aln"));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Align");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected state: 18 sequences are added to the msa.
+    CHECK_SET_ERR(GTUtilsMsaEditor::getSequencesCount(os) == 36, "Incorrect sequences count");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5637) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_short.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: row length must be equal or lesser then reference length
+    qint64 refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    MultipleAlignmentRowData* row = GTUtilsMcaEditor::getMcaRow(os, 0);
+    qint64 rowLength = row->getRowLengthWithoutTrailing();
+    CHECK_SET_ERR(rowLength <= refLength, QString("Expected: row length must be equal or lesser then reference length, current: row lenght = %1, reference length = %2").arg(QString::number(rowLength)).arg(QString::number(refLength)));
+
+    //5. Select a char in the first row
+    QPoint p(5500, 0);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, p);
+
+    //6. insert 6 gaps
+    int i = 6;
+    while (i != 0) {
+        GTGlobals::sleep(1000);
+        GTKeyboardDriver::keyClick(Qt::Key_Space);
+        i--;
+    }
+
+    //Expected: row length must be equal or lesser then reference length
+    refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    row = GTUtilsMcaEditor::getMcaRow(os, 1);
+    rowLength = row->getRowLengthWithoutTrailing();
+    CHECK_SET_ERR(rowLength <= refLength, QString("Expected: row length must be equal or lesser then reference length, current: row lenght = %1, reference length = %2").arg(QString::number(rowLength)).arg(QString::number(refLength)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5659) {
+    // 1. Open murine.gb
+    // 2. Context menu on annotations object
+    // Expected state: export annotataions dialog appeared
+    // 3. Check format combobox
+    // Expected state: BAM format is abcent
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
+
+            QComboBox *comboBox = dialog->findChild<QComboBox*>();
+            CHECK_SET_ERR(comboBox != NULL, "ComboBox not found");
+
+            QStringList formats = GTComboBox::getValues(os, comboBox);
+            CHECK_SET_ERR(!formats.contains("BAM"), "BAM format is present in annotations export dialog");
+
+            QDialogButtonBox* buttonBox = dialog->findChild<QDialogButtonBox*>("buttonBox");
+            CHECK_SET_ERR(buttonBox != NULL, "buttonBox is NULL");
+
+            QPushButton *cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
+            CHECK_SET_ERR(cancelButton != NULL, "cancelButton is NULL");
+            GTWidget::click(os, cancelButton);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << ADV_MENU_EXPORT << "action_export_annotations"));
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, new Scenario()));
+    GTMouseDriver::moveTo(GTUtilsAnnotationsTreeView::getItemCenter(os, "source"));
+    GTMouseDriver::click(Qt::RightButton);
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5681) {
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(NULL != dialog, "Active modal dialog is NULL");
+
+            QComboBox *comboBox = dialog->findChild<QComboBox*>();
+            CHECK_SET_ERR(comboBox != NULL, "ComboBox not found");
+
+            QStringList formats = GTComboBox::getValues(os, comboBox);
+            CHECK_SET_ERR(!formats.contains("BAM"), "BAM format is present in annotations export dialog");
+
+            QDialogButtonBox* buttonBox = dialog->findChild<QDialogButtonBox*>("buttonBox");
+            CHECK_SET_ERR(buttonBox != NULL, "buttonBox is NULL");
+
+            QPushButton *cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
+            CHECK_SET_ERR(cancelButton != NULL, "cancelButton is NULL");
+            GTWidget::click(os, cancelButton);
+        }
+    };
+
+    //1. Open "data/samples/Genbank/murine.gb".
+    GTFileDialog::openFile(os, dataDir + "samples/Genbank/murine.gb");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Open the context menu for the "NC_001363 features" object.
+    //3. Select "Export/Import" -> "Export annotations..." menu item.
+    //4. Set any valid output path, select "UGENE Database" format.
+    //5. Accept the dialog.
+    GTUtilsDialog::waitForDialog(os, new ExportAnnotationsFiller(os, sandBoxDir + "murine_annotations.gb", ExportAnnotationsFiller::ugenedb, true, false, false));
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Export/Import" << "Export annotations..."));
+    GTUtilsProjectTreeView::callContextMenu(os, "NC_001363 features");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: No safe point
+    GTUtilsProjectTreeView::checkItem(os, "murine_annotations.gb");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5714_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+
+    //5. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //6. Press Ctrl + Shift + Backspace
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Backspace);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+    //Expected: row length must be lesser than row length before trim
+    qint64 currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //7. Press undo
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected: current row length is equal start row length
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength == rowLength, QString("Expected: current row length is equal start row length, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //8. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //9. Press Ctrl + Shift + Delete
+    GTKeyboardDriver::keyPress(Qt::Key_Control);
+    GTKeyboardDriver::keyPress(Qt::Key_Shift);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTKeyboardDriver::keyRelease(Qt::Key_Shift);
+    GTKeyboardDriver::keyRelease(Qt::Key_Control);
+
+    //Expected: row length must be lesser than row length before trim
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5714_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+
+    //5. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //6. Press "Trim left end" from the context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Trim left end"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: row length must be lesser than row length before trim
+    qint64 currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //7. Press undo
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected: current row length is equal start row length
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength == rowLength, QString("Expected: current row length is equal start row length, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //8. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //9. Press "Trim right end" from the context menu
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Trim right end"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: row length must be lesser than row length before trim
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5714_3) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    qint64 rowLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+
+    //5. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //6. Press "Trim left end" from the main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Trim left end");
+
+    //Expected: row length must be lesser than row length before trim
+    qint64 currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //7. Press undo
+    GTUtilsMcaEditor::undo(os);
+
+    //Expected: current row length is equal start row length
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength == rowLength, QString("Expected: current row length is equal start row length, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+
+    //8. Select position 2066 of the second read
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2066, 1));
+
+    //9. Press "Trim right end" from the main menu
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Trim right end");
+
+    //Expected: row length must be lesser than row length before trim
+    currentLength = GTUtilsMcaEditorSequenceArea::getRowLength(os, 1);
+    CHECK_SET_ERR(currentLength < rowLength, QString("Expected: row length must be lesser than row length before trim, cureent: start length %1, current length %2").arg(QString::number(rowLength)).arg(QString::number(currentLength)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5716) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Open "Export Consensus" options panel tab.
+//    Expected state: UGENE doesn't crash.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
+
+//    3. Set any output file path, set any format.
+	const QString expectedOutputPath = QDir::toNativeSeparators(sandBoxDir + "test_5716.txt");
+    GTUtilsOptionPanelMsa::setExportConsensusOutputPath(os, expectedOutputPath);
+
+//    4. Open "General" options panel tab.
+//    Expected state: UGENE doesn't crash.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::General);
+
+//    5. Open "Export Consensus" options panel tab.
+    GTUtilsOptionPanelMsa::openTab(os, GTUtilsOptionPanelMsa::ExportConsensus);
+
+//    Expected state: UGENE doesn't crash, the form is filled with values from step 3.
+    const QString currentOutputPath = GTUtilsOptionPanelMsa::getExportConsensusOutputPath(os);
+    const QString currentOutputFormat = GTUtilsOptionPanelMsa::getExportConsensusOutputFormat(os);
+    const QString expectedOutputFormat = "Plain text";
+    CHECK_SET_ERR(currentOutputPath == expectedOutputPath, QString("Output path is incorrect: expected '%1', got '%2'").arg(expectedOutputPath).arg(currentOutputPath));
+    CHECK_SET_ERR(currentOutputFormat == expectedOutputFormat, QString("Output format is incorrect: expected '%1', got '%2'").arg(expectedOutputFormat).arg(currentOutputFormat));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5718) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_short.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Click reference pos 2071
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2071, 1));
+    GTGlobals::sleep(500);
+
+    //6. Insert gap
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+
+    int lengthBeforeGapColumnsRemoving = GTUtilsMcaEditorSequenceArea::getReferenceLengthWithGaps(os);
+
+    //7. Remove all columns of gaps
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Edit" << "Remove all columns of gaps"));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: before gap column removig < after gap column removig
+    int lengthAfterGapColumnsRemoving = GTUtilsMcaEditorSequenceArea::getReferenceLengthWithGaps(os);
+    CHECK_SET_ERR(lengthAfterGapColumnsRemoving < lengthBeforeGapColumnsRemoving, QString("Expected: before gap column removig > after gap column removig, current: before %1, after %2").arg(QString::number(lengthBeforeGapColumnsRemoving)).arg(QString::number(lengthAfterGapColumnsRemoving)));
+
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5739) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_short.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Click to the position 6316 at the reference
+    GTUtilsMcaEditorSequenceArea::clickToReferencePosition(os, 6372);
+
+    //6. Select all chars in the reference from here to the end
+    QPoint currentPos = GTMouseDriver::getMousePosition();
+    const int newXPos = GTUtilsMdi::activeWindow(os)->mapToGlobal(GTUtilsMdi::activeWindow(os)->rect().topRight()).x();
+    QPoint destPos(newXPos, currentPos.y());
+    GTUtilsMcaEditorSequenceArea::dragAndDrop(os, destPos);
+
+    //Expected: selected length = 4
+    U2Region reg = GTUtilsMcaEditorSequenceArea::getReferenceSelection(os);
+    int sel = reg.length;
+    CHECK_SET_ERR(sel == 4, QString("Unexpected selection length, expectedL 4, current: %1").arg(QString::number(sel)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5747) {
+    //1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Select any sequence
+    GTUtilsMSAEditorSequenceArea::selectSequence(os, "Gampsocleis_sedakovii_EF540828");
+
+    //3. Call contest menu -> Edit -> Edit sequence name
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os,  QStringList() << "Edit" << "Edit sequence name"));
+    GTUtilsMSAEditorSequenceArea::callContextMenu(os);
+
+    //4. Set new name and press enter
+    GTKeyboardDriver::keySequence("New name");
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
+
+    //5. Select another sequence
+    GTUtilsMSAEditorSequenceArea::selectSequence(os, "Conocephalus_sp.");
+
+    //6. Edit name by HotKey F2
+    GTKeyboardDriver::keyClick(Qt::Key_F2);
+
+    //7. Set new name and press enter
+    GTKeyboardDriver::keySequence("New name 2");
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
+	GTGlobals::sleep(500);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5751) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Call a context menu in the Project view on the opened MCA document.
+    //6. Select "Lock document for editing" menu item.
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb");
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Lock document for editing"));
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb", Qt::RightButton);
+
+    //7. Call a context menu in the MCA Editor.
+    //Expected state : "Remove all columns of gaps" is disabled.
+    GTUtilsDialog::waitForDialog(os, new PopupCheckerByText(os, QStringList() << "Edit" << "Remove all columns of gaps", PopupChecker::CheckOptions(PopupChecker::IsDisabled)));
+    GTUtilsMcaEditorSequenceArea::callContextMenu(os);
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTKeyboardDriver::keyPress(Qt::Key_Escape);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5752) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select any symbol
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+
+    //6. Press Trim left end
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Trim left end");
+
+    //7. Press Trim right end
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Trim right end");
+
+    int readNum = GTUtilsMcaEditor::getReadsNames(os).size();
+    //8. Press Replace symbol / character and press space
+    GTMenu::clickMainMenuItem(os, QStringList() << "Actions" << "Edit" << "Replace character/gap");
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+    GTGlobals::sleep();
+
+    //Expected : the read must be deleted.If this read is last this option must be blocked
+    int newReadNum = GTUtilsMcaEditor::getReadsNames(os).size();
+    CHECK_SET_ERR(newReadNum == 15 && 16 == readNum, QString("Incorrect reads num, expected 20 and 19, current %1 and %2").arg(QString::number(readNum)).arg(QString::number(newReadNum)));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5753) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Make changes
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, QPoint(2120, 1));
+    GTKeyboardDriver::keyClick(Qt::Key_Space);
+
+    //6. Close document
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb");
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+    GTGlobals::sleep();
+
+    //Expected: there is no "Save document" messageBox
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5755) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_need_gaps.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected : Trailing gaps were inserted into the end of reference
+    qint64 refLength = GTUtilsMcaEditorSequenceArea::getReferenceLength(os);
+    QString refReg = GTUtilsMcaEditorSequenceArea::getReferenceReg(os, refLength - 20, 20);
+    bool isGaps = true;
+    foreach(QChar c, refReg) {
+        if (c != U2Mca::GAP_CHAR) {
+            isGaps = false;
+            break;
+        }
+    }
+    CHECK_SET_ERR(isGaps, "Incorrect characters");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5758) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            QStringList path;
+            path << sandBoxDir + "Sanger";
+            GTUtilsDialog::waitForDialog(os, new GTFileDialogUtils_list(os, path));
+            GTWidget::click(os, GTWidget::findExactWidget<QToolButton*>(os, "setOutputButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Remove a row
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B70");
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+
+    //6. Close the view
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb");
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Unload selected document(s)"));
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb", Qt::RightButton);
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(Qt::Key_Enter);
+
+    //7. Open a new view
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb");
+    GTUtilsDialog::waitForDialog(os, new PopupChooserByText(os, QStringList() << "Load selected document(s)"));
+    GTUtilsProjectTreeView::click(os, "Sanger.ugenedb", Qt::RightButton);
+    GTGlobals::sleep(1000);
+
+    //8. Hide chromatograms
+    GTWidget::click(os, GTToolbar::getWidgetForActionName(os, GTToolbar::getToolbar(os, "mwtoolbar_activemdi"), "chromatograms"));
+
+    //9. Change the state of the last row
+    bool isShownFirstState = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_CR66");
+    GTUtilsMcaEditorSequenceArea::clickCollapseTriangle(os, "SZYD_Cas9_CR66", isShownFirstState);
+    bool isShownSecondState = GTUtilsMcaEditorSequenceArea::isChromatogramShown(os, "SZYD_Cas9_CR66");
+
+    //Expected: States befor and aftef changing are different
+    CHECK_SET_ERR(isShownFirstState != isShownSecondState, "Incorrect state");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5761) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference_short.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    GTLogTracer trace;
+    //5. Select the last char of the first row
+    MultipleAlignmentRowData* row = GTUtilsMcaEditor::getMcaRow(os, 0);
+    int end = row->getCoreStart() + row->getCoreLength() - 1;
+    QPoint p(end, 0);
+    GTUtilsMcaEditorSequenceArea::clickToPosition(os, p);
+    QPoint curPos = GTMouseDriver::getMousePosition();
+    QPoint moveMouseTo(curPos.x() + 140, curPos.y());
+
+    //6. Press left button and move mouse to the right (add some gaps)
+    GTMouseDriver::press();
+    GTMouseDriver::moveTo(moveMouseTo);
+    int i = 10;
+    while (i != 0) {
+        int minus = (i % 2 == 0) ? 1 : -1;
+        int moving = minus * 3 * ((i % 2) + 1);
+        QPoint perturbation(moveMouseTo.x(), moveMouseTo.y() + moving);
+        GTMouseDriver::moveTo(perturbation);
+        i--;
+        GTGlobals::sleep(20);
+    }
+    GTMouseDriver::release();
+    QStringList errors = GTUtilsLog::getErrors(os, trace);
+
+    //Expected: no errors in the log
+    CHECK_SET_ERR(errors.isEmpty(), "Some errors in the log");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5762) {
+    // 1. Connect to a shared database.
+    // 2. Right click on the document->Add->Import to the database.
+    // 3. Click "Add files".
+    // 4. Choose "data/samples/ABIF/A01.abi".
+    // 5. Click "Import".
+    // Expected state : the file is imported, there are no errors in the log.
+    GTLogTracer logTracer;
+    Document* databaseDoc = GTUtilsSharedDatabaseDocument::connectToTestDatabase(os);
+    GTUtilsSharedDatabaseDocument::importFiles(os, databaseDoc, "/regression5761", QStringList() << dataDir + "samples/ABIF/A01.abi");
+    GTUtilsNotifications::waitForNotification(os, false, "Aligned reads (16)");
+    GTUtilsLog::check(os, logTracer);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5769_1) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select read "SZYD_Cas9_5B71"
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_5B71");
+
+    //6. click 'down' two times
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Down);
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Down);
+    GTGlobals::sleep(500);
+
+    //Expected: selected read "SZYD_Cas9_CR51"
+    QStringList name = GTUtilsMcaEditorSequenceArea::getSelectedRowsNames(os);
+    CHECK_SET_ERR(name.size() == 1, QString("Unexpected selection? expected sel == 1< cerrent sel == %1").arg(QString::number(name.size())));
+    CHECK_SET_ERR(name[0] == "SZYD_Cas9_CR51", QString("Unexpected selected read, expected: SZYD_Cas9_CR51, current: %1").arg(name[0]));
+
+    //7. Remove selected read
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+
+    //8. click 'down' two times
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Down);
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Down);
+    GTGlobals::sleep(500);
+
+    //Expected: selected read "SZYD_Cas9_CR54"
+    name = GTUtilsMcaEditorSequenceArea::getSelectedRowsNames(os);
+    CHECK_SET_ERR(name.size() == 1, QString("Unexpected selection? expected sel == 1< cerrent sel == %1").arg(QString::number(name.size())));
+    CHECK_SET_ERR(name[0] == "SZYD_Cas9_CR54", QString("Unexpected selected read, expected: SZYD_Cas9_CR54, current: %1").arg(name[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5769_2) {
+    class Scenario : public CustomScenario {
+        void run(HI::GUITestOpStatus &os) {
+            //Expected state : "Min read identity" option by default = 80 %
+            int minReadIdentity = GTSpinBox::getValue(os, "minIdentitySpinBox");
+            QString expected = "80";
+            CHECK_SET_ERR(QString::number(minReadIdentity) == expected, QString("incorrect Read Identity value: expected 80%, got %1").arg(minReadIdentity));
+
+            //Expected state : "Quality threshold" option by default = 30
+            int quality = GTSpinBox::getValue(os, "qualitySpinBox");
+            expected = "30";
+            CHECK_SET_ERR(QString::number(quality) == expected, QString("incorrect quality value: expected 30, got %1").arg(quality));
+
+            //Expected state : "Add to project" option is checked by default
+            bool addToProject = GTCheckBox::getState(os, "addToProjectCheckbox");
+            CHECK_SET_ERR(addToProject, QString("incorrect addToProject state: expected true, got false"));
+
+            //Expected state : "Result aligment" field is filled by default
+            QString output = GTLineEdit::getText(os, "outputLineEdit");
+            bool checkOutput = output.isEmpty();
+            CHECK_SET_ERR(!checkOutput, QString("incorrect output line: is empty"));
+
+            //Expected state : "Result alignment" is pre - filled <path> / Documents / UGENE_Data / reference_sanger_reads_alignment.ugenedb]
+            bool checkContainsFirst = output.contains(".ugenedb", Qt::CaseInsensitive);
+            bool checkContainsSecond = output.contains("sanger_reads_alignment");
+            bool checkContainsThird = output.contains("UGENE_Data");
+            bool checkContainsFourth = output.contains("Documents");
+            bool checkContains = checkContainsFirst && checkContainsSecond && checkContainsThird &&checkContainsFourth;
+            CHECK_SET_ERR(checkContains, QString("incorrect output line: do not contain default path"));
+
+            //2. Select reference  .../test/general/_common_data/sanger/reference.gb
+            GTLineEdit::setText(os, GTWidget::findExactWidget<QLineEdit*>(os, "referenceLineEdit"), testDir + "_common_data/sanger/reference.gb");
+
+            //3. Select Reads: .../test/general/_common_data/sanger/sanger_01.ab1-/sanger_20.ab1(20 files)]
+            QStringList reads;
+            for (int i = 1; i < 21; i++) {
+                QString name = "sanger_";
+                QString num = QString::number(i);
+                if (num.size() == 1) {
+                    num = "0" + QString::number(i);
+                }
+                name += num;
+                name += ".ab1";
+                reads << name;
+            }
+            QString readDir = testDir + "_common_data/sanger/";
+            GTUtilsTaskTreeView::waitTaskFinished(os);
+            GTFileDialogUtils_list* ob = new GTFileDialogUtils_list(os, readDir, reads);
+            GTUtilsDialog::waitForDialog(os, ob);
+
+            GTWidget::click(os, GTWidget::findExactWidget<QPushButton*>(os, "addReadButton"));
+
+            //4. Push "Align" button
+            GTUtilsDialog::clickButtonBox(os, QDialogButtonBox::Ok);
+        }
+    };
+
+    //1. Select "Tools>Sanger data analysis>Reads quality control and alignment"
+    GTUtilsDialog::waitForDialog(os, new AlignToReferenceBlastDialogFiller(os, new Scenario));
+    GTMenu::clickMainMenuItem(os, QStringList() << "Tools" << "Sanger data analysis" << "Map reads to reference...");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //5. Select read "SZYD_Cas9_5B71"
+    GTUtilsMcaEditor::clickReadName(os, "SZYD_Cas9_CR50");
+
+    //6. click 'up'
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Up);
+    GTGlobals::sleep(500);
+
+    //Expected: selected read "SZYD_Cas9_5B71"
+    QStringList name = GTUtilsMcaEditorSequenceArea::getSelectedRowsNames(os);
+    CHECK_SET_ERR(name.size() == 1, QString("Unexpected selection? expected sel == 1< cerrent sel == %1").arg(QString::number(name.size())));
+    CHECK_SET_ERR(name[0] == "SZYD_Cas9_5B71", QString("Unexpected selected read, expected: SZYD_Cas9_5B71, current: %1").arg(name[0]));
+
+    //7. Remove selected read
+    GTGlobals::sleep(1000);
+    GTKeyboardDriver::keyClick(Qt::Key_Delete);
+
+    //8. click 'up'
+    GTGlobals::sleep(500);
+    GTKeyboardDriver::keyClick(Qt::Key_Up);
+    GTGlobals::sleep(500);
+
+    //Expected: selected read "SZYD_Cas9_5B70"
+    name = GTUtilsMcaEditorSequenceArea::getSelectedRowsNames(os);
+    CHECK_SET_ERR(name.size() == 1, QString("Unexpected selection? expected sel == 1< cerrent sel == %1").arg(QString::number(name.size())));
+    CHECK_SET_ERR(name[0] == "SZYD_Cas9_5B70", QString("Unexpected selected read, expected: SZYD_Cas9_5B70, current: %1").arg(name[0]));
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5786_1) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Click "Build Tree" button on the toolbar.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = GTWidget::getActiveModalWidget(os);
+
+//    3. Select "PhyML Maximum Likelihood" tree building method.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//    4. Open "Branch Support" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Branch Support");
+
+//    Expected state: "Use fast likelihood-based method" radionbutton is selected, "Use fast likelihood-based method" combobox is enabled, "Perform bootstrap" spinbox is disabled.
+            QRadioButton *rbFastMethod = GTWidget::findExactWidget<QRadioButton *>(os, "fastMethodCheckbox", dialog);
+            CHECK_SET_ERR(NULL != rbFastMethod, "fastMethodCheckbox is NULL");
+            CHECK_SET_ERR(rbFastMethod->isChecked(), "fastMethodCheckbox is not checked");
+            GTWidget::checkEnabled(os, "fastMethodCombo", true, dialog);
+            GTWidget::checkEnabled(os, "bootstrapSpinBox", false, dialog);
+
+//    5. Select "Perform bootstrap" radiobutton.
+            GTRadioButton::click(os, "bootstrapRadioButton", dialog);
+
+//    Expected state: "Use fast likelihood-based method" combobox is disabled, "Perform bootstrap" spinbox is enabled.
+            GTWidget::checkEnabled(os, "fastMethodCombo", false, dialog);
+            GTWidget::checkEnabled(os, "bootstrapSpinBox", true, dialog);
+
+//    6. Select "Use fast likelihood-based method" radionbutton.
+            GTRadioButton::click(os, "fastMethodCheckbox", dialog);
+
+//    Expected state: "Use fast likelihood-based method" combobox is enabled, "Perform bootstrap" spinbox is disabled.
+            GTWidget::checkEnabled(os, "fastMethodCombo", true, dialog);
+            GTWidget::checkEnabled(os, "bootstrapSpinBox", false, dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario()));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5786_2) {
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Click "Build Tree" button on the toolbar.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = GTWidget::getActiveModalWidget(os);
+
+//    3. Select "PhyML Maximum Likelihood" tree building method.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+            GTWidget::checkEnabled(os, "tranSpinBox", false, dialog);
+
+//    4. Select "Transition / transversion ratio" "fixed" radiobutton.
+            GTRadioButton::click(os, "transFixedRb", dialog);
+
+            GTWidget::checkEnabled(os, "tranSpinBox", true, dialog);
+
+//    5. Open "Branch Support" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Branch Support");
+
+//    6. Select "Perform bootstrap" radiobutton.
+            GTRadioButton::click(os, "bootstrapRadioButton", dialog);
+
+//    7. Open the "Substitution Model" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Substitution Model");
+
+//    Expected state: Expected state: the "Transition / transversion ratio" spinbox is enabled.
+            GTWidget::checkEnabled(os, "tranSpinBox", true, dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Cancel);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario()));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+    GTGlobals::sleep();
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5786_3) {
+    GTLogTracer logTracerNegative("-b 5");
+    GTLogTracer logTracerPositive("-b -2");
+
+//    1. Open "data/samples/CLUSTALW/COI.aln".
+    GTFileDialog::openFile(os, dataDir + "samples/CLUSTALW/COI.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+//    2. Click "Build Tree" button on the toolbar.
+
+    class Scenario : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget *dialog = GTWidget::getActiveModalWidget(os);
+
+//    3. Select "PhyML Maximum Likelihood" tree building method.
+            GTComboBox::setIndexWithText(os, "algorithmBox", dialog, "PhyML Maximum Likelihood");
+
+//    4. Open "Branch Support" tab.
+            GTTabWidget::clickTab(os, "twSettings", dialog, "Branch Support");
+
+//    5. Select "Perform bootstrap" radiobutton.
+            GTRadioButton::click(os, "bootstrapRadioButton", dialog);
+
+//    6. Set "Perform bootstrap" spinbox value to 5.
+            GTSpinBox::setValue(os, "bootstrapSpinBox", 5, dialog);
+
+//    7. Select "Use fast likelihood-based method" radiobutton.
+            GTRadioButton::click(os, "fastMethodCheckbox", dialog);
+
+//    8. Set "Use fast likelihood-based method" combobox value to "Chi2-based".
+            GTComboBox::setIndexWithText(os, "fastMethodCombo", dialog, "Chi2-based");
+
+//    9. Set other necessary values and accept the dialog.
+            GTLineEdit::setText(os, "fileNameEdit", sandBoxDir + "test_5786_3.nwk", dialog);
+
+            GTUtilsDialog::clickButtonBox(os, dialog, QDialogButtonBox::Ok);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new BuildTreeDialogFiller(os, new Scenario()));
+    GTToolbar::clickButtonByTooltipOnToolbar(os, MWTOOLBAR_ACTIVEMDI, "Build Tree");
+    GTGlobals::sleep();
+
+//    Expected state: there is an only "-b" parameter in the phyML arguments, it is equal to "-2".
+    GTUtilsLog::checkContainsMessage(os, logTracerNegative, false);
+    GTUtilsLog::checkContainsMessage(os, logTracerPositive, true);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5798_1) {
+    //1. Open samples/APR/DNA.apr in read-only mode
+    GTUtilsDialog::waitForDialog(os, new ImportAPRFileFiller(os, true));
+    GTFileDialog::openFile(os, dataDir + "samples/APR/DNA.apr");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: DNA.apr in the project view
+    GTUtilsProjectTreeView::checkItem(os, "DNA.apr");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5798_2) {
+    //1. Convert samples/APR/DNA.apr to fasta
+    GTUtilsDialog::waitForDialog(os, new ImportAPRFileFiller(os, false, sandBoxDir + "DNA", "FASTA"));
+    GTFileDialog::openFile(os, dataDir + "samples/APR/DNA.apr");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: DNA.fa in the project view
+    GTUtilsProjectTreeView::checkItem(os, "DNA.fa");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5798_3) {
+    //1. Convert samples/APR/DNA.apr to clustaw
+    GTUtilsDialog::waitForDialog(os, new ImportAPRFileFiller(os, false, sandBoxDir + "DNA", "CLUSTALW"));
+    GTFileDialog::openFile(os, dataDir + "samples/APR/DNA.apr");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: DNA.aln in the project view
+    GTUtilsProjectTreeView::checkItem(os, "DNA.aln");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5798_4) {
+    //1. Open samples/APR/DNA.apr in read-only mode
+    GTUtilsDialog::waitForDialog(os, new ImportAPRFileFiller(os, true));
+    GTFileDialog::openFile(os, dataDir + "samples/APR/DNA.apr");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: DNA.apr in the project view
+    GTUtilsProjectTreeView::checkItem(os, "DNA.apr");
+
+    //2. Convert document to clustalw from project view
+    GTUtilsDialog::waitForDialog(os, new ExportDocumentDialogFiller(os, sandBoxDir, "DNA.aln", ExportDocumentDialogFiller::CLUSTALW, false, true));
+    GTUtilsDialog::waitForDialog(os, new PopupChooser(os, QStringList() << "Export document"));
+    GTUtilsProjectTreeView::callContextMenu(os, "DNA.apr");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: DNA.aln in the project view
+    GTUtilsProjectTreeView::checkItem(os, "DNA.aln");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5798_5) {
+    //1. Open Workflow designer
+    GTLogTracer l;
+    GTUtilsWorkflowDesigner::openWorkflowDesigner(os);
+    //2. Open sample {Convert alignments to ClustalW}
+    GTUtilsWorkflowDesigner::addSample(os, "Convert alignments to ClustalW");
+    //Expected state: There is "Show wizard" tool button
+
+    //3. Press "Show wizard" button
+
+    class customWizard : public CustomScenario {
+    public:
+        void run(HI::GUITestOpStatus &os) {
+            QWidget* dialog = QApplication::activeModalWidget();
+            CHECK_SET_ERR(dialog, "activeModalWidget is NULL");
+            //4. Select input MSA "samples/APR/DNA.apr"
+            GTUtilsWizard::setInputFiles(os, QList<QStringList>() << (QStringList() << dataDir + "samples/APR/DNA.apr"));		
+            //5. Press "Next" button
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Next);
+            GTUtilsWizard::setParameter(os, "Result ClustalW file", "DNA.aln");			
+            //6. Press "Run" button
+            GTUtilsWizard::clickButton(os, GTUtilsWizard::Run);
+        }
+    };
+
+    GTUtilsDialog::waitForDialog(os, new WizardFiller(os, "Convert alignments to ClustalW Wizard", new customWizard()));
+    GTWidget::click(os, GTAction::button(os, "Show wizard"));
+    //Expected state: Align sequences with MUSCLE Wizard appeared
+
+    GTGlobals::sleep(1000);
+
+    //Expected state: Scheme successfully performed
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+    GTUtilsLog::check(os, l);
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5815) {
+    //1. Open a short alignment, e.g "test_common_data\scenarios\msa\ma2_gapped.aln"
+    GTFileDialog::openFile(os, testDir + "_common_data/scenarios/msa/ma2_gapped.aln");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //2. Click on the empty area at the right side of the consensus
+    GTUtilsMsaEditor::moveToColumn(os, 13);
+    QPoint p = GTMouseDriver::getMousePosition();
+    GTMouseDriver::moveTo(QPoint(p.x() + 100, p.y()));
+    GTMouseDriver::click();
+
+    //Expected: no crash
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5818_1) {
+    //1. Open samples/ACE/BL060C3.ace in read-only mode
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, true));
+    GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: BL060C3.ace in the project view
+    GTUtilsProjectTreeView::checkItem(os, "BL060C3.ace");
+}
+
+GUI_TEST_CLASS_DEFINITION(test_5818_2) {
+    //1. Convert samples/ACE/BL060C3.ace.ugenedb to fasta
+    GTUtilsDialog::waitForDialog(os, new ImportACEFileFiller(os, false, sandBoxDir + "BL060C3.ace.ugenedb"));
+    GTFileDialog::openFile(os, dataDir + "samples/ACE/BL060C3.ace");
+    GTUtilsTaskTreeView::waitTaskFinished(os);
+
+    //Expected: BL060C3.ace.ugenedb in the project view
+    GTUtilsProjectTreeView::checkItem(os, "BL060C3.ace.ugenedb");
 }
 
 } // namespace GUITest_regression_scenarios
diff --git a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h
index 9699a77..7391318 100644
--- a/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h
+++ b/src/plugins/GUITestBase/src/tests/regression_scenarios/GTTestsRegressionScenarios_5001_6000.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,10 +52,12 @@ GUI_TEST_CLASS_DECLARATION(test_5138_2)
 GUI_TEST_CLASS_DECLARATION(test_5199)
 
 GUI_TEST_CLASS_DECLARATION(test_5208)
+GUI_TEST_CLASS_DECLARATION(test_5211)
 GUI_TEST_CLASS_DECLARATION(test_5216)
+GUI_TEST_CLASS_DECLARATION(test_5227)
 GUI_TEST_CLASS_DECLARATION(test_5246)
 GUI_TEST_CLASS_DECLARATION(test_5249)
-GUI_TEST_CLASS_DECLARATION(test_5227)
+GUI_TEST_CLASS_DECLARATION(test_5252)
 GUI_TEST_CLASS_DECLARATION(test_5268)
 GUI_TEST_CLASS_DECLARATION(test_5278)
 GUI_TEST_CLASS_DECLARATION(test_5295)
@@ -68,11 +70,66 @@ GUI_TEST_CLASS_DECLARATION(test_5360)
 GUI_TEST_CLASS_DECLARATION(test_5363_1)
 GUI_TEST_CLASS_DECLARATION(test_5363_2)
 GUI_TEST_CLASS_DECLARATION(test_5367)
+GUI_TEST_CLASS_DECLARATION(test_5371)
+GUI_TEST_CLASS_DECLARATION(test_5377)
 
 GUI_TEST_CLASS_DECLARATION(test_5412)
-
 GUI_TEST_CLASS_DECLARATION(test_5417)
 GUI_TEST_CLASS_DECLARATION(test_5425)
+GUI_TEST_CLASS_DECLARATION(test_5447_1)
+GUI_TEST_CLASS_DECLARATION(test_5447_2)
+GUI_TEST_CLASS_DECLARATION(test_5447_3)
+GUI_TEST_CLASS_DECLARATION(test_5469)
+GUI_TEST_CLASS_DECLARATION(test_5492)
+GUI_TEST_CLASS_DECLARATION(test_5495)
+GUI_TEST_CLASS_DECLARATION(test_5499)
+
+GUI_TEST_CLASS_DECLARATION(test_5517)
+GUI_TEST_CLASS_DECLARATION(test_5520_1)
+GUI_TEST_CLASS_DECLARATION(test_5520_2)
+GUI_TEST_CLASS_DECLARATION(test_5562_1)
+GUI_TEST_CLASS_DECLARATION(test_5562_2)
+GUI_TEST_CLASS_DECLARATION(test_5562_3)
+GUI_TEST_CLASS_DECLARATION(test_5588)
+GUI_TEST_CLASS_DECLARATION(test_5594_1)
+GUI_TEST_CLASS_DECLARATION(test_5594_2)
+GUI_TEST_CLASS_DECLARATION(test_5594_3)
+GUI_TEST_CLASS_DECLARATION(test_5594_4)
+
+GUI_TEST_CLASS_DECLARATION(test_5622)
+GUI_TEST_CLASS_DECLARATION(test_5636)
+GUI_TEST_CLASS_DECLARATION(test_5637)
+GUI_TEST_CLASS_DECLARATION(test_5659)
+GUI_TEST_CLASS_DECLARATION(test_5681)
+
+GUI_TEST_CLASS_DECLARATION(test_5714_1)
+GUI_TEST_CLASS_DECLARATION(test_5714_2)
+GUI_TEST_CLASS_DECLARATION(test_5714_3)
+GUI_TEST_CLASS_DECLARATION(test_5716)
+GUI_TEST_CLASS_DECLARATION(test_5718)
+GUI_TEST_CLASS_DECLARATION(test_5739)
+GUI_TEST_CLASS_DECLARATION(test_5747)
+GUI_TEST_CLASS_DECLARATION(test_5751)
+GUI_TEST_CLASS_DECLARATION(test_5752)
+GUI_TEST_CLASS_DECLARATION(test_5753)
+GUI_TEST_CLASS_DECLARATION(test_5755)
+GUI_TEST_CLASS_DECLARATION(test_5758)
+GUI_TEST_CLASS_DECLARATION(test_5761)
+GUI_TEST_CLASS_DECLARATION(test_5762)
+GUI_TEST_CLASS_DECLARATION(test_5769_1)
+GUI_TEST_CLASS_DECLARATION(test_5769_2)
+GUI_TEST_CLASS_DECLARATION(test_5786_1)
+GUI_TEST_CLASS_DECLARATION(test_5786_2)
+GUI_TEST_CLASS_DECLARATION(test_5786_3)
+GUI_TEST_CLASS_DECLARATION(test_5798_1)
+GUI_TEST_CLASS_DECLARATION(test_5798_2)
+GUI_TEST_CLASS_DECLARATION(test_5798_3)
+GUI_TEST_CLASS_DECLARATION(test_5798_4)
+GUI_TEST_CLASS_DECLARATION(test_5798_5)
+
+GUI_TEST_CLASS_DECLARATION(test_5815)
+GUI_TEST_CLASS_DECLARATION(test_5818_1)
+GUI_TEST_CLASS_DECLARATION(test_5818_2)
 
 #undef GUI_TEST_SUITE
 
diff --git a/src/plugins/annotator/src/AnnotatorPlugin.cpp b/src/plugins/annotator/src/AnnotatorPlugin.cpp
index 7019548..7f9a74e 100644
--- a/src/plugins/annotator/src/AnnotatorPlugin.cpp
+++ b/src/plugins/annotator/src/AnnotatorPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/annotator/src/AnnotatorPlugin.h b/src/plugins/annotator/src/AnnotatorPlugin.h
index 5a5b645..8a7acdf 100644
--- a/src/plugins/annotator/src/AnnotatorPlugin.h
+++ b/src/plugins/annotator/src/AnnotatorPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,13 +25,8 @@
 #include <U2Core/PluginModel.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QMap>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-
+#include <QMap>
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/plugins/annotator/src/AnnotatorTests.cpp b/src/plugins/annotator/src/AnnotatorTests.cpp
index fdd0f00..4fd3c25 100644
--- a/src/plugins/annotator/src/AnnotatorTests.cpp
+++ b/src/plugins/annotator/src/AnnotatorTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,22 @@
  * MA 02110-1301, USA.
  */
 
-#include "AnnotatorTests.h"
+#include <QDir>
 #include <QStringList>
 
+#include <U2Core/AnnotationTableObject.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNASequence.h>
-
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/GObject.h>
-#include <U2Core/AnnotationTableObject.h>
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/DNASequenceObject.h>
 #include <U2Core/U2OpStatusUtils.h>
+
 #include <U2Test/GTestFrameworkComponents.h>
 
+#include "AnnotatorTests.h"
+
 /* TRANSLATOR U2::GTest */
 
 namespace U2 {
diff --git a/src/plugins/annotator/src/AnnotatorTests.h b/src/plugins/annotator/src/AnnotatorTests.h
index edca60f..55a491a 100644
--- a/src/plugins/annotator/src/AnnotatorTests.h
+++ b/src/plugins/annotator/src/AnnotatorTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/U2Region.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2View/AnnotatedDNAView.h>
diff --git a/src/plugins/annotator/src/CollocationWorker.cpp b/src/plugins/annotator/src/CollocationWorker.cpp
index 6f3baf3..7ef3148 100644
--- a/src/plugins/annotator/src/CollocationWorker.cpp
+++ b/src/plugins/annotator/src/CollocationWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
@@ -99,7 +99,6 @@ void CollocationWorkerFactory::init() {
         CollocationWorker::tr("Group annotations"), CollocationWorker::tr("Annotated regions containing found collocations.")),
         DataTypePtr(new MapDataType(Descriptor("collocation.annotations"), outM)), false /*input*/, true/*multi*/);
 
-    static const QString newAnnsStr = CollocationWorker::tr("Create new annotations");
     {
         Descriptor nd(NAME_ATTR, CollocationWorker::tr("Result annotation"),
             CollocationWorker::tr("Name of the result annotations to mark found collocations."));
@@ -138,7 +137,7 @@ void CollocationWorkerFactory::init() {
 
         QVariantMap typeMap;
         typeMap[CollocationWorker::tr("Copy original annotations")] = COPY_TYPE_ATTR;
-        typeMap[newAnnsStr] = NEW_TYPE_ATTR;
+        typeMap[CollocationWorker::tr("Create new annotations")] = NEW_TYPE_ATTR;
         delegates[TYPE_ATTR] = new ComboBoxDelegate(typeMap);
     }
 
diff --git a/src/plugins/annotator/src/CollocationWorker.h b/src/plugins/annotator/src/CollocationWorker.h
index 67d3047..ef3cbea 100644
--- a/src/plugins/annotator/src/CollocationWorker.h
+++ b/src/plugins/annotator/src/CollocationWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_ANNOTATOR_WORKER_H_
 #define _U2_ANNOTATOR_WORKER_H_
 
-#include <QtCore/QSet>
+#include <QSet>
 
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
diff --git a/src/plugins/annotator/src/CollocationsDialogController.cpp b/src/plugins/annotator/src/CollocationsDialogController.cpp
index 8073988..1c84bd1 100644
--- a/src/plugins/annotator/src/CollocationsDialogController.cpp
+++ b/src/plugins/annotator/src/CollocationsDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,7 +57,7 @@ CollocationsDialogController::CollocationsDialogController(QStringList _names, A
     task = NULL;
     qSort(allNames);
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223153");
+    new HelpButton(this, buttonBox, "20875057");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/annotator/src/CollocationsDialogController.h b/src/plugins/annotator/src/CollocationsDialogController.h
index 998e173..d21d246 100644
--- a/src/plugins/annotator/src/CollocationsDialogController.h
+++ b/src/plugins/annotator/src/CollocationsDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,16 +29,10 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/AnnotationData.h>
 
-#include <QtCore/QTimer>
-#include <QtCore/QMutex>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QToolButton>
-#endif
-
+#include <QTimer>
+#include <QMutex>
+#include <QDialog>
+#include <QToolButton>
 
 namespace U2 {
 
diff --git a/src/plugins/annotator/src/CollocationsSearchAlgorithm.cpp b/src/plugins/annotator/src/CollocationsSearchAlgorithm.cpp
index 452981c..8c21c91 100644
--- a/src/plugins/annotator/src/CollocationsSearchAlgorithm.cpp
+++ b/src/plugins/annotator/src/CollocationsSearchAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/annotator/src/CollocationsSearchAlgorithm.h b/src/plugins/annotator/src/CollocationsSearchAlgorithm.h
index a50f901..b0ee168 100644
--- a/src/plugins/annotator/src/CollocationsSearchAlgorithm.h
+++ b/src/plugins/annotator/src/CollocationsSearchAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp b/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
index e9af1bf..b763a80 100644
--- a/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
+++ b/src/plugins/annotator/src/CustomAutoAnnotationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+#include <QPushButton>
 
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
@@ -43,7 +38,7 @@ CustomAutoAnnotationDialog::CustomAutoAnnotationDialog(ADVSequenceObjectContext*
  : QDialog(ctx->getAnnotatedDNAView()->getWidget()), seqCtx(ctx)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223232");
+    new HelpButton(this, buttonBox, "20875136");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Annotate"));
 
     loadSettings();
diff --git a/src/plugins/annotator/src/CustomAutoAnnotationDialog.h b/src/plugins/annotator/src/CustomAutoAnnotationDialog.h
index 7f0bc8f..02296af 100644
--- a/src/plugins/annotator/src/CustomAutoAnnotationDialog.h
+++ b/src/plugins/annotator/src/CustomAutoAnnotationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/annotator/src/CustomPatternAnnotationTask.cpp b/src/plugins/annotator/src/CustomPatternAnnotationTask.cpp
index 351fc90..f0d1eb9 100644
--- a/src/plugins/annotator/src/CustomPatternAnnotationTask.cpp
+++ b/src/plugins/annotator/src/CustomPatternAnnotationTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
diff --git a/src/plugins/annotator/src/CustomPatternAnnotationTask.h b/src/plugins/annotator/src/CustomPatternAnnotationTask.h
index ce318fd..1dabfd3 100644
--- a/src/plugins/annotator/src/CustomPatternAnnotationTask.h
+++ b/src/plugins/annotator/src/CustomPatternAnnotationTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CUSTOM_PATTERN_ANNOTATION_TASK_H_
 #define _U2_CUSTOM_PATTERN_ANNOTATION_TASK_H_
 
-#include <QtCore/QSharedPointer>
+#include <QSharedPointer>
 
 #include <U2Algorithm/SArrayBasedFindTask.h>
 #include <U2Algorithm/SArrayIndex.h>
diff --git a/src/plugins/annotator/src/GeneByGeneReportTask.cpp b/src/plugins/annotator/src/GeneByGeneReportTask.cpp
index c0ab8ce..1e29af0 100644
--- a/src/plugins/annotator/src/GeneByGeneReportTask.cpp
+++ b/src/plugins/annotator/src/GeneByGeneReportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/Counter.h>
 
-#include <QtCore/QFile>
-#include <QtCore/QSet>
+#include <QFile>
+#include <QSet>
 
 namespace U2 {
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins/annotator/src/GeneByGeneReportTask.h b/src/plugins/annotator/src/GeneByGeneReportTask.h
index 70e2350..36bf037 100644
--- a/src/plugins/annotator/src/GeneByGeneReportTask.h
+++ b/src/plugins/annotator/src/GeneByGeneReportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/annotator/src/GeneByGeneReportWorker.cpp b/src/plugins/annotator/src/GeneByGeneReportWorker.cpp
index 0121339..0bc56b8 100644
--- a/src/plugins/annotator/src/GeneByGeneReportWorker.cpp
+++ b/src/plugins/annotator/src/GeneByGeneReportWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/FailTask.h>
diff --git a/src/plugins/annotator/src/GeneByGeneReportWorker.h b/src/plugins/annotator/src/GeneByGeneReportWorker.h
index 33759e3..4ec6922 100644
--- a/src/plugins/annotator/src/GeneByGeneReportWorker.h
+++ b/src/plugins/annotator/src/GeneByGeneReportWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,8 +28,8 @@
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QList>
+#include <QMap>
+#include <QList>
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/annotator/transl/english.ts b/src/plugins/annotator/transl/english.ts
index b20dfd8..783bd6e 100644
--- a/src/plugins/annotator/transl/english.ts
+++ b/src/plugins/annotator/transl/english.ts
@@ -204,7 +204,7 @@
 <context>
     <name>U2::CustomAutoAnnotationDialog</name>
     <message>
-        <location filename="../src/CustomAutoAnnotationDialog.cpp" line="47"/>
+        <location filename="../src/CustomAutoAnnotationDialog.cpp" line="42"/>
         <source>Annotate</source>
         <translation>Annotate</translation>
     </message>
@@ -236,32 +236,32 @@
 <context>
     <name>U2::LocalWorkflow::CollocationPrompter</name>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="158"/>
+        <location filename="../src/CollocationWorker.cpp" line="157"/>
         <source> sequence from <u>%1</u></source>
         <translation> sequence from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="161"/>
+        <location filename="../src/CollocationWorker.cpp" line="160"/>
         <source> set of annotations from <u>%1</u></source>
         <translation> set of annotations from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="168"/>
+        <location filename="../src/CollocationWorker.cpp" line="167"/>
         <source>For each %1 and %2,</source>
         <translation>For each %1 and %2,</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="170"/>
+        <location filename="../src/CollocationWorker.cpp" line="169"/>
         <source>For each %1%2,</source>
         <translation>For each %1%2,</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="186"/>
+        <location filename="../src/CollocationWorker.cpp" line="185"/>
         <source> Annotations themselves may not span beyond the region.</source>
         <translation>Annotations themselves may not span beyond the region.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="190"/>
+        <location filename="../src/CollocationWorker.cpp" line="189"/>
         <source>%1 look if <u>%2</u> annotations appear collocated within same region of length <u>%3</u>.%4<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 look if <u>%2</u> annotations appear collocated within same region of length <u>%3</u>.%4<br>Output the list of found regions annotated as <u>%5</u>.</translation>
     </message>
@@ -274,74 +274,74 @@
         <translation>Group annotations</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="102"/>
+        <location filename="../src/CollocationWorker.cpp" line="140"/>
         <source>Create new annotations</source>
         <translation>Create new annotations</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="104"/>
+        <location filename="../src/CollocationWorker.cpp" line="103"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="105"/>
+        <location filename="../src/CollocationWorker.cpp" line="104"/>
         <source>Name of the result annotations to mark found collocations.</source>
         <translation>Name of the result annotations to mark found collocations.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="106"/>
+        <location filename="../src/CollocationWorker.cpp" line="105"/>
         <source>Group of annotations</source>
         <translation>Group of annotations</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="108"/>
+        <location filename="../src/CollocationWorker.cpp" line="107"/>
         <source>Region size</source>
         <translation>Region size</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="109"/>
+        <location filename="../src/CollocationWorker.cpp" line="108"/>
         <source>Effectively this is the maximum allowed distance between the interesting annotations in a group.</source>
         <translation>Effectively this is the maximum allowed distance between the interesting annotations in a group.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="110"/>
+        <location filename="../src/CollocationWorker.cpp" line="109"/>
         <source>Must fit into region</source>
         <translation>Must fit into region</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="111"/>
+        <location filename="../src/CollocationWorker.cpp" line="110"/>
         <source>Whether the interesting annotations should entirely fit into the specified region to form a group.</source>
         <translation>Whether the interesting annotations should entirely fit into the specified region to form a group.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="112"/>
+        <location filename="../src/CollocationWorker.cpp" line="111"/>
         <source>Result type</source>
         <translation>Result type</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="113"/>
+        <location filename="../src/CollocationWorker.cpp" line="112"/>
         <source>Copy original annotations or annotate found regions with new ones.</source>
         <translation>Copy original annotations or annotate found regions with new ones.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="114"/>
+        <location filename="../src/CollocationWorker.cpp" line="113"/>
         <source>Include boundaries</source>
         <translation>Include boundaries</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="115"/>
+        <location filename="../src/CollocationWorker.cpp" line="114"/>
         <source>Include most left and most right boundary annotations regions into result or exclude them.</source>
         <translation>Include most left and most right boundary annotations regions into result or exclude them.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="130"/>
+        <location filename="../src/CollocationWorker.cpp" line="129"/>
         <source>Collocation Search</source>
         <translation>Collocation Search</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="140"/>
+        <location filename="../src/CollocationWorker.cpp" line="139"/>
         <source>Copy original annotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Copy original annotations</translation>
     </message>
     <message>
         <location filename="../src/CollocationWorker.cpp" line="74"/>
@@ -354,12 +354,12 @@
         <translation>Annotated regions containing found collocations.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="107"/>
+        <location filename="../src/CollocationWorker.cpp" line="106"/>
         <source>A list of annotation names to search. Found regions will contain all the named annotations.</source>
         <translation>A list of annotation names to search. Found regions will contain all the named annotations.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="131"/>
+        <location filename="../src/CollocationWorker.cpp" line="130"/>
         <source>Finds groups of specified annotations in each supplied set of annotations, stores found regions as annotations.</source>
         <translation>Finds groups of specified annotations in each supplied set of annotations, stores found regions as annotations.</translation>
     </message>
diff --git a/src/plugins/annotator/transl/russian.ts b/src/plugins/annotator/transl/russian.ts
index e2d77ca..b19d9c8 100644
--- a/src/plugins/annotator/transl/russian.ts
+++ b/src/plugins/annotator/transl/russian.ts
@@ -204,7 +204,7 @@
 <context>
     <name>U2::CustomAutoAnnotationDialog</name>
     <message>
-        <location filename="../src/CustomAutoAnnotationDialog.cpp" line="47"/>
+        <location filename="../src/CustomAutoAnnotationDialog.cpp" line="42"/>
         <source>Annotate</source>
         <translation>Аннотировать</translation>
     </message>
@@ -236,32 +236,32 @@
 <context>
     <name>U2::LocalWorkflow::CollocationPrompter</name>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="158"/>
+        <location filename="../src/CollocationWorker.cpp" line="157"/>
         <source> sequence from <u>%1</u></source>
         <translation>последовательности из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="161"/>
+        <location filename="../src/CollocationWorker.cpp" line="160"/>
         <source> set of annotations from <u>%1</u></source>
         <translation>набора аннотаций из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="168"/>
+        <location filename="../src/CollocationWorker.cpp" line="167"/>
         <source>For each %1 and %2,</source>
         <translation>Для каждых %1 и %2,</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="170"/>
+        <location filename="../src/CollocationWorker.cpp" line="169"/>
         <source>For each %1%2,</source>
         <translation>Для каждого %1%2,</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="186"/>
+        <location filename="../src/CollocationWorker.cpp" line="185"/>
         <source> Annotations themselves may not span beyond the region.</source>
         <translation>целиком.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="190"/>
+        <location filename="../src/CollocationWorker.cpp" line="189"/>
         <source>%1 look if <u>%2</u> annotations appear collocated within same region of length <u>%3</u>.%4<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 искать группы аннотаций <u>%2</u> расположенные <u>%4</u> внутри регионов не длиннее <u>%3</u>.<br>Выдать список найденных групп в виде аннотаций "<u>%5</u>".</translation>
     </message>
@@ -274,74 +274,74 @@
         <translation>Найденные регионы</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="102"/>
+        <location filename="../src/CollocationWorker.cpp" line="140"/>
         <source>Create new annotations</source>
         <translation>Создать новые аннотации</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="104"/>
+        <location filename="../src/CollocationWorker.cpp" line="103"/>
         <source>Result annotation</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="105"/>
+        <location filename="../src/CollocationWorker.cpp" line="104"/>
         <source>Name of the result annotations to mark found collocations.</source>
         <translation>Имя результирующих аннотаций отмечающих найденные группы.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="106"/>
+        <location filename="../src/CollocationWorker.cpp" line="105"/>
         <source>Group of annotations</source>
         <translation>Аннотации в группе</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="108"/>
+        <location filename="../src/CollocationWorker.cpp" line="107"/>
         <source>Region size</source>
         <translation>Размер региона</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="109"/>
+        <location filename="../src/CollocationWorker.cpp" line="108"/>
         <source>Effectively this is the maximum allowed distance between the interesting annotations in a group.</source>
         <translation>Фактически, это максимальная допустимая дистанция между аннотациями в одной группе.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="110"/>
+        <location filename="../src/CollocationWorker.cpp" line="109"/>
         <source>Must fit into region</source>
         <translation>Компактные группы</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="111"/>
+        <location filename="../src/CollocationWorker.cpp" line="110"/>
         <source>Whether the interesting annotations should entirely fit into the specified region to form a group.</source>
         <translation>Аннотации в группе должны целиком входить в указанный регион - т.е. дистанция в группе считается по внешним границам аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="112"/>
+        <location filename="../src/CollocationWorker.cpp" line="111"/>
         <source>Result type</source>
         <translation>Тип аннотации</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="113"/>
+        <location filename="../src/CollocationWorker.cpp" line="112"/>
         <source>Copy original annotations or annotate found regions with new ones.</source>
         <translation>Копировать оригинальные аннотации или аннотировать найденные регионы новыми.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="114"/>
+        <location filename="../src/CollocationWorker.cpp" line="113"/>
         <source>Include boundaries</source>
         <translation>Включить границы</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="115"/>
+        <location filename="../src/CollocationWorker.cpp" line="114"/>
         <source>Include most left and most right boundary annotations regions into result or exclude them.</source>
         <translation>Включить границы региона в аннотацию или исключить их.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="130"/>
+        <location filename="../src/CollocationWorker.cpp" line="129"/>
         <source>Collocation Search</source>
         <translation>Поиск групп аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="140"/>
+        <location filename="../src/CollocationWorker.cpp" line="139"/>
         <source>Copy original annotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Копировать исходные аннотации</translation>
     </message>
     <message>
         <location filename="../src/CollocationWorker.cpp" line="74"/>
@@ -354,12 +354,12 @@
         <translation>Список аннотаций отмечающих найденные группы аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="107"/>
+        <location filename="../src/CollocationWorker.cpp" line="106"/>
         <source>A list of annotation names to search. Found regions will contain all the named annotations.</source>
         <translation>Список имён интересующих аннотаций в группе. Ищутся регионы содержащие все указанные аннотации.</translation>
     </message>
     <message>
-        <location filename="../src/CollocationWorker.cpp" line="131"/>
+        <location filename="../src/CollocationWorker.cpp" line="130"/>
         <source>Finds groups of specified annotations in each supplied set of annotations, stores found regions as annotations.</source>
         <translation>Поиск сгруппированных аннотаций. Ищутся регионы последовательности, содержащие все аннотации из заданного списка, расположенные друг от друга на расстоянии не более заданного.</translation>
     </message>
diff --git a/src/plugins/api_tests/api_tests.pri b/src/plugins/api_tests/api_tests.pri
index 7e42fdd..40cd23c 100644
--- a/src/plugins/api_tests/api_tests.pri
+++ b/src/plugins/api_tests/api_tests.pri
@@ -19,13 +19,20 @@ DEFINES+="_FILE_OFFSET_BITS=64" _LARGEFILE64_SOURCE _USE_KNETFILE
 INCLUDEPATH += ../../libs_3rdparty/samtools/src ../../libs_3rdparty/samtools/src/samtools
 win32:INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools/win32
 win32:LIBS += -lws2_32
-win32:DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+win32:DEFINES += _USE_MATH_DEFINES "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
 
 win32-msvc2013 {
     DEFINES += NOMINMAX _XKEYCHECK_H
     LIBS += -L../../_release -lzlib
 }
 
+win32 {
+    # not visual studio 2015
+    !win32-msvc2015 {
+        DEFINES += "inline=__inline"
+    }
+}
+
 !debug_and_release|build_pass {
     CONFIG(debug, debug|release) {
         LIBS -= -lsamtools -L../../_release -lU2Script
diff --git a/src/plugins/api_tests/api_tests.pro b/src/plugins/api_tests/api_tests.pro
index 8aaf59d..ea4d69e 100644
--- a/src/plugins/api_tests/api_tests.pro
+++ b/src/plugins/api_tests/api_tests.pro
@@ -4,73 +4,74 @@ include (api_tests.pri)
 HEADERS += \
     src/ApiTestsPlugin.h \
     src/unittest.h \
+    src/UnitTestSuite.h \
     src/core/datatype/annotations/AnnotationGroupUnitTests.h \
     src/core/datatype/annotations/AnnotationUnitTests.h \
-    src/core/datatype/msa/MAlignmentUnitTests.h \
-    src/core/datatype/msa/MAlignmentRowUnitTests.h \
+    src/core/datatype/msa/MsaRowUnitTests.h \
+    src/core/datatype/msa/MsaUnitTests.h \
     src/core/datatype/udr/RawDataUdrSchemaUnitTests.h \
     src/core/datatype/udr/UdrSchemaUnitTests.h \
     src/core/dbi/DbiTest.h \
     src/core/dbi/assembly/AssemblyDbiTestUtil.h \
     src/core/dbi/assembly/AssemblyDbiUnitTests.h \
-    src/core/dbi/sequence/SequenceDbiUnitTests.h \
     src/core/dbi/attribute/AttributeDbiUnitTests.h \
     src/core/dbi/features/FeatureDbiUnitTests.h \
     src/core/dbi/msa/MsaDbiUnitTests.h \
+    src/core/dbi/sequence/SequenceDbiUnitTests.h \
     src/core/dbi/udr/UdrDbiUnitTests.h \
     src/core/external_script/base_scheme_interface/CInterfaceManualTests.h \
     src/core/external_script/base_scheme_interface/CInterfaceSasTests.h \
     src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.h \
     src/core/format/fastq/FastqUnitTests.h \
     src/core/format/genbank/LocationParserUnitTests.h \
+    src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h \
     src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h \
     src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.h \
+    src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h \
     src/core/gobjects/BioStruct3DObjectUnitTests.h \
     src/core/gobjects/DNAChromatogramObjectUnitTests.h \
     src/core/gobjects/FeaturesTableObjectUnitTest.h \
-    src/core/gobjects/MAlignmentObjectUnitTests.h \
+    src/core/gobjects/MsaObjectUnitTests.h \
     src/core/gobjects/PhyTreeObjectUnitTests.h \
     src/core/gobjects/TextObjectUnitTests.h \
-    src/core/util/MAlignmentImporterExporterUnitTests.h \
-    src/UnitTestSuite.h \  
     src/core/util/DatatypeSerializeUtilsUnitTest.h \
     src/core/util/MsaDbiUtilsUnitTests.h \
-    src/core/util/MsaUtilsUnitTests.h \
-    src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h \
-    src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h
+    src/core/util/MsaImporterExporterUnitTests.h \
+    src/core/util/MsaUtilsUnitTests.h
+
 SOURCES += \
     src/ApiTestsPlugin.cpp \
+    src/UnitTestSuite.cpp \
     src/core/datatype/annotations/AnnotationGroupUnitTests.cpp \
     src/core/datatype/annotations/AnnotationUnitTests.cpp \
-    src/core/datatype/msa/MAlignmentUnitTests.cpp \
-    src/core/datatype/msa/MAlignmentRowUnitTests.cpp \
+    src/core/datatype/msa/MsaRowUnitTests.cpp \
+    src/core/datatype/msa/MsaUnitTests.cpp \
     src/core/datatype/udr/RawDataUdrSchemaUnitTests.cpp \
     src/core/datatype/udr/UdrSchemaUnitTests.cpp \
     src/core/dbi/DbiTest.cpp \
     src/core/dbi/assembly/AssemblyDbiTestUtil.cpp \
     src/core/dbi/assembly/AssemblyDbiUnitTests.cpp \
-    src/core/dbi/sequence/SequenceDbiUnitTests.cpp \
     src/core/dbi/attribute/AttributeDbiUnitTests.cpp \
     src/core/dbi/features/FeatureDbiUnitTests.cpp \
     src/core/dbi/msa/MsaDbiUnitTests.cpp \
+    src/core/dbi/sequence/SequenceDbiUnitTests.cpp \
     src/core/dbi/udr/UdrDbiUnitTests.cpp \
     src/core/external_script/base_scheme_interface/CInterfaceManualTests.cpp \
     src/core/external_script/base_scheme_interface/CInterfaceSasTests.cpp \
     src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.cpp \
     src/core/format/fastq/FastqUnitTests.cpp \
     src/core/format/genbank/LocationParserUnitTests.cpp \
+    src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp \
     src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.cpp \
     src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp \
+    src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp \
     src/core/gobjects/BioStruct3DObjectUnitTests.cpp \
     src/core/gobjects/DNAChromatogramObjectUnitTests.cpp \
     src/core/gobjects/FeaturesTableObjectUnitTest.cpp \
-    src/core/gobjects/MAlignmentObjectUnitTests.cpp \
+    src/core/gobjects/MsaObjectUnitTests.cpp \
     src/core/gobjects/PhyTreeObjectUnitTests.cpp \
     src/core/gobjects/TextObjectUnitTests.cpp \
-    src/core/util/MAlignmentImporterExporterUnitTests.cpp \
-    src/UnitTestSuite.cpp \  
     src/core/util/DatatypeSerializeUtilsUnitTest.cpp \
     src/core/util/MsaDbiUtilsUnitTests.cpp \
-    src/core/util/MsaUtilsUnitTests.cpp \
-    src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp \
-    src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp
+    src/core/util/MsaImporterExporterUnitTests.cpp \
+    src/core/util/MsaUtilsUnitTests.cpp
diff --git a/src/plugins/api_tests/src/ApiTestsPlugin.cpp b/src/plugins/api_tests/src/ApiTestsPlugin.cpp
index 4ca2e2a..14ed2f4 100644
--- a/src/plugins/api_tests/src/ApiTestsPlugin.cpp
+++ b/src/plugins/api_tests/src/ApiTestsPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/ApiTestsPlugin.h b/src/plugins/api_tests/src/ApiTestsPlugin.h
index 1707e9c..5b2eea9 100644
--- a/src/plugins/api_tests/src/ApiTestsPlugin.h
+++ b/src/plugins/api_tests/src/ApiTestsPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/UnitTestSuite.cpp b/src/plugins/api_tests/src/UnitTestSuite.cpp
old mode 100644
new mode 100755
index c7f2287..6b33e47
--- a/src/plugins/api_tests/src/UnitTestSuite.cpp
+++ b/src/plugins/api_tests/src/UnitTestSuite.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,9 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDomElement>
+#include <QTextStream>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 
@@ -32,7 +35,7 @@
 #include "core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h"
 #include "core/gobjects/DNAChromatogramObjectUnitTests.h"
 #include "core/gobjects/FeaturesTableObjectUnitTest.h"
-#include "core/gobjects/MAlignmentObjectUnitTests.h"
+#include "core/gobjects/MsaObjectUnitTests.h"
 #include "core/gobjects/TextObjectUnitTests.h"
 
 namespace U2 {
@@ -98,11 +101,7 @@ void UnitTestSuite::prepare() {
     tests_run();
 }
 void UnitTestSuite::test_run(const QString& testName) {
-#if (QT_VERSION < 0x050000) //Qt 5
-    UnitTest* t = (UnitTest*)QMetaType::construct(QMetaType::type(testName.toStdString().c_str()));
-#else
     UnitTest* t = (UnitTest*)QMetaType::create(QMetaType::type(testName.toStdString().c_str()));
-#endif
     if (t != NULL) {
         t->SetUp();
         t->Test();
@@ -137,7 +136,7 @@ void UnitTestSuite::cleanup() {
     DNAChromatogramObjectTestData::shutdown();
     FeatureTestData::shutdown();
     FeaturesTableObjectTestData::shutdown();
-    MAlignmentObjectTestData::shutdown();
+    MsaObjectTestData::shutdown();
     MsaSQLiteSpecificTestData::shutdown();
     RawDataUdrSchemaTestData::shutdown();
     SequenceTestData::shutdown();
diff --git a/src/plugins/api_tests/src/UnitTestSuite.h b/src/plugins/api_tests/src/UnitTestSuite.h
old mode 100644
new mode 100755
index 9555c6c..b347ee3
--- a/src/plugins/api_tests/src/UnitTestSuite.h
+++ b/src/plugins/api_tests/src/UnitTestSuite.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.cpp
index 62506bb..dc65853 100644
--- a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBitArray>
+#include <QBitArray>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/AnnotationTableObject.h>
diff --git a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.h b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.h
index e792571..34b83b4 100644
--- a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.h
+++ b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationGroupUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.cpp
index e8ecd2a..3c71ecc 100644
--- a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBitArray>
+#include <QBitArray>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/AnnotationTableObject.h>
diff --git a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.h b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.h
index 69863dc..1c44d1c 100644
--- a/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.h
+++ b/src/plugins/api_tests/src/core/datatype/annotations/AnnotationUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.cpp
deleted file mode 100644
index e783901..0000000
--- a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.cpp
+++ /dev/null
@@ -1,1605 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentRowUnitTests.h"
-
-#include <U2Core/DNASequence.h>
-#include <U2Core/U2Msa.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-
-namespace U2 {
-
-const int MAlignmentRowTestUtils::rowWithGapsLength = 7;
-const int MAlignmentRowTestUtils::rowWithGapsInMiddleLength = 8;
-const int MAlignmentRowTestUtils::rowWithoutGapsLength = 5;
-
-const QString MAlignmentRowTestUtils::rowWithGapsName = "Row with gaps name";
-
-MAlignmentRow MAlignmentRowTestUtils::initTestRowWithGaps(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For row with gaps");
-    almnt.addRow(rowWithGapsName, "---AG-T", opStatus);
-    return almnt.getRow(0); // "---AG-T"
-}
-
-MAlignmentRow MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For row with gaps in middle");
-    almnt.addRow("Test sequence", "GG-T--AT", opStatus);
-    return almnt.getRow(0); // "GG-T--AT"
-}
-
-MAlignmentRow MAlignmentRowTestUtils::initTestRowWithTrailingGaps(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For row with trailing gaps");
-    almnt.addRow("Row with trailing gaps", "CA-GT--T--", opStatus);
-    return almnt.getRow(0); // "CA-GT--T--"
-}
-
-MAlignmentRow MAlignmentRowTestUtils::initTestRowWithoutGaps(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For a row without gaps");
-    almnt.addRow("Row without gaps", "ACGTA", opStatus);
-    return almnt.getRow(0); // "ACGTA"
-}
-
-MAlignmentRow MAlignmentRowTestUtils::initEmptyRow(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For empty row");
-    almnt.addRow("Empty", "", opStatus);
-    return almnt.getRow(0); // ""
-}
-
-MAlignmentRow MAlignmentRowTestUtils::initTestRowForModification(MAlignment& almnt) {
-    U2OpStatusImpl opStatus;
-    almnt.setName("For row for modifications");
-    almnt.addRow("Test sequence", "A---ACG--GTT-A-C---G", opStatus);
-    return almnt.getRow(0); // "A---ACG--GTT-A-C---G"
-}
-
-QString MAlignmentRowTestUtils::getRowData(MAlignmentRow row) {
-    U2OpStatusImpl os;
-    QString result = row.toByteArray(row.getRowLength(), os).data();
-    SAFE_POINT_OP(os, QString());
-    return result;
-}
-
-
-/** Tests createRow */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromBytes) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "--GG-A---T", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG-A---T", QString(row.getCore()), "core data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(2, row.getCoreStart(), "core start");
-    CHECK_EQUAL(10, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(8, row.getCoreLength(), "core length");
-    CHECK_EQUAL(10, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromBytesTrailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "--GG-A---T--", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--GG-A---T--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG-A---T", QString(row.getCore()), "core data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(2, row.getCoreStart(), "core start");
-    CHECK_EQUAL(10, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(8, row.getCoreLength(), "core length");
-    CHECK_EQUAL(12, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromBytesGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "----", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("----", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(0, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(0, row.getCoreLength(), "core length");
-    CHECK_EQUAL(4, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_oneTrailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "A-", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("A-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("A", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(1, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(1, row.getCoreLength(), "core length");
-    CHECK_EQUAL(2, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_twoTrailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "A--", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("A--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("A", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(1, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(1, row.getCoreLength(), "core length");
-    CHECK_EQUAL(3, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_oneMiddleGap) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "AC-GT", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("AC-GT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("AC-GT", QString(row.getCore()), "core data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(5, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(5, row.getCoreLength(), "core length");
-    CHECK_EQUAL(5, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_noGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "ACGT", os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("ACGT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("ACGT", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(4, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(4, row.getCoreLength(), "core length");
-    CHECK_EQUAL(4, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromSeq) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "GGAT");
-    QList<U2MsaGap> gaps;
-    U2MsaGap gapBeginning(0, 2);
-    U2MsaGap gapMiddle1(4, 1);
-    U2MsaGap gapMiddle2(6, 3);
-    gaps << gapBeginning << gapMiddle1 << gapMiddle2;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG-A---T", QString(row.getCore()), "core data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(2, row.getCoreStart(), "core start");
-    CHECK_EQUAL(10, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(8, row.getCoreLength(), "core length");
-    CHECK_EQUAL(10, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromSeqTrailing) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "GGAT");
-    QList<U2MsaGap> gaps;
-    U2MsaGap gapBeginning(0, 2);
-    U2MsaGap gapMiddle1(4, 1);
-    U2MsaGap gapMiddle2(6, 3);
-    U2MsaGap gapTrailing(10, 2);
-    gaps << gapBeginning << gapMiddle1 << gapMiddle2 << gapTrailing;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--GG-A---T--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG-A---T", QString(row.getCore()), "core data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(2, row.getCoreStart(), "core start");
-    CHECK_EQUAL(10, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(8, row.getCoreLength(), "core length");
-    CHECK_EQUAL(12, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_fromSeqWithGaps) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "GG-AT");
-    QList<U2MsaGap> gaps;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_EQUAL("Failed to create a multiple alignment row!", os.getError(), "opStatus");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_gapPositionTooBig) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "GGAT");
-    QList<U2MsaGap> gaps;
-    U2MsaGap gapBeginning(0, 2);
-    U2MsaGap gapMiddle1(4, 1);
-    U2MsaGap gapMiddle2(8, 3);
-    gaps << gapBeginning << gapMiddle1 << gapMiddle2;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_EQUAL("Failed to create a multiple alignment row!", os.getError(), "opStatus");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_negativeGapPos) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "ACGT");
-    QList<U2MsaGap> gaps;
-    U2MsaGap invalidGap(-1, 2);
-    gaps << invalidGap;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_EQUAL("Failed to create a multiple alignment row!", os.getError(), "opStatus");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, createRow_negativeGapOffset) {
-    MAlignment almnt("Test alignment");
-    DNASequence sequence("Test sequence", "ACGT");
-    QList<U2MsaGap> gaps;
-    U2MsaGap invalidGap(0, -1);
-    gaps << invalidGap;
-    U2OpStatusImpl os;
-    almnt.addRow("Row", sequence, gaps, os);
-    CHECK_EQUAL("Failed to create a multiple alignment row!", os.getError(), "opStatus");
-}
-
-/** Tests rowName */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowName_rowFromBytes) {
-    QString rowName = "Test sequence";
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow(rowName, "AG-T" , os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(rowName, row.getName(), "name of the row");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowName_rowFromSeq) {
-    QString rowName = "Test sequence";
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow(rowName, "AGT", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(rowName, row.getName(), "name of the row");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowName_setName) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    QString rowName = "New row name";
-    row.setName(rowName);
-    CHECK_EQUAL(rowName, row.getName(), "name of the row");
-}
-
-/** Tests toByteArray */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, toByteArray_noGaps) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithoutGaps(almnt);
-    U2OpStatusImpl os;
-    QByteArray bytes = row.toByteArray(MAlignmentRowTestUtils::rowWithoutGapsLength, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("ACGTA", QString(bytes), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, toByteArray_gapsInBeginningAndMiddle) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    QByteArray bytes = row.toByteArray(MAlignmentRowTestUtils::rowWithGapsLength, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---AG-T", QString(bytes), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, toByteArray_incorrectLength) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    QByteArray bytes = row.toByteArray(MAlignmentRowTestUtils::rowWithGapsLength - 1, os);
-    CHECK_EQUAL("Failed to get row data!", os.getError(), "opStatus");
-    CHECK_EQUAL("", QString(bytes), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, toByteArray_greaterLength) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    QByteArray bytes = row.toByteArray(MAlignmentRowTestUtils::rowWithGapsLength + 1, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---AG-T-", QString(bytes), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, toByteArray_trailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "--GG-A---T--", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    QByteArray bytes = row.toByteArray(12, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-A---T--", QString(bytes), "row data");
-}
-
-/** Tests simplify */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, simplify_gaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "--GG-A---T--", os);
-    CHECK_NO_ERROR(os);
-    bool result = almnt.simplify();
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_TRUE(result, "simplify() must have returned 'true'!");
-    CHECK_EQUAL("GGAT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GGAT", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(4, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(4, row.getCoreLength(), "core length");
-    CHECK_EQUAL(4, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, simplify_nothingToRemove) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithoutGaps(almnt);
-    bool result = almnt.simplify();
-    CHECK_FALSE(result, "simplify() must have returned 'false'!");
-    CHECK_EQUAL("ACGTA", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-/** Tests append */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_noGapBetweenRows) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength(), anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---AG-TGG-T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL("GG-T--AT", MAlignmentRowTestUtils::getRowData(anotherRow), "another row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_gapBetweenRows) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength() + 1, anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---AG-T-GG-T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(5, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_offsetInAnotherRow) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGaps(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength() + 2, anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-T--AT-----AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_trailingInFirst) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength() + 1, anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("CA-GT--T---GG-T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(5, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_trailingAndOffset) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGaps(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength(), anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("CA-GT--T-----AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, append_invalidLength) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    MAlignment almnt2;
-    MAlignmentRow anotherRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
-    U2OpStatusImpl os;
-    almnt.appendRow(0, row.getRowLength() - 1, anotherRow, os);
-    row = almnt.getRow(0);
-    CHECK_EQUAL("Failed to append one row to another!", os.getError(), "opStatus");
-    CHECK_EQUAL("---AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-/** Tests setRowContent */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, setRowContent_empty) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.setRowContent(0, "");
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(MAlignmentRowTestUtils::rowWithGapsName, row.getName(), "row name");
-    CHECK_EQUAL("-------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(0, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(0, row.getCoreLength(), "core length");
-    CHECK_EQUAL(7, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, setRowContent_trailingGaps) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.setRowContent(0, "--GG-A---T--");
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(MAlignmentRowTestUtils::rowWithGapsName, row.getName(), "row name");
-    CHECK_EQUAL("--GG-A---T--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG-A---T", QString(row.getCore()), "core data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(2, row.getCoreStart(), "core start");
-    CHECK_EQUAL(10, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(8, row.getCoreLength(), "core length");
-    CHECK_EQUAL(12, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, setRowContent_offsetNoGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.setRowContent(0, "AC-GT", 1);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(MAlignmentRowTestUtils::rowWithGapsName, row.getName(), "row name");
-    CHECK_EQUAL("-AC-GT-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("AC-GT", QString(row.getCore()), "core data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(1, row.getCoreStart(), "core start");
-    CHECK_EQUAL(6, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(5, row.getCoreLength(), "core length");
-    CHECK_EQUAL(7, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, setRowContent_offsetGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.setRowContent(0, "--GG", 1);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(MAlignmentRowTestUtils::rowWithGapsName, row.getName(), "row name");
-    CHECK_EQUAL("---GG--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("GG", QString(row.getCore()), "core data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(3, row.getCoreStart(), "core start");
-    CHECK_EQUAL(5, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(2, row.getCoreLength(), "core length");
-    CHECK_EQUAL(7, row.getRowLength(), "row length");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, setRowContent_emptyAndOffset) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.setRowContent(0, "", 1);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(MAlignmentRowTestUtils::rowWithGapsName, row.getName(), "row name");
-    CHECK_EQUAL("-------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL("", QString(row.getCore()), "core data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-    CHECK_EQUAL(0, row.getCoreStart(), "core start");
-    CHECK_EQUAL(0, row.getCoreEnd(), "core end");
-    CHECK_EQUAL(0, row.getCoreLength(), "core length");
-    CHECK_EQUAL(7, row.getRowLength(), "row length");
-}
-
-/** Tests insertGaps */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_empty) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initEmptyRow(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 0, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosLeft) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 3, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG--T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-
-    almnt.insertGaps(0, 7, 2, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG--T----AT", MAlignmentRowTestUtils::getRowData(row), "row data (second insertion)");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosRight) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 2, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG--T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-
-    almnt.insertGaps(0, 5, 2, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG--T----AT", MAlignmentRowTestUtils::getRowData(row), "row data (second insertion)");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosInside) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 1, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("-----AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_insideChars) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 4, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---A--G-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toZeroPosNoGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 0, 3, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---GG-T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toZeroPosGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 0, 3, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("------AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosNoGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 7, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-T--A--T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 9, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("CA-GT--T---", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosOneGap) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "A-", os);
-    CHECK_NO_ERROR(os);
-    almnt.insertGaps(0, 1, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_noGapsYet) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithoutGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 4, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("ACGT-A", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_onlyGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "--", os);
-    CHECK_NO_ERROR(os);
-    almnt.insertGaps(0, 1, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("----", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_oneChar) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("One-char sequence", "A", os);
-    CHECK_NO_ERROR(os);
-    almnt.insertGaps(0, 0, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--A", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_tooBigPosition) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 10, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_EQUAL("---AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "gaps number");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_negativePosition) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    row.insertGaps(-1, 1, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, insertGaps_negativeNumOfChars) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 1, -1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_EQUAL("---AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-/** Tests removeChars */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_empty) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initEmptyRow(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 0, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideGap1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 2, 15, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---G---------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideGap2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 3, 15, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---G---------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_leftGapSide) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 7, 9, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---ACG---G---------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_rightGapSide) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 4, 11, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---C---G-----------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideSeq1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 5, 6, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---AT-A-C---G------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideSeq2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 6, 4, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---ACTT-A-C---G----", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_fromZeroPosGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 0, 4, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("G-T----", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_fromZeroPosChar) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 0, 17, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--G-----------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_lastPosExactly) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 7, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-T--A-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_fromLastPos) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 7, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-T--A-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideOneGap1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 2, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A-ACG--GTT-A-C---G--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(5, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideOneGap2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 2, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A--ACG--GTT-A-C---G-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(5, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideOneGapLong) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "A------GT--C-T", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("A------GT--C-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_NO_ERROR(os);
-    almnt.removeChars(0, 2, 3, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---GT--C-T---", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideTrailingGap) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "AC-GT----", os);
-    CHECK_NO_ERROR(os);
-    almnt.removeChars(0, 5, 2, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("AC-GT----", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_insideCharsOne) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 5, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---AG--GTT-A-C---G-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(5, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_negativePosition) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, -1, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_EQUAL("A---ACG--GTT-A-C---G", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_negativeNumOfChars) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 1, -1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_EQUAL("A---ACG--GTT-A-C---G", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_gapsAtRowEnd1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 9, 12, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---ACG-------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_gapsAtRowEnd2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 3, 21, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A-------------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_onlyGapsAfterRemove) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 2, 9, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("-------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_emptyAfterRemove) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 0, 21, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--------------------", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, remove_oneCharInGaps) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.removeChars(0, 13, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A---ACG--GTT--C---G-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-/** Tests charAt */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, charAt_allCharsNoOffset) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    char ch = row.charAt(-1);
-    CHECK_EQUAL('-', ch, "char -1");
-
-    ch = row.charAt(0);
-    CHECK_EQUAL('G', ch, "char 0");
-
-    ch = row.charAt(1);
-    CHECK_EQUAL('G', ch, "char 1");
-
-    ch = row.charAt(2);
-    CHECK_EQUAL('-', ch, "char 2");
-
-    ch = row.charAt(3);
-    CHECK_EQUAL('T', ch, "char 3");
-
-    ch = row.charAt(4);
-    CHECK_EQUAL('-', ch, "char 4");
-
-    ch = row.charAt(5);
-    CHECK_EQUAL('-', ch, "char 5");
-
-    ch = row.charAt(6);
-    CHECK_EQUAL('A', ch, "char 6");
-
-    ch = row.charAt(7);
-    CHECK_EQUAL('T', ch, "char 7");
-
-    ch = row.charAt(8);
-    CHECK_EQUAL('-', ch, "char 8");
-
-    ch = row.charAt(9);
-    CHECK_EQUAL('-', ch, "char 9");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, charAt_offsetAndTrailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "-AC-", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-
-    char ch = row.charAt(-1);
-    CHECK_EQUAL('-', ch, "char -1");
-
-    ch = row.charAt(0);
-    CHECK_EQUAL('-', ch, "char 0");
-
-    ch = row.charAt(1);
-    CHECK_EQUAL('A', ch, "char 1");
-
-    ch = row.charAt(2);
-    CHECK_EQUAL('C', ch, "char 2");
-
-    ch = row.charAt(3);
-    CHECK_EQUAL('-', ch, "char 3");
-
-    ch = row.charAt(4);
-    CHECK_EQUAL('-', ch, "char 4");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, charAt_onlyCharsInRow) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "ACG", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-
-    char ch = row.charAt(-1);
-    CHECK_EQUAL('-', ch, "char -1");
-
-    ch = row.charAt(0);
-    CHECK_EQUAL('A', ch, "char 0");
-
-    ch = row.charAt(1);
-    CHECK_EQUAL('C', ch, "char 1");
-
-    ch = row.charAt(2);
-    CHECK_EQUAL('G', ch, "char 2");
-
-    ch = row.charAt(3);
-    CHECK_EQUAL('-', ch, "char 3");
-}
-
-
-/** Tests rowEqual */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_sameContent) {
-    MAlignment almnt;
-    MAlignmentRow firstRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    MAlignmentRow secondRow = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
-
-    CHECK_TRUE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_FALSE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_noGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("First", "ACT", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", "ACT", os);
-    MAlignmentRow secondRow = almnt.getRow(1);
-    CHECK_NO_ERROR(os);
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
-
-    CHECK_TRUE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_FALSE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInFirst) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("First", "AC-GT-", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Second", "AC-GT", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
-
-    CHECK_TRUE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_FALSE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInSecond) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("First", "AC-GT", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Second", "AC-GT--", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
-
-    CHECK_TRUE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_FALSE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInBoth) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("First", "AC-GT---", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Second", "AC-GT--", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
-
-    CHECK_TRUE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_FALSE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_diffGapModelsGap) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "--GG-A---T", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(firstRow), "first row data");
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Test sequence", "--GG--A---T", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG--A---T", MAlignmentRowTestUtils::getRowData(secondRow), "second row data");
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
-
-    CHECK_FALSE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_TRUE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_diffGapModelsOffset) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "--GG-A---T", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(firstRow), "first row data");
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Test sequence", "--G-GA---T", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--G-GA---T", MAlignmentRowTestUtils::getRowData(secondRow), "second row data");
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
-
-    CHECK_FALSE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_TRUE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_diffNumOfGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "--GG-A---T", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(firstRow), "first row data");
-    MAlignment almnt2("Test alignment");
-    almnt2.addRow("Test sequence", "--GG-AT", os);
-    MAlignmentRow secondRow = almnt2.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-AT", MAlignmentRowTestUtils::getRowData(secondRow), "second row data");
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
-
-    CHECK_FALSE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_TRUE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, rowsEqual_diffSequences) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "--GG-A---T", os);
-    MAlignmentRow firstRow = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-A---T", MAlignmentRowTestUtils::getRowData(firstRow), "first row data");
-    almnt.addRow("Test sequence", "--GG-C---T", os);
-    MAlignmentRow secondRow = almnt.getRow(1);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("--GG-C---T", MAlignmentRowTestUtils::getRowData(secondRow), "second row data");
-
-    bool result = firstRow.isRowContentEqual(secondRow);
-    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
-
-    CHECK_FALSE(firstRow == secondRow, "Incorrect 'operator=='!");
-    CHECK_TRUE(firstRow != secondRow, "Incorrect 'operator!='!");
-}
-
-/** Tests ungapped */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, ungapped_rowWithoutOffset) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    CHECK_EQUAL(5, row.getUngappedLength(), "ungapped length");
-    CHECK_EQUAL(-1, row.getUngappedPosition(-1), "pos -1");
-    CHECK_EQUAL(0,  row.getUngappedPosition(0),  "pos 0");
-    CHECK_EQUAL(1,  row.getUngappedPosition(1),  "pos 1");
-    CHECK_EQUAL(-1, row.getUngappedPosition(2),  "pos 2");
-    CHECK_EQUAL(2,  row.getUngappedPosition(3),  "pos 3");
-    CHECK_EQUAL(-1, row.getUngappedPosition(4),  "pos 4");
-    CHECK_EQUAL(-1, row.getUngappedPosition(5),  "pos 5");
-    CHECK_EQUAL(3,  row.getUngappedPosition(6),  "pos 6");
-    CHECK_EQUAL(4,  row.getUngappedPosition(7),  "pos 7");
-    CHECK_EQUAL(-1, row.getUngappedPosition(8),  "pos 8");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, ungapped_offsetTrailing) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test row", "---AG-T-", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(3,  row.getUngappedLength(), "ungapped length");
-    CHECK_EQUAL(-1, row.getUngappedPosition(-1), "pos -1");
-    CHECK_EQUAL(-1, row.getUngappedPosition(0),  "pos 0");
-    CHECK_EQUAL(-1, row.getUngappedPosition(1),  "pos 1");
-    CHECK_EQUAL(-1, row.getUngappedPosition(2),  "pos 2");
-    CHECK_EQUAL(0,  row.getUngappedPosition(3),  "pos 3");
-    CHECK_EQUAL(1,  row.getUngappedPosition(4),  "pos 4");
-    CHECK_EQUAL(-1, row.getUngappedPosition(5),  "pos 5");
-    CHECK_EQUAL(2,  row.getUngappedPosition(6),  "pos 6");
-    CHECK_EQUAL(-1, row.getUngappedPosition(7),  "pos 7");
-    CHECK_EQUAL(-1, row.getUngappedPosition(8),  "pos 8");
-}
-
-/** Tests crop */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_empty) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initEmptyRow(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(0, 1, os);
-    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MAlignment::crop"),
-               QString("opStatus is %1").arg(os.getError()));
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideGap1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(2, 15, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--ACG--GTT-A-C-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideGap2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(3, 15, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("-ACG--GTT-A-C--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_leftGapSide) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(7, 9, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--GTT-A-C", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(3, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_rightGapSide) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(4, 11, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("ACG--GTT-A-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideSeq1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(5, 6, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("CG--GT", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideSeq2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(6, 4, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("G--G", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_fromZeroPosGap) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(0, 4, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("---A", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(1, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_fromZeroPosChar) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(0, 17, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("A---ACG--GTT-A-C-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(4, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_lastPosExactly) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(7, 1, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_fromLastPos) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(7, 2, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideOneGap1) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(2, 2, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideOneGap2) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(2, 1, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideOneGapLong) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Test sequence", "A------GT--C-T", os);
-    MAlignmentRow row = almnt.getRow(0);
-
-    CHECK_EQUAL("A------GT--C-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_NO_ERROR(os);
-    almnt.crop(2, 3, os);
-    row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("---", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_insideCharsOne) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(5, 1, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("C", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_negativePosition) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(-1, 1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MAlignment::crop"),
-               QString("opStatus is %1").arg(os.getError()));
-    CHECK_EQUAL("A---ACG--GTT-A-C---G", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_negativeNumOfChars) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(1, -1, os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MAlignment::crop"),
-               QString("opStatus is %1").arg(os.getError()));
-    CHECK_EQUAL("A---ACG--GTT-A-C---G", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_trailing) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(2, 8, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("-GT--T--", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_trailingToGaps) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(0, 9, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("CA-GT--T-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_cropTrailing) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithTrailingGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(9, 1, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("-", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_oneCharInGaps) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(13, 1, os);
-    CHECK_NO_ERROR(os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("A", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(0, row.getGapModel().count(), "number of gaps");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, crop_posMoreThanLength) {
-    MAlignment almnt;
-    MAlignmentRowTestUtils::initTestRowWithGaps(almnt);
-    U2OpStatusImpl os;
-    almnt.crop(13, 1, os);
-    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MAlignment::crop"),
-               QString("opStatus is %1").arg(os.getError()));
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL(7, row.getRowLength(), "row length");
-    CHECK_EQUAL("---AG-T", MAlignmentRowTestUtils::getRowData(row), "row data");
-    CHECK_EQUAL(2, row.getGapModel().count(), "number of gaps");
-}
-
-/** Tests mid */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, mid_general) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowForModification(almnt);
-    U2OpStatusImpl os;
-    MAlignmentRow result = row.mid(4, 8, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("ACG--GTT------------", MAlignmentRowTestUtils::getRowData(result), "row data");
-    CHECK_EQUAL(1, result.getGapModel().count(), "number of gaps");
-}
-
-/** Tests upperCase */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, upperCase_general) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Row name", "avn-*y-s", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    row.toUpperCase();
-    CHECK_EQUAL("AVN-*Y-S", MAlignmentRowTestUtils::getRowData(row), "row data");
-
-    QString actualRowName = row.getName();
-    CHECK_EQUAL("Row name", actualRowName, "row name");
-}
-
-/** Tests replaceChars */
-IMPLEMENT_TEST(MAlignmentRowUnitTests, replaceChars_charToChar) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    row.replaceChars('T', 'C', os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-C--AC", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, replaceChars_nothingToReplace) {
-    MAlignment almnt;
-    MAlignmentRow row = MAlignmentRowTestUtils::initTestRowWithGapsInMiddle(almnt);
-    U2OpStatusImpl os;
-    row.replaceChars('~', '-', os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("GG-T--AT", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, replaceChars_tildasToGapsNoGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Row name", "A~~CC~~~AG~AC~TG", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    row.replaceChars('~', '-', os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A--CC---AG-AC-TG", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, replaceChars_tildasToGapsWithGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Row name", "A~-CC~-~AG~AC-TG", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    row.replaceChars('~', '-', os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A--CC---AG-AC-TG", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentRowUnitTests, replaceChars_trailingGaps) {
-    U2OpStatusImpl os;
-    MAlignment almnt("Test alignment");
-    almnt.addRow("Row name", "A~~CC~~~AG~AC~TG~", os);
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_NO_ERROR(os);
-    row.replaceChars('~', '-', os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL("A--CC---AG-AC-TG-", MAlignmentRowTestUtils::getRowData(row), "row data");
-}
-
-
-} // namespace
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.h b/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.h
deleted file mode 100644
index d8c9faa..0000000
--- a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentRowUnitTests.h
+++ /dev/null
@@ -1,462 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_ROW_UNIT_TESTS_H_
-#define _U2_MALIGNMENT_ROW_UNIT_TESTS_H_
-
-#include <U2Core/MAlignment.h>
-
-#include <unittest.h>
-
-
-namespace U2 {
-
-class MAlignmentRowTestUtils {
-public:
-    static MAlignmentRow initTestRowWithGaps(MAlignment& ma);
-    static MAlignmentRow initTestRowWithGapsInMiddle(MAlignment& ma);
-    static MAlignmentRow initTestRowWithTrailingGaps(MAlignment& ma);
-    static MAlignmentRow initTestRowWithoutGaps(MAlignment& ma);
-    static MAlignmentRow initTestRowForModification(MAlignment& ma);
-    static MAlignmentRow initEmptyRow(MAlignment& ma);
-    static QString getRowData(MAlignmentRow row);
-
-    static const int rowWithGapsLength;
-    static const int rowWithGapsInMiddleLength;
-    static const int rowWithoutGapsLength;
-
-    static const QString rowWithGapsName;
-};
-
-/**
- * The row is created by adding it to an alignment!
- * It is created from a byte array / from a sequence.
- * Row core (start, end, length and bytes) and row length is also verified:
- *   ^ fromBytes          - create a row from a byte array, no trailing gaps
- *   ^ fromBytesTrailing  - create a row from a byte array, there are trailing gaps
- *   ^ fromBytesGaps      - create a row from a byte array, all items are gaps
- *   ^ oneTrailing        - create a row from a byte array, there is only one trailing gap (gap length = 1)
- *   ^ twoTrailing        - create a row from a byte array, there is only one trailing gap (gap length = 2)
- *   ^ oneMiddleGap       - create a row from a byte array, there is only one middle gap
- *   ^ noGaps             - create a row from a byte array, there is no gaps
- *   ^ fromSeq            - create a row from a sequence (without gaps) and a gap model
- *   ^ fromSeqTrailing    - create a row from a sequence (without gaps) and a gap model, there are trailing gaps
- *   ^ fromSeqWithGaps    - create a row from a sequence with gaps (opStatus is set to error)
- *   ^ gapPositionTooBig  - create a row from a sequence, a gap offset is bigger than the core length (opStatus is set to error)
- *   ^ negativeGapPos     - create a row from a sequence, the gap model is incorrect (negative gap position)
- *   ^ negativeGapOffset  - create a row from a sequence, the gap model is incorrect (negative gap offset)
- */
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromBytes);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromBytesTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromBytesGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_oneTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_twoTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_oneMiddleGap);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_noGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromSeq);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromSeqTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_fromSeqWithGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_gapPositionTooBig);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_negativeGapPos);
-DECLARE_TEST(MAlignmentRowUnitTests, createRow_negativeGapOffset);
-
-/**
- * Verify getting/setting of a row name:
- *   ^ rowFromBytes  - when a row has been created from a byte array
- *   ^ rowFromSeq    - when a row has been created from a sequence
- *   ^ setName       - a new name can be set
- */
-DECLARE_TEST(MAlignmentRowUnitTests, rowName_rowFromBytes);
-DECLARE_TEST(MAlignmentRowUnitTests, rowName_rowFromSeq);
-DECLARE_TEST(MAlignmentRowUnitTests, rowName_setName);
-
-/**
- * Verify "toByteArray" method:
- *   ^ noGaps                   - gap model is empty
- *   ^ gapsInBeginningAndMiddle - gaps are in the beginning of the sequence and in the middle
- *   ^ lengthTooShort           - the length is less than the core length (opStatus is set to error)
- *   ^ greaterLength            - the length is greater than the core length (additional gaps are appended to the end)
- *   ^ trailing                 - there are trailing gaps in the row
- */
-DECLARE_TEST(MAlignmentRowUnitTests, toByteArray_noGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, toByteArray_gapsInBeginningAndMiddle);
-DECLARE_TEST(MAlignmentRowUnitTests, toByteArray_incorrectLength);
-DECLARE_TEST(MAlignmentRowUnitTests, toByteArray_greaterLength);
-DECLARE_TEST(MAlignmentRowUnitTests, toByteArray_trailing);
-
-/**
- * Verify simplifying of a row:
- *   ^ beginningAndMiddleGaps - removes all gaps, returns "true"
- *   ^ nothingToRemove        - there are no gaps, returns "false"
- */
-DECLARE_TEST(MAlignmentRowUnitTests, simplify_gaps);
-DECLARE_TEST(MAlignmentRowUnitTests, simplify_nothingToRemove);
-
-/**
- * Verify appending of one row to another:
- *   ^ noGapBetweenRows   - lengthBefore exactly equals to the row length
- *   ^ gapBetweenRows     - lengthBefore is greater than the row length
- *   ^ offsetInAnotherRow - gap at the beginning of the appended row
- *   ^ trailingInFirst    - there are trailing gaps in the first row, lengthBefore is greater
- *   ^ trailingAndOffset  - there are trailing gaps in the first row, offset in the appended one
- *   ^ invalidLength      - length before appended row is too short => error
- */
-DECLARE_TEST(MAlignmentRowUnitTests, append_noGapBetweenRows);
-DECLARE_TEST(MAlignmentRowUnitTests, append_gapBetweenRows);
-DECLARE_TEST(MAlignmentRowUnitTests, append_offsetInAnotherRow);
-DECLARE_TEST(MAlignmentRowUnitTests, append_trailingInFirst);
-DECLARE_TEST(MAlignmentRowUnitTests, append_trailingAndOffset);
-DECLARE_TEST(MAlignmentRowUnitTests, append_invalidLength);
-
-/**
- * Setting row content:
- *   ^ empty          - make the row empty
- *   ^ trailingGaps   - bytes contain trailing gaps
- *   ^ offsetNoGap    - offset is specified, the sequence has no gaps at the beginning
- *   ^ offsetGap      - offset is specified, the sequence has gaps at the beginning
- *   ^ emptyAndOffset - empty sequence + (offset > 0)
- */
-DECLARE_TEST(MAlignmentRowUnitTests, setRowContent_empty);
-DECLARE_TEST(MAlignmentRowUnitTests, setRowContent_trailingGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, setRowContent_offsetNoGap);
-DECLARE_TEST(MAlignmentRowUnitTests, setRowContent_offsetGap);
-DECLARE_TEST(MAlignmentRowUnitTests, setRowContent_emptyAndOffset);
-
-/**
- * Inserting number of gaps into a row:
- *   ^ empty               - row is initially empty
- *   ^ toGapPosLeft        - there is a gap at the left side of the position (and a non-gap char at the right)
- *   ^ toGapPosRight       - there is a gap at the right side of the position
- *   ^ toGapPosInside      - gaps are inserted between gaps
- *   ^ insideChars         - gaps are inserted between chars
- *   ^ toZeroPosNoGap      - insert gaps to the beginning, there is no gap there
- *   ^ toZeroPosGap        - insert gaps to the beginning, there is already a gap offset
- *   ^ toLastPosNoGap      - insert gaps before the last char in the row
- *   ^ toLastPosGap        - insert a gap before the last gap in the row (between gaps)
- *   ^ toLastPosOneGap     - insert a gap before the last and the only gap in the row
- *   ^ noGapsYet           - insert to a row without gaps
- *   ^ onlyGaps            - the row consists of gaps only
- *   ^ oneChar             - the row consists of one char, insert offset to the beginning
- *   ^ tooBigPosition      - position is greater than the row length => skip
- *   ^ negativePosition    - negative position => skip
- *   ^ negativeNumOfChars  - negative chars count => error
- */
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_empty);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosLeft);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosRight);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toGapPosInside);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_insideChars);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toZeroPosNoGap);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toZeroPosGap);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosNoGap);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosGap);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_toLastPosOneGap);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_noGapsYet);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_onlyGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_oneChar);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_tooBigPosition);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_negativePosition);
-DECLARE_TEST(MAlignmentRowUnitTests, insertGaps_negativeNumOfChars);
-
-/**
- * Removing chars from a row:
- *   ^ empty               - row is initially empty => skip
- *   ^ insideGap1          - start and end positions are inside gaps areas
- *   ^ insideGap2          - the same as above, but shifted
- *   ^ leftGapSide         - 'pos' is a gap, there is a char at ('pos' - 1)
- *   ^ rightGapSide        - 'pos' is a char, there is a gap at ('pos' - 1)
- *   ^ insideSeq1          - start and end positions are inside chars areas
- *   ^ insideSeq2          - the same as above, but shifted
- *   ^ fromZeroPosGap      - 'pos' = 0, there is a gap
- *   ^ fromZeroPosChar     - 'pos' = 0, there is a char
- *   ^ lastPosExactly      - 'pos' is the last char in the row, 'count' = 1, no gaps at the cut end
- *   ^ fromLastPos         - 'pos' is the last char in the row, 'count' > 1, no gaps at the cut end
- *   ^ insideOneGap1       - a region inside a long gap is removed (middle and end gaps in "---")
- *   ^ insideOneGap2       - a gap inside a long gap is removed (middle in "---")
- *   ^ insideOneGapLong    - several gaps inside longer gaps region
- *   ^ insideTrailingGap   - remove gap chars inside a long trailing gap
- *   ^ insideCharsOne      - one char inside non-gap chars region
- *   ^ negativePosition    - negative 'pos' has been specified => error
- *   ^ negativeNumOfChars  - negative 'count' has been specified => error
- *   ^ gapsAtRowEnd1       - trailing gaps are not removed ('pos' + 'count' bigger than the row length is also verified)
- *   ^ gapsAtRowEnd2       - the same as above, but with the only gap at the end
- *   ^ onlyGapsAfterRemove - all non-gap chars are removed
- *   ^ emptyAfterRemove    - all chars and gaps are removed
- *   ^ oneCharInGaps       - remove a char with gaps at the left and right side
- */
-DECLARE_TEST(MAlignmentRowUnitTests, remove_empty);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideGap1);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideGap2);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_leftGapSide);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_rightGapSide);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideSeq1);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideSeq2);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_fromZeroPosGap);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_fromZeroPosChar);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_lastPosExactly);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_fromLastPos);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideOneGap1);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideOneGap2);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideOneGapLong);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideTrailingGap);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_insideCharsOne);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_toBiggerPosition);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_negativePosition);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_negativeNumOfChars);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_gapsAtRowEnd1);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_gapsAtRowEnd2);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_onlyGapsAfterRemove);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_emptyAfterRemove);
-DECLARE_TEST(MAlignmentRowUnitTests, remove_oneCharInGaps);
-
-/**
- * Getting a char at the specified position:
- *   ^ allCharsNoOffset  - verify all indexes of a row without gap offset in the beginning
- *   ^ offsetAndTrailing - verify gaps at the beginning and end of a row
- *   ^ onlyCharsInRow    - there are no gaps in the row
- */
-DECLARE_TEST(MAlignmentRowUnitTests, charAt_allCharsNoOffset);
-DECLARE_TEST(MAlignmentRowUnitTests, charAt_offsetAndTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, charAt_onlyCharsInRow);
-
-/**
- * Checking if rows are equal (method "isRowContentEqual", "operator==", "operator!="):
- *   ^ sameContent         - rows contents are equal
- *   ^ noGaps              - rows contents are equal, there are no gaps in the rows
- *   ^ trailingInFirst     - rows contents are equal except there is a trailing gap in the first row
- *   ^ trailingInSecond    - rows contents are equal except there is a trailing gap in the second row
- *   ^ trailingInBoth      - rows contents are equal except trailing gaps, i.e. both rows have trailing gaps and sizes of the gaps are different
- *   ^ diffGapModelsGap    - gaps models are different (lengths of gaps are different)
- *   ^ diffGapModelsOffset - gaps models are different (offsets of gaps are different)
- *   ^ diffNumOfGaps       - gaps models are different (number of gaps differs)
- *   ^ diffSequences       - sequences differ
- */
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_sameContent);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_noGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInFirst);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInSecond);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_trailingInBoth);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_diffGapModelsGap);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_diffGapModelsOffset);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_diffNumOfGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, rowsEqual_diffSequences);
-
-/**
- * Verify ungapped sequence length and getting of an ungapped position:
- *   ^ rowWithoutOffset  - verify the length and position for a row without gaps at the beginning
- *   ^ offsetTrailing    - verify the length and position for a row with gaps at the beginning
- */
-DECLARE_TEST(MAlignmentRowUnitTests, ungapped_rowWithoutOffset);
-DECLARE_TEST(MAlignmentRowUnitTests, ungapped_offsetTrailing);
-
-/**
- * Cropping a row:
- *   ^ empty               - row is initially empty => skip
- *   ^ insideGap1          - start and end positions are inside gaps areas
- *   ^ insideGap2          - the same as above, but shifted
- *   ^ leftGapSide         - 'pos' is a gap, there is a char at ('pos' - 1)
- *   ^ rightGapSide        - 'pos' is a char, there is a gap at ('pos' - 1)
- *   ^ insideSeq1          - start and end positions are inside chars areas
- *   ^ insideSeq2          - the same as above, but shifted
- *   ^ fromZeroPosGap      - 'pos' = 0, there is a gap
- *   ^ fromZeroPosChar     - 'pos' = 0, there is a char
- *   ^ lastPosExactly      - 'pos' is the last char in the row, 'count' = 1, no gaps at the cut end
- *   ^ fromLastPos         - 'pos' is the last char in the row, 'count' > 1, no gaps at the cut end
- *   ^ insideOneGap1       - a region inside a long gap is removed (middle and end gaps in "---")
- *   ^ insideOneGap2       - a gap inside a long gap (middle in "---")
- *   ^ insideOneGapLong    - several gaps inside longer gaps region
- *   ^ insideCharsOne      - one char inside non-gap chars region
- *   ^ negativePosition    - negative 'pos' has been specified => error
- *   ^ negativeNumOfChars  - negative 'count' has been specified => error
- *   ^ trailing            - there are trailing gaps in the row
- *   ^ trailingToGaps      - there are trailing gaps in the row, the row is cropped to gaps only
- *   ^ cropTrailing        - trailing gaps are cropped
- *   ^ oneCharInGaps       - remove a char with gaps at the left and right side
- *   ^ posMoreThanLength   - the specified position is greater than the row length => make row empty
- */
-DECLARE_TEST(MAlignmentRowUnitTests, crop_empty);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideGap1);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideGap2);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_leftGapSide);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_rightGapSide);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideSeq1);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideSeq2);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_fromZeroPosGap);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_fromZeroPosChar);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_lastPosExactly);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_fromLastPos);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideOneGap1);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideOneGap2);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideOneGapLong);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_insideCharsOne);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_negativePosition);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_negativeNumOfChars);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_trailing);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_trailingToGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_cropTrailing);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_oneCharInGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, crop_posMoreThanLength);
-
-/**
- * Getting mid of a row - only one case is verified as
- * mid uses "crop" method.
- */
-DECLARE_TEST(MAlignmentRowUnitTests, mid_general);
-
-/** Converting to upper case. It is also verified that the name of the row is not changed. */
-DECLARE_TEST(MAlignmentRowUnitTests, upperCase_general);
-
-/**
- * Replacing chars in a row:
- *   ^ charToChar           - all 'A' in a row are replaced by 'G'.
- *   ^ nothingToReplace     - no 'origChar' in a row to replace by a gap.
- *   ^ tildasToGapsNoGaps   - all 'origChar' ('~') are replaced by gaps.
- *   ^ tildasToGapsWithGaps - the row contains both gaps and 'origChar' ('~'), replaced by gaps.
-                              Shifted gaps offset and merging of gaps is also verified.
- *   ^ trailingGaps         - trailing gaps are not removed.
- */
-DECLARE_TEST(MAlignmentRowUnitTests, replaceChars_charToChar);
-DECLARE_TEST(MAlignmentRowUnitTests, replaceChars_nothingToReplace);
-DECLARE_TEST(MAlignmentRowUnitTests, replaceChars_tildasToGapsNoGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, replaceChars_tildasToGapsWithGaps);
-DECLARE_TEST(MAlignmentRowUnitTests, replaceChars_trailingGaps);
-
-
-} // namespace
-
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromBytes)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromBytesTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromBytesGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_oneTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_twoTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_oneMiddleGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_noGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromSeq)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromSeqTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_fromSeqWithGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_gapPositionTooBig)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_negativeGapPos)
-DECLARE_METATYPE(MAlignmentRowUnitTests, createRow_negativeGapOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowName_rowFromBytes)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowName_rowFromSeq)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowName_setName)
-DECLARE_METATYPE(MAlignmentRowUnitTests, toByteArray_noGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, toByteArray_gapsInBeginningAndMiddle)
-DECLARE_METATYPE(MAlignmentRowUnitTests, toByteArray_incorrectLength)
-DECLARE_METATYPE(MAlignmentRowUnitTests, toByteArray_greaterLength)
-DECLARE_METATYPE(MAlignmentRowUnitTests, toByteArray_trailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, simplify_gaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, simplify_nothingToRemove)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_noGapBetweenRows)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_gapBetweenRows)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_offsetInAnotherRow)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_trailingInFirst)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_trailingAndOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, append_invalidLength)
-DECLARE_METATYPE(MAlignmentRowUnitTests, setRowContent_empty)
-DECLARE_METATYPE(MAlignmentRowUnitTests, setRowContent_trailingGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, setRowContent_offsetNoGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, setRowContent_offsetGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, setRowContent_emptyAndOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_empty)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toGapPosLeft)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toGapPosRight)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toGapPosInside)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_insideChars)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toZeroPosNoGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toZeroPosGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toLastPosNoGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toLastPosGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_toLastPosOneGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_noGapsYet)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_onlyGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_oneChar)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_tooBigPosition)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_negativePosition)
-DECLARE_METATYPE(MAlignmentRowUnitTests, insertGaps_negativeNumOfChars)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_empty)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideGap1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideGap2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_leftGapSide)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_rightGapSide)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideSeq1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideSeq2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_fromZeroPosGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_fromZeroPosChar)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_lastPosExactly)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_fromLastPos)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideOneGap1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideOneGap2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideOneGapLong)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideTrailingGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_insideCharsOne)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_negativePosition)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_negativeNumOfChars)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_gapsAtRowEnd1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_gapsAtRowEnd2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_onlyGapsAfterRemove)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_emptyAfterRemove)
-DECLARE_METATYPE(MAlignmentRowUnitTests, remove_oneCharInGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, charAt_allCharsNoOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, charAt_offsetAndTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, charAt_onlyCharsInRow)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_sameContent)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_noGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_trailingInFirst)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_trailingInSecond)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_trailingInBoth)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_diffGapModelsGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_diffGapModelsOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_diffNumOfGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, rowsEqual_diffSequences)
-DECLARE_METATYPE(MAlignmentRowUnitTests, ungapped_rowWithoutOffset)
-DECLARE_METATYPE(MAlignmentRowUnitTests, ungapped_offsetTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_empty)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideGap1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideGap2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_leftGapSide)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_rightGapSide)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideSeq1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideSeq2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_fromZeroPosGap)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_fromZeroPosChar)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_lastPosExactly)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_fromLastPos)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideOneGap1)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideOneGap2)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideOneGapLong)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_insideCharsOne)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_negativePosition)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_negativeNumOfChars)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_trailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_trailingToGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_cropTrailing)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_oneCharInGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, crop_posMoreThanLength)
-DECLARE_METATYPE(MAlignmentRowUnitTests, mid_general)
-DECLARE_METATYPE(MAlignmentRowUnitTests, upperCase_general)
-DECLARE_METATYPE(MAlignmentRowUnitTests, replaceChars_charToChar)
-DECLARE_METATYPE(MAlignmentRowUnitTests, replaceChars_nothingToReplace)
-DECLARE_METATYPE(MAlignmentRowUnitTests, replaceChars_tildasToGapsNoGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, replaceChars_tildasToGapsWithGaps)
-DECLARE_METATYPE(MAlignmentRowUnitTests, replaceChars_trailingGaps)
-
-#endif
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.cpp
deleted file mode 100644
index fea5acd..0000000
--- a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.cpp
+++ /dev/null
@@ -1,1003 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentUnitTests.h"
-#include "MAlignmentRowUnitTests.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/U2Msa.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <QSet>
-
-
-namespace U2 {
-
-const int MAlignmentTestUtils::rowsNum = 2;
-const int MAlignmentTestUtils::firstRowLength = 7;
-const int MAlignmentTestUtils::secondRowLength = 9;
-
-const QString MAlignmentTestUtils::alignmentName = "Test alignment name";
-
-
-MAlignment MAlignmentTestUtils::initTestAlignment() {
-    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
-    const DNAAlphabet* alphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-
-    QByteArray firstSequence("---AG-T");
-    QByteArray secondSequence("AG-CT-TAA");
-
-    MAlignment almnt(alignmentName, alphabet);
-
-    U2OpStatusImpl os;
-    almnt.addRow("First row", firstSequence, os);
-    CHECK_OP(os, MAlignment());
-
-    almnt.addRow("Second row", secondSequence, os);
-    CHECK_OP(os, MAlignment());
-
-    return almnt;
-}
-
-QString MAlignmentTestUtils::getRowData(const MAlignment& almnt, int rowNum) {
-    if (rowNum < 0 || rowNum > almnt.getNumRows()) {
-        return "";
-    }
-
-    MAlignmentRow row = almnt.getRow(rowNum);
-
-    return MAlignmentRowTestUtils::getRowData(row);
-}
-
-bool MAlignmentTestUtils::testAlignmentNotChanged(const MAlignment& almnt) {
-    if (9 != almnt.getLength()) {
-        return false;
-    }
-
-    if ("---AG-T--" != MAlignmentTestUtils::getRowData(almnt, 0)) {
-        return false;
-    }
-
-    if ("AG-CT-TAA" != MAlignmentTestUtils::getRowData(almnt, 1)) {
-        return false;
-    }
-
-    return true;
-}
-
-
-/** Tests clear */
-IMPLEMENT_TEST(MAlignmentUnitTests, clear_notEmpty) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    almnt.clear();
-    QList<MAlignmentRow> rows = almnt.getRows();
-    CHECK_EQUAL(0, rows.count(), "number of rows");
-}
-
-/** Tests name */
-IMPLEMENT_TEST(MAlignmentUnitTests, name_ctor) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    CHECK_EQUAL(MAlignmentTestUtils::alignmentName, almnt.getName(), "alignment name");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, name_setName) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    QString newName = "Another name";
-    almnt.setName(newName);
-    CHECK_EQUAL(newName, almnt.getName(), "alignment name");
-}
-
-/** Tests alphabet */
-IMPLEMENT_TEST(MAlignmentUnitTests, alphabet_ctor) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    if (NULL == almnt.getAlphabet()) {
-        SetError("NULL alphabet!");
-    }
-    CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), almnt.getAlphabet()->getId(), "alphabet ID");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, alphabet_setAlphabet) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-
-    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
-    const DNAAlphabet* newAlphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
-    almnt.setAlphabet(newAlphabet);
-
-    if (NULL == almnt.getAlphabet() || NULL == newAlphabet) {
-        SetError("NULL alphabet!");
-    }
-    CHECK_EQUAL(newAlphabet->getId(), almnt.getAlphabet()->getId(), "new alignment ID");
-}
-
-/** Tests info */
-IMPLEMENT_TEST(MAlignmentUnitTests, info_setGet) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    QVariantMap info;
-    QString infoElementName = "Test element name";
-    QString infoElementValue = "Test element value";
-    info.insert(infoElementName, infoElementValue);
-    almnt.setInfo(info);
-    QVariantMap actualInfo = almnt.getInfo();
-    QString actualValue = actualInfo.value(infoElementName).value<QString>();
-    CHECK_EQUAL(infoElementValue, actualValue, "info element value");
-}
-
-/** Tests length */
-IMPLEMENT_TEST(MAlignmentUnitTests, length_isEmptyFalse) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    CHECK_FALSE(almnt.isEmpty(), "Method isEmpty() returned 'true' unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, length_isEmptyTrue) {
-    MAlignment almnt = MAlignment();
-    CHECK_TRUE(almnt.isEmpty(), "Method isEmpty() returned 'false' unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, length_get) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    int expectedLength = 9; // the length of the longest row
-    CHECK_EQUAL(expectedLength, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, length_getForEmpty) {
-    MAlignment almnt = MAlignment();
-    CHECK_EQUAL(0, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, length_setLessLength) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    int newLength = 5;
-    almnt.setLength(newLength);
-    CHECK_EQUAL(newLength, almnt.getLength(), "alignment length");
-
-    CHECK_EQUAL("---AG", MAlignmentTestUtils::getRowData(almnt, 0), "first row data");
-    CHECK_EQUAL("AG-CT", MAlignmentTestUtils::getRowData(almnt, 1), "second row data");
-}
-
-/** Tests numOfRows */
-IMPLEMENT_TEST(MAlignmentUnitTests, numOfRows_notEmpty) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    CHECK_EQUAL(MAlignmentTestUtils::rowsNum, almnt.getNumRows(), "number of rows");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, numOfRows_empty) {
-    MAlignment almnt = MAlignment();
-    CHECK_EQUAL(0, almnt.getNumRows(), "number of rows");
-}
-
-/** Tests trim */
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_biggerLength) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    int newLength = 100;
-    almnt.setLength(newLength);
-    bool result = almnt.trim();
-    CHECK_TRUE(result, "Method trim() returned 'false' unexpectedly!");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("AG-CT-TAA", MAlignmentTestUtils::getRowData(almnt, 1), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_leadingGapColumns) {
-    QByteArray firstSequence("---AG-T");
-    QByteArray secondSequence("--AG-CT-TA");
-
-    MAlignment almnt = MAlignment("Alignment with leading gap columns", NULL);
-    U2OpStatusImpl os;
-    almnt.addRow("First row", firstSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.addRow("Second row", secondSequence, os);
-    CHECK_NO_ERROR(os);
-
-    bool result = almnt.trim();
-
-    CHECK_TRUE(result, "Method trim() returned 'false' unexpectedly!");
-    CHECK_EQUAL(8, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("-AG-T---", MAlignmentTestUtils::getRowData(almnt, 0), "first row data");
-    CHECK_EQUAL("AG-CT-TA", MAlignmentTestUtils::getRowData(almnt, 1), "second row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_nothingToTrim) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    bool result = almnt.trim();
-    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly!");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("AG-CT-TAA", MAlignmentTestUtils::getRowData(almnt, 1), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_rowWithoutGaps) {
-    QByteArray seq("ACGTAGTCGATC");
-
-    MAlignment almnt = MAlignment("Alignment", NULL);
-    U2OpStatusImpl os;
-    almnt.addRow("Row without gaps", seq, os);
-    CHECK_NO_ERROR(os);
-
-    bool result = almnt.trim();
-
-    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly!");
-    CHECK_EQUAL(12, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("ACGTAGTCGATC", MAlignmentTestUtils::getRowData(almnt, 0), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_empty) {
-    MAlignment almnt = MAlignment();
-    bool result = almnt.trim();
-    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, trim_trailingGapInOne) {
-    QByteArray firstSequence("ACGT");
-    QByteArray secondSequence("CAC-");
-
-    MAlignment almnt = MAlignment("Alignment", NULL);
-    U2OpStatusImpl os;
-    almnt.addRow("First row", firstSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.addRow("Second row", secondSequence, os);
-    CHECK_NO_ERROR(os);
-
-    bool result = almnt.trim();
-
-    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly!");
-    CHECK_EQUAL(4, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("ACGT", MAlignmentTestUtils::getRowData(almnt, 0), "first row data");
-    CHECK_EQUAL("CAC-", MAlignmentTestUtils::getRowData(almnt, 1), "second row data");
-    CHECK_EQUAL(0, almnt.getRow(1).getGapModel().size(), "number of gaps in the second row");
-}
-
-/** Tests simplify */
-IMPLEMENT_TEST(MAlignmentUnitTests, simplify_withGaps) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    bool result = almnt.simplify();
-    CHECK_TRUE(result, "Method simplify() returned 'false' unexpectedly!");
-    CHECK_EQUAL(7, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("AGT----", MAlignmentTestUtils::getRowData(almnt, 0), "first row data");
-    CHECK_EQUAL("AGCTTAA", MAlignmentTestUtils::getRowData(almnt, 1), "second row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, simplify_withoutGaps) {
-    QByteArray seq("ACGTAGTCGATC");
-
-    MAlignment almnt = MAlignment("Alignment", NULL);
-    U2OpStatusImpl os;
-    almnt.addRow("Row without gaps", seq, os);
-    CHECK_NO_ERROR(os);
-
-    bool result = almnt.simplify();
-
-    CHECK_FALSE(result, "Method simplify() returned 'true' unexpectedly!");
-    CHECK_EQUAL(12, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("ACGTAGTCGATC", MAlignmentTestUtils::getRowData(almnt, 0), "row data");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, simplify_empty) {
-    MAlignment almnt = MAlignment();
-    bool result = almnt.simplify();
-    CHECK_FALSE(result, "Method simplify() returned 'true' unexpectedly!");
-}
-
-/** Tests sortRows */
-IMPLEMENT_TEST(MAlignmentUnitTests, sortRows_byNameAsc) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("TTTTTT");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name", NULL);
-    almnt.addRow("NameBA", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("NameAB", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("NameAA", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.sortRowsByName();
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(3, rowNames.count(), "number of rows");
-    CHECK_EQUAL("NameAA", rowNames[0], "order");
-    CHECK_EQUAL("NameAB", rowNames[1], "order");
-    CHECK_EQUAL("NameBA", rowNames[2], "order");
-    CHECK_EQUAL("TTTTTT", MAlignmentTestUtils::getRowData(almnt, 0), "first row sequence");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, sortRows_byNameDesc) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("TTTTTT");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name", NULL);
-    almnt.addRow("NameAA", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("NameBA", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("NameAB", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.sortRowsByName(false);
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(3, rowNames.count(), "number of rows");
-    CHECK_EQUAL("NameBA", rowNames[0], "order");
-    CHECK_EQUAL("NameAB", rowNames[1], "order");
-    CHECK_EQUAL("NameAA", rowNames[2], "order");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 0), "first row sequence");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, sortRows_twoSimilar) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("TTTTTT");
-    QByteArray forthSequence("AAAAAA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    QVector<U2Region> unitedRegions;
-    almnt.sortRowsBySimilarity(unitedRegions);
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(4, rowNames.count(), "number of rows");
-    CHECK_EQUAL("First", rowNames[0], "order");
-    CHECK_EQUAL("Forth", rowNames[1], "order");
-    CHECK_EQUAL("Second", rowNames[2], "order");
-    CHECK_EQUAL("Third", rowNames[3], "order");
-
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("TTTTTT", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-    CHECK_EQUAL(1, unitedRegions.count(), "number of similar regions");
-    U2Region reg = unitedRegions[0];
-    CHECK_EQUAL(0, reg.startPos, "similar rows region start position");
-    CHECK_EQUAL(2, reg.length, "similar rows region length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, sortRows_threeSimilar) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("AAAAAA");
-    QByteArray thirdSequence("TTTTTT");
-    QByteArray forthSequence("AAAAAA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    QVector<U2Region> unitedRegions;
-    almnt.sortRowsBySimilarity(unitedRegions);
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(4, rowNames.count(), "number of rows");
-    CHECK_EQUAL("First", rowNames[0], "order");
-    CHECK_EQUAL("Second", rowNames[1], "order");
-    CHECK_EQUAL("Forth", rowNames[2], "order");
-    CHECK_EQUAL("Third", rowNames[3], "order");
-
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("TTTTTT", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-
-    CHECK_EQUAL(1, unitedRegions.count(), "number of similar regions");
-    U2Region reg = unitedRegions[0];
-    CHECK_EQUAL(0, reg.startPos, "similar rows region start position");
-    CHECK_EQUAL(3, reg.length, "similar rows region length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, sortRows_similarTwoRegions) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("AAAAAA");
-    QByteArray forthSequence("CCCCCC");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    QVector<U2Region> unitedRegions;
-    almnt.sortRowsBySimilarity(unitedRegions);
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(4, rowNames.count(), "number of rows");
-    CHECK_EQUAL("First", rowNames[0], "order");
-    CHECK_EQUAL("Third", rowNames[1], "order");
-    CHECK_EQUAL("Second", rowNames[2], "order");
-    CHECK_EQUAL("Forth", rowNames[3], "order");
-
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-
-    CHECK_EQUAL(2, unitedRegions.count(), "number of similar regions");
-    U2Region reg = unitedRegions[0];
-    CHECK_EQUAL(0, reg.startPos, "similar rows first region start position");
-    CHECK_EQUAL(2, reg.length, "similar rows first region length");
-    reg = unitedRegions[1];
-    CHECK_EQUAL(2, reg.startPos, "similar rows second region start position");
-    CHECK_EQUAL(2, reg.length, "similar rows second region length");
-}
-
-/** Tests getRows */
-IMPLEMENT_TEST(MAlignmentUnitTests, getRows_oneRow) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    MAlignmentRow row = almnt.getRow(0);
-    CHECK_EQUAL("---AG-T--", MAlignmentRowTestUtils::getRowData(row), "first row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, getRows_severalRows) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    QList<MAlignmentRow> rows = almnt.getRows();
-    CHECK_EQUAL(2, rows.count(), "number of rows");
-    CHECK_EQUAL("---AG-T--", MAlignmentRowTestUtils::getRowData(rows[0]), "first row");
-    CHECK_EQUAL("AG-CT-TAA", MAlignmentRowTestUtils::getRowData(rows[1]), "second row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, getRows_rowNames) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    QStringList rowNames = almnt.getRowNames();
-    CHECK_EQUAL(2, rowNames.count(), "number of rows");
-    CHECK_EQUAL("First row", rowNames[0], "first row name");
-    CHECK_EQUAL("Second row", rowNames[1], "second row name");
-}
-
-/** Tests charAt */
-IMPLEMENT_TEST(MAlignmentUnitTests, charAt_nonGapChar) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    char result = almnt.charAt(0, 3);
-    CHECK_EQUAL('A', result, "char inside first row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, charAt_gap) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    char result = almnt.charAt(1, 2);
-    CHECK_EQUAL('-', result, "gap inside second row");
-}
-
-/** Tests insertGaps */
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_validParams) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 4, 3, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(10, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("---A---G-T", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_toBeginningLength) {
-    QByteArray firstSequence("ACGT");
-    QByteArray secondSequence("ACC");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.insertGaps(1, 0, 2, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(5, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("--ACC", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_negativeRowIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(-1, 4, 3, os);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_tooBigRowIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(2, 4, 3, os);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_negativePos) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, -1, 3, os);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_tooBigPos) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 10, 3, os);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, insertGaps_negativeCount) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.insertGaps(0, 4, -1, os);
-    CHECK_EQUAL("Failed to insert gaps into an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-/** Tests removeChars */
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_validParams) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(1, 0, 2, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("-CT-TAA--", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_negativeRowIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(-1, 0, 2, os);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_tooBigRowIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(2, 0, 2, os);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_negativePos) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(1, -1, 2, os);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_tooBigPos) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(1, 10, 2, os);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeChars_negativeCount) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeChars(1, 0, -1, os);
-    CHECK_EQUAL("Failed to remove chars from an alignment!", os.getError(), "opStatus");
-    CHECK_TRUE(MAlignmentTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly!");
-}
-
-/** Tests removeRegion */
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRegion_validParams) {
-    QByteArray firstSequence("---ACT");
-    QByteArray secondSequence("A-CG-A");
-    QByteArray thirdSequence("---CGA");
-    QByteArray forthSequence("AAAAAA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.removeRegion(1, 1, 3, 2, false);
-
-    CHECK_EQUAL(4, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---ACT", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("A-A---", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("-GA---", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRegion_removeEmpty) {
-    QByteArray firstSequence("---ACT");
-    QByteArray secondSequence("A-CG-A");
-    QByteArray thirdSequence("--AC");
-    QByteArray forthSequence("AAAAAA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.removeRegion(1, 1, 3, 2, true);
-
-    CHECK_EQUAL(3, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---ACT", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("A-A---", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRegion_trimmed) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    almnt.removeRegion(0, 1, 2, 1, false);
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("-CT-TAA--", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-/** Tests renameRow */
-IMPLEMENT_TEST(MAlignmentUnitTests, renameRow_validParams) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    QString newRowName = "New row name";
-    almnt.renameRow(0, newRowName);
-    MAlignmentRow actualRow = almnt.getRow(0);
-    CHECK_EQUAL(newRowName, actualRow.getName(), "renamed row name");
-}
-
-/** Tests setRowContent */
-IMPLEMENT_TEST(MAlignmentUnitTests, setRowContent_validParamsAndNotTrimmed) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    almnt.setRowContent(1, "---AC-");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("---AC----", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, setRowContent_lengthIsIncreased) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    almnt.setRowContent(0, "ACGT-ACA-ACA");
-    CHECK_EQUAL(12, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("ACGT-ACA-ACA", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("AG-CT-TAA---", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-/** Tests upperCase */
-IMPLEMENT_TEST(MAlignmentUnitTests, upperCase_charsAndGaps) {
-    QByteArray sequence1("mMva-ke");
-    QByteArray sequence2("avn-*y-s");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment with chars in lower-case");
-    almnt.addRow("First row", sequence1, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second row", sequence2, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.toUpperCase();
-
-    CHECK_EQUAL("MMVA-KE-", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AVN-*Y-S", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-}
-
-/** Tests crop */
-IMPLEMENT_TEST(MAlignmentUnitTests, crop_validParams) {
-    QByteArray firstSequence("---ACT");
-    QByteArray secondSequence("A-CG-A");
-    QByteArray thirdSequence("---CGA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-
-    U2Region region(1, 4);
-    QSet<QString> rowNames;
-    rowNames << "First" << "Second";
-
-    almnt.crop(region, rowNames, os);
-    CHECK_NO_ERROR(os);
-
-    CHECK_EQUAL(2, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL(4, almnt.getLength(), "alignment length");
-    CHECK_EQUAL("--AC", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("-CG-", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-}
-
-/** Tests mid */
-IMPLEMENT_TEST(MAlignmentUnitTests, mid_validParams) {
-    QByteArray firstSequence("---ACT");
-    QByteArray secondSequence("A");
-    QByteArray thirdSequence("---CGA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-
-    MAlignment almntResult = almnt.mid(2, 3);
-    CHECK_EQUAL(3, almntResult.getNumRows(), "number of rows");
-    CHECK_EQUAL("-AC", MAlignmentTestUtils::getRowData(almntResult, 0), "first row");
-    CHECK_EQUAL("---", MAlignmentTestUtils::getRowData(almntResult, 1), "second row");
-    CHECK_EQUAL("-CG", MAlignmentTestUtils::getRowData(almntResult, 2), "third row");
-
-    CHECK_EQUAL("---ACT", MAlignmentTestUtils::getRowData(almnt, 0), "first row of the original");
-}
-
-/** Tests addRow */
-IMPLEMENT_TEST(MAlignmentUnitTests, addRow_appendRowFromBytes) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.addRow("Added row", "--AACT-GAG", os);
-    CHECK_NO_ERROR(os);
-
-    CHECK_EQUAL(3, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T---", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("AG-CT-TAA-", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL("--AACT-GAG", MAlignmentTestUtils::getRowData(almnt, 2), "third row");
-    CHECK_EQUAL("Added row", almnt.getRowNames().at(2), "added row name");
-    CHECK_EQUAL(10, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, addRow_rowFromBytesToIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.addRow("Added row", "--AACT-GAG", 1, os);
-    CHECK_NO_ERROR(os);
-
-    CHECK_EQUAL(3, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T---", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("--AACT-GAG", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL("AG-CT-TAA-", MAlignmentTestUtils::getRowData(almnt, 2), "third row");
-    CHECK_EQUAL("Added row", almnt.getRowNames().at(1), "added row name");
-    CHECK_EQUAL(10, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, addRow_zeroBound) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.addRow("Added row", "--AACT-GAG", -2, os);
-    CHECK_NO_ERROR(os);
-
-    CHECK_EQUAL(3, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("--AACT-GAG", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("---AG-T---", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL("AG-CT-TAA-", MAlignmentTestUtils::getRowData(almnt, 2), "third row");
-    CHECK_EQUAL("Added row", almnt.getRowNames().at(0), "added row name");
-    CHECK_EQUAL(10, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, addRow_rowsNumBound) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.addRow("Added row", "--AACT-GAG", 3, os);
-    CHECK_NO_ERROR(os);
-
-    CHECK_EQUAL(3, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T---", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("AG-CT-TAA-", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL("--AACT-GAG", MAlignmentTestUtils::getRowData(almnt, 2), "third row");
-    CHECK_EQUAL("Added row", almnt.getRowNames().at(2), "added row name");
-    CHECK_EQUAL(10, almnt.getLength(), "alignment length");
-}
-
-/** Tests removeRow */
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRow_validIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeRow(1, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(1, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRow_negativeIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeRow(-1, os);
-    CHECK_EQUAL("Failed to remove a row!", os.getError(), "opStatus");
-    CHECK_EQUAL(2, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("AG-CT-TAA", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRow_tooBigIndex) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeRow(2, os);
-    CHECK_EQUAL("Failed to remove a row!", os.getError(), "opStatus");
-    CHECK_EQUAL(2, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL("---AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL("AG-CT-TAA", MAlignmentTestUtils::getRowData(almnt, 1), "second row");
-    CHECK_EQUAL(9, almnt.getLength(), "alignment length");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, removeRow_emptyAlignment) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    U2OpStatusImpl os;
-    almnt.removeRow(0, os);
-    CHECK_NO_ERROR(os);
-    almnt.removeRow(0, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(0, almnt.getNumRows(), "number of rows");
-    CHECK_EQUAL(0, almnt.getLength(), "alignment length");
-}
-
-/** Tests moveRowsBlock */
-IMPLEMENT_TEST(MAlignmentUnitTests, moveRowsBlock_positiveDelta) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("GGGGGG");
-    QByteArray forthSequence("TTTTTT");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.moveRowsBlock(0, 2, 1);
-
-    CHECK_EQUAL("GGGGGG", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("TTTTTT", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, moveRowsBlock_negativeDelta) {
-    QByteArray firstSequence("AAAAAA");
-    QByteArray secondSequence("CCCCCC");
-    QByteArray thirdSequence("GGGGGG");
-    QByteArray forthSequence("TTTTTT");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second", secondSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Third", thirdSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Forth", forthSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.moveRowsBlock(3, 1, -1);
-
-    CHECK_EQUAL("AAAAAA", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("CCCCCC", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-    CHECK_EQUAL("TTTTTT", MAlignmentTestUtils::getRowData(almnt, 2), "row3");
-    CHECK_EQUAL("GGGGGG", MAlignmentTestUtils::getRowData(almnt, 3), "row4");
-}
-
-/** Tests replaceChars */
-IMPLEMENT_TEST(MAlignmentUnitTests, replaceChars_validParams) {
-    QByteArray firstSequence("AGT.C.T");
-    QByteArray secondSequence("A.CT.-AA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First row", firstSequence, os);
-    CHECK_NO_ERROR(os);
-    almnt.addRow("Second row", secondSequence, os);
-    CHECK_NO_ERROR(os);
-
-    almnt.replaceChars(1, '.', '-');
-    CHECK_EQUAL("AGT.C.T-", MAlignmentTestUtils::getRowData(almnt, 0), "first sequence");
-    CHECK_EQUAL("A-CT--AA", MAlignmentTestUtils::getRowData(almnt, 1), "second sequence");
-}
-
-/** Tests appendChars */
-IMPLEMENT_TEST(MAlignmentUnitTests, appendChars_validParams) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    const char* str = "-AC-GT-";
-    int length = 7;
-    almnt.appendChars(0, str, length);
-    CHECK_EQUAL("---AG-T---AC-GT-", MAlignmentTestUtils::getRowData(almnt, 0), "first row");
-    CHECK_EQUAL(4, almnt.getRow(0).getGapModel().size(), "number of gaps");
-    CHECK_EQUAL(16, almnt.getLength(), "alignment length");
-}
-
-/** Tests operPlusEqual */
-IMPLEMENT_TEST(MAlignmentUnitTests, operPlusEqual_validParams) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    MAlignment almnt2 = MAlignmentTestUtils::initTestAlignment();
-
-    almnt += almnt2;
-
-    CHECK_EQUAL("---AG-T-----AG-T--", MAlignmentTestUtils::getRowData(almnt, 0), "row1");
-    CHECK_EQUAL("AG-CT-TAAAG-CT-TAA", MAlignmentTestUtils::getRowData(almnt, 1), "row2");
-
-    CHECK_EQUAL(4, almnt.getRow(0).getGapModel().size(), "number of gaps");
-    CHECK_EQUAL(18, almnt.getLength(), "alignment length");
-}
-
-/** Tests operNotEqual */
-IMPLEMENT_TEST(MAlignmentUnitTests, operNotEqual_equal) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    MAlignment almnt2 = MAlignmentTestUtils::initTestAlignment();
-
-    bool res = (almnt != almnt2);
-    CHECK_FALSE(res, "Operator!= returned 'True' unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, operNotEqual_notEqual) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    MAlignment almnt2;
-
-    bool res = (almnt != almnt2);
-    CHECK_TRUE(res, "Operator!= returned 'False' unexpectedly!");
-}
-
-/** Tests hasEmptyGapModel */
-IMPLEMENT_TEST(MAlignmentUnitTests, hasEmptyGapModel_gaps) {
-    MAlignment almnt = MAlignmentTestUtils::initTestAlignment();
-    bool res = almnt.hasEmptyGapModel();
-
-    CHECK_FALSE(res, "Method hasEmptyGapModel() returned 'True' unexpectedly!");
-}
-
-IMPLEMENT_TEST(MAlignmentUnitTests, hasEmptyGapModel_noGaps) {
-    QByteArray firstSequence("AAAAAA");
-
-    U2OpStatusImpl os;
-    MAlignment almnt("Alignment name");
-    almnt.addRow("First", firstSequence, os);
-    CHECK_NO_ERROR(os);
-
-    bool res = almnt.hasEmptyGapModel();
-
-    CHECK_TRUE(res, "Method hasEmptyGapModel() returned 'False' unexpectedly!");
-}
-
-
-} // namespace
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.h b/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.h
deleted file mode 100644
index c7f2f1f..0000000
--- a/src/plugins/api_tests/src/core/datatype/msa/MAlignmentUnitTests.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-
-#ifndef _U2_MALIGNMENT_UNIT_TESTS_H_
-#define _U2_MALIGNMENT_UNIT_TESTS_H_
-
-#include <U2Core/MAlignment.h>
-
-#include <unittest.h>
-
-
-namespace U2 {
-
-class MAlignmentTestUtils {
-public:
-    static MAlignment initTestAlignment();
-    static QString getRowData(const MAlignment&, int rowNum);
-    static bool testAlignmentNotChanged(const MAlignment&);
-
-    static const int rowsNum;
-    static const int firstRowLength;
-    static const int secondRowLength;
-
-    static const QString alignmentName;
-};
-
-/** Clearing of a non-empty alignment */
-DECLARE_TEST(MAlignmentUnitTests, clear_notEmpty);
-
-/**
- * Alignment name:
- *   ^ ctor     - name, specified in the constructor
- *   ^ setName  - set a new name
- */
-DECLARE_TEST(MAlignmentUnitTests, name_ctor);
-DECLARE_TEST(MAlignmentUnitTests, name_setName);
-
-/**
- * Alignment alphabet:
- *   ^ ctor        - alphabet, specified in the constructor
- *   ^ setAlphabet - set a new alphabet
- */
-DECLARE_TEST(MAlignmentUnitTests, alphabet_ctor);
-DECLARE_TEST(MAlignmentUnitTests, alphabet_setAlphabet);
-
-/** Alignment info */
-DECLARE_TEST(MAlignmentUnitTests, info_setGet);
-
-/**
- * Alignment length:
- *   ^ isEmptyFalse   - method "isEmpty" returns "false" for a non-empty alignment
- *   ^ isEmptyTrue    - method "isEmpty" returns "true" for an empty alignment
- *   ^ get            - getting length of a non-empty alignment
- *   ^ getForEmpty    - getting length of an empty alignment
- *   ^ setLessLength  - set length less than the current one to a non-empty
- *                      alignment, the alignment is cropped
- */
-DECLARE_TEST(MAlignmentUnitTests, length_isEmptyFalse);
-DECLARE_TEST(MAlignmentUnitTests, length_isEmptyTrue);
-DECLARE_TEST(MAlignmentUnitTests, length_get);
-DECLARE_TEST(MAlignmentUnitTests, length_getForEmpty);
-DECLARE_TEST(MAlignmentUnitTests, length_setLessLength);
-
-/**
- * Number of rows:
- *   ^ notEmpty - number of rows in a non-empty alignment
- *   ^ empty    - zero rows in an empty alignment
- */
-DECLARE_TEST(MAlignmentUnitTests, numOfRows_notEmpty);
-DECLARE_TEST(MAlignmentUnitTests, numOfRows_empty);
-
-/**
- * Trimming an alignment:
- *   ^ biggerLength      - length bigger than a maximum row length was set, now it is trimmed
- *   ^ leadingGapColumns - leading gap columns are removed
- *   ^ nothingToTrim     - trim() returns "false"
- *   ^ rowWithoutGaps    - no errors when an alignment contains a row without gaps
- *   ^ empty             - trim() returns "false"
- *   ^ trailingGapInOne  - there are two rows and nothing to trim, one row has a trailing gap
- */
-DECLARE_TEST(MAlignmentUnitTests, trim_biggerLength);
-DECLARE_TEST(MAlignmentUnitTests, trim_leadingGapColumns);
-DECLARE_TEST(MAlignmentUnitTests, trim_nothingToTrim);
-DECLARE_TEST(MAlignmentUnitTests, trim_rowWithoutGaps);
-DECLARE_TEST(MAlignmentUnitTests, trim_empty);
-DECLARE_TEST(MAlignmentUnitTests, trim_trailingGapInOne);
-
-/**
- * Removing all gaps from an alignment:
- *   ^ withGaps    - gaps in a non-empty alignment are removed, simplify returns "true"
- *   ^ withoutGaps - no gaps to remove, simplify returns "false"
- *   ^ empty       - an empty alignment, simplify returns "false"
- */
-DECLARE_TEST(MAlignmentUnitTests, simplify_withGaps);
-DECLARE_TEST(MAlignmentUnitTests, simplify_withoutGaps);
-DECLARE_TEST(MAlignmentUnitTests, simplify_empty);
-
-/**
- * Verify methods "sortRowsByName" and "sortRowsBySimilarity":
- *   ^ byNameAsc         - sort rows by name in ascending order
- *   ^ byNameDesc        - sort rows by name in descending order
- *   ^ twoSimilar        - sort rows by similarity, two rows are similar
- *   ^ threeSimilar      - sort rows by similarity, three rows are similar
- *   ^ similarTwoRegions - sort rows by similarity, two groups of similar sequences
- */
-DECLARE_TEST(MAlignmentUnitTests, sortRows_byNameAsc);
-DECLARE_TEST(MAlignmentUnitTests, sortRows_byNameDesc);
-DECLARE_TEST(MAlignmentUnitTests, sortRows_twoSimilar);
-DECLARE_TEST(MAlignmentUnitTests, sortRows_threeSimilar);
-DECLARE_TEST(MAlignmentUnitTests, sortRows_similarTwoRegions);
-
-/**
- * Getting rows and rows' names:
- *   ^ oneRow              - verify "getRow" method on a non-empty alignment with a valid row index
- *   ^ severalRows         - verify "getRows" method on a non-empty alignment
- *   ^ rowNames            - verify "getRowNames" method on a non-empty alignment
- */
-DECLARE_TEST(MAlignmentUnitTests, getRows_oneRow);
-DECLARE_TEST(MAlignmentUnitTests, getRows_severalRows);
-DECLARE_TEST(MAlignmentUnitTests, getRows_rowNames);
-
-/**
- * Getting character at the specified position:
- *   ^ nonGapChar - there is a non-gap char in the specified row/position
- *   ^ gap        - there is a gap in the specified row/position
- */
-DECLARE_TEST(MAlignmentUnitTests, charAt_nonGapChar);
-DECLARE_TEST(MAlignmentUnitTests, charAt_gap);
-
-/**
- * Inserting gaps into an alignment:
- *   ^ validParams       - gaps are inserted into a row
- *   ^ toBeginningLength - a gap is inserted to a row beginning, the length of the alignment is properly recalculated
- *   ^ negativeRowIndex  - row index is negative => error
- *   ^ tooBigRowIndex    - row index is greater than the number of rows => error
- *   ^ negativePos       - position is negative => error
- *   ^ tooBigPos         - position is greater than the alignment length => error
- *   ^ negativeCount     - gaps count is negative => error
- */
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_validParams);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_toBeginningLength);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_negativeRowIndex);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_tooBigRowIndex);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_negativePos);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_tooBigPos);
-DECLARE_TEST(MAlignmentUnitTests, insertGaps_negativeCount);
-
-/**
- * Removing chars from an alignment:
- *   ^ validParamsAndTrimmed - chars are removed, the alignment is trimmed (gaps columns are removed, length is recalculated)
- *   ^ negativeRowIndex      - row index is negative => error
- *   ^ tooBigRowIndex        - row index is greater than the number of rows => error
- *   ^ negativePos           - position is negative => error
- *   ^ tooBigPos             - position is greater than the alignment length => error
- *   ^ negativeCount         - gaps count is negative => error
- */
-DECLARE_TEST(MAlignmentUnitTests, removeChars_validParams);
-DECLARE_TEST(MAlignmentUnitTests, removeChars_negativeRowIndex);
-DECLARE_TEST(MAlignmentUnitTests, removeChars_tooBigRowIndex);
-DECLARE_TEST(MAlignmentUnitTests, removeChars_negativePos);
-DECLARE_TEST(MAlignmentUnitTests, removeChars_tooBigPos);
-DECLARE_TEST(MAlignmentUnitTests, removeChars_negativeCount);
-
-/**
- * Removing a region:
- *   ^ validParams - remove a sub-alignment
- *   ^ removeEmpty - parameter removeEmptyRows is set to "True"
- *   ^ trimmed     - the alignment is trimmed after removing the region, the length has been modified
- */
-DECLARE_TEST(MAlignmentUnitTests, removeRegion_validParams);
-DECLARE_TEST(MAlignmentUnitTests, removeRegion_removeEmpty);
-DECLARE_TEST(MAlignmentUnitTests, removeRegion_trimmed);
-
-/** Renaming a row */
-DECLARE_TEST(MAlignmentUnitTests, renameRow_validParams);
-
-/**
- * Setting a new row content:
- *   ^ validParamsAndTrimmed - a row content is changed, the alignment is NOT trimmed
- *   ^ lengthIsIncreased     - a row content becomes longer than the initial alignment length
- */
-DECLARE_TEST(MAlignmentUnitTests, setRowContent_validParamsAndNotTrimmed);
-DECLARE_TEST(MAlignmentUnitTests, setRowContent_lengthIsIncreased);
-
-/** Converting all rows to upper case */
-DECLARE_TEST(MAlignmentUnitTests, upperCase_charsAndGaps);
-
-/** Cropping an alignment */
-DECLARE_TEST(MAlignmentUnitTests, crop_validParams);
-
-/** Getting mid of an alignmentVerify method "mid" */
-DECLARE_TEST(MAlignmentUnitTests, mid_validParams);
-
-/**
- * Adding a new row to the alignment:
- *   ^ appendRowFromBytes  - a new row is created from bytes and appended to the end of the alignment
- *   ^ rowFromBytesToIndex - a new row is created from bytes and inserted to the specified index
- *   ^ zeroBound           - incorrect row index "-2" => the new row is inserted to the beginning
- *   ^ rowsNumBound        - incorrect row index more than the number of rows => the row is appended
- */
-DECLARE_TEST(MAlignmentUnitTests, addRow_appendRowFromBytes);
-DECLARE_TEST(MAlignmentUnitTests, addRow_rowFromBytesToIndex);
-DECLARE_TEST(MAlignmentUnitTests, addRow_zeroBound);
-DECLARE_TEST(MAlignmentUnitTests, addRow_rowsNumBound);
-
-/**
- * Removing a row from the alignment:
- *   ^ validIndex     - row index is valid => the row is removed
- *   ^ negativeIndex  - row index is negative => error
- *   ^ tooBigIndex    - row index is bigger than the number of rows => error
- *   ^ emptyAlignment - all rows are removed from the alignment, the length is set to zero
- */
-DECLARE_TEST(MAlignmentUnitTests, removeRow_validIndex);
-DECLARE_TEST(MAlignmentUnitTests, removeRow_negativeIndex);
-DECLARE_TEST(MAlignmentUnitTests, removeRow_tooBigIndex);
-DECLARE_TEST(MAlignmentUnitTests, removeRow_emptyAlignment);
-
-/**
- * Moving rows block:
- *   ^ positiveDelta - rows are moved downwards
- *   ^ negativeDelta - rows are moved upwards
- */
-DECLARE_TEST(MAlignmentUnitTests, moveRowsBlock_positiveDelta);
-DECLARE_TEST(MAlignmentUnitTests, moveRowsBlock_negativeDelta);
-
-/** Replacing chars in an alignment row */
-DECLARE_TEST(MAlignmentUnitTests, replaceChars_validParams);
-
-/** Appending chars to an alignment row */
-DECLARE_TEST(MAlignmentUnitTests, appendChars_validParams);
-
-/** Verify operator+= */
-DECLARE_TEST(MAlignmentUnitTests, operPlusEqual_validParams);
-
-/**
- * Verify operator!= :
- *   ^ equal    - alignments are equal
- *   ^ notEqual - alignments are not equal (one of the alignments is empty)
- */
-DECLARE_TEST(MAlignmentUnitTests, operNotEqual_equal);
-DECLARE_TEST(MAlignmentUnitTests, operNotEqual_notEqual);
-
-/**
- * Verify if the alignment has gaps:
- *   ^ gaps   - there are gaps in the alignment
- *   ^ noGaps - there are NO gaps in the alignment
- */
-DECLARE_TEST(MAlignmentUnitTests, hasEmptyGapModel_gaps);
-DECLARE_TEST(MAlignmentUnitTests, hasEmptyGapModel_noGaps);
-
-
-} // namespace
-
-DECLARE_METATYPE(MAlignmentUnitTests, clear_notEmpty);
-DECLARE_METATYPE(MAlignmentUnitTests, name_ctor);
-DECLARE_METATYPE(MAlignmentUnitTests, name_setName);
-DECLARE_METATYPE(MAlignmentUnitTests, alphabet_ctor);
-DECLARE_METATYPE(MAlignmentUnitTests, alphabet_setAlphabet);
-DECLARE_METATYPE(MAlignmentUnitTests, info_setGet);
-DECLARE_METATYPE(MAlignmentUnitTests, length_isEmptyFalse);
-DECLARE_METATYPE(MAlignmentUnitTests, length_isEmptyTrue);
-DECLARE_METATYPE(MAlignmentUnitTests, length_get);
-DECLARE_METATYPE(MAlignmentUnitTests, length_getForEmpty);
-DECLARE_METATYPE(MAlignmentUnitTests, length_setLessLength);
-DECLARE_METATYPE(MAlignmentUnitTests, numOfRows_notEmpty);
-DECLARE_METATYPE(MAlignmentUnitTests, numOfRows_empty);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_biggerLength);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_leadingGapColumns);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_nothingToTrim);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_rowWithoutGaps);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_empty);
-DECLARE_METATYPE(MAlignmentUnitTests, trim_trailingGapInOne);
-DECLARE_METATYPE(MAlignmentUnitTests, simplify_withGaps);
-DECLARE_METATYPE(MAlignmentUnitTests, simplify_withoutGaps);
-DECLARE_METATYPE(MAlignmentUnitTests, simplify_empty);
-DECLARE_METATYPE(MAlignmentUnitTests, sortRows_byNameAsc);
-DECLARE_METATYPE(MAlignmentUnitTests, sortRows_byNameDesc);
-DECLARE_METATYPE(MAlignmentUnitTests, sortRows_twoSimilar);
-DECLARE_METATYPE(MAlignmentUnitTests, sortRows_threeSimilar);
-DECLARE_METATYPE(MAlignmentUnitTests, sortRows_similarTwoRegions);
-DECLARE_METATYPE(MAlignmentUnitTests, getRows_oneRow);
-DECLARE_METATYPE(MAlignmentUnitTests, getRows_severalRows);
-DECLARE_METATYPE(MAlignmentUnitTests, getRows_rowNames);
-DECLARE_METATYPE(MAlignmentUnitTests, charAt_nonGapChar);
-DECLARE_METATYPE(MAlignmentUnitTests, charAt_gap);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_toBeginningLength);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_negativeRowIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_tooBigRowIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_negativePos);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_tooBigPos);
-DECLARE_METATYPE(MAlignmentUnitTests, insertGaps_negativeCount);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_negativeRowIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_tooBigRowIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_negativePos);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_tooBigPos);
-DECLARE_METATYPE(MAlignmentUnitTests, removeChars_negativeCount);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRegion_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRegion_removeEmpty);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRegion_trimmed);
-DECLARE_METATYPE(MAlignmentUnitTests, renameRow_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, setRowContent_validParamsAndNotTrimmed);
-DECLARE_METATYPE(MAlignmentUnitTests, setRowContent_lengthIsIncreased);
-DECLARE_METATYPE(MAlignmentUnitTests, upperCase_charsAndGaps)
-DECLARE_METATYPE(MAlignmentUnitTests, crop_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, mid_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, addRow_appendRowFromBytes);
-DECLARE_METATYPE(MAlignmentUnitTests, addRow_rowFromBytesToIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, addRow_zeroBound);
-DECLARE_METATYPE(MAlignmentUnitTests, addRow_rowsNumBound);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRow_validIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRow_negativeIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRow_tooBigIndex);
-DECLARE_METATYPE(MAlignmentUnitTests, removeRow_emptyAlignment);
-DECLARE_METATYPE(MAlignmentUnitTests, moveRowsBlock_positiveDelta);
-DECLARE_METATYPE(MAlignmentUnitTests, moveRowsBlock_negativeDelta);
-DECLARE_METATYPE(MAlignmentUnitTests, replaceChars_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, appendChars_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, operPlusEqual_validParams);
-DECLARE_METATYPE(MAlignmentUnitTests, operNotEqual_equal);
-DECLARE_METATYPE(MAlignmentUnitTests, operNotEqual_notEqual);
-DECLARE_METATYPE(MAlignmentUnitTests, hasEmptyGapModel_gaps);
-DECLARE_METATYPE(MAlignmentUnitTests, hasEmptyGapModel_noGaps);
-
-
-#endif
-
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.cpp
new file mode 100644
index 0000000..568b5a1
--- /dev/null
+++ b/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.cpp
@@ -0,0 +1,1537 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaRowUnitTests.h"
+
+#include <U2Core/DNASequence.h>
+#include <U2Core/U2Msa.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+
+namespace U2 {
+
+const int MsaRowTestUtils::rowWithGapsLength = 7;
+const int MsaRowTestUtils::rowWithGapsInMiddleLength = 8;
+const int MsaRowTestUtils::rowWithoutGapsLength = 5;
+
+const QString MsaRowTestUtils::rowWithGapsName = "Row with gaps name";
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initTestRowWithGaps(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For row with gaps");
+    almnt->addRow(rowWithGapsName, "---AG-T");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // "---AG-T"
+}
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initTestRowWithGapsInMiddle(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For row with gaps in middle");
+    almnt->addRow("Test sequence", "GG-T--AT");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // "GG-T--AT"
+}
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initTestRowWithTrailingGaps(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For row with trailing gaps");
+    almnt->addRow("Row with trailing gaps", "CA-GT--T--");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // "CA-GT--T--"
+}
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initTestRowWithoutGaps(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For a row without gaps");
+    almnt->addRow("Row without gaps", "ACGTA");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // "ACGTA"
+}
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initEmptyRow(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For empty row");
+    almnt->addRow("Empty", "");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // ""
+}
+
+MultipleSequenceAlignmentRow MsaRowTestUtils::initTestRowForModification(MultipleSequenceAlignment& almnt) {
+    almnt->setName("For row for modifications");
+    almnt->addRow("Test sequence", "A---ACG--GTT-A-C---G");
+    return almnt->getMsaRow(0)->getExplicitCopy(); // "A---ACG--GTT-A-C---G"
+}
+
+QString MsaRowTestUtils::getRowData(const MultipleSequenceAlignmentRow &row) {
+    U2OpStatusImpl os;
+    QString result = row->toByteArray(os, row->getRowLength()).data();
+    SAFE_POINT_OP(os, QString());
+    return result;
+}
+
+
+/** Tests createRow */
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromBytes) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "--GG-A---T");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG-A---T", QString(row->getCore()), "core data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(2, row->getCoreStart(), "core start");
+    CHECK_EQUAL(10, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(8, row->getCoreLength(), "core length");
+    CHECK_EQUAL(10, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromBytesTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "--GG-A---T--");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG-A---T", QString(row->getCore()), "core data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(2, row->getCoreStart(), "core start");
+    CHECK_EQUAL(10, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(8, row->getCoreLength(), "core length");
+    CHECK_EQUAL(12, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromBytesGaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "----");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("----", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(0, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(0, row->getCoreLength(), "core length");
+    CHECK_EQUAL(4, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_oneTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "A-");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("A-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("A", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(1, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(1, row->getCoreLength(), "core length");
+    CHECK_EQUAL(2, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_twoTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "A--");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("A--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("A", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(1, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(1, row->getCoreLength(), "core length");
+    CHECK_EQUAL(3, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_oneMiddleGap) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "AC-GT");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("AC-GT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("AC-GT", QString(row->getCore()), "core data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(5, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(5, row->getCoreLength(), "core length");
+    CHECK_EQUAL(5, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_noGaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "ACGT");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("ACGT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("ACGT", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(4, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(4, row->getCoreLength(), "core length");
+    CHECK_EQUAL(4, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromSeq) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "GGAT");
+    QList<U2MsaGap> gaps;
+    U2MsaGap gapBeginning(0, 2);
+    U2MsaGap gapMiddle1(4, 1);
+    U2MsaGap gapMiddle2(6, 3);
+    gaps << gapBeginning << gapMiddle1 << gapMiddle2;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG-A---T", QString(row->getCore()), "core data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(2, row->getCoreStart(), "core start");
+    CHECK_EQUAL(10, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(8, row->getCoreLength(), "core length");
+    CHECK_EQUAL(10, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromSeqTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "GGAT");
+    QList<U2MsaGap> gaps;
+    U2MsaGap gapBeginning(0, 2);
+    U2MsaGap gapMiddle1(4, 1);
+    U2MsaGap gapMiddle2(6, 3);
+    U2MsaGap gapTrailing(10, 2);
+    gaps << gapBeginning << gapMiddle1 << gapMiddle2 << gapTrailing;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG-A---T", QString(row->getCore()), "core data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(2, row->getCoreStart(), "core start");
+    CHECK_EQUAL(10, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(8, row->getCoreLength(), "core length");
+    CHECK_EQUAL(12, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_fromSeqWithGaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "GG-AT");
+    QList<U2MsaGap> gaps;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_EQUAL("Failed to create a multiple alignment row", os.getError(), "opStatus");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_gapPositionTooBig) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "GGAT");
+    QList<U2MsaGap> gaps;
+    U2MsaGap gapBeginning(0, 2);
+    U2MsaGap gapMiddle1(4, 1);
+    U2MsaGap gapMiddle2(8, 3);
+    gaps << gapBeginning << gapMiddle1 << gapMiddle2;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_EQUAL("Failed to create a multiple alignment row", os.getError(), "opStatus");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_negativeGapPos) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "ACGT");
+    QList<U2MsaGap> gaps;
+    U2MsaGap invalidGap(-1, 2);
+    gaps << invalidGap;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_EQUAL("Failed to create a multiple alignment row", os.getError(), "opStatus");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, createRow_negativeGapOffset) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    DNASequence sequence("Test sequence", "ACGT");
+    QList<U2MsaGap> gaps;
+    U2MsaGap invalidGap(0, -1);
+    gaps << invalidGap;
+    U2OpStatusImpl os;
+    almnt->addRow("Row", sequence, gaps, os);
+    CHECK_EQUAL("Failed to create a multiple alignment row", os.getError(), "opStatus");
+}
+
+/** Tests rowName */
+IMPLEMENT_TEST(MsaRowUnitTests, rowName_rowFromBytes) {
+    QString rowName = "Test sequence";
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow(rowName, "AG-T");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL(rowName, row->getName(), "name of the row");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowName_rowFromSeq) {
+    QString rowName = "Test sequence";
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow(rowName, "AGT");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL(rowName, row->getName(), "name of the row");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowName_setName) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    QString rowName = "New row name";
+    row->setName(rowName);
+    CHECK_EQUAL(rowName, row->getName(), "name of the row");
+}
+
+/** Tests toByteArray */
+IMPLEMENT_TEST(MsaRowUnitTests, toByteArray_noGaps) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithoutGaps(almnt);
+    U2OpStatusImpl os;
+    QByteArray bytes = row->toByteArray(os, MsaRowTestUtils::rowWithoutGapsLength);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("ACGTA", QString(bytes), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, toByteArray_gapsInBeginningAndMiddle) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    QByteArray bytes = row->toByteArray(os, MsaRowTestUtils::rowWithGapsLength);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---AG-T", QString(bytes), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, toByteArray_incorrectLength) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    QByteArray bytes = row->toByteArray(os, MsaRowTestUtils::rowWithGapsLength - 1);
+    CHECK_EQUAL("Failed to get row data", os.getError(), "opStatus");
+    CHECK_EQUAL("", QString(bytes), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, toByteArray_greaterLength) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    QByteArray bytes = row->toByteArray(os, MsaRowTestUtils::rowWithGapsLength + 1);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---AG-T-", QString(bytes), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, toByteArray_trailing) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "--GG-A---T--");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    QByteArray bytes = row->toByteArray(os, 12);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("--GG-A---T--", QString(bytes), "row data");
+}
+
+/** Tests simplify */
+IMPLEMENT_TEST(MsaRowUnitTests, simplify_gaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "--GG-A---T--");
+    bool result = almnt->simplify();
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_TRUE(result, "simplify() must have returned 'true'!");
+    CHECK_EQUAL("GGAT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GGAT", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(4, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(4, row->getCoreLength(), "core length");
+    CHECK_EQUAL(4, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, simplify_nothingToRemove) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithoutGaps(almnt);
+    bool result = almnt->simplify();
+    CHECK_FALSE(result, "simplify() must have returned 'false'!");
+    CHECK_EQUAL("ACGTA", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+/** Tests append */
+IMPLEMENT_TEST(MsaRowUnitTests, append_noGapBetweenRows) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength(), anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---AG-TGG-T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL("GG-T--AT", MsaRowTestUtils::getRowData(anotherRow), "another row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, append_gapBetweenRows) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength() + 1, anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---AG-T-GG-T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(5, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, append_offsetInAnotherRow) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGaps(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength() + 2, anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-T--AT-----AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, append_trailingInFirst) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength() + 1, anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("CA-GT--T---GG-T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(5, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, append_trailingAndOffset) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGaps(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength(), anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("CA-GT--T-----AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, append_invalidLength) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    MultipleSequenceAlignment almnt2;
+    MultipleSequenceAlignmentRow anotherRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt2);
+    U2OpStatusImpl os;
+    almnt->appendRow(0, row->getRowLength() - 1, anotherRow, os);
+    row = almnt->getMsaRow(0);
+    CHECK_EQUAL("Failed to append one row to another", os.getError(), "opStatus");
+    CHECK_EQUAL("---AG-T", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+/** Tests setRowContent */
+IMPLEMENT_TEST(MsaRowUnitTests, setRowContent_empty) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->setRowContent(0, "");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(MsaRowTestUtils::rowWithGapsName, row->getName(), "row name");
+    CHECK_EQUAL("-------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(0, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(0, row->getCoreLength(), "core length");
+    CHECK_EQUAL(7, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, setRowContent_trailingGaps) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->setRowContent(0, "--GG-A---T--");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(MsaRowTestUtils::rowWithGapsName, row->getName(), "row name");
+    CHECK_EQUAL("--GG-A---T--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG-A---T", QString(row->getCore()), "core data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(2, row->getCoreStart(), "core start");
+    CHECK_EQUAL(10, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(8, row->getCoreLength(), "core length");
+    CHECK_EQUAL(12, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, setRowContent_offsetNoGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->setRowContent(0, "AC-GT", 1);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(MsaRowTestUtils::rowWithGapsName, row->getName(), "row name");
+    CHECK_EQUAL("-AC-GT-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("AC-GT", QString(row->getCore()), "core data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(1, row->getCoreStart(), "core start");
+    CHECK_EQUAL(6, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(5, row->getCoreLength(), "core length");
+    CHECK_EQUAL(7, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, setRowContent_offsetGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->setRowContent(0, "--GG", 1);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(MsaRowTestUtils::rowWithGapsName, row->getName(), "row name");
+    CHECK_EQUAL("---GG--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("GG", QString(row->getCore()), "core data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(3, row->getCoreStart(), "core start");
+    CHECK_EQUAL(5, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(2, row->getCoreLength(), "core length");
+    CHECK_EQUAL(7, row->getRowLength(), "row length");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, setRowContent_emptyAndOffset) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->setRowContent(0, "", 1);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(MsaRowTestUtils::rowWithGapsName, row->getName(), "row name");
+    CHECK_EQUAL("-------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL("", QString(row->getCore()), "core data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+    CHECK_EQUAL(0, row->getCoreStart(), "core start");
+    CHECK_EQUAL(0, row->getCoreEnd(), "core end");
+    CHECK_EQUAL(0, row->getCoreLength(), "core length");
+    CHECK_EQUAL(7, row->getRowLength(), "row length");
+}
+
+/** Tests insertGaps */
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_empty) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initEmptyRow(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 0, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("--", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toGapPosLeft) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 3, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG--T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+
+    almnt->insertGaps(0, 7, 2, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG--T----AT", MsaRowTestUtils::getRowData(row), "row data (second insertion)");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toGapPosRight) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 2, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG--T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+
+    almnt->insertGaps(0, 5, 2, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG--T----AT", MsaRowTestUtils::getRowData(row), "row data (second insertion)");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toGapPosInside) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 1, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("-----AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_insideChars) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 4, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---A--G-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toZeroPosNoGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 0, 3, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---GG-T--AT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toZeroPosGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 0, 3, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("------AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toLastPosNoGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 7, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-T--A--T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toLastPosGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 9, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("CA-GT--T---", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_toLastPosOneGap) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "A-");
+    almnt->insertGaps(0, 1, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_noGapsYet) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithoutGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 4, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("ACGT-A", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_onlyGaps) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "--");
+    almnt->insertGaps(0, 1, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("----", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_oneChar) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("One-char sequence", "A");
+    almnt->insertGaps(0, 0, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("--A", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_tooBigPosition) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 10, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_EQUAL("---AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "gaps number");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_negativePosition) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    row->insertGaps(-1, 1, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---AG-T", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, insertGaps_negativeNumOfChars) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 1, -1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_EQUAL("---AG-T", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+/** Tests removeRowData */
+IMPLEMENT_TEST(MsaRowUnitTests, remove_empty) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initEmptyRow(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 0, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideGap1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 2, 15, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---G---------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideGap2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 3, 15, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---G---------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_leftGapSide) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 7, 9, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---ACG---G---------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_rightGapSide) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 4, 11, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---C---G-----------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideSeq1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 5, 6, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---AT-A-C---G------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideSeq2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 6, 4, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---ACTT-A-C---G----", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_fromZeroPosGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 0, 4, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("G-T----", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_fromZeroPosChar) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 0, 17, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("--G-----------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_lastPosExactly) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 7, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-T--A-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_fromLastPos) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 7, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-T--A-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideOneGap1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 2, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A-ACG--GTT-A-C---G--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(5, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideOneGap2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 2, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A--ACG--GTT-A-C---G-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(5, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideOneGapLong) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "A------GT--C-T");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("A------GT--C-T", MsaRowTestUtils::getRowData(row), "row data");
+    almnt->removeChars(0, 2, 3, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---GT--C-T---", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideTrailingGap) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "AC-GT----");
+    almnt->removeChars(0, 5, 2, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("AC-GT----", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_insideCharsOne) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 5, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---AG--GTT-A-C---G-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(5, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_negativePosition) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, -1, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_EQUAL("A---ACG--GTT-A-C---G", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_negativeNumOfChars) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 1, -1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_EQUAL("A---ACG--GTT-A-C---G", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_gapsAtRowEnd1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 9, 12, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---ACG-------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_gapsAtRowEnd2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 3, 21, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A-------------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_onlyGapsAfterRemove) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 2, 9, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("-------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_emptyAfterRemove) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 0, 21, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("--------------------", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, remove_oneCharInGaps) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->removeChars(0, 13, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A---ACG--GTT--C---G-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+/** Tests charAt */
+IMPLEMENT_TEST(MsaRowUnitTests, charAt_allCharsNoOffset) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    char ch = row->charAt(-1);
+    CHECK_EQUAL('-', ch, "char -1");
+
+    ch = row->charAt(0);
+    CHECK_EQUAL('G', ch, "char 0");
+
+    ch = row->charAt(1);
+    CHECK_EQUAL('G', ch, "char 1");
+
+    ch = row->charAt(2);
+    CHECK_EQUAL('-', ch, "char 2");
+
+    ch = row->charAt(3);
+    CHECK_EQUAL('T', ch, "char 3");
+
+    ch = row->charAt(4);
+    CHECK_EQUAL('-', ch, "char 4");
+
+    ch = row->charAt(5);
+    CHECK_EQUAL('-', ch, "char 5");
+
+    ch = row->charAt(6);
+    CHECK_EQUAL('A', ch, "char 6");
+
+    ch = row->charAt(7);
+    CHECK_EQUAL('T', ch, "char 7");
+
+    ch = row->charAt(8);
+    CHECK_EQUAL('-', ch, "char 8");
+
+    ch = row->charAt(9);
+    CHECK_EQUAL('-', ch, "char 9");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, charAt_offsetAndTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "-AC-");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+
+    char ch = row->charAt(-1);
+    CHECK_EQUAL('-', ch, "char -1");
+
+    ch = row->charAt(0);
+    CHECK_EQUAL('-', ch, "char 0");
+
+    ch = row->charAt(1);
+    CHECK_EQUAL('A', ch, "char 1");
+
+    ch = row->charAt(2);
+    CHECK_EQUAL('C', ch, "char 2");
+
+    ch = row->charAt(3);
+    CHECK_EQUAL('-', ch, "char 3");
+
+    ch = row->charAt(4);
+    CHECK_EQUAL('-', ch, "char 4");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, charAt_onlyCharsInRow) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "ACG");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+
+    char ch = row->charAt(-1);
+    CHECK_EQUAL('-', ch, "char -1");
+
+    ch = row->charAt(0);
+    CHECK_EQUAL('A', ch, "char 0");
+
+    ch = row->charAt(1);
+    CHECK_EQUAL('C', ch, "char 1");
+
+    ch = row->charAt(2);
+    CHECK_EQUAL('G', ch, "char 2");
+
+    ch = row->charAt(3);
+    CHECK_EQUAL('-', ch, "char 3");
+}
+
+
+/** Tests rowEqual */
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_sameContent) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow firstRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    MultipleSequenceAlignmentRow secondRow = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
+
+    CHECK_TRUE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_FALSE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_noGaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("First", "ACT");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    almnt->addRow("Second", "ACT");
+    MultipleSequenceAlignmentRow secondRow = almnt->getMsaRow(1);
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
+
+    CHECK_TRUE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_FALSE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_trailingInFirst) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("First", "AC-GT-");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Second", "AC-GT");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
+
+    CHECK_TRUE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_FALSE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_trailingInSecond) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("First", "AC-GT");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Second", "AC-GT--");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
+
+    CHECK_TRUE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_FALSE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_trailingInBoth) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("First", "AC-GT---");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Second", "AC-GT--");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_TRUE(result, "The first and the second rows are NOT equal unexpectedly!");
+
+    CHECK_TRUE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_FALSE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_diffGapModelsGap) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "--GG-A---T");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(firstRow), "first row data");
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Test sequence", "--GG--A---T");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+    CHECK_EQUAL("--GG--A---T", MsaRowTestUtils::getRowData(secondRow), "second row data");
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
+
+    CHECK_FALSE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_TRUE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_diffGapModelsOffset) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "--GG-A---T");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(firstRow), "first row data");
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Test sequence", "--G-GA---T");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+    CHECK_EQUAL("--G-GA---T", MsaRowTestUtils::getRowData(secondRow), "second row data");
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
+
+    CHECK_FALSE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_TRUE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_diffNumOfGaps) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "--GG-A---T");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(firstRow), "first row data");
+    MultipleSequenceAlignment almnt2("Test alignment");
+    almnt2->addRow("Test sequence", "--GG-AT");
+    MultipleSequenceAlignmentRow secondRow = almnt2->getMsaRow(0);
+    CHECK_EQUAL("--GG-AT", MsaRowTestUtils::getRowData(secondRow), "second row data");
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
+
+    CHECK_FALSE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_TRUE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, rowsEqual_diffSequences) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "--GG-A---T");
+    MultipleSequenceAlignmentRow firstRow = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GG-A---T", MsaRowTestUtils::getRowData(firstRow), "first row data");
+    almnt->addRow("Test sequence", "--GG-C---T");
+    MultipleSequenceAlignmentRow secondRow = almnt->getMsaRow(1);
+    CHECK_EQUAL("--GG-C---T", MsaRowTestUtils::getRowData(secondRow), "second row data");
+
+    bool result = firstRow->isRowContentEqual(secondRow);
+    CHECK_FALSE(result, "The first and the second rows are EQUAL unexpectedly!");
+
+    CHECK_FALSE(*firstRow == *secondRow, "Incorrect 'operator=='!");
+    CHECK_TRUE(*firstRow != *secondRow, "Incorrect 'operator!='!");
+}
+
+/** Tests ungapped */
+IMPLEMENT_TEST(MsaRowUnitTests, ungapped_rowWithoutOffset) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    CHECK_EQUAL(5, row->getUngappedLength(), "ungapped length");
+    CHECK_EQUAL(-1, row->getUngappedPosition(-1), "pos -1");
+    CHECK_EQUAL(0,  row->getUngappedPosition(0),  "pos 0");
+    CHECK_EQUAL(1,  row->getUngappedPosition(1),  "pos 1");
+    CHECK_EQUAL(-1, row->getUngappedPosition(2),  "pos 2");
+    CHECK_EQUAL(2,  row->getUngappedPosition(3),  "pos 3");
+    CHECK_EQUAL(-1, row->getUngappedPosition(4),  "pos 4");
+    CHECK_EQUAL(-1, row->getUngappedPosition(5),  "pos 5");
+    CHECK_EQUAL(3,  row->getUngappedPosition(6),  "pos 6");
+    CHECK_EQUAL(4,  row->getUngappedPosition(7),  "pos 7");
+    CHECK_EQUAL(-1, row->getUngappedPosition(8),  "pos 8");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, ungapped_offsetTrailing) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test row", "---AG-T-");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL(3,  row->getUngappedLength(), "ungapped length");
+    CHECK_EQUAL(-1, row->getUngappedPosition(-1), "pos -1");
+    CHECK_EQUAL(-1, row->getUngappedPosition(0),  "pos 0");
+    CHECK_EQUAL(-1, row->getUngappedPosition(1),  "pos 1");
+    CHECK_EQUAL(-1, row->getUngappedPosition(2),  "pos 2");
+    CHECK_EQUAL(0,  row->getUngappedPosition(3),  "pos 3");
+    CHECK_EQUAL(1,  row->getUngappedPosition(4),  "pos 4");
+    CHECK_EQUAL(-1, row->getUngappedPosition(5),  "pos 5");
+    CHECK_EQUAL(2,  row->getUngappedPosition(6),  "pos 6");
+    CHECK_EQUAL(-1, row->getUngappedPosition(7),  "pos 7");
+    CHECK_EQUAL(-1, row->getUngappedPosition(8),  "pos 8");
+}
+
+/** Tests crop */
+IMPLEMENT_TEST(MsaRowUnitTests, crop_empty) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initEmptyRow(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(0, 1, os);
+    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MultipleSequenceAlignmentData::crop"),
+               QString("opStatus is %1").arg(os.getError()));
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideGap1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(2, 15, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--ACG--GTT-A-C-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideGap2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(3, 15, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("-ACG--GTT-A-C--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_leftGapSide) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(7, 9, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--GTT-A-C", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(3, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_rightGapSide) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(4, 11, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("ACG--GTT-A-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideSeq1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(5, 6, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("CG--GT", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideSeq2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(6, 4, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("G--G", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_fromZeroPosGap) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(0, 4, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("---A", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(1, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_fromZeroPosChar) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(0, 17, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("A---ACG--GTT-A-C-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(4, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_lastPosExactly) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(7, 1, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_fromLastPos) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(7, 2, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideOneGap1) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(2, 2, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideOneGap2) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(2, 1, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideOneGapLong) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Test sequence", "A------GT--C-T");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+
+    CHECK_EQUAL("A------GT--C-T", MsaRowTestUtils::getRowData(row), "row data");
+    almnt->crop(2, 3, os);
+    row = almnt->getMsaRow(0);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("---", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_insideCharsOne) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(5, 1, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("C", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_negativePosition) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(-1, 1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MultipleSequenceAlignmentData::crop"),
+               QString("opStatus is %1").arg(os.getError()));
+    CHECK_EQUAL("A---ACG--GTT-A-C---G", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_negativeNumOfChars) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(1, -1, os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MultipleSequenceAlignmentData::crop"),
+               QString("opStatus is %1").arg(os.getError()));
+    CHECK_EQUAL("A---ACG--GTT-A-C---G", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_trailing) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(2, 8, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("-GT--T--", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_trailingToGaps) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(0, 9, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("CA-GT--T-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_cropTrailing) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithTrailingGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(9, 1, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("-", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_oneCharInGaps) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(13, 1, os);
+    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("A", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(0, row->getGapModel().count(), "number of gaps");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, crop_posMoreThanLength) {
+    MultipleSequenceAlignment almnt;
+    MsaRowTestUtils::initTestRowWithGaps(almnt);
+    U2OpStatusImpl os;
+    almnt->crop(13, 1, os);
+    CHECK_TRUE(os.getError().contains("Incorrect region was passed to MultipleSequenceAlignmentData::crop"),
+               QString("opStatus is %1").arg(os.getError()));
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL(7, row->getRowLength(), "row length");
+    CHECK_EQUAL("---AG-T", MsaRowTestUtils::getRowData(row), "row data");
+    CHECK_EQUAL(2, row->getGapModel().count(), "number of gaps");
+}
+
+/** Tests mid */
+IMPLEMENT_TEST(MsaRowUnitTests, mid_general) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowForModification(almnt);
+    U2OpStatusImpl os;
+    MultipleSequenceAlignmentRow result = row->mid(4, 8, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("ACG--GTT------------", MsaRowTestUtils::getRowData(result), "row data");
+    CHECK_EQUAL(1, result->getGapModel().count(), "number of gaps");
+}
+
+/** Tests upperCase */
+IMPLEMENT_TEST(MsaRowUnitTests, upperCase_general) {
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Row name", "avn-*y-s");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    row->toUpperCase();
+    CHECK_EQUAL("AVN-*Y-S", MsaRowTestUtils::getRowData(row), "row data");
+
+    QString actualRowName = row->getName();
+    CHECK_EQUAL("Row name", actualRowName, "row name");
+}
+
+/** Tests replaceChars */
+IMPLEMENT_TEST(MsaRowUnitTests, replaceChars_charToChar) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    row->replaceChars('T', 'C', os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-C--AC", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, replaceChars_nothingToReplace) {
+    MultipleSequenceAlignment almnt;
+    MultipleSequenceAlignmentRow row = MsaRowTestUtils::initTestRowWithGapsInMiddle(almnt);
+    U2OpStatusImpl os;
+    row->replaceChars('~', '-', os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("GG-T--AT", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, replaceChars_tildasToGapsNoGaps) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Row name", "A~~CC~~~AG~AC~TG");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    row->replaceChars('~', '-', os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A--CC---AG-AC-TG", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, replaceChars_tildasToGapsWithGaps) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Row name", "A~-CC~-~AG~AC-TG");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    row->replaceChars('~', '-', os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A--CC---AG-AC-TG", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+IMPLEMENT_TEST(MsaRowUnitTests, replaceChars_trailingGaps) {
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Test alignment");
+    almnt->addRow("Row name", "A~~CC~~~AG~AC~TG~");
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    row->replaceChars('~', '-', os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL("A--CC---AG-AC-TG-", MsaRowTestUtils::getRowData(row), "row data");
+}
+
+
+} // namespace
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.h b/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.h
new file mode 100644
index 0000000..775faae
--- /dev/null
+++ b/src/plugins/api_tests/src/core/datatype/msa/MsaRowUnitTests.h
@@ -0,0 +1,462 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_ROW_UNIT_TESTS_H_
+#define _U2_MSA_ROW_UNIT_TESTS_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+
+#include <unittest.h>
+
+
+namespace U2 {
+
+class MsaRowTestUtils {
+public:
+    static MultipleSequenceAlignmentRow initTestRowWithGaps(MultipleSequenceAlignment& ma);
+    static MultipleSequenceAlignmentRow initTestRowWithGapsInMiddle(MultipleSequenceAlignment& ma);
+    static MultipleSequenceAlignmentRow initTestRowWithTrailingGaps(MultipleSequenceAlignment& ma);
+    static MultipleSequenceAlignmentRow initTestRowWithoutGaps(MultipleSequenceAlignment& ma);
+    static MultipleSequenceAlignmentRow initTestRowForModification(MultipleSequenceAlignment& ma);
+    static MultipleSequenceAlignmentRow initEmptyRow(MultipleSequenceAlignment& ma);
+    static QString getRowData(const MultipleSequenceAlignmentRow &row);
+
+    static const int rowWithGapsLength;
+    static const int rowWithGapsInMiddleLength;
+    static const int rowWithoutGapsLength;
+
+    static const QString rowWithGapsName;
+};
+
+/**
+ * The row is created by adding it to an alignment!
+ * It is created from a byte array / from a sequence.
+ * Row core (start, end, length and bytes) and row length is also verified:
+ *   ^ fromBytes          - create a row from a byte array, no trailing gaps
+ *   ^ fromBytesTrailing  - create a row from a byte array, there are trailing gaps
+ *   ^ fromBytesGaps      - create a row from a byte array, all items are gaps
+ *   ^ oneTrailing        - create a row from a byte array, there is only one trailing gap (gap length = 1)
+ *   ^ twoTrailing        - create a row from a byte array, there is only one trailing gap (gap length = 2)
+ *   ^ oneMiddleGap       - create a row from a byte array, there is only one middle gap
+ *   ^ noGaps             - create a row from a byte array, there is no gaps
+ *   ^ fromSeq            - create a row from a sequence (without gaps) and a gap model
+ *   ^ fromSeqTrailing    - create a row from a sequence (without gaps) and a gap model, there are trailing gaps
+ *   ^ fromSeqWithGaps    - create a row from a sequence with gaps (opStatus is set to error)
+ *   ^ gapPositionTooBig  - create a row from a sequence, a gap offset is bigger than the core length (opStatus is set to error)
+ *   ^ negativeGapPos     - create a row from a sequence, the gap model is incorrect (negative gap position)
+ *   ^ negativeGapOffset  - create a row from a sequence, the gap model is incorrect (negative gap offset)
+ */
+DECLARE_TEST(MsaRowUnitTests, createRow_fromBytes);
+DECLARE_TEST(MsaRowUnitTests, createRow_fromBytesTrailing);
+DECLARE_TEST(MsaRowUnitTests, createRow_fromBytesGaps);
+DECLARE_TEST(MsaRowUnitTests, createRow_oneTrailing);
+DECLARE_TEST(MsaRowUnitTests, createRow_twoTrailing);
+DECLARE_TEST(MsaRowUnitTests, createRow_oneMiddleGap);
+DECLARE_TEST(MsaRowUnitTests, createRow_noGaps);
+DECLARE_TEST(MsaRowUnitTests, createRow_fromSeq);
+DECLARE_TEST(MsaRowUnitTests, createRow_fromSeqTrailing);
+DECLARE_TEST(MsaRowUnitTests, createRow_fromSeqWithGaps);
+DECLARE_TEST(MsaRowUnitTests, createRow_gapPositionTooBig);
+DECLARE_TEST(MsaRowUnitTests, createRow_negativeGapPos);
+DECLARE_TEST(MsaRowUnitTests, createRow_negativeGapOffset);
+
+/**
+ * Verify getting/setting of a row name:
+ *   ^ rowFromBytes  - when a row has been created from a byte array
+ *   ^ rowFromSeq    - when a row has been created from a sequence
+ *   ^ setName       - a new name can be set
+ */
+DECLARE_TEST(MsaRowUnitTests, rowName_rowFromBytes);
+DECLARE_TEST(MsaRowUnitTests, rowName_rowFromSeq);
+DECLARE_TEST(MsaRowUnitTests, rowName_setName);
+
+/**
+ * Verify "toByteArray" method:
+ *   ^ noGaps                   - gap model is empty
+ *   ^ gapsInBeginningAndMiddle - gaps are in the beginning of the sequence and in the middle
+ *   ^ lengthTooShort           - the length is less than the core length (opStatus is set to error)
+ *   ^ greaterLength            - the length is greater than the core length (additional gaps are appended to the end)
+ *   ^ trailing                 - there are trailing gaps in the row
+ */
+DECLARE_TEST(MsaRowUnitTests, toByteArray_noGaps);
+DECLARE_TEST(MsaRowUnitTests, toByteArray_gapsInBeginningAndMiddle);
+DECLARE_TEST(MsaRowUnitTests, toByteArray_incorrectLength);
+DECLARE_TEST(MsaRowUnitTests, toByteArray_greaterLength);
+DECLARE_TEST(MsaRowUnitTests, toByteArray_trailing);
+
+/**
+ * Verify simplifying of a row:
+ *   ^ beginningAndMiddleGaps - removes all gaps, returns "true"
+ *   ^ nothingToRemove        - there are no gaps, returns "false"
+ */
+DECLARE_TEST(MsaRowUnitTests, simplify_gaps);
+DECLARE_TEST(MsaRowUnitTests, simplify_nothingToRemove);
+
+/**
+ * Verify appending of one row to another:
+ *   ^ noGapBetweenRows   - lengthBefore exactly equals to the row length
+ *   ^ gapBetweenRows     - lengthBefore is greater than the row length
+ *   ^ offsetInAnotherRow - gap at the beginning of the appended row
+ *   ^ trailingInFirst    - there are trailing gaps in the first row, lengthBefore is greater
+ *   ^ trailingAndOffset  - there are trailing gaps in the first row, offset in the appended one
+ *   ^ invalidLength      - length before appended row is too short => error
+ */
+DECLARE_TEST(MsaRowUnitTests, append_noGapBetweenRows);
+DECLARE_TEST(MsaRowUnitTests, append_gapBetweenRows);
+DECLARE_TEST(MsaRowUnitTests, append_offsetInAnotherRow);
+DECLARE_TEST(MsaRowUnitTests, append_trailingInFirst);
+DECLARE_TEST(MsaRowUnitTests, append_trailingAndOffset);
+DECLARE_TEST(MsaRowUnitTests, append_invalidLength);
+
+/**
+ * Setting row content:
+ *   ^ empty          - make the row empty
+ *   ^ trailingGaps   - bytes contain trailing gaps
+ *   ^ offsetNoGap    - offset is specified, the sequence has no gaps at the beginning
+ *   ^ offsetGap      - offset is specified, the sequence has gaps at the beginning
+ *   ^ emptyAndOffset - empty sequence + (offset > 0)
+ */
+DECLARE_TEST(MsaRowUnitTests, setRowContent_empty);
+DECLARE_TEST(MsaRowUnitTests, setRowContent_trailingGaps);
+DECLARE_TEST(MsaRowUnitTests, setRowContent_offsetNoGap);
+DECLARE_TEST(MsaRowUnitTests, setRowContent_offsetGap);
+DECLARE_TEST(MsaRowUnitTests, setRowContent_emptyAndOffset);
+
+/**
+ * Inserting number of gaps into a row:
+ *   ^ empty               - row is initially empty
+ *   ^ toGapPosLeft        - there is a gap at the left side of the position (and a non-gap char at the right)
+ *   ^ toGapPosRight       - there is a gap at the right side of the position
+ *   ^ toGapPosInside      - gaps are inserted between gaps
+ *   ^ insideChars         - gaps are inserted between chars
+ *   ^ toZeroPosNoGap      - insert gaps to the beginning, there is no gap there
+ *   ^ toZeroPosGap        - insert gaps to the beginning, there is already a gap offset
+ *   ^ toLastPosNoGap      - insert gaps before the last char in the row
+ *   ^ toLastPosGap        - insert a gap before the last gap in the row (between gaps)
+ *   ^ toLastPosOneGap     - insert a gap before the last and the only gap in the row
+ *   ^ noGapsYet           - insert to a row without gaps
+ *   ^ onlyGaps            - the row consists of gaps only
+ *   ^ oneChar             - the row consists of one char, insert offset to the beginning
+ *   ^ tooBigPosition      - position is greater than the row length => skip
+ *   ^ negativePosition    - negative position => skip
+ *   ^ negativeNumOfChars  - negative chars count => error
+ */
+DECLARE_TEST(MsaRowUnitTests, insertGaps_empty);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toGapPosLeft);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toGapPosRight);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toGapPosInside);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_insideChars);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toZeroPosNoGap);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toZeroPosGap);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toLastPosNoGap);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toLastPosGap);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_toLastPosOneGap);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_noGapsYet);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_onlyGaps);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_oneChar);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_tooBigPosition);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_negativePosition);
+DECLARE_TEST(MsaRowUnitTests, insertGaps_negativeNumOfChars);
+
+/**
+ * Removing chars from a row:
+ *   ^ empty               - row is initially empty => skip
+ *   ^ insideGap1          - start and end positions are inside gaps areas
+ *   ^ insideGap2          - the same as above, but shifted
+ *   ^ leftGapSide         - 'pos' is a gap, there is a char at ('pos' - 1)
+ *   ^ rightGapSide        - 'pos' is a char, there is a gap at ('pos' - 1)
+ *   ^ insideSeq1          - start and end positions are inside chars areas
+ *   ^ insideSeq2          - the same as above, but shifted
+ *   ^ fromZeroPosGap      - 'pos' = 0, there is a gap
+ *   ^ fromZeroPosChar     - 'pos' = 0, there is a char
+ *   ^ lastPosExactly      - 'pos' is the last char in the row, 'count' = 1, no gaps at the cut end
+ *   ^ fromLastPos         - 'pos' is the last char in the row, 'count' > 1, no gaps at the cut end
+ *   ^ insideOneGap1       - a region inside a long gap is removed (middle and end gaps in "---")
+ *   ^ insideOneGap2       - a gap inside a long gap is removed (middle in "---")
+ *   ^ insideOneGapLong    - several gaps inside longer gaps region
+ *   ^ insideTrailingGap   - remove gap chars inside a long trailing gap
+ *   ^ insideCharsOne      - one char inside non-gap chars region
+ *   ^ negativePosition    - negative 'pos' has been specified => error
+ *   ^ negativeNumOfChars  - negative 'count' has been specified => error
+ *   ^ gapsAtRowEnd1       - trailing gaps are not removed ('pos' + 'count' bigger than the row length is also verified)
+ *   ^ gapsAtRowEnd2       - the same as above, but with the only gap at the end
+ *   ^ onlyGapsAfterRemove - all non-gap chars are removed
+ *   ^ emptyAfterRemove    - all chars and gaps are removed
+ *   ^ oneCharInGaps       - remove a char with gaps at the left and right side
+ */
+DECLARE_TEST(MsaRowUnitTests, remove_empty);
+DECLARE_TEST(MsaRowUnitTests, remove_insideGap1);
+DECLARE_TEST(MsaRowUnitTests, remove_insideGap2);
+DECLARE_TEST(MsaRowUnitTests, remove_leftGapSide);
+DECLARE_TEST(MsaRowUnitTests, remove_rightGapSide);
+DECLARE_TEST(MsaRowUnitTests, remove_insideSeq1);
+DECLARE_TEST(MsaRowUnitTests, remove_insideSeq2);
+DECLARE_TEST(MsaRowUnitTests, remove_fromZeroPosGap);
+DECLARE_TEST(MsaRowUnitTests, remove_fromZeroPosChar);
+DECLARE_TEST(MsaRowUnitTests, remove_lastPosExactly);
+DECLARE_TEST(MsaRowUnitTests, remove_fromLastPos);
+DECLARE_TEST(MsaRowUnitTests, remove_insideOneGap1);
+DECLARE_TEST(MsaRowUnitTests, remove_insideOneGap2);
+DECLARE_TEST(MsaRowUnitTests, remove_insideOneGapLong);
+DECLARE_TEST(MsaRowUnitTests, remove_insideTrailingGap);
+DECLARE_TEST(MsaRowUnitTests, remove_insideCharsOne);
+DECLARE_TEST(MsaRowUnitTests, remove_toBiggerPosition);
+DECLARE_TEST(MsaRowUnitTests, remove_negativePosition);
+DECLARE_TEST(MsaRowUnitTests, remove_negativeNumOfChars);
+DECLARE_TEST(MsaRowUnitTests, remove_gapsAtRowEnd1);
+DECLARE_TEST(MsaRowUnitTests, remove_gapsAtRowEnd2);
+DECLARE_TEST(MsaRowUnitTests, remove_onlyGapsAfterRemove);
+DECLARE_TEST(MsaRowUnitTests, remove_emptyAfterRemove);
+DECLARE_TEST(MsaRowUnitTests, remove_oneCharInGaps);
+
+/**
+ * Getting a char at the specified position:
+ *   ^ allCharsNoOffset  - verify all indexes of a row without gap offset in the beginning
+ *   ^ offsetAndTrailing - verify gaps at the beginning and end of a row
+ *   ^ onlyCharsInRow    - there are no gaps in the row
+ */
+DECLARE_TEST(MsaRowUnitTests, charAt_allCharsNoOffset);
+DECLARE_TEST(MsaRowUnitTests, charAt_offsetAndTrailing);
+DECLARE_TEST(MsaRowUnitTests, charAt_onlyCharsInRow);
+
+/**
+ * Checking if rows are equal (method "isRowContentEqual", "operator==", "operator!="):
+ *   ^ sameContent         - rows contents are equal
+ *   ^ noGaps              - rows contents are equal, there are no gaps in the rows
+ *   ^ trailingInFirst     - rows contents are equal except there is a trailing gap in the first row
+ *   ^ trailingInSecond    - rows contents are equal except there is a trailing gap in the second row
+ *   ^ trailingInBoth      - rows contents are equal except trailing gaps, i.e. both rows have trailing gaps and sizes of the gaps are different
+ *   ^ diffGapModelsGap    - gaps models are different (lengths of gaps are different)
+ *   ^ diffGapModelsOffset - gaps models are different (offsets of gaps are different)
+ *   ^ diffNumOfGaps       - gaps models are different (number of gaps differs)
+ *   ^ diffSequences       - sequences differ
+ */
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_sameContent);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_noGaps);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_trailingInFirst);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_trailingInSecond);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_trailingInBoth);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_diffGapModelsGap);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_diffGapModelsOffset);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_diffNumOfGaps);
+DECLARE_TEST(MsaRowUnitTests, rowsEqual_diffSequences);
+
+/**
+ * Verify ungapped sequence length and getting of an ungapped position:
+ *   ^ rowWithoutOffset  - verify the length and position for a row without gaps at the beginning
+ *   ^ offsetTrailing    - verify the length and position for a row with gaps at the beginning
+ */
+DECLARE_TEST(MsaRowUnitTests, ungapped_rowWithoutOffset);
+DECLARE_TEST(MsaRowUnitTests, ungapped_offsetTrailing);
+
+/**
+ * Cropping a row:
+ *   ^ empty               - row is initially empty => skip
+ *   ^ insideGap1          - start and end positions are inside gaps areas
+ *   ^ insideGap2          - the same as above, but shifted
+ *   ^ leftGapSide         - 'pos' is a gap, there is a char at ('pos' - 1)
+ *   ^ rightGapSide        - 'pos' is a char, there is a gap at ('pos' - 1)
+ *   ^ insideSeq1          - start and end positions are inside chars areas
+ *   ^ insideSeq2          - the same as above, but shifted
+ *   ^ fromZeroPosGap      - 'pos' = 0, there is a gap
+ *   ^ fromZeroPosChar     - 'pos' = 0, there is a char
+ *   ^ lastPosExactly      - 'pos' is the last char in the row, 'count' = 1, no gaps at the cut end
+ *   ^ fromLastPos         - 'pos' is the last char in the row, 'count' > 1, no gaps at the cut end
+ *   ^ insideOneGap1       - a region inside a long gap is removed (middle and end gaps in "---")
+ *   ^ insideOneGap2       - a gap inside a long gap (middle in "---")
+ *   ^ insideOneGapLong    - several gaps inside longer gaps region
+ *   ^ insideCharsOne      - one char inside non-gap chars region
+ *   ^ negativePosition    - negative 'pos' has been specified => error
+ *   ^ negativeNumOfChars  - negative 'count' has been specified => error
+ *   ^ trailing            - there are trailing gaps in the row
+ *   ^ trailingToGaps      - there are trailing gaps in the row, the row is cropped to gaps only
+ *   ^ cropTrailing        - trailing gaps are cropped
+ *   ^ oneCharInGaps       - remove a char with gaps at the left and right side
+ *   ^ posMoreThanLength   - the specified position is greater than the row length => make row empty
+ */
+DECLARE_TEST(MsaRowUnitTests, crop_empty);
+DECLARE_TEST(MsaRowUnitTests, crop_insideGap1);
+DECLARE_TEST(MsaRowUnitTests, crop_insideGap2);
+DECLARE_TEST(MsaRowUnitTests, crop_leftGapSide);
+DECLARE_TEST(MsaRowUnitTests, crop_rightGapSide);
+DECLARE_TEST(MsaRowUnitTests, crop_insideSeq1);
+DECLARE_TEST(MsaRowUnitTests, crop_insideSeq2);
+DECLARE_TEST(MsaRowUnitTests, crop_fromZeroPosGap);
+DECLARE_TEST(MsaRowUnitTests, crop_fromZeroPosChar);
+DECLARE_TEST(MsaRowUnitTests, crop_lastPosExactly);
+DECLARE_TEST(MsaRowUnitTests, crop_fromLastPos);
+DECLARE_TEST(MsaRowUnitTests, crop_insideOneGap1);
+DECLARE_TEST(MsaRowUnitTests, crop_insideOneGap2);
+DECLARE_TEST(MsaRowUnitTests, crop_insideOneGapLong);
+DECLARE_TEST(MsaRowUnitTests, crop_insideCharsOne);
+DECLARE_TEST(MsaRowUnitTests, crop_negativePosition);
+DECLARE_TEST(MsaRowUnitTests, crop_negativeNumOfChars);
+DECLARE_TEST(MsaRowUnitTests, crop_trailing);
+DECLARE_TEST(MsaRowUnitTests, crop_trailingToGaps);
+DECLARE_TEST(MsaRowUnitTests, crop_cropTrailing);
+DECLARE_TEST(MsaRowUnitTests, crop_oneCharInGaps);
+DECLARE_TEST(MsaRowUnitTests, crop_posMoreThanLength);
+
+/**
+ * Getting mid of a row - only one case is verified as
+ * mid uses "crop" method.
+ */
+DECLARE_TEST(MsaRowUnitTests, mid_general);
+
+/** Converting to upper case. It is also verified that the name of the row is not changed. */
+DECLARE_TEST(MsaRowUnitTests, upperCase_general);
+
+/**
+ * Replacing chars in a row:
+ *   ^ charToChar           - all 'A' in a row are replaced by 'G'.
+ *   ^ nothingToReplace     - no 'origChar' in a row to replace by a gap.
+ *   ^ tildasToGapsNoGaps   - all 'origChar' ('~') are replaced by gaps.
+ *   ^ tildasToGapsWithGaps - the row contains both gaps and 'origChar' ('~'), replaced by gaps.
+                              Shifted gaps offset and merging of gaps is also verified.
+ *   ^ trailingGaps         - trailing gaps are not removed.
+ */
+DECLARE_TEST(MsaRowUnitTests, replaceChars_charToChar);
+DECLARE_TEST(MsaRowUnitTests, replaceChars_nothingToReplace);
+DECLARE_TEST(MsaRowUnitTests, replaceChars_tildasToGapsNoGaps);
+DECLARE_TEST(MsaRowUnitTests, replaceChars_tildasToGapsWithGaps);
+DECLARE_TEST(MsaRowUnitTests, replaceChars_trailingGaps);
+
+
+} // namespace
+
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromBytes)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromBytesTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromBytesGaps)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_oneTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_twoTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_oneMiddleGap)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_noGaps)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromSeq)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromSeqTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_fromSeqWithGaps)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_gapPositionTooBig)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_negativeGapPos)
+DECLARE_METATYPE(MsaRowUnitTests, createRow_negativeGapOffset)
+DECLARE_METATYPE(MsaRowUnitTests, rowName_rowFromBytes)
+DECLARE_METATYPE(MsaRowUnitTests, rowName_rowFromSeq)
+DECLARE_METATYPE(MsaRowUnitTests, rowName_setName)
+DECLARE_METATYPE(MsaRowUnitTests, toByteArray_noGaps)
+DECLARE_METATYPE(MsaRowUnitTests, toByteArray_gapsInBeginningAndMiddle)
+DECLARE_METATYPE(MsaRowUnitTests, toByteArray_incorrectLength)
+DECLARE_METATYPE(MsaRowUnitTests, toByteArray_greaterLength)
+DECLARE_METATYPE(MsaRowUnitTests, toByteArray_trailing)
+DECLARE_METATYPE(MsaRowUnitTests, simplify_gaps)
+DECLARE_METATYPE(MsaRowUnitTests, simplify_nothingToRemove)
+DECLARE_METATYPE(MsaRowUnitTests, append_noGapBetweenRows)
+DECLARE_METATYPE(MsaRowUnitTests, append_gapBetweenRows)
+DECLARE_METATYPE(MsaRowUnitTests, append_offsetInAnotherRow)
+DECLARE_METATYPE(MsaRowUnitTests, append_trailingInFirst)
+DECLARE_METATYPE(MsaRowUnitTests, append_trailingAndOffset)
+DECLARE_METATYPE(MsaRowUnitTests, append_invalidLength)
+DECLARE_METATYPE(MsaRowUnitTests, setRowContent_empty)
+DECLARE_METATYPE(MsaRowUnitTests, setRowContent_trailingGaps)
+DECLARE_METATYPE(MsaRowUnitTests, setRowContent_offsetNoGap)
+DECLARE_METATYPE(MsaRowUnitTests, setRowContent_offsetGap)
+DECLARE_METATYPE(MsaRowUnitTests, setRowContent_emptyAndOffset)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_empty)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toGapPosLeft)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toGapPosRight)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toGapPosInside)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_insideChars)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toZeroPosNoGap)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toZeroPosGap)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toLastPosNoGap)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toLastPosGap)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_toLastPosOneGap)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_noGapsYet)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_onlyGaps)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_oneChar)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_tooBigPosition)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_negativePosition)
+DECLARE_METATYPE(MsaRowUnitTests, insertGaps_negativeNumOfChars)
+DECLARE_METATYPE(MsaRowUnitTests, remove_empty)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideGap1)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideGap2)
+DECLARE_METATYPE(MsaRowUnitTests, remove_leftGapSide)
+DECLARE_METATYPE(MsaRowUnitTests, remove_rightGapSide)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideSeq1)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideSeq2)
+DECLARE_METATYPE(MsaRowUnitTests, remove_fromZeroPosGap)
+DECLARE_METATYPE(MsaRowUnitTests, remove_fromZeroPosChar)
+DECLARE_METATYPE(MsaRowUnitTests, remove_lastPosExactly)
+DECLARE_METATYPE(MsaRowUnitTests, remove_fromLastPos)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideOneGap1)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideOneGap2)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideOneGapLong)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideTrailingGap)
+DECLARE_METATYPE(MsaRowUnitTests, remove_insideCharsOne)
+DECLARE_METATYPE(MsaRowUnitTests, remove_negativePosition)
+DECLARE_METATYPE(MsaRowUnitTests, remove_negativeNumOfChars)
+DECLARE_METATYPE(MsaRowUnitTests, remove_gapsAtRowEnd1)
+DECLARE_METATYPE(MsaRowUnitTests, remove_gapsAtRowEnd2)
+DECLARE_METATYPE(MsaRowUnitTests, remove_onlyGapsAfterRemove)
+DECLARE_METATYPE(MsaRowUnitTests, remove_emptyAfterRemove)
+DECLARE_METATYPE(MsaRowUnitTests, remove_oneCharInGaps)
+DECLARE_METATYPE(MsaRowUnitTests, charAt_allCharsNoOffset)
+DECLARE_METATYPE(MsaRowUnitTests, charAt_offsetAndTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, charAt_onlyCharsInRow)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_sameContent)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_noGaps)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_trailingInFirst)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_trailingInSecond)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_trailingInBoth)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_diffGapModelsGap)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_diffGapModelsOffset)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_diffNumOfGaps)
+DECLARE_METATYPE(MsaRowUnitTests, rowsEqual_diffSequences)
+DECLARE_METATYPE(MsaRowUnitTests, ungapped_rowWithoutOffset)
+DECLARE_METATYPE(MsaRowUnitTests, ungapped_offsetTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, crop_empty)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideGap1)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideGap2)
+DECLARE_METATYPE(MsaRowUnitTests, crop_leftGapSide)
+DECLARE_METATYPE(MsaRowUnitTests, crop_rightGapSide)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideSeq1)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideSeq2)
+DECLARE_METATYPE(MsaRowUnitTests, crop_fromZeroPosGap)
+DECLARE_METATYPE(MsaRowUnitTests, crop_fromZeroPosChar)
+DECLARE_METATYPE(MsaRowUnitTests, crop_lastPosExactly)
+DECLARE_METATYPE(MsaRowUnitTests, crop_fromLastPos)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideOneGap1)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideOneGap2)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideOneGapLong)
+DECLARE_METATYPE(MsaRowUnitTests, crop_insideCharsOne)
+DECLARE_METATYPE(MsaRowUnitTests, crop_negativePosition)
+DECLARE_METATYPE(MsaRowUnitTests, crop_negativeNumOfChars)
+DECLARE_METATYPE(MsaRowUnitTests, crop_trailing)
+DECLARE_METATYPE(MsaRowUnitTests, crop_trailingToGaps)
+DECLARE_METATYPE(MsaRowUnitTests, crop_cropTrailing)
+DECLARE_METATYPE(MsaRowUnitTests, crop_oneCharInGaps)
+DECLARE_METATYPE(MsaRowUnitTests, crop_posMoreThanLength)
+DECLARE_METATYPE(MsaRowUnitTests, mid_general)
+DECLARE_METATYPE(MsaRowUnitTests, upperCase_general)
+DECLARE_METATYPE(MsaRowUnitTests, replaceChars_charToChar)
+DECLARE_METATYPE(MsaRowUnitTests, replaceChars_nothingToReplace)
+DECLARE_METATYPE(MsaRowUnitTests, replaceChars_tildasToGapsNoGaps)
+DECLARE_METATYPE(MsaRowUnitTests, replaceChars_tildasToGapsWithGaps)
+DECLARE_METATYPE(MsaRowUnitTests, replaceChars_trailingGaps)
+
+#endif
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.cpp
new file mode 100644
index 0000000..f920c8d
--- /dev/null
+++ b/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.cpp
@@ -0,0 +1,919 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaUnitTests.h"
+#include "MsaRowUnitTests.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequence.h>
+#include <U2Core/U2Msa.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <QSet>
+
+
+namespace U2 {
+
+const int MsaTestUtils::rowsNum = 2;
+const int MsaTestUtils::firstRowLength = 7;
+const int MsaTestUtils::secondRowLength = 9;
+
+const QString MsaTestUtils::alignmentName = "Test alignment name";
+
+
+MultipleSequenceAlignment MsaTestUtils::initTestAlignment() {
+    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
+    const DNAAlphabet* alphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
+
+    QByteArray firstSequence("---AG-T");
+    QByteArray secondSequence("AG-CT-TAA");
+
+    MultipleSequenceAlignment almnt(alignmentName, alphabet);
+
+    almnt->addRow("First row", firstSequence);
+    almnt->addRow("Second row", secondSequence);
+
+    return almnt;
+}
+
+QString MsaTestUtils::getRowData(const MultipleSequenceAlignment& almnt, int rowNum) {
+    if (rowNum < 0 || rowNum > almnt->getNumRows()) {
+        return "";
+    }
+
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(rowNum);
+
+    return MsaRowTestUtils::getRowData(row);
+}
+
+bool MsaTestUtils::testAlignmentNotChanged(const MultipleSequenceAlignment& almnt) {
+    if (9 != almnt->getLength()) {
+        return false;
+    }
+
+    if ("---AG-T--" != MsaTestUtils::getRowData(almnt, 0)) {
+        return false;
+    }
+
+    if ("AG-CT-TAA" != MsaTestUtils::getRowData(almnt, 1)) {
+        return false;
+    }
+
+    return true;
+}
+
+
+/** Tests clear */
+IMPLEMENT_TEST(MsaUnitTests, clear_notEmpty) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->clear();
+    QList<MultipleSequenceAlignmentRow> rows = almnt->getMsaRows();
+    CHECK_EQUAL(0, rows.count(), "number of rows");
+}
+
+/** Tests name */
+IMPLEMENT_TEST(MsaUnitTests, name_ctor) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    CHECK_EQUAL(MsaTestUtils::alignmentName, almnt->getName(), "alignment name");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, name_setName) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    QString newName = "Another name";
+    almnt->setName(newName);
+    CHECK_EQUAL(newName, almnt->getName(), "alignment name");
+}
+
+/** Tests alphabet */
+IMPLEMENT_TEST(MsaUnitTests, alphabet_ctor) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    if (NULL == almnt->getAlphabet()) {
+        SetError("NULL alphabet");
+    }
+    CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), almnt->getAlphabet()->getId(), "alphabet ID");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, alphabet_setAlphabet) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+
+    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
+    const DNAAlphabet* newAlphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
+    almnt->setAlphabet(newAlphabet);
+
+    if (NULL == almnt->getAlphabet() || NULL == newAlphabet) {
+        SetError("NULL alphabet");
+    }
+    CHECK_EQUAL(newAlphabet->getId(), almnt->getAlphabet()->getId(), "new alignment ID");
+}
+
+/** Tests info */
+IMPLEMENT_TEST(MsaUnitTests, info_setGet) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    QVariantMap info;
+    QString infoElementName = "Test element name";
+    QString infoElementValue = "Test element value";
+    info.insert(infoElementName, infoElementValue);
+    almnt->setInfo(info);
+    QVariantMap actualInfo = almnt->getInfo();
+    QString actualValue = actualInfo.value(infoElementName).value<QString>();
+    CHECK_EQUAL(infoElementValue, actualValue, "info element value");
+}
+
+/** Tests length */
+IMPLEMENT_TEST(MsaUnitTests, length_isEmptyFalse) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    CHECK_FALSE(almnt->isEmpty(), "Method isEmpty() returned 'true' unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, length_isEmptyTrue) {
+    MultipleSequenceAlignment almnt;
+    CHECK_TRUE(almnt->isEmpty(), "Method isEmpty() returned 'false' unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, length_get) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    int expectedLength = 9; // the length of the longest row
+    CHECK_EQUAL(expectedLength, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, length_getForEmpty) {
+    MultipleSequenceAlignment almnt;
+    CHECK_EQUAL(0, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, length_setLessLength) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    int newLength = 5;
+    almnt->setLength(newLength);
+    CHECK_EQUAL(newLength, almnt->getLength(), "alignment length");
+
+    CHECK_EQUAL("---AG", MsaTestUtils::getRowData(almnt, 0), "first row data");
+    CHECK_EQUAL("AG-CT", MsaTestUtils::getRowData(almnt, 1), "second row data");
+}
+
+/** Tests numOfRows */
+IMPLEMENT_TEST(MsaUnitTests, numOfRows_notEmpty) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    CHECK_EQUAL(MsaTestUtils::rowsNum, almnt->getNumRows(), "number of rows");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, numOfRows_empty) {
+    MultipleSequenceAlignment almnt;
+    CHECK_EQUAL(0, almnt->getNumRows(), "number of rows");
+}
+
+/** Tests trim */
+IMPLEMENT_TEST(MsaUnitTests, trim_biggerLength) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    int newLength = 100;
+    almnt->setLength(newLength);
+    bool result = almnt->trim();
+    CHECK_TRUE(result, "Method trim() returned 'false' unexpectedly");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("AG-CT-TAA", MsaTestUtils::getRowData(almnt, 1), "row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, trim_leadingGapColumns) {
+    QByteArray firstSequence("---AG-T");
+    QByteArray secondSequence("--AG-CT-TA");
+
+    MultipleSequenceAlignment almnt("Alignment with leading gap columns", NULL);
+    almnt->addRow("First row", firstSequence);
+    almnt->addRow("Second row", secondSequence);
+
+    bool result = almnt->trim();
+
+    CHECK_TRUE(result, "Method trim() returned 'false' unexpectedly");
+    CHECK_EQUAL(8, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("-AG-T---", MsaTestUtils::getRowData(almnt, 0), "first row data");
+    CHECK_EQUAL("AG-CT-TA", MsaTestUtils::getRowData(almnt, 1), "second row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, trim_nothingToTrim) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    bool result = almnt->trim();
+    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("AG-CT-TAA", MsaTestUtils::getRowData(almnt, 1), "row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, trim_rowWithoutGaps) {
+    QByteArray seq("ACGTAGTCGATC");
+
+    MultipleSequenceAlignment almnt("Alignment", NULL);
+    almnt->addRow("Row without gaps", seq);
+
+    bool result = almnt->trim();
+
+    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly");
+    CHECK_EQUAL(12, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("ACGTAGTCGATC", MsaTestUtils::getRowData(almnt, 0), "row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, trim_empty) {
+    MultipleSequenceAlignment almnt;
+    bool result = almnt->trim();
+    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, trim_trailingGapInOne) {
+    QByteArray firstSequence("ACGT");
+    QByteArray secondSequence("CAC-");
+
+    MultipleSequenceAlignment almnt("Alignment", NULL);
+    almnt->addRow("First row", firstSequence);
+    almnt->addRow("Second row", secondSequence);
+
+    bool result = almnt->trim();
+
+    CHECK_FALSE(result, "Method trim() returned 'true' unexpectedly");
+    CHECK_EQUAL(4, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("ACGT", MsaTestUtils::getRowData(almnt, 0), "first row data");
+    CHECK_EQUAL("CAC-", MsaTestUtils::getRowData(almnt, 1), "second row data");
+    CHECK_EQUAL(0, almnt->getMsaRow(1)->getGapModel().size(), "number of gaps in the second row");
+}
+
+/** Tests simplify */
+IMPLEMENT_TEST(MsaUnitTests, simplify_withGaps) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    bool result = almnt->simplify();
+    CHECK_TRUE(result, "Method simplify() returned 'false' unexpectedly");
+    CHECK_EQUAL(7, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("AGT----", MsaTestUtils::getRowData(almnt, 0), "first row data");
+    CHECK_EQUAL("AGCTTAA", MsaTestUtils::getRowData(almnt, 1), "second row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, simplify_withoutGaps) {
+    QByteArray seq("ACGTAGTCGATC");
+
+    MultipleSequenceAlignment almnt("Alignment", NULL);
+    almnt->addRow("Row without gaps", seq);
+
+    bool result = almnt->simplify();
+
+    CHECK_FALSE(result, "Method simplify() returned 'true' unexpectedly");
+    CHECK_EQUAL(12, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("ACGTAGTCGATC", MsaTestUtils::getRowData(almnt, 0), "row data");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, simplify_empty) {
+    MultipleSequenceAlignment almnt;
+    bool result = almnt->simplify();
+    CHECK_FALSE(result, "Method simplify() returned 'true' unexpectedly");
+}
+
+/** Tests sortRows */
+IMPLEMENT_TEST(MsaUnitTests, sortRows_byNameAsc) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("TTTTTT");
+
+    MultipleSequenceAlignment almnt("Alignment name", NULL);
+    almnt->addRow("NameBA", firstSequence);
+    almnt->addRow("NameAB", secondSequence);
+    almnt->addRow("NameAA", thirdSequence);
+
+    almnt->sortRowsByName();
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(3, rowNames.count(), "number of rows");
+    CHECK_EQUAL("NameAA", rowNames[0], "order");
+    CHECK_EQUAL("NameAB", rowNames[1], "order");
+    CHECK_EQUAL("NameBA", rowNames[2], "order");
+    CHECK_EQUAL("TTTTTT", MsaTestUtils::getRowData(almnt, 0), "first row sequence");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, sortRows_byNameDesc) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("TTTTTT");
+
+    MultipleSequenceAlignment almnt("Alignment name", NULL);
+    almnt->addRow("NameAA", firstSequence);
+    almnt->addRow("NameBA", secondSequence);
+    almnt->addRow("NameAB", thirdSequence);
+
+    almnt->sortRowsByName(MultipleAlignment::Descending);
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(3, rowNames.count(), "number of rows");
+    CHECK_EQUAL("NameBA", rowNames[0], "order");
+    CHECK_EQUAL("NameAB", rowNames[1], "order");
+    CHECK_EQUAL("NameAA", rowNames[2], "order");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 0), "first row sequence");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, sortRows_twoSimilar) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("TTTTTT");
+    QByteArray forthSequence("AAAAAA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    QVector<U2Region> unitedRegions;
+    almnt->sortRowsBySimilarity(unitedRegions);
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(4, rowNames.count(), "number of rows");
+    CHECK_EQUAL("First", rowNames[0], "order");
+    CHECK_EQUAL("Forth", rowNames[1], "order");
+    CHECK_EQUAL("Second", rowNames[2], "order");
+    CHECK_EQUAL("Third", rowNames[3], "order");
+
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("TTTTTT", MsaTestUtils::getRowData(almnt, 3), "row4");
+    CHECK_EQUAL(1, unitedRegions.count(), "number of similar regions");
+    U2Region reg = unitedRegions[0];
+    CHECK_EQUAL(0, reg.startPos, "similar rows region start position");
+    CHECK_EQUAL(2, reg.length, "similar rows region length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, sortRows_threeSimilar) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("AAAAAA");
+    QByteArray thirdSequence("TTTTTT");
+    QByteArray forthSequence("AAAAAA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    QVector<U2Region> unitedRegions;
+    almnt->sortRowsBySimilarity(unitedRegions);
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(4, rowNames.count(), "number of rows");
+    CHECK_EQUAL("First", rowNames[0], "order");
+    CHECK_EQUAL("Second", rowNames[1], "order");
+    CHECK_EQUAL("Forth", rowNames[2], "order");
+    CHECK_EQUAL("Third", rowNames[3], "order");
+
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("TTTTTT", MsaTestUtils::getRowData(almnt, 3), "row4");
+
+    CHECK_EQUAL(1, unitedRegions.count(), "number of similar regions");
+    U2Region reg = unitedRegions[0];
+    CHECK_EQUAL(0, reg.startPos, "similar rows region start position");
+    CHECK_EQUAL(3, reg.length, "similar rows region length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, sortRows_similarTwoRegions) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("AAAAAA");
+    QByteArray forthSequence("CCCCCC");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    QVector<U2Region> unitedRegions;
+    almnt->sortRowsBySimilarity(unitedRegions);
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(4, rowNames.count(), "number of rows");
+    CHECK_EQUAL("First", rowNames[0], "order");
+    CHECK_EQUAL("Third", rowNames[1], "order");
+    CHECK_EQUAL("Second", rowNames[2], "order");
+    CHECK_EQUAL("Forth", rowNames[3], "order");
+
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 3), "row4");
+
+    CHECK_EQUAL(2, unitedRegions.count(), "number of similar regions");
+    U2Region reg = unitedRegions[0];
+    CHECK_EQUAL(0, reg.startPos, "similar rows first region start position");
+    CHECK_EQUAL(2, reg.length, "similar rows first region length");
+    reg = unitedRegions[1];
+    CHECK_EQUAL(2, reg.startPos, "similar rows second region start position");
+    CHECK_EQUAL(2, reg.length, "similar rows second region length");
+}
+
+/** Tests getRows */
+IMPLEMENT_TEST(MsaUnitTests, getRows_oneRow) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    MultipleSequenceAlignmentRow row = almnt->getMsaRow(0);
+    CHECK_EQUAL("---AG-T--", MsaRowTestUtils::getRowData(row), "first row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, getRows_severalRows) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    QList<MultipleSequenceAlignmentRow> rows = almnt->getMsaRows();
+    CHECK_EQUAL(2, rows.count(), "number of rows");
+    CHECK_EQUAL("---AG-T--", MsaRowTestUtils::getRowData(rows[0]), "first row");
+    CHECK_EQUAL("AG-CT-TAA", MsaRowTestUtils::getRowData(rows[1]), "second row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, getRows_rowNames) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    QStringList rowNames = almnt->getRowNames();
+    CHECK_EQUAL(2, rowNames.count(), "number of rows");
+    CHECK_EQUAL("First row", rowNames[0], "first row name");
+    CHECK_EQUAL("Second row", rowNames[1], "second row name");
+}
+
+/** Tests charAt */
+IMPLEMENT_TEST(MsaUnitTests, charAt_nonGapChar) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    char result = almnt->charAt(0, 3);
+    CHECK_EQUAL('A', result, "char inside first row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, charAt_gap) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    char result = almnt->charAt(1, 2);
+    CHECK_EQUAL('-', result, "gap inside second row");
+}
+
+/** Tests insertGaps */
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_validParams) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 4, 3, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(10, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("---A---G-T", MsaTestUtils::getRowData(almnt, 0), "first row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_toBeginningLength) {
+    QByteArray firstSequence("ACGT");
+    QByteArray secondSequence("ACC");
+
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Alignment");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+
+    almnt->insertGaps(1, 0, 2, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(5, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("--ACC", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_negativeRowIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(-1, 4, 3, os);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_tooBigRowIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(2, 4, 3, os);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_negativePos) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, -1, 3, os);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_tooBigPos) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 10, 3, os);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, insertGaps_negativeCount) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->insertGaps(0, 4, -1, os);
+    CHECK_EQUAL("Failed to insert gaps into an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+/** Tests removeData */
+IMPLEMENT_TEST(MsaUnitTests, removeChars_validParams) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(1, 0, 2, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("-CT-TAA--", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeChars_negativeRowIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(-1, 0, 2, os);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeChars_tooBigRowIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(2, 0, 2, os);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeChars_negativePos) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(1, -1, 2, os);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeChars_tooBigPos) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(1, 10, 2, os);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeChars_negativeCount) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeChars(1, 0, -1, os);
+    CHECK_EQUAL("Failed to remove chars from an alignment", os.getError(), "opStatus");
+    CHECK_TRUE(MsaTestUtils::testAlignmentNotChanged(almnt), "Alignment changed unexpectedly");
+}
+
+/** Tests removeRegion */
+IMPLEMENT_TEST(MsaUnitTests, removeRegion_validParams) {
+    QByteArray firstSequence("---ACT");
+    QByteArray secondSequence("A-CG-A");
+    QByteArray thirdSequence("---CGA");
+    QByteArray forthSequence("AAAAAA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    almnt->removeRegion(1, 1, 3, 2, false);
+
+    CHECK_EQUAL(4, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---ACT", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("A-A---", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("-GA---", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 3), "row4");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeRegion_removeEmpty) {
+    QByteArray firstSequence("---ACT");
+    QByteArray secondSequence("A-CG-A");
+    QByteArray thirdSequence("--AC");
+    QByteArray forthSequence("AAAAAA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    almnt->removeRegion(1, 1, 3, 2, true);
+
+    CHECK_EQUAL(3, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---ACT", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("A-A---", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 2), "row3");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeRegion_trimmed) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->removeRegion(0, 1, 2, 1, false);
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("-CT-TAA--", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+/** Tests renameRow */
+IMPLEMENT_TEST(MsaUnitTests, renameRow_validParams) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    QString newRowName = "New row name";
+    almnt->renameRow(0, newRowName);
+    MultipleSequenceAlignmentRow actualRow = almnt->getMsaRow(0);
+    CHECK_EQUAL(newRowName, actualRow->getName(), "renamed row name");
+}
+
+/** Tests setRowContent */
+IMPLEMENT_TEST(MsaUnitTests, setRowContent_validParamsAndNotTrimmed) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->setRowContent(1, "---AC-");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("---AC----", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, setRowContent_lengthIsIncreased) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->setRowContent(0, "ACGT-ACA-ACA");
+    CHECK_EQUAL(12, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("ACGT-ACA-ACA", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("AG-CT-TAA---", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+/** Tests upperCase */
+IMPLEMENT_TEST(MsaUnitTests, upperCase_charsAndGaps) {
+    QByteArray sequence1("mMva-ke");
+    QByteArray sequence2("avn-*y-s");
+
+    MultipleSequenceAlignment almnt("Alignment with chars in lower-case");
+    almnt->addRow("First row", sequence1);
+    almnt->addRow("Second row", sequence2);
+
+    almnt->toUpperCase();
+
+    CHECK_EQUAL("MMVA-KE-", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AVN-*Y-S", MsaTestUtils::getRowData(almnt, 1), "row2");
+}
+
+/** Tests crop */
+IMPLEMENT_TEST(MsaUnitTests, crop_validParams) {
+    QByteArray firstSequence("---ACT");
+    QByteArray secondSequence("A-CG-A");
+    QByteArray thirdSequence("---CGA");
+
+    U2OpStatusImpl os;
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+
+    U2Region region(1, 4);
+    QSet<QString> rowNames;
+    rowNames << "First" << "Second";
+
+    almnt->crop(region, rowNames, os);
+    CHECK_NO_ERROR(os);
+
+    CHECK_EQUAL(2, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL(4, almnt->getLength(), "alignment length");
+    CHECK_EQUAL("--AC", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("-CG-", MsaTestUtils::getRowData(almnt, 1), "second row");
+}
+
+/** Tests mid */
+IMPLEMENT_TEST(MsaUnitTests, mid_validParams) {
+    QByteArray firstSequence("---ACT");
+    QByteArray secondSequence("A");
+    QByteArray thirdSequence("---CGA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+
+    MultipleSequenceAlignment almntResult = almnt->mid(2, 3);
+    CHECK_EQUAL(3, almntResult->getNumRows(), "number of rows");
+    CHECK_EQUAL("-AC", MsaTestUtils::getRowData(almntResult, 0), "first row");
+    CHECK_EQUAL("---", MsaTestUtils::getRowData(almntResult, 1), "second row");
+    CHECK_EQUAL("-CG", MsaTestUtils::getRowData(almntResult, 2), "third row");
+
+    CHECK_EQUAL("---ACT", MsaTestUtils::getRowData(almnt, 0), "first row of the original");
+}
+
+/** Tests addRow */
+IMPLEMENT_TEST(MsaUnitTests, addRow_appendRowFromBytes) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->addRow("Added row", "--AACT-GAG");
+
+    CHECK_EQUAL(3, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T---", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("AG-CT-TAA-", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL("--AACT-GAG", MsaTestUtils::getRowData(almnt, 2), "third row");
+    CHECK_EQUAL("Added row", almnt->getRowNames().at(2), "added row name");
+    CHECK_EQUAL(10, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, addRow_rowFromBytesToIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->addRow("Added row", "--AACT-GAG", 1);
+
+    CHECK_EQUAL(3, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T---", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("--AACT-GAG", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL("AG-CT-TAA-", MsaTestUtils::getRowData(almnt, 2), "third row");
+    CHECK_EQUAL("Added row", almnt->getRowNames().at(1), "added row name");
+    CHECK_EQUAL(10, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, addRow_zeroBound) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->addRow("Added row", "--AACT-GAG", -2);
+
+    CHECK_EQUAL(3, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("--AACT-GAG", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("---AG-T---", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL("AG-CT-TAA-", MsaTestUtils::getRowData(almnt, 2), "third row");
+    CHECK_EQUAL("Added row", almnt->getRowNames().at(0), "added row name");
+    CHECK_EQUAL(10, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, addRow_rowsNumBound) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    almnt->addRow("Added row", "--AACT-GAG", 3);
+
+    CHECK_EQUAL(3, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T---", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("AG-CT-TAA-", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL("--AACT-GAG", MsaTestUtils::getRowData(almnt, 2), "third row");
+    CHECK_EQUAL("Added row", almnt->getRowNames().at(2), "added row name");
+    CHECK_EQUAL(10, almnt->getLength(), "alignment length");
+}
+
+/** Tests removeRow */
+IMPLEMENT_TEST(MsaUnitTests, removeRow_validIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeRow(1, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(1, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeRow_negativeIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeRow(-1, os);
+    CHECK_EQUAL("Failed to remove a row", os.getError(), "opStatus");
+    CHECK_EQUAL(2, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("AG-CT-TAA", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeRow_tooBigIndex) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeRow(2, os);
+    CHECK_EQUAL("Failed to remove a row", os.getError(), "opStatus");
+    CHECK_EQUAL(2, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL("---AG-T--", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL("AG-CT-TAA", MsaTestUtils::getRowData(almnt, 1), "second row");
+    CHECK_EQUAL(9, almnt->getLength(), "alignment length");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, removeRow_emptyAlignment) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    U2OpStatusImpl os;
+    almnt->removeRow(0, os);
+    CHECK_NO_ERROR(os);
+    almnt->removeRow(0, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(0, almnt->getNumRows(), "number of rows");
+    CHECK_EQUAL(0, almnt->getLength(), "alignment length");
+}
+
+/** Tests moveRowsBlock */
+IMPLEMENT_TEST(MsaUnitTests, moveRowsBlock_positiveDelta) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("GGGGGG");
+    QByteArray forthSequence("TTTTTT");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    almnt->moveRowsBlock(0, 2, 1);
+
+    CHECK_EQUAL("GGGGGG", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("TTTTTT", MsaTestUtils::getRowData(almnt, 3), "row4");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, moveRowsBlock_negativeDelta) {
+    QByteArray firstSequence("AAAAAA");
+    QByteArray secondSequence("CCCCCC");
+    QByteArray thirdSequence("GGGGGG");
+    QByteArray forthSequence("TTTTTT");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+    almnt->addRow("Second", secondSequence);
+    almnt->addRow("Third", thirdSequence);
+    almnt->addRow("Forth", forthSequence);
+
+    almnt->moveRowsBlock(3, 1, -1);
+
+    CHECK_EQUAL("AAAAAA", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("CCCCCC", MsaTestUtils::getRowData(almnt, 1), "row2");
+    CHECK_EQUAL("TTTTTT", MsaTestUtils::getRowData(almnt, 2), "row3");
+    CHECK_EQUAL("GGGGGG", MsaTestUtils::getRowData(almnt, 3), "row4");
+}
+
+/** Tests replaceChars */
+IMPLEMENT_TEST(MsaUnitTests, replaceChars_validParams) {
+    QByteArray firstSequence("AGT.C.T");
+    QByteArray secondSequence("A.CT.-AA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First row", firstSequence);
+    almnt->addRow("Second row", secondSequence);
+
+    almnt->replaceChars(1, '.', '-');
+    CHECK_EQUAL("AGT.C.T-", MsaTestUtils::getRowData(almnt, 0), "first sequence");
+    CHECK_EQUAL("A-CT--AA", MsaTestUtils::getRowData(almnt, 1), "second sequence");
+}
+
+/** Tests appendChars */
+IMPLEMENT_TEST(MsaUnitTests, appendChars_validParams) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    const char* str = "-AC-GT-";
+    int length = 7;
+    almnt->appendChars(0, str, length);
+    CHECK_EQUAL("---AG-T---AC-GT-", MsaTestUtils::getRowData(almnt, 0), "first row");
+    CHECK_EQUAL(4, almnt->getMsaRow(0)->getGapModel().size(), "number of gaps");
+    CHECK_EQUAL(16, almnt->getLength(), "alignment length");
+}
+
+/** Tests operPlusEqual */
+IMPLEMENT_TEST(MsaUnitTests, operPlusEqual_validParams) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    MultipleSequenceAlignment almnt2 = MsaTestUtils::initTestAlignment();
+
+    *almnt += *almnt2;
+
+    CHECK_EQUAL("---AG-T-----AG-T--", MsaTestUtils::getRowData(almnt, 0), "row1");
+    CHECK_EQUAL("AG-CT-TAAAG-CT-TAA", MsaTestUtils::getRowData(almnt, 1), "row2");
+
+    CHECK_EQUAL(4, almnt->getMsaRow(0)->getGapModel().size(), "number of gaps");
+    CHECK_EQUAL(18, almnt->getLength(), "alignment length");
+}
+
+/** Tests operNotEqual */
+IMPLEMENT_TEST(MsaUnitTests, operNotEqual_equal) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    MultipleSequenceAlignment almnt2 = MsaTestUtils::initTestAlignment();
+
+    bool res = (*almnt != *almnt2);
+    CHECK_FALSE(res, "Operator!= returned 'True' unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, operNotEqual_notEqual) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    MultipleSequenceAlignment almnt2;
+
+    bool res = (*almnt != *almnt2);
+    CHECK_TRUE(res, "Operator!= returned 'False' unexpectedly");
+}
+
+/** Tests hasEmptyGapModel */
+IMPLEMENT_TEST(MsaUnitTests, hasEmptyGapModel_gaps) {
+    MultipleSequenceAlignment almnt = MsaTestUtils::initTestAlignment();
+    bool res = almnt->hasEmptyGapModel();
+
+    CHECK_FALSE(res, "Method hasEmptyGapModel() returned 'True' unexpectedly");
+}
+
+IMPLEMENT_TEST(MsaUnitTests, hasEmptyGapModel_noGaps) {
+    QByteArray firstSequence("AAAAAA");
+
+    MultipleSequenceAlignment almnt("Alignment name");
+    almnt->addRow("First", firstSequence);
+
+    bool res = almnt->hasEmptyGapModel();
+
+    CHECK_TRUE(res, "Method hasEmptyGapModel() returned 'False' unexpectedly");
+}
+
+
+} // namespace
diff --git a/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.h b/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.h
new file mode 100644
index 0000000..3a586f1
--- /dev/null
+++ b/src/plugins/api_tests/src/core/datatype/msa/MsaUnitTests.h
@@ -0,0 +1,347 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+
+#ifndef _U2_MSA_UNIT_TESTS_H_
+#define _U2_MSA_UNIT_TESTS_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+
+#include <unittest.h>
+
+
+namespace U2 {
+
+class MsaTestUtils {
+public:
+    static MultipleSequenceAlignment initTestAlignment();
+    static QString getRowData(const MultipleSequenceAlignment&, int rowNum);
+    static bool testAlignmentNotChanged(const MultipleSequenceAlignment&);
+
+    static const int rowsNum;
+    static const int firstRowLength;
+    static const int secondRowLength;
+
+    static const QString alignmentName;
+};
+
+/** Clearing of a non-empty alignment */
+DECLARE_TEST(MsaUnitTests, clear_notEmpty);
+
+/**
+ * Alignment name:
+ *   ^ ctor     - name, specified in the constructor
+ *   ^ setName  - set a new name
+ */
+DECLARE_TEST(MsaUnitTests, name_ctor);
+DECLARE_TEST(MsaUnitTests, name_setName);
+
+/**
+ * Alignment alphabet:
+ *   ^ ctor        - alphabet, specified in the constructor
+ *   ^ setAlphabet - set a new alphabet
+ */
+DECLARE_TEST(MsaUnitTests, alphabet_ctor);
+DECLARE_TEST(MsaUnitTests, alphabet_setAlphabet);
+
+/** Alignment info */
+DECLARE_TEST(MsaUnitTests, info_setGet);
+
+/**
+ * Alignment length:
+ *   ^ isEmptyFalse   - method "isEmpty" returns "false" for a non-empty alignment
+ *   ^ isEmptyTrue    - method "isEmpty" returns "true" for an empty alignment
+ *   ^ get            - getting length of a non-empty alignment
+ *   ^ getForEmpty    - getting length of an empty alignment
+ *   ^ setLessLength  - set length less than the current one to a non-empty
+ *                      alignment, the alignment is cropped
+ */
+DECLARE_TEST(MsaUnitTests, length_isEmptyFalse);
+DECLARE_TEST(MsaUnitTests, length_isEmptyTrue);
+DECLARE_TEST(MsaUnitTests, length_get);
+DECLARE_TEST(MsaUnitTests, length_getForEmpty);
+DECLARE_TEST(MsaUnitTests, length_setLessLength);
+
+/**
+ * Number of rows:
+ *   ^ notEmpty - number of rows in a non-empty alignment
+ *   ^ empty    - zero rows in an empty alignment
+ */
+DECLARE_TEST(MsaUnitTests, numOfRows_notEmpty);
+DECLARE_TEST(MsaUnitTests, numOfRows_empty);
+
+/**
+ * Trimming an alignment:
+ *   ^ biggerLength      - length bigger than a maximum row length was set, now it is trimmed
+ *   ^ leadingGapColumns - leading gap columns are removed
+ *   ^ nothingToTrim     - trim() returns "false"
+ *   ^ rowWithoutGaps    - no errors when an alignment contains a row without gaps
+ *   ^ empty             - trim() returns "false"
+ *   ^ trailingGapInOne  - there are two rows and nothing to trim, one row has a trailing gap
+ */
+DECLARE_TEST(MsaUnitTests, trim_biggerLength);
+DECLARE_TEST(MsaUnitTests, trim_leadingGapColumns);
+DECLARE_TEST(MsaUnitTests, trim_nothingToTrim);
+DECLARE_TEST(MsaUnitTests, trim_rowWithoutGaps);
+DECLARE_TEST(MsaUnitTests, trim_empty);
+DECLARE_TEST(MsaUnitTests, trim_trailingGapInOne);
+
+/**
+ * Removing all gaps from an alignment:
+ *   ^ withGaps    - gaps in a non-empty alignment are removed, simplify returns "true"
+ *   ^ withoutGaps - no gaps to remove, simplify returns "false"
+ *   ^ empty       - an empty alignment, simplify returns "false"
+ */
+DECLARE_TEST(MsaUnitTests, simplify_withGaps);
+DECLARE_TEST(MsaUnitTests, simplify_withoutGaps);
+DECLARE_TEST(MsaUnitTests, simplify_empty);
+
+/**
+ * Verify methods "sortRowsByName" and "sortRowsBySimilarity":
+ *   ^ byNameAsc         - sort rows by name in ascending order
+ *   ^ byNameDesc        - sort rows by name in descending order
+ *   ^ twoSimilar        - sort rows by similarity, two rows are similar
+ *   ^ threeSimilar      - sort rows by similarity, three rows are similar
+ *   ^ similarTwoRegions - sort rows by similarity, two groups of similar sequences
+ */
+DECLARE_TEST(MsaUnitTests, sortRows_byNameAsc);
+DECLARE_TEST(MsaUnitTests, sortRows_byNameDesc);
+DECLARE_TEST(MsaUnitTests, sortRows_twoSimilar);
+DECLARE_TEST(MsaUnitTests, sortRows_threeSimilar);
+DECLARE_TEST(MsaUnitTests, sortRows_similarTwoRegions);
+
+/**
+ * Getting rows and rows' names:
+ *   ^ oneRow              - verify "getRow" method on a non-empty alignment with a valid row index
+ *   ^ severalRows         - verify "getRows" method on a non-empty alignment
+ *   ^ rowNames            - verify "getRowNames" method on a non-empty alignment
+ */
+DECLARE_TEST(MsaUnitTests, getRows_oneRow);
+DECLARE_TEST(MsaUnitTests, getRows_severalRows);
+DECLARE_TEST(MsaUnitTests, getRows_rowNames);
+
+/**
+ * Getting character at the specified position:
+ *   ^ nonGapChar - there is a non-gap char in the specified row/position
+ *   ^ gap        - there is a gap in the specified row/position
+ */
+DECLARE_TEST(MsaUnitTests, charAt_nonGapChar);
+DECLARE_TEST(MsaUnitTests, charAt_gap);
+
+/**
+ * Inserting gaps into an alignment:
+ *   ^ validParams       - gaps are inserted into a row
+ *   ^ toBeginningLength - a gap is inserted to a row beginning, the length of the alignment is properly recalculated
+ *   ^ negativeRowIndex  - row index is negative => error
+ *   ^ tooBigRowIndex    - row index is greater than the number of rows => error
+ *   ^ negativePos       - position is negative => error
+ *   ^ tooBigPos         - position is greater than the alignment length => error
+ *   ^ negativeCount     - gaps count is negative => error
+ */
+DECLARE_TEST(MsaUnitTests, insertGaps_validParams);
+DECLARE_TEST(MsaUnitTests, insertGaps_toBeginningLength);
+DECLARE_TEST(MsaUnitTests, insertGaps_negativeRowIndex);
+DECLARE_TEST(MsaUnitTests, insertGaps_tooBigRowIndex);
+DECLARE_TEST(MsaUnitTests, insertGaps_negativePos);
+DECLARE_TEST(MsaUnitTests, insertGaps_tooBigPos);
+DECLARE_TEST(MsaUnitTests, insertGaps_negativeCount);
+
+/**
+ * Removing chars from an alignment:
+ *   ^ validParamsAndTrimmed - chars are removed, the alignment is trimmed (gaps columns are removed, length is recalculated)
+ *   ^ negativeRowIndex      - row index is negative => error
+ *   ^ tooBigRowIndex        - row index is greater than the number of rows => error
+ *   ^ negativePos           - position is negative => error
+ *   ^ tooBigPos             - position is greater than the alignment length => error
+ *   ^ negativeCount         - gaps count is negative => error
+ */
+DECLARE_TEST(MsaUnitTests, removeChars_validParams);
+DECLARE_TEST(MsaUnitTests, removeChars_negativeRowIndex);
+DECLARE_TEST(MsaUnitTests, removeChars_tooBigRowIndex);
+DECLARE_TEST(MsaUnitTests, removeChars_negativePos);
+DECLARE_TEST(MsaUnitTests, removeChars_tooBigPos);
+DECLARE_TEST(MsaUnitTests, removeChars_negativeCount);
+
+/**
+ * Removing a region:
+ *   ^ validParams - remove a sub-alignment
+ *   ^ removeEmpty - parameter removeEmptyRows is set to "True"
+ *   ^ trimmed     - the alignment is trimmed after removing the region, the length has been modified
+ */
+DECLARE_TEST(MsaUnitTests, removeRegion_validParams);
+DECLARE_TEST(MsaUnitTests, removeRegion_removeEmpty);
+DECLARE_TEST(MsaUnitTests, removeRegion_trimmed);
+
+/** Renaming a row */
+DECLARE_TEST(MsaUnitTests, renameRow_validParams);
+
+/**
+ * Setting a new row content:
+ *   ^ validParamsAndTrimmed - a row content is changed, the alignment is NOT trimmed
+ *   ^ lengthIsIncreased     - a row content becomes longer than the initial alignment length
+ */
+DECLARE_TEST(MsaUnitTests, setRowContent_validParamsAndNotTrimmed);
+DECLARE_TEST(MsaUnitTests, setRowContent_lengthIsIncreased);
+
+/** Converting all rows to upper case */
+DECLARE_TEST(MsaUnitTests, upperCase_charsAndGaps);
+
+/** Cropping an alignment */
+DECLARE_TEST(MsaUnitTests, crop_validParams);
+
+/** Getting mid of an alignmentVerify method "mid" */
+DECLARE_TEST(MsaUnitTests, mid_validParams);
+
+/**
+ * Adding a new row to the alignment:
+ *   ^ appendRowFromBytes  - a new row is created from bytes and appended to the end of the alignment
+ *   ^ rowFromBytesToIndex - a new row is created from bytes and inserted to the specified index
+ *   ^ zeroBound           - incorrect row index "-2" => the new row is inserted to the beginning
+ *   ^ rowsNumBound        - incorrect row index more than the number of rows => the row is appended
+ */
+DECLARE_TEST(MsaUnitTests, addRow_appendRowFromBytes);
+DECLARE_TEST(MsaUnitTests, addRow_rowFromBytesToIndex);
+DECLARE_TEST(MsaUnitTests, addRow_zeroBound);
+DECLARE_TEST(MsaUnitTests, addRow_rowsNumBound);
+
+/**
+ * Removing a row from the alignment:
+ *   ^ validIndex     - row index is valid => the row is removed
+ *   ^ negativeIndex  - row index is negative => error
+ *   ^ tooBigIndex    - row index is bigger than the number of rows => error
+ *   ^ emptyAlignment - all rows are removed from the alignment, the length is set to zero
+ */
+DECLARE_TEST(MsaUnitTests, removeRow_validIndex);
+DECLARE_TEST(MsaUnitTests, removeRow_negativeIndex);
+DECLARE_TEST(MsaUnitTests, removeRow_tooBigIndex);
+DECLARE_TEST(MsaUnitTests, removeRow_emptyAlignment);
+
+/**
+ * Moving rows block:
+ *   ^ positiveDelta - rows are moved downwards
+ *   ^ negativeDelta - rows are moved upwards
+ */
+DECLARE_TEST(MsaUnitTests, moveRowsBlock_positiveDelta);
+DECLARE_TEST(MsaUnitTests, moveRowsBlock_negativeDelta);
+
+/** Replacing chars in an alignment row */
+DECLARE_TEST(MsaUnitTests, replaceChars_validParams);
+
+/** Appending chars to an alignment row */
+DECLARE_TEST(MsaUnitTests, appendChars_validParams);
+
+/** Verify operator+= */
+DECLARE_TEST(MsaUnitTests, operPlusEqual_validParams);
+
+/**
+ * Verify operator!= :
+ *   ^ equal    - alignments are equal
+ *   ^ notEqual - alignments are not equal (one of the alignments is empty)
+ */
+DECLARE_TEST(MsaUnitTests, operNotEqual_equal);
+DECLARE_TEST(MsaUnitTests, operNotEqual_notEqual);
+
+/**
+ * Verify if the alignment has gaps:
+ *   ^ gaps   - there are gaps in the alignment
+ *   ^ noGaps - there are NO gaps in the alignment
+ */
+DECLARE_TEST(MsaUnitTests, hasEmptyGapModel_gaps);
+DECLARE_TEST(MsaUnitTests, hasEmptyGapModel_noGaps);
+
+
+} // namespace
+
+DECLARE_METATYPE(MsaUnitTests, clear_notEmpty);
+DECLARE_METATYPE(MsaUnitTests, name_ctor);
+DECLARE_METATYPE(MsaUnitTests, name_setName);
+DECLARE_METATYPE(MsaUnitTests, alphabet_ctor);
+DECLARE_METATYPE(MsaUnitTests, alphabet_setAlphabet);
+DECLARE_METATYPE(MsaUnitTests, info_setGet);
+DECLARE_METATYPE(MsaUnitTests, length_isEmptyFalse);
+DECLARE_METATYPE(MsaUnitTests, length_isEmptyTrue);
+DECLARE_METATYPE(MsaUnitTests, length_get);
+DECLARE_METATYPE(MsaUnitTests, length_getForEmpty);
+DECLARE_METATYPE(MsaUnitTests, length_setLessLength);
+DECLARE_METATYPE(MsaUnitTests, numOfRows_notEmpty);
+DECLARE_METATYPE(MsaUnitTests, numOfRows_empty);
+DECLARE_METATYPE(MsaUnitTests, trim_biggerLength);
+DECLARE_METATYPE(MsaUnitTests, trim_leadingGapColumns);
+DECLARE_METATYPE(MsaUnitTests, trim_nothingToTrim);
+DECLARE_METATYPE(MsaUnitTests, trim_rowWithoutGaps);
+DECLARE_METATYPE(MsaUnitTests, trim_empty);
+DECLARE_METATYPE(MsaUnitTests, trim_trailingGapInOne);
+DECLARE_METATYPE(MsaUnitTests, simplify_withGaps);
+DECLARE_METATYPE(MsaUnitTests, simplify_withoutGaps);
+DECLARE_METATYPE(MsaUnitTests, simplify_empty);
+DECLARE_METATYPE(MsaUnitTests, sortRows_byNameAsc);
+DECLARE_METATYPE(MsaUnitTests, sortRows_byNameDesc);
+DECLARE_METATYPE(MsaUnitTests, sortRows_twoSimilar);
+DECLARE_METATYPE(MsaUnitTests, sortRows_threeSimilar);
+DECLARE_METATYPE(MsaUnitTests, sortRows_similarTwoRegions);
+DECLARE_METATYPE(MsaUnitTests, getRows_oneRow);
+DECLARE_METATYPE(MsaUnitTests, getRows_severalRows);
+DECLARE_METATYPE(MsaUnitTests, getRows_rowNames);
+DECLARE_METATYPE(MsaUnitTests, charAt_nonGapChar);
+DECLARE_METATYPE(MsaUnitTests, charAt_gap);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_validParams);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_toBeginningLength);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_negativeRowIndex);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_tooBigRowIndex);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_negativePos);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_tooBigPos);
+DECLARE_METATYPE(MsaUnitTests, insertGaps_negativeCount);
+DECLARE_METATYPE(MsaUnitTests, removeChars_validParams);
+DECLARE_METATYPE(MsaUnitTests, removeChars_negativeRowIndex);
+DECLARE_METATYPE(MsaUnitTests, removeChars_tooBigRowIndex);
+DECLARE_METATYPE(MsaUnitTests, removeChars_negativePos);
+DECLARE_METATYPE(MsaUnitTests, removeChars_tooBigPos);
+DECLARE_METATYPE(MsaUnitTests, removeChars_negativeCount);
+DECLARE_METATYPE(MsaUnitTests, removeRegion_validParams);
+DECLARE_METATYPE(MsaUnitTests, removeRegion_removeEmpty);
+DECLARE_METATYPE(MsaUnitTests, removeRegion_trimmed);
+DECLARE_METATYPE(MsaUnitTests, renameRow_validParams);
+DECLARE_METATYPE(MsaUnitTests, setRowContent_validParamsAndNotTrimmed);
+DECLARE_METATYPE(MsaUnitTests, setRowContent_lengthIsIncreased);
+DECLARE_METATYPE(MsaUnitTests, upperCase_charsAndGaps)
+DECLARE_METATYPE(MsaUnitTests, crop_validParams);
+DECLARE_METATYPE(MsaUnitTests, mid_validParams);
+DECLARE_METATYPE(MsaUnitTests, addRow_appendRowFromBytes);
+DECLARE_METATYPE(MsaUnitTests, addRow_rowFromBytesToIndex);
+DECLARE_METATYPE(MsaUnitTests, addRow_zeroBound);
+DECLARE_METATYPE(MsaUnitTests, addRow_rowsNumBound);
+DECLARE_METATYPE(MsaUnitTests, removeRow_validIndex);
+DECLARE_METATYPE(MsaUnitTests, removeRow_negativeIndex);
+DECLARE_METATYPE(MsaUnitTests, removeRow_tooBigIndex);
+DECLARE_METATYPE(MsaUnitTests, removeRow_emptyAlignment);
+DECLARE_METATYPE(MsaUnitTests, moveRowsBlock_positiveDelta);
+DECLARE_METATYPE(MsaUnitTests, moveRowsBlock_negativeDelta);
+DECLARE_METATYPE(MsaUnitTests, replaceChars_validParams);
+DECLARE_METATYPE(MsaUnitTests, appendChars_validParams);
+DECLARE_METATYPE(MsaUnitTests, operPlusEqual_validParams);
+DECLARE_METATYPE(MsaUnitTests, operNotEqual_equal);
+DECLARE_METATYPE(MsaUnitTests, operNotEqual_notEqual);
+DECLARE_METATYPE(MsaUnitTests, hasEmptyGapModel_gaps);
+DECLARE_METATYPE(MsaUnitTests, hasEmptyGapModel_noGaps);
+
+
+#endif
+
diff --git a/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.cpp
index f1b59bf..3ef0429 100644
--- a/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.h b/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.h
index c6ccbbc..996abbb 100644
--- a/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.h
+++ b/src/plugins/api_tests/src/core/datatype/udr/RawDataUdrSchemaUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.cpp b/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.cpp
index 603a5e6..95cbd97 100644
--- a/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.h b/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.h
index b328e48..c4be641 100644
--- a/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.h
+++ b/src/plugins/api_tests/src/core/datatype/udr/UdrSchemaUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/DbiTest.cpp b/src/plugins/api_tests/src/core/dbi/DbiTest.cpp
index 989973b..3097cc5 100644
--- a/src/plugins/api_tests/src/core/dbi/DbiTest.cpp
+++ b/src/plugins/api_tests/src/core/dbi/DbiTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 
 #include <U2Test/TestRunnerSettings.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 
 
 namespace U2 {
diff --git a/src/plugins/api_tests/src/core/dbi/assembly/AssemblyDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/assembly/AssemblyDbiUnitTests.cpp
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/dbi/assembly/AssemblyDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/assembly/AssemblyDbiUnitTests.h
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/dbi/attribute/AttributeDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/attribute/AttributeDbiUnitTests.cpp
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/dbi/attribute/AttributeDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/attribute/AttributeDbiUnitTests.h
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.cpp
index 33830cf..529223c 100644
--- a/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.h
index bd587fe..3b1547d 100644
--- a/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.h
+++ b/src/plugins/api_tests/src/core/dbi/features/FeatureDbiUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.cpp
index 91c3ed2..d2a353d 100644
--- a/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.h
index 57c36de..97384eb 100644
--- a/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.h
+++ b/src/plugins/api_tests/src/core/dbi/msa/MsaDbiUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.cpp
old mode 100644
new mode 100755
index 2d6c169..fd53546
--- a/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/U2ObjectDbi.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/sequence/SequenceDbiUnitTests.h
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.cpp b/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.cpp
index 6c6114e..044aa41 100644
--- a/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.h b/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.h
index cc6c808..fddc3e3 100644
--- a/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.h
+++ b/src/plugins/api_tests/src/core/dbi/udr/UdrDbiUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.cpp b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.cpp
index a9b8401..b963ba7 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.cpp
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, basic_align ) {
     CHECK_U2_ERROR( error );
     error = addElementToScheme( scheme, L"muscle", MAX_ELEMENT_NAME_LENGTH, muscle );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"clustal" );
+    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"CLUSTAL" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeMsa, L"url-out", L"muscle_alignment.aln" );
     CHECK_U2_ERROR( error );
@@ -82,7 +82,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, faqual2fastq ) {
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, readSequence, L"url-in.dataset", L"Dataset 1" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"url-out", L"qualified_sequence.fastq" );
     CHECK_U2_ERROR( error );
@@ -118,7 +118,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, msa2clustal ) {
     CHECK_U2_ERROR( error );
     error = addElementToScheme( scheme, L"write-msa", MAX_ELEMENT_NAME_LENGTH, writeMsa );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"clustal" );
+    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"CLUSTAL" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeMsa, L"write-mode", L"2" );
     CHECK_U2_ERROR( error );
@@ -180,7 +180,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, query2alignment ) {
     error = setSchemeElementAttribute( scheme, extractAnnotatedSequence, L"translate", L"false" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"clustal" );
+    error = setSchemeElementAttribute( scheme, writeMsa, L"document-format", L"CLUSTAL" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeMsa, L"write-mode", L"2" );
     CHECK_U2_ERROR( error );
@@ -231,7 +231,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, seq2gen ) {
     error = setSchemeElementAttribute( scheme, readSequence, L"mode", L"0" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"accumulate", L"true" );
     CHECK_U2_ERROR( error );
@@ -279,7 +279,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, tfbs ) {
     error = addElementToScheme( scheme, L"wmatrix-read", MAX_ELEMENT_NAME_LENGTH, wmatrixRead );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"url-out", L"tfbs.gb" );
     CHECK_U2_ERROR( error );
@@ -394,7 +394,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, build_test_HMM ) {
     error = setSchemeElementAttribute( scheme, hmm2Search, L"seqs-num", L"1" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"accumulate", L"true" );
     CHECK_U2_ERROR( error );
@@ -463,7 +463,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, search_HMM ) {
     error = setSchemeElementAttribute( scheme, hmm2Search, L"seqs-num", L"1" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"accumulate", L"true" );
     CHECK_U2_ERROR( error );
@@ -522,7 +522,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, search_TFBS ) {
     error = addElementToScheme( scheme, L"sitecon-read", MAX_ELEMENT_NAME_LENGTH, siteconRead2 );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"url-out", L"output.gb" );
     CHECK_U2_ERROR( error );
@@ -617,9 +617,9 @@ IMPLEMENT_TEST( CInterfaceManualTests, call_variants ) {
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, readAssembly, L"url-in.dataset", L"Dataset" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, convertSequence, L"document-format", L"fasta" );
+    error = setSchemeElementAttribute( scheme, convertSequence, L"document-format", L"FASTA" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, convertBam, L"document-format", L"bam" );
+    error = setSchemeElementAttribute( scheme, convertBam, L"document-format", L"BAM" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, callVariants, L"variants-url", L"variations.vcf" );
     CHECK_U2_ERROR( error );
@@ -924,7 +924,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_main ) {
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, cuffdiff, L"out-dir", L"tools_output" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1021,12 +1021,12 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_main_paired ) {
     error = setSchemeElementAttribute( scheme, getFileList2, L"url-in.dataset", L"Dataset 2" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion1, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion2, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1114,7 +1114,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_multiple_dataset ) {
     error = setSchemeElementAttribute( scheme, getFileList, L"url-in.dataset", L"Dataset 2" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1194,12 +1194,12 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_multiple_dataset_paired ) {
     error = setSchemeElementAttribute( scheme, getFileList2, L"url-in.dataset", L"Dataset 2" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion1, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion2, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1273,7 +1273,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_single_dataset ) {
     error = setSchemeElementAttribute( scheme, getFileList, L"url-in.dataset", L"Dataset 1" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1338,12 +1338,12 @@ IMPLEMENT_TEST( CInterfaceManualTests, tuxedo_single_dataset_paired ) {
     error = setSchemeElementAttribute( scheme, getFileList2, L"url-in.dataset", L"Dataset 1" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion1, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion1, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
 
-    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, filesConversion2, L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, filesConversion2, L"excluded-formats", L"fasta" );
     CHECK_U2_ERROR( error );
@@ -1407,7 +1407,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, find_sequences ) {
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, search, L"use-names", L"true" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"write-mode", L"0" );
     CHECK_U2_ERROR( error );
@@ -1458,7 +1458,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, gene_by_gene_report ) {
 
     error = setSchemeElementAttribute( scheme, readSequence, L"url-in.dataset", L"Dataset" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"url-out", L"annotated_sequence.gb" );
     CHECK_U2_ERROR( error );
@@ -1520,7 +1520,7 @@ IMPLEMENT_TEST( CInterfaceManualTests, merge_sequence_annotation ) {
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, readAnnotations, L"url-in.dataset", L"Dataset" );
     CHECK_U2_ERROR( error );
-    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"genbank" );
+    error = setSchemeElementAttribute( scheme, writeSequence, L"document-format", L"Genbank" );
     CHECK_U2_ERROR( error );
     error = setSchemeElementAttribute( scheme, writeSequence, L"url-out", L"merged.gb" );
     CHECK_U2_ERROR( error );
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.h b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.h
index 97a6e53..bddcfd9 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.h
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceManualTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.cpp b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.cpp
index f0f17dd..c3f3aa0 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.cpp
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -201,8 +201,7 @@ IMPLEMENT_TEST( CInterfaceSasTests, basic_align_sas ) {
     error = getActorDisplayName( "write-msa", writerName );
     CHECK_U2_ERROR( error );
     gauto_array<wchar_t> wWriterName( toDisposableWString( writerName ) );
-    error = setSchemeElementAttribute( scheme, wWriterName.get( ), L"document-format",
-        L"stockholm" );
+    error = setSchemeElementAttribute( scheme, wWriterName.get( ), L"document-format", L"Stockholm" );
     CHECK_U2_ERROR( error );
 
     U2OpStatusImpl stateInfo;
@@ -279,7 +278,7 @@ IMPLEMENT_TEST( CInterfaceSasTests, faqual2fastq_sas ) {
     error = getActorDisplayName( "write-sequence", readerName );
     CHECK_U2_ERROR( error );
     gauto_array<wchar_t> wReaderName( toDisposableWString( readerName ) );
-    error = setSchemeElementAttribute( scheme, wReaderName.get( ), L"document-format", L"fastq" );
+    error = setSchemeElementAttribute( scheme, wReaderName.get( ), L"document-format", L"FASTQ" );
     CHECK_U2_ERROR( error );
 
     U2OpStatusImpl stateInfo;
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.h b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.h
index ade3abc..64738fc 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.h
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/CInterfaceSasTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,33 +58,33 @@ DECLARE_TEST( CInterfaceSasTests, extract_consensus_sas );
 
 } // namespace U2
 
-DECLARE_METATYPE( CInterfaceSasTests, align_with_clustalO_sas );
-DECLARE_METATYPE( CInterfaceSasTests, align_with_clustalW_sas );
-DECLARE_METATYPE( CInterfaceSasTests, align_with_kalign_sas );
-DECLARE_METATYPE( CInterfaceSasTests, align_with_mafft_sas );
-DECLARE_METATYPE( CInterfaceSasTests, align_with_muscle_sas );
-DECLARE_METATYPE( CInterfaceSasTests, align_with_tcoffee_sas );
-DECLARE_METATYPE( CInterfaceSasTests, annotate_with_uql_sas );
-DECLARE_METATYPE( CInterfaceSasTests, basic_align_sas );
-DECLARE_METATYPE( CInterfaceSasTests, build_weight_matrix_sas );
-DECLARE_METATYPE( CInterfaceSasTests, cd_search_sas );
-DECLARE_METATYPE( CInterfaceSasTests, dna_statistics_sas );
-DECLARE_METATYPE( CInterfaceSasTests, faqual2fastq_sas );
-DECLARE_METATYPE( CInterfaceSasTests, filter_annotations_by_name_sas );
-DECLARE_METATYPE( CInterfaceSasTests, find_repeats_sas );
-DECLARE_METATYPE( CInterfaceSasTests, hmm2_build_sas );
-DECLARE_METATYPE( CInterfaceSasTests, import_phred_qualities_sas );
-DECLARE_METATYPE( CInterfaceSasTests, join_sequences_into_alignment_sas );
-DECLARE_METATYPE( CInterfaceSasTests, local_blast_search_sas );
-DECLARE_METATYPE( CInterfaceSasTests, local_blast_plus_search_sas );
-DECLARE_METATYPE( CInterfaceSasTests, merge_annotations_sas );
-DECLARE_METATYPE( CInterfaceSasTests, merge_assemblies_with_cuffmerge_sas );
-DECLARE_METATYPE( CInterfaceSasTests, orf_marker_sas );
-DECLARE_METATYPE( CInterfaceSasTests, remote_blast_sas );
-DECLARE_METATYPE( CInterfaceSasTests, reverse_complement_sas );
-DECLARE_METATYPE( CInterfaceSasTests, split_alignment_into_sequences_sas );
-DECLARE_METATYPE( CInterfaceSasTests, split_assembly_into_sequences_sas );
-DECLARE_METATYPE( CInterfaceSasTests, text2sequence_sas );
-DECLARE_METATYPE( CInterfaceSasTests, extract_consensus_sas );
+DECLARE_METATYPE( CInterfaceSasTests, align_with_clustalO_sas )
+DECLARE_METATYPE( CInterfaceSasTests, align_with_clustalW_sas )
+DECLARE_METATYPE( CInterfaceSasTests, align_with_kalign_sas )
+DECLARE_METATYPE( CInterfaceSasTests, align_with_mafft_sas )
+DECLARE_METATYPE( CInterfaceSasTests, align_with_muscle_sas )
+DECLARE_METATYPE( CInterfaceSasTests, align_with_tcoffee_sas )
+DECLARE_METATYPE( CInterfaceSasTests, annotate_with_uql_sas )
+DECLARE_METATYPE( CInterfaceSasTests, basic_align_sas )
+DECLARE_METATYPE( CInterfaceSasTests, build_weight_matrix_sas )
+DECLARE_METATYPE( CInterfaceSasTests, cd_search_sas )
+DECLARE_METATYPE( CInterfaceSasTests, dna_statistics_sas )
+DECLARE_METATYPE( CInterfaceSasTests, faqual2fastq_sas )
+DECLARE_METATYPE( CInterfaceSasTests, filter_annotations_by_name_sas )
+DECLARE_METATYPE( CInterfaceSasTests, find_repeats_sas )
+DECLARE_METATYPE( CInterfaceSasTests, hmm2_build_sas )
+DECLARE_METATYPE( CInterfaceSasTests, import_phred_qualities_sas )
+DECLARE_METATYPE( CInterfaceSasTests, join_sequences_into_alignment_sas )
+DECLARE_METATYPE( CInterfaceSasTests, local_blast_search_sas )
+DECLARE_METATYPE( CInterfaceSasTests, local_blast_plus_search_sas )
+DECLARE_METATYPE( CInterfaceSasTests, merge_annotations_sas )
+DECLARE_METATYPE( CInterfaceSasTests, merge_assemblies_with_cuffmerge_sas )
+DECLARE_METATYPE( CInterfaceSasTests, orf_marker_sas )
+DECLARE_METATYPE( CInterfaceSasTests, remote_blast_sas )
+DECLARE_METATYPE( CInterfaceSasTests, reverse_complement_sas )
+DECLARE_METATYPE( CInterfaceSasTests, split_alignment_into_sequences_sas )
+DECLARE_METATYPE( CInterfaceSasTests, split_assembly_into_sequences_sas )
+DECLARE_METATYPE( CInterfaceSasTests, text2sequence_sas )
+DECLARE_METATYPE( CInterfaceSasTests, extract_consensus_sas )
 
 #endif // _U2_C_INTERFACE_SAS_TESTS_H_
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.cpp b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.cpp
index ad549d8..7146dfe 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.cpp
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/HRSchemaSerializer.h>
 
 #include "SchemeSimilarityUtils.h"
diff --git a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.h b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.h
index 55b4381..ee408e4 100644
--- a/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.h
+++ b/src/plugins/api_tests/src/core/external_script/base_scheme_interface/SchemeSimilarityUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_SCHEME_SIMILARITY_UTILS_H_
 #define _U2_SCHEME_SIMILARITY_UTILS_H_
 
-#include <QtCore/QFile>
+#include <QFile>
 #include <U2Core/U2OpStatus.h>
 #include <U2Script/U2Script.h>
 
diff --git a/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.cpp b/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.cpp
old mode 100644
new mode 100755
index 1151155..a0e2a1b
--- a/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/U2SafePoints.h>
diff --git a/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.h b/src/plugins/api_tests/src/core/format/fastq/FastqUnitTests.h
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.cpp b/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.cpp
old mode 100644
new mode 100755
index 294958c..dba0d00
--- a/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.h b/src/plugins/api_tests/src/core/format/genbank/LocationParserUnitTests.h
old mode 100644
new mode 100755
diff --git a/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp b/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp
index 15db21b..3290d89 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -86,9 +86,9 @@ void ModSQLiteSpecificTestData::shutdown() {
 void ModSQLiteSpecificTestData::cleanUpAllModSteps() {
     if (NULL != sqliteDbi) {
         U2OpStatusImpl os;
-        SQLiteQuery qSingle("DELETE FROM SingleModStep", sqliteDbi->getDbRef(), os);
-        SQLiteQuery qMulti("DELETE FROM MultiModStep", sqliteDbi->getDbRef(), os);
-        SQLiteQuery qUser("DELETE FROM UserModStep", sqliteDbi->getDbRef(), os);
+        SQLiteWriteQuery qSingle("DELETE FROM SingleModStep", sqliteDbi->getDbRef(), os);
+        SQLiteWriteQuery qMulti("DELETE FROM MultiModStep", sqliteDbi->getDbRef(), os);
+        SQLiteWriteQuery qUser("DELETE FROM UserModStep", sqliteDbi->getDbRef(), os);
 
         qSingle.execute();
         qMulti.execute();
@@ -108,7 +108,7 @@ void ModSQLiteSpecificTestData::getAllSteps(QList<U2SingleModStep>& singleSteps,
     multiSteps.clear();
     userSteps.clear();
 
-    SQLiteQuery qSingle("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT id, object, otype, oextra, version, modType, details, multiStepId FROM SingleModStep", sqliteDbi->getDbRef(), os);
     SAFE_POINT_OP(os, );
     while (qSingle.step()) {
         U2SingleModStep singleStep;
@@ -121,7 +121,7 @@ void ModSQLiteSpecificTestData::getAllSteps(QList<U2SingleModStep>& singleSteps,
         singleSteps.append(singleStep);
     }
 
-    SQLiteQuery qMulti("SELECT id, userStepId FROM MultiModStep", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qMulti("SELECT id, userStepId FROM MultiModStep", sqliteDbi->getDbRef(), os);
     SAFE_POINT_OP(os, );
     while (qMulti.step()) {
         U2MultiModStep4Test multiStep;
@@ -130,7 +130,7 @@ void ModSQLiteSpecificTestData::getAllSteps(QList<U2SingleModStep>& singleSteps,
         multiSteps.append(multiStep);
     }
 
-    SQLiteQuery qUser("SELECT id, object, otype, oextra, version FROM UserModStep", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT id, object, otype, oextra, version FROM UserModStep", sqliteDbi->getDbRef(), os);
     SAFE_POINT_OP(os, );
     while (qUser.step()) {
         U2UserModStep4Test userStep;
@@ -152,7 +152,7 @@ U2SingleModStep ModSQLiteSpecificTestData::prepareSingleStep(qint64 modVersion,
     step.objectId = objId;
     step.version = modVersion;
     step.modType = U2ModType::objUpdatedName;
-    step.details = PackUtils::packObjectNameDetails("Test object", "Test object");
+    step.details = U2DbiPackUtils::packObjectNameDetails("Test object", "Test object");
 
     return step;
 }
@@ -170,14 +170,14 @@ U2DataId ModSQLiteSpecificTestData::createObject(U2OpStatus& os) {
 }
 
 qint64 ModSQLiteSpecificTestData::getModStepsNum(const U2DataId& objId, U2OpStatus& os) {
-    SQLiteQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qModSteps.bindDataId(1, objId);
     return qModSteps.selectInt64();
 }
 
 U2SingleModStep ModSQLiteSpecificTestData::getLastModStep(const U2DataId& objId, U2OpStatus& os) {
     U2SingleModStep res;
-    SQLiteQuery qModStep("SELECT id, object, otype, oextra, version, modType, details FROM SingleModStep WHERE object = ?1 ORDER BY version DESC LIMIT 1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qModStep("SELECT id, object, otype, oextra, version, modType, details FROM SingleModStep WHERE object = ?1 ORDER BY version DESC LIMIT 1", sqliteDbi->getDbRef(), os);
     CHECK_OP(os, res);
 
     qModStep.bindDataId(1, objId);
@@ -193,7 +193,7 @@ U2SingleModStep ModSQLiteSpecificTestData::getLastModStep(const U2DataId& objId,
 
 QList<U2SingleModStep> ModSQLiteSpecificTestData::getAllModSteps(const U2DataId& objId, U2OpStatus& os) {
     QList<U2SingleModStep> res;
-    SQLiteQuery qModStep("SELECT id, object, otype, oextra, version, modType, details"
+    SQLiteReadQuery qModStep("SELECT id, object, otype, oextra, version, modType, details"
         " FROM SingleModStep WHERE object = ?1 ORDER BY version", sqliteDbi->getDbRef(), os);
     CHECK_OP(os, res);
 
@@ -995,14 +995,14 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalSteps) {
         rowModStep.modType = U2ModType::msaUpdatedRowInfo;
         rowModStep.objectId = msaId;
         rowModStep.version = baseMsaVersion + i;
-        rowModStep.details = PackUtils::packRowInfoDetails(rowInfoList[i], rowInfoList[i + 1]);
+        rowModStep.details = U2DbiPackUtils::packRowInfoDetails(rowInfoList[i], rowInfoList[i + 1]);
         msaModSteps << rowModStep;
 
         U2SingleModStep gapModStep;
         gapModStep.modType = U2ModType::msaUpdatedGapModel;
         gapModStep.objectId = msaId;
         gapModStep.version = baseMsaVersion + i;
-        gapModStep.details = PackUtils::packGapDetails(baseRows[rowNumber].rowId,
+        gapModStep.details = U2DbiPackUtils::packGapDetails(baseRows[rowNumber].rowId,
                                                                rowInfoList[i].gaps,
                                                                rowInfoList[i + 1].gaps);
         msaModSteps << gapModStep;
@@ -1016,7 +1016,7 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalSteps) {
         modStep.modType = U2ModType::sequenceUpdatedData;
         modStep.objectId = baseRows[rowNumber].sequenceId;
         modStep.version = baseSeqVersion + i;
-        modStep.details = PackUtils::packSequenceDataDetails(U2_REGION_MAX,
+        modStep.details = U2DbiPackUtils::packSequenceDataDetails(U2_REGION_MAX,
                                                                      seqDataList[i],
                                                                      seqDataList[i + 1],
                                                                      QVariantMap());
@@ -1143,14 +1143,14 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalUndoThenAc
         rowModStep.modType = U2ModType::msaUpdatedRowInfo;
         rowModStep.objectId = msaId;
         rowModStep.version = baseMsaVersion + i;
-        rowModStep.details = PackUtils::packRowInfoDetails(rowInfoList[i], rowInfoList[i + 1]);
+        rowModStep.details = U2DbiPackUtils::packRowInfoDetails(rowInfoList[i], rowInfoList[i + 1]);
         msaModSteps << rowModStep;
 
         U2SingleModStep gapModStep;
         gapModStep.modType = U2ModType::msaUpdatedGapModel;
         gapModStep.objectId = msaId;
         gapModStep.version = baseMsaVersion + i;
-        gapModStep.details = PackUtils::packGapDetails(baseRows[rowNumber].rowId,
+        gapModStep.details = U2DbiPackUtils::packGapDetails(baseRows[rowNumber].rowId,
                                                                rowInfoList[i].gaps,
                                                                rowInfoList[i + 1].gaps);
         msaModSteps << gapModStep;
@@ -1163,7 +1163,7 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalUndoThenAc
         modStep.modType = U2ModType::sequenceUpdatedData;
         modStep.objectId = baseRows[rowNumber].sequenceId;
         modStep.version = baseSeqVersion + i;
-        modStep.details = PackUtils::packSequenceDataDetails(U2_REGION_MAX,
+        modStep.details = U2DbiPackUtils::packSequenceDataDetails(U2_REGION_MAX,
                                                                      seqDataList[i],
                                                                      seqDataList[i + 1],
                                                                      QVariantMap());
@@ -1182,7 +1182,7 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalUndoThenAc
     actionSeqModStep.modType = U2ModType::sequenceUpdatedData;
     actionSeqModStep.objectId = baseRows[rowNumber].sequenceId;
     actionSeqModStep.version = baseSeqVersion + expectedIndex;
-    actionSeqModStep.details = PackUtils::packSequenceDataDetails(U2_REGION_MAX,
+    actionSeqModStep.details = U2DbiPackUtils::packSequenceDataDetails(U2_REGION_MAX,
                                                                           seqDataList[expectedIndex],
                                                                           newSeqData,
                                                                           QVariantMap());
@@ -1190,13 +1190,13 @@ IMPLEMENT_TEST(ModDbiSQLiteSpecificUnitTests, updateRowContent_severalUndoThenAc
     actionRowModStep.modType = U2ModType::msaUpdatedRowInfo;
     actionRowModStep.objectId = msaId;
     actionRowModStep.version = baseMsaVersion + expectedIndex;
-    actionRowModStep.details = PackUtils::packRowInfoDetails(rowInfoList[expectedIndex], newRow);
+    actionRowModStep.details = U2DbiPackUtils::packRowInfoDetails(rowInfoList[expectedIndex], newRow);
 
     U2SingleModStep actionGapModStep;
     actionGapModStep.modType = U2ModType::msaUpdatedGapModel;
     actionGapModStep.objectId = msaId;
     actionGapModStep.version = baseMsaVersion + expectedIndex;
-    actionGapModStep.details = PackUtils::packGapDetails(baseRows[rowNumber].rowId,
+    actionGapModStep.details = U2DbiPackUtils::packGapDetails(baseRows[rowNumber].rowId,
                                                                  rowInfoList[expectedIndex].gaps,
                                                                  newRow.gaps);
 
diff --git a/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h b/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h
index fd30073..17d3694 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h
+++ b/src/plugins/api_tests/src/core/format/sqlite_mod_dbi/ModDbiSQLiteSpecificUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.cpp b/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.cpp
index 6cb4aa4..7ee5152 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -83,7 +83,7 @@ SQLiteDbi* MsaSQLiteSpecificTestData::getSQLiteDbi() {
 }
 
 qint64 MsaSQLiteSpecificTestData::getModStepsNum(const U2DataId& objId, U2OpStatus& os) {
-    SQLiteQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qModSteps.bindDataId(1, objId);
     return qModSteps.selectInt64();
 }
@@ -880,10 +880,10 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, updateRowContent_undo) {
     CHECK_EQUAL(oldMsaVersion + 1, newVersion, "version");
 
     // Verify single modification steps
-    QString expectedSeqModDetails = PackUtils::packSequenceDataDetails(U2_REGION_MAX, oldSeq, newSeq, QVariantMap());
-    QString expectedRowModDetails = PackUtils::packRowInfoDetails(oldRow, newRow);
-    QString expectedGapModDetails = PackUtils::packGapDetails(oldRow.rowId, oldRow.gaps, newRow.gaps);
-    QString expectedLenModDetails = PackUtils::packAlignmentLength(13, 22);
+    QString expectedSeqModDetails = U2DbiPackUtils::packSequenceDataDetails(U2_REGION_MAX, oldSeq, newSeq, QVariantMap());
+    QString expectedRowModDetails = U2DbiPackUtils::packRowInfoDetails(oldRow, newRow);
+    QString expectedGapModDetails = U2DbiPackUtils::packGapDetails(oldRow.rowId, oldRow.gaps, newRow.gaps);
+    QString expectedLenModDetails = U2DbiPackUtils::packAlignmentLength(13, 22);
 
     QList< QList<U2SingleModStep> > modSteps = sqliteDbi->getSQLiteModDbi()->getModSteps(msaId, oldMsaVersion, os);
     QList<U2SingleModStep> msaSingleModSteps;
@@ -1002,9 +1002,9 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, updateRowContent_redo) {
     CHECK_EQUAL(oldMsaVersion + 1, redoVersion, "version after undo");
 
     // Verify single modification steps
-    QString expectedSeqModDetails = PackUtils::packSequenceDataDetails(U2_REGION_MAX, oldSeq, newSeq, QVariantMap());
-    QString expectedRowModDetails = PackUtils::packRowInfoDetails(oldRow, newRow);
-    QString expectedGapModDetails = PackUtils::packGapDetails(oldRow.rowId, oldRow.gaps, newRow.gaps);
+    QString expectedSeqModDetails = U2DbiPackUtils::packSequenceDataDetails(U2_REGION_MAX, oldSeq, newSeq, QVariantMap());
+    QString expectedRowModDetails = U2DbiPackUtils::packRowInfoDetails(oldRow, newRow);
+    QString expectedGapModDetails = U2DbiPackUtils::packGapDetails(oldRow.rowId, oldRow.gaps, newRow.gaps);
 
     QList< QList<U2SingleModStep> > modSteps = sqliteDbi->getSQLiteModDbi()->getModSteps(msaId, oldMsaVersion, os);
     QList<U2SingleModStep> msaSingleModSteps;
@@ -1147,7 +1147,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_noModTrack) {
         CHECK_NO_ERROR(os);
     }
 
-    // Get current U2Msa
+    // Get current U2Ma
     U2Msa oldMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
 
@@ -1196,7 +1196,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_noModTrack) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     U2Msa newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1239,7 +1239,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_undo) {
         CHECK_NO_ERROR(os);
     }
 
-    // Get current U2Msa
+    // Get current U2Ma
     U2Msa oldMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
 
@@ -1288,7 +1288,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_undo) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     U2Msa newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1341,7 +1341,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_undo) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1384,7 +1384,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_redo) {
         CHECK_NO_ERROR(os);
     }
 
-    // Get current U2Msa
+    // Get current U2Ma
     U2Msa oldMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
 
@@ -1432,7 +1432,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_redo) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     U2Msa newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1485,7 +1485,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_redo) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1539,7 +1539,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_redo) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
@@ -1578,7 +1578,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_severalSteps) {
         CHECK_NO_ERROR(os);
     }
 
-    // Get current U2Msa
+    // Get current U2Ma
     U2Msa oldMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
 
@@ -1667,7 +1667,7 @@ IMPLEMENT_TEST(MsaDbiSQLiteSpecificUnitTests, setNewRowsOrder_severalSteps) {
         CHECK_TRUE(oldSequences.contains(sequence), "sequence");
     }
 
-    // Verify U2Msa
+    // Verify U2Ma
     U2Msa newMsa = sqliteDbi->getMsaDbi()->getMsaObject(msaId, os);
     CHECK_NO_ERROR(os);
     CHECK_TRUE(oldMsa.alphabet == newMsa.alphabet, "msa");
diff --git a/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h b/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h
index 05f7991..fcae62a 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h
+++ b/src/plugins/api_tests/src/core/format/sqlite_msa_dbi/MsaDbiSQLiteSpecificUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp b/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp
index 9c6931e..b93e74b 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -257,7 +257,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     SQLiteDbi* sqliteDbi = SQLiteObjectDbiTestData::getSQLiteDbi();
 
     // "Attribute"
-    SQLiteQuery qAttr("SELECT COUNT(*) FROM Attribute WHERE name = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qAttr("SELECT COUNT(*) FROM Attribute WHERE name = ?1", sqliteDbi->getDbRef(), os);
     qAttr.bindString(1, "MSA1 info key");
     qint64 msa1AttrNum = qAttr.selectInt64();
     CHECK_EQUAL(0, msa1AttrNum, "MSA1 attributes number");
@@ -268,7 +268,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2AttrNum, "MSA2 attributes number");
 
     // "StringAttribute"
-    SQLiteQuery qStringAttr("SELECT COUNT(*) FROM StringAttribute WHERE value = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qStringAttr("SELECT COUNT(*) FROM StringAttribute WHERE value = ?1", sqliteDbi->getDbRef(), os);
     qStringAttr.bindString(1, "MSA1 info value");
     qint64 msa1StrAttrNum = qStringAttr.selectInt64();
     CHECK_EQUAL(0, msa1StrAttrNum, "MSA1 string attributes number");
@@ -279,7 +279,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2StrAttrNum, "MSA2 string attributes number");
 
     // "MsaRow"
-    SQLiteQuery qMsaRow("SELECT COUNT(*) FROM MsaRow WHERE msa = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qMsaRow("SELECT COUNT(*) FROM MsaRow WHERE msa = ?1", sqliteDbi->getDbRef(), os);
     qMsaRow.bindDataId(1, msaId);
     qint64 msa1Rows = qMsaRow.selectInt64();
     CHECK_EQUAL(0, msa1Rows, "number of rows in MSA1");
@@ -290,7 +290,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2Rows, "number of rows in MSA2");
 
     // "MsaRowGap"
-    SQLiteQuery qMsaRowGap("SELECT COUNT(*) FROM MsaRowGap WHERE msa = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qMsaRowGap("SELECT COUNT(*) FROM MsaRowGap WHERE msa = ?1", sqliteDbi->getDbRef(), os);
     qMsaRowGap.bindDataId(1, msaId);
     qint64 msa1Gaps = qMsaRowGap.selectInt64();
     CHECK_EQUAL(0, msa1Gaps, "number of gaps in MSA1 rows");
@@ -301,7 +301,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2Gaps, "number of gaps in MSA2 rows");
 
     // "Sequence"
-    SQLiteQuery qSeq("SELECT COUNT(*) FROM Sequence WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSeq("SELECT COUNT(*) FROM Sequence WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSeq.bindDataId(1, seq1.id);
     qint64 msa1seq1 = qSeq.selectInt64();
     CHECK_EQUAL(0, msa1seq1, "seq1 of msa1");
@@ -317,7 +317,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2seq, "seq of msa2");
 
     // "Msa"
-    SQLiteQuery qMsa("SELECT COUNT(*) FROM Msa WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qMsa("SELECT COUNT(*) FROM Msa WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qMsa.bindDataId(1, msaId);
     qint64 msa1records = qMsa.selectInt64();
     CHECK_EQUAL(0, msa1records, "number of MSA1 records");
@@ -328,7 +328,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, removeMsaObject) {
     CHECK_EQUAL(1, msa2records, "number of MSA2 records");
 
     // "Object"
-    SQLiteQuery qObj("SELECT COUNT(*) FROM Object WHERE id = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qObj("SELECT COUNT(*) FROM Object WHERE id = ?1", sqliteDbi->getDbRef(), os);
     qObj.bindDataId(1, msaId);
     qint64 msa1objects = qObj.selectInt64();
     CHECK_EQUAL(0, msa1objects, "number of MSA1 objects");
@@ -551,7 +551,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_user3Multi) {
     }
 
     // Verify version in the userModStep
-    SQLiteQuery qVersion("SELECT version FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qVersion("SELECT version FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qVersion.bindDataId(1, msaId);
     if (qVersion.step()) {
         qint64 userStepVersion = qVersion.getInt64(0);
@@ -640,7 +640,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionAfterUndo) {
     SQLiteObjectDbiTestData::addTestRow(msaId, os);
 
     // Check there is no obsolete steps
-    SQLiteQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qUser.bindDataId(1, msaId);
     if (qUser.step()) {
         CHECK_EQUAL(1, qUser.getInt64(0), "number of user steps");
@@ -650,7 +650,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionAfterUndo) {
     }
     CHECK_NO_ERROR(os);
 
-    SQLiteQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSingle.bindDataId(1, msaId);
     if (qSingle.step()) {
         CHECK_EQUAL(1, qSingle.getInt64(0), "number of single steps");
@@ -729,7 +729,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo1) {
     }
 
     // Check there is no obsolete steps
-    SQLiteQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qUser.bindDataId(1, msaId);
     if (qUser.step()) {
         CHECK_EQUAL(1, qUser.getInt64(0), "number of user steps");
@@ -739,7 +739,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo1) {
     }
     CHECK_NO_ERROR(os);
 
-    SQLiteQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSingle.bindDataId(1, msaId);
     if (qSingle.step()) {
         CHECK_EQUAL(1, qSingle.getInt64(0), "number of single steps");
@@ -789,7 +789,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo2) {
     SQLiteObjectDbiTestData::addTestRow(msaId, os);
 
     // Check there is no obsolete steps
-    SQLiteQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qUser.bindDataId(1, msaId);
     if (qUser.step()) {
         CHECK_EQUAL(1, qUser.getInt64(0), "number of user steps");
@@ -799,7 +799,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo2) {
     }
     CHECK_NO_ERROR(os);
 
-    SQLiteQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSingle.bindDataId(1, msaId);
     if (qSingle.step()) {
         CHECK_EQUAL(1, qSingle.getInt64(0), "number of single steps");
@@ -856,7 +856,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo3) {
     }
 
     // Check there is no obsolete steps
-    SQLiteQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qUser.bindDataId(1, msaId);
     if (qUser.step()) {
         CHECK_EQUAL(1, qUser.getInt64(0), "number of user steps");
@@ -866,7 +866,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo3) {
     }
     CHECK_NO_ERROR(os);
 
-    SQLiteQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSingle.bindDataId(1, msaId);
     if (qSingle.step()) {
         CHECK_EQUAL(1, qSingle.getInt64(0), "number of single steps");
@@ -923,7 +923,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo4) {
     SQLiteObjectDbiTestData::addTestRow(msaId, os);
 
     // Check there is no obsolete steps
-    SQLiteQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qUser("SELECT COUNT(*) FROM UserModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qUser.bindDataId(1, msaId);
     if (qUser.step()) {
         CHECK_EQUAL(1, qUser.getInt64(0), "number of user steps");
@@ -933,7 +933,7 @@ IMPLEMENT_TEST(SQLiteObjectDbiUnitTests, commonUndoRedo_actionUndoActionUndo4) {
     }
     CHECK_NO_ERROR(os);
 
-    SQLiteQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qSingle("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qSingle.bindDataId(1, msaId);
     if (qSingle.step()) {
         CHECK_EQUAL(1, qSingle.getInt64(0), "number of single steps");
diff --git a/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.h b/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.h
index 99a90fd..8689017 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.h
+++ b/src/plugins/api_tests/src/core/format/sqlite_object_dbi/SQLiteObjectDbiUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp b/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp
index d023566..e43e14f 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -120,7 +120,7 @@ U2DataId SequenceSQLiteSpecificTestData::createTestSequence(bool enableModTracki
 }
 
 qint64 SequenceSQLiteSpecificTestData::getModStepsNum(const U2DataId& objId, U2OpStatus& os) {
-    SQLiteQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
+    SQLiteReadQuery qModSteps("SELECT COUNT(*) FROM SingleModStep WHERE object = ?1", sqliteDbi->getDbRef(), os);
     qModSteps.bindDataId(1, objId);
     return qModSteps.selectInt64();
 }
diff --git a/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h b/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h
index 0b76236..6044f4f 100644
--- a/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h
+++ b/src/plugins/api_tests/src/core/format/sqlite_sequence_dbi/SequenceDbiSQLiteSpecificUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.cpp
index 399d100..1af9fcd 100644
--- a/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.h
index 4fd7484..4e836ac 100644
--- a/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.h
+++ b/src/plugins/api_tests/src/core/gobjects/BioStruct3DObjectUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.cpp
index 84192de..fb5e29f 100644
--- a/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.h
index 40939c4..df90462 100644
--- a/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.h
+++ b/src/plugins/api_tests/src/core/gobjects/DNAChromatogramObjectUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.cpp b/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.cpp
index c72c8a9..74ba859 100644
--- a/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.cpp
+++ b/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QBitArray>
-#include <QtCore/QDir>
-#include <QtCore/QScopedPointer>
+#include <QBitArray>
+#include <QDir>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObjectConstraints.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.h b/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.h
index 42e7b48..3545d3c 100644
--- a/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.h
+++ b/src/plugins/api_tests/src/core/gobjects/FeaturesTableObjectUnitTest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.cpp
deleted file mode 100644
index 51390af..0000000
--- a/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentObjectUnitTests.h"
-
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/U2MsaDbi.h>
-#include <U2Core/U2ObjectDbi.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-namespace U2 {
-
-TestDbiProvider MAlignmentObjectTestData::dbiProvider = TestDbiProvider();
-const QString& MAlignmentObjectTestData::MAL_OBJ_DB_URL("malignment-object-dbi.ugenedb");
-U2DbiRef MAlignmentObjectTestData::dbiRef =  U2DbiRef();
-
-void MAlignmentObjectTestData::init() {
-    bool ok = dbiProvider.init(MAL_OBJ_DB_URL, false);
-    SAFE_POINT(ok, "Dbi provider failed to initialize in MAlignmentObjectTestData::init()!",);
-
-    U2Dbi* dbi = dbiProvider.getDbi();
-    dbiRef = dbi->getDbiRef();
-    dbiProvider.close();
-}
-
-void MAlignmentObjectTestData::shutdown() {
-    if (dbiRef != U2DbiRef()) {
-        U2OpStatusImpl opStatus;
-        dbiRef = U2DbiRef();
-        dbiProvider.close();
-        SAFE_POINT_OP(opStatus, );
-    }
-}
-
-U2DbiRef MAlignmentObjectTestData::getDbiRef() {
-    if (dbiRef == U2DbiRef()) {
-        init();
-    }
-    return dbiRef;
-}
-
-MAlignmentObject *MAlignmentObjectTestData::getTestAlignmentObject(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
-    const U2EntityRef entityRef = getTestAlignmentRef(dbiRef, name, os);
-    CHECK_OP(os, NULL);
-
-    return new MAlignmentObject(name, entityRef);
-}
-
-U2EntityRef MAlignmentObjectTestData::getTestAlignmentRef(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
-    DbiConnection con(dbiRef, os);
-    CHECK_OP(os, U2EntityRef());
-
-    QScopedPointer<U2DbiIterator<U2DataId> > it(con.dbi->getObjectDbi()->getObjectsByVisualName(name, U2Type::Msa, os));
-    CHECK_OP(os, U2EntityRef());
-
-    CHECK_EXT(it->hasNext(), os.setError(QString("Malignment object '%1' wasn't found in the database").arg(name)), U2EntityRef());
-    const U2DataId msaId = it->next();
-    CHECK_EXT(!msaId.isEmpty(), os.setError(QString("Malignment object '%1' wasn't found in the database").arg(name)), U2EntityRef());
-
-    return U2EntityRef(dbiRef, msaId);
-}
-
-MAlignment MAlignmentObjectTestData::getTestAlignment(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
-    U2EntityRef malignmentRef = getTestAlignmentRef(dbiRef, name, os);
-    CHECK_OP(os, MAlignment());
-
-    MAlignmentExporter exporter;
-    return exporter.getAlignment(dbiRef, malignmentRef.entityId, os);
-}
-
-IMPLEMENT_TEST(MAlignmentObjectUnitTests, getMAlignment) {
-//  Test data:
-//  ---AG-T
-//  AG-CT-TAA
-
-    const QString alName = "Test alignment";
-    const U2DbiRef dbiRef = MAlignmentObjectTestData::getDbiRef();
-    U2OpStatusImpl os;
-
-    QScopedPointer<MAlignmentObject> alObj(MAlignmentObjectTestData::getTestAlignmentObject(dbiRef, alName, os));
-    CHECK_NO_ERROR(os);
-
-    const MAlignment alActual = alObj->getMAlignment();
-
-    const bool alsEqual = (alActual == MAlignmentObjectTestData::getTestAlignment(dbiRef, alName, os));
-    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
-    CHECK_EQUAL(alName, alActual.getName(), "alignment name");
-}
-
-IMPLEMENT_TEST(MAlignmentObjectUnitTests, setMAlignment) {
-//  Test data, alignment 1:
-//  ---AG-T
-//  AG-CT-TAA
-
-//  alignment 2:
-//  AC-GT--AAA
-//  -ACACA-GT
-
-    const QString firstAlignmentName = "Test alignment";
-    const QString secondAlignmentName = "Test alignment 2";
-    const U2DbiRef dbiRef = MAlignmentObjectTestData::getDbiRef();
-    U2OpStatusImpl os;
-
-    QScopedPointer<MAlignmentObject> alObj(MAlignmentObjectTestData::getTestAlignmentObject(dbiRef, firstAlignmentName, os));
-    CHECK_NO_ERROR(os);
-
-    const MAlignment secondAlignment = MAlignmentObjectTestData::getTestAlignment(dbiRef, secondAlignmentName, os);
-    alObj->setMAlignment(secondAlignment);
-    const MAlignment &actualAlignment = alObj->getMAlignment();
-
-    bool alsEqual = (secondAlignment == actualAlignment);
-    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
-    CHECK_EQUAL(secondAlignmentName, actualAlignment.getName(), "alignment name");
-}
-
-IMPLEMENT_TEST( MAlignmentObjectUnitTests, deleteGap_trailingGaps ) {
-//  Test data:
-//  AC-GT--AAA----
-//  -ACA---GTT----
-//  -ACACA-G------
-
-//  Expected result: the same
-
-    const QString malignment = "Alignment with trailing gaps";
-    const U2DbiRef dbiRef = MAlignmentObjectTestData::getDbiRef();
-    U2OpStatusImpl os;
-
-    QScopedPointer<MAlignmentObject> alnObj(MAlignmentObjectTestData::getTestAlignmentObject(dbiRef, malignment, os));
-    CHECK_NO_ERROR(os);
-
-    alnObj->deleteGap(U2Region(0, alnObj->getNumRows()), 10, 3, os);
-
-    const MAlignment &resultAlignment = alnObj->getMAlignment();
-    CHECK_TRUE(resultAlignment.getRow(0).getData() == "AC-GT--AAA-", "First row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(1).getData() == "-ACA---GTT-", "Second row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(2).getData() == "-ACACA-G---", "Third row content is unexpected!");
-}
-
-IMPLEMENT_TEST( MAlignmentObjectUnitTests, deleteGap_regionWithNonGapSymbols ) {
-//  Test data:
-//  AC-GT--AAA----
-//  -ACA---GTT----
-//  -ACACA-G------
-
-//  Expected result: the same
-
-    const QString alignmentName = "Alignment with trailing gaps";
-    const U2DbiRef dbiRef = MAlignmentObjectTestData::getDbiRef();
-    U2OpStatusImpl os;
-
-    QScopedPointer<MAlignmentObject> alnObj(MAlignmentObjectTestData::getTestAlignmentObject(dbiRef, alignmentName, os));
-    CHECK_NO_ERROR( os );
-
-    const int countOfDeleted = alnObj->deleteGap(U2Region(1, alnObj->getNumRows() - 1), 6, 2, os);
-    SAFE_POINT_OP(os, );
-
-    CHECK_TRUE(0 == countOfDeleted, "Unexpected count of removed symbols!");
-    const MAlignment &resultAlignment = alnObj->getMAlignment();
-    CHECK_TRUE(resultAlignment.getRow(0).getData() == "AC-GT--AAA----", "First row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(1).getData() == "-ACA---GTT----", "Second row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(2).getData() == "-ACACA-G------", "Third row content is unexpected!");
-}
-
-IMPLEMENT_TEST( MAlignmentObjectUnitTests, deleteGap_gapRegion ) {
-//  Test data:
-//  AC-GT--AAA----
-//  -ACA---GTT----
-//  -ACACA-G------
-
-//  Expected result:
-//  AC-GTAAA----
-//  -ACA-GTT----
-//  -ACACA-G------
-
-    const QString alignmentName = "Alignment with trailing gaps";
-    const U2DbiRef dbiRef = MAlignmentObjectTestData::getDbiRef();
-    U2OpStatusImpl os;
-
-    QScopedPointer<MAlignmentObject> alnObj(MAlignmentObjectTestData::getTestAlignmentObject(dbiRef, alignmentName, os));
-    CHECK_NO_ERROR(os);
-
-    const int countOfDeleted = alnObj->deleteGap(U2Region(0, alnObj->getNumRows() - 1), 5, 2, os);
-    SAFE_POINT_OP(os, );
-
-    CHECK_TRUE(2 == countOfDeleted, "Unexpected count of removed symbols!");
-    const MAlignment &resultAlignment = alnObj->getMAlignment();
-    CHECK_TRUE(resultAlignment.getRow(0).getData() == "AC-GTAAA---", "First row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(1).getData() == "-ACA-GTT---", "Second row content is unexpected!");
-    CHECK_TRUE(resultAlignment.getRow(2).getData() == "-ACACA-G---", "Third row content is unexpected!");
-}
-
-} // namespace
diff --git a/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.h
deleted file mode 100644
index 4c1168a..0000000
--- a/src/plugins/api_tests/src/core/gobjects/MAlignmentObjectUnitTests.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _MALIGNMENT_OBEJCT_UNIT_TESTS_H_
-#define _MALIGNMENT_OBEJCT_UNIT_TESTS_H_
-
-#include "core/dbi/DbiTest.h"
-
-#include <unittest.h>
-
-#include <U2Core/MAlignment.h>
-#include <U2Core/U2Dbi.h>
-
-
-namespace U2 {
-
-class MAlignmentObject;
-
-class MAlignmentObjectTestData {
-public:
-    static void init();
-    static void shutdown();
-
-    static U2DbiRef getDbiRef();
-
-    static MAlignmentObject *getTestAlignmentObject(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
-    static U2EntityRef getTestAlignmentRef(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
-    static MAlignment getTestAlignment(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
-
-private:
-    static TestDbiProvider dbiProvider;
-    static const QString& MAL_OBJ_DB_URL;
-    static U2DbiRef dbiRef;
-};
-
-DECLARE_TEST(MAlignmentObjectUnitTests, getMAlignment);
-DECLARE_TEST(MAlignmentObjectUnitTests, setMAlignment);
-DECLARE_TEST( MAlignmentObjectUnitTests, deleteGap_trailingGaps );
-DECLARE_TEST( MAlignmentObjectUnitTests, deleteGap_regionWithNonGapSymbols );
-DECLARE_TEST( MAlignmentObjectUnitTests, deleteGap_gapRegion );
-
-} // namespace
-
-DECLARE_METATYPE(MAlignmentObjectUnitTests, getMAlignment);
-DECLARE_METATYPE(MAlignmentObjectUnitTests, setMAlignment);
-DECLARE_METATYPE( MAlignmentObjectUnitTests, deleteGap_trailingGaps );
-DECLARE_METATYPE( MAlignmentObjectUnitTests, deleteGap_regionWithNonGapSymbols );
-DECLARE_METATYPE( MAlignmentObjectUnitTests, deleteGap_gapRegion );
-
-#endif
diff --git a/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.cpp
new file mode 100644
index 0000000..5245132
--- /dev/null
+++ b/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.cpp
@@ -0,0 +1,214 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaObjectUnitTests.h"
+
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2MsaDbi.h>
+#include <U2Core/U2ObjectDbi.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+namespace U2 {
+
+TestDbiProvider MsaObjectTestData::dbiProvider = TestDbiProvider();
+const QString& MsaObjectTestData::MAL_OBJ_DB_URL("malignment-object-dbi.ugenedb");
+U2DbiRef MsaObjectTestData::dbiRef =  U2DbiRef();
+
+void MsaObjectTestData::init() {
+    bool ok = dbiProvider.init(MAL_OBJ_DB_URL, false);
+    SAFE_POINT(ok, "Dbi provider failed to initialize in MsaObjectTestData::init()!",);
+
+    U2Dbi* dbi = dbiProvider.getDbi();
+    dbiRef = dbi->getDbiRef();
+    dbiProvider.close();
+}
+
+void MsaObjectTestData::shutdown() {
+    if (dbiRef != U2DbiRef()) {
+        U2OpStatusImpl opStatus;
+        dbiRef = U2DbiRef();
+        dbiProvider.close();
+        SAFE_POINT_OP(opStatus, );
+    }
+}
+
+U2DbiRef MsaObjectTestData::getDbiRef() {
+    if (dbiRef == U2DbiRef()) {
+        init();
+    }
+    return dbiRef;
+}
+
+MultipleSequenceAlignmentObject *MsaObjectTestData::getTestAlignmentObject(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
+    const U2EntityRef entityRef = getTestAlignmentRef(dbiRef, name, os);
+    CHECK_OP(os, NULL);
+
+    return new MultipleSequenceAlignmentObject(name, entityRef);
+}
+
+U2EntityRef MsaObjectTestData::getTestAlignmentRef(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
+    DbiConnection con(dbiRef, os);
+    CHECK_OP(os, U2EntityRef());
+
+    QScopedPointer<U2DbiIterator<U2DataId> > it(con.dbi->getObjectDbi()->getObjectsByVisualName(name, U2Type::Msa, os));
+    CHECK_OP(os, U2EntityRef());
+
+    CHECK_EXT(it->hasNext(), os.setError(QString("Malignment object '%1' wasn't found in the database").arg(name)), U2EntityRef());
+    const U2DataId msaId = it->next();
+    CHECK_EXT(!msaId.isEmpty(), os.setError(QString("Malignment object '%1' wasn't found in the database").arg(name)), U2EntityRef());
+
+    return U2EntityRef(dbiRef, msaId);
+}
+
+MultipleSequenceAlignment MsaObjectTestData::getTestAlignment(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os) {
+    U2EntityRef malignmentRef = getTestAlignmentRef(dbiRef, name, os);
+    CHECK_OP(os, MultipleSequenceAlignment());
+
+    MultipleSequenceAlignmentExporter exporter;
+    return exporter.getAlignment(dbiRef, malignmentRef.entityId, os);
+}
+
+IMPLEMENT_TEST(MsaObjectUnitTests, getMAlignment) {
+//  Test data:
+//  ---AG-T
+//  AG-CT-TAA
+
+    const QString alName = "Test alignment";
+    const U2DbiRef dbiRef = MsaObjectTestData::getDbiRef();
+    U2OpStatusImpl os;
+
+    QScopedPointer<MultipleSequenceAlignmentObject> alObj(MsaObjectTestData::getTestAlignmentObject(dbiRef, alName, os));
+    CHECK_NO_ERROR(os);
+
+    const MultipleSequenceAlignment alActual = alObj->getMultipleAlignment();
+
+    const bool alsEqual = (*alActual == *MsaObjectTestData::getTestAlignment(dbiRef, alName, os));
+    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
+    CHECK_EQUAL(alName, alActual->getName(), "alignment name");
+}
+
+IMPLEMENT_TEST(MsaObjectUnitTests, setMAlignment) {
+//  Test data, alignment 1:
+//  ---AG-T
+//  AG-CT-TAA
+
+//  alignment 2:
+//  AC-GT--AAA
+//  -ACACA-GT
+
+    const QString firstAlignmentName = "Test alignment";
+    const QString secondAlignmentName = "Test alignment 2";
+    const U2DbiRef dbiRef = MsaObjectTestData::getDbiRef();
+    U2OpStatusImpl os;
+
+    QScopedPointer<MultipleSequenceAlignmentObject> alObj(MsaObjectTestData::getTestAlignmentObject(dbiRef, firstAlignmentName, os));
+    CHECK_NO_ERROR(os);
+
+    const MultipleSequenceAlignment secondAlignment = MsaObjectTestData::getTestAlignment(dbiRef, secondAlignmentName, os);
+    alObj->setMultipleAlignment(secondAlignment);
+    const MultipleSequenceAlignment actualAlignment = alObj->getMultipleAlignment();
+
+    bool alsEqual = (*secondAlignment == *actualAlignment);
+    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
+    CHECK_EQUAL(secondAlignmentName, actualAlignment->getName(), "alignment name");
+}
+
+IMPLEMENT_TEST( MsaObjectUnitTests, deleteGap_trailingGaps ) {
+//  Test data:
+//  AC-GT--AAA----
+//  -ACA---GTT----
+//  -ACACA-G------
+
+//  Expected result: the same
+
+    const QString malignment = "Alignment with trailing gaps";
+    const U2DbiRef dbiRef = MsaObjectTestData::getDbiRef();
+    U2OpStatusImpl os;
+
+    QScopedPointer<MultipleSequenceAlignmentObject> alnObj(MsaObjectTestData::getTestAlignmentObject(dbiRef, malignment, os));
+    CHECK_NO_ERROR(os);
+
+    alnObj->deleteGap(os, U2Region(0, alnObj->getNumRows()), 10, 3);
+
+    const MultipleSequenceAlignment resultAlignment = alnObj->getMultipleAlignment();
+    CHECK_TRUE(resultAlignment->getMsaRow(0)->getData() == "AC-GT--AAA-", "First row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(1)->getData() == "-ACA---GTT-", "Second row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(2)->getData() == "-ACACA-G---", "Third row content is unexpected!");
+}
+
+IMPLEMENT_TEST( MsaObjectUnitTests, deleteGap_regionWithNonGapSymbols ) {
+//  Test data:
+//  AC-GT--AAA----
+//  -ACA---GTT----
+//  -ACACA-G------
+
+//  Expected result: the same
+
+    const QString alignmentName = "Alignment with trailing gaps";
+    const U2DbiRef dbiRef = MsaObjectTestData::getDbiRef();
+    U2OpStatusImpl os;
+
+    QScopedPointer<MultipleSequenceAlignmentObject> alnObj(MsaObjectTestData::getTestAlignmentObject(dbiRef, alignmentName, os));
+    CHECK_NO_ERROR( os );
+
+    const int countOfDeleted = alnObj->deleteGap(os, U2Region(1, alnObj->getNumRows() - 1), 6, 2);
+    SAFE_POINT_OP(os, );
+
+    CHECK_TRUE(0 == countOfDeleted, "Unexpected count of removed symbols!");
+    const MultipleSequenceAlignment resultAlignment = alnObj->getMultipleAlignment();
+    CHECK_TRUE(resultAlignment->getMsaRow(0)->getData() == "AC-GT--AAA----", "First row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(1)->getData() == "-ACA---GTT----", "Second row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(2)->getData() == "-ACACA-G------", "Third row content is unexpected!");
+}
+
+IMPLEMENT_TEST( MsaObjectUnitTests, deleteGap_gapRegion ) {
+//  Test data:
+//  AC-GT--AAA----
+//  -ACA---GTT----
+//  -ACACA-G------
+
+//  Expected result:
+//  AC-GTAAA----
+//  -ACA-GTT----
+//  -ACACA-G------
+
+    const QString alignmentName = "Alignment with trailing gaps";
+    const U2DbiRef dbiRef = MsaObjectTestData::getDbiRef();
+    U2OpStatusImpl os;
+
+    QScopedPointer<MultipleSequenceAlignmentObject> alnObj(MsaObjectTestData::getTestAlignmentObject(dbiRef, alignmentName, os));
+    CHECK_NO_ERROR(os);
+
+    const int countOfDeleted = alnObj->deleteGap(os, U2Region(0, alnObj->getNumRows() - 1), 5, 2);
+    SAFE_POINT_OP(os, );
+
+    CHECK_TRUE(2 == countOfDeleted, "Unexpected count of removed symbols!");
+    const MultipleSequenceAlignment resultAlignment = alnObj->getMultipleAlignment();
+    CHECK_TRUE(resultAlignment->getMsaRow(0)->getData() == "AC-GTAAA---", "First row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(1)->getData() == "-ACA-GTT---", "Second row content is unexpected!");
+    CHECK_TRUE(resultAlignment->getMsaRow(2)->getData() == "-ACACA-G---", "Third row content is unexpected!");
+}
+
+} // namespace
diff --git a/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.h
new file mode 100644
index 0000000..3462f6a
--- /dev/null
+++ b/src/plugins/api_tests/src/core/gobjects/MsaObjectUnitTests.h
@@ -0,0 +1,68 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _MSA_OBEJCT_UNIT_TESTS_H_
+#define _MSA_OBEJCT_UNIT_TESTS_H_
+
+#include "core/dbi/DbiTest.h"
+
+#include <unittest.h>
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2Dbi.h>
+
+
+namespace U2 {
+
+class MultipleSequenceAlignmentObject;
+
+class MsaObjectTestData {
+public:
+    static void init();
+    static void shutdown();
+
+    static U2DbiRef getDbiRef();
+
+    static MultipleSequenceAlignmentObject *getTestAlignmentObject(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
+    static U2EntityRef getTestAlignmentRef(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
+    static MultipleSequenceAlignment getTestAlignment(const U2DbiRef &dbiRef, const QString &name, U2OpStatus &os);
+
+private:
+    static TestDbiProvider dbiProvider;
+    static const QString& MAL_OBJ_DB_URL;
+    static U2DbiRef dbiRef;
+};
+
+DECLARE_TEST(MsaObjectUnitTests, getMAlignment);
+DECLARE_TEST(MsaObjectUnitTests, setMAlignment);
+DECLARE_TEST( MsaObjectUnitTests, deleteGap_trailingGaps );
+DECLARE_TEST( MsaObjectUnitTests, deleteGap_regionWithNonGapSymbols );
+DECLARE_TEST( MsaObjectUnitTests, deleteGap_gapRegion );
+
+} // namespace
+
+DECLARE_METATYPE(MsaObjectUnitTests, getMAlignment);
+DECLARE_METATYPE(MsaObjectUnitTests, setMAlignment);
+DECLARE_METATYPE( MsaObjectUnitTests, deleteGap_trailingGaps );
+DECLARE_METATYPE( MsaObjectUnitTests, deleteGap_regionWithNonGapSymbols );
+DECLARE_METATYPE( MsaObjectUnitTests, deleteGap_gapRegion );
+
+#endif
diff --git a/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.cpp
index 2bc715c..dd7a5b5 100644
--- a/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.h
index 15a0882..252528f 100644
--- a/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.h
+++ b/src/plugins/api_tests/src/core/gobjects/PhyTreeObjectUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.cpp b/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.cpp
index b52b67a..75cdbb0 100644
--- a/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.h b/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.h
index 70a188a..e3b3fed 100644
--- a/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.h
+++ b/src/plugins/api_tests/src/core/gobjects/TextObjectUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.cpp b/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.cpp
index b81b5e5..86fd96c 100644
--- a/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.cpp
+++ b/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.h b/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.h
index 295fdd0..fb5abfc 100644
--- a/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.h
+++ b/src/plugins/api_tests/src/core/util/DatatypeSerializeUtilsUnitTest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.cpp b/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.cpp
deleted file mode 100644
index 23d123a..0000000
--- a/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include "MAlignmentImporterExporterUnitTests.h"
-
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Formats/SQLiteDbi.h>
-
-
-namespace U2 {
-
-TestDbiProvider MAlignmentImporterExporterTestData::dbiProvider = TestDbiProvider();
-const QString& MAlignmentImporterExporterTestData::IMP_EXP_DB_URL("imp-exp-dbi.ugenedb");
-U2DbiRef MAlignmentImporterExporterTestData::dbiRef = U2DbiRef();
-
-void MAlignmentImporterExporterTestData::init() {
-    bool ok = dbiProvider.init(IMP_EXP_DB_URL, false);
-    SAFE_POINT(ok, "Dbi provider failed to initialize in MsaTestData::init()!",);
-
-    U2Dbi* dbi = dbiProvider.getDbi();
-    dbiRef = dbi->getDbiRef();
-    dbiProvider.close();
-}
-
-const U2DbiRef& MAlignmentImporterExporterTestData::getDbiRef() {
-    if (dbiRef == U2DbiRef()) {
-        init();
-    }
-    return dbiRef;
-}
-
-
-IMPLEMENT_TEST(MAlignmentImporterExporterUnitTests, importExportAlignment) {
-    const U2DbiRef& dbiRef = MAlignmentImporterExporterTestData::getDbiRef();
-
-    U2OpStatusImpl os;
-
-    // Init an alignment
-    QString alignmentName = "Test alignment";
-    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
-    const DNAAlphabet* alphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-
-    QByteArray firstSequence("---AG-T");
-    QByteArray secondSequence("AG-CT-TAA");
-
-    MAlignment al(alignmentName, alphabet);
-
-    al.addRow("First row", firstSequence, os);
-    CHECK_NO_ERROR(os);
-
-    al.addRow("Second row", secondSequence, os);
-    CHECK_NO_ERROR(os);
-
-    // Import the alignment
-    QScopedPointer<MAlignmentObject> msaObj(MAlignmentImporter::createAlignment(dbiRef, al, os));
-    CHECK_NO_ERROR(os);
-
-    // Export the alignment
-    MAlignmentExporter alExporter;
-    MAlignment alActual = alExporter.getAlignment(dbiRef, msaObj->getEntityRef().entityId, os);
-    CHECK_NO_ERROR(os);
-
-    bool alsEqual = (al == alActual);
-    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
-    CHECK_EQUAL(alignmentName, alActual.getName(), "alignment name");
-}
-
-
-}
diff --git a/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.h b/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.h
deleted file mode 100644
index fdd6d86..0000000
--- a/src/plugins/api_tests/src/core/util/MAlignmentImporterExporterUnitTests.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_MALIGNMENT_IMPORTER_EXPORTER_UNIT_TESTS_H_
-#define _U2_MALIGNMENT_IMPORTER_EXPORTER_UNIT_TESTS_H_
-
-#include "core/dbi/DbiTest.h"
-
-#include <U2Core/U2DbiUtils.h>
-
-#include <unittest.h>
-
-
-namespace U2 {
-
-class MAlignmentImporterExporterTestData {
-public:
-    static void init();
-
-    static const U2DbiRef& getDbiRef();
-
-private:
-    static TestDbiProvider dbiProvider;
-    static const QString& IMP_EXP_DB_URL;
-    static U2DbiRef dbiRef;
-};
-
-DECLARE_TEST(MAlignmentImporterExporterUnitTests, importExportAlignment);
-
-} // namespace
-
-DECLARE_METATYPE(MAlignmentImporterExporterUnitTests, importExportAlignment);
-
-#endif
diff --git a/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.cpp b/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.cpp
index 8510a13..0e7417b 100644
--- a/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/U2SequenceDbi.h>
 #include <U2Core/U2MsaDbi.h>
 #include <U2Core/MsaDbiUtils.h>
-#include <U2Core/MAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
 #include <U2Core/U2AlphabetUtils.h>
 
 namespace U2 {
@@ -134,7 +134,7 @@ U2EntityRef MsaDbiUtilsTestUtils::initTestAlignment(const QStringList& rowsData
     for (int i = 0; i < rowCount; ++i) {
         QByteArray seqData;
         QList<U2MsaGap> gapModel;
-        MsaDbiUtils::splitBytesToCharsAndGaps(rowsData[i].toLatin1(), seqData, gapModel);
+        MaDbiUtils::splitBytesToCharsAndGaps(rowsData[i].toLatin1(), seqData, gapModel);
 
         U2Sequence sequence;
         sequence.alphabet = BaseDNAAlphabetIds::NUCL_DNA_DEFAULT();
@@ -288,7 +288,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddle) {
     rowsToMove << allRows[3].rowId;
 
     int delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -305,7 +305,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddle) {
     rowsToMove << allRows[3].rowId;
 
     delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -331,7 +331,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheTop) {
     rowsToMove << allRows[3].rowId;
 
     int delta = -3;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -348,7 +348,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheTop) {
     rowsToMove << allRows[3].rowId;
 
     delta = -4;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -361,7 +361,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheTop) {
     rowsToMove << allRows[3].rowId;
 
     delta = -2;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -387,7 +387,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheBottom) {
     rowsToMove << allRows[3].rowId;
 
     int delta = 3;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -404,7 +404,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheBottom) {
     rowsToMove << allRows[3].rowId;
 
     delta = 4;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -417,7 +417,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneLineInMiddleToTheBottom) {
     rowsToMove << allRows[3].rowId;
 
     delta = 2;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -444,7 +444,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneBlockInMiddle) {
     rowsToMove << allRows[3].rowId << allRows[4].rowId;
 
     int delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -462,7 +462,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneBlockInMiddle) {
     rowsToMove << allRows[3].rowId << allRows[4].rowId;
 
     delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -489,7 +489,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneBlockInMiddleToTheOutside) {
     rowsToMove << allRows[3].rowId << allRows[4].rowId;
 
     int delta = -9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -507,7 +507,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_oneBlockInMiddleToTheOutside) {
     rowsToMove << allRows[3].rowId << allRows[4].rowId;
 
     delta = 9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -534,7 +534,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksInMiddleWithoutGluing) {
     rowsToMove << allRows[2].rowId << allRows[4].rowId;
 
     int delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -552,7 +552,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksInMiddleWithoutGluing) {
     rowsToMove << allRows[2].rowId << allRows[4].rowId;
 
     delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -579,7 +579,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksInMiddleWithGluing) {
     rowsToMove << allRows[2].rowId << allRows[4].rowId;
 
     int delta = -9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -597,7 +597,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksInMiddleWithGluing) {
     rowsToMove << allRows[2].rowId << allRows[4].rowId;
 
     delta = 9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -624,7 +624,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnTopWithoutGluing) {
     rowsToMove << allRows[0].rowId << allRows[3].rowId;
 
     int delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -642,7 +642,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnTopWithoutGluing) {
     rowsToMove << allRows[0].rowId << allRows[3].rowId;
 
     delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -669,7 +669,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnTopWithGluing) {
     rowsToMove << allRows[0].rowId << allRows[3].rowId;
 
     int delta = -9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -687,7 +687,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnTopWithGluing) {
     rowsToMove << allRows[0].rowId << allRows[3].rowId;
 
     delta = 9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -714,7 +714,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnBottomWithoutGluing) {
     rowsToMove << allRows[3].rowId << allRows[6].rowId;
 
     int delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -732,7 +732,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnBottomWithoutGluing) {
     rowsToMove << allRows[3].rowId << allRows[6].rowId;
 
     delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -759,7 +759,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnBottomWithGluing) {
     rowsToMove << allRows[3].rowId << allRows[6].rowId;
 
     int delta = 9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -777,7 +777,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_twoBlocksOnBottomWithGluing) {
     rowsToMove << allRows[3].rowId << allRows[6].rowId;
 
     delta = -9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -805,7 +805,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithoutGluing) {
     rowsToMove << allRows[0].rowId << allRows[4].rowId << allRows[6].rowId;
 
     int delta = -1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -824,7 +824,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithoutGluing) {
     rowsToMove << allRows[0].rowId << allRows[2].rowId << allRows[6].rowId;
 
     delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -852,7 +852,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithOnceGluing) {
     rowsToMove << allRows[0].rowId << allRows[2].rowId << allRows[6].rowId;
 
     int delta = -3;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -871,7 +871,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithOnceGluing) {
     rowsToMove << allRows[0].rowId << allRows[2].rowId << allRows[6].rowId;
 
     delta = 3;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -899,7 +899,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithTwiceGluing) {
     rowsToMove << allRows[0].rowId << allRows[2].rowId << allRows[6].rowId;
 
     int delta = -9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     QStringList actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -918,7 +918,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_threeBlocksWithTwiceGluing) {
     rowsToMove << allRows[0].rowId << allRows[2].rowId << allRows[6].rowId;
 
     delta = 9;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     CHECK_NO_ERROR(os);
 
     actual = MsaDbiUtilsTestUtils::getRowNames(msaRef);
@@ -938,7 +938,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_UnorderedList) {
     rowsToMove << allRows[5].rowId << allRows[3].rowId;
 
     int delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     if (!(!os.isCanceled() && os.hasError() && os.getError() == "List of rows to move is not ordered")) {
         CHECK_TRUE(false, "List not ordered");
     }
@@ -956,7 +956,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, moveRows_InvalidRowList) {
     rowsToMove << -1;
 
     int delta = 1;
-    MsaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
+    MaDbiUtils::moveRows(msaRef, rowsToMove, delta, os);
     if (!(!os.isCanceled() && os.hasError() && os.getError() == "Invalid row list")) {
         CHECK_TRUE(false, "Invalid row list");
     }
@@ -974,16 +974,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_noGaps) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1001,16 +1001,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_leadingGaps) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1028,16 +1028,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_trailingGaps) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1055,16 +1055,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_leadingGapsCutOff) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1082,16 +1082,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_trailingGapsCutOff) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1109,16 +1109,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_leadingAndTrailingGaps) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(8, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(8, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1136,16 +1136,16 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, trim_gapsOnly) {
     MsaDbiUtils::trim(msaRef, os);
 
     //Check actual state
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(0, al.getLength(), "Wrong msa length.");
-    CHECK_EQUAL(expected.length(), al.getNumRows(), "Wrong rows count.");
+    CHECK_EQUAL(0, al->getLength(), "Wrong msa length.");
+    CHECK_EQUAL(expected.length(), al->getNumRows(), "Wrong rows count.");
 
     QStringList actual;
-    actual << al.getRow(0).toByteArray(al.getLength(), os);
-    actual << al.getRow(1).toByteArray(al.getLength(), os);
-    actual << al.getRow(2).toByteArray(al.getLength(), os);
+    actual << al->getMsaRow(0)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(1)->toByteArray(os, al->getLength());
+    actual << al->getMsaRow(2)->toByteArray(os, al->getLength());
     for (int i = 0; i < expected.length(); ++i) {
         CHECK_EQUAL(expected[i], actual[i], "Wrong msa data.");
     }
@@ -1165,14 +1165,14 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_oneRow) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 8, 3, os);
     CHECK_NO_ERROR(os);
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(14, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(14, al->getLength(), "Wrong msa length");
 
-    QByteArray row0 = al.getRow(0).toByteArray(al.getLength(), os);
-    QByteArray row1 = al.getRow(1).toByteArray(al.getLength(), os);
-    QByteArray row2 = al.getRow(2).toByteArray(al.getLength(), os);
+    QByteArray row0 = al->getMsaRow(0)->toByteArray(os, al->getLength());
+    QByteArray row1 = al->getMsaRow(1)->toByteArray(os, al->getLength());
+    QByteArray row2 = al->getMsaRow(2)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("TAAGACTTCTAA--"), QString(row0), "Wrong msa row");
     CHECK_EQUAL(QString("TAAGCTTA------"), QString(row1), "Wrong msa row");
     CHECK_EQUAL(QString("TTAGTTTATTA---"), QString(row2), "Wrong msa row");
@@ -1192,14 +1192,14 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_threeRows) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 2, 8, os);
     CHECK_NO_ERROR(os);
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(14, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(14, al->getLength(), "Wrong msa length");
 
-    QByteArray row1 = al.getRow(1).toByteArray(al.getLength(), os);
-    QByteArray row5 = al.getRow(5).toByteArray(al.getLength(), os);
-    QByteArray row8 = al.getRow(8).toByteArray(al.getLength(), os);
+    QByteArray row1 = al->getMsaRow(1)->toByteArray(os, al->getLength());
+    QByteArray row5 = al->getMsaRow(5)->toByteArray(os, al->getLength());
+    QByteArray row8 = al->getMsaRow(8)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("TAA-----------"), QString(row1), "Wrong msa row");
     CHECK_EQUAL(QString("T-ACTA--------"), QString(row5), "Wrong msa row");
     CHECK_EQUAL(QString("TTA-----------"), QString(row8), "Wrong msa row");
@@ -1219,15 +1219,15 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_lengthChange) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 5, 1, os);
     CHECK_NO_ERROR(os);
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(14, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(14, al->getLength(), "Wrong msa length");
 
-    QByteArray row3 = al.getRow(3).toByteArray(al.getLength(), os);
-    QByteArray row4 = al.getRow(4).toByteArray(al.getLength(), os);
-    QByteArray row5 = al.getRow(5).toByteArray(al.getLength(), os);
-    QByteArray row6 = al.getRow(6).toByteArray(al.getLength(), os);
+    QByteArray row3 = al->getMsaRow(3)->toByteArray(os, al->getLength());
+    QByteArray row4 = al->getMsaRow(4)->toByteArray(os, al->getLength());
+    QByteArray row5 = al->getMsaRow(5)->toByteArray(os, al->getLength());
+    QByteArray row6 = al->getMsaRow(6)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("T--CAGTCTATTA-"), QString(row3), "Wrong msa row");
     CHECK_EQUAL(QString("T--CAGTTTATTA-"), QString(row4), "Wrong msa row");
     CHECK_EQUAL(QString("T--TAGTCTACTA-"), QString(row5), "Wrong msa row");
@@ -1248,24 +1248,24 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_allRows) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 0, 3, os);
     CHECK_NO_ERROR(os);
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
-    CHECK_NO_ERROR(os);
-    CHECK_EQUAL(11, al.getLength(), "Wrong msa length");
-
-    QByteArray row0 = al.getRow(0).toByteArray(al.getLength(), os);
-    QByteArray row1 = al.getRow(1).toByteArray(al.getLength(), os);
-    QByteArray row2 = al.getRow(2).toByteArray(al.getLength(), os);
-    QByteArray row3 = al.getRow(3).toByteArray(al.getLength(), os);
-    QByteArray row4 = al.getRow(4).toByteArray(al.getLength(), os);
-    QByteArray row5 = al.getRow(5).toByteArray(al.getLength(), os);
-    QByteArray row6 = al.getRow(6).toByteArray(al.getLength(), os);
-    QByteArray row7 = al.getRow(7).toByteArray(al.getLength(), os);
-    QByteArray row8 = al.getRow(8).toByteArray(al.getLength(), os);
-    QByteArray row9 = al.getRow(9).toByteArray(al.getLength(), os);
-    QByteArray row10 = al.getRow(10).toByteArray(al.getLength(), os);
-    QByteArray row11 = al.getRow(11).toByteArray(al.getLength(), os);
-    QByteArray row12 = al.getRow(12).toByteArray(al.getLength(), os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    CHECK_NO_ERROR(os);
+    CHECK_EQUAL(11, al->getLength(), "Wrong msa length");
+
+    QByteArray row0 = al->getMsaRow(0)->toByteArray(os, al->getLength());
+    QByteArray row1 = al->getMsaRow(1)->toByteArray(os, al->getLength());
+    QByteArray row2 = al->getMsaRow(2)->toByteArray(os, al->getLength());
+    QByteArray row3 = al->getMsaRow(3)->toByteArray(os, al->getLength());
+    QByteArray row4 = al->getMsaRow(4)->toByteArray(os, al->getLength());
+    QByteArray row5 = al->getMsaRow(5)->toByteArray(os, al->getLength());
+    QByteArray row6 = al->getMsaRow(6)->toByteArray(os, al->getLength());
+    QByteArray row7 = al->getMsaRow(7)->toByteArray(os, al->getLength());
+    QByteArray row8 = al->getMsaRow(8)->toByteArray(os, al->getLength());
+    QByteArray row9 = al->getMsaRow(9)->toByteArray(os, al->getLength());
+    QByteArray row10 = al->getMsaRow(10)->toByteArray(os, al->getLength());
+    QByteArray row11 = al->getMsaRow(11)->toByteArray(os, al->getLength());
+    QByteArray row12 = al->getMsaRow(12)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("GACTTCTAA--"), QString(row0), "Wrong msa row");
     CHECK_EQUAL(QString("GCTTACTA---"), QString(row1), "Wrong msa row");
     CHECK_EQUAL(QString("GTTTATTA---"), QString(row2), "Wrong msa row");
@@ -1295,13 +1295,13 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_all) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 0, 14, os);
     CHECK_NO_ERROR(os);
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(0, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(0, al->getLength(), "Wrong msa length");
 
-    QByteArray row0 = al.getRow(0).toByteArray(al.getLength(), os);
-    QByteArray row12 = al.getRow(12).toByteArray(al.getLength(), os);
+    QByteArray row0 = al->getMsaRow(0)->toByteArray(os, al->getLength());
+    QByteArray row12 = al->getMsaRow(12)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString(""), QString(row0), "Wrong msa row");
     CHECK_EQUAL(QString(""), QString(row12), "Wrong msa row");
 }
@@ -1321,12 +1321,12 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_negativePos) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, -1, 14, tmpOs);
     CHECK_TRUE(tmpOs.hasError(), "No error occurred for negative pos");
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(14, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(14, al->getLength(), "Wrong msa length");
 
-    QByteArray row0 = al.getRow(0).toByteArray(al.getLength(), os);
+    QByteArray row0 = al->getMsaRow(0)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("TAAGACTTCTAA--"), QString(row0), "Wrong msa row");
 }
 
@@ -1365,12 +1365,12 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, removeRegion_wrongCount) {
     MsaDbiUtils::removeRegion(msaRef, rowIds, 0, 0, tmpOs);
     CHECK_TRUE(tmpOs.hasError(), "No error occurred for negative pos");
 
-    MAlignmentExporter ex;
-    MAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
+    MultipleSequenceAlignmentExporter ex;
+    MultipleSequenceAlignment al = ex.getAlignment(msaRef.dbiRef, msaRef.entityId, os);
     CHECK_NO_ERROR(os);
-    CHECK_EQUAL(14, al.getLength(), "Wrong msa length");
+    CHECK_EQUAL(14, al->getLength(), "Wrong msa length");
 
-    QByteArray row0 = al.getRow(0).toByteArray(al.getLength(), os);
+    QByteArray row0 = al->getMsaRow(0)->toByteArray(os, al->getLength());
     CHECK_EQUAL(QString("TAAGACTTCTAA--"), QString(row0), "Wrong msa row");
 }
 
@@ -1385,17 +1385,13 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_empty) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Call test function
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1414,22 +1410,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_empty) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1444,17 +1440,13 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_nothingNew) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1477,22 +1469,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_nothingNew) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1507,24 +1499,20 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newOrder) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Change order of rows
-    ma.moveRowsBlock(1, 1, 1);
+    ma->moveRowsBlock(1, 1, 1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Test call with new row order
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1543,22 +1531,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newOrder) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1573,24 +1561,20 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newName) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Change alignemnt name
-    ma.setName("New name");
+    ma->setName("New name");
 
     // Test call with new alignment name
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1609,22 +1593,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newName) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1639,17 +1623,13 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newAlphabet) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1657,7 +1637,7 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newAlphabet) {
 
     // Change alignment alphabet
     const DNAAlphabet* newAlphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_EXTENDED());
-    ma.setAlphabet(newAlphabet);
+    ma->setAlphabet(newAlphabet);
 
     // Test call with new alphabet
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1676,22 +1656,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newAlphabet) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1706,24 +1686,20 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newContent) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Change sequence data in the second row
-    ma.setRowContent(1, "AA--AA--AA--AA");
+    ma->setRowContent(1, "AA--AA--AA--AA");
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Test call with changed data in second row
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1742,22 +1718,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newContent) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1772,24 +1748,19 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newSequence) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
-
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Export an alignment from the dbi to the memory (to set actual IDs)
-    MAlignmentExporter exporter;
-    MAlignment expMa;
+    MultipleSequenceAlignmentExporter exporter;
+    MultipleSequenceAlignment expMa;
     expMa = exporter.getAlignment(dbiRef, msaId, os);
     CHECK_NO_ERROR(os);
 
@@ -1800,15 +1771,15 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newSequence) {
     seqDbi->createSequenceObject(newSeq, "", os);
     CHECK_NO_ERROR(os);
 
-    U2MsaRow changedRow = expMa.getRow(1).getRowDBInfo();
+    U2MsaRow changedRow = expMa->getMsaRow(1)->getRowDbInfo();
     changedRow.sequenceId = newSeq.id;
-    expMa.removeRow(1, os);
+    expMa->removeRow(1, os);
     CHECK_NO_ERROR(os);
     DNASequence newDnaSeq("New sequence", "CGCGCGAAT");
-    expMa.addRow(changedRow, newDnaSeq, os);
+    expMa->addRow(changedRow, newDnaSeq, os);
     CHECK_NO_ERROR(os);
 
-    QList<MAlignmentRow> expMaRows = expMa.getRows();
+    QList<MultipleSequenceAlignmentRow> expMaRows = expMa->getMsaRows();
 
     // Test call with changed sequence ID
     MsaDbiUtils::updateMsa(msaRef, expMa, os);
@@ -1827,22 +1798,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_newSequence) {
     CHECK_EQUAL(expMaRows.count(), rows.count(), "rows count");
     for (int i = 0; i < expMaRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(expMaRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(expMaRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(expMaRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(expMaRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(expMaRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(expMaRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(expMaRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(expMaRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(expMaRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(expMaRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(expMaRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(expMaRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(expMaRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(expMaRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1857,27 +1828,21 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_additionalRows) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Add new rows to the alignment
-    ma.addRow("5", "ATATATATAT", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("6", "CGCG--CGCG", -1, os);
-    CHECK_NO_ERROR(os);
+    ma->addRow("5", "ATATATATAT", -1);
+    ma->addRow("6", "CGCG--CGCG", -1);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Test call without new information
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1896,22 +1861,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_additionalRows) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1926,27 +1891,23 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_removeRows) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Remove some rows from the alignment
-    ma.removeRow(1, os);
+    ma->removeRow(1, os);
     CHECK_NO_ERROR(os);
-    ma.removeRow(2, os);
+    ma->removeRow(2, os);
     CHECK_NO_ERROR(os);
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Test call without some rows
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -1965,22 +1926,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_removeRows) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
@@ -1995,24 +1956,20 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_clear) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
-    ma.addRow("1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma.addRow("4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma(MsaDbiUtilsTestUtils::alignmentName, alphabet);
+    ma->addRow("1", "AAAA--AAA", -1);
+    ma->addRow("2", "C--CCCCCC", -1);
+    ma->addRow("3", "GG-GGGG-G", -1);
+    ma->addRow("4", "TTT-TTTT", -1);
 
     // The first call is correct (updateMsa_empty test)
     MsaDbiUtils::updateMsa(msaRef, ma, os);
     CHECK_NO_ERROR(os);
 
     // Clear alignment
-    ma.clear();
+    ma->clear();
 
-    QList<MAlignmentRow> maRows = ma.getRows();
+    QList<MultipleSequenceAlignmentRow> maRows = ma->getMsaRows();
 
     // Test call with empty alignment
     MsaDbiUtils::updateMsa(msaRef, ma, os);
@@ -2031,22 +1988,22 @@ IMPLEMENT_TEST(MsaDbiUtilsUnitTests, updateMsa_clear) {
     CHECK_EQUAL(maRows.count(), rows.count(), "rows count");
     for (int i = 0; i < maRows.count(); ++i) {
         // Verify row object
-        CHECK_EQUAL(maRows[i].getCoreStart(), rows[i].gstart, "row start");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), rows[i].gend, "row end");
-        CHECK_EQUAL(maRows[i].getRowLengthWithoutTrailing(), rows[i].length, "row length");
-        CHECK_TRUE(maRows[i].getGapModel() == rows[i].gaps, "row gaps");
+        CHECK_EQUAL(maRows[i]->getCoreStart(), rows[i].gstart, "row start");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), rows[i].gend, "row end");
+        CHECK_EQUAL(maRows[i]->getRowLengthWithoutTrailing(), rows[i].length, "row length");
+        CHECK_TRUE(maRows[i]->getGapModel() == rows[i].gaps, "row gaps");
 
         // Verify sequence object
         U2Sequence seq = seqDbi->getSequenceObject(rows[i].sequenceId, os);
         CHECK_NO_ERROR(os);
         CHECK_EQUAL(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT(), seq.alphabet.id, "sequence alphabet");
-        CHECK_EQUAL(maRows[i].getUngappedLength(), seq.length, "sequence length");
-        CHECK_EQUAL(maRows[i].getSequence().getName(), seq.visualName, "sequence name");
+        CHECK_EQUAL(maRows[i]->getUngappedLength(), seq.length, "sequence length");
+        CHECK_EQUAL(maRows[i]->getSequence().getName(), seq.visualName, "sequence name");
 
         // Verify sequence data
         QByteArray seqData = seqDbi->getSequenceData(rows[i].sequenceId, U2_REGION_MAX, os);
         CHECK_NO_ERROR(os);
-        CHECK_EQUAL(QString(maRows[i].getSequence().constSequence()), QString(seqData), "sequence data");
+        CHECK_EQUAL(QString(maRows[i]->getSequence().constSequence()), QString(seqData), "sequence data");
     }
 }
 
diff --git a/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.h b/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.h
index 9380350..9c705f4 100644
--- a/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.h
+++ b/src/plugins/api_tests/src/core/util/MsaDbiUtilsUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #ifndef _U2_MSA_DBI_UTILS_UNIT_TESTS_H_
 #define _U2_MSA_DBI_UTILS_UNIT_TESTS_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <unittest.h>
 
@@ -149,18 +149,18 @@ DECLARE_TEST(MsaDbiUtilsUnitTests, removeRegion_wrongId);
 DECLARE_TEST(MsaDbiUtilsUnitTests, removeRegion_wrongCount);
 
 /**
-  * updateMsa - updates a Msa in a database with data from a MAlignment.
+  * updateMsa - updates a Msa in a database with data from a MultipleSequenceAlignment.
   * The msa stored in the database is not empty by default.
-  *     ^   empty               - there is the empty msa stored in the database, the MAlignment contains new rows.
-  *     ^   nothingNew          - the MAlignment contains the same information.
-  *     ^   newOrder            - the MAlignment contains the same rows in other order.
-  *     ^   newName             - the MAlignment contains the same rows, the msa name changes.
-  *     ^   newAlphabet         - the MAlignment contains the same rows, the msa alphabet changes.
-  *     ^   newContent          - the MAlignment doesn't contain new rows, some rows data changes.
-  *     ^   newSequence         - the MAlignment doesn't contain new rows, some rows have new sequences.
-  *     ^   additionalRows      - the MAlignment contains new rows, no rows are deleted.
-  *     ^   removeRows          - the MAlignment doesn't contain some rows.
-  *     ^   clear               - the MAlignment is empty.
+  *     ^   empty               - there is the empty msa stored in the database, the MultipleSequenceAlignment contains new rows.
+  *     ^   nothingNew          - the MultipleSequenceAlignment contains the same information.
+  *     ^   newOrder            - the MultipleSequenceAlignment contains the same rows in other order.
+  *     ^   newName             - the MultipleSequenceAlignment contains the same rows, the msa name changes.
+  *     ^   newAlphabet         - the MultipleSequenceAlignment contains the same rows, the msa alphabet changes.
+  *     ^   newContent          - the MultipleSequenceAlignment doesn't contain new rows, some rows data changes.
+  *     ^   newSequence         - the MultipleSequenceAlignment doesn't contain new rows, some rows have new sequences.
+  *     ^   additionalRows      - the MultipleSequenceAlignment contains new rows, no rows are deleted.
+  *     ^   removeRows          - the MultipleSequenceAlignment doesn't contain some rows.
+  *     ^   clear               - the MultipleSequenceAlignment is empty.
   */
 DECLARE_TEST(MsaDbiUtilsUnitTests, updateMsa_empty);
 DECLARE_TEST(MsaDbiUtilsUnitTests, updateMsa_nothingNew);
diff --git a/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.cpp b/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.cpp
new file mode 100644
index 0000000..ab8ba77
--- /dev/null
+++ b/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.cpp
@@ -0,0 +1,90 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "MsaImporterExporterUnitTests.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2OpStatusUtils.h>
+
+#include <U2Formats/SQLiteDbi.h>
+
+
+namespace U2 {
+
+TestDbiProvider MsaImporterExporterTestData::dbiProvider = TestDbiProvider();
+const QString& MsaImporterExporterTestData::IMP_EXP_DB_URL("imp-exp-dbi.ugenedb");
+U2DbiRef MsaImporterExporterTestData::dbiRef = U2DbiRef();
+
+void MsaImporterExporterTestData::init() {
+    bool ok = dbiProvider.init(IMP_EXP_DB_URL, false);
+    SAFE_POINT(ok, "Dbi provider failed to initialize in MsaTestData::init()!",);
+
+    U2Dbi* dbi = dbiProvider.getDbi();
+    dbiRef = dbi->getDbiRef();
+    dbiProvider.close();
+}
+
+const U2DbiRef& MsaImporterExporterTestData::getDbiRef() {
+    if (dbiRef == U2DbiRef()) {
+        init();
+    }
+    return dbiRef;
+}
+
+
+IMPLEMENT_TEST(MsaImporterExporterUnitTests, importExportAlignment) {
+    const U2DbiRef& dbiRef = MsaImporterExporterTestData::getDbiRef();
+
+    U2OpStatusImpl os;
+
+    // Init an alignment
+    QString alignmentName = "Test alignment";
+    DNAAlphabetRegistry* alphabetRegistry = AppContext::getDNAAlphabetRegistry();
+    const DNAAlphabet* alphabet = alphabetRegistry->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
+
+    QByteArray firstSequence("---AG-T");
+    QByteArray secondSequence("AG-CT-TAA");
+
+    MultipleSequenceAlignment al(alignmentName, alphabet);
+
+    al->addRow("First row", firstSequence);
+    al->addRow("Second row", secondSequence);
+
+    // Import the alignment
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObj(MultipleSequenceAlignmentImporter::createAlignment(dbiRef, al, os));
+    CHECK_NO_ERROR(os);
+
+    // Export the alignment
+    MultipleSequenceAlignmentExporter alExporter;
+    MultipleSequenceAlignment alActual = alExporter.getAlignment(dbiRef, msaObj->getEntityRef().entityId, os);
+    CHECK_NO_ERROR(os);
+
+    bool alsEqual = (*al == *alActual);
+    CHECK_TRUE(alsEqual, "Actual alignment doesn't equal to the original!");
+    CHECK_EQUAL(alignmentName, alActual->getName(), "alignment name");
+}
+
+
+}
diff --git a/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.h b/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.h
new file mode 100644
index 0000000..34e8d79
--- /dev/null
+++ b/src/plugins/api_tests/src/core/util/MsaImporterExporterUnitTests.h
@@ -0,0 +1,52 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MSA_IMPORTER_EXPORTER_UNIT_TESTS_H_
+#define _U2_MSA_IMPORTER_EXPORTER_UNIT_TESTS_H_
+
+#include "core/dbi/DbiTest.h"
+
+#include <U2Core/U2DbiUtils.h>
+
+#include <unittest.h>
+
+
+namespace U2 {
+
+class MsaImporterExporterTestData {
+public:
+    static void init();
+
+    static const U2DbiRef& getDbiRef();
+
+private:
+    static TestDbiProvider dbiProvider;
+    static const QString& IMP_EXP_DB_URL;
+    static U2DbiRef dbiRef;
+};
+
+DECLARE_TEST(MsaImporterExporterUnitTests, importExportAlignment);
+
+} // namespace
+
+DECLARE_METATYPE(MsaImporterExporterUnitTests, importExportAlignment);
+
+#endif
diff --git a/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.cpp b/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.cpp
index 9215c2c..c83eeae 100644
--- a/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.cpp
+++ b/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 #include <U2Core/U2MsaDbi.h>
 #include <U2Core/MsaDbiUtils.h>
 #include <U2Core/MSAUtils.h>
-#include <U2Core/MAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
 #include <U2Core/U2AlphabetUtils.h>
 
 namespace U2{
@@ -39,25 +39,17 @@ IMPLEMENT_TEST(MsaUtilsUnitTests, one_name_with_spaces) {
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma1("nigguz1_one_name_with_spaces", alphabet);
-    ma1.addRow("diss1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("fiss 2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("ziss3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("riss4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
-
-    MAlignment ma2("nigguz2_one_name_with_spaces", alphabet);
-    ma2.addRow("diss1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("fiss_2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("ziss3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("riss4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma1("msa1_one_name_with_spaces", alphabet);
+    ma1->addRow("diss1", "AAAA--AAA", -1);
+    ma1->addRow("fiss 2", "C--CCCCCC", -1);
+    ma1->addRow("ziss3", "GG-GGGG-G", -1);
+    ma1->addRow("riss4", "TTT-TTTT", -1);
+
+    MultipleSequenceAlignment ma2("msa2_one_name_with_spaces", alphabet);
+    ma2->addRow("diss1", "AAAA--AAA", -1);
+    ma2->addRow("fiss_2", "C--CCCCCC", -1);
+    ma2->addRow("ziss3", "GG-GGGG-G", -1);
+    ma2->addRow("riss4", "TTT-TTTT", -1);
 
     MSAUtils::compareRowsAfterAlignment(ma1, ma2, os);
     CHECK_NO_ERROR(os);
@@ -68,25 +60,17 @@ IMPLEMENT_TEST(MsaUtilsUnitTests, two_names_with_spaces){
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma1("nigguz1_two_names_with_spaces", alphabet);
-    ma1.addRow("diss1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("fiss 2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("ziss3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("riss 4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
-
-    MAlignment ma2("nigguz2_two_names_with_spaces", alphabet);
-    ma2.addRow("diss1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("fiss_2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("ziss3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("riss_4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma1("msa1_two_names_with_spaces", alphabet);
+    ma1->addRow("diss1", "AAAA--AAA", -1);
+    ma1->addRow("fiss 2", "C--CCCCCC", -1);
+    ma1->addRow("ziss3", "GG-GGGG-G", -1);
+    ma1->addRow("riss 4", "TTT-TTTT", -1);
+
+    MultipleSequenceAlignment ma2("msa2_two_names_with_spaces", alphabet);
+    ma2->addRow("diss1", "AAAA--AAA", -1);
+    ma2->addRow("fiss_2", "C--CCCCCC", -1);
+    ma2->addRow("ziss3", "GG-GGGG-G", -1);
+    ma2->addRow("riss_4", "TTT-TTTT", -1);
 
     MSAUtils::compareRowsAfterAlignment(ma1, ma2, os);
     CHECK_NO_ERROR(os);
@@ -98,25 +82,17 @@ IMPLEMENT_TEST(MsaUtilsUnitTests, all_names_with_spaces){
 
     // Prepare input data
     const DNAAlphabet* alphabet = U2AlphabetUtils::getById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma1("nigguz1_all_names_with_spaces", alphabet);
-    ma1.addRow("diss 1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("fiss 2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("ziss 3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma1.addRow("riss 4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
-
-    MAlignment ma2("nigguz2_two_all_names_with_spaces", alphabet);
-    ma2.addRow("diss_1", "AAAA--AAA", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("fiss_2", "C--CCCCCC", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("ziss_3", "GG-GGGG-G", -1, os);
-    CHECK_NO_ERROR(os);
-    ma2.addRow("riss_4", "TTT-TTTT", -1, os);
-    CHECK_NO_ERROR(os);
+    MultipleSequenceAlignment ma1("msa1_all_names_with_spaces", alphabet);
+    ma1->addRow("diss 1", "AAAA--AAA", -1);
+    ma1->addRow("fiss 2", "C--CCCCCC", -1);
+    ma1->addRow("ziss 3", "GG-GGGG-G", -1);
+    ma1->addRow("riss 4", "TTT-TTTT", -1);
+
+    MultipleSequenceAlignment ma2("msa2_two_all_names_with_spaces", alphabet);
+    ma2->addRow("diss_1", "AAAA--AAA", -1);
+    ma2->addRow("fiss_2", "C--CCCCCC", -1);
+    ma2->addRow("ziss_3", "GG-GGGG-G", -1);
+    ma2->addRow("riss_4", "TTT-TTTT", -1);
 
     MSAUtils::compareRowsAfterAlignment(ma1, ma2, os);
     CHECK_NO_ERROR(os);
diff --git a/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.h b/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.h
index 690a8ef..7a02cbe 100644
--- a/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.h
+++ b/src/plugins/api_tests/src/core/util/MsaUtilsUnitTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/api_tests/src/unittest.h b/src/plugins/api_tests/src/unittest.h
old mode 100644
new mode 100755
diff --git a/src/plugins/biostruct3d_view/biostruct3d_view.pri b/src/plugins/biostruct3d_view/biostruct3d_view.pri
index 9c4470b..8584998 100644
--- a/src/plugins/biostruct3d_view/biostruct3d_view.pri
+++ b/src/plugins/biostruct3d_view/biostruct3d_view.pri
@@ -26,5 +26,9 @@ win32-msvc2013 {
     LIBS += opengl32.lib
 }
 
+win32-msvc2015 {
+    LIBS += opengl32.lib
+}
+
 win32 : LIBS += -lGLU32
 unix_not_mac() : LIBS += -lGLU
diff --git a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
index e8ec561..11c3343 100644
--- a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.h b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.h
index f911452..1e5a2b5 100644
--- a/src/plugins/biostruct3d_view/src/AnaglyphRenderer.h
+++ b/src/plugins/biostruct3d_view/src/AnaglyphRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
index b2a1a8f..781e35e 100644
--- a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
index 4e3166c..7c0fbf7 100644
--- a/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/BallAndStickGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.cpp
index 2d28894..8fdd7ad 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,7 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectUtils.h>
 
-#include <QtCore/QObject>
-#include <QtAlgorithms>
+#include <QObject>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.h b/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.h
index 133b428..34af1ee 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DColorScheme.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,11 @@
 #define _U2_BIOSTRUCT3D_COLORSCHEME_H
 
 #include <U2Core/BioStruct3D.h>
-#include <QtGui/QColor>
-#include <QtCore/QMap>
-#include <QtCore/QHash>
-#include <QtCore/QPair>
-#include <QtCore/QLinkedList>
+#include <QColor>
+#include <QMap>
+#include <QHash>
+#include <QPair>
+#include <QLinkedList>
 
 #include "GraphicUtils.h"
 
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.cpp
index 0af9189..daa49c9 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.h b/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.h
index cab7845..e4fcd86 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.cpp
index db94bfd..1344bff 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.h b/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.h
index d5246b4..18df3f3 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLRender.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_BIOSTRUCT3D_RENDERER_H_
 #define _U2_BIOSTRUCT3D_RENDERER_H_
 
-#include <QtCore/QString>
-#include <QtCore/QMap>
+#include <QString>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
index 65340fe..98a8e9b 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,13 +43,14 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GObjectRelationRoles.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ExportImageDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
@@ -972,11 +973,11 @@ void BioStruct3DGLWidget::sl_settings()
     }
 }
 
-void BioStruct3DGLWidget::sl_exportImage()
-{
+void BioStruct3DGLWidget::sl_exportImage() {
     BioStruct3DImageExportController factory(this);
+    QString fileName = GUrlUtils::fixFileName(getBioStruct3DObjectName());
     QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory, ExportImageDialog::MolView,
-                             ExportImageDialog::SupportScaling, this);
+                             fileName, ExportImageDialog::SupportScaling, this);
     dialog->exec();
 }
 
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
index 8fff5e1..b90c42b 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DGLWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.cpp
index eb47aa0..090f349 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QDesktopServices>
-#include <QtGui/QDragEnterEvent>
-#include <QtGui/QDropEvent>
-#include <QtGui/QPixmap>
+#include <QDesktopServices>
+#include <QDragEnterEvent>
+#include <QDropEvent>
+#include <QPixmap>
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtCore/QUrl>
+#include <QFile>
+#include <QTextStream>
+#include <QUrl>
 
 #include <QCheckBox>
 #include <QHBoxLayout>
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.h b/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.h
index 19c0eb8..0cfd7d9 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSplitter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
index b98ef5e..13e1eed 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
index e34c49b..93a5c3d 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DSubsetEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
index 2432190..6153094 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,13 +42,8 @@
 #include <U2View/ADVConstants.h>
 #include <U2View/ADVSingleSequenceWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QMenu>
-#endif
+#include <QMessageBox>
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.h b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.h
index 9d72daa..697c68f 100644
--- a/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.h
+++ b/src/plugins/biostruct3d_view/src/BioStruct3DViewPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,8 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QMap>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QMap>
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/GLFrameManager.cpp b/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
index 7fa61a2..3a39fa7 100644
--- a/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
+++ b/src/plugins/biostruct3d_view/src/GLFrameManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/GLFrameManager.h b/src/plugins/biostruct3d_view/src/GLFrameManager.h
index 175f3ef..41bd6b9 100644
--- a/src/plugins/biostruct3d_view/src/GLFrameManager.h
+++ b/src/plugins/biostruct3d_view/src/GLFrameManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/Matrix44.h>
 
-#include <QtCore/QVariantList>
+#include <QVariantList>
 
 class QOpenGLWidget;
 
diff --git a/src/plugins/biostruct3d_view/src/GraphicUtils.cpp b/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
index 901d57c..592283d 100644
--- a/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
+++ b/src/plugins/biostruct3d_view/src/GraphicUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/GraphicUtils.h b/src/plugins/biostruct3d_view/src/GraphicUtils.h
index beaf9fa..ba4c6be 100644
--- a/src/plugins/biostruct3d_view/src/GraphicUtils.h
+++ b/src/plugins/biostruct3d_view/src/GraphicUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
index 122dc45..c65a95f 100644
--- a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.h b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.h
index 72817e6..0606e30 100644
--- a/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.h
+++ b/src/plugins/biostruct3d_view/src/MolecularSurfaceRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_MOLECULAR_SURFACE_RENDERER_H_
 #define _U2_MOLECULAR_SURFACE_RENDERER_H_
 
-#include <QtCore/QString>
-#include <QtCore/QMap>
+#include <QString>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
index 12a77d7..36d745b 100644
--- a/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/SelectModelsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #include <QMessageBox>
 #include <cassert>
 #include "SettingsDialog.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+#include <QPushButton>
 #include <U2Gui/HelpButton.h>
 
 namespace U2 {
@@ -36,7 +32,7 @@ SelectModelsDialog::SelectModelsDialog(const QList<int> &_modelIds, const QList<
 : QDialog(parent), Ui_SelectModelsDialog()
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223024");
+    new HelpButton(this, buttonBox, "20874928");
     buttonBox_1->button(QDialogButtonBox::Cancel)->setText(::U2::SelectModelsDialog::tr("All"));
     buttonBox_1->button(QDialogButtonBox::No)->setText(::U2::SelectModelsDialog::tr("Invert"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(::U2::SelectModelsDialog::tr("OK"));
diff --git a/src/plugins/biostruct3d_view/src/SelectModelsDialog.h b/src/plugins/biostruct3d_view/src/SelectModelsDialog.h
index 3b70731..9155b0c 100644
--- a/src/plugins/biostruct3d_view/src/SelectModelsDialog.h
+++ b/src/plugins/biostruct3d_view/src/SelectModelsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/SettingsDialog.cpp b/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
index 424492b..7859d2f 100644
--- a/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/SettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@ BioStruct3DSettingsDialog::BioStruct3DSettingsDialog()
 {
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "18223021");
+    new HelpButton(this, buttonBox, "20874925");
 
     glWidget = NULL;
     initColorSchemes();
diff --git a/src/plugins/biostruct3d_view/src/SettingsDialog.h b/src/plugins/biostruct3d_view/src/SettingsDialog.h
index 2147518..d3186e7 100644
--- a/src/plugins/biostruct3d_view/src/SettingsDialog.h
+++ b/src/plugins/biostruct3d_view/src/SettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include "ui_SettingsDialog.h"
 #include "AnaglyphRenderer.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QColorDialog>
-#else
-#include <QtWidgets/QColorDialog>
-#endif
+#include <QColorDialog>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
index bb7fdaf..85b6734 100644
--- a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,7 +57,7 @@ StructuralAlignmentDialog::StructuralAlignmentDialog(const BioStruct3DObject *fi
         : QDialog(parent), task(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223027");
+    new HelpButton(this, buttonBox, "20874931");
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
 
diff --git a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
index 38b8adf..382ed40 100644
--- a/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
+++ b/src/plugins/biostruct3d_view/src/StructuralAlignmentDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp b/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
index 47a22a3..61fcd6f 100644
--- a/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/TubeGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/TubeGLRenderer.h b/src/plugins/biostruct3d_view/src/TubeGLRenderer.h
index dc8ce68..d1e35a0 100644
--- a/src/plugins/biostruct3d_view/src/TubeGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/TubeGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_BIOSTRUCT3D_TUBE_RENDERER_H_
 #define _U2_BIOSTRUCT3D_TUBE_RENDERER_H_
 
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QVector>
+#include <QSharedDataPointer>
+#include <QVector>
 #include <U2Core/BioStruct3D.h>
 
 #include "BioStruct3DGLRender.h"
diff --git a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
index 753dc20..230f60a 100644
--- a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.h b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.h
index 5208d6b..af7bec8 100644
--- a/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/VanDerWaalsGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
index 000994a..d3c615a 100644
--- a/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/WormsGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/WormsGLRenderer.h b/src/plugins/biostruct3d_view/src/WormsGLRenderer.h
index 58f40e9..1d259ea 100644
--- a/src/plugins/biostruct3d_view/src/WormsGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/WormsGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_BIOSTRUCT3D_WORMS_RENDERER_H_
 #define _U2_BIOSTRUCT3D_WORMS_RENDERER_H_
 
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QVector>
-#include <QtCore/QMap>
-#include <QtCore/QPair>
+#include <QSharedDataPointer>
+#include <QVector>
+#include <QMap>
+#include <QPair>
 
 #include <U2Core/Vector3D.h>
 #include "BioStruct3DGLRender.h"
diff --git a/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.cpp
index e8ec561..11c3343 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.h
index e0c4e05..184d59a 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/AnaglyphRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.cpp
index 46bc91b..cbb2501 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.h
index c3c6136..b75f227 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BallAndStickGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.cpp
index 647f842..1b0f78f 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,7 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/GObjectUtils.h>
 
-#include <QtCore/QObject>
-#include <QtAlgorithms>
+#include <QObject>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.h
index 133b428..34af1ee 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DColorScheme.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,11 @@
 #define _U2_BIOSTRUCT3D_COLORSCHEME_H
 
 #include <U2Core/BioStruct3D.h>
-#include <QtGui/QColor>
-#include <QtCore/QMap>
-#include <QtCore/QHash>
-#include <QtCore/QPair>
-#include <QtCore/QLinkedList>
+#include <QColor>
+#include <QMap>
+#include <QHash>
+#include <QPair>
+#include <QLinkedList>
 
 #include "GraphicUtils.h"
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.cpp
index 2847477..ff9397f 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.h
index cab7845..e4fcd86 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.cpp
index db94bfd..1344bff 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.h
index d5246b4..18df3f3 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLRender.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_BIOSTRUCT3D_RENDERER_H_
 #define _U2_BIOSTRUCT3D_RENDERER_H_
 
-#include <QtCore/QString>
-#include <QtCore/QMap>
+#include <QString>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
index 138e03f..61ab8df 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,6 +48,7 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Gui/ExportImageDialog.h>
 #include <U2Core/QObjectScopedPointer.h>
@@ -282,16 +283,9 @@ void BioStruct3DGLWidget::draw() {
     foreach (const BioStruct3DRendererContext &ctx, contexts) {
         glPushMatrix();
 
-#if defined(GL_VERSION_1_3) && (QT_VERSION < 0x050000)
-        // glMultTransposeMatrixf is deprecated since Qt 5
-        glMultTransposeMatrixf(ctx.biostruct->getTransform().data());
-#else
-        // on OpenGL versions below 1.3 glMultTransposeMatrix not suported
-        // see http://www.opengl.org/resources/faq/technical/extensions.htm
         Matrix44 colmt = ctx.biostruct->getTransform();
         colmt.transpose();
         glMultMatrixf(colmt.data());
-#endif
 
         ctx.renderer->drawBioStruct3D();
         glPopMatrix();
@@ -987,8 +981,10 @@ void BioStruct3DGLWidget::sl_settings()
 void BioStruct3DGLWidget::sl_exportImage()
 {
     BioStruct3DImageExportController factory(this);
+    
+    QString fileName = GUrlUtils::fixFileName(getBioStruct3DObjectName());
     QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory, ExportImageDialog::MolView,
-                             ExportImageDialog::SupportScaling, this);
+                             fileName, ExportImageDialog::SupportScaling, this);
     dialog->exec();
 }
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
index 771f31d..1ba7e71 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DGLWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,21 +32,14 @@
 
 #include <U2Algorithm/MolecularSurface.h>
 
-#include <QtCore/QTimer>
-#include <QtCore/QSharedPointer>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QActionGroup>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QActionGroup>
-#endif
-#include <QtGui/QColor>
-
-#include <QtOpenGL/QGLWidget>
+#include <QTimer>
+#include <QSharedPointer>
+#include <QAction>
+#include <QMenu>
+#include <QActionGroup>
+#include <QColor>
+
+#include <QGLWidget>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.cpp
index eb47aa0..090f349 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QDesktopServices>
-#include <QtGui/QDragEnterEvent>
-#include <QtGui/QDropEvent>
-#include <QtGui/QPixmap>
+#include <QDesktopServices>
+#include <QDragEnterEvent>
+#include <QDropEvent>
+#include <QPixmap>
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtCore/QUrl>
+#include <QFile>
+#include <QTextStream>
+#include <QUrl>
 
 #include <QCheckBox>
 #include <QHBoxLayout>
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.h
index 19c0eb8..0cfd7d9 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSplitter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.cpp
index b98ef5e..13e1eed 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
index e34c49b..93a5c3d 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DSubsetEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
index 2432190..6153094 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,13 +42,8 @@
 #include <U2View/ADVConstants.h>
 #include <U2View/ADVSingleSequenceWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QMenu>
-#endif
+#include <QMessageBox>
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.h b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.h
index 9d72daa..697c68f 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/BioStruct3DViewPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,8 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QMap>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QMap>
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.cpp b/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.cpp
index 13544b3..a548745 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.h b/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.h
index 4d20c31..7c63305 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/GLFrameManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Core/Matrix44.h>
 
-#include <QtOpenGL/QGLWidget>
-#include <QtCore/QVariantList>
+#include <QGLWidget>
+#include <QVariantList>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.cpp b/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.cpp
index b9a2a77..72cc3e9 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.h b/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.h
index dae2c9a..77914c6 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/GraphicUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.cpp
index 6963905..6e76998 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.h
index 72817e6..0606e30 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/MolecularSurfaceRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_MOLECULAR_SURFACE_RENDERER_H_
 #define _U2_MOLECULAR_SURFACE_RENDERER_H_
 
-#include <QtCore/QString>
-#include <QtCore/QMap>
+#include <QString>
+#include <QMap>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
index 12a77d7..36d745b 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #include <QMessageBox>
 #include <cassert>
 #include "SettingsDialog.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
+#include <QPushButton>
 #include <U2Gui/HelpButton.h>
 
 namespace U2 {
@@ -36,7 +32,7 @@ SelectModelsDialog::SelectModelsDialog(const QList<int> &_modelIds, const QList<
 : QDialog(parent), Ui_SelectModelsDialog()
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223024");
+    new HelpButton(this, buttonBox, "20874928");
     buttonBox_1->button(QDialogButtonBox::Cancel)->setText(::U2::SelectModelsDialog::tr("All"));
     buttonBox_1->button(QDialogButtonBox::No)->setText(::U2::SelectModelsDialog::tr("Invert"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(::U2::SelectModelsDialog::tr("OK"));
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h
index 3b70731..9155b0c 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/SelectModelsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
index 424492b..5268ee4 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,9 @@ BioStruct3DSettingsDialog::BioStruct3DSettingsDialog()
 {
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "18223021");
+    new HelpButton(this, buttonBox, "20874925");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     glWidget = NULL;
     initColorSchemes();
diff --git a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
index 2147518..d3186e7 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/SettingsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include "ui_SettingsDialog.h"
 #include "AnaglyphRenderer.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QColorDialog>
-#else
-#include <QtWidgets/QColorDialog>
-#endif
+#include <QColorDialog>
 
 namespace U2 {
 
diff --git a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
index b9beb83..2cccd7a 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,6 +32,7 @@
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
+#include <QPushButton>
 
 #include <U2Gui/HelpButton.h>
 
@@ -56,8 +57,10 @@ StructuralAlignmentDialog::StructuralAlignmentDialog(const BioStruct3DObject *fi
         : QDialog(parent), task(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223027");
-
+    new HelpButton(this, buttonBox, "20874931");
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    
     StructuralAlignmentAlgorithmRegistry *reg = AppContext::getStructuralAlignmentAlgorithmRegistry();
     foreach (const QString &id, reg->getFactoriesIds()) {
         algorithmCombo->addItem(id, qVariantFromValue(id));
diff --git a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
index 38b8adf..382ed40 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/StructuralAlignmentDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.cpp
index 7db9596..275d658 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.h
index dc8ce68..d1e35a0 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/TubeGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_BIOSTRUCT3D_TUBE_RENDERER_H_
 #define _U2_BIOSTRUCT3D_TUBE_RENDERER_H_
 
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QVector>
+#include <QSharedDataPointer>
+#include <QVector>
 #include <U2Core/BioStruct3D.h>
 
 #include "BioStruct3DGLRender.h"
diff --git a/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.cpp
index 6f26072..8792adb 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.h
index d91ec7f..391110e 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/VanDerWaalsGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
index 46a7ce0..a57699d 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
+++ b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.h b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.h
index 58f40e9..1d259ea 100644
--- a/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.h
+++ b/src/plugins/biostruct3d_view/src/deprecated/WormsGLRenderer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,10 @@
 #ifndef _U2_BIOSTRUCT3D_WORMS_RENDERER_H_
 #define _U2_BIOSTRUCT3D_WORMS_RENDERER_H_
 
-#include <QtCore/QSharedDataPointer>
-#include <QtCore/QVector>
-#include <QtCore/QMap>
-#include <QtCore/QPair>
+#include <QSharedDataPointer>
+#include <QVector>
+#include <QMap>
+#include <QPair>
 
 #include <U2Core/Vector3D.h>
 #include "BioStruct3DGLRender.h"
diff --git a/src/plugins/biostruct3d_view/transl/english.ts b/src/plugins/biostruct3d_view/transl/english.ts
index d6192fe..29cdb55 100644
--- a/src/plugins/biostruct3d_view/transl/english.ts
+++ b/src/plugins/biostruct3d_view/transl/english.ts
@@ -62,26 +62,26 @@
         <translation>Convex Map</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="80"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="80"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="79"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="79"/>
         <source>Molecular Chains</source>
         <translation>Molecular Chains</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="81"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="81"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="80"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="80"/>
         <source>Chemical Elements</source>
         <translation>Chemical Elements</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="82"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="82"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="81"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="81"/>
         <source>Secondary Structure</source>
         <translation>Secondary Structure</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="83"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="83"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="82"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="82"/>
         <source>Simple colors</source>
         <translation>Simple colors</translation>
     </message>
@@ -199,92 +199,92 @@
 <context>
     <name>U2::BioStruct3DGLWidget</name>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="764"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="776"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="765"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="770"/>
         <source>Spin</source>
         <translation>Spin</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="753"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="765"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="754"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="759"/>
         <source>Off</source>
         <translation>Off</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="760"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="772"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="761"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="766"/>
         <source>Models..</source>
         <translation>Models..</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="768"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="780"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="769"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="774"/>
         <source>Settings...</source>
         <translation>Settings...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="771"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="783"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="772"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="777"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="774"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="786"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="775"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="780"/>
         <source>Export Image...</source>
         <translation>Export Image...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="783"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="795"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="784"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="789"/>
         <source>Align With...</source>
         <translation>Align With...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="787"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="799"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="788"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="793"/>
         <source>Reset</source>
         <translation>Reset</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="794"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="806"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="795"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="800"/>
         <source>Render Style</source>
         <translation>Render Style</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="799"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="811"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="800"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="805"/>
         <source>Coloring Scheme</source>
         <translation>Coloring Scheme</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="804"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="816"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="805"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="810"/>
         <source>Molecular Surface Render Style</source>
         <translation>Molecular Surface Render Style</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="808"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="820"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="809"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="814"/>
         <source>Molecular Surface</source>
         <translation>Molecular Surface</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="833"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="845"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="834"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="839"/>
         <source>Structural Alignment</source>
         <translation>Structural Alignment</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="581"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="593"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="582"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="587"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="581"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="593"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="582"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="587"/>
         <source>Unable to open file %1 for writing</source>
         <translation>Unable to open file %1 for writing</translation>
     </message>
@@ -293,52 +293,69 @@
     <name>U2::BioStruct3DSettingsDialog</name>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="50"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="50"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="52"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="52"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="52"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="54"/>
         <source>Red - Blue</source>
         <translation>Red - Blue</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="53"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="53"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="55"/>
         <source>Cyan - Red</source>
         <translation>Cyan - Red</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="54"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="54"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="56"/>
         <source>Red - Dark Cyan</source>
         <translation>Red - Dark Cyan</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="55"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="55"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="57"/>
         <source>Red - Green</source>
         <translation>Red - Green</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="56"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="56"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="58"/>
         <source>Magenta - Green</source>
         <translation>Magenta - Green</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="242"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="242"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="244"/>
         <source>(not supported by your videocard)</source>
         <translation>(not supported by your videocard)</translation>
     </message>
+    <message>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="36"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="37"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
+    <name>U2::BioStruct3DSubsetEditor</name>
+    <message>
+        <source>All chains</source>
+        <translation type="vanished">All chains</translation>
+    </message>
 </context>
 <context>
     <name>U2::BioStruct3DViewContext</name>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="194"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="194"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="189"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="189"/>
         <source>Close 3D Structure Viewer</source>
         <translation>Close 3D Structure Viewer</translation>
     </message>
@@ -346,22 +363,24 @@
 <context>
     <name>U2::BioStruct3DViewPlugin</name>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="92"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="92"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="87"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="87"/>
         <source>Unfortunately, your system does not have OpenGL Support.
 The 3D Structure Viewer is not available.
 You may try to upgrade your system by updating the video card driver.</source>
-        <translation type="unfinished"></translation>
+        <translation>Unfortunately, your system does not have OpenGL Support.
+The 3D Structure Viewer is not available.
+You may try to upgrade your system by updating the video card driver.</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="98"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="98"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="93"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="93"/>
         <source>3D Structure Viewer</source>
         <translation>3D Structure Viewer</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="98"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="98"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="93"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="93"/>
         <source>Visualizes 3D structures of biological molecules.</source>
         <translation>Visualizes 3D structures of biological molecules.</translation>
     </message>
@@ -369,38 +388,38 @@ You may try to upgrade your system by updating the video card driver.</source>
 <context>
     <name>U2::SelectModelsDialog</name>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="40"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="40"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="36"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="36"/>
         <source>All</source>
         <translation>All</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="41"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="41"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="37"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="37"/>
         <source>Invert</source>
         <translation>Invert</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="42"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="42"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="38"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="38"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="43"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="43"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="39"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="39"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="94"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="94"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="90"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="90"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="94"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="94"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="90"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="90"/>
         <source>At least one model shoud be selected.</source>
         <translation>At least one model shoud be selected.</translation>
     </message>
@@ -492,11 +511,13 @@ You may try to upgrade your system by updating the video card driver.</source>
     <name>U2::StructuralAlignmentDialog</name>
     <message>
         <location filename="../src/StructuralAlignmentDialog.cpp" line="61"/>
+        <location filename="../src/deprecated/StructuralAlignmentDialog.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
         <location filename="../src/StructuralAlignmentDialog.cpp" line="62"/>
+        <location filename="../src/deprecated/StructuralAlignmentDialog.cpp" line="62"/>
         <source>OK</source>
         <translation>OK</translation>
     </message>
diff --git a/src/plugins/biostruct3d_view/transl/russian.ts b/src/plugins/biostruct3d_view/transl/russian.ts
index 81b52e2..1ff3945 100644
--- a/src/plugins/biostruct3d_view/transl/russian.ts
+++ b/src/plugins/biostruct3d_view/transl/russian.ts
@@ -68,26 +68,26 @@
         <translation>Шаростержневая модель</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="80"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="80"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="79"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="79"/>
         <source>Molecular Chains</source>
         <translation>Молекулярные цепи</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="81"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="81"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="80"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="80"/>
         <source>Chemical Elements</source>
         <translation>Химические элементы</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="82"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="82"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="81"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="81"/>
         <source>Secondary Structure</source>
         <translation>Вторичная структура</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DColorScheme.cpp" line="83"/>
-        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="83"/>
+        <location filename="../src/BioStruct3DColorScheme.cpp" line="82"/>
+        <location filename="../src/deprecated/BioStruct3DColorScheme.cpp" line="82"/>
         <source>Simple colors</source>
         <translation>Простые цвета</translation>
     </message>
@@ -199,92 +199,92 @@
 <context>
     <name>U2::BioStruct3DGLWidget</name>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="764"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="776"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="765"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="770"/>
         <source>Spin</source>
         <translation>Вращение</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="753"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="765"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="754"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="759"/>
         <source>Off</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="760"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="772"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="761"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="766"/>
         <source>Models..</source>
         <translation>Модели..</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="783"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="795"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="784"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="789"/>
         <source>Align With...</source>
         <translation>Выровнять с...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="804"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="816"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="805"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="810"/>
         <source>Molecular Surface Render Style</source>
         <translation>Стиль отрисовки поверхности</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="808"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="820"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="809"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="814"/>
         <source>Molecular Surface</source>
         <translation>Молекулярная поверхность</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="581"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="593"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="582"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="587"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="581"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="593"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="582"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="587"/>
         <source>Unable to open file %1 for writing</source>
         <translation>Невозможно открыть файл %1 для записи</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="768"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="780"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="769"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="774"/>
         <source>Settings...</source>
         <translation>Настройки...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="771"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="783"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="772"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="777"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="774"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="786"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="775"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="780"/>
         <source>Export Image...</source>
         <translation>Экспортировать изображение...</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="787"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="799"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="788"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="793"/>
         <source>Reset</source>
         <translation>Сбросить</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="794"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="806"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="795"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="800"/>
         <source>Render Style</source>
         <translation>Стиль отрисовки</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="799"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="811"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="800"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="805"/>
         <source>Coloring Scheme</source>
         <translation>Цветовая схема</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DGLWidget.cpp" line="833"/>
-        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="845"/>
+        <location filename="../src/BioStruct3DGLWidget.cpp" line="834"/>
+        <location filename="../src/deprecated/BioStruct3DGLWidget.cpp" line="839"/>
         <source>Structural Alignment</source>
         <translation>Структурное выравнивание</translation>
     </message>
@@ -293,52 +293,69 @@
     <name>U2::BioStruct3DSettingsDialog</name>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="50"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="50"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="52"/>
         <source>Custom</source>
         <translation>Выбранные</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="52"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="52"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="54"/>
         <source>Red - Blue</source>
         <translation>Красный - Синий</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="53"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="53"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="55"/>
         <source>Cyan - Red</source>
         <translation>Голубой - Красный</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="54"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="54"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="56"/>
         <source>Red - Dark Cyan</source>
         <translation>Красный - Темно-голубой</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="55"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="55"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="57"/>
         <source>Red - Green</source>
         <translation>Красный - Зеленый</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="56"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="56"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="58"/>
         <source>Magenta - Green</source>
         <translation>Пурпурный - Зеленый</translation>
     </message>
     <message>
         <location filename="../src/SettingsDialog.cpp" line="242"/>
-        <location filename="../src/deprecated/SettingsDialog.cpp" line="242"/>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="244"/>
         <source>(not supported by your videocard)</source>
         <translation>(не поддерживается видеокартой)</translation>
     </message>
+    <message>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="36"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/deprecated/SettingsDialog.cpp" line="37"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
+    <name>U2::BioStruct3DSubsetEditor</name>
+    <message>
+        <source>All chains</source>
+        <translation type="vanished">Все цепи</translation>
+    </message>
 </context>
 <context>
     <name>U2::BioStruct3DViewContext</name>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="194"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="194"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="189"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="189"/>
         <source>Close 3D Structure Viewer</source>
         <translation>Закрыть визуализатор 3D структур</translation>
     </message>
@@ -346,22 +363,24 @@
 <context>
     <name>U2::BioStruct3DViewPlugin</name>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="92"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="92"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="87"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="87"/>
         <source>Unfortunately, your system does not have OpenGL Support.
 The 3D Structure Viewer is not available.
 You may try to upgrade your system by updating the video card driver.</source>
-        <translation type="unfinished"></translation>
+        <translation>Unfortunately, your system does not have OpenGL Support.
+The 3D Structure Viewer is not available.
+You may try to upgrade your system by updating the video card driver.</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="98"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="98"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="93"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="93"/>
         <source>3D Structure Viewer</source>
         <translation>Визуализатор 3D структур</translation>
     </message>
     <message>
-        <location filename="../src/BioStruct3DViewPlugin.cpp" line="98"/>
-        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="98"/>
+        <location filename="../src/BioStruct3DViewPlugin.cpp" line="93"/>
+        <location filename="../src/deprecated/BioStruct3DViewPlugin.cpp" line="93"/>
         <source>Visualizes 3D structures of biological molecules.</source>
         <translation>Визуализирует 3D структуры биологических молекул.</translation>
     </message>
@@ -369,38 +388,38 @@ You may try to upgrade your system by updating the video card driver.</source>
 <context>
     <name>U2::SelectModelsDialog</name>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="40"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="40"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="36"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="36"/>
         <source>All</source>
         <translation>Все</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="41"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="41"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="37"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="37"/>
         <source>Invert</source>
         <translation>Инвертировать</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="42"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="42"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="38"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="38"/>
         <source>OK</source>
         <translation>Применить</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="43"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="43"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="39"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="39"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="94"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="94"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="90"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="90"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/SelectModelsDialog.cpp" line="94"/>
-        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="94"/>
+        <location filename="../src/SelectModelsDialog.cpp" line="90"/>
+        <location filename="../src/deprecated/SelectModelsDialog.cpp" line="90"/>
         <source>At least one model shoud be selected.</source>
         <translation>Выберите как минимум одну модель.</translation>
     </message>
@@ -492,11 +511,13 @@ You may try to upgrade your system by updating the video card driver.</source>
     <name>U2::StructuralAlignmentDialog</name>
     <message>
         <location filename="../src/StructuralAlignmentDialog.cpp" line="61"/>
+        <location filename="../src/deprecated/StructuralAlignmentDialog.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
         <location filename="../src/StructuralAlignmentDialog.cpp" line="62"/>
+        <location filename="../src/deprecated/StructuralAlignmentDialog.cpp" line="62"/>
         <source>OK</source>
         <translation>ОК</translation>
     </message>
diff --git a/src/plugins/browser_support/src/BrowserSupportPlugin.cpp b/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
index 67af14a..0f2ab2d 100644
--- a/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
+++ b/src/plugins/browser_support/src/BrowserSupportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QUrl>
+#include <QDir>
+#include <QUrl>
 
-#include <QtNetwork/QNetworkProxy>
+#include <QNetworkProxy>
 
-#include <QtGui/QClipboard>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QClipboard>
+#include <QApplication>
 
 #include <U2Core/AppContext.h>
 #include <U2Gui/OpenViewTask.h>
diff --git a/src/plugins/browser_support/src/BrowserSupportPlugin.h b/src/plugins/browser_support/src/BrowserSupportPlugin.h
index 8268900..c75345f 100644
--- a/src/plugins/browser_support/src/BrowserSupportPlugin.h
+++ b/src/plugins/browser_support/src/BrowserSupportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/chroma_view/src/ChromaViewPlugin.cpp b/src/plugins/chroma_view/src/ChromaViewPlugin.cpp
index 08caa1d..b4fd187 100644
--- a/src/plugins/chroma_view/src/ChromaViewPlugin.cpp
+++ b/src/plugins/chroma_view/src/ChromaViewPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,13 +40,8 @@
 
 #include <U2Gui/GUIUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QMenu>
-#endif
+#include <QMessageBox>
+#include <QMenu>
 
 namespace U2 {
 
@@ -132,7 +127,9 @@ void ChromaViewContext::sl_showChromatogram() {
         CHECK(a->view!=NULL, );
         GObject* editSeq = a->view->getEditedSequence();
         if (editSeq!=NULL) {
-            a->view->getSequenceContext()->getAnnotatedDNAView()->removeObject(editSeq);
+            //! SANGER_RED_TODO: check that it does not brake anything
+            adv->removeObject(editSeq);
+//            a->view->getSequenceContext()->getAnnotatedDNAView()->removeObject(editSeq);
         }
         adv->removeObject(chromaObj);
         delete a->view;
diff --git a/src/plugins/chroma_view/src/ChromaViewPlugin.h b/src/plugins/chroma_view/src/ChromaViewPlugin.h
index a0d54a0..ec102a0 100644
--- a/src/plugins/chroma_view/src/ChromaViewPlugin.h
+++ b/src/plugins/chroma_view/src/ChromaViewPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,8 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QMap>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QMap>
+#include <QAction>
 
 #include <U2View/ADVSequenceWidget.h>
 
diff --git a/src/plugins/chroma_view/src/ChromatogramView.cpp b/src/plugins/chroma_view/src/ChromatogramView.cpp
index ced810e..7080b15 100644
--- a/src/plugins/chroma_view/src/ChromatogramView.cpp
+++ b/src/plugins/chroma_view/src/ChromatogramView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,42 +19,42 @@
  * MA 02110-1301, USA.
  */
 
-#include "ChromatogramView.h"
+#include <QMessageBox>
 
-#include <U2Core/GObject.h>
-#include <U2Gui/MainWindow.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/DocumentModel.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/ProjectModel.h>
+#include <U2Core/DNAChromatogram.h>
+#include <U2Core/DNAChromatogramObject.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceSelection.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/GObject.h>
+#include <U2Core/GObjectTypes.h>
+#include <U2Core/GObjectUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
+#include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
+#include <U2Core/ProjectModel.h>
 #include <U2Core/Task.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/DocumentUtils.h>
+#include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/DNAChromatogram.h>
 #include <U2Core/U2SafePoints.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/DNAChromatogramObject.h>
-#include <U2Core/GObjectUtils.h>
-
-#include <U2Core/DNASequenceSelection.h>
-
-#include <U2View/ADVConstants.h>
-#include <U2View/ADVSequenceObjectContext.h>
-#include <U2View/AnnotatedDNAView.h>
 
+#include <U2Gui/AddNewDocumentDialogController.h>
 #include <U2Gui/GScrollBar.h>
 #include <U2Gui/GUIUtils.h>
-#include <U2Gui/AddNewDocumentDialogController.h>
+#include <U2Gui/MainWindow.h>
 #include <U2Gui/ProjectTreeController.h>
 #include <U2Gui/ProjectTreeItemSelectorDialog.h>
-#include <U2Core/TaskSignalMapper.h>
-#include <U2Core/LoadDocumentTask.h>
 
+#include <U2View/ADVConstants.h>
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
+#include "ChromatogramView.h"
 
 namespace U2 {
 
@@ -66,6 +66,8 @@ ChromatogramView::ChromatogramView(QWidget* p, ADVSequenceObjectContext* v, GSeq
     const QString objectName = "chromatogram_view_" + (NULL == v ? "" : v->getSequenceGObject()->getGObjectName());
     setObjectName(objectName);
 
+    dnaView = v->getAnnotatedDNAView();
+
     showQVAction = new QAction(tr("Show quality bars"), this);
     showQVAction->setIcon(QIcon(":chroma_view/images/bars.png"));
     showQVAction->setCheckable(true);
@@ -87,8 +89,8 @@ ChromatogramView::ChromatogramView(QWidget* p, ADVSequenceObjectContext* v, GSeq
     renderArea = new ChromatogramViewRenderArea(this, chroma);
 
     scaleBar = new ScaleBar();
-    scaleBar->slider()->setRange(100, 1000);
-    scaleBar->slider()->setTickInterval(100);
+    scaleBar->setRange(100, 1000);
+    scaleBar->setTickInterval(100);
     connect(scaleBar,SIGNAL(valueChanged(int)),SLOT(setRenderAreaHeight(int)));
 
     ra = static_cast<ChromatogramViewRenderArea *>(renderArea);
@@ -119,7 +121,7 @@ ChromatogramView::ChromatogramView(QWidget* p, ADVSequenceObjectContext* v, GSeq
     removeChanges = new QAction(tr("Undo changes"),this);
     connect(removeChanges, SIGNAL(triggered()), SLOT(sl_removeChanges()));
 
-    connect(ctx->getAnnotatedDNAView(), SIGNAL(si_objectRemoved(GObjectView*, GObject*)), SLOT(sl_onObjectRemoved(GObjectView*, GObject*)));
+    connect(dnaView, SIGNAL(si_objectRemoved(GObjectView*, GObject*)), SLOT(sl_onObjectRemoved(GObjectView*, GObject*)));
     pack();
 
     addActionToLocalToolbar(showQVAction);
@@ -287,7 +289,7 @@ void ChromatogramView::sl_addNewSequenceObject() {
     currentBaseCalls = editDNASeq->getWholeSequenceData(os);
     CHECK_OP(os, );
     doc->addObject(editDNASeq);
-    ctx->getAnnotatedDNAView()->addObject(editDNASeq);
+    dnaView->addObject(editDNASeq);
     indexOfChangedChars.clear();
 }
 
@@ -305,7 +307,7 @@ void ChromatogramView::sl_onAddExistingSequenceObject() {
     ac.alphabetType = ctx->getSequenceObject()->getAlphabet()->getType();
     s.groupMode = ProjectTreeGroupMode_ByDocument;
     s.ignoreRemoteObjects = true;
-    foreach (GObject* o, ctx->getAnnotatedDNAView()->getObjects()) {
+    foreach (GObject* o, dnaView->getObjects()) {
         s.excludeObjectList.append(o);
     }
 
@@ -314,7 +316,7 @@ void ChromatogramView::sl_onAddExistingSequenceObject() {
         GObject* go = objs.first();
         if (go->getGObjectType() == GObjectTypes::SEQUENCE) {
             editDNASeq = qobject_cast<U2SequenceObject*>(go);
-            QString err = ctx->getAnnotatedDNAView()->addObject(editDNASeq);
+            QString err = dnaView->addObject(editDNASeq);
             assert(err.isEmpty());
             indexOfChangedChars.clear();
         } else if (go->getGObjectType() == GObjectTypes::UNLOADED) {
@@ -333,7 +335,7 @@ void ChromatogramView::sl_onSequenceObjectLoaded(Task* t) {
     assert(go);
     if (go) {
         editDNASeq = qobject_cast<U2SequenceObject*>(go);
-        QString err = ctx->getAnnotatedDNAView()->addObject(editDNASeq);
+        QString err = dnaView->addObject(editDNASeq);
         assert(err.isEmpty());
         indexOfChangedChars.clear();
         update();
@@ -348,7 +350,7 @@ void ChromatogramView::sl_clearEditableSequence() {
     if (editDNASeq == NULL) {
         return;
     }
-    ctx->getAnnotatedDNAView()->removeObject(editDNASeq);
+    dnaView->removeObject(editDNASeq);
 }
 
 void ChromatogramView::sl_removeChanges()   {
@@ -483,7 +485,7 @@ void ChromatogramViewRenderArea::drawAll(QPaintDevice* pd) {
     const U2Region& visible = view->getVisibleRange();
     assert(!visible.isEmpty());
 
-    ADVSequenceObjectContext* seqCtx = view->getSequenceContext();
+    SequenceObjectContext* seqCtx = view->getSequenceContext();
     U2OpStatusImpl os;
     QByteArray seq = seqCtx->getSequenceObject()->getWholeSequenceData(os);
     SAFE_POINT_OP(os, );
diff --git a/src/plugins/chroma_view/src/ChromatogramView.h b/src/plugins/chroma_view/src/ChromatogramView.h
index d1888ac..2b3a693 100644
--- a/src/plugins/chroma_view/src/ChromatogramView.h
+++ b/src/plugins/chroma_view/src/ChromatogramView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,15 +27,11 @@
 #include <U2View/GSequenceLineView.h>
 #include <U2Gui/ScaleBar.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
-
 namespace U2 {
 
+class ADVSequenceObjectContext;
 class ChromatogramViewRenderArea;
+class AnnotatedDNAView;
 class GObjectView;
 class Task;
 
@@ -84,6 +80,7 @@ private:
     int getEditSeqIndex(int bcIndex);
     QAction* createToggleTraceAction(const QString& actionName);
 
+    AnnotatedDNAView*           dnaView;
     U2SequenceObject*           editDNASeq;
     QByteArray                  currentBaseCalls;
     QSet<int>                   indexOfChangedChars;
diff --git a/src/plugins/chroma_view/transl/english.ts b/src/plugins/chroma_view/transl/english.ts
index d16c739..aba00e1 100644
--- a/src/plugins/chroma_view/transl/english.ts
+++ b/src/plugins/chroma_view/transl/english.ts
@@ -4,7 +4,7 @@
 <context>
     <name>U2::ChromaViewAction</name>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="148"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="145"/>
         <source>Show chromatogram</source>
         <translation>Show chromatogram</translation>
     </message>
@@ -12,12 +12,12 @@
 <context>
     <name>U2::ChromaViewPlugin</name>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="62"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="57"/>
         <source>Chromatogram View</source>
         <translation>Chromatogram View</translation>
     </message>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="62"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="57"/>
         <source>Chromatograms visualization</source>
         <translation>Chromatograms visualization</translation>
     </message>
@@ -25,38 +25,38 @@
 <context>
     <name>U2::ChromatogramView</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="76"/>
+        <location filename="../src/ChromatogramView.cpp" line="78"/>
         <source>Show all</source>
         <translation>Show all</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="79"/>
+        <location filename="../src/ChromatogramView.cpp" line="81"/>
         <source>Show/hide trace</source>
         <translation>Show/hide trace</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="110"/>
+        <location filename="../src/ChromatogramView.cpp" line="112"/>
         <source>Edit new sequence</source>
         <translation>Edit new sequence</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="113"/>
+        <location filename="../src/ChromatogramView.cpp" line="115"/>
         <source>Edit existing sequence</source>
         <translation>Edit existing sequence</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="116"/>
+        <location filename="../src/ChromatogramView.cpp" line="118"/>
         <source>Remove edited sequence</source>
         <translation>Remove edited sequence</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="119"/>
+        <location filename="../src/ChromatogramView.cpp" line="121"/>
         <source>Undo changes</source>
         <translation>Undo changes</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="219"/>
-        <location filename="../src/ChromatogramView.cpp" line="356"/>
+        <location filename="../src/ChromatogramView.cpp" line="221"/>
+        <location filename="../src/ChromatogramView.cpp" line="358"/>
         <source>The sequence is locked</source>
         <translation>The sequence is locked</translation>
     </message>
@@ -69,7 +69,7 @@
         <translation type="obsolete">Sequence is locked</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="69"/>
+        <location filename="../src/ChromatogramView.cpp" line="71"/>
         <source>Show quality bars</source>
         <translation>Show quality bars</translation>
     </message>
@@ -77,12 +77,12 @@
 <context>
     <name>U2::ChromatogramViewRenderArea</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="512"/>
+        <location filename="../src/ChromatogramView.cpp" line="514"/>
         <source>Chromatogram view (zoom in to see base calls)</source>
         <translation>Chromatogram view (zoom in to see base calls)</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="737"/>
+        <location filename="../src/ChromatogramView.cpp" line="739"/>
         <source>original sequence</source>
         <translation>original sequence</translation>
     </message>
diff --git a/src/plugins/chroma_view/transl/russian.ts b/src/plugins/chroma_view/transl/russian.ts
index aea8f47..ee2d259 100644
--- a/src/plugins/chroma_view/transl/russian.ts
+++ b/src/plugins/chroma_view/transl/russian.ts
@@ -4,7 +4,7 @@
 <context>
     <name>U2::ChromaViewAction</name>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="148"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="145"/>
         <source>Show chromatogram</source>
         <translation>Показать хроматограмму</translation>
     </message>
@@ -12,12 +12,12 @@
 <context>
     <name>U2::ChromaViewPlugin</name>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="62"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="57"/>
         <source>Chromatogram View</source>
         <translation>Хроматограмма</translation>
     </message>
     <message>
-        <location filename="../src/ChromaViewPlugin.cpp" line="62"/>
+        <location filename="../src/ChromaViewPlugin.cpp" line="57"/>
         <source>Chromatograms visualization</source>
         <translation>Показать хроматограмму</translation>
     </message>
@@ -25,38 +25,38 @@
 <context>
     <name>U2::ChromatogramView</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="76"/>
+        <location filename="../src/ChromatogramView.cpp" line="78"/>
         <source>Show all</source>
         <translation>Показать все</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="79"/>
+        <location filename="../src/ChromatogramView.cpp" line="81"/>
         <source>Show/hide trace</source>
-        <translation>Показать/скрыть след</translation>
+        <translation>Показывать/скрывать отдельные сигналы</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="110"/>
+        <location filename="../src/ChromatogramView.cpp" line="112"/>
         <source>Edit new sequence</source>
         <translation>Редактировать новую последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="113"/>
+        <location filename="../src/ChromatogramView.cpp" line="115"/>
         <source>Edit existing sequence</source>
         <translation>Редактировать существующую последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="116"/>
+        <location filename="../src/ChromatogramView.cpp" line="118"/>
         <source>Remove edited sequence</source>
         <translation>Удалить редактируемую последовательность</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="119"/>
+        <location filename="../src/ChromatogramView.cpp" line="121"/>
         <source>Undo changes</source>
         <translation>Отменить изменения</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="219"/>
-        <location filename="../src/ChromatogramView.cpp" line="356"/>
+        <location filename="../src/ChromatogramView.cpp" line="221"/>
+        <location filename="../src/ChromatogramView.cpp" line="358"/>
         <source>The sequence is locked</source>
         <translation>Последовательность заблокирована</translation>
     </message>
@@ -69,7 +69,7 @@
         <translation type="obsolete">Последовательность заблокирована</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="69"/>
+        <location filename="../src/ChromatogramView.cpp" line="71"/>
         <source>Show quality bars</source>
         <translation>Показывать уровни достоверности</translation>
     </message>
@@ -77,12 +77,12 @@
 <context>
     <name>U2::ChromatogramViewRenderArea</name>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="512"/>
+        <location filename="../src/ChromatogramView.cpp" line="514"/>
         <source>Chromatogram view (zoom in to see base calls)</source>
         <translation>Хроматограмма (приближайте масштаб)</translation>
     </message>
     <message>
-        <location filename="../src/ChromatogramView.cpp" line="737"/>
+        <location filename="../src/ChromatogramView.cpp" line="739"/>
         <source>original sequence</source>
         <translation>Исходная последовательность</translation>
     </message>
diff --git a/src/plugins/circular_view/src/CircularItems.cpp b/src/plugins/circular_view/src/CircularItems.cpp
index 3b2bfac..2b7a05c 100644
--- a/src/plugins/circular_view/src/CircularItems.cpp
+++ b/src/plugins/circular_view/src/CircularItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/CircularItems.h b/src/plugins/circular_view/src/CircularItems.h
index 088c79a..d7447c7 100644
--- a/src/plugins/circular_view/src/CircularItems.h
+++ b/src/plugins/circular_view/src/CircularItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,8 @@
 #ifndef _CIRCULAR_ITEMS_H_
 #define _CIRCULAR_ITEMS_H_
 
-#include <QtGui/QFont>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsPathItem>
-#else
-#include <QtWidgets/QGraphicsPathItem>
-#endif
+#include <QFont>
+#include <QGraphicsPathItem>
 
 #include <U2Core/Annotation.h>
 
diff --git a/src/plugins/circular_view/src/CircularView.cpp b/src/plugins/circular_view/src/CircularView.cpp
index 2ce38b9..ba16247 100644
--- a/src/plugins/circular_view/src/CircularView.cpp
+++ b/src/plugins/circular_view/src/CircularView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,8 @@
 
 #include <math.h>
 
-#include <QtGui/QFontMetrics>
-#include <QtGui/QPainter>
+#include <QFontMetrics>
+#include <QPainter>
 
 #include <QApplication>
 #include <QDialog>
@@ -427,9 +427,9 @@ void CircularView::adaptSizes() {
 qreal CircularView::coordToAngle(const QPoint point) {
     float norm = sqrt((double)point.x()*point.x() + point.y()*point.y());
     float arcsin = 0.0;
-    if (abs(norm) > 1.0)
+    if (qAbs(norm) > 1.0)
     {
-        arcsin = asin(abs((double)point.y())/norm);
+        arcsin = asin(qAbs((double)point.y())/norm);
     }
 
     if(point.x() < 0) {
@@ -612,7 +612,7 @@ void CircularViewRenderArea::drawAll(QPaintDevice* pd) {
 }
 
 void CircularViewRenderArea::drawAnnotationsSelection(QPainter& p) {
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
+    SequenceObjectContext* ctx = view->getSequenceContext();
 
     if(ctx->getAnnotationsSelection()->getSelection().isEmpty()) {
         return;
@@ -648,7 +648,7 @@ namespace {
 void CircularViewRenderArea::drawSequenceName(QPainter& p) {
     QPen boldPen(Qt::black);
     boldPen.setWidth(3);
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
+    SequenceObjectContext* ctx = view->getSequenceContext();
 
     assert(ctx->getSequenceGObject() != NULL);
 
@@ -696,7 +696,7 @@ void CircularViewRenderArea::drawSequenceName(QPainter& p) {
 }
 
 void CircularViewRenderArea::drawSequenceSelection(QPainter& p) {
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
+    SequenceObjectContext* ctx = view->getSequenceContext();
     int seqLen = ctx->getSequenceLength();
     const QVector<U2Region>& selection = view->getSequenceContext()->getSequenceSelection()->getSelectedRegions();
     if (selection.isEmpty()) {
@@ -816,7 +816,7 @@ qreal CircularViewRenderArea::getVisibleAngle() const {
 }
 
 QPair<int,int> CircularViewRenderArea::getVisibleRange() const {
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
+    SequenceObjectContext* ctx = view->getSequenceContext();
     int seqLen = ctx->getSequenceObject()->getSequenceLength();
     if (verticalOffset <= parentWidget()->height()) {
         return qMakePair<int,int>(0, seqLen);
@@ -835,7 +835,7 @@ void CircularViewRenderArea::drawRuler(QPainter& p) {
     normalizeAngle(rotationDegree);
 
     if (settings->showRulerCoordinates) {
-        ADVSequenceObjectContext* ctx = view->getSequenceContext();
+        SequenceObjectContext* ctx = view->getSequenceContext();
         U2Region range(0, ctx->getSequenceLength());
         QFont font = p.font();
         font.setPointSize(settings->rulerFontSize);
@@ -916,7 +916,7 @@ void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annota
         return;
     }
 
-    ADVSequenceObjectContext* ctx = view->getSequenceContext();
+    SequenceObjectContext* ctx = view->getSequenceContext();
     SAFE_POINT(ctx != NULL, "Sequence object context is NULL", );
     int seqLen = ctx->getSequenceLength();
 
@@ -952,7 +952,7 @@ void CircularViewRenderArea::buildAnnotationItem(DrawAnnotationPass pass, Annota
 }
 
 void CircularViewRenderArea::buildItems(QFont labelFont) {
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
+    SequenceObjectContext *ctx = view->getSequenceContext();
 
     qDeleteAll(circItems);
     circItems.clear();
@@ -1135,7 +1135,7 @@ void CircularViewRenderArea::buildAnnotationLabel(const QFont &font, Annotation
         return;
     }
 
-    ADVSequenceObjectContext *ctx = view->getSequenceContext();
+    SequenceObjectContext *ctx = view->getSequenceContext();
     U2Region seqReg(0, ctx->getSequenceLength());
 
     int seqLen = seqReg.length;
diff --git a/src/plugins/circular_view/src/CircularView.h b/src/plugins/circular_view/src/CircularView.h
index 7789efd..4d83362 100644
--- a/src/plugins/circular_view/src/CircularView.h
+++ b/src/plugins/circular_view/src/CircularView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/CircularViewImageExportTask.cpp b/src/plugins/circular_view/src/CircularViewImageExportTask.cpp
index d6a178c..af35180 100644
--- a/src/plugins/circular_view/src/CircularViewImageExportTask.cpp
+++ b/src/plugins/circular_view/src/CircularViewImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtXml/QDomDocument>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPrinter>
-#include <QtGui/QLabel>
-#include <QtGui/QCheckBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtPrintSupport/QPrinter>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QCheckBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QVBoxLayout>
-#endif
-#include <QtSvg/QSvgGenerator>
+#include <QDomDocument>
+#include <QPrinter>
+#include <QLabel>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QVBoxLayout>
+#include <QSvgGenerator>
 
 #include <U2Core/U2SafePoints.h>
 
diff --git a/src/plugins/circular_view/src/CircularViewImageExportTask.h b/src/plugins/circular_view/src/CircularViewImageExportTask.h
index 935f528..a5d3720 100644
--- a/src/plugins/circular_view/src/CircularViewImageExportTask.h
+++ b/src/plugins/circular_view/src/CircularViewImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/CircularViewPlugin.cpp b/src/plugins/circular_view/src/CircularViewPlugin.cpp
index 43675d6..b0da223 100644
--- a/src/plugins/circular_view/src/CircularViewPlugin.cpp
+++ b/src/plugins/circular_view/src/CircularViewPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/CircularViewPlugin.h b/src/plugins/circular_view/src/CircularViewPlugin.h
index 0372ee9..44a43f5 100644
--- a/src/plugins/circular_view/src/CircularViewPlugin.h
+++ b/src/plugins/circular_view/src/CircularViewPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#include <QtCore/QMap>
-#include <QtCore/QSet>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QMap>
+#include <QSet>
+#include <QAction>
 
 #include <U2View/ADVSequenceWidget.h>
 
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidget.cpp b/src/plugins/circular_view/src/CircularViewSettingsWidget.cpp
index a18d99f..4ccde27 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidget.cpp
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QFontDatabase>
+#include <QFontDatabase>
 
 #include <U2Core/U2SafePoints.h>
 
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidget.h b/src/plugins/circular_view/src/CircularViewSettingsWidget.h
index 5d85df8..492afec 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidget.h
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
index 9fe9f27..f340ce8 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,8 +30,7 @@ namespace U2 {
 
 const QString CircularViewSettingsWidgetFactory::GROUP_ID = "OP_CV_SETTINGS";
 const QString CircularViewSettingsWidgetFactory::GROUP_ICON_STR  = ":circular_view/images/circular.png";
-const QString CircularViewSettingsWidgetFactory::GROUP_TITLE = QObject::tr("Circular View Settings");
-const QString CircularViewSettingsWidgetFactory::GROUP_DOC_PAGE = "18223012";
+const QString CircularViewSettingsWidgetFactory::GROUP_DOC_PAGE = "20874916";
 
 CircularViewSettingsWidgetFactory::CircularViewSettingsWidgetFactory(CircularViewContext* context)
     : ctx(context) {
@@ -55,7 +54,7 @@ QWidget* CircularViewSettingsWidgetFactory::createWidget(GObjectView *objView) {
 }
 
 OPGroupParameters CircularViewSettingsWidgetFactory::getOPGroupParameters() {
-    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), GROUP_TITLE, GROUP_DOC_PAGE);
+    return OPGroupParameters(GROUP_ID, QPixmap(GROUP_ICON_STR), QObject::tr("Circular View Settings"), GROUP_DOC_PAGE);
 }
 
 bool CircularViewSettingsWidgetFactory::passFiltration(OPFactoryFilterVisitorInterface *filter) {
diff --git a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.h b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.h
index 3c89409..a3730f4 100644
--- a/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.h
+++ b/src/plugins/circular_view/src/CircularViewSettingsWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,6 @@ public:
 private:
     static const QString GROUP_ID;
     static const QString GROUP_ICON_STR;
-    static const QString GROUP_TITLE;
     static const QString GROUP_DOC_PAGE;
 
     CircularViewContext*    ctx;
diff --git a/src/plugins/circular_view/src/CircularViewSplitter.cpp b/src/plugins/circular_view/src/CircularViewSplitter.cpp
index 2cec7b9..0748aa8 100644
--- a/src/plugins/circular_view/src/CircularViewSplitter.cpp
+++ b/src/plugins/circular_view/src/CircularViewSplitter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,6 +37,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
@@ -219,11 +220,10 @@ void CircularViewSplitter::sl_export() {
 
     CircularViewImageExportController factory(circularViewList, cvInFocus);
 
+    QString fileName = GUrlUtils::fixFileName(seqObj->getSequenceName());
     QWidget *p = (QWidget*)AppContext::getMainWindow()->getQMainWindow();
     QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory, ExportImageDialog::CircularView,
-                                                                      ExportImageDialog::SupportScaling,
-                                                                      p,
-                                                                      "circular_" + seqObj->getSequenceName());
+                                                                      fileName, ExportImageDialog::SupportScaling, p);
     dialog->exec();
     CHECK(!dialog.isNull(), );
 }
diff --git a/src/plugins/circular_view/src/CircularViewSplitter.h b/src/plugins/circular_view/src/CircularViewSplitter.h
index 22884e4..14ff3df 100644
--- a/src/plugins/circular_view/src/CircularViewSplitter.h
+++ b/src/plugins/circular_view/src/CircularViewSplitter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/RestrictionMapWidget.cpp b/src/plugins/circular_view/src/RestrictionMapWidget.cpp
index 485af2f..f6690fe 100644
--- a/src/plugins/circular_view/src/RestrictionMapWidget.cpp
+++ b/src/plugins/circular_view/src/RestrictionMapWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/RestrictionMapWidget.h b/src/plugins/circular_view/src/RestrictionMapWidget.h
index c9f7ae4..dc92bd1 100644
--- a/src/plugins/circular_view/src/RestrictionMapWidget.h
+++ b/src/plugins/circular_view/src/RestrictionMapWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/SetSequenceOriginDialog.cpp b/src/plugins/circular_view/src/SetSequenceOriginDialog.cpp
index 34df13a..848d653 100644
--- a/src/plugins/circular_view/src/SetSequenceOriginDialog.cpp
+++ b/src/plugins/circular_view/src/SetSequenceOriginDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/SetSequenceOriginDialog.h b/src/plugins/circular_view/src/SetSequenceOriginDialog.h
index 0702753..6acd308 100644
--- a/src/plugins/circular_view/src/SetSequenceOriginDialog.h
+++ b/src/plugins/circular_view/src/SetSequenceOriginDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/ShiftSequenceStartTask.cpp b/src/plugins/circular_view/src/ShiftSequenceStartTask.cpp
index 07764d2..2ac7292 100644
--- a/src/plugins/circular_view/src/ShiftSequenceStartTask.cpp
+++ b/src/plugins/circular_view/src/ShiftSequenceStartTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/src/ShiftSequenceStartTask.h b/src/plugins/circular_view/src/ShiftSequenceStartTask.h
index 4075ec0..f433cb4 100644
--- a/src/plugins/circular_view/src/ShiftSequenceStartTask.h
+++ b/src/plugins/circular_view/src/ShiftSequenceStartTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/circular_view/transl/english.ts b/src/plugins/circular_view/transl/english.ts
index c01323b..729f498 100644
--- a/src/plugins/circular_view/transl/english.ts
+++ b/src/plugins/circular_view/transl/english.ts
@@ -102,23 +102,23 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="123"/>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="137"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="115"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="129"/>
         <source>Circular view</source>
         <translation>Circular view</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="167"/>
         <source>Include position marker</source>
         <translation>Include position marker</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="176"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="168"/>
         <source>Include selection</source>
         <translation>Include selection</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="33"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="57"/>
         <source>Circular View Settings</source>
         <translation>Circular View Settings</translation>
     </message>
@@ -180,22 +180,22 @@
 <context>
     <name>U2::CircularViewImageExportController</name>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="132"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="124"/>
         <source>List of Circular Views is empty!</source>
         <translation>List of Circular Views is empty!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="155"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="147"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="158"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="150"/>
         <source>Sequence context is NULL!</source>
         <translation>Sequence context is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="159"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="151"/>
         <source>Sequece Gobject is NULL</source>
         <translation>Sequece Gobject is NULL</translation>
     </message>
@@ -305,12 +305,12 @@
 <context>
     <name>U2::CircularViewSettingsWidgetFactory</name>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="38"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="37"/>
         <source>Circular view context is NULL</source>
         <translation>Circular view context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="43"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="42"/>
         <source>Object view is NULL</source>
         <translation>Object view is NULL</translation>
     </message>
@@ -318,57 +318,57 @@
 <context>
     <name>U2::CircularViewSplitter</name>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="56"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="58"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="57"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="59"/>
         <source>Zoom In</source>
         <translation>Zoom In</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="61"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="63"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="62"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="64"/>
         <source>Zoom Out</source>
         <translation>Zoom Out</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="65"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="67"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="66"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="68"/>
         <source>Fit To Full View</source>
         <translation>Fit To Full View</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="69"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="71"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="70"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="72"/>
         <source>Save circular view as image</source>
         <translation>Save circular view as image</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="73"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="75"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="74"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="76"/>
         <source>Show/hide restriction sites map</source>
         <translation>Show/hide restriction sites map</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="165"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="166"/>
         <source>Circular View is NULL</source>
         <translation>Circular View is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="167"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="168"/>
         <source>Circular View viewport is NULL</source>
         <translation>Circular View viewport is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="169"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="170"/>
         <source>Scroll area is NULL</source>
         <translation>Scroll area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="216"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="217"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="218"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="219"/>
         <source>Sequence obejct is NULL</source>
         <translation>Sequence obejct is NULL</translation>
     </message>
diff --git a/src/plugins/circular_view/transl/russian.ts b/src/plugins/circular_view/transl/russian.ts
index 7f74be6..6890fc1 100644
--- a/src/plugins/circular_view/transl/russian.ts
+++ b/src/plugins/circular_view/transl/russian.ts
@@ -102,23 +102,23 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="123"/>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="137"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="115"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="129"/>
         <source>Circular view</source>
         <translation>Круговой вид</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="175"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="167"/>
         <source>Include position marker</source>
         <translation>Включить позицию</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="176"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="168"/>
         <source>Include selection</source>
         <translation>Включить выделение</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="33"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="57"/>
         <source>Circular View Settings</source>
         <translation>Настройки кругового вида</translation>
     </message>
@@ -180,22 +180,22 @@
 <context>
     <name>U2::CircularViewImageExportController</name>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="132"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="124"/>
         <source>List of Circular Views is empty!</source>
         <translation>Список круговых видов пуст!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="155"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="147"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="158"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="150"/>
         <source>Sequence context is NULL!</source>
         <translation>Sequence context is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewImageExportTask.cpp" line="159"/>
+        <location filename="../src/CircularViewImageExportTask.cpp" line="151"/>
         <source>Sequece Gobject is NULL</source>
         <translation>Sequece Gobject is NULL</translation>
     </message>
@@ -305,12 +305,12 @@
 <context>
     <name>U2::CircularViewSettingsWidgetFactory</name>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="38"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="37"/>
         <source>Circular view context is NULL</source>
         <translation>Circular view context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="43"/>
+        <location filename="../src/CircularViewSettingsWidgetFactory.cpp" line="42"/>
         <source>Object view is NULL</source>
         <translation>Object view is NULL</translation>
     </message>
@@ -318,57 +318,57 @@
 <context>
     <name>U2::CircularViewSplitter</name>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="56"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="58"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="57"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="59"/>
         <source>Zoom In</source>
         <translation>Уменьшить</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="61"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="63"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="62"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="64"/>
         <source>Zoom Out</source>
         <translation>Увеличить</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="65"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="67"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="66"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="68"/>
         <source>Fit To Full View</source>
         <translation>Полный размер</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="69"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="71"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="70"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="72"/>
         <source>Save circular view as image</source>
         <translation>Сохранить круговой вид как изображение</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="73"/>
-        <location filename="../src/CircularViewSplitter.cpp" line="75"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="74"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="76"/>
         <source>Show/hide restriction sites map</source>
         <translation>Показать/скрыть карту сайтов рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="165"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="166"/>
         <source>Circular View is NULL</source>
         <translation>Circular View is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="167"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="168"/>
         <source>Circular View viewport is NULL</source>
         <translation>Circular View viewport is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="169"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="170"/>
         <source>Scroll area is NULL</source>
         <translation>Scroll area is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="216"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="217"/>
         <source>Sequence context is NULL</source>
         <translation>Sequence context is NULL</translation>
     </message>
     <message>
-        <location filename="../src/CircularViewSplitter.cpp" line="218"/>
+        <location filename="../src/CircularViewSplitter.cpp" line="219"/>
         <source>Sequence obejct is NULL</source>
         <translation>Sequence obejct is NULL</translation>
     </message>
diff --git a/src/plugins/cuda_support/src/CudaSupportPlugin.cpp b/src/plugins/cuda_support/src/CudaSupportPlugin.cpp
index a04b94b..388a212 100644
--- a/src/plugins/cuda_support/src/CudaSupportPlugin.cpp
+++ b/src/plugins/cuda_support/src/CudaSupportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/cuda_support/src/CudaSupportPlugin.h b/src/plugins/cuda_support/src/CudaSupportPlugin.h
index ccb0f9a..3b00fd7 100644
--- a/src/plugins/cuda_support/src/CudaSupportPlugin.h
+++ b/src/plugins/cuda_support/src/CudaSupportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/cuda_support/src/CudaSupportSettingsController.cpp b/src/plugins/cuda_support/src/CudaSupportSettingsController.cpp
index 1ffcb4e..54ea51e 100644
--- a/src/plugins/cuda_support/src/CudaSupportSettingsController.cpp
+++ b/src/plugins/cuda_support/src/CudaSupportSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/cuda_support/src/CudaSupportSettingsController.h b/src/plugins/cuda_support/src/CudaSupportSettingsController.h
index 38781e6..4bb1cc9 100644
--- a/src/plugins/cuda_support/src/CudaSupportSettingsController.h
+++ b/src/plugins/cuda_support/src/CudaSupportSettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,9 @@
 #ifndef __CUDA_SUPPORT_SETTINGS_CONTROLLER__
 #define __CUDA_SUPPORT_SETTINGS_CONTROLLER__
 
-#include <QtCore/QVector>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QCheckBox>
-#endif
+#include <QVector>
+#include <QLabel>
+#include <QCheckBox>
 
 #include <U2Gui/AppSettingsGUI.h>
 
diff --git a/src/plugins/dbi_bam/dbi_bam.pri b/src/plugins/dbi_bam/dbi_bam.pri
index 18235ce..410027e 100644
--- a/src/plugins/dbi_bam/dbi_bam.pri
+++ b/src/plugins/dbi_bam/dbi_bam.pri
@@ -26,7 +26,13 @@ DEFINES+="_FILE_OFFSET_BITS=64" _LARGEFILE64_SOURCE _USE_KNETFILE
 INCLUDEPATH += ../../libs_3rdparty/samtools/src ../../libs_3rdparty/samtools/src/samtools
 win32:INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools/win32
 win32:LIBS += -lws2_32
-win32:DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca" 
+win32:DEFINES += _USE_MATH_DEFINES "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+
+win32 {
+    !win32-msvc2015 {
+        DEFINES += "inline=__inline"
+    }
+}
 
 !debug_and_release|build_pass {
 
diff --git a/src/plugins/dbi_bam/src/Alignment.cpp b/src/plugins/dbi_bam/src/Alignment.cpp
index 75d82df..6739859 100644
--- a/src/plugins/dbi_bam/src/Alignment.cpp
+++ b/src/plugins/dbi_bam/src/Alignment.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Alignment.h b/src/plugins/dbi_bam/src/Alignment.h
index 1c3f85f..4af9c1f 100644
--- a/src/plugins/dbi_bam/src/Alignment.h
+++ b/src/plugins/dbi_bam/src/Alignment.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,10 @@
 
 #include <U2Core/U2Assembly.h>
 
-#include <QtCore/QFlags>
-#include <QtCore/QList>
-#include <QtCore/QMap>
-#include <QtCore/QVariant>
+#include <QFlags>
+#include <QList>
+#include <QMap>
+#include <QVariant>
 
 namespace U2 {
 namespace BAM {
diff --git a/src/plugins/dbi_bam/src/BAMDbiPlugin.cpp b/src/plugins/dbi_bam/src/BAMDbiPlugin.cpp
index 1498d38..7628cb2 100644
--- a/src/plugins/dbi_bam/src/BAMDbiPlugin.cpp
+++ b/src/plugins/dbi_bam/src/BAMDbiPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -113,11 +113,11 @@ FormatCheckResult BAMImporter::checkRawData(const QByteArray& rawData, const GUr
     return samScore;
 }
 
-DocumentProviderTask* BAMImporter::createImportTask(const FormatDetectionResult& res, bool showWizard, const QVariantMap &hints) {
+DocumentProviderTask* BAMImporter::createImportTask(const FormatDetectionResult& res, bool showGui, const QVariantMap &hints) {
     bool sam = res.rawDataCheckResult.properties[SAM_HINT].toBool();
     QVariantMap fullHints(hints);
     fullHints[SAM_HINT] = sam;
-    return new BAMImporterTask(res.url, showWizard, fullHints);
+    return new BAMImporterTask(res.url, showGui, fullHints);
 }
 
 
diff --git a/src/plugins/dbi_bam/src/BAMDbiPlugin.h b/src/plugins/dbi_bam/src/BAMDbiPlugin.h
index 6d668e4..518a827 100644
--- a/src/plugins/dbi_bam/src/BAMDbiPlugin.h
+++ b/src/plugins/dbi_bam/src/BAMDbiPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -53,7 +53,7 @@ public:
 
     virtual FormatCheckResult checkRawData(const QByteArray& rawData, const GUrl& url);
 
-    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showWizard, const QVariantMap &hints);
+    virtual DocumentProviderTask* createImportTask(const FormatDetectionResult& res, bool showGui, const QVariantMap &hints);
 };
 
 class LoadInfoTask;
diff --git a/src/plugins/dbi_bam/src/BAMFormat.cpp b/src/plugins/dbi_bam/src/BAMFormat.cpp
index fb19d1a..9b4660e 100644
--- a/src/plugins/dbi_bam/src/BAMFormat.cpp
+++ b/src/plugins/dbi_bam/src/BAMFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Task.h>
 #include <U2Core/Version.h>
 #include <U2Core/U2AlphabetUtils.h>
@@ -49,7 +49,10 @@ BAMFormat::BAMFormat()
     DocumentFormatFlags(DocumentFormatFlag_NoPack) | DocumentFormatFlag_NoFullMemoryLoad
     | DocumentFormatFlag_Hidden | DocumentFormatFlag_SupportWriting | DocumentFormatFlag_CannotBeCompressed)
 {
-
+    // DbiDocumentFormat adds a set of object types that are supported by DBI but have no relation to BAM.
+    // Reset these formats and add BAM related object types only.
+    supportedObjectTypes.clear();
+    supportedObjectTypes += GObjectTypes::ASSEMBLY;
 }
 
 void BAMFormat::storeDocument(Document *d, IOAdapter *io, U2OpStatus &os) {
diff --git a/src/plugins/dbi_bam/src/BAMFormat.h b/src/plugins/dbi_bam/src/BAMFormat.h
index baed800..a7e63b2 100644
--- a/src/plugins/dbi_bam/src/BAMFormat.h
+++ b/src/plugins/dbi_bam/src/BAMFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/GUrl.h>
 #include <U2Core/U2FormatCheckResult.h>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 
 namespace U2 {
diff --git a/src/plugins/dbi_bam/src/BaiReader.cpp b/src/plugins/dbi_bam/src/BaiReader.cpp
index eac26b4..0af37af 100644
--- a/src/plugins/dbi_bam/src/BaiReader.cpp
+++ b/src/plugins/dbi_bam/src/BaiReader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BaiReader.h b/src/plugins/dbi_bam/src/BaiReader.h
index a5e7338..7a37c5a 100644
--- a/src/plugins/dbi_bam/src/BaiReader.h
+++ b/src/plugins/dbi_bam/src/BaiReader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BaiWriter.cpp b/src/plugins/dbi_bam/src/BaiWriter.cpp
index a8d50f8..a1d147f 100644
--- a/src/plugins/dbi_bam/src/BaiWriter.cpp
+++ b/src/plugins/dbi_bam/src/BaiWriter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BaiWriter.h b/src/plugins/dbi_bam/src/BaiWriter.h
index 529bad6..ea24c9f 100644
--- a/src/plugins/dbi_bam/src/BaiWriter.h
+++ b/src/plugins/dbi_bam/src/BaiWriter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BgzfReader.cpp b/src/plugins/dbi_bam/src/BgzfReader.cpp
index 8f02856..e5b5cf1 100644
--- a/src/plugins/dbi_bam/src/BgzfReader.cpp
+++ b/src/plugins/dbi_bam/src/BgzfReader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BgzfReader.h b/src/plugins/dbi_bam/src/BgzfReader.h
index 9a6a35b..d3c55e4 100644
--- a/src/plugins/dbi_bam/src/BgzfReader.h
+++ b/src/plugins/dbi_bam/src/BgzfReader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BgzfWriter.cpp b/src/plugins/dbi_bam/src/BgzfWriter.cpp
index cb7637a..bda1b04 100644
--- a/src/plugins/dbi_bam/src/BgzfWriter.cpp
+++ b/src/plugins/dbi_bam/src/BgzfWriter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/BgzfWriter.h b/src/plugins/dbi_bam/src/BgzfWriter.h
index d730b11..42c7052 100644
--- a/src/plugins/dbi_bam/src/BgzfWriter.h
+++ b/src/plugins/dbi_bam/src/BgzfWriter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/CancelledException.cpp b/src/plugins/dbi_bam/src/CancelledException.cpp
index a3e29b0..83ecfd1 100644
--- a/src/plugins/dbi_bam/src/CancelledException.cpp
+++ b/src/plugins/dbi_bam/src/CancelledException.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/CancelledException.h b/src/plugins/dbi_bam/src/CancelledException.h
index d406606..ad9c789 100644
--- a/src/plugins/dbi_bam/src/CancelledException.h
+++ b/src/plugins/dbi_bam/src/CancelledException.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
index d42992e..9390875 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,7 +57,7 @@ ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _b
       sourceUrl(_sourceUrl),
       bamInfo(_bamInfo) {
     ui.setupUi(this);
-    new HelpButton(this, ui.buttonBox, "18223100");
+    new HelpButton(this, ui.buttonBox, "20875004");
     ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     ui.buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -114,6 +114,13 @@ ConvertToSQLiteDialog::ConvertToSQLiteDialog(const GUrl& _sourceUrl, BAMInfo& _b
     ui.sourceUrlView->setText(QDir::cleanPath(sourceUrl.getURLString()));
     okButton->setFocus();
     connect(ui.tableWidget, SIGNAL(itemChanged(QTableWidgetItem*)), SLOT(sl_assemblyCheckChanged(QTableWidgetItem*)));
+
+    setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
+    adjustSize();
+    if (ui.tableWidget->isHidden()) {
+        setFixedHeight(height());
+    }
+    setMinimumWidth(600);
 }
 
 void ConvertToSQLiteDialog::hideReferenceUrl() {
@@ -309,7 +316,7 @@ bool ConvertToSQLiteDialog::checkReferencesState() {
 void ConvertToSQLiteDialog::initSaveController() {
     SaveDocumentControllerConfig config;
     config.defaultDomain = DIR_HELPER_DOMAIN;
-    config.defaultFileName = sourceUrl.dirPath() + "/" + sourceUrl.fileName() + ".ugenedb";
+    config.defaultFileName = sourceUrl.dirPath() + "/" + QFileInfo(sourceUrl.fileName()).completeBaseName() + ".ugenedb";
     config.defaultFormatId = BaseDocumentFormats::UGENEDB;
     config.fileDialogButton = ui.destinationUrlButton;
     config.fileNameEdit = ui.destinationUrlEdit;
@@ -343,7 +350,7 @@ void ConvertToSQLiteDialog::accept() {
         QMessageBox::critical(this, windowTitle(), BAMDbiPlugin::tr("Destination URL must point to a local file"));
     } else if (!checkWritePermissions(destinationUrl.getURLString())) {
         ui.destinationUrlEdit->setFocus(Qt::OtherFocusReason);
-        QMessageBox::critical(this, windowTitle(), BAMDbiPlugin::tr("Destination URL directory has not write permissions"));
+        QMessageBox::critical(this, windowTitle(), BAMDbiPlugin::tr("Destination URL folder has not write permissions"));
     } else {
         if (!checkReferencesState()) {
             return;
@@ -362,7 +369,7 @@ void ConvertToSQLiteDialog::accept() {
         QFileInfo destinationDir(QFileInfo(destinationUrl.getURLString()).path());
         if(!destinationDir.isWritable()) {
             ui.destinationUrlEdit->setFocus(Qt::OtherFocusReason);
-            QMessageBox::critical(this, windowTitle(), BAMDbiPlugin::tr("Destination directory '%1' is not writable, please choose different destination URL").arg(destinationDir.absoluteFilePath()));
+            QMessageBox::critical(this, windowTitle(), BAMDbiPlugin::tr("Destination folder '%1' is not writable, please choose different destination URL").arg(destinationDir.absoluteFilePath()));
             return;
         }
 
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
index 9ee68fa..6a66e1d 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.ui b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.ui
index b217e05..6818e66 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.ui
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteDialog.ui
@@ -2,12 +2,29 @@
 <ui version="4.0">
  <class>ConvertToSQLiteDialog</class>
  <widget class="QDialog" name="ConvertToSQLiteDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>581</width>
+    <height>491</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="windowTitle">
    <string>Import BAM File</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <property name="sizeGripEnabled">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="dialogLayout">
    <property name="sizeConstraint">
-    <enum>QLayout::SetFixedSize</enum>
+    <enum>QLayout::SetDefaultConstraint</enum>
    </property>
    <item>
     <layout class="QGridLayout" name="gridLayout_3">
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteTask.cpp b/src/plugins/dbi_bam/src/ConvertToSQLiteTask.cpp
index 9239ac6..4425171 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteTask.cpp
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/ConvertToSQLiteTask.h b/src/plugins/dbi_bam/src/ConvertToSQLiteTask.h
index 742e59d..1d9abb0 100644
--- a/src/plugins/dbi_bam/src/ConvertToSQLiteTask.h
+++ b/src/plugins/dbi_bam/src/ConvertToSQLiteTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Dbi.cpp b/src/plugins/dbi_bam/src/Dbi.cpp
index 46e1e4c..70a9c28 100644
--- a/src/plugins/dbi_bam/src/Dbi.cpp
+++ b/src/plugins/dbi_bam/src/Dbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include "IOException.h"
 #include "CancelledException.h"
@@ -86,7 +86,7 @@ void Dbi::init(const QHash<QString, QString> &properties, const QVariantMap & /*
             QList<qint64> maxReadLengths;
             for(int index = 0;index < assembliesCount;index++) {
                 U2OpStatusImpl opStatus;
-                SQLiteQuery q("SELECT maxReadLength FROM assemblies WHERE id = ?1;", &dbRef, opStatus);
+                SQLiteReadQuery q("SELECT maxReadLength FROM assemblies WHERE id = ?1;", &dbRef, opStatus);
                 q.bindInt64(1, index + 1);
                 maxReadLengths.append(q.selectInt64());
                 if(opStatus.hasError()) {
@@ -190,7 +190,7 @@ bool Dbi::isReadOnly() const {
 void Dbi::buildIndex(U2OpStatus &os) {
     {
         U2OpStatusImpl opStatus;
-        int tableCount = SQLiteQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND (name = 'assemblies' OR name = 'assemblyReads');", &dbRef, opStatus).selectInt64();
+        int tableCount = SQLiteReadQuery("SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND (name = 'assemblies' OR name = 'assemblyReads');", &dbRef, opStatus).selectInt64();
         if (opStatus.hasError()) {
             throw Exception(opStatus.getError());
         }
@@ -200,14 +200,14 @@ void Dbi::buildIndex(U2OpStatus &os) {
     }
     {
         U2OpStatusImpl opStatus;
-        SQLiteQuery("DROP TABLE IF EXISTS assemblyReads;", &dbRef, opStatus).execute();
+        SQLiteWriteQuery("DROP TABLE IF EXISTS assemblyReads;", &dbRef, opStatus).execute();
         if(opStatus.hasError()) {
             throw Exception(opStatus.getError());
         }
     }
     {
         U2OpStatusImpl opStatus;
-        SQLiteQuery("DROP TABLE IF EXISTS assemblies;", &dbRef, opStatus).execute();
+        SQLiteWriteQuery("DROP TABLE IF EXISTS assemblies;", &dbRef, opStatus).execute();
         if(opStatus.hasError()) {
             throw Exception(opStatus.getError());
         }
@@ -221,14 +221,14 @@ void Dbi::buildIndex(U2OpStatus &os) {
         try {
             {
                 U2OpStatusImpl opStatus;
-                SQLiteQuery("CREATE TABLE assemblies (id INTEGER PRIMARY KEY, maxEndPos INTEGER, maxReadLength INTEGER);",&dbRef, opStatus).execute();
+                SQLiteWriteQuery("CREATE TABLE assemblies (id INTEGER PRIMARY KEY, maxEndPos INTEGER, maxReadLength INTEGER);",&dbRef, opStatus).execute();
                 if(opStatus.hasError()) {
                     throw Exception(opStatus.getError());
                 }
             }
             {
                 U2OpStatusImpl opStatus;
-                SQLiteQuery("CREATE TABLE assemblyReads (id INTEGER PRIMARY KEY, assemblyId INTEGER REFERENCES assemblies, startPosition INTEGER, endPosition INTEGER, packedRow INTEGER);", &dbRef, opStatus).execute();
+                SQLiteWriteQuery("CREATE TABLE assemblyReads (id INTEGER PRIMARY KEY, assemblyId INTEGER REFERENCES assemblies, startPosition INTEGER, endPosition INTEGER, packedRow INTEGER);", &dbRef, opStatus).execute();
                 if(opStatus.hasError()) {
                     throw Exception(opStatus.getError());
                 }
@@ -242,7 +242,7 @@ void Dbi::buildIndex(U2OpStatus &os) {
             for(int referenceId = 0;referenceId < header.getReferences().size();referenceId++) {
                 {
                     U2OpStatusImpl opStatus;
-                    SQLiteQuery insertAssemblyQ("INSERT INTO assemblies(id) VALUES (?1);", &dbRef, opStatus);
+                    SQLiteWriteQuery insertAssemblyQ("INSERT INTO assemblies(id) VALUES (?1);", &dbRef, opStatus);
                     insertAssemblyQ.bindInt64(1, referenceId + 1);
                     insertAssemblyQ.execute();
                     if(opStatus.hasError()) {
@@ -257,7 +257,7 @@ void Dbi::buildIndex(U2OpStatus &os) {
             }
             {
                 U2OpStatusImpl insertReadOpStatus;
-                SQLiteQuery insertReadQ("INSERT INTO assemblyReads(id, assemblyId, startPosition, endPosition, packedRow) VALUES (?1, ?2, ?3, ?4, ?5);", &dbRef, insertReadOpStatus);
+                SQLiteWriteQuery insertReadQ("INSERT INTO assemblyReads(id, assemblyId, startPosition, endPosition, packedRow) VALUES (?1, ?2, ?3, ?4, ?5);", &dbRef, insertReadOpStatus);
                 while(!reader->isEof()) {
                     VirtualOffset alignmentOffset = reader->getOffset();
                     Alignment alignment = reader->readAlignment();
@@ -298,7 +298,7 @@ void Dbi::buildIndex(U2OpStatus &os) {
             }
             for(int referenceId = 0;referenceId < header.getReferences().size();referenceId++) {
                 U2OpStatusImpl opStatus;
-                SQLiteQuery updateEndQ("UPDATE assemblies SET maxEndPos = ?1, maxReadLength = ?2 WHERE id = ?3;", &dbRef, opStatus);
+                SQLiteWriteQuery updateEndQ("UPDATE assemblies SET maxEndPos = ?1, maxReadLength = ?2 WHERE id = ?3;", &dbRef, opStatus);
                 updateEndQ.reset();
                 updateEndQ.bindInt64(1, maxEndPositions[referenceId]);
                 updateEndQ.bindInt64(2, maxReadLengths[referenceId]);
@@ -310,7 +310,7 @@ void Dbi::buildIndex(U2OpStatus &os) {
             }
             {
                 U2OpStatusImpl opStatus;
-                SQLiteQuery("CREATE INDEX startPosition ON assemblyReads(assemblyId, startPosition)", &dbRef, opStatus).execute();
+                SQLiteWriteQuery("CREATE INDEX startPosition ON assemblyReads(assemblyId, startPosition)", &dbRef, opStatus).execute();
                 if(opStatus.hasError()) {
                     throw Exception(opStatus.getError());
                 }
@@ -389,7 +389,7 @@ QHash<U2DataId, QString> ObjectDbi::getObjectNames(qint64 offset, qint64 count,
         }
 
         U2OpStatusImpl opStatus;
-        SQLiteQuery q("SELECT id, name FROM Object WHERE type = ?1;", offset, count, &dbRef, opStatus);
+        SQLiteReadQuery q("SELECT id, name FROM Object WHERE type = ?1;", offset, count, &dbRef, opStatus);
         q.bindType(1, U2Type::Assembly);
 
         while (q.step()) {
@@ -415,7 +415,7 @@ QList<U2DataId> ObjectDbi::getObjects(U2DataType type, qint64 offset, qint64 cou
         }
         if(U2Type::Assembly == type) {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT id FROM assemblies;", offset, count, &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT id FROM assemblies;", offset, count, &dbRef, opStatus);
             QList<U2DataId> result = q.selectDataIds(0);
             return result;
         } else {
@@ -552,6 +552,15 @@ void ObjectDbi::setObjectRank(const U2DataId & /*objectId*/, U2DbiObjectRank /*n
     os.setError("Not implemented!");
 }
 
+U2DbiObjectRank ObjectDbi::getObjectRank(const U2DataId & /*objectId*/, U2OpStatus &os) {
+    os.setError("Not implemented!");
+    return U2DbiObjectRank_TopLevel;
+}
+
+void ObjectDbi::setParent(const U2DataId& /*parentId*/, const U2DataId& /*childId*/, U2OpStatus& os){
+    os.setError("Not implemented!");
+}
+
 // AssemblyDbi
 AssemblyDbi::AssemblyDbi(Dbi &dbi, BamReader &reader, DbRef &dbRef, QList<qint64> maxReadLengths):
     U2SimpleAssemblyDbi(&dbi),
@@ -593,7 +602,7 @@ qint64 AssemblyDbi::countReads(const U2DataId& assemblyId, const U2Region &r, U2
         qint64 result;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT COUNT(*) FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4;", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT COUNT(*) FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4;", &dbRef, opStatus);
             q.bindDataId(1, assemblyId);
             q.bindInt64(2, r.endPos());
             q.bindInt64(3, r.startPos - getMaxReadLength(assemblyId, r));
@@ -622,7 +631,7 @@ U2DbiIterator<U2AssemblyRead>* AssemblyDbi::getReads(const U2DataId& assemblyId,
         QList<qint64> packedRows;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT id, packedRow FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT id, packedRow FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4", &dbRef, opStatus);
             q.bindDataId(1, assemblyId);
             q.bindInt64(2, r.endPos());
             q.bindInt64(3, r.startPos - getMaxReadLength(assemblyId, r));
@@ -662,7 +671,7 @@ U2AssemblyRead AssemblyDbi::getReadById(const U2DataId& rowId, U2OpStatus &os) {
         qint64 packedRow = 0;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT packedRow FROM assemblyReads WHERE id = ?1;", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT packedRow FROM assemblyReads WHERE id = ?1;", &dbRef, opStatus);
             q.bindDataId(1, rowId);
             packedRow = q.getInt64(0);
             if(opStatus.hasError()) {
@@ -695,7 +704,7 @@ qint64 AssemblyDbi::getMaxPackedRow(const U2DataId& assemblyId, const U2Region &
         qint64 result = 0;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT MAX(packedRow) FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4;", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT MAX(packedRow) FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4;", &dbRef, opStatus);
             q.bindDataId(1, assemblyId);
             q.bindInt64(2, r.endPos());
             q.bindInt64(3, r.startPos - getMaxReadLength(assemblyId, r));
@@ -724,7 +733,7 @@ U2DbiIterator<U2AssemblyRead>* AssemblyDbi::getReadsByRow(const U2DataId& assemb
         QList<qint64> packedRows;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT id, packedRow FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4 AND packedRow >= ?5 AND packedRow <= ?6;", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT id, packedRow FROM assemblyReads WHERE assemblyId = ?1 AND startPosition < ?2 AND startPosition > ?3 AND endPosition > ?4 AND packedRow >= ?5 AND packedRow <= ?6;", &dbRef, opStatus);
             q.bindDataId(1, assemblyId);
             q.bindInt64(2, r.endPos());
             q.bindInt64(3, r.startPos - getMaxReadLength(assemblyId, r));
@@ -770,7 +779,7 @@ qint64 AssemblyDbi::getMaxEndPos(const U2DataId& assemblyId, U2OpStatus &os) {
         quint64 result = 0;
         {
             U2OpStatusImpl opStatus;
-            SQLiteQuery q("SELECT maxEndPos FROM assemblies WHERE id = ?1;", &dbRef, opStatus);
+            SQLiteReadQuery q("SELECT maxEndPos FROM assemblies WHERE id = ?1;", &dbRef, opStatus);
             q.bindDataId(1, assemblyId);
             result = q.selectInt64();
             if(opStatus.hasError()) {
diff --git a/src/plugins/dbi_bam/src/Dbi.h b/src/plugins/dbi_bam/src/Dbi.h
index 3b8267d..541a002 100644
--- a/src/plugins/dbi_bam/src/Dbi.h
+++ b/src/plugins/dbi_bam/src/Dbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -121,6 +121,10 @@ public:
 
     virtual void setObjectRank(const U2DataId &objectId, U2DbiObjectRank newRank, U2OpStatus &os);
 
+    virtual U2DbiObjectRank getObjectRank(const U2DataId &objectId, U2OpStatus& os);
+
+    virtual void setParent(const U2DataId& parentId, const U2DataId& childId, U2OpStatus& os);
+
 private:
     Dbi &dbi;
     DbRef &dbRef;
diff --git a/src/plugins/dbi_bam/src/Exception.cpp b/src/plugins/dbi_bam/src/Exception.cpp
index dd14f44..dc7ecca 100644
--- a/src/plugins/dbi_bam/src/Exception.cpp
+++ b/src/plugins/dbi_bam/src/Exception.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Exception.h b/src/plugins/dbi_bam/src/Exception.h
index a6a520e..0de3544 100644
--- a/src/plugins/dbi_bam/src/Exception.h
+++ b/src/plugins/dbi_bam/src/Exception.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_BAM_EXCEPTION_H_
 #define _U2_BAM_EXCEPTION_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 namespace BAM {
diff --git a/src/plugins/dbi_bam/src/Header.cpp b/src/plugins/dbi_bam/src/Header.cpp
index 29c1f76..27bf16d 100644
--- a/src/plugins/dbi_bam/src/Header.cpp
+++ b/src/plugins/dbi_bam/src/Header.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Header.h b/src/plugins/dbi_bam/src/Header.h
index 2a4fbed..8017a0c 100644
--- a/src/plugins/dbi_bam/src/Header.h
+++ b/src/plugins/dbi_bam/src/Header.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_BAM_HEADER_H_
 #define _U2_BAM_HEADER_H_
 
-#include <QtCore/QByteArray>
-#include <QtCore/QMap>
-#include <QtCore/QVariant>
+#include <QByteArray>
+#include <QMap>
+#include <QVariant>
 #include <U2Core/Version.h>
 #include <U2Core/GUrl.h>
 
diff --git a/src/plugins/dbi_bam/src/IOException.cpp b/src/plugins/dbi_bam/src/IOException.cpp
index 5854168..755199c 100644
--- a/src/plugins/dbi_bam/src/IOException.cpp
+++ b/src/plugins/dbi_bam/src/IOException.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/IOException.h b/src/plugins/dbi_bam/src/IOException.h
index 5275fe7..a12d62a 100644
--- a/src/plugins/dbi_bam/src/IOException.h
+++ b/src/plugins/dbi_bam/src/IOException.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Index.cpp b/src/plugins/dbi_bam/src/Index.cpp
index cb78134..1871b61 100644
--- a/src/plugins/dbi_bam/src/Index.cpp
+++ b/src/plugins/dbi_bam/src/Index.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Index.h b/src/plugins/dbi_bam/src/Index.h
index 8a2d543..2027ada 100644
--- a/src/plugins/dbi_bam/src/Index.h
+++ b/src/plugins/dbi_bam/src/Index.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_BAM_INDEX_H_
 #define _U2_BAM_INDEX_H_
 
-#include <QtCore/QList>
+#include <QList>
 #include "VirtualOffset.h"
 
 namespace U2 {
diff --git a/src/plugins/dbi_bam/src/InvalidFormatException.cpp b/src/plugins/dbi_bam/src/InvalidFormatException.cpp
index fc0548e..843a8c1 100644
--- a/src/plugins/dbi_bam/src/InvalidFormatException.cpp
+++ b/src/plugins/dbi_bam/src/InvalidFormatException.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/InvalidFormatException.h b/src/plugins/dbi_bam/src/InvalidFormatException.h
index 8bf8909..a4b3784 100644
--- a/src/plugins/dbi_bam/src/InvalidFormatException.h
+++ b/src/plugins/dbi_bam/src/InvalidFormatException.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/LoadBamInfoTask.cpp b/src/plugins/dbi_bam/src/LoadBamInfoTask.cpp
index 6b71c36..3b0104e 100644
--- a/src/plugins/dbi_bam/src/LoadBamInfoTask.cpp
+++ b/src/plugins/dbi_bam/src/LoadBamInfoTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/LoadBamInfoTask.h b/src/plugins/dbi_bam/src/LoadBamInfoTask.h
index 6875ba9..056c8a0 100644
--- a/src/plugins/dbi_bam/src/LoadBamInfoTask.h
+++ b/src/plugins/dbi_bam/src/LoadBamInfoTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/PrepareToImportTask.cpp b/src/plugins/dbi_bam/src/PrepareToImportTask.cpp
index 6f604cc..a5f9895 100644
--- a/src/plugins/dbi_bam/src/PrepareToImportTask.cpp
+++ b/src/plugins/dbi_bam/src/PrepareToImportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
diff --git a/src/plugins/dbi_bam/src/PrepareToImportTask.h b/src/plugins/dbi_bam/src/PrepareToImportTask.h
index a2b6bc2..c6d5919 100644
--- a/src/plugins/dbi_bam/src/PrepareToImportTask.h
+++ b/src/plugins/dbi_bam/src/PrepareToImportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Reader.cpp b/src/plugins/dbi_bam/src/Reader.cpp
index 4cbda5c..9219d39 100644
--- a/src/plugins/dbi_bam/src/Reader.cpp
+++ b/src/plugins/dbi_bam/src/Reader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/Reader.h b/src/plugins/dbi_bam/src/Reader.h
index 1bd605c..a87af81 100644
--- a/src/plugins/dbi_bam/src/Reader.h
+++ b/src/plugins/dbi_bam/src/Reader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/SamReader.cpp b/src/plugins/dbi_bam/src/SamReader.cpp
index 2c37d84..5d3f42b 100644
--- a/src/plugins/dbi_bam/src/SamReader.cpp
+++ b/src/plugins/dbi_bam/src/SamReader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -302,7 +302,7 @@ QByteArray SamReader::readString(bool &eof) {
     if (len == -1) {
         eof = true;
     } else {
-        result = QByteArray::fromRawData(buff, len);
+        result = QByteArray(buff, len);
     }
 
     return result;
@@ -324,7 +324,7 @@ void SamReader::readHeader() {
                 break;
             }
 
-            QByteArray line = QByteArray::fromRawData(buff, len);
+            QByteArray line = QByteArray(buff, len);
             if(line.isEmpty()) {
                 continue;
             }
diff --git a/src/plugins/dbi_bam/src/SamReader.h b/src/plugins/dbi_bam/src/SamReader.h
index 440390e..e6b002b 100644
--- a/src/plugins/dbi_bam/src/SamReader.h
+++ b/src/plugins/dbi_bam/src/SamReader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/SamtoolsBasedDbi.cpp b/src/plugins/dbi_bam/src/SamtoolsBasedDbi.cpp
index 4f2a35c..8f7f68c 100644
--- a/src/plugins/dbi_bam/src/SamtoolsBasedDbi.cpp
+++ b/src/plugins/dbi_bam/src/SamtoolsBasedDbi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
+#include <QFile>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -359,6 +359,15 @@ void SamtoolsBasedObjectDbi::setObjectRank(const U2DataId & /*objectId*/, U2DbiO
     os.setError("Not implemented!");
 }
 
+U2DbiObjectRank SamtoolsBasedObjectDbi::getObjectRank(const U2DataId & /*objectId*/, U2OpStatus &os) {
+    os.setError("Not implemented!");
+    return U2DbiObjectRank_TopLevel;
+}
+
+void SamtoolsBasedObjectDbi::setParent(const U2DataId& /*parentId*/, const U2DataId& /*childId*/, U2OpStatus& os){
+    os.setError("Not implemented!");
+}
+
 /************************************************************************/
 /* SamtoolsBasedReadsIterator */
 /************************************************************************/
diff --git a/src/plugins/dbi_bam/src/SamtoolsBasedDbi.h b/src/plugins/dbi_bam/src/SamtoolsBasedDbi.h
index 345eac0..ede2e19 100644
--- a/src/plugins/dbi_bam/src/SamtoolsBasedDbi.h
+++ b/src/plugins/dbi_bam/src/SamtoolsBasedDbi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,6 +57,8 @@ public:
     virtual U2DbiIterator<U2DataId>* getObjectsByVisualName(const QString& visualName, U2DataType type, U2OpStatus& os);
     virtual void renameObject(const U2DataId &id, const QString &newName, U2OpStatus &os);
     virtual void setObjectRank(const U2DataId &objectId, U2DbiObjectRank newRank, U2OpStatus &os);
+    virtual U2DbiObjectRank getObjectRank(const U2DataId &objectId, U2OpStatus& os);
+    virtual void setParent(const U2DataId& parentId, const U2DataId& childId, U2OpStatus& os);
 
 private:
     SamtoolsBasedDbi &dbi;
diff --git a/src/plugins/dbi_bam/src/VirtualOffset.cpp b/src/plugins/dbi_bam/src/VirtualOffset.cpp
index fc022d4..4be8480 100644
--- a/src/plugins/dbi_bam/src/VirtualOffset.cpp
+++ b/src/plugins/dbi_bam/src/VirtualOffset.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/src/VirtualOffset.h b/src/plugins/dbi_bam/src/VirtualOffset.h
index 02278b4..8eb0988 100644
--- a/src/plugins/dbi_bam/src/VirtualOffset.h
+++ b/src/plugins/dbi_bam/src/VirtualOffset.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dbi_bam/transl/english.ts b/src/plugins/dbi_bam/transl/english.ts
index 089fcc9..85554fb 100644
--- a/src/plugins/dbi_bam/transl/english.ts
+++ b/src/plugins/dbi_bam/transl/english.ts
@@ -404,8 +404,8 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="322"/>
-        <source>Destination URL directory has not write permissions</source>
-        <translation>Destination URL directory has not write permissions</translation>
+        <source>Destination URL folder has not write permissions</source>
+        <translation>Destination URL folder has not write permissions</translation>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="332"/>
@@ -416,8 +416,8 @@ Close it or choose different file</translation>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="341"/>
-        <source>Destination directory '%1' is not writable, please choose different destination URL</source>
-        <translation>Destination directory '%1' is not writable, please choose different destination URL</translation>
+        <source>Destination folder '%1' is not writable, please choose different destination URL</source>
+        <translation>Destination folder '%1' is not writable, please choose different destination URL</translation>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="347"/>
diff --git a/src/plugins/dbi_bam/transl/russian.ts b/src/plugins/dbi_bam/transl/russian.ts
index 50c0a36..154b9d3 100644
--- a/src/plugins/dbi_bam/transl/russian.ts
+++ b/src/plugins/dbi_bam/transl/russian.ts
@@ -404,8 +404,8 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="322"/>
-        <source>Destination URL directory has not write permissions</source>
-        <translation>Нет прав на запись в указанную директорию</translation>
+        <source>Destination URL folder has not write permissions</source>
+        <translation>Нет прав на запись в указанную папку</translation>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="332"/>
@@ -415,8 +415,8 @@ Close it or choose different file</source>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="341"/>
-        <source>Destination directory '%1' is not writable, please choose different destination URL</source>
-        <translation>Невозможно записать в указанную директорию '%1' , укажите другую директорию</translation>
+        <source>Destination folder '%1' is not writable, please choose different destination URL</source>
+        <translation>Невозможно записать в указанную папку '%1' , укажите другую папку</translation>
     </message>
     <message>
         <location filename="../src/ConvertToSQLiteDialog.cpp" line="347"/>
diff --git a/src/plugins/dna_export/dna_export.pro b/src/plugins/dna_export/dna_export.pro
index fd1943e..22c6245 100644
--- a/src/plugins/dna_export/dna_export.pro
+++ b/src/plugins/dna_export/dna_export.pro
@@ -27,9 +27,13 @@ HEADERS += src/CSVColumnConfiguration.h \
            src/ImportAnnotationsFromCSVDialog.h \
            src/ImportAnnotationsFromCSVTask.h \
            src/ImportQualityScoresTask.h \
-           src/ImportQualityScoresWorker.h
-FORMS += src/BaseContentDialog.ui \
-         src/CSVColumnConfigurationDialog.ui \
+           src/ImportQualityScoresWorker.h \
+           src/McaEditorContext.h \
+           src/dialogs/ExportMca2MsaDialog.h \
+           src/tasks/ConvertMca2MsaTask.h \
+           src/tasks/ExportMca2MsaTask.h
+
+FORMS += src/CSVColumnConfigurationDialog.ui \
          src/DNASequenceGeneratorDialog.ui \
          src/ExportBlastResultDialog.ui \
          src/ExportChromatogramDialog.ui \
@@ -38,7 +42,9 @@ FORMS += src/BaseContentDialog.ui \
          src/ExportSequences2MSADialog.ui \
          src/ExportSequencesDialog.ui \
          src/GetSequenceByIdDialog.ui \
-         src/ImportAnnotationsFromCSVDialog.ui
+         src/ImportAnnotationsFromCSVDialog.ui \
+         src/dialogs/ExportMca2MsaDialog.ui
+
 SOURCES += src/CSVColumnConfigurationDialog.cpp \
            src/DNAExportPlugin.cpp \
            src/DNAExportPluginTests.cpp \
@@ -64,5 +70,10 @@ SOURCES += src/CSVColumnConfigurationDialog.cpp \
            src/ImportAnnotationsFromCSVDialog.cpp \
            src/ImportAnnotationsFromCSVTask.cpp \
            src/ImportQualityScoresTask.cpp \
-           src/ImportQualityScoresWorker.cpp
+           src/ImportQualityScoresWorker.cpp \
+           src/McaEditorContext.cpp \
+           src/dialogs/ExportMca2MsaDialog.cpp \
+           src/tasks/ConvertMca2MsaTask.cpp \
+           src/tasks/ExportMca2MsaTask.cpp
+
 TRANSLATIONS += transl/english.ts transl/russian.ts
diff --git a/src/plugins/dna_export/src/BaseContentDialog.ui b/src/plugins/dna_export/src/BaseContentDialog.ui
deleted file mode 100644
index ed1aa60..0000000
--- a/src/plugins/dna_export/src/BaseContentDialog.ui
+++ /dev/null
@@ -1,277 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>BaseContentDialog</class>
- <widget class="QDialog" name="BaseContentDialog">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>331</width>
-    <height>197</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Set Base Content</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
-   <item>
-    <widget class="QRadioButton" name="baseContentRadioButton">
-     <property name="text">
-      <string>Base content</string>
-     </property>
-     <property name="checked">
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QGridLayout" name="gridLayout">
-     <property name="horizontalSpacing">
-      <number>20</number>
-     </property>
-     <item row="0" column="0">
-      <layout class="QHBoxLayout" name="horizontalLayout_5">
-       <item>
-        <widget class="QLabel" name="percentALabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>A</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QSpinBox" name="percentASpin">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="suffix">
-          <string> %</string>
-         </property>
-         <property name="maximum">
-          <number>100</number>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="0" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_2">
-       <item>
-        <widget class="QLabel" name="percentCLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>C</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QSpinBox" name="percentCSpin">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="suffix">
-          <string> %</string>
-         </property>
-         <property name="maximum">
-          <number>100</number>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="1" column="0">
-      <layout class="QHBoxLayout" name="horizontalLayout_4">
-       <item>
-        <widget class="QLabel" name="percentGLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>G</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QSpinBox" name="percentGSpin">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="suffix">
-          <string> %</string>
-         </property>
-         <property name="maximum">
-          <number>100</number>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item row="1" column="1">
-      <layout class="QHBoxLayout" name="horizontalLayout_3">
-       <item>
-        <widget class="QLabel" name="percentTLabel">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>20</width>
-           <height>0</height>
-          </size>
-         </property>
-         <property name="text">
-          <string>T</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QSpinBox" name="percentTSpin">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="suffix">
-          <string> %</string>
-         </property>
-         <property name="maximum">
-          <number>100</number>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QRadioButton" name="gcSkewRadioButton">
-     <property name="text">
-      <string>GC Skew</string>
-     </property>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_6">
-     <item>
-      <widget class="QDoubleSpinBox" name="percentGCSpin">
-       <property name="minimum">
-        <double>-1.000000000000000</double>
-       </property>
-       <property name="maximum">
-        <double>1.000000000000000</double>
-       </property>
-       <property name="singleStep">
-        <double>0.010000000000000</double>
-       </property>
-       <property name="value">
-        <double>0.250000000000000</double>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <spacer name="horizontalSpacer_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>0</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox">
-     <property name="standardButtons">
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>BaseContentDialog</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel">
-     <x>165</x>
-     <y>176</y>
-    </hint>
-    <hint type="destinationlabel">
-     <x>165</x>
-     <y>98</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>
diff --git a/src/plugins/dna_export/src/CSVColumnConfiguration.h b/src/plugins/dna_export/src/CSVColumnConfiguration.h
index 5539d4e..a66f249 100644
--- a/src/plugins/dna_export/src/CSVColumnConfiguration.h
+++ b/src/plugins/dna_export/src/CSVColumnConfiguration.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CSV_COLUMN_CONFIGURATION_H_
 #define _U2_CSV_COLUMN_CONFIGURATION_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
index e1b3bc0..822ec93 100644
--- a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
+++ b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,9 @@
 #include <U2Core/L10n.h>
 #include <U2Core/Annotation.h>
 #include <U2Gui/HelpButton.h>
+#include <QPushButton>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 namespace U2 {
 
@@ -37,7 +34,9 @@ CSVColumnConfigurationDialog::CSVColumnConfigurationDialog(QWidget* w, const Col
 : QDialog(w), config(_config)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223005");
+    new HelpButton(this, buttonBox, "20874909");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     connect(complMarkRB, SIGNAL(toggled(bool)), SLOT(sl_complMarkToggle(bool)));
     connect(startRB, SIGNAL(toggled(bool)), SLOT(sl_startToggle(bool)));
diff --git a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h
index ecf6223..a35c53f 100644
--- a/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h
+++ b/src/plugins/dna_export/src/CSVColumnConfigurationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/DNAExportPlugin.cpp b/src/plugins/dna_export/src/DNAExportPlugin.cpp
index f0338af..c0b6850 100644
--- a/src/plugins/dna_export/src/DNAExportPlugin.cpp
+++ b/src/plugins/dna_export/src/DNAExportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,9 +21,9 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/GAutoDeleteList.h>
+#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Gui/ToolsMenu.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Test/GTestFrameworkComponents.h>
 #include <U2Test/XMLTestFormat.h>
@@ -37,6 +37,7 @@
 #include "ExportSequenceViewItems.h"
 #include "GenerateDNAWorker.h"
 #include "ImportQualityScoresWorker.h"
+#include "McaEditorContext.h"
 
 namespace U2 {
 
@@ -88,6 +89,7 @@ DNAExportService::DNAExportService()
     projectViewController = NULL;
     sequenceViewController = NULL;
     alignmentViewController = NULL;
+    mcaEditorContext = NULL;
 }
 
 void DNAExportService::serviceStateChangedCallback(ServiceState oldState, bool enabledStateChanged) {
@@ -98,16 +100,28 @@ void DNAExportService::serviceStateChangedCallback(ServiceState oldState, bool e
     }
     if (isEnabled()) {
         projectViewController = new ExportProjectViewItemsContoller(this);
+
         sequenceViewController = new ExportSequenceViewItemsController(this);
         sequenceViewController->init();
+
         alignmentViewController = new ExportAlignmentViewItemsController(this);
         alignmentViewController->init();
+
+        mcaEditorContext = new McaEditorContext(this);
+        mcaEditorContext->init();
     } else {
-        delete projectViewController; projectViewController = NULL;
-        delete sequenceViewController; sequenceViewController = NULL;
-        delete alignmentViewController; alignmentViewController = NULL;
+        delete projectViewController;
+        projectViewController = NULL;
+
+        delete sequenceViewController;
+        sequenceViewController = NULL;
+
+        delete alignmentViewController;
+        alignmentViewController = NULL;
+
+        delete mcaEditorContext;
+        mcaEditorContext = NULL;
     }
 }
 
-
-}//namespace
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/DNAExportPlugin.h b/src/plugins/dna_export/src/DNAExportPlugin.h
index db732dc..f9500f9 100644
--- a/src/plugins/dna_export/src/DNAExportPlugin.h
+++ b/src/plugins/dna_export/src/DNAExportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,14 +27,16 @@
 
 namespace U2 {
 
+class ExportAlignmentViewItemsController;
 class ExportProjectViewItemsContoller;
 class ExportSequenceViewItemsController;
-class ExportAlignmentViewItemsController;
+class McaEditorContext;
 
 class DNAExportPlugin : public Plugin {
     Q_OBJECT
 public:
     DNAExportPlugin();
+
 private slots:
     void sl_generateSequence();
 };
@@ -50,10 +52,9 @@ protected:
     ExportProjectViewItemsContoller*    projectViewController;
     ExportSequenceViewItemsController*  sequenceViewController;
     ExportAlignmentViewItemsController* alignmentViewController;
-
+    McaEditorContext *                  mcaEditorContext;
 };
 
+}   // namespace U2
 
-} //namespace
-
-#endif
+#endif // _U2_DNA_EXPORT_PLUGIN_H_
diff --git a/src/plugins/dna_export/src/DNAExportPluginTests.cpp b/src/plugins/dna_export/src/DNAExportPluginTests.cpp
index aafb020..406c694 100644
--- a/src/plugins/dna_export/src/DNAExportPluginTests.cpp
+++ b/src/plugins/dna_export/src/DNAExportPluginTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/GObject.h>
+#include <QTemporaryFile>
+
 #include <U2Core/AppContext.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/DNATranslation.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/GUrlUtils.h>
+#include <U2Core/DNATranslation.h>
 #include <U2Core/DocumentUtils.h>
-
+#include <U2Core/GObject.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
-#include "ImportQualityScoresTask.h"
 #include "DNAExportPluginTests.h"
+#include "ImportQualityScoresTask.h"
 
 namespace U2 {
 
@@ -170,21 +171,25 @@ void GTest_ExportNucleicToAminoAlignmentTask::prepare() {
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(GTest::tr(" container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr(" container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return;
     }
-    MAlignmentObject* alObj = qobject_cast<MAlignmentObject*>(list.first());
-    srcAl = MAlignment(alObj->getMAlignment());
+    MultipleSequenceAlignmentObject* alObj = qobject_cast<MultipleSequenceAlignmentObject*>(list.first());
+    srcAl = alObj->getMsaCopy();
 
     QList<DNATranslation*> trans;
     QString trid = DNATranslationID(0);
     trid.replace("0", QString("%1").arg(transTable));
     trans << AppContext::getDNATranslationRegistry()->lookupTranslation(trid);
 
-    exportTask = new ExportMSA2MSATask(srcAl, selectedRows.length ? selectedRows.startPos : 0, selectedRows.length ? selectedRows.length : srcAl.getNumRows(), outputFileName,
-         trans, BaseDocumentFormats::CLUSTAL_ALN);
+    exportTask = new ExportMSA2MSATask(srcAl,
+                                       selectedRows.length ? selectedRows.startPos : 0,
+                                       selectedRows.length ? selectedRows.length : srcAl->getNumRows(),
+                                       outputFileName,
+                                       trans,
+                                       BaseDocumentFormats::CLUSTAL_ALN);
     addSubTask(exportTask);
 }
 
@@ -207,13 +212,13 @@ QList<Task*> GTest_ExportNucleicToAminoAlignmentTask::onSubTaskFinished(Task* su
             return res;
         }
 
-        QList<GObject*> reslist = resdoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> reslist = resdoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (reslist.size() == 0) {
-            stateInfo.setError(GTest::tr("container  of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+            stateInfo.setError(GTest::tr("container  of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
             return res;
         }
-        MAlignmentObject * resAlign = qobject_cast<MAlignmentObject*>(reslist.first());
-        resAl = resAlign->getMAlignment();
+        MultipleSequenceAlignmentObject * resAlign = qobject_cast<MultipleSequenceAlignmentObject*>(reslist.first());
+        resAl = resAlign->getMsaCopy();
     }
     return res;
 }
@@ -230,35 +235,35 @@ Task::ReportResult GTest_ExportNucleicToAminoAlignmentTask::report() {
         return ReportResult_Finished;
     }
 
-    QList<GObject*> explist = expdoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> explist = expdoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (explist.size() == 0) {
-        stateInfo.setError(GTest::tr("container of  object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT));
+        stateInfo.setError(GTest::tr("container of  object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT));
         return ReportResult_Finished;
     }
-    MAlignmentObject * expAlign = qobject_cast<MAlignmentObject*>(explist.first());
-    const MAlignment &expAl = expAlign->getMAlignment();
+    MultipleSequenceAlignmentObject * expAlign = qobject_cast<MultipleSequenceAlignmentObject*>(explist.first());
+    const MultipleSequenceAlignment expAl = expAlign->getMultipleAlignment();
 
-    if (resAl.getLength() != expAl.getLength()) {
-        stateInfo.setError(GTest::tr("Unexpected alignment length %1, expected %2").arg(resAl.getLength()).arg(expAl.getLength()));
+    if (resAl->getLength() != expAl->getLength()) {
+        stateInfo.setError(GTest::tr("Unexpected alignment length %1, expected %2").arg(resAl->getLength()).arg(expAl->getLength()));
         return ReportResult_Finished;
     }
 
-    if (resAl.getNumRows() != expAl.getNumRows()) {
-        stateInfo.setError(GTest::tr("Unexpected alignment size %1, expected %2").arg(resAl.getNumRows()).arg(expAl.getNumRows()));
+    if (resAl->getNumRows() != expAl->getNumRows()) {
+        stateInfo.setError(GTest::tr("Unexpected alignment size %1, expected %2").arg(resAl->getNumRows()).arg(expAl->getNumRows()));
         return ReportResult_Finished;
     }
 
-    QStringList resNames = resAl.getRowNames();
-    QStringList expNames = expAl.getRowNames();
+    QStringList resNames = resAl->getRowNames();
+    QStringList expNames = expAl->getRowNames();
 
-    for (int i = 0; i < resAl.getNumRows(); i++) {
+    for (int i = 0; i < resAl->getNumRows(); i++) {
         if (resNames[i] != expNames[i]) {
             stateInfo.setError(GTest::tr("Invalid name for row %1: %2, expected %3").arg(i+1).arg(resNames[i]).arg(expNames[i]));
             return ReportResult_Finished;
         }
-        for (int j = 0; j < resAl.getLength(); j++) {
-            if (resAl.charAt(i, j) != expAl.charAt(i, j)) {
-                stateInfo.setError(GTest::tr("Invalid char at row %1 column %2: %3, expected %4").arg(i+1).arg(j+1).arg(resAl.charAt(i, j)).arg(expAl.charAt(i, j)));
+        for (int j = 0; j < resAl->getLength(); j++) {
+            if (resAl->charAt(i, j) != expAl->charAt(i, j)) {
+                stateInfo.setError(GTest::tr("Invalid char at row %1 column %2: %3, expected %4").arg(i+1).arg(j+1).arg(resAl->charAt(i, j)).arg(expAl->charAt(i, j)));
                 return ReportResult_Finished;
             }
         }
diff --git a/src/plugins/dna_export/src/DNAExportPluginTests.h b/src/plugins/dna_export/src/DNAExportPluginTests.h
index bfd9f70..edaa2d9 100644
--- a/src/plugins/dna_export/src/DNAExportPluginTests.h
+++ b/src/plugins/dna_export/src/DNAExportPluginTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 
 #include <U2Test/XMLTestUtils.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/U2Region.h>
 #include "ExportTasks.h"
 
@@ -32,7 +32,7 @@
 namespace U2 {
 
 class U2SequenceObject;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class GTest_ImportPhredQualityScoresTask : public GTest {
     Q_OBJECT
@@ -65,8 +65,8 @@ public:
     U2Region             selectedRows;
     ExportMSA2MSATask*  exportTask;
     LoadDocumentTask*   resultLoadTask;
-    MAlignment          srcAl;
-    MAlignment          resAl;
+    MultipleSequenceAlignment          srcAl;
+    MultipleSequenceAlignment          resAl;
 };
 
 class DNAExportPluginTests {
diff --git a/src/plugins/dna_export/src/DNASequenceGenerator.cpp b/src/plugins/dna_export/src/DNASequenceGenerator.cpp
index 1b7096f..302aab3 100644
--- a/src/plugins/dna_export/src/DNASequenceGenerator.cpp
+++ b/src/plugins/dna_export/src/DNASequenceGenerator.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -28,8 +28,8 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/U2DbiRegistry.h>
@@ -57,7 +57,7 @@ const QString DNASequenceGenerator::ID("dna_generator");
 
 QString DNASequenceGenerator::prepareReferenceFileFilter() {
     QString filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true) +
-        ";;" + DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, false);
+        ";;" + DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, false);
     return filter;
 }
 
@@ -120,11 +120,11 @@ void DNASequenceGenerator::evaluateBaseContent(const DNASequence& sequence, QMap
     evaluate(sequence.seq, result);
 }
 
-void DNASequenceGenerator::evaluateBaseContent(const MAlignment& ma, QMap<char, qreal>& result) {
+void DNASequenceGenerator::evaluateBaseContent(const MultipleSequenceAlignment& ma, QMap<char, qreal>& result) {
     QList< QMap<char, qreal> > rowsContents;
-    foreach(const MAlignmentRow& row, ma.getRows()) {
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
         QMap<char, qreal> rowContent;
-        evaluate(row.getData(), rowContent);
+        evaluate(row->getData(), rowContent);
         rowsContents.append(rowContent);
     }
 
@@ -144,7 +144,7 @@ void DNASequenceGenerator::evaluateBaseContent(const MAlignment& ma, QMap<char,
         }
     }
 
-    int rowsNum = ma.getNumRows();
+    int rowsNum = ma->getNumRows();
     QMutableMapIterator<char, qreal> i(result);
     while (i.hasNext()) {
         i.next();
@@ -158,7 +158,7 @@ void DNASequenceGenerator::evaluateBaseContent(const MAlignment& ma, QMap<char,
 EvaluateBaseContentTask* DNASequenceGeneratorTask::createEvaluationTask(Document* doc, QString& err) {
     assert(doc->isLoaded());
     QList<GObject*> gobjects = doc->findGObjectByType(GObjectTypes::SEQUENCE);
-    gobjects << doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    gobjects << doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (!gobjects.isEmpty()) {
         return new EvaluateBaseContentTask(gobjects.first());
     }
@@ -262,7 +262,7 @@ QList<Task*> DNASequenceGeneratorTask::onGenerateTaskFinished( ) {
         if (  isSequenceFormat) {
             addSequencesToSeqDoc( doc );
         } else { // consider alignment format
-            SAFE_POINT( supportedFormats.contains( GObjectTypes::MULTIPLE_ALIGNMENT ),
+            SAFE_POINT( supportedFormats.contains( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT ),
                 "Unexpected format encountered", resultTasks );
             addSequencesToMsaDoc( doc );
         }
@@ -294,7 +294,7 @@ QList<Task*> DNASequenceGeneratorTask::onGenerateTaskFinished( ) {
 void DNASequenceGeneratorTask::addSequencesToMsaDoc( Document *source )
 {
     const QSet<QString> &supportedFormats = source->getDocumentFormat( )->getSupportedObjectTypes( );
-    SAFE_POINT( supportedFormats.contains( GObjectTypes::MULTIPLE_ALIGNMENT ),
+    SAFE_POINT( supportedFormats.contains( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT ),
         "Invalid document format", );
     SAFE_POINT( NULL != generateTask, "Invalid generate task", );
     const U2DbiRef dbiRef = generateTask->getDbiRef( );
@@ -303,7 +303,7 @@ void DNASequenceGeneratorTask::addSequencesToMsaDoc( Document *source )
     const QString baseSeqName = cfg.getSequenceName( );
     const QList<U2Sequence> seqs = generateTask->getResults( );
 
-    MAlignment msa( tr( "Generated MSA" ), alp );
+    MultipleSequenceAlignment msa(tr( "Generated MSA" ), alp);
     DbiConnection con( dbiRef, stateInfo );
 
     for ( int sequenceNum = 0, totalSeqCount = seqs.size( ); sequenceNum < totalSeqCount;
@@ -314,10 +314,9 @@ void DNASequenceGeneratorTask::addSequencesToMsaDoc( Document *source )
         // TODO: large sequences will cause out of memory error here
         const QByteArray seqContent = con.dbi->getSequenceDbi( )->getSequenceData(
             seqs[sequenceNum].id, U2_REGION_MAX, stateInfo );
-        msa.addRow( seqName, seqContent, sequenceNum, stateInfo );
-        CHECK_OP( stateInfo, );
+        msa->addRow( seqName, seqContent, sequenceNum);
     }
-    MAlignmentObject *alnObject = MAlignmentImporter::createAlignment( source->getDbiRef( ), msa, stateInfo );
+    MultipleSequenceAlignmentObject *alnObject = MultipleSequenceAlignmentImporter::createAlignment( source->getDbiRef( ), msa, stateInfo );
     CHECK_OP( stateInfo, );
     source->addObject( alnObject );
 }
@@ -384,10 +383,10 @@ void EvaluateBaseContentTask::run() {
         U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(_obj);
         alp = dnaObj->getAlphabet();
         DNASequenceGenerator::evaluateBaseContent(dnaObj->getWholeSequence(stateInfo), result);
-    } else if (_obj->getGObjectType() == GObjectTypes::MULTIPLE_ALIGNMENT) {
-        MAlignmentObject* maObj = qobject_cast<MAlignmentObject*>(_obj);
+    } else if (_obj->getGObjectType() == GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) {
+        MultipleSequenceAlignmentObject* maObj = qobject_cast<MultipleSequenceAlignmentObject*>(_obj);
         alp = maObj->getAlphabet();
-        DNASequenceGenerator::evaluateBaseContent(maObj->getMAlignment(), result);
+        DNASequenceGenerator::evaluateBaseContent(maObj->getMultipleAlignment(), result);
     } else {
         stateInfo.setError(tr("Base content can be evaluated for sequence or sequence alignment"));
     }
@@ -428,7 +427,7 @@ void GenerateDNASequenceTask::run( ) {
             window = length;
         }
 
-        seqImporter.startSequence( dbiRef, U2ObjectDbi::ROOT_FOLDER, QString( "default" ), false, stateInfo );
+        seqImporter.startSequence(stateInfo, dbiRef, U2ObjectDbi::ROOT_FOLDER, QString( "default" ), false);
         CHECK_OP_BREAK( stateInfo );
 
         for( int chunkCount = 0; chunkCount < length / window && !isCanceled( );
diff --git a/src/plugins/dna_export/src/DNASequenceGenerator.h b/src/plugins/dna_export/src/DNASequenceGenerator.h
index d348772..99d41ec 100644
--- a/src/plugins/dna_export/src/DNASequenceGenerator.h
+++ b/src/plugins/dna_export/src/DNASequenceGenerator.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -22,16 +22,16 @@
 #ifndef _U2_DNA_SEQUENCE_GENERATOR_H_
 #define _U2_DNA_SEQUENCE_GENERATOR_H_
 
-#include <U2Core/Task.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/Task.h>
 #include <U2Core/U2Sequence.h>
 
 namespace U2 {
 
-class GObject;
-class Document;
-class MAlignment;
 class DNAAlphabet;
+class Document;
+class GObject;
 class LoadDocumentTask;
 class SaveDocumentTask;
 
@@ -94,7 +94,7 @@ public:
 
     static void evaluateBaseContent(const DNASequence& sequence, QMap<char, qreal>& result);
 
-    static void evaluateBaseContent(const MAlignment& ma, QMap<char, qreal>& result);
+    static void evaluateBaseContent(const MultipleSequenceAlignment& ma, QMap<char, qreal>& result);
 };
 
 class EvaluateBaseContentTask : public Task {
diff --git a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
index 2fdb257..6f6de7d 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -40,7 +40,11 @@
 namespace U2 {
 
 #define ROOT_SETTING QString("dna_export/")
-#define GCSKEW_SETTING QString("gc_skew")
+#define SELECTED_OPTION QString("selected_option")
+
+#define OPTION_REFERENCE QString("reference")
+#define OPTION_BASE_CONTENT QString("base_content")
+#define OPTION_SKEW QString("skew")
 
 static QMap<char, qreal> initContent() {
     QMap<char, qreal> res;
@@ -55,37 +59,56 @@ QMap<char, qreal> DNASequenceGeneratorDialog::content = initContent();
 
 DNASequenceGeneratorDialog::DNASequenceGeneratorDialog(QWidget* p)
     : QDialog(p),
-      saveController(NULL) {
+      saveController(NULL),
+      generateButton(NULL),
+      cancelButton(NULL),
+      percentMap(content),
+      gcSkew(0)
+{
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223233");
+    new HelpButton(this, buttonBox, "20875137");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     seedSpinBox->setEnabled(false);
-
     referenceButton->setChecked(true);
-    sl_refButtonToggled(true);
-
+    
+    percentASpin->setValue(percentMap.value('A')*100.0);
+    percentCSpin->setValue(percentMap.value('C')*100.0);
+    percentGSpin->setValue(percentMap.value('G')*100.0);
+    percentTSpin->setValue(percentMap.value('T')*100.0);
+    gcSkew = ((float)((int)(percentMap.value('G')*100) - (int)(percentMap.value('C')*100)))
+        /((int)(percentMap.value('G')*100) + (int)(percentMap.value('C')*100));
+    int iGCSkew = (int)(gcSkew * 100);
+    gcSkew = (float(iGCSkew))/100.0;
+    percentGCSpin->setValue(gcSkew);
+    
     initSaveController();
 
     generateButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     connect(inputButton, SIGNAL(clicked()), SLOT(sl_browseReference()));
-    connect(configureButton, SIGNAL(clicked()), SLOT(sl_configureContent()));
     connect(generateButton, SIGNAL(clicked()), SLOT(sl_generate()));
     connect(cancelButton, SIGNAL(clicked()), SLOT(reject()));
-    connect(referenceButton, SIGNAL(toggled(bool)), SLOT(sl_refButtonToggled(bool)));
-    connect(seedCheckBox, SIGNAL(stateChanged (int)), SLOT(sl_stateChanged(int)));
-}
-
-void DNASequenceGeneratorDialog::sl_stateChanged(int state) {
-    if(state == Qt::Checked)  {
-        seedSpinBox->setEnabled(true);
+    connect(seedCheckBox, SIGNAL(stateChanged (int)), SLOT(sl_seedStateChanged(int)));
+    connect(referenceButton, SIGNAL(clicked()), SLOT(sl_enableRefMode()));
+    connect(baseContentRadioButton, SIGNAL(clicked()), SLOT(sl_enableBaseMode()));
+    connect(gcSkewRadioButton, SIGNAL(clicked()), SLOT(sl_enableGCSkewMode()));
+    
+    QString lastUsedMode = AppContext::getSettings()->getValue(ROOT_SETTING + SELECTED_OPTION).toString();
+    if (lastUsedMode == OPTION_BASE_CONTENT) {
+        sl_enableBaseMode();
+    } else if (lastUsedMode == OPTION_SKEW) {
+        sl_enableGCSkewMode();
     } else {
-        seedSpinBox->setEnabled(false);
+        sl_enableRefMode();
     }
 }
 
+void DNASequenceGeneratorDialog::sl_seedStateChanged(int state) {
+    seedSpinBox->setEnabled(state == Qt::Checked);
+}
+
 void DNASequenceGeneratorDialog::initSaveController(){
     SaveDocumentControllerConfig config;
     config.defaultFormatId = BaseDocumentFormats::FASTA;
@@ -97,7 +120,7 @@ void DNASequenceGeneratorDialog::initSaveController(){
 
     DocumentFormatConstraints formatConstraints;
     formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE
-                                           << GObjectTypes::MULTIPLE_ALIGNMENT;
+                                           << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatConstraints.addFlagToExclude(DocumentFormatFlag_SingleObjectFormat);
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
     formatConstraints.allowPartialTypeMapping = true;
@@ -112,10 +135,6 @@ void DNASequenceGeneratorDialog::sl_browseReference() {
     inputEdit->setText(lod.url);
 }
 
-void DNASequenceGeneratorDialog::sl_configureContent() {
-    QObjectScopedPointer<BaseContentDialog> bcDlg = new BaseContentDialog(content, this);
-    bcDlg->exec();
-}
 
 void DNASequenceGeneratorDialog::sl_generate() {
     DNASequenceGeneratorConfig cfg;
@@ -127,88 +146,99 @@ void DNASequenceGeneratorDialog::sl_generate() {
     cfg.outUrl = saveController->getSaveFileName();
     cfg.sequenceName = "Sequence ";
     cfg.formatId = saveController->getFormatIdToSave();
-    cfg.content = content;
     cfg.window = windowSpinBox->value();
-    if(seedCheckBox->isChecked()) {
-        cfg.seed = seedSpinBox->value();
-    } else {
-        cfg.seed = -1;
-    }
-    if(cfg.window > cfg.length) {
+    cfg.alphabet = cfg.useRef ? NULL : AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
+    cfg.seed = seedCheckBox->isChecked() ? seedSpinBox->value() : -1;
+    
+    if (cfg.window > cfg.length) {
         QMessageBox::critical(this, tr("DNA Sequence Generator"), tr("Windows size bigger than sequence length"));
         return;
     }
 
-    if (!cfg.useRef) {
-        cfg.alphabet = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    }
-
     if (cfg.refUrl.isEmpty() && cfg.useRef) {
         QMessageBox::critical(this, tr("DNA Sequence Generator"), tr("Reference url is not specified."));
         return;
     }
-
+    
     if (cfg.outUrl.isEmpty()) {
         QMessageBox::critical(this, tr("DNA Sequence Generator"), tr("Output file is no specified."));
         return;
     }
+    
+    Settings *s = AppContext::getSettings();
+    if (baseContentRadioButton->isChecked()) {
+        s->setValue(ROOT_SETTING + SELECTED_OPTION, OPTION_BASE_CONTENT);
+        int percentA = percentASpin->value();
+        int percentC = percentCSpin->value();
+        int percentG = percentGSpin->value();
+        int percentT = percentTSpin->value();
+        int total = percentA + percentC + percentG + percentT;
+        if (total != 100) {
+            QMessageBox::critical(this, tr("Base content"), tr("Total percentage must be 100%"));
+            return;
+        }
+        percentMap['A'] = percentA / 100.0;
+        percentMap['C'] = percentC / 100.0;
+        percentMap['G'] = percentG / 100.0;
+        percentMap['T'] = percentT / 100.0;
+        cfg.content = percentMap;
+    } else if (gcSkewRadioButton->isChecked()){
+        s->setValue(ROOT_SETTING + SELECTED_OPTION, OPTION_SKEW);
+        gcSkew = percentGCSpin->value();
+        qreal percentA = qrand();
+        qreal percentC = qrand();
+        qreal percentT = qrand();
+        qreal percentG = qrand();
+        qreal sum = percentA + percentC + percentG + percentT;
+        percentA = percentA / sum * 100;
+        percentG = percentG / sum * 100;
+        percentC = percentC / sum * 100;
+        percentT = percentT / sum * 100;
+        qreal GC = percentG + percentC;
+
+        percentC = (1 - gcSkew)* GC / 2;
+        percentG = percentC + gcSkew * GC;
+        if (percentC < 0 || percentC > 100 || percentG < 0 || percentG > 100) {
+            QMessageBox::critical(this, tr("Base content"), tr("Incorrect GC Skew value"));
+            return;
+        }
+        sum = percentA + percentC + percentG + percentT;
+        percentA += 100 - sum;
+
+        percentASpin->setValue(qRound(percentA));
+        percentCSpin->setValue(qRound(percentC));
+        percentGSpin->setValue(qRound(percentG));
+        percentTSpin->setValue(qRound(percentT));
+
+        percentMap['A'] = percentA / 100;
+        percentMap['C'] = percentC / 100;
+        percentMap['G'] = percentG / 100;
+        percentMap['T'] = percentT / 100;
+        cfg.content = percentMap;
+    } else {
+        s->setValue(ROOT_SETTING + SELECTED_OPTION, OPTION_REFERENCE);
+    }
 
     AppContext::getTaskScheduler()->registerTopLevelTask(new DNASequenceGeneratorTask(cfg));
     accept();
-}
 
-void DNASequenceGeneratorDialog::sl_refButtonToggled(bool checked) {
-    assert(manualButton->isChecked() == !checked);
-    inputEdit->setDisabled(!checked);
-    inputButton->setDisabled(!checked);
-    configureButton->setDisabled(checked);
 }
 
-BaseContentDialog::BaseContentDialog(QMap<char, qreal>& percentMap_, QWidget* p)
-: QDialog(p), percentMap(percentMap_) {
-    setupUi(this);
-    new HelpButton(this, buttonBox, "18223233");
-    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Save"));
-
-    percentASpin->setValue(percentMap.value('A')*100.0);
-    percentCSpin->setValue(percentMap.value('C')*100.0);
-    percentGSpin->setValue(percentMap.value('G')*100.0);
-    percentTSpin->setValue(percentMap.value('T')*100.0);
-    gcSkew = ((float)((int)(percentMap.value('G')*100) - (int)(percentMap.value('C')*100)))
-        /((int)(percentMap.value('G')*100) + (int)(percentMap.value('C')*100));
-    int iGCSkew = (int)(gcSkew * 100);
-    gcSkew = (float(iGCSkew))/100.0;
-    percentGCSpin->setValue(gcSkew);
-    gcSkewPrev = gcSkew;
-
-    saveButton = buttonBox->button(QDialogButtonBox::Ok);
-
-    connect(saveButton, SIGNAL(clicked()), SLOT(sl_save()));
-    connect(baseContentRadioButton, SIGNAL(clicked()), SLOT(sl_baseClicked()));
-    connect(gcSkewRadioButton, SIGNAL(clicked()), SLOT(sl_gcSkewClicked()));
-    //baseContentRadioButton->setChecked(true);
-
-    Settings *s = AppContext::getSettings();
-    bool gc = s->getValue(ROOT_SETTING + GCSKEW_SETTING,false).toBool();
-    if(gc) {
-        percentASpin->setEnabled(false);
-        percentCSpin->setEnabled(false);
-        percentTSpin->setEnabled(false);
-        percentGSpin->setEnabled(false);
-        percentGCSpin->setEnabled(true);
-    } else {
-        percentASpin->setEnabled(true);
-        percentCSpin->setEnabled(true);
-        percentTSpin->setEnabled(true);
-        percentGSpin->setEnabled(true);
-        percentGCSpin->setEnabled(false);
-    }
-    baseContentRadioButton->setChecked(!gc);
-    gcSkewRadioButton->setChecked(gc);
-
+void DNASequenceGeneratorDialog::sl_enableRefMode() {
+    referenceButton->setChecked(true);
+    inputEdit->setEnabled(true);
+    inputButton->setEnabled(true);
+    percentASpin->setEnabled(false);
+    percentCSpin->setEnabled(false);
+    percentTSpin->setEnabled(false);
+    percentGSpin->setEnabled(false);
+    percentGCSpin->setEnabled(false);
 }
 
-void BaseContentDialog::sl_baseClicked() {
+void DNASequenceGeneratorDialog::sl_enableBaseMode() {
+    baseContentRadioButton->setChecked(true);
+    inputEdit->setEnabled(false);
+    inputButton->setEnabled(false);
     percentASpin->setEnabled(true);
     percentCSpin->setEnabled(true);
     percentTSpin->setEnabled(true);
@@ -216,7 +246,10 @@ void BaseContentDialog::sl_baseClicked() {
     percentGCSpin->setEnabled(false);
 }
 
-void BaseContentDialog::sl_gcSkewClicked() {
+void DNASequenceGeneratorDialog::sl_enableGCSkewMode() {
+    gcSkewRadioButton->setChecked(true);
+    inputEdit->setEnabled(false);
+    inputButton->setEnabled(false);
     percentASpin->setEnabled(false);
     percentCSpin->setEnabled(false);
     percentTSpin->setEnabled(false);
@@ -224,69 +257,5 @@ void BaseContentDialog::sl_gcSkewClicked() {
     percentGCSpin->setEnabled(true);
 }
 
-void BaseContentDialog::sl_save() {
-    float percentA;
-    float percentC;
-    float percentG;
-    float percentT;
-    if(baseContentRadioButton->isChecked()) {
-        percentA = percentASpin->value();
-        percentC = percentCSpin->value();
-        percentG = percentGSpin->value();
-        percentT = percentTSpin->value();
-    } else {
-        gcSkew = percentGCSpin->value();
-        if(gcSkew != gcSkewPrev) {
-            int percentAi = qrand();
-            int percentCi = qrand();
-            int percentTi = qrand();
-            int percentGi = qrand();
-            int sum = percentAi + percentCi + percentGi + percentTi;
-            percentAi = (float)percentAi / sum * 100;
-            percentGi = (float)percentGi / sum * 100;
-            percentCi = (float)percentCi / sum * 100;
-            percentTi = (float)percentTi / sum * 100;
-            int CG = percentGi + percentCi;
-
-            percentCi = (1 - gcSkew)* CG / 2;
-            percentGi = percentCi + gcSkew * CG;
-            if(percentCi < 0 || percentCi > 100 || percentGi < 0 || percentGi > 100) {
-                QMessageBox::critical(this, tr("Base content"), tr("Incorrect GC Skew value"));
-                return;
-            }
-            sum = percentAi + percentCi + percentGi + percentTi;
-            percentAi += 100 - sum;
-
-            percentA = percentAi;
-            percentC = percentCi;
-            percentG = percentGi;
-            percentT = percentTi;
-            percentASpin->setValue(percentAi);
-            percentCSpin->setValue(percentCi);
-            percentGSpin->setValue(percentGi);
-            percentTSpin->setValue(percentTi);
-        } else {
-            percentA = percentASpin->value();
-            percentC = percentCSpin->value();
-            percentG = percentGSpin->value();
-            percentT = percentTSpin->value();
-        }
-    }
-    float total = percentA + percentC + percentG + percentT;
-    if (total != 100) {
-        QMessageBox::critical(this, tr("Base content"), tr("Total percentage has to be 100 %"));
-        return;
-    }
-    percentMap['A'] = percentA / 100.0;
-    percentMap['C'] = percentC / 100.0;
-    percentMap['G'] = percentG / 100.0;
-    percentMap['T'] = percentT / 100.0;
-
-    Settings *s = AppContext::getSettings();
-    //bool gc = s->getValue("dna_export/gc_skew",false).toBool();
-    s->setValue(ROOT_SETTING + GCSKEW_SETTING, gcSkewRadioButton->isChecked());
-
-    accept();
-}
 
 } //namespace
diff --git a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
index 5798fbf..c1c6341 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -23,7 +23,6 @@
 #define _U2_DNA_SEQUENCE_GENERATOR_DIALOG_H_
 
 #include "ui_DNASequenceGeneratorDialog.h"
-#include "ui_BaseContentDialog.h"
 
 namespace U2 {
 
@@ -36,10 +35,11 @@ public:
 
 private slots:
     void sl_browseReference();
-    void sl_configureContent();
     void sl_generate();
-    void sl_refButtonToggled(bool checked);
-    void sl_stateChanged(int state);
+    void sl_seedStateChanged(int state);
+    void sl_enableRefMode();
+    void sl_enableBaseMode();
+    void sl_enableGCSkewMode();
 
 private:
     void initSaveController();
@@ -48,21 +48,8 @@ private:
     static QMap<char, qreal> content;
     QPushButton* generateButton;
     QPushButton* cancelButton;
-};
-
-class BaseContentDialog : public QDialog, public Ui_BaseContentDialog {
-    Q_OBJECT
-public:
-    BaseContentDialog(QMap<char, qreal>& percentMap_, QWidget* p=NULL);
-private slots:
-    void sl_save();
-    void sl_baseClicked();
-    void sl_gcSkewClicked();
-private:
     QMap<char, qreal>& percentMap;
     float gcSkew;
-    float gcSkewPrev;
-    QPushButton* saveButton;
 };
 
 } //namespace
diff --git a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui
index e9dcba3..c5a673d 100644
--- a/src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui
+++ b/src/plugins/dna_export/src/DNASequenceGeneratorDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>427</width>
-    <height>392</height>
+    <width>422</width>
+    <height>528</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -194,11 +194,11 @@
          <string>Reference</string>
         </property>
         <property name="checked">
-         <bool>true</bool>
+         <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="0" column="1" colspan="2">
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <property name="spacing">
          <number>2</number>
@@ -215,44 +215,248 @@
         </item>
        </layout>
       </item>
-      <item row="1" column="0">
-       <widget class="QRadioButton" name="manualButton">
+      <item row="1" column="0" colspan="2">
+       <widget class="QRadioButton" name="baseContentRadioButton">
         <property name="text">
-         <string>Manual</string>
+         <string>Base content (%)</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1">
+      <item row="2" column="0" colspan="3">
        <layout class="QHBoxLayout" name="horizontalLayout_3">
         <item>
-         <widget class="QPushButton" name="configureButton">
+         <widget class="QLabel" name="percentALabel">
           <property name="sizePolicy">
            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
             <horstretch>0</horstretch>
             <verstretch>0</verstretch>
            </sizepolicy>
           </property>
+          <property name="minimumSize">
+           <size>
+            <width>20</width>
+            <height>0</height>
+           </size>
+          </property>
           <property name="text">
-           <string>Configure...</string>
+           <string>A</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
           </property>
          </widget>
         </item>
         <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
+         <widget class="QSpinBox" name="percentASpin">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
           </property>
-          <property name="sizeHint" stdset="0">
+          <property name="maximumSize">
            <size>
-            <width>40</width>
-            <height>20</height>
+            <width>60</width>
+            <height>16777215</height>
            </size>
           </property>
-         </spacer>
+          <property name="layoutDirection">
+           <enum>Qt::LeftToRight</enum>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="suffix">
+           <string/>
+          </property>
+          <property name="maximum">
+           <number>100</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="percentCLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>20</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>C</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="percentCSpin">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>60</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="suffix">
+           <string/>
+          </property>
+          <property name="maximum">
+           <number>100</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="percentGLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>20</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>G</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="percentGSpin">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>60</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="suffix">
+           <string/>
+          </property>
+          <property name="maximum">
+           <number>100</number>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QLabel" name="percentTLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>20</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="text">
+           <string>T</string>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QSpinBox" name="percentTSpin">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="maximumSize">
+           <size>
+            <width>60</width>
+            <height>16777215</height>
+           </size>
+          </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
+          <property name="suffix">
+           <string/>
+          </property>
+          <property name="maximum">
+           <number>100</number>
+          </property>
+         </widget>
         </item>
        </layout>
       </item>
+      <item row="3" column="0">
+       <widget class="QRadioButton" name="gcSkewRadioButton">
+        <property name="text">
+         <string>GC Skew</string>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="2">
+       <widget class="QDoubleSpinBox" name="percentGCSpin">
+        <property name="maximumSize">
+         <size>
+          <width>60</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+        </property>
+        <property name="minimum">
+         <double>-1.000000000000000</double>
+        </property>
+        <property name="maximum">
+         <double>1.000000000000000</double>
+        </property>
+        <property name="singleStep">
+         <double>0.010000000000000</double>
+        </property>
+        <property name="value">
+         <double>0.250000000000000</double>
+        </property>
+       </widget>
+      </item>
      </layout>
+     <zorder>referenceButton</zorder>
+     <zorder>percentGCSpin</zorder>
+     <zorder>baseContentRadioButton</zorder>
+     <zorder>gcSkewRadioButton</zorder>
     </widget>
    </item>
    <item>
@@ -308,7 +512,7 @@
         </property>
        </widget>
       </item>
-      <item row="2" column="1">
+      <item row="2" column="0">
        <widget class="QCheckBox" name="addToProjCBox">
         <property name="sizePolicy">
          <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -331,19 +535,6 @@
     </widget>
    </item>
    <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
diff --git a/src/plugins/dna_export/src/ExportAlignmentViewItems.cpp b/src/plugins/dna_export/src/ExportAlignmentViewItems.cpp
index 2b83e78..7f39a15 100644
--- a/src/plugins/dna_export/src/ExportAlignmentViewItems.cpp
+++ b/src/plugins/dna_export/src/ExportAlignmentViewItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,14 +30,16 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/GUrlUtils.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
+//#include <U2View/ma
 
 #include "ExportAlignmentViewItems.h"
 #include "ExportMSA2MSADialog.h"
@@ -51,14 +53,14 @@ namespace U2 {
 // ExportAlignmentViewItemsController
 
 ExportAlignmentViewItemsController::ExportAlignmentViewItemsController(QObject* p)
-    : GObjectViewWindowContext(p, MSAEditorFactory::ID)
+    : GObjectViewWindowContext(p, MsaEditorFactory::ID)
 {
 }
 
 
 void ExportAlignmentViewItemsController::initViewContext(GObjectView* v) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    assert(msaed!=NULL);
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
     MSAExportContext* mc= new MSAExportContext(msaed);
     addViewResource(msaed, mc);
 }
@@ -81,30 +83,30 @@ MSAExportContext::MSAExportContext(MSAEditor* e) : editor(e) {
     translateMSAAction = new QAction(tr("Amino translation..."), this);
     translateMSAAction->setObjectName("amino_translation_of_alignment_rows");
     translateMSAAction->setEnabled(!e->isAlignmentEmpty());
-    connect(e->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), translateMSAAction, SLOT(setDisabled(bool)));
+    connect(e->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), translateMSAAction, SLOT(setDisabled(bool)));
     connect(translateMSAAction, SIGNAL(triggered()), SLOT(sl_exportNucleicMsaToAmino()));
 }
 
 void MSAExportContext::updateActions() {
-    translateMSAAction->setEnabled(editor->getMSAObject()->getAlphabet()->isNucleic() &&
+    translateMSAAction->setEnabled(editor->getMaObject()->getAlphabet()->isNucleic() &&
                                    !editor->isAlignmentEmpty());
 }
 
 void MSAExportContext::buildMenu(QMenu* m) {
     QMenu* exportMenu = GUIUtils::findSubMenu(m, MSAE_MENU_EXPORT);
     SAFE_POINT(exportMenu != NULL, "exportMenu", );
-    MAlignmentObject* mObject = editor->getMSAObject();
+    MultipleSequenceAlignmentObject* mObject = editor->getMaObject();
     if (mObject->getAlphabet()->isNucleic()) {
         exportMenu->addAction(translateMSAAction);
     }
 }
 
 void MSAExportContext::sl_exportNucleicMsaToAmino() {
-    const MAlignment& ma = editor->getMSAObject()->getMAlignment();
-    assert(ma.getAlphabet()->isNucleic());
+    const MultipleSequenceAlignment ma = editor->getMaObject()->getMultipleAlignment();
+    assert(ma->getAlphabet()->isNucleic());
 
-    GUrl msaUrl = editor->getMSAObject()->getDocument()->getURL();
-    QString defaultUrl = GUrlUtils::getNewLocalUrlByFormat(msaUrl, editor->getMSAObject()->getGObjectName(), BaseDocumentFormats::CLUSTAL_ALN, "_transl");
+    GUrl msaUrl = editor->getMaObject()->getDocument()->getURL();
+    QString defaultUrl = GUrlUtils::getNewLocalUrlByFormat(msaUrl, editor->getMaObject()->getGObjectName(), BaseDocumentFormats::CLUSTAL_ALN, "_transl");
 
     QObjectScopedPointer<ExportMSA2MSADialog> d = new ExportMSA2MSADialog(defaultUrl, BaseDocumentFormats::CLUSTAL_ALN, editor->getCurrentSelection().height() < 1, AppContext::getMainWindow()->getQMainWindow());
     d->setWindowTitle(tr("Export Amino Translation"));
@@ -119,7 +121,7 @@ void MSAExportContext::sl_exportNucleicMsaToAmino() {
     trans << AppContext::getDNATranslationRegistry()->lookupTranslation(d->translationTable);
 
     int offset = d->exportWholeAlignment ? 0 : editor->getCurrentSelection().top();
-    int len = d->exportWholeAlignment ? ma.getNumRows() : editor->getCurrentSelection().height();
+    int len = d->exportWholeAlignment ? ma->getNumRows() : editor->getCurrentSelection().height();
 
     Task* t = ExportUtils::wrapExportTask(new ExportMSA2MSATask(ma, offset, len, d->file, trans, d->formatId), d->addToProjectFlag);
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
diff --git a/src/plugins/dna_export/src/ExportAlignmentViewItems.h b/src/plugins/dna_export/src/ExportAlignmentViewItems.h
index 475151e..60f9e02 100644
--- a/src/plugins/dna_export/src/ExportAlignmentViewItems.h
+++ b/src/plugins/dna_export/src/ExportAlignmentViewItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_EXPORT_ALIGNMENT_VIEW_ITEMS_H_
 #define _U2_EXPORT_ALIGNMENT_VIEW_ITEMS_H_
 
-#include <U2Core/global.h>
 #include <U2Core/U2Region.h>
+
 #include <U2Gui/ObjectViewModel.h>
 
 namespace U2 {
@@ -33,7 +33,6 @@ class AnnotatedDNAView;
 class AnnotationSelection;
 class Annotation;
 class LRegionsSelection;
-class MAlignment;
 class MSAEditor;
 
 class ExportAlignmentViewItemsController : public GObjectViewWindowContext {
@@ -48,7 +47,7 @@ protected:
 };
 
 class MSAExportContext : public QObject {
-    Q_OBJECT;
+    Q_OBJECT
 public:
     MSAExportContext(MSAEditor* e);
     void buildMenu(QMenu* m);
diff --git a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
index 112d80c..cbe0768 100644
--- a/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
+++ b/src/plugins/dna_export/src/ExportBlastResultDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ ExportBlastResultDialog::ExportBlastResultDialog(QWidget* p, const QString& defa
     : QDialog(p),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223161");
+    new HelpButton(this, buttonBox, "20875065");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -78,7 +78,7 @@ void ExportBlastResultDialog::initSaveController(const QString &defaultUrl) {
     config.parentWidget = this;
 
     DocumentFormatConstraints formatConstraints;
-    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
 
     saveController = new SaveDocumentController(config, formatConstraints, this);
diff --git a/src/plugins/dna_export/src/ExportBlastResultDialog.h b/src/plugins/dna_export/src/ExportBlastResultDialog.h
index 9f69d98..0631ad7 100644
--- a/src/plugins/dna_export/src/ExportBlastResultDialog.h
+++ b/src/plugins/dna_export/src/ExportBlastResultDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
index 9089591..4e01667 100644
--- a/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
+++ b/src/plugins/dna_export/src/ExportChromatogramDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@ ExportChromatogramDialog::ExportChromatogramDialog(QWidget* p, const GUrl& fileU
     saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223029");
+    new HelpButton(this, buttonBox, "20874933");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ExportChromatogramDialog.h b/src/plugins/dna_export/src/ExportChromatogramDialog.h
index 49e09ed..adf3843 100644
--- a/src/plugins/dna_export/src/ExportChromatogramDialog.h
+++ b/src/plugins/dna_export/src/ExportChromatogramDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
index bd3fbe4..4ac97bd 100644
--- a/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2MSADialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ ExportMSA2MSADialog::ExportMSA2MSADialog(const QString& defaultFileName, const D
     : QDialog(p),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222937");
+    new HelpButton(this, buttonBox, "20874842");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -99,7 +99,7 @@ void ExportMSA2MSADialog::initSaveController(const QString& defaultFileName, con
     config.saveTitle = tr("Export alignment");
 
     DocumentFormatConstraints formatConstraints;
-    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
 
     saveController = new SaveDocumentController(config, formatConstraints, this);
diff --git a/src/plugins/dna_export/src/ExportMSA2MSADialog.h b/src/plugins/dna_export/src/ExportMSA2MSADialog.h
index 65e4e6b..213deb3 100644
--- a/src/plugins/dna_export/src/ExportMSA2MSADialog.h
+++ b/src/plugins/dna_export/src/ExportMSA2MSADialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
index f5decdd..48a6064 100644
--- a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,11 +35,13 @@
 
 namespace U2 {
 
-ExportMSA2SequencesDialog::ExportMSA2SequencesDialog(QWidget* p)
+ExportMSA2SequencesDialog::ExportMSA2SequencesDialog(const QString &defaultDir, const QString &defaultFileName, QWidget* p)
     : QDialog(p),
-      saveController(NULL) {
+    defaultDir(defaultDir),
+    defaultFileName(defaultFileName),
+    saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222936");
+    new HelpButton(this, buttonBox, "20874841");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -70,6 +72,7 @@ void ExportMSA2SequencesDialog::initSaveController() {
     config.fileNameEdit = fileNameEdit;
     config.formatCombo = formatCombo;
     config.parentWidget = this;
+    config.defaultFileName = defaultDir + "/" + defaultFileName + "." +AppContext::getDocumentFormatRegistry()->getFormatById(config.defaultFormatId)->getSupportedDocumentFileExtensions().first();
 
     DocumentFormatConstraints formatConstraints;
     formatConstraints.supportedObjectTypes << GObjectTypes::SEQUENCE;
diff --git a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
index 6e2ff7b..d299459 100644
--- a/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
+++ b/src/plugins/dna_export/src/ExportMSA2SequencesDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,12 +35,14 @@ class SaveDocumentController;
 class ExportMSA2SequencesDialog : public QDialog, private Ui_ExportMSA2SequencesDialog {
     Q_OBJECT
 public:
-    ExportMSA2SequencesDialog(QWidget* p);
+    ExportMSA2SequencesDialog(const QString &defaultDir, const QString &defaultFilename, QWidget* p);
 
     virtual void accept();
 
 public:
     QString             url;
+    QString             defaultDir;
+    QString             defaultFileName;
     DocumentFormatId    format;
     bool                trimGapsFlag;
     bool                addToProjectFlag;
diff --git a/src/plugins/dna_export/src/ExportProjectViewItems.cpp b/src/plugins/dna_export/src/ExportProjectViewItems.cpp
index 12fbad3..407b45a 100644
--- a/src/plugins/dna_export/src/ExportProjectViewItems.cpp
+++ b/src/plugins/dna_export/src/ExportProjectViewItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QAction>
+#include <QInputDialog>
 #include <QMainWindow>
 #include <QMenu>
 #include <QMessageBox>
@@ -39,12 +40,15 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/MultiTask.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/SelectionModel.h>
 #include <U2Core/SelectionUtils.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
 
@@ -55,7 +59,6 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/ProjectView.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include "ExportChromatogramDialog.h"
 #include "ExportMSA2MSADialog.h"
@@ -94,6 +97,9 @@ ExportProjectViewItemsContoller::ExportProjectViewItemsContoller(QObject* p)
     exportAlignmentAsSequencesAction->setObjectName(ACTION_PROJECT__EXPORT_AS_SEQUENCES_ACTION);
     connect(exportAlignmentAsSequencesAction, SIGNAL(triggered()), SLOT(sl_saveAlignmentAsSequences()));
 
+    exportMcaToMsaAction = new QAction(tr("Export alignment without chromatograms..."), this);
+    connect(exportMcaToMsaAction, SIGNAL(triggered()), SLOT(sl_exportMcaToMsa()));
+
     exportNucleicAlignmentToAminoAction = new QAction(tr("Export nucleic alignment to amino translation..."), this);
     exportNucleicAlignmentToAminoAction->setObjectName(ACTION_PROJECT__EXPORT_TO_AMINO_ACTION);
     connect(exportNucleicAlignmentToAminoAction, SIGNAL(triggered()), SLOT(sl_exportNucleicAlignmentToAmino()));
@@ -154,18 +160,26 @@ void ExportProjectViewItemsContoller::addExportImportMenu(QMenu& m) {
             }
         }
     } else {
-        set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_ALIGNMENT, &ms, UOF_LoadedOnly);
+        set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, &ms, UOF_LoadedOnly);
         if (set.size() == 1) {
             sub = new QMenu(tr("Export/Import"));
             sub->addAction(exportAlignmentAsSequencesAction);
             GObject* obj = set.first();
-            const MAlignment &ma = qobject_cast<MAlignmentObject*>(obj)->getMAlignment();
-            if (ma.getAlphabet()->isNucleic()) {
+            const MultipleSequenceAlignment &ma = qobject_cast<MultipleSequenceAlignmentObject*>(obj)->getMsa();
+            if (ma->getAlphabet()->isNucleic()) {
                 sub->addAction(exportNucleicAlignmentToAminoAction);
             }
         }
     }
 
+    set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT, &ms, UOF_LoadedOnly);
+    if (set.size() == 1) {
+        if (sub == NULL) {
+            sub = new QMenu(tr("Export/Import"));
+        }
+        sub->addAction(exportMcaToMsaAction);
+    }
+
     set = SelectionUtils::findObjects(GObjectTypes::ANNOTATION_TABLE, &ms, UOF_LoadedOnly);
     if (set.size() == 1) {
         if (sub == NULL) {
@@ -199,9 +213,10 @@ void ExportProjectViewItemsContoller::addExportImportMenu(QMenu& m) {
     const bool exportedObjectsFound = (1 == os->getSelectedObjects().size()) &&
         (  1 == SelectionUtils::findObjects(GObjectTypes::TEXT, &ms, UOF_LoadedOnly).size()
         || 1 == SelectionUtils::findObjects(GObjectTypes::VARIANT_TRACK, &ms, UOF_LoadedOnly).size()
-        || 1 == SelectionUtils::findObjects(GObjectTypes::MULTIPLE_ALIGNMENT, &ms, UOF_LoadedOnly).size()
+        || 1 == SelectionUtils::findObjects(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, &ms, UOF_LoadedOnly).size()
         || 1 == SelectionUtils::findObjects(GObjectTypes::PHYLOGENETIC_TREE, &ms, UOF_LoadedOnly).size()
-        || 1 == SelectionUtils::findObjects(GObjectTypes::ASSEMBLY, &ms, UOF_LoadedOnly).size());
+        || 1 == SelectionUtils::findObjects(GObjectTypes::ASSEMBLY, &ms, UOF_LoadedOnly).size()
+        || 1 == SelectionUtils::findObjects(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT, &ms, UOF_LoadedOnly).size());
     if (exportedObjectsFound) {
         if (NULL == sub) {
             sub = new QMenu(tr("Export/Import"));
@@ -402,13 +417,13 @@ void ExportProjectViewItemsContoller::sl_saveSequencesAsAlignment() {
         return;
     }
 
-    MAlignment ma = MSAUtils::seq2ma(sequenceObjects, os, d->useGenbankHeader);
+    MultipleSequenceAlignment ma = MSAUtils::seq2ma(sequenceObjects, os, d->useGenbankHeader);
     if (os.hasError()) {
         QMessageBox::critical(NULL, L10N::errorTitle(), os.getError());
         return;
     }
     QString objName = GUrl(d->url).baseFileName();
-    ma.setName(objName);
+    ma->setName(objName);
     Task* t = ExportUtils::wrapExportTask(new ExportAlignmentTask(ma, d->url, d->format), d->addToProjectFlag);
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
@@ -418,43 +433,62 @@ void ExportProjectViewItemsContoller::sl_saveAlignmentAsSequences() {
     assert(pv!=NULL);
 
     MultiGSelection ms; ms.addSelection(pv->getGObjectSelection()); ms.addSelection(pv->getDocumentSelection());
-    QList<GObject*> set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_ALIGNMENT, &ms, UOF_LoadedOnly);
+    QList<GObject*> set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, &ms, UOF_LoadedOnly);
     if (set.size()!=1) {
         QMessageBox::critical(NULL, L10N::errorTitle(), tr("Select one alignment object to export"));
         return;
     }
     GObject* obj = set.first();
-    MAlignmentObject* maObject = qobject_cast<MAlignmentObject*>(obj);
-    const MAlignment& ma = maObject->getMAlignment();
-
-    QObjectScopedPointer<ExportMSA2SequencesDialog> d = new ExportMSA2SequencesDialog(AppContext::getMainWindow()->getQMainWindow());
+    MultipleSequenceAlignmentObject* maObject = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
+    const MultipleSequenceAlignment msa = maObject->getMultipleAlignment();
+    
+    QObjectScopedPointer<ExportMSA2SequencesDialog> d = new ExportMSA2SequencesDialog(obj->getDocument()->getURL().dirPath(), GUrlUtils::fixFileName(obj->getGObjectName()), AppContext::getMainWindow()->getQMainWindow());
     const int rc = d->exec();
     CHECK(!d.isNull(), );
 
     if (rc == QDialog::Rejected) {
         return;
     }
-    Task* t = ExportUtils::wrapExportTask(new ExportMSA2SequencesTask(ma, d->url, d->trimGapsFlag, d->format), d->addToProjectFlag);
+    Task* t = ExportUtils::wrapExportTask(new ExportMSA2SequencesTask(msa, d->url, d->trimGapsFlag, d->format), d->addToProjectFlag);
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
 
+void ExportProjectViewItemsContoller::sl_exportMcaToMsa() {
+    ProjectView *projectView = AppContext::getProjectView();
+    SAFE_POINT(projectView != NULL, "Project View is NULL", );
+
+    MultiGSelection ms;
+    ms.addSelection(projectView->getGObjectSelection());
+    ms.addSelection(projectView->getDocumentSelection());
+
+    QList<GObject *> set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT, &ms, UOF_LoadedOnly);
+    if (set.size() != 1) {
+        QMessageBox::critical(NULL, L10N::errorTitle(), tr("Select one chromatogram alignment object to export"));
+        return;
+    }
+
+    MultipleChromatogramAlignmentObject *mcaObject = qobject_cast<MultipleChromatogramAlignmentObject *>(set.first());
+    SAFE_POINT(NULL != mcaObject, "Can't cast the object to MultipleChromatogramAlignmentObject", );
+    ExportUtils::launchExportMca2MsaTask(mcaObject);
+}
+
 void ExportProjectViewItemsContoller::sl_exportNucleicAlignmentToAmino() {
     ProjectView* pv = AppContext::getProjectView();
     assert(pv!=NULL);
 
     MultiGSelection ms; ms.addSelection(pv->getGObjectSelection()); ms.addSelection(pv->getDocumentSelection());
-    QList<GObject*> set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_ALIGNMENT, &ms, UOF_LoadedOnly);
+    QList<GObject*> set = SelectionUtils::findObjects(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, &ms, UOF_LoadedOnly);
     if (set.size()!=1) {
         QMessageBox::critical(NULL, L10N::errorTitle(), tr("Select one alignment object to export"));
         return;
     }
 
     GObject* obj = set.first();
-    const MAlignment &ma = qobject_cast<MAlignmentObject*>(obj)->getMAlignment();
+    const MultipleSequenceAlignment msa = qobject_cast<MultipleSequenceAlignmentObject*>(obj)->getMsa();
 
     GObject* firstObject = set.first();
     Document* doc = firstObject->getDocument();
-    QString defaultUrl = GUrlUtils::getNewLocalUrlByFormat(doc->getURL(), ma.getName(), BaseDocumentFormats::CLUSTAL_ALN, "_transl");
+    QString defaultUrl = GUrlUtils::getNewLocalUrlByFormat(doc->getURL(), msa->getName(), BaseDocumentFormats::CLUSTAL_ALN, "_transl");
 
     QObjectScopedPointer<ExportMSA2MSADialog> d = new ExportMSA2MSADialog(defaultUrl, BaseDocumentFormats::CLUSTAL_ALN, true, AppContext::getMainWindow()->getQMainWindow());
     const int rc = d->exec();
@@ -467,7 +501,7 @@ void ExportProjectViewItemsContoller::sl_exportNucleicAlignmentToAmino() {
     QList<DNATranslation*> trans;
     trans << AppContext::getDNATranslationRegistry()->lookupTranslation(d->translationTable);
 
-    Task* t = ExportUtils::wrapExportTask(new ExportMSA2MSATask(ma, 0, ma.getNumRows(), d->file, trans, d->formatId), d->addToProjectFlag);
+    Task* t = ExportUtils::wrapExportTask(new ExportMSA2MSATask(msa, 0, msa->getNumRows(), d->file, trans, d->formatId), d->addToProjectFlag);
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
 
@@ -535,10 +569,9 @@ void ExportProjectViewItemsContoller::sl_exportAnnotations() {
     GObject* obj = set.first();
     AnnotationTableObject *aObj = qobject_cast<AnnotationTableObject *>(obj);
     SAFE_POINT(NULL != aObj, "Invalid annotation table detected!", );
-    QList<Annotation *> annotations = aObj->getAnnotations();
-    if (!annotations.isEmpty()) {
+    if (!aObj->getAnnotations().isEmpty()) {
         SAFE_POINT(NULL != aObj->getDocument(), "Invalid document detected!", );
-        ExportObjectUtils::exportAnnotations(annotations, aObj->getDocument()->getURL());
+        ExportObjectUtils::exportAnnotations(aObj, aObj->getDocument()->getURL());
         return;
     }
     QMessageBox::warning(QApplication::activeWindow(), exportAnnotations2CSV->text(), tr(NO_ANNOTATIONS_MESSAGE));
diff --git a/src/plugins/dna_export/src/ExportProjectViewItems.h b/src/plugins/dna_export/src/ExportProjectViewItems.h
index 34d4b0a..2f454b1 100644
--- a/src/plugins/dna_export/src/ExportProjectViewItems.h
+++ b/src/plugins/dna_export/src/ExportProjectViewItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,6 +44,7 @@ private slots:
     void sl_saveCorrespondingSequence();
     void sl_saveSequencesAsAlignment();
     void sl_saveAlignmentAsSequences();
+    void sl_exportMcaToMsa();
     void sl_exportNucleicAlignmentToAmino();
     void sl_importAnnotationsFromCSV();
     void sl_exportChromatogramToSCF();
@@ -59,6 +60,7 @@ private:
     QAction* exportCorrespondingSeqsAction;
     QAction* exportSequencesAsAlignmentAction;
     QAction* exportAlignmentAsSequencesAction;
+    QAction* exportMcaToMsaAction;
     QAction* exportNucleicAlignmentToAminoAction;
     QAction* importAnnotationsFromCSVAction;
     QAction* exportDNAChromatogramAction;
diff --git a/src/plugins/dna_export/src/ExportQualityScoresTask.cpp b/src/plugins/dna_export/src/ExportQualityScoresTask.cpp
index 998c4c0..b13373d 100644
--- a/src/plugins/dna_export/src/ExportQualityScoresTask.cpp
+++ b/src/plugins/dna_export/src/ExportQualityScoresTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QFile>
+#include <QTextStream>
 
 #include <U2Formats/DNAQualityIOUtils.h>
 
diff --git a/src/plugins/dna_export/src/ExportQualityScoresTask.h b/src/plugins/dna_export/src/ExportQualityScoresTask.h
index 71d22b6..1ba5ac2 100644
--- a/src/plugins/dna_export/src/ExportQualityScoresTask.h
+++ b/src/plugins/dna_export/src/ExportQualityScoresTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/Task.h>
 #include <U2Core/DNAQuality.h>
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_export/src/ExportQualityScoresWorker.cpp b/src/plugins/dna_export/src/ExportQualityScoresWorker.cpp
index 8e884b8..0bec1be 100644
--- a/src/plugins/dna_export/src/ExportQualityScoresWorker.cpp
+++ b/src/plugins/dna_export/src/ExportQualityScoresWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportQualityScoresWorker.h b/src/plugins/dna_export/src/ExportQualityScoresWorker.h
index 692d1d0..52cbc72 100644
--- a/src/plugins/dna_export/src/ExportQualityScoresWorker.h
+++ b/src/plugins/dna_export/src/ExportQualityScoresWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.cpp b/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.cpp
index 47c1bce..e4477ce 100644
--- a/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.cpp
+++ b/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -125,7 +125,7 @@ void CreateExportItemsFromSeqRegionsTask::run() {
         ExportSequenceItem ei;
 
         U2SequenceImporter seqImporter(QVariantMap(), true);
-        seqImporter.startSequence(dbiRef, U2ObjectDbi::ROOT_FOLDER, name, false, stateInfo);
+        seqImporter.startSequence(stateInfo, dbiRef, U2ObjectDbi::ROOT_FOLDER, name, false);
         SAFE_POINT_OP(stateInfo, );
         for (qint64 pos = r.startPos; pos < r.endPos(); pos += sequenceChunkMaxLength) {
             const qint64 currentChunkSize = qMin(sequenceChunkMaxLength, r.endPos() - pos);
diff --git a/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.h b/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.h
index a4fa4c2..32f80db 100644
--- a/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.h
+++ b/src/plugins/dna_export/src/ExportSelectedSeqRegionsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportSequenceTask.cpp b/src/plugins/dna_export/src/ExportSequenceTask.cpp
index 71fc6a3..02f452d 100644
--- a/src/plugins/dna_export/src/ExportSequenceTask.cpp
+++ b/src/plugins/dna_export/src/ExportSequenceTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -192,7 +192,7 @@ ExportSequenceItem toRevComplement(ExportSequenceItem &ei, const U2DbiRef &resul
     CHECK_EXT(NULL != ei.complTT, os.setError(ExportSequenceTask::tr("Complement translation not found")), complEi);
 
     U2SequenceImporter importer(QVariantMap(), true);
-    importer.startSequence(resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ei.name +"|rev-compl", ei.circular, os);
+    importer.startSequence(os, resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ei.name +"|rev-compl", ei.circular);
     CHECK_OP(os, complEi);
 
     // translate
@@ -242,7 +242,7 @@ QList<ExportSequenceItem> toAmino(ExportSequenceItem &ei, bool allFrames, const
         const QString transName = ei.name + "|transl" + (nFrames == 1 ? "" : " " + QString::number(frameNumber));
 
         frameImporters.append(U2SequenceImporter(QVariantMap(), true));
-        frameImporters[frameNumber].startSequence(resultDbiRef, U2ObjectDbi::ROOT_FOLDER, transName, false, os);
+        frameImporters[frameNumber].startSequence(os, resultDbiRef, U2ObjectDbi::ROOT_FOLDER, transName, false);
         CHECK_OP(os, res);
     }
 
@@ -303,7 +303,7 @@ ExportSequenceItem backToNucleic(ExportSequenceItem &ei, bool mostProbable, cons
     SAFE_POINT(ei.backTT->isOne2Three(), "Invalid reverse translation", backEi);
 
     U2SequenceImporter importer(QVariantMap(), true);
-    importer.startSequence(resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ei.name + "|revtransl", false, os);
+    importer.startSequence(os, resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ei.name + "|revtransl", false);
     CHECK_OP(os, backEi);
 
     // translate
@@ -533,7 +533,7 @@ U2Sequence ExportAnnotationSequenceSubTask::importAnnotatedSeq2Dbi(const SharedA
     QVector<U2Region> &resultRegions, U2OpStatus &os)
 {
     U2SequenceImporter importer(QVariantMap(), true);
-    importer.startSequence(resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ad->name, false, os);
+    importer.startSequence(os, resultDbiRef, U2ObjectDbi::ROOT_FOLDER, ad->name, false);
     CHECK_OP(os, U2Sequence());
 
     foreach(const U2Region &annotatedRegion, ad->location->regions) {
diff --git a/src/plugins/dna_export/src/ExportSequenceTask.h b/src/plugins/dna_export/src/ExportSequenceTask.h
index 52ba81a..9d4041c 100644
--- a/src/plugins/dna_export/src/ExportSequenceTask.h
+++ b/src/plugins/dna_export/src/ExportSequenceTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportSequenceViewItems.cpp b/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
index 04d9677..a39d1f7 100644
--- a/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
+++ b/src/plugins/dna_export/src/ExportSequenceViewItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/LoadRemoteDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/SelectionUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2DbiRegistry.h>
@@ -470,7 +470,7 @@ void ADVExportContext::sl_saveSelectedAnnotations() {
             sequenceContext->getSequenceObject()->getSequenceName(), sequenceContext->getComplementTT(),
             d->exportSequence(), d->exportSequenceNames(), d->filePath());
     } else {
-        t = ExportObjectUtils::saveAnnotationsTask(d->filePath(), d->fileFormat(), annotationSet);
+        t = ExportObjectUtils::saveAnnotationsTask(d->filePath(), d->fileFormat(), annotationSet, d->addToProject());
     }
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
@@ -480,15 +480,15 @@ void ADVExportContext::sl_saveSelectedAnnotations() {
 
 #define MAX_ALI_MODEL (10*1000*1000)
 
-void ADVExportContext::prepareMAFromBlastAnnotations(MAlignment& ma, const QString& qualiferId, bool includeRef, U2OpStatus& os) {
-    SAFE_POINT_EXT(ma.isEmpty(), os.setError(tr("Illegal parameter: input alignment is not empty!")),);
+void ADVExportContext::prepareMAFromBlastAnnotations(MultipleSequenceAlignment& ma, const QString& qualiferId, bool includeRef, U2OpStatus& os) {
+    SAFE_POINT_EXT(ma->isEmpty(), os.setError(tr("Illegal parameter: input alignment is not empty!")),);
     const QList<AnnotationSelectionData>& selection = view->getAnnotationsSelection()->getSelection();
     CHECK_EXT(selection.size() >= 2, os.setError(tr("At least 2 annotations are required")),);
 
     AnnotationTableObject *ao = selection.first().annotation->getGObject();
     ADVSequenceObjectContext* commonSeq = view->getSequenceContext(ao);
     int maxLen = commonSeq->getSequenceLength();
-    ma.setAlphabet(commonSeq->getAlphabet());
+    ma->setAlphabet(commonSeq->getAlphabet());
     QSet<QString> names;
     int rowIdx = 0;
 
@@ -507,22 +507,20 @@ void ADVExportContext::prepareMAFromBlastAnnotations(MAlignment& ma, const QStri
         U2EntityRef seqRef = seqCtx->getSequenceObject()->getSequenceRef();
 
         maxLen = qMax(maxLen, a.getSelectedRegionsLen());
-        CHECK_EXT(maxLen * ma.getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")), );
+        CHECK_EXT(maxLen * ma->getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")), );
 
         QByteArray rowSequence;
         QString subjSeq = a.annotation->findFirstQualifierValue("subj_seq");
         if(!subjSeq.isEmpty()){
-            ma.addRow(rowName, subjSeq.toLatin1(), os);
-            CHECK_OP(os,);
+            ma->addRow(rowName, subjSeq.toLatin1());
         }else{
-            AnnotationSelection::getAnnotationSequence(rowSequence, a, MAlignment_GapChar, seqRef, NULL, NULL, os);
-            CHECK_OP(os,);
-            ma.addRow(rowName, rowSequence, os);
+            AnnotationSelection::getAnnotationSequence(rowSequence, a, U2Msa::GAP_CHAR, seqRef, NULL, NULL, os);
             CHECK_OP(os,);
+            ma->addRow(rowName, rowSequence);
         }
 
         int offset = a.annotation->getLocation()->regions.first().startPos;
-        ma.insertGaps(rowIdx, 0, offset, os);
+        ma->insertGaps(rowIdx, 0, offset, os);
         CHECK_OP(os,);
 
         names.insert(rowName);
@@ -532,13 +530,12 @@ void ADVExportContext::prepareMAFromBlastAnnotations(MAlignment& ma, const QStri
     if (includeRef) {
         QByteArray rowSequence = commonSeq->getSequenceObject()->getWholeSequenceData(os);
         CHECK_OP(os,);
-        ma.addRow(commonSeq->getSequenceGObject()->getGObjectName(), rowSequence, 0, os);
-        CHECK_OP(os,);
+        ma->addRow(commonSeq->getSequenceGObject()->getGObjectName(), rowSequence, 0);
     }
 }
 
-void ADVExportContext::prepareMAFromAnnotations(MAlignment& ma, bool translate, U2OpStatus& os) {
-    SAFE_POINT_EXT(ma.isEmpty(), os.setError(tr("Illegal parameter: input alignment is not empty!")),);
+void ADVExportContext::prepareMAFromAnnotations(MultipleSequenceAlignment& ma, bool translate, U2OpStatus& os) {
+    SAFE_POINT_EXT(ma->isEmpty(), os.setError(tr("Illegal parameter: input alignment is not empty!")),);
     const QList<AnnotationSelectionData>& selection = view->getAnnotationsSelection()->getSelection();
     CHECK_EXT(selection.size() >= 2, os.setError(tr("At least 2 annotations are required")),);
 
@@ -560,7 +557,7 @@ void ADVExportContext::prepareMAFromAnnotations(MAlignment& ma, bool translate,
         }
     }
     int maxLen = 0;
-    ma.setAlphabet(al);
+    ma->setAlphabet(al);
     QSet<QString> names;
     foreach (const AnnotationSelectionData& a, selection) {
         QString rowName = a.annotation->getName();
@@ -569,23 +566,22 @@ void ADVExportContext::prepareMAFromAnnotations(MAlignment& ma, bool translate,
         U2EntityRef seqRef = seqCtx->getSequenceObject()->getSequenceRef();
 
         maxLen = qMax(maxLen, a.getSelectedRegionsLen());
-        CHECK_EXT(maxLen * ma.getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")),);
+        CHECK_EXT(maxLen * ma->getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")),);
 
         bool doComplement = a.annotation->getStrand().isCompementary();
         const DNATranslation* aminoTT = translate ? seqCtx->getAminoTT() : NULL;
         QByteArray rowSequence;
-        AnnotationSelection::getAnnotationSequence(rowSequence, a, MAlignment_GapChar, seqRef, doComplement ? complTT : NULL, aminoTT, os);
+        AnnotationSelection::getAnnotationSequence(rowSequence, a, U2Msa::GAP_CHAR, seqRef, doComplement ? complTT : NULL, aminoTT, os);
         CHECK_OP(os,);
 
-        ma.addRow(rowName, rowSequence, os);
-        CHECK_OP(os,);
+        ma->addRow(rowName, rowSequence);
 
         names.insert(rowName);
     }
 }
 
-void ADVExportContext::prepareMAFromSequences(MAlignment& ma, bool translate, U2OpStatus& os) {
-    SAFE_POINT_EXT(ma.isEmpty(), os.setError(tr("Illegal parameter: Input alignment is not empty!")),);
+void ADVExportContext::prepareMAFromSequences(MultipleSequenceAlignment& ma, bool translate, U2OpStatus& os) {
+    SAFE_POINT_EXT(ma->isEmpty(), os.setError(tr("Illegal parameter: Input alignment is not empty!")),);
 
     const DNAAlphabet* al = translate ? AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::AMINO_DEFAULT()) : NULL;
 
@@ -614,7 +610,7 @@ void ADVExportContext::prepareMAFromSequences(MAlignment& ma, bool translate, U2
     }
 
     CHECK_EXT(nItems >= 2, os.setError(tr("At least 2 sequences required")),);
-    ma.setAlphabet(al);
+    ma->setAlphabet(al);
 
     //cache sequences
     QSet<QString> names;
@@ -627,7 +623,7 @@ void ADVExportContext::prepareMAFromSequences(MAlignment& ma, bool translate, U2
         DNATranslation* aminoTT = ((translate || forceTranslation) && seqAl->isNucleic()) ? seqCtx->getAminoTT() : NULL;
         foreach(const U2Region& r, seqCtx->getSequenceSelection()->getSelectedRegions()) {
             maxLen = qMax(maxLen, r.length);
-            CHECK_EXT(maxLen * ma.getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")),);
+            CHECK_EXT(maxLen * ma->getNumRows() <= MAX_ALI_MODEL, os.setError(tr("Alignment is too large")),);
             QByteArray seq = seqCtx->getSequenceData(r, os);
             CHECK_OP(os, );
             if (aminoTT!=NULL) {
@@ -636,13 +632,13 @@ void ADVExportContext::prepareMAFromSequences(MAlignment& ma, bool translate, U2
             }
             QString rowName = ExportUtils::genUniqueName(names, seqCtx->getSequenceGObject()->getGObjectName());
             names.insert(rowName);
-            ma.addRow(rowName, seq, os);
+            ma->addRow(rowName, seq);
         }
     }
 }
 
 void ADVExportContext::selectionToAlignment(const QString& title, bool annotations, bool translate) {
-    MAlignment ma(MA_OBJECT_NAME);
+    MultipleSequenceAlignment ma(MA_OBJECT_NAME);
     U2OpStatusImpl os;
     if (annotations) {
         prepareMAFromAnnotations(ma, translate, os);
@@ -656,7 +652,7 @@ void ADVExportContext::selectionToAlignment(const QString& title, bool annotatio
 
     DocumentFormatConstraints c;
     c.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 
     QObjectScopedPointer<ExportSequences2MSADialog> d = new ExportSequences2MSADialog(view->getWidget());
     d->setWindowTitle(title);
@@ -768,7 +764,7 @@ void ADVExportContext::sl_exportBlastResultToAlignment()
 {
     DocumentFormatConstraints c;
     c.addFlagToSupport(DocumentFormatFlag_SupportWriting);
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 
     QObjectScopedPointer<ExportBlastResultDialog> d = new ExportBlastResultDialog(view->getWidget());
     const int rc = d->exec();
@@ -777,7 +773,7 @@ void ADVExportContext::sl_exportBlastResultToAlignment()
         return;
     }
 
-    MAlignment ma(MA_OBJECT_NAME);
+    MultipleSequenceAlignment ma(MA_OBJECT_NAME);
     U2OpStatusImpl os;
 
     prepareMAFromBlastAnnotations(ma, d->qualiferId, d->addRefFlag, os);
diff --git a/src/plugins/dna_export/src/ExportSequenceViewItems.h b/src/plugins/dna_export/src/ExportSequenceViewItems.h
index 59aabeb..b782bd4 100644
--- a/src/plugins/dna_export/src/ExportSequenceViewItems.h
+++ b/src/plugins/dna_export/src/ExportSequenceViewItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,9 @@
 #ifndef _U2_EXPORT_SEQUENCE_VIEW_ITEMS_H_
 #define _U2_EXPORT_SEQUENCE_VIEW_ITEMS_H_
 
-#include <U2Core/global.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2Region.h>
+
 #include <U2Gui/ObjectViewModel.h>
 
 namespace U2 {
@@ -33,7 +34,6 @@ class AnnotatedDNAView;
 class AnnotationSelection;
 class Annotation;
 class LRegionsSelection;
-class MAlignment;
 class U2OpStatus;
 
 class ExportSequenceViewItemsController : public GObjectViewWindowContext {
@@ -78,9 +78,9 @@ protected slots:
     void updateActions();
 
 private:
-    void prepareMAFromBlastAnnotations(MAlignment& ma, const QString& nameQualId, bool includeRef, U2OpStatus& os);
-    void prepareMAFromAnnotations(MAlignment& ma, bool translate, U2OpStatus& os);
-    void prepareMAFromSequences(MAlignment& ma, bool translate, U2OpStatus& os);
+    void prepareMAFromBlastAnnotations(MultipleSequenceAlignment& ma, const QString& nameQualId, bool includeRef, U2OpStatus& os);
+    void prepareMAFromAnnotations(MultipleSequenceAlignment& ma, bool translate, U2OpStatus& os);
+    void prepareMAFromSequences(MultipleSequenceAlignment& ma, bool translate, U2OpStatus& os);
     void fetchSequencesFromRemoteDB(const QString & listId);
 
     void selectionToAlignment(const QString& title, bool annotations, bool translate);
diff --git a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
index 7cea726..9b252c3 100644
--- a/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequences2MSADialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ ExportSequences2MSADialog::ExportSequences2MSADialog(QWidget* p, const QString&
     : QDialog(p),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222935");
+    new HelpButton(this, buttonBox, "20874840");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     okButton = buttonBox->button(QDialogButtonBox::Ok);
@@ -74,7 +74,7 @@ void ExportSequences2MSADialog::initSaveController(const QString &defaultUrl) {
     config.parentWidget = this;
 
     DocumentFormatConstraints formatConstraints;
-    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_ALIGNMENT;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
 
     saveController = new SaveDocumentController(config, formatConstraints, this);
diff --git a/src/plugins/dna_export/src/ExportSequences2MSADialog.h b/src/plugins/dna_export/src/ExportSequences2MSADialog.h
index 863e283..022d7e9 100644
--- a/src/plugins/dna_export/src/ExportSequences2MSADialog.h
+++ b/src/plugins/dna_export/src/ExportSequences2MSADialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.cpp b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
index c95f3b9..a22e706 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.cpp
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@ ExportSequencesDialog::ExportSequencesDialog( bool m, bool allowComplement, bool
       saveController(NULL),
       defaultFileName(defaultFileName) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222934");
+    new HelpButton(this, buttonBox, "20874839");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -208,7 +208,7 @@ void ExportSequencesDialog::updateModel() {
     file = saveController->getSaveFileName();
     QFileInfo fi(file);
     if( fi.isRelative() ) {
-        // save it in root sequence directory
+        // save it in root sequence folder
         file = QFileInfo(defaultFileName).absoluteDir().absolutePath() + "/" + file;
     }
     sequenceName = ( customSeqNameBox->isChecked( ) ) ? sequenceNameEdit->text( ) : QString( );
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.h b/src/plugins/dna_export/src/ExportSequencesDialog.h
index a41f261..2c2c5bf 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.h
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ExportSequencesDialog.ui b/src/plugins/dna_export/src/ExportSequencesDialog.ui
index e18420a..6a4ba76 100644
--- a/src/plugins/dna_export/src/ExportSequencesDialog.ui
+++ b/src/plugins/dna_export/src/ExportSequencesDialog.ui
@@ -6,16 +6,28 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>539</width>
-    <height>477</height>
+    <width>562</width>
+    <height>514</height>
    </rect>
   </property>
   <property name="sizePolicy">
-   <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
+  <property name="minimumSize">
+   <size>
+    <width>562</width>
+    <height>400</height>
+   </size>
+  </property>
+  <property name="maximumSize">
+   <size>
+    <width>800</width>
+    <height>514</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Export Selected Sequences</string>
   </property>
@@ -32,16 +44,6 @@
        </property>
       </widget>
      </item>
-     <item row="3" column="0">
-      <widget class="QCheckBox" name="addToProjectBox">
-       <property name="text">
-        <string>Add document to the project</string>
-       </property>
-       <property name="checked">
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
      <item row="0" column="0">
       <widget class="QLabel" name="fileLabel">
        <property name="text">
@@ -83,6 +85,16 @@
        </property>
       </widget>
      </item>
+     <item row="2" column="1">
+      <widget class="QCheckBox" name="addToProjectBox">
+       <property name="text">
+        <string>Add document to the project</string>
+       </property>
+       <property name="checked">
+        <bool>true</bool>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
@@ -156,6 +168,19 @@
     </widget>
    </item>
    <item>
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QGroupBox" name="backTranslationBox">
      <property name="title">
       <string>Back translation options</string>
@@ -223,11 +248,24 @@
     </widget>
    </item>
    <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QGroupBox" name="saveModeBox">
      <property name="title">
       <string>Merge options</string>
      </property>
-     <layout class="QGridLayout" name="gridLayout" rowstretch="0,0" columnstretch="0,1">
+     <layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0" columnstretch="0,1">
       <item row="0" column="1">
        <widget class="QRadioButton" name="mergeButton">
         <property name="text">
@@ -273,6 +311,19 @@
     </widget>
    </item>
    <item>
+    <spacer name="verticalSpacer_3">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
@@ -286,7 +337,6 @@
   <tabstop>fileButton</tabstop>
   <tabstop>formatCombo</tabstop>
   <tabstop>withAnnotationsBox</tabstop>
-  <tabstop>addToProjectBox</tabstop>
   <tabstop>customSeqNameBox</tabstop>
   <tabstop>sequenceNameEdit</tabstop>
   <tabstop>directStrandButton</tabstop>
diff --git a/src/plugins/dna_export/src/ExportTasks.cpp b/src/plugins/dna_export/src/ExportTasks.cpp
index ff81cf0..e2b8a4e 100644
--- a/src/plugins/dna_export/src/ExportTasks.cpp
+++ b/src/plugins/dna_export/src/ExportTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DocumentModel.h>
 #include <U2Core/IOAdapter.h>
@@ -36,8 +36,8 @@
 #include <U2Core/MSAUtils.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
 
@@ -77,6 +77,7 @@ QList<Task*> AddExportedDocumentAndOpenViewTask::onSubTaskFinished( Task* subTas
             }
         }
         loadTask = LoadDocumentTask::getDefaultLoadDocTask(doc->getURL());
+        CHECK_EXT(NULL != loadTask, setError(tr("Can't create load task")), subTasks);
         subTasks << loadTask;
     }
     if (subTask == loadTask) {
@@ -88,14 +89,14 @@ QList<Task*> AddExportedDocumentAndOpenViewTask::onSubTaskFinished( Task* subTas
 
 //////////////////////////////////////////////////////////////////////////
 // DNAExportAlignmentTask
-ExportAlignmentTask::ExportAlignmentTask(const MAlignment& _ma, const QString& _fileName, DocumentFormatId _f)
-: DocumentProviderTask("", TaskFlag_None), ma(_ma), fileName(_fileName), format(_f)
+ExportAlignmentTask::ExportAlignmentTask(const MultipleSequenceAlignment& _ma, const QString& _fileName, DocumentFormatId _f)
+: DocumentProviderTask("", TaskFlag_None), ma(_ma->getCopy()), fileName(_fileName), format(_f)
 {
     GCOUNTER( cvar, tvar, "ExportAlignmentTask" );
     setTaskName(tr("Export alignment to '%1'").arg(QFileInfo(fileName).fileName()));
     setVerboseLogMode(true);
 
-    assert(!ma.isEmpty());
+    assert(!ma->isEmpty());
 }
 
 void ExportAlignmentTask::run() {
@@ -105,7 +106,7 @@ void ExportAlignmentTask::run() {
     resultDocument = f->createNewLoadedDocument(iof, fileName, stateInfo);
     CHECK_OP(stateInfo, );
 
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(resultDocument->getDbiRef(), ma, stateInfo);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(resultDocument->getDbiRef(), ma, stateInfo);
     CHECK_OP(stateInfo, );
 
     resultDocument->addObject(obj);
@@ -116,9 +117,9 @@ void ExportAlignmentTask::run() {
 //////////////////////////////////////////////////////////////////////////
 // export alignment  2 sequence format
 
-ExportMSA2SequencesTask::ExportMSA2SequencesTask(const MAlignment& _ma, const QString& _url, bool _trimAli, DocumentFormatId _format)
+ExportMSA2SequencesTask::ExportMSA2SequencesTask(const MultipleSequenceAlignment& _ma, const QString& _url, bool _trimAli, DocumentFormatId _format)
 : DocumentProviderTask(tr("Export alignment to sequence: %1").arg(_url), TaskFlag_None),
-ma(_ma), url(_url), trimAli(_trimAli), format(_format)
+ma(_ma->getCopy()), url(_url), trimAli(_trimAli), format(_format)
 {
     GCOUNTER( cvar, tvar, "ExportMSA2SequencesTask");
     setVerboseLogMode(true);
@@ -138,7 +139,7 @@ void ExportMSA2SequencesTask::run() {
             name = TextUtils::variate(name, " ", usedNames, false, 1);
             s.setName(name);
         }
-        U2EntityRef seqRef = U2SequenceUtils::import(resultDocument->getDbiRef(), s, stateInfo);
+        U2EntityRef seqRef = U2SequenceUtils::import(stateInfo, resultDocument->getDbiRef(), s);
         CHECK_OP(stateInfo, );
         resultDocument->addObject(new U2SequenceObject(name, seqRef));
         usedNames.insert(name);
@@ -149,13 +150,13 @@ void ExportMSA2SequencesTask::run() {
 //////////////////////////////////////////////////////////////////////////
 // export nucleic alignment 2 amino alignment
 
-ExportMSA2MSATask::ExportMSA2MSATask(const MAlignment& _ma, int _offset, int _len, const QString& _url,
+ExportMSA2MSATask::ExportMSA2MSATask(const MultipleSequenceAlignment& _ma, int _offset, int _len, const QString& _url,
     const QList<DNATranslation*>& _aminoTranslations, DocumentFormatId _format)
 : DocumentProviderTask(tr("Export alignment to alignment: %1").arg(_url), TaskFlag_None),
-ma(_ma), offset(_offset), len(_len), url(_url), format(_format), aminoTranslations(_aminoTranslations)
+ma(_ma->getCopy()), offset(_offset), len(_len), url(_url), format(_format), aminoTranslations(_aminoTranslations)
 {
     GCOUNTER( cvar, tvar, "ExportMSA2MSATask" );
-    CHECK_EXT( !ma.isEmpty(), setError(tr("Nothing to export: multiple alignment is empty")), );
+    CHECK_EXT( !ma->isEmpty(), setError(tr("Nothing to export: multiple alignment is empty")), );
     setVerboseLogMode(true);
 }
 
@@ -192,10 +193,10 @@ void ExportMSA2MSATask::run() {
             seqList << s;
         }
     }
-    MAlignment ma = MSAUtils::seq2ma(seqList, stateInfo);
+    MultipleSequenceAlignment ma = MSAUtils::seq2ma(seqList, stateInfo);
     CHECK_OP(stateInfo, );
 
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(resultDocument->getDbiRef(), ma, stateInfo);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(resultDocument->getDbiRef(), ma, stateInfo);
     CHECK_OP(stateInfo, );
 
     resultDocument->addObject(obj);
diff --git a/src/plugins/dna_export/src/ExportTasks.h b/src/plugins/dna_export/src/ExportTasks.h
index f505245..675178b 100644
--- a/src/plugins/dna_export/src/ExportTasks.h
+++ b/src/plugins/dna_export/src/ExportTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,16 +23,16 @@
 #define _U2_EXPORT_PLUGIN_TASKS_H_
 
 #include <U2Core/BaseDocumentFormats.h>
-
-#include <U2Core/Task.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignment.h>
 #include <U2Core/DocumentProviderTask.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/Task.h>
 
 namespace U2 {
 
 class DNATranslation;
 class LoadDocumentTask;
+class MultipleSequenceAlignmentObject;
 
 /** A task to adds exported document to project and open view*/
 //TODO: make this task a general purpose routine
@@ -51,12 +51,12 @@ private:
 class ExportAlignmentTask : public DocumentProviderTask  {
     Q_OBJECT
 public:
-    ExportAlignmentTask(const MAlignment& ma, const QString& fileName, DocumentFormatId f);
+    ExportAlignmentTask(const MultipleSequenceAlignment& ma, const QString& fileName, DocumentFormatId f);
 
     void run();
 
 private:
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     QString                 fileName;
     DocumentFormatId        format;
 };
@@ -66,12 +66,12 @@ private:
 class ExportMSA2SequencesTask : public DocumentProviderTask {
     Q_OBJECT
 public:
-    ExportMSA2SequencesTask(const MAlignment& ma, const QString& url, bool trimAli, DocumentFormatId format);
+    ExportMSA2SequencesTask(const MultipleSequenceAlignment& ma, const QString& url, bool trimAli, DocumentFormatId format);
 
     void run();
 
 private:
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     QString                 url;
     bool                    trimAli;
     QString                 format;
@@ -80,13 +80,13 @@ private:
 class ExportMSA2MSATask : public DocumentProviderTask {
     Q_OBJECT
 public:
-    ExportMSA2MSATask(const MAlignment& ma, int offset, int len, const QString& url,
+    ExportMSA2MSATask(const MultipleSequenceAlignment& ma, int offset, int len, const QString& url,
         const QList<DNATranslation*>& aminoTranslations, DocumentFormatId format);
 
     void run();
 
 private:
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     int                     offset;
     int                     len;
     QString                 url;
diff --git a/src/plugins/dna_export/src/ExportUtils.cpp b/src/plugins/dna_export/src/ExportUtils.cpp
index 37f21e1..7c9505f 100644
--- a/src/plugins/dna_export/src/ExportUtils.cpp
+++ b/src/plugins/dna_export/src/ExportUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,28 @@
  * MA 02110-1301, USA.
  */
 
+#include <QMainWindow>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/SaveDocumentTask.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
+#include <U2Gui/MainWindow.h>
+
 #include "ExportSequenceTask.h"
 #include "ExportSequencesDialog.h"
 #include "ExportTasks.h"
 #include "ExportUtils.h"
+#include "dialogs/ExportMca2MsaDialog.h"
+#include "tasks/ExportMca2MsaTask.h"
 
 namespace U2 {
 
@@ -68,4 +78,24 @@ QString ExportUtils::genUniqueName(const QSet<QString>& names, QString prefix) {
     return name;
 }
 
-}//namespace
+void ExportUtils::launchExportMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject) {
+    SAFE_POINT(NULL != mcaObject, "Can't cast the object to MultipleChromatogramAlignmentObject", );
+
+    Document *document = mcaObject->getDocument();
+    QString defaultUrl = GUrlUtils::getNewLocalUrlByFormat(document->getURL(), mcaObject->getGObjectName(), BaseDocumentFormats::UGENEDB, "");
+
+    QObjectScopedPointer<ExportMca2MsaDialog> dialog = new ExportMca2MsaDialog(defaultUrl, AppContext::getMainWindow()->getQMainWindow());
+    const int result = dialog->exec();
+    CHECK(!dialog.isNull(), );
+    CHECK(result != QDialog::Rejected, );
+
+    Task *task = ExportUtils::wrapExportTask(new ExportMca2MsaTask(mcaObject,
+                                                                   dialog->getSavePath(),
+                                                                   dialog->getFormatId(),
+                                                                   dialog->getIncludeReferenceOption()),
+                                             dialog->getAddToProjectOption());
+    TaskWatchdog::trackResourceExistence(mcaObject, task, tr("A problem occurred during export MCA to MSA. The MCA is no more available."));
+    AppContext::getTaskScheduler()->registerTopLevelTask(task);
+}
+
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/ExportUtils.h b/src/plugins/dna_export/src/ExportUtils.h
index 0bc63d0..4992b30 100644
--- a/src/plugins/dna_export/src/ExportUtils.h
+++ b/src/plugins/dna_export/src/ExportUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_EXPORT_UTILS_H_
 #define _U2_EXPORT_UTILS_H_
 
+#include <QObject>
+
 #include <U2Core/global.h>
 
 namespace U2 {
@@ -31,6 +33,7 @@ class Annotation;
 class DocumentProviderTask;
 class ExportSequenceTaskSettings;
 class ExportSequencesDialog;
+class MultipleChromatogramAlignmentObject;
 class Task;
 
 class ExportUtils: public QObject {
@@ -43,6 +46,8 @@ public:
 
     // generates unique name using prefix + numbers
     static QString genUniqueName(const QSet<QString>& names, QString prefix);
+
+    static void launchExportMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject);
 };
 
 }//namespace
diff --git a/src/plugins/dna_export/src/GenerateDNAWorker.cpp b/src/plugins/dna_export/src/GenerateDNAWorker.cpp
index 80375f0..85855a6 100644
--- a/src/plugins/dna_export/src/GenerateDNAWorker.cpp
+++ b/src/plugins/dna_export/src/GenerateDNAWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -19,29 +19,29 @@
 * MA 02110-1301, USA.
 */
 
-#include "GenerateDNAWorker.h"
-#include "DNASequenceGenerator.h"
-
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/ActorModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/L10n.h>
+#include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
 #include <U2Gui/GUIUtils.h>
 
-#include <U2Core/L10n.h>
-#include <U2Core/FailTask.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/TaskSignalMapper.h>
+#include <U2Lang/ActorModel.h>
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/WorkflowEnv.h>
 
+#include "DNASequenceGenerator.h"
+#include "GenerateDNAWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/dna_export/src/GenerateDNAWorker.h b/src/plugins/dna_export/src/GenerateDNAWorker.h
index a09e427..4ae5659 100644
--- a/src/plugins/dna_export/src/GenerateDNAWorker.h
+++ b/src/plugins/dna_export/src/GenerateDNAWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp b/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
index 0012cfa..b7a639e 100644
--- a/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -33,6 +28,7 @@
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
+#include <QPushButton>
 
 #include "GetSequenceByIdDialog.h"
 
@@ -40,7 +36,9 @@ namespace U2 {
 
 GetSequenceByIdDialog::GetSequenceByIdDialog(QWidget *w): QDialog(w) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223160");
+    new HelpButton(this, buttonBox, "20875064");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     connect(toolButton, SIGNAL(clicked()), SLOT(sl_saveFilenameButtonClicked()));
     QString defaultPath = AppContext::getAppSettings()->getUserAppsSettings()->getDownloadDirPath();
@@ -52,7 +50,7 @@ const QString DOWNLOAD_REMOTE_FILE_DOMAIN = "DownloadRemoteFileDialog";
 
 void GetSequenceByIdDialog::sl_saveFilenameButtonClicked() {
     LastUsedDirHelper lod(DOWNLOAD_REMOTE_FILE_DOMAIN);
-    QString dirName = U2FileDialog::getExistingDirectory(this, tr("Select directory to save"), lod.dir);
+    QString dirName = U2FileDialog::getExistingDirectory(this, tr("Select folder to save"), lod.dir);
     if(!dirName.isEmpty()) {
         directoryEdit->setText(dirName);
         dir = dirName;
@@ -67,7 +65,7 @@ void GetSequenceByIdDialog::accept() {
     QDir downloadDir(dir);
     if (!downloadDir.exists()) {
         if (QMessageBox::Yes == QMessageBox::question(this,
-            windowTitle(), tr("Directory doesn't exist. Do you want to create it?"),
+            windowTitle(), tr("Folder doesn't exist. Do you want to create it?"),
             QMessageBox::Yes, QMessageBox::No))
         {
             downloadDir.mkpath(dir);
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.h b/src/plugins/dna_export/src/GetSequenceByIdDialog.h
index 634a4a6..4baae95 100644
--- a/src/plugins/dna_export/src/GetSequenceByIdDialog.h
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/GetSequenceByIdDialog.ui b/src/plugins/dna_export/src/GetSequenceByIdDialog.ui
index 2601648..352b3f5 100644
--- a/src/plugins/dna_export/src/GetSequenceByIdDialog.ui
+++ b/src/plugins/dna_export/src/GetSequenceByIdDialog.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>464</width>
+    <width>489</width>
     <height>184</height>
    </rect>
   </property>
@@ -79,19 +79,6 @@ NCBI Genbank by their GI identifier
       <enum>QLayout::SetMinAndMaxSize</enum>
      </property>
      <item>
-      <spacer name="horizontalSpacer">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0">
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-     <item>
       <widget class="QDialogButtonBox" name="buttonBox">
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
index 3635615..d5ffbf9 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,7 +62,7 @@ ImportAnnotationsFromCSVDialog::ImportAnnotationsFromCSVDialog(QWidget* w)
     : QDialog (w),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223005");
+    new HelpButton(this, buttonBox, "20874909");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
index df23aee..cbab248 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
index 2a5e845..dcdac00 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
-#include <QtScript/QScriptEngine>
-#include <QtScript/QScriptValueIterator>
+#include <QScriptEngine>
+#include <QScriptValueIterator>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
diff --git a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
index 3187942..3524850 100644
--- a/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
+++ b/src/plugins/dna_export/src/ImportAnnotationsFromCSVTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,13 @@
 #ifndef _U2_IMPORT_ANNOTATIONS_FROM_CSV_TASK_H_
 #define _U2_IMPORT_ANNOTATIONS_FROM_CSV_TASK_H_
 
+#include <QMap>
+#include <QPointer>
+
 #include <U2Core/Task.h>
 #include <U2Core/AnnotationData.h>
-#include "CSVColumnConfiguration.h"
 
-#include <QtCore/QPointer>
+#include "CSVColumnConfiguration.h"
 
 namespace U2 {
 
diff --git a/src/plugins/dna_export/src/ImportQualityScoresTask.cpp b/src/plugins/dna_export/src/ImportQualityScoresTask.cpp
index 8726a8e..33ea2a0 100644
--- a/src/plugins/dna_export/src/ImportQualityScoresTask.cpp
+++ b/src/plugins/dna_export/src/ImportQualityScoresTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QFile>
+#include <QTextStream>
 
 #include <U2Core/Log.h>
 #include <U2Core/IOAdapter.h>
diff --git a/src/plugins/dna_export/src/ImportQualityScoresTask.h b/src/plugins/dna_export/src/ImportQualityScoresTask.h
index 1bf72a0..ac992a3 100644
--- a/src/plugins/dna_export/src/ImportQualityScoresTask.h
+++ b/src/plugins/dna_export/src/ImportQualityScoresTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,10 +22,11 @@
 #ifndef _U2_IMPORT_QUALITY_SCORES_TASK_H_
 #define _U2_IMPORT_QUALITY_SCORES_TASK_H_
 
-#include <U2Core/Task.h>
-#include <U2Core/DNAQuality.h>
+#include <QMap>
+#include <QPointer>
 
-#include <QtCore/QPointer>
+#include <U2Core/DNAQuality.h>
+#include <U2Core/Task.h>
 
 namespace U2 {
 
@@ -42,7 +43,6 @@ public:
 
 };
 
-
 class ReadQualityScoresTask : public Task {
     Q_OBJECT
 public:
diff --git a/src/plugins/dna_export/src/ImportQualityScoresWorker.cpp b/src/plugins/dna_export/src/ImportQualityScoresWorker.cpp
index d853843..55058c4 100644
--- a/src/plugins/dna_export/src/ImportQualityScoresWorker.cpp
+++ b/src/plugins/dna_export/src/ImportQualityScoresWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,27 +19,28 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Core/Log.h>
-#include <U2Core/GUrl.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/GUrl.h>
+#include <U2Core/Log.h>
 #include <U2Core/U2OpStatusUtils.h>
-#include <U2Gui/DialogUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-#include "ImportQualityScoresWorker.h"
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Gui/DialogUtils.h>
 
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
 
-/* TRANSLATOR U2::LocalWorkflow::ImportPhredQualityWorker */
+#include "ImportQualityScoresWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/dna_export/src/ImportQualityScoresWorker.h b/src/plugins/dna_export/src/ImportQualityScoresWorker.h
index d962bd4..06e274a 100644
--- a/src/plugins/dna_export/src/ImportQualityScoresWorker.h
+++ b/src/plugins/dna_export/src/ImportQualityScoresWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_export/src/McaEditorContext.cpp b/src/plugins/dna_export/src/McaEditorContext.cpp
new file mode 100644
index 0000000..51d3193
--- /dev/null
+++ b/src/plugins/dna_export/src/McaEditorContext.cpp
@@ -0,0 +1,73 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Gui/GUIUtils.h>
+
+#include <U2View/MaEditorFactory.h>
+#include <U2View/McaEditor.h>
+
+#include "ExportUtils.h"
+#include "McaEditorContext.h"
+
+namespace U2 {
+
+McaEditorContext::McaEditorContext(QObject *parent)
+    : GObjectViewWindowContext(parent, McaEditorFactory::ID)
+{
+
+}
+
+void McaEditorContext::sl_exportMca2Msa() {
+    GObjectViewAction *action = qobject_cast<GObjectViewAction *>(sender());
+    SAFE_POINT(NULL != action, "action is NULL", );
+    McaEditor *mcaEditor = qobject_cast<McaEditor *>(action->getObjectView());
+    SAFE_POINT(NULL != mcaEditor, "Mca Editor is NULL", );
+
+    MultipleChromatogramAlignmentObject *mcaObject = mcaEditor->getMaObject();
+    ExportUtils::launchExportMca2MsaTask(mcaObject);
+}
+
+void McaEditorContext::initViewContext(GObjectView *view) {
+    McaEditor *mcaEditor = qobject_cast<McaEditor *>(view);
+    SAFE_POINT(NULL != mcaEditor, "Mca Editor is NULL", );
+    CHECK(NULL != mcaEditor->getMaObject(), );
+
+    GObjectViewAction *action = new GObjectViewAction(this, view, tr("Export alignment without chromatograms..."));
+    connect(action, SIGNAL(triggered()), SLOT(sl_exportMca2Msa()));
+    addViewAction(action);
+}
+
+void McaEditorContext::buildMenu(GObjectView *view, QMenu *menu) {
+    McaEditor *mcaEditor = qobject_cast<McaEditor *>(view);
+    SAFE_POINT(NULL != mcaEditor, "Mca Editor is NULL", );
+    SAFE_POINT(NULL != menu, "Menu is NULL", );
+    CHECK(NULL != mcaEditor->getMaObject(), );
+
+    QList<GObjectViewAction *> list = getViewActions(view);
+    SAFE_POINT(1 == list.size(), "List size is incorrect", );
+    QMenu *alignmentMenu = GUIUtils::findSubMenu(menu, MCAE_MENU_ALIGNMENT);
+    SAFE_POINT(alignmentMenu != NULL, "menu 'Alignment' is NULL", );
+    alignmentMenu->addAction(list.first());
+}
+
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/McaEditorContext.h b/src/plugins/dna_export/src/McaEditorContext.h
new file mode 100644
index 0000000..67a8457
--- /dev/null
+++ b/src/plugins/dna_export/src/McaEditorContext.h
@@ -0,0 +1,44 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_MCA_EDITOR_CONTEXT_H_
+#define _U2_MCA_EDITOR_CONTEXT_H_
+
+#include <U2Gui/ObjectViewModel.h>
+
+namespace U2 {
+
+class McaEditorContext : public GObjectViewWindowContext {
+    Q_OBJECT
+public:
+    McaEditorContext(QObject *parent);
+
+private slots:
+    void sl_exportMca2Msa();
+
+private:
+    void initViewContext(GObjectView *view);
+    void buildMenu(GObjectView *view, QMenu *menu);
+};
+
+}   // namespace U2
+
+#endif // _U2_MCA_EDITOR_CONTEXT_H_
diff --git a/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.cpp b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.cpp
new file mode 100644
index 0000000..b2c4a2f
--- /dev/null
+++ b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.cpp
@@ -0,0 +1,81 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QPushButton>
+
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/SaveDocumentController.h>
+
+#include "dialogs/ExportMca2MsaDialog.h"
+
+namespace U2 {
+
+ExportMca2MsaDialog::ExportMca2MsaDialog(const QString &defaultFilePath, QWidget *parent)
+    : QDialog(parent),
+      saveController(NULL)
+{
+    setupUi(this);
+    GCOUNTER(cvar, tvar, "'Export Alignment without Chromatograms' dialog opening");
+
+    new HelpButton(this, buttonBox, "20874842");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Export"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
+    initSaveController(defaultFilePath);
+}
+
+QString ExportMca2MsaDialog::getSavePath() const {
+    return saveController->getSaveFileName();
+}
+
+QString ExportMca2MsaDialog::getFormatId() const {
+    return saveController->getFormatIdToSave();
+}
+
+bool ExportMca2MsaDialog::getAddToProjectOption() const {
+    return chbAddToProject->isChecked();
+}
+
+bool ExportMca2MsaDialog::getIncludeReferenceOption() const {
+    return chbIncludeReference->isChecked();
+}
+
+void ExportMca2MsaDialog::initSaveController(const QString &defaultFilePath) {
+    SaveDocumentControllerConfig config;
+    config.defaultFileName = defaultFilePath;
+    config.defaultFormatId = BaseDocumentFormats::CLUSTAL_ALN;
+    config.fileDialogButton = tbFilePath;
+    config.fileNameEdit = leFilePath;
+    config.formatCombo = cbFormat;
+    config.parentWidget = this;
+    config.saveTitle = tr("Export Alignment");
+
+    DocumentFormatConstraints formatConstraints;
+    formatConstraints.supportedObjectTypes << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
+    formatConstraints.addFlagToSupport(DocumentFormatFlag_SupportWriting);
+
+    saveController = new SaveDocumentController(config, formatConstraints, this);
+}
+
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.h b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.h
new file mode 100644
index 0000000..f8b9578
--- /dev/null
+++ b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.h
@@ -0,0 +1,52 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_EXPORT_MCA_2_MSA_DIALOG_H_
+#define _U2_EXPORT_MCA_2_MSA_DIALOG_H_
+
+#include <QDialog>
+
+#include "ui_ExportMca2MsaDialog.h"
+
+namespace U2 {
+
+class SaveDocumentController;
+
+class ExportMca2MsaDialog : public QDialog, public Ui_ExportMca2MsaDialog {
+    Q_OBJECT
+public:
+    ExportMca2MsaDialog(const QString &defaultFilePath, QWidget *parent);
+
+    QString getSavePath() const;
+    QString getFormatId() const;
+    bool getAddToProjectOption() const;
+    bool getIncludeReferenceOption() const;
+
+private:
+    void initSaveController(const QString &defaultFilePath);
+
+    const QString defaultFilePath;
+    SaveDocumentController *saveController;
+};
+
+}   // namespace U2
+
+#endif // _U2_EXPORT_MCA_2_MSA_DIALOG_H_
diff --git a/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.ui b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.ui
new file mode 100644
index 0000000..52d67db
--- /dev/null
+++ b/src/plugins/dna_export/src/dialogs/ExportMca2MsaDialog.ui
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ExportMca2MsaDialog</class>
+ <widget class="QDialog" name="ExportMca2MsaDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>606</width>
+    <height>232</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>Export Alignment without Chromatograms </string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
+   <item>
+    <layout class="QGridLayout" name="outputLayout">
+     <property name="sizeConstraint">
+      <enum>QLayout::SetMinAndMaxSize</enum>
+     </property>
+     <item row="1" column="0">
+      <widget class="QLabel" name="lblFormat">
+       <property name="text">
+        <string>File format</string>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="1">
+      <widget class="QComboBox" name="cbFormat"/>
+     </item>
+     <item row="0" column="1">
+      <layout class="QHBoxLayout" name="filePathLayout">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
+       <item>
+        <widget class="QLineEdit" name="leFilePath"/>
+       </item>
+       <item>
+        <widget class="QToolButton" name="tbFilePath">
+         <property name="text">
+          <string>...</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </item>
+     <item row="0" column="0">
+      <widget class="QLabel" name="lblFilePath">
+       <property name="text">
+        <string>Export to file</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="chbAddToProject">
+     <property name="text">
+      <string>Add document to project</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QCheckBox" name="chbIncludeReference">
+     <property name="text">
+      <string>Include reference sequence</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>ExportMca2MsaDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>ExportMca2MsaDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.cpp b/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.cpp
new file mode 100644
index 0000000..0672229
--- /dev/null
+++ b/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.cpp
@@ -0,0 +1,66 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+
+#include "ConvertMca2MsaTask.h"
+
+namespace U2 {
+
+ConvertMca2MsaTask::ConvertMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject, bool includeReference)
+    : Task(tr("Convert MCA to MSA task"), TaskFlag_None),
+      mcaObject(mcaObject),
+      includeReference(includeReference)
+{
+    SAFE_POINT_EXT(NULL != mcaObject, setError(L10N::nullPointerError("MCA object")), );
+}
+
+MultipleSequenceAlignment ConvertMca2MsaTask::getMsa() const {
+    return msa;
+}
+
+void ConvertMca2MsaTask::prepare() {
+    locker.reset(new StateLocker(mcaObject));
+}
+
+void ConvertMca2MsaTask::run() {
+    msa = MultipleSequenceAlignment(mcaObject->getGObjectName(), mcaObject->getAlphabet());
+
+    if (includeReference) {
+        U2SequenceObject *referenceObject = mcaObject->getReferenceObj();
+        msa->addRow(referenceObject->getSequenceName(), referenceObject->getWholeSequenceData(stateInfo));
+        CHECK_OP(stateInfo, );
+    }
+
+    foreach (const MultipleChromatogramAlignmentRow &mcaRow, mcaObject->getMca()->getMcaRows()) {
+        msa->addRow(mcaRow->getName(), mcaRow->getSequence(), mcaRow->getGapModel(), stateInfo);
+        CHECK_OP(stateInfo, );
+    }
+}
+
+Task::ReportResult ConvertMca2MsaTask::report() {
+    locker.reset();
+    return ReportResult_Finished;
+}
+
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.h b/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.h
new file mode 100644
index 0000000..b506843
--- /dev/null
+++ b/src/plugins/dna_export/src/tasks/ConvertMca2MsaTask.h
@@ -0,0 +1,54 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_CONVERT_MCA_2_MSA_TASK_H_
+#define _U2_CONVERT_MCA_2_MSA_TASK_H_
+
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/StateLockableDataModel.h>
+#include <U2Core/Task.h>
+
+namespace U2 {
+
+class MultipleChromatogramAlignmentObject;
+
+class ConvertMca2MsaTask : public Task {
+    Q_OBJECT
+public:
+    ConvertMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject, bool includeReference);
+
+    MultipleSequenceAlignment getMsa() const;
+
+private:
+    void prepare();
+    void run();
+    ReportResult report();
+
+    MultipleChromatogramAlignmentObject *mcaObject;
+    const bool includeReference;
+
+    MultipleSequenceAlignment msa;
+    QScopedPointer<StateLocker> locker;
+};
+
+}   // namespace U2
+
+#endif // _U2_CONVERT_MCA_2_MSA_TASK_H_
diff --git a/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.cpp b/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.cpp
new file mode 100644
index 0000000..094862a
--- /dev/null
+++ b/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.cpp
@@ -0,0 +1,69 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/Counter.h>
+#include <U2Core/GHints.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+
+#include "ConvertMca2MsaTask.h"
+#include "ExportMca2MsaTask.h"
+#include "ExportTasks.h"
+
+namespace U2 {
+
+ExportMca2MsaTask::ExportMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject,
+                                     const QString &fileName,
+                                     const DocumentFormatId &formatId,
+                                     bool includeReference)
+    : DocumentProviderTask(tr("Export Sanger reads task"), TaskFlags_NR_FOSE_COSC),
+      mcaObject(mcaObject),
+      fileName(fileName),
+      formatId(formatId),
+      includeReference(includeReference),
+      convertTask(NULL),
+      exportTask(NULL)
+{
+    GCOUNTER(cvar, tvar, "ExportMca2MsaTask");
+    SAFE_POINT_EXT(NULL != mcaObject, setError(L10N::nullPointerError("MCA object")), );
+}
+
+void ExportMca2MsaTask::prepare() {
+    convertTask = new ConvertMca2MsaTask(mcaObject, includeReference);
+    addSubTask(convertTask);
+}
+
+QList<Task *> ExportMca2MsaTask::onSubTaskFinished(Task *subTask) {
+    QList<Task *> newSubTasks;
+    CHECK_OP(stateInfo, newSubTasks);
+
+    if (convertTask == subTask) {
+        exportTask = new ExportAlignmentTask(convertTask->getMsa(), fileName, formatId);
+        newSubTasks << exportTask;
+    } else if (exportTask == subTask) {
+        resultDocument = exportTask->takeDocument();
+        resultDocument->getGHints()->set(DocumentReadingMode_SequenceAsAlignmentHint, true);
+    }
+
+    return newSubTasks;
+}
+
+}   // namespace U2
diff --git a/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.h b/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.h
new file mode 100644
index 0000000..9b9846b
--- /dev/null
+++ b/src/plugins/dna_export/src/tasks/ExportMca2MsaTask.h
@@ -0,0 +1,53 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_EXPORT_MCA_2_MSA_TASK_H_
+#define _U2_EXPORT_MCA_2_MSA_TASK_H_
+
+#include <U2Core/DocumentProviderTask.h>
+
+namespace U2 {
+
+class ConvertMca2MsaTask;
+class ExportAlignmentTask;
+class MultipleChromatogramAlignmentObject;
+
+class ExportMca2MsaTask : public DocumentProviderTask {
+    Q_OBJECT
+public:
+    ExportMca2MsaTask(MultipleChromatogramAlignmentObject *mcaObject, const QString &fileName, const DocumentFormatId &formatId, bool includeReference);
+
+private:
+    void prepare();
+    QList<Task *> onSubTaskFinished(Task *subTask);
+
+    MultipleChromatogramAlignmentObject *mcaObject;
+    QString fileName;
+    DocumentFormatId formatId;
+    const bool includeReference;
+
+    ConvertMca2MsaTask *convertTask;
+    ExportAlignmentTask *exportTask;
+};
+
+}   // namespace U2
+
+#endif // _U2_EXPORT_MCA_2_MSA_TASK_H_
diff --git a/src/plugins/dna_export/transl/english.ts b/src/plugins/dna_export/transl/english.ts
index 33b0e76..57a33bc 100644
--- a/src/plugins/dna_export/transl/english.ts
+++ b/src/plugins/dna_export/transl/english.ts
@@ -4,51 +4,40 @@
 <context>
     <name>BaseContentDialog</name>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="20"/>
         <source>Set Base Content</source>
-        <translation>Set Base Content</translation>
+        <translation type="vanished">Set Base Content</translation>
     </message>
     <message>
         <source>Base conetnt</source>
         <translation type="vanished">Base conetnt</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="26"/>
         <source>Base content</source>
-        <translation>Base content</translation>
+        <translation type="vanished">Base content</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="55"/>
         <source>A</source>
-        <translation>A</translation>
+        <translation type="vanished">A</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="68"/>
-        <location filename="../src/BaseContentDialog.ui" line="107"/>
-        <location filename="../src/BaseContentDialog.ui" line="146"/>
-        <location filename="../src/BaseContentDialog.ui" line="185"/>
         <source> %</source>
-        <translation> %</translation>
+        <translation type="vanished"> %</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="94"/>
         <source>C</source>
-        <translation>C</translation>
+        <translation type="vanished">C</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="133"/>
         <source>G</source>
-        <translation>G</translation>
+        <translation type="vanished">G</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="172"/>
         <source>T</source>
-        <translation>T</translation>
+        <translation type="vanished">T</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="199"/>
         <source>GC Skew</source>
-        <translation>GC Skew</translation>
+        <translation type="vanished">GC Skew</translation>
     </message>
 </context>
 <context>
@@ -174,37 +163,65 @@
     </message>
     <message>
         <location filename="../src/DNASequenceGeneratorDialog.ui" line="212"/>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="288"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="492"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
         <location filename="../src/DNASequenceGeneratorDialog.ui" line="221"/>
+        <source>Base content (%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="245"/>
+        <source>A</source>
+        <translation type="unfinished">A</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="295"/>
+        <source>C</source>
+        <translation type="unfinished">C</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="342"/>
+        <source>G</source>
+        <translation type="unfinished">G</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="389"/>
+        <source>T</source>
+        <translation type="unfinished">T</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="426"/>
+        <source>GC Skew</source>
+        <translation type="unfinished">GC Skew</translation>
+    </message>
+    <message>
         <source>Manual</source>
-        <translation>Manual</translation>
+        <translation type="vanished">Manual</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="236"/>
         <source>Configure...</source>
-        <translation>Configure...</translation>
+        <translation type="vanished">Configure...</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="267"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="471"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="273"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="477"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="297"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="501"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="323"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="527"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -286,58 +303,43 @@
     </message>
 </context>
 <context>
-    <name>GTest</name>
-    <message>
-        <source>Unable to create temporary file</source>
-        <translation type="vanished">Unable to create temporary file</translation>
-    </message>
-    <message>
-        <source>Invalid translation table num: %1</source>
-        <translation type="vanished">Invalid translation table num: %1</translation>
-    </message>
-    <message>
-        <source>Invalid base : %1</source>
-        <translation type="vanished">Invalid base : %1</translation>
-    </message>
-    <message>
-        <source> context not found %1</source>
-        <translation type="vanished"> context not found %1</translation>
-    </message>
-    <message>
-        <source> container of object with type "%1" is empty</source>
-        <translation type="vanished"> container of object with type "%1" is empty</translation>
-    </message>
+    <name>ExportMca2MsaDialog</name>
     <message>
-        <source>context  not found %1</source>
-        <translation type="vanished">context  not found %1</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="20"/>
+        <source>Export Alignment without Chromatograms </source>
+        <translation>Export Alignment without Chromatograms </translation>
     </message>
     <message>
-        <source>container  of object with type "%1" is empty</source>
-        <translation type="vanished">container  of object with type "%1" is empty</translation>
-    </message>
-    <message>
-        <source>context not  found %1</source>
-        <translation type="vanished">context not  found %1</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="34"/>
+        <source>File format</source>
+        <translation>File format</translation>
     </message>
     <message>
-        <source>container of  object with type "%1" is empty</source>
-        <translation type="vanished">container of  object with type "%1" is empty</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="52"/>
+        <source>...</source>
+        <translation>...</translation>
     </message>
     <message>
-        <source>Unexpected alignment length %1, expected %2</source>
-        <translation type="vanished">Unexpected alignment length %1, expected %2</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="61"/>
+        <source>Export to file</source>
+        <translation>Export to file</translation>
     </message>
     <message>
-        <source>Unexpected alignment size %1, expected %2</source>
-        <translation type="vanished">Unexpected alignment size %1, expected %2</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="70"/>
+        <source>Add document to project</source>
+        <translation>Add document to project</translation>
     </message>
     <message>
-        <source>Invalid name for row %1: %2, expected %3</source>
-        <translation type="vanished">Invalid name for row %1: %2, expected %3</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="80"/>
+        <source>Include reference sequence</source>
+        <translation>Include reference sequence</translation>
     </message>
+</context>
+<context>
+    <name>ExportMsa2McaDialog</name>
     <message>
-        <source>Invalid char at row %1 column %2: %3, expected %4</source>
-        <translation type="vanished">Invalid char at row %1 column %2: %3, expected %4</translation>
+        <source>...</source>
+        <translation type="obsolete">...</translation>
     </message>
 </context>
 <context>
@@ -544,7 +546,7 @@
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="484"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="541"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="538"/>
         <source>Illegal parameter: input alignment is not empty!</source>
         <translation>Illegal parameter: input alignment is not empty!</translation>
     </message>
@@ -564,17 +566,17 @@
         <translation>Can not find qualifier to set as a name for BLAST sequence</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="588"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="584"/>
         <source>Illegal parameter: Input alignment is not empty!</source>
         <translation>Illegal parameter: Input alignment is not empty!</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="663"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="659"/>
         <source>Create alignment</source>
         <translation>Create alignment</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="664"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="660"/>
         <source>Save alignment to file</source>
         <translation>Save alignment to file</translation>
     </message>
@@ -601,35 +603,35 @@
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="486"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="543"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="540"/>
         <source>At least 2 annotations are required</source>
         <translation>At least 2 annotations are required</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="558"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="555"/>
         <source>Different sequence alphabets</source>
         <translation>Different sequence alphabets</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="616"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="612"/>
         <source>At least 2 sequences required</source>
         <translation>At least 2 sequences required</translation>
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="500"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="551"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="548"/>
         <source>No sequence object found</source>
         <translation>No sequence object found</translation>
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="510"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="572"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="630"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="569"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="626"/>
         <source>Alignment is too large</source>
         <translation>Alignment is too large</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="610"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="606"/>
         <source>Can't derive alignment alphabet</source>
         <translation>Can't derive alignment alphabet</translation>
     </message>
@@ -641,40 +643,62 @@
         <source>Document is already added to the project %1</source>
         <translation>Document is already added to the project %1</translation>
     </message>
+    <message>
+        <location filename="../src/ExportTasks.cpp" line="80"/>
+        <source>Can't create load task</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::BaseContentDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="171"/>
         <source>Save</source>
-        <translation>Save</translation>
+        <translation type="vanished">Save</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="obsolete">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Base content</source>
-        <translation>Base content</translation>
+        <translation type="vanished">Base content</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
         <source>Incorrect GC Skew value</source>
-        <translation>Incorrect GC Skew value</translation>
+        <translation type="vanished">Incorrect GC Skew value</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Total percentage has to be 100 %</source>
-        <translation>Total percentage has to be 100 %</translation>
+        <translation type="vanished">Total percentage has to be 100 %</translation>
     </message>
 </context>
 <context>
     <name>U2::CSVColumnConfigurationDialog</name>
     <message>
-        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="97"/>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="38"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="39"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="96"/>
         <source>Invalid qualifier name!</source>
         <translation>Invalid qualifier name!</translation>
     </message>
 </context>
 <context>
+    <name>U2::ConvertMca2MsaTask</name>
+    <message>
+        <location filename="../src/tasks/ConvertMca2MsaTask.cpp" line="31"/>
+        <source>Convert MCA to MSA task</source>
+        <translation>Convert MCA to MSA task</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateExportItemsFromSeqRegionsTask</name>
     <message>
         <location filename="../src/ExportSelectedSeqRegionsTask.cpp" line="35"/>
@@ -696,17 +720,17 @@
 <context>
     <name>U2::DNAExportPlugin</name>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="48"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="49"/>
         <source>DNA export</source>
         <translation>DNA export</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="48"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="49"/>
         <source>Export and import support for DNA & protein sequences</source>
         <translation>Export and import support for DNA & protein sequences</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="51"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="52"/>
         <source>Random sequence generator...</source>
         <translation>Random sequence generator...</translation>
     </message>
@@ -714,12 +738,12 @@
 <context>
     <name>U2::DNAExportService</name>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="85"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="86"/>
         <source>DNA export service</source>
         <translation>DNA export service</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="85"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="86"/>
         <source>Export and import support for DNA & protein sequences</source>
         <translation>Export and import support for DNA & protein sequences</translation>
     </message>
@@ -727,47 +751,63 @@
 <context>
     <name>U2::DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="61"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="70"/>
         <source>Generate</source>
         <translation>Generate</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="62"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="71"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="96"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="119"/>
         <source>Save sequences</source>
         <translation>Save sequences</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="111"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="134"/>
         <source>Open file</source>
         <translation>Open file</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="154"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="159"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="164"/>
         <source>DNA Sequence Generator</source>
         <translation>DNA Sequence Generator</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="154"/>
         <source>Windows size bigger than sequence length</source>
         <translation>Windows size bigger than sequence length</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="159"/>
         <source>Reference url is not specified.</source>
         <translation>Reference url is not specified.</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="164"/>
         <source>Output file is no specified.</source>
         <translation>Output file is no specified.</translation>
     </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="177"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="202"/>
+        <source>Base content</source>
+        <translation type="unfinished">Base content</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="177"/>
+        <source>Total percentage must be 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="202"/>
+        <source>Incorrect GC Skew value</source>
+        <translation type="unfinished">Incorrect GC Skew value</translation>
+    </message>
 </context>
 <context>
     <name>U2::DNASequenceGeneratorTask</name>
@@ -795,12 +835,12 @@
 <context>
     <name>U2::EvaluateBaseContentTask</name>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="379"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="378"/>
         <source>Evaluate base content task</source>
         <translation>Evaluate base content task</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="392"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="391"/>
         <source>Base content can be evaluated for sequence or sequence alignment</source>
         <translation>Base content can be evaluated for sequence or sequence alignment</translation>
     </message>
@@ -808,7 +848,7 @@
 <context>
     <name>U2::ExportAlignmentTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="95"/>
+        <location filename="../src/ExportTasks.cpp" line="96"/>
         <source>Export alignment to '%1'</source>
         <translation>Export alignment to '%1'</translation>
     </message>
@@ -883,7 +923,7 @@
 <context>
     <name>U2::ExportDNAChromatogramTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="209"/>
+        <location filename="../src/ExportTasks.cpp" line="210"/>
         <source>Export chromatogram to SCF</source>
         <translation>Export chromatogram to SCF</translation>
     </message>
@@ -959,17 +999,17 @@
 <context>
     <name>U2::ExportMSA2MSATask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="154"/>
+        <location filename="../src/ExportTasks.cpp" line="155"/>
         <source>Export alignment to alignment: %1</source>
         <translation>Export alignment to alignment: %1</translation>
     </message>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="158"/>
+        <location filename="../src/ExportTasks.cpp" line="159"/>
         <source>Nothing to export: multiple alignment is empty</source>
         <translation>Nothing to export: multiple alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="182"/>
+        <location filename="../src/ExportTasks.cpp" line="183"/>
         <source>Out of memory</source>
         <translation>Out of memory</translation>
     </message>
@@ -1017,17 +1057,17 @@
         <translation>Trim</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="43"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="44"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="54"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="56"/>
         <source>File name is empty!</source>
         <translation>File name is empty!</translation>
     </message>
@@ -1035,117 +1075,154 @@
 <context>
     <name>U2::ExportMSA2SequencesTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="120"/>
+        <location filename="../src/ExportTasks.cpp" line="121"/>
         <source>Export alignment to sequence: %1</source>
         <translation>Export alignment to sequence: %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::ExportMca2MsaDialog</name>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="42"/>
+        <source>Export</source>
+        <translation>Export</translation>
+    </message>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="43"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="72"/>
+        <source>Export Alignment</source>
+        <translation>Export Alignment</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExportMca2MsaTask</name>
+    <message>
+        <location filename="../src/tasks/ExportMca2MsaTask.cpp" line="37"/>
+        <source>Export Sanger reads task</source>
+        <translation type="unfinished">Export Sanger reads task</translation>
+    </message>
+</context>
+<context>
     <name>U2::ExportProjectViewItemsContoller</name>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="81"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="84"/>
         <source>Export sequences...</source>
         <translation>Export sequences...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="85"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="88"/>
         <source>Export corresponding sequence...</source>
         <translation>Export corresponding sequence...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="89"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="92"/>
         <source>Export sequences as alignment...</source>
         <translation>Export sequences as alignment...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="93"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="96"/>
         <source>Export alignment to sequence format...</source>
         <translation>Export alignment to sequence format...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="97"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="100"/>
+        <source>Export alignment without chromatograms...</source>
+        <translation type="unfinished">Export alignment without chromatograms...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExportProjectViewItems.cpp" line="103"/>
         <source>Export nucleic alignment to amino translation...</source>
         <translation>Export nucleic alignment to amino translation...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="101"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="107"/>
         <source>Import annotations from CSV file...</source>
         <translation>Import annotations from CSV file...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="105"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="111"/>
         <source>Export chromatogram to SCF...</source>
         <translation>Export chromatogram to SCF...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="109"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="115"/>
         <source>Export annotations...</source>
         <translation>Export annotations...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="113"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="119"/>
         <source>Export sequence quality...</source>
         <translation>Export sequence quality...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="116"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="122"/>
         <source>Export object...</source>
         <translation>Export object...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="148"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="159"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="172"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="181"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="191"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="207"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="154"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="165"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="178"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="186"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="195"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="205"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="222"/>
         <source>Export/Import</source>
         <translation>Export/Import</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="298"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="313"/>
         <source>There are no sequence objects selected.</source>
         <translation>There are no sequence objects selected.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="314"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="329"/>
         <source>There is no annotation table selected.</source>
         <translation>There is no annotation table selected.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="327"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="342"/>
         <source>There is no associated sequence found.</source>
         <translation>There is no associated sequence found.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="374"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="554"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="389"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="587"/>
         <source>No sequence objects selected!</source>
         <translation>No sequence objects selected!</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="401"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="416"/>
         <source>Not enough memory</source>
         <translation>Not enough memory</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="423"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="448"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="438"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="482"/>
         <source>Select one alignment object to export</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="495"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="466"/>
+        <source>Select one chromatogram alignment object to export</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ExportProjectViewItems.cpp" line="529"/>
         <source>Select one chromatogram object to export</source>
         <translation>Select one chromatogram object to export</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="531"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="565"/>
         <source>Select one annotation object to export</source>
         <translation>Select one annotation object to export</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="559"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="592"/>
         <source>Set output quality file</source>
         <translation>Set output quality file</translation>
     </message>
@@ -1247,117 +1324,117 @@
 <context>
     <name>U2::ExportSequencesDialog</name>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="20"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="32"/>
         <source>Export Selected Sequences</source>
         <translation>Export Selected Sequences</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="48"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="50"/>
         <source>Export to file</source>
         <translation>Export to file</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="58"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="65"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="67"/>
         <source>File format to use</source>
         <translation>File format to use</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="31"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="43"/>
         <source>Export with annotations</source>
         <translation>Export with annotations</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="38"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
         <source>Add document to the project</source>
         <translation>Add document to the project</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="75"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="77"/>
         <source>Use custom sequence name</source>
         <translation>Use custom sequence name</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="103"/>
         <source>Convertion options</source>
         <translation>Convertion options</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="97"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="109"/>
         <source>Save direct strand</source>
         <translation>Save direct strand</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="107"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="119"/>
         <source>Save complement strand</source>
         <translation>Save complement strand</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="114"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="126"/>
         <source>Save both strands</source>
         <translation>Save both strands</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="121"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="133"/>
         <source>Translate to amino alphabet</source>
         <translation>Save both strands</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="131"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="143"/>
         <source>Save all amino frames</source>
         <translation>Save all amino frames</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="161"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="186"/>
         <source>Back translation options</source>
         <translation>Back translation options</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="167"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
         <source>Translate back to nucleic alphabet</source>
         <translation>Translate back to nucleic alphabet</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="179"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="204"/>
         <source>Most frequently used codons</source>
         <translation>Most frequently used codons</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="206"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="231"/>
         <source>Organism:</source>
         <translation>Organism:</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="241"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="279"/>
         <source>Save as separate sequences</source>
         <translation>Save as separate sequences</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="217"/>
         <source>Frequency distribution</source>
         <translation>Frequency distribution</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="151"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="163"/>
         <source>Use custom translation table</source>
         <translation>Use custom translation table</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="228"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="266"/>
         <source>Merge options</source>
         <translation>Merge options</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="253"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="291"/>
         <source>Add gap symbols between sequences</source>
         <translation>Add gap symbols between sequences</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="234"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="272"/>
         <source>Merge sequences</source>
         <translation>Merge sequences</translation>
     </message>
@@ -1393,78 +1470,86 @@
     </message>
 </context>
 <context>
+    <name>U2::ExportUtils</name>
+    <message>
+        <location filename="../src/ExportUtils.cpp" line="97"/>
+        <source>A problem occurred during export MCA to MSA. The MCA is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::GTest</name>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="115"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="116"/>
         <source>Unable to create temporary file</source>
-        <translation type="unfinished">Unable to create temporary file</translation>
+        <translation>Unable to create temporary file</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="134"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="135"/>
         <source>Invalid translation table num: %1</source>
-        <translation type="unfinished">Invalid translation table num: %1</translation>
+        <translation>Invalid translation table num: %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="150"/>
-        <location filename="../src/DNAExportPluginTests.cpp" line="156"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="151"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="157"/>
         <source>Invalid base : %1</source>
-        <translation type="unfinished">Invalid base : %1</translation>
+        <translation>Invalid base : %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="169"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="170"/>
         <source> context not found %1</source>
-        <translation type="unfinished"> context not found %1</translation>
+        <translation> context not found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="175"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="176"/>
         <source> container of object with type "%1" is empty</source>
-        <translation type="unfinished"> container of object with type "%1" is empty</translation>
+        <translation> container of object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="206"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="211"/>
         <source>context  not found %1</source>
-        <translation type="unfinished">context  not found %1</translation>
+        <translation>context  not found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="212"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="217"/>
         <source>container  of object with type "%1" is empty</source>
-        <translation type="unfinished">container  of object with type "%1" is empty</translation>
+        <translation>container  of object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="229"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="234"/>
         <source>context not  found %1</source>
-        <translation type="unfinished">context not  found %1</translation>
+        <translation>context not  found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="235"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="240"/>
         <source>container of  object with type "%1" is empty</source>
-        <translation type="unfinished">container of  object with type "%1" is empty</translation>
+        <translation>container of  object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="242"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="247"/>
         <source>Unexpected alignment length %1, expected %2</source>
-        <translation type="unfinished">Unexpected alignment length %1, expected %2</translation>
+        <translation>Unexpected alignment length %1, expected %2</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="247"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="252"/>
         <source>Unexpected alignment size %1, expected %2</source>
-        <translation type="unfinished">Unexpected alignment size %1, expected %2</translation>
+        <translation>Unexpected alignment size %1, expected %2</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="256"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="261"/>
         <source>Invalid name for row %1: %2, expected %3</source>
-        <translation type="unfinished">Invalid name for row %1: %2, expected %3</translation>
+        <translation>Invalid name for row %1: %2, expected %3</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="261"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="266"/>
         <source>Invalid char at row %1 column %2: %3, expected %4</source>
-        <translation type="unfinished">Invalid char at row %1 column %2: %3, expected %4</translation>
+        <translation>Invalid char at row %1 column %2: %3, expected %4</translation>
     </message>
 </context>
 <context>
     <name>U2::GenerateDNASequenceTask</name>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="399"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="398"/>
         <source>Generate DNA sequence task</source>
         <translation>Generate DNA sequence task</translation>
     </message>
@@ -1472,14 +1557,24 @@
 <context>
     <name>U2::GetSequenceByIdDialog</name>
     <message>
-        <location filename="../src/GetSequenceByIdDialog.cpp" line="55"/>
-        <source>Select directory to save</source>
-        <translation>Select directory to save</translation>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="40"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/GetSequenceByIdDialog.cpp" line="70"/>
-        <source>Directory doesn't exist. Do you want to create it?</source>
-        <translation>Directory doesn't exist. Do you want to create it?</translation>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="41"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="53"/>
+        <source>Select folder to save</source>
+        <translation>Select folder to save</translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="68"/>
+        <source>Folder doesn't exist. Do you want to create it?</source>
+        <translation>Folder doesn't exist. Do you want to create it?</translation>
     </message>
 </context>
 <context>
@@ -1873,17 +1968,17 @@ var %2; //parsed line number</translation>
 <context>
     <name>U2::LocalWorkflow::ImportPhredQualityPrompter</name>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="119"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="120"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="121"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="122"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="124"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="125"/>
         <source>Import PHRED quality scores in file %1  to the sequences %2 and send the sequences to the output.</source>
         <translation>Import PHRED quality scores in file %1  to the sequences %2 and send the sequences to the output.</translation>
     </message>
@@ -1891,69 +1986,69 @@ var %2; //parsed line number</translation>
 <context>
     <name>U2::LocalWorkflow::ImportPhredQualityWorker</name>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="56"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="57"/>
         <source>DNA sequences</source>
         <translation>DNA sequences</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="57"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="58"/>
         <source>The PHRED scores will be imported to these sequences</source>
         <translation>The PHRED scores will be imported to these sequences</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="58"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="59"/>
         <source>DNA sequences with imported qualities</source>
         <translation>DNA sequences with imported qualities</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="59"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="60"/>
         <source>These sequences have quality scores.</source>
         <translation>These sequences have quality scores.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="68"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="69"/>
         <source>PHRED input</source>
         <translation>PHRED input</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="69"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="70"/>
         <source>Path to file with PHRED quality scores.</source>
         <translation>Path to file with PHRED quality scores.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="70"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="71"/>
         <source>Quality type</source>
         <translation>Quality type</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="71"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="72"/>
         <source>Choose method to encode quality scores.</source>
         <translation>Choose method to encode quality scores.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="72"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="73"/>
         <source>File format</source>
         <translation>File format</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="73"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="74"/>
         <source>Quality values can be in specialized FASTA-like PHRED qual format or encoded similar as in FASTQ files.</source>
         <translation>Quality values can be in specialized FASTA-like PHRED qual format or encoded similar as in FASTQ files.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="79"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="80"/>
         <source>Import PHRED Qualities</source>
         <translation>Import PHRED Qualities</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="80"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="81"/>
         <source>Add corresponding PHRED quality scores to the sequences.
 You can use this worker to convert .fasta and .qual pair to fastq format.</source>
         <translation>Add corresponding PHRED quality scores to the sequences.
 You can use this worker to convert .fasta and .qual pair to fastq format.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="183"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="184"/>
         <source>Import of qualities is finished.</source>
         <translation>Import of qualities is finished.</translation>
     </message>
@@ -1961,17 +2056,25 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</trans
 <context>
     <name>U2::MSAExportContext</name>
     <message>
-        <location filename="../src/ExportAlignmentViewItems.cpp" line="81"/>
+        <location filename="../src/ExportAlignmentViewItems.cpp" line="83"/>
         <source>Amino translation...</source>
         <translation>Amino translation...</translation>
     </message>
     <message>
-        <location filename="../src/ExportAlignmentViewItems.cpp" line="110"/>
+        <location filename="../src/ExportAlignmentViewItems.cpp" line="112"/>
         <source>Export Amino Translation</source>
         <translation>Export Amino Translation</translation>
     </message>
 </context>
 <context>
+    <name>U2::McaEditorContext</name>
+    <message>
+        <location filename="../src/McaEditorContext.cpp" line="55"/>
+        <source>Export alignment without chromatograms...</source>
+        <translation type="unfinished">Export alignment without chromatograms...</translation>
+    </message>
+</context>
+<context>
     <name>U2::ReadCSVAsAnnotationsTask</name>
     <message>
         <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="193"/>
@@ -2062,7 +2165,11 @@ NCBI Genbank by their GI identifier</translation>
     <message>
         <location filename="../src/GetSequenceByIdDialog.ui" line="48"/>
         <source>Save to directory:</source>
-        <translation>Save to directory:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save to folder:</source>
+        <translation type="vanished">Save to folder:</translation>
     </message>
     <message>
         <location filename="../src/GetSequenceByIdDialog.ui" line="58"/>
diff --git a/src/plugins/dna_export/transl/russian.ts b/src/plugins/dna_export/transl/russian.ts
index e14b229..ef0f35a 100644
--- a/src/plugins/dna_export/transl/russian.ts
+++ b/src/plugins/dna_export/transl/russian.ts
@@ -4,51 +4,40 @@
 <context>
     <name>BaseContentDialog</name>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="20"/>
         <source>Set Base Content</source>
-        <translation>Задать состав последовательности</translation>
+        <translation type="vanished">Задать состав последовательности</translation>
     </message>
     <message>
         <source>Base conetnt</source>
         <translation type="vanished">Состав</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="26"/>
         <source>Base content</source>
-        <translation>Основной состав</translation>
+        <translation type="vanished">Основной состав</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="55"/>
         <source>A</source>
-        <translation>A</translation>
+        <translation type="vanished">A</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="68"/>
-        <location filename="../src/BaseContentDialog.ui" line="107"/>
-        <location filename="../src/BaseContentDialog.ui" line="146"/>
-        <location filename="../src/BaseContentDialog.ui" line="185"/>
         <source> %</source>
-        <translation> %</translation>
+        <translation type="vanished"> %</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="94"/>
         <source>C</source>
-        <translation>C</translation>
+        <translation type="vanished">C</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="133"/>
         <source>G</source>
-        <translation>G</translation>
+        <translation type="vanished">G</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="172"/>
         <source>T</source>
-        <translation>T</translation>
+        <translation type="vanished">T</translation>
     </message>
     <message>
-        <location filename="../src/BaseContentDialog.ui" line="199"/>
         <source>GC Skew</source>
-        <translation>GC смещение</translation>
+        <translation type="vanished">GC смещение</translation>
     </message>
 </context>
 <context>
@@ -174,37 +163,65 @@
     </message>
     <message>
         <location filename="../src/DNASequenceGeneratorDialog.ui" line="212"/>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="288"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="492"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
         <location filename="../src/DNASequenceGeneratorDialog.ui" line="221"/>
+        <source>Base content (%)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="245"/>
+        <source>A</source>
+        <translation type="unfinished">A</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="295"/>
+        <source>C</source>
+        <translation type="unfinished">C</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="342"/>
+        <source>G</source>
+        <translation type="unfinished">G</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="389"/>
+        <source>T</source>
+        <translation type="unfinished">T</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="426"/>
+        <source>GC Skew</source>
+        <translation type="unfinished">GC смещение</translation>
+    </message>
+    <message>
         <source>Manual</source>
-        <translation>Вручную</translation>
+        <translation type="vanished">Вручную</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="236"/>
         <source>Configure...</source>
-        <translation>Настроить...</translation>
+        <translation type="vanished">Настроить...</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="267"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="471"/>
         <source>Output</source>
         <translation>Результат</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="273"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="477"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="297"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="501"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.ui" line="323"/>
+        <location filename="../src/DNASequenceGeneratorDialog.ui" line="527"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -229,7 +246,7 @@
     <message>
         <location filename="../src/ExportBlastResultDialog.ui" line="49"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
         <location filename="../src/ExportBlastResultDialog.ui" line="25"/>
@@ -267,7 +284,7 @@
     <message>
         <location filename="../src/ExportChromatogramDialog.ui" line="42"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
         <location filename="../src/ExportChromatogramDialog.ui" line="56"/>
@@ -286,58 +303,36 @@
     </message>
 </context>
 <context>
-    <name>GTest</name>
-    <message>
-        <source>Unable to create temporary file</source>
-        <translation type="vanished">Unable to create temporary file</translation>
-    </message>
-    <message>
-        <source>Invalid translation table num: %1</source>
-        <translation type="vanished">Invalid translation table num: %1</translation>
-    </message>
-    <message>
-        <source>Invalid base : %1</source>
-        <translation type="vanished">Invalid base : %1</translation>
-    </message>
+    <name>ExportMca2MsaDialog</name>
     <message>
-        <source> context not found %1</source>
-        <translation type="vanished"> context not found %1</translation>
-    </message>
-    <message>
-        <source> container of object with type "%1" is empty</source>
-        <translation type="vanished"> container of object with type "%1" is empty</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="20"/>
+        <source>Export Alignment without Chromatograms </source>
+        <translation>Экспорт выравнивания без хроматограмм </translation>
     </message>
     <message>
-        <source>context  not found %1</source>
-        <translation type="vanished">context  not found %1</translation>
-    </message>
-    <message>
-        <source>container  of object with type "%1" is empty</source>
-        <translation type="vanished">container  of object with type "%1" is empty</translation>
-    </message>
-    <message>
-        <source>context not  found %1</source>
-        <translation type="vanished">context not  found %1</translation>
-    </message>
-    <message>
-        <source>container of  object with type "%1" is empty</source>
-        <translation type="vanished">container of  object with type "%1" is empty</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="34"/>
+        <source>File format</source>
+        <translation>Формат файла</translation>
     </message>
     <message>
-        <source>Unexpected alignment length %1, expected %2</source>
-        <translation type="vanished">Unexpected alignment length %1, expected %2</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="52"/>
+        <source>...</source>
+        <translation>...</translation>
     </message>
     <message>
-        <source>Unexpected alignment size %1, expected %2</source>
-        <translation type="vanished">Unexpected alignment size %1, expected %2</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="61"/>
+        <source>Export to file</source>
+        <translation>Записать в файл</translation>
     </message>
     <message>
-        <source>Invalid name for row %1: %2, expected %3</source>
-        <translation type="vanished">Invalid name for row %1: %2, expected %3</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="70"/>
+        <source>Add document to project</source>
+        <translation>Добавить в проект</translation>
     </message>
     <message>
-        <source>Invalid char at row %1 column %2: %3, expected %4</source>
-        <translation type="vanished">Invalid char at row %1 column %2: %3, expected %4</translation>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.ui" line="80"/>
+        <source>Include reference sequence</source>
+        <translation>Добавить референсную последовательность в файл</translation>
     </message>
 </context>
 <context>
@@ -554,7 +549,7 @@
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="484"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="541"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="538"/>
         <source>Illegal parameter: input alignment is not empty!</source>
         <translation>Некорректный параметр: входное выравнивание не пусто!</translation>
     </message>
@@ -574,17 +569,17 @@
         <translation>Невозможно найти квалификатор, чтобы установить в качестве имени для BLAST последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="588"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="584"/>
         <source>Illegal parameter: Input alignment is not empty!</source>
         <translation>Некорректный параметр: входное выравнивание не пусто!</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="663"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="659"/>
         <source>Create alignment</source>
         <translation>Создать выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="664"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="660"/>
         <source>Save alignment to file</source>
         <translation>Сохранить выравнивание в файл</translation>
     </message>
@@ -601,35 +596,35 @@
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="486"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="543"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="540"/>
         <source>At least 2 annotations are required</source>
         <translation>Нужно выбрать хотя бы 2 аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="558"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="555"/>
         <source>Different sequence alphabets</source>
         <translation>Несопоставимые алфавиты</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="616"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="612"/>
         <source>At least 2 sequences required</source>
         <translation>Необходимо как минимум 2 последовательности</translation>
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="500"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="551"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="548"/>
         <source>No sequence object found</source>
         <translation>Последовательность недоступна</translation>
     </message>
     <message>
         <location filename="../src/ExportSequenceViewItems.cpp" line="510"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="572"/>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="630"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="569"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="626"/>
         <source>Alignment is too large</source>
         <translation>Слишком большой размер выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequenceViewItems.cpp" line="610"/>
+        <location filename="../src/ExportSequenceViewItems.cpp" line="606"/>
         <source>Can't derive alignment alphabet</source>
         <translation>Невозможно определить алфавит выравнивания</translation>
     </message>
@@ -641,40 +636,58 @@
         <source>Document is already added to the project %1</source>
         <translation>Документ уже добавлен в проект %1</translation>
     </message>
+    <message>
+        <location filename="../src/ExportTasks.cpp" line="80"/>
+        <source>Can't create load task</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::BaseContentDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="171"/>
         <source>Save</source>
-        <translation>Сохранить</translation>
+        <translation type="vanished">Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Base content</source>
-        <translation>Основной состав</translation>
+        <translation type="vanished">Основной состав</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="254"/>
         <source>Incorrect GC Skew value</source>
-        <translation>Некорректное значение GC смещения</translation>
+        <translation type="vanished">Некорректное значение GC смещения</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="277"/>
         <source>Total percentage has to be 100 %</source>
-        <translation>Сумма должна составлять 100 %</translation>
+        <translation type="vanished">Сумма должна составлять 100 %</translation>
     </message>
 </context>
 <context>
     <name>U2::CSVColumnConfigurationDialog</name>
     <message>
-        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="97"/>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="38"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="39"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/CSVColumnConfigurationDialog.cpp" line="96"/>
         <source>Invalid qualifier name!</source>
         <translation>Неправильное имя квалификатора!</translation>
     </message>
 </context>
 <context>
+    <name>U2::ConvertMca2MsaTask</name>
+    <message>
+        <location filename="../src/tasks/ConvertMca2MsaTask.cpp" line="31"/>
+        <source>Convert MCA to MSA task</source>
+        <translation>Convert MCA to MSA task</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateExportItemsFromSeqRegionsTask</name>
     <message>
         <location filename="../src/ExportSelectedSeqRegionsTask.cpp" line="35"/>
@@ -696,17 +709,17 @@
 <context>
     <name>U2::DNAExportPlugin</name>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="48"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="49"/>
         <source>DNA export</source>
         <translation>Экспорт ДНК</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="48"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="49"/>
         <source>Export and import support for DNA & protein sequences</source>
         <translation>Экспорт и импорт поддерживается для белков и ДНК последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="51"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="52"/>
         <source>Random sequence generator...</source>
         <translation>Генерация случайных последовательностей...</translation>
     </message>
@@ -714,12 +727,12 @@
 <context>
     <name>U2::DNAExportService</name>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="85"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="86"/>
         <source>DNA export service</source>
         <translation>Экспорт ДНК</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPlugin.cpp" line="85"/>
+        <location filename="../src/DNAExportPlugin.cpp" line="86"/>
         <source>Export and import support for DNA & protein sequences</source>
         <translation>Экспорт и импорт поддерживается для белков и ДНК последовательностей</translation>
     </message>
@@ -727,47 +740,63 @@
 <context>
     <name>U2::DNASequenceGeneratorDialog</name>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="61"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="70"/>
         <source>Generate</source>
         <translation>Сгенерировать</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="62"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="71"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="96"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="119"/>
         <source>Save sequences</source>
         <translation>Сохранить последовательности</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="111"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="134"/>
         <source>Open file</source>
         <translation>Открыть файл</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="154"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="159"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="164"/>
         <source>DNA Sequence Generator</source>
         <translation>Генератор ДНК последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="138"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="154"/>
         <source>Windows size bigger than sequence length</source>
         <translation>Размер окна больше чем длина последовательности</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="147"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="159"/>
         <source>Reference url is not specified.</source>
         <translation>Путь до референса не указан.</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="152"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="164"/>
         <source>Output file is no specified.</source>
         <translation>Не указан выходной файл.</translation>
     </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="177"/>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="202"/>
+        <source>Base content</source>
+        <translation type="unfinished">Основной состав</translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="177"/>
+        <source>Total percentage must be 100%</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNASequenceGeneratorDialog.cpp" line="202"/>
+        <source>Incorrect GC Skew value</source>
+        <translation type="unfinished">Некорректное значение GC смещения</translation>
+    </message>
 </context>
 <context>
     <name>U2::DNASequenceGeneratorTask</name>
@@ -795,12 +824,12 @@
 <context>
     <name>U2::EvaluateBaseContentTask</name>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="379"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="378"/>
         <source>Evaluate base content task</source>
         <translation>Evaluate base content task</translation>
     </message>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="392"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="391"/>
         <source>Base content can be evaluated for sequence or sequence alignment</source>
         <translation>Base content can be evaluated for sequence or sequence alignment</translation>
     </message>
@@ -808,7 +837,7 @@
 <context>
     <name>U2::ExportAlignmentTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="95"/>
+        <location filename="../src/ExportTasks.cpp" line="96"/>
         <source>Export alignment to '%1'</source>
         <translation>Экспорт выравнивания в '%1'</translation>
     </message>
@@ -883,7 +912,7 @@
 <context>
     <name>U2::ExportDNAChromatogramTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="209"/>
+        <location filename="../src/ExportTasks.cpp" line="210"/>
         <source>Export chromatogram to SCF</source>
         <translation>Экспорт хроматограммы в SCF</translation>
     </message>
@@ -908,7 +937,7 @@
     <message>
         <location filename="../src/ExportMSA2MSADialog.ui" line="45"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
         <location filename="../src/ExportMSA2MSADialog.ui" line="55"/>
@@ -959,17 +988,17 @@
 <context>
     <name>U2::ExportMSA2MSATask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="154"/>
+        <location filename="../src/ExportTasks.cpp" line="155"/>
         <source>Export alignment to alignment: %1</source>
         <translation>Экспортировать выравнивание в выравнивание: %1</translation>
     </message>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="158"/>
+        <location filename="../src/ExportTasks.cpp" line="159"/>
         <source>Nothing to export: multiple alignment is empty</source>
         <translation>Nothing to export: multiple alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="182"/>
+        <location filename="../src/ExportTasks.cpp" line="183"/>
         <source>Out of memory</source>
         <translation>Ошибка выделения памяти</translation>
     </message>
@@ -994,7 +1023,7 @@
     <message>
         <location filename="../src/ExportMSA2SequencesDialog.ui" line="42"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
         <location filename="../src/ExportMSA2SequencesDialog.ui" line="54"/>
@@ -1017,17 +1046,17 @@
         <translation>Удалять</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="43"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="45"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="44"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отменить</translation>
     </message>
     <message>
-        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="54"/>
+        <location filename="../src/ExportMSA2SequencesDialog.cpp" line="56"/>
         <source>File name is empty!</source>
         <translation>Не указано имя файла!</translation>
     </message>
@@ -1035,117 +1064,154 @@
 <context>
     <name>U2::ExportMSA2SequencesTask</name>
     <message>
-        <location filename="../src/ExportTasks.cpp" line="120"/>
+        <location filename="../src/ExportTasks.cpp" line="121"/>
         <source>Export alignment to sequence: %1</source>
         <translation>Экспорт выравнивания в последовательность: %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::ExportMca2MsaDialog</name>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="42"/>
+        <source>Export</source>
+        <translation>Экспорт</translation>
+    </message>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="43"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/dialogs/ExportMca2MsaDialog.cpp" line="72"/>
+        <source>Export Alignment</source>
+        <translation>Экспорт выравнивания</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExportMca2MsaTask</name>
+    <message>
+        <location filename="../src/tasks/ExportMca2MsaTask.cpp" line="37"/>
+        <source>Export Sanger reads task</source>
+        <translation type="unfinished">Export Sanger reads task</translation>
+    </message>
+</context>
+<context>
     <name>U2::ExportProjectViewItemsContoller</name>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="81"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="84"/>
         <source>Export sequences...</source>
         <translation>Экспорт последовательностей...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="85"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="88"/>
         <source>Export corresponding sequence...</source>
         <translation>Экспорт соответствующей последовательности...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="89"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="92"/>
         <source>Export sequences as alignment...</source>
         <translation>Экспорт последовательностей в выравнивание...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="93"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="96"/>
         <source>Export alignment to sequence format...</source>
         <translation>Экспорт выранивания в формат последовательности...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="97"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="100"/>
+        <source>Export alignment without chromatograms...</source>
+        <translation>Экспорт выравнивания без хроматограмм...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExportProjectViewItems.cpp" line="103"/>
         <source>Export nucleic alignment to amino translation...</source>
         <translation>Экспорт нуклеотидной последовательности в амино трансляции...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="101"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="107"/>
         <source>Import annotations from CSV file...</source>
         <translation>Импорт аннотаций из CSV файла...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="105"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="111"/>
         <source>Export chromatogram to SCF...</source>
         <translation>Экспорт хроматограммы в SCF...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="109"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="115"/>
         <source>Export annotations...</source>
         <translation>Экспортировать аннотации...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="113"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="119"/>
         <source>Export sequence quality...</source>
         <translation>Экспорт качества последовательности...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="116"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="122"/>
         <source>Export object...</source>
         <translation>Экспорт объекта...</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="148"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="159"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="172"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="181"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="191"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="207"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="154"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="165"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="178"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="186"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="195"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="205"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="222"/>
         <source>Export/Import</source>
         <translation>Экспорт/Импорт</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="298"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="313"/>
         <source>There are no sequence objects selected.</source>
         <translation>There are no sequence objects selected.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="314"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="329"/>
         <source>There is no annotation table selected.</source>
         <translation>There is no annotation table selected.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="327"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="342"/>
         <source>There is no associated sequence found.</source>
         <translation>There is no associated sequence found.</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="374"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="554"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="389"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="587"/>
         <source>No sequence objects selected!</source>
         <translation>Выделите один или более объектов!</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="401"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="416"/>
         <source>Not enough memory</source>
         <translation>Недостаточно памяти</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="423"/>
-        <location filename="../src/ExportProjectViewItems.cpp" line="448"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="438"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="482"/>
         <source>Select one alignment object to export</source>
         <translation>Выберите один объект выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="495"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="466"/>
+        <source>Select one chromatogram alignment object to export</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ExportProjectViewItems.cpp" line="529"/>
         <source>Select one chromatogram object to export</source>
         <translation>Выберите один объект для экспорта</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="531"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="565"/>
         <source>Select one annotation object to export</source>
         <translation>Выберите один объект аннотации</translation>
     </message>
     <message>
-        <location filename="../src/ExportProjectViewItems.cpp" line="559"/>
+        <location filename="../src/ExportProjectViewItems.cpp" line="592"/>
         <source>Set output quality file</source>
         <translation>Укажите качество выходного файла</translation>
     </message>
@@ -1216,7 +1282,7 @@
     <message>
         <location filename="../src/ExportSequences2MSADialog.ui" line="42"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
         <location filename="../src/ExportSequences2MSADialog.ui" line="54"/>
@@ -1226,7 +1292,7 @@
     <message>
         <location filename="../src/ExportSequences2MSADialog.ui" line="64"/>
         <source>Use Genbank "SOURCE" tags as a name of sequences (for Genbank sequences only)</source>
-        <translation>Использовать "SOURCE" часть в качестве имени последовательностей (только для последовательностей формата Genbank)</translation>
+        <translation>Использовать "SOURCE" в качестве имени последовательностей (только для Genbank)</translation>
     </message>
     <message>
         <location filename="../src/ExportSequences2MSADialog.cpp" line="43"/>
@@ -1247,119 +1313,119 @@
 <context>
     <name>U2::ExportSequencesDialog</name>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="20"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="32"/>
         <source>Export Selected Sequences</source>
         <translation>Экспорт выбранных последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="48"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="50"/>
         <source>Export to file</source>
         <translation>Записать в файл</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="58"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="60"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="65"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="67"/>
         <source>File format to use</source>
-        <translation>Используемый формат файла</translation>
+        <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="31"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="43"/>
         <source>Export with annotations</source>
         <translation>Экспортировать с аннотациями</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="38"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
         <source>Add document to the project</source>
         <translation>Добавить документ к проекту</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="75"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="77"/>
         <source>Use custom sequence name</source>
-        <translation>Использовать собственное имя последовательности</translation>
+        <translation>Имя последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="91"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="103"/>
         <source>Convertion options</source>
         <translation>Настройки трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="97"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="109"/>
         <source>Save direct strand</source>
-        <translation>Сохранять прямую</translation>
+        <translation>Прямая</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="107"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="119"/>
         <source>Save complement strand</source>
-        <translation>Сохранять комплементарную</translation>
+        <translation>Комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="114"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="126"/>
         <source>Save both strands</source>
-        <translation>Сохранять обе</translation>
+        <translation>Обе</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="121"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="133"/>
         <source>Translate to amino alphabet</source>
         <translation>Транслировать</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="131"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="143"/>
         <source>Save all amino frames</source>
-        <translation>Сохранять все рамки трансляции</translation>
+        <translation>Сохранить все рамки трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="161"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="186"/>
         <source>Back translation options</source>
         <translation>Настройки обратной трансляции</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="167"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
         <source>Translate back to nucleic alphabet</source>
         <translation>Транслировать обратно в алфавит нуклеотидов</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="179"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="204"/>
         <source>Most frequently used codons</source>
         <translation>Наиболее часто используемые кодоны</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="206"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="231"/>
         <source>Organism:</source>
         <translation>Организм:</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="241"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="279"/>
         <source>Save as separate sequences</source>
-        <translation>Сохр. послед. раздельно</translation>
+        <translation>Отдельные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="192"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="217"/>
         <source>Frequency distribution</source>
         <translation>Частотное распределение</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="151"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="163"/>
         <source>Use custom translation table</source>
-        <translation>Использовать собственную таблицу трансляций</translation>
+        <translation>Таблица трансляций</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="228"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="266"/>
         <source>Merge options</source>
-        <translation>Настройки группировки последовательностей</translation>
+        <translation>Настройки соединения последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="253"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="291"/>
         <source>Add gap symbols between sequences</source>
-        <translation>Добавлять пробелы между последовательностями</translation>
+        <translation>Добавить пробелы между последовательностями</translation>
     </message>
     <message>
-        <location filename="../src/ExportSequencesDialog.ui" line="234"/>
+        <location filename="../src/ExportSequencesDialog.ui" line="272"/>
         <source>Merge sequences</source>
-        <translation>Объединять последовательности</translation>
+        <translation>Объединить последовательности</translation>
     </message>
     <message>
         <location filename="../src/ExportSequencesDialog.cpp" line="54"/>
@@ -1393,78 +1459,86 @@
     </message>
 </context>
 <context>
+    <name>U2::ExportUtils</name>
+    <message>
+        <location filename="../src/ExportUtils.cpp" line="97"/>
+        <source>A problem occurred during export MCA to MSA. The MCA is no more available.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::GTest</name>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="115"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="116"/>
         <source>Unable to create temporary file</source>
-        <translation type="unfinished">Unable to create temporary file</translation>
+        <translation>Unable to create temporary file</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="134"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="135"/>
         <source>Invalid translation table num: %1</source>
-        <translation type="unfinished">Invalid translation table num: %1</translation>
+        <translation>Invalid translation table num: %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="150"/>
-        <location filename="../src/DNAExportPluginTests.cpp" line="156"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="151"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="157"/>
         <source>Invalid base : %1</source>
-        <translation type="unfinished">Invalid base : %1</translation>
+        <translation>Invalid base : %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="169"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="170"/>
         <source> context not found %1</source>
-        <translation type="unfinished"> context not found %1</translation>
+        <translation> context not found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="175"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="176"/>
         <source> container of object with type "%1" is empty</source>
-        <translation type="unfinished"> container of object with type "%1" is empty</translation>
+        <translation> container of object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="206"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="211"/>
         <source>context  not found %1</source>
-        <translation type="unfinished">context  not found %1</translation>
+        <translation>context  not found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="212"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="217"/>
         <source>container  of object with type "%1" is empty</source>
-        <translation type="unfinished">container  of object with type "%1" is empty</translation>
+        <translation>container  of object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="229"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="234"/>
         <source>context not  found %1</source>
-        <translation type="unfinished">context not  found %1</translation>
+        <translation>context not  found %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="235"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="240"/>
         <source>container of  object with type "%1" is empty</source>
-        <translation type="unfinished">container of  object with type "%1" is empty</translation>
+        <translation>container of  object with type "%1" is empty</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="242"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="247"/>
         <source>Unexpected alignment length %1, expected %2</source>
-        <translation type="unfinished">Unexpected alignment length %1, expected %2</translation>
+        <translation>Unexpected alignment length %1, expected %2</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="247"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="252"/>
         <source>Unexpected alignment size %1, expected %2</source>
-        <translation type="unfinished">Unexpected alignment size %1, expected %2</translation>
+        <translation>Unexpected alignment size %1, expected %2</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="256"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="261"/>
         <source>Invalid name for row %1: %2, expected %3</source>
-        <translation type="unfinished">Invalid name for row %1: %2, expected %3</translation>
+        <translation>Invalid name for row %1: %2, expected %3</translation>
     </message>
     <message>
-        <location filename="../src/DNAExportPluginTests.cpp" line="261"/>
+        <location filename="../src/DNAExportPluginTests.cpp" line="266"/>
         <source>Invalid char at row %1 column %2: %3, expected %4</source>
-        <translation type="unfinished">Invalid char at row %1 column %2: %3, expected %4</translation>
+        <translation>Invalid char at row %1 column %2: %3, expected %4</translation>
     </message>
 </context>
 <context>
     <name>U2::GenerateDNASequenceTask</name>
     <message>
-        <location filename="../src/DNASequenceGenerator.cpp" line="399"/>
+        <location filename="../src/DNASequenceGenerator.cpp" line="398"/>
         <source>Generate DNA sequence task</source>
         <translation>Generate DNA sequence task</translation>
     </message>
@@ -1472,14 +1546,24 @@
 <context>
     <name>U2::GetSequenceByIdDialog</name>
     <message>
-        <location filename="../src/GetSequenceByIdDialog.cpp" line="55"/>
-        <source>Select directory to save</source>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="40"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="41"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="53"/>
+        <source>Select folder to save</source>
         <translation>Папка для сохранения</translation>
     </message>
     <message>
-        <location filename="../src/GetSequenceByIdDialog.cpp" line="70"/>
-        <source>Directory doesn't exist. Do you want to create it?</source>
-        <translation>Директории не существует. Создать ее?</translation>
+        <location filename="../src/GetSequenceByIdDialog.cpp" line="68"/>
+        <source>Folder doesn't exist. Do you want to create it?</source>
+        <translation>Папки не существует. Создать ее?</translation>
     </message>
 </context>
 <context>
@@ -1873,17 +1957,17 @@ var %2; //parsed line number</translation>
 <context>
     <name>U2::LocalWorkflow::ImportPhredQualityPrompter</name>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="119"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="120"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="121"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="122"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="124"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="125"/>
         <source>Import PHRED quality scores in file %1  to the sequences %2 and send the sequences to the output.</source>
         <translation>Импорт оценок качества PHRED в файл %1 для последовательностей %2 и сохранение последовательностей  выходной файл.</translation>
     </message>
@@ -1891,69 +1975,69 @@ var %2; //parsed line number</translation>
 <context>
     <name>U2::LocalWorkflow::ImportPhredQualityWorker</name>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="56"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="57"/>
         <source>DNA sequences</source>
         <translation>ДНК последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="57"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="58"/>
         <source>The PHRED scores will be imported to these sequences</source>
         <translation>PHRED оценки будут импортированы в эти последовательности</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="58"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="59"/>
         <source>DNA sequences with imported qualities</source>
         <translation>ДНК последовательности с импортированными оценками качества</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="59"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="60"/>
         <source>These sequences have quality scores.</source>
         <translation>Эти последовательности имеют оценки качества.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="68"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="69"/>
         <source>PHRED input</source>
         <translation>Входной PHRED файл</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="69"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="70"/>
         <source>Path to file with PHRED quality scores.</source>
         <translation>Путь до файла с оценками качества PHRED.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="70"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="71"/>
         <source>Quality type</source>
         <translation>Тип показателя качества</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="71"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="72"/>
         <source>Choose method to encode quality scores.</source>
         <translation>Выберите способ кодировки показателей качества.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="72"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="73"/>
         <source>File format</source>
         <translation>Формат файла</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="73"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="74"/>
         <source>Quality values can be in specialized FASTA-like PHRED qual format or encoded similar as in FASTQ files.</source>
         <translation>Показатели качества могут быть в FASTA формате типа PHRED QUAL или закодирован подобно тому, как FASTQ файлы.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="79"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="80"/>
         <source>Import PHRED Qualities</source>
         <translation>Импорт показателей качества PHRED</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="80"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="81"/>
         <source>Add corresponding PHRED quality scores to the sequences.
 You can use this worker to convert .fasta and .qual pair to fastq format.</source>
         <translation>Добавляет соответствующие показатели качества PHRED к последовательностям.
 Вы можете использовать этот воркер для конвертации .fasta и .qual в формат fastq.</translation>
     </message>
     <message>
-        <location filename="../src/ImportQualityScoresWorker.cpp" line="183"/>
+        <location filename="../src/ImportQualityScoresWorker.cpp" line="184"/>
         <source>Import of qualities is finished.</source>
         <translation>Импорт показателей качества закончен.</translation>
     </message>
@@ -1961,17 +2045,25 @@ You can use this worker to convert .fasta and .qual pair to fastq format.</sourc
 <context>
     <name>U2::MSAExportContext</name>
     <message>
-        <location filename="../src/ExportAlignmentViewItems.cpp" line="81"/>
+        <location filename="../src/ExportAlignmentViewItems.cpp" line="83"/>
         <source>Amino translation...</source>
         <translation>Экспортировать транслированное выравнивание...</translation>
     </message>
     <message>
-        <location filename="../src/ExportAlignmentViewItems.cpp" line="110"/>
+        <location filename="../src/ExportAlignmentViewItems.cpp" line="112"/>
         <source>Export Amino Translation</source>
         <translation>Экспорт амино трансляций</translation>
     </message>
 </context>
 <context>
+    <name>U2::McaEditorContext</name>
+    <message>
+        <location filename="../src/McaEditorContext.cpp" line="55"/>
+        <source>Export alignment without chromatograms...</source>
+        <translation>Экспорт выравнивания без хроматограмм...</translation>
+    </message>
+</context>
+<context>
     <name>U2::ReadCSVAsAnnotationsTask</name>
     <message>
         <location filename="../src/ImportAnnotationsFromCSVTask.cpp" line="193"/>
@@ -2060,7 +2152,11 @@ NCBI Genbank by their GI identifier
     <message>
         <location filename="../src/GetSequenceByIdDialog.ui" line="48"/>
         <source>Save to directory:</source>
-        <translation>Сохранить в:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Save to folder:</source>
+        <translation type="vanished">Сохранить в:</translation>
     </message>
     <message>
         <location filename="../src/GetSequenceByIdDialog.ui" line="58"/>
diff --git a/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp b/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
index 86122ba..a5bd73d 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,14 +32,8 @@
 #include <U2Gui/HelpButton.h>
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
-
+#include <QPushButton>
+#include <QMessageBox>
 
 namespace U2 {
 
@@ -47,7 +41,7 @@ DNAFlexDialog::DNAFlexDialog(ADVSequenceObjectContext* _ctx)
   : QDialog(_ctx->getAnnotatedDNAView()->getWidget())
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223154");
+    new HelpButton(this, buttonBox, "20875058");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -112,6 +106,9 @@ void DNAFlexDialog::accept()
     QString annotName = annotModel.data->name;
     QString annotGroup = annotModel.groupName;
 
+    if(ctx != NULL){
+        ctx->getAnnotatedDNAView()->tryAddObject(annotModel.getAnnotationObject());
+    }
 
     // Creating the task
     U2OpStatusImpl os;
diff --git a/src/plugins/dna_flexibility/src/DNAFlexDialog.h b/src/plugins/dna_flexibility/src/DNAFlexDialog.h
index a374161..f8ed7ca 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexDialog.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp b/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
index 98609fd..0ab1f4b 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraph.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraph.h b/src/plugins/dna_flexibility/src/DNAFlexGraph.h
index 975422d..292bc74 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraph.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraph.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.cpp b/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.cpp
index 25efabf..9896f7e 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.h b/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.h
index e913693..254173c 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexGraphAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexPlugin.cpp b/src/plugins/dna_flexibility/src/DNAFlexPlugin.cpp
index 2c534b8..45b32f5 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexPlugin.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexPlugin.h b/src/plugins/dna_flexibility/src/DNAFlexPlugin.h
index 61cccb5..909c582 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexPlugin.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/DNAFlexTask.cpp b/src/plugins/dna_flexibility/src/DNAFlexTask.cpp
index c7fb81f..739684b 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexTask.cpp
+++ b/src/plugins/dna_flexibility/src/DNAFlexTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -90,7 +90,7 @@ QList<SharedAnnotationData> DNAFlexTask::getAnnotationsFromResults(const QList<H
         annotData->name = annotName;
         annotData->location->regions << result.region;
 
-        annotData->qualifiers.append(U2Qualifier("area_average_threshold", QString::number(result.averageThreshold, 'f', 3)));
+        annotData->qualifiers.append(U2Qualifier("average_threshold", QString::number(result.averageThreshold, 'f', 3)));
         annotData->qualifiers.append(U2Qualifier("windows_number", QString::number(result.windowsNumber)));
         annotData->qualifiers.append(U2Qualifier("total_threshold", QString::number(result.totalThreshold, 'f', 3)));
 
diff --git a/src/plugins/dna_flexibility/src/DNAFlexTask.h b/src/plugins/dna_flexibility/src/DNAFlexTask.h
index 70aaca1..6c9efac 100644
--- a/src/plugins/dna_flexibility/src/DNAFlexTask.h
+++ b/src/plugins/dna_flexibility/src/DNAFlexTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/FindHighFlexRegions.cpp b/src/plugins/dna_flexibility/src/FindHighFlexRegions.cpp
index edd2586..f8f43b3 100644
--- a/src/plugins/dna_flexibility/src/FindHighFlexRegions.cpp
+++ b/src/plugins/dna_flexibility/src/FindHighFlexRegions.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/FindHighFlexRegions.h b/src/plugins/dna_flexibility/src/FindHighFlexRegions.h
index a6b6e6b..575e8ca 100644
--- a/src/plugins/dna_flexibility/src/FindHighFlexRegions.h
+++ b/src/plugins/dna_flexibility/src/FindHighFlexRegions.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.cpp b/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.cpp
index e2a6f4e..5d2ed57 100644
--- a/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.cpp
+++ b/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.h b/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.h
index 1fe7a14..fcb4886 100644
--- a/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.h
+++ b/src/plugins/dna_flexibility/src/FindHighFlexRegionsAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/HighFlexResult.h b/src/plugins/dna_flexibility/src/HighFlexResult.h
index 6374f29..f4be703 100644
--- a/src/plugins/dna_flexibility/src/HighFlexResult.h
+++ b/src/plugins/dna_flexibility/src/HighFlexResult.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/HighFlexSettings.cpp b/src/plugins/dna_flexibility/src/HighFlexSettings.cpp
index dd96eb9..72797c0 100644
--- a/src/plugins/dna_flexibility/src/HighFlexSettings.cpp
+++ b/src/plugins/dna_flexibility/src/HighFlexSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/src/HighFlexSettings.h b/src/plugins/dna_flexibility/src/HighFlexSettings.h
index 12203d8..98949b4 100644
--- a/src/plugins/dna_flexibility/src/HighFlexSettings.h
+++ b/src/plugins/dna_flexibility/src/HighFlexSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_flexibility/transl/english.ts b/src/plugins/dna_flexibility/transl/english.ts
index 62af70c..9af3263 100644
--- a/src/plugins/dna_flexibility/transl/english.ts
+++ b/src/plugins/dna_flexibility/transl/english.ts
@@ -75,23 +75,23 @@
 <context>
     <name>U2::DNAFlexDialog</name>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="51"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="45"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="52"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="103"/>
-        <location filename="../src/DNAFlexDialog.cpp" line="108"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="97"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="102"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="108"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="102"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
diff --git a/src/plugins/dna_flexibility/transl/russian.ts b/src/plugins/dna_flexibility/transl/russian.ts
index fe7cfe1..a645cb7 100644
--- a/src/plugins/dna_flexibility/transl/russian.ts
+++ b/src/plugins/dna_flexibility/transl/russian.ts
@@ -75,23 +75,23 @@
 <context>
     <name>U2::DNAFlexDialog</name>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="51"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="45"/>
         <source>Search</source>
         <translation>Искать</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="52"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="46"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="103"/>
-        <location filename="../src/DNAFlexDialog.cpp" line="108"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="97"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="102"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DNAFlexDialog.cpp" line="108"/>
+        <location filename="../src/DNAFlexDialog.cpp" line="102"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
diff --git a/src/plugins/dna_graphpack/src/BaseContentGraph.cpp b/src/plugins/dna_graphpack/src/BaseContentGraph.cpp
index 6443518..06a73f7 100644
--- a/src/plugins/dna_graphpack/src/BaseContentGraph.cpp
+++ b/src/plugins/dna_graphpack/src/BaseContentGraph.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/BaseContentGraph.h b/src/plugins/dna_graphpack/src/BaseContentGraph.h
index c609e28..eeb472e 100644
--- a/src/plugins/dna_graphpack/src/BaseContentGraph.h
+++ b/src/plugins/dna_graphpack/src/BaseContentGraph.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/CumulativeSkew.cpp b/src/plugins/dna_graphpack/src/CumulativeSkew.cpp
index ccf741a..0261258 100644
--- a/src/plugins/dna_graphpack/src/CumulativeSkew.cpp
+++ b/src/plugins/dna_graphpack/src/CumulativeSkew.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/CumulativeSkew.h b/src/plugins/dna_graphpack/src/CumulativeSkew.h
index f007204..5bd6784 100644
--- a/src/plugins/dna_graphpack/src/CumulativeSkew.h
+++ b/src/plugins/dna_graphpack/src/CumulativeSkew.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.cpp b/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.cpp
index a04ccd5..ab449b7 100644
--- a/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.cpp
+++ b/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.h b/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.h
index 8abb341..c5466a7 100644
--- a/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.h
+++ b/src/plugins/dna_graphpack/src/DNAGraphPackPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,14 +29,9 @@
 #include <U2View/GSequenceGraphView.h>
 #include <U2View/ADVSequenceWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QToolBar>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QToolBar>
-#endif
-#include <QtCore/QPointer>
+#include <QMenu>
+#include <QToolBar>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/DeviationGraph.cpp b/src/plugins/dna_graphpack/src/DeviationGraph.cpp
index ec85e43..099c5f2 100644
--- a/src/plugins/dna_graphpack/src/DeviationGraph.cpp
+++ b/src/plugins/dna_graphpack/src/DeviationGraph.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/DeviationGraph.h b/src/plugins/dna_graphpack/src/DeviationGraph.h
index a7a1f1c..1522c21 100644
--- a/src/plugins/dna_graphpack/src/DeviationGraph.h
+++ b/src/plugins/dna_graphpack/src/DeviationGraph.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,14 +26,10 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
-#include <QtCore/QPair>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
+#include <QPair>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/EntropyAlgorithm.cpp b/src/plugins/dna_graphpack/src/EntropyAlgorithm.cpp
index c74ee95..6f99f7c 100644
--- a/src/plugins/dna_graphpack/src/EntropyAlgorithm.cpp
+++ b/src/plugins/dna_graphpack/src/EntropyAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/EntropyAlgorithm.h b/src/plugins/dna_graphpack/src/EntropyAlgorithm.h
index 46e9101..14d642a 100644
--- a/src/plugins/dna_graphpack/src/EntropyAlgorithm.h
+++ b/src/plugins/dna_graphpack/src/EntropyAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/GCFramePlot.cpp b/src/plugins/dna_graphpack/src/GCFramePlot.cpp
index 0715774..9cca49a 100644
--- a/src/plugins/dna_graphpack/src/GCFramePlot.cpp
+++ b/src/plugins/dna_graphpack/src/GCFramePlot.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/GCFramePlot.h b/src/plugins/dna_graphpack/src/GCFramePlot.h
index ce9e542..d20f18c 100644
--- a/src/plugins/dna_graphpack/src/GCFramePlot.h
+++ b/src/plugins/dna_graphpack/src/GCFramePlot.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.cpp b/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.cpp
index 42ddf39..80a9307 100644
--- a/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.cpp
+++ b/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.h b/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.h
index f7ce2b2..f3607d1 100644
--- a/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.h
+++ b/src/plugins/dna_graphpack/src/KarlinSignatureDifferenceGraph.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,13 +26,9 @@
 
 #include <U2View/GSequenceGraphView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
-#include <QtCore/QList>
-#include <QtCore/QBitArray>
+#include <QAction>
+#include <QList>
+#include <QBitArray>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_stat/dna_stat.pri b/src/plugins/dna_stat/dna_stat.pri
index 587a4d6..44d9b5c 100644
--- a/src/plugins/dna_stat/dna_stat.pri
+++ b/src/plugins/dna_stat/dna_stat.pri
@@ -7,4 +7,4 @@ PLUGIN_MODE=ui
 
 include( ../../ugene_plugin_common.pri )
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets
+QT += webkitwidgets
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
index 34c651e..eadf7e6 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
+#include <QDir>
 #include <QFile>
 #include <QMessageBox>
+#include <QPushButton>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/FileAndDirectoryUtils.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 #include <U2Gui/HelpButton.h>
+#include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/SaveDocumentController.h>
 
 #include <U2View/MSAEditor.h>
@@ -46,8 +50,9 @@ DNAStatMSAProfileDialog::DNAStatMSAProfileDialog(QWidget* p, MSAEditor* _c)
       ctx(_c),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223097");
-
+    new HelpButton(this, buttonBox, "20875001");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     initSaveController();
 }
 
@@ -64,13 +69,22 @@ void DNAStatMSAProfileDialog::sl_formatChanged(const QString &newFormat) {
 }
 
 void DNAStatMSAProfileDialog::initSaveController() {
+    MultipleSequenceAlignmentObject* msaObj = ctx->getMaObject();
+    if (msaObj == NULL) {
+        return;
+    }
+    QString domain = "plugin_dna_stat";
+    LastUsedDirHelper lod(domain, GUrlUtils::getDefaultDataPath());
+    QString fileName = GUrlUtils::fixFileName(msaObj->getGObjectName());
+
     SaveDocumentControllerConfig config;
-    config.defaultDomain = "plugin_dna_stat";
+    config.defaultDomain = domain;
     config.defaultFormatId = HTML;
+    config.defaultFileName = lod.dir + "/" + fileName + "_grid_profile" + "." + DNAStatMSAProfileDialog::HTML;
     config.fileDialogButton = fileButton;
     config.fileNameEdit = fileEdit;
     config.parentWidget = this;
-    config.saveTitle = tr("Select file to save report to..");
+    config.saveTitle = tr("Save file");
 
     SaveDocumentController::SimpleFormatsInfo formats;
     formats.addFormat(HTML, HTML.toUpper(), QStringList() << HTML);
@@ -85,14 +99,14 @@ void DNAStatMSAProfileDialog::initSaveController() {
 
 void DNAStatMSAProfileDialog::accept() {
     DNAStatMSAProfileTaskSettings s;
-    MAlignmentObject* msaObj = ctx->getMSAObject();
+    MultipleSequenceAlignmentObject* msaObj = ctx->getMaObject();
     if (msaObj == NULL) {
         return;
     }
     s.profileName = msaObj->getGObjectName();
     s.profileURL = msaObj->getDocument()->getURLString();
     s.usePercents = percentsRB->isChecked();
-    s.ma = msaObj->getMAlignment();
+    s.ma = msaObj->getMsaCopy();
     s.reportGaps = gapCB->isChecked();
     s.stripUnused = !unusedCB->isChecked();
     s.countGapsInConsensusNumbering = !skipGapPositionsCB->isChecked();
@@ -112,7 +126,7 @@ void DNAStatMSAProfileDialog::accept() {
 //////////////////////////////////////////////////////////////////////////
 // task
 DNAStatMSAProfileTask::DNAStatMSAProfileTask(const DNAStatMSAProfileTaskSettings& _s)
-: Task(tr("Generate alignment profile"), TaskFlag_None), s(_s)
+: Task(tr("Generate alignment profile"), TaskFlags(TaskFlag_ReportingIsSupported) | TaskFlag_ReportingIsEnabled), s(_s)
 {
     setVerboseLogMode(true);
 }
@@ -137,7 +151,7 @@ void DNAStatMSAProfileTask::run() {
                 return;
             }
         }
-        int maxVal = s.usePercents ? 100 : s.ma.getNumRows();
+        int maxVal = s.usePercents ? 100 : s.ma->getNumRows();
         QString colors[] = {"#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd"};
 
         try {
@@ -145,7 +159,7 @@ void DNAStatMSAProfileTask::run() {
             resultText = "<STYLE TYPE=\"text/css\"><!-- \n";
             resultText += "table.tbl   {\n border-width: 1px;\n border-style: solid;\n border-spacing: 0;\n border-collapse: collapse;\n}\n";
             resultText += "table.tbl td{\n max-width: 200px;\n min-width: 20px;\n text-align: center;\n border-width: 1px;\n ";
-            resultText += "border-style: solid;\n margin:0px;\n padding: 0px;\n}\n";
+            resultText += "border-style: solid;\n padding: 0 10px;\n}\n";
             resultText += "--></STYLE>\n";
 
             //header
@@ -165,7 +179,7 @@ void DNAStatMSAProfileTask::run() {
             for (int i = 0; i < columns.size(); i++) {
                 ColumnStat& cs = columns[i];
                 QString posStr;
-                bool nums = s.countGapsInConsensusNumbering || cs.consChar != MAlignment_GapChar;
+                bool nums = s.countGapsInConsensusNumbering || cs.consChar != U2Msa::GAP_CHAR;
                 posStr = nums ? QString::number(pos++) : QString(" ");
                 //            while(posStr.length() < maxLenLen) {posStr = (nums ? "0" : " ") + posStr;}
                 resultText += "<td width=20>" + posStr + "</td>";
@@ -182,10 +196,10 @@ void DNAStatMSAProfileTask::run() {
             }
             resultText += "</tr>\n";
             //out char freqs
-            QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
+            QByteArray aChars = s.ma->getAlphabet()->getAlphabetChars();
             for (int i = 0; i < aChars.size(); i++) {
                 char c = aChars[i];
-                if (c == MAlignment_GapChar && !s.reportGaps) {
+                if (c == U2Msa::GAP_CHAR && !s.reportGaps) {
                     continue;
                 }
                 if (s.stripUnused && unusedChars.contains(c)) {
@@ -248,10 +262,10 @@ void DNAStatMSAProfileTask::run() {
             return;
         }
         //out char freqs
-        QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
+        QByteArray aChars = s.ma->getAlphabet()->getAlphabetChars();
         for (int i = 0; i < aChars.size(); i++) {
             char c = aChars[i];
-            if (c == MAlignment_GapChar && !s.reportGaps) {
+            if (c == U2Msa::GAP_CHAR && !s.reportGaps) {
                 continue;
             }
             if (s.stripUnused && unusedChars.contains(c)) {
@@ -274,9 +288,26 @@ void DNAStatMSAProfileTask::run() {
         delete f;
     }
 }
+QString DNAStatMSAProfileTask::generateReport() const {
+    if (hasError()) {
+        return tr("Task was finished with an error: %1").arg(getError());
+    }
+    if (isCanceled()) {
+        return tr("Task was canceled.");
+    }
+    QString res;
+    res += "<br>";
+    res += tr("Grid profile for %1: <a href='%2'>%2</a>").arg(s.profileName).arg(QDir::toNativeSeparators(s.outURL)) + "<br>";
+    return res;
+}
+
+bool DNAStatMSAProfileTask::isReportingEnabled() const {
+    return !hasError() && !isCanceled() && s.outFormat != DNAStatMSAProfileOutputFormat_Show;
+}
+
 
 Task::ReportResult DNAStatMSAProfileTask::report() {
-    if (s.outFormat != DNAStatMSAProfileOutputFormat_Show || hasError() || isCanceled()) {
+    if (hasError() || isCanceled() || s.outFormat != DNAStatMSAProfileOutputFormat_Show) {
         return Task::ReportResult_Finished;
     }
     assert(!resultText.isEmpty());
@@ -289,7 +320,7 @@ Task::ReportResult DNAStatMSAProfileTask::report() {
 
 void DNAStatMSAProfileTask::computeStats() {
     //fill names
-    QByteArray aChars = s.ma.getAlphabet()->getAlphabetChars();
+    QByteArray aChars = s.ma->getAlphabet()->getAlphabetChars();
     for (int i = 0; i < aChars.size(); i++) {
         char c = aChars[i];
         verticalColumnNames.append(QChar(c));
@@ -298,16 +329,15 @@ void DNAStatMSAProfileTask::computeStats() {
     }
 
     //fill values
-    columns.resize(s.ma.getLength());
-    consenusChars.resize(s.ma.getLength());
-    for (int pos = 0; pos < s.ma.getLength(); pos++) {
+    columns.resize(s.ma->getLength());
+    consenusChars.resize(s.ma->getLength());
+    for (int pos = 0; pos < s.ma->getLength(); pos++) {
         int topCharCount = 0;
         ColumnStat& cs = columns[pos];
         cs.charFreqs.resize(aChars.size());
-        cs.consChar = MAlignment_GapChar;
-        for (int i = 0; i< s.ma.getNumRows(); i++) {
-            const MAlignmentRow& row = s.ma.getRow(i);
-            char c = row.charAt(pos);
+        cs.consChar = U2Msa::GAP_CHAR;
+        for (int i = 0; i< s.ma->getNumRows(); i++) {
+            char c = s.ma->getMsaRow(i)->charAt(pos);
             unusedChars.remove(c);
             int idx = char2index.value(c);
             int v = ++cs.charFreqs[idx];
@@ -315,14 +345,14 @@ void DNAStatMSAProfileTask::computeStats() {
                 topCharCount = v;
                 cs.consChar = c;
             } else if (v == topCharCount) {
-                cs.consChar = MAlignment_GapChar;
+                cs.consChar = U2Msa::GAP_CHAR;
             }
         }
     }
 
     if (s.usePercents) {
-        int charsInColumn = s.ma.getNumRows();
-        for (int pos = 0; pos < s.ma.getLength(); pos++) {
+        int charsInColumn = s.ma->getNumRows();
+        for (int pos = 0; pos < s.ma->getLength(); pos++) {
             ColumnStat& cs = columns[pos];
             for (int i=0; i < aChars.size(); i++) {
                 char c = aChars[i];
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
index 1722c4e..23f915c 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,11 @@
 #include <QSet>
 
 #include <U2Core/global.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
 #include <U2Core/global.h>
 #include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "ui_DNAStatMSAProfileDialog.h"
 
@@ -69,7 +69,7 @@ enum DNAStatMSAProfileOutputFormat {
 
 class DNAStatMSAProfileTaskSettings {
 public:
-    DNAStatMSAProfileTaskSettings(){
+    DNAStatMSAProfileTaskSettings() {
         outFormat = DNAStatMSAProfileOutputFormat_Show;
         usePercents = false;
         reportGaps = false;
@@ -79,7 +79,7 @@ public:
 
     QString                         profileName; // usually object name
     QString                         profileURL;  // document url
-    MAlignment                      ma;
+    MultipleSequenceAlignment       ma;
     bool                            usePercents; //report percents but not counts
     DNAStatMSAProfileOutputFormat   outFormat;
     QString                         outURL;
@@ -94,6 +94,8 @@ public:
     DNAStatMSAProfileTask(const DNAStatMSAProfileTaskSettings& s);
 
     void run();
+    QString generateReport() const;
+    virtual bool isReportingEnabled() const;
 
     ReportResult report();
 
diff --git a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui
index b7fa54e..23394f6 100644
--- a/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui
+++ b/src/plugins/dna_stat/src/DNAStatMSAProfileDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>547</width>
-    <height>327</height>
+    <height>409</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -23,7 +23,7 @@
       <item row="0" column="0">
        <widget class="QRadioButton" name="countsRB">
         <property name="text">
-         <string>Counts</string>
+         <string>Count</string>
         </property>
         <property name="checked">
          <bool>true</bool>
@@ -33,7 +33,7 @@
       <item row="1" column="0">
        <widget class="QRadioButton" name="percentsRB">
         <property name="text">
-         <string>Percents</string>
+         <string>Percentage</string>
         </property>
        </widget>
       </item>
diff --git a/src/plugins/dna_stat/src/DNAStatPlugin.cpp b/src/plugins/dna_stat/src/DNAStatPlugin.cpp
index 72ef8dd..7c08a75 100644
--- a/src/plugins/dna_stat/src/DNAStatPlugin.cpp
+++ b/src/plugins/dna_stat/src/DNAStatPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "DNAStatMSAProfileDialog.h"
 #include "DNAStatPlugin.h"
@@ -61,14 +61,14 @@ DNAStatPlugin::DNAStatPlugin() : Plugin(tr("DNA Statistics"), tr("Provides stati
 //////////////////////////////////////////////////////////////////////////
 
 DNAStatMSAEditorContext::DNAStatMSAEditorContext(QObject* p) :
-GObjectViewWindowContext(p, MSAEditorFactory::ID) {}
+GObjectViewWindowContext(p, MsaEditorFactory::ID) {}
 
 void DNAStatMSAEditorContext::initViewContext(GObjectView* v) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    if (msaed != NULL && !msaed->getMSAObject())
+    if (msaed != NULL && !msaed->getMaObject())
         return;
 
-    GObjectViewAction* profileAction = new GObjectViewAction(this, v, tr("Generate grid profile"));
+    GObjectViewAction* profileAction = new GObjectViewAction(this, v, tr("Generate grid profile..."));
     profileAction->setObjectName("Generate grid profile");
     connect(profileAction, SIGNAL(triggered()), SLOT(sl_showMSAProfileDialog()));
 
@@ -77,7 +77,7 @@ void DNAStatMSAEditorContext::initViewContext(GObjectView* v) {
 
 void DNAStatMSAEditorContext::buildMenu(GObjectView* v, QMenu* m) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    if (msaed != NULL && !msaed->getMSAObject())
+    if (msaed != NULL && !msaed->getMaObject())
         return;
 
     QList<GObjectViewAction *> actions = getViewActions(v);
@@ -98,14 +98,14 @@ void DNAStatMSAEditorContext::sl_showMSAProfileDialog() {
 //////////////////////////////////////////////////////////////////////////
 
 DistanceMatrixMSAEditorContext::DistanceMatrixMSAEditorContext(QObject* p) :
-GObjectViewWindowContext(p, MSAEditorFactory::ID) {}
+GObjectViewWindowContext(p, MsaEditorFactory::ID) {}
 
 void DistanceMatrixMSAEditorContext::initViewContext(GObjectView* v) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    if (msaed != NULL && !msaed->getMSAObject())
+    if (msaed != NULL && !msaed->getMaObject())
         return;
 
-    GObjectViewAction* profileAction = new GObjectViewAction(this, v, tr("Generate distance matrix"));
+    GObjectViewAction* profileAction = new GObjectViewAction(this, v, tr("Generate distance matrix..."));
     profileAction->setObjectName("Generate distance matrix");
     connect(profileAction, SIGNAL(triggered()), SLOT(sl_showDistanceMatrixDialog()));
     addViewAction(profileAction);
@@ -113,7 +113,7 @@ void DistanceMatrixMSAEditorContext::initViewContext(GObjectView* v) {
 
 void DistanceMatrixMSAEditorContext::buildMenu(GObjectView* v, QMenu* m) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    if (msaed != NULL && !msaed->getMSAObject())
+    if (msaed != NULL && !msaed->getMaObject())
         return;
 
     QList<GObjectViewAction *> actions = getViewActions(v);
diff --git a/src/plugins/dna_stat/src/DNAStatPlugin.h b/src/plugins/dna_stat/src/DNAStatPlugin.h
index abc6290..2e3dac1 100644
--- a/src/plugins/dna_stat/src/DNAStatPlugin.h
+++ b/src/plugins/dna_stat/src/DNAStatPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_stat/src/DNAStatProfileTask.cpp b/src/plugins/dna_stat/src/DNAStatProfileTask.cpp
index afa9e08..d4412af 100644
--- a/src/plugins/dna_stat/src/DNAStatProfileTask.cpp
+++ b/src/plugins/dna_stat/src/DNAStatProfileTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dna_stat/src/DNAStatProfileTask.h b/src/plugins/dna_stat/src/DNAStatProfileTask.h
index 7e47307..1a5dc3c 100644
--- a/src/plugins/dna_stat/src/DNAStatProfileTask.h
+++ b/src/plugins/dna_stat/src/DNAStatProfileTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DNA_STAT_PROFILE_TASK_H_
 #define _U2_DNA_STAT_PROFILE_TASK_H_
 
-#include <QtCore/QVector>
+#include <QVector>
 #include <U2Core/Task.h>
 
 namespace U2 {
diff --git a/src/plugins/dna_stat/src/DNAStatsWindow.cpp b/src/plugins/dna_stat/src/DNAStatsWindow.cpp
index bc117af..0768705 100644
--- a/src/plugins/dna_stat/src/DNAStatsWindow.cpp
+++ b/src/plugins/dna_stat/src/DNAStatsWindow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,18 +25,11 @@
 #include "DNAStatsWindow.h"
 #include "DNAStatProfileTask.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QDoubleSpinBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QDoubleSpinBox>
-#endif
-#include <QtGui/QContextMenuEvent>
+#include <QLabel>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QDoubleSpinBox>
+#include <QContextMenuEvent>
 
 namespace U2 {
 
diff --git a/src/plugins/dna_stat/src/DNAStatsWindow.h b/src/plugins/dna_stat/src/DNAStatsWindow.h
index 4d676fa..a3ee646 100644
--- a/src/plugins/dna_stat/src/DNAStatsWindow.h
+++ b/src/plugins/dna_stat/src/DNAStatsWindow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_DNA_STATS_WINDOW_H_
 #define _U2_DNA_STATS_WINDOW_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtWebKit/QWebView>
-#else
-#include <QtWebKitWidgets/QWebView>
-#endif
+#include <QWebView>
 
 #include <U2Core/global.h>
 #include <U2Gui/MainWindow.h>
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
index 00f4b15..fa056aa 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QDateTime>
+#include <QDir>
 #include <QFile>
 #include <QMessageBox>
 #include <QPushButton>
@@ -31,10 +32,13 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/FileAndDirectoryUtils.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/TextUtils.h>
 
 #include <U2Gui/HelpButton.h>
+#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/Notification.h>
 #include <U2Gui/SaveDocumentController.h>
 
 #include <U2View/MSAEditor.h>
@@ -52,18 +56,18 @@ DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEd
       ctx(_c),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223098");
+    new HelpButton(this, buttonBox, "20875002");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Generate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     QStringList algo = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmIds();
     algoCombo->addItems(algo);
 
-    MAlignmentObject* msaObj = ctx->getMSAObject();
+    MultipleSequenceAlignmentObject* msaObj = ctx->getMaObject();
     if (msaObj != NULL) {
         QVector<U2Region> unitedRows;
-        MAlignment ma = msaObj->getMAlignment();
-        ma.sortRowsBySimilarity(unitedRows);
+        MultipleSequenceAlignment ma = msaObj->getMsaCopy();
+        ma->sortRowsBySimilarity(unitedRows);
         if(unitedRows.size() < 2)
             groupStatisticsCheck->setEnabled(false);
     }
@@ -72,14 +76,23 @@ DistanceMatrixMSAProfileDialog::DistanceMatrixMSAProfileDialog(QWidget* p, MSAEd
 }
 
 void DistanceMatrixMSAProfileDialog::initSaveController() {
+    MultipleSequenceAlignmentObject* msaObj = ctx->getMaObject();
+    if (msaObj == NULL) {
+        return;
+    }
+    QString domain = "plugin_dna_stat";
+    LastUsedDirHelper lod(domain, GUrlUtils::getDefaultDataPath());
+    QString fileName = GUrlUtils::fixFileName(msaObj->getGObjectName());
+
     SaveDocumentControllerConfig config;
-    config.defaultDomain = "plugin_dna_stat";
+    config.defaultDomain = domain;
     config.defaultFormatId = HTML;
+    config.defaultFileName = lod.dir + "/" + fileName + "_distance_matrix" + "." + DistanceMatrixMSAProfileDialog::HTML;
     config.fileDialogButton = fileButton;
     config.fileNameEdit = fileEdit;
     config.parentWidget = this;
-    config.saveTitle = tr("Select file to save report to..");
-
+    config.saveTitle = tr("Save file");
+    
     SaveDocumentController::SimpleFormatsInfo formats;
     formats.addFormat(HTML, HTML.toUpper(), QStringList() << HTML);
     formats.addFormat(CSV, CSV.toUpper(), QStringList() << CSV);
@@ -93,7 +106,7 @@ void DistanceMatrixMSAProfileDialog::initSaveController() {
 
 void DistanceMatrixMSAProfileDialog::accept() {
     DistanceMatrixMSAProfileTaskSettings s;
-    MAlignmentObject* msaObj = ctx->getMSAObject();
+    MultipleSequenceAlignmentObject* msaObj = ctx->getMaObject();
     if (msaObj == NULL) {
         return;
     }
@@ -101,7 +114,7 @@ void DistanceMatrixMSAProfileDialog::accept() {
     s.profileURL = msaObj->getDocument()->getURLString();
     s.usePercents = percentsRB->isChecked();
     s.algoName = algoCombo->currentText();
-    s.ma = msaObj->getMAlignment();
+    s.ma = msaObj->getMsaCopy();
     s.excludeGaps = checkBox->isChecked();
     s.showGroupStatistic = groupStatisticsCheck->isChecked();
     s.ctx = ctx;
@@ -135,7 +148,7 @@ void DistanceMatrixMSAProfileDialog::sl_formatChanged(const QString &newFormatId
 // task
 
 DistanceMatrixMSAProfileTask::DistanceMatrixMSAProfileTask(const DistanceMatrixMSAProfileTaskSettings& _s)
-: Task(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC), s(_s)
+: Task(tr("Generate distance matrix"), TaskFlags_NR_FOSE_COSC | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled), s(_s)
 {
     setVerboseLogMode(true);
 }
@@ -181,7 +194,7 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
             resultText = "<STYLE TYPE=\"text/css\"><!-- \n";
             resultText += "table.tbl   {\n border-width: 1px;\n border-style: solid;\n border-spacing: 0;\n border-collapse: collapse;\n}\n";
             resultText += "table.tbl td{\n max-width: 400px;\n min-width: 20px;\n text-align: center;\n border-width: 1px;\n ";
-            resultText += "border-style: solid;\n margin:0px;\n padding: 0px;\n}\n";
+            resultText += "border-style: solid;\n \n padding: 0 10px;\n}\n";
             resultText += "--></STYLE>\n";
 
             //header
@@ -196,7 +209,7 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
             FileAndDirectoryUtils::dumpStringToFile(f, resultText);
             bool isSimilarity = algo->isSimilarityMeasure();
             try {
-                createDistanceTable(algo, s.ma.getRows(), f);
+                createDistanceTable(algo, s.ma->getMsaRows(), f);
             } catch (std::bad_alloc &e) {
                 Q_UNUSED(e);
                 setError(tr("There is not enough memory to show this distance matrix in UGENE. You can save it to an HTML file and open it with a web browser."));
@@ -209,18 +222,19 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
                 resultText += "<tr><td><b>" + tr("Group statistics of multiple alignment") + "</td></tr>\n";
                 resultText += "<table>\n";
                 QVector<U2Region> unitedRows;
-                s.ma.sortRowsBySimilarity(unitedRows);
-                QList<MAlignmentRow> rows;
+                s.ma->sortRowsBySimilarity(unitedRows);
+                QList<MultipleSequenceAlignmentRow> rows;
                 int i = 1;
                 srand(QDateTime::currentDateTime().toTime_t());
                 foreach(const U2Region &reg, unitedRows) {
-                    MAlignmentRow row = s.ma.getRow(reg.startPos + qrand() % reg.length);
-                    row.setName(QString("Group %1: ").arg(i) + "(" + row.getName() + ")");
-                    rows.append(s.ma.getRow(reg.startPos + qrand() % reg.length));
+                    MultipleSequenceAlignmentRow row = s.ma->getMsaRow(reg.startPos + qrand() % reg.length);
+                    row->setName(QString("Group %1: ").arg(i) + "(" + row->getName() + ")");
+                    rows.append(s.ma->getMsaRow(reg.startPos + qrand() % reg.length)->getExplicitCopy());
 
                     resultText += "<tr><td><b>" + QString("Group %1: ").arg(i) + "</b></td><td>";
-                    for (int x = reg.startPos; x < reg.endPos(); x++)
-                        resultText += s.ma.getRow(x).getName() + ", ";
+                    for (int x = reg.startPos; x < reg.endPos(); x++) {
+                        resultText += s.ma->getMsaRow(x)->getName() + ", ";
+                    }
                     resultText += "\n";
                     i++;
                     FileAndDirectoryUtils::dumpStringToFile(f, resultText);
@@ -261,20 +275,21 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
                 return res;
             }
             resultText += " ";
-            for (int i = 0; i < s.ma.getNumRows(); i++) {
-                QString name = s.ma.getRow(i).getName();
+            for (int i = 0; i < s.ma->getNumRows(); i++) {
+                QString name = s.ma->getMsaRow(i)->getName();
                 TextUtils::wrapForCSV(name);
                 resultText += "," + name;
                 FileAndDirectoryUtils::dumpStringToFile(f, resultText);
             }
             resultText += "\n";
 
-            for (int i = 0; i < s.ma.getNumRows(); i++) {
-                QString name = s.ma.getRow(i).getName();
+            for (int i = 0; i < s.ma->getNumRows(); i++) {
+                QString name = s.ma->getMsaRow(i)->getName();
                 TextUtils::wrapForCSV(name);
                 resultText += name;
-                for (int j = 0; j < s.ma.getNumRows(); j++) {
-                    int val = qRound(algo->getSimilarity(i, j) * (s.usePercents ? (100.0 / s.ma.getLength()) : 1.0));
+                for (int j = 0; j < s.ma->getNumRows(); j++) {
+                    int val = algo->getSimilarity(i, j, s.usePercents);
+
                     resultText += "," + QString::number(val) + (s.usePercents ? "%" : "");
                     FileAndDirectoryUtils::dumpStringToFile(f, resultText);
                 }
@@ -291,12 +306,12 @@ QList<Task*> DistanceMatrixMSAProfileTask::onSubTaskFinished(Task* subTask) {
     return res;
 }
 
-void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows, QFile *f)
+
+void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* algo, const QList<MultipleSequenceAlignmentRow> &rows, QFile *f)
 {
-    int maxVal = s.usePercents ? 100 : s.ma.getLength();
+    int maxVal = s.usePercents ? 100 : s.ma->getLength();
     QString colors[] = {"#ff5555", "#ff9c00", "#60ff00", "#a1d1e5", "#dddddd"};
     bool isSimilarity = algo->isSimilarityMeasure();
-    int minLen = s.ma.getLength();
 
     if(rows.size() < 2) {
         resultText += "<tr><td><b>"+tr("There is not enough groups to create distance matrix!") + "</td></tr>\n";
@@ -306,23 +321,18 @@ void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* alg
     resultText += "<table class=tbl>\n";
     resultText += "<tr><td></td>";
     for (int i=0; i < rows.size(); i++) {
-        QString name = rows.at(i).getName();
+        QString name = rows.at(i)->getName();
         resultText += "<td> " + name + "</td>";
     }
     resultText += "</tr>\n";
 
     //out char freqs
     for (int i=0; i < rows.size(); i++) {
-        QString name = rows.at(i).getName();
+        QString name = rows.at(i)->getName();
         resultText += "<tr>";
         resultText += "<td> " + name + "</td>";
         for (int j=0; j < rows.size(); j++) {
-            if(s.usePercents && s.excludeGaps){
-                int len1 = rows.at(i).getUngappedLength();
-                int len2 = rows.at(j).getUngappedLength();
-                minLen = qMin(len1, len2);
-            }
-            int val = qRound(algo->getSimilarity(i, j) * (s.usePercents ? (100.0 / minLen) : 1.0));
+            int val = algo->getSimilarity(i, j, s.usePercents);
 
             QString colorStr = "";
             if (i != j) {
@@ -346,10 +356,23 @@ void DistanceMatrixMSAProfileTask::createDistanceTable(MSADistanceAlgorithm* alg
     }
     resultText += "</table>\n";
 }
+QString DistanceMatrixMSAProfileTask::generateReport() const {
+    if (hasError() || isCanceled()) {
+        return tr("Task was finished with an error: %1").arg(getError());
+    }
+    QString res;
+    res += "<br>";
+    res += QString(tr("Distanse matrix for %1: <a href='%2'>%2</a>")).arg(s.profileName).arg(QDir::toNativeSeparators(s.outURL)) + "<br>";
+    return res;
+}
+
+bool DistanceMatrixMSAProfileTask::isReportingEnabled() const {
+    return !hasError() && !isCanceled() && s.outFormat != DistanceMatrixMSAProfileOutputFormat_Show;
+}
 
 
 Task::ReportResult DistanceMatrixMSAProfileTask::report() {
-    if (s.outFormat != DistanceMatrixMSAProfileOutputFormat_Show || hasError() || isCanceled()) {
+    if (hasError() || isCanceled() || s.outFormat != DistanceMatrixMSAProfileOutputFormat_Show) {
         return Task::ReportResult_Finished;
     }
     assert(!resultText.isEmpty());
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
index 7846151..ec98b09 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 
 #include <U2Core/global.h>
 #include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <QHash>
 #include <QSet>
@@ -76,7 +76,7 @@ public:
     QString                         algoName;    // selected algorithm
     QString                         profileName; // usually object name
     QString                         profileURL;  // document url
-    MAlignment                      ma;
+    MultipleSequenceAlignment                      ma;
     bool                            usePercents; //report percents but not counts
     bool                            excludeGaps; //exclude gaps when calculate distance
     bool                            showGroupStatistic;
@@ -91,8 +91,10 @@ public:
     DistanceMatrixMSAProfileTask(const DistanceMatrixMSAProfileTaskSettings& s);
 
     virtual void prepare();
+    QString generateReport() const;
+    virtual bool isReportingEnabled() const;
 
-    void createDistanceTable(MSADistanceAlgorithm* algo, const QList<MAlignmentRow> &rows, QFile *f);
+    void createDistanceTable(MSADistanceAlgorithm* algo, const QList<MultipleSequenceAlignmentRow> &rows, QFile *f);
 
     QList<Task*> createStatisticsDocument(Task* subTask);
 
diff --git a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui
index e4789d6..b20f108 100644
--- a/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui
+++ b/src/plugins/dna_stat/src/DistanceMatrixMSAProfileDialog.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>547</width>
-    <height>305</height>
+    <height>375</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -37,7 +37,7 @@
       <item row="0" column="0">
        <widget class="QRadioButton" name="countsRB">
         <property name="text">
-         <string>Counts</string>
+         <string>Count</string>
         </property>
         <property name="checked">
          <bool>true</bool>
@@ -47,7 +47,7 @@
       <item row="1" column="0">
        <widget class="QRadioButton" name="percentsRB">
         <property name="text">
-         <string>Percents</string>
+         <string>Percentage</string>
         </property>
        </widget>
       </item>
diff --git a/src/plugins/dna_stat/transl/english.ts b/src/plugins/dna_stat/transl/english.ts
index 41c4fb0..f1c7156 100644
--- a/src/plugins/dna_stat/transl/english.ts
+++ b/src/plugins/dna_stat/transl/english.ts
@@ -14,14 +14,22 @@
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
         <source>Counts</source>
-        <translation>Counts</translation>
+        <translation type="vanished">Counts</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
         <source>Percents</source>
-        <translation>Percents</translation>
+        <translation type="vanished">Percents</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
+        <source>Count</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
+        <source>Percentage</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DNAStatMSAProfileDialog.ui" line="46"/>
@@ -87,14 +95,22 @@
         <translation>Profile mode</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
         <source>Counts</source>
-        <translation>Counts</translation>
+        <translation type="vanished">Counts</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
         <source>Percents</source>
-        <translation>Percents</translation>
+        <translation type="vanished">Percents</translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
+        <source>Count</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
+        <source>Percentage</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="57"/>
@@ -135,9 +151,13 @@
 <context>
     <name>U2::DNAStatMSAEditorContext</name>
     <message>
-        <location filename="../src/DNAStatPlugin.cpp" line="71"/>
         <source>Generate grid profile</source>
-        <translation>Generate grid profile</translation>
+        <translation type="vanished">Generate grid profile</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatPlugin.cpp" line="71"/>
+        <source>Generate grid profile...</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -151,17 +171,31 @@
         <translation type="vanished">HTML files</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="73"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="54"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="55"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="87"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Select file to save report to..</source>
-        <translation>Select file to save report to..</translation>
+        <translation type="vanished">Select file to save report to..</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="116"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="116"/>
         <source>File URL is empty</source>
         <translation>File URL is empty</translation>
     </message>
@@ -169,68 +203,83 @@
 <context>
     <name>U2::DNAStatMSAProfileTask</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="115"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="129"/>
         <source>Generate alignment profile</source>
         <translation>Generate alignment profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="127"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="141"/>
         <source>No output file name specified</source>
         <translation>No output file name specified</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="155"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="169"/>
         <source>Alignment file:</source>
         <translation>Alignment file:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>Table content:</source>
         <translation>Table content:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>symbol percents</source>
         <translation>symbol percents</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>symbol counts</source>
         <translation>symbol counts</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="136"/>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="247"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="261"/>
         <source>Can't open file for write: %1</source>
         <translation>Can't open file for write: %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="238"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="252"/>
         <source>There is not enough memory to show this grid profile in UGENE. You can save it to an HTML file and open it with a web browser.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to show this grid profile in UGENE. You can save it to an HTML file and open it with a web browser.</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="240"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="254"/>
         <source>There is not enough memory to generate this grid profile in UGENE.</source>
+        <translation>There is not enough memory to generate this grid profile in UGENE.</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="293"/>
+        <source>Task was finished with an error: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="296"/>
+        <source>Task was canceled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="300"/>
+        <source>Grid profile for %1: <a href='%2'>%2</a></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="314"/>
         <source>Alignment profile</source>
         <translation>Alignment profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="314"/>
         <source>Alignment profile for %1</source>
         <translation>Alignment profile for %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="152"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="166"/>
         <source>Multiple Sequence Alignment Grid Profile</source>
         <translation>Multiple Sequence Alignment Grid Profile</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="222"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="236"/>
         <source>Legend:</source>
         <translation>Legend:</translation>
     </message>
@@ -329,39 +378,41 @@
 <context>
     <name>U2::DNAStatsWindow</name>
     <message>
-        <location filename="../src/DNAStatsWindow.cpp" line="44"/>
+        <location filename="../src/DNAStatsWindow.cpp" line="37"/>
         <source>Statistics for %1</source>
         <translation>Statistics for %1</translation>
     </message>
 </context>
 <context>
-    <name>U2::DNAViewStatsContext</name>
+    <name>U2::DistanceMatrixMSAEditorContext</name>
     <message>
-        <source>Statistics</source>
-        <translation type="vanished">Statistics</translation>
+        <source>Generate distance matrix</source>
+        <translation type="vanished">Generate distance matrix</translation>
     </message>
-</context>
-<context>
-    <name>U2::DistanceMatrixMSAEditorContext</name>
     <message>
         <location filename="../src/DNAStatPlugin.cpp" line="108"/>
-        <source>Generate distance matrix</source>
-        <translation>Generate distance matrix</translation>
+        <source>Generate distance matrix...</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>U2::DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="60"/>
         <source>Generate</source>
         <translation>Generate</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="57"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="94"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>CSV files</source>
         <translation type="vanished">CSV files</translation>
     </message>
@@ -370,17 +421,16 @@
         <translation type="vanished">HTML files</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="81"/>
         <source>Select file to save report to..</source>
-        <translation>Select file to save report to..</translation>
+        <translation type="vanished">Select file to save report to..</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="125"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="125"/>
         <source>File URL is empty</source>
         <translation>File URL is empty</translation>
     </message>
@@ -388,64 +438,74 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileTask</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="138"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="151"/>
         <source>Generate distance matrix</source>
         <translation>Generate distance matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="166"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="179"/>
         <source>No output file name specified</source>
         <translation>No output file name specified</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="201"/>
         <source>Multiple Sequence Alignment Distance Matrix</source>
         <translation>Multiple Sequence Alignment Distance Matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="191"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="204"/>
         <source>Alignment file:</source>
         <translation>Alignment file:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="192"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="205"/>
         <source>Table content:</source>
         <translation>Table content:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="202"/>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="234"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="215"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="248"/>
         <source>There is not enough memory to show this distance matrix in UGENE. You can save it to an HTML file and open it with a web browser.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to show this distance matrix in UGENE. You can save it to an HTML file and open it with a web browser.</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="209"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="222"/>
         <source>Group statistics of multiple alignment</source>
         <translation>Group statistics of multiple alignment</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="241"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="255"/>
         <source>Legend:</source>
         <translation>Legend:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="174"/>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="260"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="187"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="274"/>
         <source>Can't open file for write: %1</source>
         <translation>Can't open file for write: %1</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="302"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="317"/>
         <source>There is not enough groups to create distance matrix!</source>
         <translation>There is not enough groups to create distance matrix!</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="361"/>
+        <source>Task was finished with an error: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="365"/>
+        <source>Distanse matrix for %1: <a href='%2'>%2</a></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="379"/>
         <source>Distance matrix</source>
         <translation>Distance matrix</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="379"/>
         <source>Distance matrix for %1</source>
         <translation>Distance matrix for %1</translation>
     </message>
diff --git a/src/plugins/dna_stat/transl/russian.ts b/src/plugins/dna_stat/transl/russian.ts
index 68a04fd..42e3ebd 100644
--- a/src/plugins/dna_stat/transl/russian.ts
+++ b/src/plugins/dna_stat/transl/russian.ts
@@ -14,14 +14,22 @@
         <translation>Использовать</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
         <source>Counts</source>
-        <translation>Числа</translation>
+        <translation type="vanished">Числа</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
         <source>Percents</source>
-        <translation>Проценты</translation>
+        <translation type="vanished">Проценты</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="26"/>
+        <source>Count</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.ui" line="36"/>
+        <source>Percentage</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DNAStatMSAProfileDialog.ui" line="46"/>
@@ -87,14 +95,22 @@
         <translation>Использовать</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
         <source>Counts</source>
-        <translation>Числа</translation>
+        <translation type="vanished">Числа</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
         <source>Percents</source>
-        <translation>Проценты</translation>
+        <translation type="vanished">Проценты</translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="40"/>
+        <source>Count</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="50"/>
+        <source>Percentage</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/DistanceMatrixMSAProfileDialog.ui" line="57"/>
@@ -135,9 +151,13 @@
 <context>
     <name>U2::DNAStatMSAEditorContext</name>
     <message>
-        <location filename="../src/DNAStatPlugin.cpp" line="71"/>
         <source>Generate grid profile</source>
-        <translation>Представить выравнивание в виде таблицы частот</translation>
+        <translation type="vanished">Представить выравнивание в виде таблицы частот</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatPlugin.cpp" line="71"/>
+        <source>Generate grid profile...</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
@@ -151,17 +171,31 @@
         <translation type="vanished">HTML файлы</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="73"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="54"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="55"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="87"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Select file to save report to..</source>
-        <translation>Выберете файл для сохранения отчета..</translation>
+        <translation type="vanished">Выберете файл для сохранения отчета..</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="116"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="102"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="116"/>
         <source>File URL is empty</source>
         <translation>Не указан файл для сохранения отчета</translation>
     </message>
@@ -169,68 +203,83 @@
 <context>
     <name>U2::DNAStatMSAProfileTask</name>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="115"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="129"/>
         <source>Generate alignment profile</source>
         <translation>Генерация сеточного отчета</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="127"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="141"/>
         <source>No output file name specified</source>
         <translation>Не указано имя файла для сохранения отчета</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="155"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="169"/>
         <source>Alignment file:</source>
         <translation>Файл:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>Table content:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>symbol percents</source>
         <translation>процент символа</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="156"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="170"/>
         <source>symbol counts</source>
         <translation>количество символов</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="136"/>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="247"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="150"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="261"/>
         <source>Can't open file for write: %1</source>
         <translation>Не могу открыть файл для записи: %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="238"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="252"/>
         <source>There is not enough memory to show this grid profile in UGENE. You can save it to an HTML file and open it with a web browser.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to show this grid profile in UGENE. You can save it to an HTML file and open it with a web browser.</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="240"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="254"/>
         <source>There is not enough memory to generate this grid profile in UGENE.</source>
+        <translation>There is not enough memory to generate this grid profile in UGENE.</translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="293"/>
+        <source>Task was finished with an error: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="296"/>
+        <source>Task was canceled.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="300"/>
+        <source>Grid profile for %1: <a href='%2'>%2</a></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="314"/>
         <source>Alignment profile</source>
         <translation>Отчет для множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="283"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="314"/>
         <source>Alignment profile for %1</source>
         <translation>Отчет для множественного выравнивания %1</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="152"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="166"/>
         <source>Multiple Sequence Alignment Grid Profile</source>
         <translation>Сеточный отчет для множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="222"/>
+        <location filename="../src/DNAStatMSAProfileDialog.cpp" line="236"/>
         <source>Legend:</source>
         <translation>Легенда:</translation>
     </message>
@@ -329,39 +378,41 @@
 <context>
     <name>U2::DNAStatsWindow</name>
     <message>
-        <location filename="../src/DNAStatsWindow.cpp" line="44"/>
+        <location filename="../src/DNAStatsWindow.cpp" line="37"/>
         <source>Statistics for %1</source>
         <translation>Статистика для %1</translation>
     </message>
 </context>
 <context>
-    <name>U2::DNAViewStatsContext</name>
+    <name>U2::DistanceMatrixMSAEditorContext</name>
     <message>
-        <source>Statistics</source>
-        <translation type="vanished">Статистика</translation>
+        <source>Generate distance matrix</source>
+        <translation type="vanished">Рассчитать матрицу расстояний</translation>
     </message>
-</context>
-<context>
-    <name>U2::DistanceMatrixMSAEditorContext</name>
     <message>
         <location filename="../src/DNAStatPlugin.cpp" line="108"/>
-        <source>Generate distance matrix</source>
-        <translation>Рассчитать матрицу расстояний</translation>
+        <source>Generate distance matrix...</source>
+        <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
     <name>U2::DistanceMatrixMSAProfileDialog</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="56"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="60"/>
         <source>Generate</source>
         <translation>Создать отчет</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="57"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="61"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="94"/>
+        <source>Save file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>CSV files</source>
         <translation type="vanished">CSV файлы</translation>
     </message>
@@ -370,17 +421,16 @@
         <translation type="vanished">HTML файлы</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="81"/>
         <source>Select file to save report to..</source>
-        <translation>Выберете файл для сохранения отчета..</translation>
+        <translation type="vanished">Выберете файл для сохранения отчета..</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="125"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="112"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="125"/>
         <source>File URL is empty</source>
         <translation>Не указан файл для сохранения отчета</translation>
     </message>
@@ -388,64 +438,74 @@
 <context>
     <name>U2::DistanceMatrixMSAProfileTask</name>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="138"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="151"/>
         <source>Generate distance matrix</source>
         <translation>Рассчитать матрицу расстояний</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="166"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="179"/>
         <source>No output file name specified</source>
         <translation>Не указано имя файла для сохранения отчета</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="188"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="201"/>
         <source>Multiple Sequence Alignment Distance Matrix</source>
         <translation>Матрица расстояний множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="191"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="204"/>
         <source>Alignment file:</source>
         <translation>Файл:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="192"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="205"/>
         <source>Table content:</source>
         <translation>Результаты:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="202"/>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="234"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="215"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="248"/>
         <source>There is not enough memory to show this distance matrix in UGENE. You can save it to an HTML file and open it with a web browser.</source>
-        <translation type="unfinished"></translation>
+        <translation>There is not enough memory to show this distance matrix in UGENE. You can save it to an HTML file and open it with a web browser.</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="209"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="222"/>
         <source>Group statistics of multiple alignment</source>
         <translation>Групповая статистика множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="241"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="255"/>
         <source>Legend:</source>
         <translation>Легенда:</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="174"/>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="260"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="187"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="274"/>
         <source>Can't open file for write: %1</source>
         <translation>Не могу открыть файл для записи: %1</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="302"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="317"/>
         <source>There is not enough groups to create distance matrix!</source>
         <translation>Недостаточно групп для того, чтобы создать матрицу расстояний!</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="361"/>
+        <source>Task was finished with an error: %1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="365"/>
+        <source>Distanse matrix for %1: <a href='%2'>%2</a></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="379"/>
         <source>Distance matrix</source>
         <translation>Матрица расстояний</translation>
     </message>
     <message>
-        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="356"/>
+        <location filename="../src/DistanceMatrixMSAProfileDialog.cpp" line="379"/>
         <source>Distance matrix for %1</source>
         <translation>Матрица расстояний для %1</translation>
     </message>
diff --git a/src/plugins/dotplot/src/DotPlotClasses.cpp b/src/plugins/dotplot/src/DotPlotClasses.cpp
index 6755132..186026d 100644
--- a/src/plugins/dotplot/src/DotPlotClasses.cpp
+++ b/src/plugins/dotplot/src/DotPlotClasses.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include "DotPlotClasses.h"
-#include <QtCore/qmath.h>
-#include <QtCore/qnumeric.h>
 #include <U2Core/U2SafePoints.h>
 
+#include "DotPlotClasses.h"
+
 namespace U2 {
 
 DotPlotMiniMap::DotPlotMiniMap(int bigMapW, int bigMapH, float ratio) {
@@ -95,14 +94,13 @@ void DotPlotMiniMap::draw(QPainter &p, int shiftX, int shiftY, const QPointF &zo
 
 DotPlotResultsListener::DotPlotResultsListener() {
 
-    dotPlotList = new QList<DotPlotResults>();
+    dotPlotList = QSharedPointer< QList<DotPlotResults> >(new QList<DotPlotResults>());
     stateOk = true;
     rfTask = NULL;
 }
 
 DotPlotResultsListener::~DotPlotResultsListener() {
-
-    delete dotPlotList;
+    dotPlotList.clear();
 }
 
 void DotPlotResultsListener::setTask(Task *t) {
diff --git a/src/plugins/dotplot/src/DotPlotClasses.h b/src/plugins/dotplot/src/DotPlotClasses.h
index 9b32e3a..3245d8a 100644
--- a/src/plugins/dotplot/src/DotPlotClasses.h
+++ b/src/plugins/dotplot/src/DotPlotClasses.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,13 +27,9 @@
 #include <U2Algorithm/RepeatFinderSettings.h>
 #include <U2Core/U2Region.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtGui/QPainter>
-#include <QtCore/QMutex>
+#include <QMessageBox>
+#include <QPainter>
+#include <QMutex>
 
 namespace U2 {
 
@@ -56,10 +52,18 @@ private:
 enum DotPlotErrors {ErrorOpen, ErrorNames, NoErrors};
 
 struct DotPlotResults {
-    DotPlotResults(): x(0), y(0), len(0){};
-    DotPlotResults(int _x, int _y, int _len):x(_x), y(_y), len(_len){};
-
-    int x, y, len;
+    DotPlotResults()
+        : x(0),
+          y(0),
+          len(0) {}
+    DotPlotResults(int _x, int _y, int _len)
+        : x(_x),
+          y(_y),
+          len(_len) {}
+
+    int x;
+    int y;
+    int len;
 
     inline bool intersectRegion(const U2Region& r, const FilterIntersectionParameter& currentIntersParam){
         qint64 sd = - r.startPos;
@@ -87,7 +91,7 @@ public:
     virtual void onResults(const QVector<RFResult>& v);
 
 private:
-    QList<DotPlotResults> *dotPlotList;
+    QSharedPointer< QList<DotPlotResults> > dotPlotList;
     QMutex mutex;
 
     bool stateOk;
diff --git a/src/plugins/dotplot/src/DotPlotDialog.cpp b/src/plugins/dotplot/src/DotPlotDialog.cpp
index 1a14e8c..a960a66 100644
--- a/src/plugins/dotplot/src/DotPlotDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,7 @@
 #include <math.h>
 
 #include <QColorDialog>
+#include <QDesktopWidget>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
@@ -53,8 +54,10 @@ DotPlotDialog::DotPlotDialog(QWidget *parent, AnnotatedDNAView* currentADV, int
 ,openSequenceTask(NULL), curURL("")
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223036");
-    startButton = buttonBox->button(QDialogButtonBox::Ok);
+
+    new HelpButton(this, buttonBox, "20874940");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     SAFE_POINT(adv != NULL, "DotPlotDialog called without view context!", );
 
@@ -200,7 +203,7 @@ bool DotPlotDialog::isInverted() const {
 
 void DotPlotDialog::sl_directInvertedCheckBox() {
 
-    startButton->setEnabled(directCheckBox->isChecked() || invertedCheckBox->isChecked());
+    buttonBox->button(QDialogButtonBox::Ok)->setEnabled(directCheckBox->isChecked() || invertedCheckBox->isChecked());
 }
 
 static const QString COLOR_STYLE("QPushButton { background-color: %1 }");
diff --git a/src/plugins/dotplot/src/DotPlotDialog.h b/src/plugins/dotplot/src/DotPlotDialog.h
index c2b7447..365e3cc 100644
--- a/src/plugins/dotplot/src/DotPlotDialog.h
+++ b/src/plugins/dotplot/src/DotPlotDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <ui_DotPlotDialog.h>
 
 #include <U2Algorithm/RepeatFinderSettings.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 namespace U2 {
 
@@ -91,7 +87,6 @@ private:
 
     Task* openSequenceTask;
     QString curURL;
-    QPushButton* startButton;
 };
 
 } //namespace
diff --git a/src/plugins/dotplot/src/DotPlotFilesDialog.cpp b/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
index 8b96d91..11ac4f4 100644
--- a/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotFilesDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ DotPlotFilesDialog::DotPlotFilesDialog(QWidget *parent)
 : QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223036");
+    new HelpButton(this, buttonBox, "20874940");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Next"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -51,7 +51,7 @@ DotPlotFilesDialog::DotPlotFilesDialog(QWidget *parent)
     connect(mergeFirstCheckBox, SIGNAL(clicked()), SLOT(sl_mergeFirst()));
     connect(mergeSecondCheckBox, SIGNAL(clicked()), SLOT(sl_mergeSecond()));
 
-    filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true).append("\n").append(
+    filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true).append("\n").append(
         DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, false));
 
 }
diff --git a/src/plugins/dotplot/src/DotPlotFilesDialog.h b/src/plugins/dotplot/src/DotPlotFilesDialog.h
index a206777..453a552 100644
--- a/src/plugins/dotplot/src/DotPlotFilesDialog.h
+++ b/src/plugins/dotplot/src/DotPlotFilesDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dotplot/src/DotPlotFilterDialog.cpp b/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
index bda73f7..5600b36 100644
--- a/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
+++ b/src/plugins/dotplot/src/DotPlotFilterDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,8 +47,9 @@ DotPlotFilterDialog::DotPlotFilterDialog(QWidget *parent, ADVSequenceObjectConte
 ,seqYItem(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223046");
-
+    new HelpButton(this, buttonBox, "20874950");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     {
         filterGroup = new QButtonGroup(this);
diff --git a/src/plugins/dotplot/src/DotPlotFilterDialog.h b/src/plugins/dotplot/src/DotPlotFilterDialog.h
index cf6adfa..fba8576 100644
--- a/src/plugins/dotplot/src/DotPlotFilterDialog.h
+++ b/src/plugins/dotplot/src/DotPlotFilterDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,8 @@
 
 #include <ui_DotPlotFilterDialog.h>
 
+#include <QDialog>
+
 namespace U2 {
 
 class ADVSequenceObjectContext;
@@ -39,7 +41,7 @@ enum FilterIntersectionParameter{
     Both
 };
 
-class DotPlotFilterDialog : public QDialog, public Ui_DotPlotFilterDialog{
+class DotPlotFilterDialog : public QDialog, public Ui_DotPlotFilterDialog {
     Q_OBJECT
 public:
     DotPlotFilterDialog(QWidget *parent, ADVSequenceObjectContext *sequenceX, ADVSequenceObjectContext *sequenceY);
diff --git a/src/plugins/dotplot/src/DotPlotImageExportTask.cpp b/src/plugins/dotplot/src/DotPlotImageExportTask.cpp
index d201cb3..4d423d3 100644
--- a/src/plugins/dotplot/src/DotPlotImageExportTask.cpp
+++ b/src/plugins/dotplot/src/DotPlotImageExportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dotplot/src/DotPlotImageExportTask.h b/src/plugins/dotplot/src/DotPlotImageExportTask.h
index f8a9641..d693df1 100644
--- a/src/plugins/dotplot/src/DotPlotImageExportTask.h
+++ b/src/plugins/dotplot/src/DotPlotImageExportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/dotplot/src/DotPlotPlugin.cpp b/src/plugins/dotplot/src/DotPlotPlugin.cpp
index 416c62f..244d614 100644
--- a/src/plugins/dotplot/src/DotPlotPlugin.cpp
+++ b/src/plugins/dotplot/src/DotPlotPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -73,6 +73,7 @@ DotPlotViewContext::DotPlotViewContext(QObject* p)
     connect( showDlgAction, SIGNAL( triggered() ), SLOT( sl_showDotPlotDialog() ) );
     ToolsMenu::addAction(ToolsMenu::TOOLS, showDlgAction);
 
+    connect(AppContext::getMainWindow()->getMDIManager(), SIGNAL(si_windowActivated(MWMDIWindow*)), SLOT(sl_windowActivated(MWMDIWindow*)));
 
     // need to know it build dotplot wizard finished work
     connect( AppContext::getTaskScheduler(), SIGNAL( si_stateChanged(Task*) ), SLOT( sl_loadTaskStateChanged(Task*) ) );
@@ -154,23 +155,20 @@ static U2SequenceObject * getSequenceByFile(QString file) {
 
 // called from the context menu
 void DotPlotViewContext::sl_buildDotPlot() {
+    GObjectViewAction *action = qobject_cast<GObjectViewAction *>(sender());
+    CHECK(action != NULL, )
+    showBuildDotPlotDialog(action->getObjectView());
+}
 
-    GObjectViewAction *action = qobject_cast<GObjectViewAction*>(sender());
-    if (!action) {
-        return;
-    }
-
-    // tell in which dnaView we should build dotplot
-    AnnotatedDNAView *dnaView = qobject_cast<AnnotatedDNAView*>(action->getObjectView());
-    if (!dnaView) {
-        return;
-    }
+void DotPlotViewContext::showBuildDotPlotDialog(GObjectView *ov) {
+    AnnotatedDNAView *dnaView = qobject_cast<AnnotatedDNAView*>(ov);
+    CHECK(dnaView != NULL, )
 
     DotPlotWidget *dotPlot = new DotPlotWidget(dnaView);
     dotPlot->setSequences(getSequenceByFile(firstFile), getSequenceByFile(secondFile));
 
     // show settings dialog
-    if (dotPlot && (dotPlot->sl_showSettingsDialog(createdByWizard))) {
+    if (dotPlot->sl_showSettingsDialog(createdByWizard)) {
         DotPlotSplitter* splitter = getView(dnaView, true); // create new splitter
         Q_ASSERT(splitter);
         splitter->addView(dotPlot);
@@ -211,6 +209,10 @@ void DotPlotViewContext::sl_removeDotPlot() {
     }
 }
 
+
+#define SHOW_BUILD_DOT_PLOT_DIALOG_FLAG "trigger_dot_plot_dialog"
+#define BUILD_DOT_PLOT_ACTION_NAME "build_dotplot_action"
+
 // new view context is opened
 void DotPlotViewContext::initViewContext(GObjectView* v) {
     AnnotatedDNAView* av = qobject_cast<AnnotatedDNAView*>(v);
@@ -219,7 +221,7 @@ void DotPlotViewContext::initViewContext(GObjectView* v) {
     // add the dotplot menu item to an analyze menu
     QString dotPlotBuildString = tr("Build dotplot...");
     ADVGlobalAction* act = new ADVGlobalAction(av, QIcon(":dotplot/images/dotplot.png"), dotPlotBuildString, 40, ADVGlobalActionFlags(ADVGlobalActionFlag_AddToAnalyseMenu));
-    act->setObjectName("build_dotplot_action");
+    act->setObjectName(BUILD_DOT_PLOT_ACTION_NAME);
     connect(act, SIGNAL(triggered()), SLOT(sl_buildDotPlot()));
 
     ADVGlobalAction* tb = new ADVGlobalAction(av, QIcon(":dotplot/images/dotplot.png"), dotPlotBuildString, 40, ADVGlobalActionFlags(ADVGlobalActionFlag_AddToToolbar));
@@ -234,8 +236,8 @@ void DotPlotViewContext::initViewContext(GObjectView* v) {
         Q_ASSERT(widget != NULL);
         widget->showMaximized();
 
-        // show dotplot settings dialog
-        act->trigger();
+        // once view is ready and activated we will show build-dot-plot dialog
+        av->setProperty(SHOW_BUILD_DOT_PLOT_DIALOG_FLAG, 1);
     }
 }
 
@@ -301,4 +303,17 @@ void DotPlotViewContext::removeDotPlotView(GObjectView* view) {
     }
 }
 
+void DotPlotViewContext::sl_windowActivated(MWMDIWindow* w) {
+    // check if we need to show DP dialog for this window
+    GObjectViewWindow* ow = qobject_cast<GObjectViewWindow*>(w);
+    CHECK(ow != NULL, )
+    GObjectView* view = ow->getObjectView();
+    if (view->property(SHOW_BUILD_DOT_PLOT_DIALOG_FLAG).toInt() != 1) {
+        return;
+    }
+    // mark this window as processed
+    view->setProperty(SHOW_BUILD_DOT_PLOT_DIALOG_FLAG, 0);
+    showBuildDotPlotDialog(view);
+}
+
 }//namespace
diff --git a/src/plugins/dotplot/src/DotPlotPlugin.h b/src/plugins/dotplot/src/DotPlotPlugin.h
index dd47362..602cedb 100644
--- a/src/plugins/dotplot/src/DotPlotPlugin.h
+++ b/src/plugins/dotplot/src/DotPlotPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -63,8 +63,11 @@ private slots:
 
     void sl_showDotPlotDialog();
     void sl_loadTaskStateChanged(Task* task);
+    void sl_windowActivated(MWMDIWindow* w);
 
 private:
+    void showBuildDotPlotDialog(GObjectView* v);
+
     bool createdByWizard;
     QString firstFile;
     QString secondFile;
diff --git a/src/plugins/dotplot/src/DotPlotSplitter.cpp b/src/plugins/dotplot/src/DotPlotSplitter.cpp
index 950faf3..cd468e2 100644
--- a/src/plugins/dotplot/src/DotPlotSplitter.cpp
+++ b/src/plugins/dotplot/src/DotPlotSplitter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,9 +29,9 @@
 
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QString>
-#include <QtCore/QPair>
-#include <QtCore/QSet>
+#include <QString>
+#include <QPair>
+#include <QSet>
 
 #include <QAction>
 #include <QVBoxLayout>
@@ -141,11 +141,11 @@ void DotPlotSplitter::removeView(DotPlotWidget* view) {
     checkLockButtonState();
 }
 
-typedef QPair<QString,QString> QStringPair;
+typedef QPair<QString,QString> QStrStrPair;
 
 void DotPlotSplitter::checkLockButtonState() {
 
-    QSet<QStringPair> dotPlots;
+    QSet<QStrStrPair> dotPlots;
 
     bool enableLockButton = false;
 
@@ -157,7 +157,7 @@ void DotPlotSplitter::checkLockButtonState() {
 
         if (!nameX.isEmpty() && !nameY.isEmpty()) {
 
-            QStringPair p;
+            QStrStrPair p;
             p.first = nameX;
             p.second = nameY;
 
diff --git a/src/plugins/dotplot/src/DotPlotSplitter.h b/src/plugins/dotplot/src/DotPlotSplitter.h
index b13ff8d..be1a70c 100644
--- a/src/plugins/dotplot/src/DotPlotSplitter.h
+++ b/src/plugins/dotplot/src/DotPlotSplitter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 #include <U2View/ADVSplitWidget.h>
 
-#include <QtGui/QIcon>
+#include <QIcon>
 
 class QMenu;
 class QToolButton;
diff --git a/src/plugins/dotplot/src/DotPlotTasks.cpp b/src/plugins/dotplot/src/DotPlotTasks.cpp
index 072effc..c597412 100644
--- a/src/plugins/dotplot/src/DotPlotTasks.cpp
+++ b/src/plugins/dotplot/src/DotPlotTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -93,7 +93,7 @@ void SaveDotPlotTask::saveDotPlot(QTextStream &stream){
     int listSizes = directList->size() + inverseList->size();
     SAFE_POINT (listSizes, "listSizes is NULL", );
 
-    int i=0;
+    int i = 0;
     foreach(const DotPlotResults &r, *directList) {
         if (stateInfo.cancelFlag) {
             return;
@@ -313,8 +313,12 @@ DotPlotLoadDocumentsTask::~DotPlotLoadDocumentsTask() {
    }
 }
 
-DotPlotFilterTask::DotPlotFilterTask(ADVSequenceObjectContext* _sequenceX, ADVSequenceObjectContext* _sequenceY,
-                                     const QMultiMap<FilterIntersectionParameter, QString>& _annotationNames, QList<DotPlotResults>* _initialResults, QList<DotPlotResults>* _filteredResults
+DotPlotFilterTask::DotPlotFilterTask(ADVSequenceObjectContext* _sequenceX,
+                                     ADVSequenceObjectContext* _sequenceY,
+                                     const QMultiMap<FilterIntersectionParameter,
+                                     QString>& _annotationNames,
+                                     QSharedPointer< QList<DotPlotResults> > _initialResults,
+                                     QSharedPointer< QList<DotPlotResults> > _filteredResults
                                      ,FilterType _type)
 :Task(tr("Applying filter to dotplot"), TaskFlag_None)
 ,sequenceX(_sequenceX)
diff --git a/src/plugins/dotplot/src/DotPlotTasks.h b/src/plugins/dotplot/src/DotPlotTasks.h
index 02544a2..24416b9 100644
--- a/src/plugins/dotplot/src/DotPlotTasks.h
+++ b/src/plugins/dotplot/src/DotPlotTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/Task.h>
 #include <U2View/ADVSequenceObjectContext.h>
 
-#include <QtCore/QTextStream>
+#include <QTextStream>
 
 namespace U2 {
 
@@ -39,13 +39,24 @@ class U2SequenceObject;
 class SaveDotPlotTask : public Task {
     Q_OBJECT
 public:
-    SaveDotPlotTask(const QString &file, QList<DotPlotResults> *dotPlotDirectList, QList<DotPlotResults> *dotPlotInverseList,
-        U2SequenceObject *seqX, U2SequenceObject *seqY, int mLen, int ident)
-        : Task(tr("DotPlot saving"), TaskFlags_FOSCOE), filename(file), directList(dotPlotDirectList), inverseList(dotPlotInverseList),
-        sequenceX(seqX), sequenceY(seqY), minLen(mLen), identity(ident)
+    SaveDotPlotTask(const QString &file,
+                    QSharedPointer< QList<DotPlotResults> > dotPlotDirectList,
+                    QSharedPointer< QList<DotPlotResults> > dotPlotInverseList,
+                    U2SequenceObject *seqX,
+                    U2SequenceObject *seqY,
+                    int mLen,
+                    int ident)
+        : Task(tr("DotPlot saving"), TaskFlags_FOSCOE),
+          filename(file),
+          directList(dotPlotDirectList),
+          inverseList(dotPlotInverseList),
+          sequenceX(seqX),
+          sequenceY(seqY),
+          minLen(mLen),
+          identity(ident)
     {
         tpm = Task::Progress_Manual;
-    };
+    }
 
     void run();
 
@@ -53,7 +64,8 @@ public:
 
 private:
     QString filename;
-    QList<DotPlotResults> *directList, *inverseList;
+    QSharedPointer< QList<DotPlotResults> > directList;
+    QSharedPointer< QList<DotPlotResults> > inverseList;
     U2SequenceObject *sequenceX, *sequenceY;
     int minLen, identity;
 
@@ -65,15 +77,28 @@ class LoadDotPlotTask : public Task {
     Q_OBJECT
 public:
 
-    LoadDotPlotTask(const QString &file, QList<DotPlotResults> *dotPlotDirectList,
-        QList<DotPlotResults> *dotPlotInverseList, U2SequenceObject *seqX,
-        U2SequenceObject *seqY, int *mLen, int *ident, bool *dir, bool *inv)
-        : Task(tr("DotPlot loading"), TaskFlags_FOSCOE), filename(file),
-        directList(dotPlotDirectList), inverseList(dotPlotInverseList),
-        sequenceX(seqX), sequenceY(seqY), minLen(mLen), identity(ident), direct(dir), inverted(inv)
+    LoadDotPlotTask(const QString &file,
+                    QSharedPointer< QList<DotPlotResults> > dotPlotDirectList,
+                    QSharedPointer< QList<DotPlotResults> > dotPlotInverseList,
+                    U2SequenceObject *seqX,
+                    U2SequenceObject *seqY,
+                    int *mLen,
+                    int *ident,
+                    bool *dir,
+                    bool *inv)
+        : Task(tr("DotPlot loading"), TaskFlags_FOSCOE),
+          filename(file),
+          directList(dotPlotDirectList),
+          inverseList(dotPlotInverseList),
+          sequenceX(seqX),
+          sequenceY(seqY),
+          minLen(mLen),
+          identity(ident),
+          direct(dir),
+          inverted(inv)
     {
         tpm = Task::Progress_Manual;
-    };
+    }
 
     void run();
 
@@ -81,7 +106,8 @@ public:
 
 private:
     QString filename;
-    QList<DotPlotResults> *directList, *inverseList;
+    QSharedPointer< QList<DotPlotResults> > directList;
+    QSharedPointer< QList<DotPlotResults> > inverseList;
     U2SequenceObject *sequenceX, *sequenceY;
     int *minLen, *identity;
     bool *direct, *inverted;
@@ -97,7 +123,7 @@ public:
     DotPlotLoadDocumentsTask(QString firstF, int firstG, QString secondF, int secondG, bool view = true);
     ~DotPlotLoadDocumentsTask();
 
-    void run(){};
+    void run(){}
     void prepare();
 
     QList<Document*> getDocuments() const {return docs;}
@@ -122,9 +148,13 @@ signals:
 class DotPlotFilterTask : public Task{
     Q_OBJECT
 public:
-    DotPlotFilterTask(ADVSequenceObjectContext* _sequenceX, ADVSequenceObjectContext* _sequenceY,
-        const QMultiMap<FilterIntersectionParameter, QString>& _annotationNames, QList<DotPlotResults>* _initialResults, QList<DotPlotResults>* _filteredResults
-        ,FilterType _type);
+    DotPlotFilterTask(ADVSequenceObjectContext* _sequenceX,
+                      ADVSequenceObjectContext* _sequenceY,
+                      const QMultiMap<FilterIntersectionParameter,
+                      QString>& _annotationNames,
+                      QSharedPointer< QList<DotPlotResults> > _initialResults,
+                      QSharedPointer< QList<DotPlotResults> > _filteredResults,
+                      FilterType _type);
 
     void run();
 
@@ -134,8 +164,8 @@ private:
     ADVSequenceObjectContext* sequenceX;
     ADVSequenceObjectContext* sequenceY;
     QMultiMap<FilterIntersectionParameter, QString> annotationNames;
-    QList<DotPlotResults>* initialResults;
-    QList<DotPlotResults>* filteredResults;
+    QSharedPointer< QList<DotPlotResults> > initialResults;
+    QSharedPointer< QList<DotPlotResults> > filteredResults;
     QList<DotPlotResults> tempResults;
     FilterType fType;
     float progressStep;
diff --git a/src/plugins/dotplot/src/DotPlotWidget.cpp b/src/plugins/dotplot/src/DotPlotWidget.cpp
index 22d8e89..6ebff3d 100644
--- a/src/plugins/dotplot/src/DotPlotWidget.cpp
+++ b/src/plugins/dotplot/src/DotPlotWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <math.h>
 #include <QMessageBox>
 #include <QMouseEvent>
 #include <QToolTip>
@@ -39,9 +40,11 @@
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/ExportImageDialog.h>
+#include <U2Gui/GUIUtils.h>
 #include <U2Gui/GraphUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
@@ -65,14 +68,16 @@ DotPlotWidget::DotPlotWidget(AnnotatedDNAView* dnaView)
     selectionX(NULL),selectionY(NULL),sequenceX(NULL),sequenceY(NULL), direct(true), inverted(false), nearestInverted(false), ignorePanView(false), keepAspectRatio(false),
     zoom(1.0f, 1.0f), shiftX(0), shiftY(0),
     minLen(100), identity(100),
-    pixMapUpdateNeeded(true), deleteDotPlotFlag(false), filtration(false), createDotPlot(false), dotPlotTask(NULL), pixMap(NULL), miniMap(NULL),
+    pixMapUpdateNeeded(true), deleteDotPlotFlag(false), filtration(false), dotPlotIsCalculating(false), dotPlotTask(NULL), pixMap(NULL), miniMap(NULL),
     nearestRepeat(NULL),
     clearedByRepitSel(false)
 {
+    textSpace = w = h = 0; // values are used and will be initialized in drawAll.
+    
     dpDirectResultListener = new DotPlotResultsListener();
     dpRevComplResultsListener = new DotPlotRevComplResultsListener();
-    dpFilteredResults = new QList<DotPlotResults>();
-    dpFilteredResultsRevCompl = new QList<DotPlotResults>();
+    dpFilteredResults = QSharedPointer<QList<DotPlotResults> >( new QList<DotPlotResults>() );
+    dpFilteredResultsRevCompl = QSharedPointer<QList<DotPlotResults> >( new QList<DotPlotResults>() );
     foreach(DotPlotResults dpR, *dpDirectResultListener->dotPlotList){
         dpFilteredResults->append(dpR);
     }
@@ -81,18 +86,6 @@ DotPlotWidget::DotPlotWidget(AnnotatedDNAView* dnaView)
         dpFilteredResultsRevCompl->append(dpR);
     }
 
-    QFontMetrics fm = QPainter(this).fontMetrics();
-    int minTextSpace = fm.width(" 00000 ");
-
-    if (defaultTextSpace < minTextSpace) {
-        textSpace = minTextSpace;
-    } else {
-        textSpace = defaultTextSpace;
-    }
-
-    // border around view
-    w = width() - 2*textSpace;
-    h = height() - 2*textSpace;
 
     SAFE_POINT(dnaView, "dnaView is NULL", );
     this->dnaView = dnaView;
@@ -192,8 +185,8 @@ DotPlotWidget::~DotPlotWidget() {
 
     delete dpDirectResultListener;
     delete dpRevComplResultsListener;
-    delete dpFilteredResults;
-    delete dpFilteredResultsRevCompl;
+    dpFilteredResults.clear();
+    dpFilteredResultsRevCompl.clear();
 }
 
 bool DotPlotWidget::onCloseEvent() {
@@ -325,7 +318,7 @@ void DotPlotWidget::sl_panViewChanged() {
     }
 
     U2Region lr = panView->getVisibleRange();
-    ADVSequenceObjectContext* ctx = lw->getSequenceContext();
+    SequenceObjectContext* ctx = lw->getSequenceContext();
 
     if (!ctx || ignorePanView) {
         return;
@@ -418,6 +411,7 @@ void DotPlotWidget::sl_buildDotplotTaskStateChanged() {
     seqXCache.clear();
     seqYCache.clear();
 
+    dotPlotIsCalculating = false;
     // build dotplot task finished
     pixMapUpdateNeeded = true;
     update();
@@ -517,9 +511,14 @@ void DotPlotWidget::sl_onSequenceSelectionChanged(LRegionsSelection* s, const QV
 void DotPlotWidget::sl_showSaveImageDialog() {
     exitButton->hide();
 
+    QString s1 = GUrlUtils::fixFileName(sequenceX->getSequenceGObject()->getGObjectName());
+    QString s2 = GUrlUtils::fixFileName(sequenceY->getSequenceGObject()->getGObjectName());
+    QString fileName = s1 == s2 ? s1 : s1 + "_" + s2;
+
     DotPlotImageExportController factory(this);
     QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(&factory,
                                                                            ExportImageDialog::DotPlot,
+                                                                           fileName,
                                                                            ExportImageDialog::SupportScaling,
                                                                            this);
     dialog->exec();
@@ -531,8 +530,8 @@ void DotPlotWidget::sl_showSaveImageDialog() {
 // save dotplot into a dotplot file, return true if not canceled
 bool DotPlotWidget::sl_showSaveFileDialog() {
     LastUsedDirHelper lod("Dotplot");
-    if (dpDirectResultListener->dotPlotList->isEmpty() || dpRevComplResultsListener->dotPlotList->isEmpty()) {
-        QMessageBox::critical(this, tr("File saving error"), tr("Nothing to save: dotplot is empty.").arg(lod.url));
+    if (dpDirectResultListener->dotPlotList->isEmpty() && dpRevComplResultsListener->dotPlotList->isEmpty()) {
+        QMessageBox::critical(this, tr("Error Saving Dotplot"), tr("The dotplot can't be saved as it is empty."));
         return true;
     }
 
@@ -639,7 +638,7 @@ bool DotPlotWidget::sl_showLoadFileDialog() {
             &direct,
             &inverted
     );
-    createDotPlot = true;
+    dotPlotIsCalculating = true;
 
     TaskScheduler* ts = AppContext::getTaskScheduler();
     ts->registerTopLevelTask(dotPlotTask);
@@ -661,7 +660,7 @@ bool DotPlotWidget::sl_showSettingsDialog(bool disableLoad) {
 
     SAFE_POINT(dnaView, "dnaView is NULL", false);
 
-    QObjectScopedPointer<DotPlotDialog> d = new DotPlotDialog(this, dnaView, minLen, identity, sequenceX, sequenceY, direct, inverted, dotPlotDirectColor, dotPlotInvertedColor, disableLoad);
+    QObjectScopedPointer<DotPlotDialog> d = new DotPlotDialog(QApplication::activeWindow(), dnaView, minLen, identity, sequenceX, sequenceY, direct, inverted, dotPlotDirectColor, dotPlotInvertedColor, disableLoad);
     d->exec();
     CHECK(!d.isNull(), false);
 
@@ -792,7 +791,7 @@ bool DotPlotWidget::sl_showSettingsDialog(bool disableLoad) {
     }
 
     dotPlotTask = new MultiTask("Searching repeats", tasks, true);
-    createDotPlot = true;
+    dotPlotIsCalculating = true;
 
     TaskScheduler* ts = AppContext::getTaskScheduler();
     ts->registerTopLevelTask(dotPlotTask);
@@ -964,9 +963,6 @@ void DotPlotWidget::drawAll(QPainter &p, QSize &size, qreal fontScale, DotPlotIm
     float shiftY_saved = shiftY;
 
     // adapt sizes to provided w and h
-    QFontMetrics fm = p.fontMetrics();
-    int minTextSpace = fm.width(" 00000 ");
-    textSpace = minTextSpace;
     w = size.width() - 2 * textSpace;
     h = size.height() - 2 * textSpace;
     miniMap->updatePosition(w, h);
@@ -993,38 +989,47 @@ void DotPlotWidget::drawAll(QPainter &p, QSize &size, qreal fontScale, DotPlotIm
 // draw everything
 void DotPlotWidget::drawAll(QPainter& p, qreal rulerFontScale, bool _drawFocus,
                             bool drawAreaSelection, bool drawRepeatSelection) {
-
-    if (sequenceX == NULL || sequenceY == NULL || w <= 0 || h <= 0) {
+    if (sequenceX == NULL || sequenceY == NULL) {
         return;
     }
 
-    p.save();
-    p.setRenderHint(QPainter::Antialiasing);
+    QFontMetrics fm = p.fontMetrics();
+    // min textSpace is 4 characters: this is important for sequence name labels 
+    textSpace = fm.width("0") * qMax(4, qRound(1 + log10(sequenceX->getSequenceLength())));
+    // border around view
+    w = width() - 2 * textSpace;
+    h = height() - 2 * textSpace;
+    
+    if (dotPlotIsCalculating) {
+        GUIUtils::showMessage(this, p, tr("Dotplot is calculating..."));
+    } else {
+        p.save();
+        p.setRenderHint(QPainter::Antialiasing);
 
-    p.setBrush(QBrush(palette().window().color()));
+        p.setBrush(QBrush(palette().window().color()));
 
-    drawNames(p);
-    p.translate(textSpace, textSpace);
+        drawNames(p);
+        p.translate(textSpace, textSpace);
 
-    drawAxises(p);
-    drawDots(p);
-    if (drawAreaSelection) {
-        drawSelection(p);
-    }
-    drawMiniMap(p);
-    if (drawRepeatSelection) {
-        drawNearestRepeat(p);
-    }
+        drawAxises(p);
+        drawDots(p);
+        if (drawAreaSelection) {
+            drawSelection(p);
+        }
+        drawMiniMap(p);
+        if (drawRepeatSelection) {
+            drawNearestRepeat(p);
+        }
 
-    p.translate(-textSpace, -textSpace);
-    drawRulers(p, rulerFontScale);
+        p.translate(-textSpace, -textSpace);
+        drawRulers(p, rulerFontScale);
 
-    p.restore();
+        p.restore();
 
-    if(hasFocus() && _drawFocus){
-        drawFocus(p);
+        if (hasFocus() && _drawFocus) {
+            drawFocus(p);
+        }
     }
-
 #define DP_MARGIN 2
 #define DP_EXIT_BUTTON_SIZE 20
     exitButton->setGeometry(width()- DP_MARGIN - DP_EXIT_BUTTON_SIZE, DP_MARGIN, DP_EXIT_BUTTON_SIZE, DP_EXIT_BUTTON_SIZE);
@@ -1135,7 +1140,6 @@ QString DotPlotWidget::getRoundedText(QPainter &p, int num, int size) const {
 }
 
 void DotPlotWidget::drawRulers(QPainter &p, qreal fontScale) const{
-
     GraphUtils::RulerConfig rConf;
 
     rConf.notchSize = rulerNotchSize;
@@ -1160,10 +1164,10 @@ void DotPlotWidget::drawRulers(QPainter &p, qreal fontScale) const{
 
         extraLen = QPoint(0.5*ratioX, 0.5*ratioY);
     }
-
+    
     GraphUtils::drawRuler(p, QPoint(textSpace + extraLen.x(), textSpace), w - 2*extraLen.x(), startX+1, endX, rulerFont, rConf);
 
-    rConf.direction = GraphUtils::TTB;
+    rConf.direction = GraphUtils::TopToBottom;
     rConf.textBorderEnd = 10;
     GraphUtils::drawRuler(p, QPoint(textSpace, textSpace + extraLen.y()), h - 2*extraLen.y(), startY+1, endY, rulerFont, rConf);
 }
@@ -1641,11 +1645,9 @@ QPoint DotPlotWidget::toInnerCoords(const QPoint &p) const {
 }
 
 void DotPlotWidget::paintEvent(QPaintEvent *e) {
-
-    QWidget::paintEvent(e);
-
     QPainter p(this);
     drawAll(p);
+    QWidget::paintEvent(e);
 }
 
 void DotPlotWidget::resizeEvent(QResizeEvent *e) {
@@ -2059,4 +2061,5 @@ void DotPlotWidget::clearRepeatSelection(){
     clearedByRepitSel = true;
     update();
 }
+
 } // namespace
diff --git a/src/plugins/dotplot/src/DotPlotWidget.h b/src/plugins/dotplot/src/DotPlotWidget.h
index fb9b52f..8378fdc 100644
--- a/src/plugins/dotplot/src/DotPlotWidget.h
+++ b/src/plugins/dotplot/src/DotPlotWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,15 +26,9 @@
 #include <U2View/PanView.h>
 #include <U2Core/U2Region.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QToolButton>
-#endif
-
-#include <QtCore/QTimer>
+#include <QMenu>
+#include <QToolButton>
+#include <QTimer>
 
 namespace U2 {
 
@@ -143,7 +137,7 @@ private:
     int minLen, identity;
 
     bool pixMapUpdateNeeded, deleteDotPlotFlag, filtration;
-    bool createDotPlot;
+    bool dotPlotIsCalculating;
 
     Task *dotPlotTask;
     QPixmap *pixMap;
@@ -156,10 +150,10 @@ private:
 
     QPointF clickedFirst, clickedSecond;
 
-    DotPlotResultsListener*         dpDirectResultListener;
-    DotPlotRevComplResultsListener* dpRevComplResultsListener;
-    QList<DotPlotResults>*          dpFilteredResults;
-    QList<DotPlotResults>*          dpFilteredResultsRevCompl;
+    DotPlotResultsListener*                 dpDirectResultListener;
+    DotPlotRevComplResultsListener*         dpRevComplResultsListener;
+    QSharedPointer< QList<DotPlotResults> > dpFilteredResults;
+    QSharedPointer< QList<DotPlotResults> > dpFilteredResultsRevCompl;
 
     QAction *showSettingsDialogAction;
     QAction *saveImageAction;
@@ -169,7 +163,6 @@ private:
     QAction *filterDotPlotAction;
 
     int textSpace;
-    static const int defaultTextSpace = 30;
     static const int rulerNotchSize = 2;
 
     int w;
diff --git a/src/plugins/dotplot/transl/english.ts b/src/plugins/dotplot/transl/english.ts
index ed40f61..42cba4b 100644
--- a/src/plugins/dotplot/transl/english.ts
+++ b/src/plugins/dotplot/transl/english.ts
@@ -232,32 +232,42 @@
 <context>
     <name>U2::DotPlotDialog</name>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="67"/>
+        <location filename="../src/DotPlotDialog.cpp" line="59"/>
+        <source>OK</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotDialog.cpp" line="60"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotDialog.cpp" line="70"/>
         <source>Auto</source>
         <translation>Auto</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="68"/>
+        <location filename="../src/DotPlotDialog.cpp" line="71"/>
         <source>Suffix index</source>
         <translation>Suffix index</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="69"/>
+        <location filename="../src/DotPlotDialog.cpp" line="72"/>
         <source>Diagonals</source>
         <translation>Diagonals</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="249"/>
+        <location filename="../src/DotPlotDialog.cpp" line="252"/>
         <source>Open file</source>
         <translation>Open file</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="307"/>
+        <location filename="../src/DotPlotDialog.cpp" line="310"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="307"/>
+        <location filename="../src/DotPlotDialog.cpp" line="310"/>
         <source>Error opening files</source>
         <translation>Error opening files</translation>
     </message>
@@ -312,12 +322,22 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotFilterDialog</name>
     <message>
-        <location filename="../src/DotPlotFilterDialog.cpp" line="144"/>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="51"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="52"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="145"/>
         <source>Feature names</source>
         <translation>Feature names</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotFilterDialog.cpp" line="144"/>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="145"/>
         <source>No feature names have been selected. In that case dotplot will be empty. Note, If the feature names list is empty your sequences don't have annotations. Select some feature names or choose another filtration method</source>
         <translation>No feature names have been selected. In that case dotplot will be empty. Note, If the feature names list is empty your sequences don't have annotations. Select some feature names or choose another filtration method</translation>
     </message>
@@ -325,7 +345,7 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotFilterTask</name>
     <message>
-        <location filename="../src/DotPlotTasks.cpp" line="319"/>
+        <location filename="../src/DotPlotTasks.cpp" line="323"/>
         <source>Applying filter to dotplot</source>
         <translation>Applying filter to dotplot</translation>
     </message>
@@ -354,25 +374,6 @@ Select valid file to build dotplot</source>
     </message>
 </context>
 <context>
-    <name>U2::DotPlotImageExportTaskFactory</name>
-    <message>
-        <source>Dotplot widget is NULL</source>
-        <translation type="obsolete">Dotplot widget is NULL</translation>
-    </message>
-    <message>
-        <source>DotPlot</source>
-        <translation type="obsolete">DotPlot</translation>
-    </message>
-    <message>
-        <source>Include area selection</source>
-        <translation type="obsolete">Include area selection</translation>
-    </message>
-    <message>
-        <source>Include repeat selection</source>
-        <translation type="obsolete">Include repeat selection</translation>
-    </message>
-</context>
-<context>
     <name>U2::DotPlotImageExportToBitmapTask</name>
     <message>
         <location filename="../src/DotPlotImageExportTask.cpp" line="48"/>
@@ -450,13 +451,13 @@ Select valid file to build dotplot</source>
     <message>
         <location filename="../src/DotPlotSplitter.cpp" line="293"/>
         <source>One of the sequences in dotplot is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>One of the sequences in dotplot is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::DotPlotViewAction</name>
     <message>
-        <location filename="../src/DotPlotPlugin.h" line="79"/>
+        <location filename="../src/DotPlotPlugin.h" line="82"/>
         <source>Show dot plot</source>
         <translation>Show dotplot</translation>
     </message>
@@ -465,17 +466,17 @@ Select valid file to build dotplot</source>
     <name>U2::DotPlotViewContext</name>
     <message>
         <location filename="../src/DotPlotPlugin.cpp" line="71"/>
-        <location filename="../src/DotPlotPlugin.cpp" line="220"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="222"/>
         <source>Build dotplot...</source>
         <translation>Build dotplot...</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotPlugin.cpp" line="90"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="91"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotPlugin.cpp" line="90"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="91"/>
         <source>Error opening files</source>
         <translation>Error opening files</translation>
     </message>
@@ -483,150 +484,165 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotWidget</name>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="127"/>
+        <location filename="../src/DotPlotWidget.cpp" line="120"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="130"/>
+        <location filename="../src/DotPlotWidget.cpp" line="123"/>
         <source>Save as image</source>
         <translation>Save as image</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="134"/>
+        <location filename="../src/DotPlotWidget.cpp" line="127"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="137"/>
+        <location filename="../src/DotPlotWidget.cpp" line="131"/>
         <source>Load</source>
         <translation>Load</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="140"/>
+        <location filename="../src/DotPlotWidget.cpp" line="134"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="144"/>
+        <location filename="../src/DotPlotWidget.cpp" line="138"/>
         <source>Filter Results</source>
         <translation>Filter Results</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="218"/>
+        <location filename="../src/DotPlotWidget.cpp" line="212"/>
         <source>Save/Load</source>
         <translation>Save/Load</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="400"/>
+        <location filename="../src/DotPlotWidget.cpp" line="394"/>
         <source>Too many results</source>
         <translation>Too many results</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="400"/>
+        <location filename="../src/DotPlotWidget.cpp" line="394"/>
         <source>Too many results. Try to increase minimum repeat length</source>
         <translation>Too many results. Try to increase minimum repeat length</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="545"/>
-        <location filename="../src/DotPlotWidget.cpp" line="605"/>
+        <location filename="../src/DotPlotWidget.cpp" line="549"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>File opening error</source>
         <translation>File opening error</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="545"/>
-        <location filename="../src/DotPlotWidget.cpp" line="605"/>
+        <location filename="../src/DotPlotWidget.cpp" line="549"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>Error opening file %1</source>
         <translation>Error opening file %1</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="553"/>
-        <location filename="../src/DotPlotWidget.cpp" line="586"/>
-        <location filename="../src/DotPlotWidget.cpp" line="653"/>
+        <location filename="../src/DotPlotWidget.cpp" line="557"/>
+        <location filename="../src/DotPlotWidget.cpp" line="590"/>
+        <location filename="../src/DotPlotWidget.cpp" line="657"/>
         <source>Task is already running</source>
         <translation>Task is already running</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="553"/>
-        <location filename="../src/DotPlotWidget.cpp" line="586"/>
-        <location filename="../src/DotPlotWidget.cpp" line="653"/>
+        <location filename="../src/DotPlotWidget.cpp" line="557"/>
+        <location filename="../src/DotPlotWidget.cpp" line="590"/>
+        <location filename="../src/DotPlotWidget.cpp" line="657"/>
         <source>Build or Load DotPlot task is already running</source>
         <translation>Build or Load DotPlot task is already running</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="609"/>
+        <location filename="../src/DotPlotWidget.cpp" line="613"/>
         <source>Sequences are different</source>
         <translation>Sequences are different</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="609"/>
+        <location filename="../src/DotPlotWidget.cpp" line="613"/>
         <source>Current and loading sequences are different. Continue loading dot-plot anyway?</source>
         <translation>Current and loading sequences are different. Continue loading dot-plot anyway?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="708"/>
-        <location filename="../src/DotPlotWidget.cpp" line="713"/>
+        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="717"/>
         <source>Invalid sequence</source>
         <translation>Invalid sequence</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="708"/>
+        <location filename="../src/DotPlotWidget.cpp" line="712"/>
         <source>First selected sequence is invalid</source>
         <translation>First selected sequence is invalid</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="713"/>
+        <location filename="../src/DotPlotWidget.cpp" line="717"/>
         <source>Second selected sequence is invalid</source>
         <translation>Second selected sequence is invalid</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="723"/>
+        <location filename="../src/DotPlotWidget.cpp" line="727"/>
         <source>Wrong alphabet types</source>
         <translation>Wrong alphabet types</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="723"/>
+        <location filename="../src/DotPlotWidget.cpp" line="727"/>
         <source>Both sequence must have the same alphabet</source>
         <translation>Both sequence must have the same alphabet</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="802"/>
+        <location filename="../src/DotPlotWidget.cpp" line="806"/>
         <source>Save dot-plot</source>
         <translation>Save dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="802"/>
+        <location filename="../src/DotPlotWidget.cpp" line="806"/>
         <source>Save dot-plot data before closing?</source>
         <translation>Save dotplot data before closing?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="948"/>
+        <location filename="../src/DotPlotWidget.cpp" line="952"/>
         <source>Invalid weight and height parameters!</source>
         <translation>Invalid weight and height parameters!</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="1042"/>
+        <location filename="../src/DotPlotWidget.cpp" line="1004"/>
+        <source>Dotplot is calculating...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="1052"/>
         <source> (min length %1, identity %2%)</source>
         <translation> (min length %1, identity %2%)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="216"/>
+        <location filename="../src/DotPlotWidget.cpp" line="210"/>
         <source>Dotplot</source>
         <translation>Dotplot</translation>
     </message>
     <message>
         <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <source>Error Saving Dotplot</source>
+        <translation>Error Saving Dotplot</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <source>The dotplot can't be saved as it is empty.</source>
+        <translation>The dotplot can't be saved as it is empty.</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="538"/>
         <source>Save Dotplot</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="534"/>
-        <location filename="../src/DotPlotWidget.cpp" line="579"/>
+        <location filename="../src/DotPlotWidget.cpp" line="538"/>
+        <location filename="../src/DotPlotWidget.cpp" line="583"/>
         <source>Dotplot files (*.dpt)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="579"/>
+        <location filename="../src/DotPlotWidget.cpp" line="583"/>
         <source>Load Dotplot</source>
         <translation></translation>
     </message>
@@ -639,7 +655,7 @@ Select valid file to build dotplot</source>
         <translation>Wrong dotplot format</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotTasks.h" line="71"/>
+        <location filename="../src/DotPlotTasks.h" line="89"/>
         <source>DotPlot loading</source>
         <translation>Dotplot loading</translation>
     </message>
@@ -647,7 +663,7 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::SaveDotPlotTask</name>
     <message>
-        <location filename="../src/DotPlotTasks.h" line="44"/>
+        <location filename="../src/DotPlotTasks.h" line="49"/>
         <source>DotPlot saving</source>
         <translation>Dotplot saving</translation>
     </message>
diff --git a/src/plugins/dotplot/transl/russian.ts b/src/plugins/dotplot/transl/russian.ts
index a8a581e..ea68873 100644
--- a/src/plugins/dotplot/transl/russian.ts
+++ b/src/plugins/dotplot/transl/russian.ts
@@ -232,32 +232,42 @@
 <context>
     <name>U2::DotPlotDialog</name>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="67"/>
+        <location filename="../src/DotPlotDialog.cpp" line="59"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotDialog.cpp" line="60"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotDialog.cpp" line="70"/>
         <source>Auto</source>
         <translation>Автовыбор</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="68"/>
+        <location filename="../src/DotPlotDialog.cpp" line="71"/>
         <source>Suffix index</source>
         <translation>Суффиксный индекс</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="69"/>
+        <location filename="../src/DotPlotDialog.cpp" line="72"/>
         <source>Diagonals</source>
         <translation>Диагональный</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="249"/>
+        <location filename="../src/DotPlotDialog.cpp" line="252"/>
         <source>Open file</source>
         <translation>Открыть файл</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="307"/>
+        <location filename="../src/DotPlotDialog.cpp" line="310"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotDialog.cpp" line="307"/>
+        <location filename="../src/DotPlotDialog.cpp" line="310"/>
         <source>Error opening files</source>
         <translation>Ошибка открытия файлов</translation>
     </message>
@@ -312,12 +322,22 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotFilterDialog</name>
     <message>
-        <location filename="../src/DotPlotFilterDialog.cpp" line="144"/>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="51"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="52"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="145"/>
         <source>Feature names</source>
         <translation>Имена аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotFilterDialog.cpp" line="144"/>
+        <location filename="../src/DotPlotFilterDialog.cpp" line="145"/>
         <source>No feature names have been selected. In that case dotplot will be empty. Note, If the feature names list is empty your sequences don't have annotations. Select some feature names or choose another filtration method</source>
         <translation>Имена аннотаций не были выбраны. В этом случае dotplot будет пустым. Если список аннотаций пустой, то ваши последовательности не содержат аннотации. Выберете несколько имен аннотаций или другой метод фильтрации</translation>
     </message>
@@ -325,7 +345,7 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotFilterTask</name>
     <message>
-        <location filename="../src/DotPlotTasks.cpp" line="319"/>
+        <location filename="../src/DotPlotTasks.cpp" line="323"/>
         <source>Applying filter to dotplot</source>
         <translation>Применение фильтра к dotplot</translation>
     </message>
@@ -354,25 +374,6 @@ Select valid file to build dotplot</source>
     </message>
 </context>
 <context>
-    <name>U2::DotPlotImageExportTaskFactory</name>
-    <message>
-        <source>Dotplot widget is NULL</source>
-        <translation type="obsolete">Dotplot widget is NULL</translation>
-    </message>
-    <message>
-        <source>DotPlot</source>
-        <translation type="obsolete">DotPlot</translation>
-    </message>
-    <message>
-        <source>Include area selection</source>
-        <translation type="obsolete">Включить область выделения</translation>
-    </message>
-    <message>
-        <source>Include repeat selection</source>
-        <translation type="obsolete">Включить повторяющиеся выделения</translation>
-    </message>
-</context>
-<context>
     <name>U2::DotPlotImageExportToBitmapTask</name>
     <message>
         <location filename="../src/DotPlotImageExportTask.cpp" line="48"/>
@@ -450,13 +451,13 @@ Select valid file to build dotplot</source>
     <message>
         <location filename="../src/DotPlotSplitter.cpp" line="293"/>
         <source>One of the sequences in dotplot is NULL</source>
-        <translation type="unfinished"></translation>
+        <translation>One of the sequences in dotplot is NULL</translation>
     </message>
 </context>
 <context>
     <name>U2::DotPlotViewAction</name>
     <message>
-        <location filename="../src/DotPlotPlugin.h" line="79"/>
+        <location filename="../src/DotPlotPlugin.h" line="82"/>
         <source>Show dot plot</source>
         <translation>Показать dotplot</translation>
     </message>
@@ -465,17 +466,17 @@ Select valid file to build dotplot</source>
     <name>U2::DotPlotViewContext</name>
     <message>
         <location filename="../src/DotPlotPlugin.cpp" line="71"/>
-        <location filename="../src/DotPlotPlugin.cpp" line="220"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="222"/>
         <source>Build dotplot...</source>
         <translation>Построение точечной диаграммы (dotplot)...</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotPlugin.cpp" line="90"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="91"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotPlugin.cpp" line="90"/>
+        <location filename="../src/DotPlotPlugin.cpp" line="91"/>
         <source>Error opening files</source>
         <translation>Ошибка открытия файлов</translation>
     </message>
@@ -483,150 +484,165 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::DotPlotWidget</name>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="127"/>
+        <location filename="../src/DotPlotWidget.cpp" line="120"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="130"/>
+        <location filename="../src/DotPlotWidget.cpp" line="123"/>
         <source>Save as image</source>
         <translation>Сохранить как изображение</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="134"/>
+        <location filename="../src/DotPlotWidget.cpp" line="127"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="137"/>
+        <location filename="../src/DotPlotWidget.cpp" line="131"/>
         <source>Load</source>
         <translation>Загрузить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="140"/>
+        <location filename="../src/DotPlotWidget.cpp" line="134"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="144"/>
+        <location filename="../src/DotPlotWidget.cpp" line="138"/>
         <source>Filter Results</source>
         <translation>Фильтрация результатов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="218"/>
+        <location filename="../src/DotPlotWidget.cpp" line="212"/>
         <source>Save/Load</source>
         <translation>Сохранить/Загрузить</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="400"/>
+        <location filename="../src/DotPlotWidget.cpp" line="394"/>
         <source>Too many results</source>
         <translation>Слишком много результатов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="400"/>
+        <location filename="../src/DotPlotWidget.cpp" line="394"/>
         <source>Too many results. Try to increase minimum repeat length</source>
         <translation>Слишком много результатов. Попробуйте уменьшить минимальную длину повтора</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="545"/>
-        <location filename="../src/DotPlotWidget.cpp" line="605"/>
+        <location filename="../src/DotPlotWidget.cpp" line="549"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>File opening error</source>
         <translation>Ошибка открытия файла</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="545"/>
-        <location filename="../src/DotPlotWidget.cpp" line="605"/>
+        <location filename="../src/DotPlotWidget.cpp" line="549"/>
+        <location filename="../src/DotPlotWidget.cpp" line="609"/>
         <source>Error opening file %1</source>
         <translation>Ошибка открытия файла %1</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="553"/>
-        <location filename="../src/DotPlotWidget.cpp" line="586"/>
-        <location filename="../src/DotPlotWidget.cpp" line="653"/>
+        <location filename="../src/DotPlotWidget.cpp" line="557"/>
+        <location filename="../src/DotPlotWidget.cpp" line="590"/>
+        <location filename="../src/DotPlotWidget.cpp" line="657"/>
         <source>Task is already running</source>
         <translation>Задача уже запущена</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="553"/>
-        <location filename="../src/DotPlotWidget.cpp" line="586"/>
-        <location filename="../src/DotPlotWidget.cpp" line="653"/>
+        <location filename="../src/DotPlotWidget.cpp" line="557"/>
+        <location filename="../src/DotPlotWidget.cpp" line="590"/>
+        <location filename="../src/DotPlotWidget.cpp" line="657"/>
         <source>Build or Load DotPlot task is already running</source>
         <translation>Задача построения или загрузки dotplot уже запущена</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="609"/>
+        <location filename="../src/DotPlotWidget.cpp" line="613"/>
         <source>Sequences are different</source>
         <translation>Последовательности отличаются</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="609"/>
+        <location filename="../src/DotPlotWidget.cpp" line="613"/>
         <source>Current and loading sequences are different. Continue loading dot-plot anyway?</source>
         <translation>Текущая и загружаемая последовательность различаются. Продолжить загрузку?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="708"/>
-        <location filename="../src/DotPlotWidget.cpp" line="713"/>
+        <location filename="../src/DotPlotWidget.cpp" line="712"/>
+        <location filename="../src/DotPlotWidget.cpp" line="717"/>
         <source>Invalid sequence</source>
         <translation>Некорректная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="708"/>
+        <location filename="../src/DotPlotWidget.cpp" line="712"/>
         <source>First selected sequence is invalid</source>
         <translation>Первая выделенная последовательность некорректна</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="713"/>
+        <location filename="../src/DotPlotWidget.cpp" line="717"/>
         <source>Second selected sequence is invalid</source>
         <translation>Вторая выделенная последовательность некорректна</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="723"/>
+        <location filename="../src/DotPlotWidget.cpp" line="727"/>
         <source>Wrong alphabet types</source>
         <translation>Неправильные типы алфавитов</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="723"/>
+        <location filename="../src/DotPlotWidget.cpp" line="727"/>
         <source>Both sequence must have the same alphabet</source>
         <translation>Обе последовательности должны иметь одинаковый алфавит</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="802"/>
+        <location filename="../src/DotPlotWidget.cpp" line="806"/>
         <source>Save dot-plot</source>
         <translation>Сохранить dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="802"/>
+        <location filename="../src/DotPlotWidget.cpp" line="806"/>
         <source>Save dot-plot data before closing?</source>
         <translation>Сохранить данные dotplot перед закрытием?</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="948"/>
+        <location filename="../src/DotPlotWidget.cpp" line="952"/>
         <source>Invalid weight and height parameters!</source>
         <translation>Некорректные параметры!</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="1042"/>
+        <location filename="../src/DotPlotWidget.cpp" line="1004"/>
+        <source>Dotplot is calculating...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="1052"/>
         <source> (min length %1, identity %2%)</source>
         <translation>(мин. длина %1, идентичность %2%)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="216"/>
+        <location filename="../src/DotPlotWidget.cpp" line="210"/>
         <source>Dotplot</source>
         <translation>Dotplot</translation>
     </message>
     <message>
         <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <source>Error Saving Dotplot</source>
+        <translation>Ошибка сохранения</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="534"/>
+        <source>The dotplot can't be saved as it is empty.</source>
+        <translation>Дотплот не может быть сохранён, т.к. он пуст.</translation>
+    </message>
+    <message>
+        <location filename="../src/DotPlotWidget.cpp" line="538"/>
         <source>Save Dotplot</source>
         <translation>Сохранить dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="534"/>
-        <location filename="../src/DotPlotWidget.cpp" line="579"/>
+        <location filename="../src/DotPlotWidget.cpp" line="538"/>
+        <location filename="../src/DotPlotWidget.cpp" line="583"/>
         <source>Dotplot files (*.dpt)</source>
         <translation>Файлы dotplot (*.dpt)</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotWidget.cpp" line="579"/>
+        <location filename="../src/DotPlotWidget.cpp" line="583"/>
         <source>Load Dotplot</source>
         <translation>Загрузить dotplot</translation>
     </message>
@@ -639,7 +655,7 @@ Select valid file to build dotplot</source>
         <translation>Неправильный формат файла dotplot</translation>
     </message>
     <message>
-        <location filename="../src/DotPlotTasks.h" line="71"/>
+        <location filename="../src/DotPlotTasks.h" line="89"/>
         <source>DotPlot loading</source>
         <translation>Dotplot загружается</translation>
     </message>
@@ -647,7 +663,7 @@ Select valid file to build dotplot</source>
 <context>
     <name>U2::SaveDotPlotTask</name>
     <message>
-        <location filename="../src/DotPlotTasks.h" line="44"/>
+        <location filename="../src/DotPlotTasks.h" line="49"/>
         <source>DotPlot saving</source>
         <translation>Dotplot сохраняется</translation>
     </message>
diff --git a/src/plugins/enzymes/src/CloningUtilTasks.cpp b/src/plugins/enzymes/src/CloningUtilTasks.cpp
index 07a03de..6c44b10 100644
--- a/src/plugins/enzymes/src/CloningUtilTasks.cpp
+++ b/src/plugins/enzymes/src/CloningUtilTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -660,7 +660,7 @@ void LigateFragmentsTask::createDocument(const QByteArray& seq, const QList<Shar
     resultDoc = df->createNewLoadedDocument(iof, cfg.docUrl, stateInfo);
     CHECK_OP(stateInfo,);
 
-    U2EntityRef seqRef = U2SequenceUtils::import(resultDoc->getDbiRef(), dna, stateInfo);
+    U2EntityRef seqRef = U2SequenceUtils::import(stateInfo, resultDoc->getDbiRef(), dna);
     CHECK_OP_EXT(stateInfo, delete resultDoc; resultDoc = NULL,);
 
     U2SequenceObject* dnaObj = new U2SequenceObject(seqName, seqRef);
diff --git a/src/plugins/enzymes/src/CloningUtilTasks.h b/src/plugins/enzymes/src/CloningUtilTasks.h
index 4e8417c..6d79f90 100644
--- a/src/plugins/enzymes/src/CloningUtilTasks.h
+++ b/src/plugins/enzymes/src/CloningUtilTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,9 +32,9 @@
 #include <U2Core/U2Region.h>
 #include <U2Core/GUrl.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtCore/QMutex>
+#include <QObject>
+#include <QList>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
index 4881184..7270625 100644
--- a/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,7 +47,9 @@ ConstructMoleculeDialog::ConstructMoleculeDialog(const QList<DNAFragment>& fragm
     fragments(fragmentList),
     saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223176");
+    new HelpButton(this, buttonBox, "20875080");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     tabWidget->setCurrentIndex(0);
     const QString coreLengthStr = ConstructMoleculeDialog::tr("core length");
@@ -192,10 +194,6 @@ void ConstructMoleculeDialog::sl_onRemoveButtonClicked()
 
 void ConstructMoleculeDialog::update()
 {
-    static const QString BLUNT(tr("Blunt"));
-    static const QString FWD(tr("Fwd"));
-    static const QString REV(tr("Rev"));
-
     molConstructWidget->clear();
 
     foreach (int index, selected ) {
@@ -207,18 +205,18 @@ void ConstructMoleculeDialog::update()
             if (fragment.getLeftTerminus().type == OVERHANG_TYPE_STICKY ){
                 newItem->setText(0, QString("%1 (%2)")
                     .arg(QString(fragment.getLeftTerminus().overhang))
-                    .arg(fragment.getLeftTerminus().isDirect ? FWD : REV) );
+                    .arg(fragment.getLeftTerminus().isDirect ? tr("Fwd") : tr("Rev")) );
             } else {
-                newItem->setText(0, BLUNT);
+                newItem->setText(0, tr("Blunt"));
             }
             newItem->setToolTip(0, tr("Left end"));
             newItem->setText(1, item->text());
             if (fragment.getRightTerminus().type == OVERHANG_TYPE_STICKY ) {
                 newItem->setText(2, QString("%1 (%2)")
                     .arg( QString(fragment.getRightTerminus().overhang) )
-                    .arg( fragment.getRightTerminus().isDirect ? FWD : REV ) );
+                    .arg( fragment.getRightTerminus().isDirect ? tr("Fwd") : tr("Rev") ) );
             } else {
-                newItem->setText(2, BLUNT);
+                newItem->setText(2, tr("Blunt"));
             }
             newItem->setToolTip(2, tr("Right end"));
             newItem->setCheckState(3, fragment.isInverted() ? Qt::Checked : Qt::Unchecked);
diff --git a/src/plugins/enzymes/src/ConstructMoleculeDialog.h b/src/plugins/enzymes/src/ConstructMoleculeDialog.h
index 5f54579..509c80c 100644
--- a/src/plugins/enzymes/src/ConstructMoleculeDialog.h
+++ b/src/plugins/enzymes/src/ConstructMoleculeDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/CreateFragmentDialog.cpp b/src/plugins/enzymes/src/CreateFragmentDialog.cpp
index 49d9a87..d405813 100644
--- a/src/plugins/enzymes/src/CreateFragmentDialog.cpp
+++ b/src/plugins/enzymes/src/CreateFragmentDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <QDir>
 #include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Algorithm/EnzymeModel.h>
 
@@ -39,17 +40,20 @@
 #include <U2Gui/HelpButton.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
 
 #include "CreateFragmentDialog.h"
 
 namespace U2 {
 
 CreateFragmentDialog::CreateFragmentDialog(ADVSequenceObjectContext* ctx,  QWidget* p)
-: QDialog(p)
+: QDialog(p), seqCtx(ctx)
 {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223175");
+    new HelpButton(this, buttonBox, "20875079");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     tabWidget->setCurrentIndex(0);
 
@@ -66,10 +70,12 @@ CreateFragmentDialog::CreateFragmentDialog(ADVSequenceObjectContext* ctx,  QWidg
 }
 
 CreateFragmentDialog::CreateFragmentDialog(U2SequenceObject* obj, const U2Region& region, QWidget* p)
-    : QDialog(p)
+    : QDialog(p), seqCtx(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223175");
+    new HelpButton(this, buttonBox, "20875079");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     seqObj = obj;
 
     QList<GObject*> aObjects = GObjectUtils::findAllObjects(UOF_LoadedOnly,GObjectTypes::ANNOTATION_TABLE);
@@ -166,6 +172,10 @@ void CreateFragmentDialog::accept()
     obj->addAnnotations(QList<SharedAnnotationData>() << ad, groupName);
     dnaFragment = DNAFragment(ad, seqObj, relatedAnnotations);
 
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(obj);
+    }
+
     QDialog::accept();
 }
 
@@ -182,6 +192,7 @@ void CreateFragmentDialog::setupAnnotationsWidget() {
     QVBoxLayout* l = new QVBoxLayout();
     l->setMargin(0);
     l->addWidget(caw);
+    l->addStretch();
     annotationsWidget->setLayout(l);
     annotationsWidget->setMinimumSize(caw->layout()->minimumSize());
 }
diff --git a/src/plugins/enzymes/src/CreateFragmentDialog.h b/src/plugins/enzymes/src/CreateFragmentDialog.h
index 4824862..ab63ee2 100644
--- a/src/plugins/enzymes/src/CreateFragmentDialog.h
+++ b/src/plugins/enzymes/src/CreateFragmentDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,13 +40,15 @@ public:
     virtual void accept();
     const DNAFragment& getFragment() { return dnaFragment; }
 private:
-    CreateAnnotationWidgetController* ac;
-    U2SequenceObject*  seqObj;
-    QList<AnnotationTableObject *> relatedAnnotations;
-    QSet<QString>  enzymesSelection;
     void setupAnnotationsWidget();
-    DNAFragment dnaFragment;
-    RegionSelector* rs;
+
+    CreateAnnotationWidgetController*   ac;
+    U2SequenceObject*                   seqObj;
+    QList<AnnotationTableObject *>      relatedAnnotations;
+    QSet<QString>                       enzymesSelection;
+    DNAFragment                         dnaFragment;
+    RegionSelector*                     rs;
+    ADVSequenceObjectContext*           seqCtx;
 };
 
 
diff --git a/src/plugins/enzymes/src/DNAFragment.cpp b/src/plugins/enzymes/src/DNAFragment.cpp
index 7c76495..eea8fd4 100644
--- a/src/plugins/enzymes/src/DNAFragment.cpp
+++ b/src/plugins/enzymes/src/DNAFragment.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/DNAFragment.h b/src/plugins/enzymes/src/DNAFragment.h
index 8b77054..1b68981 100644
--- a/src/plugins/enzymes/src/DNAFragment.h
+++ b/src/plugins/enzymes/src/DNAFragment.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_DNA_FRAGMENT_H_
 #define _U2_DNA_FRAGMENT_H_
 
-#include <QtCore/QList>
+#include <QList>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/U2Region.h>
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.cpp b/src/plugins/enzymes/src/DigestSequenceDialog.cpp
index bef9077..b8e32f6 100644
--- a/src/plugins/enzymes/src/DigestSequenceDialog.cpp
+++ b/src/plugins/enzymes/src/DigestSequenceDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
 
 #include "CloningUtilTasks.h"
 #include "DigestSequenceDialog.h"
@@ -58,7 +59,9 @@ DigestSequenceDialog::DigestSequenceDialog(ADVSequenceObjectContext* ctx, QWidge
     : QDialog(p),seqCtx(ctx), timer(NULL), animationCounter(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223174");
+    new HelpButton(this, buttonBox, "20875078");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     tabWidget->setCurrentIndex(0);
@@ -169,6 +172,9 @@ void DigestSequenceDialog::accept()
             cfg.conservedRegions.insertMulti(aName, region);
         }
     }
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(aObj);
+    }
 
     DigestSequenceTask* task = new DigestSequenceTask(dnaObj, sourceObj, aObj, cfg);
 
@@ -190,9 +196,10 @@ void DigestSequenceDialog::addAnnotationWidget()
     acm.data->name = ANNOTATION_GROUP_FRAGMENTS;
     ac = new CreateAnnotationWidgetController(acm, this);
     QWidget* caw = ac->getWidget();
-    QVBoxLayout* l = new QVBoxLayout(this);
+    QVBoxLayout* l = new QVBoxLayout();
     l->setMargin(0);
     l->addWidget(caw);
+    l->addStretch(1);
     annotationsArea->setLayout(l);
     annotationsArea->setMinimumSize(caw->layout()->minimumSize());
 }
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.h b/src/plugins/enzymes/src/DigestSequenceDialog.h
index 8ea8b41..4213da8 100644
--- a/src/plugins/enzymes/src/DigestSequenceDialog.h
+++ b/src/plugins/enzymes/src/DigestSequenceDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,9 @@
 #ifndef _U2_DIGEST_SEQUENCE_DIALOG_H_
 #define _U2_DIGEST_SEQUENCE_DIALOG_H_
 
-#include <QtCore/QTimer>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
+#include <QTimer>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
 
 #include <U2Algorithm/EnzymeModel.h>
 
diff --git a/src/plugins/enzymes/src/DigestSequenceDialog.ui b/src/plugins/enzymes/src/DigestSequenceDialog.ui
index 5b32f68..65e1523 100644
--- a/src/plugins/enzymes/src/DigestSequenceDialog.ui
+++ b/src/plugins/enzymes/src/DigestSequenceDialog.ui
@@ -191,19 +191,6 @@
          </item>
         </layout>
        </item>
-       <item row="2" column="0">
-        <spacer name="verticalSpacer_7">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>529</width>
-           <height>146</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
@@ -221,19 +208,6 @@
          </property>
         </widget>
        </item>
-       <item>
-        <spacer name="verticalSpacer">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>164</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
       </layout>
      </widget>
     </widget>
diff --git a/src/plugins/enzymes/src/EditFragmentDialog.cpp b/src/plugins/enzymes/src/EditFragmentDialog.cpp
index 64346b2..4f4c41a 100644
--- a/src/plugins/enzymes/src/EditFragmentDialog.cpp
+++ b/src/plugins/enzymes/src/EditFragmentDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtCore/QDir>
+#include <QMessageBox>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DNATranslation.h>
@@ -49,7 +44,9 @@ EditFragmentDialog::EditFragmentDialog( DNAFragment& fragment, QWidget* p )
 {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223181");
+    new HelpButton(this, buttonBox, "20875085");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     connect(lBluntButton, SIGNAL(toggled(bool)), SLOT(sl_onLeftBluntButtonToogled(bool)));
     connect(rBluntButton, SIGNAL(toggled(bool)), SLOT(sl_onRightBluntButtonToggled(bool)));
diff --git a/src/plugins/enzymes/src/EditFragmentDialog.h b/src/plugins/enzymes/src/EditFragmentDialog.h
index 658a40a..29ee056 100644
--- a/src/plugins/enzymes/src/EditFragmentDialog.h
+++ b/src/plugins/enzymes/src/EditFragmentDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/EnzymesIO.cpp b/src/plugins/enzymes/src/EnzymesIO.cpp
index beb1423..520c6ce 100644
--- a/src/plugins/enzymes/src/EnzymesIO.cpp
+++ b/src/plugins/enzymes/src/EnzymesIO.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Core/Settings.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/EnzymesIO.h b/src/plugins/enzymes/src/EnzymesIO.h
index 79ebe13..bc95d33 100644
--- a/src/plugins/enzymes/src/EnzymesIO.h
+++ b/src/plugins/enzymes/src/EnzymesIO.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,9 +26,9 @@
 
 #include <U2Core/Task.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtCore/QSet>
+#include <QObject>
+#include <QList>
+#include <QSet>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/EnzymesPlugin.cpp b/src/plugins/enzymes/src/EnzymesPlugin.cpp
index 9c7d2c9..2a537f3 100644
--- a/src/plugins/enzymes/src/EnzymesPlugin.cpp
+++ b/src/plugins/enzymes/src/EnzymesPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/EnzymesPlugin.h b/src/plugins/enzymes/src/EnzymesPlugin.h
index ce1446b..55ab75e 100644
--- a/src/plugins/enzymes/src/EnzymesPlugin.h
+++ b/src/plugins/enzymes/src/EnzymesPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/EnzymesQuery.cpp b/src/plugins/enzymes/src/EnzymesQuery.cpp
index 3b863d3..63ff1cb 100644
--- a/src/plugins/enzymes/src/EnzymesQuery.cpp
+++ b/src/plugins/enzymes/src/EnzymesQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,20 +27,15 @@
 #include <U2Core/Log.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include <U2Lang/BaseTypes.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QInputDialog>
-#else
-#include <QtWidgets/QInputDialog>
-#endif
+#include <QInputDialog>
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
 
-
 namespace U2 {
 
 /************************************************************************/
@@ -145,7 +140,9 @@ QString EnzymesSelectorDialogHandler::getSelectedString(QDialog* dlg) {
 EnzymesSelectorDialog::EnzymesSelectorDialog(EnzymesSelectorDialogHandler* parent)
 : factory(parent) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223166");
+    new HelpButton(this, buttonBox, "20875070");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     QVBoxLayout* vl = new QVBoxLayout();
     enzSel = new EnzymesSelectorWidget();
diff --git a/src/plugins/enzymes/src/EnzymesQuery.h b/src/plugins/enzymes/src/EnzymesQuery.h
index 102a981..0a1ab1b 100644
--- a/src/plugins/enzymes/src/EnzymesQuery.h
+++ b/src/plugins/enzymes/src/EnzymesQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/EnzymesTests.cpp b/src/plugins/enzymes/src/EnzymesTests.cpp
index c1dd824..56e980a 100644
--- a/src/plugins/enzymes/src/EnzymesTests.cpp
+++ b/src/plugins/enzymes/src/EnzymesTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include "EnzymesTests.h"
-
-#include "EnzymesIO.h"
-#include "FindEnzymesTask.h"
-#include "CloningUtilTasks.h"
+#include <QFileInfo>
+#include <QTemporaryFile>
 
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
@@ -35,6 +32,11 @@
 #include <U2Formats/GenbankLocationParser.h>
 #include <U2Formats/GenbankPlainTextFormat.h>
 
+#include "CloningUtilTasks.h"
+#include "EnzymesIO.h"
+#include "EnzymesTests.h"
+#include "FindEnzymesTask.h"
+
 namespace U2 {
 
 void GTest_FindEnzymes::init(XMLTestFormat *tf, const QDomElement& el) {
diff --git a/src/plugins/enzymes/src/EnzymesTests.h b/src/plugins/enzymes/src/EnzymesTests.h
index 29779f4..6b300fc 100644
--- a/src/plugins/enzymes/src/EnzymesTests.h
+++ b/src/plugins/enzymes/src/EnzymesTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/U2Region.h>
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtCore/QMultiMap>
-#include <QtXml/QDomElement>
+#include <QMultiMap>
+#include <QDomElement>
 
 #include "DNAFragment.h"
 
diff --git a/src/plugins/enzymes/src/FindEnzymesAlgorithm.h b/src/plugins/enzymes/src/FindEnzymesAlgorithm.h
index 22b5007..d8f5dde 100644
--- a/src/plugins/enzymes/src/FindEnzymesAlgorithm.h
+++ b/src/plugins/enzymes/src/FindEnzymesAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,8 +34,8 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/AppContext.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QList>
+#include <QObject>
+#include <QList>
 
 namespace U2 {
 
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.cpp b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
index ad8e900..ac0277e 100644
--- a/src/plugins/enzymes/src/FindEnzymesDialog.cpp
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,9 +47,9 @@
 
 #include <U2Formats/GenbankLocationParser.h>
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
-#include <QtCore/QTextStream>
+#include <QCoreApplication>
+#include <QDir>
+#include <QTextStream>
 #include <QVBoxLayout>
 #include <QTreeWidget>
 #include <QMessageBox>
@@ -516,7 +516,9 @@ void EnzymesSelectorWidget::sl_saveEnzymesFile()
 FindEnzymesDialog::FindEnzymesDialog(ADVSequenceObjectContext* sctx)
 : QDialog(sctx->getAnnotatedDNAView()->getWidget()), seqCtx(sctx) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223166");
+    new HelpButton(this, buttonBox, "20875070");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     maxHitSB->setMaximum(INT_MAX);
     minHitSB->setMaximum(INT_MAX);
diff --git a/src/plugins/enzymes/src/FindEnzymesDialog.h b/src/plugins/enzymes/src/FindEnzymesDialog.h
index 893d0ca..119bd95 100644
--- a/src/plugins/enzymes/src/FindEnzymesDialog.h
+++ b/src/plugins/enzymes/src/FindEnzymesDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/FindEnzymesTask.cpp b/src/plugins/enzymes/src/FindEnzymesTask.cpp
index 49eb053..5f27d0d 100644
--- a/src/plugins/enzymes/src/FindEnzymesTask.cpp
+++ b/src/plugins/enzymes/src/FindEnzymesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/enzymes/src/FindEnzymesTask.h b/src/plugins/enzymes/src/FindEnzymesTask.h
index 87988ab..600d8d9 100644
--- a/src/plugins/enzymes/src/FindEnzymesTask.h
+++ b/src/plugins/enzymes/src/FindEnzymesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <limits>
 
-#include <QtCore/QList>
-#include <QtCore/QMutex>
-#include <QtCore/QObject>
+#include <QList>
+#include <QMutex>
+#include <QObject>
 
 #include <U2Algorithm/EnzymeModel.h>
 
diff --git a/src/plugins/enzymes/transl/english.ts b/src/plugins/enzymes/transl/english.ts
index 956b7a6..9cf5384 100644
--- a/src/plugins/enzymes/transl/english.ts
+++ b/src/plugins/enzymes/transl/english.ts
@@ -14,10 +14,6 @@
         <translation>Construction</translation>
     </message>
     <message>
-        <source>Available fragments:</source>
-        <translation type="vanished">Available fragments:</translation>
-    </message>
-    <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="57"/>
         <source>Fragments available from active project</source>
         <translation>Fragments available from active project</translation>
@@ -130,7 +126,7 @@
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="258"/>
         <source>Make circular</source>
-        <translation type="unfinished"></translation>
+        <translation>Make circular</translation>
     </message>
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="236"/>
@@ -140,7 +136,7 @@
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="42"/>
         <source>Available fragments (core length - length without sticky ends):</source>
-        <translation type="unfinished"></translation>
+        <translation>Available fragments (core length - length without sticky ends):</translation>
     </message>
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="191"/>
@@ -153,10 +149,6 @@
         <translation>Circulirize result molecule</translation>
     </message>
     <message>
-        <source>Make circlurar</source>
-        <translation type="vanished">Make circlurar</translation>
-    </message>
-    <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="266"/>
         <source>Output</source>
         <translation>Output</translation>
@@ -303,22 +295,22 @@
         <translation>Remove All</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="211"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="198"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="244"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="218"/>
         <source>Use this option to treat the molecule as circular</source>
         <translation>Use this option to treat the molecule as circular</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="247"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="221"/>
         <source>Circular molecule</source>
         <translation>Circular molecule</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="254"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="228"/>
         <source><hint label></source>
         <translation><hint label></translation>
     </message>
@@ -567,15 +559,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/FindEnzymesDialog.ui" line="118"/>
         <source>Search  in:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Enzymes must not cut in the following region</source>
-        <translation type="vanished">Enzymes must not cut in the following region</translation>
-    </message>
-    <message>
-        <source>Exclude region:</source>
-        <translation type="vanished">Exclude region:</translation>
+        <translation>Search  in:</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesDialog.ui" line="128"/>
@@ -586,12 +570,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="53"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="54"/>
         <source>The restrictions sites are being updated. Please wait</source>
         <translation>The restrictions sites are being updated. Please wait</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="54"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="55"/>
         <source>Hint: there are no available enzymes. Use "Analyze->Find Restrictions Sites" feature to find them.</source>
         <translation>Hint: there are no available enzymes. Use "Analyze->Find Restrictions Sites" feature to find them.</translation>
     </message>
@@ -599,63 +583,72 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::ConstructMoleculeDialog</name>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="89"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="91"/>
         <source>No fragments are selected!
  Please construct molecule from available fragments.</source>
         <translation>No fragments are selected!
  Please construct molecule from available fragments.</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="287"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="285"/>
         <source>Set new molecule file name</source>
         <translation>Set new molecule file name</translation>
     </message>
     <message>
-        <source>Genbank (*.gb )</source>
-        <translation type="vanished">Genbank (*.gb )</translation>
-    </message>
-    <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="53"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="55"/>
         <source>core length</source>
-        <translation type="unfinished"></translation>
+        <translation>core length</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="195"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="210"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="219"/>
         <source>Blunt</source>
         <translation>Blunt</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="196"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="208"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="217"/>
         <source>Fwd</source>
         <translation>Fwd</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="197"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="51"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="52"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="208"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="217"/>
         <source>Rev</source>
         <translation>Rev</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="214"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="212"/>
         <source>Left end</source>
         <translation>Left end</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="221"/>
         <source>Right end</source>
         <translation>Right end</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="225"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>yes</source>
         <translation>yes</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="225"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>no</source>
         <translation>no</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="226"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="224"/>
         <source>Make fragment reverse complement</source>
         <translation>Make fragment reverse complement</translation>
     </message>
@@ -663,30 +656,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateFragmentDialog</name>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="100"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="55"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="77"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateFragmentDialog.cpp" line="56"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="78"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateFragmentDialog.cpp" line="106"/>
         <source>Left end contains unsupported symbols!</source>
         <translation>Left end contains unsupported symbols!</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="110"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="116"/>
         <source>Right end contains unsupported symbols!</source>
         <translation>Right end contains unsupported symbols!</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="121"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="127"/>
         <source>Invalid fragment region!
 Choose another region.</source>
         <translation>Invalid fragment region!
 Choose another region.</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="126"/>
-        <location filename="../src/CreateFragmentDialog.cpp" line="131"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="132"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="137"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="131"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="137"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -694,37 +699,47 @@ Choose another region.</translation>
 <context>
     <name>U2::DigestSequenceDialog</name>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="123"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="63"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DigestSequenceDialog.cpp" line="64"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/DigestSequenceDialog.cpp" line="126"/>
         <source>No enzymes are selected! Please select enzymes.</source>
         <translation>No enzymes are selected! Please select enzymes.</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="129"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="132"/>
         <source>Cannot load enzymes library</source>
         <translation>Cannot load enzymes library</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="147"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="150"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="147"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="150"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="243"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="250"/>
         <source> : %1 cut(s)</source>
         <translation> : %1 cut(s)</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="327"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="334"/>
         <source>Auto-annotations update task is NULL.</source>
         <translation>Auto-annotations update task is NULL.</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="349"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="356"/>
         <source>Select annotations</source>
         <translation>Select annotations</translation>
     </message>
@@ -775,42 +790,52 @@ Choose another region.</translation>
 <context>
     <name>U2::EditFragmentDialog</name>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="137"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="48"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EditFragmentDialog.cpp" line="49"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/EditFragmentDialog.cpp" line="134"/>
         <source>Left overhang is empty. Please enter the overhang or set blunt left end.</source>
         <translation>Left overhang is empty. Please enter the overhang or set blunt left end.</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="141"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="138"/>
         <source>Invalid left overhang: unsupported alphabet!</source>
         <translation>Invalid left overhang: unsupported alphabet!</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="161"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="158"/>
         <source>Right overhang is empty. Please enter the overhang or set blunt right end.</source>
         <translation>Right overhang is empty. Please enter the overhang or set blunt right end.</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="165"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="162"/>
         <source>Invalid right overhang: unsupported alphabet!</source>
         <translation>Invalid right overhang: unsupported alphabet!</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="186"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="183"/>
         <source> (INVERTED)</source>
         <translation> (INVERTED)</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="188"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="185"/>
         <source>Fragment of %1%2<br></source>
         <translation>Fragment of %1%2<br></translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="203"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="200"/>
         <source><tr> <td align="center"> 5' </td><td></td> <td align="center"> 3' </td> </tr></source>
         <translation><tr> <td align="center"> 5' </td><td></td> <td align="center"> 3' </td> </tr></translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="209"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="206"/>
         <source><tr> <td align="center"> 3' </td><td></td> <td align="center"> 5' </td> </tr></source>
         <translation><tr> <td align="center"> 3' </td><td></td> <td align="center"> 5' </td> </tr></translation>
     </message>
@@ -943,6 +968,19 @@ To start ligation create a project or open an existing.</translation>
     </message>
 </context>
 <context>
+    <name>U2::EnzymesSelectorDialog</name>
+    <message>
+        <location filename="../src/EnzymesQuery.cpp" line="144"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EnzymesQuery.cpp" line="145"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::EnzymesSelectorWidget</name>
     <message>
         <location filename="../src/FindEnzymesDialog.cpp" line="153"/>
@@ -1056,31 +1094,37 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::FindEnzymesDialog</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="550"/>
-        <source>Total number of enzymes: %1, selected %2</source>
-        <translation>Total number of enzymes: %1, selected %2</translation>
+        <location filename="../src/FindEnzymesDialog.cpp" line="520"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="521"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
     </message>
     <message>
-        <source><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation type="vanished"><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></translation>
+        <location filename="../src/FindEnzymesDialog.cpp" line="552"/>
+        <source>Total number of enzymes: %1, selected %2</source>
+        <translation>Total number of enzymes: %1, selected %2</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="557"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="559"/>
         <source>Invalid 'Search' region!</source>
-        <translation type="unfinished"></translation>
+        <translation>Invalid 'Search' region!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="566"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="568"/>
         <source><html><body align="center">No enzymes are selected! Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><body align="center">No enzymes are selected! Do you want to turn off <br>enzymes annotations highlighting?</body></html></translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="589"/>
         <source>Error!</source>
         <translation>Error!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="589"/>
         <source>Minimum hit value must be lesser or equal then maximum!</source>
         <translation>Minimum hit value must be lesser or equal then maximum!</translation>
     </message>
@@ -1095,7 +1139,7 @@ To start ligation create a project or open an existing.</translation>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="117"/>
         <source>Alphabet is not nucleic.</source>
-        <translation type="unfinished"></translation>
+        <translation>Alphabet is not nucleic.</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="138"/>
@@ -1142,7 +1186,7 @@ To start ligation create a project or open an existing.</translation>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="243"/>
         <source>Alphabet is not nucleic.</source>
-        <translation type="unfinished"></translation>
+        <translation>Alphabet is not nucleic.</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="260"/>
@@ -1199,42 +1243,42 @@ To start ligation create a project or open an existing.</translation>
 <context>
     <name>U2::QDEnzymesActor</name>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="62"/>
+        <location filename="../src/EnzymesQuery.cpp" line="57"/>
         <source>Find enzymes</source>
         <translation>Find enzymes</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="71"/>
+        <location filename="../src/EnzymesQuery.cpp" line="66"/>
         <source>Enzymes query</source>
         <translation>Enzymes query</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="115"/>
+        <location filename="../src/EnzymesQuery.cpp" line="110"/>
         <source>Restriction Sites</source>
         <translation>Restriction Sites</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="116"/>
+        <location filename="../src/EnzymesQuery.cpp" line="111"/>
         <source>Finds restriction cut sites in supplied DNA sequence.</source>
         <translation>Finds restriction cut sites in supplied DNA sequence.</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="118"/>
+        <location filename="../src/EnzymesQuery.cpp" line="113"/>
         <source>Enzymes</source>
         <translation>Enzymes</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="118"/>
+        <location filename="../src/EnzymesQuery.cpp" line="113"/>
         <source>Restriction enzymes used to recognize the restriction sites.</source>
         <translation>Restriction enzymes used to recognize the restriction sites.</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="119"/>
+        <location filename="../src/EnzymesQuery.cpp" line="114"/>
         <source>Circular</source>
         <translation>Circular</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="119"/>
+        <location filename="../src/EnzymesQuery.cpp" line="114"/>
         <source>If <i>True</i> considers the sequence circular. That allows to search for restriction sites between the end and the beginning of the sequence.</source>
         <translation>If <i>True</i> considers the sequence circular. That allows to search for restriction sites between the end and the beginning of the sequence.</translation>
     </message>
diff --git a/src/plugins/enzymes/transl/russian.ts b/src/plugins/enzymes/transl/russian.ts
index 1ef8b8c..54903f2 100644
--- a/src/plugins/enzymes/transl/russian.ts
+++ b/src/plugins/enzymes/transl/russian.ts
@@ -14,10 +14,6 @@
         <translation>Создание молекулы</translation>
     </message>
     <message>
-        <source>Available fragments:</source>
-        <translation type="vanished">Доступные фрагменты:</translation>
-    </message>
-    <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="57"/>
         <source>Fragments available from active project</source>
         <translation>Фрагменты доступные из активного проекта</translation>
@@ -130,7 +126,7 @@
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="258"/>
         <source>Make circular</source>
-        <translation type="unfinished"></translation>
+        <translation>Сделать круговой</translation>
     </message>
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="236"/>
@@ -140,7 +136,7 @@
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="42"/>
         <source>Available fragments (core length - length without sticky ends):</source>
-        <translation type="unfinished"></translation>
+        <translation>Доступные фрагменты:</translation>
     </message>
     <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="191"/>
@@ -153,10 +149,6 @@
         <translation>Сделать создаваемую молекулу круговой</translation>
     </message>
     <message>
-        <source>Make circlurar</source>
-        <translation type="vanished">Круговая молекула</translation>
-    </message>
-    <message>
         <location filename="../src/ConstructMoleculeDialog.ui" line="266"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
@@ -214,7 +206,7 @@
     <message>
         <location filename="../src/CreateFragmentDialog.ui" line="81"/>
         <source>Include Right Overhang</source>
-        <translation>Доавить правый выступ</translation>
+        <translation>Добавить правый выступ</translation>
     </message>
     <message>
         <location filename="../src/CreateFragmentDialog.ui" line="143"/>
@@ -302,22 +294,22 @@
         <translation>Удалить все</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="211"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="198"/>
         <source>Output</source>
         <translation>Выходные параметры</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="244"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="218"/>
         <source>Use this option to treat the molecule as circular</source>
         <translation>Используйте эту опцию, чтобы использовать молекулу как круговую</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="247"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="221"/>
         <source>Circular molecule</source>
         <translation>Круговая молекула</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.ui" line="254"/>
+        <location filename="../src/DigestSequenceDialog.ui" line="228"/>
         <source><hint label></source>
         <translation><hint label></translation>
     </message>
@@ -566,15 +558,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/FindEnzymesDialog.ui" line="118"/>
         <source>Search  in:</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <source>Enzymes must not cut in the following region</source>
-        <translation type="vanished">Ферменты не должны "разрезать" данный регион</translation>
-    </message>
-    <message>
-        <source>Exclude region:</source>
-        <translation type="vanished">Исключить регион:</translation>
+        <translation>Поиск в:</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesDialog.ui" line="128"/>
@@ -585,75 +569,84 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="53"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="54"/>
         <source>The restrictions sites are being updated. Please wait</source>
         <translation>Сайты рестрикции обновляются. Пожалуйста подождите</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="54"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="55"/>
         <source>Hint: there are no available enzymes. Use "Analyze->Find Restrictions Sites" feature to find them.</source>
-        <translation>Подсказака: сайты рестрикции не найдены. Используйте опцию "Анализ->Найти сайты рестрикции" чтобы  поменять настройки алгоритма.</translation>
+        <translation>Подсказка: сайты рестрикции не найдены. Используйте опцию "Анализ->Найти сайты рестрикции" чтобы  поменять настройки алгоритма.</translation>
     </message>
 </context>
 <context>
     <name>U2::ConstructMoleculeDialog</name>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="89"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="91"/>
         <source>No fragments are selected!
  Please construct molecule from available fragments.</source>
         <translation>Выберите фрагменты, составляющие новую молекулу.</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="287"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="285"/>
         <source>Set new molecule file name</source>
         <translation>Задайте имя файла</translation>
     </message>
     <message>
-        <source>Genbank (*.gb )</source>
-        <translation type="vanished">Genbank (*.gb )</translation>
-    </message>
-    <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="53"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="55"/>
         <source>core length</source>
-        <translation type="unfinished"></translation>
+        <translation>длина ядра</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="195"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="210"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="219"/>
         <source>Blunt</source>
         <translation>"Срез"</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="196"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="208"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="217"/>
         <source>Fwd</source>
         <translation>Прям</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="197"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="51"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="52"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="208"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="217"/>
         <source>Rev</source>
         <translation>Обр</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="214"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="212"/>
         <source>Left end</source>
         <translation>Левый конец</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="221"/>
         <source>Right end</source>
         <translation>Правый конец</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="225"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>yes</source>
         <translation>да</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="225"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="223"/>
         <source>no</source>
         <translation>нет</translation>
     </message>
     <message>
-        <location filename="../src/ConstructMoleculeDialog.cpp" line="226"/>
+        <location filename="../src/ConstructMoleculeDialog.cpp" line="224"/>
         <source>Make fragment reverse complement</source>
         <translation>Сделать фрагмент обратно-комплементарным</translation>
     </message>
@@ -661,30 +654,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateFragmentDialog</name>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="100"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="55"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="77"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateFragmentDialog.cpp" line="56"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="78"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateFragmentDialog.cpp" line="106"/>
         <source>Left end contains unsupported symbols!</source>
         <translation>Левый конец содержит неподдерживаемые символы!</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="110"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="116"/>
         <source>Right end contains unsupported symbols!</source>
         <translation>Правый конец содержит неподдерживаемые символы!</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="121"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="127"/>
         <source>Invalid fragment region!
 Choose another region.</source>
         <translation>Invalid fragment region!
 Choose another region.</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="126"/>
-        <location filename="../src/CreateFragmentDialog.cpp" line="131"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="132"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="137"/>
         <source>Error</source>
         <translation>Проблема</translation>
     </message>
     <message>
-        <location filename="../src/CreateFragmentDialog.cpp" line="131"/>
+        <location filename="../src/CreateFragmentDialog.cpp" line="137"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -692,37 +697,47 @@ Choose another region.</translation>
 <context>
     <name>U2::DigestSequenceDialog</name>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="123"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="63"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DigestSequenceDialog.cpp" line="64"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/DigestSequenceDialog.cpp" line="126"/>
         <source>No enzymes are selected! Please select enzymes.</source>
         <translation>Необходимо выбрать ферменты рестрикции.</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="129"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="132"/>
         <source>Cannot load enzymes library</source>
         <translation>Невозможно загрузить библиотеку ферментов</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="147"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="150"/>
         <source>Error</source>
         <translation>Проблема</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="147"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="150"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="243"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="250"/>
         <source> : %1 cut(s)</source>
         <translation> : %1 разрез(ов)</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="327"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="334"/>
         <source>Auto-annotations update task is NULL.</source>
         <translation>Auto-annotations update task is NULL.</translation>
     </message>
     <message>
-        <location filename="../src/DigestSequenceDialog.cpp" line="349"/>
+        <location filename="../src/DigestSequenceDialog.cpp" line="356"/>
         <source>Select annotations</source>
         <translation>Выделить аннотации</translation>
     </message>
@@ -773,42 +788,52 @@ Choose another region.</translation>
 <context>
     <name>U2::EditFragmentDialog</name>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="137"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="48"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EditFragmentDialog.cpp" line="49"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/EditFragmentDialog.cpp" line="134"/>
         <source>Left overhang is empty. Please enter the overhang or set blunt left end.</source>
         <translation>Левый выступ не задан. Задайте выступ или уставновите срез.</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="141"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="138"/>
         <source>Invalid left overhang: unsupported alphabet!</source>
         <translation>Недопустимое левый конец: неподдерживаемый алфавит!</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="161"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="158"/>
         <source>Right overhang is empty. Please enter the overhang or set blunt right end.</source>
         <translation>Правый выступ не задан. Задайте выступ или уставновите срез.</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="165"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="162"/>
         <source>Invalid right overhang: unsupported alphabet!</source>
         <translation>Недопустимое правый конец: неподдерживаемый алфавит!</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="186"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="183"/>
         <source> (INVERTED)</source>
         <translation> (ИНВЕРТИРОВАН)</translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="188"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="185"/>
         <source>Fragment of %1%2<br></source>
         <translation>Фрагмент %1%2<br></translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="203"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="200"/>
         <source><tr> <td align="center"> 5' </td><td></td> <td align="center"> 3' </td> </tr></source>
         <translation><tr> <td align="center"> 5' </td><td></td> <td align="center"> 3' </td> </tr></translation>
     </message>
     <message>
-        <location filename="../src/EditFragmentDialog.cpp" line="209"/>
+        <location filename="../src/EditFragmentDialog.cpp" line="206"/>
         <source><tr> <td align="center"> 3' </td><td></td> <td align="center"> 5' </td> </tr></source>
         <translation><tr> <td align="center"> 3' </td><td></td> <td align="center"> 5' </td> </tr></translation>
     </message>
@@ -937,6 +962,19 @@ To start ligation create a project or open an existing.</source>
     </message>
 </context>
 <context>
+    <name>U2::EnzymesSelectorDialog</name>
+    <message>
+        <location filename="../src/EnzymesQuery.cpp" line="144"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/EnzymesQuery.cpp" line="145"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::EnzymesSelectorWidget</name>
     <message>
         <location filename="../src/FindEnzymesDialog.cpp" line="153"/>
@@ -1050,31 +1088,37 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::FindEnzymesDialog</name>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="550"/>
-        <source>Total number of enzymes: %1, selected %2</source>
-        <translation>Число ферментов в базе: %1, выбрано %2</translation>
+        <location filename="../src/FindEnzymesDialog.cpp" line="520"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/FindEnzymesDialog.cpp" line="521"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
     </message>
     <message>
-        <source><html><body align="center">No enzymes are selected!                Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation type="vanished"><html><body align="center">Ферменты не выбраны!                Отключить <br>подсветку аннотаций ферментов?</body></html></translation>
+        <location filename="../src/FindEnzymesDialog.cpp" line="552"/>
+        <source>Total number of enzymes: %1, selected %2</source>
+        <translation>Число ферментов в базе: %1, выбрано %2</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="557"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="559"/>
         <source>Invalid 'Search' region!</source>
-        <translation type="unfinished"></translation>
+        <translation>Invalid 'Search' region!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="566"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="568"/>
         <source><html><body align="center">No enzymes are selected! Do you want to turn off <br>enzymes annotations highlighting?</body></html></source>
-        <translation type="unfinished"></translation>
+        <translation><html><body align="center">No enzymes are selected! Do you want to turn off <br>enzymes annotations highlighting?</body></html></translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="589"/>
         <source>Error!</source>
         <translation>Проблема!</translation>
     </message>
     <message>
-        <location filename="../src/FindEnzymesDialog.cpp" line="587"/>
+        <location filename="../src/FindEnzymesDialog.cpp" line="589"/>
         <source>Minimum hit value must be lesser or equal then maximum!</source>
         <translation>Минимальное значение должно быть меньше либо равно максимального!</translation>
     </message>
@@ -1089,7 +1133,7 @@ To start ligation create a project or open an existing.</source>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="117"/>
         <source>Alphabet is not nucleic.</source>
-        <translation type="unfinished"></translation>
+        <translation>Алфавит не является нуклеотидным.</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="138"/>
@@ -1136,7 +1180,7 @@ To start ligation create a project or open an existing.</source>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="243"/>
         <source>Alphabet is not nucleic.</source>
-        <translation type="unfinished"></translation>
+        <translation>Алфавит не является нуклеотидным.</translation>
     </message>
     <message>
         <location filename="../src/FindEnzymesTask.cpp" line="260"/>
@@ -1193,42 +1237,42 @@ To start ligation create a project or open an existing.</source>
 <context>
     <name>U2::QDEnzymesActor</name>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="62"/>
+        <location filename="../src/EnzymesQuery.cpp" line="57"/>
         <source>Find enzymes</source>
         <translation>Найти ферменты рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="71"/>
+        <location filename="../src/EnzymesQuery.cpp" line="66"/>
         <source>Enzymes query</source>
         <translation>Запрос ферментов рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="115"/>
+        <location filename="../src/EnzymesQuery.cpp" line="110"/>
         <source>Restriction Sites</source>
         <translation>Сайты Рестрикции</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="116"/>
+        <location filename="../src/EnzymesQuery.cpp" line="111"/>
         <source>Finds restriction cut sites in supplied DNA sequence.</source>
         <translation>Найти сайты рестррикции в приведенной последовательности ДНК.</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="118"/>
+        <location filename="../src/EnzymesQuery.cpp" line="113"/>
         <source>Enzymes</source>
         <translation>Ферменты</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="118"/>
+        <location filename="../src/EnzymesQuery.cpp" line="113"/>
         <source>Restriction enzymes used to recognize the restriction sites.</source>
         <translation>Рестрикционный анализ используется для выявления сайтов рестрикции.</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="119"/>
+        <location filename="../src/EnzymesQuery.cpp" line="114"/>
         <source>Circular</source>
         <translation>Круговые</translation>
     </message>
     <message>
-        <location filename="../src/EnzymesQuery.cpp" line="119"/>
+        <location filename="../src/EnzymesQuery.cpp" line="114"/>
         <source>If <i>True</i> considers the sequence circular. That allows to search for restriction sites between the end and the beginning of the sequence.</source>
         <translation>Если<i>Истина</i> то последовательность рассматривается как круговая. Сайты будут искаться между началом и концом последовательности.</translation>
     </message>
diff --git a/src/plugins/external_tool_support/external_tool_support.pro b/src/plugins/external_tool_support/external_tool_support.pro
index 7b59d6d..09d5728 100644
--- a/src/plugins/external_tool_support/external_tool_support.pro
+++ b/src/plugins/external_tool_support/external_tool_support.pro
@@ -23,6 +23,9 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/blast/FormatDBSupport.h \
            src/blast/FormatDBSupportRunDialog.h \
            src/blast/FormatDBSupportTask.h \
+           src/blast/PrepareInputFastaFilesTask.h \
+           src/blast_plus/AlignToReferenceBlastDialog.h \
+           src/blast_plus/AlignToReferenceBlastWorker.h \
            src/blast_plus/BlastDBCmdDialog.h \
            src/blast_plus/BlastDBCmdSupport.h \
            src/blast_plus/BlastDBCmdSupportTask.h \
@@ -36,6 +39,11 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/blast_plus/RPSBlastSupportTask.h \
            src/blast_plus/TBlastNPlusSupportTask.h \
            src/blast_plus/TBlastXPlusSupportTask.h \
+           src/blast_plus/align_worker_subtasks/BlastReadsSubTask.h \
+           src/blast_plus/align_worker_subtasks/ComposeResultSubTask.h \
+           src/blast_plus/align_worker_subtasks/FormatDBSubTask.h \
+           src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.h \
+           src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.h \
            src/bowtie/bowtie_tests/bowtieTests.h \
            src/bowtie/BowtieSettingsWidget.h \
            src/bowtie/BowtieSupport.h \
@@ -96,16 +104,20 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/hmmer/HmmerBuildFromMsaTask.h \
            src/hmmer/HmmerBuildSettings.h \
            src/hmmer/HmmerBuildTask.h \
+           src/hmmer/HmmerBuildTaskTest.h \
            src/hmmer/HmmerBuildWorker.h \
            src/hmmer/HmmerParseSearchResultsTask.h \
            src/hmmer/HmmerSearchDialog.h \
            src/hmmer/HmmerSearchSettings.h \
            src/hmmer/HmmerSearchTask.h \
+           src/hmmer/HmmerSearchTaskTest.h \
            src/hmmer/HmmerSearchWorker.h \
            src/hmmer/HmmerSupport.h \
+           src/hmmer/HmmerTests.h \
            src/hmmer/PhmmerSearchDialog.h \
            src/hmmer/PhmmerSearchSettings.h \
            src/hmmer/PhmmerSearchTask.h \
+           src/hmmer/PhmmerSearchTaskTest.h \
            src/java/JavaSupport.h \
            src/macs/MACSSettings.h \
            src/macs/MACSSupport.h \
@@ -142,6 +154,9 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/seqpos/SeqPosSupport.h \
            src/seqpos/SeqPosTask.h \
            src/seqpos/SeqPosWorker.h \
+           src/snpeff/SnpEffDatabaseDelegate.h \
+           src/snpeff/SnpEffDatabaseListModel.h \
+           src/snpeff/SnpEffDatabaseListTask.h \
            src/snpeff/SnpEffSupport.h \
            src/snpeff/SnpEffTask.h \
            src/snpeff/SnpEffWorker.h \
@@ -170,12 +185,14 @@ HEADERS += src/ETSProjectViewItemsContoller.h \
            src/utils/ExternalToolSupportAction.h \
            src/utils/ExternalToolUtils.h \
            src/utils/ExternalToolValidateTask.h \
+           src/utils/OutputCollector.h \
            src/vcftools/VcfConsensusSupport.h \
            src/vcftools/VcfConsensusSupportTask.h \
            src/vcftools/VcfConsensusWorker.h \
            src/vcfutils/VcfutilsSupport.h
 
 FORMS += src/blast/FormatDBSupportRunDialog.ui \
+         src/blast_plus/AlignToReferenceBlastDialog.ui \
          src/blast_plus/BlastDBCmdDialog.ui \
          src/bowtie/BowtieBuildSettings.ui \
          src/bowtie/BowtieSettings.ui \
@@ -195,6 +212,7 @@ FORMS += src/blast/FormatDBSupportRunDialog.ui \
          src/mrbayes/MrBayesDialog.ui \
          src/phyml/PhyMLDialog.ui \
          src/tcoffee/TCoffeeSupportRunDialog.ui \
+         src/snpeff/SnpEffDatabaseDialog.ui \
          src/spades/SpadesSettings.ui \
          src/utils/BlastAllSupportDialog.ui \
          src/utils/BlastDBSelectorWidget.ui
@@ -220,6 +238,9 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/blast/FormatDBSupport.cpp \
            src/blast/FormatDBSupportRunDialog.cpp \
            src/blast/FormatDBSupportTask.cpp \
+           src/blast/PrepareInputFastaFilesTask.cpp \
+           src/blast_plus/AlignToReferenceBlastDialog.cpp \
+           src/blast_plus/AlignToReferenceBlastWorker.cpp \
            src/blast_plus/BlastDBCmdDialog.cpp \
            src/blast_plus/BlastDBCmdSupport.cpp \
            src/blast_plus/BlastDBCmdSupportTask.cpp \
@@ -233,6 +254,11 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/blast_plus/RPSBlastSupportTask.cpp \
            src/blast_plus/TBlastNPlusSupportTask.cpp \
            src/blast_plus/TBlastXPlusSupportTask.cpp \
+           src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp \
+           src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp \
+           src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp \
+           src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp \
+           src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp \
            src/bowtie/bowtie_tests/bowtieTests.cpp \
            src/bowtie/BowtieSettingsWidget.cpp \
            src/bowtie/BowtieSupport.cpp \
@@ -293,16 +319,19 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/hmmer/HmmerBuildFromMsaTask.cpp \
            src/hmmer/HmmerBuildSettings.cpp \
            src/hmmer/HmmerBuildTask.cpp \
+           src/hmmer/HmmerBuildTaskTest.cpp \
            src/hmmer/HmmerBuildWorker.cpp \
            src/hmmer/HmmerParseSearchResultsTask.cpp \
            src/hmmer/HmmerSearchDialog.cpp \
            src/hmmer/HmmerSearchSettings.cpp \
            src/hmmer/HmmerSearchTask.cpp \
+           src/hmmer/HmmerSearchTaskTest.cpp \
            src/hmmer/HmmerSearchWorker.cpp \
            src/hmmer/HmmerSupport.cpp \
            src/hmmer/PhmmerSearchDialog.cpp \
            src/hmmer/PhmmerSearchSettings.cpp \
            src/hmmer/PhmmerSearchTask.cpp \
+           src/hmmer/PhmmerSearchTaskTest.cpp \
            src/java/JavaSupport.cpp \
            src/macs/MACSSettings.cpp \
            src/macs/MACSSupport.cpp \
@@ -339,6 +368,9 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/seqpos/SeqPosSupport.cpp \
            src/seqpos/SeqPosTask.cpp \
            src/seqpos/SeqPosWorker.cpp \
+           src/snpeff/SnpEffDatabaseDelegate.cpp \
+           src/snpeff/SnpEffDatabaseListModel.cpp \
+           src/snpeff/SnpEffDatabaseListTask.cpp \
            src/snpeff/SnpEffSupport.cpp \
            src/snpeff/SnpEffTask.cpp \
            src/snpeff/SnpEffWorker.cpp \
@@ -367,6 +399,7 @@ SOURCES += src/ETSProjectViewItemsContoller.cpp \
            src/utils/ExternalToolSupportAction.cpp \
            src/utils/ExternalToolUtils.cpp \
            src/utils/ExternalToolValidateTask.cpp \
+           src/utils/OutputCollector.cpp \
            src/vcftools/VcfConsensusSupport.cpp \
            src/vcftools/VcfConsensusSupportTask.cpp \
            src/vcftools/VcfConsensusWorker.cpp \
diff --git a/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.cpp b/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.cpp
index 21dafd2..325c0c5 100644
--- a/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.cpp
+++ b/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -88,7 +88,7 @@ void ETSProjectViewItemsContoller::sl_runFormatDBOnSelection(){
     ExternalToolSupportAction* s = qobject_cast<ExternalToolSupportAction*>(sender());
     assert(s != NULL);
     assert((s->getToolNames().contains(ET_FORMATDB))||(s->getToolNames().contains(ET_MAKEBLASTDB)));
-    //Check that formatDB and temporary directory path defined
+    //Check that formatDB and temporary folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(s->getToolNames().at(0))->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         if(s->getToolNames().at(0) == ET_FORMATDB){
diff --git a/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.h b/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.h
index e50f2aa..a009da5 100644
--- a/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.h
+++ b/src/plugins/external_tool_support/src/ETSProjectViewItemsContoller.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 
 #include <U2Core/global.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#endif
+#include <QAction>
+#include <QMenu>
 
 #include "utils/ExternalToolSupportAction.h"
 
diff --git a/src/plugins/external_tool_support/src/ExternalToolManager.cpp b/src/plugins/external_tool_support/src/ExternalToolManager.cpp
index 4b1fdd7..fb03b9c 100644
--- a/src/plugins/external_tool_support/src/ExternalToolManager.cpp
+++ b/src/plugins/external_tool_support/src/ExternalToolManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QEventLoop>
-#include <QtCore/QSet>
+#include <QEventLoop>
+#include <QSet>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/PluginModel.h>
@@ -65,7 +65,7 @@ void ExternalToolManagerImpl::innerStart() {
     ExternalToolSupportSettings::getExternalTools();
 
     QList<ExternalTool*> toolsList = etRegistry->getAllEntries();
-    QStrStrMap toolPaths;
+    StrStrMap toolPaths;
     foreach (ExternalTool* tool, toolsList) {
         SAFE_POINT(tool, "Tool is NULL", );
         QString toolPath = addTool(tool);
@@ -93,12 +93,12 @@ void ExternalToolManagerImpl::stop() {
 }
 
 void ExternalToolManagerImpl::check(const QString& toolName, const QString& toolPath, ExternalToolValidationListener* listener) {
-    QStrStrMap toolPaths;
+    StrStrMap toolPaths;
     toolPaths.insert(toolName, toolPath);
     check(QStringList() << toolName, toolPaths, listener);
 }
 
-void ExternalToolManagerImpl::check(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener) {
+void ExternalToolManagerImpl::check(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener) {
     SAFE_POINT(etRegistry, "The external tool registry is NULL", );
     SAFE_POINT(listener, "Listener is NULL", );
 
@@ -132,16 +132,16 @@ void ExternalToolManagerImpl::validate(const QString& toolName, ExternalToolVali
 }
 
 void ExternalToolManagerImpl::validate(const QString& toolName, const QString& path, ExternalToolValidationListener* listener) {
-    QStrStrMap toolPaths;
+    StrStrMap toolPaths;
     toolPaths.insert(toolName, path);
     validate(QStringList() << toolName, toolPaths, listener);
 }
 
 void ExternalToolManagerImpl::validate(const QStringList& toolNames, ExternalToolValidationListener* listener) {
-    validate(toolNames, QStrStrMap(), listener);
+    validate(toolNames, StrStrMap(), listener);
 }
 
-void ExternalToolManagerImpl::validate(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener) {
+void ExternalToolManagerImpl::validate(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener) {
     SAFE_POINT(etRegistry, "The external tool registry is NULL", );
 
     foreach (const QString& toolName, toolNames) {
@@ -299,7 +299,7 @@ void ExternalToolManagerImpl::sl_toolValidationStatusChanged(bool isValid) {
         toolStates.insert(tool->getName(), NotValid);
     }
 
-    QStrStrMap toolPaths;
+    StrStrMap toolPaths;
     foreach (const QString& vassalName, dependencies.values(tool->getName())) {
         ExternalTool* vassalTool = etRegistry->getByName(vassalName);
         SAFE_POINT(vassalTool, QString("An external tool '%1' isn't found in the registry").arg(vassalName), );
@@ -335,7 +335,7 @@ bool ExternalToolManagerImpl::dependenciesAreOk(const QString& toolName) {
     return result;
 }
 
-void ExternalToolManagerImpl::validateTools(const QStrStrMap& toolPaths, ExternalToolValidationListener* listener) {
+void ExternalToolManagerImpl::validateTools(const StrStrMap& toolPaths, ExternalToolValidationListener* listener) {
     QList<Task*> taskList;
 
     foreach (QString toolName, validateList) {
diff --git a/src/plugins/external_tool_support/src/ExternalToolManager.h b/src/plugins/external_tool_support/src/ExternalToolManager.h
index d829204..f4039b6 100644
--- a/src/plugins/external_tool_support/src/ExternalToolManager.h
+++ b/src/plugins/external_tool_support/src/ExternalToolManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_EXTERNAL_TOOL_VALIDATION_MANAGER_H_
 #define _U2_EXTERNAL_TOOL_VALIDATION_MANAGER_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QEventLoop>
+#include <QObject>
+#include <QEventLoop>
 
 #include <U2Core/global.h>
 #include <U2Core/ExternalToolRegistry.h>
@@ -47,12 +47,12 @@ public:
     virtual void stop();
 
     virtual void check(const QString& toolName, const QString& toolPath, ExternalToolValidationListener* listener);
-    virtual void check(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener);
+    virtual void check(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener);
 
     virtual void validate(const QString& toolName, ExternalToolValidationListener* listener = NULL);
     virtual void validate(const QString& toolName, const QString& path, ExternalToolValidationListener* listener = NULL);
     virtual void validate(const QStringList& toolNames, ExternalToolValidationListener* listener = NULL);
-    virtual void validate(const QStringList& toolNames, const QStrStrMap& toolPaths, ExternalToolValidationListener* listener = NULL);
+    virtual void validate(const QStringList& toolNames, const StrStrMap& toolPaths, ExternalToolValidationListener* listener = NULL);
 
     virtual bool isValid(const QString& toolName) const;
     virtual ExternalToolState getToolState(const QString& toolName) const;
@@ -72,7 +72,7 @@ private:
     void checkStartupTasksState();
     QString addTool(ExternalTool* tool);
     bool dependenciesAreOk(const QString& toolName);
-    void validateTools(const QStrStrMap& toolPaths = QStrStrMap(), ExternalToolValidationListener* listener = NULL);
+    void validateTools(const StrStrMap& toolPaths = StrStrMap(), ExternalToolValidationListener* listener = NULL);
     void searchTools();
     void setToolPath(const QString& toolName, const QString& toolPath);
     void setToolValid(const QString& toolName, bool isValid);
@@ -80,7 +80,7 @@ private:
     ExternalToolRegistry* etRegistry;
     QList<QString> validateList;
     QList<QString> searchList;
-    QStrStrMap dependencies;    // master - vassal
+    StrStrMap dependencies;    // master - vassal
     QMap<QString, ExternalToolState> toolStates;
     QMap<ExternalToolsValidateTask*, ExternalToolValidationListener*> listeners;
     bool startupChecks;
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportL10N.h b/src/plugins/external_tool_support/src/ExternalToolSupportL10N.h
index 5286bdd..be0f29c 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportL10N.h
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportL10N.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,12 +35,12 @@ class ExternalToolSupportL10N : public QObject
     Q_OBJECT
 public:
     static QString errorRemovingTmpSubdir(QString subdirName) {
-        return ExternalToolSupportPlugin::tr("The subdirectory for temporary files '%1' already exists."
-                " Can not remove this directory!").arg(subdirName);
+        return ExternalToolSupportPlugin::tr("The subfolder for temporary files '%1' already exists."
+                " Can not remove this folder!").arg(subdirName);
     }
 
     static QString errorCreatingTmpSubrir(QString subdirName) {
-        return ExternalToolSupportPlugin::tr("Can not create a subdirectory for temporary files '%1'!").arg(subdirName);
+        return ExternalToolSupportPlugin::tr("Can not create a subfolder for temporary files '%1'!").arg(subdirName);
     }
 };
 
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.cpp b/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.cpp
index f4b6ce0..71c4f28 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.cpp
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,6 @@
 #include <U2Core/DataBaseRegistry.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/GAutoDeleteList.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/MultiTask.h>
 #include <U2Core/ScriptingToolRegistry.h>
 #include <U2Core/U2SafePoints.h>
@@ -48,7 +47,7 @@
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/DnaAssemblyUtils.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include <U2Test/GTest.h>
 #include <U2Test/GTestFrameworkComponents.h>
@@ -58,7 +57,7 @@
 #include "ExternalToolSupportPlugin.h"
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
-#include "R/RSupport.h"
+
 #include "R/RSupport.h"
 #include "bedtools/BedToolsWorkersLibrary.h"
 #include "bedtools/BedtoolsSupport.h"
@@ -67,6 +66,7 @@
 #include "blast/BlastAllSupport.h"
 #include "blast/BlastAllWorker.h"
 #include "blast/FormatDBSupport.h"
+#include "blast_plus/AlignToReferenceBlastWorker.h"
 #include "blast_plus/BlastDBCmdSupport.h"
 #include "blast_plus/BlastPlusSupport.h"
 #include "blast_plus/BlastPlusWorker.h"
@@ -108,8 +108,10 @@
 #include "fastqc/FastqcSupport.h"
 #include "fastqc/FastqcWorker.h"
 #include "hmmer/HmmerBuildWorker.h"
+#include "hmmer/HmmerSearchTask.h"
 #include "hmmer/HmmerSearchWorker.h"
 #include "hmmer/HmmerSupport.h"
+#include "hmmer/HmmerTests.h"
 #include "java/JavaSupport.h"
 #include "macs/MACSSupport.h"
 #include "macs/MACSWorker.h"
@@ -463,6 +465,10 @@ ExternalToolSupportPlugin::ExternalToolSupportPlugin() :
         blastallAction->setObjectName(ToolsMenu::BLAST_SEARCH);
         connect(blastallAction, SIGNAL(triggered()), blastallTool, SLOT(sl_runWithExtFileSpecify()));
 
+        ExternalToolSupportAction* alignToRefBlastAction = new ExternalToolSupportAction(tr("Map reads to reference..."),
+                                                                                         this, QStringList() << ET_FORMATDB << ET_BLASTALL);
+        alignToRefBlastAction->setObjectName(ToolsMenu::SANGER_ALIGN);
+        connect(alignToRefBlastAction, SIGNAL(triggered(bool)), blastNPlusTool, SLOT(sl_runAlign()));
 
         BlastPlusSupportContext* blastPlusViewCtx = new BlastPlusSupportContext(this);
         blastPlusViewCtx->setParent(this);//may be problems???
@@ -484,10 +490,11 @@ ExternalToolSupportPlugin::ExternalToolSupportPlugin() :
         ToolsMenu::addAction(ToolsMenu::BLAST_MENU, blastPlusAction);
         ToolsMenu::addAction(ToolsMenu::BLAST_MENU, blastPlusCmdAction);
 
-        ExternalToolSupportAction* cap3Action = new ExternalToolSupportAction(QString(tr("Contig assembly with %1...")).arg(cap3Tool->getName()), this, QStringList(cap3Tool->getName()));
+        ExternalToolSupportAction* cap3Action = new ExternalToolSupportAction(QString(tr("Reads de novo assembly (with %1)...")).arg(cap3Tool->getName()), this, QStringList(cap3Tool->getName()));
         cap3Action->setObjectName(ToolsMenu::SANGER_DENOVO);
         connect(cap3Action, SIGNAL(triggered()), cap3Tool, SLOT(sl_runWithExtFileSpecify()));
         ToolsMenu::addAction(ToolsMenu::SANGER_MENU, cap3Action);
+        ToolsMenu::addAction(ToolsMenu::SANGER_MENU, alignToRefBlastAction);
 
         GObjectViewWindowContext* spideyCtx = spideySupport->getViewContext();
         spideyCtx->setParent(this);
@@ -585,6 +592,21 @@ ExternalToolSupportPlugin::ExternalToolSupportPlugin() :
             assert(res);
         }
     }
+    {
+
+        GTestFormatRegistry* tfr = AppContext::getTestFramework()->getTestFormatRegistry();
+        XMLTestFormat *xmlTestFormat = qobject_cast<XMLTestFormat*>(tfr->findFormat("XML"));
+        assert(xmlTestFormat != NULL);
+
+        GAutoDeleteList<XMLTestFactory>* l = new GAutoDeleteList<XMLTestFactory>(this);
+        l->qlist = HmmerTests::createTestFactories();
+
+        foreach(XMLTestFactory* f, l->qlist) {
+            bool res = xmlTestFormat->registerTestFactory(f);
+            Q_UNUSED(res);
+            assert(res);
+        }
+    }
 
     etRegistry->setManager(&validationManager);
     validationManager.start();
@@ -613,8 +635,11 @@ void ExternalToolSupportPlugin::registerWorkers() {
     LocalWorkflow::ClustalWWorkerFactory::init();
     LocalWorkflow::ClustalOWorkerFactory::init();
     LocalWorkflow::MAFFTWorkerFactory::init();
+
+    LocalWorkflow::AlignToReferenceBlastWorkerFactory::init();
     LocalWorkflow::BlastAllWorkerFactory::init();
     LocalWorkflow::BlastPlusWorkerFactory::init();
+
     LocalWorkflow::TCoffeeWorkerFactory::init();
     LocalWorkflow::CuffdiffWorkerFactory::init();
     LocalWorkflow::CufflinksWorkerFactory::init();
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.h b/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.h
index 0433411..9f34e65 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.h
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettings.cpp b/src/plugins/external_tool_support/src/ExternalToolSupportSettings.cpp
index b1852a1..c79a1f0 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettings.cpp
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -46,6 +46,7 @@ namespace U2 {
 #define PREFIX_EXTERNAL_TOOL_PATH SETTINGS + "exToolPath"
 #define PREFIX_EXTERNAL_TOOL_IS_VALID SETTINGS + "exToolIsValid"
 #define PREFIX_EXTERNAL_TOOL_VERSION SETTINGS + "exToolVersion"
+#define PREFIX_EXTERNAL_TOOL_ADDITIONAL_INFO SETTINGS + "exToolAdditionalInfo"
 #define TEMPORY_DIRECTORY SETTINGS + "temporyDirectory"
 
 Watcher* const ExternalToolSupportSettings::watcher = new Watcher;
@@ -62,24 +63,27 @@ void ExternalToolSupportSettings::setNumberExternalTools( int v ) {
 }
 
 bool ExternalToolSupportSettings::getExternalTools() {
-    int numberExternalTools=getNumberExternalTools();
+    int numberExternalTools = getNumberExternalTools();
     QString name;
     QString path;
-    bool isValid;
+    bool isValid = false;
     QString version;
-    for(int i=0; i<numberExternalTools;i++){
-        name=AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_NAME + QString::number(i), QVariant(""), true).toString();
-        path=AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_PATH + QString::number(i), QVariant(""), true).toString();
+    StrStrMap additionalInfo;
+    for (int i = 0; i < numberExternalTools; i++) {
+        name = AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_NAME + QString::number(i), QVariant(""), true).toString();
+        path = AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_PATH + QString::number(i), QVariant(""), true).toString();
         if (!QFile::exists(path)) {
             // executable is not found -> leave this tool alone
             continue;
         }
-        isValid=AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_IS_VALID + QString::number(i), QVariant(false), true).toBool();
-        version=AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_VERSION + QString::number(i), QVariant("unknown"), true).toString();
-        if(AppContext::getExternalToolRegistry()->getByName(name) != NULL){
+        isValid = AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_IS_VALID + QString::number(i), QVariant(false), true).toBool();
+        version = AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_VERSION + QString::number(i), QVariant("unknown"), true).toString();
+        additionalInfo = AppContext::getSettings()->getValue(PREFIX_EXTERNAL_TOOL_ADDITIONAL_INFO + QString::number(i), QVariant::fromValue<StrStrMap>(StrStrMap()), true).value<StrStrMap>();
+        if (AppContext::getExternalToolRegistry()->getByName(name) != NULL) {
             AppContext::getExternalToolRegistry()->getByName(name)->setPath(path);
             AppContext::getExternalToolRegistry()->getByName(name)->setVersion(version);
             AppContext::getExternalToolRegistry()->getByName(name)->setValid(isValid);
+            AppContext::getExternalToolRegistry()->getByName(name)->setAdditionalInfo(additionalInfo);
         }
     }
     prevNumberExternalTools = numberExternalTools;
@@ -93,24 +97,30 @@ void ExternalToolSupportSettings::setExternalTools() {
     setNumberExternalTools(numberExternalTools);
     QString name;
     QString path;
-    bool isValid;
+    bool isValid = false;
     QString version;
-    int numberIterations=numberExternalTools >= prevNumberExternalTools ? numberExternalTools : prevNumberExternalTools;
-    for(int i=0; i<numberIterations;i++){
-        if(i<numberExternalTools){
+    StrStrMap additionalInfo;
+    int numberIterations = numberExternalTools >= prevNumberExternalTools ? numberExternalTools : prevNumberExternalTools;
+    for (int i = 0; i < numberIterations; i++) {
+        if (i < numberExternalTools) {
             name = ExternalToolList.at(i)->getName();
             path = ExternalToolList.at(i)->getPath();
             isValid = ExternalToolList.at(i)->isValid();
             version = ExternalToolList.at(i)->getVersion();
+            additionalInfo = ExternalToolList.at(i)->getAdditionalInfo();
             AppContext::getSettings()->setValue(PREFIX_EXTERNAL_TOOL_NAME + QString::number(i), name, true);
             AppContext::getSettings()->setValue(PREFIX_EXTERNAL_TOOL_PATH + QString::number(i), path, true);
             AppContext::getSettings()->setValue(PREFIX_EXTERNAL_TOOL_IS_VALID + QString::number(i), isValid, true);
             AppContext::getSettings()->setValue(PREFIX_EXTERNAL_TOOL_VERSION + QString::number(i), version, true);
-        }else{
+            if (!additionalInfo.isEmpty()) {
+                AppContext::getSettings()->setValue(PREFIX_EXTERNAL_TOOL_ADDITIONAL_INFO + QString::number(i), QVariant::fromValue<StrStrMap>(additionalInfo), true);
+            }
+        } else {
             AppContext::getSettings()->remove(PREFIX_EXTERNAL_TOOL_NAME + QString::number(i));
             AppContext::getSettings()->remove(PREFIX_EXTERNAL_TOOL_PATH + QString::number(i));
             AppContext::getSettings()->remove(PREFIX_EXTERNAL_TOOL_IS_VALID + QString::number(i));
             AppContext::getSettings()->remove(PREFIX_EXTERNAL_TOOL_VERSION + QString::number(i));
+            AppContext::getSettings()->remove(PREFIX_EXTERNAL_TOOL_ADDITIONAL_INFO + QString::number(i));
         }
     }
     prevNumberExternalTools = numberExternalTools;
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettings.h b/src/plugins/external_tool_support/src/ExternalToolSupportSettings.h
index f45d6e5..dff60f6 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettings.h
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,13 @@
 #ifndef _U2_EXTERNAL_TOOL_SUPPORT_SETTINGS_H_
 #define _U2_EXTERNAL_TOOL_SUPPORT_SETTINGS_H_
 
-#include <QtCore/QString>
-#include <QtCore/QObject>
-#include <QtGui/QFont>
+#include <QString>
+#include <QObject>
+#include <QFont>
 
 #include <U2Core/global.h>
-#include <QtCore/QDirIterator>
-#include <QtCore/QQueue>
+#include <QDirIterator>
+#include <QQueue>
 
 namespace U2 {
 
@@ -58,7 +58,7 @@ private:
     static int prevNumberExternalTools;
 };
 
-/**Helper class that iterates through subdirectories up to given deep level*/
+/**Helper class that iterates through subfolders up to given deep level*/
 class LimitedDirIterator{
 public:
     //deepLevel = 0 - returns only the root dir
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
index feb6f5d..6256a8b 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,30 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExternalToolSupportSettingsController.h"
-#include "ExternalToolSupportSettings.h"
-#include "utils/ExternalToolValidateTask.h"
+#include <QMessageBox>
+#include <QToolButton>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/ScriptingToolRegistry.h>
-#include <U2Core/MultiTask.h>
 #include <U2Core/L10n.h>
+#include <U2Core/MultiTask.h>
+#include <U2Core/ScriptingToolRegistry.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/GUIUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
-
-#include <blast/BlastAllSupport.h>
-#include <blast/FormatDBSupport.h>
-#include <blast_plus/BlastPlusSupport.h>
-
-
+#include "ExternalToolSupportSettings.h"
+#include "ExternalToolSupportSettingsController.h"
+#include "blast/BlastAllSupport.h"
+#include "blast/FormatDBSupport.h"
+#include "blast_plus/BlastPlusSupport.h"
+#include "utils/ExternalToolValidateTask.h"
 
 namespace U2 {
 
@@ -69,7 +63,7 @@ AppSettingsGUIPageWidget* ExternalToolSupportSettingsPageController::createWidge
     return r;
 }
 
-const QString ExternalToolSupportSettingsPageController::helpPageId = QString("18222953");
+const QString ExternalToolSupportSettingsPageController::helpPageId = QString("20874857");
 
 /////////////////////////////////////////////
 ////ExternalToolSupportSettingsPageWidget
@@ -540,7 +534,7 @@ void ExternalToolSupportSettingsPageWidget::sl_onBrowseToolKitPath(){
     LastUsedDirHelper lod("toolkit path");
     QString dir;
 
-    lod.url = dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory With Executables"), lod.dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+    lod.url = dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder With Executables"), lod.dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         assert(treeWidget->selectedItems().isEmpty() == 0);
         QString toolKitName = treeWidget->selectedItems().first()->text(0);
@@ -548,7 +542,7 @@ void ExternalToolSupportSettingsPageWidget::sl_onBrowseToolKitPath(){
         assert(listOfItems.length() != 0);
 
         QStringList toolNames;
-        QStrStrMap toolPaths;
+        StrStrMap toolPaths;
         foreach (QTreeWidgetItem* item, listOfItems) {
             if (!externalToolsItems.values().contains(item)) {
                 continue;
@@ -595,14 +589,14 @@ void ExternalToolSupportSettingsPageWidget::sl_onBrowseToolPackPath() {
     LastUsedDirHelper lod("toolpack path");
     QString dirPath;
     bool isPathValid = false;
-    lod.url = dirPath = U2FileDialog::getExistingDirectory(this, tr("Choose Directory With External Tools Pack"), lod.dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+    lod.dir = dirPath = U2FileDialog::getExistingDirectory(this, tr("Choose Folder With External Tools Pack"), lod.dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
 
     if (!dirPath.isEmpty()) {
         QDir dir = QDir(dirPath);
         QList<QTreeWidgetItem*> listOfItems = treeWidget->findItems("" , Qt::MatchContains | Qt::MatchRecursive);
         assert(listOfItems.length() != 0);
         QStringList toolNames;
-        QStrStrMap toolPaths;
+        StrStrMap toolPaths;
 
         foreach (ExternalTool* et, AppContext::getExternalToolRegistry()->getAllEntries()) {
             if (et->isModule()) {
@@ -648,7 +642,7 @@ void ExternalToolSupportSettingsPageWidget::sl_onBrowseToolPackPath() {
 
         if (!isPathValid) {
             QMessageBox::warning(this, L10N::warningTitle(),
-                                            tr("Not a valid external tools directory"),
+                                            tr("Not a valid external tools folder"),
                                             QMessageBox::Ok);
         }
         if (!toolNames.isEmpty()) {
diff --git a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
index 403dd78..6b7fe33 100644
--- a/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
+++ b/src/plugins/external_tool_support/src/ExternalToolSupportSettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include <U2Core/ExternalToolRegistry.h>
 #include <ui_ETSSettingsWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLineEdit>
-#else
-#include <QtWidgets/QLineEdit>
-#endif
+#include <QLineEdit>
 
 namespace U2
 {
diff --git a/src/plugins/external_tool_support/src/R/RSupport.cpp b/src/plugins/external_tool_support/src/R/RSupport.cpp
index df90b24..4549d68 100644
--- a/src/plugins/external_tool_support/src/R/RSupport.cpp
+++ b/src/plugins/external_tool_support/src/R/RSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,11 +31,7 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QMainWindow>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/R/RSupport.h b/src/plugins/external_tool_support/src/R/RSupport.h
index 671f0a0..4387bb9 100644
--- a/src/plugins/external_tool_support/src/R/RSupport.h
+++ b/src/plugins/external_tool_support/src/R/RSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/RnaSeqCommon.cpp b/src/plugins/external_tool_support/src/RnaSeqCommon.cpp
index 95222df..159e3c7 100644
--- a/src/plugins/external_tool_support/src/RnaSeqCommon.cpp
+++ b/src/plugins/external_tool_support/src/RnaSeqCommon.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/RnaSeqCommon.h b/src/plugins/external_tool_support/src/RnaSeqCommon.h
index 826aef1..c59c193 100644
--- a/src/plugins/external_tool_support/src/RnaSeqCommon.h
+++ b/src/plugins/external_tool_support/src/RnaSeqCommon.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/TaskLocalStorage.cpp b/src/plugins/external_tool_support/src/TaskLocalStorage.cpp
index 7596a42..52f317b 100644
--- a/src/plugins/external_tool_support/src/TaskLocalStorage.cpp
+++ b/src/plugins/external_tool_support/src/TaskLocalStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/TaskLocalStorage.h b/src/plugins/external_tool_support/src/TaskLocalStorage.h
index 4bbeddc..b2fa714 100644
--- a/src/plugins/external_tool_support/src/TaskLocalStorage.h
+++ b/src/plugins/external_tool_support/src/TaskLocalStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _ETS_TASK_LOCAL_STORAGE_
 #define _ETS_TASK_LOCAL_STORAGE_
 
-#include <QtCore/QThreadStorage>
+#include <QThreadStorage>
 
 class ETSContext;
 
diff --git a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
index 09fda03..b85c373 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
+++ b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,17 @@
  * MA 02110-1301, USA.
  */
 
+#include <QTextStream>
+
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
-#include <U2Core/GUrlUtils.h>
 #include <U2Core/DataPathRegistry.h>
 #include <U2Core/FileAndDirectoryUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -107,13 +110,13 @@ void SlopbedWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, SlopbedWorker::tr("Output directory"),
-            SlopbedWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, SlopbedWorker::tr("Output folder"),
+            SlopbedWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, SlopbedWorker::tr("Custom directory"),
-            SlopbedWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, SlopbedWorker::tr("Custom folder"),
+            SlopbedWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BaseNGSWorker::OUT_NAME_ID, SlopbedWorker::tr("Output file name"),
             SlopbedWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
@@ -495,13 +498,13 @@ void GenomecovWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, GenomecovWorker::tr("Output directory"),
-            GenomecovWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, GenomecovWorker::tr("Output folder"),
+            GenomecovWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, GenomecovWorker::tr("Custom directory"),
-            GenomecovWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, GenomecovWorker::tr("Custom folder"),
+            GenomecovWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BaseNGSWorker::OUT_NAME_ID, GenomecovWorker::tr("Output file name"),
             GenomecovWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
diff --git a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.h b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.h
index a6edd5c..0592f58 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.h
+++ b/src/plugins/external_tool_support/src/bedtools/BedToolsWorkersLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.cpp b/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.cpp
index 520099f..8267707 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.cpp
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.h b/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.h
index 9d0382f..3df5223 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.h
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsIntersectTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.cpp b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.cpp
index 1226146..7a37404 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.cpp
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.h b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.h
index a8d3967..442ea77 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.h
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.cpp b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.cpp
index 630941d..40e8d4a 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/ExternalToolRunTask.h>
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.h b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.h
index bfef380..fcd214f 100644
--- a/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.h
+++ b/src/plugins/external_tool_support/src/bedtools/BedtoolsSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.cpp b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.cpp
index 7d36928..881bc9d 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.cpp
+++ b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include "BigWigSupport.h"
 #include "BedGraphToBigWigTask.h"
@@ -72,7 +72,7 @@ void BedGraphToBigWigTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError("Directory does not exist: " + outDir.absolutePath());
+        setError("Folder does not exist: " + outDir.absolutePath());
         return ;
     }
 
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.h b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.h
index 13ade30..a1ffbbb 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.h
+++ b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.cpp b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.cpp
index f9d0ef1..137bad4 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.cpp
+++ b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,34 +21,37 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DataPathRegistry.h>
 #include <U2Core/DocumentImport.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
-#include <U2Core/DataPathRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
-#include "BigWigSupport.h"
 #include "BedGraphToBigWigTask.h"
-
 #include "BedGraphToBigWigWorker.h"
+#include "BigWigSupport.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -114,13 +117,13 @@ void BedGraphToBigWigFactory::init() {
     QList<Attribute*> a;
     {
 
-        Descriptor outDir(BedGraphToBigWigWorker::OUT_MODE_ID, BedGraphToBigWigWorker::tr("Output directory"),
-            BedGraphToBigWigWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BedGraphToBigWigWorker::OUT_MODE_ID, BedGraphToBigWigWorker::tr("Output folder"),
+            BedGraphToBigWigWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BedGraphToBigWigWorker::CUSTOM_DIR_ID, BedGraphToBigWigWorker::tr("Custom directory"),
-            BedGraphToBigWigWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BedGraphToBigWigWorker::CUSTOM_DIR_ID, BedGraphToBigWigWorker::tr("Custom folder"),
+            BedGraphToBigWigWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BedGraphToBigWigWorker::OUT_NAME_ID, BedGraphToBigWigWorker::tr("Output name"),
             BedGraphToBigWigWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first BAM file with an extention."));
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.h b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.h
index 1830ff5..cb3df6d 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.h
+++ b/src/plugins/external_tool_support/src/bigWigTools/BedGraphToBigWigWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.cpp b/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.cpp
index 9202ec0..df749c4 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.cpp
+++ b/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.h b/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.h
index 85434ad..a7eb746 100644
--- a/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.h
+++ b/src/plugins/external_tool_support/src/bigWigTools/BigWigSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
index 0159a4c..188023a 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,9 @@
 #include "BlastAllSupportTask.h"
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
+#include "FormatDBSupport.h"
 #include "utils/BlastTaskSettings.h"
+#include "utils/ExternalToolUtils.h"
 #include "utils/ExternalToolSupportAction.h"
 
 namespace U2 {
@@ -78,29 +80,9 @@ BlastAllSupport::BlastAllSupport(const QString& name, const QString& path) : Ext
 }
 
 void BlastAllSupport::sl_runWithExtFileSpecify(){
-    //Check that blastall and tempory directory path defined
-    if (path.isEmpty()){
-        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
-        msgBox->setWindowTitle("BLAST "+name);
-        msgBox->setText(tr("Path for BLAST %1 tool not selected.").arg(name));
-        msgBox->setInformativeText(tr("Do you want to select it now?"));
-        msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-        msgBox->setDefaultButton(QMessageBox::Yes);
-        const int ret = msgBox->exec();
-        CHECK(!msgBox.isNull(), );
-
-        switch (ret) {
-           case QMessageBox::Yes:
-               AppContext::getAppSettingsGUI()->showSettingsDialog(ExternalToolSupportSettingsPageId);
-               break;
-           case QMessageBox::No:
-               return;
-               break;
-           default:
-               assert(false);
-               break;
-         }
-    }
+    //Check that blastall and tempory folder path defined
+    ExternalToolUtils::checkExtToolsPath(QStringList() << ET_BLASTALL);
+
     if (path.isEmpty()){
         return;
     }
@@ -120,6 +102,7 @@ void BlastAllSupport::sl_runWithExtFileSpecify(){
     BlastAllSupportMultiTask* blastallSupportMultiTask = new BlastAllSupportMultiTask(settingsList,settingsList[0].outputResFile);
     AppContext::getTaskScheduler()->registerTopLevelTask(blastallSupportMultiTask);
 }
+
 ////////////////////////////////////////
 //BlastAllSupportContext
 BlastAllSupportContext::BlastAllSupportContext(QObject* p) : GObjectViewWindowContext(p, ANNOTATED_DNA_VIEW_FACTORY_ID) {
@@ -139,37 +122,18 @@ void BlastAllSupportContext::initViewContext(GObjectView* view) {
 }
 
 void BlastAllSupportContext::buildMenu(GObjectView* view, QMenu* m) {
-        QList<GObjectViewAction *> actions = getViewActions(view);
-        QMenu* analyseMenu = GUIUtils::findSubMenu(m, ADV_MENU_ANALYSE);
-        SAFE_POINT(analyseMenu != NULL, "analyzeMenu", );
-        foreach(GObjectViewAction* a, actions) {
-                a->addToMenuWithOrder(analyseMenu);
-        }
+    QList<GObjectViewAction *> actions = getViewActions(view);
+    QMenu* analyseMenu = GUIUtils::findSubMenu(m, ADV_MENU_ANALYSE);
+    SAFE_POINT(analyseMenu != NULL, L10N::nullPointerError("analyzeMenu"), );
+    foreach(GObjectViewAction* a, actions) {
+        a->addToMenuWithOrder(analyseMenu);
+    }
 }
 
 void BlastAllSupportContext::sl_showDialog() {
-    //Checking the BlastAll path and temporary directory path are defined
-    if (AppContext::getExternalToolRegistry()->getByName(ET_BLASTALL)->getPath().isEmpty()){
-        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
-        msgBox->setWindowTitle("BLAST "+QString(ET_BLASTALL));
-        msgBox->setText(tr("Path for BLAST %1 tool not selected.").arg(ET_BLASTALL));
-        msgBox->setInformativeText(tr("Do you want to select it now?"));
-        msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
-        msgBox->setDefaultButton(QMessageBox::Yes);
-        const int ret = msgBox->exec();
-        CHECK(!msgBox.isNull(), );
-
-        switch (ret) {
-           case QMessageBox::Yes:
-               AppContext::getAppSettingsGUI()->showSettingsDialog(ExternalToolSupportSettingsPageId);
-               break;
-           case QMessageBox::No:
-               return;
-           default:
-               assert(false);
-               break;
-         }
-    }
+    //Checking the BlastAll path and temporary folder path are defined
+    ExternalToolUtils::checkExtToolsPath(QStringList() << ET_BLASTALL);
+
     if (AppContext::getExternalToolRegistry()->getByName(ET_BLASTALL)->getPath().isEmpty()){
         return;
     }
@@ -183,7 +147,7 @@ void BlastAllSupportContext::sl_showDialog() {
     assert(av);
 
     ADVSequenceObjectContext* seqCtx = av->getSequenceInFocus();
-    QObjectScopedPointer<BlastAllSupportRunDialog> dlg = new BlastAllSupportRunDialog(seqCtx->getSequenceObject(), lastDBPath, lastDBName, av->getWidget());
+    QObjectScopedPointer<BlastAllSupportRunDialog> dlg = new BlastAllSupportRunDialog(seqCtx, lastDBPath, lastDBName, av->getWidget());
     dlg->exec();
     CHECK(!dlg.isNull(), );
 
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupport.h b/src/plugins/external_tool_support/src/blast/BlastAllSupport.h
index 84214e4..c28f152 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupport.h
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,8 +36,9 @@ public:
     BlastAllSupport(const QString& name, const QString& path = "");
     GObjectViewWindowContext* getViewContext(){ return viewCtx; }
 
-public slots:
+private slots:
     void sl_runWithExtFileSpecify();
+
 private:
     GObjectViewWindowContext* viewCtx;
     QString lastDBPath;
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
index 59fd53f..6efd24d 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,13 +45,11 @@
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/OpenViewTask.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
+#include <QToolButton>
+#include <QMessageBox>
 
 #include "BlastAllSupportRunDialog.h"
 
@@ -59,9 +57,10 @@ namespace U2 {
 
 ////////////////////////////////////////
 //BlastAllSupportRunDialog
-BlastAllSupportRunDialog::BlastAllSupportRunDialog(U2SequenceObject *dnaso, QString &lastDBPath, QString &lastDBName, QWidget *parent)
-: BlastRunCommonDialog(parent, BlastAll, false, QStringList()), dnaso(dnaso), lastDBPath(lastDBPath), lastDBName(lastDBName)
+BlastAllSupportRunDialog::BlastAllSupportRunDialog(ADVSequenceObjectContext* seqCtx, QString &lastDBPath, QString &lastDBName, QWidget *parent)
+: BlastRunCommonDialog(parent, BlastAll, false, QStringList()), lastDBPath(lastDBPath), lastDBName(lastDBName), seqCtx(seqCtx)
 {
+    dnaso = seqCtx->getSequenceObject();
     CreateAnnotationModel ca_m;
     ca_m.hideAnnotationType = true;
     ca_m.hideAnnotationName = true;
@@ -69,10 +68,7 @@ BlastAllSupportRunDialog::BlastAllSupportRunDialog(U2SequenceObject *dnaso, QStr
     ca_m.sequenceObjectRef = GObjectReference(dnaso);
     ca_m.sequenceLen = dnaso->getSequenceLength();
     ca_c = new CreateAnnotationWidgetController(ca_m, this);
-    //lowerCaseCheckBox->hide();
-    QWidget *wdgt = ca_c->getWidget();
-    wdgt->setMinimumHeight(150);
-    verticalLayout_4->addWidget(wdgt);
+    annotationWidgetLayout->addWidget(ca_c->getWidget());
 
     okButton = buttonBox->button(QDialogButtonBox::Ok);
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
@@ -129,6 +125,9 @@ void BlastAllSupportRunDialog::sl_runQuery(){
     lastDBPath = dbSelector->databasePathLineEdit->text();
     lastDBName = dbSelector->baseNameLineEdit->text();
     settings.outputType = 7;//By default set output file format to xml
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(settings.aobj);
+    }
     accept();
 }
 ////////////////////////////////////////
@@ -136,11 +135,11 @@ void BlastAllSupportRunDialog::sl_runQuery(){
 BlastAllWithExtFileSpecifySupportRunDialog::BlastAllWithExtFileSpecifySupportRunDialog(QString &lastDBPath, QString &lastDBName, QWidget *parent)
 : BlastRunCommonDialog(parent, BlastAll, false, QStringList()), lastDBPath(lastDBPath), lastDBName(lastDBName), hasValidInput(false)
 {
-    ca_c=NULL;
-    wasNoOpenProject=false;
+    ca_c = NULL;
+    wasNoOpenProject = false;
     //create input file widget
     QWidget *widget = new QWidget(parent);
-    inputFileLineEdit= new FileLineEdit("","", false, widget);
+    inputFileLineEdit = new FileLineEdit("","", false, widget);
     inputFileLineEdit->setReadOnly(true);
     inputFileLineEdit->setText("");
     QToolButton * selectToolPathButton = new QToolButton(widget);
@@ -158,7 +157,7 @@ BlastAllWithExtFileSpecifySupportRunDialog::BlastAllWithExtFileSpecifySupportRun
     layout->addWidget(inputFileLineEdit);
     layout->addWidget(selectToolPathButton);
 
-    QGroupBox* inputFileGroupBox=new QGroupBox(tr("Select input file"),widget);
+    QGroupBox* inputFileGroupBox = new QGroupBox(tr("Select input file"),widget);
     inputFileGroupBox->setLayout(layout);
     QBoxLayout* parentLayout = qobject_cast<QBoxLayout*>(this->layout());
     assert(parentLayout);
@@ -285,9 +284,7 @@ void BlastAllWithExtFileSpecifySupportRunDialog::tryApplyDoc(Document *doc) {
     ca_m.defaultIsNewDoc = true;
     if (NULL == ca_c) {
         ca_c = new CreateAnnotationWidgetController(ca_m, this);
-        QWidget *wdgt = ca_c->getWidget();
-        wdgt->setMinimumHeight(150);
-        verticalLayout_4->addWidget(wdgt);
+        annotationWidgetLayout->addWidget(ca_c->getWidget());
     } else {
         ca_c->updateWidgetForAnnotationModel(ca_m);
     }
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
index 73e7bea..40e0990 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,20 +31,23 @@
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
+
 class BlastAllSupportRunDialog : public BlastRunCommonDialog {
     Q_OBJECT
 public:
-    BlastAllSupportRunDialog(U2SequenceObject *dnaso, QString &lastDBPath, QString &lastDBName, QWidget *parent);
+    BlastAllSupportRunDialog(ADVSequenceObjectContext* seqCtx, QString &lastDBPath, QString &lastDBName, QWidget *parent);
 protected slots:
     virtual void sl_runQuery();
     virtual void sl_lineEditChanged();
 
 private:
-    U2SequenceObject*  dnaso;
-    QString &lastDBPath;
-    QString &lastDBName;
-    QPushButton* okButton;
-    QPushButton* cancelButton;
+    U2SequenceObject*           dnaso;
+    QString                     &lastDBPath;
+    QString                     &lastDBName;
+    QPushButton*                okButton;
+    QPushButton*                cancelButton;
+    ADVSequenceObjectContext*   seqCtx;
 };
 
 class BlastAllWithExtFileSpecifySupportRunDialog : public BlastRunCommonDialog {
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
index 970e76f..3cf4e58 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -64,7 +64,7 @@ BlastAllSupportTask::BlastAllSupportTask(const BlastTaskSettings& _settings) :
 
 void BlastAllSupportTask::prepare(){
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
 
     QString tmpDirName = "BlastAll_"+QString::number(this->getTaskId())+"_"+
                          QDate::currentDate().toString("dd.MM.yyyy")+"_"+
@@ -78,12 +78,12 @@ void BlastAllSupportTask::prepare(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Subdirectory for temporary files exists. Can not remove this directory."));
+            stateInfo.setError(tr("Subdirectory for temporary files exists. Can not remove this folder."));
             return;
         }
     }
     if (!tmpDir.mkpath(tmpDir.absolutePath())) {
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
     //Create ncbi.ini for windows or .ncbirc for unix like systems
@@ -106,7 +106,7 @@ void BlastAllSupportTask::prepare(){
     tmpDoc = df->createNewLoadedDocument(IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE), GUrl(url), stateInfo);
     CHECK_OP(stateInfo,);
 
-    U2EntityRef seqRef = U2SequenceUtils::import(tmpDoc->getDbiRef(), DNASequence(settings.querySequence, settings.alphabet), stateInfo);
+    U2EntityRef seqRef = U2SequenceUtils::import(stateInfo, tmpDoc->getDbiRef(), DNASequence(settings.querySequence, settings.alphabet));
     CHECK_OP(stateInfo,);
     sequenceObject = new U2SequenceObject("input sequence", seqRef);
 
@@ -255,7 +255,7 @@ Task::ReportResult BlastAllSupportTask::report() {
         tmpDir.remove(file);
     }
     if(!tmpDir.rmdir(tmpDir.absolutePath())){
-        stateInfo.setError(tr("Can not remove directory for temporary files."));
+        stateInfo.setError(tr("Can not remove folder for temporary files."));
         emit si_stateChanged();
     }
     return ReportResult_Finished;
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.h b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.h
index 8c304b2..2b133f5 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast/BlastAllSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,8 +38,8 @@
 
 #include "utils/BlastTaskSettings.h"
 
-#include <QtXml/QDomNode>
-#include <QtXml/QDomDocument>
+#include <QDomNode>
+#include <QDomDocument>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllWorker.cpp b/src/plugins/external_tool_support/src/blast/BlastAllWorker.cpp
index e45921a..2fdf4d9 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllWorker.cpp
+++ b/src/plugins/external_tool_support/src/blast/BlastAllWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -109,8 +109,8 @@ void BlastAllWorkerFactory::init() {
                    BlastAllWorker::tr("Name for annotations."));
     Descriptor etp(BLASTALL_EXT_TOOL_PATH, BlastAllWorker::tr("Tool Path"),
                    BlastAllWorker::tr("External tool path."));
-    Descriptor tdp(BLASTALL_TMP_DIR_PATH, BlastAllWorker::tr("Temporary directory"),
-                   BlastAllWorker::tr("Directory for temporary files."));
+    Descriptor tdp(BLASTALL_TMP_DIR_PATH, BlastAllWorker::tr("Temporary folder"),
+                   BlastAllWorker::tr("Folder for temporary files."));
 
     Descriptor output(BLASTALL_ORIGINAL_OUT, BlastAllWorker::tr("BLAST output"),
                    BlastAllWorker::tr("Location of BLAST output file."));
@@ -211,7 +211,7 @@ void BlastAllWorkerFactory::init() {
         m["not use"] = false;
         delegates[BLASTALL_GAPPED_ALN] = new ComboBoxDelegate(m);
     }
-    delegates[BLASTALL_DATABASE_PATH] = new URLDelegate("", "Database Directory", false, true, false);
+    delegates[BLASTALL_DATABASE_PATH] = new URLDelegate("", "Database Folder", false, true, false);
     delegates[BLASTALL_ORIGINAL_OUT] = new URLDelegate("", "out file", false, false);
     delegates[BLASTALL_EXT_TOOL_PATH] = new URLDelegate("", "executable", false, false, false);
     delegates[BLASTALL_TMP_DIR_PATH] = new URLDelegate("", "TmpDir", false, true);
diff --git a/src/plugins/external_tool_support/src/blast/BlastAllWorker.h b/src/plugins/external_tool_support/src/blast/BlastAllWorker.h
index 0efd255..633e1a8 100644
--- a/src/plugins/external_tool_support/src/blast/BlastAllWorker.h
+++ b/src/plugins/external_tool_support/src/blast/BlastAllWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupport.cpp b/src/plugins/external_tool_support/src/blast/FormatDBSupport.cpp
index ced128e..b302c8d 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
@@ -103,7 +103,7 @@ FormatDBSupport::FormatDBSupport(const QString& name, const QString& path) : Ext
 }
 
 void FormatDBSupport::sl_runWithExtFileSpecify(){
-    //Check that formatDB or makeblastdb and tempory directory path defined
+    //Check that formatDB or makeblastdb and tempory folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         if(name == ET_FORMATDB){
@@ -147,9 +147,7 @@ void FormatDBSupport::sl_runWithExtFileSpecify(){
     if (formatDBRunDialog->result() != QDialog::Accepted){
         return;
     }
-    //assert(!settings.inputFilePath.isEmpty());
-    //
-    FormatDBSupportTask* formatDBSupportTask=new FormatDBSupportTask(name, settings);
+    FormatDBSupportTask* formatDBSupportTask = new FormatDBSupportTask(name, settings);
     AppContext::getTaskScheduler()->registerTopLevelTask(formatDBSupportTask);
 }
 }//namespace
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupport.h b/src/plugins/external_tool_support/src/blast/FormatDBSupport.h
index aed6fd1..3971e67 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupport.h
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
index b44147c..9ee7a67 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,13 +28,8 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/HelpButton.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QPushButton>
+#include <QToolButton>
 
 namespace U2 {
 
@@ -44,7 +39,7 @@ FormatDBSupportRunDialog::FormatDBSupportRunDialog(const QString &_name, FormatD
         QDialog(_parent), name(_name), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223226");
+    new HelpButton(this, buttonBox, "20875130");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Format"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     formatButton = buttonBox->button(QDialogButtonBox::Ok);
@@ -100,7 +95,7 @@ void FormatDBSupportRunDialog::sl_onBrowseInputDir(){
     LastUsedDirHelper lod("");
 
     QString name;
-    lod.url = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a directory with input files"), lod.dir);
+    lod.url = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a folder with input files"), lod.dir);
     if (!name.isEmpty()) {
         inputDirLineEdit->setText(name);
     }
@@ -108,10 +103,10 @@ void FormatDBSupportRunDialog::sl_onBrowseInputDir(){
 }
 
 void FormatDBSupportRunDialog::sl_onBrowseDatabasePath(){
-    LastUsedDirHelper lod("Database Directory");
+    LastUsedDirHelper lod("Database folder");
 
     QString name;
-    lod.url = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a directory to save database files"), lod.dir);
+    lod.url = name = U2FileDialog::getExistingDirectory(NULL, tr("Select a folder to save database files"), lod.dir);
     if (!name.isEmpty()) {
         databasePathLineEdit->setText(name);
     }
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
index 7fd3f13..fa2663d 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui
index 6bfed4f..16d11f4 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportRunDialog.ui
@@ -21,7 +21,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <property name="sizeConstraint">
-    <enum>QLayout::SetDefaultConstraint</enum>
+    <enum>QLayout::SetMinAndMaxSize</enum>
    </property>
    <item>
     <widget class="QGroupBox" name="inputData">
@@ -29,6 +29,9 @@
       <string>Input data</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_2">
+      <property name="sizeConstraint">
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
       <item>
        <widget class="QRadioButton" name="inputFilesRadioButton">
         <property name="text">
@@ -44,6 +47,9 @@
       </item>
       <item>
        <layout class="QHBoxLayout" name="inputFilesLayout">
+        <property name="sizeConstraint">
+         <enum>QLayout::SetMinAndMaxSize</enum>
+        </property>
         <item>
          <widget class="QLineEdit" name="inputFilesLineEdit"/>
         </item>
@@ -68,6 +74,9 @@
       </item>
       <item>
        <layout class="QHBoxLayout" name="inputFilesLayout_2">
+        <property name="sizeConstraint">
+         <enum>QLayout::SetMaximumSize</enum>
+        </property>
         <item>
          <widget class="QLineEdit" name="inputDirLineEdit">
           <property name="enabled">
@@ -96,8 +105,14 @@
          <string>File filter</string>
         </property>
         <layout class="QVBoxLayout" name="verticalLayout_4">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
          <item>
           <layout class="QGridLayout" name="gridLayout_2">
+           <property name="sizeConstraint">
+            <enum>QLayout::SetMinAndMaxSize</enum>
+           </property>
            <item row="0" column="0">
             <widget class="QRadioButton" name="includeFilterRadioButton">
              <property name="text">
@@ -143,6 +158,9 @@
          <string>Type of file(s)</string>
         </property>
         <layout class="QHBoxLayout" name="horizontalLayout">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMaximumSize</enum>
+         </property>
          <item>
           <widget class="QRadioButton" name="proteinTypeRadioButton">
            <property name="text">
@@ -172,8 +190,17 @@
       <string>Output settings</string>
      </property>
      <layout class="QVBoxLayout" name="verticalLayout_3">
+      <property name="sizeConstraint">
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
       <item>
        <widget class="QLabel" name="label_2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
         <property name="text">
          <string>Select the path to save the database into:</string>
         </property>
@@ -181,6 +208,9 @@
       </item>
       <item>
        <layout class="QHBoxLayout" name="databasePathLayout">
+        <property name="sizeConstraint">
+         <enum>QLayout::SetMinAndMaxSize</enum>
+        </property>
         <item>
          <widget class="QLineEdit" name="databasePathLineEdit"/>
         </item>
@@ -195,6 +225,9 @@
       </item>
       <item>
        <layout class="QGridLayout" name="gridLayout">
+        <property name="sizeConstraint">
+         <enum>QLayout::SetMinAndMaxSize</enum>
+        </property>
         <item row="0" column="0">
          <widget class="QLabel" name="label_3">
           <property name="text">
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.cpp b/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.cpp
index c416271..6743a29 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,80 +19,78 @@
  * MA 02110-1301, USA.
  */
 
-#include "FormatDBSupportTask.h"
-#include "FormatDBSupport.h"
-
 #include <QCoreApplication>
-#include <QtCore/QDir>
+#include <QDir>
 
-#include <U2Core/AppContext.h>
 #include <U2Core/AddDocumentTask.h>
+#include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/Counter.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Formats/ConvertFileTask.h>
 
+#include "PrepareInputFastaFilesTask.h"
+#include "FormatDBSupport.h"
+#include "FormatDBSupportTask.h"
 
 namespace U2 {
 
 void FormatDBSupportTaskSettings::reset() {
-    inputFilesPath=QList<QString>();
-    outputPath="";
-    databaseTitle="";
-    isInputAmino=true;
+    inputFilesPath = QList<QString>();
+    outputPath = "";
+    databaseTitle = "";
+    isInputAmino = true;
+    tempDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(FORMATDB_TMP_DIR);
 }
 
 FormatDBSupportTask::FormatDBSupportTask(const QString& name, const FormatDBSupportTaskSettings& _settings) :
-        Task(tr("Run NCBI FormatDB task"), TaskFlags_NR_FOSCOE | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled), toolName(name),
-        settings(_settings),
-        convertSubTaskCounter(0)
+        Task(tr("Run NCBI FormatDB task"), TaskFlags_NR_FOSE_COSC | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
+        prepareTask(NULL),
+        formatDBTask(NULL),
+        toolName(name),
+        settings(_settings)
 {
-    GCOUNTER( cvar, tvar, "FormatDBSupportTask" );
-    formatDBTask = NULL;
+    GCOUNTER(cvar, tvar, "FormatDBSupportTask");
 }
 
 void FormatDBSupportTask::prepare(){
-    prepareInputFastaFiles();
-    if (convertSubTaskCounter == 0) {
-        createFormatDbTask();
-        addSubTask(formatDBTask);
-    }
+    const QString tempDir = prepareTempDir();
+    CHECK_OP(stateInfo, );
+
+    prepareTask = new PrepareInputFastaFilesTask(settings.inputFilesPath, tempDir);
+    addSubTask(prepareTask);
 }
 
-QList<Task*> FormatDBSupportTask::onSubTaskFinished(Task *subTask) {
-    QList<Task*> result;
+QList<Task *> FormatDBSupportTask::onSubTaskFinished(Task *subTask) {
+    QList<Task *> result;
     CHECK(subTask != NULL, result);
     CHECK(!subTask->isCanceled() && !subTask->hasError(), result);
 
-    DefaultConvertFileTask* convertTask = qobject_cast<DefaultConvertFileTask*>(subTask);
-    if (convertTask != NULL) {
-        convertSubTaskCounter--;
-        inputFastaFiles << convertTask->getResult();
-        fastaTmpFiles << convertTask->getResult();
-
-        if (convertSubTaskCounter == 0) {
-            createFormatDbTask();
-            result << formatDBTask;
-        }
+    if (prepareTask == subTask) {
+        inputFastaFiles << prepareTask->getFastaFiles();
+        fastaTmpFiles << prepareTask->getTempFiles();
+        createFormatDbTask();
+        CHECK_OP(stateInfo, result);
+        result << formatDBTask;
     }
 
     return result;
 }
 
-Task::ReportResult FormatDBSupportTask::report(){
+Task::ReportResult FormatDBSupportTask::report() {
     // remove tmp files
     if (!fastaTmpFiles.isEmpty()) {
         QDir dir(QFileInfo(fastaTmpFiles.first()).absoluteDir());
         if (!dir.removeRecursively()) {
-            stateInfo.addWarning(tr("Can not remove directory for temporary files."));
+            stateInfo.addWarning(tr("Can not remove folder for temporary files."));
             emit si_stateChanged();
         }
     }
@@ -135,33 +133,23 @@ QString FormatDBSupportTask::generateReport() const {
     return res;
 }
 
-void FormatDBSupportTask::prepareInputFastaFiles() {
-    QString tmpDirName = "FormatDB_"+QString::number(this->getTaskId())+"_"+
-                         QDate::currentDate().toString("dd.MM.yyyy")+"_"+
-                         QTime::currentTime().toString("hh.mm.ss.zzz")+"_"+
-                         QString::number(QCoreApplication::applicationPid())+"/";
-    QString tmpDir = GUrlUtils::prepareDirLocation(AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(FORMATDB_TMP_DIR) + "/"+ tmpDirName,
-                                                   stateInfo);
-    CHECK_OP(stateInfo, );
-    CHECK_EXT(!tmpDir.isEmpty(), setError(tr("Cannot create temp directory")), );
+namespace {
 
-    for(int i = 0; i < settings.inputFilesPath.length(); i++){
-        GUrl url(settings.inputFilesPath[i]);
+QString getTempDirName(qint64 taskId) {
+    return "FormatDB_" + QString::number(taskId) + "_" +
+            QDate::currentDate().toString("dd.MM.yyyy") + "_" +
+            QTime::currentTime().toString("hh.mm.ss.zzz") + "_" +
+            QString::number(QCoreApplication::applicationPid()) + "/";
+}
 
-        QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(url);
-        if (formats.isEmpty()) {
-            stateInfo.addWarning(tr("File '%1' was skipped. Cannot detect file format.").arg(url.getURLString()));
-            continue;
-        }
-        QString firstFormat = formats.first().format->getFormatId();
-        if (firstFormat != BaseDocumentFormats::FASTA) {
-            DefaultConvertFileTask* convertTask = new DefaultConvertFileTask(url, firstFormat, BaseDocumentFormats::FASTA, tmpDir);
-            addSubTask(convertTask);
-            convertSubTaskCounter++;
-        } else {
-            inputFastaFiles << url.getURLString();
-        }
-    }
+}
+
+QString FormatDBSupportTask::prepareTempDir() {
+    const QString tmpDirName = getTempDirName(getTaskId());
+    const QString tmpDir = GUrlUtils::prepareDirLocation(settings.tempDirPath + "/" + tmpDirName, stateInfo);
+    CHECK_OP(stateInfo, "");
+    CHECK_EXT(!tmpDir.isEmpty(), setError(tr("Cannot create temp folder")), "");
+    return tmpDir;
 }
 
 QString FormatDBSupportTask::prepareLink( const QString &path ) const {
@@ -195,9 +183,9 @@ void FormatDBSupportTask::createFormatDbTask() {
         externalToolLog = settings.outputPath + "formatDB.log";
     }else if (toolName == ET_MAKEBLASTDB){
         for (int i = 0; i < inputFastaFiles.length(); i++){
-            inputFastaFiles[i]="\""+inputFastaFiles[i]+"\"";
+            inputFastaFiles[i] = "\"" + inputFastaFiles[i] + "\"";
         }
-        arguments <<"-in"<< inputFastaFiles.join(" ");
+        arguments << "-in" << inputFastaFiles.join(" ");
         arguments <<"-logfile"<< settings.outputPath + "MakeBLASTDB.log";
         externalToolLog = settings.outputPath + "MakeBLASTDB.log";
         if(settings.outputPath.contains(" ")){
@@ -212,4 +200,4 @@ void FormatDBSupportTask::createFormatDbTask() {
     formatDBTask->setSubtaskProgressWeight(95);
 }
 
-}//namespace
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.h b/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.h
index d53dc4e..38a956e 100644
--- a/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast/FormatDBSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,16 +22,18 @@
 #ifndef _U2_FORMATDB_SUPPORT_TASK_H
 #define _U2_FORMATDB_SUPPORT_TASK_H
 
-#include <U2Core/Task.h>
-#include <U2Core/IOAdapter.h>
 #include <U2Core/ExternalToolRunTask.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/SaveDocumentTask.h>
-#include "utils/ExportTasks.h"
+#include <U2Core/Task.h>
 
-#include <U2Core/MAlignmentObject.h>
+#include "utils/ExportTasks.h"
 
 namespace U2 {
 
+class PrepareInputFastaFilesTask;
+
 /*Options for FormatDB
 -t  Title for database file [String]  Optional
   -i  Input file(s) for formatting [File In]  Optional
@@ -81,6 +83,7 @@ public:
     QStringList     inputFilesPath;
     QString         outputPath;
     QString         databaseTitle;
+    QString         tempDirPath;
     /*-p  Type of file
             T - protein
             F - nucleotide*/
@@ -92,24 +95,27 @@ class FormatDBSupportTask : public Task {
     Q_OBJECT
 public:
     FormatDBSupportTask(const QString& name, const FormatDBSupportTaskSettings& settings);
+
+private:
     void prepare();
-    QList<Task*> onSubTaskFinished(Task *subTask);
+    QList<Task *> onSubTaskFinished(Task *subTask);
     Task::ReportResult report();
     QString generateReport() const;
-private:
-    void                        prepareInputFastaFiles();
+
+    QString                     prepareTempDir();
     QString                     prepareLink(const QString &path) const;
     void                        createFormatDbTask();
 
     QString                     externalToolLog;
+    PrepareInputFastaFilesTask *prepareTask;
     ExternalToolRunTask*        formatDBTask;
     QString                     toolName;
     FormatDBSupportTaskSettings settings;
-    int                         convertSubTaskCounter;
 
     QStringList                 inputFastaFiles;
     QStringList                 fastaTmpFiles;
 };
 
-}//namespace
+}   // namespace U2
+
 #endif // _U2_FORMATDB_SUPPORT_TASK_H
diff --git a/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.cpp b/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.cpp
new file mode 100644
index 0000000..6c6e226
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.cpp
@@ -0,0 +1,107 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QFileInfo>
+
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/CopyFileTask.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Formats/ConvertFileTask.h>
+
+#include "PrepareInputFastaFilesTask.h"
+
+namespace U2 {
+
+PrepareInputFastaFilesTask::PrepareInputFastaFilesTask(const QStringList &inputFiles, const QString &tempDir)
+    : Task(tr("Prepare input FASTA files"), TaskFlags_NR_FOSE_COSC),
+      inputFiles(inputFiles),
+      tempDir(tempDir)
+{
+
+}
+
+QStringList PrepareInputFastaFilesTask::getFastaFiles() const {
+    return fastaFiles;
+}
+
+QStringList PrepareInputFastaFilesTask::getTempFiles() const {
+    return tempFiles;
+}
+
+void PrepareInputFastaFilesTask::prepare() {
+    foreach (const QString &filePath, inputFiles) {
+        const QString formatId = getBestFormatId(filePath);
+        CHECK_CONTINUE(!formatId.isEmpty());
+
+        if (formatId != BaseDocumentFormats::FASTA) {
+            const QString targetFilePath = tempDir + "/" + getFixedFileName(filePath);
+            DefaultConvertFileTask *convertTask = new DefaultConvertFileTask(filePath, formatId, targetFilePath, BaseDocumentFormats::FASTA, tempDir);
+            addSubTask(convertTask);
+        } else if (!isFilePathAcceptable(filePath)) {
+            CopyFileTask *copyTask = new CopyFileTask(filePath, tempDir + "/" + getFixedFileName(filePath));
+            addSubTask(copyTask);
+        } else {
+            fastaFiles << filePath;
+        }
+    }
+}
+
+QList<Task *> PrepareInputFastaFilesTask::onSubTaskFinished(Task *subTask) {
+    QList<Task *> newSubTasks;
+    CHECK_OP(stateInfo, newSubTasks);
+
+    DefaultConvertFileTask *convertTask = qobject_cast<DefaultConvertFileTask *>(subTask);
+    if (NULL != convertTask) {
+        fastaFiles << convertTask->getResult();
+        tempFiles << convertTask->getResult();
+    }
+
+    CopyFileTask *copyTask = qobject_cast<CopyFileTask *>(subTask);
+    if (NULL != copyTask) {
+        fastaFiles << copyTask->getTargetFilePath();
+        tempFiles << copyTask->getTargetFilePath();
+    }
+
+    return newSubTasks;
+}
+
+QString PrepareInputFastaFilesTask::getBestFormatId(const QString &filePath) {
+    QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(filePath);
+    if (formats.isEmpty()) {
+        stateInfo.addWarning(tr("File '%1' was skipped. Cannot detect the file format.").arg(filePath));
+        return "";
+    }
+    SAFE_POINT_EXT(NULL != formats.first().format, setError("An incorrect format found. An importer?"), "");
+    return formats.first().format->getFormatId();
+}
+
+bool PrepareInputFastaFilesTask::isFilePathAcceptable(const QString &filePath) const {
+    return !filePath.contains(" ");
+}
+
+QString PrepareInputFastaFilesTask::getFixedFileName(const QString &filePath) const {
+    QFileInfo fileInfo(filePath);
+    return fileInfo.fileName().replace(" ", "_");
+}
+
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.h b/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.h
new file mode 100644
index 0000000..9f5dfd3
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast/PrepareInputFastaFilesTask.h
@@ -0,0 +1,54 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_PREPARE_INPUT_FASTA_FILES_TASK_H_
+#define _U2_PREPARE_INPUT_FASTA_FILES_TASK_H_
+
+#include <U2Core/Task.h>
+
+namespace U2 {
+
+class PrepareInputFastaFilesTask : public Task {
+    Q_OBJECT
+public:
+    PrepareInputFastaFilesTask(const QStringList &inputFiles, const QString &tempDir);
+
+    QStringList getFastaFiles() const;
+    QStringList getTempFiles() const;
+
+private:
+    void prepare();
+    QList<Task *> onSubTaskFinished(Task *subTask);
+
+    QString getBestFormatId(const QString &filePath);
+    bool isFilePathAcceptable(const QString &filePath) const;
+    QString getFixedFileName(const QString &filePath) const;
+
+    const QStringList inputFiles;
+    const QString tempDir;
+
+    QStringList fastaFiles;
+    QStringList tempFiles;
+};
+
+}   // namespace U2
+
+#endif // _U2_PREPARE_INPUT_FASTA_FILES_TASK_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.cpp b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.cpp
new file mode 100644
index 0000000..a64e5bd
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.cpp
@@ -0,0 +1,403 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QDomDocument>
+#include <QMessageBox>
+#include <QShortcut>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/CmdlineInOutTaskRunner.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Gui/DialogUtils.h>
+#include <U2Gui/HelpButton.h>
+#include <U2Gui/LastUsedDirHelper.h>
+#include <U2Gui/OpenViewTask.h>
+#include <U2Gui/SaveDocumentController.h>
+#include <U2Gui/U2FileDialog.h>
+#include <U2Gui/U2WidgetStateStorage.h>
+
+#include "AlignToReferenceBlastDialog.h"
+#include "AlignToReferenceBlastWorker.h"
+
+namespace U2 {
+
+AlignToReferenceBlastCmdlineTask::Settings::Settings()
+    : minIdentity(60),
+      minLength(0),
+      qualityThreshold(30),
+      rowNaming(SequenceName),
+      addResultToProject(true)
+{
+
+}
+
+QString AlignToReferenceBlastCmdlineTask::Settings::getRowNamingPolicyString() const {
+    switch (rowNaming) {
+    case SequenceName:
+        return LocalWorkflow::AlignToReferenceBlastWorkerFactory::ROW_NAMING_SEQUENCE_NAME_VALUE;
+        break;
+    case FileName:
+        return LocalWorkflow::AlignToReferenceBlastWorkerFactory::ROW_NAMING_FILE_NAME_VALUE;
+        break;
+    default:
+        FAIL("An unknown row naming policy", LocalWorkflow::AlignToReferenceBlastWorkerFactory::ROW_NAMING_SEQUENCE_NAME_VALUE);
+    }
+}
+
+const QString AlignToReferenceBlastCmdlineTask::ALIGN_TO_REF_CMDLINE = "align-to-reference";
+
+const QString AlignToReferenceBlastCmdlineTask::TRIM_ARG = "trim-both-ends";
+const QString AlignToReferenceBlastCmdlineTask::MIN_LEN_ARG = "min-length";
+const QString AlignToReferenceBlastCmdlineTask::THRESHOLD_ARG = "threshold";
+
+const QString AlignToReferenceBlastCmdlineTask::READS_ARG = "reads";
+
+const QString AlignToReferenceBlastCmdlineTask::MIN_IDENTITY_ARG = "min-identity";
+const QString AlignToReferenceBlastCmdlineTask::ROW_NAMING_ARG = "row-naming-policy";
+const QString AlignToReferenceBlastCmdlineTask::REF_ARG = "reference";
+const QString AlignToReferenceBlastCmdlineTask::RESULT_ALIGNMENT_ARG = "result-url";
+
+AlignToReferenceBlastCmdlineTask::AlignToReferenceBlastCmdlineTask(const Settings &settings)
+    : Task(tr("Map Sanger reads to reference"), TaskFlags_FOSE_COSC | TaskFlag_MinimizeSubtaskErrorText | TaskFlag_ReportingIsEnabled | TaskFlag_ReportingIsSupported),
+      settings(settings),
+      cmdlineTask(NULL),
+      loadRef(NULL),
+      reportFile(AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath() + "/align_to_ref_XXXXXX.txt")
+{
+    GCOUNTER(cvar, tvar, "AlignToReferenceBlastCmdlineTask");
+}
+
+void AlignToReferenceBlastCmdlineTask::prepare() {
+    AppContext::getAppSettings()->getUserAppsSettings()->createCurrentProcessTemporarySubDir(stateInfo);
+    const bool opened = reportFile.open();
+    SAFE_POINT_EXT(opened, setError(L10N::errorOpeningFileWrite(reportFile.fileName())), );
+    reportFile.close();
+
+    FormatDetectionConfig config;
+    QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(settings.referenceUrl, config);
+    CHECK_EXT(!formats.isEmpty() && (NULL != formats.first().format), setError(tr("wrong reference format")), );
+
+    DocumentFormat *format = formats.first().format;
+    CHECK_EXT(format->getSupportedObjectTypes().contains(GObjectTypes::SEQUENCE), setError(tr("wrong reference format")), );
+
+    loadRef = new LoadDocumentTask(format->getFormatId(),
+        settings.referenceUrl, AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(settings.referenceUrl)));
+    addSubTask(loadRef);
+}
+
+namespace {
+
+static const QString DIV = "div";
+static const QString CLASS = "class";
+static const QString ID = "id";
+static const QString CLASS_WORKER = "worker";
+static const QString CLASS_TASK = "task";
+
+QMap<QString, QMultiMap<QString, QString> > splitReports(U2OpStatus &os, const QString &reportString) {
+    QMap<QString, QMultiMap<QString, QString> > result;
+    QDomDocument document;
+    document.setContent("<html><body>" + reportString + "</body></html>");
+    const QDomNodeList workersList = document.firstChildElement("html").firstChildElement("body").childNodes();
+    for (int i = 0; i < workersList.size(); i++) {
+        QDomElement workerElement = workersList.item(i).toElement();
+
+        const QString workerElementClass = workerElement.attribute(CLASS);
+        SAFE_POINT_EXT(CLASS_WORKER == workerElementClass, os.setError(QString("An unknown element class: %1").arg(workerElementClass)), result);
+
+        const QDomNodeList tasksList = workerElement.childNodes();
+        for (int j = 0; j < tasksList.size(); j++) {
+            QDomElement taskElement = tasksList.item(j).toElement();
+
+            const QString taskElementClass = taskElement.attribute(CLASS);
+            SAFE_POINT_EXT(CLASS_TASK == taskElementClass, os.setError(QString("An unknown element class: %1").arg(taskElementClass)), result);
+
+            result[workerElement.attribute(ID)].insert(taskElement.attribute(ID), QByteArray::fromBase64(taskElement.text().toUtf8()));
+        }
+    }
+    return result;
+}
+
+}
+
+QString AlignToReferenceBlastCmdlineTask::generateReport() const {
+    U2OpStatusImpl os;
+    QMap<QString, QMultiMap<QString, QString> > reports = splitReports(os, reportString);
+
+    QMultiMap<QString, QString> mapperReports = reports.value(LocalWorkflow::AlignToReferenceBlastWorkerFactory::ACTOR_ID, QMultiMap<QString, QString>());
+    CHECK(mapperReports.size() > 0, "");
+
+    QString resultReport = mapperReports.values().first();
+
+    QMultiMap<QString, QString> trimReports = reports.value("SequenceQualityTrim", QMultiMap<QString, QString>());
+    if (trimReports.values().size() > 0) {
+        resultReport += tr("<u>Filtered by quality (%1):</u>").arg(trimReports.values().size());
+        resultReport += "<table>";
+    }
+
+    QRegExp readNameExtractor(".*\'(.*)\'.*");
+    foreach (const QString &taskReport, trimReports.values()) {
+        readNameExtractor.indexIn(taskReport);
+        resultReport += "<tr><td width=50></td><td width=300 nowrap>" + readNameExtractor.cap(1) + "</td></tr>";
+    }
+
+    if (trimReports.values().size() > 0) {
+        resultReport += "</table>";
+    }
+
+    return resultReport;
+}
+
+QList<Task*> AlignToReferenceBlastCmdlineTask::onSubTaskFinished(Task *subTask) {
+    QList<Task*> result;
+    CHECK(subTask != NULL, result);
+    CHECK(!subTask->isCanceled() && !subTask->hasError(), result);
+    if (loadRef == subTask) {
+        CmdlineInOutTaskConfig config;
+
+        config.command = "--task=" + ALIGN_TO_REF_CMDLINE;
+        QString argString = "--%1=\"%2\"";
+        config.arguments << argString.arg(REF_ARG).arg(QFileInfo(settings.referenceUrl).absoluteFilePath());
+        config.arguments << argString.arg(READS_ARG).arg(settings.readUrls.join(";"));
+        config.arguments << argString.arg(MIN_IDENTITY_ARG).arg(settings.minIdentity);
+        config.arguments << argString.arg(ROW_NAMING_ARG).arg(settings.getRowNamingPolicyString());
+        config.arguments << argString.arg(MIN_LEN_ARG).arg(settings.minLength);
+        config.arguments << argString.arg(THRESHOLD_ARG).arg(settings.qualityThreshold);
+        config.arguments << argString.arg(TRIM_ARG).arg(true);
+        config.arguments << argString.arg(RESULT_ALIGNMENT_ARG).arg(QFileInfo(settings.outAlignment).absoluteFilePath());
+
+        config.reportFile = reportFile.fileName();
+        config.emptyOutputPossible = true;
+
+        cmdlineTask = new CmdlineInOutTaskRunner(config);
+        result.append(cmdlineTask);
+    } else if (subTask == cmdlineTask && settings.addResultToProject) {
+        // add load document task
+        FormatDetectionConfig config;
+        QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(settings.outAlignment, config);
+        CHECK_EXT(!formats.isEmpty() && (NULL != formats.first().format), setError(tr("wrong output format")), result);
+
+        DocumentFormat *format = formats.first().format;
+        CHECK_EXT(format->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_CHROMATOGRAM_ALIGNMENT), setError(tr("wrong output format")), result);
+
+        LoadDocumentTask *loadTask= new LoadDocumentTask(format->getFormatId(),
+                                                         settings.outAlignment, AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(settings.outAlignment)));
+        AddDocumentAndOpenViewTask *openTask = new AddDocumentAndOpenViewTask(loadTask);
+        AppContext::getTaskScheduler()->registerTopLevelTask(openTask);
+    }
+
+    return result;
+}
+
+void AlignToReferenceBlastCmdlineTask::run() {
+    reportFile.open();
+    reportString = reportFile.readAll();
+}
+
+Task::ReportResult AlignToReferenceBlastCmdlineTask::report() {
+    if (loadRef != NULL) {
+        loadRef->cleanup();
+    }
+    return ReportResult_Finished;
+}
+
+const QString AlignToReferenceBlastDialog::defaultOutputName("sanger_reads_alignment.ugenedb");
+
+AlignToReferenceBlastDialog::AlignToReferenceBlastDialog(QWidget *parent)
+    : QDialog(parent),
+      saveController(NULL),
+      savableWidget(this)
+{
+    setupUi(this);
+    GCOUNTER(cvar, tvar, "'Map reads to reference' dialog opening");
+
+    new HelpButton(this, buttonBox, "20875232"); 
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Map"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+
+    connectSlots();
+    initSaveController();
+    readsListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+    cbRowNaming->addItem(tr("File name"), AlignToReferenceBlastCmdlineTask::Settings::FileName);
+    cbRowNaming->addItem(tr("Sequence name from file"), AlignToReferenceBlastCmdlineTask::Settings::SequenceName);
+    cbRowNaming->setCurrentIndex(cbRowNaming->findData(AlignToReferenceBlastCmdlineTask::Settings::SequenceName));
+
+    U2WidgetStateStorage::restoreWidgetState(savableWidget);
+    saveController->setPath(outputLineEdit->text());
+
+    new QShortcut(QKeySequence(Qt::Key_Delete), this, SLOT(sl_removeRead()));
+}
+
+void AlignToReferenceBlastDialog::initSaveController() {
+    SaveDocumentControllerConfig conf;
+    conf.defaultFormatId = BaseDocumentFormats::UGENEDB;
+    conf.fileDialogButton = setOutputButton;
+    conf.fileNameEdit = outputLineEdit;
+    conf.formatCombo = NULL;
+    conf.parentWidget = this;
+    conf.saveTitle = tr("Select Output File...");
+    conf.defaultFileName = GUrlUtils::getDefaultDataPath() + "/" + defaultOutputName;
+
+    const QList<DocumentFormatId> formats = QList<DocumentFormatId>() << BaseDocumentFormats::UGENEDB;
+    saveController = new SaveDocumentController(conf, formats, this);
+}
+
+AlignToReferenceBlastCmdlineTask::Settings AlignToReferenceBlastDialog::getSettings() const {
+    return settings;
+}
+
+void AlignToReferenceBlastDialog::accept() {
+    if (referenceLineEdit->text().isEmpty()) {
+        QMessageBox::warning(this, tr("Error"),
+                             tr("Reference sequence is not set."));
+        return;
+    }
+    settings.referenceUrl = referenceLineEdit->text();
+
+    if (readsListWidget->count() == 0) {
+        QMessageBox::warning(this, tr("Error"),
+                             tr("No reads provided."));
+        return;
+    }
+    QStringList readUrls;
+    for (int i = 0; i < readsListWidget->count(); i++) {
+        QListWidgetItem* item = readsListWidget->item(i);
+        SAFE_POINT(item != NULL, "Item is NULL", );
+        QString s = item->text();
+        readUrls.append(s);
+    }
+    settings.readUrls = readUrls;
+
+    settings.minIdentity = minIdentitySpinBox->value();
+    settings.minLength = 0;
+    settings.qualityThreshold = qualitySpinBox->value();
+    settings.rowNaming = static_cast<AlignToReferenceBlastCmdlineTask::Settings::RowNaming>(cbRowNaming->currentData().toInt());
+
+    if (outputLineEdit->text().isEmpty()) {
+        QMessageBox::warning(this, tr("Error"),
+                             tr("Output file is not set."));
+        return;
+    }
+    settings.outAlignment = outputLineEdit->text();
+    settings.addResultToProject = addToProjectCheckbox->isChecked();
+
+    QString outUrl = saveController->getSaveFileName();
+    QFile outFile(outUrl);
+    if (outFile.exists()) {
+        QMessageBox::StandardButtons buttons = QMessageBox::Yes | QMessageBox::Cancel;
+        QObjectScopedPointer<QMessageBox> messageBox = new QMessageBox(QMessageBox::Question,
+            tr("Overwrite the file?"),
+            tr("The result file already exists. Would you like to overwrite it?"),
+            buttons,
+            this);
+        messageBox->setIcon(QMessageBox::Question);
+        messageBox->exec();
+        CHECK(!messageBox.isNull(), )
+        if (messageBox->result() == QMessageBox::Cancel) {
+            return;
+        }
+        if (!outFile.remove()) {
+            QMessageBox::critical(this, tr("Error"), tr("Unable to delete the file."));
+            return;
+        }
+    }
+
+    QDialog::accept();
+}
+
+void AlignToReferenceBlastDialog::sl_setReference() {
+    LastUsedDirHelper lod;
+    QString filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true);
+
+    lod.url = U2FileDialog::getOpenFileName(this, tr("Open Reference Sequence"), lod.dir, filter);
+    if (lod.url.isEmpty()) {
+        return;
+    }
+    referenceLineEdit->setText(lod.url);
+}
+
+void AlignToReferenceBlastDialog::sl_addRead() {
+    LastUsedDirHelper lod;
+    QString filter = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true);
+
+    QStringList readFiles = U2FileDialog::getOpenFileNames(this, tr("Select File(s) with Read(s)"), lod.dir, filter);
+    if (readFiles.isEmpty()) {
+        return;
+    }
+
+    foreach (const QString& read, readFiles) {
+        if (readsListWidget->findItems(read, Qt::MatchExactly).isEmpty()) {
+            readsListWidget->addItem(read);
+        }
+    }
+}
+
+void AlignToReferenceBlastDialog::sl_removeRead() {
+    QList<QListWidgetItem*> selection = readsListWidget->selectedItems();
+    CHECK(!selection.isEmpty(), );
+
+    foreach (QListWidgetItem* item, selection) {
+        readsListWidget->takeItem(readsListWidget->row(item));
+    }
+    qDeleteAll(selection);
+}
+
+void AlignToReferenceBlastDialog::sl_referenceChanged(const QString &newRef) {
+    QFileInfo outFileFi(outputLineEdit->text());
+    if (!fitsDefaultPattern(outFileFi.fileName())) {
+        return;
+    }
+    
+    QFileInfo referenceFileInfo(newRef);
+    QString newOutFileName = referenceFileInfo.baseName() + "_" + defaultOutputName;
+    QString outUrl = outFileFi.dir().absolutePath() + "/" + newOutFileName;
+    saveController->setPath(outUrl);
+}
+
+void AlignToReferenceBlastDialog::connectSlots() {
+    connect(setReferenceButton, SIGNAL(clicked(bool)), SLOT(sl_setReference()));
+    connect(addReadButton, SIGNAL(clicked(bool)), SLOT(sl_addRead()));
+    connect(removeReadButton, SIGNAL(clicked(bool)), SLOT(sl_removeRead()));
+    connect(referenceLineEdit, SIGNAL(textChanged(const QString &)), SLOT(sl_referenceChanged(const QString &)));
+}
+
+bool AlignToReferenceBlastDialog::fitsDefaultPattern(const QString &name) const {
+    if (name.endsWith(defaultOutputName)) {
+        return true;
+    }
+    return false;
+}
+
+} // namespace
diff --git a/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.h b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.h
new file mode 100644
index 0000000..2ca6271
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.h
@@ -0,0 +1,119 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_H_
+#define _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_H_
+
+#include <QDialog>
+#include <QTemporaryFile>
+
+#include <U2Core/Task.h>
+
+#include <U2Gui/U2SavableWidget.h>
+
+#include "ui_AlignToReferenceBlastDialog.h"
+
+namespace U2 {
+
+class CmdlineInOutTaskRunner;
+class SaveDocumentController;
+class LoadDocumentTask;
+
+class AlignToReferenceBlastCmdlineTask : public Task {
+    Q_OBJECT
+public:
+    class Settings {
+    public:
+        enum RowNaming {
+            SequenceName,
+            FileName
+        };
+
+        Settings();
+
+        QString getRowNamingPolicyString() const;
+
+        QString referenceUrl;
+        QStringList readUrls;
+        int minIdentity;
+        int minLength;
+        int qualityThreshold;
+        RowNaming rowNaming;
+        QString outAlignment;
+        bool addResultToProject;
+    };
+
+    AlignToReferenceBlastCmdlineTask(const Settings& settings);
+
+private:
+    void prepare();
+    QString generateReport() const;
+    QList<Task*> onSubTaskFinished(Task *subTask);
+    void run();
+    ReportResult report();
+
+    Settings settings;
+    CmdlineInOutTaskRunner *cmdlineTask;
+    LoadDocumentTask *loadRef;
+
+    QTemporaryFile reportFile;
+    QString reportString;
+
+    static const QString ALIGN_TO_REF_CMDLINE;
+    static const QString TRIM_ARG;
+    static const QString MIN_LEN_ARG;
+    static const QString THRESHOLD_ARG;
+    static const QString READS_ARG;
+    static const QString MIN_IDENTITY_ARG;
+    static const QString REF_ARG;
+    static const QString RESULT_ALIGNMENT_ARG;
+    static const QString ROW_NAMING_ARG;
+};
+
+class AlignToReferenceBlastDialog : public QDialog, public Ui_AlignToReferenceBlastDialog {
+    Q_OBJECT
+public:
+    AlignToReferenceBlastDialog(QWidget* parent);
+    AlignToReferenceBlastCmdlineTask::Settings getSettings() const;
+
+public slots:
+    void accept();
+
+private slots:
+    void sl_setReference();
+    void sl_addRead();
+    void sl_removeRead();
+    void sl_referenceChanged(const QString &);
+private:
+    void initSaveController();
+    void connectSlots();
+    bool fitsDefaultPattern(const QString &name) const;
+
+    SaveDocumentController *saveController;
+    AlignToReferenceBlastCmdlineTask::Settings settings;
+    U2SavableWidget savableWidget;
+
+    static const QString defaultOutputName;
+};
+
+} // namespace
+
+#endif // _U2_ALIGN_TO_REFERENCE_BLAST_DIALOG_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.ui b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.ui
new file mode 100644
index 0000000..33b5a7b
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastDialog.ui
@@ -0,0 +1,235 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AlignToReferenceBlastDialog</class>
+ <widget class="QDialog" name="AlignToReferenceBlastDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>570</width>
+    <height>597</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Map Sanger Reads to Reference</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <widget class="QGroupBox" name="groupBox_2">
+     <property name="title">
+      <string>Input data</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_3">
+      <item>
+       <widget class="QLabel" name="label_2">
+        <property name="text">
+         <string>Reference</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_3">
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QLineEdit" name="referenceLineEdit">
+          <property name="placeholderText">
+           <string>Input a file with a reference sequence</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="setReferenceButton">
+          <property name="text">
+           <string>...</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <widget class="QLabel" name="label">
+        <property name="text">
+         <string>Reads</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QListWidget" name="readsListWidget"/>
+      </item>
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout_2">
+        <item>
+         <spacer name="horizontalSpacer">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>40</width>
+            <height>20</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="addReadButton">
+          <property name="text">
+           <string>Add</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QPushButton" name="removeReadButton">
+          <property name="text">
+           <string>Remove</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Settings</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="qualitySpinBox">
+        <property name="maximum">
+         <number>999999999</number>
+        </property>
+        <property name="value">
+         <number>30</number>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="label_4">
+        <property name="text">
+         <string>Mapping min similarity</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QSpinBox" name="minIdentitySpinBox">
+        <property name="suffix">
+         <string>%</string>
+        </property>
+        <property name="singleStep">
+         <number>10</number>
+        </property>
+        <property name="value">
+         <number>80</number>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="label_5">
+        <property name="text">
+         <string>Trimming quality threshold</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="lblRowNaming">
+        <property name="text">
+         <string>Read name in result alignment</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QComboBox" name="cbRowNaming"/>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Result alignment</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_2">
+      <item>
+       <layout class="QHBoxLayout" name="horizontalLayout">
+        <item>
+         <widget class="QLineEdit" name="outputLineEdit">
+          <property name="placeholderText">
+           <string>Input the result file path</string>
+          </property>
+         </widget>
+        </item>
+        <item>
+         <widget class="QToolButton" name="setOutputButton">
+          <property name="text">
+           <string>...</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <widget class="QCheckBox" name="addToProjectCheckbox">
+        <property name="text">
+         <string>Add to project</string>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AlignToReferenceBlastDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AlignToReferenceBlastDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.cpp b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.cpp
new file mode 100644
index 0000000..a9a274c
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.cpp
@@ -0,0 +1,390 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/FormatUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
+
+#include "AlignToReferenceBlastWorker.h"
+#include "align_worker_subtasks/BlastReadsSubTask.h"
+#include "align_worker_subtasks/ComposeResultSubTask.h"
+#include "align_worker_subtasks/FormatDBSubTask.h"
+#include "align_worker_subtasks/PrepareReferenceSequenceTask.h"
+#include "blast/FormatDBSupport.h"
+#include "blast_plus/BlastPlusSupport.h"
+
+namespace U2 {
+namespace LocalWorkflow {
+
+const QString AlignToReferenceBlastWorkerFactory::ACTOR_ID("align-to-reference");
+const QString AlignToReferenceBlastWorkerFactory::ROW_NAMING_SEQUENCE_NAME = QObject::tr("Sequence name from file");
+const QString AlignToReferenceBlastWorkerFactory::ROW_NAMING_FILE_NAME = QObject::tr("File name");
+const QString AlignToReferenceBlastWorkerFactory::ROW_NAMING_SEQUENCE_NAME_VALUE = "sequence name";
+const QString AlignToReferenceBlastWorkerFactory::ROW_NAMING_FILE_NAME_VALUE = "file name";
+
+namespace {
+    const QString OUT_PORT_ID = "out";
+    const QString REF_ATTR_ID = "reference";
+    const QString RESULT_URL_ATTR_ID = "result-url";
+    const QString IDENTITY_ID = "identity";
+    const QString ROW_NAMING_ID = "row-naming-policy";
+}
+
+/************************************************************************/
+/* AlignToReferenceBlastWorkerFactory */
+/************************************************************************/
+AlignToReferenceBlastWorkerFactory::AlignToReferenceBlastWorkerFactory()
+: DomainFactory(ACTOR_ID)
+{
+
+}
+
+Worker * AlignToReferenceBlastWorkerFactory::createWorker(Actor *a) {
+    return new AlignToReferenceBlastWorker(a);
+}
+
+void AlignToReferenceBlastWorkerFactory::init() {
+    QList<PortDescriptor*> ports;
+    {
+        Descriptor inDesc(BasePorts::IN_SEQ_PORT_ID(), AlignToReferenceBlastPrompter::tr("Input sequence"), AlignToReferenceBlastPrompter::tr("Input sequence."));
+        Descriptor outDesc(OUT_PORT_ID, AlignToReferenceBlastPrompter::tr("Aligned data"), AlignToReferenceBlastPrompter::tr("Aligned data."));
+
+        QMap<Descriptor, DataTypePtr> inType;
+        inType[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
+
+        QMap<Descriptor, DataTypePtr> outType;
+        outType[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
+        outType[BaseSlots::ANNOTATION_TABLE_SLOT()] = BaseTypes::ANNOTATION_TABLE_TYPE();
+
+        ports << new PortDescriptor(inDesc, DataTypePtr(new MapDataType(ACTOR_ID + "-in", inType)), true /*input*/);
+        ports << new PortDescriptor(outDesc, DataTypePtr(new MapDataType(ACTOR_ID + "-out", outType)), false /*input*/, true /*multi*/);
+    }
+    QList<Attribute*> attributes;
+    {
+        Descriptor refDesc(REF_ATTR_ID, AlignToReferenceBlastPrompter::tr("Reference URL"),
+                           AlignToReferenceBlastPrompter::tr("A URL to the file with a reference sequence."));
+        attributes << new Attribute(refDesc, BaseTypes::STRING_TYPE(), true);
+
+        Descriptor outputUrlDesc(RESULT_URL_ATTR_ID, AlignToReferenceBlastPrompter::tr("Result alignment URL"),
+                           AlignToReferenceBlastPrompter::tr("An URL to write the result alignment."));
+        attributes << new Attribute(outputUrlDesc, BaseTypes::STRING_TYPE(), true);
+
+        Descriptor identityDesc(IDENTITY_ID, AlignToReferenceBlastPrompter::tr("Mapping min similarity"),
+                                AlignToReferenceBlastPrompter::tr("Reads, whose similarity with the reference is less than the stated value, will be ignored."));
+        attributes << new Attribute(identityDesc, BaseTypes::NUM_TYPE(), false, 80);
+
+        Descriptor rowNamingDesc(ROW_NAMING_ID, AlignToReferenceBlastPrompter::tr("Read name in result alignment"),
+                                AlignToReferenceBlastPrompter::tr("Reads in the result alignment can be named either by names of the sequences in the input files or by the input files names. "
+                                                                  "For example, if the sequences have the same name, set this value to \"File name\" to be able to distinguish the reads in the result alignment."));
+        attributes << new Attribute(rowNamingDesc, BaseTypes::STRING_TYPE(), false, ROW_NAMING_SEQUENCE_NAME_VALUE);
+    }
+
+    QMap<QString, PropertyDelegate*> delegates;
+    {
+        delegates[REF_ATTR_ID] = new URLDelegate("", "", false, false, false);
+        delegates[RESULT_URL_ATTR_ID] = new URLDelegate(FormatUtils::prepareDocumentsFileFilter(BaseDocumentFormats::UGENEDB, false, QStringList()), "", false, false, true, NULL, BaseDocumentFormats::UGENEDB);
+        QVariantMap m;
+        m["minimum"] = 0;
+        m["maximum"] = 100;
+        m["suffix"] = "%";
+        delegates[IDENTITY_ID] = new SpinBoxDelegate(m);
+
+        QVariantMap rowNamingMap;
+        rowNamingMap.insert(ROW_NAMING_SEQUENCE_NAME, ROW_NAMING_SEQUENCE_NAME_VALUE);
+        rowNamingMap.insert(ROW_NAMING_FILE_NAME, ROW_NAMING_FILE_NAME_VALUE);
+        delegates[ROW_NAMING_ID] = new ComboBoxDelegate(rowNamingMap);
+    }
+
+    Descriptor desc(ACTOR_ID, AlignToReferenceBlastWorker::tr("Map to Reference"),
+        AlignToReferenceBlastWorker::tr("Align input sequences (e.g. Sanger reads) to the reference sequence."));
+    ActorPrototype *proto = new IntegralBusActorPrototype(desc, ports, attributes);
+    proto->setEditor(new DelegateEditor(delegates));
+    proto->setPrompter(new AlignToReferenceBlastPrompter(NULL));
+    proto->addExternalTool(ET_BLASTN);
+    proto->addExternalTool(ET_MAKEBLASTDB);
+    WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_ALIGNMENT(), proto);
+
+    DomainFactory *localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
+    localDomain->registerEntry(new AlignToReferenceBlastWorkerFactory());
+}
+
+/************************************************************************/
+/* AlignToReferenceBlastPrompter */
+/************************************************************************/
+AlignToReferenceBlastPrompter::AlignToReferenceBlastPrompter(Actor *a)
+: PrompterBase<AlignToReferenceBlastPrompter>(a)
+{
+
+}
+
+QString AlignToReferenceBlastPrompter::composeRichDoc() {
+    IntegralBusPort *input = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_SEQ_PORT_ID()));
+    SAFE_POINT(NULL != input, "No input port", "");
+    Actor *producer = input->getProducer(BaseSlots::DNA_SEQUENCE_SLOT().getId());
+    const QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
+    const QString producerName = (NULL != producer) ? producer->getLabel() : unsetStr;
+    const QString refLink = getHyperlink(REF_ATTR_ID, getURL(REF_ATTR_ID));
+    return tr("Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.").arg(producerName).arg(refLink);
+}
+
+/************************************************************************/
+/* AlignToReferenceBlastWorker */
+/************************************************************************/
+AlignToReferenceBlastWorker::AlignToReferenceBlastWorker(Actor *a)
+    : BaseDatasetWorker(a, BasePorts::IN_SEQ_PORT_ID(), OUT_PORT_ID)
+{
+
+}
+
+Task *AlignToReferenceBlastWorker::createPrepareTask(U2OpStatus & /*os*/) const {
+    const QString referenceUrl = getValue<QString>(REF_ATTR_ID);
+    return new PrepareReferenceSequenceTask(referenceUrl, context->getDataStorage()->getDbiRef());
+}
+
+void AlignToReferenceBlastWorker::onPrepared(Task *task, U2OpStatus &os) {
+    PrepareReferenceSequenceTask *prepareTask = qobject_cast<PrepareReferenceSequenceTask *>(task);
+    CHECK_EXT(NULL != prepareTask, os.setError(L10N::internalError("Unexpected prepare task")), );
+    reference = context->getDataStorage()->getDataHandler(prepareTask->getReferenceEntityRef());
+    referenceUrl = prepareTask->getPreparedReferenceUrl();
+}
+
+Task * AlignToReferenceBlastWorker::createTask(const QList<Message> &messages) const {
+    QList<SharedDbiDataHandler> reads;
+    QMap<SharedDbiDataHandler, QString> readsNames;
+    foreach (const Message &message, messages) {
+        QVariantMap data = message.getData().toMap();
+        if (data.contains(BaseSlots::DNA_SEQUENCE_SLOT().getId())) {
+            const SharedDbiDataHandler read = data[BaseSlots::DNA_SEQUENCE_SLOT().getId()].value<SharedDbiDataHandler>();
+            reads << read;
+            readsNames.insert(read, getReadName(message));
+        }
+    }
+    int readIdentity = getValue<int>(IDENTITY_ID);
+    return new AlignToReferenceBlastTask(referenceUrl, getValue<QString>(RESULT_URL_ATTR_ID), reference, reads, readsNames, readIdentity, context->getDataStorage());
+}
+
+QVariantMap AlignToReferenceBlastWorker::getResult(Task *task, U2OpStatus &os) const {
+    AlignToReferenceBlastTask *alignTask = qobject_cast<AlignToReferenceBlastTask*>(task);
+    CHECK_EXT(NULL != alignTask, os.setError(L10N::internalError("Unexpected task")), QVariantMap());
+
+    const QList<QPair<QString, QPair<int, bool> > > acceptedReads = alignTask->getAcceptedReads();
+    const QList<QPair<QString, int> > discardedReads = alignTask->getDiscardedReads();
+
+    algoLog.info(QString("Reads discarded by the mapper: %1").arg(discardedReads.count()));
+    QPair<QString, int> discardedPair;
+    foreach(discardedPair, discardedReads) {
+        algoLog.details(discardedPair.first);
+    }
+    algoLog.info(QString("Reads accepted by the mapper: %1").arg(acceptedReads.count()));
+    QPair<QString, QPair<int, bool> > pair;
+    foreach(pair, acceptedReads) {
+        algoLog.details((pair.second.second ? "&#x2190;  " : "&#x2192;  ") + pair.first);
+    }
+    algoLog.info(QString("Total reads processed by the mapper: %1").arg(acceptedReads.count() + discardedReads.count()));
+
+    if (0 != discardedReads.count()) {
+        monitor()->addInfo(QString("%1 %2 not mapped").arg(discardedReads.count()).arg(discardedReads.count() == 1 ? "read was" : "reads were"), actor->getId(), Problem::U2_WARNING);
+    }
+
+    const QString resultUrl = alignTask->getResultUrl();
+    if (QFileInfo(resultUrl).exists()) {
+        monitor()->addOutputFile(resultUrl, actor->getId());
+    } else {
+        os.setError(tr("The result file was not produced"));
+    }
+
+    QVariantMap result;
+    result[BaseSlots::DNA_SEQUENCE_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(reference);
+    result[BaseSlots::ANNOTATION_TABLE_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(alignTask->getAnnotations());
+    return result;
+}
+
+MessageMetadata AlignToReferenceBlastWorker::generateMetadata(const QString &datasetName) const {
+    return MessageMetadata(getValue<QString>(REF_ATTR_ID), datasetName);
+}
+
+QString AlignToReferenceBlastWorker::getReadName(const Message &message) const {
+    CHECK(AlignToReferenceBlastWorkerFactory::ROW_NAMING_FILE_NAME_VALUE == getValue<QString>(ROW_NAMING_ID), "");
+    const int metadataId = message.getMetadataId();
+    const MessageMetadata metadata = context->getMetadataStorage().get(metadataId);
+    return GUrlUtils::getUncompressedCompleteBaseName(metadata.getFileUrl());
+}
+
+/************************************************************************/
+/* AlignToReferenceBlastTask */
+/************************************************************************/
+AlignToReferenceBlastTask::AlignToReferenceBlastTask(const QString& refUrl, const QString &resultUrl,
+                                                     const SharedDbiDataHandler &reference,
+                                                     const QList<SharedDbiDataHandler> &reads,
+                                                     const QMap<SharedDbiDataHandler, QString> &readsNames,
+                                                     int minIdentityPercent,
+                                                     DbiDataStorage *storage)
+    : Task(tr("Map to reference"), TaskFlags_NR_FOSE_COSC | TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
+      referenceUrl(refUrl),
+      resultUrl(resultUrl),
+      reference(reference),
+      reads(reads),
+      readsNames(readsNames),
+      minIdentityPercent(minIdentityPercent),
+      formatDbSubTask(NULL),
+      blastTask(NULL),
+      composeSubTask(NULL),
+      saveTask(NULL),
+      storage(storage)
+{
+    GCOUNTER(cvar, tvar, "AlignToReferenceBlastTask");
+}
+
+void AlignToReferenceBlastTask::prepare() {
+    formatDbSubTask = new U2::Workflow::FormatDBSubTask(referenceUrl, reference, storage);
+    addSubTask(formatDbSubTask);
+}
+
+QList<Task*> AlignToReferenceBlastTask::onSubTaskFinished(Task *subTask) {
+    QList<Task*> result;
+    CHECK(subTask != NULL, result);
+    CHECK(!subTask->isCanceled() && !subTask ->hasError(), result);
+
+    if (subTask == formatDbSubTask) {
+        QString dbPath = formatDbSubTask->getResultPath();
+        blastTask = new BlastReadsSubTask(dbPath, reads, reference, minIdentityPercent, readsNames, storage);
+        result << blastTask;
+    } else if (subTask == blastTask) {
+        composeSubTask = new ComposeResultSubTask(reference, reads, blastTask->getBlastSubtasks(), storage);
+        composeSubTask->setSubtaskProgressWeight(0.5f);
+        result << composeSubTask;
+    } else if (subTask == composeSubTask) {
+        DocumentFormat *ugenedbFormat = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::UGENEDB);
+        QScopedPointer<Document> document(ugenedbFormat->createNewLoadedDocument(IOAdapterUtils::get(IOAdapterUtils::url2io(resultUrl)), resultUrl, stateInfo));
+        CHECK_OP(stateInfo, result);
+
+        document->setDocumentOwnsDbiResources(false);
+
+        MultipleChromatogramAlignmentObject *mcaObject = composeSubTask->takeMcaObject();
+        SAFE_POINT_EXT(NULL != mcaObject, setError("Result MCA object is NULL"), result);
+        document->addObject(mcaObject);
+
+        U2SequenceObject *referenceSequenceObject = composeSubTask->takeReferenceSequenceObject();
+        SAFE_POINT_EXT(NULL != referenceSequenceObject, setError("Result reference sequence object is NULL"), result);
+        document->addObject(referenceSequenceObject);
+
+        mcaObject->addObjectRelation(GObjectRelation(GObjectReference(referenceSequenceObject), ObjectRole_ReferenceSequence));
+
+        saveTask = new SaveDocumentTask(document.take(), SaveDocFlags(SaveDoc_DestroyAfter) | SaveDoc_Roll);
+        result << saveTask;
+    }
+    return result;
+}
+
+Task::ReportResult AlignToReferenceBlastTask::report() {
+    if (NULL != formatDbSubTask) {
+        QFileInfo(formatDbSubTask->getResultPath()).dir().removeRecursively();
+    }
+    return ReportResult_Finished;
+}
+
+QString AlignToReferenceBlastTask::generateReport() const {
+    QString result;
+
+    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
+    CHECK(NULL != refObject, "");
+
+    const QList<QPair<QString, QPair<int, bool> > > acceptedReads = getAcceptedReads();
+    const QList<QPair<QString, int> > filtredReads = getDiscardedReads();
+
+    result += "<br><table><tr><td><b>" + tr("Details") + "</b></td></tr></table>\n";
+    result += "<u>" + tr("Reference sequence:") + QString("</u> %1<br>").arg(refObject->getSequenceName());
+    result += "<u>" + tr("Mapped reads (%1):").arg(acceptedReads.size()) + "</u>";
+    result += "<table>";
+    QPair<QString, QPair<int, bool> > acceptedPair;
+    foreach(acceptedPair, acceptedReads) {
+        const QString arrow = acceptedPair.second.second ? "&#x2190;" : "&#x2192;";
+        const QString read = acceptedPair.first.replace("-", "‑");
+        const QString readIdentity = tr("similarity")+"  " + QString::number(acceptedPair.second.first) + "%";
+        result += "<tr><td align=right width=50>" + arrow + QString("</td><td><nobr>") + read + "</nobr></td><td><div style=\"margin-left:7px;\">" + readIdentity + "</div></td></tr>";
+    }
+    QPair<QString, int> filtredPair;
+    if (!filtredReads.isEmpty()) {
+        result += "<tr><td colspan=3><u>" + tr("Filtered by low similarity (%1):").arg(filtredReads.size()) + "</u></td></tr>";
+        foreach(filtredPair, filtredReads) {
+            const QString readIdentity = tr("similarity") + "  " + QString::number(filtredPair.second) + "%";
+            result += QString("<tr><td></td><td style=white-space:nowrap>") + filtredPair.first.replace("-", "‑") + "   " + "</td><td><div style=\"margin-left:7px;\">" + readIdentity + "</div></td></tr>";
+        }
+    }
+    result += "</table>";
+
+    return result;
+}
+
+QString AlignToReferenceBlastTask::getResultUrl() const {
+    CHECK(NULL != saveTask, "");
+    return saveTask->getURL().getURLString();
+}
+
+SharedDbiDataHandler AlignToReferenceBlastTask::getAnnotations() const {
+    CHECK(NULL != composeSubTask, SharedDbiDataHandler());
+    return composeSubTask->getAnnotations();
+}
+
+QList<QPair<QString, QPair<int, bool> > > AlignToReferenceBlastTask::getAcceptedReads() const {
+    QList<QPair<QString, QPair<int, bool> > > acceptedReads;
+    CHECK(NULL != blastTask, acceptedReads);
+    foreach (BlastAndSwReadTask *subTask, blastTask->getBlastSubtasks()) {
+        if (subTask->getReadIdentity() >= minIdentityPercent) {
+            QPair<int, bool> pair(subTask->getReadIdentity(), subTask->isComplement());
+            acceptedReads.append((QPair<QString, QPair<int, bool> >(subTask->getReadName(), pair)));
+        }
+    }
+    return acceptedReads;
+}
+
+QList<QPair<QString, int> > AlignToReferenceBlastTask::getDiscardedReads() const {
+    QList<QPair<QString, int> > discardedReads;
+    CHECK(NULL != blastTask, discardedReads);
+    foreach (BlastAndSwReadTask* subTask, blastTask->getBlastSubtasks()) {
+        if (subTask->getReadIdentity() < minIdentityPercent) {
+            discardedReads << QPair<QString, int>(subTask->getReadName(), subTask->getReadIdentity());
+        }
+    }
+    return discardedReads;
+}
+
+} // LocalWorkflow
+} // U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.h b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.h
new file mode 100644
index 0000000..7dc99af
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/AlignToReferenceBlastWorker.h
@@ -0,0 +1,132 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_ALIGN_TO_REFERENCE_BLAST_WORKER_H_
+#define _U2_ALIGN_TO_REFERENCE_BLAST_WORKER_H_
+
+#include <U2Lang/BaseDatasetWorker.h>
+#include <U2Lang/WorkflowUtils.h>
+
+
+namespace U2 {
+
+namespace Workflow {
+class BlastReadsSubTask;
+class FormatDBSubTask;
+class ComposeResultSubTask;
+}
+
+namespace LocalWorkflow {
+
+/************************************************************************/
+/* AlignToReferenceBlastTask */
+/************************************************************************/
+class AlignToReferenceBlastTask : public Task {
+    Q_OBJECT
+public:
+    AlignToReferenceBlastTask(const QString& refUrl,
+                              const QString &resultUrl,
+                              const SharedDbiDataHandler &reference,
+                              const QList<SharedDbiDataHandler> &reads,
+                              const QMap<SharedDbiDataHandler, QString> &readsNames,
+                              int minIdentityPercent,
+                              DbiDataStorage *storage);
+    QString getResultUrl() const;
+    SharedDbiDataHandler getAnnotations() const;
+    QList<QPair<QString, QPair<int, bool> > > getAcceptedReads() const;
+    QList<QPair<QString, int> > getDiscardedReads() const;
+
+private:
+    void prepare();
+    QString generateReport() const;
+    QList<Task*> onSubTaskFinished(Task *subTask);
+    ReportResult report();
+
+    const QString referenceUrl;
+    const QString resultUrl;
+    const SharedDbiDataHandler reference;
+    const QList<SharedDbiDataHandler> reads;
+    const QMap<SharedDbiDataHandler, QString> readsNames;
+    const int minIdentityPercent;
+
+    FormatDBSubTask* formatDbSubTask;
+    BlastReadsSubTask* blastTask;
+    ComposeResultSubTask *composeSubTask;
+    SaveDocumentTask *saveTask;
+
+    DbiDataStorage *storage;
+};
+
+/************************************************************************/
+/* AlignToReferenceBlastPrompter */
+/************************************************************************/
+class AlignToReferenceBlastPrompter : public PrompterBase<AlignToReferenceBlastPrompter> {
+    Q_OBJECT
+public:
+    AlignToReferenceBlastPrompter(Actor *a);
+
+protected:
+    QString composeRichDoc();
+};
+
+/************************************************************************/
+/* AlignToReferenceBlastWorker */
+/************************************************************************/
+class AlignToReferenceBlastWorker : public BaseDatasetWorker {
+    Q_OBJECT
+public:
+    AlignToReferenceBlastWorker(Actor *a);
+
+protected:
+    Task * createPrepareTask(U2OpStatus &os) const;
+    void onPrepared(Task *task, U2OpStatus &os);
+    Task * createTask(const QList<Message> &messages) const;
+    QVariantMap getResult(Task *task, U2OpStatus &os) const;
+    MessageMetadata generateMetadata(const QString &datasetName) const;
+
+private:
+    QString getReadName(const Message &message) const;
+
+    SharedDbiDataHandler reference;
+    QString referenceUrl;
+};
+
+/************************************************************************/
+/* AlignToReferenceBlastWorkerFactory */
+/************************************************************************/
+class AlignToReferenceBlastWorkerFactory : public DomainFactory {
+public:
+    AlignToReferenceBlastWorkerFactory();
+    Worker * createWorker(Actor *a);
+
+    static void init();
+
+    static const QString ACTOR_ID;
+    static const QString ROW_NAMING_SEQUENCE_NAME;
+    static const QString ROW_NAMING_FILE_NAME;
+    static const QString ROW_NAMING_SEQUENCE_NAME_VALUE;
+    static const QString ROW_NAMING_FILE_NAME_VALUE;
+};
+
+} // LocalWorkflow
+} // U2
+
+#endif // _U2_ALIGN_TO_REFERENCE_BLAST_WORKER_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
index eef0ee9..48ac592 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,7 +38,7 @@ BlastDBCmdDialog::BlastDBCmdDialog(BlastDBCmdSupportTaskSettings &_settings, QWi
     settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223228");
+    new HelpButton(this, buttonBox, "20875132");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Fetch"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h
index 5f7056f..764e15c 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui
index abac5a8..4ad50f4 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>538</width>
-    <height>300</height>
+    <width>463</width>
+    <height>214</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -31,117 +31,143 @@
   <property name="windowTitle">
    <string>Fetch Sequences from BLAST Database</string>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout">
+  <layout class="QGridLayout" name="gridLayout">
    <property name="sizeConstraint">
     <enum>QLayout::SetMinAndMaxSize</enum>
    </property>
-   <item>
-    <widget class="QWidget" name="inputData" native="true">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="minimumSize">
-      <size>
-       <width>520</width>
-       <height>270</height>
-      </size>
+   <property name="spacing">
+    <number>9</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox">
+     <property name="title">
+      <string>Query ID</string>
      </property>
-     <layout class="QVBoxLayout" name="verticalLayout_2">
+     <layout class="QHBoxLayout" name="horizontalLayout">
       <property name="sizeConstraint">
-       <enum>QLayout::SetDefaultConstraint</enum>
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
+      <property name="leftMargin">
+       <number>6</number>
+      </property>
+      <property name="topMargin">
+       <number>6</number>
+      </property>
+      <property name="rightMargin">
+       <number>6</number>
+      </property>
+      <property name="bottomMargin">
+       <number>6</number>
       </property>
-      <item>
-       <widget class="QLabel" name="label">
-        <property name="text">
-         <string>Query ID</string>
-        </property>
-       </widget>
-      </item>
       <item>
        <widget class="QLineEdit" name="queryIdEdit"/>
       </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="outputGroupBox">
+     <property name="title">
+      <string>Output path</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout_2">
+      <property name="sizeConstraint">
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
+      <property name="leftMargin">
+       <number>6</number>
+      </property>
+      <property name="topMargin">
+       <number>6</number>
+      </property>
+      <property name="rightMargin">
+       <number>6</number>
+      </property>
+      <property name="bottomMargin">
+       <number>6</number>
+      </property>
       <item>
-       <widget class="QGroupBox" name="dbSelectorWidget">
-        <property name="sizePolicy">
-         <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="title">
-         <string>Select database</string>
-        </property>
-        <layout class="QVBoxLayout" name="verticalLayout_10">
-         <property name="spacing">
-          <number>0</number>
-         </property>
-         <property name="leftMargin">
-          <number>10</number>
-         </property>
-         <property name="topMargin">
-          <number>0</number>
-         </property>
-         <property name="rightMargin">
-          <number>10</number>
-         </property>
-         <property name="bottomMargin">
-          <number>0</number>
-         </property>
-        </layout>
-       </widget>
-      </item>
-      <item>
-       <widget class="QLabel" name="label_3">
-        <property name="text">
-         <string>Output path</string>
+       <widget class="QLineEdit" name="outputPathLineEdit">
+        <property name="readOnly">
+         <bool>false</bool>
         </property>
        </widget>
       </item>
       <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_2">
-        <item>
-         <widget class="QLineEdit" name="outputPathLineEdit">
-          <property name="readOnly">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QToolButton" name="browseOutputButton">
-          <property name="text">
-           <string>...</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item>
-       <widget class="QCheckBox" name="addToProjectBox">
-        <property name="enabled">
-         <bool>true</bool>
-        </property>
+       <widget class="QToolButton" name="browseOutputButton">
         <property name="text">
-         <string>Add to project</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
+         <string>...</string>
         </property>
        </widget>
       </item>
      </layout>
     </widget>
    </item>
-   <item>
+   <item row="1" column="0">
+    <widget class="QGroupBox" name="dbSelectorWidget">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="maximumSize">
+      <size>
+       <width>538</width>
+       <height>100</height>
+      </size>
+     </property>
+     <property name="title">
+      <string>Select database</string>
+     </property>
+     <layout class="QVBoxLayout" name="verticalLayout_10">
+      <property name="spacing">
+       <number>6</number>
+      </property>
+      <property name="sizeConstraint">
+       <enum>QLayout::SetMinAndMaxSize</enum>
+      </property>
+      <property name="leftMargin">
+       <number>6</number>
+      </property>
+      <property name="topMargin">
+       <number>6</number>
+      </property>
+      <property name="rightMargin">
+       <number>6</number>
+      </property>
+      <property name="bottomMargin">
+       <number>6</number>
+      </property>
+     </layout>
+    </widget>
+   </item>
+   <item row="4" column="0">
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
      </property>
     </widget>
    </item>
+   <item row="3" column="0">
+    <widget class="QCheckBox" name="addToProjectBox">
+     <property name="enabled">
+      <bool>true</bool>
+     </property>
+     <property name="text">
+      <string>Add to project</string>
+     </property>
+     <property name="checked">
+      <bool>true</bool>
+     </property>
+    </widget>
+   </item>
   </layout>
+  <zorder>buttonBox</zorder>
+  <zorder>dbSelectorWidget</zorder>
+  <zorder>groupBox</zorder>
+  <zorder>addToProjectBox</zorder>
+  <zorder>outputGroupBox</zorder>
  </widget>
  <resources/>
  <connections>
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.cpp
index 6485e05..172a90f 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "BlastDBCmdDialog.h"
 #include "BlastDBCmdSupport.h"
@@ -70,7 +70,7 @@ BlastDbCmdSupport::BlastDbCmdSupport(const QString& path) : ExternalTool(ET_BLAS
 }
 
 void BlastDbCmdSupport::sl_runWithExtFileSpecify(){
-    //Check that BlastDBCmd directory path defined
+    //Check that BlastDBCmd folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle("BLAST+ " +name);
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.h b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.h
index d65d979..51b1721 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.cpp
index 05ed643..a515945 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.h
index a799de5..d753c98 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastDBCmdSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/SaveDocumentTask.h>
 #include "utils/ExportTasks.h"
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.cpp
index 8f3dca1..a92047f 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.h
index d4df7a6..a66242f 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastNPlusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.cpp
index 866be41..196ca48 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.h
index ae3e31e..438dda5 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPPlusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
index 5089bec..ebe7098 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,7 @@
 #include <U2View/ADVUtils.h>
 #include <U2View/AnnotatedDNAView.h>
 
+#include "AlignToReferenceBlastDialog.h"
 #include "BlastDBCmdDialog.h"
 #include "BlastDBCmdSupport.h"
 #include "BlastDBCmdSupportTask.h"
@@ -55,7 +56,9 @@
 #include "RPSBlastSupportTask.h"
 #include "TBlastNPlusSupportTask.h"
 #include "TBlastXPlusSupportTask.h"
+#include "blast/FormatDBSupport.h"
 #include "utils/ExternalToolSupportAction.h"
+#include "utils/ExternalToolUtils.h"
 
 namespace U2 {
 
@@ -164,7 +167,7 @@ BlastPlusSupport::BlastPlusSupport(const QString& name, const QString& path) : E
 }
 
 void BlastPlusSupport::sl_runWithExtFileSpecify(){
-    //Check that blastal and tempory directory path defined
+    //Check that blastal and tempory folder path defined
     QStringList toolList;
     toolList << ET_BLASTN << ET_BLASTP << ET_BLASTX << ET_TBLASTN << ET_TBLASTX << ET_RPSBLAST;
     bool isOneOfToolConfigured=false;
@@ -221,6 +224,24 @@ void BlastPlusSupport::sl_runWithExtFileSpecify(){
     AppContext::getTaskScheduler()->registerTopLevelTask(blastPlusSupportMultiTask);
 }
 
+void BlastPlusSupport::sl_runAlign() {
+    ExternalToolUtils::checkExtToolsPath(QStringList() << ET_BLASTN << ET_MAKEBLASTDB);
+
+    if (AppContext::getExternalToolRegistry()->getByName(ET_BLASTN)->getPath().isEmpty()
+            || AppContext::getExternalToolRegistry()->getByName(ET_MAKEBLASTDB)->getPath().isEmpty()){
+        return;
+    }
+
+    QObjectScopedPointer<AlignToReferenceBlastDialog> dlg = new AlignToReferenceBlastDialog(AppContext::getMainWindow()->getQMainWindow());
+    dlg->exec();
+    CHECK(!dlg.isNull(), );
+    CHECK(dlg->result() == QDialog::Accepted, );
+
+    AlignToReferenceBlastCmdlineTask::Settings settings = dlg->getSettings();
+    AlignToReferenceBlastCmdlineTask* task = new AlignToReferenceBlastCmdlineTask(settings);
+    AppContext::getTaskScheduler()->registerTopLevelTask(task);
+}
+
 ////////////////////////////////////////
 //BlastPlusSupportContext
 
@@ -299,7 +320,7 @@ void BlastPlusSupportContext::buildMenu(GObjectView* view, QMenu* m) {
 }
 
 void BlastPlusSupportContext::sl_showDialog() {
-    //Check that any of BLAST+ tools and tempory directory path defined
+    //Check that any of BLAST+ tools and tempory folder path defined
     bool isOneOfToolConfigured=false;
     foreach(QString toolName, toolList){
         if(!AppContext::getExternalToolRegistry()->getByName(toolName)->getPath().isEmpty()){
@@ -348,7 +369,7 @@ void BlastPlusSupportContext::sl_showDialog() {
     assert(av);
 
     ADVSequenceObjectContext* seqCtx = av->getSequenceInFocus();
-    QObjectScopedPointer<BlastPlusSupportRunDialog> dlg = new BlastPlusSupportRunDialog(seqCtx->getSequenceObject(), lastDBPath, lastDBName, av->getWidget());
+    QObjectScopedPointer<BlastPlusSupportRunDialog> dlg = new BlastPlusSupportRunDialog(seqCtx, lastDBPath, lastDBName, av->getWidget());
     dlg->exec();
     CHECK(!dlg.isNull(), );
 
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.h b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.h
index 8ce0cab..6a87c91 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,8 +40,11 @@ class BlastPlusSupport : public ExternalTool {
     Q_OBJECT
 public:
     BlastPlusSupport(const QString& name, const QString& path = "");
-public slots:
+
+private slots:
     void sl_runWithExtFileSpecify();
+    void sl_runAlign();
+
 private:
     QString lastDBPath;
     QString lastDBName;
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
index 82e0bd2..9874106 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -32,6 +32,7 @@
 #include <U2Core/CreateAnnotationTask.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
@@ -72,30 +73,28 @@ BlastPlusSupportCommonTask::BlastPlusSupportCommonTask(const BlastTaskSettings&
 
 void BlastPlusSupportCommonTask::prepare(){
     if(settings.databaseNameAndPath.contains(" ")){
-        stateInfo.setError("Database path have space(s). Try select any other directory without spaces.");
+        stateInfo.setError("Database path have space(s). Try select any other folder without spaces.");
         return;
     }
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
-
-    QString tmpDirName = "BlastPlus_"+QString::number(this->getTaskId())+"_"+
-                         QDate::currentDate().toString("dd.MM.yyyy")+"_"+
-                         QTime::currentTime().toString("hh.mm.ss.zzz")+"_"+
-                         QString::number(QCoreApplication::applicationPid())+"/";
-    //Check and remove subdir for temporary files
-    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(BLASTPLUS_TMP_DIR) + "/" + tmpDirName;
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
+
+    QString tmpDirPath = getAcceptableTempDir();
+    CHECK_EXT(!tmpDirPath.isEmpty(), setError(tr("The task uses a temporary folder to process the data. The folder path is required not to have spaces. "
+        "Please set up an appropriate path for the \"Temporary files\" parameter on the \"Directories\" tab of the UGENE Application Settings.")), );
+
     QDir tmpDir(tmpDirPath);
-    if(tmpDir.exists()){
-        foreach(const QString& file, tmpDir.entryList()){
+    if(tmpDir.exists()) {
+        foreach(const QString& file, tmpDir.entryList()) {
             tmpDir.remove(file);
         }
-        if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Subdirectory for temporary files exists. Can not remove this directory."));
+        if (!tmpDir.rmdir(tmpDir.absolutePath())) {
+            stateInfo.setError(tr("Subfolder for temporary files exists. Can not remove this folder."));
             return;
         }
     }
-    if(!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+    if(!tmpDir.mkpath(tmpDirPath)) {
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
     //Create ncbi.ini for windows or .ncbirc for unix like systems
@@ -115,14 +114,14 @@ void BlastPlusSupportCommonTask::prepare(){
     }
     url = tmpDirPath + "tmp.fa";
     if (url.contains(" ")){
-        stateInfo.setError("Temporary directory path have space(s). Try select any other directory without spaces.");
+        stateInfo.setError("Temporary folder path have space(s). Try select any other folder without spaces.");
         return;
     }
     DocumentFormat* df = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::FASTA);
     tmpDoc = df->createNewLoadedDocument(IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE), GUrl(url), stateInfo);
     CHECK_OP(stateInfo,);
 
-    U2EntityRef seqRef = U2SequenceUtils::import(tmpDoc->getDbiRef(), DNASequence(settings.querySequence, settings.alphabet), stateInfo);
+    U2EntityRef seqRef = U2SequenceUtils::import(stateInfo, tmpDoc->getDbiRef(), DNASequence(settings.querySequence, settings.alphabet));
     CHECK_OP(stateInfo,);
     sequenceObject = new U2SequenceObject("input sequence", seqRef);
     tmpDoc->addObject(sequenceObject);
@@ -132,6 +131,19 @@ void BlastPlusSupportCommonTask::prepare(){
     addSubTask(saveTemporaryDocumentTask);
 }
 
+QString BlastPlusSupportCommonTask::getAcceptableTempDir() const {
+    QString tmpDirName = "BlastPlus_" + QString::number(this->getTaskId()) + "_" +
+        QDate::currentDate().toString("dd.MM.yyyy") + "_" +
+        QTime::currentTime().toString("hh.mm.ss.zzz") + "_" +
+        QString::number(QCoreApplication::applicationPid()) + "/";
+
+    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath(BLASTPLUS_TMP_DIR);
+    if (!GUrlUtils::containSpaces(tmpDirPath)) {
+        return tmpDirPath + "/" + tmpDirName;
+    }
+    return QString();
+}
+
 QList<Task*> BlastPlusSupportCommonTask::onSubTaskFinished(Task* subTask) {
     QList<Task*> res;
     if(subTask->hasError()) {
@@ -200,7 +212,7 @@ Task::ReportResult BlastPlusSupportCommonTask::report(){
         tmpDir.remove(file);
     }
     if(!tmpDir.rmdir(tmpDir.absolutePath())){
-        stateInfo.setError(tr("Can not remove directory for temporary files."));
+        stateInfo.setError(tr("Can not remove folder for temporary files."));
         emit si_stateChanged();
     }
     return ReportResult_Finished;
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.h b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.h
index 8c74b84..a0b6719 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportCommonTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,6 +69,7 @@ private:
     void parseXMLResult();
     void parseXMLHit(const QDomNode &xml);
     void parseXMLHsp(const QDomNode &xml,const QString &id, const QString &def, const QString &accession);
+    QString getAcceptableTempDir() const;
 };
 
 class BlastPlusSupportMultiTask : public Task {
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
index 8d98d61..c453875 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,6 +49,9 @@
 #include <U2Gui/OpenViewTask.h>
 #include <U2Core/QObjectScopedPointer.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
 #include "BlastPlusSupport.h"
 #include "BlastPlusSupportRunDialog.h"
 #include "ExternalToolSupportSettingsController.h"
@@ -67,9 +70,10 @@ namespace {
 
 ////////////////////////////////////////
 //BlastAllSupportRunDialog
-BlastPlusSupportRunDialog::BlastPlusSupportRunDialog(U2SequenceObject *dnaso, QString &lastDBPath, QString &lastDBName, QWidget *parent)
-: BlastRunCommonDialog(parent, BlastPlus, true, getCompValues()), dnaso(dnaso), lastDBPath(lastDBPath), lastDBName(lastDBName)
+BlastPlusSupportRunDialog::BlastPlusSupportRunDialog(ADVSequenceObjectContext* seqCtx, QString &lastDBPath, QString &lastDBName, QWidget *parent)
+: BlastRunCommonDialog(parent, BlastPlus, true, getCompValues()), lastDBPath(lastDBPath), lastDBName(lastDBName), seqCtx(seqCtx)
 {
+    dnaso = seqCtx->getSequenceObject();
     CreateAnnotationModel ca_m;
     ca_m.hideAnnotationType = true;
     ca_m.hideAnnotationName = true;
@@ -77,10 +81,7 @@ BlastPlusSupportRunDialog::BlastPlusSupportRunDialog(U2SequenceObject *dnaso, QS
     ca_m.sequenceObjectRef = GObjectReference(dnaso);
     ca_m.sequenceLen = dnaso->getSequenceLength();
     ca_c = new CreateAnnotationWidgetController(ca_m, this);
-    //lowerCaseCheckBox->hide();
-    QWidget *wdgt = ca_c->getWidget();
-    wdgt->setMinimumHeight(150);
-    verticalLayout_4->addWidget(wdgt);
+    annotationWidgetLayout->addWidget(ca_c->getWidget());
 
     //programName->removeItem(3);//cuda-blastp
     if(dnaso->getAlphabet()->getType() == DNAAlphabet_AMINO){
@@ -207,6 +208,9 @@ void BlastPlusSupportRunDialog::sl_runQuery(){
     lastDBPath = dbSelector->databasePathLineEdit->text();
     lastDBName = dbSelector->baseNameLineEdit->text();
     settings.outputType = 5;//By default set output file format to xml
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(settings.aobj);
+    }
     accept();
 }
 ////////////////////////////////////////
@@ -229,6 +233,7 @@ BlastPlusWithExtFileSpecifySupportRunDialog::BlastPlusWithExtFileSpecifySupportR
     connect(inputFileLineEdit,SIGNAL(textChanged(QString)),this, SLOT(sl_inputFileLineEditChanged(QString)));
 
     QHBoxLayout* layout = new QHBoxLayout(widget);
+    layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
     layout->addWidget(inputFileLineEdit);
     layout->addWidget(selectToolPathButton);
 
@@ -361,9 +366,7 @@ void BlastPlusWithExtFileSpecifySupportRunDialog::tryApplyDoc(Document *doc) {
     ca_m.defaultIsNewDoc = true;
     if (NULL == ca_c) {
         ca_c = new CreateAnnotationWidgetController(ca_m, this);
-        QWidget *wdgt = ca_c->getWidget();
-        wdgt->setMinimumHeight(150);
-        verticalLayout_4->addWidget(wdgt);
+        annotationWidgetLayout->addWidget(ca_c->getWidget());
     } else {
         ca_c->updateWidgetForAnnotationModel(ca_m);
     }
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h
index 930cbf4..bf2e411 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,10 +31,12 @@
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
+
 class BlastPlusSupportRunDialog : public BlastRunCommonDialog {
     Q_OBJECT
 public:
-    BlastPlusSupportRunDialog(U2SequenceObject *dnaso, QString &lastDBPath, QString &lastDBName, QWidget *parent);
+    BlastPlusSupportRunDialog(ADVSequenceObjectContext* seqCtx, QString &lastDBPath, QString &lastDBName, QWidget *parent);
 protected slots:
     virtual void sl_runQuery();
     virtual void sl_lineEditChanged();
@@ -44,6 +46,7 @@ private:
     bool checkToolPath();
     QString &lastDBPath;
     QString &lastDBName;
+    ADVSequenceObjectContext* seqCtx;
 };
 
 class BlastPlusWithExtFileSpecifySupportRunDialog : public BlastRunCommonDialog {
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.cpp
index ce5ca93..9da857a 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -107,8 +107,8 @@ void BlastPlusWorkerFactory::init() {
                    BlastPlusWorker::tr("Name for annotations."));
     Descriptor etp(BLASTPLUS_EXT_TOOL_PATH, BlastPlusWorker::tr("Tool Path"),
                    BlastPlusWorker::tr("External tool path."));
-    Descriptor tdp(BLASTPLUS_TMP_DIR_PATH, BlastPlusWorker::tr("Temporary directory"),
-                   BlastPlusWorker::tr("Directory for temporary files."));
+    Descriptor tdp(BLASTPLUS_TMP_DIR_PATH, BlastPlusWorker::tr("Temporary folder"),
+                   BlastPlusWorker::tr("Folder for temporary files."));
     Descriptor output(BLASTPLUS_ORIGINAL_OUT, BlastPlusWorker::tr("BLAST output"),
                    BlastPlusWorker::tr("Location of BLAST output file."));
     Descriptor outtype(BLASTPLUS_OUT_TYPE, BlastPlusWorker::tr("BLAST output type"),
@@ -227,7 +227,7 @@ void BlastPlusWorkerFactory::init() {
     }
 
     delegates[BLASTPLUS_ORIGINAL_OUT] = new URLDelegate("", "out file", false);
-    delegates[BLASTPLUS_DATABASE_PATH] = new URLDelegate("", "Database Directory", false, true, false);
+    delegates[BLASTPLUS_DATABASE_PATH] = new URLDelegate("", "Database Folder", false, true, false);
     delegates[BLASTPLUS_EXT_TOOL_PATH] = new URLDelegate("", "executable", false, false, false);
     delegates[BLASTPLUS_TMP_DIR_PATH] = new URLDelegate("", "TmpDir", false, true);
 
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.h b/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.h
index 5512bc2..85f12cc 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastPlusWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.cpp
index 19b8f8e..638f95b 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
-#include <QtXml/QDomDocument>
+#include <QFileInfo>
+#include <QDomDocument>
 
 #include "BlastXPlusSupportTask.h"
 #include "BlastPlusSupport.h"
diff --git a/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.h
index 13ca38f..f93259e 100644
--- a/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/BlastXPlusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.cpp
index 4f436b0..c90e25f 100644
--- a/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include "RPSBlastSupportTask.h"
 #include "BlastPlusSupport.h"
diff --git a/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.h
index 27332c5..5096dce 100644
--- a/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/RPSBlastSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.cpp
index 1953f15..feffdce 100644
--- a/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
diff --git a/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.h
index 57e786f..490aa72 100644
--- a/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/TBlastNPlusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.cpp b/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.cpp
index ddcf5a6..1a58e06 100644
--- a/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
-#include <QtXml/QDomDocument>
+#include <QDomDocument>
 
 #include "TBlastXPlusSupportTask.h"
 #include "BlastPlusSupport.h"
diff --git a/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.h b/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.h
index b8ffa1a..1d7ad2f 100644
--- a/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.h
+++ b/src/plugins/external_tool_support/src/blast_plus/TBlastXPlusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp
new file mode 100644
index 0000000..b5999c0
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp
@@ -0,0 +1,371 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "BlastReadsSubTask.h"
+
+#include "blast_plus/BlastNPlusSupportTask.h"
+
+#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
+#include <U2Algorithm/BuiltInDistanceAlgorithms.h>
+#include <U2Algorithm/PairwiseAlignmentTask.h>
+#include <U2Algorithm/MSADistanceAlgorithmRegistry.h>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/AppResources.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+
+
+namespace U2 {
+namespace Workflow {
+
+/************************************************************************/
+/* BlastReadsSubTask */
+/************************************************************************/
+BlastReadsSubTask::BlastReadsSubTask(const QString &dbPath,
+                                     const QList<SharedDbiDataHandler> &reads,
+                                     const SharedDbiDataHandler &reference,
+                                     const int minIdentityPercent,
+                                     const QMap<SharedDbiDataHandler, QString> &readsNames,
+                                     DbiDataStorage *storage)
+    : Task(tr("Map reads with BLAST & SW task"), TaskFlag_NoRun | TaskFlag_CancelOnSubtaskCancel),
+      dbPath(dbPath),
+      reads(reads),
+      readsNames(readsNames),
+      reference(reference),
+      minIdentityPercent(minIdentityPercent),
+      storage(storage)
+{
+    setMaxParallelSubtasks(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
+}
+
+void BlastReadsSubTask::prepare() {
+    foreach (const SharedDbiDataHandler &read, reads) {
+        BlastAndSwReadTask* subTask = new BlastAndSwReadTask(dbPath, read, reference, minIdentityPercent, readsNames[read], storage);
+        addSubTask(subTask);
+
+        blastSubTasks << subTask;
+    }
+}
+
+const QList<BlastAndSwReadTask*>& BlastReadsSubTask::getBlastSubtasks() const {
+    return blastSubTasks;
+}
+
+/************************************************************************/
+/* BlastAndSwReadTask */
+/************************************************************************/
+BlastAndSwReadTask::BlastAndSwReadTask(const QString &dbPath,
+                                       const SharedDbiDataHandler &read,
+                                       const SharedDbiDataHandler &reference,
+                                       const int minIdentityPercent,
+                                       const QString &readName,
+                                       DbiDataStorage *storage)
+    : Task(tr("Map one read with BLAST & SW task"), TaskFlags_NR_FOSE_COSC),
+      dbPath(dbPath),
+      read(read),
+      reference(reference),
+      minIdentityPercent(minIdentityPercent),
+      readIdentity(0),
+      offset(0),
+      readShift(0),
+      storage(storage),
+      blastTask(NULL),
+      readName(readName),
+      complement(false),
+      skipped(false)
+{
+    blastResultDir = ExternalToolSupportUtils::createTmpDir("blast_reads", stateInfo);
+
+    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
+    referenceLength = refObject->getSequenceLength();
+}
+
+void BlastAndSwReadTask::prepare() {
+    blastTask = getBlastTask();
+    CHECK_OP(stateInfo, );
+    SAFE_POINT_EXT(NULL != blastTask, "BLAST subtask is NULL", );
+    addSubTask(blastTask);
+}
+
+QList<Task*> BlastAndSwReadTask::onSubTaskFinished(Task *subTask) {
+    QList<Task*> result;
+    CHECK(subTask != NULL, result);
+    CHECK(!subTask->hasError() && !subTask->isCanceled(), result);
+
+    if (subTask == blastTask) {
+        U2Region referenceRegion = getReferenceRegion(blastTask->getResultedAnnotations());
+        if (referenceRegion.isEmpty()) {
+            skipped = true;
+            readIdentity = 0;
+            taskLog.info(tr("%1 was skipped. No BLAST results.").arg(getReadName()));
+            return result;
+        }
+        createAlignment(referenceRegion);
+
+        AbstractAlignmentTaskFactory *factory = getAbstractAlignmentTaskFactory("Smith-Waterman", "SW_classic", stateInfo);
+        CHECK_OP(stateInfo, result);
+
+        QScopedPointer<PairwiseAlignmentTaskSettings> settings(createSettings(storage, msa, stateInfo));
+        CHECK_OP(stateInfo, result);
+        settings->setCustomValue("SW_gapOpen", -10);
+        settings->setCustomValue("SW_gapExtd", -1);
+        settings->setCustomValue("SW_scoringMatrix", "dna");
+
+        result << factory->getTaskInstance(settings.take());
+    } else if (qobject_cast<AbstractAlignmentTask*>(subTask) != NULL) {
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObject(StorageUtils::getMsaObject(storage, msa));
+        CHECK_EXT(!msaObject.isNull(), setError(L10N::nullPointerError("MSA object for %1").arg(getReadName())), result);
+        int rowCount = msaObject->getNumRows();
+        CHECK_EXT(2 == rowCount, setError(L10N::internalError("Wrong rows count: " + QString::number(rowCount))), result);
+
+        referenceGaps = msaObject->getMsaRow(0)->getGapModel();
+        readGaps = msaObject->getMsaRow(1)->getGapModel();
+
+        if (offset > 0) {
+            shiftGaps(referenceGaps);
+            MsaRowUtils::addOffsetToGapModel(readGaps, offset);
+        }
+
+        msaObject->crop(msaObject->getRow(1)->getCoreRegion());
+        MSADistanceAlgorithmFactory* factory = AppContext::getMSADistanceAlgorithmRegistry()->getAlgorithmFactory(BuiltInDistanceAlgorithms::SIMILARITY_ALGO);
+        CHECK_EXT(NULL != factory, setError("MSADistanceAlgorithmFactory is NULL"), result);
+        factory->resetFlag(DistanceAlgorithmFlag_ExcludeGaps);
+
+        MSADistanceAlgorithm* algo = factory->createAlgorithm(msaObject->getMsa());
+        CHECK_EXT(NULL != algo, setError("MSADistanceAlgorithm is NULL"), result);
+        result << algo;
+    } else if (qobject_cast<MSADistanceAlgorithm*>(subTask) != NULL){
+        MSADistanceAlgorithm* algo = qobject_cast<MSADistanceAlgorithm*>(subTask);
+        const MSADistanceMatrix& mtx = algo->getMatrix();
+
+        readIdentity = mtx.getSimilarity(0, 1, true);
+        if (readIdentity < minIdentityPercent) {
+            skipped = true;
+            taskLog.info(tr("%1 was skipped. Low similarity: %2. Minimum similarity was set to %3")
+                         .arg(getReadName()).arg(readIdentity).arg(minIdentityPercent));
+        }
+    }
+    return result;
+}
+
+Task::ReportResult BlastAndSwReadTask::report() {
+    if (hasError() || isCanceled()) {
+        skipped = true;
+        readIdentity = 0;
+    }
+    return ReportResult_Finished;
+}
+
+bool BlastAndSwReadTask::isComplement() const {
+    return complement;
+}
+
+const SharedDbiDataHandler& BlastAndSwReadTask::getRead() const {
+    return read;
+}
+
+const U2MsaRowGapModel& BlastAndSwReadTask::getReferenceGaps() const {
+    return referenceGaps;
+}
+
+const U2MsaRowGapModel& BlastAndSwReadTask::getReadGaps() const {
+    return readGaps;
+}
+
+bool BlastAndSwReadTask::isReadAligned() const {
+    return !skipped;
+}
+
+QString BlastAndSwReadTask::getReadName() const {
+    return readName;
+}
+
+MultipleSequenceAlignment BlastAndSwReadTask::getMAlignment() {
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(storage, msa));
+    CHECK(msaObj != NULL, MultipleSequenceAlignment());
+
+    return msaObj->getMultipleAlignment();
+}
+
+qint64 BlastAndSwReadTask::getOffset() const {
+    return offset;
+}
+
+int BlastAndSwReadTask::getReadIdentity() const {
+    return readIdentity;
+}
+
+BlastNPlusSupportTask *BlastAndSwReadTask::getBlastTask() {
+    BlastTaskSettings settings;
+
+    settings.programName = "blastn";
+    settings.databaseNameAndPath = dbPath;
+    settings.megablast = true;
+    settings.wordSize = 28;
+    settings.xDropoffGA = 20;
+    settings.xDropoffUnGA = 10;
+    settings.xDropoffFGA = 100;
+    settings.numberOfProcessors = AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount();
+    settings.numberOfHits = 100;
+    settings.gapOpenCost = 2;
+    settings.gapExtendCost = 2;
+
+    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, read));
+    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("U2SequenceObject")), NULL);
+
+    if (readName.isEmpty()) {
+        readName = readObject->getSequenceName();
+    }
+
+    settings.querySequence = readObject->getWholeSequenceData(stateInfo);
+    CHECK_OP(stateInfo, NULL);
+
+    checkRead(settings.querySequence);
+    CHECK_OP(stateInfo, NULL);
+
+    settings.alphabet = readObject->getAlphabet();
+    settings.isNucleotideSeq = settings.alphabet->isNucleic();
+
+    settings.needCreateAnnotations = false;
+    settings.groupName = "blast";
+
+    settings.outputResFile = GUrlUtils::prepareTmpFileLocation(blastResultDir, "read_sequence", "gb", stateInfo);
+    settings.outputType = 5;
+
+    return new BlastNPlusSupportTask(settings);
+}
+
+void BlastAndSwReadTask::checkRead(const QByteArray &sequenceData) {
+    const int gapsCount = sequenceData.count(U2Msa::GAP_CHAR);
+    const int nCount = sequenceData.count("N");
+    if (gapsCount + nCount == sequenceData.length()) {
+        setError(tr("Read doesn't contain meaningful data"));
+    }
+}
+
+U2Region BlastAndSwReadTask::getReferenceRegion(const QList<SharedAnnotationData> &blastAnnotations) {
+    CHECK(!blastAnnotations.isEmpty(), U2Region());
+    U2Region refRegion;
+    U2Region blastReadRegion;
+    int maxIdentity = 0;
+    foreach (const SharedAnnotationData& ann, blastAnnotations) {
+        QString percentQualifier = ann->findFirstQualifierValue("identities");
+        int annIdentity = percentQualifier.left(percentQualifier.indexOf('/')).toInt();
+        if (annIdentity  > maxIdentity ) {
+            // identity
+            maxIdentity = annIdentity;
+
+            // annotation region on read
+            blastReadRegion = ann->getRegions().first();
+
+            // region on reference
+            qint64 hitFrom = ann->findFirstQualifierValue("hit-from").toInt();
+            qint64 hitTo = ann->findFirstQualifierValue("hit-to").toInt();
+            qint64 leftMost = qMin(hitFrom, hitTo);
+            qint64 rightMost = qMax(hitFrom, hitTo);
+            refRegion = U2Region(leftMost - 1, rightMost - leftMost);
+
+            // frame
+            QString frame = ann->findFirstQualifierValue("source_frame");
+            complement = (frame == "complement");
+        }
+    }
+    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, read));
+    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), U2Region());
+    qint64 undefinedLen = readObject->getSequenceLength() - maxIdentity;
+    readShift = undefinedLen - blastReadRegion.startPos;
+
+    // extend ref region to the read
+    refRegion.startPos = qMax((qint64)0, (qint64)(refRegion.startPos - undefinedLen));
+    refRegion.length = qMin(referenceLength - refRegion.startPos, (qint64)(blastReadRegion.length + 2 * undefinedLen));
+
+    return refRegion;
+}
+
+void BlastAndSwReadTask::createAlignment(const U2Region& refRegion) {
+    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
+    CHECK_EXT(!refObject.isNull(), setError(L10N::nullPointerError("Reference sequence")), );
+    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, read));
+    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), );
+
+    QByteArray referenceData = refObject->getSequenceData(refRegion, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    MultipleSequenceAlignment alignment("msa", refObject->getAlphabet());
+    alignment->addRow(refObject->getSequenceName(), referenceData);
+    CHECK_OP(stateInfo, );
+    QByteArray readData = readObject->getWholeSequenceData(stateInfo);
+    CHECK_OP(stateInfo, );
+
+    if (readShift != 0) {
+        alignment->addRow(readObject->getSequenceName(),
+                         complement ? DNASequenceUtils::reverseComplement(readData) : readData, U2MsaRowGapModel() << U2MsaGap(0, readShift), stateInfo);
+    } else {
+        alignment->addRow(readObject->getSequenceName(), complement ? DNASequenceUtils::reverseComplement(readData) : readData);
+    }
+
+    CHECK_OP(stateInfo, );
+
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObj(MultipleSequenceAlignmentImporter::createAlignment(storage->getDbiRef(), alignment, stateInfo));
+    CHECK_OP(stateInfo, );
+    msa = storage->getDataHandler(msaObj->getEntityRef());
+    offset = refRegion.startPos;
+}
+
+void BlastAndSwReadTask::shiftGaps(U2MsaRowGapModel &gaps) const {
+    for (int i = 0; i < gaps.size(); i++) {
+        gaps[i].offset += offset;
+    }
+}
+
+AbstractAlignmentTaskFactory* BlastAndSwReadTask::getAbstractAlignmentTaskFactory(const QString &algoId, const QString &implId, U2OpStatus &os) {
+    AlignmentAlgorithm *algo = AppContext::getAlignmentAlgorithmsRegistry()->getAlgorithm(algoId);
+    CHECK_EXT(NULL != algo, os.setError(BlastAndSwReadTask::tr("The %1 algorithm is not found. Add the %1 plugin.").arg(algoId)), NULL);
+
+    AlgorithmRealization *algoImpl = algo->getAlgorithmRealization(implId);
+    CHECK_EXT(NULL != algoImpl, os.setError(BlastAndSwReadTask::tr("The %1 algorithm is not found. Check that the %1 plugin is up to date.").arg(algoId)), NULL);
+
+    return algoImpl->getTaskFactory();
+}
+
+PairwiseAlignmentTaskSettings* BlastAndSwReadTask::createSettings(DbiDataStorage *storage, const SharedDbiDataHandler &msa, U2OpStatus &os) {
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObject(StorageUtils::getMsaObject(storage, msa));
+    CHECK_EXT(!msaObject.isNull(), os.setError(L10N::nullPointerError("MSA object")), NULL);
+
+    U2DataId referenceId = msaObject->getMsaRow(0)->getRowDbInfo().sequenceId;
+    U2DataId readId = msaObject->getMsaRow(1)->getRowDbInfo().sequenceId;
+
+    PairwiseAlignmentTaskSettings *settings = new PairwiseAlignmentTaskSettings();
+    settings->alphabet = msaObject->getAlphabet()->getId();
+    settings->inNewWindow = false;
+    settings->msaRef = msaObject->getEntityRef();
+    settings->firstSequenceRef = U2EntityRef(msaObject->getEntityRef().dbiRef, referenceId);
+    settings->secondSequenceRef = U2EntityRef(msaObject->getEntityRef().dbiRef, readId);
+    return settings;
+}
+
+} // namespace Workflow
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.h b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.h
new file mode 100644
index 0000000..07e4e86
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/BlastReadsSubTask.h
@@ -0,0 +1,134 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_BLAST_READS_SUBTASK_H_
+#define _U2_BLAST_READS_SUBTASK_H_
+
+#include <U2Core/Task.h>
+
+#include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/DbiDataStorage.h>
+
+
+namespace U2 {
+
+class AbstractAlignmentTaskFactory;
+class BlastNPlusSupportTask;
+class PairwiseAlignmentTaskSettings;
+
+namespace Workflow {
+
+/************************************************************************/
+/* BlastReadsSubTask */
+/************************************************************************/
+class BlastAndSwReadTask;
+class BlastReadsSubTask : public Task {
+    Q_OBJECT
+public:
+    BlastReadsSubTask(const QString& dbPath,
+                      const QList<SharedDbiDataHandler> &reads,
+                      const SharedDbiDataHandler &reference,
+                      const int minIdentityPercent,
+                      const QMap<SharedDbiDataHandler, QString> &readsNames,
+                      DbiDataStorage *storage);
+
+    void prepare();
+
+    const QList<BlastAndSwReadTask*>& getBlastSubtasks() const;
+
+private:
+    const QString dbPath;
+    const QList<SharedDbiDataHandler> reads;
+    const QMap<SharedDbiDataHandler, QString> readsNames;
+    const SharedDbiDataHandler reference;
+    const int minIdentityPercent;
+
+    DbiDataStorage *storage;
+
+    QList<BlastAndSwReadTask*> blastSubTasks;
+};
+
+/************************************************************************/
+/* BlastAndSwReadTask */
+/************************************************************************/
+class BlastAndSwReadTask : public Task {
+    Q_OBJECT
+public:
+    BlastAndSwReadTask(const QString& dbPath,
+                       const SharedDbiDataHandler& read,
+                       const SharedDbiDataHandler &reference,
+                       const int minIdentityPercent,
+                       const QString &readName,
+                       DbiDataStorage *storage);
+
+    void prepare();
+    QList<Task*> onSubTaskFinished(Task *subTask);
+    ReportResult report();
+
+    bool isComplement() const;
+    const SharedDbiDataHandler& getRead() const;
+    const U2MsaRowGapModel&      getReferenceGaps() const;
+    const U2MsaRowGapModel&      getReadGaps() const;
+
+    bool        isReadAligned() const;
+    QString     getReadName() const;
+    MultipleSequenceAlignment getMAlignment();
+    qint64      getOffset() const;
+    int         getReadIdentity() const;
+
+private:
+    BlastNPlusSupportTask *getBlastTask();
+    void checkRead(const QByteArray &sequenceData);
+
+    U2Region getReferenceRegion(const QList<SharedAnnotationData>& blastAnnotations);
+    void createAlignment(const U2Region& refRegion);
+    void shiftGaps(U2MsaRowGapModel &gaps) const;
+
+    static AbstractAlignmentTaskFactory* getAbstractAlignmentTaskFactory(const QString &algoId, const QString &implId, U2OpStatus &os);
+    static PairwiseAlignmentTaskSettings* createSettings(DbiDataStorage *storage, const SharedDbiDataHandler &msa, U2OpStatus &os);
+
+    const QString dbPath;
+    const SharedDbiDataHandler read;
+    const SharedDbiDataHandler reference;
+    const int minIdentityPercent;
+    qint64 referenceLength;
+    int readIdentity;
+
+    SharedDbiDataHandler msa;
+    qint64 offset;
+    qint64 readShift;
+
+    DbiDataStorage *storage;
+
+    BlastNPlusSupportTask *blastTask;
+    QString blastResultDir;
+
+    U2MsaRowGapModel referenceGaps;
+    U2MsaRowGapModel readGaps;
+    QString readName;
+    bool complement;
+    bool skipped;
+};
+
+} // namespace Workflow
+} // namespace U2
+
+#endif // _U2_BLAST_READS_SUBTASK_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp
new file mode 100644
index 0000000..4826015
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp
@@ -0,0 +1,386 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QThread>
+
+#include <U2Core/AnnotationTableObject.h>
+#include <U2Core/AppResources.h>
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/GObjectUtils.h>
+#include <U2Core/GenbankFeatures.h>
+#include <U2Core/L10n.h>
+#include <U2Core/MultipleAlignmentRowInfo.h>
+#include <U2Core/MultipleChromatogramAlignment.h>
+#include <U2Core/MultipleChromatogramAlignmentImporter.h>
+#include <U2Core/MultipleChromatogramAlignmentObject.h>
+#include <U2Core/U2AttributeDbi.h>
+#include <U2Core/U2AttributeUtils.h>
+
+#include "BlastReadsSubTask.h"
+#include "ComposeResultSubTask.h"
+
+namespace U2 {
+namespace Workflow {
+
+namespace {
+    qint64 calcMemUsageBytes(DbiDataStorage *storage, const SharedDbiDataHandler &seqId, U2OpStatus &os) {
+        QScopedPointer<U2SequenceObject> object(StorageUtils::getSequenceObject(storage, seqId));
+        CHECK_EXT(!object.isNull(), os.setError(L10N::nullPointerError("Sequence object")), 0);
+
+        return object->getSequenceLength();
+    }
+
+    int toMb(qint64 bytes) {
+        return 0.5 + (double(bytes) / (1024 * 1024));
+    }
+}
+
+/************************************************************************/
+/* ComposeResultSubTask */
+/************************************************************************/
+ComposeResultSubTask::ComposeResultSubTask(const SharedDbiDataHandler &reference,
+                                           const QList<SharedDbiDataHandler> &reads,
+                                           const QList<BlastAndSwReadTask*> subTasks,
+                                           DbiDataStorage *storage)
+    : Task(tr("Compose alignment"), TaskFlags_FOSE_COSC),
+      reference(reference),
+      reads(reads),
+      subTasks(subTasks),
+      storage(storage),
+      mcaObject(NULL),
+      referenceSequenceObject(NULL)
+{
+    tpm = Task::Progress_Manual;
+}
+
+ComposeResultSubTask::~ComposeResultSubTask() {
+    delete mcaObject;
+    delete referenceSequenceObject;
+}
+
+void ComposeResultSubTask::prepare() {
+    qint64 memUsage = calcMemUsageBytes(storage, reference, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    foreach (const SharedDbiDataHandler &read, reads) {
+        memUsage += calcMemUsageBytes(storage, read, stateInfo);
+        CHECK_OP(stateInfo, );
+    }
+    if (toMb(memUsage) > 0) {
+        addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, toMb(memUsage), false));
+    }
+}
+
+void ComposeResultSubTask::run() {
+    referenceSequenceObject = StorageUtils::getSequenceObject(storage, reference);
+    CHECK_EXT(NULL != referenceSequenceObject, setError(L10N::nullPointerError("reference sequence object")), );
+
+    DbiConnection con(storage->getDbiRef(), stateInfo);
+    CHECK_OP(stateInfo, );
+
+    con.dbi->getObjectDbi()->setObjectRank(referenceSequenceObject->getEntityRef().entityId, U2DbiObjectRank_Child, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    createAlignmentAndAnnotations();
+    CHECK_OP(stateInfo, );
+
+    insertShiftedGapsIntoReference();
+    CHECK_OP(stateInfo, );
+
+    enlargeReferenceByGaps();
+    CHECK_OP(stateInfo, );
+
+    mcaObject->changeLength(stateInfo, qMax(mcaObject->getLength(), referenceSequenceObject->getSequenceLength()));
+    CHECK_OP(stateInfo, );
+
+    referenceSequenceObject->moveToThread(thread());
+}
+
+const SharedDbiDataHandler& ComposeResultSubTask::getAnnotations() const {
+    return annotations;
+}
+
+U2SequenceObject *ComposeResultSubTask::takeReferenceSequenceObject() {
+    U2SequenceObject *reference = referenceSequenceObject;
+
+    QScopedPointer<DbiConnection> con(new DbiConnection(storage->getDbiRef(), stateInfo));
+    CHECK_OP(stateInfo, NULL);
+    CHECK(con->dbi != NULL, NULL);
+
+    U2DataId seqId = referenceSequenceObject->getSequenceRef().entityId;
+    con->dbi->getObjectDbi()->setTrackModType(seqId, TrackOnUpdate, stateInfo);
+    CHECK_OP(stateInfo, NULL);
+
+    referenceSequenceObject = NULL;
+    return reference;
+}
+
+MultipleChromatogramAlignmentObject *ComposeResultSubTask::takeMcaObject() {
+    MultipleChromatogramAlignmentObject *alignment = mcaObject;
+    mcaObject = NULL;
+    return alignment;
+}
+
+void ComposeResultSubTask::createAlignmentAndAnnotations() {
+    MultipleChromatogramAlignment result("Mapped reads");
+    result->setAlphabet(referenceSequenceObject->getAlphabet());
+
+    U2MsaRowGapModel referenceGaps = getReferenceGaps();
+    CHECK_OP(stateInfo, );
+
+    // initialize annotations table on reference
+    QScopedPointer<AnnotationTableObject> annsObject(new AnnotationTableObject(referenceSequenceObject->getSequenceName() + " features", storage->getDbiRef()));
+    QList<SharedAnnotationData> anns;
+
+    int rowsCounter = 0;
+    for (int i = 0; i < reads.size(); i++) {
+        BlastAndSwReadTask *subTask = getBlastSwTask(i);
+        CHECK_OP(stateInfo, );
+        if (!subTask->isReadAligned()) {
+            continue;
+        }
+
+        // add the read row
+        DNASequence readSeq = getReadSequence(i);
+        CHECK_OP(stateInfo, );
+
+        DNAChromatogram readChromatogram = getReadChromatogram(i);
+        CHECK_OP(stateInfo, );
+
+        result->addRow(subTask->getReadName(), readChromatogram, readSeq.seq);
+        CHECK_OP(stateInfo, );
+
+        if (subTask->isComplement()) {
+            result->getMcaRow(result->getNumRows() - 1)->reverseComplement();
+        }
+
+        foreach (const U2MsaGap &gap, subTask->getReadGaps()) {
+            result->insertGaps(rowsCounter, gap.offset, gap.gap, stateInfo);
+            CHECK_OP(stateInfo, );
+        }
+
+        // add reference gaps to the read
+        insertShiftedGapsIntoRead(result, i, rowsCounter, referenceGaps);
+        CHECK_OP(stateInfo, );
+
+        // add read annotation to the reference
+        const MultipleChromatogramAlignmentRow readRow = result->getMcaRow(rowsCounter);
+        U2Region region = getReadRegion(readRow, referenceGaps);
+        SharedAnnotationData ann(new AnnotationData);
+        ann->location = getLocation(region, subTask->isComplement());
+        ann->name = GBFeatureUtils::getKeyInfo(GBFeatureKey_misc_feature).text;
+        ann->qualifiers << U2Qualifier("label", subTask->getReadName());
+        anns.append(ann);
+
+        ++rowsCounter;
+    }
+    if (rowsCounter == 0) {
+        stateInfo.setError(tr("No read satisfy minimum similarity criteria."));
+        return;
+    }
+    result->trim(false); // just recalculates alignment len
+
+    mcaObject = MultipleChromatogramAlignmentImporter::createAlignment(stateInfo, storage->getDbiRef(), U2ObjectDbi::ROOT_FOLDER, result);
+    CHECK_OP(stateInfo, );
+
+    DbiConnection con(storage->getDbiRef(), stateInfo);
+    CHECK_OP(stateInfo, );
+
+    con.dbi->getObjectDbi()->setParent(mcaObject->getEntityRef().entityId, referenceSequenceObject->getEntityRef().entityId, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    U2ByteArrayAttribute attribute;
+    U2Object obj;
+    obj.dbiId = storage->getDbiRef().dbiId;
+    obj.id = mcaObject->getEntityRef().entityId;
+    obj.version = mcaObject->getModificationVersion();
+    U2AttributeUtils::init(attribute, obj, MultipleChromatogramAlignmentObject::MCAOBJECT_REFERENCE);
+    attribute.value = referenceSequenceObject->getEntityRef().entityId;
+    con.dbi->getAttributeDbi()->createByteArrayAttribute(attribute, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    mcaObject->moveToThread(thread());
+
+    annsObject->addAnnotations(anns);
+    annotations = storage->getDataHandler(annsObject->getEntityRef());
+}
+
+void ComposeResultSubTask::enlargeReferenceByGaps() {
+    const qint64 sequenceLength = referenceSequenceObject->getSequenceLength();
+    const qint64 alignmentLength = mcaObject->getLength();
+    const int gapsNeedToInsertToReference = alignmentLength - sequenceLength;
+    if (gapsNeedToInsertToReference > 0) {
+        U2DataId id = mcaObject->getEntityRef().entityId;
+        U2Region region(sequenceLength, 0);
+        QByteArray insert(gapsNeedToInsertToReference, U2Msa::GAP_CHAR);
+        DNASequence seq(insert);
+        referenceSequenceObject->replaceRegion(id, region, seq, stateInfo);
+        CHECK_OP(stateInfo, );
+    }
+}
+
+U2Region ComposeResultSubTask::getReadRegion(const MultipleChromatogramAlignmentRow &readRow, const U2MsaRowGapModel &referenceGapModel) const {
+    U2Region region(0, readRow->getRowLengthWithoutTrailing());
+
+    // calculate read start
+    if (!readRow->getGapModel().isEmpty()) {
+        U2MsaGap firstGap = readRow->getGapModel().first();
+        if (0 == firstGap.offset) {
+            region.startPos += firstGap.gap;
+            region.length -= firstGap.gap;
+        }
+    }
+
+    qint64 leftGap = 0;
+    qint64 innerGap = 0;
+    foreach (const U2MsaGap &gap, referenceGapModel) {
+        qint64 endPos = gap.offset + gap.gap;
+        if (gap.offset < region.startPos) {
+            leftGap += gap.gap;
+        } else if (endPos <= region.endPos()) {
+            innerGap += gap.gap;
+        } else {
+            break;
+        }
+    }
+
+    region.startPos -= leftGap;
+    region.length -= innerGap;
+    return region;
+}
+
+U2Location ComposeResultSubTask::getLocation(const U2Region &region, bool isComplement) {
+    U2Location result;
+    result->strand = isComplement ? U2Strand(U2Strand::Complementary) : U2Strand(U2Strand::Direct);
+
+    if (region.startPos < 0) {
+        // TODO: just trim the region because it is incorrect to make the annotation circular: the left (negative) part of the read is not aligned.
+        // Fix it when the task can work with circular references.
+        result->regions << U2Region(0, region.length + region.startPos);
+    } else {
+        result->regions << region;
+    }
+
+    return result;
+}
+
+BlastAndSwReadTask * ComposeResultSubTask::getBlastSwTask(int readNum) {
+    CHECK_EXT(readNum < subTasks.size(), setError(L10N::internalError("Wrong reads number")), NULL);
+    return subTasks[readNum];
+}
+
+DNASequence ComposeResultSubTask::getReadSequence(int readNum) {
+    BlastAndSwReadTask *subTask = getBlastSwTask(readNum);
+    CHECK_OP(stateInfo, DNASequence());
+
+    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, subTask->getRead()));
+    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), DNASequence());
+    DNASequence seq = readObject->getWholeSequence(stateInfo);
+    CHECK_OP(stateInfo, DNASequence());
+    return seq;
+}
+
+DNAChromatogram ComposeResultSubTask::getReadChromatogram(int readNum) {
+    BlastAndSwReadTask *subTask = getBlastSwTask(readNum);
+    CHECK_OP(stateInfo, DNAChromatogram());
+
+    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, subTask->getRead()));
+    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), DNAChromatogram());
+
+    const U2EntityRef chromatogramRef = ChromatogramUtils::getChromatogramIdByRelatedSequenceId(stateInfo, readObject->getEntityRef());
+    CHECK_OP(stateInfo, DNAChromatogram());
+    CHECK_EXT(chromatogramRef.isValid(), setError(tr("The related chromatogram not found")), DNAChromatogram());
+
+    DNAChromatogram chromatogram = ChromatogramUtils::exportChromatogram(stateInfo, chromatogramRef);
+    CHECK_OP(stateInfo, DNAChromatogram());
+
+    return chromatogram;
+}
+
+namespace {
+    bool compare(const U2MsaGap &gap1, const U2MsaGap &gap2) {
+        return gap1.offset < gap2.offset;
+    }
+}
+
+U2MsaRowGapModel ComposeResultSubTask::getReferenceGaps() {
+    U2MsaRowGapModel result;
+
+    for (int i=0; i<reads.size(); i++) {
+        result << getShiftedGaps(i);
+        CHECK_OP(stateInfo, result);
+    }
+    qSort(result.begin(), result.end(), compare);
+    return result;
+}
+
+U2MsaRowGapModel ComposeResultSubTask::getShiftedGaps(int rowNum) {
+    U2MsaRowGapModel result;
+
+    BlastAndSwReadTask *subTask = getBlastSwTask(rowNum);
+    CHECK_OP(stateInfo, result);
+
+    qint64 wholeGap = 0;
+    foreach (const U2MsaGap &gap, subTask->getReferenceGaps()) {
+        result << U2MsaGap(gap.offset - wholeGap, gap.gap);
+        wholeGap += gap.gap;
+    }
+    return result;
+}
+
+void ComposeResultSubTask::insertShiftedGapsIntoReference() {
+    CHECK_EXT(referenceSequenceObject != NULL, setError(L10N::nullPointerError("Reference sequence")), );
+
+    U2MsaRowGapModel referenceGaps = getReferenceGaps();
+    CHECK_OP(stateInfo, );
+
+    DNASequence dnaSeq = referenceSequenceObject->getWholeSequence(stateInfo);
+    CHECK_OP(stateInfo, );
+    for (int i = referenceGaps.size() - 1; i >= 0; i--) {
+        U2MsaGap gap = referenceGaps[i];
+        dnaSeq.seq.insert(gap.offset, QByteArray(gap.gap, U2Msa::GAP_CHAR));
+    }
+    referenceSequenceObject->setWholeSequence(dnaSeq);
+
+    // remove gap columns
+    mcaObject->deleteColumnsWithGaps(stateInfo);
+}
+
+void ComposeResultSubTask::insertShiftedGapsIntoRead(MultipleChromatogramAlignment &alignment, int readNum, int rowNum, const U2MsaRowGapModel &gaps) {
+    U2MsaRowGapModel ownGaps = getShiftedGaps(readNum);
+    CHECK_OP(stateInfo, );
+
+    qint64 globalOffset = 0;
+    foreach (const U2MsaGap &gap, gaps) {
+        if (ownGaps.contains(gap)) { // task own gaps into account but don't insert them
+            globalOffset += gap.gap;
+            ownGaps.removeOne(gap);
+            continue;
+        }
+        alignment->insertGaps(rowNum, globalOffset + gap.offset, gap.gap, stateInfo);
+        CHECK_OP(stateInfo, );
+        globalOffset += gap.gap;
+    }
+}
+
+} // namespace Workflow
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.h b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.h
new file mode 100644
index 0000000..cfb8e2a
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/ComposeResultSubTask.h
@@ -0,0 +1,83 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_COMPOSE_RESULT_SUBTASK_H_
+#define _U2_COMPOSE_RESULT_SUBTASK_H_
+
+#include <U2Core/DNAChromatogram.h>
+#include <U2Core/Task.h>
+
+#include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/DbiDataStorage.h>
+
+namespace U2 {
+
+class MultipleChromatogramAlignment;
+class MultipleChromatogramAlignmentObject;
+class MultipleChromatogramAlignmentRow;
+
+namespace Workflow {
+
+class BlastAndSwReadTask;
+
+class ComposeResultSubTask : public Task {
+    Q_OBJECT
+public:
+    ComposeResultSubTask(const SharedDbiDataHandler &reference,
+                         const QList<SharedDbiDataHandler> &reads,
+                         const QList<BlastAndSwReadTask*> subTasks, DbiDataStorage *storage);
+    ~ComposeResultSubTask();
+
+    void prepare();
+    void run();
+
+    const SharedDbiDataHandler& getAnnotations() const;
+
+    U2SequenceObject *takeReferenceSequenceObject();
+    MultipleChromatogramAlignmentObject *takeMcaObject();
+
+private:
+    BlastAndSwReadTask * getBlastSwTask(int readNum);
+    DNASequence getReadSequence(int readNum);
+    DNAChromatogram getReadChromatogram(int readNum);
+    U2MsaRowGapModel getReferenceGaps();
+    U2MsaRowGapModel getShiftedGaps(int rowNum);
+    void insertShiftedGapsIntoReference();
+    void insertShiftedGapsIntoRead(MultipleChromatogramAlignment &alignment, int readNum, int rowNum, const U2MsaRowGapModel &gaps);
+    void createAlignmentAndAnnotations();
+    void enlargeReferenceByGaps();
+    U2Region getReadRegion(const MultipleChromatogramAlignmentRow &readRow, const U2MsaRowGapModel &referenceGapModel) const;
+    U2Location getLocation(const U2Region &region, bool isComplement);
+
+private:
+    const SharedDbiDataHandler reference;
+    const QList<SharedDbiDataHandler> reads;
+    const QList<BlastAndSwReadTask*> subTasks;
+    DbiDataStorage *storage;
+    MultipleChromatogramAlignmentObject *mcaObject;
+    U2SequenceObject *referenceSequenceObject;
+    SharedDbiDataHandler annotations;
+};
+
+} // namespace Workflow
+} // namespace U2
+
+#endif // _U2_COMPOSE_RESULT_SUBTASK_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp
new file mode 100644
index 0000000..180b0ce
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp
@@ -0,0 +1,123 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QDir>
+#include <QTemporaryDir>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/ExternalToolRunTask.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/L10n.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Lang/DbiDataStorage.h>
+
+#include "FormatDBSubTask.h"
+#include "blast/FormatDBSupport.h"
+#include "blast/FormatDBSupportTask.h"
+
+namespace U2 {
+namespace Workflow {
+
+FormatDBSubTask::FormatDBSubTask(const QString &referenceUrl,
+                                 const SharedDbiDataHandler &referenceDbHandler,
+                                 DbiDataStorage *storage)
+    : Task(tr("Format DB task wrapper"), TaskFlags_NR_FOSE_COSC),
+      referenceUrl(referenceUrl),
+      referenceDbHandler(referenceDbHandler),
+      storage(storage)
+{
+
+}
+
+void FormatDBSubTask::prepare() {
+    FormatDBSupportTaskSettings settings;
+    settings.inputFilesPath << referenceUrl;
+
+    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, referenceDbHandler));
+    CHECK_EXT(!refObject.isNull(), setError(L10N::nullPointerError("U2SequenceObject")), );
+
+    CHECK_EXT(refObject->getAlphabet() != NULL, setError(L10N::nullPointerError("DNAAlphabet")), );
+    settings.isInputAmino = refObject->getAlphabet()->isAmino();
+    settings.databaseTitle = refObject->getSequenceName();
+
+    const QString tempDirPath = getAcceptableTempDir();
+    CHECK_EXT(!tempDirPath.isEmpty(), setError(tr("The task uses a temporary folder to process the data. It is required that the folder path doesn't have spaces. "
+                                                  "Please set up an appropriate path for the \"Temporary files\" parameter on the \"Directories\" tab of the UGENE Application Settings.")), );
+
+    const QString workingDir = GUrlUtils::getSlashEndedPath(ExternalToolSupportUtils::createTmpDir(tempDirPath, "align_to_ref", stateInfo));
+    settings.tempDirPath = workingDir;
+    settings.outputPath = workingDir + QFileInfo(referenceUrl).completeBaseName();
+    CHECK_OP(stateInfo, );
+
+    FormatDBSupportTask* formatTask = new FormatDBSupportTask(ET_MAKEBLASTDB, settings);
+    addSubTask(formatTask);
+
+    databaseNameAndPath = settings.outputPath;
+}
+
+const QString& FormatDBSubTask::getResultPath() const {
+    return databaseNameAndPath;
+}
+
+namespace {
+
+bool isTempDirAcceptable(const QString &tempDir) {
+    CHECK(!tempDir.contains(QRegExp("\\s")), false);
+    QTemporaryDir testSubDir(tempDir + "/XXXXXX");
+    CHECK(testSubDir.isValid(), false);
+    return true;
+}
+
+}
+
+QString FormatDBSubTask::getAcceptableTempDir() const {
+    QString tempDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
+    if (isTempDirAcceptable(tempDirPath)) {
+        return tempDirPath;
+    }
+
+    tempDirPath = QFileInfo(referenceUrl).absoluteDir().path();
+    if (isTempDirAcceptable(tempDirPath)) {
+        return tempDirPath;
+    }
+
+#if defined (Q_OS_WIN)
+    tempDirPath = "C:/ugene_tmp";
+#elif defined (Q_OS_UNIX)
+    tempDirPath = "/tmp/ugene_tmp";
+#else
+    return QString();
+#endif
+
+    const bool created = QDir().mkpath(tempDirPath);
+    if (created && isTempDirAcceptable(tempDirPath)) {
+        return tempDirPath;
+    }
+
+    return QString();
+}
+
+} // namespace Workflow
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.h b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.h
new file mode 100644
index 0000000..029cf56
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/FormatDBSubTask.h
@@ -0,0 +1,56 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_FORMAT_DB_SUBTASK_H_
+#define _U2_FORMAT_DB_SUBTASK_H_
+
+#include <U2Core/Task.h>
+
+#include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/DbiDataStorage.h>
+
+namespace U2 {
+namespace Workflow {
+
+class FormatDBSubTask : public Task {
+    Q_OBJECT
+public:
+    FormatDBSubTask(const QString& referenceUrl,
+                    const SharedDbiDataHandler &referenceDbHandler,
+                    DbiDataStorage *storage);
+    void prepare();
+
+    const QString& getResultPath() const;
+
+private:
+    QString getAcceptableTempDir() const;
+
+    const QString               referenceUrl;
+    const SharedDbiDataHandler  referenceDbHandler;
+    DbiDataStorage *storage;
+
+    QString databaseNameAndPath;
+};
+
+} // namespace Workflow
+} // namespace U2
+
+#endif // _U2_FORMAT_DB_SUBTASK_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp
new file mode 100644
index 0000000..6f47108
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp
@@ -0,0 +1,110 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/CopyFileTask.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/GUrlUtils.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <QFileInfo>
+
+#include "PrepareReferenceSequenceTask.h"
+#include "RemoveGapsFromSequenceTask.h"
+
+namespace U2 {
+
+PrepareReferenceSequenceTask::PrepareReferenceSequenceTask(const QString &referenceUrl, const U2DbiRef &dstDbiRef)
+    : DocumentProviderTask(tr("Prepare reference sequence"), TaskFlags_NR_FOSE_COSC),
+      referenceUrl(referenceUrl),
+      dstDbiRef(dstDbiRef),
+      copyTask(NULL),
+      loadTask(NULL),
+      removeGapsTask(NULL)
+{
+    SAFE_POINT_EXT(!referenceUrl.isEmpty(), setError("Reference URL is empty"), );
+    SAFE_POINT_EXT(dstDbiRef.isValid(), setError("Destination DBI reference is not valid"), );
+}
+
+const U2EntityRef &PrepareReferenceSequenceTask::getReferenceEntityRef() const {
+    return referenceEntityRef;
+}
+
+void PrepareReferenceSequenceTask::prepare() {
+    QString tmpDir = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
+    copyTask = new CopyFileTask(referenceUrl, GUrlUtils::prepareTmpFileLocation(tmpDir, GUrlUtils::fixFileName(QFileInfo(referenceUrl).completeBaseName()), "tmp", stateInfo));
+    addSubTask(copyTask);
+}
+
+QList<Task *> PrepareReferenceSequenceTask::onSubTaskFinished(Task *subTask) {
+    QList<Task *> newSubTasks;
+    CHECK_OP(stateInfo, newSubTasks);
+
+    if (copyTask == subTask) {
+        preparedReferenceUrl = copyTask->getTargetFilePath();
+        QVariantMap hints;
+        hints[DocumentFormat::DBI_REF_HINT] = QVariant::fromValue<U2DbiRef>(dstDbiRef);
+        loadTask = LoadDocumentTask::getDefaultLoadDocTask(stateInfo, preparedReferenceUrl, hints);
+        CHECK_OP(stateInfo, newSubTasks);
+
+        newSubTasks << loadTask;
+    } else if (loadTask == subTask) {
+        Document * const document = loadTask->getDocument(false);
+        SAFE_POINT(NULL != document, "Document is NULL", newSubTasks);
+
+        document->setDocumentOwnsDbiResources(false);
+
+        QList<GObject *> objects = document->findGObjectByType(GObjectTypes::SEQUENCE);
+        CHECK_EXT(!objects.isEmpty(), setError(tr("No reference sequence in the file: ") + referenceUrl), newSubTasks);
+        CHECK_EXT(1 == objects.size(), setError(tr("More than one sequence in the reference file: ") + referenceUrl), newSubTasks);
+
+        U2SequenceObject *referenceObject = qobject_cast<U2SequenceObject *>(objects.first());
+        SAFE_POINT_EXT(NULL != referenceObject, setError(tr("Unable to cast gobject to sequence object")), newSubTasks);
+        CHECK_EXT(referenceObject->getAlphabet()->isDNA(), setError(tr("The input reference sequence '%1' contains characters that don't belong to DNA alphabet.").arg(referenceObject->getSequenceName())), newSubTasks);
+
+        referenceEntityRef = referenceObject->getEntityRef();
+
+        newSubTasks << new RemoveGapsFromSequenceTask(referenceObject);
+    } else if (qobject_cast<RemoveGapsFromSequenceTask*>(subTask) != NULL) {
+        Document* doc = loadTask->getDocument(false);
+        SAFE_POINT(NULL != doc, "Document is NULL", newSubTasks);
+
+        DocumentFormat *fastaFormat = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::FASTA);
+        IOAdapterFactory *ioAdapterFactory = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(doc->getURL()));
+
+        Document *fastaDoc = doc->getSimpleCopy(fastaFormat, ioAdapterFactory, doc->getURL());
+        SaveDocumentTask* saveTask = new SaveDocumentTask(fastaDoc, SaveDoc_Overwrite | SaveDoc_DestroyButDontUnload);
+        newSubTasks << saveTask;
+    }
+
+    return newSubTasks;
+}
+
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.h b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.h
new file mode 100644
index 0000000..405dd2e
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.h
@@ -0,0 +1,63 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_PREPARE_REFERENCE_SEQUENCE_TASK_H_
+#define _U2_PREPARE_REFERENCE_SEQUENCE_TASK_H_
+
+#include <U2Core/DocumentProviderTask.h>
+#include <U2Core/U2Type.h>
+
+namespace U2 {
+
+class CopyFileTask;
+class LoadDocumentTask;
+class RemoveGapsFromSequenceTask;
+class U2SequenceObject;
+
+class PrepareReferenceSequenceTask : public DocumentProviderTask {
+    Q_OBJECT
+public:
+    PrepareReferenceSequenceTask(const QString &referenceUrl, const U2DbiRef &dstDbiRef);
+
+    const U2EntityRef &getReferenceEntityRef() const;
+    const QString getPreparedReferenceUrl() const { return preparedReferenceUrl; }
+
+private:
+    void prepare();
+    QList<Task *> onSubTaskFinished(Task *subTask);
+
+    void performAdditionalChecks(Document *document);
+    void removeGaps(Document *document);
+
+    const QString referenceUrl;
+    const U2DbiRef dstDbiRef;
+
+    CopyFileTask*               copyTask;
+    LoadDocumentTask*           loadTask;
+    RemoveGapsFromSequenceTask* removeGapsTask;
+
+    U2EntityRef referenceEntityRef;
+    QString preparedReferenceUrl;
+};
+
+}   // namespace U2
+
+#endif // _U2_PREPARE_REFERENCE_SEQUENCE_TASK_H_
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp
new file mode 100644
index 0000000..0a77d36
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp
@@ -0,0 +1,95 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/AppContext.h>
+#include <U2Core/AppResources.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include "RemoveGapsFromSequenceTask.h"
+
+namespace U2 {
+
+FindGapsInSequenceCallback::FindGapsInSequenceCallback(U2SequenceObject * const sequenceObject)
+    : sequenceObject(sequenceObject)
+{
+    SAFE_POINT(NULL != sequenceObject, "Sequence object is NULL", );
+}
+
+void FindGapsInSequenceCallback::onRegion(SequenceDbiWalkerSubtask *subtask, TaskStateInfo &stateInfo) {
+    CHECK_OP(stateInfo, );
+
+    const QByteArray sequenceData = sequenceObject->getSequenceData(subtask->getGlobalRegion(), stateInfo);
+    CHECK_OP(stateInfo, );
+
+    QByteArray ungappedSequenceData;
+    QList<U2MsaGap> gaps;
+    MaDbiUtils::splitBytesToCharsAndGaps(sequenceData, ungappedSequenceData, gaps);
+    MsaRowUtils::shiftGapModel(gaps, subtask->getGlobalRegion().startPos);
+
+    addGaps(gaps);
+}
+
+const QList<U2Region> &FindGapsInSequenceCallback::getGappedRegions() const {
+    return gappedRegions;
+}
+
+void FindGapsInSequenceCallback::addGaps(const QList<U2MsaGap> &gaps) {
+    QMutexLocker mutexLocker(&mutex);
+    Q_UNUSED(mutex);
+    foreach (const U2MsaGap &gap, gaps) {
+        gappedRegions << gap;
+    }
+}
+
+RemoveGapsFromSequenceTask::RemoveGapsFromSequenceTask(U2SequenceObject * const sequenceObject)
+    : Task(tr("Remove gaps from the sequence"), TaskFlags_FOSE_COSC),
+      sequenceObject(sequenceObject),
+      callback(sequenceObject),
+      findGapsTask(NULL)
+{
+    SAFE_POINT_EXT(NULL != sequenceObject, setError("Sequence object is NULL"), );
+}
+
+void RemoveGapsFromSequenceTask::prepare() {
+    SequenceDbiWalkerConfig config;
+    config.seqRef = sequenceObject->getEntityRef();
+    config.chunkSize = CHUNK_SIZE;
+    config.overlapSize = 0;
+    config.nThreads = AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount();
+    config.strandToWalk = StrandOption_DirectOnly;
+    config.walkCircular = false;
+
+    findGapsTask = new SequenceDbiWalkerTask(config, &callback, tr("Find gaps in the sequence"));
+    addSubTask(findGapsTask);
+}
+
+void RemoveGapsFromSequenceTask::run() {
+    QList<U2Region> gappedRegions = callback.getGappedRegions();
+    for (int i = gappedRegions.size() - 1; i >= 0; i--) {
+        sequenceObject->removeRegion(stateInfo, gappedRegions[i]);
+        CHECK_OP(stateInfo, );
+    }
+}
+
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.h b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.h
new file mode 100644
index 0000000..c3bff01
--- /dev/null
+++ b/src/plugins/external_tool_support/src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.h
@@ -0,0 +1,68 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_REMOVE_GAPS_FROM_SEQUENCE_TASK_H_
+#define _U2_REMOVE_GAPS_FROM_SEQUENCE_TASK_H_
+
+#include <U2Core/SequenceDbiWalkerTask.h>
+
+namespace U2 {
+
+class U2MsaGap;
+class U2SequenceObject;
+
+class FindGapsInSequenceCallback : public SequenceDbiWalkerCallback {
+public:
+    FindGapsInSequenceCallback(U2SequenceObject * const sequenceObject);
+
+    void onRegion(SequenceDbiWalkerSubtask *subtask, TaskStateInfo &stateInfo);
+
+    const QList<U2Region> &getGappedRegions() const;
+
+private:
+    void addGaps(const QList<U2MsaGap> &gaps);
+
+    U2SequenceObject * const sequenceObject;
+
+    QMutex mutex;
+    QList<U2Region> gappedRegions;
+};
+
+class RemoveGapsFromSequenceTask : public Task {
+    Q_OBJECT
+public:
+    RemoveGapsFromSequenceTask(U2SequenceObject * const sequenceObject);
+
+private:
+    void prepare();
+    void run();
+
+    U2SequenceObject * const sequenceObject;
+
+    FindGapsInSequenceCallback callback;
+    SequenceDbiWalkerTask *findGapsTask;
+
+    static const int CHUNK_SIZE = 128000;
+};
+
+}   // namespace U2
+
+#endif // _U2_REMOVE_GAPS_FROM_SEQUENCE_TASK_H_
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.cpp b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.cpp
index ce3e339..9e70c9c 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.cpp
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
index bf23542..fdd1272 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieSupport.cpp b/src/plugins/external_tool_support/src/bowtie/BowtieSupport.cpp
index 65147ae..df7d538 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieSupport.cpp
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieSupport.h b/src/plugins/external_tool_support/src/bowtie/BowtieSupport.h
index 02df709..702f245 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieSupport.h
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieTask.cpp b/src/plugins/external_tool_support/src/bowtie/BowtieTask.cpp
index 3eda4d8..7109bd1 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieTask.cpp
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -134,9 +134,9 @@ BowtieAssembleTask::BowtieAssembleTask(const DnaAssemblyToRefTaskSettings &setti
 {
 }
 
-bool BowtieAssembleTask::isHaveResults()const {
+bool BowtieAssembleTask::hasResult()const {
     CHECK(NULL != logParser, false);
-    return logParser->isHaveResults();
+    return logParser->hasResult();
 }
 
 void BowtieAssembleTask::prepare() {
@@ -292,7 +292,7 @@ void BowtieAssembleTask::prepare() {
 
 // BowtieAssembleTask::LogParser
 BowtieAssembleTask::LogParser::LogParser():
-    haveResults(false)
+    hasResults(false)
 {
 }
 
@@ -307,7 +307,7 @@ void BowtieAssembleTask::LogParser::parseErrOutput(const QString &partOfLog) {
     foreach(const QString &buf, log) {
         if(buf.contains(blockRegExp)) {
             if(blockRegExp.cap(1).toInt() > 0) {
-                haveResults = true;
+                hasResults = true;
             }
         }
     }
@@ -319,8 +319,8 @@ void BowtieAssembleTask::LogParser::parseErrOutput(const QString &partOfLog) {
     }
 }
 
-bool BowtieAssembleTask::LogParser::isHaveResults()const {
-    return haveResults;
+bool BowtieAssembleTask::LogParser::hasResult()const {
+    return hasResults;
 }
 
 // BowtieTask
@@ -400,7 +400,7 @@ void BowtieTask::prepare() {
 
 Task::ReportResult BowtieTask::report() {
     if(!justBuildIndex) {
-        haveResults = assembleTask->isHaveResults();
+        hasResults = assembleTask->hasResult();
     }
     return ReportResult_Finished;
 }
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieTask.h b/src/plugins/external_tool_support/src/bowtie/BowtieTask.h
index 63c56af..0c477a8 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieTask.h
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Algorithm/DnaAssemblyTask.h>
 #include <U2Core/ExternalToolRunTask.h>
 
-#include <QtCore/QTemporaryFile>
+#include <QTemporaryFile>
 
 namespace U2 {
 
@@ -73,7 +73,7 @@ class BowtieAssembleTask : public ExternalToolSupportTask {
 public:
     BowtieAssembleTask(const DnaAssemblyToRefTaskSettings &settings);
 
-    bool isHaveResults()const;
+    bool hasResult()const;
 
     void prepare();
 private:
@@ -84,9 +84,9 @@ private:
         void parseOutput(const QString &partOfLog);
         void parseErrOutput(const QString &partOfLog);
 
-        bool isHaveResults()const;
+        bool hasResult()const;
     private:
-        bool haveResults;
+        bool hasResults;
     };
 
     LogParser *logParser;
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieWorker.cpp b/src/plugins/external_tool_support/src/bowtie/BowtieWorker.cpp
index 919ff89..f9a932d 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieWorker.cpp
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie/BowtieWorker.h b/src/plugins/external_tool_support/src/bowtie/BowtieWorker.h
index f911641..f1a5790 100644
--- a/src/plugins/external_tool_support/src/bowtie/BowtieWorker.h
+++ b/src/plugins/external_tool_support/src/bowtie/BowtieWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.cpp b/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.cpp
index cd24d02..c82fd34 100644
--- a/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.cpp
+++ b/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/TextObject.h>
 #include <U2Core/TextUtils.h>
@@ -44,8 +44,8 @@
 
 #include <U2View/DnaAssemblyUtils.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QRegExp>
+#include <QDir>
+#include <QRegExp>
 
 
 
@@ -235,7 +235,7 @@ QList<Task*> GTest_Bowtie::onSubTaskFinished(Task* subTask) {
             subTaskFailed = true;
             return res;
         }
-        if (!bowtieTask->isHaveResult()) {
+        if (!bowtieTask->hasResult()) {
             subTaskFailed = true;
             bowtieTask->setError("Reference assembly failed - no possible alignment found");
             return res;
diff --git a/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.h b/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.h
index 9b80acc..7f70070 100644
--- a/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.h
+++ b/src/plugins/external_tool_support/src/bowtie/bowtie_tests/bowtieTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,19 +22,20 @@
 #ifndef _U2_BOWTIE_TESTS_H_
 #define _U2_BOWTIE_TESTS_H_
 
-#include <U2Test/XMLTestUtils.h>
-#include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <QFileInfo>
 
+#include <U2Core/GObject.h>
+
+#include <U2Test/XMLTestUtils.h>
+
 #include "bowtie/BowtieTask.h"
 
 namespace U2 {
 
 class BowtieGObjectTask;
 class DnaAssemblyMultiTask;
-class MAlignmentObject;
-class MAlignment;
+class MultipleSequenceAlignmentObject;
 
 class GTest_Bowtie : public GTest {
     Q_OBJECT
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.cpp b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.cpp
index 24f608c..c02dcea 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.cpp
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -35,8 +30,6 @@
 #include "Bowtie2Task.h"
 #include "Bowtie2Support.h"
 
-
-
 namespace U2 {
 
 // Bowtie2SettingsWidget
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
index db991b2..d558de1 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2SettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.cpp b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.cpp
index 41ef4b0..adfc4ef 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.cpp
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.h b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.h
index 52e6e8f..377acce 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.h
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Support.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.cpp b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.cpp
index 158f820..a71c0d4 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.cpp
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License
@@ -18,7 +18,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/BaseDocumentFormats.h>
@@ -274,7 +274,7 @@ void Bowtie2Task::prepare() {
 
 Task::ReportResult Bowtie2Task::report() {
     if(!justBuildIndex) {
-        haveResults = true;
+        hasResults = true;
     }
     return ReportResult_Finished;
 }
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.h b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.h
index 6330d28..57ddbf2 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.h
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Task.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
 #include <U2Algorithm/DnaAssemblyTask.h>
 #include <U2Core/ExternalToolRunTask.h>
 
-#include <QtCore/QTemporaryFile>
+#include <QTemporaryFile>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.cpp b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.cpp
index ce50e0e..c8642a8 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.cpp
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.h b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.h
index c7186ba..fd04412 100644
--- a/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.h
+++ b/src/plugins/external_tool_support/src/bowtie2/Bowtie2Worker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui b/src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui
index 7e1dea2..7aac1ea 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui
+++ b/src/plugins/external_tool_support/src/bwa/BwaMemSettings.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>660</width>
-    <height>447</height>
+    <height>350</height>
    </rect>
   </property>
   <property name="minimumSize">
@@ -23,7 +23,16 @@
    <property name="sizeConstraint">
     <enum>QLayout::SetMinAndMaxSize</enum>
    </property>
-   <property name="margin">
+   <property name="leftMargin">
+    <number>0</number>
+   </property>
+   <property name="topMargin">
+    <number>0</number>
+   </property>
+   <property name="rightMargin">
+    <number>0</number>
+   </property>
+   <property name="bottomMargin">
     <number>0</number>
    </property>
    <item row="0" column="0">
@@ -33,7 +42,7 @@
      </property>
      <widget class="QWidget" name="tab">
       <attribute name="title">
-       <string>Base Options</string>
+       <string>Algorithm</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
@@ -50,115 +59,61 @@
             <property name="sizeConstraint">
              <enum>QLayout::SetMinAndMaxSize</enum>
             </property>
-            <item row="1" column="1">
-             <widget class="QSpinBox" name="numThreadsSpinbox">
-              <property name="toolTip">
-               <string>Number of threads</string>
-              </property>
-              <property name="maximum">
-               <number>999</number>
-              </property>
-              <property name="value">
-               <number>1</number>
-              </property>
-             </widget>
-            </item>
-            <item row="7" column="1">
-             <widget class="QDoubleSpinBox" name="internalSeedSpinbox">
-              <property name="toolTip">
-               <string>Look for internal seeds inside a seed longer than {-k} * FLOAT</string>
-              </property>
-              <property name="minimum">
-               <double>0.010000000000000</double>
-              </property>
-              <property name="maximum">
-               <double>9999.989999999999782</double>
-              </property>
-              <property name="value">
-               <double>1.500000000000000</double>
-              </property>
-             </widget>
-            </item>
-            <item row="1" column="0">
-             <widget class="QLabel" name="label_41">
-              <property name="layoutDirection">
-               <enum>Qt::LeftToRight</enum>
-              </property>
-              <property name="text">
-               <string>Number of threads (-t)</string>
-              </property>
-              <property name="alignment">
-               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-              </property>
-              <property name="margin">
-               <number>5</number>
-              </property>
-              <property name="buddy">
-               <cstring>numThreadsSpinbox</cstring>
-              </property>
-             </widget>
-            </item>
-            <item row="3" column="0">
-             <widget class="QLabel" name="label_40">
+            <item row="5" column="0">
+             <widget class="QLabel" name="label_45">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Min seed length (-k)</string>
+               <string>Dropoff (-d)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>minSeedSpinbox</cstring>
+               <cstring>dropoffSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="3" column="1">
-             <widget class="QSpinBox" name="minSeedSpinbox">
+            <item row="6" column="1">
+             <widget class="QSpinBox" name="skipSeedSpinbox">
               <property name="toolTip">
-               <string>Minimum seed length</string>
+               <string>Skip seeds with more than INT occurrences </string>
               </property>
               <property name="minimum">
                <number>1</number>
               </property>
               <property name="maximum">
-               <number>9999</number>
+               <number>4000000</number>
               </property>
               <property name="singleStep">
-               <number>1</number>
+               <number>1000</number>
               </property>
               <property name="value">
-               <number>19</number>
+               <number>10000</number>
               </property>
              </widget>
             </item>
-            <item row="5" column="0">
-             <widget class="QLabel" name="label_43">
-              <property name="layoutDirection">
-               <enum>Qt::LeftToRight</enum>
-              </property>
-              <property name="text">
-               <string>Band width (-w)</string>
-              </property>
-              <property name="alignment">
-               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-              </property>
-              <property name="margin">
-               <number>5</number>
+            <item row="13" column="0" colspan="2">
+             <spacer name="verticalSpacer_2">
+              <property name="orientation">
+               <enum>Qt::Vertical</enum>
               </property>
-              <property name="buddy">
-               <cstring>bandWidthSpinbox</cstring>
+              <property name="sizeHint" stdset="0">
+               <size>
+                <width>20</width>
+                <height>0</height>
+               </size>
               </property>
-             </widget>
+             </spacer>
             </item>
-            <item row="5" column="1">
-             <widget class="QSpinBox" name="bandWidthSpinbox">
+            <item row="7" column="1">
+             <widget class="QSpinBox" name="mateRescueSpinbox">
               <property name="toolTip">
-               <string>Band width for banded alignment</string>
+               <string>Perform at most INT rounds of mate rescues for each read</string>
               </property>
               <property name="maximum">
                <number>9999</number>
@@ -168,26 +123,26 @@
               </property>
              </widget>
             </item>
-            <item row="6" column="0">
-             <widget class="QLabel" name="label_45">
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_40">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Dropoff (-d)</string>
+               <string>Min seed length (-k)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>dropoffSpinbox</cstring>
+               <cstring>minSeedSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="6" column="1">
+            <item row="5" column="1">
              <widget class="QSpinBox" name="dropoffSpinbox">
               <property name="toolTip">
                <string>Off-diagonal X-dropoff</string>
@@ -201,25 +156,28 @@
              </widget>
             </item>
             <item row="7" column="0">
-             <widget class="QLabel" name="label_46">
+             <widget class="QLabel" name="label_9">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Internall seeds length (-r)</string>
+               <string>Rounds of mate rescues (-m)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
+              </property>
+              <property name="indent">
+               <number>-1</number>
               </property>
               <property name="buddy">
-               <cstring>internalSeedSpinbox</cstring>
+               <cstring>mateRescueSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="8" column="0">
+            <item row="6" column="0">
              <widget class="QLabel" name="label_47">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
@@ -231,135 +189,55 @@
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
                <cstring>skipSeedSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="8" column="1">
-             <widget class="QSpinBox" name="skipSeedSpinbox">
+            <item row="2" column="1">
+             <widget class="QSpinBox" name="minSeedSpinbox">
               <property name="toolTip">
-               <string>Skip seeds with more than INT occurrences </string>
+               <string>Minimum seed length</string>
               </property>
               <property name="minimum">
                <number>1</number>
               </property>
               <property name="maximum">
-               <number>4000000</number>
+               <number>9999</number>
               </property>
               <property name="singleStep">
-               <number>1000</number>
-              </property>
-              <property name="value">
-               <number>10000</number>
-              </property>
-             </widget>
-            </item>
-            <item row="9" column="0">
-             <widget class="QLabel" name="label_48">
-              <property name="layoutDirection">
-               <enum>Qt::LeftToRight</enum>
-              </property>
-              <property name="text">
-               <string>Drop chain threshold (-D)</string>
-              </property>
-              <property name="alignment">
-               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-              </property>
-              <property name="margin">
-               <number>5</number>
-              </property>
-              <property name="buddy">
-               <cstring>dropChainSpinbox</cstring>
-              </property>
-             </widget>
-            </item>
-            <item row="9" column="1">
-             <widget class="QDoubleSpinBox" name="dropChainSpinbox">
-              <property name="toolTip">
-               <string>Drop chains shorter than FLOAT fraction of the longest overlapping chain</string>
-              </property>
-              <property name="minimum">
-               <double>0.010000000000000</double>
+               <number>1</number>
               </property>
               <property name="value">
-               <double>0.500000000000000</double>
+               <number>19</number>
               </property>
              </widget>
             </item>
-            <item row="13" column="0" colspan="2">
-             <spacer name="verticalSpacer_2">
-              <property name="orientation">
-               <enum>Qt::Vertical</enum>
+            <item row="8" column="0" colspan="2">
+             <widget class="QCheckBox" name="skipPairingCheckBox">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
               </property>
-              <property name="sizeHint" stdset="0">
+              <property name="sizeIncrement">
                <size>
-                <width>20</width>
+                <width>0</width>
                 <height>0</height>
                </size>
               </property>
-             </spacer>
-            </item>
-            <item row="0" column="0">
-             <widget class="QLabel" name="label_2">
-              <property name="text">
-               <string>Index algorithm (-a)</string>
-              </property>
-              <property name="alignment">
-               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
-              </property>
-              <property name="margin">
-               <number>5</number>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <widget class="QComboBox" name="indexAlgorithmComboBox">
-              <property name="currentIndex">
-               <number>0</number>
-              </property>
-              <item>
-               <property name="text">
-                <string>autodetect</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>bwtsw</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>div</string>
-               </property>
-              </item>
-              <item>
-               <property name="text">
-                <string>is</string>
-               </property>
-              </item>
-             </widget>
-            </item>
-            <item row="11" column="0">
-             <widget class="QCheckBox" name="skipMateCheckBox">
-              <property name="toolTip">
-               <string>Skip mate rescue</string>
-              </property>
-              <property name="text">
-               <string>Skip mate rescue (-S)</string>
-              </property>
-             </widget>
-            </item>
-            <item row="12" column="0">
-             <widget class="QCheckBox" name="skipPairingCheckBox">
               <property name="toolTip">
                <string>Skip pairing; mate rescue performed unless -S also in use</string>
               </property>
               <property name="text">
                <string>Skip pairing (-P)</string>
               </property>
+              <property name="tristate">
+               <bool>false</bool>
+              </property>
              </widget>
             </item>
            </layout>
@@ -371,7 +249,7 @@
             <property name="sizeConstraint">
              <enum>QLayout::SetMinAndMaxSize</enum>
             </property>
-            <item row="9" column="0" colspan="2">
+            <item row="5" column="0" colspan="2">
              <spacer name="verticalSpacer">
               <property name="orientation">
                <enum>Qt::Vertical</enum>
@@ -385,125 +263,248 @@
              </spacer>
             </item>
             <item row="0" column="0">
-             <widget class="QLabel" name="label_7">
+             <widget class="QLabel" name="label_43">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Score for a match (-A)</string>
+               <string>Band width (-w)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>matchScoreSpinbox</cstring>
-              </property>
-             </widget>
-            </item>
-            <item row="0" column="1">
-             <widget class="QSpinBox" name="matchScoreSpinbox">
-              <property name="toolTip">
-               <string>Score for a sequence match</string>
-              </property>
-              <property name="maximum">
-               <number>9999</number>
-              </property>
-              <property name="value">
-               <number>1</number>
+               <cstring>bandWidthSpinbox</cstring>
               </property>
              </widget>
             </item>
             <item row="1" column="0">
-             <widget class="QLabel" name="label_8">
+             <widget class="QLabel" name="label_46">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Mismatch penalty (-B)</string>
+               <string>Internal seeds length (-r)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>mismatchScoreSpinbox</cstring>
+               <cstring>internalSeedSpinbox</cstring>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QDoubleSpinBox" name="dropChainSpinbox">
+              <property name="toolTip">
+               <string>Drop chains shorter than FLOAT fraction of the longest overlapping chain</string>
+              </property>
+              <property name="minimum">
+               <double>0.010000000000000</double>
+              </property>
+              <property name="value">
+               <double>0.500000000000000</double>
               </property>
              </widget>
             </item>
             <item row="1" column="1">
-             <widget class="QSpinBox" name="mismatchScoreSpinbox">
+             <widget class="QDoubleSpinBox" name="internalSeedSpinbox">
               <property name="toolTip">
-               <string>Penalty for a mismatch</string>
+               <string>Look for internal seeds inside a seed longer than {-k} * FLOAT</string>
+              </property>
+              <property name="minimum">
+               <double>0.010000000000000</double>
+              </property>
+              <property name="maximum">
+               <double>9999.989999999999782</double>
               </property>
               <property name="value">
-               <number>4</number>
+               <double>1.500000000000000</double>
               </property>
              </widget>
             </item>
             <item row="2" column="0">
-             <widget class="QLabel" name="label_17">
+             <widget class="QLabel" name="label_48">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Gap open penalty (-O)</string>
+               <string>Drop chain threshold (-D)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>gapOpenSpinbox</cstring>
+               <cstring>dropChainSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="2" column="1">
-             <widget class="QSpinBox" name="gapOpenSpinbox">
+            <item row="0" column="1">
+             <widget class="QSpinBox" name="bandWidthSpinbox">
               <property name="toolTip">
-               <string>Gap open penalty</string>
+               <string>Band width for banded alignment</string>
+              </property>
+              <property name="maximum">
+               <number>9999</number>
               </property>
               <property name="value">
-               <number>6</number>
+               <number>100</number>
               </property>
              </widget>
             </item>
             <item row="3" column="0">
-             <widget class="QLabel" name="label_18">
+             <widget class="QLabel" name="label_41">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Gap extention penalty (-E)</string>
+               <string>Number of threads (-t)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>gapExtSpinbox</cstring>
+               <cstring>numThreadsSpinbox</cstring>
               </property>
              </widget>
             </item>
             <item row="3" column="1">
-             <widget class="QSpinBox" name="gapExtSpinbox">
+             <widget class="QSpinBox" name="numThreadsSpinbox">
               <property name="toolTip">
-               <string>Gap extension penalty; a gap of size k cost {-O} + {-E}*k</string>
+               <string>Number of threads</string>
+              </property>
+              <property name="maximum">
+               <number>999</number>
               </property>
               <property name="value">
                <number>1</number>
               </property>
              </widget>
             </item>
-            <item row="4" column="0">
+           </layout>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item>
+        <widget class="QLabel" name="label">
+         <property name="minimumSize">
+          <size>
+           <width>0</width>
+           <height>36</height>
+          </size>
+         </property>
+         <property name="text">
+          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p></body></html></string>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+       <item>
+        <widget class="QLabel" name="warningLabel">
+         <property name="text">
+          <string/>
+         </property>
+         <property name="wordWrap">
+          <bool>true</bool>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_2">
+      <attribute name="title">
+       <string>Scoring Options</string>
+      </attribute>
+      <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QGroupBox" name="groupBox_2">
+           <property name="title">
+            <string/>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_5">
+            <item row="1" column="1">
+             <widget class="QSpinBox" name="matchScoreSpinbox">
+              <property name="toolTip">
+               <string>Score for a sequence match</string>
+              </property>
+              <property name="maximum">
+               <number>9999</number>
+              </property>
+              <property name="value">
+               <number>1</number>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QLabel" name="label_7">
+              <property name="layoutDirection">
+               <enum>Qt::LeftToRight</enum>
+              </property>
+              <property name="text">
+               <string>Matching score (-A)</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+              </property>
+              <property name="margin">
+               <number>1</number>
+              </property>
+              <property name="buddy">
+               <cstring>matchScoreSpinbox</cstring>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_17">
+              <property name="layoutDirection">
+               <enum>Qt::LeftToRight</enum>
+              </property>
+              <property name="text">
+               <string>Gap open penalty (-O)</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+              </property>
+              <property name="margin">
+               <number>1</number>
+              </property>
+              <property name="buddy">
+               <cstring>gapOpenSpinbox</cstring>
+              </property>
+             </widget>
+            </item>
+            <item row="2" column="1">
+             <widget class="QSpinBox" name="gapOpenSpinbox">
+              <property name="toolTip">
+               <string>Gap open penalty</string>
+              </property>
+              <property name="value">
+               <number>6</number>
+              </property>
+             </widget>
+            </item>
+            <item row="5" column="0">
              <widget class="QLabel" name="label_19">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
@@ -515,14 +516,14 @@
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
                <cstring>clippingPenSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="4" column="1">
+            <item row="5" column="1">
              <widget class="QSpinBox" name="clippingPenSpinbox">
               <property name="toolTip">
                <string>Penalty for clipping </string>
@@ -532,93 +533,99 @@
               </property>
              </widget>
             </item>
-            <item row="5" column="0">
-             <widget class="QLabel" name="label_20">
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="QGroupBox" name="groupBox_3">
+           <property name="title">
+            <string/>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_4">
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_8">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Penalty unpaired (-U)</string>
+               <string>Mismatch penalty (-B)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>penaltyUnpairedSpinbox</cstring>
+               <cstring>mismatchScoreSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="5" column="1">
-             <widget class="QSpinBox" name="penaltyUnpairedSpinbox">
+            <item row="0" column="1">
+             <widget class="QSpinBox" name="mismatchScoreSpinbox">
               <property name="toolTip">
-               <string>Penalty for an unpaired read pair</string>
+               <string>Penalty for a mismatch</string>
               </property>
               <property name="value">
-               <number>17</number>
+               <number>4</number>
               </property>
              </widget>
             </item>
-            <item row="6" column="0">
-             <widget class="QLabel" name="label_37">
+            <item row="1" column="0">
+             <widget class="QLabel" name="label_18">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Score threshold (-T)</string>
+               <string>Gap extention penalty (-E)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>scoreThresholdSpinbox</cstring>
+               <cstring>gapExtSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="6" column="1">
-             <widget class="QSpinBox" name="scoreThresholdSpinbox">
+            <item row="1" column="1">
+             <widget class="QSpinBox" name="gapExtSpinbox">
               <property name="toolTip">
-               <string>Minimum score to output</string>
+               <string>Gap extension penalty; a gap of size k cost {-O} + {-E}*k</string>
               </property>
               <property name="value">
-               <number>30</number>
+               <number>1</number>
               </property>
              </widget>
             </item>
-            <item row="7" column="0">
-             <widget class="QLabel" name="label_9">
+            <item row="2" column="0">
+             <widget class="QLabel" name="label_20">
               <property name="layoutDirection">
                <enum>Qt::LeftToRight</enum>
               </property>
               <property name="text">
-               <string>Rounds of mate rescues (-m)</string>
+               <string>Penalty unpaired (-U)</string>
               </property>
               <property name="alignment">
                <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
               </property>
               <property name="margin">
-               <number>5</number>
+               <number>1</number>
               </property>
               <property name="buddy">
-               <cstring>mateRescueSpinbox</cstring>
+               <cstring>penaltyUnpairedSpinbox</cstring>
               </property>
              </widget>
             </item>
-            <item row="7" column="1">
-             <widget class="QSpinBox" name="mateRescueSpinbox">
+            <item row="2" column="1">
+             <widget class="QSpinBox" name="penaltyUnpairedSpinbox">
               <property name="toolTip">
-               <string>Perform at most INT rounds of mate rescues for each read</string>
-              </property>
-              <property name="maximum">
-               <number>9999</number>
+               <string>Penalty for an unpaired read pair</string>
               </property>
               <property name="value">
-               <number>100</number>
+               <number>17</number>
               </property>
              </widget>
             </item>
@@ -628,28 +635,145 @@
         </layout>
        </item>
        <item>
-        <widget class="QLabel" name="label">
-         <property name="text">
-          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;"></p></body></html></string>
+        <spacer name="verticalSpacer_3">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
          </property>
-         <property name="wordWrap">
-          <bool>true</bool>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
          </property>
-        </widget>
+        </spacer>
        </item>
-       <item>
-        <widget class="QLabel" name="warningLabel">
-         <property name="text">
-          <string/>
+      </layout>
+     </widget>
+     <widget class="QWidget" name="tab_3">
+      <attribute name="title">
+       <string>Other</string>
+      </attribute>
+      <layout class="QGridLayout" name="gridLayout_8">
+       <item row="0" column="0">
+        <layout class="QHBoxLayout" name="horizontalLayout_3">
+         <item>
+          <widget class="QGroupBox" name="groupBox_4">
+           <property name="title">
+            <string/>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_6">
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_2">
+              <property name="text">
+               <string>Index algorithm (-a)</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+              </property>
+              <property name="margin">
+               <number>1</number>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0">
+             <widget class="QCheckBox" name="skipMateCheckBox">
+              <property name="toolTip">
+               <string>Skip mate rescue</string>
+              </property>
+              <property name="text">
+               <string>Skip mate rescue (-S)</string>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QComboBox" name="indexAlgorithmComboBox">
+              <property name="currentIndex">
+               <number>0</number>
+              </property>
+              <item>
+               <property name="text">
+                <string>autodetect</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>bwtsw</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>div</string>
+               </property>
+              </item>
+              <item>
+               <property name="text">
+                <string>is</string>
+               </property>
+              </item>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+         <item>
+          <widget class="QGroupBox" name="groupBox_5">
+           <property name="title">
+            <string/>
+           </property>
+           <layout class="QGridLayout" name="gridLayout_7">
+            <item row="0" column="0">
+             <widget class="QLabel" name="label_37">
+              <property name="layoutDirection">
+               <enum>Qt::LeftToRight</enum>
+              </property>
+              <property name="text">
+               <string>Score threshold (-T)</string>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+              </property>
+              <property name="margin">
+               <number>1</number>
+              </property>
+              <property name="buddy">
+               <cstring>scoreThresholdSpinbox</cstring>
+              </property>
+             </widget>
+            </item>
+            <item row="0" column="1">
+             <widget class="QSpinBox" name="scoreThresholdSpinbox">
+              <property name="toolTip">
+               <string>Minimum score to output</string>
+              </property>
+              <property name="value">
+               <number>30</number>
+              </property>
+             </widget>
+            </item>
+            <item row="1" column="0" colspan="2">
+             <widget class="QLabel" name="label_3">
+              <property name="text">
+               <string/>
+              </property>
+             </widget>
+            </item>
+           </layout>
+          </widget>
+         </item>
+        </layout>
+       </item>
+       <item row="1" column="0">
+        <spacer name="verticalSpacer_5">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
          </property>
-         <property name="wordWrap">
-          <bool>true</bool>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
          </property>
-        </widget>
+        </spacer>
        </item>
       </layout>
      </widget>
diff --git a/src/plugins/external_tool_support/src/bwa/BwaMemWorker.cpp b/src/plugins/external_tool_support/src/bwa/BwaMemWorker.cpp
index 9c4f8b0..e0d75c3 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaMemWorker.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaMemWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Algorithm/DnaAssemblyTask.h>
 
@@ -62,6 +62,8 @@ static const QString SCORE_THRESHOLD = "score-threshold";
 static const QString BASE_BWA_SUBDIR("bwa");
 static const QString BASE_BWA_OUTFILE("out.sam");
 
+const QString OUTPUT_SUBDIR("BWA-MEM");
+
 /************************************************************************/
 /* Worker */
 /************************************************************************/
@@ -120,6 +122,10 @@ void BwaMemWorker::setGenomeIndex(DnaAssemblyToRefTaskSettings& settings) {
     }
 }
 
+QString BwaMemWorker::getAlignerSubdir() const {
+    return OUTPUT_SUBDIR;
+}
+
 /************************************************************************/
 /* Factory */
 /************************************************************************/
@@ -174,7 +180,7 @@ void BwaMemWorkerFactory::init() {
             BwaMemWorker::tr("Skip pairing; mate rescue performed unless -S also in use (-P)."));
 
         Descriptor matchScore(MATCH_SCORE,
-            BwaMemWorker::tr("Mismatch penalty"),
+            BwaMemWorker::tr("Matching score"),
             BwaMemWorker::tr("Score for a sequence match (-A)."));
 
         Descriptor mismatchPenalty(MISMATCH_PENALTY,
diff --git a/src/plugins/external_tool_support/src/bwa/BwaMemWorker.h b/src/plugins/external_tool_support/src/bwa/BwaMemWorker.h
index 51078f2..4a388be 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaMemWorker.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaMemWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,7 @@ protected:
     QString getDefaultFileName() const;
     QString getBaseSubdir() const;
     void setGenomeIndex(DnaAssemblyToRefTaskSettings& settings);
+    QString getAlignerSubdir() const;
 }; // BwaMemWorker
 
 class BwaMemWorkerFactory : public BaseShortReadsAlignerWorkerFactory {
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
index ee92bc4..41ab90c 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
index fafb50c..b65e679 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSupport.cpp b/src/plugins/external_tool_support/src/bwa/BwaSupport.cpp
index 385b9bd..07a4843 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSupport.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaSupport.h b/src/plugins/external_tool_support/src/bwa/BwaSupport.h
index 1a80aaa..90b0725 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaSupport.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaTask.cpp b/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
index df4719c..04fc1d2 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -82,7 +82,7 @@ void cleanupTempDir(const QStringList &tempDirFiles) {
     foreach(const QString& url, tempDirFiles) {
         QFile toDelete(url);
         if (toDelete.exists(url)) {
-            toDelete.remove(url);
+            toDelete.remove();
         }
     }
 }
@@ -200,7 +200,6 @@ void BwaAlignTask::prepare() {
 QList<Task *> BwaAlignTask::onSubTaskFinished(Task *subTask) {
     QList<Task*> result;
     QFileInfo resultPathFileInfo(resultPath);
-    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
     if (alignMultiTask == subTask) {
         QList<Task*> samTasks;
         QList<ShortReadSet> &containerToIterate = settings.pairedReads ? downStreamList : settings.shortReadSets;
@@ -214,7 +213,7 @@ QList<Task *> BwaAlignTask::onSubTaskFinished(Task *subTask) {
             if (containerToIterate.size() == 1) {
                 arguments.append(resultPath);
             } else {
-                QString pathToSort = tmpDirPath + "/" + resultPathFileInfo.baseName() + QString::number(resultPartsCounter);
+                QString pathToSort = settings.tmpDirPath + "/" + resultPathFileInfo.baseName() + QString::number(resultPartsCounter);
                 urlsToMerge.append(pathToSort);
                 arguments.append(pathToSort);
             }
@@ -247,7 +246,7 @@ QList<Task *> BwaAlignTask::onSubTaskFinished(Task *subTask) {
         int i = 0;
         foreach(const QString &url, urlsToMerge) {
             QFileInfo urlToConvertFileInfo(url);
-            QString convertedBamUrl = tmpDirPath + "/" + resultPathFileInfo.baseName() + "_" + QString::number(i) + ".bam";
+            QString convertedBamUrl = settings.tmpDirPath + "/" + resultPathFileInfo.baseName() + "_" + QString::number(i) + ".bam";
             BAMUtils::ConvertOption options(true);
             BAMUtils::convertToSamOrBam(url, convertedBamUrl, options, stateInfo);
             bamUrlstoMerge.append(convertedBamUrl);
@@ -403,7 +402,7 @@ void BwaMemAlignTask::prepare() {
             if (upStreamList.size() == 1) {
                 alignTask->setStandartOutputFile(settings.resultFileName.getURLString());
             } else {
-                QString resultFilePathWithpartNumber = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + "_" +
+                QString resultFilePathWithpartNumber = settings.tmpDirPath + "/" + resultFileInfo.baseName() + "_" +
                     QString::number(pairedReadsCounter++) + "." + resultFileInfo.completeSuffix();
                 alignTask->setStandartOutputFile(resultFilePathWithpartNumber);
             }
@@ -412,7 +411,7 @@ void BwaMemAlignTask::prepare() {
         } else if (settings.shortReadSets.size() > 1) {
             arguments.append(currentReadSet.url.getURLString());
             ExternalToolRunTask* alignTask = new ExternalToolRunTask(ET_BWA, arguments, new BwaAlignTask::LogParser(), NULL);
-            QString resultFilePathWithpartNumber = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + "_" +
+            QString resultFilePathWithpartNumber = settings.tmpDirPath + "/" + resultFileInfo.baseName() + "_" +
                 QString::number(resultPartsCounter) + "." + resultFileInfo.completeSuffix();
             alignTask->setStandartOutputFile(resultFilePathWithpartNumber);
             setListenerForTask(alignTask);
@@ -431,7 +430,6 @@ void BwaMemAlignTask::prepare() {
 
 QList<Task *> BwaMemAlignTask::onSubTaskFinished(Task *subTask) {
     QList<Task *> result;
-    QString tmpDirPath = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath();
     QFileInfo resultFileInfo(settings.resultFileName.getURLString());
     if (alignMultiTask == subTask) {
         if (settings.shortReadSets.size() == 1 || (settings.shortReadSets.size() == 2 && settings.pairedReads)) {
@@ -440,9 +438,9 @@ QList<Task *> BwaMemAlignTask::onSubTaskFinished(Task *subTask) {
         //converting SAM -> BAM
         int partsCounter = settings.pairedReads ? settings.shortReadSets.size() / 2 : settings.shortReadSets.size();
         for (int i = 0; i < partsCounter; i++) {
-            QString resultFilePathWithpartNumber = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + "_" +
+            QString resultFilePathWithpartNumber = settings.tmpDirPath + "/" + resultFileInfo.baseName() + "_" +
                 QString::number(i) + "." + resultFileInfo.completeSuffix();
-            QString bamFilePath = tmpDirPath + "/" + resultFileInfo.baseName() + "_" + QString::number(i) + ".bam";
+            QString bamFilePath = settings.tmpDirPath + "/" + resultFileInfo.baseName() + "_" + QString::number(i) + ".bam";
             BAMUtils::ConvertOption options(true);
             BAMUtils::convertToSamOrBam(resultFilePathWithpartNumber, bamFilePath, options, stateInfo);
             bamUrlstoMerge.append(bamFilePath);
@@ -451,13 +449,15 @@ QList<Task *> BwaMemAlignTask::onSubTaskFinished(Task *subTask) {
                 return result;
             }
         }
-        mergeTask = new MergeBamTask(bamUrlstoMerge, resultFileInfo.dir().canonicalPath(), resultFileInfo.baseName() + ".bam", true);
+        mergeTask = new MergeBamTask(bamUrlstoMerge, settings.tmpDirPath, resultFileInfo.baseName() + ".bam", true);
         result.append(mergeTask);
     }
     if (mergeTask == subTask) {
         //converting BAM -> SAM
-        cleanupTempDir(bamUrlstoMerge);
-        QString bamResultPath = resultFileInfo.dir().canonicalPath() + "/" + resultFileInfo.baseName() + ".bam";
+        if (settings.cleanTmpDir) {
+            cleanupTempDir(bamUrlstoMerge);
+        }
+        QString bamResultPath = settings.tmpDirPath + "/" + resultFileInfo.baseName() + ".bam";
         BAMUtils::ConvertOption options(false);
         BAMUtils::convertToSamOrBam(resultPath, bamResultPath, options, stateInfo);
     }
@@ -656,7 +656,7 @@ void BwaTask::prepare() {
 
 Task::ReportResult BwaTask::report() {
     if(!justBuildIndex) {
-        haveResults = true;
+        hasResults = true;
     }
     return ReportResult_Finished;
 }
diff --git a/src/plugins/external_tool_support/src/bwa/BwaTask.h b/src/plugins/external_tool_support/src/bwa/BwaTask.h
index 43b91a3..29ba24f 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaTask.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaWorker.cpp b/src/plugins/external_tool_support/src/bwa/BwaWorker.cpp
index c160056..7e110ef 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaWorker.cpp
+++ b/src/plugins/external_tool_support/src/bwa/BwaWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/BwaWorker.h b/src/plugins/external_tool_support/src/bwa/BwaWorker.h
index 301c786..cd5567a 100644
--- a/src/plugins/external_tool_support/src/bwa/BwaWorker.h
+++ b/src/plugins/external_tool_support/src/bwa/BwaWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.cpp b/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.cpp
index 641a41f..5303913 100644
--- a/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.cpp
+++ b/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/TextObject.h>
 #include <U2Core/TextUtils.h>
@@ -43,8 +43,8 @@
 
 #include <U2View/DnaAssemblyUtils.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QRegExp>
+#include <QDir>
+#include <QRegExp>
 
 /* TRANSLATOR U2::GTest*/
 
@@ -317,7 +317,7 @@ QList<Task*> GTest_Bwa::onSubTaskFinished(Task* subTask) {
             subTaskFailed = true;
             return res;
         }
-        if (!bwaTask->isHaveResult()) {
+        if (!bwaTask->hasResult()) {
             subTaskFailed = true;
             bwaTask->setError("Reference assembly failed - no possible alignment found");
             return res;
diff --git a/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.h b/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.h
index ac205fd..7b612d8 100644
--- a/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.h
+++ b/src/plugins/external_tool_support/src/bwa/bwa_tests/bwaTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,19 +22,20 @@
 #ifndef _U2_BWA_TESTS_H_
 #define _U2_BWA_TESTS_H_
 
-#include <U2Test/XMLTestUtils.h>
-#include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <QFileInfo>
 
+#include <U2Core/GObject.h>
+
+#include <U2Test/XMLTestUtils.h>
+
 #include "bwa/BwaTask.h"
 
 namespace U2 {
 
 class BwaGObjectTask;
 class DnaAssemblyMultiTask;
-class MAlignmentObject;
-class MAlignment;
+class MultipleSequenceAlignmentObject;
 
 class GTest_Bwa : public GTest {
     Q_OBJECT
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3Support.cpp b/src/plugins/external_tool_support/src/cap3/CAP3Support.cpp
index 87e40b9..b1e8b8d 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3Support.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3Support.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
@@ -36,7 +36,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "CAP3Support.h"
 #include "CAP3SupportDialog.h"
@@ -73,7 +73,7 @@ CAP3Support::CAP3Support(const QString& name, const QString& path) : ExternalToo
 }
 
 void CAP3Support::sl_runWithExtFileSpecify(){
-    //Check that CAP3 and temporary directory path defined
+    //Check that CAP3 and temporary folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3Support.h b/src/plugins/external_tool_support/src/cap3/CAP3Support.h
index 298527f..0aa1f8b 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3Support.h
+++ b/src/plugins/external_tool_support/src/cap3/CAP3Support.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
index 3f33c58..cbc7e2b 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@ CAP3SupportDialog::CAP3SupportDialog(CAP3SupportTaskSettings& s, QWidget* parent
       saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223216");
+    new HelpButton(this, buttonBox, "20875120");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
index 456288d..8111552 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,6 @@
 
 #include <QDialog>
 
-#include <qglobal.h>
 #include <ui_CAP3SupportDialog.h>
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.cpp b/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.cpp
index c2a25df..c77078c 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.h b/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.h
index 51c075f..38b639d 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.h
+++ b/src/plugins/external_tool_support/src/cap3/CAP3SupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_CAP3_SUPPORT_TASK_H_
 #define _U2_CAP3_SUPPORT_TASK_H_
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Formats/StreamSequenceReader.h>
 #include <U2Formats/StreamSequenceWriter.h>
@@ -30,7 +30,7 @@
 #include "utils/ExportTasks.h"
 
 #include <U2Core/ExternalToolRunTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3Worker.cpp b/src/plugins/external_tool_support/src/cap3/CAP3Worker.cpp
index 77ce8f4..13aee5d 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3Worker.cpp
+++ b/src/plugins/external_tool_support/src/cap3/CAP3Worker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "CAP3Support.h"
-#include "CAP3Worker.h"
-#include "TaskLocalStorage.h"
-
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/FailTask.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Designer/DelegateEditors.h>
@@ -44,6 +41,9 @@
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "CAP3Support.h"
+#include "CAP3Worker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -233,8 +233,8 @@ void CAP3WorkerFactory::init() {
         CAP3Worker::tr("The path to the CAP3 external tool in UGENE."));
 
     Descriptor tmpDir(TMP_DIR_PATH,
-        CAP3Worker::tr("Temporary directory"),
-        CAP3Worker::tr("The directory for temporary files."));
+        CAP3Worker::tr("Temporary folder"),
+        CAP3Worker::tr("The folder for temporary files."));
 
     attributes << new Attribute(outputFile, BaseTypes::STRING_TYPE(), true, "result.ace");
     attributes << new Attribute(clippingCutoff, BaseTypes::NUM_TYPE(), false, QVariant(CAP3SupportTaskSettings::defaultBaseQualityClipCutoff));
diff --git a/src/plugins/external_tool_support/src/cap3/CAP3Worker.h b/src/plugins/external_tool_support/src/cap3/CAP3Worker.h
index a8c0998..9358de2 100644
--- a/src/plugins/external_tool_support/src/cap3/CAP3Worker.h
+++ b/src/plugins/external_tool_support/src/cap3/CAP3Worker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -64,7 +64,7 @@ private:
     /** Use data filled by a user to init the CAP3 settings */
     void initSettings();
 
-    /** Init external tool and temporary directory paths */
+    /** Init external tool and temporary folder paths */
     void initPaths();
 
     /**
diff --git a/src/plugins/external_tool_support/src/ceas/CEASReportWorker.cpp b/src/plugins/external_tool_support/src/ceas/CEASReportWorker.cpp
index 09f275b..569bd79 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASReportWorker.cpp
+++ b/src/plugins/external_tool_support/src/ceas/CEASReportWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASReportWorker.h b/src/plugins/external_tool_support/src/ceas/CEASReportWorker.h
index 34985da..71ca0d2 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASReportWorker.h
+++ b/src/plugins/external_tool_support/src/ceas/CEASReportWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSettings.cpp b/src/plugins/external_tool_support/src/ceas/CEASSettings.cpp
index fba237e..61a8310 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSettings.cpp
+++ b/src/plugins/external_tool_support/src/ceas/CEASSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSettings.h b/src/plugins/external_tool_support/src/ceas/CEASSettings.h
index 1172db3..a396a9a 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSettings.h
+++ b/src/plugins/external_tool_support/src/ceas/CEASSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSupport.cpp b/src/plugins/external_tool_support/src/ceas/CEASSupport.cpp
index d3de0f7..50cfe92 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSupport.cpp
+++ b/src/plugins/external_tool_support/src/ceas/CEASSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSupport.h b/src/plugins/external_tool_support/src/ceas/CEASSupport.h
index de27019..e6b9dfb 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSupport.h
+++ b/src/plugins/external_tool_support/src/ceas/CEASSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSupportTask.cpp b/src/plugins/external_tool_support/src/ceas/CEASSupportTask.cpp
index a30784d..86720a6 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/ceas/CEASSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -113,7 +113,7 @@ void CEASSupportTask::cleanup() {
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this directory."));
+            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this folder."));
             //return;
         }
     }
diff --git a/src/plugins/external_tool_support/src/ceas/CEASSupportTask.h b/src/plugins/external_tool_support/src/ceas/CEASSupportTask.h
index 286aca5..8024d30 100644
--- a/src/plugins/external_tool_support/src/ceas/CEASSupportTask.h
+++ b/src/plugins/external_tool_support/src/ceas/CEASSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
index 9006d46..ae92fe2 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
@@ -37,7 +37,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ClustalOSupport.h"
 #include "ClustalOSupportRunDialog.h"
@@ -70,7 +70,7 @@ ClustalOSupport::ClustalOSupport(const QString& name, const QString& path) : Ext
 }
 
 void ClustalOSupport::sl_runWithExtFileSpecify(){
-    //Check that Clustal and tempory directory path defined
+    //Check that Clustal and tempory folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
@@ -117,17 +117,16 @@ void ClustalOSupport::sl_runWithExtFileSpecify(){
 
 ////////////////////////////////////////
 //ExternalToolSupportMSAContext
-ClustalOSupportContext::ClustalOSupportContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+ClustalOSupportContext::ClustalOSupportContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 
 }
 
 void ClustalOSupportContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-        return;
-    }
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
+
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     AlignMsaAction* alignAction = new AlignMsaAction(this, ET_CLUSTALO, view, tr("Align with ClustalO..."), 2000);
@@ -136,8 +135,8 @@ void ClustalOSupportContext::initViewContext(GObjectView* view) {
     addViewAction(alignAction);
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
 
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align_with_ClustalO()));
 }
 
@@ -151,7 +150,7 @@ void ClustalOSupportContext::buildMenu(GObjectView* view, QMenu* m) {
 }
 
 void ClustalOSupportContext::sl_align_with_ClustalO() {
-    //Check that Clustal and tempory directory path defined
+    //Check that Clustal and tempory folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(ET_CLUSTALO)->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(ET_CLUSTALO);
@@ -185,14 +184,14 @@ void ClustalOSupportContext::sl_align_with_ClustalO() {
     AlignMsaAction* action = qobject_cast<AlignMsaAction *>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMsaEditor();
-    MAlignmentObject* obj = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj == NULL) {
         return;
     }
     assert(!obj->isStateLocked());
 
     ClustalOSupportTaskSettings settings;
-    QObjectScopedPointer<ClustalOSupportRunDialog> clustalORunDialog = new ClustalOSupportRunDialog(obj->getMAlignment(), settings, AppContext::getMainWindow()->getQMainWindow());
+    QObjectScopedPointer<ClustalOSupportRunDialog> clustalORunDialog = new ClustalOSupportRunDialog(obj->getMultipleAlignment(), settings, AppContext::getMainWindow()->getQMainWindow());
     clustalORunDialog->exec();
     CHECK(!clustalORunDialog.isNull(), );
 
@@ -200,7 +199,7 @@ void ClustalOSupportContext::sl_align_with_ClustalO() {
         return;
     }
 
-    ClustalOSupportTask* clustalOSupportTask = new ClustalOSupportTask(obj->getMAlignment(), GObjectReference(obj), settings);
+    ClustalOSupportTask* clustalOSupportTask = new ClustalOSupportTask(obj->getMultipleAlignment(), GObjectReference(obj), settings);
     connect(obj, SIGNAL(destroyed()), clustalOSupportTask, SLOT(cancel()));
     AppContext::getTaskScheduler()->registerTopLevelTask(clustalOSupportTask);
 
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.h b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.h
index b1caeb4..27e15e1 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.h
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
index 16ff7b9..7834db7 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,11 +41,11 @@
 namespace U2 {
 ////////////////////////////////////////
 //ClustalOSupportRunDialog
-ClustalOSupportRunDialog::ClustalOSupportRunDialog(const MAlignment& _ma, ClustalOSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), ma(_ma), settings(_settings)
+ClustalOSupportRunDialog::ClustalOSupportRunDialog(const MultipleSequenceAlignment& _ma, ClustalOSupportTaskSettings& _settings, QWidget* _parent) :
+        QDialog(_parent), ma(_ma->getCopy()), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223240");
+    new HelpButton(this, buttonBox, "20875144");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -79,7 +79,7 @@ ClustalOWithExtFileSpecifySupportRunDialog::ClustalOWithExtFileSpecifySupportRun
     saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223222");
+    new HelpButton(this, buttonBox, "20875126");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -94,7 +94,7 @@ ClustalOWithExtFileSpecifySupportRunDialog::ClustalOWithExtFileSpecifySupportRun
 void ClustalOWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
index c3ad41c..a71c5bf 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,13 +35,13 @@ class SaveDocumentController;
 class ClustalOSupportRunDialog : public QDialog, public Ui_ClustalOSupportRunDialog {
     Q_OBJECT
 public:
-    ClustalOSupportRunDialog(const MAlignment& ma, ClustalOSupportTaskSettings& settings, QWidget* parent);
+    ClustalOSupportRunDialog(const MultipleSequenceAlignment& ma, ClustalOSupportTaskSettings& settings, QWidget* parent);
 
 private slots:
     void accept();
 
 private:
-    MAlignment                      ma;
+    MultipleSequenceAlignment                      ma;
     ClustalOSupportTaskSettings&    settings;
 
 };
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.cpp
index 953d816..f43665f 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -32,7 +32,7 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -56,9 +56,9 @@ void ClustalOSupportTaskSettings::reset() {
     numberOfProcessors=1;
 }
 
-ClustalOSupportTask::ClustalOSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalOSupportTaskSettings& _settings)
+ClustalOSupportTask::ClustalOSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalOSupportTaskSettings& _settings)
     : ExternalToolSupportTask("Run ClustalO alignment task", TaskFlags_NR_FOSCOE),
-      inputMsa(_inputMsa),
+      inputMsa(_inputMsa->getExplicitCopy()),
       objRef(_objRef),
       settings(_settings),
       lock(NULL)
@@ -68,8 +68,8 @@ ClustalOSupportTask::ClustalOSupportTask(const MAlignment& _inputMsa, const GObj
     loadTemporyDocumentTask=NULL;
     clustalOTask=NULL;
     tmpDoc=NULL;
-    resultMA.setName(inputMsa.getName());
-    resultMA.setAlphabet(inputMsa.getAlphabet());
+    resultMA->setName(inputMsa->getName());
+    resultMA->setAlphabet(inputMsa->getAlphabet());
 }
 
 ClustalOSupportTask::~ClustalOSupportTask() {
@@ -81,7 +81,7 @@ ClustalOSupportTask::~ClustalOSupportTask() {
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
                 CHECK(NULL != alObj, );
                 if(alObj->isStateLocked()) {
                     alObj->unlockState(lock);
@@ -99,15 +99,15 @@ void ClustalOSupportTask::prepare(){
     if (objRef.isValid()) {
         GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
         if (NULL != obj) {
-            MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalW results!",);
+            MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalW results!",);
             lock = new StateLock("ClustalWAligment");
             alObj->lockState(lock);
         }
     }
 
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
 
     QString tmpDirName = "ClustalO_"+QString::number(this->getTaskId())+"_"+
                          QDate::currentDate().toString("dd.MM.yyyy")+"_"+
@@ -124,12 +124,12 @@ void ClustalOSupportTask::prepare(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Subdirectory for temporary files exists. Can not remove this directory."));
+            stateInfo.setError(tr("Subfolder for temporary files exists. Can not remove this folder."));
             return;
         }
     }
     if(!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
 
@@ -200,19 +200,19 @@ QList<Task*> ClustalOSupportTask::onSubTaskFinished(Task* subTask) {
         SAFE_POINT(tmpDoc->getObjects().length()==1, QString("no objects in output document '%1'").arg(tmpDoc->getURLString()), res);
 
         // Get the result alignment
-        MAlignmentObject* newMAligmentObject = qobject_cast<MAlignmentObject*>(tmpDoc->getObjects().first());
-        SAFE_POINT(newMAligmentObject!=NULL, "newDocument->getObjects().first() is not a MAlignmentObject", res);
+        MultipleSequenceAlignmentObject* newMAligmentObject = qobject_cast<MultipleSequenceAlignmentObject*>(tmpDoc->getObjects().first());
+        SAFE_POINT(newMAligmentObject!=NULL, "newDocument->getObjects().first() is not a MultipleSequenceAlignmentObject", res);
 
-        resultMA=newMAligmentObject->getMAlignment();
-        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa.getRowNames());
+        resultMA = newMAligmentObject->getMsaCopy();
+        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa->getRowNames());
         SAFE_POINT( renamed, "Failed to restore initial row names!", res);
 
         // If an alignment object has been specified, save the result to it
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalO results!", res);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalO results!", res);
 
                 QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(inputMsa, resultMA, stateInfo);
                 CHECK_OP(stateInfo, res);
@@ -227,42 +227,42 @@ QList<Task*> ClustalOSupportTask::onSubTaskFinished(Task* subTask) {
                         lock = NULL;
                     }
                     else {
-                        stateInfo.setError("MAlignment object has been changed");
+                        stateInfo.setError("MultipleSequenceAlignment object has been changed");
                         return res;
                     }
                     U2OpStatus2Log os;
                     U2UseCommonUserModStep userModStep(obj->getEntityRef(), os);
+                    Q_UNUSED(userModStep);
                     if (os.hasError()) {
                         stateInfo.setError("Failed to apply the result of the alignment!");
                         return res;
                     }
 
-                    if (rowsOrder.count() != inputMsa.getNumRows()) {
+                    if (rowsOrder.count() != inputMsa->getNumRows()) {
                         // Find rows that were removed by ClustalO and remove them from MSA
-                        for (int i = inputMsa.getNumRows() - 1; i >= 0; i--) {
-                            const MAlignmentRow& alRow = inputMsa.getRow(i);
-                            qint64 rowId = alRow.getRowDBInfo().rowId;
+                        for (int i = inputMsa->getNumRows() - 1; i >= 0; i--) {
+                            qint64 rowId = inputMsa->getMsaRow(i)->getRowDbInfo().rowId;
                             if (!rowsOrder.contains(rowId)) {
                                 alObj->removeRow(i);
                             }
                         }
-                        MAlignmentModInfo mi;
-                        mi.sequenceContentChanged = false;
-                        alObj->updateCachedMAlignment(mi);
+                        MaModificationInfo mi;
+                        mi.rowContentChanged = false;
+                        alObj->updateCachedMultipleAlignment(mi);
                     }
 
                     QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-                    for (int i = 0, n = resultMA.getNumRows(); i < n; ++i) {
-                        qint64 rowId = resultMA.getRow(i).getRowDBInfo().rowId;
-                        const QList<U2MsaGap>& newGapModel = resultMA.getRow(i).getGapModel();
+                    for (int i = 0, n = resultMA->getNumRows(); i < n; ++i) {
+                        qint64 rowId = resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+                        const QList<U2MsaGap>& newGapModel = resultMA->getMsaRow(i)->getGapModel();
                         rowsGapModel.insert(rowId, newGapModel);
                     }
 
-                    alObj->updateGapModel(rowsGapModel, stateInfo);
+                    alObj->updateGapModel(stateInfo, rowsGapModel);
                     SAFE_POINT_OP(stateInfo, res);
 
-                    if (rowsOrder != inputMsa.getRowsIds()) {
-                        alObj->updateRowsOrder(rowsOrder, stateInfo);
+                    if (rowsOrder != inputMsa->getRowsIds()) {
+                        alObj->updateRowsOrder(stateInfo, rowsOrder);
                         SAFE_POINT_OP(stateInfo, res);
                     }
                 }
@@ -290,7 +290,7 @@ Task::ReportResult ClustalOSupportTask::report(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Can not remove directory for temporary files."));
+            stateInfo.setError(tr("Can not remove folder for temporary files."));
             emit si_stateChanged();
         }
     }
@@ -322,7 +322,7 @@ ClustalOWithExtFileSpecifySupportTask::~ClustalOWithExtFileSpecifySupportTask(){
 void ClustalOWithExtFileSpecifySupportTask::prepare(){
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(settings.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -355,18 +355,18 @@ QList<Task*> ClustalOWithExtFileSpecifySupportTask::onSubTaskFinished(Task* subT
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
 
-        mAObject = qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject = qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
 
         // Launch the task, objRef is empty - the input document maybe not in project
-        clustalOSupportTask=new ClustalOSupportTask(mAObject->getMAlignment(), GObjectReference(), settings);
+        clustalOSupportTask = new ClustalOSupportTask(mAObject->getMultipleAlignment(), GObjectReference(), settings);
         res.append(clustalOSupportTask);
     }
     else if (subTask == clustalOSupportTask) {
         // Set the result alignment to the alignment object of the current document
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject->copyGapModel(clustalOSupportTask->resultMA.getRows());
+        mAObject->updateGapModel(clustalOSupportTask->resultMA->getMsaRows());
 
         // Save the current document
         saveDocumentTask = new SaveDocumentTask(currentDocument,
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.h b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.h
index 7f1a84e..bfc5765 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.h
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/GObjectReference.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Task.h>
 
@@ -98,7 +98,7 @@ class ClustalOSupportTask : public ExternalToolSupportTask {
     Q_OBJECT
     Q_DISABLE_COPY(ClustalOSupportTask)
 public:
-    ClustalOSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalOSupportTaskSettings& settings);
+    ClustalOSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalOSupportTaskSettings& settings);
     ~ClustalOSupportTask();
 
     void prepare();
@@ -106,9 +106,9 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  resultMA;
 private:
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
     GObjectReference            objRef;
     QPointer<Document>          tmpDoc;
     QString                     url;
@@ -131,7 +131,7 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*           mAObject;
+    MultipleSequenceAlignmentObject*           mAObject;
     Document*                   currentDocument;
     bool                        cleanDoc;
 
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.cpp b/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.cpp
index 017fab7..75fec3f 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.cpp
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -82,8 +82,8 @@ void ClustalOWorkerFactory::init() {
                     ClustalOWorker::tr("Path to the ClustalO tool."
                         "<p>The default path can be set in the UGENE application settings."));
 
-    Descriptor tdp(TMP_DIR_PATH, ClustalOWorker::tr("Temporary directory"),
-                    ClustalOWorker::tr("Directory to store temporary files."));
+    Descriptor tdp(TMP_DIR_PATH, ClustalOWorker::tr("Temporary folder"),
+                    ClustalOWorker::tr("Folder to store temporary files."));
 
     a << new Attribute(ni, BaseTypes::NUM_TYPE(), false, QVariant(1));
     a << new Attribute(ngti, BaseTypes::NUM_TYPE(), false, QVariant(0));
@@ -176,12 +176,12 @@ Task* ClustalOWorker::tick() {
         }
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if (msa.isEmpty()) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to ClustalO.").arg(msa.getName()));
+        if (msa->isEmpty()) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to ClustalO.").arg(msa->getName()));
             return NULL;
         }
         ClustalOSupportTask* supportTask = new ClustalOSupportTask(msa, GObjectReference(), cfg);
@@ -213,7 +213,7 @@ void ClustalOWorker::sl_taskFinished() {
     QVariantMap msgData;
     msgData[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(msaId);
     output->put(Message(BaseTypes::MULTIPLE_ALIGNMENT_TYPE(), msgData));
-    algoLog.info(tr("Aligned %1 with ClustalO").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with ClustalO").arg(t->resultMA->getName()));
 }
 
 void ClustalOWorker::cleanup() {
diff --git a/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.h b/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.h
index 6bcbad2..e5c1f1b 100644
--- a/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.h
+++ b/src/plugins/external_tool_support/src/clustalo/ClustalOWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
index f71b253..2600cdf 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
@@ -36,7 +36,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ClustalWSupport.h"
 #include "ClustalWSupportRunDialog.h"
@@ -70,7 +70,7 @@ ClustalWSupport::ClustalWSupport(const QString& name, const QString& path) : Ext
 }
 
 void ClustalWSupport::sl_runWithExtFileSpecify(){
-    //Check that Clustal and tempory directory path defined
+    //Check that Clustal and tempory folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
@@ -117,17 +117,16 @@ void ClustalWSupport::sl_runWithExtFileSpecify(){
 
 ////////////////////////////////////////
 //ExternalToolSupportMSAContext
-ClustalWSupportContext::ClustalWSupportContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+ClustalWSupportContext::ClustalWSupportContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 
 }
 
 void ClustalWSupportContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-            return;
-    }
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
+
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     AlignMsaAction *alignAction = new AlignMsaAction(this, ET_CLUSTAL, view, tr("Align with ClustalW..."), 2000);
@@ -136,22 +135,22 @@ void ClustalWSupportContext::initViewContext(GObjectView* view) {
     addViewAction(alignAction);
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
 
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align_with_ClustalW()));
 }
 
 void ClustalWSupportContext::buildMenu(GObjectView* view, QMenu* m) {
-        QList<GObjectViewAction *> actions = getViewActions(view);
-        QMenu* alignMenu = GUIUtils::findSubMenu(m, MSAE_MENU_ALIGN);
-        SAFE_POINT(alignMenu != NULL, "alignMenu", );
-        foreach(GObjectViewAction* a, actions) {
-                a->addToMenuWithOrder(alignMenu);
-        }
+    QList<GObjectViewAction *> actions = getViewActions(view);
+    QMenu* alignMenu = GUIUtils::findSubMenu(m, MSAE_MENU_ALIGN);
+    SAFE_POINT(alignMenu != NULL, "alignMenu", );
+    foreach(GObjectViewAction* a, actions) {
+        a->addToMenuWithOrder(alignMenu);
+    }
 }
 
 void ClustalWSupportContext::sl_align_with_ClustalW() {
-    //Check that Clustal and tempory directory path defined
+    //Check that Clustal and tempory folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(ET_CLUSTAL)->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(ET_CLUSTAL);
@@ -185,14 +184,14 @@ void ClustalWSupportContext::sl_align_with_ClustalW() {
     AlignMsaAction* action = qobject_cast<AlignMsaAction *>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMsaEditor();
-    MAlignmentObject* obj = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj == NULL) {
         return;
     }
     assert(!obj->isStateLocked());
 
     ClustalWSupportTaskSettings settings;
-    QObjectScopedPointer<ClustalWSupportRunDialog> clustalWRunDialog = new ClustalWSupportRunDialog(obj->getMAlignment(), settings, AppContext::getMainWindow()->getQMainWindow());
+    QObjectScopedPointer<ClustalWSupportRunDialog> clustalWRunDialog = new ClustalWSupportRunDialog(obj->getMultipleAlignment(), settings, AppContext::getMainWindow()->getQMainWindow());
     clustalWRunDialog->exec();
     CHECK(!clustalWRunDialog.isNull(), );
 
@@ -200,7 +199,7 @@ void ClustalWSupportContext::sl_align_with_ClustalW() {
         return;
     }
 
-    ClustalWSupportTask* clustalWSupportTask = new ClustalWSupportTask(obj->getMAlignment(), GObjectReference(obj), settings);
+    ClustalWSupportTask* clustalWSupportTask = new ClustalWSupportTask(obj->getMultipleAlignment(), GObjectReference(obj), settings);
     connect(obj, SIGNAL(destroyed()), clustalWSupportTask, SLOT(cancel()));
     AppContext::getTaskScheduler()->registerTopLevelTask(clustalWSupportTask);
 
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.h b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.h
index d4498da..eaf2f74 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.h
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
index fa586e4..0b26148 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,11 +38,11 @@
 namespace U2 {
 ////////////////////////////////////////
 //ClustalWSupportRunDialog
-ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MAlignment& _ma, ClustalWSupportTaskSettings& _settings, QWidget* _parent) :
-        QDialog(_parent), ma(_ma), settings(_settings)
+ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MultipleSequenceAlignment& _ma, ClustalWSupportTaskSettings& _settings, QWidget* _parent) :
+        QDialog(_parent), ma(_ma->getCopy()), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223229");
+    new HelpButton(this, buttonBox, "20875133");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -51,7 +51,7 @@ ClustalWSupportRunDialog::ClustalWSupportRunDialog(const MAlignment& _ma, Clusta
 
     connect(this->iterationTypeCheckBox,SIGNAL(toggled(bool)),this,SLOT(sl_iterationTypeEnabled(bool)));
 
-    if(ma.getAlphabet()->isAmino()){
+    if(ma->getAlphabet()->isAmino()){
         gapOpenSpinBox->setValue(10.0);
         gapExtSpinBox->setValue(0.2);
         proteinGapParamGroupBox->setEnabled(true);
@@ -119,7 +119,7 @@ ClustalWWithExtFileSpecifySupportRunDialog::ClustalWWithExtFileSpecifySupportRun
     saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223229");
+    new HelpButton(this, buttonBox, "20875133");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -139,7 +139,7 @@ ClustalWWithExtFileSpecifySupportRunDialog::ClustalWWithExtFileSpecifySupportRun
 void ClustalWWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
index 472e722..ddd3056 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,14 +35,14 @@ class SaveDocumentController;
 class ClustalWSupportRunDialog : public QDialog, public Ui_ClustalWSupportRunDialog {
     Q_OBJECT
 public:
-    ClustalWSupportRunDialog(const MAlignment& ma, ClustalWSupportTaskSettings& settings, QWidget* parent);
+    ClustalWSupportRunDialog(const MultipleSequenceAlignment& ma, ClustalWSupportTaskSettings& settings, QWidget* parent);
 
 private slots:
     void accept();
     void sl_iterationTypeEnabled(bool checked);
 
 private:
-    MAlignment                      ma;
+    MultipleSequenceAlignment                      ma;
     ClustalWSupportTaskSettings&    settings;
 };
 
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui
index c4d7ab2..9c93d7c 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportRunDialog.ui
@@ -6,10 +6,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>485</width>
-    <height>577</height>
+    <width>482</width>
+    <height>567</height>
    </rect>
   </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
   <property name="minimumSize">
    <size>
     <width>400</width>
@@ -30,12 +36,21 @@
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
       <widget class="QGroupBox" name="inputGroupBox">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
        <property name="title">
         <string>Input and output</string>
        </property>
        <layout class="QGridLayout" name="gridLayout_10">
         <item row="0" column="0">
          <layout class="QGridLayout" name="gridLayout_9">
+          <property name="sizeConstraint">
+           <enum>QLayout::SetDefaultConstraint</enum>
+          </property>
           <item row="0" column="0">
            <widget class="QLabel" name="inputFileLabel">
             <property name="text">
@@ -119,10 +134,13 @@
               </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
+              <property name="alignment">
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+              </property>
               <property name="maximum">
                <double>100.000000000000000</double>
               </property>
@@ -162,10 +180,16 @@
               </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
+              <property name="frame">
+               <bool>true</bool>
+              </property>
+              <property name="alignment">
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+              </property>
               <property name="maximum">
                <double>10.000000000000000</double>
               </property>
@@ -203,12 +227,21 @@
               <property name="enabled">
                <bool>false</bool>
               </property>
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
+              <property name="styleSheet">
+               <string notr="true"/>
+              </property>
               <item>
                <property name="text">
                 <string>IUB</string>
@@ -250,9 +283,15 @@
               <property name="enabled">
                <bool>false</bool>
               </property>
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
@@ -310,10 +349,13 @@
               </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
+              <property name="alignment">
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+              </property>
               <property name="minimum">
                <number>1</number>
               </property>
@@ -354,9 +396,15 @@
               <property name="enabled">
                <bool>false</bool>
               </property>
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
@@ -419,10 +467,13 @@
               </property>
               <property name="minimumSize">
                <size>
-                <width>105</width>
+                <width>120</width>
                 <height>0</height>
                </size>
               </property>
+              <property name="alignment">
+               <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+              </property>
               <property name="minimum">
                <number>1</number>
               </property>
@@ -465,6 +516,19 @@
     </layout>
    </item>
    <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.cpp
index a43f671..4ce4dfa 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -31,7 +31,7 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -61,9 +61,9 @@ void ClustalWSupportTaskSettings::reset() {
     outOrderInput=true;
 }
 
-ClustalWSupportTask::ClustalWSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalWSupportTaskSettings& _settings)
+ClustalWSupportTask::ClustalWSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalWSupportTaskSettings& _settings)
     : ExternalToolSupportTask("Run ClustalW alignment task", TaskFlags_NR_FOSCOE),
-      inputMsa(_inputMsa),
+      inputMsa(_inputMsa->getExplicitCopy()),
       objRef(_objRef),
       settings(_settings),
       lock(NULL)
@@ -73,8 +73,8 @@ ClustalWSupportTask::ClustalWSupportTask(const MAlignment& _inputMsa, const GObj
     loadTemporyDocumentTask=NULL;
     clustalWTask=NULL;
     tmpDoc=NULL;
-    resultMA.setAlphabet(inputMsa.getAlphabet());
-    resultMA.setName(inputMsa.getName());
+    resultMA->setAlphabet(inputMsa->getAlphabet());
+    resultMA->setName(inputMsa->getName());
 }
 
 ClustalWSupportTask::~ClustalWSupportTask() {
@@ -86,7 +86,7 @@ ClustalWSupportTask::~ClustalWSupportTask() {
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
                 CHECK(NULL != alObj, );
                 if(alObj->isStateLocked()) {
                     alObj->unlockState(lock);
@@ -99,10 +99,10 @@ ClustalWSupportTask::~ClustalWSupportTask() {
 }
 
 void ClustalWSupportTask::prepare(){
-    SAFE_POINT_EXT(NULL != inputMsa.getAlphabet(), setError("The alphabet is NULL"),);
-    if (inputMsa.getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
-            inputMsa.getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
-        setError(tr("Unsupported alphabet: %1").arg(inputMsa.getAlphabet()->getName()));
+    SAFE_POINT_EXT(NULL != inputMsa->getAlphabet(), setError("The alphabet is NULL"),);
+    if (inputMsa->getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
+            inputMsa->getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
+        setError(tr("Unsupported alphabet: %1").arg(inputMsa->getAlphabet()->getName()));
         return;
     }
     algoLog.info(tr("ClustalW alignment started"));
@@ -110,8 +110,8 @@ void ClustalWSupportTask::prepare(){
     if (objRef.isValid()) {
         GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
         if (NULL != obj) {
-            MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalW results!",);
+            MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalW results!",);
             lock = new StateLock("ClustalWAligment");
             alObj->lockState(lock);
         }
@@ -119,7 +119,7 @@ void ClustalWSupportTask::prepare(){
 
 
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
 
     QString tmpDirName = "ClustalW_"+QString::number(this->getTaskId())+"_"+
                          QDate::currentDate().toString("dd.MM.yyyy")+"_"+
@@ -136,12 +136,12 @@ void ClustalWSupportTask::prepare(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError("Subdirectory for temporary files exists. Can not remove this directory.");
+            stateInfo.setError("Subfolder for temporary files exists. Can not remove this folder.");
             return;
         }
     }
     if(!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError("Can not create directory for temporary files.");
+        stateInfo.setError("Can not create folder for temporary files.");
         return;
     }
 
@@ -194,7 +194,7 @@ QList<Task*> ClustalWSupportTask::onSubTaskFinished(Task* subTask) {
         if(settings.noPGaps) arguments<<"-NOPGAP";
         if(settings.noHGaps) arguments<<"-NOHGAP";
         arguments << "-OUTFILE="+outputUrl;
-        clustalWTask = new ExternalToolRunTask(ET_CLUSTAL, arguments, new ClustalWLogParser(inputMsa.getNumRows()));
+        clustalWTask = new ExternalToolRunTask(ET_CLUSTAL, arguments, new ClustalWLogParser(inputMsa->getNumRows()));
         setListenerForTask(clustalWTask);
         clustalWTask->setSubtaskProgressWeight(95);
         res.append(clustalWTask);
@@ -224,33 +224,33 @@ QList<Task*> ClustalWSupportTask::onSubTaskFinished(Task* subTask) {
         SAFE_POINT(tmpDoc!=NULL, QString("output document '%1' not loaded").arg(tmpDoc->getURLString()), res);
         SAFE_POINT(tmpDoc->getObjects().length()==1, QString("no objects in output document '%1'").arg(tmpDoc->getURLString()), res);
 
-        //move MAlignment from new alignment to old document
-        MAlignmentObject* newMAligmentObject=qobject_cast<MAlignmentObject*>(tmpDoc->getObjects().first());
-        SAFE_POINT(newMAligmentObject!=NULL, "newDocument->getObjects().first() is not a MAlignmentObject", res);
+        //move MultipleSequenceAlignment from new alignment to old document
+        MultipleSequenceAlignmentObject* newMAligmentObject=qobject_cast<MultipleSequenceAlignmentObject*>(tmpDoc->getObjects().first());
+        SAFE_POINT(newMAligmentObject!=NULL, "newDocument->getObjects().first() is not a MultipleSequenceAlignmentObject", res);
 
-        resultMA=newMAligmentObject->getMAlignment();
-        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa.getRowNames());
+        resultMA = newMAligmentObject->getMsaCopy();
+        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa->getRowNames());
         SAFE_POINT( renamed, "Failed to restore initial row names!", res);
 
         // If an alignment object has been specified, save the result to it
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalW results!", res);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalW results!", res);
 
                 QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(inputMsa, resultMA, stateInfo);
                 CHECK_OP(stateInfo, res);
 
-                if (rowsOrder.count() != inputMsa.getNumRows()) {
+                if (rowsOrder.count() != inputMsa->getNumRows()) {
                     stateInfo.setError("Unexpected number of rows in the result multiple alignment!");
                     return res;
                 }
 
                 QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-                for (int i = 0, n = resultMA.getNumRows(); i < n; ++i) {
-                    qint64 rowId = resultMA.getRow(i).getRowDBInfo().rowId;
-                    const QList<U2MsaGap>& newGapModel = resultMA.getRow(i).getGapModel();
+                for (int i = 0, n = resultMA->getNumRows(); i < n; ++i) {
+                    qint64 rowId = resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+                    const QList<U2MsaGap>& newGapModel = resultMA->getMsaRow(i)->getGapModel();
                     rowsGapModel.insert(rowId, newGapModel);
                 }
 
@@ -264,7 +264,7 @@ QList<Task*> ClustalWSupportTask::onSubTaskFinished(Task* subTask) {
                         lock = NULL;
                     }
                     else {
-                        stateInfo.setError("MAlignment object has been changed");
+                        stateInfo.setError("MultipleSequenceAlignment object has been changed");
                         return res;
                     }
 
@@ -275,11 +275,11 @@ QList<Task*> ClustalWSupportTask::onSubTaskFinished(Task* subTask) {
                         return res;
                     }
 
-                    alObj->updateGapModel(rowsGapModel, stateInfo);
+                    alObj->updateGapModel(stateInfo, rowsGapModel);
                     SAFE_POINT_OP(stateInfo, res);
 
-                    if (rowsOrder != inputMsa.getRowsIds()) {
-                        alObj->updateRowsOrder(rowsOrder, stateInfo);
+                    if (rowsOrder != inputMsa->getRowsIds()) {
+                        alObj->updateRowsOrder(stateInfo, rowsOrder);
                         SAFE_POINT_OP(stateInfo, res);
                     }
                 }
@@ -307,7 +307,7 @@ Task::ReportResult ClustalWSupportTask::report(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Can not remove directory for temporary files."));
+            stateInfo.setError(tr("Can not remove folder for temporary files."));
             emit si_stateChanged();
         }
     }
@@ -338,7 +338,7 @@ ClustalWWithExtFileSpecifySupportTask::~ClustalWWithExtFileSpecifySupportTask(){
 void ClustalWWithExtFileSpecifySupportTask::prepare(){
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(settings.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -370,18 +370,18 @@ QList<Task*> ClustalWWithExtFileSpecifySupportTask::onSubTaskFinished(Task* subT
         currentDocument=loadDocumentTask->takeDocument();
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject = qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject = qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
 
         // Launch the task, objRef is empty - the input document maybe not in project
-        clustalWSupportTask = new ClustalWSupportTask(mAObject->getMAlignment(), GObjectReference(), settings);
+        clustalWSupportTask = new ClustalWSupportTask(mAObject->getMultipleAlignment(), GObjectReference(), settings);
         res.append(clustalWSupportTask);
     }
     else if (subTask == clustalWSupportTask) {
         // Set the result alignment to the alignment object of the current document
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject->copyGapModel(clustalWSupportTask->resultMA.getRows());
+        mAObject->updateGapModel(clustalWSupportTask->resultMA->getMsaRows());
 
         // Save the current document
         saveDocumentTask = new SaveDocumentTask(currentDocument,
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.h b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.h
index 1ad7620..c4329a4 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.h
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/GObjectReference.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Task.h>
 
@@ -83,7 +83,7 @@ class ClustalWSupportTask : public ExternalToolSupportTask {
     Q_OBJECT
     Q_DISABLE_COPY(ClustalWSupportTask)
 public:
-    ClustalWSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalWSupportTaskSettings& _settings);
+    ClustalWSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const ClustalWSupportTaskSettings& _settings);
     ~ClustalWSupportTask();
 
     void prepare();
@@ -91,9 +91,9 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  resultMA;
 private:
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
     GObjectReference            objRef;
     QPointer<Document>          tmpDoc;
     QString                     url;
@@ -105,7 +105,7 @@ private:
     QPointer<StateLock>         lock;
 };
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class ClustalWWithExtFileSpecifySupportTask : public Task {
     Q_OBJECT
@@ -118,7 +118,7 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*           mAObject;
+    MultipleSequenceAlignmentObject*           mAObject;
     Document*                   currentDocument;
     bool                        cleanDoc;
 
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.cpp b/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.cpp
index 56615ad..0c701e6 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.cpp
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,26 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "ClustalWWorker.h"
-#include "TaskLocalStorage.h"
-#include "ClustalWSupport.h"
-
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/NoFailTaskWrapper.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/Log.h>
 #include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/NoFailTaskWrapper.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "ClustalWSupport.h"
+#include "ClustalWWorker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -111,8 +114,8 @@ void ClustalWWorkerFactory::init() {
                     ClustalWWorker::tr("Path to the ClustalW tool."
                         "<p>The default path can be set in the UGENE application settings."));
 
-    Descriptor tdp(TMP_DIR_PATH, ClustalWWorker::tr("Temporary directory"),
-                    ClustalWWorker::tr("Directory to store temporary files."));
+    Descriptor tdp(TMP_DIR_PATH, ClustalWWorker::tr("Temporary folder"),
+                    ClustalWWorker::tr("Folder to store temporary files."));
 
     a << new Attribute(gop, BaseTypes::NUM_TYPE(), false, QVariant(53.90));
     a << new Attribute(gep, BaseTypes::NUM_TYPE(), false, QVariant(8.52));
@@ -252,12 +255,12 @@ Task* ClustalWWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if (msa.isEmpty()) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to ClustalW.").arg(msa.getName()));
+        if (msa->isEmpty()) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to ClustalW.").arg(msa->getName()));
             return NULL;
         }
         ClustalWSupportTask* supportTask = new ClustalWSupportTask(msa, GObjectReference(), cfg);
@@ -286,13 +289,13 @@ void ClustalWWorker::sl_taskFinished() {
 
     SAFE_POINT(NULL != output, "NULL output!", );
     send(t->resultMA);
-    algoLog.info(tr("Aligned %1 with ClustalW").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with ClustalW").arg(t->resultMA->getName()));
 }
 
 void ClustalWWorker::cleanup() {
 }
 
-void ClustalWWorker::send(const MAlignment &msa) {
+void ClustalWWorker::send(const MultipleSequenceAlignment &msa) {
     SAFE_POINT(NULL != output, "NULL output!", );
     SharedDbiDataHandler msaId = context->getDataStorage()->putAlignment(msa);
     QVariantMap m;
diff --git a/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.h b/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.h
index bde2c6d..93bb011 100644
--- a/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.h
+++ b/src/plugins/external_tool_support/src/clustalw/ClustalWWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@ private:
     ClustalWSupportTaskSettings cfg;
 
 private:
-    void send(const MAlignment &msa);
+    void send(const MultipleSequenceAlignment &msa);
 };
 
 class ClustalWWorkerFactory : public DomainFactory {
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
index 9c2e2db..69efa5f 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
index 41f787c..2d8a2ab 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.cpp
index cda59a7..77d2481 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.h
index b285d11..29a1075 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
index 6e97418..d3bcdf0 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
index ca90cdd..0399cb5 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
index cbe0799..aa41ef4 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -152,8 +152,8 @@ void ConductGOWorkerFactory::init() {
     QList<Attribute*> attrs;
     {
          Descriptor outDir(OUTPUT_DIR,
-             ConductGOWorker::tr("Output directory"),
-             ConductGOWorker::tr("The directory to store Conduct GO results."));
+             ConductGOWorker::tr("Output folder"),
+             ConductGOWorker::tr("The folder to store Conduct GO results."));
          Descriptor titleDescr(TITLE,
              ConductGOWorker::tr("Title"),
              ConductGOWorker::tr("Title is used to name the output files - so make it meaningful."));
@@ -221,7 +221,7 @@ QString ConductGOPrompter::composeRichDoc() {
 
     res.append(tr("Uses annotations from <u>%1</u> as gene list to conduct GO.").arg(annUrl));
 
-    res.append(tr(" Outputs all result files to <u>%1</u> directory").arg(dir));
+    res.append(tr(" Outputs all result files to <u>%1</u> folder").arg(dir));
     res.append(".");
 
     return res;
diff --git a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
index af6c239..eb094a8 100644
--- a/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
+++ b/src/plugins/external_tool_support/src/conduct_go/ConductGOWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
index 8f60a45..7e56808 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.h b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.h
index bd4ccec..a2311e2 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.h
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.cpp
index b75c3a0..e608939 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.h b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.h
index 0008925..2c5e3c5 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.h
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
index 2d84eb1..afca119 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -79,7 +79,7 @@ void ConservationPlotTask::cleanup() {
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this directory."));
+            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this folder."));
             //return;
         }
     }
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.h b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.h
index 6331ffa..e89898f 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.h
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
index 053f5f2..1aff3da 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -206,7 +206,7 @@ void ConservationPlotWorkerFactory::init() {
              ConservationPlotWorker::tr("Label of data in the figure (--bed-label)."));
          Descriptor assemblyVersion(ASSEMBLY_VER,
              ConservationPlotWorker::tr("Assembly version"),
-             ConservationPlotWorker::tr("The directory to store phastcons scores (--phasdb)."));
+             ConservationPlotWorker::tr("The folder to store phastcons scores (--phasdb)."));
          Descriptor windowSizeDescr(WINDOW_S,
              ConservationPlotWorker::tr("Window width"),
              ConservationPlotWorker::tr("Window width centered at middle of regions (-w)."));
diff --git a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.h b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.h
index c74cd0c..f1344ca 100644
--- a/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.h
+++ b/src/plugins/external_tool_support/src/conservation_plot/ConservationPlotWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
index edc69a1..7c6418f 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.h b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.h
index 172f46a..95bf4cc 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffdiffSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.cpp b/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.cpp
index 75aa3e8..b25495c 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -91,7 +91,7 @@ void CuffdiffWorkerFactory::init()
     // Description of the element
     Descriptor cuffdiffDescriptor(ACTOR_ID,
         CuffdiffWorker::tr("Test for Diff. Expression with Cuffdiff"),
-        "Cuffdiff takes a transcript file as input, along with two or"
+        CuffdiffWorker::tr("Cuffdiff takes a transcript file as input, along with two or"
         " more fragment alignments (e.g. in SAM format) for two or more samples."
         " It produces a number of output files that contain"
         " test results for changes in expression at the level of transcripts,"
@@ -100,12 +100,12 @@ void CuffdiffWorkerFactory::init()
         " start site, and in the relative abundances of the primary transcripts"
         " of each gene. Tracking the former allows one to see changes in splicing,"
         " and the latter lets one see changes in relative promoter use within"
-        " a gene.");
+        " a gene."));
 
     { // Define parameters of the element
         Descriptor outDir(OUT_DIR,
-            CuffdiffWorker::tr("Output directory"),
-            CuffdiffWorker::tr("The base name of output directory. It could be modified with a suffix."));
+            CuffdiffWorker::tr("Output folder"),
+            CuffdiffWorker::tr("The base name of output folder. It could be modified with a suffix."));
 
         Descriptor timeSeriesAnalysis(TIME_SERIES_ANALYSIS,
             CuffdiffWorker::tr("Time series analysis"),
@@ -150,7 +150,7 @@ void CuffdiffWorkerFactory::init()
             CuffdiffWorker::tr("Mask file"),
             CuffdiffWorker::tr("Ignore all reads that could have come from transcripts"
             " in this file. It is recommended to include any annotated rRNA, mitochondrial"
-            " transcripts other abundant transcripts you wish to ignore in your analysis"
+            " transcripts or other abundant transcripts you wish to ignore in your analysis"
             " in this file. Due to variable efficiency of mRNA enrichment methods and"
             " rRNA depletion kits, masking these transcripts often improves the overall"
             " robustness of transcript abundance estimates."));
@@ -182,8 +182,8 @@ void CuffdiffWorkerFactory::init()
             CuffdiffWorker::tr("The path to the Cuffdiff external tool in UGENE."));
 
         Descriptor tmpDir(TMP_DIR_PATH,
-            CuffdiffWorker::tr("Temporary directory"),
-            CuffdiffWorker::tr("The directory for temporary files."));
+            CuffdiffWorker::tr("Temporary folder"),
+            CuffdiffWorker::tr("The folder for temporary files."));
 
         attributes << new Attribute(outDir, BaseTypes::STRING_TYPE(), true, "");
         attributes << new Attribute(timeSeriesAnalysis, BaseTypes::BOOL_TYPE(), false, QVariant(false));
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.h b/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.h
index 5680ce4..af83b79 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffdiffWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.cpp b/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.cpp
index e7f9951..a47786a 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.h b/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.h
index 0227a8c..c7574bc 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.cpp b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.cpp
index 618bce0..6cc2eaa 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.h b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.h
index b80bb1f..ee6adf6 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
index 008e0f1..afc52b1 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.h b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.h
index 0eb7fd9..d91bcaf 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.cpp b/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.cpp
index 53423c0..227e418 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -140,8 +140,8 @@ void CufflinksWorkerFactory::init()
 
     // Define parameters of the element
     Descriptor outDir(OUT_DIR,
-        CufflinksWorker::tr("Output directory"),
-        CufflinksWorker::tr("The base name of output directory. It could be modified with a suffix."));
+        CufflinksWorker::tr("Output folder"),
+        CufflinksWorker::tr("The base name of output folder. It could be modified with a suffix."));
 
     Descriptor refAnnotation(REF_ANNOTATION,
         CufflinksWorker::tr("Reference annotation"),
@@ -166,7 +166,7 @@ void CufflinksWorkerFactory::init()
         CufflinksWorker::tr("Mask file"),
         CufflinksWorker::tr("Ignore all reads that could have come from transcripts"
         " in this file. It is recommended to include any annotated rRNA, mitochondrial"
-        " transcripts other abundant transcripts you wish to ignore in your analysis"
+        " transcripts or other abundant transcripts you wish to ignore in your analysis"
         " in this file. Due to variable efficiency of mRNA enrichment methods and rRNA"
         " depletion kits, masking these transcripts often improves the overall robustness"
         " of transcript abundance estimates."));
@@ -207,8 +207,8 @@ void CufflinksWorkerFactory::init()
         CufflinksWorker::tr("The path to the Cufflinks external tool in UGENE."));
 
     Descriptor tmpDir(TMP_DIR_PATH,
-        CufflinksWorker::tr("Temporary directory"),
-        CufflinksWorker::tr("The directory for temporary files."));
+        CufflinksWorker::tr("Temporary folder"),
+        CufflinksWorker::tr("The folder for temporary files."));
 
     attributes << new Attribute(outDir, BaseTypes::STRING_TYPE(), true, "");
     attributes << new Attribute(refAnnotation, BaseTypes::STRING_TYPE(), false, QVariant(""));
diff --git a/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.h b/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.h
index 6797a74..653ac4d 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CufflinksWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.cpp
index c5fe4f2..93a7ebc 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.h b/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.h
index d783111..705b50c 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffmergeSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.cpp b/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.cpp
index 60ed6b1..1277425 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -71,8 +71,8 @@ void CuffmergeWorkerFactory::init()
     QList<Attribute*> attributes;
     { // Define parameters of the element
         Descriptor outDir(OUT_DIR,
-            CuffmergeWorker::tr("Output directory"),
-            CuffmergeWorker::tr("The base name of output directory. It could be modified with a suffix."));
+            CuffmergeWorker::tr("Output folder"),
+            CuffmergeWorker::tr("The base name of output folder. It could be modified with a suffix."));
 
         Descriptor refAnnotation(REF_ANNOTATION,
             CuffmergeWorker::tr("Reference annotation"),
@@ -99,8 +99,8 @@ void CuffmergeWorkerFactory::init()
             CuffmergeWorker::tr("The path to the Cuffmerge external tool in UGENE."));
 
         Descriptor tmpDir(TMP_DIR_PATH,
-            CuffmergeWorker::tr("Temporary directory"),
-            CuffmergeWorker::tr("The directory for temporary files."));
+            CuffmergeWorker::tr("Temporary folder"),
+            CuffmergeWorker::tr("The folder for temporary files."));
 
         attributes << new Attribute(outDir, BaseTypes::STRING_TYPE(), true, "");
         attributes << new Attribute(refAnnotation, BaseTypes::STRING_TYPE(), false, QVariant(""));
diff --git a/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.h b/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.h
index 4337ae2..a9d4a72 100644
--- a/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.h
+++ b/src/plugins/external_tool_support/src/cufflinks/CuffmergeWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.cpp b/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.cpp
index 30be90b..8bf9a65 100644
--- a/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.h b/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.h
index 4e07a2d..6b7c50e 100644
--- a/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.h
+++ b/src/plugins/external_tool_support/src/cufflinks/GffreadSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.cpp b/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.cpp
index 23534d9..6f91e4f 100644
--- a/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.cpp
+++ b/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include "CufflinksSupport.h"
-
 #include <U2Core/FailTask.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "CufflinksSupport.h"
 #include "GffreadWorker.h"
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.h b/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.h
index 220a7dd..3e95d52 100644
--- a/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.h
+++ b/src/plugins/external_tool_support/src/cufflinks/GffreadWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.cpp b/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.cpp
index c8e581a..4407d5f 100644
--- a/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.cpp
+++ b/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.h b/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.h
index bd2e384..28554b7 100644
--- a/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.h
+++ b/src/plugins/external_tool_support/src/cutadapt/CutadaptSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.cpp b/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.cpp
index 79ab97e..d4247cf 100644
--- a/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.cpp
+++ b/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,28 +20,32 @@
  */
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Counter.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DataPathRegistry.h>
 #include <U2Core/DocumentImport.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
-#include <U2Core/DataPathRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -49,7 +53,6 @@
 #include "CutadaptSupport.h"
 #include "CutadaptWorker.h"
 
-
 namespace U2 {
 namespace LocalWorkflow {
 
@@ -110,13 +113,13 @@ void CutAdaptFastqWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, CutAdaptFastqWorker::tr("Output directory"),
-            CutAdaptFastqWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, CutAdaptFastqWorker::tr("Output folder"),
+            CutAdaptFastqWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, CutAdaptFastqWorker::tr("Custom directory"),
-            CutAdaptFastqWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, CutAdaptFastqWorker::tr("Custom folder"),
+            CutAdaptFastqWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BaseNGSWorker::OUT_NAME_ID, CutAdaptFastqWorker::tr("Output file name"),
             CutAdaptFastqWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
diff --git a/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.h b/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.h
index f16c75f..12d51ca 100644
--- a/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.h
+++ b/src/plugins/external_tool_support/src/cutadapt/CutadaptWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcSupport.cpp b/src/plugins/external_tool_support/src/fastqc/FastqcSupport.cpp
index 5525e23..5d36cb5 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcSupport.cpp
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcSupport.h b/src/plugins/external_tool_support/src/fastqc/FastqcSupport.h
index 469556b..f063d14 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcSupport.h
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcTask.cpp b/src/plugins/external_tool_support/src/fastqc/FastqcTask.cpp
index 2b60a8c..ad61e63 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcTask.cpp
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include "FastqcSupport.h"
 #include "FastqcTask.h"
@@ -98,7 +98,7 @@ void FastQCTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError(tr("Directory does not exist: %1").arg(outDir.absolutePath()));
+        setError(tr("Folder does not exist: %1").arg(outDir.absolutePath()));
         return ;
     }
 
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcTask.h b/src/plugins/external_tool_support/src/fastqc/FastqcTask.h
index 9b6fb31..91e78b0 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcTask.h
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcWorker.cpp b/src/plugins/external_tool_support/src/fastqc/FastqcWorker.cpp
index ca8af34..73bde41 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcWorker.cpp
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,37 +21,39 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DataPathRegistry.h>
 #include <U2Core/DocumentImport.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
-#include <U2Core/DataPathRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
-#include "java/JavaSupport.h"
-#include "perl/PerlSupport.h"
-
 #include "FastqcSupport.h"
 #include "FastqcTask.h"
-
 #include "FastqcWorker.h"
+#include "java/JavaSupport.h"
+#include "perl/PerlSupport.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -100,13 +102,13 @@ void FastQCFactory::init() {
     QList<Attribute*> a;
     {
 
-        Descriptor outDir(FastQCWorker::OUT_MODE_ID, FastQCWorker::tr("Output directory"),
-            FastQCWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(FastQCWorker::OUT_MODE_ID, FastQCWorker::tr("Output folder"),
+            FastQCWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(FastQCWorker::CUSTOM_DIR_ID, FastQCWorker::tr("Custom directory"),
-            FastQCWorker::tr("Select the custom output directory."));
+        Descriptor customDir(FastQCWorker::CUSTOM_DIR_ID, FastQCWorker::tr("Custom folder"),
+            FastQCWorker::tr("Select the custom output folder."));
 
         Descriptor adapters(FastQCWorker::ADAPTERS, FastQCWorker::tr("List of adapters"),
             FastQCWorker::tr("Specifies a non-default file which contains the list of adapter sequences which will be explicity searched against "
diff --git a/src/plugins/external_tool_support/src/fastqc/FastqcWorker.h b/src/plugins/external_tool_support/src/fastqc/FastqcWorker.h
index f626c01..8c557dd 100644
--- a/src/plugins/external_tool_support/src/fastqc/FastqcWorker.h
+++ b/src/plugins/external_tool_support/src/fastqc/FastqcWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.cpp b/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.cpp
index 86c1cd4..866c210 100644
--- a/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/AppSettings.h>
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
@@ -99,22 +99,22 @@ void ConvertAlignment2Stockholm::prepareResultUrl() {
         CHECK_OP(stateInfo, );
     }
     if (!tempDir.mkpath(workingDir)){
-        setError(tr("Cannot create a directory for temporary files."));
+        setError(tr("Cannot create a folder for temporary files."));
         return;
     }
 }
 
 void ConvertAlignment2Stockholm::prepareSaveTask() {
     Document *document = loadTask->takeDocument();
-    QList<GObject *> objects = document->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject *> objects = document->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     CHECK_EXT(!objects.isEmpty(), setError(tr("File doesn't contain any multiple alignments.")), );
 
     if (1 < objects.size()) {
         stateInfo.addWarning(tr("File contains several multiple alignments. Only the first one is saved to the result file."));
     }
 
-    MAlignmentObject *maObject = qobject_cast<MAlignmentObject *>(objects.first());
-    saveTask = new SaveAlignmentTask(maObject->getMAlignment(), resultUrl, BaseDocumentFormats::STOCKHOLM);
+    MultipleSequenceAlignmentObject *maObject = qobject_cast<MultipleSequenceAlignmentObject *>(objects.first());
+    saveTask = new SaveAlignmentTask(maObject->getMultipleAlignment(), resultUrl, BaseDocumentFormats::STOCKHOLM);
     saveTask->setSubtaskProgressWeight(50);
 }
 
diff --git a/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.h b/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.h
index 488cee8..01a9f6d 100644
--- a/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/ConvertAlignment2StockholmTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,6 +30,7 @@ class LoadDocumentTask;
 class SaveAlignmentTask;
 
 class ConvertAlignment2Stockholm : public Task {
+    Q_OBJECT
 public:
     ConvertAlignment2Stockholm(const QString &msaUrl, const QString &workingDir);
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.cpp
index 32e30b5..f0b7b7b 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #include <QPushButton>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/HelpButton.h>
@@ -36,6 +37,12 @@
 
 namespace U2 {
 
+UHMM3BuildDialogModel::UHMM3BuildDialogModel()
+    : alignmentUsing(false)
+{
+
+}
+
 const QString HmmerBuildDialog::MA_FILES_DIR_ID     = "uhmmer3_build_ma_files_dir";
 const QString HmmerBuildDialog::HMM_FILES_DIR_ID    = "uhmmer3_build_hmm_files_dir";
 
@@ -59,7 +66,7 @@ void HmmerBuildDialog::setSignalsAndSlots() {
 
 void HmmerBuildDialog::initialize() {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223199");
+    new HelpButton(this, buttonBox, "20875103");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -83,13 +90,13 @@ void HmmerBuildDialog::initSaveController() {
     saveController = new SaveDocumentController(config, formatsInfo, this);
 }
 
-HmmerBuildDialog::HmmerBuildDialog(const MAlignment &ma, QWidget * parent)
+HmmerBuildDialog::HmmerBuildDialog(const MultipleSequenceAlignment &ma, QWidget * parent)
     : QDialog(parent),
       saveController(NULL)
 {
     initialize();
-    model.alignment = ma;
-    model.alignmentUsing = !model.alignment.isEmpty();
+    model.alignment = ma->getCopy();
+    model.alignmentUsing = !model.alignment->isEmpty();
     
     if (model.alignmentUsing) {
         maLoadFromFileEdit->hide();
@@ -118,7 +125,7 @@ void HmmerBuildDialog::setModelValues() {
 void HmmerBuildDialog::sl_maOpenFileButtonClicked() {
     LastUsedDirHelper helper(MA_FILES_DIR_ID);
     helper.url = U2FileDialog::getOpenFileName(this, tr("Select multiple alignment file"),
-        helper, DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        helper, DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT , true));
     if (!helper.url.isEmpty()) {
         maLoadFromFileEdit->setText(helper.url);
     }
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.h
index 5656eb6..eccde21 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <QDialog>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "HmmerBuildTask.h"
 #include "ui_HmmerBuildDialog.h"
@@ -35,18 +35,20 @@ class SaveDocumentController;
 
 class UHMM3BuildDialogModel {
 public:
+    UHMM3BuildDialogModel();
+
     HmmerBuildSettings buildSettings;
     
     /* one of this is used */
     QString                 inputFile;
-    MAlignment              alignment;
+    MultipleSequenceAlignment alignment;
     bool                    alignmentUsing;
 };
 
 class HmmerBuildDialog : public QDialog, public Ui_HmmerBuildDialog {
     Q_OBJECT
 public:
-    HmmerBuildDialog(const MAlignment &ma, QWidget *parent = NULL);
+    HmmerBuildDialog(const MultipleSequenceAlignment &ma, QWidget *parent = NULL);
     
     static const QString MA_FILES_DIR_ID;
     static const QString HMM_FILES_DIR_ID;
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.cpp
index f196686..d29514a 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.h
index bdcbdab..cb6c38c 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromFileTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@ namespace U2 {
 class ConvertAlignment2Stockholm;
 
 class HmmerBuildFromFileTask : public ExternalToolSupportTask {
+    Q_OBJECT
 public:
     HmmerBuildFromFileTask(const HmmerBuildSettings &settigngs, const QString &msaUrl);
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.cpp
index fb4ae90..7d14dc3 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,6 +27,7 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
 #include "HmmerBuildFromMsaTask.h"
@@ -34,7 +35,7 @@
 
 namespace U2 {
 
-HmmerBuildFromMsaTask::HmmerBuildFromMsaTask(const HmmerBuildSettings &settings, const MAlignment &msa)
+HmmerBuildFromMsaTask::HmmerBuildFromMsaTask(const HmmerBuildSettings &settings, const MultipleSequenceAlignment &msa)
     : ExternalToolSupportTask(tr("Build HMMER profile from msa"), TaskFlags_NR_FOSE_COSC | TaskFlag_ReportingIsEnabled | TaskFlag_ReportingIsSupported),
       settings(settings),
       msa(msa),
@@ -66,7 +67,7 @@ void HmmerBuildFromMsaTask::prepare() {
     prepareWorkingDir();
     CHECK_OP(stateInfo, );
 
-    QString msaUrl = settings.workingDir + "/" + GUrlUtils::fixFileName(msa.getName()) + ".sto";
+    QString msaUrl = settings.workingDir + "/" + GUrlUtils::fixFileName(msa->getName()) + ".sto";
     saveTask = new SaveAlignmentTask(msa, msaUrl, BaseDocumentFormats::STOCKHOLM);
     saveTask->setSubtaskProgressWeight(5);
     addSubTask(saveTask);
@@ -101,7 +102,7 @@ void HmmerBuildFromMsaTask::prepareWorkingDir() {
         CHECK_OP(stateInfo, );
     }
     if (!workingDir.mkpath(settings.workingDir)){
-        setError(tr("Cannot create a directory for temporary files."));
+        setError(tr("Cannot create a folder for temporary files."));
         return;
     }
 }
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.h
index 57f542f..5307b74 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildFromMsaTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_HMMER_BUILD_FROM_MSA_TASK_H_
 #define _U2_HMMER_BUILD_FROM_MSA_TASK_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "HmmerBuildTask.h"
 
@@ -31,7 +31,7 @@ namespace U2 {
 class HmmerBuildFromMsaTask : public ExternalToolSupportTask {
     Q_OBJECT
 public:
-    HmmerBuildFromMsaTask(const HmmerBuildSettings &settings, const MAlignment &msa);
+    HmmerBuildFromMsaTask(const HmmerBuildSettings &settings, const MultipleSequenceAlignment &msa);
 
     const QString & getHmmUrl() const;
 
@@ -44,7 +44,7 @@ private:
     void removeTempDir();
 
     HmmerBuildSettings settings;
-    const MAlignment msa;
+    const MultipleSequenceAlignment msa;
 
     SaveAlignmentTask *saveTask;
     HmmerBuildTask *hmmerTask;
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.cpp
index e0f5912..53a0d21 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.h
index c71f939..4c66e95 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.cpp
index f9534dc..e4aad0b 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.h
index 22f2c1a..8343b0d 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,6 +31,7 @@ namespace U2 {
 class SaveAlignmentTask;
 
 class HmmerBuildTask : public ExternalToolRunTask {
+    Q_OBJECT
 public:
     HmmerBuildTask(const HmmerBuildSettings &settings, const QString &stockholmMsaUrl);
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.cpp
new file mode 100644
index 0000000..2f388db
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.cpp
@@ -0,0 +1,464 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <QDomElement>
+#include <QFile>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/TextUtils.h>
+
+#include "HmmerBuildTaskTest.h"
+
+namespace U2 {
+
+/**************************
+* GTest_UHMMER3Build
+**************************/
+
+const QString GTest_UHMMER3Build::INPUT_FILE_TAG = "inputFile";
+const QString GTest_UHMMER3Build::OUTPUT_FILE_TAG = "outputFile";
+const QString GTest_UHMMER3Build::OUTPUT_DIR_TAG = "outputDir";
+const QString GTest_UHMMER3Build::DEL_OUTPUT_TAG = "delOutput";
+
+const QString GTest_UHMMER3Build::SEED_OPTION_TAG = "seed";
+
+const QString GTest_UHMMER3Build::MODEL_CONSTRUCTION_OPTION_TAG = "mc";
+const QString GTest_UHMMER3Build::RELATIVE_WEIGHTING_OPTION_TAG = "rw";
+const QString GTest_UHMMER3Build::EFFECTIVE_WEIGHTING_OPTION_TAG = "ew";
+const QString GTest_UHMMER3Build::E_VALUE_CALIBRATION_OPTION_TAG = "eval";
+
+float infinity() {
+    return std::numeric_limits< float >::infinity();
+}
+
+bool isfin(float x) {
+    return !qIsNaN(x) && qIsInf(x);
+}
+
+#ifdef _WINDOWS
+
+int isnan(float x) {
+    return x != x;
+}
+
+int isinf(float x) {
+    float inf = infinity();
+    return inf == x || inf == -x;
+}
+
+#if (!defined(_MSC_VER) || _MSC_VER < 1800)
+float roundf(float x) {
+    if (isnan(x) || isinf(x)) {
+        -return x;
+    }
+    return (float)(x >= 0.0 ? (int)(x + 0.5) : (int)(x - (int)(x - 1) + 0.5) + (int)(x - 1));
+}
+#endif
+
+#endif // _WINDOWS
+
+static void setSeedOption(HmmerBuildSettings & settings, TaskStateInfo & stateInfo, const QString& str) {
+    if (str.isEmpty()) {
+        return;
+    }
+
+    bool ok = false;
+    int num = str.toInt(&ok);
+    if (!ok || !(0 <= num)) {
+        stateInfo.setError("cannot_parse_option_seed");
+        return;
+    }
+    settings.seed = num;
+}
+
+static void setModelConstructionOption(HmmerBuildSettings & settings, TaskStateInfo & stateInfo, const QString& s) {
+    QString str = s.toLower();
+    if (str.startsWith("fast")) {
+        settings.modelConstructionStrategy = HmmerBuildSettings::p7_ARCH_FAST;
+        QString numStr = str.mid(4).trimmed();
+
+        if (!numStr.isEmpty()) {
+            bool ok = false;
+            float num = numStr.toFloat(&ok);
+            if (!ok || !(0 <= num && 1 >= num)) {
+                stateInfo.setError("cannot_parse_mc_option: symfrac");
+                return;
+            }
+            settings.symfrac = num;
+        }
+        return;
+    }
+    if (str.startsWith("hand")) {
+        settings.modelConstructionStrategy = HmmerBuildSettings::p7_ARCH_HAND;
+        return;
+    }
+    if (!str.isEmpty()) {
+        stateInfo.setError("unrecognized_mc_option");
+    }
+}
+
+static void setRelativeWeightingOption(HmmerBuildSettings & settings, TaskStateInfo & stateInfo, const QString& s) {
+    QString str = s.toLower();
+    if (str.startsWith("wgsc")) {
+        settings.relativeSequenceWeightingStrategy = HmmerBuildSettings::p7_WGT_GSC;
+        return;
+    }
+    if (str.startsWith("wblosum")) {
+        settings.relativeSequenceWeightingStrategy = HmmerBuildSettings::p7_WGT_BLOSUM;
+        QString numStr = str.mid(7).trimmed();
+        if (!numStr.isEmpty()) {
+            bool ok = false;
+            float num = numStr.toFloat(&ok);
+            if (!ok || !(0 <= num && 1 >= num)) {
+                stateInfo.setError("cannot_parse_rw_option:wid");
+                return;
+            }
+            settings.wid = num;
+        }
+        return;
+    }
+    if (str.startsWith("wpb")) {
+        settings.relativeSequenceWeightingStrategy = HmmerBuildSettings::p7_WGT_PB;
+        return;
+    }
+    if (str.startsWith("wnone")) {
+        settings.relativeSequenceWeightingStrategy = HmmerBuildSettings::p7_WGT_NONE;
+        return;
+    }
+    if (str.startsWith("wgiven")) {
+        settings.relativeSequenceWeightingStrategy = HmmerBuildSettings::p7_WGT_GIVEN;
+        return;
+    }
+    if (!str.isEmpty()) {
+        stateInfo.setError("unrecognized_rw_option");
+    }
+}
+
+static void setEffectiveWeightingOption(HmmerBuildSettings & settings, TaskStateInfo & stateInfo, const QString& s) {
+    QString str = s.toLower();
+    if (str.startsWith("eent")) {
+        settings.effectiveSequenceWeightingStrategy = HmmerBuildSettings::p7_EFFN_ENTROPY;
+        QString numStr = str.mid(4).trimmed();
+
+        if (!numStr.isEmpty()) {
+            QStringList nums = numStr.split(" ", QString::SkipEmptyParts);
+
+            if (nums.isEmpty()) {
+                stateInfo.setError("cannot_parse_ew_option: eent");
+                return;
+            }
+            bool ok = false;
+            double num = nums[0].toDouble(&ok);
+            if (!ok) {
+                stateInfo.setError("cannot_parse_ew_option: ere");
+                return;
+            }
+            if (num > 0) {
+                settings.ere = num;
+                return;
+            }
+        }
+        return;
+    }
+    if (str.startsWith("eclust")) {
+        settings.effectiveSequenceWeightingStrategy = HmmerBuildSettings::p7_EFFN_CLUST;
+        QString numStr = str.mid(6).trimmed();
+
+        if (!numStr.isEmpty()) {
+            bool ok = false;
+            double num = numStr.toDouble(&ok);
+            if (!ok || !(0 <= num && 1 >= num)) {
+                stateInfo.setError("cannot_parse_ew_option: eid");
+                return;
+            }
+            settings.eid = num;
+        }
+        return;
+    }
+    if (str.startsWith("enone")) {
+        settings.effectiveSequenceWeightingStrategy = HmmerBuildSettings::p7_EFFN_NONE;
+        return;
+    }
+    if (str.startsWith("eset")) {
+        settings.effectiveSequenceWeightingStrategy = HmmerBuildSettings::p7_EFFN_SET;
+        QString numStr = str.mid(4).trimmed();
+        bool ok = false;
+        double num = numStr.toDouble(&ok);
+
+        if (!ok || 0 > num) {
+            stateInfo.setError("cannot_parse_ew_option: eset");
+            return;
+        }
+        settings.eset = num;
+        return;
+    }
+    if (!str.isEmpty()) {
+        stateInfo.setError("unrecognized_ew_option");
+    }
+}
+
+static void setEvalueCalibrationOption(HmmerBuildSettings & settings, TaskStateInfo & stateInfo, const QString& s) {
+    QString str = s.toLower();
+    if (str.isEmpty()) {
+        return;
+    }
+    QStringList l = str.split(" ", QString::SkipEmptyParts);
+    if (5 != l.size()) {
+        stateInfo.setError("error_parsing_eval_option");
+        return;
+    }
+    settings.evl = l[0].toInt();
+    settings.evn = l[1].toInt();
+    settings.efl = l[2].toInt();
+    settings.efn = l[3].toInt();
+    settings.eft = l[4].toDouble();
+}
+
+void GTest_UHMMER3Build::init(XMLTestFormat *tf, const QDomElement& el) {
+    Q_UNUSED(tf);
+
+    inFile = el.attribute(INPUT_FILE_TAG);
+    outFile = el.attribute(OUTPUT_FILE_TAG);
+    outputDir = el.attribute(OUTPUT_DIR_TAG);
+
+    QString delOutStr = el.attribute(DEL_OUTPUT_TAG);
+    delOutFile = !delOutStr.isEmpty() && delOutStr.toLower() != "no" && delOutStr.toLower() != "n";
+    setBuildSettings(bldSettings, el, stateInfo);
+}
+
+void GTest_UHMMER3Build::setBuildSettings(HmmerBuildSettings & settings, const QDomElement& el, TaskStateInfo & ti) {
+    setModelConstructionOption(settings, ti, el.attribute(MODEL_CONSTRUCTION_OPTION_TAG));
+    setRelativeWeightingOption(settings, ti, el.attribute(RELATIVE_WEIGHTING_OPTION_TAG));
+    setEffectiveWeightingOption(settings, ti, el.attribute(EFFECTIVE_WEIGHTING_OPTION_TAG));
+    setEvalueCalibrationOption(settings, ti, el.attribute(E_VALUE_CALIBRATION_OPTION_TAG));
+    setSeedOption(settings, ti, el.attribute(SEED_OPTION_TAG));
+}
+
+void GTest_UHMMER3Build::setAndCheckArgs() {
+    if (hasError()) {
+        return;
+    }
+
+    if (inFile.isEmpty()) {
+        stateInfo.setError(tr("No input file given"));
+        return;
+    }
+    inFile = env->getVar("COMMON_DATA_DIR") + "/" + inFile;
+
+    if (outFile.isEmpty()) {
+        stateInfo.setError(tr("No output file given"));
+        return;
+    }
+
+    outFile = env->getVar("TEMP_DATA_DIR") + "/" + outFile;
+
+    bldSettings.profileUrl = outFile;
+    bldSettings.workingDir = env->getVar("TEMP_DATA_DIR");
+}
+
+void GTest_UHMMER3Build::prepare() {
+    setAndCheckArgs();
+    if (hasError()) {
+        return;
+    }
+
+    buildTask = new HmmerBuildTask(bldSettings, inFile);
+    addSubTask(buildTask);
+}
+
+Task::ReportResult GTest_UHMMER3Build::report() {
+    if (buildTask->hasError()) {
+        if (delOutFile) {
+            QFile::remove(outFile);
+        }
+        stateInfo.setError(buildTask->getError());
+    }
+    return ReportResult_Finished;
+}
+
+void GTest_UHMMER3Build::cleanup() {
+    if (delOutFile) {
+        QFile::remove(outFile);
+    }
+}
+
+GTest_UHMMER3Build::~GTest_UHMMER3Build() {
+    cleanup();
+}
+
+/**************************
+* GTest_CompareHmmFiles
+**************************/
+
+const QString GTest_CompareHmmFiles::FILE1_NAME_TAG = "file1";
+const QString GTest_CompareHmmFiles::FILE2_NAME_TAG = "file2";
+const QString GTest_CompareHmmFiles::FILE1_TMP_TAG = "tmp1";
+const QString GTest_CompareHmmFiles::FILE2_TMP_TAG = "tmp2";
+
+const int   BUF_SZ = 2048;
+const char  TERM_SYM = '\0';
+
+const QByteArray DATE_STR = "DATE";
+const QByteArray NAME_STR = "NAME";
+const QByteArray HEADER_STR = "HMMER3/";
+
+void GTest_CompareHmmFiles::init(XMLTestFormat *tf, const QDomElement &el) {
+    Q_UNUSED(tf);
+
+    filename1 = el.attribute(FILE1_NAME_TAG);
+    filename2 = el.attribute(FILE2_NAME_TAG);
+
+    QString file1TmpStr = el.attribute(FILE1_TMP_TAG);
+    file1Tmp = !file1TmpStr.isEmpty() && file1TmpStr.toLower() != "no" && file1TmpStr.toLower() != "n";
+
+    QString file2TmpStr = el.attribute(FILE2_TMP_TAG);
+    file2Tmp = !file2TmpStr.isEmpty() && file2TmpStr.toLower() != "no" && file2TmpStr.toLower() != "n";
+}
+
+void GTest_CompareHmmFiles::setAndCheckArgs() {
+    if (filename1.isEmpty()) {
+        stateInfo.setError(tr("File #1 not set"));
+        return;
+    }
+    filename1 = env->getVar(file1Tmp ? "TEMP_DATA_DIR" : "COMMON_DATA_DIR") + "/" + filename1;
+
+    if (filename2.isEmpty()) {
+        stateInfo.setError(tr("File #2 not set"));
+        return;
+    }
+    filename2 = env->getVar(file2Tmp ? "TEMP_DATA_DIR" : "COMMON_DATA_DIR") + "/" + filename2;
+}
+
+static const float BUILD_COMPARE_FLOAT_EPS = (float)0.00002;
+
+static bool compareStr(const QString& s1, const QString& s2) {
+    assert(s1.size() == s2.size());
+
+    QStringList words1 = s1.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+    QStringList words2 = s2.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+
+    if (words1.size() != words2.size()) {
+        return false;
+    }
+
+    int sz = words1.size();
+    for (int i = 0; i < sz; ++i) {
+        bool ok1 = false;
+        bool ok2 = false;
+        float num1 = 0;
+        float num2 = 0;
+
+        num1 = words1.at(i).toFloat(&ok1);
+        num2 = words2.at(i).toFloat(&ok2);
+
+        if (ok1 != ok2) {
+            return false;
+        } else {
+            if (ok1) {
+                if ((isfin(num1) && !isfin(num2)) || (isfin(num2) && !isfin(num1))) {
+                    return false;
+                }
+                if (qAbs(num1 - num2) > BUILD_COMPARE_FLOAT_EPS) {
+                    return false;
+                }
+                continue;
+            } else {
+                if (words1.at(i) != words2.at(i)) {
+                    return false;
+                }
+                continue;
+            }
+        }
+    }
+    return true;
+}
+
+Task::ReportResult GTest_CompareHmmFiles::report() {
+    assert(!hasError());
+    setAndCheckArgs();
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+
+    IOAdapterFactory* iof1 = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(filename1));
+    QScopedPointer<IOAdapter> io1(iof1->createIOAdapter());
+    if (io1.isNull()) {
+        stateInfo.setError(tr("Error creating ioadapter for first file"));
+        return ReportResult_Finished;
+    }
+    if (!io1->open(filename1, IOAdapterMode_Read)) {
+        stateInfo.setError(tr("Error opening 1 file"));
+        return ReportResult_Finished;
+    }
+
+    IOAdapterFactory* iof2 = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(filename2));
+    QScopedPointer<IOAdapter> io2(iof2->createIOAdapter());
+    if (io2.isNull()) {
+        stateInfo.setError(tr("Error creating ioadapter for second file"));
+        return ReportResult_Finished;
+    }
+    if (!io2->open(filename2, IOAdapterMode_Read)) {
+        stateInfo.setError(tr("Error opening second file"));
+        return ReportResult_Finished;
+    }
+
+    QByteArray buf1(BUF_SZ, TERM_SYM);
+    QByteArray buf2(BUF_SZ, TERM_SYM);
+    int bytes1 = 0;
+    int bytes2 = 0;
+
+    do {
+        bytes1 = io1->readUntil(buf1.data(), BUF_SZ, TextUtils::LINE_BREAKS, IOAdapter::Term_Include);
+        bytes2 = io2->readUntil(buf2.data(), BUF_SZ, TextUtils::LINE_BREAKS, IOAdapter::Term_Include);
+        if (buf1.startsWith(DATE_STR) && buf2.startsWith(DATE_STR)) {
+            continue;
+        }
+        if (buf1.startsWith(HEADER_STR) && buf2.startsWith(HEADER_STR)) {
+            continue;
+        }
+        if (buf1.startsWith(NAME_STR) && buf2.startsWith(NAME_STR)) {
+            QString name1 = QByteArray(buf1.data(), bytes1).mid(NAME_STR.size()).trimmed();
+            QString name2 = QByteArray(buf2.data(), bytes2).mid(NAME_STR.size()).trimmed();
+
+            if (name1.startsWith(name2) || name2.startsWith(name1)) {
+                continue;
+            }
+            stateInfo.setError(tr("Names of aligments not matched"));
+            return ReportResult_Finished;
+        }
+        if (bytes1 != bytes2) {
+            stateInfo.setError(tr("Comparing files length not matched"));
+            return ReportResult_Finished;
+        }
+
+        QString s1 = QString::fromLatin1(buf1.data(), bytes1);
+        QString s2 = QString::fromLatin1(buf2.data(), bytes2);
+        if (!compareStr(s1, s2)) {
+            stateInfo.setError(tr("Files parts not equal:'%1' and '%2'").arg(s1).arg(s2));
+            return ReportResult_Finished;
+        }
+    } while (0 < bytes1 && 0 < bytes2);
+
+    return ReportResult_Finished;
+}
+
+}
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.h
new file mode 100644
index 0000000..c062eba
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildTaskTest.h
@@ -0,0 +1,105 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_HMMER_BUILD_TASK_TEST_H_
+#define _U2_HMMER_BUILD_TASK_TEST_H_
+
+#include "HmmerBuildTask.h"
+
+#include <U2Test/GTest.h>
+#include <U2Test/XMLTestFormat.h>
+#include <U2Test/XMLTestUtils.h>
+
+namespace U2 {
+
+/*****************************************
+* Builds hmm profile from input file
+*****************************************/
+class GTest_UHMMER3Build : public GTest {
+    Q_OBJECT
+public:
+    static const QString INPUT_FILE_TAG;
+    static const QString OUTPUT_FILE_TAG;
+    static const QString OUTPUT_DIR_TAG;
+    static const QString DEL_OUTPUT_TAG;
+
+    static const QString RELATIVE_WEIGHTING_OPTION_TAG; /* --wgsc, --wblosum, --wpb, --wnone, --wgiven */
+
+    static const QString EFFECTIVE_WEIGHTING_OPTION_TAG;/* --eent, --eclust, --enone, --eset */
+
+    static const QString E_VALUE_CALIBRATION_OPTION_TAG; /*  */
+
+    static const QString MODEL_CONSTRUCTION_OPTION_TAG; /* --fast + symfrac and
+                                                        --hand ( requires RF annotation )*/
+    static const QString SEED_OPTION_TAG;
+
+    static void setBuildSettings(HmmerBuildSettings & settings, const QDomElement& el, TaskStateInfo & ti);
+
+public:
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_UHMMER3Build, "uhmmer3-build");
+    ~GTest_UHMMER3Build();
+
+    virtual void prepare();
+    ReportResult report();
+    void cleanup();
+
+private:
+    void setAndCheckArgs();
+
+private:
+    QString                 inFile;
+    QString                 outFile;
+    QString                 outputDir;
+    bool                    delOutFile;
+    HmmerBuildSettings      bldSettings;
+    HmmerBuildTask          *buildTask;
+
+}; // GTest_UHMMER3Build
+
+/*****************************************
+* Totally compares two hmm files
+*****************************************/
+class GTest_CompareHmmFiles : public GTest {
+    Q_OBJECT
+public:
+    static const QString FILE1_NAME_TAG;
+    static const QString FILE2_NAME_TAG;
+    static const QString FILE1_TMP_TAG;
+    static const QString FILE2_TMP_TAG;
+
+public:
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_CompareHmmFiles, "hmm3-compare-files");
+    ReportResult report();
+
+private:
+    void setAndCheckArgs();
+
+private:
+    QString filename1;
+    QString filename2;
+    bool    file1Tmp;
+    bool    file2Tmp;
+
+}; // GTest_CompareHmmFiles
+
+}
+
+#endif
\ No newline at end of file
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.cpp
index 4c7a36f..2d886d6 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/FailTask.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignment.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -62,7 +62,7 @@ void HmmerBuildWorkerFactory::init() {
         Descriptor id(BasePorts::IN_MSA_PORT_ID(), HmmerBuildWorker::tr("Input MSA"),
             HmmerBuildWorker::tr("Input multiple sequence alignment for building statistical model."));
         Descriptor od(OUT_HMM_URL_PORT_ID, HmmerBuildWorker::tr("HMM3 profile"), HmmerBuildWorker::tr("Produced HMM3 profile URL"));
-        
+
         QMap<Descriptor, DataTypePtr> inM;
         inM[BaseSlots::MULTIPLE_ALIGNMENT_SLOT()] = BaseTypes::MULTIPLE_ALIGNMENT_TYPE();
         p << new PortDescriptor(id, DataTypePtr(new MapDataType("hmm3.build.in", inM)), true /*input*/);
@@ -80,7 +80,7 @@ void HmmerBuildWorkerFactory::init() {
         " about how conserved each column of the alignment is, and which residues are likely."));
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
     QMap<QString, PropertyDelegate *> delegates;
-    
+
     {
         QVariantMap m;
         m["minimum"] = 0;
@@ -167,10 +167,10 @@ Task * HmmerBuildWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
-        
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
+
         cfg.profileUrl = monitor()->outputDir() + "hmmer_build/" + QFileInfo(context->getMetadataStorage().get(inputMessage.getMetadataId()).getFileUrl()).baseName() + ".hmm";
         HmmerBuildFromMsaTask *task = new HmmerBuildFromMsaTask(cfg, msa);
         task->addListeners(createLogListeners());
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.h b/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.h
index d2330fe..2f84ff5 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerBuildWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.cpp
index 42709b6..d093d71 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.h b/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.h
index 592e912..6f34c6c 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerParseSearchResultsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,6 +30,7 @@
 namespace U2 {
 
 class HmmerParseSearchResultsTask : public Task {
+    Q_OBJECT
 public:
     HmmerParseSearchResultsTask(const QString &resultUrl, const AnnotationCreationPattern &pattern);
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.cpp
index 58fd211..238b884 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,6 +37,9 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
 #include "HmmerSearchDialog.h"
 #include "HmmerSearchTask.h"
 
@@ -48,12 +51,22 @@ const QString HmmerSearchDialog::HMM_FILES_DIR_ID           = "uhmmer3_search_dl
 const QString HmmerSearchDialog::ANNOTATIONS_DEFAULT_NAME   = "hmm_signal";
 
 HmmerSearchDialog::HmmerSearchDialog(U2SequenceObject *seqObj, QWidget *parent)
-    : QDialog(parent)
+    : QDialog(parent), seqCtx(NULL)
+{
+    init(seqObj);
+}
+
+HmmerSearchDialog::HmmerSearchDialog(ADVSequenceObjectContext *seqCtx, QWidget *parent)
+    : QDialog(parent), seqCtx(seqCtx)
 {
+    init(seqCtx->getSequenceObject());
+}
+
+void HmmerSearchDialog::init(U2SequenceObject *seqObj){
     setupUi(this);
     SAFE_POINT(NULL != seqObj, L10N::nullPointerError("sequence object"), );
 
-    new HelpButton(this, buttonBox, "18223200");
+    new HelpButton(this, buttonBox, "20875104");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -186,6 +199,9 @@ void HmmerSearchDialog::sl_okButtonClicked() {
         QMessageBox::critical(this, tr("Error: bad arguments!"), err);
         return;
     }
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(annotationsWidgetController->getModel().getAnnotationObject());
+    }
 
     HmmerSearchTask *searchTask = new HmmerSearchTask(model.searchSettings);
     AppContext::getTaskScheduler()->registerTopLevelTask(searchTask);
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.h b/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.h
index 1d86509..93a8c8b 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
 class U2SequenceObject;
 
 class HmmerSearchDialogModel {
@@ -41,6 +42,7 @@ class HmmerSearchDialog : public QDialog, public Ui_HmmerSearchDialog {
     Q_OBJECT
 public:
     HmmerSearchDialog(U2SequenceObject *seqObj, QWidget *parent = NULL);
+    HmmerSearchDialog(ADVSequenceObjectContext* seqCtx, QWidget *parent = NULL);
 
     static const QString DOM_E_PLUS_PREFIX;
     static const QString DOM_E_MINUS_PREFIX;
@@ -60,11 +62,13 @@ private slots:
 private:
     void setModelValues();
     void getModelValues();
+    void init(U2SequenceObject *seqObj);
     QString checkModel();
 
     QButtonGroup                        useScoreTresholdGroup;
     CreateAnnotationWidgetController *  annotationsWidgetController;
     HmmerSearchDialogModel              model;
+    ADVSequenceObjectContext*           seqCtx;
 };
 
 }   // namespace U2
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.cpp
index cf67baa..cd2c07f 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,6 +41,7 @@ HmmerSearchSettings::HmmerSearchSettings()
       doMax(false),
       noBiasFilter(false),
       noNull2(false),
+      noali(true),
       seed(42),
       annotationTable(NULL)
 {
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.h b/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.h
index f0a7a71..4fe9536 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -60,6 +60,7 @@ public:
     bool doMax;                 // --max: Turn all heuristic filters off ( less speed more power )
     bool noBiasFilter;          // --nobias: turn off composition bias filter
     bool noNull2;               // --nonull2: turn off biased composition score corrections
+    bool noali;                 // --noali: turn off alignment writing
 
     int seed;                   // --seed : set RNG seed ( if 0: one-time arbitrary seed )
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.cpp
index 0fc72ca..baf12ab 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,6 @@
 #include <U2Core/Counter.h>
 #include <U2Core/CreateAnnotationTask.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -86,9 +85,11 @@ QList<Task *> HmmerSearchTask::onSubTaskFinished(Task *subTask) {
         result << parseTask;
     } else if (subTask == parseTask) {
         removeTempDir();
-        Task *createAnnotationsTask = new CreateAnnotationsTask(settings.annotationTable, parseTask->getAnnotations(), settings.pattern.groupName);
-        createAnnotationsTask->setSubtaskProgressWeight(5);
-        result << createAnnotationsTask;
+        if (settings.annotationTable != NULL) {
+            Task *createAnnotationsTask = new CreateAnnotationsTask(settings.annotationTable, parseTask->getAnnotations(), settings.pattern.groupName);
+            createAnnotationsTask->setSubtaskProgressWeight(5);
+            result << createAnnotationsTask;
+        }
     }
 
     return result;
@@ -143,7 +144,7 @@ void HmmerSearchTask::prepareWorkingDir() {
     }
 
     if (!tempDir.mkpath(settings.workingDir)) {
-        setError(tr("Cannot create a directory for temporary files."));
+        setError(tr("Cannot create a folder for temporary files."));
         return;
     }
 }
@@ -194,12 +195,12 @@ QStringList HmmerSearchTask::getArguments() const {
         FAIL(tr("Unknown option controlling model-specific thresholding"), arguments);
     }
 
-    arguments << "--F1" << QString::number(settings.f1);
-    arguments << "--F2" << QString::number(settings.f2);
-    arguments << "--F3" << QString::number(settings.f3);
-
     if (settings.doMax) {
         arguments << "--max";
+    } else {
+        arguments << "--F1" << QString::number(settings.f1);
+        arguments << "--F2" << QString::number(settings.f2);
+        arguments << "--F3" << QString::number(settings.f3);
     }
 
     if (settings.noBiasFilter) {
@@ -213,12 +214,14 @@ QStringList HmmerSearchTask::getArguments() const {
     arguments << "--seed" << QString::number(settings.seed);
     arguments << "--cpu" << QString::number(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
 
-    arguments << "--noali";
-    arguments << "--domtblout" << settings.workingDir + "/" + PER_DOMAIN_HITS_FILENAME;
+    if (settings.noali) {
+        arguments << "--noali";
+    }
 
+    arguments << "--domtblout" << settings.workingDir + "/" + PER_DOMAIN_HITS_FILENAME;
     arguments << settings.hmmProfileUrl;
     arguments << settings.sequenceUrl;
-
+    
     return arguments;
 }
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.h b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.h
index d776b93..683f17e 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,6 @@
 #define _U2_HMMER_SEARCH_TASK_H_
 
 #include <U2Core/ExternalToolRunTask.h>
-
 #include "HmmerSearchSettings.h"
 
 namespace U2 {
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.cpp
new file mode 100644
index 0000000..816d0c0
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.cpp
@@ -0,0 +1,549 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <QDebug>
+#include <QDomElement>
+#include <QFile>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/IOAdapterUtils.h>
+#include <U2Core/TextUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "HmmerSearchTaskTest.h"
+#include "HmmerSearchTask.h"
+#include "utils/OutputCollector.h"
+
+namespace U2 {
+
+
+/*******************************
+* GTest_GeneralUHMM3Search
+********************************/
+
+const QString GTest_UHMM3Search::SEQ_DOC_CTX_NAME_TAG = "seqDoc";
+const QString GTest_UHMM3Search::HMM_FILENAME_TAG = "hmm";
+const QString GTest_UHMM3Search::OUTPUT_DIR_TAG = "outputDir";
+const QString GTest_UHMM3Search::HMMSEARCH_TASK_CTX_NAME_TAG = "taskCtxName";
+const QString GTest_UHMM3Search::ALGORITHM_TYPE_OPTION_TAG = "algo";
+const QString GTest_UHMM3Search::SW_CHUNK_SIZE_OPTION_TAG = "chunk";
+
+const QString GTest_UHMM3Search::SEQ_E_OPTION_TAG = "seqE";
+const QString GTest_UHMM3Search::SEQ_T_OPTION_TAG = "seqT";
+const QString GTest_UHMM3Search::Z_OPTION_TAG = "z";
+const QString GTest_UHMM3Search::DOM_E_OPTION_TAG = "domE";
+const QString GTest_UHMM3Search::DOM_T_OPTION_TAG = "domT";
+const QString GTest_UHMM3Search::DOM_Z_OPTION_TAG = "domZ";
+const QString GTest_UHMM3Search::USE_BIT_CUTOFFS_OPTION_TAG = "ubc";
+const QString GTest_UHMM3Search::INC_SEQ_E_OPTION_TAG = "incE";
+const QString GTest_UHMM3Search::INC_SEQ_T_OPTION_TAG = "incT";
+const QString GTest_UHMM3Search::INC_DOM_E_OPTION_TAG = "incdomE";
+const QString GTest_UHMM3Search::INC_DOM_T_OPTION_TAG = "incdomT";
+const QString GTest_UHMM3Search::MAX_OPTION_TAG = "max";
+const QString GTest_UHMM3Search::F1_OPTION_TAG = "f1";
+const QString GTest_UHMM3Search::F2_OPTION_TAG = "f2";
+const QString GTest_UHMM3Search::F3_OPTION_TAG = "f3";
+const QString GTest_UHMM3Search::NOBIAS_OPTION_TAG = "nobias";
+const QString GTest_UHMM3Search::NONULL2_OPTION_TAG = "nonull2";
+const QString GTest_UHMM3Search::SEED_OPTION_TAG = "seed";
+const QString GTest_UHMM3Search::REMOTE_MACHINE_VAR = "MACHINE";
+
+static void setDoubleOption(double& num, const QDomElement& el, const QString& optionName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString numStr = el.attribute(optionName);
+    if (numStr.isEmpty()) {
+        return;
+    }
+
+    bool ok = false;
+    double ret = numStr.toDouble(&ok);
+    if (!ok) {
+        si.setError(QString("cannot_parse_double_number_from %1. Option: %2").arg(numStr).arg(optionName));
+        return;
+    }
+    num = ret;
+}
+
+static void setUseBitCutoffsOption(HmmerSearchSettings::BitCutoffs& ret, const QDomElement& el, const QString& opName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+
+    QString str = el.attribute(opName).toLower();
+    if ("ga" == str) {
+        ret = HmmerSearchSettings::p7H_GA;
+    } else if ("nc" == str) {
+        ret = HmmerSearchSettings::p7H_NC;
+    } else if ("tc" == str) {
+        ret = HmmerSearchSettings::p7H_TC;
+    } else if (!str.isEmpty()) {
+        si.setError(QString("unrecognized_value_in %1 option").arg(opName));
+    }
+}
+
+static void setBooleanOption(bool& ret, const QDomElement& el, const QString& opName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString str = el.attribute(opName).toLower();
+
+    if (!str.isEmpty() && "n" != str && "no" != str) {
+        ret = true;//TRUE;
+    } else {
+        ret = false;//FALSE;
+    }
+}
+
+static void setIntegerOption(int& num, const QDomElement& el, const QString& optionName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString numStr = el.attribute(optionName);
+    if (numStr.isEmpty()) {
+        return;
+    }
+
+    bool ok = false;
+    int ret = numStr.toInt(&ok);
+    if (!ok) {
+        si.setError(QString("cannot_parse_integer_number_from %1. Option: %2").arg(numStr).arg(optionName));
+        return;
+    }
+    num = ret;
+}
+
+void GTest_UHMM3Search::setSearchTaskSettings(HmmerSearchSettings& settings, const QDomElement& el, TaskStateInfo& si) {
+    setDoubleOption(settings.e, el, GTest_UHMM3Search::SEQ_E_OPTION_TAG, si);
+    setDoubleOption(settings.t, el, GTest_UHMM3Search::SEQ_T_OPTION_TAG, si);
+    setDoubleOption(settings.z, el, GTest_UHMM3Search::Z_OPTION_TAG, si);
+    setDoubleOption(settings.f1, el, GTest_UHMM3Search::F1_OPTION_TAG, si);
+    setDoubleOption(settings.f2, el, GTest_UHMM3Search::F2_OPTION_TAG, si);
+    setDoubleOption(settings.f3, el, GTest_UHMM3Search::F3_OPTION_TAG, si);
+    setDoubleOption(settings.domE, el, GTest_UHMM3Search::DOM_E_OPTION_TAG, si);
+    setDoubleOption(settings.domT, el, GTest_UHMM3Search::DOM_T_OPTION_TAG, si);
+    setDoubleOption(settings.domZ, el, GTest_UHMM3Search::DOM_Z_OPTION_TAG, si);
+
+    setBooleanOption(settings.doMax, el, GTest_UHMM3Search::MAX_OPTION_TAG, si);
+    setBooleanOption(settings.noBiasFilter, el, GTest_UHMM3Search::NOBIAS_OPTION_TAG, si);
+    setBooleanOption(settings.noNull2, el, GTest_UHMM3Search::NONULL2_OPTION_TAG, si);
+
+    setIntegerOption(settings.seed, el, GTest_UHMM3Search::SEED_OPTION_TAG, si);
+
+    setUseBitCutoffsOption(settings.useBitCutoffs, el, GTest_UHMM3Search::USE_BIT_CUTOFFS_OPTION_TAG, si);
+}
+
+void GTest_UHMM3Search::init(XMLTestFormat *tf, const QDomElement& el) {
+    Q_UNUSED(tf);
+
+    hmmFilename = el.attribute(HMM_FILENAME_TAG);
+
+    searchTask = NULL;
+
+    seqDocCtxName = el.attribute(SEQ_DOC_CTX_NAME_TAG);
+    setSearchTaskSettings(settings, el, stateInfo);
+
+    hmmFilename = el.attribute(HMM_FILENAME_TAG);
+
+    outputDir = el.attribute(OUTPUT_DIR_TAG);
+    settings.annotationTable = NULL;
+    settings.noali = false;
+}
+
+void GTest_UHMM3Search::setAndCheckArgs() {
+    assert(!stateInfo.hasError());
+    if (hmmFilename.isEmpty()) {
+        stateInfo.setError("hmm_filename_is_empty");
+        return;
+    }
+    hmmFilename = env->getVar("COMMON_DATA_DIR") + "/" + hmmFilename;
+
+    if (seqDocCtxName.isEmpty()) {
+        stateInfo.setError("sequence_document_ctx_name_is_empty");
+        return;
+    }
+
+    if (outputDir.isEmpty()) {
+        stateInfo.setError("output_dir_is_empty");
+        return;
+    }
+
+    outputDir = env->getVar("TEMP_DATA_DIR") + "/" + outputDir;
+
+    Document* seqDoc = getContext<Document>(this, seqDocCtxName);
+    if (NULL == seqDoc) {
+        stateInfo.setError(QString("context %1 not found").arg(seqDocCtxName));
+        return;
+    }
+    settings.sequenceUrl = seqDoc->getURLString();
+}
+
+void GTest_UHMM3Search::prepare() {
+    CHECK_OP(stateInfo, );
+    setAndCheckArgs();
+    CHECK_OP(stateInfo, );
+
+    settings.hmmProfileUrl = hmmFilename;
+    settings.workingDir = outputDir;
+
+    searchTask = new HmmerSearchTask(settings);
+    //TODO: make collector as 'fancy' pointer
+    searchTask->addListeners(QList<ExternalToolListener*>() << new OutputCollector());
+    addSubTask(searchTask);
+}
+
+QList< Task* > GTest_UHMM3Search::onSubTaskFinished(Task * sub) {
+    assert(NULL != sub);
+    QList< Task* > res;
+    if (searchTask != sub) {
+        return res;
+    }
+    OutputCollector *collector = dynamic_cast<OutputCollector*>(searchTask->getListener(0));
+    if (collector != NULL) {
+        QString hmmSearchLog = collector->getLog();
+        //TODO: check non empty log and file existence after writing
+        QFile file(settings.workingDir + "/output.txt");
+        file.open(QIODevice::WriteOnly);
+        file.write(hmmSearchLog.toLatin1());
+        file.close();
+        delete collector;
+    }
+    return res;
+}
+
+Task::ReportResult GTest_UHMM3Search::report() {
+    return ReportResult_Finished;
+}
+
+const QString GTest_UHMM3SearchCompare::ACTUAL_OUT_FILE_TAG = "actualOut";
+const QString GTest_UHMM3SearchCompare::TRUE_OUT_FILE_TAG = "trueOut";
+
+const int   BUF_SZ = 2048;
+const char  TERM_SYM = '\0';
+
+static bool getSignificance(const QByteArray& str) {
+    if ("!" == str) {
+        return true;
+    } else if ("?" == str) {
+        return false;
+    }
+    throw QString(GTest_UHMM3SearchCompare::tr("Can't parse significance:%1").arg(QString(str)));
+}
+
+static double getDouble(const QByteArray& numStr) {
+    bool ok = false;
+    double ret = numStr.toDouble(&ok);
+    if (ok) {
+        return ret;
+    }
+    throw QString(GTest_UHMM3SearchCompare::tr("Internal error (cannot parse float number from string '%1')").arg(QString(numStr)));
+}
+
+static float getFloat(const QByteArray& numStr) {
+    return (float)getDouble(numStr);
+}
+
+static QByteArray getNextToken(QStringList& tokens) {
+    if (tokens.isEmpty()) {
+        throw QString("unexpected_end_of_line:token_is_missing");
+    }
+    return tokens.takeFirst().toLatin1();
+}
+
+static UHMM3SearchSeqDomainResult getDomainRes(QStringList& tokens) {
+    UHMM3SearchSeqDomainResult res;
+
+    getNextToken(tokens);
+    res.isSignificant = getSignificance(getNextToken(tokens));
+    res.score = getFloat(getNextToken(tokens));
+    res.bias = getFloat(getNextToken(tokens));
+    res.cval = getDouble(getNextToken(tokens));
+    res.ival = getDouble(getNextToken(tokens));
+
+    int hmmFrom = (int)getFloat(getNextToken(tokens));
+    int hmmTo = (int)getFloat(getNextToken(tokens));
+    res.queryRegion = U2Region(hmmFrom, hmmTo - hmmFrom);
+    getNextToken(tokens);
+
+    int aliFrom = (int)getFloat(getNextToken(tokens));
+    int aliTo = (int)getFloat(getNextToken(tokens));
+    res.seqRegion = U2Region(aliFrom - 1, aliTo - aliFrom + 1);
+    getNextToken(tokens);
+
+    int envFrom = (int)getFloat(getNextToken(tokens));
+    int envTo = (int)getFloat(getNextToken(tokens));
+    res.envRegion = U2Region(envFrom, envTo - envFrom);
+    getNextToken(tokens);
+
+    res.acc = getDouble(getNextToken(tokens));
+    return res;
+}
+
+static void readLine(IOAdapter* io, QByteArray& to, QStringList* tokens = NULL) {
+    assert(NULL != io);
+    to.clear();
+    QByteArray buf(BUF_SZ, TERM_SYM);
+    bool there = false;
+    int bytes = 0;
+    while (!there) {
+        int ret = io->readUntil(buf.data(), BUF_SZ, TextUtils::LINE_BREAKS, IOAdapter::Term_Include, &there);
+        if (0 > ret) {
+            throw QString("read_error_occurred");
+        }
+        if (0 == ret) {
+            break;
+        }
+        to.append(QByteArray(buf.data(), ret));
+        bytes += ret;
+    }
+    to = to.trimmed();
+    if (0 == bytes) {
+        throw QString("unexpected_end_of_file_found");
+    }
+
+    if (NULL != tokens) {
+        *tokens = QString(to).split(QRegExp("\\s+"), QString::SkipEmptyParts);
+    }
+}
+
+const double COMPARE_PERCENT_BORDER = 0.1; // 10 percent
+
+template<class T>
+static bool compareNumbers(T f1, T f2) {
+    bool ret = false;
+    if (0 == f1) {
+        ret = 0 == f2 ? true : f2 < COMPARE_PERCENT_BORDER;
+    } else if (0 == f2) {
+        ret = f1 < COMPARE_PERCENT_BORDER;
+    } else {
+        ret = (qAbs(f1 - f2)) < COMPARE_PERCENT_BORDER;
+    }
+    if (!ret) {
+        qDebug() << "!!! compare numbers mismatch: " << f1 << " and " << f2 << " !!!\n";
+    }
+    return ret;
+}
+
+void GTest_UHMM3SearchCompare::init(XMLTestFormat *tf, const QDomElement& el) {
+    Q_UNUSED(tf);
+
+    trueOutFilename = el.attribute(TRUE_OUT_FILE_TAG);
+    actualOutFilename = el.attribute(ACTUAL_OUT_FILE_TAG);
+}
+
+void GTest_UHMM3SearchCompare::setAndCheckArgs() {
+    assert(!hasError());
+
+    if (trueOutFilename.isEmpty()) {
+        stateInfo.setError("true_out_filename_is_empty");
+        return;
+    }
+    trueOutFilename = env->getVar("COMMON_DATA_DIR") + "/" + trueOutFilename;
+
+    if (actualOutFilename.isEmpty()) {
+        stateInfo.setError("actual_out_filename_is_empty");
+        return;
+    }
+    actualOutFilename = env->getVar("TEMP_DATA_DIR") + "/" + actualOutFilename;
+}
+
+UHMM3SearchResult GTest_UHMM3SearchCompare::getSearchResultFromOutput(const QString & filename) {
+    assert(!filename.isEmpty());
+
+    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(filename));
+    QScopedPointer< IOAdapter > io(iof->createIOAdapter());
+    if (io.isNull()) {
+        throw QString("cannot_create_io_adapter_for_'%1'_file").arg(filename);
+    }
+    if (!io->open(filename, IOAdapterMode_Read)) {
+        throw QString("cannot_open_'%1'_file").arg(filename);
+    }
+
+    UHMM3SearchResult res;
+    QByteArray buf;
+    QStringList tokens;
+    bool wasHeader = false;
+    bool wasFullSeqResult = false;
+    readLine(io.data(), buf); /* the first line. starts with # search or # phmmer */
+    do {
+        readLine(io.data(), buf);
+        if (buf.isEmpty()) { /* but no error - empty line here */
+            continue;
+        }
+        if (buf.startsWith("# HMMER 3")) {
+            wasHeader = true;
+            continue;
+        }
+        if (buf.startsWith("Scores for complete sequences")) {
+            if (!wasHeader) {
+                throw QString("hmmer_output_header_is_missing");
+            }
+            UHMM3SearchCompleteSeqResult& fullSeqRes = res.fullSeqResult;
+            readLine(io.data(), buf);
+            readLine(io.data(), buf);
+            readLine(io.data(), buf);
+            readLine(io.data(), buf, &tokens);
+            if (buf.contains("inclusion threshold")) {
+                readLine(io.data(), buf, &tokens);
+            }
+            if (buf.startsWith("[No hits detected")) {
+                fullSeqRes.isReported = false;
+                break;
+            } else {
+                fullSeqRes.eval = getDouble(getNextToken(tokens));
+                fullSeqRes.score = getFloat(getNextToken(tokens));
+                fullSeqRes.bias = getFloat(getNextToken(tokens));
+                /* skip best domain res. we will check it later */
+                getNextToken(tokens);getNextToken(tokens);getNextToken(tokens);
+                fullSeqRes.expectedDomainsNum = getFloat(getNextToken(tokens));
+                fullSeqRes.reportedDomainsNum = (int)getFloat(getNextToken(tokens));
+                fullSeqRes.isReported = true;
+                wasFullSeqResult = true;
+            }
+            continue;
+        }
+        if (buf.startsWith("Domain annotation for each sequence")) {
+            if (!wasFullSeqResult) {
+                throw QString("full_seq_result_is_missing");
+            }
+            readLine(io.data(), buf);
+            readLine(io.data(), buf);
+            readLine(io.data(), buf);
+            QList< UHMM3SearchSeqDomainResult >& domainResList = res.domainResList;
+            assert(domainResList.isEmpty());
+
+            int nDomains = res.fullSeqResult.reportedDomainsNum;
+            int i = 0;
+            for (i = 0; i < nDomains; ++i) {
+                readLine(io.data(), buf, &tokens);
+                domainResList << getDomainRes(tokens);
+            }
+            break;
+        }
+    } while (1);
+    return res;
+}
+
+void GTest_UHMM3SearchCompare::generalCompareResults(const UHMM3SearchResult& myRes, const UHMM3SearchResult& trueRes, TaskStateInfo& ti) {
+    const UHMM3SearchCompleteSeqResult& myFull = myRes.fullSeqResult;
+    const UHMM3SearchCompleteSeqResult& trueFull = trueRes.fullSeqResult;
+
+    if (myFull.isReported != trueFull.isReported) {
+        ti.setError(QString("reported_flag_not_matched: %1 and %2").arg(myFull.isReported).arg(trueFull.isReported));
+        return;
+    }
+
+    if (myFull.isReported) {
+        if (!compareNumbers<float>(myFull.bias, trueFull.bias)) {
+            ti.setError(QString("full_seq_bias_not_matched: %1 and %2").arg(myFull.bias).arg(trueFull.bias));  return;
+        }
+        if (!compareNumbers<double>(myFull.eval, trueFull.eval)) {
+            ti.setError(QString("full_seq_eval_not_matched: %1 and %2").arg(myFull.eval).arg(trueFull.eval));  return;
+        }
+        if (!compareNumbers<float>(myFull.score, trueFull.score)) {
+            ti.setError(QString("full_seq_score_not_matched: %1 and %2").arg(myFull.score).arg(trueFull.score)); return;
+        }
+        if (!compareNumbers<float>(myFull.expectedDomainsNum, trueFull.expectedDomainsNum)) {
+            ti.setError(QString("full_seq_exp_not_matched: %1 and %2").arg(myFull.expectedDomainsNum).arg(trueFull.expectedDomainsNum));
+            return;
+        }
+        if (myFull.reportedDomainsNum != trueFull.reportedDomainsNum) {
+            ti.setError(QString("full_seq_n_not_matched: %1 and %2").arg(myFull.reportedDomainsNum).arg(trueFull.reportedDomainsNum));
+            return;
+        }
+    }
+
+    const QList< UHMM3SearchSeqDomainResult >& myDoms = myRes.domainResList;
+    const QList< UHMM3SearchSeqDomainResult >& trueDoms = trueRes.domainResList;
+    if (myDoms.size() != trueDoms.size()) {
+        ti.setError(QString("domain_res_number_not_matched: %1 and %2").arg(myDoms.size()).arg(trueDoms.size()));
+        return;
+    }
+    for (int i = 0; i < myDoms.size(); ++i) {
+        UHMM3SearchSeqDomainResult myCurDom = myDoms.at(i);
+        UHMM3SearchSeqDomainResult trueCurDom = trueDoms.at(i);
+        if (!compareNumbers<double>(myCurDom.acc, trueCurDom.acc)) {
+            ti.setError(QString("dom_acc_not_matched: %1 and %2").arg(myCurDom.acc).arg(trueCurDom.acc));   return;
+        }
+        if (!compareNumbers<float>(myCurDom.bias, trueCurDom.bias)) {
+            ti.setError(QString("dom_bias_not_matched: %1 and %2").arg(myCurDom.bias).arg(trueCurDom.bias));  return;
+        }
+        if (!compareNumbers<double>(myCurDom.cval, trueCurDom.cval)) {
+            ti.setError(QString("dom_cval_not_matched: %1 and %2").arg(myCurDom.cval).arg(trueCurDom.cval));  return;
+        }
+        if (!compareNumbers<double>(myCurDom.ival, trueCurDom.ival)) {
+            ti.setError(QString("dom_ival_not_matched: %1 and %2").arg(myCurDom.ival).arg(trueCurDom.ival));  return;
+        }
+        if (!compareNumbers<float>(myCurDom.score, trueCurDom.score)) {
+            ti.setError(QString("dom_score_not_matched: %1 and %2").arg(myCurDom.score).arg(trueCurDom.score)); return;
+        }
+        if (myCurDom.envRegion != trueCurDom.envRegion) {
+            ti.setError(QString("dom_env_region_not_matched: %1---%2 and %3---%4").
+                arg(myCurDom.envRegion.startPos).arg(myCurDom.envRegion.length).arg(trueCurDom.envRegion.startPos).
+                arg(trueCurDom.envRegion.length)); return;
+        }
+        if (myCurDom.queryRegion != trueCurDom.queryRegion) {
+            ti.setError(QString("dom_hmm_region_not_matched: %1---%2 and %3---%4").
+                arg(myCurDom.queryRegion.startPos).arg(myCurDom.queryRegion.length).arg(trueCurDom.queryRegion.startPos).
+                arg(trueCurDom.queryRegion.length)); return;
+        }
+        if (myCurDom.seqRegion != trueCurDom.seqRegion) {
+            ti.setError(QString("dom_seq_region_not_matched: %1---%2 and %3---%4").
+                arg(myCurDom.seqRegion.startPos).arg(myCurDom.seqRegion.length).arg(trueCurDom.seqRegion.startPos).
+                arg(trueCurDom.seqRegion.length)); return;
+        }
+        if (myCurDom.isSignificant != trueCurDom.isSignificant) {
+            ti.setError(QString("dom_sign_not_matched: %1 and %2").arg(myCurDom.isSignificant).arg(trueCurDom.isSignificant));
+            return;
+        }
+    }
+}
+
+Task::ReportResult GTest_UHMM3SearchCompare::report() {
+    assert(!hasError());
+    setAndCheckArgs();
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+
+    UHMM3SearchResult trueRes;
+    UHMM3SearchResult actualRes;
+    try {
+        trueRes = getSearchResultFromOutput(trueOutFilename);
+        actualRes = getSearchResultFromOutput(actualOutFilename);
+    } catch (const QString& ex) {
+        stateInfo.setError(ex);
+    } catch (...) {
+        stateInfo.setError("undefined_error_occurred");
+    }
+
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+
+    generalCompareResults(actualRes, trueRes, stateInfo);
+
+    return ReportResult_Finished;
+}
+
+}
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.h b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.h
new file mode 100644
index 0000000..af2dccc
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchTaskTest.h
@@ -0,0 +1,145 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_HMMER_SEARCH_TASK_TESTS_H_
+#define _U2_HMMER_SEARCH_TASK_TESTS_H_
+
+#include <U2Test/GTest.h>
+#include <U2Test/XMLTestFormat.h>
+#include <U2Test/XMLTestUtils.h>
+
+#include "HmmerSearchSettings.h"
+
+namespace U2 {
+
+class HmmerSearchTask;
+
+class GTest_UHMM3Search : public GTest {
+    Q_OBJECT
+public:
+    static const QString SEQ_DOC_CTX_NAME_TAG; /* loaded sequence document */
+    static const QString HMM_FILENAME_TAG;
+    static const QString OUTPUT_DIR_TAG;
+    static const QString HMMSEARCH_TASK_CTX_NAME_TAG; /* finished UHMM3SearchTask */
+    static const QString ALGORITHM_TYPE_OPTION_TAG;
+    static const QString SW_CHUNK_SIZE_OPTION_TAG;
+    /* reporting thresholds options */
+    static const QString SEQ_E_OPTION_TAG; /* -E */
+    static const QString SEQ_T_OPTION_TAG; /* -T */
+    static const QString Z_OPTION_TAG; /* -Z */
+    static const QString DOM_E_OPTION_TAG; /* --domE */
+    static const QString DOM_T_OPTION_TAG; /* --domT */
+    static const QString DOM_Z_OPTION_TAG; /* --domZ */
+    static const QString USE_BIT_CUTOFFS_OPTION_TAG; /* --cut_ga, --cut_nc, --cut_tc or none */
+    /* significance thresholds options */
+    static const QString INC_SEQ_E_OPTION_TAG; /* --incE */
+    static const QString INC_SEQ_T_OPTION_TAG; /* --incT */
+    static const QString INC_DOM_E_OPTION_TAG; /* --incdomE */
+    static const QString INC_DOM_T_OPTION_TAG; /* --incdomT */
+    /* acceleration heuristics options */
+    static const QString MAX_OPTION_TAG; /* --max */
+    static const QString F1_OPTION_TAG; /* --F1 */
+    static const QString F2_OPTION_TAG; /* --F2 */
+    static const QString F3_OPTION_TAG; /* --F3 */
+    static const QString NOBIAS_OPTION_TAG; /* --nobias */
+    static const QString NONULL2_OPTION_TAG; /* --nonull2 */
+    static const QString SEED_OPTION_TAG; /* --seed */
+
+    static const QString REMOTE_MACHINE_VAR;
+
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_UHMM3Search, "hmm3-search");
+
+    void prepare();
+    ReportResult report();
+
+    virtual QList< Task* > onSubTaskFinished(Task * sub);
+
+private:
+    void setAndCheckArgs();
+    static void setSearchTaskSettings(HmmerSearchSettings& set, const QDomElement& el, TaskStateInfo& si);
+
+    HmmerSearchSettings     settings;
+    QString                 hmmFilename;
+    QString                 seqDocCtxName;
+
+    QString                 outputDir;
+
+    HmmerSearchTask *searchTask;
+
+}; // GTest_GeneralUHMM3Search
+
+class UHMM3SearchSeqDomainResult {
+public:
+    float   score;
+    float   bias;
+    double  ival; /* independent e-value */
+    double  cval; /* conditional e-value */
+
+    U2Region queryRegion; /* hmm region for hmmsearch and seq region for phmmer */
+    U2Region seqRegion;
+    U2Region envRegion; /* envelope of domains location */
+
+    double  acc; /* expected accuracy per residue of the alignment */
+
+    bool    isSignificant; /* domain meets inclusion tresholds */
+}; // UHMM3SearchSeqDomainResult
+
+class UHMM3SearchCompleteSeqResult {
+public:
+    double  eval;
+    float   score;
+    float   bias;
+    float   expectedDomainsNum;
+    int     reportedDomainsNum;
+    bool    isReported;
+
+    UHMM3SearchCompleteSeqResult() : isReported(false) {}
+}; // UHMM3SearchCompleteSeqResult
+
+class UHMM3SearchResult {
+public:
+    UHMM3SearchCompleteSeqResult           fullSeqResult;
+    QList< UHMM3SearchSeqDomainResult >    domainResList;
+}; // UHMM3SearchResult
+
+class GTest_UHMM3SearchCompare : public GTest {
+    Q_OBJECT
+public:
+    static const QString ACTUAL_OUT_FILE_TAG;
+    static const QString TRUE_OUT_FILE_TAG; /* file with original hmmer3 output */
+
+    static UHMM3SearchResult getSearchResultFromOutput(const QString & filename);
+    static void generalCompareResults(const UHMM3SearchResult& myRes, const UHMM3SearchResult& trueRes, TaskStateInfo& ti);
+
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_UHMM3SearchCompare, "hmm3-search-compare");
+    ReportResult report();
+
+private:
+    void setAndCheckArgs();
+
+private:
+    QString                     actualOutFilename;
+    QString                     trueOutFilename;
+}; // GTest_GeneralUHMM3SearchCompare
+
+}
+
+#endif
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.cpp
index 0ab9278..8ee5637 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,6 +30,7 @@
 #include <U2Core/MultiTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.h b/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.h
index 4613146..7808d88 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSearchWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSupport.cpp b/src/plugins/external_tool_support/src/hmmer/HmmerSupport.cpp
index 4b1ada2..61e626b 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSupport.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,6 +26,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GObjectSelection.h>
 #include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/AppSettingsGUI.h>
 #include <U2Gui/GUIUtils.h>
@@ -37,7 +38,7 @@
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ExternalToolSupportSettingsController.h"
 #include "HmmerBuildDialog.h"
@@ -81,16 +82,16 @@ void HmmerSupport::sl_buildProfile() {
         return;
     }
 
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     MWMDIWindow *activeWindow = AppContext::getMainWindow()->getMDIManager()->getActiveWindow();
     if (NULL != activeWindow) {
         GObjectViewWindow *objectViewWindow = qobject_cast<GObjectViewWindow *>(activeWindow);
         if (NULL != objectViewWindow) {
             MSAEditor *msaEditor = qobject_cast<MSAEditor *>(objectViewWindow->getObjectView());
             if (NULL != msaEditor) {
-                MAlignmentObject *maObj = msaEditor->getMSAObject();
+                MultipleSequenceAlignmentObject *maObj = msaEditor->getMaObject();
                 if (maObj != NULL) {
-                    ma = maObj->getMAlignment();
+                    ma = maObj->getMultipleAlignment();
                 }
             }
         }
@@ -135,10 +136,21 @@ void HmmerSupport::sl_search() {
         QMessageBox::critical(NULL, tr("Error!"), tr("Target sequence not selected: no opened annotated dna view"));
         return;
     }
+    ADVSequenceObjectContext *seqCtx = NULL;
+    GObjectViewWindow *activeWindow = qobject_cast<GObjectViewWindow *>(AppContext::getMainWindow()->getMDIManager()->getActiveWindow());
+    if (NULL != activeWindow) {
+        AnnotatedDNAView* dnaView = qobject_cast<AnnotatedDNAView *>(activeWindow->getObjectView());
+        seqCtx = (dnaView != NULL) ? dnaView->getSequenceInFocus() : NULL;
+    }
 
     QWidget *parent = AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<HmmerSearchDialog> searchDlg = new HmmerSearchDialog(seqObj, parent);
-    searchDlg->exec();
+    if(seqCtx != NULL){
+        QObjectScopedPointer<HmmerSearchDialog> searchDlg = new HmmerSearchDialog(seqCtx, parent);
+        searchDlg->exec();
+    }else{
+        QObjectScopedPointer<HmmerSearchDialog> searchDlg = new HmmerSearchDialog(seqObj, parent);
+        searchDlg->exec();
+    }
 }
 
 void HmmerSupport::sl_phmmerSearch() {
@@ -151,9 +163,21 @@ void HmmerSupport::sl_phmmerSearch() {
         QMessageBox::critical(NULL, tr("Error!"), tr("Target sequence not selected: no opened annotated dna view"));
         return;
     }
+    ADVSequenceObjectContext *seqCtx = NULL;
+    GObjectViewWindow *activeWindow = qobject_cast<GObjectViewWindow *>(AppContext::getMainWindow()->getMDIManager()->getActiveWindow());
+    if (NULL != activeWindow) {
+        AnnotatedDNAView* dnaView = qobject_cast<AnnotatedDNAView *>(activeWindow->getObjectView());
+        seqCtx = (dnaView != NULL) ? dnaView->getSequenceInFocus() : NULL;
+    }
+
     QWidget *parent = AppContext::getMainWindow()->getQMainWindow();
-    QObjectScopedPointer<PhmmerSearchDialog> phmmerDialog = new PhmmerSearchDialog(seqObj, parent);
-    phmmerDialog->exec();
+    if(seqCtx != NULL){
+        QObjectScopedPointer<PhmmerSearchDialog> phmmerDialog = new PhmmerSearchDialog(seqCtx, parent);
+        phmmerDialog->exec();
+    }else{
+        QObjectScopedPointer<PhmmerSearchDialog> phmmerDialog = new PhmmerSearchDialog(seqObj, parent);
+        phmmerDialog->exec();
+    }
 }
 
 void HmmerSupport::initBuild() {
@@ -248,7 +272,7 @@ bool HmmerSupport::isToolSet(const QString &name) const {
 }
 
 HmmerMsaEditorContext::HmmerMsaEditorContext(QObject *parent)
-    : GObjectViewWindowContext(parent, MSAEditorFactory::ID)
+    : GObjectViewWindowContext(parent, MsaEditorFactory::ID)
 {
 
 }
@@ -256,7 +280,7 @@ HmmerMsaEditorContext::HmmerMsaEditorContext(QObject *parent)
 void HmmerMsaEditorContext::initViewContext(GObjectView *view) {
     MSAEditor *msaEditor = qobject_cast<MSAEditor *>(view);
     SAFE_POINT(NULL != msaEditor, "Msa Editor is NULL", );
-    CHECK(NULL != msaEditor->getMSAObject(), );
+    CHECK(NULL != msaEditor->getMaObject(), );
 
     GObjectViewAction *action = new GObjectViewAction(this, view, tr("Build HMMER3 profile"));
     action->setObjectName("Build HMMER3 profile");
@@ -269,7 +293,7 @@ void HmmerMsaEditorContext::buildMenu(GObjectView *view, QMenu *menu) {
     MSAEditor *msaEditor = qobject_cast<MSAEditor *>(view);
     SAFE_POINT(NULL != msaEditor, "Msa Editor is NULL", );
     SAFE_POINT(NULL != menu, "Menu is NULL", );
-    CHECK(NULL != msaEditor->getMSAObject(), );
+    CHECK(NULL != msaEditor->getMaObject(), );
 
     QList<GObjectViewAction *> list = getViewActions(view);
     SAFE_POINT(1 == list.size(), "List size is incorrect", );
@@ -284,9 +308,9 @@ void HmmerMsaEditorContext::sl_build() {
     MSAEditor *msaEditor = qobject_cast<MSAEditor *>(action->getObjectView());
     SAFE_POINT(NULL != msaEditor, "Msa Editor is NULL", );
 
-    MAlignmentObject *obj = msaEditor->getMSAObject();
+    MultipleSequenceAlignmentObject *obj = msaEditor->getMaObject();
     if (obj != NULL) {
-        QObjectScopedPointer<HmmerBuildDialog> buildDlg = new HmmerBuildDialog(obj->getMAlignment());
+        QObjectScopedPointer<HmmerBuildDialog> buildDlg = new HmmerBuildDialog(obj->getMultipleAlignment  ());
         buildDlg->exec();
         CHECK(!buildDlg.isNull(), );
     }
@@ -309,13 +333,17 @@ void HmmerAdvContext::initViewContext(GObjectView *view) {
 void HmmerAdvContext::sl_search() {
     QWidget *parent = getParentWidget(sender());
     assert(NULL != parent);
-    U2SequenceObject *seqObj = getSequenceInFocus(sender());
-    if (NULL == seqObj) {
+    GObjectViewAction *action = qobject_cast<GObjectViewAction *>(sender());
+    SAFE_POINT(NULL != action, "action is NULL", );
+    AnnotatedDNAView *adv = qobject_cast<AnnotatedDNAView *>(action->getObjectView());
+    SAFE_POINT(NULL != adv, "AnnotatedDNAView is NULL", );
+    ADVSequenceObjectContext *seqCtx = adv->getSequenceInFocus();
+    if (NULL == seqCtx) {
         QMessageBox::critical(parent, tr("error"), tr("No sequence in focus found"));
         return;
     }
 
-    QObjectScopedPointer<HmmerSearchDialog> searchDlg = new HmmerSearchDialog(seqObj, parent);
+    QObjectScopedPointer<HmmerSearchDialog> searchDlg = new HmmerSearchDialog(seqCtx, parent);
     searchDlg->exec();
 }
 
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerSupport.h b/src/plugins/external_tool_support/src/hmmer/HmmerSupport.h
index ba97686..f27d9c5 100644
--- a/src/plugins/external_tool_support/src/hmmer/HmmerSupport.h
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/HmmerTests.h b/src/plugins/external_tool_support/src/hmmer/HmmerTests.h
new file mode 100644
index 0000000..f8a0c59
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/HmmerTests.h
@@ -0,0 +1,51 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_HMMER_TESTS_H_
+#define _U2_HMMER_TESTS_H_
+
+#include <U2Test/XMLTestFormat.h>
+
+#include "HmmerSearchTaskTest.h"
+#include "HmmerBuildTaskTest.h"
+#include "PhmmerSearchTaskTest.h"
+
+namespace U2 {
+
+class HmmerTests {
+public:
+    static QList<XMLTestFactory*> createTestFactories() {
+        QList<XMLTestFactory*> res;
+        res.append(GTest_UHMM3Search::createFactory());
+        res.append(GTest_UHMM3SearchCompare::createFactory());
+
+        res.append(GTest_UHMMER3Build::createFactory());
+        res.append(GTest_CompareHmmFiles::createFactory());
+
+        res.append(GTest_UHMM3Phmmer::createFactory());
+        res.append(GTest_UHMM3PhmmerCompare::createFactory());
+        return res;
+    }
+};
+
+}
+
+#endif
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.cpp b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.cpp
index 20533c9..91010cb 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,6 +36,9 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
 #include "PhmmerSearchTask.h"
 #include "PhmmerSearchDialog.h"
 
@@ -47,12 +50,22 @@ const QString PhmmerSearchDialog::DOM_E_MINUS_PREFIX         = "1E";
 const QString PhmmerSearchDialog::ANNOTATIONS_DEFAULT_NAME   = "signal";
 
 PhmmerSearchDialog::PhmmerSearchDialog(U2SequenceObject *seqObj, QWidget *parent)
-    : QDialog(parent)
+    : QDialog(parent), seqCtx(NULL)
+{
+    init(seqObj);
+}
+
+PhmmerSearchDialog::PhmmerSearchDialog(ADVSequenceObjectContext *seqCtx, QWidget *parent)
+    : QDialog(parent), seqCtx(seqCtx)
 {
+    init(seqCtx->getSequenceObject());
+}
+
+void PhmmerSearchDialog::init(U2SequenceObject *seqObj){
     assert(NULL != seqObj);
     setupUi(this);
 
-    new HelpButton(this, buttonBox, "18223201");
+    new HelpButton(this, buttonBox, "20875105");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -184,6 +197,9 @@ void PhmmerSearchDialog::accept() {
         QMessageBox::critical(this, tr("Error: bad arguments!"), err);
         return;
     }
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(annotationsWidgetController->getModel().getAnnotationObject());
+    }
 
     AppContext::getTaskScheduler()->registerTopLevelTask(new PhmmerSearchTask(model.phmmerSettings));
 
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.h b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.h
index 4d8aada..547f1f3 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.h
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,6 +32,8 @@
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
+
 class PhmmerSearchDialogModel {
 public:
     PhmmerSearchSettings phmmerSettings;
@@ -42,6 +44,7 @@ class PhmmerSearchDialog : public QDialog, public Ui_PhmmerSearchDialog {
     Q_OBJECT
 public:
     PhmmerSearchDialog(U2SequenceObject *seqObj, QWidget *parent = NULL);
+    PhmmerSearchDialog(ADVSequenceObjectContext* seqCtx, QWidget *parent = NULL);
 
 private slots:
     void accept();
@@ -55,10 +58,12 @@ private slots:
 private:
     void setModelValues();
     void getModelValues();
+    void init(U2SequenceObject *seqObj);
     QString checkModel();
 
     PhmmerSearchDialogModel model;
     CreateAnnotationWidgetController *annotationsWidgetController;
+    ADVSequenceObjectContext* seqCtx;
 
     static const QString    QUERY_FILES_DIR;
     static const QString    DOM_E_PLUS_PREFIX;
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.cpp b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.cpp
index c975a04..38d4e2b 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.h b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.h
index 2c1b125..12c6f55 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.h
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.cpp b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.cpp
index 20176ff..dc01918 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.cpp
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,6 +39,8 @@
 #include "PhmmerSearchTask.h"
 #include "utils/ExportTasks.h"
 
+#include "HmmerBuildTask.h"
+
 namespace U2 {
 
 const QString PhmmerSearchTask::INPUT_SEQUENCE_FILENAME = "input_sequence.fa";
@@ -86,9 +88,11 @@ QList<Task *> PhmmerSearchTask::onSubTaskFinished(Task *subTask) {
         result << parseTask;
     } else if (subTask == parseTask) {
         removeTempDir();
-        Task *createAnnotationsTask = new CreateAnnotationsTask(settings.annotationTable, parseTask->getAnnotations(), settings.pattern.groupName);
-        createAnnotationsTask->setSubtaskProgressWeight(5);
-        result << createAnnotationsTask;
+        if (settings.annotationTable != NULL) {
+            Task *createAnnotationsTask = new CreateAnnotationsTask(settings.annotationTable, parseTask->getAnnotations(), settings.pattern.groupName);
+            createAnnotationsTask->setSubtaskProgressWeight(5);
+            result << createAnnotationsTask;
+        }
     }
 
     return result;
@@ -143,7 +147,7 @@ void PhmmerSearchTask::prepareWorkingDir() {
     }
 
     if (!tempDir.mkpath(settings.workingDir)) {
-        setError(tr("Cannot create a directory for temporary files."));
+        setError(tr("Cannot create a folder for temporary files."));
         return;
     }
 }
@@ -157,30 +161,32 @@ void PhmmerSearchTask::removeTempDir() const {
 QStringList PhmmerSearchTask::getArguments() const {
     QStringList arguments;
 
-    arguments << "-E" << QString::number(settings.e);
     if (PhmmerSearchSettings::OPTION_NOT_SET != settings.t) {
         arguments << "-T" << QString::number(settings.t);
+    } else {
+        arguments << "-E" << QString::number(settings.e);
     }
 
     if (PhmmerSearchSettings::OPTION_NOT_SET != settings.z) {
         arguments << "-Z" << QString::number(settings.z);
     }
 
-    arguments << "--domE" << QString::number(settings.domE);
     if (PhmmerSearchSettings::OPTION_NOT_SET != settings.domT) {
         arguments << "--domT" << QString::number(settings.domT);
-    }
+    } else if (PhmmerSearchSettings::OPTION_NOT_SET != settings.domE) {
+        arguments << "--domE" << QString::number(settings.domE);
+    }    
 
     if (PhmmerSearchSettings::OPTION_NOT_SET != settings.domZ) {
         arguments << "--domZ" << QString::number(settings.domZ);
     }
 
-    arguments << "--F1" << QString::number(settings.f1);
-    arguments << "--F2" << QString::number(settings.f2);
-    arguments << "--F3" << QString::number(settings.f3);
-
     if (settings.doMax) {
         arguments << "--max";
+    } else {
+        arguments << "--F1" << QString::number(settings.f1);
+        arguments << "--F2" << QString::number(settings.f2);
+        arguments << "--F3" << QString::number(settings.f3);
     }
 
     if (settings.noBiasFilter) {
@@ -221,7 +227,9 @@ void PhmmerSearchTask::prepareSequenceSaveTask() {
 }
 
 void PhmmerSearchTask::preparePhmmerTask() {
-    phmmerTask = new ExternalToolRunTask(HmmerSupport::PHMMER_TOOL, getArguments(), new ExternalToolLogParser);
+    //phmmerTask = new ExternalToolRunTask(HmmerSupport::PHMMER_TOOL, getArguments(), new Hmmer3LogParser());
+    phmmerTask = new ExternalToolRunTask(HmmerSupport::PHMMER_TOOL, getArguments(), new ExternalToolLogParser());
+    setListenerForTask(phmmerTask);
     phmmerTask->setSubtaskProgressWeight(85);
 }
 
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.h b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.h
index e8a165f..2cfa37a 100644
--- a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.h
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,6 +34,7 @@ class HmmerParseSearchResultsTask;
 class SaveSequenceTask;
 
 class PhmmerSearchTask : public ExternalToolSupportTask {
+    Q_OBJECT
 public:
     PhmmerSearchTask(const PhmmerSearchSettings &settings);
 
@@ -62,6 +63,6 @@ private:
     static const QString PER_DOMAIN_HITS_FILENAME;
 };
 
-}   // namespace U2
+} // U2
 
 #endif // _U2_PHMMER_SEARCH_TASK_H_
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.cpp b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.cpp
new file mode 100644
index 0000000..1454b76
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.cpp
@@ -0,0 +1,273 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include <QDomElement>
+#include <QFile>
+
+#include <U2Core/L10n.h>
+
+#include "HmmerSearchTaskTest.h"
+#include "PhmmerSearchTaskTest.h"
+#include "utils/OutputCollector.h"
+
+namespace U2 {
+
+/****************************************
+* GTest_UHMM3Phmmer
+****************************************/
+
+const QString GTest_UHMM3Phmmer::QUERY_FILENAME_TAG = "query";
+const QString GTest_UHMM3Phmmer::DB_FILENAME_TAG = "db";
+
+const QString GTest_UHMM3Phmmer::GAP_OPEN_PROBAB_OPTION_TAG = "popen";
+const QString GTest_UHMM3Phmmer::GAP_EXTEND_PROBAB_OPTION_TAG = "pextend";
+const QString GTest_UHMM3Phmmer::SUBST_MATR_NAME_OPTION_TAG = "substMatr";
+
+const QString GTest_UHMM3Phmmer::OUTPUT_DIR_TAG = "outputDir";
+
+const double BAD_DOUBLE_OPTION = -1.0;
+
+static void setDoubleOption(double & to, const QString & str, TaskStateInfo & ti) {
+    if (str.isEmpty()) {
+        return;
+    }
+    bool ok = false;
+    to = str.toDouble(&ok);
+    if (!ok) {
+        to = BAD_DOUBLE_OPTION;
+        ti.setError(QString("cannot_parse_double_from: %1").arg(str));
+    }
+}
+
+void GTest_UHMM3Phmmer::init(XMLTestFormat *tf, const QDomElement& el) {
+    Q_UNUSED(tf);
+
+    phmmerTask = NULL;
+    queryFilename = el.attribute(QUERY_FILENAME_TAG);
+    dbFilename = el.attribute(DB_FILENAME_TAG);
+
+    setSearchTaskSettings(searchSettings, el, stateInfo);
+    searchSettings.annotationTable = NULL;
+
+    setDoubleOption(searchSettings.popen, el.attribute(GAP_OPEN_PROBAB_OPTION_TAG), stateInfo);
+
+    setDoubleOption(searchSettings.pextend, el.attribute(GAP_EXTEND_PROBAB_OPTION_TAG), stateInfo);
+
+    outputDir = el.attribute(OUTPUT_DIR_TAG);
+
+    if (queryFilename.isEmpty()) {
+        stateInfo.setError(L10N::badArgument("query sequence filename"));
+        return;
+    }
+    queryFilename = env->getVar("COMMON_DATA_DIR") + "/" + queryFilename;
+
+    searchSettings.querySequenceUrl = queryFilename;
+}
+
+void GTest_UHMM3Phmmer::setAndCheckArgs() {
+    assert(!stateInfo.hasError());
+
+    if (dbFilename.isEmpty()) {
+        stateInfo.setError(L10N::badArgument("db sequence filename"));
+        return;
+    }
+    dbFilename = env->getVar("COMMON_DATA_DIR") + "/" + dbFilename;
+
+    if (outputDir.isEmpty()) {
+        stateInfo.setError("output_dir_is_empty");
+        return;
+    }
+
+    outputDir = env->getVar("TEMP_DATA_DIR") + "/" + outputDir;
+}
+
+static void setDoubleOption(double& num, const QDomElement& el, const QString& optionName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString numStr = el.attribute(optionName);
+    if (numStr.isEmpty()) {
+        return;
+
+    }
+    bool ok = false;
+    double ret = numStr.toDouble(&ok);
+    if (!ok) {
+        si.setError(QString("cannot_parse_double_number_from %1. Option: %2").arg(numStr).arg(optionName));
+        return;
+    }
+    num = ret;
+}
+
+static void setUseBitCutoffsOption(int& ret, const QDomElement& el, const QString& opName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString str = el.attribute(opName).toLower();
+    if ("ga" == str) {
+        ret = HmmerSearchSettings::p7H_GA;
+    } else if ("nc" == str) {
+        ret = HmmerSearchSettings::p7H_NC;
+    } else if ("tc" == str) {
+        ret = HmmerSearchSettings::p7H_TC;
+    } else if (!str.isEmpty()) {
+        si.setError(QString("unrecognized_value_in %1 option").arg(opName));
+    }
+}
+
+static void setBooleanOption(bool&ret, const QDomElement& el, const QString& opName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString str = el.attribute(opName).toLower();
+    if (!str.isEmpty() && "n" != str && "no" != str) {
+        ret = true;
+    } else {
+        ret = false;
+    }
+}
+
+static void setIntegerOption(int& num, const QDomElement& el, const QString& optionName, TaskStateInfo& si) {
+    if (si.hasError()) {
+        return;
+    }
+    QString numStr = el.attribute(optionName);
+    if (numStr.isEmpty()) {
+        return;
+    }
+
+    bool ok = false;
+    int ret = numStr.toInt(&ok);
+    if (!ok) {
+        si.setError(QString("cannot_parse_integer_number_from %1. Option: %2").arg(numStr).arg(optionName));
+        return;
+    }
+    num = ret;
+}
+
+void GTest_UHMM3Phmmer::setSearchTaskSettings(PhmmerSearchSettings& settings, const QDomElement& el, TaskStateInfo& si) {
+    setDoubleOption(settings.e, el, GTest_UHMM3Search::SEQ_E_OPTION_TAG, si);
+    setDoubleOption(settings.t, el, GTest_UHMM3Search::SEQ_T_OPTION_TAG, si);
+    setDoubleOption(settings.z, el, GTest_UHMM3Search::Z_OPTION_TAG, si);
+    setDoubleOption(settings.f1, el, GTest_UHMM3Search::F1_OPTION_TAG, si);
+    setDoubleOption(settings.f2, el, GTest_UHMM3Search::F2_OPTION_TAG, si);
+    setDoubleOption(settings.f3, el, GTest_UHMM3Search::F3_OPTION_TAG, si);
+    setDoubleOption(settings.domE, el, GTest_UHMM3Search::DOM_E_OPTION_TAG, si);
+    setDoubleOption(settings.domT, el, GTest_UHMM3Search::DOM_T_OPTION_TAG, si);
+    setDoubleOption(settings.domZ, el, GTest_UHMM3Search::DOM_Z_OPTION_TAG, si);
+
+    setBooleanOption(settings.doMax, el, GTest_UHMM3Search::MAX_OPTION_TAG, si);
+    setBooleanOption(settings.noBiasFilter, el, GTest_UHMM3Search::NOBIAS_OPTION_TAG, si);
+    setBooleanOption(settings.noNull2, el, GTest_UHMM3Search::NONULL2_OPTION_TAG, si);
+
+    setIntegerOption(settings.seed, el, GTest_UHMM3Search::SEED_OPTION_TAG, si);
+}
+
+void GTest_UHMM3Phmmer::prepare() {
+    assert(!hasError() && NULL == phmmerTask);
+    setAndCheckArgs();
+    if (hasError()) {
+        return;
+    }
+    searchSettings.workingDir = outputDir;
+    searchSettings.targetSequenceUrl = dbFilename;
+    searchSettings.querySequenceUrl = queryFilename;
+    phmmerTask = new PhmmerSearchTask(searchSettings);
+    phmmerTask->addListeners(QList<ExternalToolListener*>() << new OutputCollector());
+    addSubTask(phmmerTask);
+}
+
+QList<Task*> GTest_UHMM3Phmmer::onSubTaskFinished(Task* subTask) {
+    QList< Task* > res;
+    if (subTask == phmmerTask) {
+        OutputCollector *collector = dynamic_cast<OutputCollector*>(phmmerTask->getListener(0));
+        if (collector != NULL) {
+            QString hmmSearchLog = collector->getLog();
+            //TODO: check non empty log and file existence after writing
+            QFile file(searchSettings.workingDir + "/output.txt");
+            file.open(QIODevice::WriteOnly);
+            file.write(hmmSearchLog.toLatin1());
+            file.close();
+            delete collector;
+        }
+    }
+    return res;
+}
+
+Task::ReportResult GTest_UHMM3Phmmer::report() {
+    return ReportResult_Finished;
+}
+
+/****************************************
+* GTest_UHMM3PhmmerCompare
+****************************************/
+const QString GTest_UHMM3PhmmerCompare::ACTUAL_OUT_FILE_TAG = "actualOut";
+const QString GTest_UHMM3PhmmerCompare::TRUE_OUT_FILE_TAG = "trueOut";
+
+void GTest_UHMM3PhmmerCompare::init(XMLTestFormat *tf, const QDomElement& el) {
+    Q_UNUSED(tf);
+
+    trueOutFilename = el.attribute(TRUE_OUT_FILE_TAG);
+    actualOutFilename = el.attribute(ACTUAL_OUT_FILE_TAG);
+}
+
+void GTest_UHMM3PhmmerCompare::setAndCheckArgs() {
+    if (trueOutFilename.isEmpty()) {
+        stateInfo.setError(L10N::badArgument("true out filename"));
+        return;
+    }
+    trueOutFilename = env->getVar("COMMON_DATA_DIR") + "/" + trueOutFilename;
+
+    if (actualOutFilename.isEmpty()) {
+        stateInfo.setError("actual_out_filename_is_empty");
+        return;
+    }
+    actualOutFilename = env->getVar("TEMP_DATA_DIR") + "/" + actualOutFilename;
+}
+
+Task::ReportResult GTest_UHMM3PhmmerCompare::report() {
+    assert(!hasError());
+    setAndCheckArgs();
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+
+    UHMM3SearchResult trueRes;
+    UHMM3SearchResult actualRes;
+    try {
+        trueRes = GTest_UHMM3SearchCompare::getSearchResultFromOutput(trueOutFilename);
+        actualRes = GTest_UHMM3SearchCompare::getSearchResultFromOutput(actualOutFilename);
+    } catch (const QString& ex) {
+        stateInfo.setError(ex);
+    } catch (...) {
+        stateInfo.setError("undefined_error_occurred");
+    }
+
+    if (hasError()) {
+        return ReportResult_Finished;
+    }
+
+    GTest_UHMM3SearchCompare::generalCompareResults(actualRes, trueRes, stateInfo);
+
+    return ReportResult_Finished;
+}
+
+}
diff --git a/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.h b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.h
new file mode 100644
index 0000000..6b91026
--- /dev/null
+++ b/src/plugins/external_tool_support/src/hmmer/PhmmerSearchTaskTest.h
@@ -0,0 +1,96 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_PHMMER_SEARCH_TASK_TEST_H_
+#define _U2_PHMMER_SEARCH_TASK_TEST_H_
+
+#include "PhmmerSearchTask.h"
+
+#include <U2Test/GTest.h>
+#include <U2Test/XMLTestFormat.h>
+#include <U2Test/XMLTestUtils.h>
+
+namespace U2 {
+
+/*****************************************
+* Test for hmmer3 phmmer.
+* settings set by same tags from hmm3-search and hmm3-build tests + gaps probab. options and subst. matr
+* we test here 1<->1 queries
+*****************************************/
+class GTest_UHMM3Phmmer : public GTest {
+    Q_OBJECT
+public:
+    static const QString QUERY_FILENAME_TAG;
+    static const QString DB_FILENAME_TAG;
+
+    static const QString GAP_OPEN_PROBAB_OPTION_TAG;
+    static const QString GAP_EXTEND_PROBAB_OPTION_TAG;
+    static const QString SUBST_MATR_NAME_OPTION_TAG; /* name of registered substitution matrix. if empty - BLOSUM62 is used */
+
+    static const QString OUTPUT_DIR_TAG;
+
+public:
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_UHMM3Phmmer, "hmm3-phmmer");
+
+    void prepare();
+    ReportResult report();
+    QList<Task*> onSubTaskFinished(Task* subTask);
+
+private:
+    void setAndCheckArgs();
+
+    static void setSearchTaskSettings(PhmmerSearchSettings& set, const QDomElement& el, TaskStateInfo& si);
+
+private:
+    PhmmerSearchSettings    searchSettings;
+    QString                 queryFilename;
+    QString                 dbFilename;
+    PhmmerSearchTask *      phmmerTask;
+    QString                 outputDir;
+}; // GTest_UHMM3Phmmer
+
+/*****************************************
+* Test compares original hmmer3 phmmer results with UHMM3SearchResults
+*
+* Note, that you should make original hmmer3 to show results in academic version (e.g. 1.01e-23)
+*****************************************/
+
+class GTest_UHMM3PhmmerCompare : public GTest {
+    Q_OBJECT
+public:
+    static const QString ACTUAL_OUT_FILE_TAG;
+    static const QString TRUE_OUT_FILE_TAG;
+
+public:
+    SIMPLE_XML_TEST_BODY_WITH_FACTORY(GTest_UHMM3PhmmerCompare, "hmm3-phmmer-compare");
+    ReportResult report();
+
+private:
+    void setAndCheckArgs();
+
+private:
+    QString             actualOutFilename;
+    QString             trueOutFilename;
+}; // GTest_UHMM3PhmmerCompare
+
+}
+
+#endif
diff --git a/src/plugins/external_tool_support/src/java/JavaSupport.cpp b/src/plugins/external_tool_support/src/java/JavaSupport.cpp
index b82a75e..5d1ee48 100644
--- a/src/plugins/external_tool_support/src/java/JavaSupport.cpp
+++ b/src/plugins/external_tool_support/src/java/JavaSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,13 +21,18 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/ScriptingToolRegistry.h>
+#include <U2Core/U2SafePoints.h>
 
 #include "JavaSupport.h"
 
 namespace U2 {
 
+const QString JavaSupport::ARCHITECTURE = "architecture";
+const QString JavaSupport::ARCHITECTURE_X32 = "x32";
+const QString JavaSupport::ARCHITECTURE_X64 = "x64";
+
 JavaSupport::JavaSupport(const QString &name, const QString &path)
-: ExternalTool(name, path), architecture(x32)
+    : ExternalTool(name, path)
 {
     if (AppContext::getMainWindow()) {
         icon = QIcon(":external_tool_support/images/cmdline.png");
@@ -55,13 +60,15 @@ JavaSupport::JavaSupport(const QString &name, const QString &path)
 }
 
 void JavaSupport::getAdditionalParameters(const QString& output) {
+    Architecture architecture = x32;
     if (output.contains("64-Bit")) {
         architecture = x64;
     }
+    additionalInfo.insert(ARCHITECTURE, architecture2string(architecture));
 }
 
-U2::JavaSupport::Architecture JavaSupport::getArchitecture() const {
-    return architecture;
+JavaSupport::Architecture JavaSupport::getArchitecture() const {
+    return string2architecture(additionalInfo.value(ARCHITECTURE));
 }
 
 void JavaSupport::sl_toolValidationStatusChanged(bool isValid) {
@@ -69,4 +76,25 @@ void JavaSupport::sl_toolValidationStatusChanged(bool isValid) {
     ScriptingTool::onPathChanged(this, QStringList() << "-jar");
 }
 
+QString JavaSupport::architecture2string(Architecture architecture) {
+    switch (architecture) {
+    case JavaSupport::x32:
+        return ARCHITECTURE_X32;
+    case JavaSupport::x64:
+        return ARCHITECTURE_X64;
+    default:
+        FAIL("An unknown architecture", "");
+    }
+}
+
+JavaSupport::Architecture JavaSupport::string2architecture(const QString &string) {
+    if (ARCHITECTURE_X32 == string) {
+        return x32;
+    } else if (ARCHITECTURE_X64 == string) {
+        return x64;
+    } else {
+        return x32;
+    }
+}
+
 } // U2
diff --git a/src/plugins/external_tool_support/src/java/JavaSupport.h b/src/plugins/external_tool_support/src/java/JavaSupport.h
index df954e7..c25baee 100644
--- a/src/plugins/external_tool_support/src/java/JavaSupport.h
+++ b/src/plugins/external_tool_support/src/java/JavaSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,12 @@ private slots:
     void sl_toolValidationStatusChanged(bool isValid);
 
 private:
-    Architecture architecture;
+    static QString architecture2string(Architecture architecture);
+    static Architecture string2architecture(const QString &string);
+
+    static const QString ARCHITECTURE;
+    static const QString ARCHITECTURE_X32;
+    static const QString ARCHITECTURE_X64;
 };
 
 } // U2
diff --git a/src/plugins/external_tool_support/src/macs/MACSSettings.cpp b/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
index c1cf7eb..f9a30d0 100644
--- a/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/macs/MACSSettings.h b/src/plugins/external_tool_support/src/macs/MACSSettings.h
index e375ec5..2257bf1 100644
--- a/src/plugins/external_tool_support/src/macs/MACSSettings.h
+++ b/src/plugins/external_tool_support/src/macs/MACSSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/macs/MACSSupport.cpp b/src/plugins/external_tool_support/src/macs/MACSSupport.cpp
index d3e42e5..6e0e601 100644
--- a/src/plugins/external_tool_support/src/macs/MACSSupport.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/macs/MACSSupport.h b/src/plugins/external_tool_support/src/macs/MACSSupport.h
index 2fee90a..8bffb17 100644
--- a/src/plugins/external_tool_support/src/macs/MACSSupport.h
+++ b/src/plugins/external_tool_support/src/macs/MACSSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/macs/MACSTask.cpp b/src/plugins/external_tool_support/src/macs/MACSTask.cpp
index 6fd9055..a4c74fc 100644
--- a/src/plugins/external_tool_support/src/macs/MACSTask.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/external_tool_support/src/macs/MACSTask.h b/src/plugins/external_tool_support/src/macs/MACSTask.h
index b2ec3e5..c9da399 100644
--- a/src/plugins/external_tool_support/src/macs/MACSTask.h
+++ b/src/plugins/external_tool_support/src/macs/MACSTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/macs/MACSWorker.cpp b/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
index a4d7ebd..7948f54 100644
--- a/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
+++ b/src/plugins/external_tool_support/src/macs/MACSWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/FailTask.h>
@@ -230,7 +230,7 @@ class MACSInputSlotsValidator : public PortValidator {
 
     bool validate(const IntegralBusPort *port, ProblemList &problemList) const {
         QVariant busMap = port->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-        bool data = isBinded(busMap.value<QStrStrMap>(), TREATMENT_SLOT_ID);
+        bool data = isBinded(busMap.value<StrStrMap>(), TREATMENT_SLOT_ID);
         if (!data){
             QString dataName = slotName(port, TREATMENT_SLOT_ID);
             problemList.append(Problem(IntegralBusPort::tr("The slot must be not empty: '%1'").arg(dataName)));
@@ -238,8 +238,8 @@ class MACSInputSlotsValidator : public PortValidator {
         }
 
 
-        QString slot1Val = busMap.value<QStrStrMap>().value(TREATMENT_SLOT_ID);
-        QString slot2Val = busMap.value<QStrStrMap>().value(CONTROL_SLOT_ID);
+        QString slot1Val = busMap.value<StrStrMap>().value(TREATMENT_SLOT_ID);
+        QString slot2Val = busMap.value<StrStrMap>().value(CONTROL_SLOT_ID);
         U2OpStatusImpl os;
         const QList<IntegralBusSlot>& slots1 = IntegralBusSlot::listFromString(slot1Val, os);
         const QList<IntegralBusSlot>& slots2 = IntegralBusSlot::listFromString(slot2Val, os);
@@ -315,8 +315,8 @@ void MACSWorkerFactory::init() {
      QList<Attribute*> attrs;
      {
          Descriptor outDir(OUTPUT_DIR,
-             MACSWorker::tr("Output directory"),
-             MACSWorker::tr("Directory to save MACS output files."));
+             MACSWorker::tr("Output folder"),
+             MACSWorker::tr("Folder to save MACS output files."));
          Descriptor fileNames(FILE_NAMES,
              MACSWorker::tr("Name"),
              MACSWorker::tr("The name string of the experiment. MACS will use this string NAME"
@@ -582,7 +582,7 @@ QString MACSPrompter::composeRichDoc() {
 
     res.append(tr(" to call peaks."));
 
-    res.append(tr(" Outputs all files to <u>%1</u> directory").arg(dir));
+    res.append(tr(" Outputs all files to <u>%1</u> folder").arg(dir));
     if (getParameter(WIGGLE_OUTPUT).toBool()){
         res.append(tr(" and pileup with <u>%1</u> span").arg(wiggleSpan));
     }
diff --git a/src/plugins/external_tool_support/src/macs/MACSWorker.h b/src/plugins/external_tool_support/src/macs/MACSWorker.h
index a521bf3..deb8153 100644
--- a/src/plugins/external_tool_support/src/macs/MACSWorker.h
+++ b/src/plugins/external_tool_support/src/macs/MACSWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupport.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTSupport.cpp
index 8ecb1fd..2550dc6 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupport.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
@@ -35,7 +35,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
@@ -67,7 +67,7 @@ MAFFTSupport::MAFFTSupport(const QString& name, const QString& path) : ExternalT
 }
 
 void MAFFTSupport::sl_runWithExtFileSpecify(){
-    //Check that Clustal and tempory directory path defined
+    //Check that Clustal and tempory folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
@@ -114,18 +114,16 @@ void MAFFTSupport::sl_runWithExtFileSpecify(){
 
 ////////////////////////////////////////
 //ExternalToolSupportMSAContext
-MAFFTSupportContext::MAFFTSupportContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+MAFFTSupportContext::MAFFTSupportContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 
 }
 
 void MAFFTSupportContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-            return;
-    }
+    SAFE_POINT(msaed != NULL, "Invalid GObjectGiew", );
+    CHECK(msaed->getMaObject() != NULL, );
 
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     AlignMsaAction* alignAction = new AlignMsaAction(this, ET_MAFFT, view, tr("Align with MAFFT..."), 2000);
@@ -134,8 +132,8 @@ void MAFFTSupportContext::initViewContext(GObjectView* view) {
     addViewAction(alignAction);
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
 
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align_with_MAFFT()));
 }
 
@@ -149,7 +147,7 @@ void MAFFTSupportContext::buildMenu(GObjectView* view, QMenu* m) {
 }
 
 void MAFFTSupportContext::sl_align_with_MAFFT() {
-    //Check that MAFFT and tempory directory path defined
+    //Check that MAFFT and tempory folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(ET_MAFFT)->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(ET_MAFFT);
@@ -183,7 +181,7 @@ void MAFFTSupportContext::sl_align_with_MAFFT() {
     AlignMsaAction *action = qobject_cast<AlignMsaAction *>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMsaEditor();
-    MAlignmentObject* alignmentObject = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* alignmentObject = ed->getMaObject();
     SAFE_POINT(NULL != alignmentObject, "Alignment object is NULL during aligning with MAFFT!",);
     SAFE_POINT(!alignmentObject->isStateLocked(), "Alignment object is locked during aligning with MAFFT!",);
 
@@ -196,7 +194,7 @@ void MAFFTSupportContext::sl_align_with_MAFFT() {
         return;
     }
 
-    MAFFTSupportTask* mAFFTSupportTask = new MAFFTSupportTask(alignmentObject->getMAlignment(), GObjectReference(alignmentObject), settings);
+    MAFFTSupportTask* mAFFTSupportTask = new MAFFTSupportTask(alignmentObject->getMultipleAlignment(), GObjectReference(alignmentObject), settings);
     connect(alignmentObject, SIGNAL(destroyed()), mAFFTSupportTask, SLOT(cancel()));
     AppContext::getTaskScheduler()->registerTopLevelTask(mAFFTSupportTask);
 
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupport.h b/src/plugins/external_tool_support/src/mafft/MAFFTSupport.h
index 76097fa..9ad49bd 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupport.h
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
index 0412b03..ee47c42 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ MAFFTSupportRunDialog::MAFFTSupportRunDialog(MAFFTSupportTaskSettings& _settings
     QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223230");
+    new HelpButton(this, buttonBox, "20875134");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -71,7 +71,7 @@ MAFFTWithExtFileSpecifySupportRunDialog::MAFFTWithExtFileSpecifySupportRunDialog
     saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223230");
+    new HelpButton(this, buttonBox, "20875134");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -84,7 +84,7 @@ MAFFTWithExtFileSpecifySupportRunDialog::MAFFTWithExtFileSpecifySupportRunDialog
 void MAFFTWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
index 69a9a77..65bc701 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.cpp
index 75543da..6b870d6 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include "MAFFTSupportTask.h"
 #include "MAFFTSupport.h"
@@ -35,7 +35,7 @@
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -55,9 +55,9 @@ void MAFFTSupportTaskSettings::reset() {
     inputFilePath="";
 }
 
-MAFFTSupportTask::MAFFTSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const MAFFTSupportTaskSettings& _settings)
+MAFFTSupportTask::MAFFTSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const MAFFTSupportTaskSettings& _settings)
     : ExternalToolSupportTask("Run MAFFT alignment task", TaskFlags_NR_FOSCOE),
-      inputMsa(_inputMsa),
+      inputMsa(_inputMsa->getExplicitCopy()),
       objRef(_objRef),
       tmpDoc(NULL),
       logParser(NULL),
@@ -68,8 +68,8 @@ MAFFTSupportTask::MAFFTSupportTask(const MAlignment& _inputMsa, const GObjectRef
       lock(NULL)
 {
     GCOUNTER( cvar, tvar, "MAFFTSupportTask" );
-    resultMA.setAlphabet(inputMsa.getAlphabet());
-    resultMA.setName(inputMsa.getName());
+    resultMA->setAlphabet(inputMsa->getAlphabet());
+    resultMA->setName(inputMsa->getName());
 }
 
 MAFFTSupportTask::~MAFFTSupportTask() {
@@ -81,7 +81,7 @@ MAFFTSupportTask::~MAFFTSupportTask() {
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
                 CHECK(NULL != alObj, );
                 if(alObj->isStateLocked()) {
                     alObj->unlockState(lock);
@@ -99,15 +99,15 @@ void MAFFTSupportTask::prepare(){
     if (objRef.isValid()) {
         GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
         if (NULL != obj) {
-            MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalW results!",);
+            MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalW results!",);
             lock = new StateLock("ClustalWAligment");
             alObj->lockState(lock);
         }
     }
 
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
 
     QString tmpDirName = "MAFFT_"+QString::number(this->getTaskId())+"_"+
                          QDate::currentDate().toString("dd.MM.yyyy")+"_"+
@@ -124,12 +124,12 @@ void MAFFTSupportTask::prepare(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this directory."));
+            stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this folder."));
             return;
         }
     }
     if (!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
 
@@ -171,7 +171,7 @@ QList<Task*> MAFFTSupportTask::onSubTaskFinished(Task* subTask) {
             arguments <<"--maxiterate"<<QString::number(settings.maxNumberIterRefinement);
         }
         arguments <<url;
-        logParser = new MAFFTLogParser(inputMsa.getNumRows(), settings.maxNumberIterRefinement, outputUrl);
+        logParser = new MAFFTLogParser(inputMsa->getNumRows(), settings.maxNumberIterRefinement, outputUrl);
         connect(logParser, SIGNAL(si_progressUndefined()), SLOT(sl_progressUndefined()));
         mAFFTTask = new ExternalToolRunTask(ET_MAFFT, arguments, logParser);
         setListenerForTask(mAFFTTask);
@@ -208,28 +208,28 @@ QList<Task*> MAFFTSupportTask::onSubTaskFinished(Task* subTask) {
             emit si_stateChanged(); //TODO: task can't emit this signal!
             return res;
         }
-        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa.getRowNames());
+        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa->getRowNames());
         SAFE_POINT( renamed, "Failed to restore initial row names!", res);
 
         // If an alignment object has been specified, save the result to it
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying MAFFT results!", res);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying MAFFT results!", res);
 
                 QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(inputMsa, resultMA, stateInfo);
                 CHECK_OP(stateInfo, res);
 
-                if (rowsOrder.count() != inputMsa.getNumRows()) {
+                if (rowsOrder.count() != inputMsa->getNumRows()) {
                     stateInfo.setError("Unexpected number of rows in the result multiple alignment!");
                     return res;
                 }
 
                 QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-                for (int i = 0, n = resultMA.getNumRows(); i < n; ++i) {
-                    qint64 rowId = resultMA.getRow(i).getRowDBInfo().rowId;
-                    const QList<U2MsaGap>& newGapModel = resultMA.getRow(i).getGapModel();
+                for (int i = 0, n = resultMA->getNumRows(); i < n; ++i) {
+                    qint64 rowId = resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+                    const QList<U2MsaGap>& newGapModel = resultMA->getMsaRow(i)->getGapModel();
                     rowsGapModel.insert(rowId, newGapModel);
                 }
 
@@ -243,7 +243,7 @@ QList<Task*> MAFFTSupportTask::onSubTaskFinished(Task* subTask) {
                         lock = NULL;
                     }
                     else {
-                        stateInfo.setError("MAlignment object has been changed");
+                        stateInfo.setError("MultipleSequenceAlignment object has been changed");
                         return res;
                     }
 
@@ -255,11 +255,11 @@ QList<Task*> MAFFTSupportTask::onSubTaskFinished(Task* subTask) {
                         return res;
                     }
 
-                    alObj->updateGapModel(rowsGapModel, stateInfo);
+                    alObj->updateGapModel(stateInfo, rowsGapModel);
                     SAFE_POINT_OP(stateInfo, res);
 
-                    if (rowsOrder != inputMsa.getRowsIds()) {
-                        alObj->updateRowsOrder(rowsOrder, stateInfo);
+                    if (rowsOrder != inputMsa->getRowsIds()) {
+                        alObj->updateRowsOrder(stateInfo, rowsOrder);
                         SAFE_POINT_OP(stateInfo, res);
                     }
                 }
@@ -293,7 +293,7 @@ Task::ReportResult MAFFTSupportTask::report() {
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Can not remove directory for temporary files."));
+            stateInfo.setError(tr("Can not remove folder for temporary files."));
             emit si_stateChanged();
         }
     }
@@ -322,7 +322,7 @@ MAFFTWithExtFileSpecifySupportTask::~MAFFTWithExtFileSpecifySupportTask(){
 void MAFFTWithExtFileSpecifySupportTask::prepare(){
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(settings.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -353,18 +353,18 @@ QList<Task*> MAFFTWithExtFileSpecifySupportTask::onSubTaskFinished(Task* subTask
         currentDocument = loadDocumentTask->takeDocument();
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
 
         // Launch the task, objRef is empty - the input document maybe not in project
-        mAFFTSupportTask = new MAFFTSupportTask(mAObject->getMAlignment(), GObjectReference(), settings);
+        mAFFTSupportTask = new MAFFTSupportTask(mAObject->getMultipleAlignment(), GObjectReference(), settings);
         res.append(mAFFTSupportTask);
     }
     else if (subTask == mAFFTSupportTask) {
         // Set the result alignment to the alignment object of the current document
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject->copyGapModel(mAFFTSupportTask->resultMA.getRows());
+        mAObject->updateGapModel(mAFFTSupportTask->resultMA->getMsaRows());
 
         // Save the current document
         saveDocumentTask = new SaveDocumentTask(currentDocument,
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.h b/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.h
index a328e5b..4546b76 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.h
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,12 @@
 #ifndef _U2_MAFFT_SUPPORT_TASK_H
 #define _U2_MAFFT_SUPPORT_TASK_H
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/GObjectReference.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Task.h>
 
@@ -67,7 +67,7 @@ class MAFFTSupportTask : public ExternalToolSupportTask {
     Q_OBJECT
     Q_DISABLE_COPY(MAFFTSupportTask)
 public:
-    MAFFTSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const MAFFTSupportTaskSettings& settings);
+    MAFFTSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const MAFFTSupportTaskSettings& settings);
     ~MAFFTSupportTask();
 
     void prepare();
@@ -75,13 +75,13 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  resultMA;
 
 private slots:
     void sl_progressUndefined();
 
 private:
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
     GObjectReference            objRef;
     QPointer<Document>          tmpDoc;
     QString                     url;
@@ -94,7 +94,7 @@ private:
     QPointer<StateLock>         lock;
 };
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class MAFFTWithExtFileSpecifySupportTask : public Task {
     Q_OBJECT
@@ -107,7 +107,7 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*           mAObject;
+    MultipleSequenceAlignmentObject*           mAObject;
     Document*                   currentDocument;
     bool                        cleanDoc;
 
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTWorker.cpp b/src/plugins/external_tool_support/src/mafft/MAFFTWorker.cpp
index 70fe098..115537c 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTWorker.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,28 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "MAFFTWorker.h"
-#include "TaskLocalStorage.h"
-#include "MAFFTSupport.h"
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Designer/DelegateEditors.h>
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/NoFailTaskWrapper.h>
+#include <U2Lang/WorkflowEnv.h>
 
-#include <U2Designer/DelegateEditors.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
-
-#include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/Log.h>
-#include <U2Core/FailTask.h>
+#include "MAFFTSupport.h"
+#include "MAFFTWorker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -76,8 +77,8 @@ void MAFFTWorkerFactory::init() {
                    MAFFTWorker::tr("Maximum number of iterative refinement."));
     Descriptor etp(EXT_TOOL_PATH, MAFFTWorker::tr("Tool Path"),
                    MAFFTWorker::tr("External tool path."));
-    Descriptor tdp(TMP_DIR_PATH, MAFFTWorker::tr("Temporary directory"),
-                   MAFFTWorker::tr("Directory for temporary files."));
+    Descriptor tdp(TMP_DIR_PATH, MAFFTWorker::tr("Temporary folder"),
+                   MAFFTWorker::tr("Folder for temporary files."));
 
     a << new Attribute(gop, BaseTypes::NUM_TYPE(), false, QVariant(1.53));
     a << new Attribute(gep, BaseTypes::NUM_TYPE(), false, QVariant(0.00));
@@ -165,12 +166,12 @@ Task* MAFFTWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if (msa.isEmpty()) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to MAFFT.").arg(msa.getName()));
+        if (msa->isEmpty()) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to MAFFT.").arg(msa->getName()));
             return NULL;
         }
         MAFFTSupportTask* supportTask = new MAFFTSupportTask(msa, GObjectReference(), cfg);
@@ -199,13 +200,13 @@ void MAFFTWorker::sl_taskFinished() {
 
     SAFE_POINT(NULL != output, "NULL output!", );
     send(t->resultMA);
-    algoLog.info(tr("Aligned %1 with MAFFT").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with MAFFT").arg(t->resultMA->getName()));
 }
 
 void MAFFTWorker::cleanup() {
 }
 
-void MAFFTWorker::send(const MAlignment &msa) {
+void MAFFTWorker::send(const MultipleSequenceAlignment &msa) {
     SAFE_POINT(NULL != output, "NULL output!", );
     SharedDbiDataHandler msaId = context->getDataStorage()->putAlignment(msa);
     QVariantMap m;
diff --git a/src/plugins/external_tool_support/src/mafft/MAFFTWorker.h b/src/plugins/external_tool_support/src/mafft/MAFFTWorker.h
index 01d48e4..88adb1b 100644
--- a/src/plugins/external_tool_support/src/mafft/MAFFTWorker.h
+++ b/src/plugins/external_tool_support/src/mafft/MAFFTWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@ private:
     MAFFTSupportTaskSettings cfg;
 
 private:
-    void send(const MAlignment &msa);
+    void send(const MultipleSequenceAlignment &msa);
 };
 
 class MAFFTWorkerFactory : public DomainFactory {
diff --git a/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.cpp b/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.cpp
index e6b049e..4491616 100644
--- a/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.cpp
+++ b/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,43 +19,43 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 #include <QTemporaryFile>
 
-#include "MAFFTSupport.h"
-#include "MAFFTSupportTask.h"
-#include "MafftAddToAlignmentTask.h"
+#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
+#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
 
+#include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/Counter.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/UserApplicationsSettings.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/ExternalToolRegistry.h>
 #include <U2Core/GObjectUtils.h>
+#include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentExporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MsaDbiUtils.h>
 #include <U2Core/MSAUtils.h>
-#include <U2Core/IOAdapterUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/AddDocumentTask.h>
+#include <U2Core/MsaDbiUtils.h>
+#include <U2Core/MultipleSequenceAlignmentExporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/ProjectModel.h>
 #include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2Mod.h>
 #include <U2Core/U2OpStatusUtils.h>
-
-#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
-#include <U2Algorithm/BaseAlignmentAlgorithmsIds.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Gui/OpenViewTask.h>
 
+#include "MAFFTSupport.h"
+#include "MAFFTSupportTask.h"
+#include "MafftAddToAlignmentTask.h"
+
 namespace U2 {
 
 /************************************************************************/
@@ -75,11 +75,11 @@ MafftAddToAlignmentTask::MafftAddToAlignmentTask(const AlignSequencesToAlignment
 
     SAFE_POINT_EXT(settings.isValid(), setError("Incorrect settings were passed into MafftAddToAlignmentTask"), );
 
-    MAlignmentExporter alnExporter;
+    MultipleSequenceAlignmentExporter alnExporter;
     inputMsa = alnExporter.getAlignment(settings.msaRef.dbiRef, settings.msaRef.entityId, stateInfo);
-    int rowNumber = inputMsa.getNumRows();
+    int rowNumber = inputMsa->getNumRows();
     for (int i = 0; i < rowNumber; i++) {
-        inputMsa.renameRow(i, QString::number(i));
+        inputMsa->renameRow(i, QString::number(i));
     }
 }
 
@@ -96,10 +96,11 @@ static QString generateTmpFileUrl(const QString &filePathAndPattern) {
     return result;
 }
 
-void MafftAddToAlignmentTask::prepare()
-{
+void MafftAddToAlignmentTask::prepare() {
     algoLog.info(tr("Align sequences to an existing alignment by MAFFT started"));
 
+    MSAUtils::removeColumnsWithGaps(inputMsa, inputMsa->getNumRows());
+
     tmpDirUrl = ExternalToolSupportUtils::createTmpDir("add_to_alignment", stateInfo);
 
     QString tmpAddedUrl = generateTmpFileUrl(tmpDirUrl + QDir::separator() + "XXXXXXXXXXXXXXXX_add.fa");;
@@ -109,7 +110,7 @@ void MafftAddToAlignmentTask::prepare()
     Document* tempDocument = dfd->createNewLoadedDocument(IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE), GUrl(tmpAddedUrl), stateInfo);
 
     QListIterator<QString> namesIterator(settings.addedSequencesNames);
-    int currentRowNumber = inputMsa.getNumRows();
+    int currentRowNumber = inputMsa->getNumRows();
     foreach(const U2EntityRef& sequenceRef, settings.addedSequencesRefs) {
         uniqueIdsToNames[QString::number(currentRowNumber)] = namesIterator.next();
         U2SequenceObject seqObject(QString::number(currentRowNumber), sequenceRef);
@@ -162,7 +163,7 @@ QList<Task*> MafftAddToAlignmentTask::onSubTaskFinished(Task* subTask) {
         arguments << saveAlignmentDocumentTask->getDocument()->getURLString();
         QString outputUrl = resultFilePath + ".out.fa";
 
-        logParser = new MAFFTLogParser(inputMsa.getNumRows(), 1, outputUrl);
+        logParser = new MAFFTLogParser(inputMsa->getNumRows(), 1, outputUrl);
         mafftTask = new ExternalToolRunTask(ET_MAFFT, arguments, logParser);
         mafftTask->setStandartOutputFile(resultFilePath);
         mafftTask->setSubtaskProgressWeight(65);
@@ -197,35 +198,52 @@ void MafftAddToAlignmentTask::run() {
     CHECK_OP(stateInfo, );
     tpm = Progress_Manual;
     SAFE_POINT(loadTmpDocumentTask != NULL, QString("Load task is NULL"), );
-    tmpDoc = QSharedPointer<Document>(loadTmpDocumentTask->takeDocument());
+    tmpDoc = QSharedPointer<Document>(loadTmpDocumentTask->takeDocument(false));
     SAFE_POINT(tmpDoc != NULL, QString("output document '%1' not loaded").arg(tmpDoc->getURLString()), );
     SAFE_POINT(tmpDoc->getObjects().length()!=0, QString("no objects in output document '%1'").arg(tmpDoc->getURLString()), );
 
     U2MsaDbi *dbi = modStep->getDbi()->getMsaDbi();
 
-    QStringList rowNames = inputMsa.getRowNames();
+    QStringList rowNames = inputMsa->getRowNames();
 
     int posInMsa = 0;
     int objectsCount = tmpDoc->getObjects().count();
 
     dbi->updateMsaAlphabet(settings.msaRef.entityId, settings.alphabet, stateInfo);
     CHECK_OP(stateInfo, );
+    QMap<QString, qint64> uniqueNamesToIds;
+    foreach (const MultipleSequenceAlignmentRow& refRow, inputMsa->getMsaRows()) {
+        uniqueNamesToIds[refRow->getName()] = refRow->getRowId();
+    }
     foreach(GObject* object, tmpDoc->getObjects()) {
         if (hasError() || isCanceled()) {
             return;
         }
         stateInfo.setProgress(70 + 30 * posInMsa / objectsCount);
         U2SequenceObject* sequenceObject = qobject_cast<U2SequenceObject*>(object);
-        if(!rowNames.contains(sequenceObject->getSequenceName())) {
+        if(!rowNames.contains(sequenceObject->getSequenceName())) { //inserting new rows
             sequenceObject->setGObjectName(uniqueIdsToNames[sequenceObject->getGObjectName()]);
             SAFE_POINT(sequenceObject != NULL, "U2SequenceObject is null", );
             U2MsaRow row = MSAUtils::copyRowFromSequence(sequenceObject, settings.msaRef.dbiRef, stateInfo);
             dbi->addRow(settings.msaRef.entityId, posInMsa, row, stateInfo);
             CHECK_OP(stateInfo, );
+        }else{ //maybe need add leading gaps to original rows
+            U2MsaRow row = MSAUtils::copyRowFromSequence(sequenceObject, settings.msaRef.dbiRef, stateInfo);
+            qint64 rowId = uniqueNamesToIds.value(sequenceObject->getSequenceName(), -1);
+            if (rowId == -1){
+                stateInfo.setError(tr("Row for updating doesn't found"));
+                CHECK_OP(stateInfo, );
+            }
+
+            dbi->updateGapModel(settings.msaRef.entityId, rowId, row.gaps, stateInfo);
+            CHECK_OP(stateInfo, );
         }
         posInMsa++;
     }
 
+    MsaDbiUtils::trim(settings.msaRef, stateInfo);
+    CHECK_OP(stateInfo, );
+
     if (hasError()) {
         return;
     }
@@ -240,7 +258,7 @@ Task::ReportResult MafftAddToAlignmentTask::report() {
 }
 
 bool MafftAddToAlignmentTask::useMemsaveOption() const {
-    qint64 maxLength = qMax(qint64(inputMsa.getLength()), settings.maxSequenceLength);
+    qint64 maxLength = qMax(qint64(inputMsa->getLength()), settings.maxSequenceLength);
     qint64 memoryInMB = 10 * maxLength * maxLength / 1024 / 1024;
     AppResourcePool* pool = AppContext::getAppSettings()->getAppResourcePool();
     return memoryInMB > qMin(pool->getMaxMemorySizeInMB(), pool->getTotalPhysicalMemory() / 2);
diff --git a/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.h b/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.h
index 39ca555..a04278c 100644
--- a/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.h
+++ b/src/plugins/external_tool_support/src/mafft/MafftAddToAlignmentTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Algorithm/AlignSequencesToAlignmentTaskSettings.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/LoadDocumentTask.h>
 #include "MafftAddToAlignmentTask.h"
 #include "MAFFTSupportTask.h"
@@ -50,7 +50,7 @@ private:
 
     AlignSequencesToAlignmentTaskSettings settings;
 
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
 
     QSharedPointer<Document>    tmpDoc;
     QString                     url;
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.cpp b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.cpp
index a01c2c1..a8785dd 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.cpp
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
@@ -55,11 +55,11 @@ namespace U2 {
 #define MR_BAYES_TEMPR "/mb_tempr"
 #define MR_BAYES_SEED "/mb_seed"
 
-MrBayesWidget::MrBayesWidget(const MAlignment &ma, QWidget *parent) :
+MrBayesWidget::MrBayesWidget(const MultipleSequenceAlignment &ma, QWidget *parent) :
     CreatePhyTreeWidget(parent)
 {
     setupUi(this);
-    DNAAlphabetType alphabetType = ma.getAlphabet()->getType();
+    DNAAlphabetType alphabetType = ma->getAlphabet()->getType();
     if ((alphabetType == DNAAlphabet_RAW) || (alphabetType == DNAAlphabet_NUCL)){
         isAminoAcidAlphabet = false;
         modelLabel1->setText(tr("Substitution model"));
@@ -168,7 +168,7 @@ int MrBayesWidget::getRandomSeed(){
 }
 
 bool MrBayesWidget::checkSettings(QString &messsage, const CreatePhyTreeSettings &settings) {
-    //Check that MrBayes and tempory directory path defined
+    //Check that MrBayes and tempory folder path defined
     ExternalToolRegistry* reg = AppContext::getExternalToolRegistry();
     ExternalTool* mb= reg->getByName(ET_MRBAYES);
     assert(mb);
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
index 3f9b6fe..3f2e18f 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesDialogWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _U2_MR_BAYES_DIALOG_WIDGET_
 
 #include <U2Core/AppContext.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <U2View/CreatePhyTreeWidget.h>
 
@@ -34,7 +34,7 @@ namespace U2 {
 class MrBayesWidget : public CreatePhyTreeWidget, private Ui_MrBayesDialog {
    Q_OBJECT
 public:
-    MrBayesWidget(const MAlignment &ma, QWidget *parent);
+    MrBayesWidget(const MultipleSequenceAlignment &ma, QWidget *parent);
 
     void fillSettings(CreatePhyTreeSettings& settings);
     void storeSettings();
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.cpp b/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.cpp
index f48b3f0..1ea28a5 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.cpp
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -72,11 +72,11 @@ MrBayesSupport::MrBayesSupport(const QString& name, const QString& path) : Exter
 ////////////////////////////////////////
 //MrBayesAdapter
 
-Task * MrBayesAdapter::createCalculatePhyTreeTask(const MAlignment &ma, const CreatePhyTreeSettings &s) {
+Task * MrBayesAdapter::createCalculatePhyTreeTask(const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &s) {
     return new MrBayesSupportTask(ma, s);
 }
 
-CreatePhyTreeWidget * MrBayesAdapter::createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent) {
+CreatePhyTreeWidget * MrBayesAdapter::createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent) {
     return new MrBayesWidget(ma, parent);
 }
 
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.h b/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.h
index f0353f7..bb1c5a0 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.h
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,8 +42,8 @@ public:
 
 class MrBayesAdapter : public PhyTreeGenerator{
 public:
-    Task * createCalculatePhyTreeTask(const MAlignment &ma, const CreatePhyTreeSettings &s) ;
-    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent = NULL);
+    Task * createCalculatePhyTreeTask(const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &s) ;
+    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent = NULL);
 };
 
 class MrBayesModelTypes{
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.cpp b/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.cpp
index 7f63657..c10625f 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.cpp
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QFile>
+#include <QTextStream>
 
 #include "MrBayesTask.h"
 
@@ -38,7 +38,7 @@ namespace U2 {
 #define TMPFILENAME "tmp.nex"
 #define TREEFILEEXT ".con.tre"
 
-MrBayesPrepareDataForCalculation::MrBayesPrepareDataForCalculation(const MAlignment& _ma, const CreatePhyTreeSettings& s, const QString& url)
+MrBayesPrepareDataForCalculation::MrBayesPrepareDataForCalculation(const MultipleSequenceAlignment& _ma, const CreatePhyTreeSettings& s, const QString& url)
 :Task(tr("Generating input file for MrBayes"), TaskFlags_NR_FOSCOE), ma(_ma), settings(s), tmpDirUrl(url){
 
     saveDocumentTask = NULL;
@@ -82,7 +82,7 @@ QList<Task*> MrBayesPrepareDataForCalculation::onSubTaskFinished(Task* subTask){
     return res;
 }
 
-MrBayesSupportTask::MrBayesSupportTask(const MAlignment& _ma, const CreatePhyTreeSettings& s)
+MrBayesSupportTask::MrBayesSupportTask(const MultipleSequenceAlignment& _ma, const CreatePhyTreeSettings& s)
 :PhyTreeGeneratorTask(_ma, s)
 {
     GCOUNTER( cvar, tvar, "MrBayesSupportTask" );
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.h b/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.h
index 50553c1..58cf8fe 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.h
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,12 +38,12 @@ class LoadDocumentTask;
 class MrBayesPrepareDataForCalculation :public Task{
     Q_OBJECT
 public:
-    MrBayesPrepareDataForCalculation(const MAlignment& _ma, const CreatePhyTreeSettings& s, const QString& url);
+    MrBayesPrepareDataForCalculation(const MultipleSequenceAlignment& _ma, const CreatePhyTreeSettings& s, const QString& url);
     void prepare();
     QList<Task*> onSubTaskFinished(Task* subTask);
     QString getInputFileUrl() {return inputFileForMrBayes;}
 private:
-    const MAlignment&           ma;
+    const MultipleSequenceAlignment&           ma;
     CreatePhyTreeSettings       settings;
     QString                     tmpDirUrl;
     SaveAlignmentTask*          saveDocumentTask;
@@ -82,7 +82,7 @@ private:
 class MrBayesSupportTask : public PhyTreeGeneratorTask{
     Q_OBJECT
 public:
-    MrBayesSupportTask(const MAlignment& _ma, const CreatePhyTreeSettings& s);
+    MrBayesSupportTask(const MultipleSequenceAlignment& _ma, const CreatePhyTreeSettings& s);
     void prepare();
     Task::ReportResult report();
     QList<Task*> onSubTaskFinished(Task* subTask);
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.cpp b/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.cpp
index f7d5a3f..12c4be6 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.cpp
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,11 +30,11 @@
 #include <U2Core/Log.h>
 
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/PhyTreeObject.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 #include <U2Core/AppContext.h>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
@@ -74,19 +74,19 @@ void GTest_MrBayes::prepare() {
         return;
     }
 
-    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     assert(obj!=NULL);
-    MAlignmentObject* ma = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* ma = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(ma==NULL){
         stateInfo.setError(  QString("error can't cast to multiple alignment from GObject") );
         return;
@@ -102,7 +102,7 @@ void GTest_MrBayes::prepare() {
 
     QList<GObject*> list2 = treeDoc->findGObjectByType(GObjectTypes::PHYLOGENETIC_TREE);
     if (list2.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
@@ -130,7 +130,7 @@ void GTest_MrBayes::prepare() {
         "sumt burnin=10;\n"
         "End;\n").arg(mbSeed);
 
-    task = new PhyTreeGeneratorLauncherTask(input->getMAlignment(), settings);
+    task = new PhyTreeGeneratorLauncherTask(input->getMultipleAlignment(), settings);
     addSubTask(task);
 }
 
diff --git a/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.h b/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.h
index 723daf6..2f14cb5 100644
--- a/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.h
+++ b/src/plugins/external_tool_support/src/mrbayes/MrBayesTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,14 +26,14 @@
 #include <U2Core/GObject.h>
 #include <U2Algorithm/PhyTreeGeneratorTask.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <QFileInfo>
 #include <QList>
 
 namespace U2{
 
 class PhyTreeObject;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class GTest_MrBayes : public GTest {
     Q_OBJECT
@@ -50,7 +50,7 @@ private:
     Document* maDoc;
     Document* treeDoc;
     PhyTreeGeneratorLauncherTask* task;
-    MAlignmentObject* input;
+    MultipleSequenceAlignmentObject* input;
     PhyTreeObject* treeObjFromDoc;
 };
 
diff --git a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp
index 30d3387..0b53964 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h
index 416e460..0151952 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Gene2PeakFormatLoader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@ class IOAdapter;
 class U2OpStatus;
 
 class Gene2PeakFormatLoader : public QObject {
+    Q_OBJECT
 public:
     Gene2PeakFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter);
 
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp
index 83b3c06..89aa496 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h
index 865b591..c257303 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneFormatLoader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@ class IOAdapter;
 class U2OpStatus;
 
 class Peak2GeneFormatLoader : public QObject {
+    Q_OBJECT
 public:
     Peak2GeneFormatLoader(U2OpStatus &os, IOAdapter *ioAdapter);
 
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
index 527e6e1..b0b9563 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
index 72b1ce7..8c2db88 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.cpp
index cf06885..f34c3c1 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.h
index 262571f..4fa4d48 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
index 8ba9375..3991a2d 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
index 3563e05..43874fb 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
index c15241a..a6db359 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.h b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.h
index b721c91..8e0fda3 100644
--- a/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.h
+++ b/src/plugins/external_tool_support/src/peak2gene/Peak2GeneWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp
index 3ab4640..cc50f05 100644
--- a/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp
+++ b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
index 8736e89..fa51b9b 100644
--- a/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
+++ b/src/plugins/external_tool_support/src/peak2gene/TabulatedFormatReader.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #define _U2_TABULATED_FORMAT_READER_H_
 
 #include <QObject>
+#include <QStringList>
 
 namespace U2 {
 
@@ -30,6 +31,7 @@ class IOAdapter;
 class U2OpStatus;
 
 class TabulatedFormatReader : public QObject {
+    Q_OBJECT
 public:
     TabulatedFormatReader(U2OpStatus &os, IOAdapter *ioAdapter);
 
diff --git a/src/plugins/external_tool_support/src/perl/PerlSupport.cpp b/src/plugins/external_tool_support/src/perl/PerlSupport.cpp
index 552737e..6dde7e5 100644
--- a/src/plugins/external_tool_support/src/perl/PerlSupport.cpp
+++ b/src/plugins/external_tool_support/src/perl/PerlSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/perl/PerlSupport.h b/src/plugins/external_tool_support/src/perl/PerlSupport.h
index 9dec39e..12396ee 100644
--- a/src/plugins/external_tool_support/src/perl/PerlSupport.h
+++ b/src/plugins/external_tool_support/src/perl/PerlSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui b/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui
index a7b953e..b466dd0 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLDialog.ui
@@ -12,13 +12,13 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>509</width>
-    <height>251</height>
+    <width>600</width>
+    <height>268</height>
    </rect>
   </property>
   <property name="minimumSize">
    <size>
-    <width>0</width>
+    <width>600</width>
     <height>0</height>
    </size>
   </property>
@@ -62,25 +62,35 @@
       <attribute name="title">
        <string>Substitution Model</string>
       </attribute>
-      <layout class="QFormLayout" name="formLayout_4">
-       <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
-       </property>
-       <property name="fieldGrowthPolicy">
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
-       </property>
+      <layout class="QGridLayout" name="gridLayout_2">
        <item row="1" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_9">
-         <item>
-          <widget class="QLabel" name="subModel">
-           <property name="text">
-            <string>Substitution model</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QLabel" name="equilFreqLabel">
+         <property name="text">
+          <string>Equilibrium frequencies</string>
+         </property>
+        </widget>
        </item>
-       <item row="1" column="1">
+       <item row="0" column="0">
+        <widget class="QLabel" name="subModel">
+         <property name="text">
+          <string>Substitution model</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="3">
+        <widget class="QRadioButton" name="freqEmpRadio">
+         <property name="text">
+          <string>empirical</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">freqRbGroup</string>
+         </attribute>
+        </widget>
+       </item>
+       <item row="0" column="1" colspan="3">
         <widget class="QComboBox" name="subModelCombo">
          <property name="sizePolicy">
           <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -91,103 +101,96 @@
         </widget>
        </item>
        <item row="2" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_11">
-         <item>
-          <widget class="QLabel" name="equilFreqLabel">
-           <property name="text">
-            <string>Equilibrium frequencies</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QLabel" name="transLabel">
+         <property name="text">
+          <string>Transition / transversion ratio </string>
+         </property>
+        </widget>
        </item>
-       <item row="2" column="1">
-        <layout class="QHBoxLayout" name="horizontalLayout_16">
-         <property name="leftMargin">
-          <number>0</number>
+       <item row="1" column="2">
+        <widget class="QRadioButton" name="freqOptimRadio">
+         <property name="layoutDirection">
+          <enum>Qt::RightToLeft</enum>
          </property>
-         <item>
-          <widget class="QRadioButton" name="freqOptimRadio">
-           <property name="text">
-            <string>optimized</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QRadioButton" name="freqEmpRadio">
-           <property name="text">
-            <string>empirical</string>
-           </property>
-           <property name="checked">
-            <bool>true</bool>
-           </property>
-          </widget>
-         </item>
-        </layout>
+         <property name="text">
+          <string>optimized</string>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">freqRbGroup</string>
+         </attribute>
+        </widget>
        </item>
        <item row="4" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_13">
-         <item>
-          <widget class="QCheckBox" name="sitesCheckBox">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="toolTip">
-            <string>Check to set user value. 
-Uncheck to get the maximum likelihood estimate.</string>
-           </property>
-           <property name="text">
-            <string>Proportion of invariable sites</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QLabel" name="substitutionLabel">
+         <property name="text">
+          <string>Number of substitution rate categories</string>
+         </property>
+        </widget>
        </item>
-       <item row="5" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_14">
-         <item>
-          <widget class="QLabel" name="label_8">
-           <property name="text">
-            <string>Number of substitution rate categories</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item row="6" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_15">
-         <item>
-          <widget class="QCheckBox" name="gammaCheckBox">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="toolTip">
-            <string>Check to set user value. 
-Uncheck to get the maximum likelihood estimate.</string>
-           </property>
-           <property name="text">
-            <string>Gamma shape parameter</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+       <item row="3" column="3">
+        <widget class="QRadioButton" name="sitesEstimatedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="text">
+          <string>estimated</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">gammaRbGroup</string>
+         </attribute>
+        </widget>
        </item>
-       <item row="3" column="1">
+       <item row="5" column="3">
+        <widget class="QRadioButton" name="gammaEstimatedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="text">
+          <string>estimated</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">transitionRbGroup</string>
+         </attribute>
+        </widget>
+       </item>
+       <item row="2" column="2">
+        <widget class="QRadioButton" name="transFixedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::RightToLeft</enum>
+         </property>
+         <property name="text">
+          <string>fixed</string>
+         </property>
+         <property name="checked">
+          <bool>false</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">sitesRbGroup</string>
+         </attribute>
+        </widget>
+       </item>
+       <item row="2" column="1">
         <widget class="QSpinBox" name="tranSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
          <property name="minimumSize">
           <size>
            <width>100</width>
            <height>0</height>
           </size>
          </property>
-         <property name="specialValueText">
-          <string>estimated </string>
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
          </property>
          <property name="minimum">
           <number>-1</number>
@@ -200,38 +203,48 @@ Uncheck to get the maximum likelihood estimate.</string>
          </property>
         </widget>
        </item>
+       <item row="3" column="0">
+        <widget class="QLabel" name="sitesLabel">
+         <property name="text">
+          <string>Proportion of invariable sites</string>
+         </property>
+        </widget>
+       </item>
        <item row="4" column="1">
-        <widget class="QDoubleSpinBox" name="sitesSpinBox">
+        <widget class="QSpinBox" name="substitutionSpinBox">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
          <property name="minimumSize">
           <size>
            <width>100</width>
            <height>0</height>
           </size>
          </property>
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         </property>
          <property name="specialValueText">
           <string>estimated </string>
          </property>
          <property name="minimum">
-          <double>-0.010000000000000</double>
+          <number>1</number>
          </property>
          <property name="maximum">
-          <double>1.000000000000000</double>
-         </property>
-         <property name="singleStep">
-          <double>0.010000000000000</double>
+          <number>990000</number>
          </property>
          <property name="value">
-          <double>0.000000000000000</double>
+          <number>4</number>
          </property>
         </widget>
        </item>
-       <item row="5" column="1">
-        <widget class="QSpinBox" name="substitutionSpinBox">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
+       <item row="3" column="1">
+        <widget class="QDoubleSpinBox" name="sitesSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
          </property>
          <property name="minimumSize">
           <size>
@@ -239,30 +252,81 @@ Uncheck to get the maximum likelihood estimate.</string>
            <height>0</height>
           </size>
          </property>
-         <property name="specialValueText">
-          <string>estimated </string>
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
          </property>
          <property name="minimum">
-          <number>1</number>
+          <double>-0.010000000000000</double>
          </property>
          <property name="maximum">
-          <number>990000</number>
+          <double>1.000000000000000</double>
+         </property>
+         <property name="singleStep">
+          <double>0.010000000000000</double>
          </property>
          <property name="value">
-          <number>4</number>
+          <double>0.000000000000000</double>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="2">
+        <widget class="QRadioButton" name="gammaFixedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::RightToLeft</enum>
+         </property>
+         <property name="text">
+          <string>fixed</string>
+         </property>
+         <property name="checked">
+          <bool>false</bool>
          </property>
+         <attribute name="buttonGroup">
+          <string notr="true">transitionRbGroup</string>
+         </attribute>
         </widget>
        </item>
-       <item row="6" column="1">
+       <item row="3" column="2">
+        <widget class="QRadioButton" name="sitesFixedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="layoutDirection">
+          <enum>Qt::RightToLeft</enum>
+         </property>
+         <property name="text">
+          <string>fixed</string>
+         </property>
+         <property name="checked">
+          <bool>false</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">gammaRbGroup</string>
+         </attribute>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QLabel" name="gammaLabel">
+         <property name="text">
+          <string>Gamma shape parameter</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="1">
         <widget class="QSpinBox" name="gammaSpinBox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
          <property name="minimumSize">
           <size>
            <width>100</width>
            <height>0</height>
           </size>
          </property>
-         <property name="specialValueText">
-          <string>estimated </string>
+         <property name="alignment">
+          <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
          </property>
          <property name="minimum">
           <number>-1</number>
@@ -275,26 +339,21 @@ Uncheck to get the maximum likelihood estimate.</string>
          </property>
         </widget>
        </item>
-       <item row="3" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_12">
-         <item>
-          <widget class="QCheckBox" name="tranCheckBox">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="toolTip">
-            <string>Check to set user value. 
-Uncheck to get the maximum likelihood estimate.</string>
-           </property>
-           <property name="text">
-            <string>Transition / transversion ratio </string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+       <item row="2" column="3">
+        <widget class="QRadioButton" name="transEstimatedRb">
+         <property name="toolTip">
+          <string>Set a fixed value or get the maximum likelihood estimate.</string>
+         </property>
+         <property name="text">
+          <string>estimated</string>
+         </property>
+         <property name="checked">
+          <bool>true</bool>
+         </property>
+         <attribute name="buttonGroup">
+          <string notr="true">sitesRbGroup</string>
+         </attribute>
+        </widget>
        </item>
       </layout>
      </widget>
@@ -330,7 +389,7 @@ Uncheck to get the maximum likelihood estimate.</string>
         </widget>
        </item>
        <item row="1" column="0">
-        <widget class="QRadioButton" name="bootstrapCheckBox">
+        <widget class="QRadioButton" name="bootstrapRadioButton">
          <property name="text">
           <string>Perform bootstrap</string>
          </property>
@@ -358,128 +417,68 @@ Uncheck to get the maximum likelihood estimate.</string>
       <attribute name="title">
        <string>Tree Searching</string>
       </attribute>
-      <layout class="QFormLayout" name="formLayout">
-       <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
-       </property>
-       <property name="fieldGrowthPolicy">
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
-       </property>
+      <layout class="QGridLayout" name="gridLayout">
        <item row="0" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_3">
-         <property name="sizeConstraint">
-          <enum>QLayout::SetMinAndMaxSize</enum>
-         </property>
-         <item>
-          <widget class="QComboBox" name="treeTypesCombo">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
-           <property name="minimumSize">
-            <size>
-             <width>0</width>
-             <height>0</height>
-            </size>
-           </property>
-           <property name="maxCount">
-            <number>20</number>
-           </property>
-           <property name="sizeAdjustPolicy">
-            <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
-           </property>
-          </widget>
-         </item>
-        </layout>
-       </item>
-       <item row="0" column="1">
-        <widget class="QGroupBox" name="inputTreeGroupBox">
-         <property name="enabled">
-          <bool>false</bool>
+        <widget class="QComboBox" name="treeTypesCombo">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
          </property>
          <property name="minimumSize">
           <size>
-           <width>180</width>
+           <width>0</width>
            <height>0</height>
           </size>
          </property>
-         <property name="title">
-          <string/>
-         </property>
-         <layout class="QHBoxLayout" name="horizontalLayout_10">
-          <property name="spacing">
-           <number>4</number>
-          </property>
-          <property name="sizeConstraint">
-           <enum>QLayout::SetMinAndMaxSize</enum>
-          </property>
-          <property name="leftMargin">
-           <number>2</number>
-          </property>
-          <property name="topMargin">
-           <number>2</number>
-          </property>
-          <property name="rightMargin">
-           <number>2</number>
-          </property>
-          <property name="bottomMargin">
-           <number>2</number>
-          </property>
-          <item>
-           <widget class="QLineEdit" name="inputFileLineEdit">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Expanding" vsizetype="MinimumExpanding">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="inputFilePathButton">
-            <property name="sizePolicy">
-             <sizepolicy hsizetype="Fixed" vsizetype="MinimumExpanding">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="text">
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
+         <property name="maxCount">
+          <number>20</number>
+         </property>
+         <property name="sizeAdjustPolicy">
+          <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1" colspan="2">
+        <widget class="QLineEdit" name="inputFileLineEdit"/>
+       </item>
+       <item row="0" column="3">
+        <widget class="QToolButton" name="inputFilePathButton">
+         <property name="text">
+          <string>...</string>
+         </property>
         </widget>
        </item>
        <item row="1" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_8">
-         <item>
-          <widget class="QLabel" name="label_2">
-           <property name="text">
-            <string>Type of tree improvement</string>
-           </property>
-           <property name="indent">
-            <number>-1</number>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QLabel" name="label_2">
+         <property name="text">
+          <string>Type of tree improvement</string>
+         </property>
+         <property name="indent">
+          <number>-1</number>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1" colspan="3">
+        <widget class="QComboBox" name="treeImprovementsCombo">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+        </widget>
        </item>
        <item row="2" column="0">
-        <layout class="QHBoxLayout" name="horizontalLayout_4">
-         <item>
-          <widget class="QCheckBox" name="treeNumbersCheckbox">
-           <property name="enabled">
-            <bool>false</bool>
-           </property>
-           <property name="text">
-            <string>Set number of random starting tree</string>
-           </property>
-          </widget>
-         </item>
-        </layout>
+        <widget class="QCheckBox" name="treeNumbersCheckbox">
+         <property name="enabled">
+          <bool>false</bool>
+         </property>
+         <property name="text">
+          <string>Set number of random starting tree</string>
+         </property>
+        </widget>
        </item>
        <item row="2" column="1">
         <widget class="QSpinBox" name="treeNumbersSpinBox">
@@ -488,13 +487,26 @@ Uncheck to get the maximum likelihood estimate.</string>
          </property>
         </widget>
        </item>
+       <item row="2" column="2">
+        <spacer name="horizontalSpacer">
+         <property name="orientation">
+          <enum>Qt::Horizontal</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>124</width>
+           <height>20</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
        <item row="3" column="0">
         <widget class="QCheckBox" name="optTopologyCheckbox">
          <property name="text">
-          <string>Optimise topology</string>
+          <string>Optimise tree topology</string>
          </property>
          <property name="checked">
-          <bool>true</bool>
+          <bool>false</bool>
          </property>
         </widget>
        </item>
@@ -504,17 +516,14 @@ Uncheck to get the maximum likelihood estimate.</string>
           <string>Optimise branch lengths</string>
          </property>
          <property name="checked">
-          <bool>true</bool>
+          <bool>false</bool>
          </property>
         </widget>
        </item>
-       <item row="1" column="1">
-        <widget class="QComboBox" name="treeImprovementsCombo">
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
+       <item row="5" column="0">
+        <widget class="QCheckBox" name="optimiseSubstitutionRateCheckbox">
+         <property name="text">
+          <string>Optimise substitution rate</string>
          </property>
         </widget>
        </item>
@@ -564,14 +573,14 @@ Uncheck to get the maximum likelihood estimate.</string>
  <resources/>
  <connections>
   <connection>
-   <sender>bootstrapCheckBox</sender>
+   <sender>bootstrapRadioButton</sender>
    <signal>toggled(bool)</signal>
    <receiver>bootstrapSpinBox</receiver>
    <slot>setEnabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>88</x>
-     <y>85</y>
+     <x>90</x>
+     <y>108</y>
     </hint>
     <hint type="destinationlabel">
      <x>311</x>
@@ -580,20 +589,74 @@ Uncheck to get the maximum likelihood estimate.</string>
    </hints>
   </connection>
   <connection>
-   <sender>bootstrapCheckBox</sender>
+   <sender>bootstrapRadioButton</sender>
    <signal>toggled(bool)</signal>
    <receiver>fastMethodCombo</receiver>
    <slot>setDisabled(bool)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>88</x>
-     <y>85</y>
+     <x>90</x>
+     <y>108</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>417</x>
+     <y>63</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>gammaFixedRb</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>gammaSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>439</x>
+     <y>223</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>223</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>transFixedRb</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>tranSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>439</x>
+     <y>127</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>333</x>
+     <y>127</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>sitesFixedRb</sender>
+   <signal>toggled(bool)</signal>
+   <receiver>sitesSpinBox</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>439</x>
+     <y>159</y>
     </hint>
     <hint type="destinationlabel">
-     <x>385</x>
-     <y>55</y>
+     <x>333</x>
+     <y>159</y>
     </hint>
    </hints>
   </connection>
  </connections>
+ <buttongroups>
+  <buttongroup name="freqRbGroup"/>
+  <buttongroup name="gammaRbGroup"/>
+  <buttongroup name="sitesRbGroup"/>
+  <buttongroup name="transitionRbGroup"/>
+ </buttongroups>
 </ui>
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.cpp b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.cpp
index 7c31720..1a6f82f 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.cpp
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,12 +23,12 @@
 
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNAAlphabet.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include "ExternalToolSupportSettings.h"
@@ -64,12 +64,17 @@ const QString PhyMlSettingsPreffixes::TreeImprovementType(CreatePhyTreeWidget::s
 const QString PhyMlSettingsPreffixes::TreeSearchingType(CreatePhyTreeWidget::settingsPath() + "/phyml_search");
 const QString PhyMlSettingsPreffixes::UserTreePath(CreatePhyTreeWidget::settingsPath() + "/user_tree");
 
-PhyMlWidget::PhyMlWidget(const MAlignment &ma, QWidget *parent) :
-    CreatePhyTreeWidget(parent)
+PhyMlWidget::PhyMlWidget(const MultipleSequenceAlignment &ma, QWidget *parent) :
+    CreatePhyTreeWidget(parent),
+    isTtRationFixed(false),
+    isTreeNumberSet(false)
 {
     setupUi(this);
 
-    fillComboBoxes(ma);
+    isAminoAcid = ma->getAlphabet()->isAmino();
+    makeTTRatioControlsAvailable(!isAminoAcid);
+    fillComboBoxes();
+
     createWidgetsControllers();
 
     widgetControllers.getDataFromSettings();
@@ -79,23 +84,66 @@ PhyMlWidget::PhyMlWidget(const MAlignment &ma, QWidget *parent) :
     connect(treeTypesCombo, SIGNAL(currentIndexChanged(int)), SLOT(sl_checkUserTreeType(int )));
     connect(treeImprovementsCombo, SIGNAL(currentIndexChanged(int)), SLOT(sl_checkTreeImprovement(int )));
     connect(inputFilePathButton, SIGNAL(clicked ()), SLOT(sl_inputPathButtonClicked()));
+    connect(optTopologyCheckbox, SIGNAL(clicked(bool)), SLOT(sl_optTopologyCheckboxClicked(bool)));
+    
+    optBranchCheckboxSavedState = optBranchCheckbox->isChecked();
+    sl_optTopologyCheckboxClicked(optTopologyCheckbox->isChecked());
+    sl_checkUserTreeType(treeTypesCombo->currentIndex());
 }
 
-void PhyMlWidget::fillComboBoxes(const MAlignment& ma) {
-    DNAAlphabetType alphabetType = ma.getAlphabet()->getType();
-    if ((alphabetType == DNAAlphabet_RAW) || (alphabetType == DNAAlphabet_NUCL)){
-        isAminoAcid = false;
-        subModelCombo->addItems(PhyMLModelTypes::getDnaModelTypes());
-    } else {
-        isAminoAcid = true;
-        subModelCombo->addItems(PhyMLModelTypes::getAminoAcidModelTypes());
-        tranCheckBox->setEnabled(false);
-    }
+void PhyMlWidget::fillComboBoxes() {
+    subModelCombo->addItems(isAminoAcid ? PhyMLModelTypes::getAminoAcidModelTypes() : PhyMLModelTypes::getDnaModelTypes());
     fastMethodCombo->addItems(PhyMLRatioTestsTypes::getRatioTestsTypes());
     treeTypesCombo->addItems(TreeSearchingParams::getInputTreeTypes());
     treeImprovementsCombo->addItems(TreeSearchingParams::getTreeImprovementTypes());
 }
 
+void PhyMlWidget::makeTTRatioControlsAvailable(bool enabled) {
+    transLabel->setEnabled(enabled);
+    transEstimatedRb->setEnabled(enabled);
+    transFixedRb->setEnabled(enabled);
+    tranSpinBox->setEnabled(enabled && !transEstimatedRb->isChecked());
+}
+
+void PhyMlWidget::makeTTRatioControlsAvailable(SubstModelTrRatioType ttRatioType) {
+    const bool shouldSavePreviousValue = transLabel->isEnabled();
+    makeTTRatioControlsAvailable(true);
+
+    switch (ttRatioType) {
+    case ANY_TT_RATIO:
+        if (isTtRationFixed) {
+            transFixedRb->setChecked(true);
+        } else {
+            transEstimatedRb->setChecked(true);
+        }
+        break;
+    case ONLY_FIXED_TT_RATIO:
+        if (shouldSavePreviousValue) {
+            isTtRationFixed = transFixedRb->isChecked();
+        }
+        transFixedRb->setChecked(true);
+        transEstimatedRb->setEnabled(false);
+        transFixedRb->setEnabled(false);
+        break;
+    case ONLY_ESTIMATED_TT_RATIO:
+        if (shouldSavePreviousValue) {
+            isTtRationFixed = transFixedRb->isChecked();
+        }
+        transEstimatedRb->setChecked(true);
+        transEstimatedRb->setEnabled(false);
+        transFixedRb->setEnabled(false);
+        break;
+    case WITHOUT_TT_RATIO:
+        if (shouldSavePreviousValue) {
+            isTtRationFixed = transFixedRb->isChecked();
+        }
+        transFixedRb->setChecked(false);
+        transEstimatedRb->setChecked(false);
+        makeTTRatioControlsAvailable(false);
+        break;
+    }
+}
+
 void PhyMlWidget::createWidgetsControllers() {
     //Substitutional model
     widgetControllers.addWidgetController(subModelCombo, PhyMlSettingsPreffixes::ModelType, "-m");
@@ -104,22 +152,22 @@ void PhyMlWidget::createWidgetsControllers() {
     widgetControllers.addWidgetController(substitutionSpinBox, PhyMlSettingsPreffixes::SubRatesNumber, "-c");
 
     //Transition / transversion ratio
-    InputWidgetController* ttRatioEstimationController = widgetControllers.addWidgetController(tranCheckBox, PhyMlSettingsPreffixes::EstimateTtRatio, "");
+    InputWidgetController* ttRatioEstimationController = widgetControllers.addWidgetController(transFixedRb, PhyMlSettingsPreffixes::EstimateTtRatio, "");
     InputWidgetController* ttRatioController = widgetControllers.addWidgetController(tranSpinBox, PhyMlSettingsPreffixes::TtRatio, "-t");
     ttRatioEstimationController->addDependentParameter(ParameterDependence(ttRatioController, true));
 
     //Proportion of invariable sites
-    InputWidgetController* sitesEstimationController = widgetControllers.addWidgetController(sitesCheckBox, PhyMlSettingsPreffixes::EstimateSitesProportion, "");
-    InputWidgetController* sitesPropController = widgetControllers.addWidgetController(sitesSpinBox, PhyMlSettingsPreffixes::InvariableSitesProportion, "-t");
+    InputWidgetController* sitesEstimationController = widgetControllers.addWidgetController(sitesFixedRb, PhyMlSettingsPreffixes::EstimateSitesProportion, "");
+    InputWidgetController* sitesPropController = widgetControllers.addWidgetController(sitesSpinBox, PhyMlSettingsPreffixes::InvariableSitesProportion, "-v");
     sitesEstimationController->addDependentParameter(ParameterDependence(sitesPropController, true));
 
     //Gamma shape parameter
-    InputWidgetController* gammaEstimationController = widgetControllers.addWidgetController(gammaCheckBox, PhyMlSettingsPreffixes::EstimateGammaFactor, "");
+    InputWidgetController* gammaEstimationController = widgetControllers.addWidgetController(gammaFixedRb, PhyMlSettingsPreffixes::EstimateGammaFactor, "");
     InputWidgetController* gammaController = widgetControllers.addWidgetController(gammaSpinBox, PhyMlSettingsPreffixes::GammaFactor, "-a");
     gammaEstimationController->addDependentParameter(ParameterDependence(gammaController, true));
 
     //Bootstrap replicates number
-    InputWidgetController* bootstrapCheckBoxController = widgetControllers.addWidgetController(bootstrapCheckBox, PhyMlSettingsPreffixes::UseBootstrap, "");
+    InputWidgetController* bootstrapCheckBoxController = widgetControllers.addWidgetController(bootstrapRadioButton, PhyMlSettingsPreffixes::UseBootstrap, "");
     InputWidgetController* bootstrapController = widgetControllers.addWidgetController(bootstrapSpinBox, PhyMlSettingsPreffixes::BootstrapReplicatesNumber, "-b");
     bootstrapCheckBoxController->addDependentParameter(ParameterDependence(bootstrapController , true));
 
@@ -154,14 +202,26 @@ void PhyMlWidget::createWidgetsControllers() {
 }
 
 void PhyMlWidget::sl_checkUserTreeType(int newIndex) {
-    inputTreeGroupBox->setEnabled(newIndex == 1);
+    bool enableFileEdit = newIndex == 1;
+    inputFileLineEdit->setEnabled(enableFileEdit);
+    inputFilePathButton->setEnabled(enableFileEdit);
 }
 
 void PhyMlWidget::sl_checkTreeImprovement(int newIndex) {
-    bool isNNI = (newIndex == 0);
-    treeNumbersCheckbox->setEnabled(!isNNI);
-    if(isNNI) {
+    const bool isNni = (newIndex == 0);
+    const bool shouldSaveTreeNumbersValue = treeNumbersCheckbox->isEnabled();
+    if (shouldSaveTreeNumbersValue) {
+        isTreeNumberSet = treeNumbersCheckbox->isChecked();
+    }
+
+    if (isNni) {
+        treeNumbersCheckbox->setChecked(false);
+        treeNumbersCheckbox->setEnabled(false);
         treeNumbersSpinBox->setEnabled(false);
+    } else {
+        treeNumbersCheckbox->setChecked(isTreeNumberSet);
+        treeNumbersCheckbox->setEnabled(true);
+        treeNumbersSpinBox->setEnabled(treeNumbersCheckbox->isChecked());
     }
 }
 
@@ -175,9 +235,20 @@ void PhyMlWidget::sl_inputPathButtonClicked() {
     inputFileLineEdit->setText(lod.url);
 }
 
+void PhyMlWidget::sl_optTopologyCheckboxClicked(bool checked) {
+    if (checked) {
+        optBranchCheckboxSavedState = optBranchCheckbox->isChecked();
+        optBranchCheckbox->setChecked(true);
+        optBranchCheckbox->setEnabled(false);
+    } else {
+        optBranchCheckbox->setChecked(optBranchCheckboxSavedState);
+        optBranchCheckbox->setEnabled(true);
+    }
+}
+
 void PhyMlWidget::sl_checkSubModelType(const QString& newModel){
     if(isAminoAcid) {
-        tranCheckBox->setEnabled(false);
+        makeTTRatioControlsAvailable(false);
         return;
     }
 
@@ -186,18 +257,12 @@ void PhyMlWidget::sl_checkSubModelType(const QString& newModel){
     SAFE_POINT(modelIndex >= 0, QString("'%1' is incorrect substitution model for dna sequence").arg(newModel),);
 
     SubstModelTrRatioType ttRatioType = PhyMLModelTypes::getTtRatioType(newModel);
-    if(ttRatioType == ANY_TT_RATIO) {
-        tranCheckBox->setEnabled(true);
-    }
-    else {
-        tranCheckBox->setChecked(ttRatioType == ONLY_FIXED_TT_RATIO);
-        tranCheckBox->setEnabled(false);
-    }
+    makeTTRatioControlsAvailable(ttRatioType);
 }
 
 void PhyMlWidget::fillSettings(CreatePhyTreeSettings& settings){
     settings.extToolArguments = generatePhyMlSettingsScript();
-    settings.bootstrap = bootstrapCheckBox->isChecked();
+    settings.bootstrap = bootstrapRadioButton->isChecked();
     displayOptions->fillSettings(settings);
 }
 
@@ -213,13 +278,28 @@ void PhyMlWidget::restoreDefault(){
 }
 
 bool PhyMlWidget::checkSettings(QString &message, const CreatePhyTreeSettings &settings) {
-    //Check that PhyMl and tempory directory path defined
+    const bool fileExists = QFileInfo(inputFileLineEdit->text()).exists();
+    const bool fileHaveToExist = (1 == treeTypesCombo->currentIndex());
+    if (fileHaveToExist && !fileExists) {
+        twSettings->setCurrentIndex(2);
+        inputFileLineEdit->setFocus();
+        if (!inputFileLineEdit->text().isEmpty()) {
+            message = tr("File with the starting tree is not set.");
+        } else {
+            message = tr("File with the starting tree doesn't exist.");
+        }
+        return false;
+    }
+
+    //Check that PhyMl and tempory folder path defined
     ExternalToolRegistry* reg = AppContext::getExternalToolRegistry();
-    ExternalTool* phyml= reg->getByName(PhyMLSupport::PhyMlRegistryId);
+    ExternalTool* phyml = reg->getByName(PhyMLSupport::PhyMlRegistryId);
     SAFE_POINT(NULL != phyml, "External tool PHyML is not registered", false);
+
     const QString& path = phyml->getPath();
     const QString& name = phyml->getName();
-    if (path.isEmpty()){
+
+    if (path.isEmpty()) {
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
         msgBox->setText(tr("Path for %1 tool not selected.").arg(name));
@@ -241,9 +321,11 @@ bool PhyMlWidget::checkSettings(QString &message, const CreatePhyTreeSettings &s
                break;
         }
     }
+
     if (path.isEmpty()){
         return false;
     }
+
     U2OpStatus2Log os(LogLevel_DETAILS);
     ExternalToolSupportSettings::checkTemporaryDir(os);
     CHECK_OP(os, false);
@@ -259,6 +341,12 @@ QStringList PhyMlWidget::generatePhyMlSettingsScript(){
     }
 
     widgetControllers.addParametersToCmdLine(script);
+    if (sitesEstimatedRb->isChecked()) {
+        script << "-v" << "e";
+    }
+    if (gammaEstimatedRb->isChecked()) {
+        script << "-a" << "e";
+    }
 
     if(1 == treeTypesCombo->currentIndex()) {
         script << "-u";
@@ -266,12 +354,14 @@ QStringList PhyMlWidget::generatePhyMlSettingsScript(){
     }
 
     QString optimisationOptions;
-    if(optTopologyCheckbox->isChecked()) {
-        optimisationOptions = "t";
-    }
-    if(optBranchCheckbox->isChecked()) {
+    if (optTopologyCheckbox->isChecked()) {
+        optimisationOptions = "tl";
+    } else if (optBranchCheckbox->isChecked()) {
         optimisationOptions += "l";
     }
+    if (optimiseSubstitutionRateCheckbox->isChecked()) {
+        optimisationOptions += "r";
+    }
     if(!optimisationOptions.isEmpty()) {
         script << "-o";
         script << optimisationOptions;
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
index c62c7b7..555c5d8 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLDialogWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include "PhyMLSupport.h"
 
 #include <U2Gui/InputWidgetsControllers.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/AppContext.h>
 #include <U2View/CreatePhyTreeWidget.h>
 
@@ -40,6 +40,7 @@ public:
 
     static const QString EstimateTtRatio;
     static const QString TtRatio;
+    static const QString TtRatioCheckbox;
 
     static const QString EstimateSitesProportion;
     static const QString InvariableSitesProportion;
@@ -65,7 +66,7 @@ public:
 class PhyMlWidget : public CreatePhyTreeWidget, public Ui_PhyMLDialog{
    Q_OBJECT
 public:
-    PhyMlWidget(const MAlignment &ma, QWidget *parent);
+    PhyMlWidget(const MultipleSequenceAlignment &ma, QWidget *parent);
 
     void fillSettings(CreatePhyTreeSettings& settings);
     void storeSettings();
@@ -74,7 +75,10 @@ public:
 
 private:
     void createWidgetsControllers();
-    void fillComboBoxes(const MAlignment& ma);
+    void fillComboBoxes();
+    // Enables/disables all transition ratio related controls.
+    void makeTTRatioControlsAvailable(bool enabled);
+    void makeTTRatioControlsAvailable(SubstModelTrRatioType ttRatioType);
 
     QStringList generatePhyMlSettingsScript();
 
@@ -86,6 +90,12 @@ private slots:
     void sl_checkTreeImprovement(int newIndex);
     void sl_checkSubModelType(const QString& newModel);
     void sl_inputPathButtonClicked();
+    void sl_optTopologyCheckboxClicked(bool checked);
+
+private:
+    bool optBranchCheckboxSavedState;
+    bool isTtRationFixed;
+    bool isTreeNumberSet;
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLSupport.cpp b/src/plugins/external_tool_support/src/phyml/PhyMLSupport.cpp
index a8b5543..44cd6c8 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLSupport.cpp
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,11 +58,11 @@ PhyMLSupport::PhyMLSupport(const QString& name) : ExternalTool(name)
 ////////////////////////////////////////
 //PhyMLAdapter
 
-Task* PhyMLAdapter::createCalculatePhyTreeTask(const MAlignment& ma, const CreatePhyTreeSettings& s) {
+Task* PhyMLAdapter::createCalculatePhyTreeTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s) {
     return new PhyMLSupportTask(ma, s);
 }
 
-CreatePhyTreeWidget * PhyMLAdapter::createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent) {
+CreatePhyTreeWidget * PhyMLAdapter::createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent) {
     return new PhyMlWidget(ma, parent);
 }
 
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLSupport.h b/src/plugins/external_tool_support/src/phyml/PhyMLSupport.h
index 445853b..bc32843 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLSupport.h
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,8 +42,8 @@ public:
 
 class PhyMLAdapter : public PhyTreeGenerator {
 public:
-    Task * createCalculatePhyTreeTask(const MAlignment &ma, const CreatePhyTreeSettings &s) ;
-    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent = NULL);
+    Task * createCalculatePhyTreeTask(const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &s) ;
+    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent = NULL);
 };
 
 enum SubstModelTrRatioType {
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLTask.cpp b/src/plugins/external_tool_support/src/phyml/PhyMLTask.cpp
index ef9d752..38f0dd7 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLTask.cpp
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,7 +29,7 @@
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Core/DocumentModel.h>
-#include <QtCore/QDir>
+#include <QDir>
 
 namespace U2 {
 
@@ -37,7 +37,7 @@ const QString PhyMLSupportTask::TMP_FILE_NAME("tmp.phy");
 const QString PhyMLSupportTask::RESULT_BOOTSTRAP_EXT("_phyml_boot_trees.txt");
 const QString PhyMLSupportTask::RESULT_TREE_EXT("_phyml_tree.txt");
 
-PhyMLPrepareDataForCalculation::PhyMLPrepareDataForCalculation(const MAlignment& ma, const CreatePhyTreeSettings& s, const QString& url)
+PhyMLPrepareDataForCalculation::PhyMLPrepareDataForCalculation(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s, const QString& url)
     : Task(tr("Generating input file for PhyML"), TaskFlags_NR_FOSE_COSC),
       ma(ma),
       settings(s),
@@ -81,7 +81,7 @@ QList<Task*> PhyMLPrepareDataForCalculation::onSubTaskFinished(Task* subTask){
     return res;
 }
 
-PhyMLSupportTask::PhyMLSupportTask(const MAlignment& ma, const CreatePhyTreeSettings& s)
+PhyMLSupportTask::PhyMLSupportTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s)
     : PhyTreeGeneratorTask(ma, s),
       prepareDataTask(NULL),
       phyMlTask(NULL),
@@ -90,7 +90,7 @@ PhyMLSupportTask::PhyMLSupportTask(const MAlignment& ma, const CreatePhyTreeSett
 {
     GCOUNTER( cvar, tvar, "PhyMLSupportTask" );
 
-    sequencesNumber = ma.getNumRows();
+    sequencesNumber = ma->getNumRows();
 
     setTaskName(tr("PhyML tree calculation"));
 
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLTask.h b/src/plugins/external_tool_support/src/phyml/PhyMLTask.h
index 930884c..da712b3 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLTask.h
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,12 +38,12 @@ class LoadDocumentTask;
 class PhyMLPrepareDataForCalculation : public Task{
     Q_OBJECT
 public:
-    PhyMLPrepareDataForCalculation(const MAlignment& ma, const CreatePhyTreeSettings& s, const QString& url);
+    PhyMLPrepareDataForCalculation(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s, const QString& url);
     void prepare();
     QList<Task*> onSubTaskFinished(Task* subTask);
     const QString& getInputFileUrl() {return inputFileForPhyML;}
 private:
-    const MAlignment&           ma;
+    const MultipleSequenceAlignment&           ma;
     CreatePhyTreeSettings       settings;
     QString                     tmpDirUrl;
     SaveAlignmentTask*          saveDocumentTask;
@@ -84,7 +84,7 @@ private:
 class PhyMLSupportTask : public PhyTreeGeneratorTask{
     Q_OBJECT
 public:
-    PhyMLSupportTask(const MAlignment& ma, const CreatePhyTreeSettings& s);
+    PhyMLSupportTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s);
     void prepare();
     Task::ReportResult report();
     void onExternalToolFailed(const QString& err);
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLTests.cpp b/src/plugins/external_tool_support/src/phyml/PhyMLTests.cpp
index 4ad424d..58471cc 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLTests.cpp
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,11 +30,11 @@
 #include <U2Core/Log.h>
 
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/PhyTreeObject.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 #include <U2Core/AppContext.h>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <U2Algorithm/PhyTreeGeneratorRegistry.h>
@@ -111,19 +111,19 @@ void GTest_PhyML::prepare() {
         return;
     }
 
-    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
     GObject *obj = list.first();
     if(obj == NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     assert(obj != NULL);
-    MAlignmentObject* ma = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* ma = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(ma == NULL){
         stateInfo.setError(  QString("error can't cast to multiple alignment from GObject") );
         return;
@@ -139,7 +139,7 @@ void GTest_PhyML::prepare() {
 
     QList<GObject*> list2 = treeDoc->findGObjectByType(GObjectTypes::PHYLOGENETIC_TREE);
     if (list2.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
@@ -160,7 +160,7 @@ void GTest_PhyML::prepare() {
 
     settings.algorithmId = PhyMLSupport::PhyMlRegistryId;
 
-    task = new PhyTreeGeneratorLauncherTask(input->getMAlignment(), settings);
+    task = new PhyTreeGeneratorLauncherTask(input->getMultipleAlignment(), settings);
     addSubTask(task);
 }
 
diff --git a/src/plugins/external_tool_support/src/phyml/PhyMLTests.h b/src/plugins/external_tool_support/src/phyml/PhyMLTests.h
index cc004b3..ec9e8e5 100644
--- a/src/plugins/external_tool_support/src/phyml/PhyMLTests.h
+++ b/src/plugins/external_tool_support/src/phyml/PhyMLTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,14 +26,14 @@
 #include <U2Core/GObject.h>
 #include <U2Algorithm/PhyTreeGeneratorTask.h>
 
-#include <QtXml/QDomElement>
-#include <QtCore/QFileInfo>
-#include <QtCore/QList>
+#include <QDomElement>
+#include <QFileInfo>
+#include <QList>
 
 namespace U2{
 
 class PhyTreeObject;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class GTest_PhyML : public GTest {
     Q_OBJECT
@@ -51,7 +51,7 @@ private:
     Document* maDoc;
     Document* treeDoc;
     PhyTreeGeneratorLauncherTask* task;
-    MAlignmentObject* input;
+    MultipleSequenceAlignmentObject* input;
     PhyTreeObject* treeObjFromDoc;
     CreatePhyTreeSettings settings;
 };
diff --git a/src/plugins/external_tool_support/src/python/PythonSupport.cpp b/src/plugins/external_tool_support/src/python/PythonSupport.cpp
index 56d815c..c14c92a 100644
--- a/src/plugins/external_tool_support/src/python/PythonSupport.cpp
+++ b/src/plugins/external_tool_support/src/python/PythonSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,12 +30,7 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Gui/MainWindow.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QMainWindow>
-#endif
-
+#include <QMainWindow>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/python/PythonSupport.h b/src/plugins/external_tool_support/src/python/PythonSupport.h
index 6b88634..f766c8e 100644
--- a/src/plugins/external_tool_support/src/python/PythonSupport.h
+++ b/src/plugins/external_tool_support/src/python/PythonSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.cpp b/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.cpp
index adad9bd..6fcb07f 100644
--- a/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.cpp
+++ b/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.h b/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.h
index 5a724af..0446f7d 100644
--- a/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.h
+++ b/src/plugins/external_tool_support/src/samtools/BcfToolsSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.cpp b/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.cpp
index 1f17d1e..3c48992 100644
--- a/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.cpp
+++ b/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.h b/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.h
index 524093f..b7b6f89 100644
--- a/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.h
+++ b/src/plugins/external_tool_support/src/samtools/SamToolsExtToolSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/TabixSupport.cpp b/src/plugins/external_tool_support/src/samtools/TabixSupport.cpp
index 21a5704..693104a 100644
--- a/src/plugins/external_tool_support/src/samtools/TabixSupport.cpp
+++ b/src/plugins/external_tool_support/src/samtools/TabixSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/TabixSupport.h b/src/plugins/external_tool_support/src/samtools/TabixSupport.h
index 47a0cce..e54393d 100644
--- a/src/plugins/external_tool_support/src/samtools/TabixSupport.h
+++ b/src/plugins/external_tool_support/src/samtools/TabixSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/samtools/TabixSupportTask.cpp b/src/plugins/external_tool_support/src/samtools/TabixSupportTask.cpp
index ae20e12..cb2dcc5 100644
--- a/src/plugins/external_tool_support/src/samtools/TabixSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/samtools/TabixSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,16 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
-#include "TabixSupportTask.h"
-#include "TabixSupport.h"
-
-#include <U2Core/Task.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
+#include <U2Core/CopyFileTask.h>
 #include <U2Core/GUrlUtils.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include "TabixSupport.h"
+#include "TabixSupportTask.h"
 
 namespace U2 {
 
@@ -49,7 +49,7 @@ void TabixSupportTask::prepare() {
     if ( BgzipTask::checkBgzf( fileUrl )) {
         algoLog.info(tr("Input file '%1' is already bgzipped").arg(fileUrl.getURLString()));
 
-        copyTask = new CopyFileTask( fileUrl, bgzfUrl);
+        copyTask = new CopyFileTask(fileUrl.getURLString(), bgzfUrl.getURLString());
         addSubTask(copyTask);
         return;
     }
@@ -74,6 +74,10 @@ QList<Task*> TabixSupportTask::onSubTaskFinished(Task *subTask) {
         return res;
     }
 
+    if (subTask == copyTask) {
+        bgzfUrl = copyTask->getTargetFilePath();
+    }
+
     initTabixTask();
     res.append(tabixTask);
     return res;
@@ -96,45 +100,4 @@ void TabixSupportTask::initTabixTask() {
     setListenerForTask(tabixTask);
 }
 
-// CopyFileTask
-CopyFileTask::CopyFileTask(const GUrl &from, const GUrl &to)
-    : Task(tr("Copy file task"), (TaskFlag)(TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled)),
-      from(from),
-      to(to)
-{
-}
-
-void CopyFileTask::run() {
-    if (from.isEmpty()) {
-        setError(tr("Input file is not set"));
-        return;
-    }
-    if (to.isEmpty()) {
-        setError(tr("Output file is not set"));
-        return;
-    }
-
-    taskLog.details(tr("Copy %1 to %2").arg(from.getURLString()).arg(to.getURLString()));
-    if (QFile::exists(to.getURLString())) {
-        bool res = GUrlUtils::renameFileWithNameRoll(to.getURLString(), stateInfo);
-        if (!res) {
-            setError(tr("Can not rename existing file '%1'").arg(to.getURLString()));
-            return;
-        }
-    }
-    bool res = QFile::copy(from.getURLString(), to.getURLString());
-    if (!res) {
-        setError(tr("Error copying file").arg(from.getURLString()));
-        return;
-    }
-    taskLog.details(tr("File copying finished"));
-}
-
-QString CopyFileTask::generateReport() const {
-    if (hasError() || isCanceled()) {
-        return tr("File copying task was finished with an error: %1").arg(getError());
-    }
-    return tr("File copy was finished. Copy of '%1' is '%2'").arg(from.getURLString()).arg(to.getURLString());
-}
-
-} // namespace U2
+}   // namespace U2
diff --git a/src/plugins/external_tool_support/src/samtools/TabixSupportTask.h b/src/plugins/external_tool_support/src/samtools/TabixSupportTask.h
index 7ae7135..24c563e 100644
--- a/src/plugins/external_tool_support/src/samtools/TabixSupportTask.h
+++ b/src/plugins/external_tool_support/src/samtools/TabixSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,20 +52,6 @@ private:
     void initTabixTask();
 };
 
-/**
- * If output file already exists, CopyFileTask tries to rename existing file and to complete copying.
- */
-class CopyFileTask : public Task {
-    Q_OBJECT
-public:
-    CopyFileTask(const GUrl& from, const GUrl& to);
-    void run();
-    QString generateReport() const;
-private:
-    GUrl from;
-    GUrl to;
-};
-
-} // namespace U2
+}   // namespace U2
 
 #endif // _U2_TABIX_TASK_H_
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.cpp
index f6ce585..74cd6a8 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.h b/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.h
index c860d19..280f469 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.h
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.cpp
index 0f1ccc1..15374bc 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.h b/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.h
index bbef578..4d18167 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.h
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
index 0436d22..577b41f 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -78,7 +78,7 @@ void SeqPosTask::cleanup() {
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this directory."));
+            //stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this folder."));
             //return;
         }
     }
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.h b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.h
index fe972cc..62fe26d 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosTask.h
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
index 2112719..75f1f30 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -244,8 +244,8 @@ void SeqPosWorkerFactory::init() {
     QList<Attribute*> attrs;
     {
          Descriptor outDir(OUTPUT_DIR,
-             SeqPosWorker::tr("Output directory"),
-             SeqPosWorker::tr("The directory to store seqpos results."));
+             SeqPosWorker::tr("Output folder"),
+             SeqPosWorker::tr("The folder to store seqpos results."));
          Descriptor genAssembly(GENOME_ASSEMBLY,
              SeqPosWorker::tr("Genome assembly version"),
              SeqPosWorker::tr("UCSC database version (GENOME)."));
@@ -364,7 +364,7 @@ QString SeqPosPrompter::composeRichDoc() {
          res.append(tr(" Uses <u>%1</u> known motifs.").arg(motifDb));
      }
 
-     res.append(tr(" Outputs all result files to <u>%1</u> directory").arg(dir.isEmpty() ? unsetStr : dir));
+     res.append(tr(" Outputs all result files to <u>%1</u> folder").arg(dir.isEmpty() ? unsetStr : dir));
      res.append(".");
 
     return res;
diff --git a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.h b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.h
index 4342c0d..f2dd1e1 100644
--- a/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.h
+++ b/src/plugins/external_tool_support/src/seqpos/SeqPosWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,11 +32,7 @@
 #include "SeqPosTask.h"
 #include "SeqPosSettings.h"
 #include "utils/CistromeDelegate.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#else
-#include <QtWidgets/QLabel>
-#endif
+#include <QLabel>
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.cpp
new file mode 100644
index 0000000..1ba863c
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.cpp
@@ -0,0 +1,189 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QLayout>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QSortFilterProxyModel>
+
+#include <U2Core/AppContext.h>
+#include <U2Core/QObjectScopedPointer.h>
+
+#include <U2Gui/AppSettingsGUI.h>
+#include <U2Gui/HelpButton.h>
+
+#include "ExternalToolSupportSettingsController.h"
+#include "SnpEffDatabaseDelegate.h"
+#include "SnpEffDatabaseListModel.h"
+#include "SnpEffSupport.h"
+
+namespace U2 {
+namespace LocalWorkflow {
+
+/************************************************************************/
+/* SnpEffDatabaseDialog */
+/************************************************************************/
+SnpEffDatabaseDialog::SnpEffDatabaseDialog(QWidget* parent)
+    : QDialog(parent) {
+    setupUi(this);
+    new HelpButton(this, buttonBox, "20875392");
+
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setDisabled(true);
+
+    proxyModel = new QSortFilterProxyModel(this);
+    proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
+    connect(lineEdit, SIGNAL(textChanged(QString)), proxyModel, SLOT(setFilterFixedString(QString)));
+    proxyModel->setSourceModel(SnpEffSupport::databaseModel);
+
+    tableView->setModel(proxyModel);
+    tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
+    tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
+    tableView->verticalHeader()->hide();
+
+    connect(tableView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(accept()));
+    connect(tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SLOT(sl_selectionChanged()));
+
+    setMinimumSize(600, 400);
+}
+
+QString SnpEffDatabaseDialog::getDatabase() const {
+    QItemSelectionModel* model = tableView->selectionModel();
+    SAFE_POINT(model != NULL, "Selection model is NULL", QString());
+    QModelIndexList selection = model->selectedRows();
+    SAFE_POINT(selection.size() == 1, "Invalid selection state", QString());
+    QModelIndex index = proxyModel->mapToSource(selection.first());
+    return SnpEffSupport::databaseModel->getGenome(index.row());
+}
+
+void SnpEffDatabaseDialog::sl_selectionChanged() {
+    buttonBox->button(QDialogButtonBox::Ok)->setDisabled(tableView->selectionModel()->selectedRows().size() == 0);
+}
+
+/************************************************************************/
+/* SnpEffDatabasePropertyWidget */
+/************************************************************************/
+SnpEffDatabasePropertyWidget::SnpEffDatabasePropertyWidget(QWidget *parent, DelegateTags *tags)
+    : PropertyWidget(parent, tags) {
+    lineEdit = new QLineEdit(this);
+    lineEdit->setPlaceholderText(tr("Select genome"));
+    lineEdit->setReadOnly(true);
+    lineEdit->setObjectName("lineEdit");
+    lineEdit->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+
+    addMainWidget(lineEdit);
+
+    toolButton = new QToolButton(this);
+    toolButton->setObjectName("toolButton");
+    toolButton->setText("...");
+    toolButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+    connect(toolButton, SIGNAL(clicked()), SLOT(sl_showDialog()));
+    layout()->addWidget(toolButton);
+
+    setObjectName("SnpEffDatabasePropertyWidget");
+}
+
+QVariant SnpEffDatabasePropertyWidget::value() {
+    return lineEdit->text();
+}
+
+void SnpEffDatabasePropertyWidget::setValue(const QVariant &value) {
+    lineEdit->setText(value.toString());
+}
+
+void SnpEffDatabasePropertyWidget::sl_showDialog() {
+    // snpEff database list is available only if there is a valid tool!
+    if (!AppContext::getExternalToolRegistry()->getByName(ET_SNPEFF)->isValid()) {
+        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
+        msgBox->setWindowTitle(QString(ET_SNPEFF));
+        msgBox->setText(tr("The list of %1 genomes is not available.\r\nPath for %1 tool is not selected.").arg(ET_SNPEFF));
+        msgBox->setInformativeText(tr("Do you want to select it now?"));
+        msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+        msgBox->setDefaultButton(QMessageBox::Yes);
+        const int ret = msgBox->exec();
+        CHECK(!msgBox.isNull(), );
+
+        switch (ret) {
+           case QMessageBox::Yes:
+               AppContext::getAppSettingsGUI()->showSettingsDialog(ExternalToolSupportSettingsPageId);
+               break;
+           case QMessageBox::No:
+               return;
+           default:
+               assert(false);
+               break;
+         }
+        return;
+    }
+
+    SnpEffDatabaseDialog* dlg = new SnpEffDatabaseDialog(this);
+    if (dlg->exec() == QDialog::Accepted) {
+        lineEdit->setText(dlg->getDatabase());
+        emit si_valueChanged(lineEdit->text());
+    }
+    lineEdit->setFocus();
+}
+
+/************************************************************************/
+/* SnpEffDatabaseDelegate */
+/************************************************************************/
+SnpEffDatabaseDelegate::SnpEffDatabaseDelegate(QObject *parent)
+    : PropertyDelegate(parent) {
+}
+
+QWidget* SnpEffDatabaseDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/*option*/,
+                                              const QModelIndex &/*index*/) const {
+    SnpEffDatabasePropertyWidget* editor = new SnpEffDatabasePropertyWidget(parent);
+    connect(editor, SIGNAL(si_valueChanged(QVariant)), SLOT(sl_commit()));
+    return editor;
+}
+
+PropertyWidget * SnpEffDatabaseDelegate::createWizardWidget(U2OpStatus & /*os*/, QWidget *parent) const {
+    return new SnpEffDatabasePropertyWidget(parent);
+}
+
+void SnpEffDatabaseDelegate::setEditorData(QWidget *editor,
+                                           const QModelIndex &index) const {
+    QVariant val = index.model()->data(index, ConfigurationEditor::ItemValueRole);
+    SnpEffDatabasePropertyWidget *propertyWidget = dynamic_cast<SnpEffDatabasePropertyWidget*>(editor);
+    propertyWidget->setValue(val);
+}
+
+void SnpEffDatabaseDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
+                                          const QModelIndex &index) const {
+    SnpEffDatabasePropertyWidget *propertyWidget = dynamic_cast<SnpEffDatabasePropertyWidget*>(editor);
+    QString val = propertyWidget->value().toString();
+    model->setData(index, val, ConfigurationEditor::ItemValueRole);
+}
+
+PropertyDelegate* SnpEffDatabaseDelegate::clone() {
+    return new SnpEffDatabaseDelegate(parent());
+}
+
+void SnpEffDatabaseDelegate::sl_commit() {
+    SnpEffDatabasePropertyWidget* editor = static_cast<SnpEffDatabasePropertyWidget*>(sender());
+    CHECK(editor != NULL, );
+    emit commitData(editor);
+}
+
+} // namespace LocalWorkflow
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.h b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.h
new file mode 100644
index 0000000..be940da
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDelegate.h
@@ -0,0 +1,96 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SNPEFF_DATABASE_DELEGATE_H_
+#define _U2_SNPEFF_DATABASE_DELEGATE_H_
+
+#include <U2Lang/ConfigurationEditor.h>
+
+#include <QDialog>
+#include <QLineEdit>
+#include <QToolButton>
+
+#include "ui_SnpEffDatabaseDialog.h"
+
+class QSortFilterProxyModel;
+
+namespace U2 {
+namespace LocalWorkflow {
+
+/************************************************************************/
+/* SnpEffDatabaseDialog */
+/************************************************************************/
+class SnpEffDatabaseDialog : public QDialog, public Ui_SnpEffDatabaseDialog {
+    Q_OBJECT
+public:
+    SnpEffDatabaseDialog(QWidget* parent = 0);
+    QString getDatabase() const;
+private slots:
+    void sl_selectionChanged();
+private:
+    QSortFilterProxyModel* proxyModel;
+};
+
+/************************************************************************/
+/* SnpEffDatabasePropertyWidget */
+/************************************************************************/
+class SnpEffDatabasePropertyWidget : public PropertyWidget {
+    Q_OBJECT
+public:
+    SnpEffDatabasePropertyWidget(QWidget *parent = NULL, DelegateTags *tags = NULL);
+    virtual QVariant value();
+
+public slots:
+    virtual void setValue(const QVariant &value);
+
+    void sl_showDialog();
+
+private:
+    QLineEdit*      lineEdit;
+    QToolButton*    toolButton;
+};
+
+/************************************************************************/
+/* SnpEffDatabaseDelegate */
+/************************************************************************/
+class SnpEffDatabaseDelegate : public PropertyDelegate {
+    Q_OBJECT
+public:
+    SnpEffDatabaseDelegate(QObject *parent = 0);
+
+    virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
+                                  const QModelIndex &index) const;
+    virtual PropertyWidget * createWizardWidget(U2OpStatus &os, QWidget *parent) const;
+
+    virtual void setEditorData(QWidget *editor, const QModelIndex &index) const;
+    virtual void setModelData(QWidget *editor, QAbstractItemModel *model,
+        const QModelIndex &index) const;
+
+    virtual PropertyDelegate *clone();
+
+private slots:
+    void sl_commit();
+};
+
+} // namespace LocalWorkflow
+} // namespace U2
+
+#endif // _U2_SNPEFF_DATABASE_DELEGATE_H_
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDialog.ui b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDialog.ui
new file mode 100644
index 0000000..0b3f8ae
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseDialog.ui
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SnpEffDatabaseDialog</class>
+ <widget class="QDialog" name="SnpEffDatabaseDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Select SnpEff Database</string>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2">
+   <item>
+    <widget class="U2::SearchBox" name="lineEdit">
+     <property name="placeholderText">
+      <string>Search...</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTableView" name="tableView">
+     <property name="selectionMode">
+      <enum>QAbstractItemView::SingleSelection</enum>
+     </property>
+     <property name="selectionBehavior">
+      <enum>QAbstractItemView::SelectRows</enum>
+     </property>
+     <attribute name="horizontalHeaderStretchLastSection">
+      <bool>false</bool>
+     </attribute>
+    </widget>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="orientation">
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>U2::SearchBox</class>
+   <extends>QLineEdit</extends>
+   <header location="global">U2Gui/SearchBox.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>SnpEffDatabaseDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>SnpEffDatabaseDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.cpp
new file mode 100644
index 0000000..e3c9ce6
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.cpp
@@ -0,0 +1,105 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SnpEffDatabaseListModel.h"
+
+#include <U2Core/Timer.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <QFile>
+
+namespace U2 {
+
+SnpEffDatabaseInfo::SnpEffDatabaseInfo(QString line) {
+    QStringList info = line.split(QRegExp("\\s+"), QString::SkipEmptyParts);
+    CHECK(info.size() > 2, );
+    genome = info.at(0);
+    organism = info.at(1);
+}
+
+SnpEffDatabaseListModel::SnpEffDatabaseListModel(QObject* parent)
+    : QAbstractTableModel(parent) {
+    databaseCount = 0;
+}
+
+void SnpEffDatabaseListModel::getData(const QString &databaseListFilePath) {
+    GTIMER(cvar, tvar, "GetSnpEffDatabaseList");
+    GCOUNTER(cv, ct, "GetSnpEffDatabaseList");
+
+    QFile file(databaseListFilePath);
+    file.open(QFile::ReadOnly);
+
+    // Skip the first two lines:
+    // Genome Organism Status Bundle Database download link
+    // ------ -------- ------ ------ ----------------------
+    file.readLine();
+    file.readLine();
+
+    int counter = 0;
+    while (!file.atEnd()) {
+        SnpEffDatabaseInfo info(file.readLine());
+        databaseList.insert(counter, info);
+        counter++;
+    }
+    file.close();
+    databaseCount = counter;
+}
+
+QString SnpEffDatabaseListModel::getGenome(int index) const {
+    SAFE_POINT(databaseList.contains(index), "Invalid index", QString());
+    return databaseList.value(index).getGenome();
+}
+
+int SnpEffDatabaseListModel::rowCount(const QModelIndex &) const {
+    return databaseCount;
+}
+
+int SnpEffDatabaseListModel::columnCount(const QModelIndex &) const {
+    return 2;
+}
+
+QVariant SnpEffDatabaseListModel::data(const QModelIndex &index, int role) const {
+    if (role == Qt::DisplayRole) {
+        const SnpEffDatabaseInfo& info = databaseList.value(index.row());
+        switch (index.column()) {
+        case 0:
+            return QVariant(info.getGenome());
+        case 1:
+            return QVariant(info.getOrganism());
+        default:
+            SAFE_POINT(true, "Invalid state", QVariant());
+        }
+    }
+    return QVariant();
+}
+
+QVariant SnpEffDatabaseListModel::headerData(int section, Qt::Orientation orientation, int role) const {
+    if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
+        if (section == 0) {
+            return tr("Genome");
+        } else {
+            return tr("Organism");
+        }
+    }
+    return QVariant();
+}
+
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.h b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.h
new file mode 100644
index 0000000..4069e80
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListModel.h
@@ -0,0 +1,63 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SNPEFF_DATABASE_LIST_MODEL_H_
+#define _U2_SNPEFF_DATABASE_LIST_MODEL_H_
+
+#include <QAbstractTableModel>
+
+namespace U2 {
+
+class SnpEffDatabaseInfo {
+public:
+    SnpEffDatabaseInfo() {}
+    SnpEffDatabaseInfo(QString line);
+    QString getGenome() const { return genome; }
+    QString getOrganism() const { return organism; }
+
+private:
+    QString genome;
+    QString organism;
+};
+
+class SnpEffDatabaseListModel : public QAbstractTableModel {
+    Q_OBJECT
+public:
+    SnpEffDatabaseListModel(QObject* parent = 0);
+    void getData(const QString& databaseListFilePath);
+
+    QString getGenome(int index) const;
+    bool isEmpty() { return databaseCount == 0; }
+
+private:
+    int rowCount(const QModelIndex &parent) const;
+    int columnCount(const QModelIndex &parent) const;
+    QVariant data(const QModelIndex &index, int role) const;
+    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+
+private:
+    int databaseCount;
+    QMap<int, SnpEffDatabaseInfo> databaseList;
+};
+
+} // namespace U2
+
+#endif // _U2_SNPEFF_DATABASE_LIST_MODEL_H_
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.cpp
new file mode 100644
index 0000000..c336fbf
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.cpp
@@ -0,0 +1,66 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include "SnpEffDatabaseListTask.h"
+#include "SnpEffTask.h"
+#include "SnpEffSupport.h"
+
+#include <U2Core/AppContext.h>
+#include <U2Core/Settings.h>
+
+#include <QDir>
+#include <QFileInfo>
+
+namespace U2 {
+
+#define SNPEFF_DATABASE_LIST_SETTINGS + "snpEffDatabaseList_"
+
+SnpEffDatabaseListTask::SnpEffDatabaseListTask()
+    : ExternalToolSupportTask(tr("SnpEff Database List task"), TaskFlags_FOSE_COSC) {
+    snpEffVersion = AppContext::getExternalToolRegistry()->getByName(ET_SNPEFF)->getVersion();
+    dbListFilePath = AppContext::getSettings()->getValue(SNPEFF_DATABASE_LIST_SETTINGS + snpEffVersion, QVariant(""), true).toString();
+}
+
+void SnpEffDatabaseListTask::prepare() {
+    if (!dbListFilePath.isEmpty() && QFileInfo(dbListFilePath).size() != 0) {
+        return;
+    }
+
+    QString iniFile = AppContext::getSettings()->fileName();
+    dbListFilePath = QFileInfo(iniFile).absoluteDir().absolutePath();
+    dbListFilePath += QString(QDir::separator()) + "SnpEff_DB_" + snpEffVersion + ".list";
+
+    const QStringList args("databases");
+    ExternalToolRunTask* etTask = new ExternalToolRunTask(ET_SNPEFF, args, new SnpEffParser(),
+                                                          "", QStringList(), QString(), true);
+    setListenerForTask(etTask);
+    etTask->setStandartOutputFile(dbListFilePath);
+    addSubTask(etTask);
+}
+
+void SnpEffDatabaseListTask::run() {
+    if (stateInfo.isCoR()) {
+        return;
+    }
+    AppContext::getSettings()->setValue(SNPEFF_DATABASE_LIST_SETTINGS + snpEffVersion, dbListFilePath, true);
+}
+
+} // namespace U2
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.h b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.h
new file mode 100644
index 0000000..9390e42
--- /dev/null
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffDatabaseListTask.h
@@ -0,0 +1,45 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SNPEFF_DATABASE_LIST_TASK_H_
+#define _U2_SNPEFF_DATABASE_LIST_TASK_H_
+
+#include <U2Core/ExternalToolRunTask.h>
+
+namespace U2 {
+
+class SnpEffDatabaseListTask : public ExternalToolSupportTask {
+    Q_OBJECT
+public:
+    SnpEffDatabaseListTask();
+
+    void prepare();
+    void run();
+
+    QString getDbListFilePath() { return dbListFilePath; }
+private:
+    QString dbListFilePath;
+    QString snpEffVersion;
+};
+
+} // nemaspace U2
+
+#endif // _U2_SNPEFF_DATABASE_LIST_TASK_H_
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
index 539a755..9943ad1 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,8 @@
  */
 
 #include "SnpEffSupport.h"
+#include "SnpEffDatabaseListModel.h"
+#include "SnpEffDatabaseListTask.h"
 #include "java/JavaSupport.h"
 
 #include <U2Core/AppContext.h>
@@ -29,11 +31,13 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/ScriptingToolRegistry.h>
+#include <U2Core/Settings.h>
 
 #include <U2Formats/ConvertFileTask.h>
 
 namespace U2 {
 
+SnpEffDatabaseListModel* SnpEffSupport::databaseModel = new SnpEffDatabaseListModel();
 
 SnpEffSupport::SnpEffSupport(const QString& name, const QString& path) : ExternalTool(name, path)
 {
@@ -48,12 +52,14 @@ SnpEffSupport::SnpEffSupport(const QString& name, const QString& path) : Externa
     validMessage = "Usage: snpEff \\[command\\] \\[options\\] \\[files\\]";
     description = tr("<i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.");
 
-    versionRegExp = QRegExp("version SnpEff (\\d+.\\d+)");
+    versionRegExp = QRegExp("version SnpEff (\\d+.\\d+[a-zA-Z]?)");
     validationArguments << "-h";
     toolKitName = "SnpEff";
 
     toolRunnerProgramm = ET_JAVA;
     dependencies << ET_JAVA;
+
+    connect(this, SIGNAL(si_toolValidationStatusChanged(bool)), SLOT(sl_validationStatusChanged(bool)));
 }
 
 const QStringList SnpEffSupport::getToolRunnerAdditionalOptions() {
@@ -74,5 +80,25 @@ const QStringList SnpEffSupport::getToolRunnerAdditionalOptions() {
     return result;
 }
 
+void SnpEffSupport::sl_validationStatusChanged(bool isValid) {
+    if (isValid) {
+        SnpEffDatabaseListTask* task = new SnpEffDatabaseListTask();
+        connect(task, SIGNAL(si_stateChanged()), SLOT(sl_databaseListIsReady()));
+        AppContext::getTaskScheduler()->registerTopLevelTask(task);
+    }
+}
+
+void SnpEffSupport::sl_databaseListIsReady() {
+    SnpEffDatabaseListTask* task = dynamic_cast<SnpEffDatabaseListTask*>(sender());
+    SAFE_POINT(task != NULL, "SnpEffDatabaseListTask is NULL: wrong sender",);
+    if (task->isCanceled() || task->hasError() || !task->isFinished()) {
+        return;
+    }
+    QString dbListFilePath = task->getDbListFilePath();
+    SAFE_POINT(!dbListFilePath.isEmpty(), tr("Failed to get SnpEff database list"), );
+
+    SnpEffSupport::databaseModel->getData(dbListFilePath);
+}
+
 }//namespace
 
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
index 9ffcd65..e689737 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,12 +28,20 @@
 
 namespace U2 {
 
+class SnpEffDatabaseListModel;
+
 class SnpEffSupport : public ExternalTool {
     Q_OBJECT
 public:
     SnpEffSupport(const QString& name, const QString& path = "");
 
     const QStringList getToolRunnerAdditionalOptions();
+
+    static SnpEffDatabaseListModel* databaseModel;
+
+private slots:
+    void sl_validationStatusChanged(bool isValid);
+    void sl_databaseListIsReady();
 };
 
 }//namespace
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
index d0cb3c5..27eccca 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include "SnpEffSupport.h"
 #include "SnpEffTask.h"
@@ -43,8 +43,9 @@ namespace U2 {
 
 const QStringList SnpEffParser::stringsToIgnore = SnpEffParser::initStringsToIgnore();
 
-SnpEffParser::SnpEffParser()
-    :ExternalToolLogParser() {
+SnpEffParser::SnpEffParser(const QString &genome)
+    : ExternalToolLogParser(),
+      genome(genome) {
 
 }
 
@@ -87,6 +88,11 @@ void SnpEffParser::parseErrOutput( const QString& partOfLog ) {
             continue;
         }
 
+        if (!genome.isEmpty() && buf.contains("Property: '" + genome + ".genome' not found")) {
+            setLastError(tr("Genome database '%1' is not found.").arg(genome));
+            continue;
+        }
+
         if (buf.contains("ERROR", Qt::CaseInsensitive)) {
             if (buf.startsWith("#")) {
                 coreLog.details("SnpEff notificates about genome database error: " + buf);
@@ -131,7 +137,7 @@ void SnpEffTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError("Directory does not exist: " + outDir.absolutePath());
+        setError("Folder does not exist: " + outDir.absolutePath());
         return ;
     }
 
@@ -143,7 +149,7 @@ void SnpEffTask::prepare(){
     const QStringList args = getParameters(stateInfo);
     CHECK_OP(stateInfo, );
 
-    ExternalToolRunTask* etTask = new ExternalToolRunTask(ET_SNPEFF, args, new SnpEffParser(), settings.outDir, QStringList(), QString(), true);
+    ExternalToolRunTask* etTask = new ExternalToolRunTask(ET_SNPEFF, args, new SnpEffParser(settings.genome), settings.outDir, QStringList(), QString(), true);
     setListenerForTask(etTask);
     etTask->setStandartOutputFile( getResFileUrl() );
     addSubTask(etTask);
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.h b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.h
index a6c6858..3cc8e80 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffTask.h
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -68,8 +68,9 @@ protected:
 
 
 class SnpEffParser : public ExternalToolLogParser {
+    Q_OBJECT
 public:
-    SnpEffParser();
+    SnpEffParser(const QString &genome = QString());
 
     void parseOutput(const QString& partOfLog);
     void parseErrOutput(const QString& partOfLog);
@@ -78,6 +79,7 @@ private:
     static QStringList initStringsToIgnore();
 
     QString lastErrLine;
+    QString genome;
 
     static const QStringList stringsToIgnore;
 };
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
index d33cbde..48526be 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,6 +35,7 @@
 #include <U2Core/SnpeffDictionary.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -49,6 +50,7 @@
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "SnpEffDatabaseDelegate.h"
 #include "SnpEffSupport.h"
 #include "SnpEffTask.h"
 #include "SnpEffWorker.h"
@@ -114,13 +116,13 @@ void SnpEffFactory::init() {
     QList<Attribute*> a;
     {
 
-        Descriptor outDir(SnpEffWorker::OUT_MODE_ID, SnpEffWorker::tr("Output directory"),
-            SnpEffWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(SnpEffWorker::OUT_MODE_ID, SnpEffWorker::tr("Output folder"),
+            SnpEffWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(SnpEffWorker::CUSTOM_DIR_ID, SnpEffWorker::tr("Custom directory"),
-            SnpEffWorker::tr("Select the custom output directory."));
+        Descriptor customDir(SnpEffWorker::CUSTOM_DIR_ID, SnpEffWorker::tr("Custom folder"),
+            SnpEffWorker::tr("Select the custom output folder."));
 
         Descriptor inpFormat(SnpEffWorker::INPUT_FORMAT, SnpEffWorker::tr("Input format"),
             SnpEffWorker::tr("Select the input format of variations."));
@@ -154,7 +156,7 @@ void SnpEffFactory::init() {
 
         a << new Attribute( inpFormat, BaseTypes::STRING_TYPE(), false, "vcf");
         a << new Attribute( outFormat, BaseTypes::STRING_TYPE(), false, "vcf");
-        a << new Attribute( genome, BaseTypes::STRING_TYPE(), false, "hg19");
+        a << new Attribute( genome, BaseTypes::STRING_TYPE(), true);
         a << new Attribute( updownLength, BaseTypes::STRING_TYPE(), false, "0");
         a << new Attribute( canon, BaseTypes::BOOL_TYPE(), false, false);
         a << new Attribute( hgvs, BaseTypes::BOOL_TYPE(), false, false);
@@ -175,6 +177,7 @@ void SnpEffFactory::init() {
         delegates[SnpEffWorker::OUT_MODE_ID] = new ComboBoxDelegate(directoryMap);
 
         delegates[SnpEffWorker::CUSTOM_DIR_ID] = new URLDelegate("", "", false, true);
+        delegates[SnpEffWorker::GENOME] = new SnpEffDatabaseDelegate();
 
         {
             QVariantMap inFMap;
@@ -203,18 +206,6 @@ void SnpEffFactory::init() {
             dataMap["20000 bases"] = "20000";
             delegates[SnpEffWorker::UPDOWN_LENGTH] = new ComboBoxDelegate(dataMap);
         }
-        {
-            QVariantMap genomeMap;
-            genomeMap["Arabidopsis Thaliana (athaliana130)"] = "athaliana130";
-            genomeMap["Drosophila Melanogaster (dm5.48)"] = "dm5.48";
-            genomeMap["Homo sapiens (hg19)"] = "hg19";
-            genomeMap["Homo sapiens (hg38)"] = "hg38";
-            genomeMap["Ecoli K12 MG1655 (NC_000913)"] = "NC_000913";
-            genomeMap["C. elegans (WS241)"] = "WS241";
-            genomeMap["Ebola Zaire Virus (NC_002549)"] = "NC_002549";
-            delegates[SnpEffWorker::GENOME] = new ComboBoxEditableDelegate(genomeMap);
-        }
-
     }
 
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
@@ -335,7 +326,7 @@ void SnpEffWorker::sendResult(const QString &url) {
     outputUrlPort->put(message);
 }
 
-const QStrStrMap SnpEffLogProcessor::wellKnownMessages = SnpEffLogProcessor::initWellKnownMessages();
+const StrStrMap SnpEffLogProcessor::wellKnownMessages = SnpEffLogProcessor::initWellKnownMessages();
 const QMap<QString, QRegExp> SnpEffLogProcessor::messageCatchers = SnpEffLogProcessor::initWellKnownCatchers();
 
 SnpEffLogProcessor::SnpEffLogProcessor(WorkflowMonitor *monitor, const QString &actor) :
@@ -360,7 +351,7 @@ void SnpEffLogProcessor::addNotification(const QString &key, int count) {
     monitor->addError(warningMessage, actor, Problem::U2_WARNING);
 }
 
-QStrStrMap SnpEffLogProcessor::initWellKnownMessages() {
+StrStrMap SnpEffLogProcessor::initWellKnownMessages() {
     return SnpeffDictionary::messageDescriptions;
 }
 
diff --git a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.h b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.h
index 3b4a2c3..905a198 100644
--- a/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.h
+++ b/src/plugins/external_tool_support/src/snpeff/SnpEffWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -59,6 +59,7 @@ public:
     static const QString INPUT_FORMAT;
     static const QString OUTPUT_FORMAT;
     static const QString GENOME;
+    static const QString TEST_DB;
     static const QString UPDOWN_LENGTH;
 
     static const QString CANON;
@@ -95,13 +96,13 @@ public:
 
 private:
     void addNotification(const QString &key, int count);
-    static QStrStrMap initWellKnownMessages();
+    static StrStrMap initWellKnownMessages();
     static QMap<QString, QRegExp> initWellKnownCatchers();
 
     WorkflowMonitor *monitor;
     const QString actor;
 
-    static const QStrStrMap wellKnownMessages;
+    static const StrStrMap wellKnownMessages;
     static const QMap<QString, QRegExp> messageCatchers;
 };
 
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSettings.ui b/src/plugins/external_tool_support/src/spades/SpadesSettings.ui
index 9f8ee39..f1877a3 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSettings.ui
+++ b/src/plugins/external_tool_support/src/spades/SpadesSettings.ui
@@ -109,7 +109,7 @@
           <item row="4" column="1">
            <widget class="QLineEdit" name="kmerEdit">
             <property name="text">
-             <string>auto</string>
+             <string notr="true">auto</string>
             </property>
            </widget>
           </item>
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.cpp b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.cpp
index 2e06e52..0c1fbba 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.cpp
+++ b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
index b4a7f7d..eadccb5 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
+++ b/src/plugins/external_tool_support/src/spades/SpadesSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSupport.cpp b/src/plugins/external_tool_support/src/spades/SpadesSupport.cpp
index 14b9938..e5bf52e 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSupport.cpp
+++ b/src/plugins/external_tool_support/src/spades/SpadesSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spades/SpadesSupport.h b/src/plugins/external_tool_support/src/spades/SpadesSupport.h
index 03b2815..f6a77b4 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesSupport.h
+++ b/src/plugins/external_tool_support/src/spades/SpadesSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spades/SpadesTask.cpp b/src/plugins/external_tool_support/src/spades/SpadesTask.cpp
index 0d3ce67..8ef5ee3 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesTask.cpp
+++ b/src/plugins/external_tool_support/src/spades/SpadesTask.cpp
@@ -1,7 +1,7 @@
 
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,9 +20,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QTextStream>
-#include <QtCore/QFileInfo>
+#include <QDir>
+#include <QTextStream>
+#include <QFileInfo>
 
 #include <U2Core/Counter.h>
 #include <U2Core/DocumentUtils.h>
@@ -58,7 +58,7 @@ SpadesTask::SpadesTask(const  GenomeAssemblyTaskSettings &settings):
 void SpadesTask::prepare() {
     const QDir outDir = QFileInfo(settings.outDir.getURLString()).absoluteDir();
     if (!outDir.exists()) {
-        stateInfo.setError(tr("Directory does not exist: ") + outDir.absolutePath());
+        stateInfo.setError(tr("Folder does not exist: ") + outDir.absolutePath());
         return ;
     }
     writeYamlReads();
@@ -101,6 +101,9 @@ void SpadesTask::prepare() {
     arguments.append("--disable-gzip-output");
 
     assemblyTask = new ExternalToolRunTask(ET_SPADES, arguments, new SpadesLogParser(), settings.outDir.getURLString());
+    if (!settings.listeners.isEmpty()) {
+        assemblyTask->addOutputListener(settings.listeners.first());
+    }
     addSubTask(assemblyTask);
 }
 
@@ -112,7 +115,7 @@ Task::ReportResult SpadesTask::report() {
     if(!FileAndDirectoryUtils::isFileEmpty(res)){
         resultUrl = res;
     }else{
-        stateInfo.setError(QString("File %1 has not been found in output directory %2").arg(SpadesTask::SCAFFOLDS_NAME).arg(settings.outDir.getURLString()));
+        stateInfo.setError(QString("File %1 has not been found in output folder %2").arg(SpadesTask::SCAFFOLDS_NAME).arg(settings.outDir.getURLString()));
     }
 
 
diff --git a/src/plugins/external_tool_support/src/spades/SpadesTask.h b/src/plugins/external_tool_support/src/spades/SpadesTask.h
index 19c3645..c5467ea 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesTask.h
+++ b/src/plugins/external_tool_support/src/spades/SpadesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@ public:
     static const QString SCAFFOLDS_NAME;
 
 private:
-    Task *assemblyTask;
+    ExternalToolRunTask *assemblyTask;
 
 private:
     void writeYamlReads();
diff --git a/src/plugins/external_tool_support/src/spades/SpadesWorker.cpp b/src/plugins/external_tool_support/src/spades/SpadesWorker.cpp
index 9e66d87..b87ddcb 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesWorker.cpp
+++ b/src/plugins/external_tool_support/src/spades/SpadesWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Algorithm/GenomeAssemblyMultiTask.h>
 
@@ -111,7 +111,8 @@ Task *SpadesWorker::tick() {
         }
         settings.reads = QList<AssemblyReads>()<<read;
 
-        Task* t = new GenomeAssemblyMultiTask(settings);
+        settings.listeners = createLogListeners();
+        GenomeAssemblyMultiTask* t = new GenomeAssemblyMultiTask(settings);
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
         return t;
     }else if (inChannel->isEnded()) {
@@ -183,7 +184,7 @@ class SpadesInputSlotsValidator : public PortValidator {
 
     bool validate(const IntegralBusPort *port, ProblemList &problemList) const {
         QVariant busMap = port->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-        bool data = isBinded(busMap.value<QStrStrMap>(), READS_URL_SLOT_ID);
+        bool data = isBinded(busMap.value<StrStrMap>(), READS_URL_SLOT_ID);
         if (!data){
             QString dataName = slotName(port, READS_URL_SLOT_ID);
             problemList.append(Problem(IntegralBusPort::tr("The slot must be not empty: '%1'").arg(dataName)));
@@ -191,8 +192,8 @@ class SpadesInputSlotsValidator : public PortValidator {
         }
 
 
-        QString slot1Val = busMap.value<QStrStrMap>().value(READS_URL_SLOT_ID);
-        QString slot2Val = busMap.value<QStrStrMap>().value(READS_PAIRED_URL_SLOT_ID);
+        QString slot1Val = busMap.value<StrStrMap>().value(READS_URL_SLOT_ID);
+        QString slot2Val = busMap.value<StrStrMap>().value(READS_PAIRED_URL_SLOT_ID);
         U2OpStatusImpl os;
         const QList<IntegralBusSlot>& slots1 = IntegralBusSlot::listFromString(slot1Val, os);
         const QList<IntegralBusSlot>& slots2 = IntegralBusSlot::listFromString(slot2Val, os);
@@ -261,8 +262,8 @@ void SpadesWorkerFactory::init() {
      QList<Attribute*> attrs;
      {
          Descriptor outDir(OUTPUT_DIR,
-             SpadesWorker::tr("Output directory"),
-             SpadesWorker::tr("Directory to save Spades output files."));
+             SpadesWorker::tr("Output folder"),
+             SpadesWorker::tr("Folder to save Spades output files."));
 
          Descriptor threads(SpadesTask::OPTION_THREADS,
              SpadesWorker::tr("Number of threads"),
diff --git a/src/plugins/external_tool_support/src/spades/SpadesWorker.h b/src/plugins/external_tool_support/src/spades/SpadesWorker.h
index f65bb3d..ae07e06 100644
--- a/src/plugins/external_tool_support/src/spades/SpadesWorker.h
+++ b/src/plugins/external_tool_support/src/spades/SpadesWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spidey/SpideySupport.cpp b/src/plugins/external_tool_support/src/spidey/SpideySupport.cpp
index a878702..e9edc77 100644
--- a/src/plugins/external_tool_support/src/spidey/SpideySupport.cpp
+++ b/src/plugins/external_tool_support/src/spidey/SpideySupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -135,7 +135,7 @@ void SpideySupportContext::sl_align_with_Spidey() {
 
     QWidget* parent = QApplication::activeWindow();
 
-    //Check that Spidey and tempory directory path defined
+    //Check that Spidey and tempory folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(ET_SPIDEY)->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox(parent);
         msgBox->setWindowTitle(ET_SPIDEY);
diff --git a/src/plugins/external_tool_support/src/spidey/SpideySupport.h b/src/plugins/external_tool_support/src/spidey/SpideySupport.h
index 06c9468..b75338b 100644
--- a/src/plugins/external_tool_support/src/spidey/SpideySupport.h
+++ b/src/plugins/external_tool_support/src/spidey/SpideySupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spidey/SpideySupportTask.cpp b/src/plugins/external_tool_support/src/spidey/SpideySupportTask.cpp
index 50e9a17..ed79d56 100644
--- a/src/plugins/external_tool_support/src/spidey/SpideySupportTask.cpp
+++ b/src/plugins/external_tool_support/src/spidey/SpideySupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/spidey/SpideySupportTask.h b/src/plugins/external_tool_support/src/spidey/SpideySupportTask.h
index 76ddd54..6772420 100644
--- a/src/plugins/external_tool_support/src/spidey/SpideySupportTask.h
+++ b/src/plugins/external_tool_support/src/spidey/SpideySupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_SPIDEY_SUPPORT_TASK_H_
 #define _U2_SPIDEY_SUPPORT_TASK_H_
 
-#include <QtCore/QFile>
-#include <QtCore/QStringList>
+#include <QFile>
+#include <QStringList>
 
 #include <U2Formats/StreamSequenceReader.h>
 #include <U2Formats/StreamSequenceWriter.h>
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.cpp
index aeb1785..5455b31 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
@@ -35,7 +35,7 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "ExternalToolSupportSettings.h"
 #include "ExternalToolSupportSettingsController.h"
@@ -69,7 +69,7 @@ TCoffeeSupport::TCoffeeSupport(const QString& name, const QString& path) : Exter
 }
 
 void TCoffeeSupport::sl_runWithExtFileSpecify(){
-    //Check that T-Coffee and tempory directory path defined
+    //Check that T-Coffee and tempory folder path defined
     if (path.isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(name);
@@ -117,18 +117,16 @@ void TCoffeeSupport::sl_runWithExtFileSpecify(){
 
 ////////////////////////////////////////
 //TCoffeeSupportContext
-TCoffeeSupportContext::TCoffeeSupportContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+TCoffeeSupportContext::TCoffeeSupportContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 
 }
 
 void TCoffeeSupportContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-            return;
-    }
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
 
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     AlignMsaAction* alignAction = new AlignMsaAction(this, ET_TCOFFEE, view, tr("Align with T-Coffee..."), 2000);
@@ -137,8 +135,8 @@ void TCoffeeSupportContext::initViewContext(GObjectView* view) {
     addViewAction(alignAction);
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
 
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align_with_TCoffee()));
 }
 
@@ -152,7 +150,7 @@ void TCoffeeSupportContext::buildMenu(GObjectView* view, QMenu* m) {
 }
 
 void TCoffeeSupportContext::sl_align_with_TCoffee() {
-    //Check that T-Coffee and temporary directory path defined
+    //Check that T-Coffee and temporary folder path defined
     if (AppContext::getExternalToolRegistry()->getByName(ET_TCOFFEE)->getPath().isEmpty()){
         QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
         msgBox->setWindowTitle(ET_TCOFFEE);
@@ -186,7 +184,7 @@ void TCoffeeSupportContext::sl_align_with_TCoffee() {
     AlignMsaAction* action = qobject_cast<AlignMsaAction*>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMsaEditor();
-    MAlignmentObject* obj = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj == NULL)
             return;
     assert(!obj->isStateLocked());
@@ -200,7 +198,7 @@ void TCoffeeSupportContext::sl_align_with_TCoffee() {
         return;
     }
 
-    TCoffeeSupportTask* tCoffeeSupportTask = new TCoffeeSupportTask(obj->getMAlignment(), GObjectReference(obj), settings);
+    TCoffeeSupportTask* tCoffeeSupportTask = new TCoffeeSupportTask(obj->getMultipleAlignment(), GObjectReference(obj), settings);
     connect(obj, SIGNAL(destroyed()), tCoffeeSupportTask, SLOT(cancel()));
     AppContext::getTaskScheduler()->registerTopLevelTask(tCoffeeSupportTask);
 
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.h b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.h
index 3fa4f10..5a21993 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.h
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
index e3f4ee6..d3912bf 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ TCoffeeSupportRunDialog::TCoffeeSupportRunDialog(TCoffeeSupportTaskSettings& _se
     QDialog(_parent), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223231");
+    new HelpButton(this, buttonBox, "20875135");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -71,7 +71,7 @@ TCoffeeWithExtFileSpecifySupportRunDialog::TCoffeeWithExtFileSpecifySupportRunDi
     saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223231");
+    new HelpButton(this, buttonBox, "20875135");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -84,7 +84,7 @@ TCoffeeWithExtFileSpecifySupportRunDialog::TCoffeeWithExtFileSpecifySupportRunDi
 void TCoffeeWithExtFileSpecifySupportRunDialog::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
index 3bbdf2d..6b63dc3 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.cpp
index 80868f8..959e5dc 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
+#include <QCoreApplication>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -32,7 +32,7 @@
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
 #include <U2Core/ProjectModel.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/AddDocumentTask.h>
 #include <U2Core/IOAdapterUtils.h>
@@ -55,9 +55,9 @@ void TCoffeeSupportTaskSettings::reset() {
     inputFilePath="";
 }
 
-TCoffeeSupportTask::TCoffeeSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const TCoffeeSupportTaskSettings& _settings)
+TCoffeeSupportTask::TCoffeeSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const TCoffeeSupportTaskSettings& _settings)
     : ExternalToolSupportTask("Run T-Coffee alignment task", TaskFlags_NR_FOSCOE),
-      inputMsa(_inputMsa),
+      inputMsa(_inputMsa->getExplicitCopy()),
       objRef(_objRef),
       settings(_settings),
       lock(NULL)
@@ -67,8 +67,8 @@ TCoffeeSupportTask::TCoffeeSupportTask(const MAlignment& _inputMsa, const GObjec
     loadTmpDocumentTask=NULL;
     tCoffeeTask=NULL;
     tmpDoc=NULL;
-    resultMA.setAlphabet(inputMsa.getAlphabet());
-    resultMA.setName(inputMsa.getName());
+    resultMA->setAlphabet(inputMsa->getAlphabet());
+    resultMA->setName(inputMsa->getName());
 }
 
 TCoffeeSupportTask::~TCoffeeSupportTask() {
@@ -80,7 +80,7 @@ TCoffeeSupportTask::~TCoffeeSupportTask() {
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
                 CHECK(NULL != alObj, );
                 if(alObj->isStateLocked()) {
                     alObj->unlockState(lock);
@@ -93,9 +93,9 @@ TCoffeeSupportTask::~TCoffeeSupportTask() {
 }
 
 void TCoffeeSupportTask::prepare(){
-    if (inputMsa.getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
-            inputMsa.getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
-        setError(tr("Unsupported alphabet: %1").arg(inputMsa.getAlphabet()->getName()));
+    if (inputMsa->getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
+            inputMsa->getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
+        setError(tr("Unsupported alphabet: %1").arg(inputMsa->getAlphabet()->getName()));
         return;
     }
 
@@ -104,15 +104,15 @@ void TCoffeeSupportTask::prepare(){
     if (objRef.isValid()) {
         GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
         if (NULL != obj) {
-            MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying ClustalW results!",);
+            MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+            SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying ClustalW results!",);
             lock = new StateLock("ClustalWAligment");
             alObj->lockState(lock);
         }
     }
 
     //Add new subdir for temporary files
-    //Directory name is ExternalToolName + CurrentDate + CurrentTime
+    //Folder name is ExternalToolName + CurrentDate + CurrentTime
 
     QString tmpDirName = "TCoffee_"+QString::number(this->getTaskId())+"_"+
                          QDate::currentDate().toString("dd.MM.yyyy")+"_"+
@@ -129,12 +129,12 @@ void TCoffeeSupportTask::prepare(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this directory."));
+            stateInfo.setError(tr("Subdir for temporary files exists. Can not remove this folder."));
             return;
         }
     }
     if(!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
 
@@ -156,7 +156,7 @@ QList<Task*> TCoffeeSupportTask::onSubTaskFinished(Task* subTask) {
     if(subTask==saveTemporaryDocumentTask){
         QStringList arguments;
         if(url.contains(" ")){
-            stateInfo.setError("Temporary directory path have space(s). Try select any other directory without spaces.");
+            stateInfo.setError("Temporary folder path have space(s). Try select any other folder without spaces.");
             return res;
         }
         arguments <<url;
@@ -206,32 +206,32 @@ QList<Task*> TCoffeeSupportTask::onSubTaskFinished(Task* subTask) {
         const QList<GObject*>& newDocumentObjects = tmpDoc->getObjects();
         SAFE_POINT(!newDocumentObjects.empty(), "No objects in the temporary document!", res);
 
-        MAlignmentObject* newMAligmentObject = qobject_cast<MAlignmentObject*>(newDocumentObjects.first());
+        MultipleSequenceAlignmentObject* newMAligmentObject = qobject_cast<MultipleSequenceAlignmentObject*>(newDocumentObjects.first());
         SAFE_POINT(NULL != newMAligmentObject, "Failed to cast object from temporary document to an alignment!", res);
 
-        resultMA = newMAligmentObject->getMAlignment();
-        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa.getRowNames());
+        resultMA = newMAligmentObject->getMsaCopy();
+        bool renamed = MSAUtils::restoreRowNames(resultMA, inputMsa->getRowNames());
         SAFE_POINT( renamed, "Failed to restore initial row names!", res);
 
         // If an alignment object has been specified, save the result to it
         if (objRef.isValid()) {
             GObject* obj = GObjectUtils::selectObjectByReference(objRef, UOF_LoadedOnly);
             if (NULL != obj) {
-                MAlignmentObject* alObj = dynamic_cast<MAlignmentObject*>(obj);
-                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MAlignmentObject during applying TCoffee results!", res);
+                MultipleSequenceAlignmentObject* alObj = dynamic_cast<MultipleSequenceAlignmentObject*>(obj);
+                SAFE_POINT(NULL != alObj, "Failed to convert GObject to MultipleSequenceAlignmentObject during applying TCoffee results!", res);
 
                 QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(inputMsa, resultMA, stateInfo);
                 CHECK_OP(stateInfo, res);
 
-                if (rowsOrder.count() != inputMsa.getNumRows()) {
+                if (rowsOrder.count() != inputMsa->getNumRows()) {
                     stateInfo.setError("Unexpected number of rows in the result multiple alignment!");
                     return res;
                 }
 
                 QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-                for (int i = 0, n = resultMA.getNumRows(); i < n; ++i) {
-                    qint64 rowId = resultMA.getRow(i).getRowDBInfo().rowId;
-                    const QList<U2MsaGap>& newGapModel = resultMA.getRow(i).getGapModel();
+                for (int i = 0, n = resultMA->getNumRows(); i < n; ++i) {
+                    qint64 rowId = resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+                    const QList<U2MsaGap>& newGapModel = resultMA->getMsaRow(i)->getGapModel();
                     rowsGapModel.insert(rowId, newGapModel);
                 }
 
@@ -245,7 +245,7 @@ QList<Task*> TCoffeeSupportTask::onSubTaskFinished(Task* subTask) {
                         lock = NULL;
                     }
                     else {
-                        stateInfo.setError("MAlignment object has been changed");
+                        stateInfo.setError("MultipleSequenceAlignment object has been changed");
                         return res;
                     }
 
@@ -256,11 +256,11 @@ QList<Task*> TCoffeeSupportTask::onSubTaskFinished(Task* subTask) {
                         return res;
                     }
 
-                    alObj->updateGapModel(rowsGapModel, stateInfo);
+                    alObj->updateGapModel(stateInfo, rowsGapModel);
                     SAFE_POINT_OP(stateInfo, res);
 
-                    if (rowsOrder != inputMsa.getRowsIds()) {
-                        alObj->updateRowsOrder(rowsOrder, stateInfo);
+                    if (rowsOrder != inputMsa->getRowsIds()) {
+                        alObj->updateRowsOrder(stateInfo, rowsOrder);
                         SAFE_POINT_OP(stateInfo, res);
                     }
                 }
@@ -288,7 +288,7 @@ Task::ReportResult TCoffeeSupportTask::report(){
             tmpDir.remove(file);
         }
         if(!tmpDir.rmdir(tmpDir.absolutePath())){
-            stateInfo.setError(tr("Can not remove directory for temporary files."));
+            stateInfo.setError(tr("Can not remove folder for temporary files."));
             emit si_stateChanged();
         }
     }
@@ -317,7 +317,7 @@ TCoffeeWithExtFileSpecifySupportTask::~TCoffeeWithExtFileSpecifySupportTask(){
 void TCoffeeWithExtFileSpecifySupportTask::prepare(){
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(settings.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -348,18 +348,18 @@ QList<Task*> TCoffeeWithExtFileSpecifySupportTask::onSubTaskFinished(Task* subTa
         currentDocument=loadDocumentTask->takeDocument();
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
 
         // Launch the task, objRef is empty - the input document maybe not in project
-        tCoffeeSupportTask = new TCoffeeSupportTask(mAObject->getMAlignment(), GObjectReference(), settings);
+        tCoffeeSupportTask = new TCoffeeSupportTask(mAObject->getMultipleAlignment(), GObjectReference(), settings);
         res.append(tCoffeeSupportTask);
     }
     else if (subTask == tCoffeeSupportTask) {
         // Set the result alignment to the alignment object of the current document
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject->copyGapModel(tCoffeeSupportTask->resultMA.getRows());
+        mAObject->updateGapModel(tCoffeeSupportTask->resultMA->getMsaRows());
 
         // Save the current document
         saveDocumentTask = new SaveDocumentTask(currentDocument,
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.h b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.h
index cd3ba6f..8b0ddc8 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.h
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/ExternalToolRunTask.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/GObjectReference.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Task.h>
 
@@ -52,7 +52,7 @@ class TCoffeeSupportTask : public ExternalToolSupportTask {
     Q_OBJECT
     Q_DISABLE_COPY(TCoffeeSupportTask)
 public:
-    TCoffeeSupportTask(const MAlignment& _inputMsa, const GObjectReference& _objRef, const TCoffeeSupportTaskSettings& _settings);
+    TCoffeeSupportTask(const MultipleSequenceAlignment& _inputMsa, const GObjectReference& _objRef, const TCoffeeSupportTaskSettings& _settings);
     ~TCoffeeSupportTask();
 
     void prepare();
@@ -60,9 +60,9 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  resultMA;
 private:
-    MAlignment                  inputMsa;
+    MultipleSequenceAlignment                  inputMsa;
     GObjectReference            objRef;
     QPointer<Document>          tmpDoc;
     QString                     url;
@@ -74,7 +74,7 @@ private:
     QPointer<StateLock>         lock;
 };
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class TCoffeeWithExtFileSpecifySupportTask : public Task {
     Q_OBJECT
@@ -87,7 +87,7 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*           mAObject;
+    MultipleSequenceAlignmentObject*           mAObject;
     Document*                   currentDocument;
     bool                        cleanDoc;
 
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.cpp b/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.cpp
index 3b7d9d8..4f10164 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.cpp
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,27 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "TCoffeeWorker.h"
-#include "TaskLocalStorage.h"
-#include "TCoffeeSupport.h"
+#include <U2Core/AppContext.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+
+#include <U2Designer/DelegateEditors.h>
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/NoFailTaskWrapper.h>
-#include <U2Designer/DelegateEditors.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/NoFailTaskWrapper.h>
+#include <U2Lang/WorkflowEnv.h>
 
-#include <U2Core/ExternalToolRegistry.h>
-#include <U2Core/Log.h>
-#include <U2Core/FailTask.h>
+#include "TCoffeeSupport.h"
+#include "TCoffeeWorker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -75,8 +77,8 @@ void TCoffeeWorkerFactory::init() {
                                      "0 - no iteration, -1 - Nseq iterations."));
     Descriptor etp(EXT_TOOL_PATH, TCoffeeWorker::tr("Tool Path"),
                    TCoffeeWorker::tr("External tool path."));
-    Descriptor tdp(TMP_DIR_PATH, TCoffeeWorker::tr("Temporary directory"),
-                   TCoffeeWorker::tr("Directory for temporary file.s"));
+    Descriptor tdp(TMP_DIR_PATH, TCoffeeWorker::tr("Temporary folder"),
+                   TCoffeeWorker::tr("folder for temporary file.s"));
 
     a << new Attribute(gop, BaseTypes::NUM_TYPE(), false, QVariant(-50));
     a << new Attribute(gep, BaseTypes::NUM_TYPE(), false, QVariant(0));
@@ -162,12 +164,12 @@ Task* TCoffeeWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if (msa.isEmpty()) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to T-Coffee.").arg(msa.getName()));
+        if (msa->isEmpty()) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to T-Coffee.").arg(msa->getName()));
             return NULL;
         }
         TCoffeeSupportTask* supportTask = new TCoffeeSupportTask(msa, GObjectReference(), cfg);
@@ -199,7 +201,7 @@ void TCoffeeWorker::sl_taskFinished() {
     QVariantMap msgData;
     msgData[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(msaId);
     output->put(Message(BaseTypes::MULTIPLE_ALIGNMENT_TYPE(), msgData));
-    algoLog.info(tr("Aligned %1 with T-Coffee").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with T-Coffee").arg(t->resultMA->getName()));
 }
 
 void TCoffeeWorker::cleanup() {
diff --git a/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.h b/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.h
index 21916f2..e5882d6 100644
--- a/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.h
+++ b/src/plugins/external_tool_support/src/tcoffee/TCoffeeWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp b/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
index f8762ab..3db6fec 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSettings.h b/src/plugins/external_tool_support/src/tophat/TopHatSettings.h
index 7d25832..9798ce7 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSettings.h
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -80,7 +80,7 @@ public:
     QString             bowtiePath;
     QString             samtoolsPath;
     QString             sample;
-    /** Working directory for the TopHat tool */
+    /** Working folder for the TopHat tool */
     QString             outDir;
 
     TopHatInputData     data;
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSupport.cpp b/src/plugins/external_tool_support/src/tophat/TopHatSupport.cpp
index 5a71884..6001bdf 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSupport.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSupport.h b/src/plugins/external_tool_support/src/tophat/TopHatSupport.h
index 932c5f1..e103a01 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSupport.h
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
index b951fb5..16aae8f 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <QCoreApplication>
 
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.h b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.h
index f253612..95882db 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.h
+++ b/src/plugins/external_tool_support/src/tophat/TopHatSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatWorker.cpp b/src/plugins/external_tool_support/src/tophat/TopHatWorker.cpp
index 1cec38f..89ce2d1 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatWorker.cpp
+++ b/src/plugins/external_tool_support/src/tophat/TopHatWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -189,33 +189,33 @@ void TopHatWorkerFactory::init()
 
     // Define parameters of the element
     Descriptor outDir(OUT_DIR,
-        TopHatWorker::tr("Output directory"),
-        TopHatWorker::tr("The base name of output directory. It could be modified with a suffix."));
+        TopHatWorker::tr("Output folder"),
+        TopHatWorker::tr("The base name of output folder. It could be modified with a suffix."));
 
     Descriptor samplesMap(SAMPLES_MAP,
         TopHatWorker::tr("Samples map"),
         TopHatWorker::tr("The map which divide all input datasets into samples. Every sample has the unique name."));
 
     Descriptor bowtieIndexDir(BOWTIE_INDEX_DIR,
-        TopHatWorker::tr("Bowtie index directory"),
-        TopHatWorker::tr("The directory with the Bowtie index for the reference sequence."));
+        TopHatWorker::tr("Bowtie index folder"),
+        TopHatWorker::tr("The folder with the Bowtie index for the reference sequence."));
 
     // THe refSeq parameter and Bowtie parameters' descriptions have been commented because of UGENE-1160
 
-    //     " It is required to either input a directory and a basename of a Bowtie index,"
+    //     " It is required to either input a folder and a basename of a Bowtie index,"
     //     " or a reference sequence."));
 
     Descriptor bowtieIndexBasename(BOWTIE_INDEX_BASENAME,
         TopHatWorker::tr("Bowtie index basename"),
         TopHatWorker::tr("The basename of the Bowtie index for the reference sequence."));
 
-    //    " It is required to either input a directory and a basename of a Bowtie index,"
+    //    " It is required to either input a folder and a basename of a Bowtie index,"
     //    " or a reference sequence."));
 
     // Descriptor refSeq(REF_SEQ,
     //    TopHatWorker::tr("Reference sequence"),
     //    TopHatWorker::tr("The reference sequence for short reads."
-    //    " It is required to either input a directory and a basename of a Bowtie index,"
+    //    " It is required to either input a folder and a basename of a Bowtie index,"
     //    " or a reference sequence. Note that the Bowtie index parameters have higher priority"
     //    " than this parameter, i.e. if they are specified, this parameter is ignored."));
 
@@ -345,8 +345,8 @@ void TopHatWorkerFactory::init()
         TopHatWorker::tr("The path to the TopHat external tool in UGENE."));
 
     Descriptor tmpDir(TMP_DIR_PATH,
-        TopHatWorker::tr("Temporary directory"),
-        TopHatWorker::tr("The directory for temporary files."));
+        TopHatWorker::tr("Temporary folder"),
+        TopHatWorker::tr("The folder for temporary files."));
 
     attributes << new Attribute(outDir, BaseTypes::STRING_TYPE(), true, "");
     {
@@ -769,7 +769,7 @@ QString DatasetData::getCurrentSample() const {
 /* Validators */
 /************************************************************************/
 bool InputSlotsValidator::validate(const IntegralBusPort *port, ProblemList &problemList) const {
-    QStrStrMap bm = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+    StrStrMap bm = port->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
     bool data = isBinded(bm, IN_DATA_SLOT_ID);
     bool pairedData = isBinded(bm, PAIRED_IN_DATA_SLOT_ID);
     bool url = isBinded(bm, IN_URL_SLOT_ID);
diff --git a/src/plugins/external_tool_support/src/tophat/TopHatWorker.h b/src/plugins/external_tool_support/src/tophat/TopHatWorker.h
index 31ad11a..6c2786b 100644
--- a/src/plugins/external_tool_support/src/tophat/TopHatWorker.h
+++ b/src/plugins/external_tool_support/src/tophat/TopHatWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/AlignMsaAction.cpp b/src/plugins/external_tool_support/src/utils/AlignMsaAction.cpp
index aa2336c..c2ddda9 100644
--- a/src/plugins/external_tool_support/src/utils/AlignMsaAction.cpp
+++ b/src/plugins/external_tool_support/src/utils/AlignMsaAction.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2View/MSAEditor.h>
 
 #include "AlignMsaAction.h"
diff --git a/src/plugins/external_tool_support/src/utils/AlignMsaAction.h b/src/plugins/external_tool_support/src/utils/AlignMsaAction.h
index 7313c53..825bb4a 100644
--- a/src/plugins/external_tool_support/src/utils/AlignMsaAction.h
+++ b/src/plugins/external_tool_support/src/utils/AlignMsaAction.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
index 8be0488..cc163cd 100644
--- a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
+++ b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -68,6 +68,8 @@ const QString OUT_PORT_DESCR("out-data");
 
 const QString OUTPUT_DIR("output-dir");
 
+const QString OUTPUT_SUBDIR("short-reads-aligner");
+
 const QString OUTPUT_NAME = "outname";
 
 const QString BASE_OUTFILE = "out.sam";
@@ -128,7 +130,12 @@ DnaAssemblyToRefTaskSettings BaseShortReadsAlignerWorker::getSettings(U2OpStatus
     //settings.refSeqUrl = GUrl(settings.indexFileName).baseFileName();
     settings.algName = algName;
 
+    QString tmpDir = FileAndDirectoryUtils::createWorkingDir(context->workingDir(), FileAndDirectoryUtils::WORKFLOW_INTERNAL, "", context->workingDir());
+    tmpDir = GUrlUtils::createDirectory(tmpDir + getAlignerSubdir() , "_", os);
+
     settings.setCustomSettings(getCustomParameters());
+    settings.cleanTmpDir = false;
+    settings.tmpDirPath = tmpDir;
 
     return settings;
 }
@@ -251,11 +258,15 @@ QString BaseShortReadsAlignerWorker::checkPairedReads() const {
     return "";
 }
 
+QString BaseShortReadsAlignerWorker::getAlignerSubdir() const {
+    return OUTPUT_SUBDIR;
+}
+
 //////////////////////////////////////////////////////////////////////////
 //ShortReadsAlignerSlotsValidator
 bool ShortReadsAlignerSlotsValidator::validate(const IntegralBusPort *port, ProblemList &problemList) const {
     QVariant busMap = port->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-    bool data = isBinded(busMap.value<QStrStrMap>(), READS_URL_SLOT_ID);
+    bool data = isBinded(busMap.value<StrStrMap>(), READS_URL_SLOT_ID);
     if (!data){
         QString dataName = slotName(port, READS_URL_SLOT_ID);
         problemList.append(Problem(IntegralBusPort::tr("The slot must be not empty: '%1'").arg(dataName)));
@@ -281,8 +292,8 @@ int BaseShortReadsAlignerWorkerFactory::getThreadsCount(){
 void BaseShortReadsAlignerWorkerFactory::addCommonAttributes(QList<Attribute*>& attrs, QMap<QString, PropertyDelegate*>& delegates) {
     {
         Descriptor outDir(OUTPUT_DIR,
-            BaseShortReadsAlignerWorker::tr("Output directory"),
-            BaseShortReadsAlignerWorker::tr("Directory to save output files."));
+            BaseShortReadsAlignerWorker::tr("Output folder"),
+            BaseShortReadsAlignerWorker::tr("Folder to save output files."));
 
         Descriptor refGenome(REFERENCE_GENOME,
             BaseShortReadsAlignerWorker::tr("Reference genome"),
diff --git a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
index 8b47d62..59d85a4 100644
--- a/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
+++ b/src/plugins/external_tool_support/src/utils/BaseShortReadsAlignerWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -57,6 +57,7 @@ protected:
     bool isReadyToRun() const;
     bool dataFinished() const;
     QString checkPairedReads() const;
+    virtual QString getAlignerSubdir() const;
 
 protected:
     QString      algName;
diff --git a/src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui b/src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui
index a75e330..3a141e3 100644
--- a/src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui
+++ b/src/plugins/external_tool_support/src/utils/BlastAllSupportDialog.ui
@@ -6,15 +6,15 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>812</width>
-    <height>315</height>
+    <width>1110</width>
+    <height>363</height>
    </rect>
   </property>
-  <property name="maximumSize">
-   <size>
-    <width>16777215</width>
-    <height>16777215</height>
-   </size>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
   </property>
   <property name="windowTitle">
    <string>Request to Local BLAST Database</string>
@@ -30,7 +30,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
+    <enum>QLayout::SetFixedSize</enum>
    </property>
    <item>
     <widget class="QTabWidget" name="optionsTab">
@@ -38,15 +38,24 @@
       <number>0</number>
      </property>
      <widget class="QWidget" name="tab">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
       <attribute name="title">
        <string>General options</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_3">
        <property name="sizeConstraint">
-        <enum>QLayout::SetMinAndMaxSize</enum>
+        <enum>QLayout::SetFixedSize</enum>
        </property>
        <item>
         <layout class="QGridLayout" name="gridLayout_2">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetFixedSize</enum>
+         </property>
          <item row="0" column="0">
           <widget class="QLabel" name="label_2">
            <property name="text">
@@ -153,6 +162,9 @@
          </item>
          <item row="2" column="2">
           <layout class="QHBoxLayout" name="horizontalLayout_8">
+           <property name="sizeConstraint">
+            <enum>QLayout::SetMaximumSize</enum>
+           </property>
            <item>
             <widget class="QRadioButton" name="bothStrandsButton">
              <property name="text">
@@ -183,10 +195,19 @@
        </item>
        <item>
         <widget class="QWidget" name="dbSelectorWidget" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
          <layout class="QVBoxLayout" name="verticalLayout_9">
           <property name="spacing">
            <number>0</number>
           </property>
+          <property name="sizeConstraint">
+           <enum>QLayout::SetMinAndMaxSize</enum>
+          </property>
           <property name="leftMargin">
            <number>0</number>
           </property>
@@ -203,14 +224,37 @@
         </widget>
        </item>
        <item>
-        <layout class="QVBoxLayout" name="verticalLayout_4">
-         <property name="sizeConstraint">
-          <enum>QLayout::SetMinAndMaxSize</enum>
+        <widget class="QWidget" name="annotationWidget" native="true">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
          </property>
-        </layout>
+         <layout class="QVBoxLayout" name="annotationWidgetLayout">
+          <property name="sizeConstraint">
+           <enum>QLayout::SetMinAndMaxSize</enum>
+          </property>
+          <property name="leftMargin">
+           <number>0</number>
+          </property>
+          <property name="topMargin">
+           <number>0</number>
+          </property>
+          <property name="rightMargin">
+           <number>0</number>
+          </property>
+          <property name="bottomMargin">
+           <number>0</number>
+          </property>
+         </layout>
+        </widget>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
          <item>
           <spacer name="horizontalSpacer_2">
            <property name="orientation">
@@ -264,12 +308,56 @@
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
       <attribute name="title">
        <string>Advanced options</string>
       </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_8">
+      <layout class="QVBoxLayout" name="verticalLayout_8" stretch="0,0,1">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
        <item>
         <layout class="QGridLayout" name="gridLayout">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
+         <item row="4" column="1" colspan="4">
+          <widget class="QComboBox" name="compStatsComboBox">
+           <property name="sizeAdjustPolicy">
+            <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+           </property>
+           <item>
+            <property name="text">
+             <string>D or d: default (equivalent to 2 )</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>0 or F or f: No composition-based statistics</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>1: Composition-based statistics as in NAR 29:2994-3005, 2001</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally</string>
+            </property>
+           </item>
+          </widget>
+         </item>
          <item row="2" column="4">
           <widget class="QComboBox" name="serviceComboBox">
            <property name="sizePolicy">
@@ -295,6 +383,32 @@
            </item>
           </widget>
          </item>
+         <item row="0" column="2">
+          <spacer name="horizontalSpacer_3">
+           <property name="orientation">
+            <enum>Qt::Horizontal</enum>
+           </property>
+           <property name="sizeHint" stdset="0">
+            <size>
+             <width>40</width>
+             <height>20</height>
+            </size>
+           </property>
+          </spacer>
+         </item>
+         <item row="2" column="3">
+          <widget class="QLabel" name="serviceLabel">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="text">
+            <string>Service</string>
+           </property>
+          </widget>
+         </item>
          <item row="1" column="3">
           <widget class="QLabel" name="matchScoreLabel">
            <property name="sizePolicy">
@@ -308,8 +422,37 @@
            </property>
           </widget>
          </item>
-         <item row="2" column="3">
-          <widget class="QLabel" name="serviceLabel">
+         <item row="2" column="1">
+          <widget class="QComboBox" name="matrixComboBox">
+           <item>
+            <property name="text">
+             <string>BLOSUM62</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>BLOSUM45</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>BLOSUM80</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>PAM30</string>
+            </property>
+           </item>
+           <item>
+            <property name="text">
+             <string>PAM70</string>
+            </property>
+           </item>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QLabel" name="matrixLabel">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
              <horstretch>0</horstretch>
@@ -317,7 +460,7 @@
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Service</string>
+            <string>Matrix</string>
            </property>
           </widget>
          </item>
@@ -379,21 +522,18 @@
            </item>
           </widget>
          </item>
-         <item row="0" column="0">
-          <widget class="QLabel" name="label_4">
-           <property name="sizePolicy">
-            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
-             <horstretch>0</horstretch>
-             <verstretch>0</verstretch>
-            </sizepolicy>
-           </property>
+         <item row="3" column="1" colspan="4">
+          <widget class="QLineEdit" name="phiPatternEdit"/>
+         </item>
+         <item row="3" column="0">
+          <widget class="QLabel" name="phiPatternLabel">
            <property name="text">
-            <string>Word size</string>
+            <string>PHI pattern</string>
            </property>
           </widget>
          </item>
-         <item row="2" column="0">
-          <widget class="QLabel" name="matrixLabel">
+         <item row="0" column="0">
+          <widget class="QLabel" name="label_4">
            <property name="sizePolicy">
             <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
              <horstretch>0</horstretch>
@@ -401,51 +541,12 @@
             </sizepolicy>
            </property>
            <property name="text">
-            <string>Matrix</string>
-           </property>
-          </widget>
-         </item>
-         <item row="2" column="1">
-          <widget class="QComboBox" name="matrixComboBox">
-           <item>
-            <property name="text">
-             <string>BLOSUM62</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>BLOSUM45</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>BLOSUM80</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>PAM30</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>PAM70</string>
-            </property>
-           </item>
-          </widget>
-         </item>
-         <item row="4" column="1" colspan="4">
-          <widget class="QLineEdit" name="phiPatternEdit"/>
-         </item>
-         <item row="4" column="0">
-          <widget class="QLabel" name="phiPatternLabel">
-           <property name="text">
-            <string>PHI pattern</string>
+            <string>Word size</string>
            </property>
           </widget>
          </item>
-         <item row="0" column="2">
-          <spacer name="horizontalSpacer_3">
+         <item row="1" column="2">
+          <spacer name="horizontalSpacer_5">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
@@ -457,18 +558,8 @@
            </property>
           </spacer>
          </item>
-         <item row="2" column="2">
-          <spacer name="horizontalSpacer_4">
-           <property name="orientation">
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0">
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
+         <item row="1" column="1">
+          <widget class="QDoubleSpinBox" name="thresholdSpinBox"/>
          </item>
          <item row="0" column="1">
           <widget class="QSpinBox" name="wordSizeSpinBox">
@@ -477,18 +568,8 @@
            </property>
           </widget>
          </item>
-         <item row="1" column="0">
-          <widget class="QLabel" name="thresholdLabel">
-           <property name="toolTip">
-            <string>Threshold for extending hits</string>
-           </property>
-           <property name="text">
-            <string>Threshold</string>
-           </property>
-          </widget>
-         </item>
-         <item row="1" column="2">
-          <spacer name="horizontalSpacer_5">
+         <item row="2" column="2">
+          <spacer name="horizontalSpacer_4">
            <property name="orientation">
             <enum>Qt::Horizontal</enum>
            </property>
@@ -500,9 +581,6 @@
            </property>
           </spacer>
          </item>
-         <item row="1" column="1">
-          <widget class="QDoubleSpinBox" name="thresholdSpinBox"/>
-         </item>
          <item row="0" column="4">
           <widget class="QComboBox" name="costsComboBox">
            <property name="sizePolicy">
@@ -516,6 +594,16 @@
            </property>
           </widget>
          </item>
+         <item row="1" column="0">
+          <widget class="QLabel" name="thresholdLabel">
+           <property name="toolTip">
+            <string>Threshold for extending hits</string>
+           </property>
+           <property name="text">
+            <string>Threshold</string>
+           </property>
+          </widget>
+         </item>
          <item row="0" column="3">
           <widget class="QLabel" name="costsLabel">
            <property name="sizePolicy">
@@ -529,52 +617,29 @@
            </property>
           </widget>
          </item>
-         <item row="5" column="0">
+         <item row="4" column="0">
           <widget class="QLabel" name="compStatsLabel">
            <property name="text">
             <string>Composition-based statistics</string>
            </property>
           </widget>
          </item>
-         <item row="5" column="1" colspan="4">
-          <widget class="QComboBox" name="compStatsComboBox">
-           <item>
-            <property name="text">
-             <string>D or d: default (equivalent to 2 )</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>0 or F or f: No composition-based statistics</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>1: Composition-based statistics as in NAR 29:2994-3005, 2001</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties</string>
-            </property>
-           </item>
-           <item>
-            <property name="text">
-             <string>3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally</string>
-            </property>
-           </item>
-          </widget>
-         </item>
         </layout>
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_4">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
          <item>
           <widget class="QGroupBox" name="groupBox">
            <property name="title">
             <string>Filters</string>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout_7">
+            <property name="sizeConstraint">
+             <enum>QLayout::SetMinAndMaxSize</enum>
+            </property>
             <item>
              <widget class="QCheckBox" name="lowComplexityFilterCheckBox">
               <property name="text">
@@ -598,6 +663,9 @@
             <string>Masks</string>
            </property>
            <layout class="QVBoxLayout" name="verticalLayout">
+            <property name="sizeConstraint">
+             <enum>QLayout::SetMinAndMaxSize</enum>
+            </property>
             <item>
              <widget class="QCheckBox" name="lookupMaskCheckBox">
               <property name="text">
@@ -621,14 +689,17 @@
         </layout>
        </item>
        <item>
-        <spacer name="verticalSpacer_2">
+        <spacer name="verticalSpacer">
          <property name="orientation">
           <enum>Qt::Vertical</enum>
          </property>
+         <property name="sizeType">
+          <enum>QSizePolicy::Minimum</enum>
+         </property>
          <property name="sizeHint" stdset="0">
           <size>
            <width>20</width>
-           <height>40</height>
+           <height>0</height>
           </size>
          </property>
         </spacer>
@@ -636,18 +707,33 @@
       </layout>
      </widget>
      <widget class="QWidget" name="extOptionsTab">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
       <attribute name="title">
        <string>Extension options</string>
       </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_5">
+      <layout class="QVBoxLayout" name="verticalLayout_5" stretch="0,0,0">
+       <property name="sizeConstraint">
+        <enum>QLayout::SetMinAndMaxSize</enum>
+       </property>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_7">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
          <item>
           <widget class="QGroupBox" name="xDropoffGroupBox">
            <property name="title">
             <string>X dropoff value (in bits)</string>
            </property>
            <layout class="QGridLayout" name="gridLayout_4">
+            <property name="sizeConstraint">
+             <enum>QLayout::SetMinAndMaxSize</enum>
+            </property>
             <item row="0" column="0">
              <widget class="QLabel" name="label_11">
               <property name="text">
@@ -693,6 +779,9 @@
        </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_6">
+         <property name="sizeConstraint">
+          <enum>QLayout::SetMinAndMaxSize</enum>
+         </property>
          <item>
           <widget class="QLabel" name="label_7">
            <property name="text">
@@ -715,37 +804,11 @@
          </property>
         </widget>
        </item>
-       <item>
-        <spacer name="verticalSpacer_3">
-         <property name="orientation">
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
       </layout>
      </widget>
     </widget>
    </item>
    <item>
-    <spacer name="verticalSpacer">
-     <property name="orientation">
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0">
-      <size>
-       <width>20</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Yes</set>
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui
index 66437ca..9b41886 100644
--- a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidget.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>311</width>
+    <width>444</width>
     <height>68</height>
    </rect>
   </property>
@@ -20,6 +20,9 @@
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
+   <property name="sizeConstraint">
+    <enum>QLayout::SetMinAndMaxSize</enum>
+   </property>
    <property name="leftMargin">
     <number>0</number>
    </property>
@@ -54,12 +57,6 @@
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
-     <property name="minimumSize">
-      <size>
-       <width>90</width>
-       <height>0</height>
-      </size>
-     </property>
      <property name="text">
       <string>Database file</string>
      </property>
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
index ec93db4..645f3ec 100644
--- a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -70,7 +70,7 @@ QString BlastDBSelectorWidgetController::getDatabasePath()const {
 }
 
 void BlastDBSelectorWidgetController::sl_onBrowseDatabasePath() {
-    LastUsedDirHelper lod("Database Directory");
+    LastUsedDirHelper lod("Database Folder");
 
     QFileDialog::Options options = 0;
     QString name = U2FileDialog::getOpenFileName(NULL, tr("Select a database file"), lod.dir, "", NULL, options);
diff --git a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
index 89c8fd2..85c24b6 100644
--- a/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
+++ b/src/plugins/external_tool_support/src/utils/BlastDBSelectorWidgetController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
index eea1273..9e33dac 100644
--- a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#include <QtGui/QToolButton>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QToolButton>
-#endif
+#include <QMessageBox>
+#include <QPushButton>
+#include <QToolButton>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -60,7 +53,7 @@ BlastRunCommonDialog::BlastRunCommonDialog(QWidget *parent, BlastType blastType,
 : QDialog(parent), ca_c(NULL), useCompValues(useCompValues), compValues(compValues)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223227");
+    new HelpButton(this, buttonBox, "20875131");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Restore to default"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -189,8 +182,8 @@ void BlastRunCommonDialog::sl_onMatchScoresChanged(int index){
     }else{
         assert(0);
     }
-
 }
+
 void BlastRunCommonDialog::sl_onMatrixChanged(int index){
     Q_UNUSED(index);
     if(programName->currentText() == "blastn"){
@@ -251,6 +244,7 @@ void BlastRunCommonDialog::sl_onMatrixChanged(int index){
         assert(0);
     }
 }
+
 void BlastRunCommonDialog::sl_restoreDefault(){
     needRestoreDefault=true;
 //    sl_onProgNameChange(0);
diff --git a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
index 291c0cb..8974456 100644
--- a/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
+++ b/src/plugins/external_tool_support/src/utils/BlastRunCommonDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
index 23a4a13..0ea0827 100644
--- a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
+++ b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
index 6ec876c..a01fcfb 100644
--- a/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
+++ b/src/plugins/external_tool_support/src/utils/BlastTaskSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/CistromeDelegate.cpp b/src/plugins/external_tool_support/src/utils/CistromeDelegate.cpp
index 351ac05..692c794 100644
--- a/src/plugins/external_tool_support/src/utils/CistromeDelegate.cpp
+++ b/src/plugins/external_tool_support/src/utils/CistromeDelegate.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,17 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "CistromeDelegate.h"
-#include "utils/ExternalToolUtils.h"
-
 #include <U2Core/AppContext.h>
 #include <U2Core/DataPathRegistry.h>
 #include <U2Core/Settings.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/WorkflowEnv.h>
 
+#include "CistromeDelegate.h"
+#include "utils/ExternalToolUtils.h"
+
 namespace U2 {
 namespace LocalWorkflow {
 
diff --git a/src/plugins/external_tool_support/src/utils/CistromeDelegate.h b/src/plugins/external_tool_support/src/utils/CistromeDelegate.h
index 8745e29..f1b3d97 100644
--- a/src/plugins/external_tool_support/src/utils/CistromeDelegate.h
+++ b/src/plugins/external_tool_support/src/utils/CistromeDelegate.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/ExportTasks.cpp b/src/plugins/external_tool_support/src/utils/ExportTasks.cpp
index 0e5dc9e..9429c43 100644
--- a/src/plugins/external_tool_support/src/utils/ExportTasks.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExportTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,9 +35,8 @@
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2DbiRegistry.h>
@@ -53,9 +52,9 @@ namespace U2 {
 
 //////////////////////////////////////////////////////////////////////////
 // DNAExportAlignmentTask
-SaveAlignmentTask::SaveAlignmentTask(const MAlignment& _ma, const QString& _fileName, DocumentFormatId _f, const QVariantMap& _hints)
+SaveAlignmentTask::SaveAlignmentTask(const MultipleSequenceAlignment& _ma, const QString& _fileName, DocumentFormatId _f, const QVariantMap& _hints)
 : Task("", TaskFlag_None),
-  ma(_ma),
+  ma(_ma->getCopy()),
   fileName(_fileName),
   hints(_hints),
   format(_f)
@@ -64,7 +63,7 @@ SaveAlignmentTask::SaveAlignmentTask(const MAlignment& _ma, const QString& _file
     setTaskName(tr("Export alignment to '%1'").arg(QFileInfo(fileName).fileName()));
     setVerboseLogMode(true);
 
-    if (ma.isEmpty()) {
+    if (ma->isEmpty()) {
         setError(tr("An alignment is empty"));
     }
 }
@@ -75,7 +74,7 @@ void SaveAlignmentTask::run() {
     IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(IOAdapterUtils::url2io(fileName));
     doc.reset(f->createNewLoadedDocument(iof, fileName, stateInfo));
 
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(doc->getDbiRef(), ma, stateInfo);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), ma, stateInfo);
     CHECK_OP(stateInfo, );
 
     GHints* docHints = doc->getGHints();
@@ -90,22 +89,20 @@ void SaveAlignmentTask::run() {
 Document * SaveAlignmentTask::getDocument() const {
     return doc.data();
 }
-
-const MAlignment & SaveAlignmentTask::getMAlignment() const {
-    return ma;
-}
-
-const QString &SaveAlignmentTask::getUrl() const {
+const QString & SaveAlignmentTask::getUrl() const {
     return fileName;
 }
 
+const MultipleSequenceAlignment & SaveAlignmentTask::getMAlignment() const {
+    return ma;
+}
 
 //////////////////////////////////////////////////////////////////////////
 // export alignment  2 sequence format
 
-SaveMSA2SequencesTask::SaveMSA2SequencesTask(const MAlignment& _ma, const QString& _url, bool _trimAli, DocumentFormatId _format)
+SaveMSA2SequencesTask::SaveMSA2SequencesTask(const MultipleSequenceAlignment& _ma, const QString& _url, bool _trimAli, DocumentFormatId _format)
 : Task(tr("Export alignment to sequence: %1").arg(_url), TaskFlag_None),
-ma(_ma), url(_url), trimAli(_trimAli), format(_format)
+ma(_ma->getCopy()), url(_url), trimAli(_trimAli), format(_format)
 {
     GCOUNTER( cvar, tvar, "ExportMSA2SequencesTask" );
     setVerboseLogMode(true);
@@ -126,7 +123,7 @@ void SaveMSA2SequencesTask::run() {
         if (usedNames.contains(name)) {
             name = TextUtils::variate(name, " ", usedNames, false, 1);
         }
-        U2EntityRef seqRef = U2SequenceUtils::import(doc->getDbiRef(), s, stateInfo);
+        U2EntityRef seqRef = U2SequenceUtils::import(stateInfo, doc->getDbiRef(), s);
         CHECK_OP(stateInfo, );
         doc->addObject(new U2SequenceObject(name, seqRef));
         usedNames.insert(name);
diff --git a/src/plugins/external_tool_support/src/utils/ExportTasks.h b/src/plugins/external_tool_support/src/utils/ExportTasks.h
index 5c311a1..9473b42 100644
--- a/src/plugins/external_tool_support/src/utils/ExportTasks.h
+++ b/src/plugins/external_tool_support/src/utils/ExportTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <U2Core/Task.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -36,16 +36,16 @@ class CloneObjectTask;
 class SaveAlignmentTask : public Task {
     Q_OBJECT
 public:
-    SaveAlignmentTask(const MAlignment& ma, const QString& fileName, DocumentFormatId f, const QVariantMap& hints = QVariantMap());
+    SaveAlignmentTask(const MultipleSequenceAlignment& ma, const QString& fileName, DocumentFormatId f, const QVariantMap& hints = QVariantMap());
 
     void run();
 
     virtual Document* getDocument() const;
-    const MAlignment & getMAlignment() const;
     const QString & getUrl() const;
+    const MultipleSequenceAlignment & getMAlignment() const;
 
 private:
-    MAlignment              ma;
+    MultipleSequenceAlignment ma;
     QString                 fileName;
     QVariantMap             hints;
     DocumentFormatId        format;
@@ -57,14 +57,14 @@ private:
 class SaveMSA2SequencesTask : public Task {
     Q_OBJECT
 public:
-    SaveMSA2SequencesTask(const MAlignment& ma, const QString& url, bool trimAli, DocumentFormatId format);
+    SaveMSA2SequencesTask(const MultipleSequenceAlignment& ma, const QString& url, bool trimAli, DocumentFormatId format);
 
     void run();
 
     virtual Document* getDocument() const {return doc.data();}
 
 private:
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     QString                 url;
     bool                    trimAli;
     QString                 format;
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.cpp b/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.cpp
index 3dd14dc..4df7e0c 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QDir>
-#include <QtCore/QProcessEnvironment>
+#include <QCoreApplication>
+#include <QDir>
+#include <QProcessEnvironment>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/ExternalToolRegistry.h>
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.h b/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.h
index 93d46d7..68669e6 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.h
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.cpp b/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.cpp
index 7d11f09..624c26f 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.h b/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.h
index b2d5238..255d9a1 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.h
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolSupportAction.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolUtils.cpp b/src/plugins/external_tool_support/src/utils/ExternalToolUtils.cpp
index c330bdf..f1f4789 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolUtils.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,58 @@
  * MA 02110-1301, USA.
  */
 
-#include "ExternalToolUtils.h"
+#include <QFile>
+#include <QFileInfo>
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DataPathRegistry.h>
+#include <U2Core/ExternalToolRegistry.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
+#include <U2Gui/AppSettingsGUI.h>
+
+#include "ExternalToolSupportSettingsController.h"
+#include "ExternalToolUtils.h"
 
 namespace U2 {
 
 const QString ExternalToolUtils::CISTROME_DATA_DIR = "CISTROME_DATA_DIR";
 
+void ExternalToolUtils::checkExtToolsPath(const QStringList &names) {
+    QStringList missingTools;
+    foreach (QString name, names) {
+        if (AppContext::getExternalToolRegistry()->getByName(name)->getPath().isEmpty()) {
+            missingTools << name;
+        }
+    }
+    if (!missingTools.isEmpty()){
+        QString mergedNames = missingTools.join(", ");
+
+        QObjectScopedPointer<QMessageBox> msgBox = new QMessageBox;
+        msgBox->setWindowTitle("BLAST: "+ QString(mergedNames));
+        msgBox->setText(tr("Paths for the following tools are not selected: %1.").arg(mergedNames));
+        msgBox->setInformativeText(tr("Do you want to select it now?"));
+        msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+        msgBox->setDefaultButton(QMessageBox::Yes);
+        const int ret = msgBox->exec();
+        CHECK(!msgBox.isNull(), );
+
+        switch (ret) {
+        case QMessageBox::Yes:
+            AppContext::getAppSettingsGUI()->showSettingsDialog(ExternalToolSupportSettingsPageId);
+            break;
+        case QMessageBox::No:
+            return;
+        default:
+            assert(false);
+            break;
+        }
+    }
+}
+
 void ExternalToolUtils::addDefaultCistromeDirToSettings() {
     const QString cistromeDefaultPath = QFileInfo(QString(PATH_PREFIX_DATA) + QString(":") + "cistrome").absoluteFilePath();
 
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolUtils.h b/src/plugins/external_tool_support/src/utils/ExternalToolUtils.h
index 8887115..e16cb2a 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolUtils.h
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,15 @@
 #ifndef _U2_EXTERNAL_TOOL_UTILS_H_
 #define _U2_EXTERNAL_TOOL_UTILS_H_
 
-#include <QtCore/QString>
+#include <QObject>
 
 namespace U2 {
 
-class ExternalToolUtils {
+class ExternalToolUtils : public QObject {
+    Q_OBJECT
 public:
+    static void checkExtToolsPath(const QStringList &names);
+
     static void addDefaultCistromeDirToSettings();
     static void addCistromeDataPath(const QString& dataName, const QString& dirName, bool entriesAreFolders = false);
 
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
index b7d8d33..cd991e1 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QString>
+#include <QString>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -79,7 +79,7 @@ void ExternalToolJustValidateTask::run() {
             stateInfo.setError(QString("The tool %1 that runs %2 is not installed. "
                                        "Please set the path to the executable file of the"
                                        " tool in the External Tools settings. Some of the tools "
-                                       "may be located in UGENE/Tools directory")
+                                       "may be located in UGENE/Tools folder")
                                .arg(originalValidation.toolRunnerProgram)
                                .arg(toolName));
         } else {
diff --git a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
index 18a14ee..e0a1467 100644
--- a/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
+++ b/src/plugins/external_tool_support/src/utils/ExternalToolValidateTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/Task.h>
 #include <U2Core/MultiTask.h>
-#include <QtCore/QProcess>
+#include <QProcess>
 
 namespace U2 {
 
diff --git a/src/plugins/external_tool_support/src/utils/OutputCollector.cpp b/src/plugins/external_tool_support/src/utils/OutputCollector.cpp
new file mode 100644
index 0000000..6bc8a2c
--- /dev/null
+++ b/src/plugins/external_tool_support/src/utils/OutputCollector.cpp
@@ -0,0 +1,41 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#include "OutputCollector.h"
+
+namespace U2 {
+
+OutputCollector::OutputCollector() : ExternalToolListener(), firstLineSkipped(false) {}
+
+void OutputCollector::addNewLogMessage(const QString& message, int messageType) {
+    //skip first line of the output with tool calling string
+    if (collectedLog.isEmpty() && !firstLineSkipped) {
+        firstLineSkipped = true;
+        return;
+    }
+    collectedLog.append(message);
+}
+
+const QString& OutputCollector::getLog() const {
+    return collectedLog;
+}
+
+}
\ No newline at end of file
diff --git a/src/plugins/external_tool_support/src/utils/OutputCollector.h b/src/plugins/external_tool_support/src/utils/OutputCollector.h
new file mode 100644
index 0000000..b50ea64
--- /dev/null
+++ b/src/plugins/external_tool_support/src/utils/OutputCollector.h
@@ -0,0 +1,43 @@
+/**
+* UGENE - Integrated Bioinformatics Tools.
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+* http://ugene.net
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+* MA 02110-1301, USA.
+*/
+
+#ifndef _U2_OUTPUT_COLLECTOR_H_
+#define _U2_OUTPUT_COLLECTOR_H_
+
+#include <U2Core/ExternalToolRunTask.h>
+
+#include <QString>
+
+namespace U2 {
+
+class OutputCollector : public ExternalToolListener {
+public:
+    OutputCollector();
+    void addNewLogMessage(const QString& message, int messageType);
+    const QString& getLog() const;
+private:
+    bool firstLineSkipped;
+    QString collectedLog;
+};
+
+}
+
+#endif
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.cpp b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.cpp
index 13c59c1..6058611 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.cpp
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.h b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.h
index faa1e55..4deb91e 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.h
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.cpp b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.cpp
index 1694ac5..bf97e85 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.cpp
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,10 +29,9 @@
 #include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QDir>
-#include <QtCore/QProcess>
-#include <QtCore/QProcessEnvironment>
-#include <QtCore/QtGlobal>
+#include <QDir>
+#include <QProcess>
+#include <QProcessEnvironment>
 
 namespace U2 {
 
@@ -53,12 +52,12 @@ void VcfConsensusSupportTask::prepare() {
     const UserAppsSettings* userAS = AppContext::getAppSettings()->getUserAppsSettings();
     SAFE_POINT_EXT(userAS != NULL, setError(tr("UserAppsSettings is NULL")), );
     QString tmpDirPath( userAS->getCurrentProcessTemporaryDirPath(VCF_CONSENSUS_TMP_DIR) );
-    SAFE_POINT_EXT(!tmpDirPath.isEmpty(), setError(tr("Temporary directory is not set!")), );
+    SAFE_POINT_EXT(!tmpDirPath.isEmpty(), setError(tr("Temporary folder is not set!")), );
     GUrl tmp( tmpDirPath + "/" + inputVcf.fileName() + ".gz");
 
     QDir tmpDir( tmpDirPath );
     if (!tmpDir.mkpath(tmpDirPath)){
-        stateInfo.setError(tr("Can not create directory for temporary files."));
+        stateInfo.setError(tr("Can not create folder for temporary files."));
         return;
     }
 
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.h b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.h
index 96de296..4f65189 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.h
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusSupportTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
index 07634c3..c53a231 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.h b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.h
index 80d6444..70fc765 100644
--- a/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.h
+++ b/src/plugins/external_tool_support/src/vcftools/VcfConsensusWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.cpp b/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.cpp
index fce674e..03acfba 100644
--- a/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.cpp
+++ b/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.h b/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.h
index 5fe77e9..a311571 100644
--- a/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.h
+++ b/src/plugins/external_tool_support/src/vcfutils/VcfutilsSupport.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/external_tool_support/transl/english.ts b/src/plugins/external_tool_support/transl/english.ts
index 026fd2b..efaf058 100644
--- a/src/plugins/external_tool_support/transl/english.ts
+++ b/src/plugins/external_tool_support/transl/english.ts
@@ -2,6 +2,94 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="en">
 <context>
+    <name>AlignToReferenceBlastDialog</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="20"/>
+        <source>Input data</source>
+        <translation>Input data</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="26"/>
+        <source>Reference</source>
+        <translation>Reference</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="14"/>
+        <source>Map Sanger Reads to Reference</source>
+        <translation>Map Sanger Reads to Reference</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="38"/>
+        <source>Input a file with a reference sequence</source>
+        <translation>Input a file with a reference sequence</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="45"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="169"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="54"/>
+        <source>Reads</source>
+        <translation>Reads</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="79"/>
+        <source>Add</source>
+        <translation>Add</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="86"/>
+        <source>Remove</source>
+        <translation>Remove</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="98"/>
+        <source>Settings</source>
+        <translation>Settings</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="114"/>
+        <source>Mapping min similarity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="134"/>
+        <source>Trimming quality threshold</source>
+        <translation>Trimming quality threshold</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="141"/>
+        <source>Read name in result alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="162"/>
+        <source>Input the result file path</source>
+        <translation>Input the result file path</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="121"/>
+        <source>%</source>
+        <translation>%</translation>
+    </message>
+    <message>
+        <source>Mapping min identity</source>
+        <translation type="vanished">Mapping min identity</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="154"/>
+        <source>Result alignment</source>
+        <translation>Result alignment</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="178"/>
+        <source>Add to project</source>
+        <translation>Add to project</translation>
+    </message>
+</context>
+<context>
     <name>BlastAllSupportDialog</name>
     <message>
         <location filename="../src/utils/BlastAllSupportDialog.ui" line="20"/>
@@ -9,73 +97,73 @@
         <translation>Request to Local BLAST Database</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="42"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="48"/>
         <source>General options</source>
         <translation>General options</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="53"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="62"/>
         <source>Select search:</source>
         <translation>Select search:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="61"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="70"/>
         <source>blastn</source>
         <extracomment>qwe</extracomment>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="66"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="75"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="76"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="85"/>
         <source>blastx</source>
         <translation>blastx</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="81"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="90"/>
         <source>tblastn</source>
         <translation>tblastn</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="86"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="95"/>
         <source>tblastx</source>
         <translation>tblastx</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="94"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="103"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Search for short, nearly exact matches</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="101"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="110"/>
         <source>Expectation value </source>
         <translation>Expectation value </translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="108"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="117"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="125"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="134"/>
         <source>Off</source>
         <translation>Off</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="159"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="171"/>
         <source>Both strands</source>
         <translation>Both strands</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="169"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="181"/>
         <source>Direct</source>
         <translation>Direct</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="176"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="188"/>
         <source>Complement</source>
         <translation>Complement</translation>
     </message>
@@ -84,82 +172,82 @@
         <translation type="vanished">Base name for BLAST DB files:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="230"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="274"/>
         <source>Number of CPUs being used</source>
         <translation>Number of CPUs being used</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="268"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="318"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="391"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="544"/>
         <source>Word size</source>
         <translation>Word size</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="528"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="616"/>
         <source>Gap costs</source>
         <translation>Gap costs</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="307"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="421"/>
         <source>Match scores</source>
         <translation>Match scores</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="337"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="480"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="342"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="485"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="347"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="490"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="352"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="495"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="357"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="500"/>
         <source>2 -7</source>
         <translation>2 -7</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="362"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="505"/>
         <source>2 -5</source>
         <translation>2 -5</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="367"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="510"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="372"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="515"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="377"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="520"/>
         <source>5 -4</source>
         <translation>5 -4</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="404"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="463"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="71"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="80"/>
         <source>gpu-blastp</source>
         <translation>gpu-blastp</translation>
     </message>
@@ -174,162 +262,162 @@ a database file</source>
 a database file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="412"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="429"/>
         <source>BLOSUM62</source>
         <translation>BLOSUM62</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="417"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="434"/>
         <source>BLOSUM45</source>
         <translation>BLOSUM45</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="422"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="439"/>
         <source>BLOSUM80</source>
         <translation>BLOSUM80</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="427"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="444"/>
         <source>PAM30</source>
         <translation>PAM30</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="432"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="449"/>
         <source>PAM70</source>
         <translation>PAM70</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="320"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="408"/>
         <source>Service</source>
         <translation>Service</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="115"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="124"/>
         <source>Max hits:</source>
         <translation>Max hits:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="283"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="371"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="288"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="376"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="293"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="381"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="443"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="531"/>
         <source>PHI pattern</source>
         <translation>PHI pattern</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="483"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="600"/>
         <source>Threshold for extending hits</source>
         <translation>Threshold for extending hits</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="486"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="603"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="535"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="623"/>
         <source>Composition-based statistics</source>
         <translation>Composition-based statistics</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="543"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="336"/>
         <source>D or d: default (equivalent to 2 )</source>
         <translation>D or d: default (equivalent to 2 )</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="548"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="341"/>
         <source>0 or F or f: No composition-based statistics</source>
         <translation>0 or F or f: No composition-based statistics</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="553"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="346"/>
         <source>1: Composition-based statistics as in NAR 29:2994-3005, 2001</source>
         <translation>1: Composition-based statistics as in NAR 29:2994-3005, 2001</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="558"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="351"/>
         <source>2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties</source>
         <translation>2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="563"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="356"/>
         <source>3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally</source>
         <translation>3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="575"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="637"/>
         <source>Filters</source>
         <translation>Filters</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="581"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="646"/>
         <source>Low complexity filter</source>
         <translation>Low complexity filter</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="588"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="653"/>
         <source>Human repeats filter</source>
         <translation>Human repeats filter</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="598"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="663"/>
         <source>Masks</source>
         <translation>Masks</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="604"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="672"/>
         <source>Mask for lookup table only</source>
         <translation>Mask for lookup table only</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="614"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="682"/>
         <source>Mask lower case letters</source>
         <translation>Mask lower case letters</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="640"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="717"/>
         <source>Extension options</source>
         <translation>Extension options</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="648"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="731"/>
         <source>X dropoff value (in bits)</source>
         <translation>X dropoff value (in bits)</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="654"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="740"/>
         <source>For gapped alignment</source>
         <translation>For gapped alignment</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="668"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="754"/>
         <source>For ungapped extensions</source>
         <translation>For ungapped extensions</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="675"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="761"/>
         <source>For final gapped alignment</source>
         <translation>For final gapped alignment</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="699"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="788"/>
         <source>Multiple Hits window size</source>
         <translation>Multiple Hits Window Size</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="711"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="800"/>
         <source>Perform gapped alignment</source>
         <translation>Perform gapped alignment</translation>
     </message>
@@ -342,19 +430,19 @@ a database file</translation>
         <translation>Fetch Sequences from BLAST Database</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="59"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="44"/>
         <source>Query ID</source>
-        <translation type="unfinished"></translation>
+        <translation>Query ID</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="75"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="121"/>
         <source>Select database</source>
-        <translation type="unfinished"></translation>
+        <translation>Select database</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="99"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="71"/>
         <source>Output path</source>
-        <translation type="unfinished"></translation>
+        <translation>Output path</translation>
     </message>
     <message>
         <source>Entery query ID:</source>
@@ -365,7 +453,7 @@ a database file</translation>
         <translation type="vanished">Select database :</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="115"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -386,7 +474,7 @@ a database file</translation>
         <translation type="vanished">Output path:</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="127"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="158"/>
         <source>Add to project</source>
         <translation>Add to project</translation>
     </message>
@@ -396,22 +484,22 @@ a database file</translation>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidget.ui" line="20"/>
         <source>Form</source>
-        <translation type="unfinished">Form</translation>
+        <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="40"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="43"/>
         <source>Database path</source>
-        <translation type="unfinished"></translation>
+        <translation>Database path</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="64"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="61"/>
         <source>Database file</source>
-        <translation type="unfinished"></translation>
+        <translation>Database file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="73"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="70"/>
         <source>Base name for BLAST DB files</source>
-        <translation type="unfinished"></translation>
+        <translation>Base name for BLAST DB files</translation>
     </message>
     <message>
         <source>Database path:</source>
@@ -677,18 +765,17 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Default: 250.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/bowtie/BowtieSettings.ui" line="215"/>
-        <source>The number of megabytes of memory a given thread is given to store path descriptors in --best mode. 
-Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost. 
-Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases. 
-If you receive an error message saying that chunk memory has been exhausted in --best mode, 
-try adjusting this parameter up to dedicate more memory to the descriptors. 
+        <source>The number of megabytes of memory a given thread is given to store path descriptors in --best mode.
+Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost.
+Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases.
+If you receive an error message saying that chunk memory has been exhausted in --best mode,
+try adjusting this parameter up to dedicate more memory to the descriptors.
 Default: 64.</source>
-        <translation>The number of megabytes of memory a given thread is given to store path descriptors in --best mode. 
-Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost. 
-Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases. 
-If you receive an error message saying that chunk memory has been exhausted in --best mode, 
-try adjusting this parameter up to dedicate more memory to the descriptors. 
+        <translation type="vanished">The number of megabytes of memory a given thread is given to store path descriptors in --best mode.
+Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost.
+Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases.
+If you receive an error message saying that chunk memory has been exhausted in --best mode,
+try adjusting this parameter up to dedicate more memory to the descriptors.
 Default: 64.</translation>
     </message>
     <message>
@@ -743,6 +830,16 @@ p, li { white-space: pre-wrap; }
         <translation>Maximum of backtracks (--maxbts)</translation>
     </message>
     <message>
+        <location filename="../src/bowtie/BowtieSettings.ui" line="215"/>
+        <source>The number of megabytes of memory a given thread is given to store path descriptors in --best mode. 
+Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost. 
+Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases. 
+If you receive an error message saying that chunk memory has been exhausted in --best mode, 
+try adjusting this parameter up to dedicate more memory to the descriptors. 
+Default: 64.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/bowtie/BowtieSettings.ui" line="223"/>
         <source>Descriptors memory usage (--chunkmbs)</source>
         <translation>Descriptors memory usage (--chunkmbs)</translation>
@@ -885,7 +982,7 @@ bowtie is somewhat slower when --best is specified.
     <message>
         <location filename="../src/bwa/BwaBuildSettings.ui" line="77"/>
         <source>autodetect</source>
-        <translation type="unfinished">autodetect</translation>
+        <translation>autodetect</translation>
     </message>
     <message>
         <location filename="../src/bwa/BwaBuildSettings.ui" line="82"/>
@@ -911,207 +1008,229 @@ bowtie is somewhat slower when --best is specified.
         <translation>Form</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="36"/>
         <source>Base Options</source>
-        <translation>Base Options</translation>
+        <translation type="vanished">Base Options</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="441"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="567"/>
         <source>Penalty for a mismatch</source>
         <translation>Penalty for a mismatch</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="409"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="449"/>
         <source>Score for a sequence match</source>
         <translation>Score for a sequence match</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="393"/>
         <source>Score for a match (-A)</source>
-        <translation>Score for a match (-A)</translation>
+        <translation type="vanished">Score for a match (-A)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="425"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="551"/>
         <source>Mismatch penalty (-B)</source>
         <translation>Mismatch penalty (-B)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="454"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="484"/>
         <source>Gap open penalty (-O)</source>
         <translation>Gap open penalty (-O)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="557"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="625"/>
         <source>Penalty for an unpaired read pair</source>
         <translation>Penalty for an unpaired read pair</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="586"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="746"/>
         <source>Minimum score to output</source>
         <translation>Minimum score to output</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="541"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="609"/>
         <source>Penalty unpaired (-U)</source>
         <translation>Penalty unpaired (-U)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="528"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="529"/>
         <source>Penalty for clipping </source>
         <translation>Penalty for clipping </translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="470"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="500"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="499"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="596"/>
         <source>Gap extension penalty; a gap of size k cost {-O} + {-E}*k</source>
         <translation>Gap extension penalty; a gap of size k cost {-O} + {-E}*k</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="512"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="513"/>
         <source>Penalty for clipping (-L)</source>
         <translation>Penalty for clipping (-L)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="483"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="580"/>
         <source>Gap extention penalty (-E)</source>
         <translation>Gap extention penalty (-E)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="570"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="730"/>
         <source>Score threshold (-T)</source>
         <translation>Score threshold (-T)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="209"/>
         <source>Internall seeds length (-r)</source>
-        <translation>Internall seeds length (-r)</translation>
+        <translation type="vanished">Internall seeds length (-r)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="132"/>
         <source>Min seed length (-k)</source>
         <translation>Min seed length (-k)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="319"/>
         <source>Look for internal seeds inside a seed longer than {-k} * FLOAT</source>
         <translation>Look for internal seeds inside a seed longer than {-k} * FLOAT</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="56"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="386"/>
         <source>Number of threads</source>
         <translation>Number of threads</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="193"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="148"/>
         <source>Off-diagonal X-dropoff</source>
         <translation>Off-diagonal X-dropoff</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="161"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="354"/>
         <source>Band width for banded alignment</source>
         <translation>Band width for banded alignment</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="145"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="271"/>
         <source>Band width (-w)</source>
         <translation>Band width (-w)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="123"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="202"/>
         <source>Minimum seed length</source>
         <translation>Minimum seed length</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="88"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="370"/>
         <source>Number of threads (-t)</source>
         <translation>Number of threads (-t)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="177"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="68"/>
         <source>Dropoff (-d)</source>
         <translation>Dropoff (-d)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="228"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="186"/>
         <source>Skip seeds threshold (-c)</source>
         <translation>Skip seeds threshold (-c)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="244"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="84"/>
         <source>Skip seeds with more than INT occurrences </source>
         <translation>Skip seeds with more than INT occurrences </translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="266"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="338"/>
         <source>Drop chain threshold (-D)</source>
         <translation>Drop chain threshold (-D)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="282"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="306"/>
         <source>Drop chains shorter than FLOAT fraction of the longest overlapping chain</source>
         <translation>Drop chains shorter than FLOAT fraction of the longest overlapping chain</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="308"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="45"/>
+        <source>Algorithm</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="290"/>
+        <source>Internal seeds length (-r)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="435"/>
+        <source>Scoring Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="654"/>
+        <source>Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="668"/>
         <source>Index algorithm (-a)</source>
         <translation>Index algorithm (-a)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="325"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="695"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="330"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="700"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="335"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="705"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="340"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="710"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="599"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="465"/>
+        <source>Matching score (-A)</source>
+        <translation>Matching score (-A)</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="164"/>
         <source>Rounds of mate rescues (-m)</source>
         <translation>Rounds of mate rescues (-m)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="615"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="116"/>
         <source>Perform at most INT rounds of mate rescues for each read</source>
         <translation>Perform at most INT rounds of mate rescues for each read</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="348"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="681"/>
         <source>Skip mate rescue</source>
         <translation>Skip mate rescue</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="351"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="684"/>
         <source>Skip mate rescue (-S)</source>
         <translation>Skip mate rescue (-S)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="358"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="233"/>
         <source>Skip pairing; mate rescue performed unless -S also in use</source>
         <translation>Skip pairing; mate rescue performed unless -S also in use</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="361"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="236"/>
         <source>Skip pairing (-P)</source>
         <translation>Skip pairing (-P)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="633"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="410"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
@@ -1551,7 +1670,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="34"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="42"/>
@@ -1608,123 +1727,123 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="32"/>
         <source>Align with ClustalW</source>
         <translation>Align with ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="34"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="46"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="57"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="52"/>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="76"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="67"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="91"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="74"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="88"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="103"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="98"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="113"/>
         <source>Gap opening penalty</source>
         <translation>Gap opening penalty</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="141"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="159"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="184"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="208"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="214"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="247"/>
         <source>IUB</source>
         <translation>IUB</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="252"/>
         <source>CLUSTALW</source>
         <translation>CLUSTALW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="289"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="328"/>
         <source>Max iterations</source>
         <translation>Max iterations</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="261"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="300"/>
         <source>NONE</source>
         <translation>NONE</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="266"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="305"/>
         <source>TREE</source>
         <translation>TREE</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="271"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="310"/>
         <source>ALIGNMENT</source>
         <translation>ALIGNMENT</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="231"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="264"/>
         <source>Iteration type</source>
         <translation>Iteration type</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="335"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="377"/>
         <source>Out sequences order</source>
         <translation>Out sequences order</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="365"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="413"/>
         <source>Input</source>
         <translation>Input</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="370"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="418"/>
         <source>Aligned</source>
         <translation>Aligned</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="388"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="436"/>
         <source>Protein gap parameters</source>
         <translation>Protein gap parameters</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="398"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="446"/>
         <source>Gap separation distance</source>
         <translation>Gap separation distance</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="456"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="507"/>
         <source>Residue-specific gaps off</source>
         <translation>Residue-specific gaps off</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="442"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="493"/>
         <source>Hydrophilic gaps off</source>
         <translation>Hydrophilic gaps off</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="449"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="500"/>
         <source>No end gap separation penalty</source>
         <translation>No end gap separation penalty</translation>
     </message>
@@ -1753,7 +1872,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/ETSSettingsWidget.ui" line="50"/>
         <source><a href="http://ugene.unipro.ru/external.html">external tools package</a></source>
-        <translation type="unfinished"></translation>
+        <translation><a href="http://ugene.unipro.ru/external.html">external tools package</a></translation>
     </message>
     <message>
         <location filename="../src/ETSSettingsWidget.ui" line="70"/>
@@ -1817,79 +1936,83 @@ p, li { white-space: pre-wrap; }
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="35"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="38"/>
         <source>Select input file(s) for formatting database:</source>
         <translation>Select input file(s) for formatting database:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="53"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="84"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="59"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="93"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="220"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="62"/>
+        <source>Or select folder with input files:</source>
+        <translation type="vanished">Or select folder with input files:</translation>
+    </message>
+    <message>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="68"/>
         <source>Or select directory with input files:</source>
-        <translation>Or select directory with input files:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="96"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="105"/>
         <source>File filter</source>
         <translation>File filter</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="104"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="119"/>
         <source>Include files filter</source>
         <translation>Include files filter</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="114"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="129"/>
         <source>*.fa;*.fasta</source>
         <translation>*.fa;*.fasta</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="136"/>
         <source>Exclude files filter</source>
         <translation>Exclude files filter</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="131"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="146"/>
         <source>*.pal</source>
         <translation>*.pal</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="143"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="158"/>
         <source>Type of file(s)</source>
         <translation>Type of file(s)</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="149"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="167"/>
         <source>protein</source>
         <translation>protein</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="159"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="177"/>
         <source>nucleotide</source>
         <translation>nucleotide</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="172"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
         <source>Output settings</source>
         <translation>Output settings</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="178"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="205"/>
         <source>Select the path to save the database into:</source>
         <translation>Select the path to save the database into:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="201"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="234"/>
         <source>Base name for BLAST files:</source>
         <translation>Base name for BLAST files:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="211"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="244"/>
         <source>Title for database file:</source>
         <translation>Title for database file:</translation>
     </message>
@@ -1904,7 +2027,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/HmmerBuildDialog.ui" line="42"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Input and output</translation>
     </message>
     <message>
         <location filename="../src/hmmer/HmmerBuildDialog.ui" line="52"/>
@@ -2098,7 +2221,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/HmmerSearchDialog.ui" line="54"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Input and output</translation>
     </message>
     <message>
         <location filename="../src/hmmer/HmmerSearchDialog.ui" line="65"/>
@@ -2243,7 +2366,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="36"/>
@@ -2359,7 +2482,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/PhmmerSearchDialog.ui" line="36"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Input and output</translation>
     </message>
     <message>
         <location filename="../src/hmmer/PhmmerSearchDialog.ui" line="50"/>
@@ -2505,49 +2628,43 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PhyMLDialog</name>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="77"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="76"/>
         <source>Substitution model</source>
         <translation>Substitution model</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="98"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="69"/>
         <source>Equilibrium frequencies</source>
         <translation>Equilibrium frequencies</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="112"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="116"/>
         <source>optimized</source>
         <translation>optimized</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="119"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="83"/>
         <source>empirical</source>
         <translation>empirical</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="293"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="106"/>
         <source>Transition / transversion ratio </source>
         <translation>Transition / transversion ratio </translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="139"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="171"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="289"/>
-        <source>Check to set user value. 
+        <source>Check to set user value.
 Uncheck to get the maximum likelihood estimate.</source>
-        <translation>Check to set user value. 
+        <translation type="vanished">Check to set user value.
 Uncheck to get the maximum likelihood estimate.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="190"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="212"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="243"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="265"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="231"/>
         <source>estimated </source>
         <translation>estimated </translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="143"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="209"/>
         <source>Proportion of invariable sites</source>
         <translation>Proportion of invariable sites</translation>
     </message>
@@ -2557,37 +2674,61 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>Substitution Model</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="154"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="126"/>
         <source>Number of substitution rate categories</source>
         <translation>Number of substitution rate categories</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="175"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="133"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="149"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="165"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="275"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="294"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="345"/>
+        <source>Set a fixed value or get the maximum likelihood estimate.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="136"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="152"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="348"/>
+        <source>estimated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="171"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="281"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="300"/>
+        <source>fixed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="313"/>
         <source>Gamma shape parameter</source>
         <translation>Gamma shape parameter</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="303"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="362"/>
         <source>Branch Support</source>
         <translation>Branch Support</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="315"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="374"/>
         <source>Use fast likelihood-based method</source>
         <translation>Use fast likelihood-based method</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="335"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="394"/>
         <source>Perform bootstrap</source>
         <translation>Perform bootstrap</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="345"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="404"/>
         <source>It is the number of bootstrap replicates.</source>
         <translation>It is the number of bootstrap replicates.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="359"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="418"/>
         <source>Tree Searching</source>
         <translation>Tree Searching</translation>
     </message>
@@ -2597,27 +2738,36 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="461"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="456"/>
         <source>Type of tree improvement</source>
         <translation>Type of tree improvement</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="478"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="479"/>
         <source>Set number of random starting tree</source>
         <translation>Set number of random starting tree</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="494"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="506"/>
+        <source>Optimise tree topology</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Optimise topology</source>
-        <translation>Optimise topology</translation>
+        <translation type="vanished">Optimise topology</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="504"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="516"/>
         <source>Optimise branch lengths</source>
         <translation>Optimise branch lengths</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="525"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="526"/>
+        <source>Optimise substitution rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="534"/>
         <source>Display Options</source>
         <translation>Display Options</translation>
     </message>
@@ -2625,17 +2775,17 @@ Uncheck to get the maximum likelihood estimate.</translation>
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="122"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="132"/>
         <source>Path for temporary files</source>
         <translation>Path for temporary files</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="123"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="133"/>
         <source>Path for temporary files not selected.</source>
         <translation>Path for temporary files not selected.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="124"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="134"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -2700,12 +2850,12 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <translation>Extract transcript sequences from the genomic sequence(s) with gffread.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="76"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="70"/>
         <source>Installed</source>
         <translation>Installed</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="77"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="71"/>
         <source>Not installed</source>
         <translation>Not installed</translation>
     </message>
@@ -2748,12 +2898,36 @@ Uncheck to get the maximum likelihood estimate.</translation>
         <location filename="../src/bwa/BwaSettingsWidget.cpp" line="44"/>
         <source>NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB.
 In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</source>
-        <translation type="unfinished"></translation>
+        <translation>NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB.
+In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</translation>
     </message>
     <message>
         <source>NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB. In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</source>
         <translation type="vanished">NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB. In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</translation>
     </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="57"/>
+        <source>Sequence name from file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="58"/>
+        <source>File name</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>SnpEffDatabaseDialog</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDialog.ui" line="14"/>
+        <source>Select SnpEff Database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDialog.ui" line="23"/>
+        <source>Search...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SpadesSettings</name>
@@ -2798,9 +2972,8 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation>Dataset type</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesSettings.ui" line="112"/>
         <source>auto</source>
-        <translation>auto</translation>
+        <translation type="vanished">auto</translation>
     </message>
     <message>
         <location filename="../src/spades/SpadesSettings.ui" line="120"/>
@@ -2839,7 +3012,7 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="36"/>
@@ -2879,6 +3052,111 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     </message>
 </context>
 <context>
+    <name>U2::AlignToReferenceBlastCmdlineTask</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="93"/>
+        <source>Map Sanger reads to reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="110"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="113"/>
+        <source>wrong reference format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="165"/>
+        <source><u>Filtered by quality (%1):</u></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="209"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="212"/>
+        <source>wrong output format</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::AlignToReferenceBlastDialog</name>
+    <message>
+        <source>Align</source>
+        <translation type="obsolete">Align</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="246"/>
+        <source>Map</source>
+        <translation>Map</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="247"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="253"/>
+        <source>File name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="254"/>
+        <source>Sequence name from file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="270"/>
+        <source>Select Output File...</source>
+        <translation>Select Output File...</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="283"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="290"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="309"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="332"/>
+        <source>Error</source>
+        <translation>Error</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="284"/>
+        <source>Reference sequence is not set.</source>
+        <translation>Reference sequence is not set.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="291"/>
+        <source>No reads provided.</source>
+        <translation>No reads provided.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="310"/>
+        <source>Output file is not set.</source>
+        <translation>Output file is not set.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="321"/>
+        <source>Overwrite the file?</source>
+        <translation>Overwrite the file?</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="322"/>
+        <source>The result file already exists. Would you like to overwrite it?</source>
+        <translation>The result file already exists. Would you like to overwrite it?</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="332"/>
+        <source>Unable to delete the file.</source>
+        <translation>Unable to delete the file.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="344"/>
+        <source>Open Reference Sequence</source>
+        <translation>Open Reference Sequence</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="355"/>
+        <source>Select File(s) with Read(s)</source>
+        <translation>Select File(s) with Read(s)</translation>
+    </message>
+</context>
+<context>
     <name>U2::BedtoolsIntersectAnnotationsByEntityTask</name>
     <message>
         <location filename="../src/bedtools/BedtoolsIntersectTask.cpp" line="114"/>
@@ -2944,40 +3222,36 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastAllSupport</name>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="71"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="73"/>
         <source>The <i>blastall</i> is the old program developed and distributed by the NCBI for running BLAST searches. The NCBI recommends that people start using the programs of the BLAST+ package instead.</source>
         <translation>The <i>blastall</i> is the old program developed and distributed by the NCBI for running BLAST searches. The NCBI recommends that people start using the programs of the BLAST+ package instead.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="85"/>
         <source>Path for BLAST %1 tool not selected.</source>
-        <translation>Path for BLAST %1 tool not selected.</translation>
+        <translation type="vanished">Path for BLAST %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="86"/>
         <source>Do you want to select it now?</source>
-        <translation>Do you want to select it now?</translation>
+        <translation type="vanished">Do you want to select it now?</translation>
     </message>
 </context>
 <context>
     <name>U2::BlastAllSupportContext</name>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="135"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="118"/>
         <source>Query with local BLAST...</source>
         <translation>Query with local BLAST...</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="155"/>
         <source>Path for BLAST %1 tool not selected.</source>
-        <translation>Path for BLAST %1 tool not selected.</translation>
+        <translation type="vanished">Path for BLAST %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="156"/>
         <source>Do you want to select it now?</source>
-        <translation>Do you want to select it now?</translation>
+        <translation type="vanished">Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="204"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="168"/>
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
@@ -3011,17 +3285,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Database name contains space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="103"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="99"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="117"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="113"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="117"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="113"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -3031,17 +3305,21 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="61"/>
         <source>A problem occurred during doing BLAST. The sequence is no more available.</source>
-        <translation type="unfinished"></translation>
+        <translation>A problem occurred during doing BLAST. The sequence is no more available.</translation>
+    </message>
+    <message>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation type="vanished">Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdirectory for temporary files exists. Can not remove this folder.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="86"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="99"/>
@@ -3060,8 +3338,8 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="258"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
@@ -3147,7 +3425,7 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastAllWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="161"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="160"/>
         <source>Select input file</source>
         <translation>Select input file</translation>
     </message>
@@ -3160,23 +3438,23 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Database name contains space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="207"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="206"/>
         <source>This file has the incompatible format for the BLAST+ search.</source>
         <translation>This file has the incompatible format for the BLAST+ search.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="252"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="251"/>
         <source>This file does not contain any sequence.</source>
         <translation>This file does not contain any sequence.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="207"/>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="252"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="206"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="251"/>
         <source>Wrong input file</source>
         <translation>Wrong input file</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="300"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="297"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
@@ -3208,22 +3486,22 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="44"/>
         <source>Database path contains space characters.</source>
-        <translation type="unfinished">Database path contains space characters.</translation>
+        <translation>Database path contains space characters.</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="49"/>
         <source>Database name contains space characters.</source>
-        <translation type="unfinished">Database name contains space characters.</translation>
+        <translation>Database name contains space characters.</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="76"/>
         <source>Select a database file</source>
-        <translation type="unfinished">Select a database file</translation>
+        <translation>Select a database file</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="108"/>
         <source>No alias or index file found for selected database.</source>
-        <translation type="unfinished"></translation>
+        <translation>No alias or index file found for selected database.</translation>
     </message>
 </context>
 <context>
@@ -3247,12 +3525,12 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupport</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="179"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="182"/>
         <source>Path for BLAST+ tools not selected.</source>
         <translation>Path for BLAST+ tools not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="180"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="183"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -3260,101 +3538,106 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportCommonTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="69"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="70"/>
         <source>A problem occurred during doing BLAST+. The sequence is no more available.</source>
+        <translation>A problem occurred during doing BLAST+. The sequence is no more available.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="83"/>
+        <source>The task uses a temporary folder to process the data. The folder path is required not to have spaces. Please set up an appropriate path for the "Temporary files" parameter on the "Directories" tab of the UGENE Application Settings.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="93"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="92"/>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation>Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="98"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="97"/>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="111"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="110"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="155"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="167"/>
         <source>Output file not found</source>
         <translation>Output file not found</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="157"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="169"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="186"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="211"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="198"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="223"/>
         <source>There were no hits found for your BLAST search.</source>
         <translation>There were no hits found for your BLAST search.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="203"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="215"/>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="244"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="256"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="249"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="254"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="409"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="416"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="433"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="261"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="421"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="428"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="445"/>
         <source>Can't get location</source>
         <translation>Can't get location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="278"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="272"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="277"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="284"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="289"/>
         <source>Can't get hit location</source>
         <translation>Can't get hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="293"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="305"/>
         <source>Can't evaluate hit location</source>
         <translation>Can't evaluate hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="307"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="459"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="319"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="471"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="312"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="451"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="324"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="463"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="317"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="443"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="329"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="455"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="358"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="350"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="362"/>
         <source>Can't read output file</source>
         <translation>Can't read output file</translation>
     </message>
@@ -3362,43 +3645,43 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportContext</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="234"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="255"/>
         <source>Fetch sequences by 'id'</source>
         <translation>Fetch sequences by 'id'</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="245"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="266"/>
         <source>Query with local BLAST+...</source>
         <translation>Query with local BLAST+...</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="289"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="310"/>
         <source>Fetch sequences from local BLAST database</source>
         <translation>Fetch sequences from local BLAST database</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="294"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="315"/>
         <source>Fetch sequences by 'id' %1</source>
         <translation>Fetch sequences by 'id' %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="312"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="333"/>
         <source>Path for BLAST+ tools not selected.</source>
         <translation>Path for BLAST+ tools not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="398"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="334"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="419"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="369"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="390"/>
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="418"/>
         <source>Path for BLAST+ %1 tool not selected.</source>
         <translation>Path for BLAST+ %1 tool not selected.</translation>
     </message>
@@ -3406,17 +3689,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportMultiTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="613"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="625"/>
         <source>Source file</source>
         <translation>Source file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="614"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="626"/>
         <source>Used databse</source>
         <translation>Used database</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="616"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="628"/>
         <source>No any results found</source>
         <translation>No any results found</translation>
     </message>
@@ -3432,27 +3715,27 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Database name contains space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="111"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="112"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="146"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="147"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Path for <i>BLAST+ %1</i> tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="180"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="181"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="194"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="195"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="194"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="195"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -3460,13 +3743,13 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="235"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="240"/>
         <source>Select input file</source>
         <translation>Select input file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="281"/>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="327"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="286"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="332"/>
         <source>Wrong input file</source>
         <translation>Wrong input file</translation>
     </message>
@@ -3479,27 +3762,27 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Database name contains space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="281"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="286"/>
         <source>This file has the incompatible format for the BLAST+ search.</source>
         <translation>This file has the incompatible format for the BLAST+ search.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="327"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="332"/>
         <source>This file does not contain sequences.</source>
         <translation>This file does not contain sequences.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="380"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="383"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="415"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="418"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Path for <i>BLAST+ %1</i> tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="449"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="452"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Wrong parameters for creating annotations</translation>
     </message>
@@ -3507,17 +3790,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastRunCommonDialog</name>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="64"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="57"/>
         <source>Restore to default</source>
         <translation>Restore to default</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="65"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="58"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="66"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="59"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -3526,32 +3809,32 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Select a database file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="290"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="284"/>
         <source>Direct nucleotide alignment</source>
         <translation>Direct nucleotide alignment</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="293"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="287"/>
         <source>Direct protein alignment</source>
         <translation>Direct protein alignment</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="297"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="291"/>
         <source>Direct protein alignment (on GPU)</source>
         <translation>Direct protein alignment (on GPU)</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="301"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="295"/>
         <source>Protein alignment, input nucleotide is translated input protein before the search</source>
         <translation>Protein alignment, input nucleotide is translated input protein before the search</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="305"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="299"/>
         <source>Protein alignment, nucleotide database is translated input protein before the search</source>
         <translation>Protein alignment, nucleotide database is translated input protein before the search</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="309"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="303"/>
         <source>Protein alignment, both input query and database are translated before the search</source>
         <translation>Protein alignment, both input query and database are translated before the search</translation>
     </message>
@@ -3646,17 +3929,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="238"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="237"/>
         <source>Saming reads with BWA Multitask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="291"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="290"/>
         <source>Log is incomplete</source>
         <translation>Log is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="294"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="293"/>
         <source>Log is incorrect</source>
         <translation>Log is incorrect</translation>
     </message>
@@ -3664,17 +3947,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BwaMemAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="317"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="316"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="336"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="335"/>
         <source>Please, provide same number of files with downstream and upstream reads.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="428"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="427"/>
         <source>Align reads with BWA-MEM Multitask</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3886,17 +4169,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOSupportContext</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="133"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="132"/>
         <source>Align with ClustalO...</source>
         <translation>Align with ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="159"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -3928,13 +4211,13 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="127"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation>Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="132"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="179"/>
@@ -3963,8 +4246,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="293"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -4035,17 +4318,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWSupportContext</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="133"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="132"/>
         <source>Align with ClustalW...</source>
         <translation>Align with ClustalW...</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="158"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="159"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -4107,8 +4390,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalw/ClustalWSupportTask.cpp" line="310"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -4214,7 +4497,7 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/hmmer/ConvertAlignment2StockholmTask.cpp" line="102"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4231,49 +4514,40 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::CopyFileTask</name>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="101"/>
         <source>Copy file task</source>
-        <translation>Copy file task</translation>
+        <translation type="vanished">Copy file task</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="109"/>
         <source>Input file is not set</source>
-        <translation>Input file is not set</translation>
+        <translation type="vanished">Input file is not set</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="113"/>
         <source>Output file is not set</source>
-        <translation>Output file is not set</translation>
+        <translation type="vanished">Output file is not set</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="117"/>
         <source>Copy %1 to %2</source>
-        <translation>Copy %1 to %2</translation>
+        <translation type="vanished">Copy %1 to %2</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="121"/>
         <source>Can not rename existing file '%1'</source>
-        <translation>Can not rename existing file '%1'</translation>
+        <translation type="vanished">Can not rename existing file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="127"/>
         <source>Error copying file</source>
-        <translation>Error copying file</translation>
+        <translation type="vanished">Error copying file</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="130"/>
         <source>File copying finished</source>
-        <translation>File copying finished</translation>
+        <translation type="vanished">File copying finished</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="135"/>
         <source>File copying task was finished with an error: %1</source>
-        <translation>File copying task was finished with an error: %1</translation>
+        <translation type="vanished">File copying task was finished with an error: %1</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="137"/>
         <source>File copy was finished. Copy of '%1' is '%2'</source>
-        <translation>File copy was finished. Copy of '%1' is '%2'</translation>
+        <translation type="vanished">File copy was finished. Copy of '%1' is '%2'</translation>
     </message>
 </context>
 <context>
@@ -4487,90 +4761,99 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportPlugin</name>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="165"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="167"/>
         <source>Search tools in PATH</source>
         <translation>Search tools in PATH</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="212"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="214"/>
         <source>External tool support</source>
         <translation>External tool support</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="212"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="214"/>
         <source>Runs other external tools</source>
         <translation>Runs other external tools</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="275"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="277"/>
         <source>Align with ClustalW...</source>
         <translation>Align with ClustalW...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="283"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="285"/>
         <source>Align with ClustalO...</source>
         <translation>Align with ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="291"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="293"/>
         <source>Align with MAFFT...</source>
         <translation>Align with MAFFT...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="299"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="301"/>
         <source>Align with T-Coffee...</source>
         <translation>Align with T-Coffee...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="450"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="452"/>
         <source>BLAST make database...</source>
         <translation>BLAST make database...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="454"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="456"/>
         <source>BLAST+ make database...</source>
         <translation>BLAST+ make database...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="472"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="468"/>
+        <source>Map reads to reference...</source>
+        <translation>Map reads to reference...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="493"/>
+        <source>Reads de novo assembly (with %1)...</source>
+        <translation>Reads de novo assembly (with %1)...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="478"/>
         <source>BLAST+ search...</source>
         <translation>BLAST+ search...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="482"/>
         <source>BLAST+ query database...</source>
         <translation>BLAST+ query database...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="487"/>
         <source>Contig assembly with %1...</source>
-        <translation type="unfinished"></translation>
+        <translation type="vanished">Contig assembly with %1...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="462"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="464"/>
         <source>BLAST search...</source>
         <translation>BLAST search...</translation>
     </message>
     <message>
         <location filename="../src/ExternalToolSupportL10N.h" line="38"/>
-        <source>The subdirectory for temporary files '%1' already exists. Can not remove this directory!</source>
-        <translation>The subdirectory for temporary files '%1' already exists. Can not remove this directory!</translation>
+        <source>The subfolder for temporary files '%1' already exists. Can not remove this folder!</source>
+        <translation>The subfolder for temporary files '%1' already exists. Can not remove this folder!</translation>
     </message>
     <message>
         <location filename="../src/ExternalToolSupportL10N.h" line="43"/>
-        <source>Can not create a subdirectory for temporary files '%1'!</source>
-        <translation>Can not create a subdirectory for temporary files '%1'!</translation>
+        <source>Can not create a subfolder for temporary files '%1'!</source>
+        <translation>Can not create a subfolder for temporary files '%1'!</translation>
     </message>
 </context>
 <context>
     <name>U2::ExternalToolSupportService</name>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="651"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="676"/>
         <source>External tools support</source>
         <translation>External tools support</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="651"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="676"/>
         <source>Provides support to run external tools from UGENE</source>
         <translation>Provides support to run external tools from UGENE</translation>
     </message>
@@ -4578,7 +4861,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportSettingsPageController</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="52"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="46"/>
         <source>External Tools</source>
         <translation>External Tools</translation>
     </message>
@@ -4586,85 +4869,98 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportSettingsPageWidget</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="469"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="463"/>
         <source>Select an external tool to view more information about it.</source>
         <translation>Select an external tool to view more information about it.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="470"/>
         <source>The <i>Basic Local Alignment Search Tool</i> (BLAST) finds regions of local similarity between sequences. The program compares nucleotide or protein sequences to sequence databases and calculates the statistical significance of matches. BLAST can be used to infer functional and evolutionary relationships between sequences as well as help identify members of gene families.</source>
         <translation>The <i>Basic Local Alignment Search Tool</i> (BLAST) finds regions of local similarity between sequences. The program compares nucleotide or protein sequences to sequence databases and calculates the statistical significance of matches. BLAST can be used to infer functional and evolutionary relationships between sequences as well as help identify members of gene families.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="482"/>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="485"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="479"/>
         <source><i>BLAST+</i> is a new version of the BLAST package from the NCBI.</source>
         <translation><i>BLAST+</i> is a new version of the BLAST package from the NCBI.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="496"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="490"/>
         <source><i>Cufflinks</i> assembles transcripts, estimates their abundances, and tests for differential expression and regulation in RNA-Seq samples. It accepts aligned RNA-Seq reads and assembles the alignments into a parsimonious set of transcripts. It also estimates the relative abundances of these transcripts based on how many reads support each one, taking into account biases in library preparation protocols. </source>
         <translation><i>Cufflinks</i> assembles transcripts, estimates their abundances, and tests for differential expression and regulation in RNA-Seq samples. It accepts aligned RNA-Seq reads and assembles the alignments into a parsimonious set of transcripts. It also estimates the relative abundances of these transcripts based on how many reads support each one, taking into account biases in library preparation protocols.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="504"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="498"/>
         <source><i>Bowtie 2</i> is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences. It is particularly good at aligning reads of about 50 up to 100s or 1000s of characters, and particularly good at aligning to relatively long (e.g. mammalian) genomes. <br/><br/>It indexes the genome with an FM index to keep its memory footprint small: for the human genome, its memory footprint is typically around 3.2Gb. <br/>& [...]
         <translation><i>Bowtie 2</i> is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences. It is particularly good at aligning reads of about 50 up to 100s or 1000s of characters, and particularly good at aligning to relatively long (e.g. mammalian) genomes. <br/><br/>It indexes the genome with an FM index to keep its memory footprint small: for the human genome, its memory footprint is typically around 3.2Gb. <br/ [...]
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="513"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="507"/>
         <source><i>Cistrome</i> is a UGENE version of Cistrome pipeline which also includes some tools useful for ChIP-seq analysisThis pipeline is aimed to provide the following analysis steps: peak calling and annotating, motif search and gene ontology.</source>
         <translation><i>Cistrome</i> is a UGENE version of Cistrome pipeline which also includes some tools useful for ChIP-seq analysis. This pipeline is aimed to provide the following analysis steps: peak calling and annotating, motif search and gene ontology.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="364"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="358"/>
         <source>No description</source>
         <translation>No description</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="327"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="321"/>
         <source>External tool '%1' cannot be validated as it depends on other tools, some of which are not valid. The list of tools is the following: </source>
         <translation>External tool '%1' cannot be validated as it depends on other tools, some of which are not valid. The list of tools is the following: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="351"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="345"/>
         <source>'%1' is %2 module and it is not installed. Install it and restart UGENE or set another %2 with already installed '%1' module.</source>
         <translation>'%1' is %2 module and it is not installed. Install it and restart UGENE or set another %2 with already installed '%1' module.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="374"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="368"/>
         <source><br><br>Version: </source>
         <translation><br><br>Version: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="378"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="372"/>
         <source>unknown</source>
         <translation>unknown</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="383"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="377"/>
         <source><br><br>Binary path: </source>
         <translation><br><br>Binary path: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="488"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="482"/>
         <source><i>Bowtie<i> is an ultrafast, memory-efficient short read aligner. It aligns short DNA sequences (reads) to the human genome at a rate of over 25 million 35-bp reads per hour. Bowtie indexes the genome with a Burrows-Wheeler index to keep its memory footprint small: typically about 2.2 GB for the human genome (2.9 GB for paired-end). <a href='http://qt-project.org/doc/qt-4.8/qtextbrowser.html#anchorClicked'>Link text</a> </source>
         <translation><i>Bowtie<i> is an ultrafast, memory-efficient short read aligner. It aligns short DNA sequences (reads) to the human genome at a rate of over 25 million 35-bp reads per hour. Bowtie indexes the genome with a Burrows-Wheeler index to keep its memory footprint small: typically about 2.2 GB for the human genome (2.9 GB for paired-end). <a href='http://qt-project.org/doc/qt-4.8/qtextbrowser.html#anchorClicked'>Link text</a></translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="543"/>
-        <source>Choose Directory With Executables</source>
-        <translation>Choose Directory With Executables</translation>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="537"/>
+        <source>Choose Folder With Executables</source>
+        <translation>Choose Folder With Executables</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="592"/>
+        <source>Choose Folder With External Tools Pack</source>
+        <translation>Choose Folder With External Tools Pack</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="645"/>
+        <source>Not a valid external tools folder</source>
+        <translation>Not a valid external tools folder</translation>
     </message>
+</context>
+<context>
+    <name>U2::ExternalToolUtils</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="598"/>
-        <source>Choose Directory With External Tools Pack</source>
-        <translation>Choose Directory With External Tools Pack</translation>
+        <location filename="../src/utils/ExternalToolUtils.cpp" line="54"/>
+        <source>Paths for the following tools are not selected: %1.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="651"/>
-        <source>Not a valid external tools directory</source>
-        <translation>Not a valid external tools directory</translation>
+        <location filename="../src/utils/ExternalToolUtils.cpp" line="55"/>
+        <source>Do you want to select it now?</source>
+        <translation type="unfinished">Do you want to select it now?</translation>
     </message>
 </context>
 <context>
@@ -4738,7 +5034,7 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/fastqc/FastqcTask.cpp" line="101"/>
-        <source>Directory does not exist: %1</source>
+        <source>Folder does not exist: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4779,39 +5075,39 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::FormatDBSupportRunDialog</name>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="48"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="43"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="49"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="80"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="75"/>
         <source>Select file(s)</source>
         <translation>Select file(s)</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="103"/>
-        <source>Select a directory with input files</source>
-        <translation>Select a directory with input files</translation>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="98"/>
+        <source>Select a folder with input files</source>
+        <translation>Select a folder with input files</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="114"/>
-        <source>Select a directory to save database files</source>
-        <translation>Select a directory to save database files</translation>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="109"/>
+        <source>Select a folder to save database files</source>
+        <translation>Select a folder to save database files</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="126"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="132"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="127"/>
         <source>Input files paths contain space characters.</source>
         <translation>Input files paths contain space characters.</translation>
     </message>
     <message>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="135"/>
         <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="140"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="145"/>
         <source>Output database path contain space characters.</source>
         <translation>Output database path contain space characters.</translation>
     </message>
@@ -4819,106 +5115,175 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::FormatDBSupportTask</name>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="54"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="55"/>
         <source>Run NCBI FormatDB task</source>
         <translation>Run NCBI FormatDB task</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="146"/>
-        <source>Cannot create temp directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="153"/>
-        <source>File '%1' was skipped. Cannot detect file format.</source>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="151"/>
+        <source>Cannot create temp folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="180"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="168"/>
         <source>Trying to initialize Format DB task second time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="187"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="175"/>
         <source>Input files paths contain space characters.</source>
         <translation>Input files paths contain space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="204"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="192"/>
         <source>Output database path contain space characters.</source>
         <translation>Output database path contain space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="105"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="103"/>
         <source>Blast database creation has been cancelled</source>
         <translation>Blast database creation has been cancelled</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="95"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation type="unfinished">Can not remove directory for temporary files.</translation>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="93"/>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="112"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="110"/>
         <source>Blast database has been successfully created</source>
         <translation>Blast database has been successfully created</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="113"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="111"/>
         <source>Source sequences: </source>
         <translation>Source sequences: </translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="121"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="119"/>
         <source>Database file path: %1</source>
         <translation>Database file path: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="123"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="121"/>
         <source>Type: %1</source>
         <translation>Type: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="125"/>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="131"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="123"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="129"/>
         <source>Formatdb log file path: </source>
         <translation>Formatdb log file path: </translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="129"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="127"/>
         <source>Blast database creation has been failed</source>
         <translation>Blast database creation has been failed</translation>
     </message>
 </context>
 <context>
-    <name>U2::Gene2PeakFormatLoader</name>
+    <name>U2::GTest_CompareHmmFiles</name>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="98"/>
-        <source>Incorrect start position at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="339"/>
+        <source>File #1 not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="102"/>
-        <source>Incorrect end position at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="345"/>
+        <source>File #2 not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="117"/>
-        <source>Incorrect NA value at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="405"/>
+        <source>Error creating ioadapter for first file</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>U2::GffreadSupportTask</name>
     <message>
-        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="34"/>
-        <source>Running Gffread task</source>
-        <translation>Running Gffread task</translation>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="409"/>
+        <source>Error opening 1 file</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="59"/>
-        <source>Unknown file format: %1</source>
-        <translation>Unknown file format: %1</translation>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="416"/>
+        <source>Error creating ioadapter for second file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="420"/>
+        <source>Error opening second file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="445"/>
+        <source>Names of aligments not matched</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="449"/>
+        <source>Comparing files length not matched</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="456"/>
+        <source>Files parts not equal:'%1' and '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::GTest_UHMM3SearchCompare</name>
+    <message>
+        <location filename="../src/hmmer/HmmerSearchTaskTest.cpp" line="250"/>
+        <source>Can't parse significance:%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerSearchTaskTest.cpp" line="259"/>
+        <source>Internal error (cannot parse float number from string '%1')</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::GTest_UHMMER3Build</name>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="262"/>
+        <source>No input file given</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="268"/>
+        <source>No output file given</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Gene2PeakFormatLoader</name>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="98"/>
+        <source>Incorrect start position at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="102"/>
+        <source>Incorrect end position at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="117"/>
+        <source>Incorrect NA value at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::GffreadSupportTask</name>
+    <message>
+        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="34"/>
+        <source>Running Gffread task</source>
+        <translation>Running Gffread task</translation>
+    </message>
+    <message>
+        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="59"/>
+        <source>Unknown file format: %1</source>
+        <translation>Unknown file format: %1</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="68"/>
@@ -4929,17 +5294,21 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerAdvContext</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="304"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="328"/>
         <source>Find HMM signals with HMMER3...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="314"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="342"/>
         <source>error</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="314"/>
+        <source>Error</source>
+        <translation type="obsolete">Error</translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="342"/>
         <source>No sequence in focus found</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4947,37 +5316,37 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerBuildDialog</name>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="63"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="70"/>
         <source>Build</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="64"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="71"/>
         <source>Cancel</source>
         <translation type="unfinished">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="78"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="85"/>
         <source>Select hmm file to create</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="120"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="127"/>
         <source>Select multiple alignment file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="185"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="192"/>
         <source>input file is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="188"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="195"/>
         <source>output hmm file is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="197"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="204"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4998,18 +5367,18 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerBuildFromMsaTask</name>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="38"/>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="39"/>
         <source>Build HMMER profile from msa</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="45"/>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="46"/>
         <source>HMM profile URL is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="104"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="105"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5114,7 +5483,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerMsaEditorContext</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="261"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="285"/>
         <source>Build HMMER3 profile</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5130,47 +5499,47 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSearchDialog</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="57"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="70"/>
         <source>Run</source>
         <translation type="unfinished">Run</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="58"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="71"/>
         <source>Cancel</source>
         <translation type="unfinished">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="161"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="174"/>
         <source>HMM profile is not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="167"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="180"/>
         <source>Settings are invalid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="178"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="191"/>
         <source>Error</source>
         <translation type="unfinished">Error</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="178"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="191"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation type="unfinished">Cannot create an annotation object. Please check settings</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="186"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="199"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="234"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="250"/>
         <source>HMM profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="236"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="252"/>
         <source>Select query HMM profile</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5178,47 +5547,47 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSearchTask</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="48"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="47"/>
         <source>HMMER search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="101"/>
         <source>HMM profile used: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="103"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="104"/>
         <source>Task was not finished</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="109"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="110"/>
         <source>Result annotation table: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="111"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="112"/>
         <source>Result annotation group: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="112"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="113"/>
         <source>Result annotation name: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="114"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="115"/>
         <source>Results count: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="146"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="147"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="194"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="195"/>
         <source>Unknown option controlling model-specific thresholding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5226,54 +5595,54 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSupport</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="135"/>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="151"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="136"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="163"/>
         <source>Error!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="135"/>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="151"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="136"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="163"/>
         <source>Target sequence not selected: no opened annotated dna view</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="168"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="192"/>
         <source><i>HMMER build</i> constructs HMM profiles from multiple sequence alignments.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="172"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="196"/>
         <source>Build HMM3 profile...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="188"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="212"/>
         <source><i>HMMER search</i> searches profile(s) against a sequence database.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="192"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="216"/>
         <source>Search with HMMER3...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="208"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="232"/>
         <source><i>PHMMER search</i> searches a protein sequence against a protein database.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="212"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="236"/>
         <source>Search with phmmer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="223"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="247"/>
         <source>Path for %1 tool not selected.</source>
         <translation type="unfinished">Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="224"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="248"/>
         <source>Do you want to select it now?</source>
         <translation type="unfinished">Do you want to select it now?</translation>
     </message>
@@ -5281,116 +5650,250 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::JavaSupport</name>
     <message>
-        <location filename="../src/java/JavaSupport.cpp" line="47"/>
+        <location filename="../src/java/JavaSupport.cpp" line="52"/>
         <source>Java Platform lets you develop and deploy Java applications on desktops and servers.<br><i>(Requires Java 1.7 or higher)</i>.<br>Java can be freely downloaded on the official web-site: https://www.java.com/en/download/</source>
         <translation>Java Platform lets you develop and deploy Java applications on desktops and servers.<br><i>(Requires Java 1.7 or higher)</i>.<br>Java can be freely downloaded on the official web-site: https://www.java.com/en/download/</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastPrompter</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="86"/>
+        <source>Input sequence</source>
+        <translation type="unfinished">Input sequence</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="86"/>
+        <source>Input sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="87"/>
+        <source>Aligned data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="87"/>
+        <source>Aligned data.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="101"/>
+        <source>Reference URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="102"/>
+        <source>A URL to the file with a reference sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="105"/>
+        <source>Result alignment URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="106"/>
+        <source>An URL to write the result alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="109"/>
+        <source>Mapping min similarity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="110"/>
+        <source>Reads, whose similarity with the reference is less than the stated value, will be ignored.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="113"/>
+        <source>Read name in result alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="114"/>
+        <source>Reads in the result alignment can be named either by names of the sequences in the input files or by the input files names. For example, if the sequences have the same name, set this value to "File name" to be able to distinguish the reads in the result alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="161"/>
+        <source>unset</source>
+        <translation type="unfinished">unset</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="164"/>
+        <source>Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastTask</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="259"/>
+        <source>Map to reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="345"/>
+        <source>Details</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="346"/>
+        <source>Reference sequence:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="347"/>
+        <source>Mapped reads (%1):</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="351"/>
+        <source>similarity</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="356"/>
+        <source>Filtered by low similarity (%1):</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastWorker</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="135"/>
+        <source>Map to Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="136"/>
+        <source>Align input sequences (e.g. Sanger reads) to the reference sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="230"/>
+        <source>The result file was not produced</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::BaseShortReadsAlignerWorker</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="240"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="253"/>
         <source>Not enough upstream reads datasets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="243"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="256"/>
         <source>Not enough downstream reads datasets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="278"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="295"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="279"/>
-        <source>Directory to save output files.</source>
-        <translation>Directory to save output files.</translation>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="296"/>
+        <source>Folder to save output files.</source>
+        <translation>Folder to save output files.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="282"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="299"/>
         <source>Reference genome</source>
         <translation>Reference genome</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="283"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="300"/>
         <source>Path to indexed reference genome.</source>
         <translation>Path to indexed reference genome.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="286"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="303"/>
         <source>Library</source>
         <translation>Library</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="287"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="304"/>
         <source>Is this library mate-paired?</source>
         <translation>Is this library mate-paired?</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="290"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="307"/>
+        <source>Filter unpaired reads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="308"/>
+        <source>Should the reads be checked for incomplete pairs?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="311"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="291"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="312"/>
         <source>Base name of the output file. 'out.sam' by default</source>
         <translation>Base name of the output file. 'out.sam' by default</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="323"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="350"/>
         <source>URL of a file with reads</source>
         <translation>URL of a file with reads</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="334"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="351"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="361"/>
         <source>Input reads to be aligned.</source>
         <translation>Input reads to be aligned.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="326"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="353"/>
         <source>URL of a file with mate reads</source>
         <translation>URL of a file with mate reads</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="327"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="354"/>
         <source>Input mate reads to be aligned.</source>
         <translation>Input mate reads to be aligned.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="333"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="360"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="337"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="364"/>
         <source>Reverse FASTQ file</source>
         <translation>Reverse FASTQ file</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="338"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="365"/>
         <source>Reverse paired reads to be aligned.</source>
         <translation>Reverse paired reads to be aligned.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="350"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
         <source>Assembly URL</source>
         <translation>Assembly URL</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="351"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="378"/>
         <source>Output assembly URL.</source>
         <translation>Output assembly URL.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="354"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="381"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="355"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="382"/>
         <source>Output assembly files.</source>
         <translation>Output assembly files.</translation>
     </message>
@@ -5398,17 +5901,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedGraphToBigWigPrompter</name>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="75"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="78"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="76"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="79"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="78"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="81"/>
         <source>Converts bedGraph files to bigWig %1 with bedGraphToBigWig.</source>
         <translation>Converts bedGraph files to bigWig %1 with bedGraphToBigWig.</translation>
     </message>
@@ -5416,113 +5919,113 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedGraphToBigWigWorker</name>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="95"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="98"/>
         <source>Convert bedGraph Files to bigWig</source>
         <translation>Convert bedGraph Files to bigWig</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="96"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="99"/>
         <source>Convert bedGraph Files to bigWig.</source>
         <translation>Convert bedGraph Files to bigWig.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="100"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="103"/>
         <source>BedGrapgh files</source>
         <translation>BedGrapgh files</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="101"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="104"/>
         <source>Set of bedGraph files</source>
         <translation>Set of bedGraph files</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="102"/>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="103"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="105"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="106"/>
         <source>BigWig files</source>
         <translation>BigWig files</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="117"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="120"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="118"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="121"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="122"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="125"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="123"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="126"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="125"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="128"/>
         <source>Output name</source>
         <translation>Output name</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="126"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="129"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first BAM file with an extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first BAM file with an extention.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="128"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="131"/>
         <source>Block size</source>
         <translation>Block size</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="129"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="132"/>
         <source>Number of items to bundle in r-tree (-blockSize).</source>
         <translation>Number of items to bundle in r-tree (-blockSize).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="131"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="134"/>
         <source>Items per slot</source>
         <translation>Items per slot</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="132"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="135"/>
         <source>Number of data points bundled at lowest level (-itemsPerSlot).</source>
         <translation>Number of data points bundled at lowest level (-itemsPerSlot).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="134"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="137"/>
         <source>Uncompressed</source>
         <translation>Uncompressed</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="135"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="138"/>
         <source>If set, do not use compression (-unc).</source>
         <translation>If set, do not use compression (-unc).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="137"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="140"/>
         <source>Genome</source>
         <translation>Genome</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="138"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="141"/>
         <source>File with genome length.</source>
         <translation>File with genome length.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="170"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="173"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="168"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="171"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="169"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="172"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
@@ -5530,7 +6033,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedtoolsIntersectPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="992"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="995"/>
         <source>Intersect annotations from <u>%1</u> (<b>set A</b>) with annotations from <u>%2</u> (<b>set B</b>). Report </source>
         <translation>Intersect annotations from <u>%1</u> (<b>set A</b>) with annotations from <u>%2</u> (<b>set B</b>). Report </translation>
     </message>
@@ -5538,68 +6041,68 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedtoolsIntersectWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="881"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="884"/>
         <source>Data not found by %1 id</source>
         <translation>Data not found by %1 id</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="885"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="888"/>
         <source>Can not get annotation table object</source>
         <translation>Can not get annotation table object</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="899"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="902"/>
         <source>Annotations A</source>
         <translation>Annotations A</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="904"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="907"/>
         <source>Annotations B</source>
         <translation>Annotations B</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="909"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="912"/>
         <source>Annotations</source>
         <translation>Annotations</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="909"/>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="925"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="912"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="928"/>
         <source>Result annotations</source>
         <translation>Result annotations</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="918"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="921"/>
         <source>Minimum overlap</source>
         <translation>Minimum overlap</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="919"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="922"/>
         <source>Minimum overlap required as a fraction of an annotation from set A.<br/>By default, even 1 bp overlap between annotations from set A and set B is taken into account. Yet sometimes you may want to restrict reported overlaps to cases where the annotations in B overlaps at least X% (e.g. 50%) of the A annotation. </source>
         <translation>Minimum overlap required as a fraction of an annotation from set A.<br/>By default, even 1 bp overlap between annotations from set A and set B is taken into account. Yet sometimes you may want to restrict reported overlaps to cases where the annotations in B overlaps at least X% (e.g. 50%) of the A annotation. </translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="926"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="929"/>
         <source>Select one of the following:<ul><li><i>Shared interval</i> to report intervals shared between overlapped annotations from set A and set B.</li><li><i>Overlapped annotations from A</i> to report annotations from set A that have an overlap with annotations from set B.</li><li><i>Non-overlapped annotations from A</i> to report annotations from set A that have NO overlap with annotations from set B.</l [...]
         <translation>Select one of the following:<ul><li><i>Shared interval</i> to report intervals shared between overlapped annotations from set A and set B.</li><li><i>Overlapped annotations from A</i> to report annotations from set A that have an overlap with annotations from set B.</li><li><i>Non-overlapped annotations from A</i> to report annotations from set A that have NO overlap with annotations from set B.& [...]
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="938"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="941"/>
         <source>Unique overlaps</source>
         <translation>Unique overlaps</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="939"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="942"/>
         <source>If the parameter value is "True", write original A entry once if any overlaps found in B. In other words, just report the fact at least one overlap was found in B.<br/>The minimum overlap number is ignored in this case.<br/><br/>If the parameter value is "False", the A annotation is reported for every overlap found.</source>
         <translation>If the parameter value is "True", write original A entry once if any overlaps found in B. In other words, just report the fact at least one overlap was found in B.<br/>The minimum overlap number is ignored in this case.<br/><br/>If the parameter value is "False", the A annotation is reported for every overlap found.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="976"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="979"/>
         <source>Intersect Annotations</source>
         <translation>Intersect Annotations</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="977"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="980"/>
         <source>Intersects two sets of annotations denoted as A and B.</source>
         <translation>Intersects two sets of annotations denoted as A and B.</translation>
     </message>
@@ -5716,13 +6219,13 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="112"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="113"/>
-        <source>Directory for temporary files.</source>
-        <translation>Directory for temporary files.</translation>
+        <source>Folder for temporary files.</source>
+        <translation>Folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="115"/>
@@ -5927,13 +6430,13 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="110"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="111"/>
-        <source>Directory for temporary files.</source>
-        <translation>Directory for temporary files.</translation>
+        <source>Folder for temporary files.</source>
+        <translation>Folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="112"/>
@@ -6024,14 +6527,13 @@ To save under other name press 'Cancel' and change name in 'Resul
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="113"/>
-        <source>When the -n option is specified (which is the default), bowtie determines which alignments                               
-are valid according to the following policy, which is similar to Maq's default policy.                               
-In -v mode, alignments may have no more than V mismatches, where V may be a number from 0                               
+        <source>When the -n option is specified (which is the default), bowtie determines which alignments
+are valid according to the following policy, which is similar to Maq's default policy.
+In -v mode, alignments may have no more than V mismatches, where V may be a number from 0
 through 3 set using the -v option. Quality values are ignored. The -v option is mutually exclusive with the -n option.</source>
-        <translation>When the -n option is specified (which is the default), bowtie determines which alignments                               
-are valid according to the following policy, which is similar to Maq's default policy.                               
-In -v mode, alignments may have no more than V mismatches, where V may be a number from 0                               
+        <translation type="vanished">When the -n option is specified (which is the default), bowtie determines which alignments
+are valid according to the following policy, which is similar to Maq's default policy.
+In -v mode, alignments may have no more than V mismatches, where V may be a number from 0
 through 3 set using the -v option. Quality values are ignored. The -v option is mutually exclusive with the -n option.</translation>
     </message>
     <message>
@@ -6040,11 +6542,24 @@ through 3 set using the -v option. Quality values are ignored. The -v option is
         <translation>Number of mismatches</translation>
     </message>
     <message>
+        <source>Sets the number of mismatches to allowed in a seed alignment. Can be set to 0 or 1.
+Setting this higher makes alignment slower (often much slower) but increases sensitivity.</source>
+        <translation type="vanished">Sets the number of mismatches to allowed in a seed alignment. Can be set to 0 or 1.
+Setting this higher makes alignment slower (often much slower) but increases sensitivity.</translation>
+    </message>
+    <message>
+        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="113"/>
+        <source>When the -n option is specified (which is the default), bowtie determines which alignments                               
+are valid according to the following policy, which is similar to Maq's default policy.                               
+In -v mode, alignments may have no more than V mismatches, where V may be a number from 0                               
+through 3 set using the -v option. Quality values are ignored. The -v option is mutually exclusive with the -n option.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="120"/>
         <source>Sets the number of mismatches to allowed in a seed alignment. Can be set to 0 or 1.                               
 Setting this higher makes alignment slower (often much slower) but increases sensitivity.</source>
-        <translation>Sets the number of mismatches to allowed in a seed alignment. Can be set to 0 or 1.                               
-Setting this higher makes alignment slower (often much slower) but increases sensitivity.</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="124"/>
@@ -6095,7 +6610,37 @@ Setting this higher makes alignment slower (often much slower) but increases sen
         <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="141"/>
         <source>Launch specified number of parallel search threads. Threads will run on separate processors/cores and synchronize                               
 when parsing reads and outputting alignments. Searching for alignments is highly parallel, and speedup is close to linear.</source>
-        <translation>Launch specified number of parallel search threads. Threads will run on separate processors/cores and synchronize                               
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="146"/>
+        <source>If Bowtie2 cannot find a paired-end alignment for a pair, by default it will go on to look for unpaired alignments                               
+for the constituent mates. This is called "mixed mode." To disable mixed mode, set this option. Bowtie2 runs a little                               
+faster in the mixed mode, but will only consider alignment status of pairs per se, not individual mates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="152"/>
+        <source>By default, Bowtie2 looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment                               
+is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints. This option disables that behavior.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="165"/>
+        <source>If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in                                 
+a concordant alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="170"/>
+        <source>If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the                                
+other in a concordant alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Launch specified number of parallel search threads. Threads will run on separate processors/cores and synchronize
+when parsing reads and outputting alignments. Searching for alignments is highly parallel, and speedup is close to linear.</source>
+        <translation type="vanished">Launch specified number of parallel search threads. Threads will run on separate processors/cores and synchronize
 when parsing reads and outputting alignments. Searching for alignments is highly parallel, and speedup is close to linear.</translation>
     </message>
     <message>
@@ -6104,12 +6649,11 @@ when parsing reads and outputting alignments. Searching for alignments is highly
         <translation>No unpaired alignments (--no-mixed)</translation>
     </message>
     <message>
-        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="146"/>
-        <source>If Bowtie2 cannot find a paired-end alignment for a pair, by default it will go on to look for unpaired alignments                               
-for the constituent mates. This is called "mixed mode." To disable mixed mode, set this option. Bowtie2 runs a little                               
+        <source>If Bowtie2 cannot find a paired-end alignment for a pair, by default it will go on to look for unpaired alignments
+for the constituent mates. This is called "mixed mode." To disable mixed mode, set this option. Bowtie2 runs a little
 faster in the mixed mode, but will only consider alignment status of pairs per se, not individual mates.</source>
-        <translation>If Bowtie2 cannot find a paired-end alignment for a pair, by default it will go on to look for unpaired alignments                               
-for the constituent mates. This is called "mixed mode." To disable mixed mode, set this option. Bowtie2 runs a little                               
+        <translation type="vanished">If Bowtie2 cannot find a paired-end alignment for a pair, by default it will go on to look for unpaired alignments
+for the constituent mates. This is called "mixed mode." To disable mixed mode, set this option. Bowtie2 runs a little
 faster in the mixed mode, but will only consider alignment status of pairs per se, not individual mates.</translation>
     </message>
     <message>
@@ -6118,10 +6662,9 @@ faster in the mixed mode, but will only consider alignment status of pairs per s
         <translation>No discordant alignments (--no-discordant)</translation>
     </message>
     <message>
-        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="152"/>
-        <source>By default, Bowtie2 looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment                               
+        <source>By default, Bowtie2 looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment
 is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints. This option disables that behavior.</source>
-        <translation>By default, Bowtie2 looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment                               
+        <translation type="vanished">By default, Bowtie2 looks for discordant alignments if it cannot find any concordant alignments. A discordant alignment
 is an alignment where both mates align uniquely, but that does not satisfy the paired-end constraints. This option disables that behavior.</translation>
     </message>
     <message>
@@ -6150,10 +6693,9 @@ is an alignment where both mates align uniquely, but that does not satisfy the p
         <translation>No overlapping mates (--no-overlap)</translation>
     </message>
     <message>
-        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="165"/>
-        <source>If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in                                 
+        <source>If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in
 a concordant alignment.</source>
-        <translation>If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in                                 
+        <translation type="vanished">If one mate alignment overlaps the other at all, consider that to be non-concordant. Default: mates can overlap in
 a concordant alignment.</translation>
     </message>
     <message>
@@ -6162,10 +6704,9 @@ a concordant alignment.</translation>
         <translation>No mates containing one another (--no-contain)</translation>
     </message>
     <message>
-        <location filename="../src/bowtie2/Bowtie2Worker.cpp" line="170"/>
-        <source>If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the                                
+        <source>If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the
 other in a concordant alignment.</source>
-        <translation>If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the                                
+        <translation type="vanished">If one mate alignment contains the other, consider that to be non-concordant. Default: a mate can contain the
 other in a concordant alignment.</translation>
     </message>
     <message>
@@ -6265,11 +6806,11 @@ other in a concordant alignment.</translation>
     <message>
         <location filename="../src/bowtie/BowtieWorker.cpp" line="184"/>
         <source>The number of megabytes of memory a given thread is given to store path descriptors in --best mode. Best-first                                search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost.                                Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases.                                If you receive an error message saying  [...]
-        <translation>The number of megabytes of memory a given thread is given to store path descriptors in --best mode. 
-Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost. 
-Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases. 
-If you receive an error message saying that chunk memory has been exhausted in --best mode, 
-try adjusting this parameter up to dedicate more memory to the descriptors. 
+        <translation>The number of megabytes of memory a given thread is given to store path descriptors in --best mode.
+Best-first search must keep track of many paths at once to ensure it is always extending the path with the lowest cumulative cost.
+Bowtie tries to minimize the memory impact of the descriptors, but they can still grow very large in some cases.
+If you receive an error message saying that chunk memory has been exhausted in --best mode,
+try adjusting this parameter up to dedicate more memory to the descriptors.
 Default: 64.</translation>
     </message>
     <message>
@@ -6336,188 +6877,192 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::BwaMemWorker</name>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="133"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="139"/>
         <source>Number of threads</source>
         <translation>Number of threads</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="134"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="140"/>
         <source>Number of threads (-t).</source>
         <translation>Number of threads (-t).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="137"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="143"/>
         <source>Min seed length</source>
         <translation>Min seed length</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="138"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="144"/>
         <source>Path to indexed reference genome (-k).</source>
         <translation>Path to indexed reference genome (-k).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="141"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="147"/>
         <source>Index algorithm</source>
         <translation>Index algorithm</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="142"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="148"/>
         <source>Index algorithm (-a).</source>
         <translation>Index algorithm (-a).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="145"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="151"/>
         <source>Band width</source>
         <translation>Band width</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="146"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="152"/>
         <source>Band width for banded alignment (-w).</source>
         <translation>Band width for banded alignment (-w).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="149"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="155"/>
         <source>Dropoff</source>
         <translation>Dropoff</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="150"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="156"/>
         <source>Off-diagonal X-dropoff (-d).</source>
         <translation>Off-diagonal X-dropoff (-d).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="153"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="159"/>
         <source>Internal seed length</source>
         <translation>Internal seed length</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="154"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="160"/>
         <source>Look for internal seeds inside a seed longer than {-k} (-r).</source>
         <translation>Look for internal seeds inside a seed longer than {-k} (-r).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="157"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="163"/>
         <source>Skip seed threshold</source>
         <translation>Skip seed threshold</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="158"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="164"/>
         <source>Skip seeds with more than INT occurrences (-c).</source>
         <translation>Skip seeds with more than INT occurrences (-c).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="161"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="167"/>
         <source>Drop chain threshold</source>
         <translation>Drop chain threshold</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="162"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="168"/>
         <source>Drop chains shorter than FLOAT fraction of the longest overlapping chain (-D).</source>
         <translation>Drop chains shorter than FLOAT fraction of the longest overlapping chain (-D).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="165"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="171"/>
         <source>Rounds of mate rescues</source>
         <translation>Rounds of mate rescues</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="166"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="172"/>
         <source>Perform at most INT rounds of mate rescues for each read (-m).</source>
         <translation>Perform at most INT rounds of mate rescues for each read (-m).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="169"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="175"/>
         <source>Skip mate rescue</source>
         <translation>Skip mate rescue</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="170"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="176"/>
         <source>Skip mate rescue (-S).</source>
         <translation>Skip mate rescue (-S).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="173"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="179"/>
         <source>Skip pairing</source>
         <translation>Skip pairing</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="174"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="180"/>
         <source>Skip pairing; mate rescue performed unless -S also in use (-P).</source>
         <translation>Skip pairing; mate rescue performed unless -S also in use (-P).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="177"/>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="181"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="183"/>
+        <source>Matching score</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="187"/>
         <source>Mismatch penalty</source>
         <translation>Mismatch penalty</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="178"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="184"/>
         <source>Score for a sequence match (-A).</source>
         <translation>Score for a sequence match (-A).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="182"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="188"/>
         <source>Penalty for a mismatch (-B).</source>
         <translation>Penalty for a mismatch (-B).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="185"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="191"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="186"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="192"/>
         <source>Gap open penalty (-O).</source>
         <translation>Gap open penalty (-O).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="189"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="195"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="190"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="196"/>
         <source>Gap extension penalty; a gap of size k cost {-O} (-E).</source>
         <translation>Gap extension penalty; a gap of size k cost {-O} (-E).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="193"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="199"/>
         <source>Penalty for clipping</source>
         <translation>Penalty for clipping</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="194"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="200"/>
         <source>Penalty for clipping (-L).</source>
         <translation>Penalty for clipping (-L).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="197"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="203"/>
         <source>Penalty unpaired</source>
         <translation>Penalty unpaired</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="198"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="204"/>
         <source>Penalty for an unpaired read pair (-U).</source>
         <translation>Penalty for an unpaired read pair (-U).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="201"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="207"/>
         <source>Score threshold</source>
         <translation>Score threshold</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="202"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="208"/>
         <source>Minimum score to output (-T).</source>
         <translation>Minimum score to output (-T).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="252"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="258"/>
         <source>Align Reads with BWA MEM</source>
         <translation>Align Reads with BWA MEM</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="253"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="259"/>
         <source>Performs alignment of short reads with BWA MEM.</source>
         <translation>Performs alignment of short reads with BWA MEM.</translation>
     </message>
@@ -6938,13 +7483,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="236"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="237"/>
-        <source>The directory for temporary files.</source>
-        <translation>The directory for temporary files.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>The folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="378"/>
@@ -7200,13 +7745,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="85"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="86"/>
-        <source>Directory to store temporary files.</source>
-        <translation>Directory to store temporary files.</translation>
+        <source>Folder to store temporary files.</source>
+        <translation>Folder to store temporary files.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="96"/>
@@ -7232,12 +7777,12 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::ClustalWPrompter</name>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="188"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="191"/>
         <source> from %1</source>
         <translation> from %1</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="189"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="192"/>
         <source>Aligns each MSA supplied <u>%1</u> with "<u>ClustalW</u>".</source>
         <translation>Aligns each MSA supplied <u>%1</u> with "<u>ClustalW</u>".</translation>
     </message>
@@ -7245,152 +7790,152 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::ClustalWWorker</name>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="64"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="67"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="64"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="67"/>
         <source>Input MSA to process.</source>
         <translation>Input MSA to process.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="65"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="68"/>
         <source>ClustalW result MSA</source>
         <translation>ClustalW result MSA</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="66"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="69"/>
         <source>The result of the ClustalW alignment.</source>
         <translation>The result of the ClustalW alignment.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="75"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="78"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="76"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="79"/>
         <source>The penalty for opening a gap.</source>
         <translation>The penalty for opening a gap.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="77"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="80"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="78"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="81"/>
         <source>The penalty for extending a gap.</source>
         <translation>The penalty for extending a gap.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="79"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="82"/>
         <source>Gap distance</source>
         <translation>Gap distance</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="80"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="83"/>
         <source>The gap separation penalty. Tries to decrease the chances of gaps being too close to each other.</source>
         <translation>The gap separation penalty. Tries to decrease the chances of gaps being too close to each other.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="81"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="84"/>
         <source>End gaps</source>
         <translation>End gaps</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="82"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="85"/>
         <source>The penalty for closing a gap.</source>
         <translation>The penalty for closing a gap.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="83"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="86"/>
         <source>Residue-specific gaps off</source>
         <translation>Residue-specific gaps off</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="84"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="87"/>
         <source>Residue-specific penalties are amino specific gap penalties that reduce or increase the gap opening penalties at each position in the alignment.</source>
         <translation>Residue-specific penalties are amino specific gap penalties that reduce or increase the gap opening penalties at each position in the alignment.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="85"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="88"/>
         <source>Hydrophilic gaps off</source>
         <translation>Hydrophilic gaps off</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="86"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="89"/>
         <source>Hydrophilic gap penalties are used to increase the chances of a gap within a run (5 or more residues) of hydrophilic amino acids.</source>
         <translation>Hydrophilic gap penalties are used to increase the chances of a gap within a run (5 or more residues) of hydrophilic amino acids.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="87"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="90"/>
         <source>Iteration type</source>
         <translation>Iteration type</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="88"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="91"/>
         <source>Alignment improvement iteration type. Can take values: <p>                            <ul>                            <li>None - No iteration;</li>                            <li>Tree - Iteration at each step of alignment process;</li>                            <li>Alignment - Iteration only on final alignment.</li>                            </ul></source>
         <translation>Alignment improvement iteration type. Can take values: <p>                            <ul>                            <li>None - No iteration;</li>                            <li>Tree - Iteration at each step of alignment process;</li>                            <li>Alignment - Iteration only on final alignment.</li>                            </ul></translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="94"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="97"/>
         <source>Number of iterations</source>
         <translation>Number of iterations</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="95"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="98"/>
         <source>The maximum number of iterations to perform.</source>
         <translation>The maximum number of iterations to perform.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="96"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="99"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="110"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="113"/>
         <source>Tool path</source>
         <translation>Tool path</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="111"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="114"/>
         <source>Path to the ClustalW tool.<p>The default path can be set in the UGENE application settings.</source>
         <translation>Path to the ClustalW tool.<p>The default path can be set in the UGENE application settings.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="115"/>
-        <source>Directory to store temporary files.</source>
-        <translation>Directory to store temporary files.</translation>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="118"/>
+        <source>Folder to store temporary files.</source>
+        <translation>Folder to store temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="130"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="133"/>
         <source>Aligns multiple sequence alignments (MSAs) supplied with ClustalW.<p>ClustalW is a general purpose multiple sequence alignment program for DNA or proteins.Visit <a href="http://www.clustal.org/">http://www.clustal.org/</a> to learn more about it.</source>
         <translation>Aligns multiple sequence alignments (MSAs) supplied with ClustalW.<p>ClustalW is a general purpose multiple sequence alignment program for DNA or proteins.Visit <a href="http://www.clustal.org/">http://www.clustal.org/</a> to learn more about it.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="260"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="263"/>
         <source>An empty MSA '%1' has been supplied to ClustalW.</source>
         <translation>An empty MSA '%1' has been supplied to ClustalW.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="114"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="117"/>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="97"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="100"/>
         <source>For proteins it is a scoring table which describes the similarity of each amino acid to each other and can take values: <p>                            <ul>                            <li>BLOSUM - Appear to be the best available for carrying out database similarity (homology searches).                            <li>PAM - Have been extremely widely used since the late '70s.                            <li>Gonnet - Derived using almost the  [...]
         <translation>For proteins it is a scoring table which describes the similarity of each amino acid to each other and can take values: <p>                            <ul>                            <li>BLOSUM - Appear to be the best available for carrying out database similarity (homology searches).                            <li>PAM - Have been extremely widely used since the late '70s.                            <li>Gonnet - Derived using almost [...]
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="129"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="132"/>
         <source>Align with ClustalW</source>
         <translation>Align with ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="289"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="292"/>
         <source>Aligned %1 with ClustalW</source>
         <translation>Aligned %1 with ClustalW</translation>
     </message>
@@ -7409,8 +7954,8 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="224"/>
-        <source> Outputs all result files to <u>%1</u> directory</source>
-        <translation> Outputs all result files to <u>%1</u> directory</translation>
+        <source> Outputs all result files to <u>%1</u> folder</source>
+        <translation> Outputs all result files to <u>%1</u> folder</translation>
     </message>
 </context>
 <context>
@@ -7437,13 +7982,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="155"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="156"/>
-        <source>The directory to store Conduct GO results.</source>
-        <translation>The directory to store Conduct GO results.</translation>
+        <source>The folder to store Conduct GO results.</source>
+        <translation>The folder to store Conduct GO results.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="158"/>
@@ -7558,8 +8103,8 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="209"/>
-        <source>The directory to store phastcons scores (--phasdb).</source>
-        <translation>The directory to store phastcons scores (--phasdb).</translation>
+        <source>The folder to store phastcons scores (--phasdb).</source>
+        <translation>The folder to store phastcons scores (--phasdb).</translation>
     </message>
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="211"/>
@@ -7615,14 +8160,19 @@ Default: 64.</translation>
         <translation>Test for Diff. Expression with Cuffdiff</translation>
     </message>
     <message>
+        <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="94"/>
+        <source>Cuffdiff takes a transcript file as input, along with two or more fragment alignments (e.g. in SAM format) for two or more samples. It produces a number of output files that contain test results for changes in expression at the level of transcripts, primary transcripts, and genes. It also tracks changes in the relative abundance of transcripts sharing a common transcription start site, and in the relative abundances of the primary transcripts of each gene. Tracking the fo [...]
+        <translation>Cuffdiff takes a transcript file as input, along with two or more fragment alignments (e.g. in SAM format) for two or more samples. It produces a number of output files that contain test results for changes in expression at the level of transcripts, primary transcripts, and genes. It also tracks changes in the relative abundance of transcripts sharing a common transcription start site, and in the relative abundances of the primary transcripts of each gene. Tracking t [...]
+    </message>
+    <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="107"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="108"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>The base name of output directory. It could be modified with a suffix.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>The base name of output folder. It could be modified with a suffix.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="111"/>
@@ -7690,9 +8240,13 @@ Default: 64.</translation>
         <translation>Mask file</translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="151"/>
         <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
-        <translation>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</translation>
+        <translation type="vanished">Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</translation>
+    </message>
+    <message>
+        <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="151"/>
+        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts or other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="159"/>
@@ -7746,13 +8300,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="185"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="186"/>
-        <source>The directory for temporary files.</source>
-        <translation>The directory for temporary files.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>The folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="206"/>
@@ -7844,13 +8398,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="143"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="144"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>The base name of output directory. It could be modified with a suffix.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>The base name of output folder. It could be modified with a suffix.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="147"/>
@@ -7889,8 +8443,12 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="167"/>
+        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts or other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
-        <translation>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</translation>
+        <translation type="vanished">Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="175"/>
@@ -7944,13 +8502,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="210"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="211"/>
-        <source>The directory for temporary files.</source>
-        <translation>The directory for temporary files.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>The folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="339"/>
@@ -7972,13 +8530,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="74"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="75"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>The base name of output directory. It could be modified with a suffix.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>The base name of output folder. It could be modified with a suffix.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="78"/>
@@ -8032,13 +8590,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="102"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="103"/>
-        <source>The directory for temporary files.</source>
-        <translation>The directory for temporary files.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>The folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="117"/>
@@ -8065,17 +8623,17 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqPrompter</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="71"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="74"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="72"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="75"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="74"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="77"/>
         <source>Removes adapter sequences %1.</source>
         <translation>Removes adapter sequences %1.</translation>
     </message>
@@ -8083,12 +8641,12 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqTask</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="244"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="247"/>
         <source>Can not copy the result file to: %1</source>
         <translation>Can not copy the result file to: %1</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="279"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="282"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -8096,77 +8654,77 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqWorker</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="92"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="95"/>
         <source>Cut Adapter</source>
         <translation>Cut Adapter</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="93"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="96"/>
         <source>Removes adapter sequences</source>
         <translation>Removes adapter sequences</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="97"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="100"/>
         <source>Input File</source>
         <translation>Input File</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="98"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="101"/>
         <source>Set of FASTQ reads files</source>
         <translation>Set of FASTQ reads files</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="99"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="102"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="100"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="103"/>
         <source>Output FASTQ file(s)</source>
         <translation>Output FASTQ file(s)</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="113"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="116"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="114"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="117"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="118"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="121"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="119"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="122"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="121"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="124"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="122"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="125"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="124"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="127"/>
         <source>FASTA file with 3' adapters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="125"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="128"/>
         <source>A FASTA file with one or multiple sequences of adapter that were ligated to the 3' end. The adapter itself and anything that follows is trimmed. If the adapter sequence ends with the '$' character, the adapter is anchored to the end of the read and only found if it is a suffix of the read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="131"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="134"/>
         <source>FASTA file with 5' adapters</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8183,32 +8741,32 @@ Default: 64.</translation>
         <translation type="vanished">FASTA file with reverse adapters</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="132"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="135"/>
         <source>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end. If the adapter sequence starts with the character '^', the adapter is 'anchored'. An anchored adapter must appear in its entirety at the 5' end of the read (it is a prefix of the read). A non-anchored adapter may appear partially at the 5' end, or it may occur within the read. If it is found within a read, the sequence preceding the adapter is also t [...]
         <translation>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end. If the adapter sequence starts with the character '^', the adapter is 'anchored'. An anchored adapter must appear in its entirety at the 5' end of the read (it is a prefix of the read). A non-anchored adapter may appear partially at the 5' end, or it may occur within the read. If it is found within a read, the sequence preceding the adapter is a [...]
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="143"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="146"/>
         <source>FASTA file with 5' and 3' adapters</source>
         <translation>FASTA file with 5' and 3' adapters</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="144"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="147"/>
         <source>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end or 3' end.</source>
         <translation>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end or 3' end.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="173"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="176"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="174"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="177"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="175"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="178"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
@@ -8216,17 +8774,17 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::FastQCPrompter</name>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="76"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="78"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="77"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="79"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="79"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="81"/>
         <source>Builds FastQC report for file(s) %1.</source>
         <translation>Builds FastQC report for file(s) %1.</translation>
     </message>
@@ -8234,77 +8792,77 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::FastQCWorker</name>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="86"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="88"/>
         <source>FastQC Quality Control</source>
         <translation>FastQC Quality Control</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="87"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="89"/>
         <source>Builds quality control reports.</source>
         <translation>Builds quality control reports.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="91"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="93"/>
         <source>Short reads</source>
         <translation>Short reads</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="92"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="94"/>
         <source>Short read data</source>
         <translation>Short read data</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="103"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="105"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="104"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="106"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="108"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="110"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="109"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="111"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="111"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="113"/>
         <source>List of adapters</source>
         <translation>List of adapters</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="112"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="114"/>
         <source>Specifies a non-default file which contains the list of adapter sequences which will be explicity searched against the library. The file must contain sets of named adapters in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</source>
         <translation>Specifies a non-default file which contains the list of adapter sequences which will be explicity searched against the library. The file must contain sets of named adapters in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="117"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="119"/>
         <source>List of contaminants</source>
         <translation>List of contaminants</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="118"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="120"/>
         <source>Specifies a non-default file which contains the list of contaminants to screen overrepresented sequences against. The file must contain sets of named contaminants in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</source>
         <translation>Specifies a non-default file which contains the list of contaminants to screen overrepresented sequences against. The file must contain sets of named contaminants in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="138"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="140"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="139"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="141"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="140"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="142"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
@@ -8312,17 +8870,17 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::GenomecovPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="456"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="459"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="457"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="460"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="460"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="463"/>
         <source>%1 from %2 with bedtool genomecov.</source>
         <translation>%1 from %2 with bedtool genomecov.</translation>
     </message>
@@ -8330,7 +8888,7 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::GenomecovTask</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="702"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="705"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -8338,96 +8896,95 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::GenomecovWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="477"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="480"/>
         <source>Genome Coverage</source>
         <translation>Genome Coverage</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="478"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="481"/>
         <source>Calculates genome coverage using bedtools genomecov.</source>
         <translation>Calculates genome coverage using bedtools genomecov.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="482"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="485"/>
         <source>Input File</source>
         <translation>Input File</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="483"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="486"/>
         <source>Set of files to NGS slop</source>
         <translation>Set of files to NGS slop</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="484"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="487"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="485"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="488"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="498"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="501"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="499"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="502"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="503"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="506"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="504"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="507"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="506"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="509"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="507"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="510"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="509"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="512"/>
         <source>Genome</source>
         <translation>Genome</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="510"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="513"/>
         <source>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize>. (-g)</source>
         <translation>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize>. (-g)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="512"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="515"/>
         <source>Report mode</source>
         <translation>Report mode</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="513"/>
-        <source><b>%1 (%2)</b> - %3 
-<b>%4 (%5)</b> - %6 
-<b>%7 (%8)</b> - %9 
-<b>%10 (%11)</b> - %12 
-<b>%13 (%14)</b> - %15 
+        <source><b>%1 (%2)</b> - %3
+<b>%4 (%5)</b> - %6
+<b>%7 (%8)</b> - %9
+<b>%10 (%11)</b> - %12
+<b>%13 (%14)</b> - %15
 </source>
-        <translation><b>%1 (%2)</b> - %3 
-<b>%4 (%5)</b> - %6 
-<b>%7 (%8)</b> - %9 
-<b>%10 (%11)</b> - %12 
+        <translation type="vanished"><b>%1 (%2)</b> - %3
+<b>%4 (%5)</b> - %6
+<b>%7 (%8)</b> - %9
+<b>%10 (%11)</b> - %12
 <b>%13 (%14)</b> - %15</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="525"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="528"/>
         <source>Split</source>
         <translation>Split</translation>
     </message>
@@ -8436,17 +8993,17 @@ Default: 64.</translation>
         <translation type="vanished">Treat  BAM or BED12 entries as distinct BED intervals when computing coverage. For BAM files, this uses the CIGAR  and  operations to infer the blocks for computing coverage. For BED12 files, this uses the BlockCount, BlockStarts, and BlockEnds fields (i.e., columns 10,11,12). (-split)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="528"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="531"/>
         <source>Strand</source>
         <translation>Strand</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="529"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="532"/>
         <source>Calculate coverage of intervals from a specific strand. With BED files, requires at least 6 columns (strand is column 6). (-strand)</source>
         <translation>Calculate coverage of intervals from a specific strand. With BED files, requires at least 6 columns (strand is column 6). (-strand)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="531"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="534"/>
         <source>5 prime</source>
         <translation>5 prime</translation>
     </message>
@@ -8455,7 +9012,7 @@ Default: 64.</translation>
         <translation type="vanished">Calculate coverage of 5'€™ positions (instead of entire interval). (-5)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="534"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="537"/>
         <source>3 prime</source>
         <translation>3 prime</translation>
     </message>
@@ -8464,72 +9021,82 @@ Default: 64.</translation>
         <translation type="vanished">Calculate coverage of 3'€™ positions (instead of entire interval). (-3)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="537"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="540"/>
         <source>Max</source>
         <translation>Max</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="538"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="541"/>
         <source>Combine all positions with a depth >= max into a single bin in the histogram. (-max)</source>
         <translation>Combine all positions with a depth >= max into a single bin in the histogram. (-max)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="540"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="543"/>
         <source>Scale</source>
         <translation>Scale</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="541"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="544"/>
         <source>Scale the coverage by a constant factor.Each coverage value is multiplied by this factor before being reported. Useful for normalizing coverage by, e.g., reads per million (RPM). Default is 1.0; i.e., unscaled. (-scale)</source>
         <translation>Scale the coverage by a constant factor.Each coverage value is multiplied by this factor before being reported. Useful for normalizing coverage by, e.g., reads per million (RPM). Default is 1.0; i.e., unscaled. (-scale)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="543"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="546"/>
         <source>Trackline</source>
         <translation>Trackline</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="544"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="547"/>
         <source>Adds a UCSC/Genome-Browser track line definition in the first line of the output. (-trackline)</source>
         <translation>Adds a UCSC/Genome-Browser track line definition in the first line of the output. (-trackline)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="546"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="549"/>
         <source>Trackopts</source>
         <translation>Trackopts</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="547"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="550"/>
         <source>Writes additional track line definition parameters in the first line. (-trackopts)</source>
         <translation>Writes additional track line definition parameters in the first line. (-trackopts)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="584"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="587"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="582"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="585"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="526"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="516"/>
+        <source><b>%1 (%2)</b> - %3 
+<b>%4 (%5)</b> - %6 
+<b>%7 (%8)</b> - %9 
+<b>%10 (%11)</b> - %12 
+<b>%13 (%14)</b> - %15 
+</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="529"/>
         <source>Treat “split” BAM or BED12 entries as distinct BED intervals when computing coverage. For BAM files, this uses the CIGAR “N” and “D” operations to infer the blocks for computing coverage. For BED12 files, this uses the BlockCount, BlockStarts, and BlockEnds fields (i.e., columns 10,11,12). (-split)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="532"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="535"/>
         <source>Calculate coverage of 5’ positions (instead of entire interval). (-5)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="535"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="538"/>
         <source>Calculate coverage of 3’ positions (instead of entire interval). (-3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="583"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="586"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
@@ -8611,17 +9178,17 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::HmmerSearchPrompter</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="188"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="189"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="189"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="190"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="193"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="194"/>
         <source>%1 search HMMER signals %2. <br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8629,117 +9196,117 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::HmmerSearchWorker</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="80"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="81"/>
         <source>Filter by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="81"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
         <source>Parameter to filter results by.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
         <source>HMMER profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
         <source>HMMER profile(s) URL(s) to search with.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="84"/>
         <source>Input sequence</source>
         <translation type="unfinished">Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="84"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="85"/>
         <source>An input sequence (nucleotide or protein) to search in.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="85"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="86"/>
         <source>HMMER annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="86"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="87"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="98"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
         <source>Result annotation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="98"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
         <source>A name of the result annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
         <source>Seed</source>
         <translation type="unfinished">Seed</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
         <source>Random generator seed. 0 - means that one-time arbitrary seed will be used.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
         <source>Filter by high E-value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
         <source>Report domains with e-value less than.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="102"/>
         <source>Filter by low score</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="102"/>
         <source>Report domains with score greater than.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="118"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="119"/>
         <source>HMM3 Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="119"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="120"/>
         <source>Searches each input sequence for significantly similar sequence matches to all specified HMM profiles. In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="159"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="160"/>
         <source>HMMER3 Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="238"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="239"/>
         <source>Value for attribute name is empty, default name used</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="289"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="290"/>
         <source>Find HMMER signals in %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="294"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="295"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="323"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="324"/>
         <source>Found %1 HMMER signals</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8768,8 +9335,8 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="585"/>
-        <source> Outputs all files to <u>%1</u> directory</source>
-        <translation> Outputs all files to <u>%1</u> directory</translation>
+        <source> Outputs all files to <u>%1</u> folder</source>
+        <translation> Outputs all files to <u>%1</u> folder</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="587"/>
@@ -8866,13 +9433,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="318"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="319"/>
-        <source>Directory to save MACS output files.</source>
-        <translation>Directory to save MACS output files.</translation>
+        <source>Folder to save MACS output files.</source>
+        <translation>Folder to save MACS output files.</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="321"/>
@@ -9127,12 +9694,12 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::MAFFTPrompter</name>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="129"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="130"/>
         <source> from %1</source>
         <translation> from %1</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="131"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="132"/>
         <source>Aligns each MSA supplied <u>%1</u> with <u>"MAFFT"</u>.</source>
         <translation>Aligns each MSA supplied <u>%1</u> with <u>"MAFFT"</u>.</translation>
     </message>
@@ -9140,92 +9707,92 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::MAFFTWorker</name>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="60"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="61"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="61"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Multiple sequence alignment to be processed.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="63"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="63"/>
         <source>Result of alignment.</source>
         <translation>Result of alignment.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="71"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="72"/>
         <source>Gap Open Penalty</source>
         <translation>Gap Open Penalty</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="72"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="73"/>
         <source>Gap Open Penalty.</source>
         <translation>Gap Open Penalty.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="73"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="74"/>
         <source>Offset</source>
         <translation>Offset</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="74"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="75"/>
         <source>Works like gap extension penalty.</source>
         <translation>Works like gap extension penalty.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="76"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="77"/>
         <source>Maximum number of iterative refinement.</source>
         <translation>Maximum number of iterative refinement.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="78"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="79"/>
         <source>External tool path.</source>
         <translation>External tool path.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="80"/>
-        <source>Directory for temporary files.</source>
-        <translation>Directory for temporary files.</translation>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="81"/>
+        <source>Folder for temporary files.</source>
+        <translation>Folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="173"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="174"/>
         <source>An empty MSA '%1' has been supplied to MAFFT.</source>
         <translation>An empty MSA '%1' has been supplied to MAFFT.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="75"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="76"/>
         <source>Max Iteration</source>
         <translation>Max Iteration</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="77"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="78"/>
         <source>Tool Path</source>
         <translation>Tool Path</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="79"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="80"/>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="88"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="89"/>
         <source>Align with MAFFT</source>
         <translation>Align with MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="202"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="203"/>
         <source>Aligned %1 with MAFFT</source>
         <translation>Aligned %1 with MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="89"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="90"/>
         <source>MAFFT is a multiple sequence alignment program for unix-like operating systems. <p><dfn>It offers a range of multiple alignment methods, L-INS-i (accurate; for alignment of &lt;&#126;200 sequences), FFT-NS-2 (fast; for alignment of &lt;&#126;10,000 sequences), etc. </dfn></p></source>
         <translation>MAFFT is a multiple sequence alignment program for unix-like operating systems. <p><dfn>It offers a range of multiple alignment methods, L-INS-i (accurate; for alignment of &lt;&#126;200 sequences), FFT-NS-2 (fast; for alignment of &lt;&#126;10,000 sequences), etc. </dfn></p></translation>
     </message>
@@ -9413,8 +9980,8 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="367"/>
-        <source> Outputs all result files to <u>%1</u> directory</source>
-        <translation> Outputs all result files to <u>%1</u> directory</translation>
+        <source> Outputs all result files to <u>%1</u> folder</source>
+        <translation> Outputs all result files to <u>%1</u> folder</translation>
     </message>
 </context>
 <context>
@@ -9442,13 +10009,13 @@ Default: 64.</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="247"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="248"/>
-        <source>The directory to store seqpos results.</source>
-        <translation>The directory to store seqpos results.</translation>
+        <source>The folder to store seqpos results.</source>
+        <translation>The folder to store seqpos results.</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="250"/>
@@ -9519,22 +10086,22 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::ShortReadsAlignerPrompter</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="371"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="398"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="404"/>
         <source>Aligns upstream oriented reads from <u>%1</u> and downstream oriented reads from <u>%2</u> </source>
         <translation>Aligns upstream oriented reads from <u>%1</u> and downstream oriented reads from <u>%2</u> </translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="379"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="406"/>
         <source>Aligns reads from <u>%1</u> </source>
         <translation>Aligns reads from <u>%1</u> </translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="383"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="410"/>
         <source> to reference genome <u>%1</u>.</source>
         <translation> to reference genome <u>%1</u>.</translation>
     </message>
@@ -9542,17 +10109,17 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::SlopbedPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="69"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="72"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="70"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="73"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="72"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="75"/>
         <source>Increases the size of each feature in files from %1 with bedtool slop.</source>
         <translation>Increases the size of each feature in files from %1 with bedtool slop.</translation>
     </message>
@@ -9560,117 +10127,117 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::SlopbedWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="89"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="92"/>
         <source>slopBed</source>
         <translation>slopBed</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="90"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="93"/>
         <source>Increases the size of each feature in files using bedtools slop.</source>
         <translation>Increases the size of each feature in files using bedtools slop.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="94"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="97"/>
         <source>Input File</source>
         <translation>Input File</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="95"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="98"/>
         <source>Set of files to bedtools slop</source>
         <translation>Set of files to bedtools slop</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="96"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="99"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="97"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="100"/>
         <source>Output file</source>
         <translation>Output file</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="110"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="113"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="111"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="114"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="115"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="118"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="116"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="119"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="118"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="121"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="119"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="122"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="121"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="124"/>
         <source>Genome</source>
         <translation>Genome</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="122"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="125"/>
         <source>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize> (-g).</source>
         <translation>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize> (-g).</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="124"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="127"/>
         <source>Each direction increase</source>
         <translation>Each direction increase</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="125"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="128"/>
         <source>Increase the BED/GFF/VCF entry by the same number base pairs in each direction. If this parameter is used -l and -l are ignored. Enter 0 to disable. (-b)</source>
         <translation>Increase the BED/GFF/VCF entry by the same number base pairs in each direction. If this parameter is used -l and -l are ignored. Enter 0 to disable. (-b)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="127"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="130"/>
         <source>Substract from start</source>
         <translation>Substract from start</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="128"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="131"/>
         <source>The number of base pairs to subtract from the start coordinate. Enter 0 to disable. (-l)</source>
         <translation>The number of base pairs to subtract from the start coordinate. Enter 0 to disable. (-l)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="130"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="133"/>
         <source>Add to end</source>
         <translation>Add to end</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="131"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="134"/>
         <source>The number of base pairs to add to the end coordinate. Enter 0 to disable. (-r)</source>
         <translation>The number of base pairs to add to the end coordinate. Enter 0 to disable. (-r)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="133"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="136"/>
         <source>Strand-based</source>
         <translation>Strand-based</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="134"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="137"/>
         <source>Define -l and -r based on strand. For example. if used, -l 500 for a negative-stranded feature, it will add 500 bp to the end coordinate. (-s)</source>
         <translation>Define -l and -r based on strand. For example. if used, -l 500 for a negative-stranded feature, it will add 500 bp to the end coordinate. (-s)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="136"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="139"/>
         <source>As fraction</source>
         <translation>As fraction</translation>
     </message>
@@ -9682,60 +10249,92 @@ Default: 64.</translation>
         </translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="139"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="142"/>
         <source>Print header</source>
         <translation>Print header</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="140"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="143"/>
         <source>Print the header from the input file prior to results. (-header)</source>
         <translation>Print the header from the input file prior to results. (-header)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="142"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="145"/>
         <source>Filter start>end fields</source>
         <translation>Filter start>end fields</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="143"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="146"/>
         <source>Remove lines with start postion greater than end position</source>
         <translation>Remove lines with start postion greater than end position</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="179"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="182"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="177"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="180"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="137"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="140"/>
         <source>Define -l and -r as a fraction of the feature’s length. E.g. if used on a 1000bp feature, -l 0.50, will add 500 bp “upstream”. (-pct)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="178"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="181"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::SnpEffDatabaseDialog</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="49"/>
+        <source>Select</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="50"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::SnpEffDatabasePropertyWidget</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="88"/>
+        <source>Select genome</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="118"/>
+        <source>The list of %1 genomes is not available.
+Path for %1 tool is not selected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="119"/>
+        <source>Do you want to select it now?</source>
+        <translation type="unfinished">Do you want to select it now?</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::SnpEffPrompter</name>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="85"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="87"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="86"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="88"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="88"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="90"/>
         <source>Annotates and filters variations %1 with SnpEff.</source>
         <translation>Annotates and filters variations %1 with SnpEff.</translation>
     </message>
@@ -9743,143 +10342,143 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::SnpEffWorker</name>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="95"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="97"/>
         <source>SnpEff Annotation and Filtration</source>
         <translation>SnpEff Annotation and Filtration</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="96"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="98"/>
         <source>Annotates and filters variations with SnpEff.</source>
         <translation>Annotates and filters variations with SnpEff.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="100"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="102"/>
         <source>Variations</source>
         <translation>Variations</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="101"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="103"/>
         <source>Set of variations</source>
         <translation>Set of variations</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="102"/>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="103"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="104"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="105"/>
         <source>Annotated variations</source>
         <translation>Annotated variations</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="117"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="119"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="118"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="120"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="122"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="124"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="123"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="125"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="125"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="127"/>
         <source>Input format</source>
         <translation>Input format</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="126"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="128"/>
         <source>Select the input format of variations.</source>
         <translation>Select the input format of variations.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="128"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="130"/>
         <source>Output format</source>
         <translation>Output format</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="129"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="131"/>
         <source>Select the format of annotated output files.</source>
         <translation>Select the format of annotated output files.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="131"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="133"/>
         <source>Genome</source>
         <translation>Genome</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="132"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="134"/>
         <source>Select the target genome. Genome data will be downloaded if it is not found.</source>
         <translation>Select the target genome. Genome data will be downloaded if it is not found.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="134"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="136"/>
         <source>Upstream/downstream length</source>
         <translation>Upstream/downstream length</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="135"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="137"/>
         <source>Upstream and downstream interval size. Eliminate any upstream and downstream effect by using 0 length</source>
         <translation>Upstream and downstream interval size. Eliminate any upstream and downstream effect by using 0 length</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="137"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="139"/>
         <source>Canonical transcripts</source>
         <translation>Canonical transcripts</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="138"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="140"/>
         <source>Use only canonical transcripts</source>
         <translation>Use only canonical transcripts</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="140"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="142"/>
         <source>HGVS nomenclature</source>
         <translation>HGVS nomenclature</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="141"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="143"/>
         <source>Annotate using HGVS nomenclature</source>
         <translation>Annotate using HGVS nomenclature</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="143"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="145"/>
         <source>Annotate Loss of function variations</source>
         <translation>Annotate Loss of function variations</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="144"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="146"/>
         <source>Annotate Loss of function variations (LOF) and Nonsense mediated decay (NMD)</source>
         <translation>Annotate Loss of function variations (LOF) and Nonsense mediated decay (NMD)</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="146"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="148"/>
         <source>Annotate TFBSs motifs</source>
         <translation>Annotate TFBSs motifs</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="147"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="149"/>
         <source>Annotate transcription factor binding site motifs (only available for latest GRCh37)</source>
         <translation>Annotate transcription factor binding site motifs (only available for latest GRCh37)</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="169"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="171"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="170"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="172"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="171"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="173"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
@@ -9887,12 +10486,12 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::SpadesPrompter</name>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="341"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="342"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="344"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="345"/>
         <source>Assemble reads from <u>%1</u>.</source>
         <translation>Assemble reads from <u>%1</u>.</translation>
     </message>
@@ -9900,127 +10499,127 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::SpadesWorker</name>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="215"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="216"/>
         <source>SPAdes cannot recognize read pairs from the same file. Please, perform demultiplexing first.</source>
         <translation>SPAdes cannot recognize read pairs from the same file. Please, perform demultiplexing first.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="229"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="230"/>
         <source>URL of a file with reads</source>
         <translation>URL of a file with reads</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="230"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="231"/>
         <source>Input reads to be assembled.</source>
         <translation>Input reads to be assembled.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="232"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="233"/>
         <source>URL of a file with right pair reads</source>
         <translation>URL of a file with right pair reads</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="233"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="234"/>
         <source>Input right pair reads to be assembled.</source>
         <translation>Input right pair reads to be assembled.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="239"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="240"/>
         <source>SPAdes data</source>
         <translation>SPAdes data</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="240"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="241"/>
         <source>Input reads to be assembled with Spades.</source>
         <translation>Input reads to be assembled with Spades.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="248"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="249"/>
         <source>Scaffolds URL</source>
         <translation>Scaffolds URL</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="249"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="250"/>
         <source>Output scaffolds URL.</source>
         <translation>Output scaffolds URL.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="252"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="253"/>
         <source>SPAdes output data</source>
         <translation>SPAdes output data</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="253"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="254"/>
         <source>Output assembly files.</source>
         <translation>Output assembly files.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="264"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/spades/SpadesWorker.cpp" line="265"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="265"/>
-        <source>Directory to save Spades output files.</source>
-        <translation>Directory to save Spades output files.</translation>
+        <location filename="../src/spades/SpadesWorker.cpp" line="266"/>
+        <source>Folder to save Spades output files.</source>
+        <translation>Folder to save Spades output files.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="268"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="269"/>
         <source>Number of threads</source>
         <translation>Number of threads</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="269"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="270"/>
         <source>Number of threads (-t).</source>
         <translation>Number of threads (-t).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="272"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="273"/>
         <source>Memory limit (GB)</source>
         <translation>Memory limit (GB)</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="273"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="274"/>
         <source>Memory limit (-m).</source>
         <translation>Memory limit (-m).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="276"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="277"/>
         <source>Dataset type</source>
         <translation>Dataset type</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="277"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="278"/>
         <source>Input dataset type.</source>
         <translation>Input dataset type.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="280"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="281"/>
         <source>Running mode</source>
         <translation>Running mode</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="281"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="282"/>
         <source>Running mode.</source>
         <translation>Running mode.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="284"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="285"/>
         <source>K-mers</source>
         <translation>K-mers</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="285"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="286"/>
         <source>k-mer sizes (-k).</source>
         <translation>k-mer sizes (-k).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="320"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="321"/>
         <source>Assemble genomes with SPAdes</source>
         <translation>Assemble genomes with SPAdes</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="321"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="322"/>
         <source>Performes assembly of input short reads.</source>
         <translation>Performes assembly of input short reads.</translation>
     </message>
@@ -10028,12 +10627,12 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::TCoffeePrompter</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="125"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="127"/>
         <source> from %1</source>
         <translation> from %1</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="127"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="129"/>
         <source>For each MSA<u>%1</u>, build the alignment using <u>"T-Coffee"</u> and send it to output.</source>
         <translation>For each MSA<u>%1</u>, build the alignment using <u>"T-Coffee"</u> and send it to output.</translation>
     </message>
@@ -10041,92 +10640,96 @@ Default: 64.</translation>
 <context>
     <name>U2::LocalWorkflow::TCoffeeWorker</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="59"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="61"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="59"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="61"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Multiple sequence alignment to be processed.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="60"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="62"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="60"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="62"/>
         <source>Result of alignment.</source>
         <translation>Result of alignment.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="69"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="71"/>
         <source>Gap Open Penalty</source>
         <translation>Gap Open Penalty</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="70"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="72"/>
         <source>Gap Open Penalty. Must be negative, best matches get a score of 1000.</source>
         <translation>Gap Open Penalty. Must be negative, best matches get a score of 1000.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="71"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="73"/>
         <source>Gap Extension Penalty</source>
         <translation>Gap Extension Penalty</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="72"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="74"/>
         <source>Gap Extension Penalty. Positive values give rewards to gaps and prevent the alignment of unrelated segments.</source>
         <translation>Gap Extension Penalty. Positive values give rewards to gaps and prevent the alignment of unrelated segments.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="73"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="75"/>
         <source>Max Iteration</source>
         <translation>Max Iteration</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="74"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="76"/>
         <source>Number of iteration on the progressive alignment.<br>0 - no iteration, -1 - Nseq iterations.</source>
         <translation>Number of iteration on the progressive alignment.<br>0 - no iteration, -1 - Nseq iterations.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="76"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="78"/>
         <source>Tool Path</source>
         <translation>Tool Path</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="77"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="79"/>
         <source>External tool path.</source>
         <translation>External tool path.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="79"/>
-        <source>Directory for temporary file.s</source>
-        <translation>Directory for temporary files</translation>
+        <source>Folder for temporary file.s</source>
+        <translation type="vanished">Folder for temporary files</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="170"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="172"/>
         <source>An empty MSA '%1' has been supplied to T-Coffee.</source>
         <translation>An empty MSA '%1' has been supplied to T-Coffee.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="78"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="80"/>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
+    </message>
+    <message>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="81"/>
+        <source>folder for temporary file.s</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="87"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="89"/>
         <source>Align with T-Coffee</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="88"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="90"/>
         <source>T-Coffee is a multiple sequence alignment package. </source>
         <translation>T-Coffee is a multiple sequence alignment package. </translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="202"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="204"/>
         <source>Aligned %1 with T-Coffee</source>
         <translation>Aligned %1 with T-Coffee</translation>
     </message>
@@ -10243,13 +10846,13 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="192"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="193"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>The base name of output directory. It could be modified with a suffix.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>The base name of output folder. It could be modified with a suffix.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="196"/>
@@ -10263,13 +10866,13 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="200"/>
-        <source>Bowtie index directory</source>
-        <translation>Bowtie index directory</translation>
+        <source>Bowtie index folder</source>
+        <translation>Bowtie index folder</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="201"/>
-        <source>The directory with the Bowtie index for the reference sequence.</source>
-        <translation>The directory with the Bowtie index for the reference sequence.</translation>
+        <source>The folder with the Bowtie index for the reference sequence.</source>
+        <translation>The folder with the Bowtie index for the reference sequence.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="209"/>
@@ -10503,13 +11106,13 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="348"/>
-        <source>Temporary directory</source>
-        <translation>Temporary directory</translation>
+        <source>Temporary folder</source>
+        <translation>Temporary folder</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="349"/>
-        <source>The directory for temporary files.</source>
-        <translation>The directory for temporary files.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>The folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="396"/>
@@ -10643,17 +11246,17 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::MAFFTSupportContext</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="131"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="129"/>
         <source>Align with MAFFT...</source>
         <translation>Align with MAFFT...</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="156"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="154"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="157"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="155"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -10685,13 +11288,13 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="127"/>
-        <source>Subdir for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdir for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdir for temporary files exists. Can not remove this folder.</source>
+        <translation>Subdir for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="132"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="145"/>
@@ -10731,8 +11334,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="296"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -10790,27 +11393,32 @@ Set it empty if you want to run Tophat once for all input reads</translation>
         <translation>Align sequences to alignment task</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="101"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="100"/>
         <source>Align sequences to an existing alignment by MAFFT started</source>
         <translation>Align sequences to an existing alignment by MAFFT started</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="175"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="176"/>
         <source>Output file '%1' not found</source>
         <translation>Output file '%1' not found</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="177"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="178"/>
         <source>Output file '%3' not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file '%3' not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="184"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="185"/>
         <source>Loading output file '%1'</source>
         <translation>Loading output file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="232"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="234"/>
+        <source>Row for updating doesn't found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="250"/>
         <source>MAFFT alignment successfully finished</source>
         <translation>MAFFT alignment successfully finished</translation>
     </message>
@@ -10883,8 +11491,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PathLineEdit</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="670"/>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="672"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="664"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="666"/>
         <source>Select a file</source>
         <translation>Select a file</translation>
     </message>
@@ -10931,37 +11539,37 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PhmmerSearchDialog</name>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="56"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="69"/>
         <source>Search</source>
         <translation type="unfinished">Search</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="57"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="70"/>
         <source>Cancel</source>
         <translation type="unfinished">Cancel</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="111"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="124"/>
         <source>Select query sequence file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="159"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="172"/>
         <source>Query sequence file path is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="177"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="190"/>
         <source>Error</source>
         <translation type="unfinished">Error</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="177"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="190"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation type="unfinished">Cannot create an annotation object. Please check settings</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="184"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="197"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -10969,43 +11577,43 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PhmmerSearchTask</name>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="48"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="50"/>
         <source>Search with phmmer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="100"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="104"/>
         <source>Query sequence: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="103"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="107"/>
         <source>Task was not finished</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="109"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="113"/>
         <source>Result annotation table: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="111"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="115"/>
         <source>Result annotation group: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="112"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="116"/>
         <source>Result annotation name: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="114"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="118"/>
         <source>Results count: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="146"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="150"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -11089,22 +11697,45 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PhyMlWidget</name>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="170"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="230"/>
         <source>Open an alignment file</source>
         <translation>Open an alignment file</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="225"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="287"/>
+        <source>File with the starting tree is not set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="289"/>
+        <source>File with the starting tree doesn't exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="305"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="226"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="306"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
 </context>
 <context>
+    <name>U2::PrepareInputFastaFilesTask</name>
+    <message>
+        <location filename="../src/blast/PrepareInputFastaFilesTask.cpp" line="36"/>
+        <source>Prepare input FASTA files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast/PrepareInputFastaFilesTask.cpp" line="91"/>
+        <source>File '%1' was skipped. Cannot detect the file format.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PrepareInputForCAP3Task</name>
     <message>
         <location filename="../src/cap3/CAP3SupportTask.cpp" line="241"/>
@@ -11127,9 +11758,37 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
 </context>
 <context>
+    <name>U2::PrepareReferenceSequenceTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="45"/>
+        <source>Prepare reference sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="85"/>
+        <source>No reference sequence in the file: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="86"/>
+        <source>More than one sequence in the reference file: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="89"/>
+        <source>Unable to cast gobject to sequence object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="90"/>
+        <source>The input reference sequence '%1' contains characters that don't belong to DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PythonModuleDjangoSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="106"/>
+        <location filename="../src/python/PythonSupport.cpp" line="101"/>
         <source>: Python module for the %1 tool</source>
         <translation>: Python module for the %1 tool</translation>
     </message>
@@ -11137,7 +11796,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PythonModuleNumpySupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="115"/>
+        <location filename="../src/python/PythonSupport.cpp" line="110"/>
         <source>: Python module for the %1 tool</source>
         <translation>: Python module for the %1 tool</translation>
     </message>
@@ -11145,7 +11804,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PythonModuleSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="95"/>
+        <location filename="../src/python/PythonSupport.cpp" line="90"/>
         <source>Python module is not installed. Install module or set path to another Python scripts interpreter with installed module in the External Tools settings</source>
         <translation>Python module is not installed. Install module or set path to another Python scripts interpreter with installed module in the External Tools settings</translation>
     </message>
@@ -11153,7 +11812,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::PythonSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="60"/>
+        <location filename="../src/python/PythonSupport.cpp" line="55"/>
         <source>Python scripts interpreter</source>
         <translation>Python scripts interpreter</translation>
     </message>
@@ -11161,7 +11820,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleCelegansdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="151"/>
+        <location filename="../src/R/RSupport.cpp" line="147"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11169,7 +11828,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleDrosophila2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="157"/>
+        <location filename="../src/R/RSupport.cpp" line="153"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11177,7 +11836,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleGodbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="115"/>
+        <location filename="../src/R/RSupport.cpp" line="111"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11185,7 +11844,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleGostatsSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="109"/>
+        <location filename="../src/R/RSupport.cpp" line="105"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11193,7 +11852,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleHgu133adbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="121"/>
+        <location filename="../src/R/RSupport.cpp" line="117"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11201,7 +11860,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleHgu133bdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="127"/>
+        <location filename="../src/R/RSupport.cpp" line="123"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11209,7 +11868,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleHgu133plus2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="133"/>
+        <location filename="../src/R/RSupport.cpp" line="129"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11217,7 +11876,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleHgu95av2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="139"/>
+        <location filename="../src/R/RSupport.cpp" line="135"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11225,7 +11884,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleMouse430a2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="145"/>
+        <location filename="../src/R/RSupport.cpp" line="141"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11233,7 +11892,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleOrgceegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="175"/>
+        <location filename="../src/R/RSupport.cpp" line="171"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11241,7 +11900,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleOrgdmegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="181"/>
+        <location filename="../src/R/RSupport.cpp" line="177"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11249,7 +11908,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleOrghsegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="163"/>
+        <location filename="../src/R/RSupport.cpp" line="159"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11257,7 +11916,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleOrgmmegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="169"/>
+        <location filename="../src/R/RSupport.cpp" line="165"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11265,7 +11924,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleSeqlogoSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="187"/>
+        <location filename="../src/R/RSupport.cpp" line="183"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript module for the %1 tool</translation>
     </message>
@@ -11273,7 +11932,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RModuleSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="95"/>
+        <location filename="../src/R/RSupport.cpp" line="91"/>
         <source>R module is not installed. Install module or set path to another R scripts interpreter with installed module in the External Tools settings</source>
         <translation>R module is not installed. Install module or set path to another R scripts interpreter with installed module in the External Tools settings</translation>
     </message>
@@ -11281,12 +11940,25 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::RSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="59"/>
+        <location filename="../src/R/RSupport.cpp" line="55"/>
         <source>Rscript interpreter</source>
         <translation>Rscript interpreter</translation>
     </message>
 </context>
 <context>
+    <name>U2::RemoveGapsFromSequenceTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp" line="66"/>
+        <source>Remove gaps from the sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp" line="83"/>
+        <source>Find gaps in the sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RunCap3AndOpenResultTask</name>
     <message>
         <location filename="../src/cap3/CAP3SupportTask.cpp" line="133"/>
@@ -11307,12 +11979,12 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::SaveAlignmentTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="64"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="63"/>
         <source>Export alignment to '%1'</source>
         <translation>Export alignment to '%1'</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="68"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="67"/>
         <source>An alignment is empty</source>
         <translation>An alignment is empty</translation>
     </message>
@@ -11320,7 +11992,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::SaveMSA2SequencesTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="107"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="104"/>
         <source>Export alignment to sequence: %1</source>
         <translation>Export alignment to sequence: %1</translation>
     </message>
@@ -11328,12 +12000,12 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::SaveSequenceTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="138"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="135"/>
         <source>Save sequence</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="169"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="166"/>
         <source>'%' format is not registered</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11347,36 +12019,67 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
 </context>
 <context>
+    <name>U2::SnpEffDatabaseListModel</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListModel.cpp" line="97"/>
+        <source>Genome</source>
+        <translation type="unfinished">Genome</translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListModel.cpp" line="99"/>
+        <source>Organism</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::SnpEffDatabaseListTask</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListTask.cpp" line="37"/>
+        <source>SnpEff Database List task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SnpEffParser</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="59"/>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="81"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="60"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="82"/>
         <source>A problem occurred during allocating memory for running SnpEff. Check the "Tasks memory limit" parameter in the UGENE Application Settings.It is recommended to set this value to the available RAM on the computer.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="75"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="76"/>
         <source>There is not enough memory to complete the SnpEff execution.It is recommended to run SnpEff on a computer with RAM 4Gb or more.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="86"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="87"/>
         <source>Failed to download SnpEff database. Check your internet connection.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="92"/>
+        <source>Genome database '%1' is not found.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::SnpEffSupport</name>
     <message>
-        <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="53"/>
         <source><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</source>
         <translation><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</translation>
     </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="98"/>
+        <source>Failed to get SnpEff database list</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::SnpEffTask</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="205"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="211"/>
         <source>SNPEff dataDir is not initialized.</source>
         <translation>SNPEff dataDir is not initialized.</translation>
     </message>
@@ -11393,8 +12096,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     <name>U2::SpadesTask</name>
     <message>
         <location filename="../src/spades/SpadesTask.cpp" line="61"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
 </context>
 <context>
@@ -11493,17 +12196,17 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::TCoffeeSupportContext</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="134"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="132"/>
         <source>Align with T-Coffee...</source>
         <translation>Align with T-Coffee...</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="159"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Path for %1 tool not selected.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="160"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Do you want to select it now?</translation>
     </message>
@@ -11540,13 +12243,13 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="132"/>
-        <source>Subdir for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdir for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdir for temporary files exists. Can not remove this folder.</source>
+        <translation>Subdir for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="137"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="182"/>
@@ -11575,8 +12278,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="291"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -11696,7 +12399,7 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="135"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="145"/>
         <source>Temporary UGENE dir is empty</source>
         <translation type="unfinished">Temporary UGENE dir is empty</translation>
     </message>
@@ -11712,67 +12415,134 @@ Set it empty if you want to run Tophat once for all input reads</translation>
 <context>
     <name>U2::VcfConsensusSupportTask</name>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="40"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="39"/>
         <source>Create Vcf Consensus</source>
         <translation>Create Vcf Consensus</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="50"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="49"/>
         <source>VcfConsensus started</source>
         <translation>VcfConsensus started</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="52"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="51"/>
         <source>AppSettings is NULL</source>
         <translation>AppSettings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="54"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="53"/>
         <source>UserAppsSettings is NULL</source>
         <translation>UserAppsSettings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="56"/>
-        <source>Temporary directory is not set!</source>
-        <translation>Temporary directory is not set!</translation>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="55"/>
+        <source>Temporary folder is not set!</source>
+        <translation>Temporary folder is not set!</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="61"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Can not create directory for temporary files.</translation>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="60"/>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Can not create folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="65"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="64"/>
         <source>Saving temporary data to file '%1'</source>
         <translation>Saving temporary data to file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="84"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="83"/>
         <source>ExternalToolRegistry is NULL</source>
         <translation>ExternalToolRegistry is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="88"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="87"/>
         <source>There is no VcfConsensus external tool registered</source>
         <translation>There is no VcfConsensus external tool registered</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="89"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="88"/>
         <source>There is no Tabix external tool registered</source>
         <translation>There is no Tabix external tool registered</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="111"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="110"/>
         <source>Trying to get path of NULL external tool</source>
         <translation>Trying to get path of NULL external tool</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="115"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="114"/>
         <source>Path to %1</source>
         <translation>Path to %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::Workflow::BlastAndSwReadTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="86"/>
+        <source>Map one read with BLAST & SW task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="153"/>
+        <source>%1 was skipped. No BLAST results.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="197"/>
+        <source>%1 was skipped. Low similarity: %2. Minimum similarity was set to %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="320"/>
+        <source>The %1 algorithm is not found. Add the %1 plugin.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="323"/>
+        <source>The %1 algorithm is not found. Check that the %1 plugin is up to date.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::BlastReadsSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="53"/>
+        <source>Map reads with BLAST & SW task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::ComposeResultSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="64"/>
+        <source>Compose alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="197"/>
+        <source>No read satisfy minimum similarity criteria.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="311"/>
+        <source>The related chromatogram not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::FormatDBSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp" line="46"/>
+        <source>Format DB task wrapper</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp" line="66"/>
+        <source>The task uses a temporary folder to process the data. It is required that the folder path doesn't have spaces. Please set up an appropriate path for the "Temporary files" parameter on the "Directories" tab of the UGENE Application Settings.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::Workflow::IntegralBusPort</name>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="56"/>
@@ -11791,8 +12561,8 @@ Set it empty if you want to run Tophat once for all input reads</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="236"/>
-        <location filename="../src/spades/SpadesWorker.cpp" line="189"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="255"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="190"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="272"/>
         <source>The slot must be not empty: '%1'</source>
         <translation type="unfinished">The slot must be not empty: '%1'</translation>
     </message>
diff --git a/src/plugins/external_tool_support/transl/russian.ts b/src/plugins/external_tool_support/transl/russian.ts
index d43bedf..1c6cc9e 100644
--- a/src/plugins/external_tool_support/transl/russian.ts
+++ b/src/plugins/external_tool_support/transl/russian.ts
@@ -2,6 +2,90 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ru_RU">
 <context>
+    <name>AlignToReferenceBlastDialog</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="20"/>
+        <source>Input data</source>
+        <translation>Входные данные</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="26"/>
+        <source>Reference</source>
+        <translation>Референсная последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="14"/>
+        <source>Map Sanger Reads to Reference</source>
+        <translation>Выравнивание данных секвенирования по Сэнгеру</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="38"/>
+        <source>Input a file with a reference sequence</source>
+        <translation>Укажите файл с референсной последовательностью</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="45"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="169"/>
+        <source>...</source>
+        <translation>...</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="54"/>
+        <source>Reads</source>
+        <translation>Прочтения</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="79"/>
+        <source>Add</source>
+        <translation>Добавить</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="86"/>
+        <source>Remove</source>
+        <translation>Удалить</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="98"/>
+        <source>Settings</source>
+        <translation>Настройки</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="114"/>
+        <source>Mapping min similarity</source>
+        <translation>Минимальное сходство при выравнивании</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="134"/>
+        <source>Trimming quality threshold</source>
+        <translation>Порог качества для обрезания концов</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="141"/>
+        <source>Read name in result alignment</source>
+        <translation>Имя прочтения в выравнивании</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="162"/>
+        <source>Input the result file path</source>
+        <translation>Укажите путь до выходного файла</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="121"/>
+        <source>%</source>
+        <translation>%</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="154"/>
+        <source>Result alignment</source>
+        <translation>Сохранить в</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.ui" line="178"/>
+        <source>Add to project</source>
+        <translation>Добавить в проект</translation>
+    </message>
+</context>
+<context>
     <name>BlastAllSupportDialog</name>
     <message>
         <location filename="../src/utils/BlastAllSupportDialog.ui" line="20"/>
@@ -9,58 +93,58 @@
         <translation>Запрос к локальной базе данных BLAST</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="42"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="48"/>
         <source>General options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="53"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="62"/>
         <source>Select search:</source>
         <translation>Тип поиска:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="61"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="70"/>
         <source>blastn</source>
         <extracomment>qwe</extracomment>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="66"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="75"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="76"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="85"/>
         <source>blastx</source>
         <translation>blastx</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="81"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="90"/>
         <source>tblastn</source>
         <translation>tblastn</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="86"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="95"/>
         <source>tblastx</source>
         <translation>tblastx</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="94"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="103"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Поиск коротких последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="101"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="110"/>
         <source>Expectation value </source>
         <translation>Математическое ожидание</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="108"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="117"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="125"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="134"/>
         <source>Off</source>
         <translation>Выключить</translation>
     </message>
@@ -69,97 +153,97 @@
         <translation type="vanished">Базовое имя для файлов БД:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="230"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="274"/>
         <source>Number of CPUs being used</source>
         <translation>Использовать процессоров</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="268"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="318"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="391"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="544"/>
         <source>Word size</source>
         <translation>Размер слова</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="528"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="616"/>
         <source>Gap costs</source>
         <translation>Вес пробела</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="307"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="421"/>
         <source>Match scores</source>
         <translation>Веса совпадений</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="337"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="480"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="159"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="171"/>
         <source>Both strands</source>
         <translation>Обе цепи</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="169"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="181"/>
         <source>Direct</source>
         <translation>Прямая</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="176"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="188"/>
         <source>Complement</source>
         <translation>Комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="342"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="485"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="347"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="490"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="352"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="495"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="357"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="500"/>
         <source>2 -7</source>
         <translation>2 -7</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="362"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="505"/>
         <source>2 -5</source>
         <translation>2 -5</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="367"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="510"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="372"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="515"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="377"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="520"/>
         <source>5 -4</source>
         <translation>5 -4</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="404"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="463"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="71"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="80"/>
         <source>gpu-blastp</source>
         <translation>gpu-blastp</translation>
     </message>
@@ -173,162 +257,162 @@ a database file</source>
         <translation type="vanished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="412"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="429"/>
         <source>BLOSUM62</source>
         <translation>BLOSUM62</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="417"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="434"/>
         <source>BLOSUM45</source>
         <translation>BLOSUM45</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="422"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="439"/>
         <source>BLOSUM80</source>
         <translation>BLOSUM80</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="427"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="444"/>
         <source>PAM30</source>
         <translation>PAM30</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="432"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="449"/>
         <source>PAM70</source>
         <translation>PAM70</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="320"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="408"/>
         <source>Service</source>
         <translation>Сервис</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="115"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="124"/>
         <source>Max hits:</source>
         <translation>Макс. число совпадений:</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="283"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="371"/>
         <source>plain</source>
         <translation>простой</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="288"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="376"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="293"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="381"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="443"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="531"/>
         <source>PHI pattern</source>
         <translation>Шаблон PHI</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="483"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="600"/>
         <source>Threshold for extending hits</source>
         <translation>Порог для расширенных совпадений</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="486"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="603"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="535"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="623"/>
         <source>Composition-based statistics</source>
         <translation>Статистика состава</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="543"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="336"/>
         <source>D or d: default (equivalent to 2 )</source>
         <translation>D или d: по умолчанию (равно 2)</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="548"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="341"/>
         <source>0 or F or f: No composition-based statistics</source>
         <translation>0 или F или f: Нет статистики состава</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="553"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="346"/>
         <source>1: Composition-based statistics as in NAR 29:2994-3005, 2001</source>
         <translation>1: Статистика состава как в NAR 29:2994-3005, 2001</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="558"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="351"/>
         <source>2 or T or t : Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, conditioned on sequence properties</source>
         <translation>2 или T или t : Статистика как в in Bioinformatics 21:902-911, 2005, основанная на свойствах последовательности</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="563"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="356"/>
         <source>3: Composition-based score adjustment as in Bioinformatics 21:902-911, 2005, unconditionally</source>
         <translation>3: Статистика как в Bioinformatics 21:902-911, 2005, безусловная</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="575"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="637"/>
         <source>Filters</source>
         <translation>Фильтры</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="581"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="646"/>
         <source>Low complexity filter</source>
         <translation>Фильтр низкой сложности</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="588"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="653"/>
         <source>Human repeats filter</source>
         <translation>Фильтр человеческих повторов</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="598"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="663"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="604"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="672"/>
         <source>Mask for lookup table only</source>
         <translation>Только маска таблицы поиска</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="614"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="682"/>
         <source>Mask lower case letters</source>
         <translation>Маска символов нижн. регистра</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="640"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="717"/>
         <source>Extension options</source>
         <translation>Возможности расширения</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="648"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="731"/>
         <source>X dropoff value (in bits)</source>
         <translation>X dropoff значение (в битах)</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="654"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="740"/>
         <source>For gapped alignment</source>
         <translation>Для выравниваний с пробелами</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="668"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="754"/>
         <source>For ungapped extensions</source>
         <translation>Для расширений без пробелов</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="675"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="761"/>
         <source>For final gapped alignment</source>
         <translation>Для финального выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="699"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="788"/>
         <source>Multiple Hits window size</source>
         <translation>Множественные пересечения окна</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastAllSupportDialog.ui" line="711"/>
+        <location filename="../src/utils/BlastAllSupportDialog.ui" line="800"/>
         <source>Perform gapped alignment</source>
         <translation>Выполнить выравнивание</translation>
     </message>
@@ -341,19 +425,19 @@ a database file</source>
         <translation>Извлечь последовательность из базы данных BLAST</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="59"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="44"/>
         <source>Query ID</source>
-        <translation type="unfinished"></translation>
+        <translation>Идентификатор запроса</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="75"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="121"/>
         <source>Select database</source>
-        <translation type="unfinished"></translation>
+        <translation>Выберите базу данных</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="99"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="71"/>
         <source>Output path</source>
-        <translation type="unfinished"></translation>
+        <translation>Выходной путь</translation>
     </message>
     <message>
         <source>Entery query ID:</source>
@@ -364,7 +448,7 @@ a database file</source>
         <translation type="vanished">Выберите базу данных:</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="115"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="99"/>
         <source>...</source>
         <translation>...</translation>
     </message>
@@ -385,7 +469,7 @@ a database file</source>
         <translation type="vanished">Выходной путь:</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="127"/>
+        <location filename="../src/blast_plus/BlastDBCmdDialog.ui" line="158"/>
         <source>Add to project</source>
         <translation>Добавить в проект</translation>
     </message>
@@ -395,22 +479,22 @@ a database file</source>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidget.ui" line="20"/>
         <source>Form</source>
-        <translation type="unfinished">Форма</translation>
+        <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="40"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="43"/>
         <source>Database path</source>
-        <translation type="unfinished"></translation>
+        <translation>Путь до базы данных</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="64"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="61"/>
         <source>Database file</source>
-        <translation type="unfinished"></translation>
+        <translation>Файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="73"/>
+        <location filename="../src/utils/BlastDBSelectorWidget.ui" line="70"/>
         <source>Base name for BLAST DB files</source>
-        <translation type="unfinished"></translation>
+        <translation>Базовое имя для файлов базы данных BLAST</translation>
     </message>
     <message>
         <source>Database path:</source>
@@ -882,7 +966,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/bwa/BwaBuildSettings.ui" line="77"/>
         <source>autodetect</source>
-        <translation type="unfinished">autodetect</translation>
+        <translation>autodetect</translation>
     </message>
     <message>
         <location filename="../src/bwa/BwaBuildSettings.ui" line="82"/>
@@ -908,207 +992,229 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation>Форма</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="36"/>
         <source>Base Options</source>
-        <translation>Основные параметры</translation>
+        <translation type="vanished">Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="441"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="567"/>
         <source>Penalty for a mismatch</source>
         <translation>Штраф за несовпадение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="409"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="449"/>
         <source>Score for a sequence match</source>
         <translation>Вес совпадения</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="393"/>
         <source>Score for a match (-A)</source>
-        <translation>Веса совпадений (-A)</translation>
+        <translation type="vanished">Веса совпадений (-A)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="425"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="551"/>
         <source>Mismatch penalty (-B)</source>
         <translation>Штраф за несовпадение (-B)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="454"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="484"/>
         <source>Gap open penalty (-O)</source>
         <translation>Штраф за открытие пробела (-O)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="557"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="625"/>
         <source>Penalty for an unpaired read pair</source>
         <translation>Штраф за непарные риды</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="586"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="746"/>
         <source>Minimum score to output</source>
         <translation>Минимальная оценка для вывода</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="541"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="609"/>
         <source>Penalty unpaired (-U)</source>
         <translation>Штраф за непарные риды (-U)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="528"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="529"/>
         <source>Penalty for clipping </source>
         <translation>Штраф за отсечение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="470"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="500"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открывающий пропуск</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="499"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="596"/>
         <source>Gap extension penalty; a gap of size k cost {-O} + {-E}*k</source>
         <translation>Штраф за расширение пробела; пробел размера k стоит {-O} + {-E}*k</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="512"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="513"/>
         <source>Penalty for clipping (-L)</source>
         <translation>Штраф за отсечение (-L)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="483"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="580"/>
         <source>Gap extention penalty (-E)</source>
         <translation>Штраф за расширение пробела (-E)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="570"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="730"/>
         <source>Score threshold (-T)</source>
         <translation>Порог оценки (-T)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="209"/>
         <source>Internall seeds length (-r)</source>
-        <translation>Внутренняя длина затравки (-r)</translation>
+        <translation type="vanished">Внутренняя длина затравки (-r)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="107"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="132"/>
         <source>Min seed length (-k)</source>
         <translation>Минимальная длина затравки (-k)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="69"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="319"/>
         <source>Look for internal seeds inside a seed longer than {-k} * FLOAT</source>
         <translation>Поиск внутренние затравки внутри затравки длиннее чем {-k} * FLOAT</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="56"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="386"/>
         <source>Number of threads</source>
         <translation>Число потоков</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="193"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="148"/>
         <source>Off-diagonal X-dropoff</source>
         <translation>Снижение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="161"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="354"/>
         <source>Band width for banded alignment</source>
         <translation>Ширина полосы для выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="145"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="271"/>
         <source>Band width (-w)</source>
         <translation>Ширина полосы (-w)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="123"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="202"/>
         <source>Minimum seed length</source>
         <translation>Минимальная длина затравки</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="88"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="370"/>
         <source>Number of threads (-t)</source>
         <translation>Число потоков (-t)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="177"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="68"/>
         <source>Dropoff (-d)</source>
         <translation>Снижение (-d)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="228"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="186"/>
         <source>Skip seeds threshold (-c)</source>
         <translation>Порог затравки (-c)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="244"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="84"/>
         <source>Skip seeds with more than INT occurrences </source>
         <translation>Пропускает затравки с более чем с указанным количеством вхождений</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="266"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="338"/>
         <source>Drop chain threshold (-D)</source>
         <translation>Порог снижения цепи (-D)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="282"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="306"/>
         <source>Drop chains shorter than FLOAT fraction of the longest overlapping chain</source>
         <translation>Снижение цепи короче FLOAT фракции самого длинного перекрытия цепи</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="308"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="45"/>
+        <source>Algorithm</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="290"/>
+        <source>Internal seeds length (-r)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="435"/>
+        <source>Scoring Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="654"/>
+        <source>Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="668"/>
         <source>Index algorithm (-a)</source>
         <translation>Алгоритм (-a)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="325"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="695"/>
         <source>autodetect</source>
         <translation>autodetect</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="330"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="700"/>
         <source>bwtsw</source>
         <translation>bwtsw</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="335"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="705"/>
         <source>div</source>
         <translation>div</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="340"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="710"/>
         <source>is</source>
         <translation>is</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="599"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="465"/>
+        <source>Matching score (-A)</source>
+        <translation>Веса совпадений (-A)</translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="164"/>
         <source>Rounds of mate rescues (-m)</source>
         <translation>Округление за освобождение участника (-m)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="615"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="116"/>
         <source>Perform at most INT rounds of mate rescues for each read</source>
         <translation>Выполняет для большинства INT округлений освобождений участников для каждого рида</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="348"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="681"/>
         <source>Skip mate rescue</source>
         <translation>Пропустить освобождение участника</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="351"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="684"/>
         <source>Skip mate rescue (-S)</source>
         <translation>Пропустить освобождение участника (-S)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="358"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="233"/>
         <source>Skip pairing; mate rescue performed unless -S also in use</source>
         <translation>Пропустить спаривание; участник освобождается кроме случая когда -S также используется</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="361"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="236"/>
         <source>Skip pairing (-P)</source>
         <translation>Пропустить спаривание (-P)</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemSettings.ui" line="633"/>
+        <location filename="../src/bwa/BwaMemSettings.ui" line="410"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
@@ -1385,7 +1491,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/cap3/CAP3SupportDialog.ui" line="27"/>
         <source>Base</source>
-        <translation>Основа</translation>
+        <translation>Основные</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3SupportDialog.ui" line="33"/>
@@ -1405,7 +1511,7 @@ p, li { white-space: pre-wrap; }
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Допустимы последовательности в форматах FASTA или FASTQ. </p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Значения качества для последовательностей в формате FASTA будут записаны в соответствующий файл. Этот файл будет сохранен в ту же директорию, что и оригинальные последовательности и будет назван как файл FASTA, но с другим расширением: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html> [...]
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Значения качества для последовательностей в формате FASTA будут записаны в соответствующий файл. Этот файл будет сохранен в ту же папку, что и оригинальные последовательности и будет назван как файл FASTA, но с другим расширением: <span style=" font-weight:600; font-style:italic;">.qual</span></p></body></html></tra [...]
     </message>
     <message>
         <location filename="../src/cap3/CAP3SupportDialog.ui" line="54"/>
@@ -1535,7 +1641,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/cap3/CAP3SupportDialog.ui" line="119"/>
         <source>Advanced</source>
-        <translation>Дополнительно</translation>
+        <translation>Дополнительные</translation>
     </message>
 </context>
 <context>
@@ -1548,7 +1654,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="34"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="42"/>
@@ -1569,7 +1675,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="81"/>
         <source>Iteration</source>
-        <translation>Итерация</translation>
+        <translation>Итерации</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="91"/>
@@ -1589,7 +1695,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="217"/>
         <source>Miscellaneous</source>
-        <translation>Смешанные</translation>
+        <translation>Другое</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportRunDialog.ui" line="227"/>
@@ -1605,123 +1711,123 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>ClustalWSupportRunDialog</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="26"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="32"/>
         <source>Align with ClustalW</source>
         <translation>Выравнивание с помощью ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="34"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="46"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="42"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="57"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="52"/>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="76"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="67"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="91"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="59"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="74"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="88"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="103"/>
         <source>Advanced options</source>
         <translation>Дополнительные опции</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="98"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="113"/>
         <source>Gap opening penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="141"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="159"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="184"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="208"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="214"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="247"/>
         <source>IUB</source>
         <translation>IUB</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="219"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="252"/>
         <source>CLUSTALW</source>
         <translation>CLUSTALW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="289"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="328"/>
         <source>Max iterations</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="261"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="300"/>
         <source>NONE</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="266"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="305"/>
         <source>TREE</source>
         <translation>Дерево</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="271"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="310"/>
         <source>ALIGNMENT</source>
         <translation>Выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="231"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="264"/>
         <source>Iteration type</source>
         <translation>Тип итераций</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="335"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="377"/>
         <source>Out sequences order</source>
         <translation>Порядок последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="365"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="413"/>
         <source>Input</source>
         <translation>Входные</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="370"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="418"/>
         <source>Aligned</source>
         <translation>Выровненные</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="388"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="436"/>
         <source>Protein gap parameters</source>
         <translation>Параметры для белковых последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="398"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="446"/>
         <source>Gap separation distance</source>
         <translation>Расстояние между пробелами</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="456"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="507"/>
         <source>Residue-specific gaps off</source>
         <translation>Откл. специфические для остатков пробелы</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="442"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="493"/>
         <source>Hydrophilic gaps off</source>
         <translation>Отключить гидрофильные пробелы</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="449"/>
+        <location filename="../src/clustalw/ClustalWSupportRunDialog.ui" line="500"/>
         <source>No end gap separation penalty</source>
         <translation>Не вводить штраф за разделение пробелов</translation>
     </message>
@@ -1750,7 +1856,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/ETSSettingsWidget.ui" line="50"/>
         <source><a href="http://ugene.unipro.ru/external.html">external tools package</a></source>
-        <translation type="unfinished"></translation>
+        <translation><a href="http://ugene.unipro.ru/external.html">external tools package</a></translation>
     </message>
     <message>
         <location filename="../src/ETSSettingsWidget.ui" line="70"/>
@@ -1814,79 +1920,83 @@ p, li { white-space: pre-wrap; }
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="35"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="38"/>
         <source>Select input file(s) for formatting database:</source>
         <translation>Выберите входной файл(ы) для форматирования базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="53"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="84"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="59"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="93"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="220"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="62"/>
+        <source>Or select folder with input files:</source>
+        <translation type="vanished">Или выберите папку со входными файлами:</translation>
+    </message>
+    <message>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="68"/>
         <source>Or select directory with input files:</source>
-        <translation>Или выберите директорию со входными файлами:</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="96"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="105"/>
         <source>File filter</source>
         <translation>Фильтр</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="104"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="119"/>
         <source>Include files filter</source>
         <translation>Включающий фильтр</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="114"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="129"/>
         <source>*.fa;*.fasta</source>
         <translation>*.fa;*.fasta</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="136"/>
         <source>Exclude files filter</source>
         <translation>Исключающий фильтр</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="131"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="146"/>
         <source>*.pal</source>
         <translation>*.pal</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="143"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="158"/>
         <source>Type of file(s)</source>
         <translation>Тип файла(ов)</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="149"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="167"/>
         <source>protein</source>
         <translation>белки</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="159"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="177"/>
         <source>nucleotide</source>
         <translation>нуклеотиды</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="172"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="190"/>
         <source>Output settings</source>
         <translation>Выходные настройки</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="178"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="205"/>
         <source>Select the path to save the database into:</source>
         <translation>Выберите путь для сохранения базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="201"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="234"/>
         <source>Base name for BLAST files:</source>
         <translation>Базовое имя для файлов BLAST:</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="211"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.ui" line="244"/>
         <source>Title for database file:</source>
         <translation>Название для файла базы данных:</translation>
     </message>
@@ -1901,7 +2011,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/HmmerBuildDialog.ui" line="42"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/hmmer/HmmerBuildDialog.ui" line="52"/>
@@ -2095,7 +2205,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/HmmerSearchDialog.ui" line="54"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/hmmer/HmmerSearchDialog.ui" line="65"/>
@@ -2240,7 +2350,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportRunDialog.ui" line="36"/>
@@ -2356,7 +2466,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/hmmer/PhmmerSearchDialog.ui" line="36"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/hmmer/PhmmerSearchDialog.ui" line="50"/>
@@ -2502,49 +2612,43 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PhyMLDialog</name>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="77"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="76"/>
         <source>Substitution model</source>
         <translation>Модель замен</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="98"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="69"/>
         <source>Equilibrium frequencies</source>
         <translation>Равновесные частоты</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="112"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="116"/>
         <source>optimized</source>
         <translation>оптимизированные</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="119"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="83"/>
         <source>empirical</source>
         <translation>эмпирические</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="293"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="106"/>
         <source>Transition / transversion ratio </source>
         <translation>Коэффициент перехода/трансверсии</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="139"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="171"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="289"/>
         <source>Check to set user value. 
 Uncheck to get the maximum likelihood estimate.</source>
-        <translation>Установите галочку, чтобы задать значение пользователя.
+        <translation type="vanished">Установите галочку, чтобы задать значение пользователя.
 Снимите галочку, чтобы получить максимальную оценку правдоподобия.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="190"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="212"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="243"/>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="265"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="231"/>
         <source>estimated </source>
         <translation>оценка</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="143"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="209"/>
         <source>Proportion of invariable sites</source>
         <translation>Доля неизменяемых сайтов</translation>
     </message>
@@ -2554,37 +2658,61 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation>Модель замен</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="154"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="126"/>
         <source>Number of substitution rate categories</source>
         <translation>Число категорий коэффициента замещения</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="175"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="133"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="149"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="165"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="275"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="294"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="345"/>
+        <source>Set a fixed value or get the maximum likelihood estimate.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="136"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="152"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="348"/>
+        <source>estimated</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="171"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="281"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="300"/>
+        <source>fixed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="313"/>
         <source>Gamma shape parameter</source>
         <translation>Параметр формы Гамма</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="303"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="362"/>
         <source>Branch Support</source>
         <translation>Поддержка ветви</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="315"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="374"/>
         <source>Use fast likelihood-based method</source>
         <translation>Использовать быстрый метод максимального правдоподобия</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="335"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="394"/>
         <source>Perform bootstrap</source>
         <translation>Выполнить начальную загрузку</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="345"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="404"/>
         <source>It is the number of bootstrap replicates.</source>
         <translation>Это число начальных загрузок.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="359"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="418"/>
         <source>Tree Searching</source>
         <translation>Поиск дерева</translation>
     </message>
@@ -2594,27 +2722,36 @@ Uncheck to get the maximum likelihood estimate.</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="461"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="456"/>
         <source>Type of tree improvement</source>
         <translation>Тип улучшения дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="478"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="479"/>
         <source>Set number of random starting tree</source>
         <translation>Установить число случайных начал дерева</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="494"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="506"/>
+        <source>Optimise tree topology</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Optimise topology</source>
-        <translation>Оптимизировать топологию</translation>
+        <translation type="vanished">Оптимизировать топологию</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="504"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="516"/>
         <source>Optimise branch lengths</source>
         <translation>Оптимизировать длину ветвей</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialog.ui" line="525"/>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="526"/>
+        <source>Optimise substitution rate</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialog.ui" line="534"/>
         <source>Display Options</source>
         <translation>Опции отображения</translation>
     </message>
@@ -2622,17 +2759,17 @@ Uncheck to get the maximum likelihood estimate.</source>
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="122"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="132"/>
         <source>Path for temporary files</source>
         <translation>Путь к папке с временными файлами</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="123"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="133"/>
         <source>Path for temporary files not selected.</source>
         <translation>Путь для временных файлов не задан.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="124"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="134"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -2694,15 +2831,15 @@ Uncheck to get the maximum likelihood estimate.</source>
     <message>
         <location filename="../src/cufflinks/GffreadWorker.cpp" line="219"/>
         <source>Extract transcript sequences from the genomic sequence(s) with gffread.</source>
-        <translation>Извлекает транскрипционные последовательности из геномных последовательностей при помощи gffread.</translation>
+        <translation>извлекает последовательности транскриптов из геномных последовательностей при помощи gffread.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="76"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="70"/>
         <source>Installed</source>
         <translation>Установлено</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="77"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="71"/>
         <source>Not installed</source>
         <translation>Не установлено</translation>
     </message>
@@ -2745,12 +2882,35 @@ Uncheck to get the maximum likelihood estimate.</source>
         <location filename="../src/bwa/BwaSettingsWidget.cpp" line="44"/>
         <source>NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB.
 In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</source>
-        <translation type="unfinished"></translation>
+        <translation>NOTE: "bwtsw" алгоритм не поддерживается для работы с рефересными последовательностями, размер которых меньше 10 MB. В таком случае рекомендуется изменить алгоритм на "is"</translation>
     </message>
     <message>
         <source>NOTE: "bwtsw" index algorithm is not supposed to work with reference sequences having size smaller than 10 MB. In order to achieve stable BWA performance it is strongly recommend to set the index algorithm to "is"</source>
         <translation type="vanished">NOTE: "bwtsw" алгоритм не поддерживается для работы с рефересными последовательностями, размер которых меньше 10 MB. В таком случае рекомендуется изменить алгоритм на "is"</translation>
     </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="57"/>
+        <source>Sequence name from file</source>
+        <translation>Имя последовательности в файле</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="58"/>
+        <source>File name</source>
+        <translation>Имя файла</translation>
+    </message>
+</context>
+<context>
+    <name>SnpEffDatabaseDialog</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDialog.ui" line="14"/>
+        <source>Select SnpEff Database</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDialog.ui" line="23"/>
+        <source>Search...</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>SpadesSettings</name>
@@ -2795,9 +2955,8 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation>Тип набора данных</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesSettings.ui" line="112"/>
         <source>auto</source>
-        <translation>авто</translation>
+        <translation type="vanished">авто</translation>
     </message>
     <message>
         <location filename="../src/spades/SpadesSettings.ui" line="120"/>
@@ -2823,7 +2982,7 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/spades/SpadesSettings.ui" line="174"/>
         <source>Number of threads (-t)</source>
-        <translation>Число потоков (-t)</translation>
+        <translation>число потоков (-t)</translation>
     </message>
 </context>
 <context>
@@ -2836,7 +2995,7 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportRunDialog.ui" line="36"/>
@@ -2876,6 +3035,111 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     </message>
 </context>
 <context>
+    <name>U2::AlignToReferenceBlastCmdlineTask</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="93"/>
+        <source>Map Sanger reads to reference</source>
+        <translation>Выравнивание прочтений на референсную последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="110"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="113"/>
+        <source>wrong reference format</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="165"/>
+        <source><u>Filtered by quality (%1):</u></source>
+        <translation>Прочтения, отфильтрованные по качеству</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="209"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="212"/>
+        <source>wrong output format</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::AlignToReferenceBlastDialog</name>
+    <message>
+        <source>Align</source>
+        <translation type="obsolete">Выровнять</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="246"/>
+        <source>Map</source>
+        <translation>Выровнять</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="247"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="253"/>
+        <source>File name</source>
+        <translation>Имя файла</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="254"/>
+        <source>Sequence name from file</source>
+        <translation>Имя последовательности в файле</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="270"/>
+        <source>Select Output File...</source>
+        <translation>Укажите выходной файл...</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="283"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="290"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="309"/>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="332"/>
+        <source>Error</source>
+        <translation>Ошибка</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="284"/>
+        <source>Reference sequence is not set.</source>
+        <translation>Референсная последовательность не задана.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="291"/>
+        <source>No reads provided.</source>
+        <translation>Риды не заданы.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="310"/>
+        <source>Output file is not set.</source>
+        <translation>Выходной файл не указан.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="321"/>
+        <source>Overwrite the file?</source>
+        <translation>Переписать этот файл?</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="322"/>
+        <source>The result file already exists. Would you like to overwrite it?</source>
+        <translation>Такой файл уже существует. Переписать его?</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="332"/>
+        <source>Unable to delete the file.</source>
+        <translation>Невозможно удалить этот файл.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="344"/>
+        <source>Open Reference Sequence</source>
+        <translation>Выбрать референсную последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastDialog.cpp" line="355"/>
+        <source>Select File(s) with Read(s)</source>
+        <translation>Выбрать прочтения</translation>
+    </message>
+</context>
+<context>
     <name>U2::BedtoolsIntersectAnnotationsByEntityTask</name>
     <message>
         <location filename="../src/bedtools/BedtoolsIntersectTask.cpp" line="114"/>
@@ -2941,40 +3205,36 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastAllSupport</name>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="71"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="73"/>
         <source>The <i>blastall</i> is the old program developed and distributed by the NCBI for running BLAST searches. The NCBI recommends that people start using the programs of the BLAST+ package instead.</source>
         <translation><i> blastall </i>это программа разработанная NCBI для запуска BLAST поиска. NCBI рекомендует использовать более новый пакет BLAST+.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="85"/>
         <source>Path for BLAST %1 tool not selected.</source>
-        <translation>Путь для BLAST %1 не установлен.</translation>
+        <translation type="vanished">Путь для BLAST %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="86"/>
         <source>Do you want to select it now?</source>
-        <translation>Выбрать сейчас?</translation>
+        <translation type="vanished">Выбрать сейчас?</translation>
     </message>
 </context>
 <context>
     <name>U2::BlastAllSupportContext</name>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="135"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="118"/>
         <source>Query with local BLAST...</source>
         <translation>Поиск с помощью локальной базы данных BLAST...</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="155"/>
         <source>Path for BLAST %1 tool not selected.</source>
-        <translation>Путь для %1 не установлен.</translation>
+        <translation type="vanished">Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="156"/>
         <source>Do you want to select it now?</source>
-        <translation>Выбрать сейчас?</translation>
+        <translation type="vanished">Выбрать сейчас?</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupport.cpp" line="204"/>
+        <location filename="../src/blast/BlastAllSupport.cpp" line="168"/>
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
@@ -3008,17 +3268,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Имя базы данных содержит пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="103"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="99"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="117"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="113"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="117"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="113"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -3028,17 +3288,21 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="61"/>
         <source>A problem occurred during doing BLAST. The sequence is no more available.</source>
-        <translation type="unfinished"></translation>
+        <translation>A problem occurred during doing BLAST. The sequence is no more available.</translation>
+    </message>
+    <message>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation type="vanished">Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="81"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdirectory for temporary files exists. Can not remove this folder.</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="86"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="99"/>
@@ -3057,8 +3321,8 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="258"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllSupportTask.cpp" line="293"/>
@@ -3144,7 +3408,7 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastAllWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="161"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="160"/>
         <source>Select input file</source>
         <translation>Выберите входной файл</translation>
     </message>
@@ -3157,23 +3421,23 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Имя базы данных содержит пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="207"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="206"/>
         <source>This file has the incompatible format for the BLAST+ search.</source>
         <translation>Этот файл имеет несовместимый формат для поиска BLAST+.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="252"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="251"/>
         <source>This file does not contain any sequence.</source>
         <translation>Этот файл не содержит последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="207"/>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="252"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="206"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="251"/>
         <source>Wrong input file</source>
         <translation>Неверный входной файл</translation>
     </message>
     <message>
-        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="300"/>
+        <location filename="../src/blast/BlastAllSupportRunDialog.cpp" line="297"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
@@ -3205,22 +3469,22 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="44"/>
         <source>Database path contains space characters.</source>
-        <translation type="unfinished">Путь до базы данных содержит пробелы.</translation>
+        <translation>Путь до базы данных содержит пробелы.</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="49"/>
         <source>Database name contains space characters.</source>
-        <translation type="unfinished">Имя базы данных содержит пробелы.</translation>
+        <translation>Имя базы данных содержит пробелы.</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="76"/>
         <source>Select a database file</source>
-        <translation type="unfinished">Выберите файл базы данных</translation>
+        <translation>Выберите файл базы данных</translation>
     </message>
     <message>
         <location filename="../src/utils/BlastDBSelectorWidgetController.cpp" line="108"/>
         <source>No alias or index file found for selected database.</source>
-        <translation type="unfinished"></translation>
+        <translation>Не найдено алиасов или индексного файла для выбранной базы данных.</translation>
     </message>
 </context>
 <context>
@@ -3244,12 +3508,12 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupport</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="179"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="182"/>
         <source>Path for BLAST+ tools not selected.</source>
         <translation>Путь для BLAST+ не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="180"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="183"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -3257,101 +3521,106 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportCommonTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="69"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="70"/>
         <source>A problem occurred during doing BLAST+. The sequence is no more available.</source>
+        <translation>A problem occurred during doing BLAST+. The sequence is no more available.</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="83"/>
+        <source>The task uses a temporary folder to process the data. The folder path is required not to have spaces. Please set up an appropriate path for the "Temporary files" parameter on the "Directories" tab of the UGENE Application Settings.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="93"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="92"/>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation>Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="98"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="97"/>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="111"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="110"/>
         <source>Can not create fake NCBI ini file</source>
         <translation>Can not create fake NCBI ini file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="155"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="167"/>
         <source>Output file not found</source>
         <translation>Выходной файл не найден</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="157"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="169"/>
         <source>Output file not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="186"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="211"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="198"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="223"/>
         <source>There were no hits found for your BLAST search.</source>
         <translation>There were no hits found for your BLAST search.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="203"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="215"/>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="244"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="256"/>
         <source>Incorrect number of fields in line: %1</source>
         <translation>Incorrect number of fields in line: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="249"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="254"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="409"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="416"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="433"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="261"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="421"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="428"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="445"/>
         <source>Can't get location</source>
         <translation>Can't get location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="266"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="278"/>
         <source>Can't evaluate location</source>
         <translation>Can't evaluate location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="272"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="277"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="284"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="289"/>
         <source>Can't get hit location</source>
         <translation>Can't get hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="293"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="305"/>
         <source>Can't evaluate hit location</source>
         <translation>Can't evaluate hit location</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="307"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="459"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="319"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="471"/>
         <source>Can't get align length</source>
         <translation>Can't get align length</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="312"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="451"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="324"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="463"/>
         <source>Can't get gaps</source>
         <translation>Can't get gaps</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="317"/>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="443"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="329"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="455"/>
         <source>Can't get identity</source>
         <translation>Can't get identity</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="346"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="358"/>
         <source>Can't open output file</source>
         <translation>Can't open output file</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="350"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="362"/>
         <source>Can't read output file</source>
         <translation>Can't read output file</translation>
     </message>
@@ -3359,43 +3628,43 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportContext</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="234"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="255"/>
         <source>Fetch sequences by 'id'</source>
         <translation>Получить последовательности по 'id'</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="245"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="266"/>
         <source>Query with local BLAST+...</source>
         <translation>Поиск с помощью локальной базы данных BLAST+...</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="289"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="310"/>
         <source>Fetch sequences from local BLAST database</source>
         <translation>Извлечь последовательность из локальной базы данных BLAST</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="294"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="315"/>
         <source>Fetch sequences by 'id' %1</source>
         <translation>Извлечь последовательности по 'id' %1</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="312"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="333"/>
         <source>Path for BLAST+ tools not selected.</source>
         <translation>Путь для BLAST+ не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="313"/>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="398"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="334"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="419"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="369"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="390"/>
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="397"/>
+        <location filename="../src/blast_plus/BlastPlusSupport.cpp" line="418"/>
         <source>Path for BLAST+ %1 tool not selected.</source>
         <translation>Путь для BLAST+ %1 не установлен.</translation>
     </message>
@@ -3403,17 +3672,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusSupportMultiTask</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="613"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="625"/>
         <source>Source file</source>
         <translation>Исходный файл</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="614"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="626"/>
         <source>Used databse</source>
         <translation>Используемая база данных</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="616"/>
+        <location filename="../src/blast_plus/BlastPlusSupportCommonTask.cpp" line="628"/>
         <source>No any results found</source>
         <translation>Результатов не найдено</translation>
     </message>
@@ -3429,27 +3698,27 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Имя базы данных содержит пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="111"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="112"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="146"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="147"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Путь до <i>BLAST+ %1</i> не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="180"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="181"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="194"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="195"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="194"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="195"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -3457,13 +3726,13 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastPlusWithExtFileSpecifySupportRunDialog</name>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="235"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="240"/>
         <source>Select input file</source>
         <translation>Выберите входной файл</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="281"/>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="327"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="286"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="332"/>
         <source>Wrong input file</source>
         <translation>Неверный входной файл</translation>
     </message>
@@ -3476,27 +3745,27 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Имя базы данных содержит пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="281"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="286"/>
         <source>This file has the incompatible format for the BLAST+ search.</source>
         <translation>Этот файл имеет несовместимый формат для поиска BLAST+.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="327"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="332"/>
         <source>This file does not contain sequences.</source>
         <translation>Этот файл не содержит последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="380"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="383"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="415"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="418"/>
         <source>Path for <i>BLAST+ %1</i> tool not selected.</source>
         <translation>Путь до <i>BLAST+ %1</i> не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="449"/>
+        <location filename="../src/blast_plus/BlastPlusSupportRunDialog.cpp" line="452"/>
         <source>Wrong parameters for creating annotations</source>
         <translation>Неверные параметры для создания аннотаций</translation>
     </message>
@@ -3504,17 +3773,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BlastRunCommonDialog</name>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="64"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="57"/>
         <source>Restore to default</source>
         <translation>Значения по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="65"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="58"/>
         <source>Search</source>
         <translation>Искать</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="66"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="59"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -3523,32 +3792,32 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="vanished">Выберите файл базы данных</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="290"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="284"/>
         <source>Direct nucleotide alignment</source>
         <translation>Прямое нуклеотидное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="293"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="287"/>
         <source>Direct protein alignment</source>
         <translation>Прямое белковое выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="297"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="291"/>
         <source>Direct protein alignment (on GPU)</source>
         <translation>Прямое белковое выравнивание (на GPU)</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="301"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="295"/>
         <source>Protein alignment, input nucleotide is translated input protein before the search</source>
         <translation>Белковое выравнивание, входные нуклеотиды транслируются в белки до поиска</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="305"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="299"/>
         <source>Protein alignment, nucleotide database is translated input protein before the search</source>
         <translation>Белковое выравнивание, нуклеотидная база данных транслируется в белковую до поиска</translation>
     </message>
     <message>
-        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="309"/>
+        <location filename="../src/utils/BlastRunCommonDialog.cpp" line="303"/>
         <source>Protein alignment, both input query and database are translated before the search</source>
         <translation>Белковое выравнивание, оба запроса и база данных транслируются до поиска</translation>
     </message>
@@ -3643,17 +3912,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="238"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="237"/>
         <source>Saming reads with BWA Multitask</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="291"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="290"/>
         <source>Log is incomplete</source>
         <translation>Log is incomplete</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="294"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="293"/>
         <source>Log is incorrect</source>
         <translation>Log is incorrect</translation>
     </message>
@@ -3661,17 +3930,17 @@ In order to achieve stable BWA performance it is strongly recommend to set the i
 <context>
     <name>U2::BwaMemAlignTask</name>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="317"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="316"/>
         <source>Short reads are not provided</source>
         <translation>Short reads are not provided</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="336"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="335"/>
         <source>Please, provide same number of files with downstream and upstream reads.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaTask.cpp" line="428"/>
+        <location filename="../src/bwa/BwaTask.cpp" line="427"/>
         <source>Align reads with BWA-MEM Multitask</source>
         <translation type="unfinished"></translation>
     </message>
@@ -3883,17 +4152,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalOSupportContext</name>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="133"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="132"/>
         <source>Align with ClustalO...</source>
         <translation>Выравнивание с помощью ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/clustalo/ClustalOSupport.cpp" line="159"/>
+        <location filename="../src/clustalo/ClustalOSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -3925,13 +4194,13 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="127"/>
-        <source>Subdirectory for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdirectory for temporary files exists. Can not remove this directory.</translation>
+        <source>Subfolder for temporary files exists. Can not remove this folder.</source>
+        <translation>Subfolder for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="132"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="179"/>
@@ -3960,8 +4229,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOSupportTask.cpp" line="293"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -4032,17 +4301,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ClustalWSupportContext</name>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="133"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="132"/>
         <source>Align with ClustalW...</source>
         <translation>Выравнивание с помощью ClustalW...</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="158"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWSupport.cpp" line="159"/>
+        <location filename="../src/clustalw/ClustalWSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -4104,8 +4373,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/clustalw/ClustalWSupportTask.cpp" line="310"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -4211,7 +4480,7 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/hmmer/ConvertAlignment2StockholmTask.cpp" line="102"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4228,49 +4497,40 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::CopyFileTask</name>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="101"/>
         <source>Copy file task</source>
-        <translation>Copy file task</translation>
+        <translation type="vanished">Copy file task</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="109"/>
         <source>Input file is not set</source>
-        <translation>Input file is not set</translation>
+        <translation type="vanished">Input file is not set</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="113"/>
         <source>Output file is not set</source>
-        <translation>Output file is not set</translation>
+        <translation type="vanished">Output file is not set</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="117"/>
         <source>Copy %1 to %2</source>
-        <translation>Copy %1 to %2</translation>
+        <translation type="vanished">Copy %1 to %2</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="121"/>
         <source>Can not rename existing file '%1'</source>
-        <translation>Can not rename existing file '%1'</translation>
+        <translation type="vanished">Can not rename existing file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="127"/>
         <source>Error copying file</source>
-        <translation>Error copying file</translation>
+        <translation type="vanished">Error copying file</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="130"/>
         <source>File copying finished</source>
-        <translation>File copying finished</translation>
+        <translation type="vanished">File copying finished</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="135"/>
         <source>File copying task was finished with an error: %1</source>
-        <translation>File copying task was finished with an error: %1</translation>
+        <translation type="vanished">File copying task was finished with an error: %1</translation>
     </message>
     <message>
-        <location filename="../src/samtools/TabixSupportTask.cpp" line="137"/>
         <source>File copy was finished. Copy of '%1' is '%2'</source>
-        <translation>File copy was finished. Copy of '%1' is '%2'</translation>
+        <translation type="vanished">File copy was finished. Copy of '%1' is '%2'</translation>
     </message>
 </context>
 <context>
@@ -4484,90 +4744,99 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportPlugin</name>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="165"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="167"/>
         <source>Search tools in PATH</source>
         <translation>Search tools in PATH</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="212"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="214"/>
         <source>External tool support</source>
         <translation>Поддержка внешних инструментов</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="212"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="214"/>
         <source>Runs other external tools</source>
         <translation>Модуль позволяет использовать внешние программы</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="275"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="277"/>
         <source>Align with ClustalW...</source>
         <translation>Выравнивание с помощью ClustalW...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="283"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="285"/>
         <source>Align with ClustalO...</source>
         <translation>Выравнивание с помощью ClustalO...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="291"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="293"/>
         <source>Align with MAFFT...</source>
         <translation>Выравнивание с помощью MAFFT...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="299"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="301"/>
         <source>Align with T-Coffee...</source>
         <translation>Выравнивание с помощью T-Coffee...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="450"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="452"/>
         <source>BLAST make database...</source>
         <translation>Создание базы данных BLAST...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="454"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="456"/>
         <source>BLAST+ make database...</source>
         <translation>Создание базы данных BLAST+...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="472"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="468"/>
+        <source>Map reads to reference...</source>
+        <translation>Выравнивание прочтений на референсную последовательность...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="493"/>
+        <source>Reads de novo assembly (with %1)...</source>
+        <translation>Сборка прочтений de novo (при помощи %1)...</translation>
+    </message>
+    <message>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="478"/>
         <source>BLAST+ search...</source>
         <translation>Поиск с помощью BLAST+...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="482"/>
         <source>BLAST+ query database...</source>
         <translation>Запрос с помощью BLAST+...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="487"/>
         <source>Contig assembly with %1...</source>
-        <translation>Сборка контигов с помощью %1...</translation>
+        <translation type="vanished">Сборка контигов с помощью %1...</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="462"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="464"/>
         <source>BLAST search...</source>
         <translation>Поиск с помощью BLAST...</translation>
     </message>
     <message>
         <location filename="../src/ExternalToolSupportL10N.h" line="38"/>
-        <source>The subdirectory for temporary files '%1' already exists. Can not remove this directory!</source>
-        <translation>The subdirectory for temporary files '%1' already exists. Can not remove this directory!</translation>
+        <source>The subfolder for temporary files '%1' already exists. Can not remove this folder!</source>
+        <translation>The subfolder for temporary files '%1' already exists. Can not remove this folder!</translation>
     </message>
     <message>
         <location filename="../src/ExternalToolSupportL10N.h" line="43"/>
-        <source>Can not create a subdirectory for temporary files '%1'!</source>
-        <translation>Не удаётся создать директорию для временных файлов '%1'!</translation>
+        <source>Can not create a subfolder for temporary files '%1'!</source>
+        <translation>Не удаётся создать папку для временных файлов '%1'!</translation>
     </message>
 </context>
 <context>
     <name>U2::ExternalToolSupportService</name>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="651"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="676"/>
         <source>External tools support</source>
         <translation>Поддержка внешних инструментов</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportPlugin.cpp" line="651"/>
+        <location filename="../src/ExternalToolSupportPlugin.cpp" line="676"/>
         <source>Provides support to run external tools from UGENE</source>
         <translation>Позволяет запускать внешние инструменты из UGENE</translation>
     </message>
@@ -4575,7 +4844,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportSettingsPageController</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="52"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="46"/>
         <source>External Tools</source>
         <translation>Внешние инструменты</translation>
     </message>
@@ -4583,85 +4852,98 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::ExternalToolSupportSettingsPageWidget</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="469"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="463"/>
         <source>Select an external tool to view more information about it.</source>
         <translation>Выберите инструмент, чтобы увидеть дополнительную информацию о нем.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="470"/>
         <source>The <i>Basic Local Alignment Search Tool</i> (BLAST) finds regions of local similarity between sequences. The program compares nucleotide or protein sequences to sequence databases and calculates the statistical significance of matches. BLAST can be used to infer functional and evolutionary relationships between sequences as well as help identify members of gene families.</source>
         <translation>The <i>Basic Local Alignment Search Tool</i> (BLAST) ищет регионы локального сходства между последовательностями. Программа сравнивает нуклеотидные или белковые последовательности в базах данных последовательностей и вычисляет статистическую значимость совпадений. BLAST может использоваться для выявления функциональных и эволюционных взаимосвязей между последовательностями, а также для определения членов семейств гена.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="482"/>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="485"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="476"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="479"/>
         <source><i>BLAST+</i> is a new version of the BLAST package from the NCBI.</source>
         <translation><i>BLAST+</i> это новая версия пакета BLAST от NCBI.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="496"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="490"/>
         <source><i>Cufflinks</i> assembles transcripts, estimates their abundances, and tests for differential expression and regulation in RNA-Seq samples. It accepts aligned RNA-Seq reads and assembles the alignments into a parsimonious set of transcripts. It also estimates the relative abundances of these transcripts based on how many reads support each one, taking into account biases in library preparation protocols. </source>
         <translation><i>Cufflinks</i> собирает транскрипции и оценивает их распространенность. </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="504"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="498"/>
         <source><i>Bowtie 2</i> is an ultrafast and memory-efficient tool for aligning sequencing reads to long reference sequences. It is particularly good at aligning reads of about 50 up to 100s or 1000s of characters, and particularly good at aligning to relatively long (e.g. mammalian) genomes. <br/><br/>It indexes the genome with an FM index to keep its memory footprint small: for the human genome, its memory footprint is typically around 3.2Gb. <br/>& [...]
         <translation><i>Bowtie 2</i> один из самых быстрых и эффективных инструментов для выравнивания данных секвенирования на большие референсные последовательности. Особенно эффективно применение инструмента для выравнивания ридов начиная от 50 и до сотен и тысяч символов, и больших геномов (например млекопитающих).</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="513"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="507"/>
         <source><i>Cistrome</i> is a UGENE version of Cistrome pipeline which also includes some tools useful for ChIP-seq analysisThis pipeline is aimed to provide the following analysis steps: peak calling and annotating, motif search and gene ontology.</source>
         <translation><i>Cistrome</i> это версия UGENE пайплайна Cistrome, который включает некоторые инструменты, используемые в ChIP-seq анализе.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="364"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="358"/>
         <source>No description</source>
         <translation>Нет описания</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="327"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="321"/>
         <source>External tool '%1' cannot be validated as it depends on other tools, some of which are not valid. The list of tools is the following: </source>
         <translation>Инструмент '%1' не может быть проверен, т.к. он зависит от других инструментов, которые не проверены. Это следующие инструменты: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="351"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="345"/>
         <source>'%1' is %2 module and it is not installed. Install it and restart UGENE or set another %2 with already installed '%1' module.</source>
         <translation>'%1' это %2 модуль и он не установлен. Установите его и перезапустите UGENE или выберите другой %2 с уже установленным модулем '%1'.</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="374"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="368"/>
         <source><br><br>Version: </source>
         <translation><br><br>Версия: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="378"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="372"/>
         <source>unknown</source>
         <translation>неизвестный</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="383"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="377"/>
         <source><br><br>Binary path: </source>
         <translation><br><br>Путь: </translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="488"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="482"/>
         <source><i>Bowtie<i> is an ultrafast, memory-efficient short read aligner. It aligns short DNA sequences (reads) to the human genome at a rate of over 25 million 35-bp reads per hour. Bowtie indexes the genome with a Burrows-Wheeler index to keep its memory footprint small: typically about 2.2 GB for the human genome (2.9 GB for paired-end). <a href='http://qt-project.org/doc/qt-4.8/qtextbrowser.html#anchorClicked'>Link text</a> </source>
         <translation><i>Bowtie<i>один из самых быстрых и эффективных инструментов для выравнивания данных секвенирования на референсную последовательность. Так, например, он способен выравнивать короткие (35 нукл.) последовательности ДНК на геном человека со скоростью более 25 миллионов последовательностей / час. <a href='http://qt-project.org/doc/qt-4.8/qtextbrowser.html#anchorClicked'>Link text</a></translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="543"/>
-        <source>Choose Directory With Executables</source>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="537"/>
+        <source>Choose Folder With Executables</source>
         <translation>Выберите папку с исполняемыми файлами</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="598"/>
-        <source>Choose Directory With External Tools Pack</source>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="592"/>
+        <source>Choose Folder With External Tools Pack</source>
         <translation>Выберите папку пакетом внешних инструментов</translation>
     </message>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="651"/>
-        <source>Not a valid external tools directory</source>
-        <translation>Нет подходящей директории внешних инструментов</translation>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="645"/>
+        <source>Not a valid external tools folder</source>
+        <translation>Нет подходящей папки внешних инструментов</translation>
+    </message>
+</context>
+<context>
+    <name>U2::ExternalToolUtils</name>
+    <message>
+        <location filename="../src/utils/ExternalToolUtils.cpp" line="54"/>
+        <source>Paths for the following tools are not selected: %1.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/ExternalToolUtils.cpp" line="55"/>
+        <source>Do you want to select it now?</source>
+        <translation type="unfinished">Выбрать сейчас?</translation>
     </message>
 </context>
 <context>
@@ -4735,7 +5017,7 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/fastqc/FastqcTask.cpp" line="101"/>
-        <source>Directory does not exist: %1</source>
+        <source>Folder does not exist: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
@@ -4776,39 +5058,39 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::FormatDBSupportRunDialog</name>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="48"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="43"/>
         <source>Format</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="49"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="44"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="80"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="75"/>
         <source>Select file(s)</source>
         <translation>Выберите файл(ы)</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="103"/>
-        <source>Select a directory with input files</source>
-        <translation>Выберите директорию со входным файлом</translation>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="98"/>
+        <source>Select a folder with input files</source>
+        <translation>Выберите папку со входным файлом</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="114"/>
-        <source>Select a directory to save database files</source>
-        <translation>Выберите директорию для сохранения базы данных</translation>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="109"/>
+        <source>Select a folder to save database files</source>
+        <translation>Выберите папку для сохранения базы данных</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="126"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="132"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="121"/>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="127"/>
         <source>Input files paths contain space characters.</source>
         <translation>Путь до входных файлов содержат пробелы.</translation>
     </message>
     <message>
+        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="135"/>
         <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="140"/>
-        <location filename="../src/blast/FormatDBSupportRunDialog.cpp" line="145"/>
         <source>Output database path contain space characters.</source>
         <translation>Путь до выходного файла содержит пробелы.</translation>
     </message>
@@ -4816,165 +5098,238 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::FormatDBSupportTask</name>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="54"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="55"/>
         <source>Run NCBI FormatDB task</source>
         <translation>Run NCBI FormatDB task</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="146"/>
-        <source>Cannot create temp directory</source>
-        <translation type="unfinished"></translation>
-    </message>
-    <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="153"/>
-        <source>File '%1' was skipped. Cannot detect file format.</source>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="151"/>
+        <source>Cannot create temp folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="180"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="168"/>
         <source>Trying to initialize Format DB task second time</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="187"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="175"/>
         <source>Input files paths contain space characters.</source>
         <translation>Input files paths contain space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="204"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="192"/>
         <source>Output database path contain space characters.</source>
         <translation>Output database path contain space characters.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="105"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="103"/>
         <source>Blast database creation has been cancelled</source>
         <translation>Создание базы данных BLAST было отменено</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="95"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation type="unfinished">Can not remove directory for temporary files.</translation>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="93"/>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="112"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="110"/>
         <source>Blast database has been successfully created</source>
         <translation>База данных BLAST успешно создана</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="113"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="111"/>
         <source>Source sequences: </source>
         <translation>Исходные последовательности: </translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="121"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="119"/>
         <source>Database file path: %1</source>
         <translation>Путь до базы данных: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="123"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="121"/>
         <source>Type: %1</source>
         <translation>Тип: %1</translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="125"/>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="131"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="123"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="129"/>
         <source>Formatdb log file path: </source>
         <translation>Formatdb log file path: </translation>
     </message>
     <message>
-        <location filename="../src/blast/FormatDBSupportTask.cpp" line="129"/>
+        <location filename="../src/blast/FormatDBSupportTask.cpp" line="127"/>
         <source>Blast database creation has been failed</source>
         <translation>Создание базы данных BLAST завершилось неудачно</translation>
     </message>
 </context>
 <context>
-    <name>U2::Gene2PeakFormatLoader</name>
+    <name>U2::GTest_CompareHmmFiles</name>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="98"/>
-        <source>Incorrect start position at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="339"/>
+        <source>File #1 not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="102"/>
-        <source>Incorrect end position at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="345"/>
+        <source>File #2 not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="117"/>
-        <source>Incorrect NA value at line %1: '%2'</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="405"/>
+        <source>Error creating ioadapter for first file</source>
         <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>U2::GffreadSupportTask</name>
     <message>
-        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="34"/>
-        <source>Running Gffread task</source>
-        <translation>Running Gffread task</translation>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="409"/>
+        <source>Error opening 1 file</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="59"/>
-        <source>Unknown file format: %1</source>
-        <translation>Unknown file format: %1</translation>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="416"/>
+        <source>Error creating ioadapter for second file</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="68"/>
-        <source>The file format is not [%1]: %2</source>
-        <translation>The file format is not [%1]: %2</translation>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="420"/>
+        <source>Error opening second file</source>
+        <translation type="unfinished"></translation>
     </message>
-</context>
-<context>
-    <name>U2::HmmerAdvContext</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="304"/>
-        <source>Find HMM signals with HMMER3...</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="445"/>
+        <source>Names of aligments not matched</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="314"/>
-        <source>error</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="449"/>
+        <source>Comparing files length not matched</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="314"/>
-        <source>No sequence in focus found</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="456"/>
+        <source>Files parts not equal:'%1' and '%2'</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
 <context>
-    <name>U2::HmmerBuildDialog</name>
+    <name>U2::GTest_UHMM3SearchCompare</name>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="63"/>
-        <source>Build</source>
+        <location filename="../src/hmmer/HmmerSearchTaskTest.cpp" line="250"/>
+        <source>Can't parse significance:%1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="64"/>
-        <source>Cancel</source>
-        <translation type="unfinished">Отмена</translation>
-    </message>
-    <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="78"/>
-        <source>Select hmm file to create</source>
+        <location filename="../src/hmmer/HmmerSearchTaskTest.cpp" line="259"/>
+        <source>Internal error (cannot parse float number from string '%1')</source>
         <translation type="unfinished"></translation>
     </message>
+</context>
+<context>
+    <name>U2::GTest_UHMMER3Build</name>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="120"/>
-        <source>Select multiple alignment file</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="262"/>
+        <source>No input file given</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="185"/>
-        <source>input file is empty</source>
+        <location filename="../src/hmmer/HmmerBuildTaskTest.cpp" line="268"/>
+        <source>No output file given</source>
         <translation type="unfinished"></translation>
     </message>
-    <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="188"/>
-        <source>output hmm file is empty</source>
+</context>
+<context>
+    <name>U2::Gene2PeakFormatLoader</name>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="98"/>
+        <source>Incorrect start position at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="102"/>
+        <source>Incorrect end position at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/peak2gene/Gene2PeakFormatLoader.cpp" line="117"/>
+        <source>Incorrect NA value at line %1: '%2'</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::GffreadSupportTask</name>
+    <message>
+        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="34"/>
+        <source>Running Gffread task</source>
+        <translation>Running Gffread task</translation>
+    </message>
+    <message>
+        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="59"/>
+        <source>Unknown file format: %1</source>
+        <translation>Unknown file format: %1</translation>
+    </message>
+    <message>
+        <location filename="../src/cufflinks/GffreadSupportTask.cpp" line="68"/>
+        <source>The file format is not [%1]: %2</source>
+        <translation>The file format is not [%1]: %2</translation>
+    </message>
+</context>
+<context>
+    <name>U2::HmmerAdvContext</name>
+    <message>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="328"/>
+        <source>Find HMM signals with HMMER3...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="342"/>
+        <source>error</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Error</source>
+        <translation type="obsolete">Ошибка</translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="342"/>
+        <source>No sequence in focus found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::HmmerBuildDialog</name>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="70"/>
+        <source>Build</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="71"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="85"/>
+        <source>Select hmm file to create</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="127"/>
+        <source>Select multiple alignment file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="192"/>
+        <source>input file is empty</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="195"/>
+        <source>output hmm file is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="197"/>
+        <location filename="../src/hmmer/HmmerBuildDialog.cpp" line="204"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4995,18 +5350,18 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerBuildFromMsaTask</name>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="38"/>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="39"/>
         <source>Build HMMER profile from msa</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="45"/>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="46"/>
         <source>HMM profile URL is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="104"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/HmmerBuildFromMsaTask.cpp" line="105"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -5111,7 +5466,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerMsaEditorContext</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="261"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="285"/>
         <source>Build HMMER3 profile</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5127,47 +5482,47 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSearchDialog</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="57"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="70"/>
         <source>Run</source>
         <translation type="unfinished">Запустить</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="58"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="71"/>
         <source>Cancel</source>
         <translation type="unfinished">Отмена</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="161"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="174"/>
         <source>HMM profile is not set</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="167"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="180"/>
         <source>Settings are invalid</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="178"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="191"/>
         <source>Error</source>
         <translation type="unfinished">Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="178"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="191"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation type="unfinished">Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="186"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="199"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="234"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="250"/>
         <source>HMM profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="236"/>
+        <location filename="../src/hmmer/HmmerSearchDialog.cpp" line="252"/>
         <source>Select query HMM profile</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5175,47 +5530,47 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSearchTask</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="48"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="47"/>
         <source>HMMER search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="101"/>
         <source>HMM profile used: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="103"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="104"/>
         <source>Task was not finished</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="109"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="110"/>
         <source>Result annotation table: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="111"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="112"/>
         <source>Result annotation group: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="112"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="113"/>
         <source>Result annotation name: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="114"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="115"/>
         <source>Results count: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="146"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="147"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="194"/>
+        <location filename="../src/hmmer/HmmerSearchTask.cpp" line="195"/>
         <source>Unknown option controlling model-specific thresholding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5223,54 +5578,54 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::HmmerSupport</name>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="135"/>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="151"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="136"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="163"/>
         <source>Error!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="135"/>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="151"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="136"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="163"/>
         <source>Target sequence not selected: no opened annotated dna view</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="168"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="192"/>
         <source><i>HMMER build</i> constructs HMM profiles from multiple sequence alignments.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="172"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="196"/>
         <source>Build HMM3 profile...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="188"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="212"/>
         <source><i>HMMER search</i> searches profile(s) against a sequence database.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="192"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="216"/>
         <source>Search with HMMER3...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="208"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="232"/>
         <source><i>PHMMER search</i> searches a protein sequence against a protein database.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="212"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="236"/>
         <source>Search with phmmer...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="223"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="247"/>
         <source>Path for %1 tool not selected.</source>
         <translation type="unfinished">Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSupport.cpp" line="224"/>
+        <location filename="../src/hmmer/HmmerSupport.cpp" line="248"/>
         <source>Do you want to select it now?</source>
         <translation type="unfinished">Выбрать сейчас?</translation>
     </message>
@@ -5278,116 +5633,250 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::JavaSupport</name>
     <message>
-        <location filename="../src/java/JavaSupport.cpp" line="47"/>
+        <location filename="../src/java/JavaSupport.cpp" line="52"/>
         <source>Java Platform lets you develop and deploy Java applications on desktops and servers.<br><i>(Requires Java 1.7 or higher)</i>.<br>Java can be freely downloaded on the official web-site: https://www.java.com/en/download/</source>
         <translation>Java позволяет разрабатывать приложения Java на компьютерах и серверах <br> <i> (Требуется Java 1.7 или выше) </i> <br> Java можно свободно скачать на официальном веб-сайте:. HTTPS: / /www.java.com/en/download/</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastPrompter</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="86"/>
+        <source>Input sequence</source>
+        <translation type="unfinished">Входная последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="86"/>
+        <source>Input sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="87"/>
+        <source>Aligned data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="87"/>
+        <source>Aligned data.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="101"/>
+        <source>Reference URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="102"/>
+        <source>A URL to the file with a reference sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="105"/>
+        <source>Result alignment URL</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="106"/>
+        <source>An URL to write the result alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="109"/>
+        <source>Mapping min similarity</source>
+        <translation type="unfinished">Минимальное сходство при выравнивании</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="110"/>
+        <source>Reads, whose similarity with the reference is less than the stated value, will be ignored.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="113"/>
+        <source>Read name in result alignment</source>
+        <translation type="unfinished">Имя прочтения в выравнивании</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="114"/>
+        <source>Reads in the result alignment can be named either by names of the sequences in the input files or by the input files names. For example, if the sequences have the same name, set this value to "File name" to be able to distinguish the reads in the result alignment.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="161"/>
+        <source>unset</source>
+        <translation type="unfinished">не указан</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="164"/>
+        <source>Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastTask</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="259"/>
+        <source>Map to reference</source>
+        <translation>Выровнять на референсную последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="345"/>
+        <source>Details</source>
+        <translation>Детальная информация</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="346"/>
+        <source>Reference sequence:</source>
+        <translation>Референсная последовательность</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="347"/>
+        <source>Mapped reads (%1):</source>
+        <translation>Выровненные прочтения</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="351"/>
+        <source>similarity</source>
+        <translation>сходство</translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="356"/>
+        <source>Filtered by low similarity (%1):</source>
+        <translation>Прочтения, отфильтрованные из-за недостаточного сходства</translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::AlignToReferenceBlastWorker</name>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="135"/>
+        <source>Map to Reference</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="136"/>
+        <source>Align input sequences (e.g. Sanger reads) to the reference sequence.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/AlignToReferenceBlastWorker.cpp" line="230"/>
+        <source>The result file was not produced</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::BaseShortReadsAlignerWorker</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="240"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="253"/>
         <source>Not enough upstream reads datasets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="243"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="256"/>
         <source>Not enough downstream reads datasets</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="278"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="295"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="279"/>
-        <source>Directory to save output files.</source>
-        <translation>Директория для сохранения выходных файлов.</translation>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="296"/>
+        <source>Folder to save output files.</source>
+        <translation>Папка для сохранения выходных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="282"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="299"/>
         <source>Reference genome</source>
         <translation>Референсный геном</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="283"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="300"/>
         <source>Path to indexed reference genome.</source>
         <translation>Путь до индексированного референсного генома.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="286"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="303"/>
         <source>Library</source>
         <translation>Библиотека</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="287"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="304"/>
         <source>Is this library mate-paired?</source>
         <translation>Это парная библиотека?</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="290"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="307"/>
+        <source>Filter unpaired reads</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="308"/>
+        <source>Should the reads be checked for incomplete pairs?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="311"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="291"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="312"/>
         <source>Base name of the output file. 'out.sam' by default</source>
         <translation>Базовое имя для выходных файлов. По умолчанию 'out.sam'</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="323"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="350"/>
         <source>URL of a file with reads</source>
         <translation>Путь до файла с ридами</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="324"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="334"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="351"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="361"/>
         <source>Input reads to be aligned.</source>
         <translation>Входные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="326"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="353"/>
         <source>URL of a file with mate reads</source>
         <translation>Путь до файла с ридами</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="327"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="354"/>
         <source>Input mate reads to be aligned.</source>
         <translation>Входные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="333"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="360"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="337"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="364"/>
         <source>Reverse FASTQ file</source>
         <translation>Обратный FASTQ файл</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="338"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="365"/>
         <source>Reverse paired reads to be aligned.</source>
         <translation>Обратные парные риды будут выровнены.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="350"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
         <source>Assembly URL</source>
         <translation>Путь до сборки</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="351"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="378"/>
         <source>Output assembly URL.</source>
         <translation>Путь выходной сборки.</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="354"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="381"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="355"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="382"/>
         <source>Output assembly files.</source>
         <translation>Выходные файлы сборки.</translation>
     </message>
@@ -5395,17 +5884,17 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedGraphToBigWigPrompter</name>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="75"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="78"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="76"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="79"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="78"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="81"/>
         <source>Converts bedGraph files to bigWig %1 with bedGraphToBigWig.</source>
         <translation>Конвертирует файлы bedGraph в bigWig %1 при помощи bedGraphToBigWig.</translation>
     </message>
@@ -5413,113 +5902,113 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedGraphToBigWigWorker</name>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="95"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="98"/>
         <source>Convert bedGraph Files to bigWig</source>
         <translation>Преобразование файлов bedGraph в bigWig</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="96"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="99"/>
         <source>Convert bedGraph Files to bigWig.</source>
         <translation>Преобразование файлов bedGraph в bigWig.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="100"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="103"/>
         <source>BedGrapgh files</source>
         <translation>Файлы BedGrapgh</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="101"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="104"/>
         <source>Set of bedGraph files</source>
         <translation>Укажите bedGraph файлы</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="102"/>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="103"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="105"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="106"/>
         <source>BigWig files</source>
         <translation>BigWig файлы</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="117"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="120"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="118"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="121"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="122"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="125"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="123"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="126"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="125"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="128"/>
         <source>Output name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="126"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="129"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first BAM file with an extention.</source>
         <translation>Имя выходного файла. По умолчанию будет взято имя первого файла с соответствующим расширением.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="128"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="131"/>
         <source>Block size</source>
         <translation>Размер блока</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="129"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="132"/>
         <source>Number of items to bundle in r-tree (-blockSize).</source>
         <translation>Количество пунктов для объединения r-tree (-blockSize).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="131"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="134"/>
         <source>Items per slot</source>
         <translation>Пунктов на слот</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="132"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="135"/>
         <source>Number of data points bundled at lowest level (-itemsPerSlot).</source>
         <translation>Количество данных в комплекте на низком уровне (-itemsPerSlot).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="134"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="137"/>
         <source>Uncompressed</source>
         <translation>Не сжимать</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="135"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="138"/>
         <source>If set, do not use compression (-unc).</source>
         <translation>Если установлено, не используется сжатие (-unc).</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="137"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="140"/>
         <source>Genome</source>
         <translation>Геном</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="138"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="141"/>
         <source>File with genome length.</source>
         <translation>Файл с геномом.</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="170"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="173"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="168"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="171"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="169"/>
+        <location filename="../src/bigWigTools/BedGraphToBigWigWorker.cpp" line="172"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
@@ -5527,7 +6016,7 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedtoolsIntersectPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="992"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="995"/>
         <source>Intersect annotations from <u>%1</u> (<b>set A</b>) with annotations from <u>%2</u> (<b>set B</b>). Report </source>
         <translation>Пересечение аннотаций из <u>%1</u> (<b>набор A</b>) с аннотациями из <u>%2</u> (<b>набор B</b>). Отчет </translation>
     </message>
@@ -5535,68 +6024,68 @@ To save under other name press 'Cancel' and change name in 'Resul
 <context>
     <name>U2::LocalWorkflow::BedtoolsIntersectWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="881"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="884"/>
         <source>Data not found by %1 id</source>
         <translation>Data not found by %1 id</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="885"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="888"/>
         <source>Can not get annotation table object</source>
         <translation>Can not get annotation table object</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="899"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="902"/>
         <source>Annotations A</source>
         <translation>Аннотации A</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="904"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="907"/>
         <source>Annotations B</source>
         <translation>Аннотации B</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="909"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="912"/>
         <source>Annotations</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="909"/>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="925"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="912"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="928"/>
         <source>Result annotations</source>
         <translation>Выходные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="918"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="921"/>
         <source>Minimum overlap</source>
         <translation>Минимальное перекрытие</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="919"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="922"/>
         <source>Minimum overlap required as a fraction of an annotation from set A.<br/>By default, even 1 bp overlap between annotations from set A and set B is taken into account. Yet sometimes you may want to restrict reported overlaps to cases where the annotations in B overlaps at least X% (e.g. 50%) of the A annotation. </source>
         <translation>Минимальное пересечение, требуемое как фракция из набора A.<br/>По умолчанию, это свыше 1 нуклеотида пересечений между аннотациями из набора А и аннотациями набора В.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="926"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="929"/>
         <source>Select one of the following:<ul><li><i>Shared interval</i> to report intervals shared between overlapped annotations from set A and set B.</li><li><i>Overlapped annotations from A</i> to report annotations from set A that have an overlap with annotations from set B.</li><li><i>Non-overlapped annotations from A</i> to report annotations from set A that have NO overlap with annotations from set B.</l [...]
         <translation>Выберите одно из следующего:<ul><li><i>Общий интервал</i> включить в отчет общие интервалы пересекающихся аннотаций набора А и набора В.</li><li><i>Пересекающиеся аннотации из A</i> включить в отчетаннотации из набора A, которые имеют пересечения с аннотациями набора B.</li><li><i>Не пересекающиеся аннотации из набора А</i> включить в отчет аннотации из набора A, которые не пересекаются с аннотац [...]
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="938"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="941"/>
         <source>Unique overlaps</source>
         <translation>Уникальное перекрытие</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="939"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="942"/>
         <source>If the parameter value is "True", write original A entry once if any overlaps found in B. In other words, just report the fact at least one overlap was found in B.<br/>The minimum overlap number is ignored in this case.<br/><br/>If the parameter value is "False", the A annotation is reported for every overlap found.</source>
         <translation>Если значение параметра "Истина", запишется оригинальная запись А один раз, если есть какие-либо совпадения в В. Если значение параметра "Ложь", аннотация А сообщает о всех совпадениях.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="976"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="979"/>
         <source>Intersect Annotations</source>
         <translation>Пересечение аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="977"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="980"/>
         <source>Intersects two sets of annotations denoted as A and B.</source>
         <translation>Перечение двух наборов аннотаций, обозначенных как А и В.</translation>
     </message>
@@ -5713,13 +6202,13 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="112"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="113"/>
-        <source>Directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>Folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/blast/BlastAllWorker.cpp" line="115"/>
@@ -5879,8 +6368,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="110"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="112"/>
@@ -5954,8 +6443,8 @@ To save under other name press 'Cancel' and change name in 'Resul
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="111"/>
-        <source>Directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>Folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/blast_plus/BlastPlusWorker.cpp" line="117"/>
@@ -6348,188 +6837,192 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::BwaMemWorker</name>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="133"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="139"/>
         <source>Number of threads</source>
         <translation>Число потоков</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="134"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="140"/>
         <source>Number of threads (-t).</source>
-        <translation>Число потоков (-t).</translation>
+        <translation>число потоков (-t).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="137"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="143"/>
         <source>Min seed length</source>
         <translation>Минимальная длина затравки</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="138"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="144"/>
         <source>Path to indexed reference genome (-k).</source>
         <translation>Путь до индексированного референсного генома (-k).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="141"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="147"/>
         <source>Index algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="142"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="148"/>
         <source>Index algorithm (-a).</source>
         <translation>Алгоритм (-а).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="145"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="151"/>
         <source>Band width</source>
         <translation>Ширина полосы</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="146"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="152"/>
         <source>Band width for banded alignment (-w).</source>
         <translation>Ширина полосы для выравнивания (-w).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="149"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="155"/>
         <source>Dropoff</source>
         <translation>Снижение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="150"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="156"/>
         <source>Off-diagonal X-dropoff (-d).</source>
         <translation>Снижение (-d).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="153"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="159"/>
         <source>Internal seed length</source>
         <translation>Внутренняя длина затравки</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="154"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="160"/>
         <source>Look for internal seeds inside a seed longer than {-k} (-r).</source>
         <translation>Поиск внутренние затравки внутри затравки длиннее чем {-k} * (-r).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="157"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="163"/>
         <source>Skip seed threshold</source>
         <translation>Порог затравки</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="158"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="164"/>
         <source>Skip seeds with more than INT occurrences (-c).</source>
         <translation>Пропускает затравки с более чем с указанным количеством вхождений (-c).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="161"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="167"/>
         <source>Drop chain threshold</source>
         <translation>Порог снижения цепи</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="162"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="168"/>
         <source>Drop chains shorter than FLOAT fraction of the longest overlapping chain (-D).</source>
         <translation>Снижение цепи короче FLOAT фракции самого длинного перекрытия цепи (-D).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="165"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="171"/>
         <source>Rounds of mate rescues</source>
         <translation>Округление за освобождение участника</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="166"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="172"/>
         <source>Perform at most INT rounds of mate rescues for each read (-m).</source>
         <translation>Выполняет для большинства INT округлений освобождений участников для каждого рида (-m).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="169"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="175"/>
         <source>Skip mate rescue</source>
         <translation>Пропустить освобождение участника</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="170"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="176"/>
         <source>Skip mate rescue (-S).</source>
         <translation>Пропустить освобождение участника (-S).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="173"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="179"/>
         <source>Skip pairing</source>
         <translation>Пропустить спаривание</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="174"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="180"/>
         <source>Skip pairing; mate rescue performed unless -S also in use (-P).</source>
         <translation>Пропустить спаривание; участник освобождается кроме случая когда -S также используется (-P).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="177"/>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="181"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="183"/>
+        <source>Matching score</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="187"/>
         <source>Mismatch penalty</source>
         <translation>Штраф за несовпадение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="178"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="184"/>
         <source>Score for a sequence match (-A).</source>
         <translation>Вес совпадения (-A).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="182"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="188"/>
         <source>Penalty for a mismatch (-B).</source>
         <translation>Штраф за несовпадение (-B).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="185"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="191"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="186"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="192"/>
         <source>Gap open penalty (-O).</source>
         <translation>Штраф за открытие пробела (-O).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="189"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="195"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="190"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="196"/>
         <source>Gap extension penalty; a gap of size k cost {-O} (-E).</source>
         <translation>Штраф за расширение пробела; пробел размера k стоит {-O} (-E).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="193"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="199"/>
         <source>Penalty for clipping</source>
         <translation>Штраф за отсечение</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="194"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="200"/>
         <source>Penalty for clipping (-L).</source>
         <translation>Штраф за отсечение (-L).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="197"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="203"/>
         <source>Penalty unpaired</source>
         <translation>Штраф за непарные риды</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="198"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="204"/>
         <source>Penalty for an unpaired read pair (-U).</source>
         <translation>Штраф за непарные риды (-U).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="201"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="207"/>
         <source>Score threshold</source>
         <translation>Порог оценки</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="202"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="208"/>
         <source>Minimum score to output (-T).</source>
         <translation>Минимальная оценка для вывода (-T).</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="252"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="258"/>
         <source>Align Reads with BWA MEM</source>
         <translation>Выравнивание с помощью BWA MEM</translation>
     </message>
     <message>
-        <location filename="../src/bwa/BwaMemWorker.cpp" line="253"/>
+        <location filename="../src/bwa/BwaMemWorker.cpp" line="259"/>
         <source>Performs alignment of short reads with BWA MEM.</source>
         <translation>Выполняет выравнивание коротких ридов при помощи BWA MEM.</translation>
     </message>
@@ -6950,13 +7443,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="236"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="237"/>
-        <source>The directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/cap3/CAP3Worker.cpp" line="378"/>
@@ -7212,13 +7705,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="85"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="86"/>
-        <source>Directory to store temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>Folder to store temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/clustalo/ClustalOWorker.cpp" line="96"/>
@@ -7244,12 +7737,12 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::ClustalWPrompter</name>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="188"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="191"/>
         <source> from %1</source>
         <translation> из %1</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="189"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="192"/>
         <source>Aligns each MSA supplied <u>%1</u> with "<u>ClustalW</u>".</source>
         <translation>Выравнивает каждое MSA из <u>%1</u> при помощи "<u>ClustalW</u>".</translation>
     </message>
@@ -7257,152 +7750,152 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::ClustalWWorker</name>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="64"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="67"/>
         <source>Input MSA</source>
         <translation>Входное MSA</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="64"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="67"/>
         <source>Input MSA to process.</source>
         <translation>Входное выравнивание.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="65"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="68"/>
         <source>ClustalW result MSA</source>
         <translation>Выходное MSA</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="66"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="69"/>
         <source>The result of the ClustalW alignment.</source>
         <translation>Выходное выравнивание.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="75"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="78"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открывающий пропуск</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="76"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="79"/>
         <source>The penalty for opening a gap.</source>
         <translation>Штраф за открытие пробела.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="77"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="80"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="78"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="81"/>
         <source>The penalty for extending a gap.</source>
         <translation>Штраф за расширение пробел.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="79"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="82"/>
         <source>Gap distance</source>
         <translation>Расстояние пробела</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="80"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="83"/>
         <source>The gap separation penalty. Tries to decrease the chances of gaps being too close to each other.</source>
         <translation>Штраф за разделение пробела. Пытается уменьшить изменение пробелов располагая их близко друг к другу.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="81"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="84"/>
         <source>End gaps</source>
         <translation>Убрать пробел</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="82"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="85"/>
         <source>The penalty for closing a gap.</source>
         <translation>Штраф за закрытие пробела.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="83"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="86"/>
         <source>Residue-specific gaps off</source>
         <translation>Откл. спецефические для остатков пробелы</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="84"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="87"/>
         <source>Residue-specific penalties are amino specific gap penalties that reduce or increase the gap opening penalties at each position in the alignment.</source>
         <translation>Отключение спецефические для остатков пробелы - штрафы за специфические белковые остатки которые увеличивают или уменьшают штрафы за открытие пробела в каждой позиции.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="85"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="88"/>
         <source>Hydrophilic gaps off</source>
         <translation>Отключить гидрофильные пробелы</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="86"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="89"/>
         <source>Hydrophilic gap penalties are used to increase the chances of a gap within a run (5 or more residues) of hydrophilic amino acids.</source>
         <translation>Штрафы за гидрофильные пробелы используются для увеличения изменения пробела гидрофильных амино кислот.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="87"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="90"/>
         <source>Iteration type</source>
         <translation>Тип итераций</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="88"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="91"/>
         <source>Alignment improvement iteration type. Can take values: <p>                            <ul>                            <li>None - No iteration;</li>                            <li>Tree - Iteration at each step of alignment process;</li>                            <li>Alignment - Iteration only on final alignment.</li>                            </ul></source>
         <translation>Тип итераций. Возможные значения: <p>                            <ul>                            <li>Нет - нет итерации;</li>                            <li>Дерево - итерация на каждом шаге выравнивания;</li>                            <li>Выравнивание - итерация финального выравнивания.</li>                            </ul></translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="94"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="97"/>
         <source>Number of iterations</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="95"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="98"/>
         <source>The maximum number of iterations to perform.</source>
         <translation>Максимальное число итераций.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="96"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="99"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="110"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="113"/>
         <source>Tool path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="111"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="114"/>
         <source>Path to the ClustalW tool.<p>The default path can be set in the UGENE application settings.</source>
         <translation>Путь до ClustalW.<p>Значение по умолчанию может быть указано в диалоге настроек UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="115"/>
-        <source>Directory to store temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="118"/>
+        <source>Folder to store temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="130"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="133"/>
         <source>Aligns multiple sequence alignments (MSAs) supplied with ClustalW.<p>ClustalW is a general purpose multiple sequence alignment program for DNA or proteins.Visit <a href="http://www.clustal.org/">http://www.clustal.org/</a> to learn more about it.</source>
         <translation>Выравнивает множественные выравнивания (MSA) при помощи ClustalO.<p>ClustalO это программа для выравнивания белков или ДНК последовательностей. Посмотрите <a href="http://www.clustal.org/omega">http://www.clustal.org/</a> для большей информации.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="260"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="263"/>
         <source>An empty MSA '%1' has been supplied to ClustalW.</source>
         <translation>An empty MSA '%1' has been supplied to ClustalW.</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="114"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="117"/>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="97"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="100"/>
         <source>For proteins it is a scoring table which describes the similarity of each amino acid to each other and can take values: <p>                            <ul>                            <li>BLOSUM - Appear to be the best available for carrying out database similarity (homology searches).                            <li>PAM - Have been extremely widely used since the late '70s.                            <li>Gonnet - Derived using almost the  [...]
         <translation>Для белков это таблица подсчета оценок, которая описывает сходство каждой аминокислоты друг к другу, и может принимать значения: <p>                            <ul>                            <li>BLOSUM - для сравнения баз данных (поиск гомологий).                            <li>PAM - широко используется с конца 70х.                            <li>Gonnet - похож на PAM, начал использоваться немного позже.                            <l [...]
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="129"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="132"/>
         <source>Align with ClustalW</source>
         <translation>Выравнивание с помощью ClustalW</translation>
     </message>
     <message>
-        <location filename="../src/clustalw/ClustalWWorker.cpp" line="289"/>
+        <location filename="../src/clustalw/ClustalWWorker.cpp" line="292"/>
         <source>Aligned %1 with ClustalW</source>
         <translation>Aligned %1 with ClustalW</translation>
     </message>
@@ -7421,7 +7914,7 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="224"/>
-        <source> Outputs all result files to <u>%1</u> directory</source>
+        <source> Outputs all result files to <u>%1</u> folder</source>
         <translation>Записывает все выходные файлы в <u>%1</u></translation>
     </message>
 </context>
@@ -7449,13 +7942,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="155"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="156"/>
-        <source>The directory to store Conduct GO results.</source>
-        <translation>директория для сохранения выходных Conduct GO файлов.</translation>
+        <source>The folder to store Conduct GO results.</source>
+        <translation>Папка для сохранения выходных Conduct GO файлов.</translation>
     </message>
     <message>
         <location filename="../src/conduct_go/ConductGOWorker.cpp" line="158"/>
@@ -7570,8 +8063,8 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="209"/>
-        <source>The directory to store phastcons scores (--phasdb).</source>
-        <translation>Директория для сохранения оценок (--phasdb).</translation>
+        <source>The folder to store phastcons scores (--phasdb).</source>
+        <translation>Папка для сохранения оценок (--phasdb).</translation>
     </message>
     <message>
         <location filename="../src/conservation_plot/ConservationPlotWorker.cpp" line="211"/>
@@ -7627,14 +8120,19 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation>Поиск транскриптов с дифференциальной экспрессией с помощью Cuffdiff</translation>
     </message>
     <message>
+        <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="94"/>
+        <source>Cuffdiff takes a transcript file as input, along with two or more fragment alignments (e.g. in SAM format) for two or more samples. It produces a number of output files that contain test results for changes in expression at the level of transcripts, primary transcripts, and genes. It also tracks changes in the relative abundance of transcripts sharing a common transcription start site, and in the relative abundances of the primary transcripts of each gene. Tracking the fo [...]
+        <translation>Cuffdiff принимает на вход файл с транскриптами и два или более файла с выравниванием фрагментов (например, в формате SAM) для разных образцов. На выходе Cuffdiff предоставляет ряд файлов, содержащих результаты анализа изменений уровня экспрессии транскриптов, основных транскриптов и генов. Кроме того, Cuffdiff отмечает изменение относительного уровня транскриптов с общей точкой начала транскрипции и транскриптов одного гена. В первом случае это позволяет зафиксирова [...]
+    </message>
+    <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="107"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="108"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>Базовое имя для выходной директории.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>Базовое имя для выходной папки.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="111"/>
@@ -7644,47 +8142,47 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="112"/>
         <source>If set to <i>True</i>, instructs Cuffdiff to analyze the provided samples as a time series, rather than testing for differences between all pairs of samples. Samples should be provided in increasing time order.</source>
-        <translation>Если <i>Истина</i>, указывает Cuffdiff проанализировать предоставленные образцы как временные ряды, а не проверки различий между всеми парами образцов. Образцы должны быть представлены в порядке возрастания времени.</translation>
+        <translation>При выборе этой опции Cuffdiff будет анализировать предоставленные образцы как временные ряды, а не проверки различий между всеми парами образцов. Образцы должны быть представлены в порядке возрастания времени.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="118"/>
         <source>Upper quartile norm</source>
-        <translation>Верхний квартиль</translation>
+        <translation>Квартильная нормализация</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="119"/>
         <source>If set to <i>True</i>, normalizes by the upper quartile of the number of fragments mapping to individual loci instead of the total number of sequenced fragments. This can improve robustness of differential expression calls for less abundant genes and transcripts.</source>
-        <translation>Если <i>Истина</i>, нормируется верхней квартилью количества фрагментов отображения на отдельных локусах, а не от общего числа упорядоченных фрагментов. Это может улучшить надежность дифференциального выражения.</translation>
+        <translation>если выбран этот параметр, будет применена нормализация по верхнему квартилю числа фрагментов, выровненных на каждый локус, вместо общего числа отсеквенированных фрагментов. Это может увеличить надежность расчёта дифференциальной экспрессии для генов и транскриптов с невысокой экспрессией.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="125"/>
         <source>Hits norm</source>
-        <translation>Попытки</translation>
+        <translation>Нормализация по числу выровненных фрагментов</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="126"/>
         <source>Instructs how to count all fragments. <i>Total</i> specifies to count all fragments, including those not compatible with any reference transcript, towards the number of mapped fragments used in the FPKM denominator. <i>Compatible</i> specifies to use only compatible fragments. Selecting <i>Compatible</i> is generally recommended in Cuffdiff to reduce certain types of bias caused by differential amounts of ribosomal reads which can creat [...]
-        <translation>Показывает как считать все фрагменты. <i> Всего </i>рассчитывать все фрагменты, в том числе те, которые не совместимы с любым эталоном транскрипции, к числу отображаемых фрагментов, используемых в RPKM знаменателе. <i> Совместимость </i> указывает на необходимость использовать только совместимые фрагменты. Рекомендуется выбирать <i> Совместимость </i> в Cuffdiff, чтобы уменьшить определенные типы смещения, вызванные дифференциальны [...]
+        <translation>указывает, как считать все фрагменты. “Все”: рассчитывать отношение числах всех фрагментов, в том числе тех, которые не совместимы ни с одним референсным транскриптов, к числу выровненных фрагментов, в знаменателе формулы FPKM. “Совместимые”: использовать только совместимые фрагменты. Рекомендуется выбирать опцию “совместимые”, чтобы уменьшить определенные типы смещения, вызванные вариацией в количестве рибосомных ридов, которые могут создать впечатление ложной диффе [...]
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="135"/>
         <source>Frag bias correct</source>
-        <translation>Регулировка смещения</translation>
+        <translation>Корректировка смещения</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="136"/>
         <source>Providing the sequences your reads were mapped to instructs Cuffdiff to run bias detection and correction algorithm which can significantly improve accuracy of transcript abundance estimates.</source>
-        <translation>Обеспечение ридов, которые были отображены Cuffdiff для запуска проверки смещения и алгоритм коррекции, которые могут значительно улучшить точность оценок транскрипции.</translation>
+        <translation>при указании файла с  последовательностями в формате fasta Cufflinks с несколькими файлами запустит алгоритм обнаружения и коррекции смещения, который может значительно улучшить точность оценки обилия транскриптов.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="141"/>
         <source>Multi read correct</source>
-        <translation>Регулировка множественных ридов</translation>
+        <translation>Корректировка множественно выровненных ридов</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="142"/>
         <source>Do an initial estimation procedure to more accurately weight reads mapping to multiple locations in the genome.</source>
-        <translation>Начальная процедура оценки для более точного отображения веса ридов в нескольких местах в геноме.</translation>
+        <translation>указывает Cufflinks применить процедуру первичной оценки для более качественного присвоения веса ридам, выровенным на разные участки генома.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="146"/>
@@ -7703,8 +8201,8 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="151"/>
-        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
-        <translation>Игнорирует все риды, которые могли произойти от транскрипций в этом файле.</translation>
+        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts or other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
+        <translation>игнорирует все риды, которые могли произойти от транскриптов в этом файле. Рекомендуется включить в этот файл любые аннотированные последовательности рРНК, транскрипты митохондриального происхождения и другие транскрипты с высокой экспрессией, которые вы хотите игнорировать в своем анализе. В связи с различной эффективностью методов обогащения мРНК и уменьшения количества рРНК такая маскировка обычно улучшает общее качество оценки обильности транскриптов.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="159"/>
@@ -7714,7 +8212,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="160"/>
         <source>The minimum number of alignments in a locus for needed to conduct significance testing on changes in that locus observed between samples. If no testing is performed, changes in the locus are deemed not significant, and the locus' observed changes don't contribute to correction for multiple testing.</source>
-        <translation>Минимальное число выравниваний в локусе для тестирования значимости изменений в этом локусе наблюдаемом между образцами. Если тестирование не проводится, изменения не считаются существенными.</translation>
+        <translation>минимальное число выравниваний для локуса для тестирования значимости изменений в этом локусе, наблюдаемом между образцами. Если тестирование не проводится, изменения не считаются существенными и не влияют на процедуру поправки на множественные сравнения.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="167"/>
@@ -7724,27 +8222,27 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="168"/>
         <source>The allowed false discovery rate used in testing.</source>
-        <translation>Разрешенное число ложных открытий, используемых в тестировании.</translation>
+        <translation>верхний порог ложноположительных результатов (FDR) для анализа.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="171"/>
         <source>Max MLE iterations</source>
-        <translation>Количество MLE итераций</translation>
+        <translation>Количество итераций MLE</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="172"/>
         <source>Sets the number of iterations allowed during maximum likelihood estimation of abundances.</source>
-        <translation>Устанавливает количество итераций допустимое в течение оценки максимального правдоподобия численности.</translation>
+        <translation>устанавливает количество итераций, допустимое при оценки обилия транскрипта методом максимального правдоподобия.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="176"/>
         <source>Emit count tables</source>
-        <translation>Таблицы рассчетов</translation>
+        <translation>Выдавать таблицы расчетов</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="177"/>
         <source>Include information about the fragment counts, fragment count variances, and fitted variance model into the report.</source>
-        <translation>Включают в себя информацию о количестве фрагментов, отклонениях и встроенную модель вариаций.</translation>
+        <translation>включить в отчет информацию  о количестве фрагментов, разбросе этой величины и подобранные параметры дисперсионного анализа.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="181"/>
@@ -7758,13 +8256,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="185"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="186"/>
-        <source>The directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="206"/>
@@ -7856,13 +8354,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="143"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="144"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>базовое имя для выходной директории.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>базовое имя для выходной папки.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="147"/>
@@ -7901,7 +8399,7 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="167"/>
-        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
+        <source>Ignore all reads that could have come from transcripts in this file. It is recommended to include any annotated rRNA, mitochondrial transcripts or other abundant transcripts you wish to ignore in your analysis in this file. Due to variable efficiency of mRNA enrichment methods and rRNA depletion kits, masking these transcripts often improves the overall robustness of transcript abundance estimates.</source>
         <translation>игнорирует все риды, которые могли произойти от транскрипций в этом файле.</translation>
     </message>
     <message>
@@ -7937,12 +8435,12 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="195"/>
         <source>Pre-mRNA fraction</source>
-        <translation>Содержание Pre-mRNA</translation>
+        <translation>Содержание пре-мРНК</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="196"/>
         <source>Some RNA-Seq protocols produce a significant amount of reads that originate from incompletely spliced transcripts, and these reads can confound the assembly of fully spliced mRNAs. Cufflinks uses this parameter to filter out alignments that lie within the intronic intervals implied by the spliced alignments. The minimum depth of coverage in the intronic region covered by the alignment is divided by the number of spliced reads, and if the result is lower than this paramete [...]
-        <translation>Некоторые протоколы RNA-Seq производят значительное количество ридов, которые происходят из полностью соединенных транскрипций, и эти риды могут затруднить сборку мРНК. Cufflinks использует этот параметр, чтобы отфильтровать выравнивания, которые лежат в интронных интервалах. Минимальная глубина охвата в интронной области, охватываемой выравниванием разделена количеством ридов, и если результат ниже, чем значения этого параметра, интронные выравнивания игнорируются.< [...]
+        <translation>некоторые протоколы секвенирования РНК производят значительное количество ридов, которые происходят из не полностью сплайсированных транскриптов, и эти риды могут затруднить сборку послностью сплайсированных последовательностей мРНК. Cufflinks использует этот параметр, чтобы отфильтровать выравнивания внутри интронов, границы которых определяются по результатам выравнивания сплайсированных последовательностей. Минимальное покрытие в области интронов, присутствующее в [...]
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="206"/>
@@ -7956,13 +8454,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="210"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="211"/>
-        <source>The directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CufflinksWorker.cpp" line="339"/>
@@ -7980,17 +8478,17 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="64"/>
         <source>Cuffmerge merges together several assemblies. It also handles running Cuffcompare for you, and automatically filters a number of transfrags that are probably artifacts. If you have a reference file available, you can provide it to Cuffmerge in order to gracefully merge input (e.g. novel) isoforms and known isoforms and maximize overall assembly quality.</source>
-        <translation>Cuffmerge соединяет вместе несколько сборок. Он также работает как Cuffcompare и автоматически отфильтровывает артефакты.</translation>
+        <translation>Cuffmerge соединяет вместе несколько сборок, а также обеспечивает запуска Cuffcompare и автоматически отбрасывает ряд объединенных фрагментов, наиболее вероятно являющихся артефактами. При наличии файла с референсом вы можете указать его, и Cuffmerge объединит известные и новые изоформы, повысив качество итоговой сборки.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="74"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="75"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>Базовое имя для выходной директории.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>Базовое имя для выходной папки.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="78"/>
@@ -8000,7 +8498,7 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="79"/>
         <source>Merge the input assemblies together with this reference annotation.</source>
-        <translation>Соединяет входные сборки с этой референсной аннотацией.</translation>
+        <translation>объединить входные сборки с этой референсной аннотацией.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="83"/>
@@ -8010,17 +8508,17 @@ bowtie медленнее, когда указан режим --best.</translati
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="84"/>
         <source>The genomic DNA sequences for the reference. It is used to assist in classifying transfrags and excluding artifacts (e.g. repeats). For example, transcripts consisting mostly of lower-case bases are classified as repeats.</source>
-        <translation>ДНК последовательности для референса. Они используются например для исключения артефактов (например, повторов).</translation>
+        <translation>референсная последовательность ДНК. Она используется для классификации химерных фрагментов и исключения артефактов (например, повторов). Например, транскрипты, состоящие в основном из строчных символов будут признаны повторами.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="90"/>
         <source>Minimum isoform fraction</source>
-        <translation>Содержание изоформ</translation>
+        <translation>Минимальное содержание изоформы</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="91"/>
         <source>Discard isoforms with abundance below this.</source>
-        <translation>Отменить изоформы с обилием ниже этого.</translation>
+        <translation>не рассматривать изоформы с обилием ниже указанного уровня.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="94"/>
@@ -8044,13 +8542,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="102"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="103"/>
-        <source>The directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/cufflinks/CuffmergeWorker.cpp" line="117"/>
@@ -8077,30 +8575,30 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqPrompter</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="71"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="74"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="72"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="75"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="74"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="77"/>
         <source>Removes adapter sequences %1.</source>
-        <translation>Удаоляет переходные последовательности %1.</translation>
+        <translation>Удаляет переходные последовательности %1.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqTask</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="244"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="247"/>
         <source>Can not copy the result file to: %1</source>
         <translation>Can not copy the result file to: %1</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="279"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="282"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -8108,77 +8606,77 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::CutAdaptFastqWorker</name>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="92"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="95"/>
         <source>Cut Adapter</source>
         <translation>Удаление адаптеров</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="93"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="96"/>
         <source>Removes adapter sequences</source>
         <translation>Удаляет последовательности адаптеров</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="97"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="100"/>
         <source>Input File</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="98"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="101"/>
         <source>Set of FASTQ reads files</source>
         <translation>Набор ридов вормате FASTQ</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="99"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="102"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="100"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="103"/>
         <source>Output FASTQ file(s)</source>
         <translation>Выходные FASTQ файлы</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="113"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="116"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="114"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="117"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="118"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="121"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="119"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="122"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="121"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="124"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="122"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="125"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>Имя выходного файла. По умолчанию будет использовано имя первого файла с соответствующим расширением.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="124"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="127"/>
         <source>FASTA file with 3' adapters</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="125"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="128"/>
         <source>A FASTA file with one or multiple sequences of adapter that were ligated to the 3' end. The adapter itself and anything that follows is trimmed. If the adapter sequence ends with the '$' character, the adapter is anchored to the end of the read and only found if it is a suffix of the read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="131"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="134"/>
         <source>FASTA file with 5' adapters</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8195,32 +8693,32 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">FASTA файл с обратными адаптерами</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="132"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="135"/>
         <source>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end. If the adapter sequence starts with the character '^', the adapter is 'anchored'. An anchored adapter must appear in its entirety at the 5' end of the read (it is a prefix of the read). A non-anchored adapter may appear partially at the 5' end, or it may occur within the read. If it is found within a read, the sequence preceding the adapter is also t [...]
         <translation>FASTA файл с одним или несколькими адаптерами. Если адаптер начинается с символа '^', адаптер называется«якорь». Если будет найден такой адаптер в риде, последовательность предшествующая адаптеру также обрезается.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="143"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="146"/>
         <source>FASTA file with 5' and 3' adapters</source>
         <translation>FASTA файл с 5' и 3' концевыми адаптерами</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="144"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="147"/>
         <source>A FASTA file with one or multiple sequences of adapters that were ligated to the 5' end or 3' end.</source>
         <translation>FASTA файл с одним или несколькими адаптерами 5' или 3' концов.</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="173"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="176"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="174"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="177"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="175"/>
+        <location filename="../src/cutadapt/CutadaptWorker.cpp" line="178"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
@@ -8228,17 +8726,17 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::FastQCPrompter</name>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="76"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="78"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="77"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="79"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="79"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="81"/>
         <source>Builds FastQC report for file(s) %1.</source>
         <translation>Строит отчет FastQC для файлов %1.</translation>
     </message>
@@ -8246,77 +8744,77 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::FastQCWorker</name>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="86"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="88"/>
         <source>FastQC Quality Control</source>
         <translation>Контроль качества (FastQC)</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="87"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="89"/>
         <source>Builds quality control reports.</source>
-        <translation>Строит отчеты контроля качества.</translation>
+        <translation>этот элемент создаёт отчёты по результатам контроля качества.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="91"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="93"/>
         <source>Short reads</source>
         <translation>Короткие риды</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="92"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="94"/>
         <source>Short read data</source>
         <translation>Короткие риды</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="103"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="105"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="104"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="106"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="108"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="110"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="109"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="111"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="111"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="113"/>
         <source>List of adapters</source>
         <translation>Список адаптеров</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="112"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="114"/>
         <source>Specifies a non-default file which contains the list of adapter sequences which will be explicity searched against the library. The file must contain sets of named adapters in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</source>
-        <translation>Задает файл со списком адаптеров, которые будут найдены в библиотеке.</translation>
+        <translation>добавить произвольный файл со списком адаптеров, для которых будет проведён поиск в данных.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="117"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="119"/>
         <source>List of contaminants</source>
-        <translation>Список контаминантов</translation>
+        <translation>Список контаминирующих последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="118"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="120"/>
         <source>Specifies a non-default file which contains the list of contaminants to screen overrepresented sequences against. The file must contain sets of named contaminants in the form name[tab]sequence.  Lines prefixed with a hash will be ignored.</source>
-        <translation>Задает файл со списком контаминантов.</translation>
+        <translation>добавить произвольный файл со контаминирующих последовательностей, в которых будет проведён поиск сверхпредстваленных последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="138"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="140"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="139"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="141"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/fastqc/FastqcWorker.cpp" line="140"/>
+        <location filename="../src/fastqc/FastqcWorker.cpp" line="142"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
@@ -8324,17 +8822,17 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::GenomecovPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="456"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="459"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="457"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="460"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="460"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="463"/>
         <source>%1 from %2 with bedtool genomecov.</source>
         <translation>%1 из %2 с bedtool genomecov.</translation>
     </message>
@@ -8342,7 +8840,7 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::GenomecovTask</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="702"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="705"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -8350,82 +8848,82 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::GenomecovWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="477"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="480"/>
         <source>Genome Coverage</source>
         <translation>Расчет покрытия генома</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="478"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="481"/>
         <source>Calculates genome coverage using bedtools genomecov.</source>
         <translation>Рассчитывает покрытие генома при помощи bedtools genomecov.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="482"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="485"/>
         <source>Input File</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="483"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="486"/>
         <source>Set of files to NGS slop</source>
         <translation>Набор файлов для NGS</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="484"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="487"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="485"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="488"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="498"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="501"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="499"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="502"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="503"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="506"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="504"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="507"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="506"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="509"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="507"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="510"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>Имя выходного файла. По умолчанию будет использовано имя первого файла с соответствующим расширением.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="509"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="512"/>
         <source>Genome</source>
         <translation>Геном</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="510"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="513"/>
         <source>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize>. (-g)</source>
         <translation>Для того, чтобы предотвратить расширение интервалов за пределами границ хромосом, bedtools slop требует файл генома, определяющий длину каждой хромосомы или контига.Формат файла: <chromName> <TAB> <chromSize>. (-g)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="512"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="515"/>
         <source>Report mode</source>
         <translation>Режим отчета</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="513"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="516"/>
         <source><b>%1 (%2)</b> - %3 
 <b>%4 (%5)</b> - %6 
 <b>%7 (%8)</b> - %9 
@@ -8439,7 +8937,7 @@ bowtie медленнее, когда указан режим --best.</translati
 <b>%13 (%14)</b> - %15</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="525"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="528"/>
         <source>Split</source>
         <translation>Разделить</translation>
     </message>
@@ -8448,17 +8946,17 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">Определяет BAM или BED12 записи как различные BED промежутки когда вычисляется покрытие. (-split)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="528"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="531"/>
         <source>Strand</source>
         <translation>Прямой</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="529"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="532"/>
         <source>Calculate coverage of intervals from a specific strand. With BED files, requires at least 6 columns (strand is column 6). (-strand)</source>
         <translation>Рассчитывает покрытие Calculate coverage of intervals from a specific strand. With BED files, requires at least 6 columns (strand is column 6). (-strand)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="531"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="534"/>
         <source>5 prime</source>
         <translation>5 начало</translation>
     </message>
@@ -8467,7 +8965,7 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">Вычисляет покрытие позиций 5'. (-5)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="534"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="537"/>
         <source>3 prime</source>
         <translation>3 начало</translation>
     </message>
@@ -8476,72 +8974,72 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">Вычисляет покрытие позиций 3'. (-3)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="537"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="540"/>
         <source>Max</source>
         <translation>Макс</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="538"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="541"/>
         <source>Combine all positions with a depth >= max into a single bin in the histogram. (-max)</source>
         <translation>Смешивает все позиции с глубиной> = макс в одну ячейку на гистограмме. (-max)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="540"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="543"/>
         <source>Scale</source>
         <translation>Шкала</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="541"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="544"/>
         <source>Scale the coverage by a constant factor.Each coverage value is multiplied by this factor before being reported. Useful for normalizing coverage by, e.g., reads per million (RPM). Default is 1.0; i.e., unscaled. (-scale)</source>
-        <translation>Шкала покрытия. (-scale)</translation>
+        <translation>шкалировать покрытие с учётом постоянного фактора. Каждое значение покрытия будет умножено на этот фактор. Применима для расчёта нормализованного покрытия, например, числа ридов на миллион (RPM). Значение по умолчанию — 1 (без масштабирования). (Параметр -scale)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="543"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="546"/>
         <source>Trackline</source>
-        <translation>Линия следа</translation>
+        <translation>Трэк</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="544"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="547"/>
         <source>Adds a UCSC/Genome-Browser track line definition in the first line of the output. (-trackline)</source>
-        <translation>Добавляет линию следа UCSC/Genome-Browser в первую линию выходного файла. (-trackline)</translation>
+        <translation>добавляет определение трэка  UCSC Genome Browser в первую строку выходного файла. (Параметр -trackline)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="546"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="549"/>
         <source>Trackopts</source>
         <translation>След</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="547"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="550"/>
         <source>Writes additional track line definition parameters in the first line. (-trackopts)</source>
         <translation>Записывает дополнительную линию следа в первую линию. (-trackopts)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="584"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="587"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="582"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="585"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="526"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="529"/>
         <source>Treat “split” BAM or BED12 entries as distinct BED intervals when computing coverage. For BAM files, this uses the CIGAR “N” and “D” operations to infer the blocks for computing coverage. For BED12 files, this uses the BlockCount, BlockStarts, and BlockEnds fields (i.e., columns 10,11,12). (-split)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="532"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="535"/>
         <source>Calculate coverage of 5’ positions (instead of entire interval). (-5)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="535"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="538"/>
         <source>Calculate coverage of 3’ positions (instead of entire interval). (-3)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="583"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="586"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
@@ -8623,17 +9121,17 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::HmmerSearchPrompter</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="188"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="189"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="189"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="190"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="193"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="194"/>
         <source>%1 search HMMER signals %2. <br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8641,117 +9139,117 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::HmmerSearchWorker</name>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="80"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="81"/>
         <source>Filter by</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="81"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
         <source>Parameter to filter results by.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
         <source>HMMER profile</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="82"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
         <source>HMMER profile(s) URL(s) to search with.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="83"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="84"/>
         <source>Input sequence</source>
         <translation type="unfinished">Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="84"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="85"/>
         <source>An input sequence (nucleotide or protein) to search in.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="85"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="86"/>
         <source>HMMER annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="86"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="87"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="98"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
         <source>Result annotation</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="98"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
         <source>A name of the result annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
         <source>Seed</source>
         <translation type="unfinished">Затравка</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="99"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
         <source>Random generator seed. 0 - means that one-time arbitrary seed will be used.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
         <source>Filter by high E-value</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="100"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
         <source>Report domains with e-value less than.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="102"/>
         <source>Filter by low score</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="101"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="102"/>
         <source>Report domains with score greater than.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="118"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="119"/>
         <source>HMM3 Search</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="119"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="120"/>
         <source>Searches each input sequence for significantly similar sequence matches to all specified HMM profiles. In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="159"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="160"/>
         <source>HMMER3 Tools</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="238"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="239"/>
         <source>Value for attribute name is empty, default name used</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="289"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="290"/>
         <source>Find HMMER signals in %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="294"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="295"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="323"/>
+        <location filename="../src/hmmer/HmmerSearchWorker.cpp" line="324"/>
         <source>Found %1 HMMER signals</source>
         <translation type="unfinished"></translation>
     </message>
@@ -8780,7 +9278,7 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="585"/>
-        <source> Outputs all files to <u>%1</u> directory</source>
+        <source> Outputs all files to <u>%1</u> folder</source>
         <translation> Сохраняет все выходные файлы в<u>%1</u></translation>
     </message>
     <message>
@@ -8878,13 +9376,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="318"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="319"/>
-        <source>Directory to save MACS output files.</source>
-        <translation>Директория для сохранения выходных файлов MACS.</translation>
+        <source>Folder to save MACS output files.</source>
+        <translation>Папка для сохранения выходных файлов MACS.</translation>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="321"/>
@@ -9132,12 +9630,12 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::MAFFTPrompter</name>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="129"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="130"/>
         <source> from %1</source>
         <translation> из %1</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="131"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="132"/>
         <source>Aligns each MSA supplied <u>%1</u> with <u>"MAFFT"</u>.</source>
         <translation>Выравнивает каждое MSA из <u>%1</u> при помощи "<u>MAFFT</u>".</translation>
     </message>
@@ -9145,92 +9643,92 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::MAFFTWorker</name>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="60"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="61"/>
         <source>Input MSA</source>
         <translation>Входное MSA</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="61"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Множественное выравнивание, которое будет обработано.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="63"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="62"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="63"/>
         <source>Result of alignment.</source>
         <translation>Результат выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="71"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="72"/>
         <source>Gap Open Penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="72"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="73"/>
         <source>Gap Open Penalty.</source>
         <translation>Штраф за открытие пробела.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="73"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="74"/>
         <source>Offset</source>
         <translation>Смещение</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="74"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="75"/>
         <source>Works like gap extension penalty.</source>
         <translation>Работает как штраф за расширение пробела.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="76"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="77"/>
         <source>Maximum number of iterative refinement.</source>
         <translation>Максимальное число итерационных уточнений.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="78"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="79"/>
         <source>External tool path.</source>
         <translation>Путь до внешнего инструмента.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="80"/>
-        <source>Directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="81"/>
+        <source>Folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="173"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="174"/>
         <source>An empty MSA '%1' has been supplied to MAFFT.</source>
         <translation>An empty MSA '%1' has been supplied to MAFFT.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="75"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="76"/>
         <source>Max Iteration</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="77"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="78"/>
         <source>Tool Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="79"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="80"/>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="88"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="89"/>
         <source>Align with MAFFT</source>
         <translation>Выравнивание с помощью MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="202"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="203"/>
         <source>Aligned %1 with MAFFT</source>
         <translation>Aligned %1 with MAFFT</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTWorker.cpp" line="89"/>
+        <location filename="../src/mafft/MAFFTWorker.cpp" line="90"/>
         <source>MAFFT is a multiple sequence alignment program for unix-like operating systems. <p><dfn>It offers a range of multiple alignment methods, L-INS-i (accurate; for alignment of &lt;&#126;200 sequences), FFT-NS-2 (fast; for alignment of &lt;&#126;10,000 sequences), etc. </dfn></p></source>
         <translation>MAFFT - это программа для выравнивания последовательностей для Unix-подобных операционных систем. <p><dfn>MAFFT предлагает широкий выбор методов выравнивания, L-INS-i (точно; для выравнивания около 200 последовательностей),  FFT-NS-2 (быстро; для выравнивания около 10.000 последовательностей).</dfn></p></translation>
     </message>
@@ -9418,7 +9916,7 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="367"/>
-        <source> Outputs all result files to <u>%1</u> directory</source>
+        <source> Outputs all result files to <u>%1</u> folder</source>
         <translation>Записывает все выходные файлы в <u>%1</u></translation>
     </message>
 </context>
@@ -9447,13 +9945,13 @@ bowtie медленнее, когда указан режим --best.</translati
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="247"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="248"/>
-        <source>The directory to store seqpos results.</source>
-        <translation>Директория для сохранения результатов seqpos.</translation>
+        <source>The folder to store seqpos results.</source>
+        <translation>Папка для сохранения результатов seqpos.</translation>
     </message>
     <message>
         <location filename="../src/seqpos/SeqPosWorker.cpp" line="250"/>
@@ -9524,22 +10022,22 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::ShortReadsAlignerPrompter</name>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="371"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="398"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="377"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="404"/>
         <source>Aligns upstream oriented reads from <u>%1</u> and downstream oriented reads from <u>%2</u> </source>
         <translation>Выравнивает верховые риды из <u>%1</u> и низовые риды из <u>%2</u> </translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="379"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="406"/>
         <source>Aligns reads from <u>%1</u> </source>
         <translation>Выравнивает риды из <u>%1</u> </translation>
     </message>
     <message>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="383"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="410"/>
         <source> to reference genome <u>%1</u>.</source>
         <translation> на референсный геном <u>%1</u>.</translation>
     </message>
@@ -9547,17 +10045,17 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::SlopbedPrompter</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="69"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="72"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="70"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="73"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="72"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="75"/>
         <source>Increases the size of each feature in files from %1 with bedtool slop.</source>
         <translation>Увеличивает размер каждого элемента в файлах из%1 при помощи bedtools.</translation>
     </message>
@@ -9565,117 +10063,117 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::SlopbedWorker</name>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="89"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="92"/>
         <source>slopBed</source>
         <translation>Продление аннотаций (slopBed)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="90"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="93"/>
         <source>Increases the size of each feature in files using bedtools slop.</source>
         <translation>Увеличивает размер каждой аннотации в файлах при помощи bedtools slop.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="94"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="97"/>
         <source>Input File</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="95"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="98"/>
         <source>Set of files to bedtools slop</source>
         <translation>Набор файлов для bedtools slop</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="96"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="99"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="97"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="100"/>
         <source>Output file</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="110"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="113"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="111"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="114"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="115"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="118"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="116"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="119"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="118"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="121"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="119"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="122"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>Имя выходного файла. По умолчанию будет использовано имя первого файла с соответствующим расширением.</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="121"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="124"/>
         <source>Genome</source>
         <translation>Геном</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="122"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="125"/>
         <source>In order to prevent the extension of intervals beyond chromosome boundaries, bedtools slop requires a genome file defining the length of each chromosome or contig. The format of the file is: <chromName><TAB><chromSize> (-g).</source>
         <translation>Для того, чтобы предотвратить расширение интервалов за пределами границ хромосом, для bedtools slopотстойный требуется файл генома, определяющий длину каждой хромосомы или контига. Формат файла: <chromName> <TAB> <chromSize> (-g).</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="124"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="127"/>
         <source>Each direction increase</source>
         <translation>Увеличение каждого направления</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="125"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="128"/>
         <source>Increase the BED/GFF/VCF entry by the same number base pairs in each direction. If this parameter is used -l and -l are ignored. Enter 0 to disable. (-b)</source>
         <translation>Увеличивает BED/ GFF / VCF на одинаковое число пар оснований в каждом направлении. Если этот параметр используется -l и -l игнорируются. Введите 0 для отключения. (-b)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="127"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="130"/>
         <source>Substract from start</source>
         <translation>Вычесть из начала</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="128"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="131"/>
         <source>The number of base pairs to subtract from the start coordinate. Enter 0 to disable. (-l)</source>
         <translation>Число пар основания, которое нужно вычесть, начиная от стартовой координаты. Введите 0 для отключения. (-l)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="130"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="133"/>
         <source>Add to end</source>
         <translation>Добавить в конец</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="131"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="134"/>
         <source>The number of base pairs to add to the end coordinate. Enter 0 to disable. (-r)</source>
         <translation>Число пар основания для добавления в конец. Введите 0 для отключения. (-r)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="133"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="136"/>
         <source>Strand-based</source>
         <translation>На основе цепи</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="134"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="137"/>
         <source>Define -l and -r based on strand. For example. if used, -l 500 for a negative-stranded feature, it will add 500 bp to the end coordinate. (-s)</source>
         <translation>Определяет -l и -r на основе цепи. (-s)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="136"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="139"/>
         <source>As fraction</source>
         <translation>Как доля</translation>
     </message>
@@ -9684,60 +10182,92 @@ bowtie медленнее, когда указан режим --best.</translati
         <translation type="vanished">Определяет -l и -r как долю от длины аннотации. (-pct)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="139"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="142"/>
         <source>Print header</source>
         <translation>Вывести заголовок</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="140"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="143"/>
         <source>Print the header from the input file prior to results. (-header)</source>
         <translation>Вывести заголовок из входного файла в результат. (-header)</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="142"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="145"/>
         <source>Filter start>end fields</source>
         <translation>Фильтровать области начало>конец</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="143"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="146"/>
         <source>Remove lines with start postion greater than end position</source>
         <translation>Удаляет линии, в которых стартовая позиция больши конечной позиции</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="179"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="182"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="177"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="180"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="137"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="140"/>
         <source>Define -l and -r as a fraction of the feature’s length. E.g. if used on a 1000bp feature, -l 0.50, will add 500 bp “upstream”. (-pct)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="178"/>
+        <location filename="../src/bedtools/BedToolsWorkersLibrary.cpp" line="181"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::SnpEffDatabaseDialog</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="49"/>
+        <source>Select</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="50"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::SnpEffDatabasePropertyWidget</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="88"/>
+        <source>Select genome</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="118"/>
+        <source>The list of %1 genomes is not available.
+Path for %1 tool is not selected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseDelegate.cpp" line="119"/>
+        <source>Do you want to select it now?</source>
+        <translation type="unfinished">Выбрать сейчас?</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::SnpEffPrompter</name>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="85"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="87"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="86"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="88"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="88"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="90"/>
         <source>Annotates and filters variations %1 with SnpEff.</source>
         <translation>Аннотирует и фильтрует вариации %1 при помощи SnpEff.</translation>
     </message>
@@ -9745,143 +10275,143 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::SnpEffWorker</name>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="95"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="97"/>
         <source>SnpEff Annotation and Filtration</source>
         <translation>Аннотация и фильтрация с помощью SnpEff</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="96"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="98"/>
         <source>Annotates and filters variations with SnpEff.</source>
         <translation>этот элемент аннотирует и фильтрует вариации при помощи SnpEff.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="100"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="102"/>
         <source>Variations</source>
         <translation>Вариации</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="101"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="103"/>
         <source>Set of variations</source>
         <translation>Набор вариаций</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="102"/>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="103"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="104"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="105"/>
         <source>Annotated variations</source>
         <translation>Аннотированные вариации</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="117"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="119"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="118"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="120"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="122"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="124"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="123"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="125"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="125"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="127"/>
         <source>Input format</source>
         <translation>Входной формат</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="126"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="128"/>
         <source>Select the input format of variations.</source>
         <translation>выберите входной формат вариаций.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="128"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="130"/>
         <source>Output format</source>
         <translation>Выходной формат</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="129"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="131"/>
         <source>Select the format of annotated output files.</source>
         <translation>выберите формат выходных аннотированных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="131"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="133"/>
         <source>Genome</source>
         <translation>Геном</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="132"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="134"/>
         <source>Select the target genome. Genome data will be downloaded if it is not found.</source>
         <translation>выберите референсный геном. Если он не найден, данные генома будут загружены из сети Интернет.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="134"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="136"/>
         <source>Upstream/downstream length</source>
         <translation>Верхняя/нижняя длина</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="135"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="137"/>
         <source>Upstream and downstream interval size. Eliminate any upstream and downstream effect by using 0 length</source>
         <translation>верхний и нижний размеры интервала.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="137"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="139"/>
         <source>Canonical transcripts</source>
         <translation>Канонические транскрипты</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="138"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="140"/>
         <source>Use only canonical transcripts</source>
         <translation>использовать только канонические транскрипты.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="140"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="142"/>
         <source>HGVS nomenclature</source>
         <translation>Номенклатура HGVS</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="141"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="143"/>
         <source>Annotate using HGVS nomenclature</source>
         <translation>аннотировать при помощи номенклатуры HGVS.</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="143"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="145"/>
         <source>Annotate Loss of function variations</source>
         <translation>Аннотировать варианты loss of function</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="144"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="146"/>
         <source>Annotate Loss of function variations (LOF) and Nonsense mediated decay (NMD)</source>
         <translation>аннотирует варианты, связанные с потерей функции (loss of function) и изменением деградации, связанной с преждевременным стоп-кодоном (NMD).</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="146"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="148"/>
         <source>Annotate TFBSs motifs</source>
         <translation>Аннотировать мотивы TFBS</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="147"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="149"/>
         <source>Annotate transcription factor binding site motifs (only available for latest GRCh37)</source>
         <translation>аннотирует сайты связывания транскрипционных факторов (опция доступна только для последней версии сборки GRCh37).</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="169"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="171"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="170"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="172"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffWorker.cpp" line="171"/>
+        <location filename="../src/snpeff/SnpEffWorker.cpp" line="173"/>
         <source>Custom</source>
         <translation>Частный</translation>
     </message>
@@ -9889,12 +10419,12 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::SpadesPrompter</name>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="341"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="342"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="344"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="345"/>
         <source>Assemble reads from <u>%1</u>.</source>
         <translation>Собирает риды из <u>%1</u>.</translation>
     </message>
@@ -9902,127 +10432,131 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::SpadesWorker</name>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="215"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="216"/>
         <source>SPAdes cannot recognize read pairs from the same file. Please, perform demultiplexing first.</source>
         <translation>SPAdes cannot recognize read pairs from the same file. Please, perform demultiplexing first.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="229"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="230"/>
         <source>URL of a file with reads</source>
         <translation>Путь до файла с ридами</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="230"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="231"/>
         <source>Input reads to be assembled.</source>
         <translation>Входные риды будут собраны.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="232"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="233"/>
         <source>URL of a file with right pair reads</source>
         <translation>Путь до файла с ридами правой пары</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="233"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="234"/>
         <source>Input right pair reads to be assembled.</source>
         <translation>Выходные риды правой пары будут собраны.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="239"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="240"/>
         <source>SPAdes data</source>
         <translation>Данные SPAdes</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="240"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="241"/>
         <source>Input reads to be assembled with Spades.</source>
         <translation>Входные риды будут собраны при помощи Spades.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="248"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="249"/>
         <source>Scaffolds URL</source>
         <translation>Путь до Scaffolds</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="249"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="250"/>
         <source>Output scaffolds URL.</source>
         <translation>Путь до выходногог scaffolds.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="252"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="253"/>
         <source>SPAdes output data</source>
         <translation>Выходные данные SPAdes</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="253"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="254"/>
         <source>Output assembly files.</source>
         <translation>Выходные файлы сборки.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="264"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/spades/SpadesWorker.cpp" line="265"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="265"/>
-        <source>Directory to save Spades output files.</source>
-        <translation>Директория для сохранения выходных файлов Spades.</translation>
+        <location filename="../src/spades/SpadesWorker.cpp" line="266"/>
+        <source>Folder to save Spades output files.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>folder to save Spades output files.</source>
+        <translation type="vanished">Папка для сохранения выходных файлов Spades.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="268"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="269"/>
         <source>Number of threads</source>
         <translation>Число потоков</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="269"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="270"/>
         <source>Number of threads (-t).</source>
-        <translation>Число потоков (-t).</translation>
+        <translation>число потоков (-t).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="272"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="273"/>
         <source>Memory limit (GB)</source>
         <translation>Предел памяти (GB)</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="273"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="274"/>
         <source>Memory limit (-m).</source>
         <translation>Предел памяти (-m).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="276"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="277"/>
         <source>Dataset type</source>
         <translation>Тип набора данных</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="277"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="278"/>
         <source>Input dataset type.</source>
         <translation>Тип входного набора данных.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="280"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="281"/>
         <source>Running mode</source>
         <translation>Режим запуска</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="281"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="282"/>
         <source>Running mode.</source>
-        <translation>Режим запуска.</translation>
+        <translation>режим запуска.</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="284"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="285"/>
         <source>K-mers</source>
         <translation>K-mers</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="285"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="286"/>
         <source>k-mer sizes (-k).</source>
         <translation>Размеры k-mer (-k).</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="320"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="321"/>
         <source>Assemble genomes with SPAdes</source>
         <translation>Сборка геномов с помощью SPAdes</translation>
     </message>
     <message>
-        <location filename="../src/spades/SpadesWorker.cpp" line="321"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="322"/>
         <source>Performes assembly of input short reads.</source>
         <translation>Производит сборку входных коротких ридов.</translation>
     </message>
@@ -10030,12 +10564,12 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::TCoffeePrompter</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="125"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="127"/>
         <source> from %1</source>
         <translation> из %1</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="127"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="129"/>
         <source>For each MSA<u>%1</u>, build the alignment using <u>"T-Coffee"</u> and send it to output.</source>
         <translation>Для каждого MSA<u>%1</u>, строится выравнивание при помощи <u>"T-Coffee"</u>.</translation>
     </message>
@@ -10043,92 +10577,96 @@ bowtie медленнее, когда указан режим --best.</translati
 <context>
     <name>U2::LocalWorkflow::TCoffeeWorker</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="59"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="61"/>
         <source>Input MSA</source>
         <translation>Входное MSA</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="59"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="61"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Множественное выравнивание, которое будет обработано.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="60"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="62"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="60"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="62"/>
         <source>Result of alignment.</source>
         <translation>Результат выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="69"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="71"/>
         <source>Gap Open Penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="70"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="72"/>
         <source>Gap Open Penalty. Must be negative, best matches get a score of 1000.</source>
         <translation>Штраф за открытие пробела. Должно быть отрицательным, лучшие совпадения оцениваются в 1000.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="71"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="73"/>
         <source>Gap Extension Penalty</source>
         <translation>Штраф за расширение пробела</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="72"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="74"/>
         <source>Gap Extension Penalty. Positive values give rewards to gaps and prevent the alignment of unrelated segments.</source>
         <translation>Штраф за расширение пробела. Положительные значения дают дополнительные очки для пробелов и предотвращают выравнивание не связанных между собой сегментов.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="73"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="75"/>
         <source>Max Iteration</source>
         <translation>Количество итераций</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="74"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="76"/>
         <source>Number of iteration on the progressive alignment.<br>0 - no iteration, -1 - Nseq iterations.</source>
         <translation>Число итераций.<br>0 - нет итераций, -1 - итераций Nseq.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="76"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="78"/>
         <source>Tool Path</source>
         <translation>Путь</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="77"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="79"/>
         <source>External tool path.</source>
         <translation>Путь до внешнего инструмента.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="79"/>
-        <source>Directory for temporary file.s</source>
-        <translation>Директория для временных файлов</translation>
+        <source>Folder for temporary file.s</source>
+        <translation type="vanished">Папка для временных файлов</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="170"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="172"/>
         <source>An empty MSA '%1' has been supplied to T-Coffee.</source>
         <translation>An empty MSA '%1' has been supplied to T-Coffee.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="78"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="80"/>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="87"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="81"/>
+        <source>folder for temporary file.s</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="89"/>
         <source>Align with T-Coffee</source>
         <translation>Выравнивание с помощью T-Coffee</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="88"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="90"/>
         <source>T-Coffee is a multiple sequence alignment package. </source>
         <translation><i>T-Coffee</i> это пакет для множественного выравнивания. </translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="202"/>
+        <location filename="../src/tcoffee/TCoffeeWorker.cpp" line="204"/>
         <source>Aligned %1 with T-Coffee</source>
         <translation>Aligned %1 with T-Coffee</translation>
     </message>
@@ -10235,42 +10773,42 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="183"/>
         <source>Find Splice Junctions with TopHat</source>
-        <translation>Поиск сплайсинга с помощью TopHat</translation>
+        <translation>Поиск сайтов сплайсинга с помощью TopHat</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="184"/>
         <source>TopHat is a fast splice junction mapper for RNA-Seq reads. It aligns RNA-Seq reads to mammalian-sized genomes using the ultra high-throughput short read aligner Bowtie, and then analyzes the mapping results to identify splice junctions between exons.</source>
-        <translation>TopHat является быстрым инструментом для определения сплайсинга для ридов RNA-Seq. TopHat выравнивает RNA-Seq риды используя Bowtie, и потом анализирует результаты для определения сплайсинга между экзонами.</translation>
+        <translation>TopHat является быстрым инструментом для определения сплайсинга по данным секвенирования РНК. TopHat выравнивает риды с помощью Bowtie и затем анализирует результаты выравнивания для определения границ экзонов.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="192"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="193"/>
-        <source>The base name of output directory. It could be modified with a suffix.</source>
-        <translation>Базовое имя для выходной директории.</translation>
+        <source>The base name of output folder. It could be modified with a suffix.</source>
+        <translation>Базовое имя для выходной папки.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="196"/>
         <source>Samples map</source>
-        <translation>Карьа примеров</translation>
+        <translation>Карта образцов</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="197"/>
         <source>The map which divide all input datasets into samples. Every sample has the unique name.</source>
-        <translation>Карта, которая разделяет все входные наборы данных на примеры. Каждый пример имеет уникальное имя.</translation>
+        <translation>карта, которая разделяет все входные наборы данных на образцы. Каждый образец имеет уникальное название.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="200"/>
-        <source>Bowtie index directory</source>
-        <translation>Директория для индекса Bowtie</translation>
+        <source>Bowtie index folder</source>
+        <translation>Папка для индекса Bowtie</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="201"/>
-        <source>The directory with the Bowtie index for the reference sequence.</source>
-        <translation>Директория с индексом Bowtie для референсной последовательности.</translation>
+        <source>The folder with the Bowtie index for the reference sequence.</source>
+        <translation>папка, в которой расположен индекс Bowtie для референсной последовательности.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="209"/>
@@ -10280,27 +10818,27 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="210"/>
         <source>The basename of the Bowtie index for the reference sequence.</source>
-        <translation>Базовое имя для индекса Bowtie для референсной последовательности.</translation>
+        <translation>базовое имя для индекса Bowtie для референсной последовательности.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="223"/>
         <source>Mate inner distance</source>
-        <translation>Внутренняя дистанция напарника</translation>
+        <translation>Внутренняя дистанция в паре</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="224"/>
         <source>The expected (mean) inner distance between mate pairs.</source>
-        <translation>Ожидаемая внутренняя дистанция между напарниками в паре.</translation>
+        <translation>ожидаемая (средняя) внутренняя дистанция между ридами в паре (mate pair).</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="227"/>
         <source>Mate standard deviation</source>
-        <translation>Стандартное отклонение напарника</translation>
+        <translation>Стандартное отклонение в паре</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="228"/>
         <source>The standard deviation for the distribution on inner distances between mate pairs.</source>
-        <translation>Стандартное отклонение для распределения во внутренних расстояниях между напарниками в паре.</translation>
+        <translation>стандартное отклонение для распределения в внутренних дистанций между ридами в паре (mate pair).</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="231"/>
@@ -10310,27 +10848,27 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="232"/>
         <source>Specifies RNA-Seq protocol.</source>
-        <translation>Задает протокол RNA-Seq.</translation>
+        <translation>задает протокол секвенирования РНК.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="235"/>
         <source>No novel junctions</source>
-        <translation>Нет новых переходов</translation>
+        <translation>Не искать новые сайты сплайсинга</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="236"/>
         <source>Only look for reads across junctions indicated in the supplied GFF or junctions file. This parameter is ignored if <i>Raw junctions</i> or <i>Known transcript file</i> is not set.</source>
-        <translation>Нет новых переходов.</translation>
+        <translation>Искать только такие сплайсированные риды, которые соответствуют информации в приложенном файле (GFF или файле с описанием сайтов сплайсинга). Если ни один из этих файлов не указан, параметр будет проигнорирован.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="241"/>
         <source>Raw junctions</source>
-        <translation>Сырые переходы</translation>
+        <translation>Новые сайты сплайсинга</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="242"/>
         <source>The list of raw junctions.</source>
-        <translation>Список сырых переходов.</translation>
+        <translation>список обнаруженных сайтов сплайсинга.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="245"/>
@@ -10380,27 +10918,27 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="273"/>
         <source>Only align the reads to the transcriptome and report only those mappings as genomic mappings.</source>
-        <translation>Выровнять только риды транскриптома и сообщить только отображения как отображения генома.</translation>
+        <translation>выравнивать риды только на транскриптом и выдавать только эти выравнивания при выравнивании на геном.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="277"/>
         <source>Transcriptome max hits</source>
-        <translation>Макс. хитов транскриптома</translation>
+        <translation>Максимальное число выравниваний</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="278"/>
         <source>Maximum number of mappings allowed for a read, when aligned to the transcriptome (any reads found with more than this number of mappings will be discarded).</source>
-        <translation>Максимальное число отображения, разрешенных для рида, когда выровнен на транскриптом.</translation>
+        <translation>максимальное число выравниваний, разрешенных для рида при выравнивании на транскриптом (риды с большим числом выравниваний будут исключены из дальнейшего анализа).</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="283"/>
         <source>Prefilter multihits</source>
-        <translation>Предварительный фильтр мультихитов</translation>
+        <translation>Предварительный фильтр множественных выравниваний</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="284"/>
         <source>When mapping reads on the transcriptome, some repetitive or low complexity reads that would be discarded in the context of the genome may appear to align to the transcript sequences and thus may end up reported as mapped to those genes only. This option directs TopHat to first align the reads to the whole genome in order to determine and exclude such multi-mapped reads (according to the value of the <i>Max multihits</i> option).</source>
-        <translation>При отображении ридов на транскриптом, некоторые повторяющиеся или простые риды могут появиться для выравнивания транскрипционных последовательностей. При выборе этого варианта TopHat сначала выравнивает риды на весь геном, чтобы определить и исключить риды, которые отображены несколько раз.</translation>
+        <translation>при выравнивании ридов на транскриптом, некоторые повторяющиеся риды или риды, содержащие повторы, могут быть выявлены как выровненные, хотя при выравнивании на геном они были бы отброшены. При выборе этой опции TopHat сначала выравнивает риды на весь геном, чтобы определить и исключить риды, которые выравниваются несколько раз (число выравниваний определяется значением опции).</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="293"/>
@@ -10410,47 +10948,47 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="294"/>
         <source>The <i>anchor length</i>. TopHat will report junctions spanned by reads with at least this many bases on each side of the junction. Note that individual spliced alignments may span a junction with fewer than this many bases on one side. However, every junction involved in spliced alignments is supported by at least one read with this many bases on each side.</source>
-        <translation><i>Длина якоря</i>. TopHat сообщит переходы, соединенные с ридами.</translation>
+        <translation><i>длина якоря</i>. TopHat будет указывать в отчете сайты сплайсинга в том случае, если с каждой стороны от стыка прочитано не менее указанного числа нуклеотидов. В отдельных выравниваниях число нуклеотидов может быть меньше, однако для любого указанного в отчете сайта сплайсинга будет существовать хотя бы одно выравнивание с не менее чем указанным числом нуклеотидов с каждой стороны.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="302"/>
         <source>Splice mismatches</source>
-        <translation>Сращивание несоответствий</translation>
+        <translation>Замены около сайтов сплайсинга</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="303"/>
         <source>The maximum number of mismatches that may appear in the <i>anchor</i> region of a spliced alignment.</source>
-        <translation>Максимальное число несоответствий, которые могут появиться в регионе <i>якорь</i>.</translation>
+        <translation>максимально допустимое число несоответствий в нуклеотидах около сайтов сплайсинга..</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="307"/>
         <source>Read mismatches</source>
-        <translation>Несоответствия рида</translation>
+        <translation>Замены в ридах</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="308"/>
         <source>Final read alignments having more than these many mismatches are discarded.</source>
-        <translation>Финальные выравнивания, которые имеют больше чем это число несоответствий отбрасываются.</translation>
+        <translation>финальные выравнивания, число несоответствий в которых больше указанного, будут отброшены.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="312"/>
         <source>Segment mismatches</source>
-        <translation>Несоответствия сегмента</translation>
+        <translation>Замены в сегментах</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="313"/>
         <source>Read segments are mapped independently, allowing up to this many mismatches in each segment alignment.</source>
-        <translation>Сегменты рида отображаются независимо, так что существует много несоответствий в каждом сегменте выравнивания.</translation>
+        <translation>сегменты рида выравниваются независимо, и при этом при выравнивании каждого сегмента допускается указанное максимальное число несоответствий.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="318"/>
         <source>Solexa 1.3 quals</source>
-        <translation>Solexa 1.3 quals</translation>
+        <translation>Качество в шкале Solexa 1.3</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="319"/>
         <source>As of the Illumina GA pipeline version 1.3, quality scores are encoded in Phred-scaled base-64. Use this option for FASTQ files from pipeline 1.3 or later.</source>
-        <translation>Как в пайплайне Illumina GA версии 1.3, показатели качества кодируются в Phred base64. Используйте эту опцию для FASTQ файлов из пайплайна 1.3 или более поздние версии.</translation>
+        <translation>в пайплайне Illumina GA версии 1.3 показатели качества кодируются в шкале Phred64. Используйте эту опцию для FASTQ файлов из пайплайна 1.3 или более поздних версии.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="324"/>
@@ -10460,7 +10998,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="325"/>
         <source>Specifies which Bowtie version should be used.</source>
-        <translation>Указывает какая версия Bowtie будет использована.</translation>
+        <translation>указывает, какую версию Bowtie необходимо использовать.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="328"/>
@@ -10470,7 +11008,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="329"/>
         <source>TopHat uses <i>-v</i> in Bowtie for initial read mapping (the default), but with this option, <i>-n</i> is used instead. Read segments are always mapped using <i>-v</i> option.</source>
-        <translation>TopHat использует <i>-v</i> в Bowtie для отображения ридов, но эта опция, <i>-n</i> используется вместо.</translation>
+        <translation>по умолчанию TopHat использует -v в Bowtie для выравнивания ридов, но при выборе этой опции будет использован параметр -n. Выравнивание сегментов ридов всегда осуществляется с параметром -v.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="335"/>
@@ -10504,13 +11042,13 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="348"/>
-        <source>Temporary directory</source>
-        <translation>Временная директория</translation>
+        <source>Temporary folder</source>
+        <translation>Временная папка</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="349"/>
-        <source>The directory for temporary files.</source>
-        <translation>Директория для временных файлов.</translation>
+        <source>The folder for temporary files.</source>
+        <translation>Папка для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/tophat/TopHatWorker.cpp" line="396"/>
@@ -10644,17 +11182,17 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::MAFFTSupportContext</name>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="131"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="129"/>
         <source>Align with MAFFT...</source>
         <translation>Выравнивание с помощью MAFFT...</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="156"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="154"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MAFFTSupport.cpp" line="157"/>
+        <location filename="../src/mafft/MAFFTSupport.cpp" line="155"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -10686,13 +11224,13 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="127"/>
-        <source>Subdir for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdir for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdir for temporary files exists. Can not remove this folder.</source>
+        <translation>Subdir for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="132"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="145"/>
@@ -10732,8 +11270,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/mafft/MAFFTSupportTask.cpp" line="296"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -10791,27 +11329,32 @@ Set it empty if you want to run Tophat once for all input reads</source>
         <translation>Align sequences to alignment task</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="101"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="100"/>
         <source>Align sequences to an existing alignment by MAFFT started</source>
         <translation>Align sequences to an existing alignment by MAFFT started</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="175"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="176"/>
         <source>Output file '%1' not found</source>
         <translation>Output file '%1' not found</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="177"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="178"/>
         <source>Output file '%3' not found. May be %1 tool path '%2' not valid?</source>
         <translation>Output file '%3' not found. May be %1 tool path '%2' not valid?</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="184"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="185"/>
         <source>Loading output file '%1'</source>
         <translation>Loading output file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="232"/>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="234"/>
+        <source>Row for updating doesn't found</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/mafft/MafftAddToAlignmentTask.cpp" line="250"/>
         <source>MAFFT alignment successfully finished</source>
         <translation>MAFFT alignment successfully finished</translation>
     </message>
@@ -10884,8 +11427,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PathLineEdit</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="670"/>
-        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="672"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="664"/>
+        <location filename="../src/ExternalToolSupportSettingsController.cpp" line="666"/>
         <source>Select a file</source>
         <translation>Выберите файл</translation>
     </message>
@@ -10932,37 +11475,37 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PhmmerSearchDialog</name>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="56"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="69"/>
         <source>Search</source>
         <translation type="unfinished">Искать</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="57"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="70"/>
         <source>Cancel</source>
         <translation type="unfinished">Отмена</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="111"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="124"/>
         <source>Select query sequence file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="159"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="172"/>
         <source>Query sequence file path is empty</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="177"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="190"/>
         <source>Error</source>
         <translation type="unfinished">Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="177"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="190"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation type="unfinished">Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="184"/>
+        <location filename="../src/hmmer/PhmmerSearchDialog.cpp" line="197"/>
         <source>Error: bad arguments!</source>
         <translation type="unfinished"></translation>
     </message>
@@ -10970,43 +11513,43 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PhmmerSearchTask</name>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="48"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="50"/>
         <source>Search with phmmer</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="100"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="104"/>
         <source>Query sequence: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="103"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="107"/>
         <source>Task was not finished</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="109"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="113"/>
         <source>Result annotation table: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="111"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="115"/>
         <source>Result annotation group: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="112"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="116"/>
         <source>Result annotation name: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="114"/>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="118"/>
         <source>Results count: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="146"/>
-        <source>Cannot create a directory for temporary files.</source>
+        <location filename="../src/hmmer/PhmmerSearchTask.cpp" line="150"/>
+        <source>Cannot create a folder for temporary files.</source>
         <translation type="unfinished"></translation>
     </message>
 </context>
@@ -11090,22 +11633,45 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PhyMlWidget</name>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="170"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="230"/>
         <source>Open an alignment file</source>
         <translation>Открыть выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="225"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="287"/>
+        <source>File with the starting tree is not set.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="289"/>
+        <source>File with the starting tree doesn't exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="305"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="226"/>
+        <location filename="../src/phyml/PhyMLDialogWidget.cpp" line="306"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
 </context>
 <context>
+    <name>U2::PrepareInputFastaFilesTask</name>
+    <message>
+        <location filename="../src/blast/PrepareInputFastaFilesTask.cpp" line="36"/>
+        <source>Prepare input FASTA files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast/PrepareInputFastaFilesTask.cpp" line="91"/>
+        <source>File '%1' was skipped. Cannot detect the file format.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PrepareInputForCAP3Task</name>
     <message>
         <location filename="../src/cap3/CAP3SupportTask.cpp" line="241"/>
@@ -11128,9 +11694,37 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
 </context>
 <context>
+    <name>U2::PrepareReferenceSequenceTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="45"/>
+        <source>Prepare reference sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="85"/>
+        <source>No reference sequence in the file: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="86"/>
+        <source>More than one sequence in the reference file: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="89"/>
+        <source>Unable to cast gobject to sequence object</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/PrepareReferenceSequenceTask.cpp" line="90"/>
+        <source>The input reference sequence '%1' contains characters that don't belong to DNA alphabet.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::PythonModuleDjangoSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="106"/>
+        <location filename="../src/python/PythonSupport.cpp" line="101"/>
         <source>: Python module for the %1 tool</source>
         <translation>: Python модуль для инструмента %1</translation>
     </message>
@@ -11138,7 +11732,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PythonModuleNumpySupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="115"/>
+        <location filename="../src/python/PythonSupport.cpp" line="110"/>
         <source>: Python module for the %1 tool</source>
         <translation>: Python модуль для инструмента %1</translation>
     </message>
@@ -11146,7 +11740,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PythonModuleSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="95"/>
+        <location filename="../src/python/PythonSupport.cpp" line="90"/>
         <source>Python module is not installed. Install module or set path to another Python scripts interpreter with installed module in the External Tools settings</source>
         <translation>Python модуль не установлен. Установите модель или укажите другой путь с установленным модулем в настройках внешних инструментов</translation>
     </message>
@@ -11154,7 +11748,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::PythonSupport</name>
     <message>
-        <location filename="../src/python/PythonSupport.cpp" line="60"/>
+        <location filename="../src/python/PythonSupport.cpp" line="55"/>
         <source>Python scripts interpreter</source>
         <translation>Python интерпретатор</translation>
     </message>
@@ -11162,7 +11756,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleCelegansdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="151"/>
+        <location filename="../src/R/RSupport.cpp" line="147"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11170,7 +11764,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleDrosophila2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="157"/>
+        <location filename="../src/R/RSupport.cpp" line="153"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11178,7 +11772,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleGodbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="115"/>
+        <location filename="../src/R/RSupport.cpp" line="111"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11186,7 +11780,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleGostatsSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="109"/>
+        <location filename="../src/R/RSupport.cpp" line="105"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11194,7 +11788,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleHgu133adbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="121"/>
+        <location filename="../src/R/RSupport.cpp" line="117"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11202,7 +11796,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleHgu133bdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="127"/>
+        <location filename="../src/R/RSupport.cpp" line="123"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11210,7 +11804,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleHgu133plus2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="133"/>
+        <location filename="../src/R/RSupport.cpp" line="129"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11218,7 +11812,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleHgu95av2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="139"/>
+        <location filename="../src/R/RSupport.cpp" line="135"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11226,7 +11820,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleMouse430a2dbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="145"/>
+        <location filename="../src/R/RSupport.cpp" line="141"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11234,7 +11828,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleOrgceegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="175"/>
+        <location filename="../src/R/RSupport.cpp" line="171"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11242,7 +11836,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleOrgdmegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="181"/>
+        <location filename="../src/R/RSupport.cpp" line="177"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11250,7 +11844,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleOrghsegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="163"/>
+        <location filename="../src/R/RSupport.cpp" line="159"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11258,7 +11852,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleOrgmmegdbSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="169"/>
+        <location filename="../src/R/RSupport.cpp" line="165"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11266,7 +11860,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleSeqlogoSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="187"/>
+        <location filename="../src/R/RSupport.cpp" line="183"/>
         <source>: Rscript module for the %1 tool</source>
         <translation>: Rscript модуль для инструмента %1</translation>
     </message>
@@ -11274,7 +11868,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RModuleSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="95"/>
+        <location filename="../src/R/RSupport.cpp" line="91"/>
         <source>R module is not installed. Install module or set path to another R scripts interpreter with installed module in the External Tools settings</source>
         <translation>R модуль не установлен. Установите модель или укажите другой путь с установленным модулем в настройках внешних инструментов</translation>
     </message>
@@ -11282,12 +11876,25 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::RSupport</name>
     <message>
-        <location filename="../src/R/RSupport.cpp" line="59"/>
+        <location filename="../src/R/RSupport.cpp" line="55"/>
         <source>Rscript interpreter</source>
         <translation>Rscript интерпретатор</translation>
     </message>
 </context>
 <context>
+    <name>U2::RemoveGapsFromSequenceTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp" line="66"/>
+        <source>Remove gaps from the sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/RemoveGapsFromSequenceTask.cpp" line="83"/>
+        <source>Find gaps in the sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::RunCap3AndOpenResultTask</name>
     <message>
         <location filename="../src/cap3/CAP3SupportTask.cpp" line="133"/>
@@ -11308,12 +11915,12 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::SaveAlignmentTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="64"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="63"/>
         <source>Export alignment to '%1'</source>
         <translation>Export alignment to '%1'</translation>
     </message>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="68"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="67"/>
         <source>An alignment is empty</source>
         <translation>An alignment is empty</translation>
     </message>
@@ -11321,7 +11928,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::SaveMSA2SequencesTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="107"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="104"/>
         <source>Export alignment to sequence: %1</source>
         <translation>Export alignment to sequence: %1</translation>
     </message>
@@ -11329,12 +11936,12 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::SaveSequenceTask</name>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="138"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="135"/>
         <source>Save sequence</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/utils/ExportTasks.cpp" line="169"/>
+        <location filename="../src/utils/ExportTasks.cpp" line="166"/>
         <source>'%' format is not registered</source>
         <translation type="unfinished"></translation>
     </message>
@@ -11348,36 +11955,67 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
 </context>
 <context>
+    <name>U2::SnpEffDatabaseListModel</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListModel.cpp" line="97"/>
+        <source>Genome</source>
+        <translation type="unfinished">Геном</translation>
+    </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListModel.cpp" line="99"/>
+        <source>Organism</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::SnpEffDatabaseListTask</name>
+    <message>
+        <location filename="../src/snpeff/SnpEffDatabaseListTask.cpp" line="37"/>
+        <source>SnpEff Database List task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::SnpEffParser</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="59"/>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="81"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="60"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="82"/>
         <source>A problem occurred during allocating memory for running SnpEff. Check the "Tasks memory limit" parameter in the UGENE Application Settings.It is recommended to set this value to the available RAM on the computer.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="75"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="76"/>
         <source>There is not enough memory to complete the SnpEff execution.It is recommended to run SnpEff on a computer with RAM 4Gb or more.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="86"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="87"/>
         <source>Failed to download SnpEff database. Check your internet connection.</source>
         <translation type="unfinished"></translation>
     </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="92"/>
+        <source>Genome database '%1' is not found.</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::SnpEffSupport</name>
     <message>
-        <location filename="../src/snpeff/SnpEffSupport.cpp" line="49"/>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="53"/>
         <source><i>SnpEff</i>: Genetic variant annotation and effect prediction toolbox.</source>
         <translation><i>SnpEff</i>: инструмент генетического варианта аннотации и прогнозирования эффекта.</translation>
     </message>
+    <message>
+        <location filename="../src/snpeff/SnpEffSupport.cpp" line="98"/>
+        <source>Failed to get SnpEff database list</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::SnpEffTask</name>
     <message>
-        <location filename="../src/snpeff/SnpEffTask.cpp" line="205"/>
+        <location filename="../src/snpeff/SnpEffTask.cpp" line="211"/>
         <source>SNPEff dataDir is not initialized.</source>
         <translation>SNPEff dataDir is not initialized.</translation>
     </message>
@@ -11394,8 +12032,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
     <name>U2::SpadesTask</name>
     <message>
         <location filename="../src/spades/SpadesTask.cpp" line="61"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
 </context>
 <context>
@@ -11494,17 +12132,17 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::TCoffeeSupportContext</name>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="134"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="132"/>
         <source>Align with T-Coffee...</source>
         <translation>Выравнивание с помощью T-Coffee...</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="159"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="157"/>
         <source>Path for %1 tool not selected.</source>
         <translation>Путь для %1 не установлен.</translation>
     </message>
     <message>
-        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="160"/>
+        <location filename="../src/tcoffee/TCoffeeSupport.cpp" line="158"/>
         <source>Do you want to select it now?</source>
         <translation>Выбрать сейчас?</translation>
     </message>
@@ -11541,13 +12179,13 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="132"/>
-        <source>Subdir for temporary files exists. Can not remove this directory.</source>
-        <translation>Subdir for temporary files exists. Can not remove this directory.</translation>
+        <source>Subdir for temporary files exists. Can not remove this folder.</source>
+        <translation>Subdir for temporary files exists. Can not remove this folder.</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="137"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="182"/>
@@ -11576,8 +12214,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/tcoffee/TCoffeeSupportTask.cpp" line="291"/>
-        <source>Can not remove directory for temporary files.</source>
-        <translation>Can not remove directory for temporary files.</translation>
+        <source>Can not remove folder for temporary files.</source>
+        <translation>Can not remove folder for temporary files.</translation>
     </message>
 </context>
 <context>
@@ -11697,7 +12335,7 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/ExternalToolSupportSettings.cpp" line="135"/>
+        <location filename="../src/ExternalToolSupportSettings.cpp" line="145"/>
         <source>Temporary UGENE dir is empty</source>
         <translation type="unfinished">Temporary UGENE dir is empty</translation>
     </message>
@@ -11713,67 +12351,134 @@ Set it empty if you want to run Tophat once for all input reads</source>
 <context>
     <name>U2::VcfConsensusSupportTask</name>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="40"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="39"/>
         <source>Create Vcf Consensus</source>
         <translation>Create Vcf Consensus</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="50"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="49"/>
         <source>VcfConsensus started</source>
         <translation>VcfConsensus started</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="52"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="51"/>
         <source>AppSettings is NULL</source>
         <translation>AppSettings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="54"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="53"/>
         <source>UserAppsSettings is NULL</source>
         <translation>UserAppsSettings is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="56"/>
-        <source>Temporary directory is not set!</source>
-        <translation>Temporary directory is not set!</translation>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="55"/>
+        <source>Temporary folder is not set!</source>
+        <translation>Temporary folder is not set!</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="61"/>
-        <source>Can not create directory for temporary files.</source>
-        <translation>Не удаётся создать директорию для временных файлов.</translation>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="60"/>
+        <source>Can not create folder for temporary files.</source>
+        <translation>Не удаётся создать папку для временных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="65"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="64"/>
         <source>Saving temporary data to file '%1'</source>
         <translation>Saving temporary data to file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="84"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="83"/>
         <source>ExternalToolRegistry is NULL</source>
         <translation>ExternalToolRegistry is NULL</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="88"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="87"/>
         <source>There is no VcfConsensus external tool registered</source>
         <translation>There is no VcfConsensus external tool registered</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="89"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="88"/>
         <source>There is no Tabix external tool registered</source>
         <translation>There is no Tabix external tool registered</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="111"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="110"/>
         <source>Trying to get path of NULL external tool</source>
         <translation>Trying to get path of NULL external tool</translation>
     </message>
     <message>
-        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="115"/>
+        <location filename="../src/vcftools/VcfConsensusSupportTask.cpp" line="114"/>
         <source>Path to %1</source>
         <translation>Path to %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::Workflow::BlastAndSwReadTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="86"/>
+        <source>Map one read with BLAST & SW task</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="153"/>
+        <source>%1 was skipped. No BLAST results.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="197"/>
+        <source>%1 was skipped. Low similarity: %2. Minimum similarity was set to %3</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="320"/>
+        <source>The %1 algorithm is not found. Add the %1 plugin.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="323"/>
+        <source>The %1 algorithm is not found. Check that the %1 plugin is up to date.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::BlastReadsSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/BlastReadsSubTask.cpp" line="53"/>
+        <source>Map reads with BLAST & SW task</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::ComposeResultSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="64"/>
+        <source>Compose alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="197"/>
+        <source>No read satisfy minimum similarity criteria.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/ComposeResultSubTask.cpp" line="311"/>
+        <source>The related chromatogram not found</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::Workflow::FormatDBSubTask</name>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp" line="46"/>
+        <source>Format DB task wrapper</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/blast_plus/align_worker_subtasks/FormatDBSubTask.cpp" line="66"/>
+        <source>The task uses a temporary folder to process the data. It is required that the folder path doesn't have spaces. Please set up an appropriate path for the "Temporary files" parameter on the "Directories" tab of the UGENE Application Settings.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::Workflow::IntegralBusPort</name>
     <message>
         <location filename="../src/cufflinks/CuffdiffWorker.cpp" line="56"/>
@@ -11792,8 +12497,8 @@ Set it empty if you want to run Tophat once for all input reads</source>
     </message>
     <message>
         <location filename="../src/macs/MACSWorker.cpp" line="236"/>
-        <location filename="../src/spades/SpadesWorker.cpp" line="189"/>
-        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="255"/>
+        <location filename="../src/spades/SpadesWorker.cpp" line="190"/>
+        <location filename="../src/utils/BaseShortReadsAlignerWorker.cpp" line="272"/>
         <source>The slot must be not empty: '%1'</source>
         <translation type="unfinished">Слот не должен быть пустым: '%1'</translation>
     </message>
diff --git a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.cpp b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.cpp
index fe5be69..b36d051 100644
--- a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.cpp
+++ b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
index 3f4a714..c1117b8 100644
--- a/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
+++ b/src/plugins/genome_aligner/src/BuildSArraySettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui b/src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui
index e7ec542..d3ffd8f 100644
--- a/src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui
+++ b/src/plugins/genome_aligner/src/BuildSuffixArraySettings.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>259</width>
-    <height>176</height>
+    <width>312</width>
+    <height>175</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -80,18 +80,24 @@ p, li { white-space: pre-wrap; }
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="sizePolicy">
-      <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+      <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
        <horstretch>0</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
+     <property name="styleSheet">
+      <string notr="true"/>
+     </property>
      <property name="title">
-      <string/>
+      <string>Resources</string>
      </property>
      <layout class="QGridLayout" name="gridLayout">
       <property name="sizeConstraint">
        <enum>QLayout::SetMinAndMaxSize</enum>
       </property>
+      <property name="topMargin">
+       <number>9</number>
+      </property>
       <item row="0" column="0">
        <layout class="QHBoxLayout" name="horizontalLayout_4">
         <property name="sizeConstraint">
@@ -106,15 +112,24 @@ p, li { white-space: pre-wrap; }
         </item>
         <item>
          <widget class="QLabel" name="totalSizeLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
           <property name="maximumSize">
            <size>
-            <width>61</width>
+            <width>100</width>
             <height>16777215</height>
            </size>
           </property>
           <property name="text">
            <string/>
           </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
          </widget>
         </item>
        </layout>
@@ -133,15 +148,24 @@ p, li { white-space: pre-wrap; }
         </item>
         <item>
          <widget class="QLabel" name="systemSizeLabel">
+          <property name="sizePolicy">
+           <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
           <property name="maximumSize">
            <size>
-            <width>61</width>
+            <width>99</width>
             <height>16777215</height>
            </size>
           </property>
           <property name="text">
            <string/>
           </property>
+          <property name="alignment">
+           <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+          </property>
          </widget>
         </item>
        </layout>
diff --git a/src/plugins/genome_aligner/src/DataBunch.cpp b/src/plugins/genome_aligner/src/DataBunch.cpp
index 5f01533..6a909be 100644
--- a/src/plugins/genome_aligner/src/DataBunch.cpp
+++ b/src/plugins/genome_aligner/src/DataBunch.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/DataBunch.h b/src/plugins/genome_aligner/src/DataBunch.h
index de50836..39b3518 100644
--- a/src/plugins/genome_aligner/src/DataBunch.h
+++ b/src/plugins/genome_aligner/src/DataBunch.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.cpp b/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.cpp
index a76b98e..5e7af1b 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineRegistry.h>
@@ -61,9 +61,9 @@ namespace U2 {
 
     // parse options
 
-    QList<StringPair> options = AppContext::getCMDLineRegistry()->getParameters();
+    QList<StrStrPair> options = AppContext::getCMDLineRegistry()->getParameters();
 
-    foreach (const StringPair& opt, options ) {
+    foreach (const StrStrPair& opt, options ) {
         if (opt.first == OPTION_INDEX_PATH  ) {
             indexPath = opt.second;
         }else if (opt.first == OPTION_BUILD_INDEX ) {
@@ -182,7 +182,7 @@ QString GenomeAlignerCMDLineTask::getArgumentsDescritption()
     desc += tr("  --%1    Use this flag to only build index for reference sequence.\n\n").arg(OPTION_BUILD_INDEX, fieldSize);
     desc += tr("  --%1    Path to reference genome sequence\n\n").arg(OPTION_REFERENCE, fieldSize);
     desc += tr("  --%1    Path to short-reads data in FASTA or FASTQ format\n\n").arg(OPTION_SHORTREADS, fieldSize);
-    desc += tr("  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary directory. If --build-index option is applied, index will be saved to specified path.\n\n").arg(OPTION_INDEX_PATH, fieldSize);
+    desc += tr("  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary folder. If --build-index option is applied, index will be saved to specified path.\n\n").arg(OPTION_INDEX_PATH, fieldSize);
     desc += tr("  --%1    Path to output alignment in UGENEDB or SAM format (see --%2)\n\n").arg(OPTION_RESULT, fieldSize).arg(OPTION_SAM);
     desc += tr("  --%1    Memory size (in Mbs) reserved for short-reads. The bigger value the faster algorithm works. Default value depends on available system memory.\n\n").arg(OPTION_MEMSIZE, fieldSize);
     desc += tr("  --%1    Index fragmentation size (in Mbs). Small fragments better fit into RAM, allowing to load more short reads. Default value is 10.\n\n").arg(OPTION_REF_FRAG, fieldSize);
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.h b/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.h
index e64f58f..68bd302 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerCMDLineTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerFindTask.cpp b/src/plugins/genome_aligner/src/GenomeAlignerFindTask.cpp
index 7493c85..059f80e 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerFindTask.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerFindTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerFindTask.h b/src/plugins/genome_aligner/src/GenomeAlignerFindTask.h
index 45031e0..4a2e850 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerFindTask.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerFindTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,19 +22,20 @@
 #ifndef _U2_GENOME_ALIGNER_FIND_TASK_H_
 #define _U2_GENOME_ALIGNER_FIND_TASK_H_
 
-#include "GenomeAlignerSearchQuery.h"
-#include "GenomeAlignerWriteTask.h"
-#include "DataBunch.h"
+#include <QMutex>
+#include <QMutex>
+#include <QSemaphore>
+#include <QVector>
 
-#include <U2Core/Task.h>
-#include <U2Core/U2Region.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/Task.h>
 #include <U2Core/U2AssemblyUtils.h>
+#include <U2Core/U2Region.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QVector>
-#include <QtCore/QMutex>
-#include <QtCore/QSemaphore>
+#include "GenomeAlignerSearchQuery.h"
+#include "GenomeAlignerWriteTask.h"
+#include "DataBunch.h"
 
 #define BinarySearchResult qint64
 
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIO.cpp b/src/plugins/genome_aligner/src/GenomeAlignerIO.cpp
index 3b4b238..284c6fd 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIO.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIO.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -115,37 +115,33 @@ GenomeAlignerCommunicationChanelReader::~GenomeAlignerCommunicationChanelReader(
 }
 
 /************************************************************************/
-/* GenomeAlignerMAlignmentWriter                                        */
+/* GenomeAlignerMsaWriter                                        */
 /************************************************************************/
-GenomeAlignerMAlignmentWriter::GenomeAlignerMAlignmentWriter() {
+GenomeAlignerMsaWriter::GenomeAlignerMsaWriter() {
     writtenReadsCount = 0;
 }
 
-void GenomeAlignerMAlignmentWriter::close() {
+void GenomeAlignerMsaWriter::close() {
     //TODO: add some heuristic alphabet selection.
-    result.setAlphabet(AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT()));
+    result->setAlphabet(AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT()));
 }
 
-MAlignment& GenomeAlignerMAlignmentWriter::getResult() {
+MultipleSequenceAlignment& GenomeAlignerMsaWriter::getResult() {
     return result;
 }
 
-void GenomeAlignerMAlignmentWriter::write(SearchQuery *seq, SAType offset) {
-    U2OpStatus2Log os;
-    //if (seq->hasQuality() && seq->getQuality().qualCodes.length() > 0) {
-    //    row.setQuality(seq->getQuality());
-    //}
+void GenomeAlignerMsaWriter::write(SearchQuery *seq, SAType offset) {
     QByteArray offsetGaps;
-    offsetGaps.fill(MAlignment_GapChar, offset);
+    offsetGaps.fill(U2Msa::GAP_CHAR, offset);
     QByteArray seqWithOffset = seq->constSequence();
     seqWithOffset.prepend(offsetGaps);
-    result.addRow(seq->getName(), seqWithOffset, os);
+    result->addRow(seq->getName(), seqWithOffset);
     writtenReadsCount++;
 }
 
-void GenomeAlignerMAlignmentWriter::setReferenceName(const QString &refName) {
+void GenomeAlignerMsaWriter::setReferenceName(const QString &refName) {
     this->refName = refName;
-    result.setName(refName);
+    result->setName(refName);
 }
 
 } //LocalWorkflow
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIO.h b/src/plugins/genome_aligner/src/GenomeAlignerIO.h
index 763ffaf..1625cb3 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIO.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIO.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/AssemblyImporter.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/GUrl.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2DbiUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 
@@ -129,15 +129,15 @@ private:
     CommunicationChannel* reads;
 };
 
-class GenomeAlignerMAlignmentWriter : public GenomeAlignerWriter {
+class GenomeAlignerMsaWriter : public GenomeAlignerWriter {
 public:
-    GenomeAlignerMAlignmentWriter();
+    GenomeAlignerMsaWriter();
     inline void write(SearchQuery *seq, SAType offset);
     void close();
     void setReferenceName(const QString &refName);
-    MAlignment &getResult();
+    MultipleSequenceAlignment &getResult();
 private:
-    MAlignment result;
+    MultipleSequenceAlignment result;
 };
 
 } //LocalWorkflow
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndex.cpp b/src/plugins/genome_aligner/src/GenomeAlignerIndex.cpp
index 1e9d13e..fcadbb4 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndex.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndex.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #include <U2Core/Counter.h>
 #include <U2Algorithm/BinaryFindOpenCL.h>
 #include <U2Algorithm/SyncSort.h>
-#include <QtCore/QFile>
+#include <QFile>
 #include <QtEndian>
 #include "GenomeAlignerFindTask.h"
 #include "GenomeAlignerTask.h"
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndex.h b/src/plugins/genome_aligner/src/GenomeAlignerIndex.h
index 4856d60..0ec7e83 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndex.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndex.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Core/Task.h>
 #include <U2Algorithm/BitsTable.h>
-#include <QtCore/QFile>
+#include <QFile>
 #include "GenomeAlignerIndexPart.h"
 #include "GenomeAlignerSettingsWidget.h"
 #include "GenomeAlignerFindTask.h"
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.cpp b/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.cpp
index 22e8674..036ef3b 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.h b/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.h
index 19d8dea..05db4a1 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexPart.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.cpp b/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.cpp
index 7379b7c..3063865 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,6 @@
 #include <U2Algorithm/OpenCLGpuRegistry.h>
 #include "U2Formats/StreamSequenceReader.h"
 #include <QtEndian>
-#include <QtGlobal>
 #include "GenomeAlignerIndex.h"
 
 #include "GenomeAlignerIndexTask.h"
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.h b/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.h
index 85d1968..689bd83 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.cpp b/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.cpp
index fddaa63..9e2fad6 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.h b/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.h
index 3d235d6..be43707 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerIndexWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerPlugin.cpp b/src/plugins/genome_aligner/src/GenomeAlignerPlugin.cpp
index 1ad3cf5..88e7098 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerPlugin.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -70,9 +70,6 @@ public:
 };
 
 GenomeAlignerPlugin::GenomeAlignerPlugin() : Plugin( tr("UGENE Genome Aligner"), tr("Assembly DNA to reference sequence") ) {
-    if (AppContext::getMainWindow()) {
-        AppContext::getAppSettingsGUI()->registerPage(new GenomeAlignerSettingsPageController());
-    }
 
     // Register GenomeAligner algorithm
     DnaAssemblyAlgRegistry* registry = AppContext::getDnaAssemblyAlgRegistry();
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerPlugin.h b/src/plugins/genome_aligner/src/GenomeAlignerPlugin.h
index 4191bc8..8bbac2f 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerPlugin.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
index 14e169d..d385c30 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.h b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.h
index 8b1895f..bd597b3 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSearchQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettings.ui b/src/plugins/genome_aligner/src/GenomeAlignerSettings.ui
index 1647589..c408315 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettings.ui
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettings.ui
@@ -153,15 +153,15 @@
          <layout class="QVBoxLayout" name="verticalLayout_3">
           <item>
            <layout class="QGridLayout" name="gridLayout_2" rowminimumheight="20,20,20,20">
+            <property name="topMargin">
+             <number>0</number>
+            </property>
             <property name="horizontalSpacing">
              <number>3</number>
             </property>
             <property name="verticalSpacing">
              <number>9</number>
             </property>
-            <property name="topMargin">
-             <number>0</number>
-            </property>
             <item row="1" column="0">
              <widget class="QCheckBox" name="reverseBox">
               <property name="enabled">
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
index eaf4c06..a12947b 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,57 +47,5 @@ void GenomeAlignerSettingsUtils::setIndexDir(const QString &indexDir) {
     }
 }
 
-/************************************************************************/
-/* Genome Aligner Settings Controller                                   */
-/************************************************************************/
-
-GenomeAlignerSettingsPageController::GenomeAlignerSettingsPageController(QObject* p)
-: AppSettingsGUIPageController(tr("Genome Aligner"), GenomeAlignerSettingsPageId, p) {}
-
-
-AppSettingsGUIPageState* GenomeAlignerSettingsPageController::getSavedState() {
-    GenomeAlignerSettingsPageState* state = new GenomeAlignerSettingsPageState();
-    state->indexDir = GenomeAlignerSettingsUtils::getIndexDir();
-    return state;
-}
-
-void GenomeAlignerSettingsPageController::saveState(AppSettingsGUIPageState* s) {
-    GenomeAlignerSettingsPageState* state = qobject_cast<GenomeAlignerSettingsPageState*>(s);
-
-    GenomeAlignerSettingsUtils::setIndexDir(state->indexDir);
-}
-
-AppSettingsGUIPageWidget* GenomeAlignerSettingsPageController::createWidget(AppSettingsGUIPageState* state) {
-    GenomeAlignerSettingsPageWidget* r = new GenomeAlignerSettingsPageWidget(this);
-    r->setState(state);
-    return r;
-}
-
-const QString GenomeAlignerSettingsPageController::helpPageId = QString("18222952");
-
-GenomeAlignerSettingsPageWidget::GenomeAlignerSettingsPageWidget(GenomeAlignerSettingsPageController* ) {
-    setupUi(this);
-    connect(indexDirButton, SIGNAL(clicked()), SLOT(sl_onIndexDirButton()));
-}
-
-void GenomeAlignerSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
-    GenomeAlignerSettingsPageState* state = qobject_cast<GenomeAlignerSettingsPageState*>(s);
-    indexDirEdit->setText(state->indexDir);
-}
-
-AppSettingsGUIPageState* GenomeAlignerSettingsPageWidget::getState(QString& ) const {
-    GenomeAlignerSettingsPageState* state = new GenomeAlignerSettingsPageState();
-    state->indexDir = indexDirEdit->text();
-    return state;
-}
-
-void GenomeAlignerSettingsPageWidget::sl_onIndexDirButton() {
-    QString path = indexDirEdit->text();
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), path,
-        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
-    if (!dir.isEmpty()) {
-        indexDirEdit->setText(dir);
-    }
-}
 
 } //namespace
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
index 6133098..9388cf5 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,46 +34,6 @@ public:
     static void setIndexDir(const QString &indexDir);
 };
 
-/************************************************************************/
-/* Genome Aligner Settings Controller                                   */
-/************************************************************************/
-#define GenomeAlignerSettingsPageId     QString("gas")
-
-class GenomeAlignerSettingsPageController : public AppSettingsGUIPageController {
-    Q_OBJECT
-public:
-    GenomeAlignerSettingsPageController(QObject* p = NULL);
-
-    virtual AppSettingsGUIPageState* getSavedState();
-
-    virtual void saveState(AppSettingsGUIPageState* s);
-
-    virtual AppSettingsGUIPageWidget* createWidget(AppSettingsGUIPageState* data);
-
-    const QString& getHelpPageId() const {return helpPageId;};
-
-private:
-    static const QString helpPageId;
-};
-
-class GenomeAlignerSettingsPageState : public AppSettingsGUIPageState {
-    Q_OBJECT
-public:
-    QString indexDir;
-};
-
-class GenomeAlignerSettingsPageWidget: public AppSettingsGUIPageWidget, public Ui_GenomeAlignerSettingsWidget {
-    Q_OBJECT
-public:
-    GenomeAlignerSettingsPageWidget(GenomeAlignerSettingsPageController* ctrl);
-
-    virtual void setState(AppSettingsGUIPageState* state);
-
-    virtual AppSettingsGUIPageState* getState(QString& err) const;
-
-private slots:
-    void sl_onIndexDirButton();
-};
 
 } // U2
 
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.cpp b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.cpp
index 84fb0e5..2e58ea9 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -161,9 +161,9 @@ bool GenomeAlignerSettingsWidget::isIndexOk(const GUrl &refName, QString &error)
         if (index.seqPartSize == partSlider->value()) {
             return true;
         }
-        error = tr("The index directory has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to \
+        error = tr("The index folder has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to \
 the parameter you have chosen (%2).\n\nPress \"Ok\" to delete this index file and create a new during the aligning.\nPress \"Cancel\" to change this parameter \
-or the index directory.").arg(index.seqPartSize).arg(partSlider->value());
+or the index folder.").arg(index.seqPartSize).arg(partSlider->value());
         return false;
     } else {
         if (!res || refName.lastFileSuffix() != GenomeAlignerIndex::HEADER_EXTENSION) {
@@ -177,7 +177,7 @@ or the index directory.").arg(index.seqPartSize).arg(partSlider->value());
 void GenomeAlignerSettingsWidget::sl_onSetIndexDirButtonClicked() {
     LastUsedDirHelper lod;
 
-    lod.url = U2FileDialog::getExistingDirectory(this, tr("Set index files directory"), indexDirEdit->text());
+    lod.url = U2FileDialog::getExistingDirectory(this, tr("Set index files folder"), indexDirEdit->text());
     if (!lod.url.isEmpty()) {
         GUrl result = lod.url;
         indexDirEdit->setText(result.getURLString());
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
index 9753dd0..b559540 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui
index 49d04fe..d423e9e 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui
+++ b/src/plugins/genome_aligner/src/GenomeAlignerSettingsWidget.ui
@@ -15,36 +15,6 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
-    <widget class="QGroupBox" name="groupBox_4">
-     <property name="title">
-      <string>Directories</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout">
-      <item>
-       <widget class="QLabel" name="label_4">
-        <property name="text">
-         <string>Directory for built indexes</string>
-        </property>
-       </widget>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <item>
-         <widget class="QLineEdit" name="indexDirEdit"/>
-        </item>
-        <item>
-         <widget class="QToolButton" name="indexDirButton">
-          <property name="text">
-           <string notr="true">...</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerTask.cpp b/src/plugins/genome_aligner/src/GenomeAlignerTask.cpp
index 5d8c16c..eb2605c 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerTask.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -83,7 +83,7 @@ GenomeAlignerTask::GenomeAlignerTask( const DnaAssemblyToRefTaskSettings& _setti
 {
     GCOUNTER(cvar,tvar, "GenomeAlignerTask");
     setMaxParallelSubtasks(4);
-    haveResults = true;
+    hasResults = true;
     readsCount = 0;
     readsAligned = 0;
     shortreadLoadTime = 0;
@@ -318,7 +318,7 @@ Task::ReportResult GenomeAlignerTask::report() {
     }
 
     if (seqWriter->getWrittenReadsCount() == 0) {
-        haveResults = false;
+        hasResults = false;
         return ReportResult_Finished;
     }
 
@@ -341,7 +341,7 @@ Task::ReportResult GenomeAlignerTask::report() {
         taskLog.info(tr("Short-reads IO time = %1").arg(shortreadIOTime/(1000*1000)));
     }
 
-    haveResults = (aligned > 0);
+    hasResults = (aligned > 0);
 
     return ReportResult_Finished;
 }
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerTask.h b/src/plugins/genome_aligner/src/GenomeAlignerTask.h
index 4981eea..1f90b53 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerTask.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_GENOME_ALIGNER_TASK_H_
 #define _U2_GENOME_ALIGNER_TASK_H_
 
-#include <QtCore/QSharedPointer>
-#include <QtCore/QTemporaryFile>
+#include <QSharedPointer>
+#include <QTemporaryFile>
 
 #include <U2Algorithm/DnaAssemblyTask.h>
 #include <U2Formats/StreamSequenceReader.h>
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerWorker.cpp b/src/plugins/genome_aligner/src/GenomeAlignerWorker.cpp
index c80f58f..39b4b4a 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerWorker.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -216,15 +216,15 @@ public:
 
     bool validate(const IntegralBusPort *port, ProblemList &problemList) const {
         QVariant busMap = port->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-        bool data = isBinded(busMap.value<QStrStrMap>(), READS_URL_SLOT_ID);
+        bool data = isBinded(busMap.value<StrStrMap>(), READS_URL_SLOT_ID);
         if (!data){
             QString dataName = slotName(port, READS_URL_SLOT_ID);
             problemList.append(Problem(GenomeAlignerWorker::tr("The slot must be not empty: '%1'").arg(dataName)));
             return false;
         }
 
-        QString slot1Val = busMap.value<QStrStrMap>().value(READS_URL_SLOT_ID);
-        QString slot2Val = busMap.value<QStrStrMap>().value(READS_PAIRED_URL_SLOT_ID);
+        QString slot1Val = busMap.value<StrStrMap>().value(READS_URL_SLOT_ID);
+        QString slot2Val = busMap.value<StrStrMap>().value(READS_PAIRED_URL_SLOT_ID);
         U2OpStatusImpl os;
         const QList<IntegralBusSlot>& slots1 = IntegralBusSlot::listFromString(slot1Val, os);
         const QList<IntegralBusSlot>& slots2 = IntegralBusSlot::listFromString(slot2Val, os);
@@ -291,8 +291,8 @@ void GenomeAlignerWorkerFactory::init() {
     {
 
         Descriptor outDir(OUTPUT_DIR,
-            GenomeAlignerWorker::tr("Output directory"),
-            GenomeAlignerWorker::tr("Directory to save UGENE genome aligner output files."));
+            GenomeAlignerWorker::tr("Output folder"),
+            GenomeAlignerWorker::tr("Folder to save UGENE genome aligner output files."));
 
         Descriptor outName(OUTPUT_NAME,
             GenomeAlignerWorker::tr("Output file name"),
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerWorker.h b/src/plugins/genome_aligner/src/GenomeAlignerWorker.h
index 0c202a1..40ca583 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerWorker.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.cpp b/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.cpp
index 796573f..3571cce 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.cpp
+++ b/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.h b/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.h
index 833059d..300f50b 100644
--- a/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.h
+++ b/src/plugins/genome_aligner/src/GenomeAlignerWriteTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 
diff --git a/src/plugins/genome_aligner/src/ReadShortReadsSubTask.cpp b/src/plugins/genome_aligner/src/ReadShortReadsSubTask.cpp
index d76e846..486ce89 100644
--- a/src/plugins/genome_aligner/src/ReadShortReadsSubTask.cpp
+++ b/src/plugins/genome_aligner/src/ReadShortReadsSubTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/ReadShortReadsSubTask.h b/src/plugins/genome_aligner/src/ReadShortReadsSubTask.h
index 9b1d8d1..e9db9d4 100644
--- a/src/plugins/genome_aligner/src/ReadShortReadsSubTask.h
+++ b/src/plugins/genome_aligner/src/ReadShortReadsSubTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.cpp b/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.cpp
index 9d9085b..868e0a5 100644
--- a/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.cpp
+++ b/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.h b/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.h
index 8c992ef..99db023 100644
--- a/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.h
+++ b/src/plugins/genome_aligner/src/WriteAlignedReadsSubTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/genome_aligner/transl/english.ts b/src/plugins/genome_aligner/transl/english.ts
index cb7993b..177689b 100644
--- a/src/plugins/genome_aligner/transl/english.ts
+++ b/src/plugins/genome_aligner/transl/english.ts
@@ -26,12 +26,17 @@ p, li { white-space: pre-wrap; }
              amount of memory used during the alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/BuildSuffixArraySettings.ui" line="103"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="92"/>
+        <source>Resources</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="109"/>
         <source>Total memory usage:</source>
         <translation>Total memory usage:</translation>
     </message>
     <message>
-        <location filename="../src/BuildSuffixArraySettings.ui" line="130"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="145"/>
         <source>System memory size:</source>
         <translation>System memory size:</translation>
     </message>
@@ -159,9 +164,18 @@ p, li { white-space: pre-wrap; }
         <translation>Index memory usage size:</translation>
     </message>
     <message>
+        <location filename="../src/GenomeAlignerSettings.ui" line="513"/>
+        <source>You can choose a temporary directory for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary directory.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="545"/>
         <source>Directory for index files:</source>
-        <translation>Directory for index files:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Folder for index files:</source>
+        <translation type="vanished">Folder for index files:</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="201"/>
@@ -202,9 +216,8 @@ p, li { white-space: pre-wrap; }
                  amount of memory used during the alignment.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettings.ui" line="513"/>
-        <source>You can choose a temporary directory for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary directory.</source>
-        <translation>You can choose a temporary directory for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary directory.</translation>
+        <source>You can choose a temporary folder for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary folder.</source>
+        <translation type="vanished">You can choose a temporary folder for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary folder.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="535"/>
@@ -235,14 +248,12 @@ p, li { white-space: pre-wrap; }
         <translation>Genome aligner settings</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="20"/>
-        <source>Directories</source>
-        <translation>Directories</translation>
+        <source>Folders</source>
+        <translation type="vanished">Folders</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="26"/>
-        <source>Directory for built indexes</source>
-        <translation>Directory for built indexes</translation>
+        <source>Folder for built indexes</source>
+        <translation type="vanished">Folder for built indexes</translation>
     </message>
 </context>
 <context>
@@ -309,10 +320,10 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/GenomeAlignerCMDLineTask.cpp" line="185"/>
-        <source>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary directory. If --build-index option is applied, index will be saved to specified path.
+        <source>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary folder. If --build-index option is applied, index will be saved to specified path.
 
 </source>
-        <translation>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary directory. If --build-index option is applied, index will be saved to specified path.
+        <translation>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary folder. If --build-index option is applied, index will be saved to specified path.
 
 </translation>
     </message>
@@ -401,13 +412,13 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::GenomeAlignerIndexTask</name>
     <message>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="90"/>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="136"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="89"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="135"/>
         <source>File %1 is not found. Try to create index another time.</source>
         <translation>File %1 is not found. Try to create index another time.</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="183"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="182"/>
         <source>Can not init short reads loader. %1</source>
         <translation>Can not init short reads loader. %1</translation>
     </message>
@@ -425,12 +436,12 @@ p, li { white-space: pre-wrap; }
         <translation>Assembly DNA to reference sequence</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerPlugin.cpp" line="121"/>
+        <location filename="../src/GenomeAlignerPlugin.cpp" line="118"/>
         <source>UGENE Short Reads Aligner</source>
         <translation>UGENE Short Reads Aligner</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerPlugin.cpp" line="122"/>
+        <location filename="../src/GenomeAlignerPlugin.cpp" line="119"/>
         <source>UGENE Genome Aligner is an efficient and fast tool for short read alignment.It has 2 work modes: build index and align short reads (default mode).
 If there is no index available for reference sequence it will be built on the fly.
 
@@ -469,22 +480,6 @@ ugene --genome-aligner --reference=/path/to/ref --short-reads=/path/to/reads --r
     </message>
 </context>
 <context>
-    <name>U2::GenomeAlignerSettingsPageController</name>
-    <message>
-        <location filename="../src/GenomeAlignerSettingsController.cpp" line="55"/>
-        <source>Genome Aligner</source>
-        <translation>Genome Aligner</translation>
-    </message>
-</context>
-<context>
-    <name>U2::GenomeAlignerSettingsPageWidget</name>
-    <message>
-        <location filename="../src/GenomeAlignerSettingsController.cpp" line="96"/>
-        <source>Choose Directory</source>
-        <translation>Choose Directory</translation>
-    </message>
-</context>
-<context>
     <name>U2::GenomeAlignerSettingsWidget</name>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="112"/>
@@ -494,19 +489,19 @@ ugene --genome-aligner --reference=/path/to/ref --short-reads=/path/to/reads --r
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="164"/>
-        <source>The index directory has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
+        <source>The index folder has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
 
 Press "Ok" to delete this index file and create a new during the aligning.
-Press "Cancel" to change this parameter or the index directory.</source>
-        <translation>The index directory has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
+Press "Cancel" to change this parameter or the index folder.</source>
+        <translation>The index folder has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
 
 Press "Ok" to delete this index file and create a new during the aligning.
-Press "Cancel" to change this parameter or the index directory.</translation>
+Press "Cancel" to change this parameter or the index folder.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="180"/>
-        <source>Set index files directory</source>
-        <translation>Set index files directory</translation>
+        <source>Set index files folder</source>
+        <translation>Set index files folder</translation>
     </message>
 </context>
 <context>
@@ -771,13 +766,13 @@ Press "Cancel" to change this parameter or the index directory.</trans
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="294"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="295"/>
-        <source>Directory to save UGENE genome aligner output files.</source>
-        <translation>Directory to save UGENE genome aligner output files.</translation>
+        <source>Folder to save UGENE genome aligner output files.</source>
+        <translation>Folder to save UGENE genome aligner output files.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="298"/>
diff --git a/src/plugins/genome_aligner/transl/russian.ts b/src/plugins/genome_aligner/transl/russian.ts
index 839209f..71c79ec 100644
--- a/src/plugins/genome_aligner/transl/russian.ts
+++ b/src/plugins/genome_aligner/transl/russian.ts
@@ -26,12 +26,17 @@ p, li { white-space: pre-wrap; }
              количество памяти, используемое для выравнивания.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/BuildSuffixArraySettings.ui" line="103"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="92"/>
+        <source>Resources</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="109"/>
         <source>Total memory usage:</source>
         <translation>Использование памяти:</translation>
     </message>
     <message>
-        <location filename="../src/BuildSuffixArraySettings.ui" line="130"/>
+        <location filename="../src/BuildSuffixArraySettings.ui" line="145"/>
         <source>System memory size:</source>
         <translation>Доступно памяти:</translation>
     </message>
@@ -159,9 +164,18 @@ p, li { white-space: pre-wrap; }
         <translation>Использование памяти для индекса:</translation>
     </message>
     <message>
+        <location filename="../src/GenomeAlignerSettings.ui" line="513"/>
+        <source>You can choose a temporary directory for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary directory.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="545"/>
         <source>Directory for index files:</source>
-        <translation>Директория для индексных файлов:</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Folder for index files:</source>
+        <translation type="vanished">Папка для индексных файлов:</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="201"/>
@@ -202,9 +216,8 @@ p, li { white-space: pre-wrap; }
              количество памяти, используемое для выравнивания.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettings.ui" line="513"/>
-        <source>You can choose a temporary directory for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary directory.</source>
-        <translation>Вы можете задать временную директорию для сохранения индексных файлов для референса, которые будут построены в процессе выравнивания. Если необходимо запустить этот алгоритм снова с той же референсной последовательностью и с тем же параметром разбиения, вы можете использовать этот индексный файл, который будет сохранен во временной директории.</translation>
+        <source>You can choose a temporary folder for saving index files for the reference that will be built during the alignment. If you need to run this algorithm one more time with the same reference and with the same reference fragmentation parameter, you can use this prebuilt index that will be located in the temporary folder.</source>
+        <translation type="vanished">Вы можете задать временную папку для сохранения индексных файлов для референса, которые будут построены в процессе выравнивания. Если необходимо запустить этот алгоритм снова с той же референсной последовательностью и с тем же параметром разбиения, вы можете использовать этот индексный файл, который будет сохранен во временной папки.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettings.ui" line="535"/>
@@ -235,14 +248,12 @@ p, li { white-space: pre-wrap; }
         <translation>Настройки</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="20"/>
-        <source>Directories</source>
-        <translation>Директории</translation>
+        <source>Folders</source>
+        <translation type="vanished">Папки</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerSettingsWidget.ui" line="26"/>
-        <source>Directory for built indexes</source>
-        <translation>Директория для сохранения индекса</translation>
+        <source>Folder for built indexes</source>
+        <translation type="vanished">Папка для сохранения индекса</translation>
     </message>
 </context>
 <context>
@@ -309,10 +320,10 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/GenomeAlignerCMDLineTask.cpp" line="185"/>
-        <source>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary directory. If --build-index option is applied, index will be saved to specified path.
+        <source>  --%1    Path to prebuilt index (base file name or with .idx extension). If not set, index is searched in system temporary folder. If --build-index option is applied, index will be saved to specified path.
 
 </source>
-        <translation>  --%1    Путь до индекса (только имя или с расширением .idx). Если не задан, будет произведен поиск индекса во временной директории. Если --build-index опция применена, индекс будет сохранен в указанное место.
+        <translation>  --%1    Путь до индекса (только имя или с расширением .idx). Если не задан, будет произведен поиск индекса во временной папки. Если --build-index опция применена, индекс будет сохранен в указанное место.
 
 </translation>
     </message>
@@ -399,13 +410,13 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::GenomeAlignerIndexTask</name>
     <message>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="90"/>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="136"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="89"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="135"/>
         <source>File %1 is not found. Try to create index another time.</source>
         <translation>Файл %1 не найден. Попробуйте создать индекс еще раз.</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerIndexTask.cpp" line="183"/>
+        <location filename="../src/GenomeAlignerIndexTask.cpp" line="182"/>
         <source>Can not init short reads loader. %1</source>
         <translation>Невозможно загрузить короткие риды. %1</translation>
     </message>
@@ -423,12 +434,12 @@ p, li { white-space: pre-wrap; }
         <translation>Сборка контигов по последовательности</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerPlugin.cpp" line="121"/>
+        <location filename="../src/GenomeAlignerPlugin.cpp" line="118"/>
         <source>UGENE Short Reads Aligner</source>
         <translation>Модуль сборки контигов UGENE</translation>
     </message>
     <message>
-        <location filename="../src/GenomeAlignerPlugin.cpp" line="122"/>
+        <location filename="../src/GenomeAlignerPlugin.cpp" line="119"/>
         <source>UGENE Genome Aligner is an efficient and fast tool for short read alignment.It has 2 work modes: build index and align short reads (default mode).
 If there is no index available for reference sequence it will be built on the fly.
 
@@ -467,22 +478,6 @@ ugene --genome-aligner --reference=/path/to/ref --short-reads=/path/to/reads --r
     </message>
 </context>
 <context>
-    <name>U2::GenomeAlignerSettingsPageController</name>
-    <message>
-        <location filename="../src/GenomeAlignerSettingsController.cpp" line="55"/>
-        <source>Genome Aligner</source>
-        <translation>Модуль сборки контигов UGENE</translation>
-    </message>
-</context>
-<context>
-    <name>U2::GenomeAlignerSettingsPageWidget</name>
-    <message>
-        <location filename="../src/GenomeAlignerSettingsController.cpp" line="96"/>
-        <source>Choose Directory</source>
-        <translation>Выберите директорию</translation>
-    </message>
-</context>
-<context>
     <name>U2::GenomeAlignerSettingsWidget</name>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="112"/>
@@ -492,19 +487,19 @@ ugene --genome-aligner --reference=/path/to/ref --short-reads=/path/to/reads --r
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="164"/>
-        <source>The index directory has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
+        <source>The index folder has already contain the prebuilt index. But its reference fragmentation parameter is %1 and it doesn't equal to the parameter you have chosen (%2).
 
 Press "Ok" to delete this index file and create a new during the aligning.
-Press "Cancel" to change this parameter or the index directory.</source>
-        <translation>Индексная директория уже содержит индекс. Но параметр разбиения %1 и это не совпадает с параметром, который задан (%2).
+Press "Cancel" to change this parameter or the index folder.</source>
+        <translation>Индексная папка уже содержит индекс. Но параметр разбиения %1 и это не совпадает с параметром, который задан (%2).
 
 Нажмите "ОК" чтобы удалить этот индексный файл и создать новый в процессе выравнивания.
-Нажмите "Отмена" чтобы изменить параметр или индексную директорию.</translation>
+Нажмите "Отмена" чтобы изменить параметр или индексную папку.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerSettingsWidget.cpp" line="180"/>
-        <source>Set index files directory</source>
-        <translation>Выбрать индексную директорию</translation>
+        <source>Set index files folder</source>
+        <translation>Выбрать индексную папку</translation>
     </message>
 </context>
 <context>
@@ -769,13 +764,13 @@ Press "Cancel" to change this parameter or the index directory.</sourc
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="294"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="295"/>
-        <source>Directory to save UGENE genome aligner output files.</source>
-        <translation>Директория для сохранения выходных файлов модуля сборки контигов.</translation>
+        <source>Folder to save UGENE genome aligner output files.</source>
+        <translation>Папка для сохранения выходных файлов модуля сборки контигов.</translation>
     </message>
     <message>
         <location filename="../src/GenomeAlignerWorker.cpp" line="298"/>
diff --git a/src/plugins/linkdata_support/src/LinkDataScriptLibrary.cpp b/src/plugins/linkdata_support/src/LinkDataScriptLibrary.cpp
index d9ee8aa..53f1fd3 100644
--- a/src/plugins/linkdata_support/src/LinkDataScriptLibrary.cpp
+++ b/src/plugins/linkdata_support/src/LinkDataScriptLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,18 @@
  * MA 02110-1301, USA.
  */
 
-#include "LinkDataScriptLibrary.h"
+#include <QEventLoop>
+#include <QNetworkReply>
+#include <QNetworkRequest>
 
-#include <U2Core/Log.h>
-#include <U2Core/NetworkConfiguration.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
+#include <U2Core/Log.h>
+#include <U2Core/NetworkConfiguration.h>
+
 #include <U2Lang/WorkflowScriptEngine.h>
 
-#include <QtNetwork/QNetworkRequest>
-#include <QtNetwork/QNetworkReply>
+#include "LinkDataScriptLibrary.h"
 
 namespace U2 {
 
diff --git a/src/plugins/linkdata_support/src/LinkDataScriptLibrary.h b/src/plugins/linkdata_support/src/LinkDataScriptLibrary.h
index 18d0e79..2a023a7 100644
--- a/src/plugins/linkdata_support/src/LinkDataScriptLibrary.h
+++ b/src/plugins/linkdata_support/src/LinkDataScriptLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,9 +21,12 @@
 #ifndef _U2_LINKDATA_SCRIPT_LIBRARY_H_
 #define _U2_LINKDATA_SCRIPT_LIBRARY_H_
 
-#include <QtScript>
-#include <QtNetwork/QNetworkAccessManager>
-#include <QtNetwork/QAuthenticator>
+#include <QAuthenticator>
+#include <QNetworkAccessManager>
+#include <QScriptValue>
+
+class QEventLoop;
+class QScriptContext;
 
 namespace U2 {
 
diff --git a/src/plugins/linkdata_support/src/LinkDataSupportPlugin.cpp b/src/plugins/linkdata_support/src/LinkDataSupportPlugin.cpp
index ddf04e1..d399343 100644
--- a/src/plugins/linkdata_support/src/LinkDataSupportPlugin.cpp
+++ b/src/plugins/linkdata_support/src/LinkDataSupportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/linkdata_support/src/LinkDataSupportPlugin.h b/src/plugins/linkdata_support/src/LinkDataSupportPlugin.h
index 0ad4613..bfbef24 100644
--- a/src/plugins/linkdata_support/src/LinkDataSupportPlugin.h
+++ b/src/plugins/linkdata_support/src/LinkDataSupportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
index 0b74ce8..285ca89 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #define _CRT_SECURE_NO_WARNINGS
 
-#include <QtCore/QLibrary>
+#include <QLibrary>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppResources.h>
@@ -42,7 +42,7 @@ extern "C" Q_DECL_EXPORT Plugin * U2_PLUGIN_INIT_FUNC() {
 
 extern "C" Q_DECL_EXPORT bool U2_PLUGIN_VERIFY_FUNC() {
     {
-        volatile OpenCLSupportPlugin plug();
+        volatile QScopedPointer<OpenCLSupportPlugin> plug(new OpenCLSupportPlugin());
         Q_UNUSED(plug);
     }
     return true;
diff --git a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
index b0ade6b..df2b56b 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
+++ b/src/plugins/opencl_support/src/OpenCLSupportPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
index c8389c6..b0f1b0a 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
+++ b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QLayout>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QCheckBox>
-#endif
+#include <QLabel>
+#include <QLayout>
+#include <QCheckBox>
 
 #include <U2Core/AppContext.h>
 #include <U2Algorithm/OpenCLGpuRegistry.h>
@@ -74,7 +67,7 @@ AppSettingsGUIPageWidget * OpenCLSupportSettingsPageController::createWidget( Ap
     return w;
 }
 
-const QString OpenCLSupportSettingsPageController::helpPageId = QString("18222950");
+const QString OpenCLSupportSettingsPageController::helpPageId = QString("20874855");
 
 OpenCLSupportSettingsPageState::OpenCLSupportSettingsPageState( int num_gpus ) {
     assert( num_gpus >= 0 );
diff --git a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.h b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.h
index b35c35c..66201d2 100644
--- a/src/plugins/opencl_support/src/OpenCLSupportSettingsController.h
+++ b/src/plugins/opencl_support/src/OpenCLSupportSettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,9 @@
 #ifndef __OPENCL_SUPPORT_SETTINGS_CONTROLLER__
 #define __OPENCL_SUPPORT_SETTINGS_CONTROLLER__
 
-#include <QtCore/QVector>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QCheckBox>
-#endif
+#include <QVector>
+#include <QLabel>
+#include <QCheckBox>
 
 #include <U2Gui/AppSettingsGUI.h>
 
diff --git a/src/plugins/opencl_support/transl/english.ts b/src/plugins/opencl_support/transl/english.ts
index 6897cce..0b3b3b2 100644
--- a/src/plugins/opencl_support/transl/english.ts
+++ b/src/plugins/opencl_support/transl/english.ts
@@ -6,7 +6,7 @@
     <message>
         <location filename="../src/OpenCLSupportPlugin.cpp" line="52"/>
         <source>Problem occurred loading the OpenCL driver. Please try to update drivers if                                                you're going to make calculations on your video card. For details see this page:                                                <a href="%1">%1</a></source>
-        <translation type="unfinished"></translation>
+        <translation>Problem occurred loading the OpenCL driver. Please try to update drivers if                                                you're going to make calculations on your video card. For details see this page:                                                <a href="%1">%1</a></translation>
     </message>
     <message>
         <location filename="../src/OpenCLSupportPlugin.cpp" line="59"/>
@@ -57,7 +57,7 @@
 <context>
     <name>U2::OpenCLSupportSettingsPageController</name>
     <message>
-        <location filename="../src/OpenCLSupportSettingsController.cpp" line="42"/>
+        <location filename="../src/OpenCLSupportSettingsController.cpp" line="35"/>
         <source>OpenCL</source>
         <translation>OpenCL</translation>
     </message>
diff --git a/src/plugins/opencl_support/transl/russian.ts b/src/plugins/opencl_support/transl/russian.ts
index e19f25b..d523879 100644
--- a/src/plugins/opencl_support/transl/russian.ts
+++ b/src/plugins/opencl_support/transl/russian.ts
@@ -6,7 +6,7 @@
     <message>
         <location filename="../src/OpenCLSupportPlugin.cpp" line="52"/>
         <source>Problem occurred loading the OpenCL driver. Please try to update drivers if                                                you're going to make calculations on your video card. For details see this page:                                                <a href="%1">%1</a></source>
-        <translation type="unfinished"></translation>
+        <translation>Problem occurred loading the OpenCL driver. Please try to update drivers if                                                you're going to make calculations on your video card. For details see this page:                                                <a href="%1">%1</a></translation>
     </message>
     <message>
         <location filename="../src/OpenCLSupportPlugin.cpp" line="59"/>
@@ -57,7 +57,7 @@
 <context>
     <name>U2::OpenCLSupportSettingsPageController</name>
     <message>
-        <location filename="../src/OpenCLSupportSettingsController.cpp" line="42"/>
+        <location filename="../src/OpenCLSupportSettingsController.cpp" line="35"/>
         <source>OpenCL</source>
         <translation>Настройки OpenCL</translation>
     </message>
diff --git a/src/plugins/orf_marker/src/ORFDialog.cpp b/src/plugins/orf_marker/src/ORFDialog.cpp
index 3a87717..fd5db1f 100644
--- a/src/plugins/orf_marker/src/ORFDialog.cpp
+++ b/src/plugins/orf_marker/src/ORFDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -47,15 +47,9 @@
 
 #include <assert.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#include <QtGui/QTreeView>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QTreeView>
-#endif
+#include <QMenu>
+#include <QMessageBox>
+#include <QTreeView>
 
 #include "ORFMarkerTask.h"
 
@@ -79,7 +73,9 @@ ORFDialog::ORFDialog(ADVSequenceObjectContext* _ctx)
 : QDialog(_ctx->getAnnotatedDNAView()->getWidget()), aaUpdateTask(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223158");
+    new HelpButton(this, buttonBox, "20875062");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     tabWidget->setCurrentIndex(0);
 
@@ -374,6 +370,7 @@ void ORFDialog::accept()
 
         const CreateAnnotationModel &m = ac->getModel();
         AnnotationTableObject *aObj = m.getAnnotationObject();
+        ctx->getAnnotatedDNAView()->tryAddObject(aObj);
         FindORFsToAnnotationsTask *orfTask = new FindORFsToAnnotationsTask(aObj, ctx->getSequenceObject()->getEntityRef(), s, m.groupName, m.description);
         AppContext::getTaskScheduler()->registerTopLevelTask(orfTask);
     }
diff --git a/src/plugins/orf_marker/src/ORFDialog.h b/src/plugins/orf_marker/src/ORFDialog.h
index a8fb90b..d4ff4b3 100644
--- a/src/plugins/orf_marker/src/ORFDialog.h
+++ b/src/plugins/orf_marker/src/ORFDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,16 +28,11 @@
 #include <U2Core/U2Region.h>
 #include <U2Gui/RegionSelector.h>
 
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-#include <QtGui/QCloseEvent>
-#include <QtCore/QTimer>
+#include <QList>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+#include <QCloseEvent>
+#include <QTimer>
 
 #include <U2Algorithm/ORFAlgorithmTask.h>
 
diff --git a/src/plugins/orf_marker/src/ORFDialogUI.ui b/src/plugins/orf_marker/src/ORFDialogUI.ui
index 63ea568..345be3d 100644
--- a/src/plugins/orf_marker/src/ORFDialogUI.ui
+++ b/src/plugins/orf_marker/src/ORFDialogUI.ui
@@ -41,7 +41,7 @@
    <string>Find Open Reading Frames in sequence</string>
   </property>
   <property name="sizeGripEnabled">
-   <bool>true</bool>
+   <bool>false</bool>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_5">
    <property name="sizeConstraint">
diff --git a/src/plugins/orf_marker/src/ORFMarkerPlugin.cpp b/src/plugins/orf_marker/src/ORFMarkerPlugin.cpp
index 0daf069..c576d91 100644
--- a/src/plugins/orf_marker/src/ORFMarkerPlugin.cpp
+++ b/src/plugins/orf_marker/src/ORFMarkerPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/src/ORFMarkerPlugin.h b/src/plugins/orf_marker/src/ORFMarkerPlugin.h
index b06a861..2ce91dc 100644
--- a/src/plugins/orf_marker/src/ORFMarkerPlugin.h
+++ b/src/plugins/orf_marker/src/ORFMarkerPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/src/ORFMarkerTask.cpp b/src/plugins/orf_marker/src/ORFMarkerTask.cpp
index fe61757..1306757 100644
--- a/src/plugins/orf_marker/src/ORFMarkerTask.cpp
+++ b/src/plugins/orf_marker/src/ORFMarkerTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/src/ORFMarkerTask.h b/src/plugins/orf_marker/src/ORFMarkerTask.h
index eb0751f..2cdb9d6 100644
--- a/src/plugins/orf_marker/src/ORFMarkerTask.h
+++ b/src/plugins/orf_marker/src/ORFMarkerTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_ORF_MARKER_TASK_H_
 #define _U2_ORF_MARKER_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Algorithm/ORFAlgorithmTask.h>
 #include <U2Core/AutoAnnotationsSupport.h>
diff --git a/src/plugins/orf_marker/src/ORFMarkerTests.cpp b/src/plugins/orf_marker/src/ORFMarkerTests.cpp
index 16cee4e..ab8be61 100644
--- a/src/plugins/orf_marker/src/ORFMarkerTests.cpp
+++ b/src/plugins/orf_marker/src/ORFMarkerTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/src/ORFMarkerTests.h b/src/plugins/orf_marker/src/ORFMarkerTests.h
index 8e8c98c..beb3a52 100644
--- a/src/plugins/orf_marker/src/ORFMarkerTests.h
+++ b/src/plugins/orf_marker/src/ORFMarkerTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <U2Core/U2Region.h>
 #include <U2View/AnnotatedDNAView.h>
 #include <U2Algorithm/ORFAlgorithmTask.h>
diff --git a/src/plugins/orf_marker/src/ORFQuery.cpp b/src/plugins/orf_marker/src/ORFQuery.cpp
index 80e214a..4042a24 100644
--- a/src/plugins/orf_marker/src/ORFQuery.cpp
+++ b/src/plugins/orf_marker/src/ORFQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,11 +35,7 @@
 
 #include <U2Algorithm/ORFAlgorithmTask.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 namespace U2 {
 
diff --git a/src/plugins/orf_marker/src/ORFQuery.h b/src/plugins/orf_marker/src/ORFQuery.h
index 91d67c2..69901db 100644
--- a/src/plugins/orf_marker/src/ORFQuery.h
+++ b/src/plugins/orf_marker/src/ORFQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/src/ORFWorker.cpp b/src/plugins/orf_marker/src/ORFWorker.cpp
index d61b06b..442dfa8 100644
--- a/src/plugins/orf_marker/src/ORFWorker.cpp
+++ b/src/plugins/orf_marker/src/ORFWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -41,11 +41,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Algorithm/ORFAlgorithmTask.h>
 #include <U2Core/FailTask.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 /* TRANSLATOR U2::LocalWorkflow::ORFWorker */
 
diff --git a/src/plugins/orf_marker/src/ORFWorker.h b/src/plugins/orf_marker/src/ORFWorker.h
index eb4d338..d5b8471 100644
--- a/src/plugins/orf_marker/src/ORFWorker.h
+++ b/src/plugins/orf_marker/src/ORFWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/orf_marker/transl/english.ts b/src/plugins/orf_marker/transl/english.ts
index 5680371..d97e0ec 100644
--- a/src/plugins/orf_marker/transl/english.ts
+++ b/src/plugins/orf_marker/transl/english.ts
@@ -392,6 +392,14 @@ Ignore boundary ORFs which last beyond the search region
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
+    <message>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::ORFMarkerPlugin</name>
diff --git a/src/plugins/orf_marker/transl/russian.ts b/src/plugins/orf_marker/transl/russian.ts
index e349076..d142f97 100644
--- a/src/plugins/orf_marker/transl/russian.ts
+++ b/src/plugins/orf_marker/transl/russian.ts
@@ -394,6 +394,14 @@ Ignore boundary ORFs which last beyond the search region
         <source>Sequence object is NULL</source>
         <translation>Sequence object is NULL</translation>
     </message>
+    <message>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>U2::ORFMarkerPlugin</name>
diff --git a/src/plugins/pcr/pcr.pri b/src/plugins/pcr/pcr.pri
index dfc297a..5e49137 100644
--- a/src/plugins/pcr/pcr.pri
+++ b/src/plugins/pcr/pcr.pri
@@ -6,4 +6,4 @@ PLUGIN_VENDOR=Unipro
 
 include( ../../ugene_plugin_common.pri )
 
-greaterThan(QT_MAJOR_VERSION, 4): QT += printsupport
+QT += printsupport
diff --git a/src/plugins/pcr/src/EditPrimerDialog.cpp b/src/plugins/pcr/src/EditPrimerDialog.cpp
index 777562e..f861374 100644
--- a/src/plugins/pcr/src/EditPrimerDialog.cpp
+++ b/src/plugins/pcr/src/EditPrimerDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,7 +50,7 @@ EditPrimerDialog::EditPrimerDialog(QWidget *parent, const Primer &editToPrimer)
 void EditPrimerDialog::init() {
     GCOUNTER(cvar, tvar, "Add primer in library");
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223249");
+    new HelpButton(this, buttonBox, "20875153");
 
     primerEdit->setValidator(new PrimerValidator(this));
 
diff --git a/src/plugins/pcr/src/EditPrimerDialog.h b/src/plugins/pcr/src/EditPrimerDialog.h
index 706050e..aaefcd0 100644
--- a/src/plugins/pcr/src/EditPrimerDialog.h
+++ b/src/plugins/pcr/src/EditPrimerDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/ExtractProductTask.cpp b/src/plugins/pcr/src/ExtractProductTask.cpp
index 5e7fabf..30cad52 100644
--- a/src/plugins/pcr/src/ExtractProductTask.cpp
+++ b/src/plugins/pcr/src/ExtractProductTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -224,7 +224,7 @@ void ExtractProductTask::run() {
 
     DNASequence productSequence = getProductSequence();
     CHECK_OP(stateInfo, );
-    U2EntityRef productRef = U2SequenceUtils::import(dbiRef, productSequence, stateInfo);
+    U2EntityRef productRef = U2SequenceUtils::import(stateInfo, dbiRef, productSequence);
     CHECK_OP(stateInfo, );
 
     U2SequenceObject *sequenceObject = new U2SequenceObject(productSequence.getName(), productRef);
diff --git a/src/plugins/pcr/src/ExtractProductTask.h b/src/plugins/pcr/src/ExtractProductTask.h
index 816a81f..fe64935 100644
--- a/src/plugins/pcr/src/ExtractProductTask.h
+++ b/src/plugins/pcr/src/ExtractProductTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/FindPrimerPairsWorker.cpp b/src/plugins/pcr/src/FindPrimerPairsWorker.cpp
index 9a6ca22..2cad9c5 100644
--- a/src/plugins/pcr/src/FindPrimerPairsWorker.cpp
+++ b/src/plugins/pcr/src/FindPrimerPairsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/FindPrimerPairsWorker.h b/src/plugins/pcr/src/FindPrimerPairsWorker.h
index 4bf58a1..e3896a2 100644
--- a/src/plugins/pcr/src/FindPrimerPairsWorker.h
+++ b/src/plugins/pcr/src/FindPrimerPairsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/DNASequence.h>
 
 #include "PrimerStatistics.h"
diff --git a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
index 4690706..98b4d5f 100644
--- a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-const QString InSilicoPcrOPWidgetFactory::GROUP_DOC_PAGE = "18223247";
+const QString InSilicoPcrOPWidgetFactory::GROUP_DOC_PAGE = "20875151";
 
 InSilicoPcrOPWidgetFactory::InSilicoPcrOPWidgetFactory()
 : OPWidgetFactory()
diff --git a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.h b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.h
index e8ad5d1..f8ece65 100644
--- a/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.h
+++ b/src/plugins/pcr/src/InSilicoPcrOPWidgetFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
index abcfd3d..5930caf 100644
--- a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -67,6 +67,7 @@ InSilicoPcrOptionPanelWidget::InSilicoPcrOptionPanelWidget(AnnotatedDNAView *ann
     annsComboBox->addItem(tr("Inner"), ExtractProductSettings::Inner);
     annsComboBox->addItem(tr("All intersected"), ExtractProductSettings::All);
     annsComboBox->addItem(tr("None"), ExtractProductSettings::None);
+    annsComboBox->model()->sort(0);
 
     forwardPrimerBox->setAnnotatedDnaView(annotatedDnaView);
     reversePrimerBox->setAnnotatedDnaView(annotatedDnaView);
diff --git a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
index ec8b644..810dd08 100644
--- a/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
+++ b/src/plugins/pcr/src/InSilicoPcrOptionPanelWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp b/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
index 87aea3a..d6c98a1 100644
--- a/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrProductsTable.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrProductsTable.h b/src/plugins/pcr/src/InSilicoPcrProductsTable.h
index 839e577..e6302e4 100644
--- a/src/plugins/pcr/src/InSilicoPcrProductsTable.h
+++ b/src/plugins/pcr/src/InSilicoPcrProductsTable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrTask.cpp b/src/plugins/pcr/src/InSilicoPcrTask.cpp
index 3895d3c..be97a64 100644
--- a/src/plugins/pcr/src/InSilicoPcrTask.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrTask.h b/src/plugins/pcr/src/InSilicoPcrTask.h
index 44a5172..8f9058f 100644
--- a/src/plugins/pcr/src/InSilicoPcrTask.h
+++ b/src/plugins/pcr/src/InSilicoPcrTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrWorker.cpp b/src/plugins/pcr/src/InSilicoPcrWorker.cpp
index a8b1e81..f87c659 100644
--- a/src/plugins/pcr/src/InSilicoPcrWorker.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
 * MA 02110-1301, USA.
 */
 
+#include <QTextStream>
+
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
@@ -38,11 +40,10 @@
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
+#include "InSilicoPcrWorker.h"
 #include "InSilicoPcrWorkflowTask.h"
 #include "PrimersGrouperWorker.h"
 
-#include "InSilicoPcrWorker.h"
-
 namespace U2 {
 namespace LocalWorkflow {
 
diff --git a/src/plugins/pcr/src/InSilicoPcrWorker.h b/src/plugins/pcr/src/InSilicoPcrWorker.h
index 9aaefd0..c3954bd 100644
--- a/src/plugins/pcr/src/InSilicoPcrWorker.h
+++ b/src/plugins/pcr/src/InSilicoPcrWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrWorkflowTask.cpp b/src/plugins/pcr/src/InSilicoPcrWorkflowTask.cpp
index b53430f..dcbf176 100644
--- a/src/plugins/pcr/src/InSilicoPcrWorkflowTask.cpp
+++ b/src/plugins/pcr/src/InSilicoPcrWorkflowTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/InSilicoPcrWorkflowTask.h b/src/plugins/pcr/src/InSilicoPcrWorkflowTask.h
index 1930f4a..6786f89 100644
--- a/src/plugins/pcr/src/InSilicoPcrWorkflowTask.h
+++ b/src/plugins/pcr/src/InSilicoPcrWorkflowTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PcrOptionsPanelSavableTab.cpp b/src/plugins/pcr/src/PcrOptionsPanelSavableTab.cpp
index c0251da..f01163c 100644
--- a/src/plugins/pcr/src/PcrOptionsPanelSavableTab.cpp
+++ b/src/plugins/pcr/src/PcrOptionsPanelSavableTab.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PcrOptionsPanelSavableTab.h b/src/plugins/pcr/src/PcrOptionsPanelSavableTab.h
index ee591d6..f553b41 100644
--- a/src/plugins/pcr/src/PcrOptionsPanelSavableTab.h
+++ b/src/plugins/pcr/src/PcrOptionsPanelSavableTab.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PcrPlugin.cpp b/src/plugins/pcr/src/PcrPlugin.cpp
index 4b34f0f..1dca38f 100644
--- a/src/plugins/pcr/src/PcrPlugin.cpp
+++ b/src/plugins/pcr/src/PcrPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PcrPlugin.h b/src/plugins/pcr/src/PcrPlugin.h
index 5823812..050c5ec 100644
--- a/src/plugins/pcr/src/PcrPlugin.h
+++ b/src/plugins/pcr/src/PcrPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/Primer.cpp b/src/plugins/pcr/src/Primer.cpp
index 9953bc3..99d0fc5 100644
--- a/src/plugins/pcr/src/Primer.cpp
+++ b/src/plugins/pcr/src/Primer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/Primer.h b/src/plugins/pcr/src/Primer.h
index 8c303a1..9f6073b 100644
--- a/src/plugins/pcr/src/Primer.h
+++ b/src/plugins/pcr/src/Primer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerDimersFinder.cpp b/src/plugins/pcr/src/PrimerDimersFinder.cpp
index 9373e04..55e444e 100644
--- a/src/plugins/pcr/src/PrimerDimersFinder.cpp
+++ b/src/plugins/pcr/src/PrimerDimersFinder.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
  * MA 02110-1301, USA.
  */
 
+#include <QMap>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/DNATranslation.h>
 #include <U2Core/TextUtils.h>
diff --git a/src/plugins/pcr/src/PrimerDimersFinder.h b/src/plugins/pcr/src/PrimerDimersFinder.h
index 7c3f754..45feccd 100644
--- a/src/plugins/pcr/src/PrimerDimersFinder.h
+++ b/src/plugins/pcr/src/PrimerDimersFinder.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerGroupBox.cpp b/src/plugins/pcr/src/PrimerGroupBox.cpp
index d431fb6..b9c8513 100644
--- a/src/plugins/pcr/src/PrimerGroupBox.cpp
+++ b/src/plugins/pcr/src/PrimerGroupBox.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerGroupBox.h b/src/plugins/pcr/src/PrimerGroupBox.h
index 13ab5a0..d66e0e4 100644
--- a/src/plugins/pcr/src/PrimerGroupBox.h
+++ b/src/plugins/pcr/src/PrimerGroupBox.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibrary.cpp b/src/plugins/pcr/src/PrimerLibrary.cpp
index 84e350b..f80f565 100644
--- a/src/plugins/pcr/src/PrimerLibrary.cpp
+++ b/src/plugins/pcr/src/PrimerLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibrary.h b/src/plugins/pcr/src/PrimerLibrary.h
index 446175e..23df316 100644
--- a/src/plugins/pcr/src/PrimerLibrary.h
+++ b/src/plugins/pcr/src/PrimerLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryMdiWindow.cpp b/src/plugins/pcr/src/PrimerLibraryMdiWindow.cpp
index 8d1019d..c19fcb0 100644
--- a/src/plugins/pcr/src/PrimerLibraryMdiWindow.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryMdiWindow.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryMdiWindow.h b/src/plugins/pcr/src/PrimerLibraryMdiWindow.h
index 78a0c7c..3331dcf 100644
--- a/src/plugins/pcr/src/PrimerLibraryMdiWindow.h
+++ b/src/plugins/pcr/src/PrimerLibraryMdiWindow.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibrarySelector.cpp b/src/plugins/pcr/src/PrimerLibrarySelector.cpp
index abcfe3a..e28f73c 100644
--- a/src/plugins/pcr/src/PrimerLibrarySelector.cpp
+++ b/src/plugins/pcr/src/PrimerLibrarySelector.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ PrimerLibrarySelector::PrimerLibrarySelector(QWidget *parent)
 {
     GCOUNTER(cvar, tvar, "PrimerLibrarySelector");
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223247");
+    new HelpButton(this, buttonBox, "20875151");
 
     connect(primerTable, SIGNAL(doubleClicked(const QModelIndex &)), SLOT(accept()));
     connect(primerTable->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), SLOT(sl_selectionChanged()));
diff --git a/src/plugins/pcr/src/PrimerLibrarySelector.h b/src/plugins/pcr/src/PrimerLibrarySelector.h
index 197649e..bd3ed53 100644
--- a/src/plugins/pcr/src/PrimerLibrarySelector.h
+++ b/src/plugins/pcr/src/PrimerLibrarySelector.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryTable.cpp b/src/plugins/pcr/src/PrimerLibraryTable.cpp
index abd1f42..e4b82e3 100644
--- a/src/plugins/pcr/src/PrimerLibraryTable.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryTable.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryTable.h b/src/plugins/pcr/src/PrimerLibraryTable.h
index 41ee115..f43e7c0 100644
--- a/src/plugins/pcr/src/PrimerLibraryTable.h
+++ b/src/plugins/pcr/src/PrimerLibraryTable.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryTableController.cpp b/src/plugins/pcr/src/PrimerLibraryTableController.cpp
index 9938a4e..f40191e 100644
--- a/src/plugins/pcr/src/PrimerLibraryTableController.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryTableController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryTableController.h b/src/plugins/pcr/src/PrimerLibraryTableController.h
index ff77da6..2e05376 100644
--- a/src/plugins/pcr/src/PrimerLibraryTableController.h
+++ b/src/plugins/pcr/src/PrimerLibraryTableController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLibraryWidget.cpp b/src/plugins/pcr/src/PrimerLibraryWidget.cpp
index 0ad089f..ab81deb 100644
--- a/src/plugins/pcr/src/PrimerLibraryWidget.cpp
+++ b/src/plugins/pcr/src/PrimerLibraryWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -52,7 +52,7 @@ PrimerLibraryWidget::PrimerLibraryWidget(QWidget *parent)
 : QWidget(parent), editPrimerButton(NULL), removePrimersButton(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223249");
+    new HelpButton(this, buttonBox, "20875153");
 
     QPushButton *newPrimerButton = buttonBox->addButton(tr("New primer"), QDialogButtonBox::ActionRole);
     connect(newPrimerButton, SIGNAL(clicked()), SLOT(sl_newPrimer()));
diff --git a/src/plugins/pcr/src/PrimerLibraryWidget.h b/src/plugins/pcr/src/PrimerLibraryWidget.h
index 58713d9..cf3f3fa 100644
--- a/src/plugins/pcr/src/PrimerLibraryWidget.h
+++ b/src/plugins/pcr/src/PrimerLibraryWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerLineEdit.cpp b/src/plugins/pcr/src/PrimerLineEdit.cpp
index fe9ef1e..bba05ec 100644
--- a/src/plugins/pcr/src/PrimerLineEdit.cpp
+++ b/src/plugins/pcr/src/PrimerLineEdit.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -66,7 +66,7 @@ void PrimerLineEdit::paintEvent(QPaintEvent *event) {
 }
 
 QRect PrimerLineEdit::placeHolderRect() const {
-    QStyleOptionFrameV2 panel;
+    QStyleOptionFrame panel;
     initStyleOption(&panel);
     QRect r = style()->subElementRect(QStyle::SE_LineEditContents, &panel, this);
     r.setX(r.x() + textMargins().left());
@@ -95,7 +95,9 @@ PrimerValidator::PrimerValidator(QObject *parent, bool allowExtended)
 }
 
 QValidator::State PrimerValidator::validate(QString &input, int &pos) const {
+    input = input.simplified();
     input = input.toUpper();
+    input.remove(" ");
     return QRegExpValidator::validate(input, pos);
 }
 
diff --git a/src/plugins/pcr/src/PrimerLineEdit.h b/src/plugins/pcr/src/PrimerLineEdit.h
index c5d431a..b1fb5db 100644
--- a/src/plugins/pcr/src/PrimerLineEdit.h
+++ b/src/plugins/pcr/src/PrimerLineEdit.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerStatistics.cpp b/src/plugins/pcr/src/PrimerStatistics.cpp
index 0661294..9381292 100644
--- a/src/plugins/pcr/src/PrimerStatistics.cpp
+++ b/src/plugins/pcr/src/PrimerStatistics.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimerStatistics.h b/src/plugins/pcr/src/PrimerStatistics.h
index a52e1b4..9d034e8 100644
--- a/src/plugins/pcr/src/PrimerStatistics.h
+++ b/src/plugins/pcr/src/PrimerStatistics.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimersDetailsDialog.cpp b/src/plugins/pcr/src/PrimersDetailsDialog.cpp
index 9e38b9d..e603924 100644
--- a/src/plugins/pcr/src/PrimersDetailsDialog.cpp
+++ b/src/plugins/pcr/src/PrimersDetailsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@ PrimersDetailsDialog::PrimersDetailsDialog(QWidget *parent, const QString &detai
 {
     GCOUNTER(cvar, tvar, "PrimersDetailsDialog");
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223248");
+    new HelpButton(this, buttonBox, "20875152");
     textEdit->setText(details);
 }
 
diff --git a/src/plugins/pcr/src/PrimersDetailsDialog.h b/src/plugins/pcr/src/PrimersDetailsDialog.h
index a41f467..44d5014 100644
--- a/src/plugins/pcr/src/PrimersDetailsDialog.h
+++ b/src/plugins/pcr/src/PrimersDetailsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimersGrouperWorker.cpp b/src/plugins/pcr/src/PrimersGrouperWorker.cpp
index 81659ad..46e1ec6 100644
--- a/src/plugins/pcr/src/PrimersGrouperWorker.cpp
+++ b/src/plugins/pcr/src/PrimersGrouperWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/PrimersGrouperWorker.h b/src/plugins/pcr/src/PrimersGrouperWorker.h
index 10d8e9b..94bfc52 100644
--- a/src/plugins/pcr/src/PrimersGrouperWorker.h
+++ b/src/plugins/pcr/src/PrimersGrouperWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/DNASequence.h>
 
 #include "PrimerStatistics.h"
diff --git a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
index 47423be..e47b2e9 100644
--- a/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
+++ b/src/plugins/pcr/src/export/ExportPrimersDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -61,7 +61,7 @@ ExportPrimersDialog::ExportPrimersDialog(const QList<Primer> &primers, QWidget *
     primers(primers)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223249");
+    new HelpButton(this, buttonBox, "20875153");
 
     init();
     connectSignals();
diff --git a/src/plugins/pcr/src/export/ExportPrimersDialog.h b/src/plugins/pcr/src/export/ExportPrimersDialog.h
index 99996db..cd68fd1 100644
--- a/src/plugins/pcr/src/export/ExportPrimersDialog.h
+++ b/src/plugins/pcr/src/export/ExportPrimersDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.cpp b/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.cpp
index dbf3b73..d6d45be 100644
--- a/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.cpp
+++ b/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,7 +48,7 @@ ExportPrimersToDatabaseTask::ExportPrimersToDatabaseTask(const QList<Primer> &pr
 void ExportPrimersToDatabaseTask::run() {
     foreach (const Primer &primer, primers) {
         U2SequenceImporter importer;
-        importer.startSequence(dbiRef, folder, primer.name, false, stateInfo);
+        importer.startSequence(stateInfo, dbiRef, folder, primer.name, false);
         CHECK_OP(stateInfo, );
         importer.addBlock(primer.sequence.toLocal8Bit().constData(), primer.sequence.length(), stateInfo);
         CHECK_OP(stateInfo, );
diff --git a/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.h b/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.h
index 30480dd..cae3d56 100644
--- a/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.h
+++ b/src/plugins/pcr/src/export/ExportPrimersToDatabaseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.cpp b/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.cpp
index 2ac9af5..4bfd06c 100644
--- a/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.cpp
+++ b/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.h b/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.h
index 7df7f7f..27bafad 100644
--- a/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.h
+++ b/src/plugins/pcr/src/export/ExportPrimersToLocalFileTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
index 0d186eb..887c624 100644
--- a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
index 784def2..621f476 100644
--- a/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
+++ b/src/plugins/pcr/src/import/ImportPrimerFromObjectTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersDialog.cpp b/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
index 4ebeeb6..be9065c 100644
--- a/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimersDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -49,7 +49,7 @@ ImportPrimersDialog::ImportPrimersDialog(QWidget *parent) :
     waitForConnection(false)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223249");
+    new HelpButton(this, buttonBox, "20875153");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Import"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     init();
diff --git a/src/plugins/pcr/src/import/ImportPrimersDialog.h b/src/plugins/pcr/src/import/ImportPrimersDialog.h
index 4ea2c6b..0a1cc91 100644
--- a/src/plugins/pcr/src/import/ImportPrimersDialog.h
+++ b/src/plugins/pcr/src/import/ImportPrimersDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersFromFileTask.cpp b/src/plugins/pcr/src/import/ImportPrimersFromFileTask.cpp
index c2f8813..fdb76f4 100644
--- a/src/plugins/pcr/src/import/ImportPrimersFromFileTask.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimersFromFileTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersFromFileTask.h b/src/plugins/pcr/src/import/ImportPrimersFromFileTask.h
index 6d226f2..8fb6025 100644
--- a/src/plugins/pcr/src/import/ImportPrimersFromFileTask.h
+++ b/src/plugins/pcr/src/import/ImportPrimersFromFileTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.cpp b/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.cpp
index 3998db6..6437176 100644
--- a/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.h b/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.h
index d90e58c..670a168 100644
--- a/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.h
+++ b/src/plugins/pcr/src/import/ImportPrimersFromFolderTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersMultiTask.cpp b/src/plugins/pcr/src/import/ImportPrimersMultiTask.cpp
index 504ba62..8d68adc 100644
--- a/src/plugins/pcr/src/import/ImportPrimersMultiTask.cpp
+++ b/src/plugins/pcr/src/import/ImportPrimersMultiTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/src/import/ImportPrimersMultiTask.h b/src/plugins/pcr/src/import/ImportPrimersMultiTask.h
index 9daf1f2..df8bfc0 100644
--- a/src/plugins/pcr/src/import/ImportPrimersMultiTask.h
+++ b/src/plugins/pcr/src/import/ImportPrimersMultiTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/pcr/transl/english.ts b/src/plugins/pcr/transl/english.ts
index 56c0664..3842f19 100644
--- a/src/plugins/pcr/transl/english.ts
+++ b/src/plugins/pcr/transl/english.ts
@@ -141,7 +141,7 @@
     <message>
         <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="153"/>
         <source>Extract annotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Extract annotations</translation>
     </message>
     <message>
         <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="174"/>
@@ -340,7 +340,7 @@
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="46"/>
         <source>The sequence has an unsupported alphabet: only nucleotide alphabet is supported</source>
-        <translation type="unfinished"></translation>
+        <translation>The sequence has an unsupported alphabet: only nucleotide alphabet is supported</translation>
     </message>
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="47"/>
@@ -492,27 +492,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="85"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="86"/>
         <source>Show primers details</source>
         <translation>Show primers details</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="132"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="133"/>
         <source>Find product(s)</source>
         <translation>Find product(s)</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="135"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
         <source>Warning: </source>
         <translation>Warning: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="137"/>
         <source>Find product(s) anyway</source>
         <translation>Find product(s) anyway</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="213"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="214"/>
         <source>Extract In Silico PCR products</source>
         <translation>Extract In Silico PCR products</translation>
     </message>
@@ -645,12 +645,12 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrPrompter</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="163"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="164"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="166"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="167"/>
         <source>Simulates PCR for the sequences from <u>%1</u> and primer pairs from <u>%2</u>.</source>
         <translation>Simulates PCR for the sequences from <u>%1</u> and primer pairs from <u>%2</u>.</translation>
     </message>
@@ -658,22 +658,22 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrReportTask</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="366"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="367"/>
         <source>Generate In Silico PCR report</source>
         <translation>Generate In Silico PCR report</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="394"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="395"/>
         <source>Sequence name</source>
         <translation>Sequence name</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="410"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="411"/>
         <source>Products count table</source>
         <translation>Products count table</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="423"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="424"/>
         <source>Primer pair details</source>
         <translation>Primer pair details</translation>
     </message>
@@ -681,127 +681,127 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrWorker</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="78"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
         <source>Input sequence</source>
         <translation>Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="78"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
         <source>Input sequence.</source>
         <translation>Input sequence.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="80"/>
         <source>PCR product</source>
         <translation>PCR product</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="80"/>
         <source>PCR product sequence.</source>
         <translation>PCR product sequence.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="94"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
         <source>Primers URL</source>
         <translation>Primers URL</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="94"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
         <source>A URL to the input file with primer pairs.</source>
         <translation>A URL to the input file with primer pairs.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
         <source>Report URL</source>
         <translation>Report URL</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
         <source>A URL to the output file with the PCR report.</source>
         <translation>A URL to the output file with the PCR report.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
         <source>Mismatches</source>
         <translation>Mismatches</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
         <source>Number of allowed mismatches.</source>
         <translation>Number of allowed mismatches.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
         <source>Min perfect match</source>
         <translation>Min perfect match</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
         <source>Number of bases that match exactly on 3' end of primers.</source>
         <translation>Number of bases that match exactly on 3' end of primers.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
         <source>Max product size</source>
         <translation>Max product size</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
         <source>Maximum size of amplified region.</source>
         <translation>Maximum size of amplified region.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="100"/>
         <source>Extract annotations</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Extract annotations</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="100"/>
         <source>Extract annotations within a product region.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="132"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="133"/>
         <source>Inner</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="133"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="134"/>
         <source>All intersected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="134"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="135"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="139"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="140"/>
         <source>In Silico PCR</source>
         <translation>In Silico PCR</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="140"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="141"/>
         <source>Simulates PCR for input sequences and primer pairs. Creates the table with the PCR statistics.</source>
         <translation>Simulates PCR for input sequences and primer pairs. Creates the table with the PCR statistics.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="184"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="185"/>
         <source>Can not read the primers file: </source>
         <translation>Can not read the primers file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="194"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="195"/>
         <source>Can't read the file: </source>
         <translation>Can't read the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="197"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="198"/>
         <source>No primer sequences in the file: </source>
         <translation>No primer sequences in the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="198"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="199"/>
         <source>There is the odd number of primers in the file: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -810,27 +810,27 @@
         <translation type="vanished">There is the odd number of primers int the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="228"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="229"/>
         <source>Primer sequence is too long: %1. The pair is skipped</source>
         <translation>Primer sequence is too long: %1. The pair is skipped</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="285"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="286"/>
         <source>Wrong sequence objects count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="295"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="296"/>
         <source>Wrong annotations objects count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="325"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="326"/>
         <source>The sequence is too long: </source>
         <translation>The sequence is too long: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="359"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="360"/>
         <source>Multiple In Silico PCR</source>
         <translation>Multiple In Silico PCR</translation>
     </message>
diff --git a/src/plugins/pcr/transl/russian.ts b/src/plugins/pcr/transl/russian.ts
index 6032066..bc89a2c 100644
--- a/src/plugins/pcr/transl/russian.ts
+++ b/src/plugins/pcr/transl/russian.ts
@@ -141,7 +141,7 @@
     <message>
         <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="153"/>
         <source>Extract annotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Извлечь аннотации</translation>
     </message>
     <message>
         <location filename="../src/InSilicoPcrOptionPanelWidget.ui" line="174"/>
@@ -340,7 +340,7 @@
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="46"/>
         <source>The sequence has an unsupported alphabet: only nucleotide alphabet is supported</source>
-        <translation type="unfinished"></translation>
+        <translation>Последовательность содержит недопустимые символы: возможны только нуклеотиды</translation>
     </message>
     <message>
         <location filename="../src/import/ImportPrimerFromObjectTask.cpp" line="47"/>
@@ -492,27 +492,27 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="85"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="86"/>
         <source>Show primers details</source>
         <translation>Показать информацию о праймерах</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="132"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="133"/>
         <source>Find product(s)</source>
         <translation>Найти продукт(ы)</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="135"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
         <source>Warning: </source>
         <translation>Предупреждение: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="136"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="137"/>
         <source>Find product(s) anyway</source>
         <translation>Найти продукт(ы) в любом случае</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="213"/>
+        <location filename="../src/InSilicoPcrOptionPanelWidget.cpp" line="214"/>
         <source>Extract In Silico PCR products</source>
         <translation>Извлечь продукты ПЦР in silico</translation>
     </message>
@@ -645,12 +645,12 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrPrompter</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="163"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="164"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="166"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="167"/>
         <source>Simulates PCR for the sequences from <u>%1</u> and primer pairs from <u>%2</u>.</source>
         <translation>Имитирует PCR для последовательностей из <u>%1</u> и пар праймеров из <u>%2</u>.</translation>
     </message>
@@ -658,22 +658,22 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrReportTask</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="366"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="367"/>
         <source>Generate In Silico PCR report</source>
         <translation>Generate In Silico PCR report</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="394"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="395"/>
         <source>Sequence name</source>
         <translation>Имя последовательности</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="410"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="411"/>
         <source>Products count table</source>
         <translation>Таблица продуктов</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="423"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="424"/>
         <source>Primer pair details</source>
         <translation>Информация о парах праймеров</translation>
     </message>
@@ -681,127 +681,127 @@
 <context>
     <name>U2::LocalWorkflow::InSilicoPcrWorker</name>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="78"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
         <source>Input sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="78"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
         <source>Input sequence.</source>
         <translation>Входная последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="80"/>
         <source>PCR product</source>
         <translation>Продукт PCR</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="79"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="80"/>
         <source>PCR product sequence.</source>
         <translation>Последовательность продукта PCR.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="94"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
         <source>Primers URL</source>
         <translation>Путь до праймеров</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="94"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
         <source>A URL to the input file with primer pairs.</source>
         <translation>Путь до входного файла с парами праймеров.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
         <source>Report URL</source>
         <translation>Путь до отчета</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="95"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
         <source>A URL to the output file with the PCR report.</source>
         <translation>Путь до выходного файла с отчетом PCR.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
         <source>Mismatches</source>
         <translation>Несоответствия</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="96"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
         <source>Number of allowed mismatches.</source>
         <translation>Число допустимых несоответствий.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
         <source>Min perfect match</source>
         <translation>Минимальное точное совпадение</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="97"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
         <source>Number of bases that match exactly on 3' end of primers.</source>
         <translation>Число оснований, которое точно совпадает с 3' концом праймеров.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
         <source>Max product size</source>
         <translation>Максимальный размер продукта</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="98"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
         <source>Maximum size of amplified region.</source>
         <translation>Максимальный размер расширенного региона.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="100"/>
         <source>Extract annotations</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Извлечь аннотации</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="99"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="100"/>
         <source>Extract annotations within a product region.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="132"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="133"/>
         <source>Inner</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="133"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="134"/>
         <source>All intersected</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="134"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="135"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="139"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="140"/>
         <source>In Silico PCR</source>
         <translation>ПЦР in silico</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="140"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="141"/>
         <source>Simulates PCR for input sequences and primer pairs. Creates the table with the PCR statistics.</source>
         <translation>Имитирует PCR для последовательностей и пар праймеров. Создает таблицу со статистиками PCR.</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="184"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="185"/>
         <source>Can not read the primers file: </source>
         <translation>Can not read the primers file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="194"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="195"/>
         <source>Can't read the file: </source>
         <translation>Can't read the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="197"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="198"/>
         <source>No primer sequences in the file: </source>
         <translation>No primer sequences in the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="198"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="199"/>
         <source>There is the odd number of primers in the file: </source>
         <translation type="unfinished"></translation>
     </message>
@@ -810,27 +810,27 @@
         <translation type="vanished">There is the odd number of primers int the file: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="228"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="229"/>
         <source>Primer sequence is too long: %1. The pair is skipped</source>
         <translation>Primer sequence is too long: %1. The pair is skipped</translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="285"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="286"/>
         <source>Wrong sequence objects count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="295"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="296"/>
         <source>Wrong annotations objects count</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="325"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="326"/>
         <source>The sequence is too long: </source>
         <translation>The sequence is too long: </translation>
     </message>
     <message>
-        <location filename="../src/InSilicoPcrWorker.cpp" line="359"/>
+        <location filename="../src/InSilicoPcrWorker.cpp" line="360"/>
         <source>Multiple In Silico PCR</source>
         <translation>Multiple In Silico PCR</translation>
     </message>
diff --git a/src/plugins/perf_monitor/src/PerfMonitorPlugin.cpp b/src/plugins/perf_monitor/src/PerfMonitorPlugin.cpp
index 8880b7c..e7b949f 100644
--- a/src/plugins/perf_monitor/src/PerfMonitorPlugin.cpp
+++ b/src/plugins/perf_monitor/src/PerfMonitorPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins/perf_monitor/src/PerfMonitorPlugin.h b/src/plugins/perf_monitor/src/PerfMonitorPlugin.h
index 64b5cdb..06199c7 100644
--- a/src/plugins/perf_monitor/src/PerfMonitorPlugin.h
+++ b/src/plugins/perf_monitor/src/PerfMonitorPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <U2Core/PluginModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/plugins/perf_monitor/src/PerfMonitorView.cpp b/src/plugins/perf_monitor/src/PerfMonitorView.cpp
index 290f206..18c3550 100644
--- a/src/plugins/perf_monitor/src/PerfMonitorView.cpp
+++ b/src/plugins/perf_monitor/src/PerfMonitorView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 #include <U2Core/Counter.h>
 #include <U2Core/Timer.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QVBoxLayout>
-#else
-#include <QtWidgets/QVBoxLayout>
-#endif
+#include <QVBoxLayout>
 
 #ifdef Q_OS_LINUX
 #include <stdio.h>
diff --git a/src/plugins/perf_monitor/src/PerfMonitorView.h b/src/plugins/perf_monitor/src/PerfMonitorView.h
index f4ec1e8..780d4c4 100644
--- a/src/plugins/perf_monitor/src/PerfMonitorView.h
+++ b/src/plugins/perf_monitor/src/PerfMonitorView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QDDialog.ui b/src/plugins/query_designer/src/QDDialog.ui
index b7f6d63..a7a6903 100644
--- a/src/plugins/query_designer/src/QDDialog.ui
+++ b/src/plugins/query_designer/src/QDDialog.ui
@@ -54,10 +54,10 @@
       <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Hint: </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">To launch the Query Designer select the</span><span style=" font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-size:8pt;">item.</span></p></body></html></string>
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Hint: </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">To launch the Query Designer select the</span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;&quo [...]
      </property>
      <property name="textInteractionFlags">
       <set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
@@ -78,6 +78,19 @@ p, li { white-space: pre-wrap; }
     </widget>
    </item>
    <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>1</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
diff --git a/src/plugins/query_designer/src/QDDocument.cpp b/src/plugins/query_designer/src/QDDocument.cpp
index 5fe0a83..baeb1f1 100644
--- a/src/plugins/query_designer/src/QDDocument.cpp
+++ b/src/plugins/query_designer/src/QDDocument.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #include "QDDocument.h"
 #include "QDSceneIOTasks.h"
 
-#include <QtCore/QStringList>
-#include <QtCore/QRegExp>
+#include <QStringList>
+#include <QRegExp>
 
 
 namespace U2 {
diff --git a/src/plugins/query_designer/src/QDDocument.h b/src/plugins/query_designer/src/QDDocument.h
index 6b9058f..bed1b46 100644
--- a/src/plugins/query_designer/src/QDDocument.h
+++ b/src/plugins/query_designer/src/QDDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,8 +24,8 @@
 
 #include <U2Lang/QDConstraint.h>
 
-#include <QtCore/QPair>
-#include <QtCore/QString>
+#include <QPair>
+#include <QString>
 
 
 namespace U2 {
diff --git a/src/plugins/query_designer/src/QDDocumentFormat.cpp b/src/plugins/query_designer/src/QDDocumentFormat.cpp
index 7ee941f..a088351 100644
--- a/src/plugins/query_designer/src/QDDocumentFormat.cpp
+++ b/src/plugins/query_designer/src/QDDocumentFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QDDocumentFormat.h b/src/plugins/query_designer/src/QDDocumentFormat.h
index ece077e..e57361c 100644
--- a/src/plugins/query_designer/src/QDDocumentFormat.h
+++ b/src/plugins/query_designer/src/QDDocumentFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QDGroupsEditor.cpp b/src/plugins/query_designer/src/QDGroupsEditor.cpp
index 37af98a..1743d08 100644
--- a/src/plugins/query_designer/src/QDGroupsEditor.cpp
+++ b/src/plugins/query_designer/src/QDGroupsEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -101,8 +101,6 @@ void QDGroupsEditor::mousePressEvent( QMouseEvent *event ) {
     QTreeWidget::mousePressEvent(event);
 }
 
-static const QString MSGBOX_TITLE = QObject::tr("Query Designer");
-
 void QDGroupsEditor::sl_addGroup() {
     QDScheme* scheme = view->getScheme();
     bool ok;
@@ -111,11 +109,11 @@ void QDGroupsEditor::sl_addGroup() {
         return;
     }
     if (scheme->getActorGroups().contains(text)) {
-        QMessageBox::critical(NULL, MSGBOX_TITLE, tr("Group '%1' already exists!").arg(text));
+        QMessageBox::critical(NULL, QObject::tr("Query Designer"), tr("Group '%1' already exists!").arg(text));
         return;
     }
     if (!scheme->validateGroupName(text)) {
-        QMessageBox::critical(NULL, MSGBOX_TITLE, tr("Invalid group name!"));
+        QMessageBox::critical(NULL, QObject::tr("Query Designer"), tr("Invalid group name!"));
         return;
     }
     scheme->createActorGroup(text);
@@ -154,7 +152,7 @@ void QDGroupsEditor::sl_addActor() {
     assert(sel);
 
     if (!scheme->getActorGroup(sel).isEmpty()) {
-        QMessageBox::critical(this, MSGBOX_TITLE, tr("Actor is already in group!"));
+        QMessageBox::critical(this, QObject::tr("Query Designer"), tr("Actor is already in group!"));
         return;
     }
     scheme->addActorToGroup(sel, group);
diff --git a/src/plugins/query_designer/src/QDGroupsEditor.h b/src/plugins/query_designer/src/QDGroupsEditor.h
index 1444593..c5dee39 100644
--- a/src/plugins/query_designer/src/QDGroupsEditor.h
+++ b/src/plugins/query_designer/src/QDGroupsEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_QD_GROUPS_EDITOR_H_
 #define _U2_QD_GROUPS_EDITOR_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QDRunDialog.cpp b/src/plugins/query_designer/src/QDRunDialog.cpp
index 6cdfc59..447bff5 100644
--- a/src/plugins/query_designer/src/QDRunDialog.cpp
+++ b/src/plugins/query_designer/src/QDRunDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -79,7 +79,7 @@ QDRunDialog::QDRunDialog(QDScheme* _scheme, QWidget* parent, const QString& defa
       saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222865");
+    new HelpButton(this, buttonBox, "20874770");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Run"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -293,7 +293,7 @@ QList<Task*> QDRunDialogTask::onSubTaskFinished(Task* subTask) {
 QDDialog::QDDialog(ADVSequenceObjectContext* _ctx)
 : QDialog(_ctx->getAnnotatedDNAView()->getWidget()), ctx(_ctx), scheme(NULL), txtDoc(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222866");
+    new HelpButton(this, buttonBox, "20874771");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -320,6 +320,7 @@ void QDDialog::addAnnotationsWidget() {
     QVBoxLayout* l = new QVBoxLayout();
     l->setMargin(0);
     l->addWidget(caw);
+    l->addStretch(1);
     annotationsWidget->setLayout(l);
     annotationsWidget->setMinimumSize(caw->layout()->minimumSize());
 }
diff --git a/src/plugins/query_designer/src/QDRunDialog.h b/src/plugins/query_designer/src/QDRunDialog.h
index 158e1ee..58af6e9 100644
--- a/src/plugins/query_designer/src/QDRunDialog.h
+++ b/src/plugins/query_designer/src/QDRunDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QDSamples.cpp b/src/plugins/query_designer/src/QDSamples.cpp
index 8908995..71c97c9 100644
--- a/src/plugins/query_designer/src/QDSamples.cpp
+++ b/src/plugins/query_designer/src/QDSamples.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,9 +26,9 @@
 
 #include <U2Designer/WorkflowGUIUtils.h>
 
-#include <QtCore/QDir>
-#include <QtGui/QMouseEvent>
-#include <QtGui/QTextDocument>
+#include <QDir>
+#include <QMouseEvent>
+#include <QTextDocument>
 
 
 Q_DECLARE_METATYPE(QTextDocument*);
diff --git a/src/plugins/query_designer/src/QDSamples.h b/src/plugins/query_designer/src/QDSamples.h
index 23ce749..004cd16 100644
--- a/src/plugins/query_designer/src/QDSamples.h
+++ b/src/plugins/query_designer/src/QDSamples.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,11 +28,7 @@
 
 #include <U2Gui/GlassView.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QListWidget>
-#else
-#include <QtWidgets/QListWidget>
-#endif
+#include <QListWidget>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QDSceneIOTasks.cpp b/src/plugins/query_designer/src/QDSceneIOTasks.cpp
index 7c19a83..3792020 100644
--- a/src/plugins/query_designer/src/QDSceneIOTasks.cpp
+++ b/src/plugins/query_designer/src/QDSceneIOTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,7 +32,7 @@
 
 #include <U2Core/QVariantUtils.h>
 
-#include <QtCore/QFile>
+#include <QFile>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QDSceneIOTasks.h b/src/plugins/query_designer/src/QDSceneIOTasks.h
index 037b2cf..669d044 100644
--- a/src/plugins/query_designer/src/QDSceneIOTasks.h
+++ b/src/plugins/query_designer/src/QDSceneIOTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QDTests.cpp b/src/plugins/query_designer/src/QDTests.cpp
index 15bbb27..61ec731 100644
--- a/src/plugins/query_designer/src/QDTests.cpp
+++ b/src/plugins/query_designer/src/QDTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QDTests.h b/src/plugins/query_designer/src/QDTests.h
index aea28c2..d19137e 100644
--- a/src/plugins/query_designer/src/QDTests.h
+++ b/src/plugins/query_designer/src/QDTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QDWorker.cpp b/src/plugins/query_designer/src/QDWorker.cpp
index 03c795d..1f480e7 100644
--- a/src/plugins/query_designer/src/QDWorker.cpp
+++ b/src/plugins/query_designer/src/QDWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,6 +31,7 @@
 #include <U2Core/MultiTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 #include <U2Designer/QDScheduler.h>
diff --git a/src/plugins/query_designer/src/QDWorker.h b/src/plugins/query_designer/src/QDWorker.h
index b4afcfa..53b7415 100644
--- a/src/plugins/query_designer/src/QDWorker.h
+++ b/src/plugins/query_designer/src/QDWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryDesignerPlugin.cpp b/src/plugins/query_designer/src/QueryDesignerPlugin.cpp
index 1eba9c5..6e1b516 100644
--- a/src/plugins/query_designer/src/QueryDesignerPlugin.cpp
+++ b/src/plugins/query_designer/src/QueryDesignerPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryDesignerPlugin.h b/src/plugins/query_designer/src/QueryDesignerPlugin.h
index 96f04d6..68b8723 100644
--- a/src/plugins/query_designer/src/QueryDesignerPlugin.h
+++ b/src/plugins/query_designer/src/QueryDesignerPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryEditor.cpp b/src/plugins/query_designer/src/QueryEditor.cpp
index b4b7bdd..7b8466c 100644
--- a/src/plugins/query_designer/src/QueryEditor.cpp
+++ b/src/plugins/query_designer/src/QueryEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 #include <U2Lang/WorkflowUtils.h>
 
 
-#include <QtGui/QRegExpValidator>
+#include <QRegExpValidator>
 
 
 namespace U2 {
@@ -47,11 +47,7 @@ QueryEditor::QueryEditor(QWidget* parent/* =0 */) : QWidget(parent), current(NUL
 
     cfgModel = new QueryProcCfgModel(this);
     table->setModel(cfgModel);
-#if (QT_VERSION < 0x050000)
-    table->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-#else
     table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
-#endif
     table->horizontalHeader()->setStretchLastSection(true);
     table->verticalHeader()->hide();
     table->verticalHeader()->setDefaultSectionSize(QFontMetrics(QFont()).height() + 6);
diff --git a/src/plugins/query_designer/src/QueryEditor.h b/src/plugins/query_designer/src/QueryEditor.h
index 7c84d91..25a3d52 100644
--- a/src/plugins/query_designer/src/QueryEditor.h
+++ b/src/plugins/query_designer/src/QueryEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryPalette.cpp b/src/plugins/query_designer/src/QueryPalette.cpp
index 1f6cb50..8a96b9d 100644
--- a/src/plugins/query_designer/src/QueryPalette.cpp
+++ b/src/plugins/query_designer/src/QueryPalette.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,7 +62,7 @@ public:
             buttonOption.features = QStyleOptionButton::None;
             m_view->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, m_view);
 
-            QStyleOptionViewItemV2 branchOption;
+            QStyleOptionViewItem branchOption;
             static const int i = 9; // ### hardcoded in qcommonstyle.cpp
             QRect r = option.rect;
             branchOption.rect = QRect(r.left() + i/2, r.top() + (r.height() - i)/2, i, i);
@@ -144,11 +144,7 @@ QueryPalette::QueryPalette(QWidget* parent/* =NULL */)
     setRootIsDecorated(false);
     setColumnCount(1);
     header()->hide();
-#if (QT_VERSION < 0x050000)
-    header()->setResizeMode(QHeaderView::Stretch);
-#else
     header()->setSectionResizeMode(QHeaderView::Stretch);
-#endif
     setMouseTracking(true);
     setContent();
     setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored));
diff --git a/src/plugins/query_designer/src/QueryPalette.h b/src/plugins/query_designer/src/QueryPalette.h
index 28b04d6..f1db614 100644
--- a/src/plugins/query_designer/src/QueryPalette.h
+++ b/src/plugins/query_designer/src/QueryPalette.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,8 @@
 #ifndef _U2_QUERY_PALETTE_H_
 #define _U2_QUERY_PALETTE_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QAction>
+#include <QTreeWidget>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QueryProcCfgDelegate.h b/src/plugins/query_designer/src/QueryProcCfgDelegate.h
index 859eed9..da1b5cf 100644
--- a/src/plugins/query_designer/src/QueryProcCfgDelegate.h
+++ b/src/plugins/query_designer/src/QueryProcCfgDelegate.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryProcCfgModel.h b/src/plugins/query_designer/src/QueryProcCfgModel.h
index 55416d8..d7b9c25 100644
--- a/src/plugins/query_designer/src/QueryProcCfgModel.h
+++ b/src/plugins/query_designer/src/QueryProcCfgModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Lang/Configuration.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <QtCore/QAbstractTableModel>
+#include <QAbstractTableModel>
 
 
 namespace U2 {
diff --git a/src/plugins/query_designer/src/QueryViewAdapter.cpp b/src/plugins/query_designer/src/QueryViewAdapter.cpp
index fcc484f..9e87e62 100644
--- a/src/plugins/query_designer/src/QueryViewAdapter.cpp
+++ b/src/plugins/query_designer/src/QueryViewAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/QueryViewAdapter.h b/src/plugins/query_designer/src/QueryViewAdapter.h
index 424ef33..4d08ed1 100644
--- a/src/plugins/query_designer/src/QueryViewAdapter.h
+++ b/src/plugins/query_designer/src/QueryViewAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_QUERY_VIEW_ADAPTER_H_
 #define _U2_QUERY_VIEW_ADAPTER_H_
 
-#include <QtCore/QList>
-#include <QtCore/QPointF>
+#include <QList>
+#include <QPointF>
 
 
 namespace U2 {
diff --git a/src/plugins/query_designer/src/QueryViewController.cpp b/src/plugins/query_designer/src/QueryViewController.cpp
index d13a8d0..3f05197 100644
--- a/src/plugins/query_designer/src/QueryViewController.cpp
+++ b/src/plugins/query_designer/src/QueryViewController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,15 +29,16 @@
 #include <U2Core/Counter.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
 #include <U2Gui/GlassView.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2Lang/QueryDesignerRegistry.h>
@@ -1147,9 +1148,11 @@ AddConstraintDialog::AddConstraintDialog(QueryScene* _scene, QDDistanceType _kin
                                          QDElement* defSrc, QDElement* defDst)
 : scene(_scene), kind(_kind) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222850");
+    new HelpButton(this, buttonBox, "20874755");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    QString title = "Add %1 Constraint";
+    QString title = tr("Add Constraint %1");
     switch (kind)
     {
     case E2S:
diff --git a/src/plugins/query_designer/src/QueryViewController.h b/src/plugins/query_designer/src/QueryViewController.h
index a030bb1..b2a052f 100644
--- a/src/plugins/query_designer/src/QueryViewController.h
+++ b/src/plugins/query_designer/src/QueryViewController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,11 +28,7 @@
 
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsScene>
-#else
-#include <QtWidgets/QGraphicsScene>
-#endif
+#include <QGraphicsScene>
 
 namespace U2 {
 
diff --git a/src/plugins/query_designer/src/QueryViewItems.cpp b/src/plugins/query_designer/src/QueryViewItems.cpp
index 0e99acd..f414903 100644
--- a/src/plugins/query_designer/src/QueryViewItems.cpp
+++ b/src/plugins/query_designer/src/QueryViewItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,24 +28,15 @@
 
 #include <U2Core/QVariantUtils.h>
 
-#include <QtGui/QPainter>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsSceneMouseEvent>
-#include <QtGui/QStyleOptionGraphicsItem>
-#include <QtGui/QGraphicsView>
-#include <QtGui/QInputDialog>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsSceneMouseEvent>
-#include <QtWidgets/QStyleOptionGraphicsItem>
-#include <QtWidgets/QGraphicsView>
-#include <QtWidgets/QInputDialog>
-#include <QtWidgets/QMenu>
-#endif
-#include <QtGui/QTextDocument>
+#include <QPainter>
+#include <QApplication>
+#include <QGraphicsScene>
+#include <QGraphicsSceneMouseEvent>
+#include <QStyleOptionGraphicsItem>
+#include <QGraphicsView>
+#include <QInputDialog>
+#include <QMenu>
+#include <QTextDocument>
 
 #define ANNOTATION_MIN_SIZE GRID_STEP
 #define ANNOTATION_MAX_SIZE 4 * GRID_STEP
diff --git a/src/plugins/query_designer/src/QueryViewItems.h b/src/plugins/query_designer/src/QueryViewItems.h
index 0d76331..d16b883 100644
--- a/src/plugins/query_designer/src/QueryViewItems.h
+++ b/src/plugins/query_designer/src/QueryViewItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,19 +27,12 @@
 #include "QueryPalette.h"
 #include "QDDocument.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QGraphicsTextItem>
-#include <QtGui/QGraphicsSceneMouseEvent>
-#else
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QGraphicsTextItem>
-#include <QtWidgets/QGraphicsSceneMouseEvent>
-#endif
-#include <QtGui/QFontMetricsF>
-#include <QtGui/QKeyEvent>
-
-#include <QtCore/QFlag>
+#include <QGraphicsItem>
+#include <QGraphicsTextItem>
+#include <QGraphicsSceneMouseEvent>
+#include <QFontMetricsF>
+#include <QKeyEvent>
+#include <QFlag>
 
 #define GRID_STEP 40
 
diff --git a/src/plugins/query_designer/src/library/QDFindActor.cpp b/src/plugins/query_designer/src/library/QDFindActor.cpp
index de745ae..5e565b8 100644
--- a/src/plugins/query_designer/src/library/QDFindActor.cpp
+++ b/src/plugins/query_designer/src/library/QDFindActor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/library/QDFindActor.h b/src/plugins/query_designer/src/library/QDFindActor.h
index 8eb9ac6..207137f 100644
--- a/src/plugins/query_designer/src/library/QDFindActor.h
+++ b/src/plugins/query_designer/src/library/QDFindActor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.cpp b/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.cpp
index dccf3c6..62bca13 100644
--- a/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.cpp
+++ b/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.h b/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.h
index b5abf8d..819e6ee 100644
--- a/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.h
+++ b/src/plugins/query_designer/src/library/QDFindPolyRegionsActor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/library/QDGcContentActor.cpp b/src/plugins/query_designer/src/library/QDGcContentActor.cpp
index 6c34d17..40f9b20 100644
--- a/src/plugins/query_designer/src/library/QDGcContentActor.cpp
+++ b/src/plugins/query_designer/src/library/QDGcContentActor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/src/library/QDGcContentActor.h b/src/plugins/query_designer/src/library/QDGcContentActor.h
index 357e21c..6da4c89 100644
--- a/src/plugins/query_designer/src/library/QDGcContentActor.h
+++ b/src/plugins/query_designer/src/library/QDGcContentActor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/query_designer/transl/english.ts b/src/plugins/query_designer/transl/english.ts
index ea1eead..b41cb1e 100644
--- a/src/plugins/query_designer/transl/english.ts
+++ b/src/plugins/query_designer/transl/english.ts
@@ -51,11 +51,21 @@
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Hint: </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">To launch the Query Designer select the</span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-family:'MS Shell D [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Hint: </span></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">To launch the Query Designer select the</span><span style=" font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-size:8pt;">item.</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
@@ -102,7 +112,9 @@ p, li { white-space: pre-wrap; }
         <translation>Start-Start</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="104"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="112"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="116"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="155"/>
         <source>Query Designer</source>
         <translation>Query Designer</translation>
     </message>
@@ -164,22 +176,37 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddConstraintDialog</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1156"/>
+        <location filename="../src/QueryViewController.cpp" line="1152"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1153"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1155"/>
+        <source>Add Constraint %1</source>
+        <translation>Add Constraint %1</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1159"/>
         <source>End-Start</source>
         <translation>End-Start</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1159"/>
+        <location filename="../src/QueryViewController.cpp" line="1162"/>
         <source>End-End</source>
         <translation>End-End</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1162"/>
+        <location filename="../src/QueryViewController.cpp" line="1165"/>
         <source>Start-End</source>
         <translation>Start-End</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1165"/>
+        <location filename="../src/QueryViewController.cpp" line="1168"/>
         <source>Start-Start</source>
         <translation>Start-Start</translation>
     </message>
@@ -229,17 +256,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::LocalWorkflow::QDPrompter</name>
     <message>
-        <location filename="../src/QDWorker.cpp" line="133"/>
+        <location filename="../src/QDWorker.cpp" line="134"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="134"/>
+        <location filename="../src/QDWorker.cpp" line="135"/>
         <source>from %1</source>
         <translation>from %1</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="137"/>
+        <location filename="../src/QDWorker.cpp" line="138"/>
         <source>Analyze each nucleotide sequence <u>%1</u> with <u>%2</u>.</source>
         <translation>Analyze each nucleotide sequence <u>%1</u> with <u>%2</u>.</translation>
     </message>
@@ -247,67 +274,67 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::LocalWorkflow::QDWorker</name>
     <message>
-        <location filename="../src/QDWorker.cpp" line="73"/>
+        <location filename="../src/QDWorker.cpp" line="74"/>
         <source>Input sequences</source>
         <translation>Input sequences</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="74"/>
+        <location filename="../src/QDWorker.cpp" line="75"/>
         <source>A nucleotide sequence to analyze.</source>
         <translation>A nucleotide sequence to analyze.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="77"/>
+        <location filename="../src/QDWorker.cpp" line="78"/>
         <source>Result annotations</source>
         <translation>Result annotations</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="78"/>
+        <location filename="../src/QDWorker.cpp" line="79"/>
         <source>A set of annotations marking found results.</source>
         <translation>A set of annotations marking found results.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="89"/>
+        <location filename="../src/QDWorker.cpp" line="90"/>
         <source>Schema</source>
         <translation>Schema</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="89"/>
+        <location filename="../src/QDWorker.cpp" line="90"/>
         <source>Schema file.</source>
         <translation>Schema file.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="90"/>
+        <location filename="../src/QDWorker.cpp" line="91"/>
         <source>Offset</source>
         <translation>Offset</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="91"/>
+        <location filename="../src/QDWorker.cpp" line="92"/>
         <source>Specifies left and right offsets for merged annotation (if 'Merge' parameter is set to true).</source>
         <translation>Specifies left and right offsets for merged annotation (if 'Merge' parameter is set to true).</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="92"/>
+        <location filename="../src/QDWorker.cpp" line="93"/>
         <source>Merge</source>
         <translation>Merge</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="93"/>
+        <location filename="../src/QDWorker.cpp" line="94"/>
         <source>Merges regions of each result into single annotation if true.</source>
         <translation>Merges regions of each result into single annotation if true.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="100"/>
+        <location filename="../src/QDWorker.cpp" line="101"/>
         <source>Annotate with UQL</source>
         <translation>Annotate with UQL</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="101"/>
+        <location filename="../src/QDWorker.cpp" line="102"/>
         <source>Analyzes a nucleotide sequence using different algorithms(Repeat finder, ORF finder, etc.) imposing constraints on the positional relationship of the results.</source>
         <translation>Analyzes a nucleotide sequence using different algorithms(Repeat finder, ORF finder, etc.) imposing constraints on the positional relationship of the results.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="109"/>
+        <location filename="../src/QDWorker.cpp" line="110"/>
         <source>Query schemes</source>
         <translation>Query schemes</translation>
     </message>
@@ -325,34 +352,34 @@ p, li { white-space: pre-wrap; }
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="338"/>
+        <location filename="../src/QDRunDialog.cpp" line="339"/>
         <source>Select query</source>
         <translation>Select query</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="354"/>
-        <location filename="../src/QDRunDialog.cpp" line="361"/>
+        <location filename="../src/QDRunDialog.cpp" line="355"/>
+        <location filename="../src/QDRunDialog.cpp" line="362"/>
         <source>Can not load %1</source>
         <translation>Can not load %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="391"/>
+        <location filename="../src/QDRunDialog.cpp" line="392"/>
         <source>File with query is not selected!</source>
         <translation>File with query is not selected!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="396"/>
+        <location filename="../src/QDRunDialog.cpp" line="397"/>
         <source>Error in schema!</source>
         <translation>Error in schema!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="402"/>
-        <location filename="../src/QDRunDialog.cpp" line="414"/>
+        <location filename="../src/QDRunDialog.cpp" line="403"/>
+        <location filename="../src/QDRunDialog.cpp" line="415"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="414"/>
+        <location filename="../src/QDRunDialog.cpp" line="415"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -380,37 +407,37 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDElement</name>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="371"/>
+        <location filename="../src/QueryViewItems.cpp" line="362"/>
         <source>Set order</source>
         <translation>Set order</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="390"/>
+        <location filename="../src/QueryViewItems.cpp" line="381"/>
         <source>Remove from group</source>
         <translation>Remove from group</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="392"/>
+        <location filename="../src/QueryViewItems.cpp" line="383"/>
         <source>Add to group</source>
         <translation>Add to group</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="398"/>
+        <location filename="../src/QueryViewItems.cpp" line="389"/>
         <source>Up</source>
         <translation>Up</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="399"/>
+        <location filename="../src/QueryViewItems.cpp" line="390"/>
         <source>Down</source>
         <translation>Down</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="410"/>
+        <location filename="../src/QueryViewItems.cpp" line="401"/>
         <source>Add '%1' to group</source>
         <translation>Add '%1' to group</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="411"/>
+        <location filename="../src/QueryViewItems.cpp" line="402"/>
         <source>Group:</source>
         <translation>Group:</translation>
     </message>
@@ -640,47 +667,47 @@ p, li { white-space: pre-wrap; }
         <translation>Set Required Number</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="109"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="107"/>
         <source>Create element group</source>
         <translation>Create element group</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="109"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="107"/>
         <source>Group name</source>
         <translation>Group name</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="114"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="112"/>
         <source>Group '%1' already exists!</source>
         <translation>Group '%1' already exists!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="118"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="116"/>
         <source>Invalid group name!</source>
         <translation>Invalid group name!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="148"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="146"/>
         <source>Add Element To Group '%1'</source>
         <translation>Add Element To Group '%1'</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="148"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="146"/>
         <source>Element:</source>
         <translation>Element:</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="157"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="155"/>
         <source>Actor is already in group!</source>
         <translation>Actor is already in group!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="180"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="178"/>
         <source>Set required number for '%1'</source>
         <translation>Set required number for '%1'</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="181"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="179"/>
         <source>Number:</source>
         <translation>Number:</translation>
     </message>
@@ -730,7 +757,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRulerItem</name>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="1238"/>
+        <location filename="../src/QueryViewItems.cpp" line="1229"/>
         <source>N/A</source>
         <translation>N/A</translation>
     </message>
@@ -870,36 +897,36 @@ p, li { white-space: pre-wrap; }
         <translation>Any</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="116"/>
+        <location filename="../src/QueryEditor.cpp" line="112"/>
         <source>Select an element to inspect.</source>
         <translation>Select an element to inspect.</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="123"/>
-        <location filename="../src/QueryEditor.cpp" line="173"/>
+        <location filename="../src/QueryEditor.cpp" line="119"/>
+        <location filename="../src/QueryEditor.cpp" line="169"/>
         <source>Element Name</source>
         <translation>Element Name</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="125"/>
-        <location filename="../src/QueryEditor.cpp" line="175"/>
+        <location filename="../src/QueryEditor.cpp" line="121"/>
+        <location filename="../src/QueryEditor.cpp" line="171"/>
         <source>Annotate As</source>
         <translation>Annotate As</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="127"/>
-        <location filename="../src/QueryEditor.cpp" line="177"/>
+        <location filename="../src/QueryEditor.cpp" line="123"/>
+        <location filename="../src/QueryEditor.cpp" line="173"/>
         <source>Direction</source>
         <translation>Direction</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="139"/>
-        <location filename="../src/QueryEditor.cpp" line="194"/>
+        <location filename="../src/QueryEditor.cpp" line="135"/>
+        <location filename="../src/QueryEditor.cpp" line="190"/>
         <source>To configure the algorithm element parameters go to the "Parameters" area below.</source>
         <translation>To configure the algorithm element parameters go to the "Parameters" area below.</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="161"/>
+        <location filename="../src/QueryEditor.cpp" line="157"/>
         <source>To configure the constraint element parameters go to the "Parameters" area below.</source>
         <translation>To configure the constraint element parameters go to the "Parameters" area below.</translation>
     </message>
@@ -907,12 +934,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryPalette</name>
     <message>
-        <location filename="../src/QueryPalette.cpp" line="159"/>
+        <location filename="../src/QueryPalette.cpp" line="155"/>
         <source>Algorithms</source>
         <translation>Algorithms</translation>
     </message>
     <message>
-        <location filename="../src/QueryPalette.cpp" line="175"/>
+        <location filename="../src/QueryPalette.cpp" line="171"/>
         <source>Constraints</source>
         <translation>Constraints</translation>
     </message>
@@ -933,7 +960,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryScene</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1239"/>
+        <location filename="../src/QueryViewController.cpp" line="1242"/>
         <source>Preview is not available.</source>
         <translation>Preview is not available.</translation>
     </message>
@@ -941,126 +968,126 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryViewController</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="658"/>
-        <location filename="../src/QueryViewController.cpp" line="1121"/>
+        <location filename="../src/QueryViewController.cpp" line="659"/>
+        <location filename="../src/QueryViewController.cpp" line="1122"/>
         <source>Query Designer</source>
         <translation>Query Designer</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="672"/>
+        <location filename="../src/QueryViewController.cpp" line="673"/>
         <source>Elements</source>
         <translation>Elements</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="673"/>
+        <location filename="../src/QueryViewController.cpp" line="674"/>
         <source>Groups</source>
         <translation>Groups</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="674"/>
+        <location filename="../src/QueryViewController.cpp" line="675"/>
         <source>Samples</source>
         <translation>Samples</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="747"/>
+        <location filename="../src/QueryViewController.cpp" line="748"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="759"/>
+        <location filename="../src/QueryViewController.cpp" line="760"/>
         <source>Show title</source>
         <translation>Show title</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="764"/>
+        <location filename="../src/QueryViewController.cpp" line="765"/>
         <source>Show description</source>
         <translation>Show description</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="769"/>
+        <location filename="../src/QueryViewController.cpp" line="770"/>
         <source>Show element info</source>
         <translation>Show element info</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="774"/>
+        <location filename="../src/QueryViewController.cpp" line="775"/>
         <source>Show order</source>
         <translation>Show order</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="781"/>
+        <location filename="../src/QueryViewController.cpp" line="782"/>
         <source>Direct strand</source>
         <translation>Direct strand</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="784"/>
+        <location filename="../src/QueryViewController.cpp" line="785"/>
         <source>Reverse complementary strand</source>
         <translation>Reverse complementary strand</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="787"/>
+        <location filename="../src/QueryViewController.cpp" line="788"/>
         <source>Both strands</source>
         <translation>Both strands</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="846"/>
-        <location filename="../src/QueryViewController.cpp" line="872"/>
+        <location filename="../src/QueryViewController.cpp" line="847"/>
+        <location filename="../src/QueryViewController.cpp" line="873"/>
         <source>Query Sequence Mode</source>
         <translation>Query Sequence Mode</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="837"/>
-        <location filename="../src/QueryViewController.cpp" line="867"/>
+        <location filename="../src/QueryViewController.cpp" line="838"/>
+        <location filename="../src/QueryViewController.cpp" line="868"/>
         <source>View Mode</source>
         <translation>View Mode</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="720"/>
+        <location filename="../src/QueryViewController.cpp" line="721"/>
         <source>Run Schema...</source>
         <translation>Run Schema...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="724"/>
+        <location filename="../src/QueryViewController.cpp" line="725"/>
         <source>New Schema</source>
         <translation>New Schema</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="729"/>
+        <location filename="../src/QueryViewController.cpp" line="730"/>
         <source>Load Schema...</source>
         <translation>Load Schema...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="734"/>
-        <location filename="../src/QueryViewController.cpp" line="955"/>
+        <location filename="../src/QueryViewController.cpp" line="735"/>
+        <location filename="../src/QueryViewController.cpp" line="956"/>
         <source>Save Schema</source>
         <translation>Save Schema</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="741"/>
+        <location filename="../src/QueryViewController.cpp" line="742"/>
         <source>Save Schema As...</source>
         <translation>Save Schema As...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="898"/>
+        <location filename="../src/QueryViewController.cpp" line="899"/>
         <source>The schema is empty!</source>
         <translation>The schema is empty!</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="900"/>
+        <location filename="../src/QueryViewController.cpp" line="901"/>
         <source>The schema is invalid! Please see the log for details.</source>
         <translation>The schema is invalid! Please see the log for details.</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="929"/>
+        <location filename="../src/QueryViewController.cpp" line="930"/>
         <source>Load Schema</source>
         <translation>Load Schema</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1068"/>
+        <location filename="../src/QueryViewController.cpp" line="1069"/>
         <source>Query Designer - %1</source>
         <translation>Query Designer - %1</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1122"/>
+        <location filename="../src/QueryViewController.cpp" line="1123"/>
         <source>The schema has been modified.
 Do you want to save changes?</source>
         <translation>The schema has been modified.
diff --git a/src/plugins/query_designer/transl/russian.ts b/src/plugins/query_designer/transl/russian.ts
index 999ee0d..1bbdbe3 100644
--- a/src/plugins/query_designer/transl/russian.ts
+++ b/src/plugins/query_designer/transl/russian.ts
@@ -51,11 +51,21 @@
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Hint: </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">To launch the Query Designer select the</span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-family:'MS Shell D [...]
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Hint: </span></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Queries can be created using the Query Designer tool. </span></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">To launch the Query Designer select the</span><span style=" font-size:8pt; font-style:italic;">&quot;Tools &gt; Query Designer&quot;  </span><span style=" font-size:8pt;">item.</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
@@ -102,7 +112,9 @@ p, li { white-space: pre-wrap; }
         <translation>Ошибка загрузки схемы. Схема не содержит группу %1.</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="104"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="112"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="116"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="155"/>
         <source>Query Designer</source>
         <translation>Дизайнер запросов</translation>
     </message>
@@ -164,24 +176,39 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddConstraintDialog</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1156"/>
-        <source>End-Start</source>
-        <translation>Конец-Начало</translation>
+        <location filename="../src/QueryViewController.cpp" line="1152"/>
+        <source>OK</source>
+        <translation>ОК</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1153"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1155"/>
+        <source>Add Constraint %1</source>
+        <translation>Добавить ограничение %1</translation>
     </message>
     <message>
         <location filename="../src/QueryViewController.cpp" line="1159"/>
-        <source>End-End</source>
-        <translation>Конец-Конец</translation>
+        <source>End-Start</source>
+        <translation>конец-начало</translation>
     </message>
     <message>
         <location filename="../src/QueryViewController.cpp" line="1162"/>
-        <source>Start-End</source>
-        <translation>Начало-Конец</translation>
+        <source>End-End</source>
+        <translation>конец-конец</translation>
     </message>
     <message>
         <location filename="../src/QueryViewController.cpp" line="1165"/>
+        <source>Start-End</source>
+        <translation>начало-конец</translation>
+    </message>
+    <message>
+        <location filename="../src/QueryViewController.cpp" line="1168"/>
         <source>Start-Start</source>
-        <translation>Начало-Начало</translation>
+        <translation>начало-начало</translation>
     </message>
 </context>
 <context>
@@ -229,17 +256,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::LocalWorkflow::QDPrompter</name>
     <message>
-        <location filename="../src/QDWorker.cpp" line="133"/>
+        <location filename="../src/QDWorker.cpp" line="134"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="134"/>
+        <location filename="../src/QDWorker.cpp" line="135"/>
         <source>from %1</source>
         <translation>из %1</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="137"/>
+        <location filename="../src/QDWorker.cpp" line="138"/>
         <source>Analyze each nucleotide sequence <u>%1</u> with <u>%2</u>.</source>
         <translation>Анализ каждой нуклеотидной послдовательности <u>%1</u> с <u>%2</u>.</translation>
     </message>
@@ -247,67 +274,67 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::LocalWorkflow::QDWorker</name>
     <message>
-        <location filename="../src/QDWorker.cpp" line="73"/>
+        <location filename="../src/QDWorker.cpp" line="74"/>
         <source>Input sequences</source>
         <translation>Входные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="74"/>
+        <location filename="../src/QDWorker.cpp" line="75"/>
         <source>A nucleotide sequence to analyze.</source>
         <translation>Последовательность для анализа.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="77"/>
+        <location filename="../src/QDWorker.cpp" line="78"/>
         <source>Result annotations</source>
         <translation>Выходные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="78"/>
+        <location filename="../src/QDWorker.cpp" line="79"/>
         <source>A set of annotations marking found results.</source>
         <translation>Найден набор аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="89"/>
+        <location filename="../src/QDWorker.cpp" line="90"/>
         <source>Schema</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="89"/>
+        <location filename="../src/QDWorker.cpp" line="90"/>
         <source>Schema file.</source>
         <translation>Файл схемы.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="90"/>
+        <location filename="../src/QDWorker.cpp" line="91"/>
         <source>Offset</source>
         <translation>Смещение</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="91"/>
+        <location filename="../src/QDWorker.cpp" line="92"/>
         <source>Specifies left and right offsets for merged annotation (if 'Merge' parameter is set to true).</source>
         <translation>Задает правый и левый сдвиги для соединяемых аннотаций (если установлен соответствующий параметр для соединения).</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="92"/>
+        <location filename="../src/QDWorker.cpp" line="93"/>
         <source>Merge</source>
         <translation>Соединить</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="93"/>
+        <location filename="../src/QDWorker.cpp" line="94"/>
         <source>Merges regions of each result into single annotation if true.</source>
         <translation>Соединяет регионы каждого результата в одну аннотацию.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="100"/>
+        <location filename="../src/QDWorker.cpp" line="101"/>
         <source>Annotate with UQL</source>
         <translation>Аннотирование с помощью UQL</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="101"/>
+        <location filename="../src/QDWorker.cpp" line="102"/>
         <source>Analyzes a nucleotide sequence using different algorithms(Repeat finder, ORF finder, etc.) imposing constraints on the positional relationship of the results.</source>
         <translation>Анализирует нуклеотидную последовательность используя различные алгоритмы учитывая ограничения на взаимное расположение результатов.</translation>
     </message>
     <message>
-        <location filename="../src/QDWorker.cpp" line="109"/>
+        <location filename="../src/QDWorker.cpp" line="110"/>
         <source>Query schemes</source>
         <translation>Схемы запросов</translation>
     </message>
@@ -317,7 +344,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/QDRunDialog.cpp" line="297"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
         <location filename="../src/QDRunDialog.cpp" line="298"/>
@@ -325,34 +352,34 @@ p, li { white-space: pre-wrap; }
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="338"/>
+        <location filename="../src/QDRunDialog.cpp" line="339"/>
         <source>Select query</source>
         <translation>Выбор схемы запроса</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="354"/>
-        <location filename="../src/QDRunDialog.cpp" line="361"/>
+        <location filename="../src/QDRunDialog.cpp" line="355"/>
+        <location filename="../src/QDRunDialog.cpp" line="362"/>
         <source>Can not load %1</source>
         <translation>Не удаётся загрузить схему %1</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="391"/>
+        <location filename="../src/QDRunDialog.cpp" line="392"/>
         <source>File with query is not selected!</source>
         <translation>Не выбран файл схемы!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="396"/>
+        <location filename="../src/QDRunDialog.cpp" line="397"/>
         <source>Error in schema!</source>
         <translation>Ошибка в схеме!</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="402"/>
-        <location filename="../src/QDRunDialog.cpp" line="414"/>
+        <location filename="../src/QDRunDialog.cpp" line="403"/>
+        <location filename="../src/QDRunDialog.cpp" line="415"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/QDRunDialog.cpp" line="414"/>
+        <location filename="../src/QDRunDialog.cpp" line="415"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -380,37 +407,37 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDElement</name>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="371"/>
+        <location filename="../src/QueryViewItems.cpp" line="362"/>
         <source>Set order</source>
         <translation>Задать порядок</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="390"/>
+        <location filename="../src/QueryViewItems.cpp" line="381"/>
         <source>Remove from group</source>
         <translation>Удалить из группы</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="392"/>
+        <location filename="../src/QueryViewItems.cpp" line="383"/>
         <source>Add to group</source>
         <translation>Добавить к группе</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="398"/>
+        <location filename="../src/QueryViewItems.cpp" line="389"/>
         <source>Up</source>
         <translation>Повысить</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="399"/>
+        <location filename="../src/QueryViewItems.cpp" line="390"/>
         <source>Down</source>
         <translation>Понизить</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="410"/>
+        <location filename="../src/QueryViewItems.cpp" line="401"/>
         <source>Add '%1' to group</source>
         <translation>Добавить '%1' к группе</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="411"/>
+        <location filename="../src/QueryViewItems.cpp" line="402"/>
         <source>Group:</source>
         <translation>Группа:</translation>
     </message>
@@ -420,7 +447,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/library/QDFindActor.cpp" line="67"/>
         <source>Find</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
         <location filename="../src/library/QDFindActor.cpp" line="93"/>
@@ -640,47 +667,47 @@ p, li { white-space: pre-wrap; }
         <translation>Задать число элементов</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="109"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="107"/>
         <source>Create element group</source>
         <translation>Создать группу элементов</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="109"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="107"/>
         <source>Group name</source>
         <translation>Имя группы</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="114"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="112"/>
         <source>Group '%1' already exists!</source>
         <translation>Группа '%1' уже существует!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="118"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="116"/>
         <source>Invalid group name!</source>
         <translation>Недопустимое имя группы!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="148"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="146"/>
         <source>Add Element To Group '%1'</source>
         <translation>Добавить элемент к группе '%1'</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="148"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="146"/>
         <source>Element:</source>
         <translation>Элемент:</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="157"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="155"/>
         <source>Actor is already in group!</source>
         <translation>Элемент уже присутствует в группе!</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="180"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="178"/>
         <source>Set required number for '%1'</source>
         <translation>Задать минимальное число элементов группы '%1'</translation>
     </message>
     <message>
-        <location filename="../src/QDGroupsEditor.cpp" line="181"/>
+        <location filename="../src/QDGroupsEditor.cpp" line="179"/>
         <source>Number:</source>
         <translation>Число:</translation>
     </message>
@@ -730,7 +757,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QDRulerItem</name>
     <message>
-        <location filename="../src/QueryViewItems.cpp" line="1238"/>
+        <location filename="../src/QueryViewItems.cpp" line="1229"/>
         <source>N/A</source>
         <translation>N/A</translation>
     </message>
@@ -870,36 +897,36 @@ p, li { white-space: pre-wrap; }
         <translation>Любое</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="116"/>
+        <location filename="../src/QueryEditor.cpp" line="112"/>
         <source>Select an element to inspect.</source>
         <translation>Выберите элемент для просмотра или редактирования.</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="123"/>
-        <location filename="../src/QueryEditor.cpp" line="173"/>
+        <location filename="../src/QueryEditor.cpp" line="119"/>
+        <location filename="../src/QueryEditor.cpp" line="169"/>
         <source>Element Name</source>
         <translation>Имя элемента</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="125"/>
-        <location filename="../src/QueryEditor.cpp" line="175"/>
+        <location filename="../src/QueryEditor.cpp" line="121"/>
+        <location filename="../src/QueryEditor.cpp" line="171"/>
         <source>Annotate As</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="127"/>
-        <location filename="../src/QueryEditor.cpp" line="177"/>
+        <location filename="../src/QueryEditor.cpp" line="123"/>
+        <location filename="../src/QueryEditor.cpp" line="173"/>
         <source>Direction</source>
         <translation>Направление</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="161"/>
+        <location filename="../src/QueryEditor.cpp" line="157"/>
         <source>To configure the constraint element parameters go to the "Parameters" area below.</source>
         <translation>Параметры элемента можно отредактировать в таблице, расположенной ниже.</translation>
     </message>
     <message>
-        <location filename="../src/QueryEditor.cpp" line="139"/>
-        <location filename="../src/QueryEditor.cpp" line="194"/>
+        <location filename="../src/QueryEditor.cpp" line="135"/>
+        <location filename="../src/QueryEditor.cpp" line="190"/>
         <source>To configure the algorithm element parameters go to the "Parameters" area below.</source>
         <translation>Параметры элемента можно отредактировать в таблице, расположенной ниже.</translation>
     </message>
@@ -907,12 +934,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryPalette</name>
     <message>
-        <location filename="../src/QueryPalette.cpp" line="159"/>
+        <location filename="../src/QueryPalette.cpp" line="155"/>
         <source>Algorithms</source>
         <translation>Алгоритмы</translation>
     </message>
     <message>
-        <location filename="../src/QueryPalette.cpp" line="175"/>
+        <location filename="../src/QueryPalette.cpp" line="171"/>
         <source>Constraints</source>
         <translation>Условия</translation>
     </message>
@@ -933,7 +960,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryScene</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1239"/>
+        <location filename="../src/QueryViewController.cpp" line="1242"/>
         <source>Preview is not available.</source>
         <translation>Предварительный просмотр недоступен.</translation>
     </message>
@@ -941,126 +968,126 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::QueryViewController</name>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="658"/>
-        <location filename="../src/QueryViewController.cpp" line="1121"/>
+        <location filename="../src/QueryViewController.cpp" line="659"/>
+        <location filename="../src/QueryViewController.cpp" line="1122"/>
         <source>Query Designer</source>
         <translation>Дизайнер запросов</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="672"/>
+        <location filename="../src/QueryViewController.cpp" line="673"/>
         <source>Elements</source>
         <translation>Элементы</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="673"/>
+        <location filename="../src/QueryViewController.cpp" line="674"/>
         <source>Groups</source>
         <translation>Группы</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="674"/>
+        <location filename="../src/QueryViewController.cpp" line="675"/>
         <source>Samples</source>
         <translation>Примеры</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="720"/>
+        <location filename="../src/QueryViewController.cpp" line="721"/>
         <source>Run Schema...</source>
         <translation>Выполнить схему...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="724"/>
+        <location filename="../src/QueryViewController.cpp" line="725"/>
         <source>New Schema</source>
         <translation>Создать схему</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="729"/>
+        <location filename="../src/QueryViewController.cpp" line="730"/>
         <source>Load Schema...</source>
         <translation>Загрузить схему...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="734"/>
-        <location filename="../src/QueryViewController.cpp" line="955"/>
+        <location filename="../src/QueryViewController.cpp" line="735"/>
+        <location filename="../src/QueryViewController.cpp" line="956"/>
         <source>Save Schema</source>
         <translation>Сохранить схему</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="741"/>
+        <location filename="../src/QueryViewController.cpp" line="742"/>
         <source>Save Schema As...</source>
         <translation>Сохранить схему как...</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="747"/>
+        <location filename="../src/QueryViewController.cpp" line="748"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="759"/>
+        <location filename="../src/QueryViewController.cpp" line="760"/>
         <source>Show title</source>
         <translation>Показывать заголовок</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="764"/>
+        <location filename="../src/QueryViewController.cpp" line="765"/>
         <source>Show description</source>
         <translation>Показывать описание схемы</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="769"/>
+        <location filename="../src/QueryViewController.cpp" line="770"/>
         <source>Show element info</source>
         <translation>Показывать описание элемента</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="774"/>
+        <location filename="../src/QueryViewController.cpp" line="775"/>
         <source>Show order</source>
         <translation>Показывать порядок выполнения</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="781"/>
+        <location filename="../src/QueryViewController.cpp" line="782"/>
         <source>Direct strand</source>
         <translation>Считывать прямую цепь</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="784"/>
+        <location filename="../src/QueryViewController.cpp" line="785"/>
         <source>Reverse complementary strand</source>
         <translation>Считывать обратно-комлементарную цепь</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="787"/>
+        <location filename="../src/QueryViewController.cpp" line="788"/>
         <source>Both strands</source>
         <translation>Считывать обе цепи</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="846"/>
-        <location filename="../src/QueryViewController.cpp" line="872"/>
+        <location filename="../src/QueryViewController.cpp" line="847"/>
+        <location filename="../src/QueryViewController.cpp" line="873"/>
         <source>Query Sequence Mode</source>
         <translation>Режим считывания последовательности</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="837"/>
-        <location filename="../src/QueryViewController.cpp" line="867"/>
+        <location filename="../src/QueryViewController.cpp" line="838"/>
+        <location filename="../src/QueryViewController.cpp" line="868"/>
         <source>View Mode</source>
         <translation>Режим отображения</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="898"/>
+        <location filename="../src/QueryViewController.cpp" line="899"/>
         <source>The schema is empty!</source>
         <translation>Схема пуста!</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="900"/>
+        <location filename="../src/QueryViewController.cpp" line="901"/>
         <source>The schema is invalid! Please see the log for details.</source>
         <translation>Схема содержит ошибки. Для получения подробностей обратитесь к логу.</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="929"/>
+        <location filename="../src/QueryViewController.cpp" line="930"/>
         <source>Load Schema</source>
         <translation>Загрузить схему</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1068"/>
+        <location filename="../src/QueryViewController.cpp" line="1069"/>
         <source>Query Designer - %1</source>
         <translation>Дизайнер запросов - %1</translation>
     </message>
     <message>
-        <location filename="../src/QueryViewController.cpp" line="1122"/>
+        <location filename="../src/QueryViewController.cpp" line="1123"/>
         <source>The schema has been modified.
 Do you want to save changes?</source>
         <translation>Схема была изменена.
diff --git a/src/plugins/remote_blast/src/BlastQuery.cpp b/src/plugins/remote_blast/src/BlastQuery.cpp
index fa2ad13..b610000 100644
--- a/src/plugins/remote_blast/src/BlastQuery.cpp
+++ b/src/plugins/remote_blast/src/BlastQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/BlastQuery.h b/src/plugins/remote_blast/src/BlastQuery.h
index d5c4780..5e5a765 100644
--- a/src/plugins/remote_blast/src/BlastQuery.h
+++ b/src/plugins/remote_blast/src/BlastQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/DBRequestFactory.h b/src/plugins/remote_blast/src/DBRequestFactory.h
index 6813762..5a55b7b 100644
--- a/src/plugins/remote_blast/src/DBRequestFactory.h
+++ b/src/plugins/remote_blast/src/DBRequestFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/HttpRequest.h b/src/plugins/remote_blast/src/HttpRequest.h
index 5aec2c6..ec7bfc3 100644
--- a/src/plugins/remote_blast/src/HttpRequest.h
+++ b/src/plugins/remote_blast/src/HttpRequest.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,16 +22,16 @@
 #ifndef _HTTP_REQUEST_H_
 #define _HTTP_REQUEST_H_
 
+#include <QBuffer>
+#include <QDomDocument>
+#include <QDomNode>
+#include <QThread>
 
-#include <U2Core/Log.h>
-#include <U2Core/IOAdapter.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/Task.h>
 #include <U2Core/DataBaseRegistry.h>
-
-#include <QtCore/QtCore>
-#include <QtXml/QDomNode>
-#include <QtXml/QDomDocument>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/Log.h>
+#include <U2Core/Task.h>
 
 #include "RemoteBLASTConsts.h"
 
diff --git a/src/plugins/remote_blast/src/HttpRequestBLAST.cpp b/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
index 06f2c63..5f3d6ca 100644
--- a/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
+++ b/src/plugins/remote_blast/src/HttpRequestBLAST.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp b/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
index 86a57e6..003e9b0 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTConsts.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTConsts.h b/src/plugins/remote_blast/src/RemoteBLASTConsts.h
index 97b8837..7808a37 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTConsts.h
+++ b/src/plugins/remote_blast/src/RemoteBLASTConsts.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _REMOTE_QUERY_CONSTS_
 #define _REMOTE_QUERY_CONSTS_
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
 namespace U2 {
 
diff --git a/src/plugins/remote_blast/src/RemoteBLASTDialog.ui b/src/plugins/remote_blast/src/RemoteBLASTDialog.ui
index 5ff3f77..0d9d539 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTDialog.ui
+++ b/src/plugins/remote_blast/src/RemoteBLASTDialog.ui
@@ -6,8 +6,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>636</width>
-    <height>523</height>
+    <width>601</width>
+    <height>478</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -16,6 +16,12 @@
     <verstretch>0</verstretch>
    </sizepolicy>
   </property>
+  <property name="maximumSize">
+   <size>
+    <width>1000</width>
+    <height>500</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Search Through a Remote Database</string>
   </property>
@@ -30,7 +36,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
    <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
+    <enum>QLayout::SetMinimumSize</enum>
    </property>
    <item>
     <widget class="QTabWidget" name="optionsTab">
@@ -40,6 +46,12 @@
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
+     <property name="maximumSize">
+      <size>
+       <width>1000</width>
+       <height>650</height>
+      </size>
+     </property>
      <property name="currentIndex">
       <number>0</number>
      </property>
@@ -326,7 +338,7 @@
             <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></string>
            </property>
           </widget>
@@ -789,6 +801,19 @@ p, li { white-space: pre-wrap; }
     </widget>
    </item>
    <item>
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>0</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item>
     <widget class="QDialogButtonBox" name="buttonBox">
      <property name="standardButtons">
       <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
diff --git a/src/plugins/remote_blast/src/RemoteBLASTPlugin.cpp b/src/plugins/remote_blast/src/RemoteBLASTPlugin.cpp
index 65d2d7f..398e879 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTPlugin.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #include <QCoreApplication>
 #include <QDir>
 #include <QDirIterator>
-#include <QMessageBox>
 #include <QMenu>
+#include <QMessageBox>
 
 #include <U2Algorithm/CDSearchTaskFactoryRegistry.h>
 
@@ -34,10 +34,11 @@
 #include <U2Core/DataBaseRegistry.h>
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GUIUtils.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Test/GTest.h>
 #include <U2Test/GTestFrameworkComponents.h>
@@ -111,7 +112,7 @@ void RemoteBLASTViewContext::sl_showDialog() {
     ADVSequenceObjectContext* seqCtx = av->getSequenceInFocus();
 
     bool isAminoSeq = seqCtx->getAlphabet()->isAmino();
-    QObjectScopedPointer<SendSelectionDialog> dlg = new SendSelectionDialog(seqCtx->getSequenceObject(), isAminoSeq, av->getWidget());
+    QObjectScopedPointer<SendSelectionDialog> dlg = new SendSelectionDialog(seqCtx, isAminoSeq, av->getWidget());
     dlg->exec();
     CHECK(!dlg.isNull(), );
 
diff --git a/src/plugins/remote_blast/src/RemoteBLASTPlugin.h b/src/plugins/remote_blast/src/RemoteBLASTPlugin.h
index 61151c8..e799622 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTPlugin.h
+++ b/src/plugins/remote_blast/src/RemoteBLASTPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTPluginTests.cpp b/src/plugins/remote_blast/src/RemoteBLASTPluginTests.cpp
index 0b215ea..0ee154d 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTPluginTests.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTPluginTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTPluginTests.h b/src/plugins/remote_blast/src/RemoteBLASTPluginTests.h
index 7db3ba5..ba7f24d 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTPluginTests.h
+++ b/src/plugins/remote_blast/src/RemoteBLASTPluginTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTTask.cpp b/src/plugins/remote_blast/src/RemoteBLASTTask.cpp
index 2bbadc9..7060ead 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTTask.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,12 +56,12 @@ Task(tr("RemoteBLASTTask"), TaskFlags_NR_FOSCOE), offsInGlobalSeq(_qoffs), aobj(
 QList<Task*> RemoteBLASTToAnnotationsTask::onSubTaskFinished(Task* subTask) {
     QList<Task*> res;
 
-    if(subTask->hasError() && subTask == queryTask) {
+    if (subTask->hasError()) {
         stateInfo.setError(subTask->getError());
         return res;
     }
 
-    if (hasError() || isCanceled()) {
+    if (isCanceled()) {
         return res;
     }
 
@@ -69,39 +69,44 @@ QList<Task*> RemoteBLASTToAnnotationsTask::onSubTaskFinished(Task* subTask) {
         stateInfo.setError( tr("The object was removed\n"));
         return res;
     }
-    if (subTask == queryTask) {
-        //shift annotations according to offset first
-
-        RemoteBLASTTask * rrTask = qobject_cast<RemoteBLASTTask *>(queryTask);
-        SAFE_POINT(NULL != rrTask, "Invalid remote BLAST task!", res);
-        QList<SharedAnnotationData> anns = rrTask->getResultedAnnotations();
-
-        if(!anns.isEmpty()) {
-            if(!url.isEmpty()) {
-                Document *d = AppContext::getProject()->findDocumentByURL(url);
-                if(d==NULL) {
-                    IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE);
-                    DocumentFormat* df = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
-                    d = df->createNewLoadedDocument(iof, url, stateInfo);
-                    CHECK_OP(stateInfo, res);
-                    d->addObject(aobj);
-                    AppContext::getProject()->addDocument(d);
-                } else {
-                    setError(tr("File %1 already exists").arg(url));
-                    return res;
-                }
-            }
-            QList<SharedAnnotationData> annotations;
-            for(QMutableListIterator<SharedAnnotationData> it_ad(anns); it_ad.hasNext();) {
-                SharedAnnotationData &ad = it_ad.next();
-                U2Region::shift(offsInGlobalSeq, ad->location->regions);
-                annotations << ad;
-            }
-            U1AnnotationUtils::addDescriptionQualifier(annotations, annDescription);
+    
+    if (subTask != queryTask) {
+        return res;
+    }
 
-            res.append(new CreateAnnotationsTask(aobj, annotations, group));
+    // Query was finished
+    
+    RemoteBLASTTask * rrTask = qobject_cast<RemoteBLASTTask *>(queryTask);
+    SAFE_POINT(NULL != rrTask, "Invalid remote BLAST task!", res);
+    QList<SharedAnnotationData> anns = rrTask->getResultedAnnotations();
+    if (anns.isEmpty()) {
+        return res;
+    }
+
+    if (aobj->getDocument() == NULL && !url.isEmpty()) { // create new document if object has no document and url is not empty
+        Document *d = AppContext::getProject()->findDocumentByURL(url);
+        if (d == NULL) {
+            IOAdapterFactory* iof = AppContext::getIOAdapterRegistry()->getIOAdapterFactoryById(BaseIOAdapters::LOCAL_FILE);
+            DocumentFormat* df = AppContext::getDocumentFormatRegistry()->getFormatById(BaseDocumentFormats::PLAIN_GENBANK);
+            d = df->createNewLoadedDocument(iof, url, stateInfo);
+            CHECK_OP(stateInfo, res);
+            d->addObject(aobj);
+            AppContext::getProject()->addDocument(d);
+        } else {
+            setError(tr("File %1 already exists").arg(url));
+            return res;
         }
     }
+    
+    // Add annotations to aobj: shift annotations according to offset first
+    QList<SharedAnnotationData> annotations;
+    for (QMutableListIterator<SharedAnnotationData> it_ad(anns); it_ad.hasNext();) {
+        SharedAnnotationData &ad = it_ad.next();
+        U2Region::shift(offsInGlobalSeq, ad->location->regions);
+        annotations << ad;
+    }
+    U1AnnotationUtils::addDescriptionQualifier(annotations, annDescription);
+    res << new CreateAnnotationsTask(aobj, annotations, group);
     return res;
 }
 
diff --git a/src/plugins/remote_blast/src/RemoteBLASTTask.h b/src/plugins/remote_blast/src/RemoteBLASTTask.h
index d5dcb9c..5448442 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTTask.h
+++ b/src/plugins/remote_blast/src/RemoteBLASTTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,15 @@
 #ifndef _U2_REMOTE_QUERY_TASK_H_
 #define _U2_REMOTE_QUERY_TASK_H_
 
-#include <U2Core/Task.h>
-#include <U2Core/AnnotationData.h>
-#include <U2Core/DNATranslation.h>
+#include <QPointer>
+#include <QTimer>
 
 #include <U2Algorithm/CDSearchTaskFactory.h>
 
+#include <U2Core/AnnotationData.h>
+#include <U2Core/DNATranslation.h>
+#include <U2Core/Task.h>
+
 #include "HttpRequest.h"
 
 namespace U2 {
diff --git a/src/plugins/remote_blast/src/RemoteBLASTWorker.cpp b/src/plugins/remote_blast/src/RemoteBLASTWorker.cpp
index 85edbfa..8378337 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTWorker.cpp
+++ b/src/plugins/remote_blast/src/RemoteBLASTWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/RemoteBLASTWorker.h b/src/plugins/remote_blast/src/RemoteBLASTWorker.h
index a291f46..c360cbd 100644
--- a/src/plugins/remote_blast/src/RemoteBLASTWorker.h
+++ b/src/plugins/remote_blast/src/RemoteBLASTWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/remote_blast/src/SendSelectionDialog.cpp b/src/plugins/remote_blast/src/SendSelectionDialog.cpp
index 0a12f40..bd38216 100644
--- a/src/plugins/remote_blast/src/SendSelectionDialog.cpp
+++ b/src/plugins/remote_blast/src/SendSelectionDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,6 +34,9 @@
 #include <U2Gui/HelpButton.h>
 #include <U2Core/QObjectScopedPointer.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
 #include "SendSelectionDialog.h"
 
 namespace U2 {
@@ -126,9 +129,10 @@ void SendSelectionDialog::alignComboBoxes() {
     }
 }
 
-SendSelectionDialog::SendSelectionDialog(const U2SequenceObject* dnaso, bool _isAminoSeq, QWidget *p)
-    : QDialog(p), translateToAmino(false), isAminoSeq(_isAminoSeq), extImported(false)
+SendSelectionDialog::SendSelectionDialog(ADVSequenceObjectContext* seqCtx, bool _isAminoSeq, QWidget *p)
+    : QDialog(p), translateToAmino(false), isAminoSeq(_isAminoSeq), extImported(false),seqCtx(seqCtx)
 {
+    U2SequenceObject* dnaso = seqCtx->getSequenceObject();
     CreateAnnotationModel ca_m;
     ca_m.hideAnnotationType = true;
     ca_m.hideAnnotationName = true;
@@ -137,7 +141,7 @@ SendSelectionDialog::SendSelectionDialog(const U2SequenceObject* dnaso, bool _is
     ca_m.sequenceLen = dnaso->getSequenceLength();
     ca_c = new CreateAnnotationWidgetController(ca_m, this);
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223159");
+    new HelpButton(this, buttonBox, "20875063");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -201,23 +205,7 @@ const CreateAnnotationModel *SendSelectionDialog::getModel() const {
 }
 
 AnnotationTableObject * SendSelectionDialog::getAnnotationObject() const {
-    if(ca_c->isNewObject()) {
-        U2OpStatusImpl os;
-        const U2DbiRef dbiRef = AppContext::getDbiRegistry( )->getSessionTmpDbiRef( os );
-        SAFE_POINT_OP( os, NULL );
-        AnnotationTableObject *aobj = new AnnotationTableObject( "Annotations", dbiRef );
-        aobj->addObjectRelation(GObjectRelation(ca_c->getModel().sequenceObjectRef, ObjectRole_Sequence));
-        return aobj;
-    }
-    else {
-        bool objectPrepared = ca_c->prepareAnnotationObject();
-        if (!objectPrepared){
-            QMessageBox::warning(NULL, tr("Error"), tr("Cannot create an annotation object. Please check settings"));
-            return NULL;
-        }
-        return ca_c->getModel().getAnnotationObject();
-    }
-
+    return ca_c->getModel().getAnnotationObject();
 }
 
 QString SendSelectionDialog::getUrl() const{
@@ -423,6 +411,12 @@ void SendSelectionDialog::sl_OK() {
     cfg.dbChoosen = db;
 
     saveSettings();
+    bool objectPrepared = ca_c->prepareAnnotationObject();
+    if (!objectPrepared){
+        QMessageBox::warning(this, tr("Error"), tr("Cannot create an annotation object. Please check settings"));
+        return;
+    }
+    seqCtx->getAnnotatedDNAView()->tryAddObject(ca_c->getModel().getAnnotationObject());
     accept();
 }
 
diff --git a/src/plugins/remote_blast/src/SendSelectionDialog.h b/src/plugins/remote_blast/src/SendSelectionDialog.h
index 843a383..4c72a04 100644
--- a/src/plugins/remote_blast/src/SendSelectionDialog.h
+++ b/src/plugins/remote_blast/src/SendSelectionDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 #include "RemoteBLASTTask.h"
 #include "RemoteBLASTConsts.h"
@@ -39,13 +35,14 @@
 
 namespace U2 {
 
-class CreateAnnotationWidgetController;
+class ADVSequenceObjectContext;
 class AnnotationTableObject;
+class CreateAnnotationWidgetController;
 
 class SendSelectionDialog: public QDialog, Ui_RemoteBLASTDialog {
     Q_OBJECT
 public:
-    SendSelectionDialog( const U2SequenceObject* dnaso, bool _isAminoSeq, QWidget *p = NULL );
+    SendSelectionDialog(ADVSequenceObjectContext* seqCtx, bool _isAminoSeq, QWidget *p = NULL );
     QString getGroupName() const;
     const QString &getAnnotationDescription() const;
     AnnotationTableObject * getAnnotationObject() const;
@@ -78,6 +75,7 @@ private:
     bool isAminoSeq;
     CreateAnnotationWidgetController * ca_c;
     bool extImported;
+    ADVSequenceObjectContext* seqCtx;
 };
 
 }
diff --git a/src/plugins/remote_blast/transl/english.ts b/src/plugins/remote_blast/transl/english.ts
index 2428558..347287d 100644
--- a/src/plugins/remote_blast/transl/english.ts
+++ b/src/plugins/remote_blast/transl/english.ts
@@ -79,386 +79,398 @@
 <context>
     <name>RemoteBLASTDialog</name>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="20"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="26"/>
         <source>Search Through a Remote Database</source>
         <translation>Search Through a Remote Database</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="54"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="66"/>
         <source>General options</source>
         <translation>General options</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="74"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="86"/>
         <source>Select the search type:</source>
         <translation>Select the search type:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="82"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="94"/>
         <source>blastn</source>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="87"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="99"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="92"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="104"/>
         <source>cdd</source>
         <translation>cdd</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="100"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="112"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Search for short, nearly exact matches</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="107"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="119"/>
         <source>Expectation value:</source>
         <translation>Expectation value:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="114"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="126"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="182"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="194"/>
         <source>The database:</source>
         <translation>The database:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="193"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="205"/>
         <source>Human genomic plus transcript - est_human</source>
         <translation>Human genomic plus transcript - est_human</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="198"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="210"/>
         <source>Mouse genomic plus transcript - est_mouse</source>
         <translation>Mouse genomic plus transcript - est_mouse</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="203"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="215"/>
         <source>Nucleotide collection - nr</source>
         <translation>Nucleotide collection - nr</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="208"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="220"/>
         <source>Reference nRNA sequences - refseq_rna</source>
         <translation>Reference nRNA sequences - refseq_rna</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="213"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="225"/>
         <source>Reference genomic seqence - refseq_genomic</source>
         <translation>Reference genomic seqence - refseq_genomic</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="218"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="230"/>
         <source>NCBI genomes - chromosome</source>
         <translation>NCBI genomes - chromosome</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="223"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="235"/>
         <source>Express sequence tags - est</source>
         <translation>Express sequence tags - est</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="228"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="240"/>
         <source>Non-human, non-mouse ESTs - est_other</source>
         <translation>Non-human, non-mouse ESTs - est_other</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="233"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="245"/>
         <source>Genomic survey sequences - gss</source>
         <translation>Genomic survey sequences - gss</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="238"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="250"/>
         <source>High throughput genomic sequences - HTGS</source>
         <translation>High throughput genomic sequences - HTGS</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="243"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="255"/>
         <source>Patent sequences - pat</source>
         <translation>Patent sequences - pat</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="248"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="260"/>
         <source>Protein data bank - pdb</source>
         <translation>Protein data bank - pdb</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="253"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="265"/>
         <source>Human ALU repeat elements - alu_repeats</source>
         <translation>Human ALU repeat elements - alu_repeats</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="258"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="270"/>
         <source>Sequence tagged sites - dbsts</source>
         <translation>Sequence tagged sites - dbsts</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="263"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="275"/>
         <source>Whole-genome shotgun reads - wgs</source>
         <translation>Whole-genome shotgun reads - wgs</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="268"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="280"/>
         <source>Environmental samples - env_nt</source>
         <translation>Environmental samples - env_nt</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="298"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="310"/>
         <source>The database description:</source>
         <translation>The database description:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="326"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="364"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="376"/>
         <source>Search timeout</source>
         <translation>Search timeout</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="380"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="392"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="402"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="414"/>
         <source>Advanced options</source>
         <translation>Advanced options</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="423"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="435"/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="428"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="440"/>
         <source>7</source>
         <translation>7</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="433"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="445"/>
         <source>11</source>
         <translation>11</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="438"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="450"/>
         <source>15</source>
         <translation>15</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="452"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="464"/>
         <source>Word size</source>
         <translation>Word size</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="459"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="471"/>
         <source>Gap costs</source>
         <translation>Gap costs</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="476"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="488"/>
         <source>11 1</source>
         <translation>11 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="481"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="493"/>
         <source>5 2</source>
         <translation>5 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="486"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="498"/>
         <source>4 2</source>
         <translation>4 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="491"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="503"/>
         <source>1 2</source>
         <translation>1 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="496"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="508"/>
         <source>0 2</source>
         <translation>0 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="501"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="513"/>
         <source>3 1</source>
         <translation>3 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="506"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="518"/>
         <source>2 1</source>
         <translation>2 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="511"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="523"/>
         <source>1 1</source>
         <translation>1 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="525"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="537"/>
         <source>Match scores</source>
         <translation>Match scores</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="536"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="548"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="541"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="553"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="546"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="558"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="551"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="563"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="556"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="568"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="561"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="573"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="575"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="587"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="588"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="600"/>
         <source>PHI pattern</source>
         <translation>PHI pattern</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="608"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="620"/>
         <source>Entrez query</source>
         <translation>Entrez query</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="618"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="630"/>
         <source>Service</source>
         <translation>Service</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="639"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="651"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="644"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="656"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="649"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="673"/>
         <source>Filters</source>
         <translation>Filters</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="667"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="679"/>
         <source>Low complexity filter</source>
         <translation>Low complexity filter</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="674"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="686"/>
         <source>Human repeats filter</source>
         <translation>Human repeats filter</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="684"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="696"/>
         <source>Masks</source>
         <translation>Masks</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="690"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="702"/>
         <source>Mask for lookup table only</source>
         <translation>Mask for lookup table only</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="697"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
         <source>Mask lower case letters</source>
         <translation>Mask lower case letters</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="721"/>
         <source>Filter results</source>
         <translation>Filter results</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="717"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="729"/>
         <source>Filter by</source>
         <translation>Filter by</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="762"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="774"/>
         <source>Select result by</source>
         <translation>Select result by</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="738"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="750"/>
         <source>accession</source>
         <translation>accession</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="121"/>
-        <location filename="../src/RemoteBLASTDialog.ui" line="131"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="133"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="143"/>
         <source>The maximum number of results</source>
         <translation>The maximum number of results</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="124"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="136"/>
         <source>Results limit:</source>
         <translation>Results limit:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="752"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="338"/>
+        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></source>
+        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../src/RemoteBLASTDialog.ui" line="764"/>
         <source>EValue</source>
         <translation>EValue</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="724"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="736"/>
         <source>def (filter by definition of annotations)</source>
         <translation>def (filter by definition of annotations)</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="745"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="757"/>
         <source>id</source>
         <translation>id</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="731"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="743"/>
         <source>Score</source>
         <translation>Score</translation>
     </message>
@@ -466,22 +478,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CheckNCBISequenceCircularityTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="552"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="557"/>
         <source>Check NCBI sequence circularity</source>
         <translation>Check NCBI sequence circularity</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="557"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="562"/>
         <source>ID is empty</source>
         <translation>ID is empty</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="583"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="588"/>
         <source>Can not check if sequence is circular! Sequence is considered to be linear.</source>
         <translation>Can not check if sequence is circular! Sequence is considered to be linear.</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="587"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="592"/>
         <source>Can not remove temporary file.</source>
         <translation>Can not remove temporary file.</translation>
     </message>
@@ -489,33 +501,33 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateAnnotationsFromHttpBlastResultTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="239"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="244"/>
         <source>Create annotations from BLAST results</source>
         <translation>Create annotations from BLAST results</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="244"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="249"/>
         <source>HttpBlastResult list is empty</source>
         <translation>HttpBlastResult list is empty</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="256"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="261"/>
         <source>HttpRequest is NULL!</source>
         <translation>HttpRequest is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="481"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="482"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="486"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="487"/>
         <source>Wrong number of annotations</source>
         <translation>Wrong number of annotations</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="538"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="543"/>
         <source>Invalid subtask</source>
         <translation>Invalid subtask</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="539"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="544"/>
         <source>No corresponding annotations</source>
         <translation>No corresponding annotations</translation>
     </message>
@@ -700,38 +712,38 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Merge</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="630"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="635"/>
         <source>Qualifier %1 not found</source>
         <translation>Qualifier %1 not found</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="631"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="636"/>
         <source>Can not merge %1 qualifiers: values are not the same.</source>
         <translation>Can not merge %1 qualifiers: values are not the same.</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="638"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="644"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="668"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="674"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="643"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="649"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="673"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="679"/>
         <source>Can not find '%1' qualifier</source>
         <translation>Can not find '%1' qualifier</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="671"/>
         <location filename="../src/RemoteBLASTTask.cpp" line="676"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="686"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="690"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="681"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="691"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="695"/>
         <source>Can not convert qualifier value '%1' to double</source>
         <translation>Can not convert qualifier value '%1' to double</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="683"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="688"/>
         <source>Can not find 'E-value' qualifier</source>
         <translation>Can not find 'E-value' qualifier</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="694"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="699"/>
         <source>Can not convert qualifier value '%1' to int</source>
         <translation>Can not convert qualifier value '%1' to int</translation>
     </message>
@@ -807,12 +819,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTPlugin</name>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="62"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="63"/>
         <source>Performs remote database queries: BLAST, CDD, etc...</source>
         <translation>Performs remote database queries: BLAST, CDD, etc...</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="62"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="63"/>
         <source>Remote BLAST</source>
         <translation>Remote BLAST</translation>
     </message>
@@ -820,7 +832,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="110"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="115"/>
         <source>RemoteBLASTTask</source>
         <translation>RemoteBLASTTask</translation>
     </message>
@@ -839,7 +851,7 @@ p, li { white-space: pre-wrap; }
         <translation>The object was removed</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="90"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="96"/>
         <source>File %1 already exists</source>
         <translation>File %1 already exists</translation>
     </message>
@@ -847,12 +859,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTViewContext</name>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="100"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="101"/>
         <source>Query NCBI BLAST database...</source>
         <translation>Query NCBI BLAST database...</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="137"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="138"/>
         <source>Sequence objects is NULL</source>
         <translation>Sequence objects is NULL</translation>
     </message>
@@ -860,12 +872,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBlastHttpRequestTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="153"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="158"/>
         <source>Http Blast requests task</source>
         <translation>Http Blast requests task</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="164"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="169"/>
         <source>Incorrect database</source>
         <translation>Incorrect database</translation>
     </message>
@@ -873,28 +885,28 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::SendSelectionDialog</name>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="141"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="145"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="142"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="146"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="215"/>
-        <location filename="../src/SendSelectionDialog.cpp" line="315"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="303"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="416"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="215"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="416"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="402"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="390"/>
         <source>You chose to search nucleotide sequence in protein database. This sequence will be converted into 6 sequences(3 translations for both strands).Therefore this search may take some time. Continue?</source>
         <translation>You chose to search nucleotide sequence in protein database. This sequence will be converted into 6 sequences(3 translations for both strands).Therefore this search may take some time. Continue?</translation>
     </message>
diff --git a/src/plugins/remote_blast/transl/russian.ts b/src/plugins/remote_blast/transl/russian.ts
index 737e258..f60619b 100644
--- a/src/plugins/remote_blast/transl/russian.ts
+++ b/src/plugins/remote_blast/transl/russian.ts
@@ -79,386 +79,398 @@
 <context>
     <name>RemoteBLASTDialog</name>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="20"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="26"/>
         <source>Search Through a Remote Database</source>
         <translation>Запрос к удаленной базе данных</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="54"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="66"/>
         <source>General options</source>
         <translation>Основные параметры</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="74"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="86"/>
         <source>Select the search type:</source>
         <translation>Выберите вид поиска:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="82"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="94"/>
         <source>blastn</source>
         <translation>blastn</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="87"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="99"/>
         <source>blastp</source>
         <translation>blastp</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="92"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="104"/>
         <source>cdd</source>
         <translation>cdd</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="100"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="112"/>
         <source>Search for short, nearly exact matches</source>
         <translation>Поиск коротких последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="107"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="119"/>
         <source>Expectation value:</source>
         <translation>Математическое ожидание:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="114"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="126"/>
         <source>Megablast</source>
         <translation>Megablast</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="182"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="194"/>
         <source>The database:</source>
         <translation>База данных:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="193"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="205"/>
         <source>Human genomic plus transcript - est_human</source>
         <translation>Human genomic plus transcript - est_human</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="198"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="210"/>
         <source>Mouse genomic plus transcript - est_mouse</source>
         <translation>Mouse genomic plus transcript - est_mouse</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="203"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="215"/>
         <source>Nucleotide collection - nr</source>
         <translation>Nucleotide collection - nr</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="208"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="220"/>
         <source>Reference nRNA sequences - refseq_rna</source>
         <translation>Reference nRNA sequences - refseq_rna</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="213"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="225"/>
         <source>Reference genomic seqence - refseq_genomic</source>
         <translation>Reference genomic seqence - refseq_genomic</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="218"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="230"/>
         <source>NCBI genomes - chromosome</source>
         <translation>NCBI genomes - chromosome</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="223"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="235"/>
         <source>Express sequence tags - est</source>
         <translation>Express sequence tags - est</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="228"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="240"/>
         <source>Non-human, non-mouse ESTs - est_other</source>
         <translation>Non-human, non-mouse ESTs - est_other</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="233"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="245"/>
         <source>Genomic survey sequences - gss</source>
         <translation>Genomic survey sequences - gss</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="238"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="250"/>
         <source>High throughput genomic sequences - HTGS</source>
         <translation>High throughput genomic sequences - HTGS</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="243"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="255"/>
         <source>Patent sequences - pat</source>
         <translation>Patent sequences - pat</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="248"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="260"/>
         <source>Protein data bank - pdb</source>
         <translation>Protein data bank - pdb</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="253"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="265"/>
         <source>Human ALU repeat elements - alu_repeats</source>
         <translation>Human ALU repeat elements - alu_repeats</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="258"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="270"/>
         <source>Sequence tagged sites - dbsts</source>
         <translation>Sequence tagged sites - dbsts</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="263"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="275"/>
         <source>Whole-genome shotgun reads - wgs</source>
         <translation>Whole-genome shotgun reads - wgs</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="268"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="280"/>
         <source>Environmental samples - env_nt</source>
         <translation>Environmental samples - env_nt</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="298"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="310"/>
         <source>The database description:</source>
         <translation>Описание базы данных:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="326"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;">
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="364"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="376"/>
         <source>Search timeout</source>
         <translation>Тайм-аут поиска</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="380"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="392"/>
         <source> min</source>
         <translation>мин</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="402"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="414"/>
         <source>Advanced options</source>
         <translation>Расширенные опции</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="423"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="435"/>
         <source>3</source>
         <translation>3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="428"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="440"/>
         <source>7</source>
         <translation>7</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="433"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="445"/>
         <source>11</source>
         <translation>11</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="438"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="450"/>
         <source>15</source>
         <translation>15</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="452"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="464"/>
         <source>Word size</source>
         <translation>Размер слова</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="459"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="471"/>
         <source>Gap costs</source>
         <translation>Вес пробела</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="476"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="488"/>
         <source>11 1</source>
         <translation>11 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="481"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="493"/>
         <source>5 2</source>
         <translation>5 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="486"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="498"/>
         <source>4 2</source>
         <translation>4 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="491"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="503"/>
         <source>1 2</source>
         <translation>1 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="496"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="508"/>
         <source>0 2</source>
         <translation>0 2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="501"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="513"/>
         <source>3 1</source>
         <translation>3 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="506"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="518"/>
         <source>2 1</source>
         <translation>2 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="511"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="523"/>
         <source>1 1</source>
         <translation>1 1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="525"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="537"/>
         <source>Match scores</source>
         <translation>Веса совпадений</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="536"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="548"/>
         <source>1 -2</source>
         <translation>1 -2</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="541"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="553"/>
         <source>1 -3</source>
         <translation>1 -3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="546"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="558"/>
         <source>1 -4</source>
         <translation>1 -4</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="551"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="563"/>
         <source>2 -3</source>
         <translation>2 -3</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="556"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="568"/>
         <source>4 -5</source>
         <translation>4 -5</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="561"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="573"/>
         <source>1 -1</source>
         <translation>1 -1</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="575"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="587"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="588"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="600"/>
         <source>PHI pattern</source>
         <translation>Шаблон PHI</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="608"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="620"/>
         <source>Entrez query</source>
         <translation>Entrez запрос</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="618"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="630"/>
         <source>Service</source>
         <translation>Сервис</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="639"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="651"/>
         <source>plain</source>
         <translation>plain</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="644"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="656"/>
         <source>psi</source>
         <translation>psi</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="649"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
         <source>phi</source>
         <translation>phi</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="661"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="673"/>
         <source>Filters</source>
         <translation>Фильтры</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="667"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="679"/>
         <source>Low complexity filter</source>
         <translation>Фильтр низкой сложности</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="674"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="686"/>
         <source>Human repeats filter</source>
         <translation>Фильтр человеческих повторов</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="684"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="696"/>
         <source>Masks</source>
         <translation>Маски</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="690"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="702"/>
         <source>Mask for lookup table only</source>
         <translation>Только маска таблицы поиска</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="697"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
         <source>Mask lower case letters</source>
         <translation>Маска символов нижн. регистра</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="709"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="721"/>
         <source>Filter results</source>
         <translation>Результаты фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="717"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="729"/>
         <source>Filter by</source>
         <translation>Фильтровать по</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="762"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="774"/>
         <source>Select result by</source>
         <translation>Выбрать результаты по</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="738"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="750"/>
         <source>accession</source>
         <translation>accession</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="121"/>
-        <location filename="../src/RemoteBLASTDialog.ui" line="131"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="133"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="143"/>
         <source>The maximum number of results</source>
         <translation>Максимальное число результатов</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="124"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="136"/>
         <source>Results limit:</source>
         <translation>Предел результатов:</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="752"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="338"/>
+        <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></source>
+        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"><br /></p></body></html></translation>
+    </message>
+    <message>
+        <location filename="../src/RemoteBLASTDialog.ui" line="764"/>
         <source>EValue</source>
         <translation>EValue</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="724"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="736"/>
         <source>def (filter by definition of annotations)</source>
         <translation>def (фильтр по определению аннотаций)</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="745"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="757"/>
         <source>id</source>
         <translation>id</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTDialog.ui" line="731"/>
+        <location filename="../src/RemoteBLASTDialog.ui" line="743"/>
         <source>Score</source>
         <translation>Score</translation>
     </message>
@@ -466,22 +478,22 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CheckNCBISequenceCircularityTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="552"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="557"/>
         <source>Check NCBI sequence circularity</source>
         <translation>Проверка циркулярности NCBI последовательности</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="557"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="562"/>
         <source>ID is empty</source>
         <translation>ID пуст</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="583"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="588"/>
         <source>Can not check if sequence is circular! Sequence is considered to be linear.</source>
         <translation>Невозможно проверить циркулярность последовательности! Последовательность считается линейной.</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="587"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="592"/>
         <source>Can not remove temporary file.</source>
         <translation>Невозможно удалить временный файл.</translation>
     </message>
@@ -489,33 +501,33 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CreateAnnotationsFromHttpBlastResultTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="239"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="244"/>
         <source>Create annotations from BLAST results</source>
         <translation>Создать аннотации из результатов BLAST</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="244"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="249"/>
         <source>HttpBlastResult list is empty</source>
         <translation>HttpBlastResult list is empty</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="256"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="261"/>
         <source>HttpRequest is NULL!</source>
         <translation>HttpRequest is NULL!</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="481"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="482"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="486"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="487"/>
         <source>Wrong number of annotations</source>
         <translation>Wrong number of annotations</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="538"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="543"/>
         <source>Invalid subtask</source>
         <translation>Invalid subtask</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="539"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="544"/>
         <source>No corresponding annotations</source>
         <translation>No corresponding annotations</translation>
     </message>
@@ -700,38 +712,38 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Merge</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="630"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="635"/>
         <source>Qualifier %1 not found</source>
         <translation>Квалификатор %1 не найден</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="631"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="636"/>
         <source>Can not merge %1 qualifiers: values are not the same.</source>
         <translation>Can not merge %1 qualifiers: values are not the same.</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="638"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="644"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="668"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="674"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="643"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="649"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="673"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="679"/>
         <source>Can not find '%1' qualifier</source>
         <translation>Can not find '%1' qualifier</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="671"/>
         <location filename="../src/RemoteBLASTTask.cpp" line="676"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="686"/>
-        <location filename="../src/RemoteBLASTTask.cpp" line="690"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="681"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="691"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="695"/>
         <source>Can not convert qualifier value '%1' to double</source>
         <translation>Can not convert qualifier value '%1' to double</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="683"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="688"/>
         <source>Can not find 'E-value' qualifier</source>
         <translation>Can not find 'E-value' qualifier</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="694"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="699"/>
         <source>Can not convert qualifier value '%1' to int</source>
         <translation>Can not convert qualifier value '%1' to int</translation>
     </message>
@@ -807,12 +819,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTPlugin</name>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="62"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="63"/>
         <source>Performs remote database queries: BLAST, CDD, etc...</source>
         <translation>Посылает запрос в удаленную базу данных: BLAST, CDD и т.д...</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="62"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="63"/>
         <source>Remote BLAST</source>
         <translation>Удаленный поиск с помощью BLAST</translation>
     </message>
@@ -820,7 +832,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="110"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="115"/>
         <source>RemoteBLASTTask</source>
         <translation>RemoteBLASTTask</translation>
     </message>
@@ -839,7 +851,7 @@ p, li { white-space: pre-wrap; }
         <translation>Объект был удален</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="90"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="96"/>
         <source>File %1 already exists</source>
         <translation>Файл %1 уже существует</translation>
     </message>
@@ -847,12 +859,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBLASTViewContext</name>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="100"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="101"/>
         <source>Query NCBI BLAST database...</source>
         <translation>Поиск в базе данных NCBI с помощью BLAST...</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTPlugin.cpp" line="137"/>
+        <location filename="../src/RemoteBLASTPlugin.cpp" line="138"/>
         <source>Sequence objects is NULL</source>
         <translation>Sequence objects is NULL</translation>
     </message>
@@ -860,12 +872,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::RemoteBlastHttpRequestTask</name>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="153"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="158"/>
         <source>Http Blast requests task</source>
         <translation>Http Blast requests task</translation>
     </message>
     <message>
-        <location filename="../src/RemoteBLASTTask.cpp" line="164"/>
+        <location filename="../src/RemoteBLASTTask.cpp" line="169"/>
         <source>Incorrect database</source>
         <translation>Неверно задана база данных</translation>
     </message>
@@ -873,28 +885,28 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::SendSelectionDialog</name>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="141"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="145"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="142"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="146"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="215"/>
-        <location filename="../src/SendSelectionDialog.cpp" line="315"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="303"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="416"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="215"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="416"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/SendSelectionDialog.cpp" line="402"/>
+        <location filename="../src/SendSelectionDialog.cpp" line="390"/>
         <source>You chose to search nucleotide sequence in protein database. This sequence will be converted into 6 sequences(3 translations for both strands).Therefore this search may take some time. Continue?</source>
         <translation>Вы выбрали поиск нуклеотидной последовательности в протеиновой базе данных. Эта последовательность будет сконвертирована в 6 последовательностей(3 трансляции для обоих направлений).Этот поиск может занять некоторое время. Продолжить?</translation>
     </message>
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
index b1f3dcb..64a0591 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -78,7 +78,7 @@ FindRepeatsDialog::FindRepeatsDialog(ADVSequenceObjectContext* _sc)
 {
     sc = _sc;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223163");
+    new HelpButton(this, buttonBox, "20875067");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -298,6 +298,7 @@ void FindRepeatsDialog::accept() {
                 return QDialog::reject();
         }
     }
+    sc->getAnnotatedDNAView()->tryAddObject(cam.getAnnotationObject());
 
     FindRepeatsToAnnotationsTask* t = new FindRepeatsToAnnotationsTask(settings, seqPart,
         cam.data->name, cam.groupName, cam.description, cam.annotationObjectRef);
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.h b/src/plugins/repeat_finder/src/FindRepeatsDialog.h
index 0c19332..e9803a2 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.h
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/FindRepeatsDialog.ui b/src/plugins/repeat_finder/src/FindRepeatsDialog.ui
index 8be6917..aef3016 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsDialog.ui
+++ b/src/plugins/repeat_finder/src/FindRepeatsDialog.ui
@@ -343,6 +343,19 @@
          </property>
         </widget>
        </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
diff --git a/src/plugins/repeat_finder/src/FindRepeatsTask.cpp b/src/plugins/repeat_finder/src/FindRepeatsTask.cpp
index b38fc2d..7e136b9 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsTask.cpp
+++ b/src/plugins/repeat_finder/src/FindRepeatsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -491,7 +491,7 @@ QList<SharedAnnotationData> FindRepeatsToAnnotationsTask::importAnnotations() {
         }
         ad->qualifiers.append(U2Qualifier("repeat_len", QString::number(r.l)));
         ad->qualifiers.append(U2Qualifier("repeat_dist", QString::number(dist)));
-        ad->qualifiers.append(U2Qualifier("repeat_homology(%)", QString::number(settings.getIdentity(r.l - r.c, r.l))));
+        ad->qualifiers.append(U2Qualifier("repeat_identity", QString::number(settings.getIdentity(r.l - r.c, r.l))));
         U1AnnotationUtils::addDescriptionQualifier(ad, annDescription);
 
         res.append(ad);
diff --git a/src/plugins/repeat_finder/src/FindRepeatsTask.h b/src/plugins/repeat_finder/src/FindRepeatsTask.h
index c2090ad..50b89a1 100644
--- a/src/plugins/repeat_finder/src/FindRepeatsTask.h
+++ b/src/plugins/repeat_finder/src/FindRepeatsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 #include <U2Core/DNASequence.h>
 #include <U2Core/AnnotationData.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.cpp b/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
index 597e707..1de4d0b 100644
--- a/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
+++ b/src/plugins/repeat_finder/src/FindTandemsDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -64,7 +64,7 @@ FindTandemsDialog::FindTandemsDialog(ADVSequenceObjectContext* _sc)
 {
     sc = _sc;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223164");
+    new HelpButton(this, buttonBox, "20875068");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -214,6 +214,7 @@ void FindTandemsDialog::accept() {
 
     FindTandemsTaskSettings settings;
     const CreateAnnotationModel& cam = ac->getModel();
+    sc->getAnnotatedDNAView()->tryAddObject(ac->getModel().getAnnotationObject());
     settings.minPeriod = minPeriod;
     settings.maxPeriod = maxPeriod;
     settings.algo = (TSConstants::TSAlgo)algoComboBox->currentIndex();
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.h b/src/plugins/repeat_finder/src/FindTandemsDialog.h
index 8a083d6..f7a5157 100644
--- a/src/plugins/repeat_finder/src/FindTandemsDialog.h
+++ b/src/plugins/repeat_finder/src/FindTandemsDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/FindTandemsDialog.ui b/src/plugins/repeat_finder/src/FindTandemsDialog.ui
index a9db7fe..f2c967a 100644
--- a/src/plugins/repeat_finder/src/FindTandemsDialog.ui
+++ b/src/plugins/repeat_finder/src/FindTandemsDialog.ui
@@ -188,6 +188,19 @@
          </property>
         </widget>
        </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
       </layout>
      </widget>
      <widget class="QWidget" name="tab_2">
diff --git a/src/plugins/repeat_finder/src/RFBase.cpp b/src/plugins/repeat_finder/src/RFBase.cpp
index 8ce37a2..7dcb3ad 100644
--- a/src/plugins/repeat_finder/src/RFBase.cpp
+++ b/src/plugins/repeat_finder/src/RFBase.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RFBase.h b/src/plugins/repeat_finder/src/RFBase.h
index 882597e..4b09cb9 100644
--- a/src/plugins/repeat_finder/src/RFBase.h
+++ b/src/plugins/repeat_finder/src/RFBase.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/Task.h>
 #include <U2Algorithm/RepeatFinderSettings.h>
 
-#include <QtCore/QVector>
+#include <QVector>
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/RFConstants.h b/src/plugins/repeat_finder/src/RFConstants.h
index 253ab2f..c11ac73 100644
--- a/src/plugins/repeat_finder/src/RFConstants.h
+++ b/src/plugins/repeat_finder/src/RFConstants.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RFDiagonal.cpp b/src/plugins/repeat_finder/src/RFDiagonal.cpp
index fcf236b..9191845 100644
--- a/src/plugins/repeat_finder/src/RFDiagonal.cpp
+++ b/src/plugins/repeat_finder/src/RFDiagonal.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 
 #include <U2Core/DNATranslation.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/RFDiagonal.h b/src/plugins/repeat_finder/src/RFDiagonal.h
index f05c538..730a939 100644
--- a/src/plugins/repeat_finder/src/RFDiagonal.h
+++ b/src/plugins/repeat_finder/src/RFDiagonal.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "RFBase.h"
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/RFSArray.cpp b/src/plugins/repeat_finder/src/RFSArray.cpp
index 51288a4..b765bba 100644
--- a/src/plugins/repeat_finder/src/RFSArray.cpp
+++ b/src/plugins/repeat_finder/src/RFSArray.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/Timer.h>
 #include <U2Core/Log.h>
 
-#include <QtCore/QMutexLocker>
+#include <QMutexLocker>
 #include <U2Core/DNAAlphabet.h>
 
 namespace U2 {
diff --git a/src/plugins/repeat_finder/src/RFSArray.h b/src/plugins/repeat_finder/src/RFSArray.h
index 6cef66f..f2fa4f3 100644
--- a/src/plugins/repeat_finder/src/RFSArray.h
+++ b/src/plugins/repeat_finder/src/RFSArray.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_RF_SARRAY_ALG_H_
 #define _U2_RF_SARRAY_ALG_H_
 
-#include <QtCore/QList>
-#include <QtCore/QVector>
-#include <QtCore/QMutex>
+#include <QList>
+#include <QVector>
+#include <QMutex>
 
 #include <U2Algorithm/SArrayIndex.h>
 #include <U2Algorithm/SArrayBasedFindTask.h>
diff --git a/src/plugins/repeat_finder/src/RFSArrayWK.cpp b/src/plugins/repeat_finder/src/RFSArrayWK.cpp
index c19a030..058cfbb 100644
--- a/src/plugins/repeat_finder/src/RFSArrayWK.cpp
+++ b/src/plugins/repeat_finder/src/RFSArrayWK.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RFSArrayWK.h b/src/plugins/repeat_finder/src/RFSArrayWK.h
index 842e2ee..83683bd 100644
--- a/src/plugins/repeat_finder/src/RFSArrayWK.h
+++ b/src/plugins/repeat_finder/src/RFSArrayWK.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Algorithm/SArrayBasedFindTask.h>
 #include "RFBase.h"
 
-#include <QtCore/QVector>
+#include <QVector>
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/RFTaskFactory.cpp b/src/plugins/repeat_finder/src/RFTaskFactory.cpp
index cf35883..c5d645a 100644
--- a/src/plugins/repeat_finder/src/RFTaskFactory.cpp
+++ b/src/plugins/repeat_finder/src/RFTaskFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RFTaskFactory.h b/src/plugins/repeat_finder/src/RFTaskFactory.h
index afd56e9..ddec6e7 100644
--- a/src/plugins/repeat_finder/src/RFTaskFactory.h
+++ b/src/plugins/repeat_finder/src/RFTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RF_BitMask.h b/src/plugins/repeat_finder/src/RF_BitMask.h
index d4e0226..8dbff1e 100644
--- a/src/plugins/repeat_finder/src/RF_BitMask.h
+++ b/src/plugins/repeat_finder/src/RF_BitMask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,9 +20,8 @@
  */
 
 #include <cstdlib>
-#include <qglobal.h>
 #include <cstring>
-#include <QtCore/QString>
+#include <QString>
 #include <U2Core/Log.h>
 
 // Attention! Works correctly only on little-endian systems!
diff --git a/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.cpp b/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.cpp
index d1920ec..625681b 100644
--- a/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.cpp
+++ b/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.h b/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.h
index b2100b4..37f359f 100644
--- a/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.h
+++ b/src/plugins/repeat_finder/src/RF_SArray_TandemFinder.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,8 +32,8 @@
 #include <U2Core/DNASequence.h>
 #include <U2Core/AnnotationData.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QMap>
+#include <QMutex>
+#include <QMap>
 
 #include "RF_SuffixArray.h"
 #include "RFBase.h"
diff --git a/src/plugins/repeat_finder/src/RF_SuffixArray.cpp b/src/plugins/repeat_finder/src/RF_SuffixArray.cpp
index 47f1a2e..55d7043 100644
--- a/src/plugins/repeat_finder/src/RF_SuffixArray.cpp
+++ b/src/plugins/repeat_finder/src/RF_SuffixArray.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,8 +21,7 @@
 
 #include "RF_SuffixArray.h"
 #include "RFConstants.h"
-#include <QtCore/QtAlgorithms>
-#include <QtCore/QThread>
+#include <QThread>
 #include <U2Core/Log.h>
 
 namespace U2 {
diff --git a/src/plugins/repeat_finder/src/RF_SuffixArray.h b/src/plugins/repeat_finder/src/RF_SuffixArray.h
index dfa9281..1fd2413 100644
--- a/src/plugins/repeat_finder/src/RF_SuffixArray.h
+++ b/src/plugins/repeat_finder/src/RF_SuffixArray.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,6 @@
 #define _RF_SUFFIX_ARRAY_H_
 
 #include "RF_BitMask.h"
-#include <QtCore/QtGlobal>
 #include <ctime>
 
 // Attention! Currently constructs suffix array sorted by prefix up to 32 symbols in length
diff --git a/src/plugins/repeat_finder/src/RepeatFinderPlugin.cpp b/src/plugins/repeat_finder/src/RepeatFinderPlugin.cpp
index 9d4cae1..aa3d39a 100644
--- a/src/plugins/repeat_finder/src/RepeatFinderPlugin.cpp
+++ b/src/plugins/repeat_finder/src/RepeatFinderPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RepeatFinderPlugin.h b/src/plugins/repeat_finder/src/RepeatFinderPlugin.h
index a1e919c..d52a60e 100644
--- a/src/plugins/repeat_finder/src/RepeatFinderPlugin.h
+++ b/src/plugins/repeat_finder/src/RepeatFinderPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RepeatFinderTests.cpp b/src/plugins/repeat_finder/src/RepeatFinderTests.cpp
index cb11a33..a2ee84a 100644
--- a/src/plugins/repeat_finder/src/RepeatFinderTests.cpp
+++ b/src/plugins/repeat_finder/src/RepeatFinderTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,22 @@
  * MA 02110-1301, USA.
  */
 
-#include "RepeatFinderTests.h"
+#include <QFile>
+
+#include <U2Algorithm/SArrayBasedFindTask.h>
+#include <U2Algorithm/SArrayIndex.h>
 
-#include "FindRepeatsTask.h"
-#include "RF_SArray_TandemFinder.h"
-#include <U2Core/DNAAlphabet.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Algorithm/SArrayIndex.h>
-#include <U2Algorithm/SArrayBasedFindTask.h>
+#include "RepeatFinderTests.h"
+#include "FindRepeatsTask.h"
+#include "RF_SArray_TandemFinder.h"
 
 namespace U2 {
 
diff --git a/src/plugins/repeat_finder/src/RepeatFinderTests.h b/src/plugins/repeat_finder/src/RepeatFinderTests.h
index 422e8d7..10db03a 100644
--- a/src/plugins/repeat_finder/src/RepeatFinderTests.h
+++ b/src/plugins/repeat_finder/src/RepeatFinderTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@
 #include <U2Algorithm/RepeatFinderSettings.h>
 
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 
 namespace U2 {
diff --git a/src/plugins/repeat_finder/src/RepeatQuery.cpp b/src/plugins/repeat_finder/src/RepeatQuery.cpp
index 5ad55d4..55871f2 100644
--- a/src/plugins/repeat_finder/src/RepeatQuery.cpp
+++ b/src/plugins/repeat_finder/src/RepeatQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RepeatQuery.h b/src/plugins/repeat_finder/src/RepeatQuery.h
index 4cc7618..7e09fbd 100644
--- a/src/plugins/repeat_finder/src/RepeatQuery.h
+++ b/src/plugins/repeat_finder/src/RepeatQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/RepeatWorker.cpp b/src/plugins/repeat_finder/src/RepeatWorker.cpp
index 12d4f97..0f55dff 100644
--- a/src/plugins/repeat_finder/src/RepeatWorker.cpp
+++ b/src/plugins/repeat_finder/src/RepeatWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,33 +19,31 @@
  * MA 02110-1301, USA.
  */
 
-#include "RepeatWorker.h"
-#include "FindRepeatsDialog.h"
-
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
-
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/GObjectReference.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
-#include <U2Core/GObjectReference.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-//#include <QtGui/QApplication>
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
 
-/* TRANSLATOR U2::LocalWorkflow::RepeatWorker */
+#include "FindRepeatsDialog.h"
+#include "RepeatWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/repeat_finder/src/RepeatWorker.h b/src/plugins/repeat_finder/src/RepeatWorker.h
index a639fc6..a148ef0 100644
--- a/src/plugins/repeat_finder/src/RepeatWorker.h
+++ b/src/plugins/repeat_finder/src/RepeatWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/TandemQuery.cpp b/src/plugins/repeat_finder/src/TandemQuery.cpp
index 9fd32d4..18eed2a 100644
--- a/src/plugins/repeat_finder/src/TandemQuery.cpp
+++ b/src/plugins/repeat_finder/src/TandemQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/src/TandemQuery.h b/src/plugins/repeat_finder/src/TandemQuery.h
index d4b501e..2a1f928 100644
--- a/src/plugins/repeat_finder/src/TandemQuery.h
+++ b/src/plugins/repeat_finder/src/TandemQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/repeat_finder/transl/english.ts b/src/plugins/repeat_finder/transl/english.ts
index ef931db..35c2026 100644
--- a/src/plugins/repeat_finder/transl/english.ts
+++ b/src/plugins/repeat_finder/transl/english.ts
@@ -51,44 +51,44 @@
         <translation>Maximum distance between repeats</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="350"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="363"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="356"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="369"/>
         <source>Advanced parameters</source>
         <translation>Advanced parameters</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="362"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="375"/>
         <source>Custom algorithm</source>
         <translation>Custom algorithm</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="389"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="402"/>
         <source>Search only for repeats that lie inside of an annotated region</source>
         <translation>Search only for repeats that lie inside of an annotated region</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="431"/>
-        <location filename="../src/FindRepeatsDialog.ui" line="480"/>
-        <location filename="../src/FindRepeatsDialog.ui" line="529"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="444"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="493"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="542"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="438"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="451"/>
         <source>Search only for repeats that have an annotated region inside</source>
         <translation>Search only for repeats that have an annotated region inside</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="487"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="500"/>
         <source>Filter repeats that have an annotated region inside</source>
         <translation>Filter repeats that have an annotated region inside</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="536"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="549"/>
         <source>Search for inverted repeats</source>
         <translation>Search for inverted repeats</translation>
     </message>
@@ -128,12 +128,12 @@
         <translation>Minimum indentity per window</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="596"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="609"/>
         <source>Nested repeats filter algorithm</source>
         <translation>Nested repeats filter algorithm</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="556"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="569"/>
         <source>Exclude tandems areas</source>
         <translation>Exclude tandems areas</translation>
     </message>
@@ -162,37 +162,37 @@
         <translation>Max period</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="195"/>
+        <location filename="../src/FindTandemsDialog.ui" line="208"/>
         <source>Advanced</source>
         <translation>Advanced</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="201"/>
+        <location filename="../src/FindTandemsDialog.ui" line="214"/>
         <source>Advanced parameters</source>
         <translation>Advanced parameters</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="283"/>
+        <location filename="../src/FindTandemsDialog.ui" line="296"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="240"/>
+        <location filename="../src/FindTandemsDialog.ui" line="253"/>
         <source>Minimum tandem size</source>
         <translation>Minimum tandem size</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="303"/>
+        <location filename="../src/FindTandemsDialog.ui" line="316"/>
         <source>Minimum repeat count</source>
         <translation>Minimum repeat count</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="220"/>
+        <location filename="../src/FindTandemsDialog.ui" line="233"/>
         <source>x</source>
         <translation>x</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="233"/>
+        <location filename="../src/FindTandemsDialog.ui" line="246"/>
         <source>Show overlapped tandems</source>
         <translation>Show overlapped tandems</translation>
     </message>
@@ -299,17 +299,17 @@
         <translation>Search with given identity %1% and length more then 80m bps can take very long time. Approximate repeat searching time for 80m bp with 95% identity is 40 minutes on Intel Core 2 Quad Q9500. Do you want to continue?</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="304"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="305"/>
         <source>A problem occurred during finding repeats. The sequence is no more available.</source>
-        <translation type="unfinished"></translation>
+        <translation>A problem occurred during finding repeats. The sequence is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="383"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="384"/>
         <source>Estimated repeats count: %1</source>
         <translation>Estimated repeats count: %1</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="384"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="385"/>
         <source>Estimated repeats count hint is based on the active settings and random sequence model</source>
         <translation>Estimated repeats count hint is based on the active settings and random sequence model</translation>
     </message>
@@ -462,27 +462,27 @@
 <context>
     <name>U2::LocalWorkflow::RepeatPrompter</name>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="189"/>
+        <location filename="../src/RepeatWorker.cpp" line="187"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="190"/>
+        <location filename="../src/RepeatWorker.cpp" line="188"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="194"/>
+        <location filename="../src/RepeatWorker.cpp" line="192"/>
         <source>inverted</source>
         <translation>inverted</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="194"/>
+        <location filename="../src/RepeatWorker.cpp" line="192"/>
         <source>direct</source>
         <translation>direct</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="196"/>
+        <location filename="../src/RepeatWorker.cpp" line="194"/>
         <source>For each sequence%1, find <u>%2</u> repeats.<br>Detect <u>%3% identical</u> repeats <u>not shorter than %4 bps</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>For each sequence%1, find <u>%2</u> repeats.<br>Detect <u>%3% identical</u> repeats <u>not shorter than %4 bps</u>.<br>Output the list of found regions annotated as <u>%5</u>.</translation>
     </message>
@@ -490,180 +490,180 @@
 <context>
     <name>U2::LocalWorkflow::RepeatWorker</name>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="75"/>
+        <location filename="../src/RepeatWorker.cpp" line="73"/>
         <source>Input sequences</source>
         <translation>Input sequences</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="76"/>
+        <location filename="../src/RepeatWorker.cpp" line="74"/>
         <source>A nucleotide sequence to search repeats in.</source>
         <translation>A nucleotide sequence to search repeats in.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="77"/>
+        <location filename="../src/RepeatWorker.cpp" line="75"/>
         <source>Repeat annotations</source>
         <translation>Repeat annotations</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="78"/>
+        <location filename="../src/RepeatWorker.cpp" line="76"/>
         <source>A set of annotations marking repeats found in the sequence.</source>
         <translation>A set of annotations marking repeats found in the sequence.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="87"/>
+        <location filename="../src/RepeatWorker.cpp" line="85"/>
         <source>Annotate as</source>
         <translation>Annotate as</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="87"/>
+        <location filename="../src/RepeatWorker.cpp" line="85"/>
         <source>Name of the result annotations marking found repeats.</source>
         <translation>Name of the result annotations marking found repeats.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="88"/>
+        <location filename="../src/RepeatWorker.cpp" line="86"/>
         <source>Identity</source>
         <translation>Identity</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="88"/>
+        <location filename="../src/RepeatWorker.cpp" line="86"/>
         <source>Repeats identity.</source>
         <translation>Repeats identity.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="89"/>
+        <location filename="../src/RepeatWorker.cpp" line="87"/>
         <source>Min length</source>
         <translation>Min length</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="89"/>
+        <location filename="../src/RepeatWorker.cpp" line="87"/>
         <source>Minimum length of repeats.</source>
         <translation>Minimum length of repeats.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="90"/>
+        <location filename="../src/RepeatWorker.cpp" line="88"/>
         <source>Min distance</source>
         <translation>Min distance</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="90"/>
+        <location filename="../src/RepeatWorker.cpp" line="88"/>
         <source>Minimum distance between repeats.</source>
         <translation>Minimum distance between repeats.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="91"/>
+        <location filename="../src/RepeatWorker.cpp" line="89"/>
         <source>Max distance</source>
         <translation>Max distance</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="91"/>
+        <location filename="../src/RepeatWorker.cpp" line="89"/>
         <source>Maximum distance between repeats.</source>
         <translation>Maximum distance between repeats.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="92"/>
+        <location filename="../src/RepeatWorker.cpp" line="90"/>
         <source>Inverted</source>
         <translation>Inverted</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="92"/>
+        <location filename="../src/RepeatWorker.cpp" line="90"/>
         <source>Search for inverted repeats.</source>
         <translation>Search for inverted repeats.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="93"/>
+        <location filename="../src/RepeatWorker.cpp" line="91"/>
         <source>Filter algorithm</source>
         <translation>Filter algorithm</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="93"/>
+        <location filename="../src/RepeatWorker.cpp" line="91"/>
         <source>Filter repeats algorithm.</source>
         <translation>Filter repeats algorithm.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="94"/>
+        <location filename="../src/RepeatWorker.cpp" line="92"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="94"/>
+        <location filename="../src/RepeatWorker.cpp" line="92"/>
         <source>Control over variations of algorithm.</source>
         <translation>Control over variations of algorithm.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="93"/>
         <source>Parallel threads</source>
         <translation>Parallel threads</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="93"/>
         <source>Number of parallel threads used for the task.</source>
         <translation>Number of parallel threads used for the task.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="96"/>
+        <location filename="../src/RepeatWorker.cpp" line="94"/>
         <source>Exclude tandems</source>
         <translation>Exclude tandems</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="96"/>
+        <location filename="../src/RepeatWorker.cpp" line="94"/>
         <source>Exclude tandems areas before find repeat task is run.</source>
         <translation>Exclude tandems areas before find repeat task is run.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="97"/>
+        <location filename="../src/RepeatWorker.cpp" line="95"/>
         <source>Apply 'Max distance' attribute</source>
         <translation>Apply 'Max distance' attribute</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="97"/>
-        <location filename="../src/RepeatWorker.cpp" line="98"/>
+        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="96"/>
         <source>Apply 'Max distance' attribute.</source>
         <translation>Apply 'Max distance' attribute.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="98"/>
+        <location filename="../src/RepeatWorker.cpp" line="96"/>
         <source>Apply 'Min distance' attribute</source>
         <translation>Apply 'Min distance' attribute</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="136"/>
+        <location filename="../src/RepeatWorker.cpp" line="134"/>
         <source>Find Repeats</source>
         <translation>Find Repeats</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="137"/>
+        <location filename="../src/RepeatWorker.cpp" line="135"/>
         <source>Finds repeats in each supplied sequence, stores found regions as annotations.</source>
         <translation>Finds repeats in each supplied sequence, stores found regions as annotations.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="146"/>
+        <location filename="../src/RepeatWorker.cpp" line="144"/>
         <source>Any</source>
         <translation>Any</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="247"/>
+        <location filename="../src/RepeatWorker.cpp" line="245"/>
         <source>result name is empty, default name used</source>
         <translation>result name is empty, default name used</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="250"/>
-        <location filename="../src/RepeatWorker.cpp" line="251"/>
+        <location filename="../src/RepeatWorker.cpp" line="248"/>
+        <location filename="../src/RepeatWorker.cpp" line="249"/>
         <source>Incorrect value: identity value must be between 0 and 100</source>
         <translation>Incorrect value: identity value must be between 0 and 100</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="264"/>
-        <location filename="../src/RepeatWorker.cpp" line="265"/>
+        <location filename="../src/RepeatWorker.cpp" line="262"/>
+        <location filename="../src/RepeatWorker.cpp" line="263"/>
         <source>Incorrect value: minimal distance must be greater then zero</source>
         <translation>Incorrect value: minimal distance must be greater then zero</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="269"/>
+        <location filename="../src/RepeatWorker.cpp" line="267"/>
         <source>Sequence alphabet is not nucleic!</source>
         <translation>Sequence alphabet is not nucleic!</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="292"/>
+        <location filename="../src/RepeatWorker.cpp" line="290"/>
         <source>Found %1 repeats</source>
         <translation>Found %1 repeats</translation>
     </message>
@@ -970,7 +970,7 @@
     <message>
         <location filename="../src/FindRepeatsTask.cpp" line="42"/>
         <source>Reverse complement sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Reverse complement sequence</translation>
     </message>
     <message>
         <location filename="../src/FindRepeatsTask.cpp" line="49"/>
diff --git a/src/plugins/repeat_finder/transl/russian.ts b/src/plugins/repeat_finder/transl/russian.ts
index e541eae..ea38b7d 100644
--- a/src/plugins/repeat_finder/transl/russian.ts
+++ b/src/plugins/repeat_finder/transl/russian.ts
@@ -71,54 +71,54 @@
         <translation>Макс дистанция между повторами</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="350"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="363"/>
         <source>Advanced</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="356"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="369"/>
         <source>Advanced parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="362"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="375"/>
         <source>Custom algorithm</source>
         <translation>Выбранный алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="389"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="402"/>
         <source>Search only for repeats that lie inside of an annotated region</source>
         <translation>Искать только те повторы, что лежат внутри аннотированного региона</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="438"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="451"/>
         <source>Search only for repeats that have an annotated region inside</source>
         <translation>Искать только те повторы, что содержат аннотированный регион</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="487"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="500"/>
         <source>Filter repeats that have an annotated region inside</source>
         <translation>Исключить из поиска повторы, содержащие аннотированный регион</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="596"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="609"/>
         <source>Nested repeats filter algorithm</source>
         <translation>Алгоритм исключения вложенных повторов</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="556"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="569"/>
         <source>Exclude tandems areas</source>
         <translation>Исключить тандемные области</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="431"/>
-        <location filename="../src/FindRepeatsDialog.ui" line="480"/>
-        <location filename="../src/FindRepeatsDialog.ui" line="529"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="444"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="493"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="542"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.ui" line="536"/>
+        <location filename="../src/FindRepeatsDialog.ui" line="549"/>
         <source>Search for inverted repeats</source>
         <translation>Искать инвертированные повторы</translation>
     </message>
@@ -162,22 +162,22 @@
         <translation>Макс период</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="195"/>
+        <location filename="../src/FindTandemsDialog.ui" line="208"/>
         <source>Advanced</source>
         <translation>Дополнительные настройки</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="201"/>
+        <location filename="../src/FindTandemsDialog.ui" line="214"/>
         <source>Advanced parameters</source>
         <translation>Дополнительные параметры</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="283"/>
+        <location filename="../src/FindTandemsDialog.ui" line="296"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="240"/>
+        <location filename="../src/FindTandemsDialog.ui" line="253"/>
         <source>Minimum tandem size</source>
         <translation>Минимальный размер тандема</translation>
     </message>
@@ -187,17 +187,17 @@
         <translation>Поиск тандемов</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="303"/>
+        <location filename="../src/FindTandemsDialog.ui" line="316"/>
         <source>Minimum repeat count</source>
         <translation>Минимальное число повторений</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="220"/>
+        <location filename="../src/FindTandemsDialog.ui" line="233"/>
         <source>x</source>
         <translation>x</translation>
     </message>
     <message>
-        <location filename="../src/FindTandemsDialog.ui" line="233"/>
+        <location filename="../src/FindTandemsDialog.ui" line="246"/>
         <source>Show overlapped tandems</source>
         <translation>Показать перекрывающиеся тандемы</translation>
     </message>
@@ -230,12 +230,12 @@
     <message>
         <location filename="../src/FindRepeatsDialog.cpp" line="83"/>
         <source>Start</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
         <location filename="../src/FindRepeatsDialog.cpp" line="84"/>
         <source>Cancel</source>
-        <translation>Отменить</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <location filename="../src/FindRepeatsDialog.cpp" line="103"/>
@@ -299,17 +299,17 @@
         <translation>Поиск с указанной схожестью %1% и длиной более 80m bps может занять длительное время. Примерное время поиска для 80m bp с 95% схожестью занимает 40 минут на Intel Core 2 Quad Q9500. Хотите продолжить?</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="304"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="305"/>
         <source>A problem occurred during finding repeats. The sequence is no more available.</source>
-        <translation type="unfinished"></translation>
+        <translation>A problem occurred during finding repeats. The sequence is no more available.</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="383"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="384"/>
         <source>Estimated repeats count: %1</source>
         <translation>Оценка возможного кол-ва результатов: %1</translation>
     </message>
     <message>
-        <location filename="../src/FindRepeatsDialog.cpp" line="384"/>
+        <location filename="../src/FindRepeatsDialog.cpp" line="385"/>
         <source>Estimated repeats count hint is based on the active settings and random sequence model</source>
         <translation>Оценка основана на текущих параметрах поиска и модели случайной последовательности</translation>
     </message>
@@ -462,27 +462,27 @@
 <context>
     <name>U2::LocalWorkflow::RepeatPrompter</name>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="189"/>
+        <location filename="../src/RepeatWorker.cpp" line="187"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="190"/>
+        <location filename="../src/RepeatWorker.cpp" line="188"/>
         <source> from <u>%1</u></source>
         <translation> из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="194"/>
+        <location filename="../src/RepeatWorker.cpp" line="192"/>
         <source>inverted</source>
         <translation>инвертированные</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="194"/>
+        <location filename="../src/RepeatWorker.cpp" line="192"/>
         <source>direct</source>
         <translation>прямые</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="196"/>
+        <location filename="../src/RepeatWorker.cpp" line="194"/>
         <source>For each sequence%1, find <u>%2</u> repeats.<br>Detect <u>%3% identical</u> repeats <u>not shorter than %4 bps</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>Для каждой последовательности<u>%1</u>, искать <u>%2</u> повторы.<br>Учитывать <u>%3% идентичные</u> повторы <u>не короче %4 нк</u>.<br>Выдать список найденных регионов аннотированных как <u>%5</u>.</translation>
     </message>
@@ -490,180 +490,180 @@
 <context>
     <name>U2::LocalWorkflow::RepeatWorker</name>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="75"/>
+        <location filename="../src/RepeatWorker.cpp" line="73"/>
         <source>Input sequences</source>
         <translation>Входные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="76"/>
+        <location filename="../src/RepeatWorker.cpp" line="74"/>
         <source>A nucleotide sequence to search repeats in.</source>
         <translation>Входные нуклеотидные последовательности для поиска повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="77"/>
+        <location filename="../src/RepeatWorker.cpp" line="75"/>
         <source>Repeat annotations</source>
         <translation>Аннотированные повторы</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="78"/>
+        <location filename="../src/RepeatWorker.cpp" line="76"/>
         <source>A set of annotations marking repeats found in the sequence.</source>
         <translation>Список аннотаций маркирующих найденные повторы.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="87"/>
+        <location filename="../src/RepeatWorker.cpp" line="85"/>
         <source>Annotate as</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="87"/>
+        <location filename="../src/RepeatWorker.cpp" line="85"/>
         <source>Name of the result annotations marking found repeats.</source>
         <translation>Имя аннотации для разметки найденных повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="88"/>
+        <location filename="../src/RepeatWorker.cpp" line="86"/>
         <source>Identity</source>
         <translation>Идентичность</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="88"/>
+        <location filename="../src/RepeatWorker.cpp" line="86"/>
         <source>Repeats identity.</source>
         <translation>Идентичность повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="89"/>
+        <location filename="../src/RepeatWorker.cpp" line="87"/>
         <source>Min length</source>
         <translation>Мин длина</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="89"/>
+        <location filename="../src/RepeatWorker.cpp" line="87"/>
         <source>Minimum length of repeats.</source>
         <translation>Мин длина повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="90"/>
+        <location filename="../src/RepeatWorker.cpp" line="88"/>
         <source>Min distance</source>
         <translation>Мин дистанция</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="90"/>
+        <location filename="../src/RepeatWorker.cpp" line="88"/>
         <source>Minimum distance between repeats.</source>
         <translation>Мин дистанция между повторами.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="91"/>
+        <location filename="../src/RepeatWorker.cpp" line="89"/>
         <source>Max distance</source>
         <translation>Макс дистанция</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="91"/>
+        <location filename="../src/RepeatWorker.cpp" line="89"/>
         <source>Maximum distance between repeats.</source>
         <translation>Макс дистанция между повторами.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="92"/>
+        <location filename="../src/RepeatWorker.cpp" line="90"/>
         <source>Inverted</source>
         <translation>Инвертированные</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="92"/>
+        <location filename="../src/RepeatWorker.cpp" line="90"/>
         <source>Search for inverted repeats.</source>
         <translation>Искать инвертированные повторы.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="93"/>
+        <location filename="../src/RepeatWorker.cpp" line="91"/>
         <source>Filter algorithm</source>
         <translation>Алгоритм фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="93"/>
+        <location filename="../src/RepeatWorker.cpp" line="91"/>
         <source>Filter repeats algorithm.</source>
         <translation>Алгоритм фильтрации повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="94"/>
+        <location filename="../src/RepeatWorker.cpp" line="92"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="94"/>
+        <location filename="../src/RepeatWorker.cpp" line="92"/>
         <source>Control over variations of algorithm.</source>
         <translation>Выбор алгоритма.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="93"/>
         <source>Parallel threads</source>
         <translation>Параллельные потоки</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="93"/>
         <source>Number of parallel threads used for the task.</source>
         <translation>Кол-во параллельных потоков для задачи.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="96"/>
+        <location filename="../src/RepeatWorker.cpp" line="94"/>
         <source>Exclude tandems</source>
         <translation>Исключить тандемы</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="96"/>
+        <location filename="../src/RepeatWorker.cpp" line="94"/>
         <source>Exclude tandems areas before find repeat task is run.</source>
         <translation>Исключить тандемные области до поиска повторов.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="97"/>
+        <location filename="../src/RepeatWorker.cpp" line="95"/>
         <source>Apply 'Max distance' attribute</source>
         <translation>Применить опцию 'Макс дистанция'</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="97"/>
-        <location filename="../src/RepeatWorker.cpp" line="98"/>
+        <location filename="../src/RepeatWorker.cpp" line="95"/>
+        <location filename="../src/RepeatWorker.cpp" line="96"/>
         <source>Apply 'Max distance' attribute.</source>
         <translation>Применить опцию 'Макс дистанция'.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="98"/>
+        <location filename="../src/RepeatWorker.cpp" line="96"/>
         <source>Apply 'Min distance' attribute</source>
         <translation>Применить опцию 'Макс дистанция'</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="136"/>
+        <location filename="../src/RepeatWorker.cpp" line="134"/>
         <source>Find Repeats</source>
         <translation>Поиск повторов</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="137"/>
+        <location filename="../src/RepeatWorker.cpp" line="135"/>
         <source>Finds repeats in each supplied sequence, stores found regions as annotations.</source>
         <translation>Ищет повторы в нуклеотидных последовательностях, выдаёт найденные регионы как аннотации.</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="146"/>
+        <location filename="../src/RepeatWorker.cpp" line="144"/>
         <source>Any</source>
         <translation>Не ограничивать</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="247"/>
+        <location filename="../src/RepeatWorker.cpp" line="245"/>
         <source>result name is empty, default name used</source>
         <translation>имя результата пусто, использовано имя по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="250"/>
-        <location filename="../src/RepeatWorker.cpp" line="251"/>
+        <location filename="../src/RepeatWorker.cpp" line="248"/>
+        <location filename="../src/RepeatWorker.cpp" line="249"/>
         <source>Incorrect value: identity value must be between 0 and 100</source>
         <translation>Некорректное значение: значение схожести должно быть от 0 до 100</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="264"/>
-        <location filename="../src/RepeatWorker.cpp" line="265"/>
+        <location filename="../src/RepeatWorker.cpp" line="262"/>
+        <location filename="../src/RepeatWorker.cpp" line="263"/>
         <source>Incorrect value: minimal distance must be greater then zero</source>
         <translation>Некорректное значение: минимальноге значение должно быть больше нуля</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="269"/>
+        <location filename="../src/RepeatWorker.cpp" line="267"/>
         <source>Sequence alphabet is not nucleic!</source>
         <translation>Алфавит последовательности не является нуклеотидным!</translation>
     </message>
     <message>
-        <location filename="../src/RepeatWorker.cpp" line="292"/>
+        <location filename="../src/RepeatWorker.cpp" line="290"/>
         <source>Found %1 repeats</source>
         <translation>Найдено повторов: %1</translation>
     </message>
@@ -970,7 +970,7 @@
     <message>
         <location filename="../src/FindRepeatsTask.cpp" line="42"/>
         <source>Reverse complement sequence</source>
-        <translation type="unfinished"></translation>
+        <translation>Reverse complement sequence</translation>
     </message>
     <message>
         <location filename="../src/FindRepeatsTask.cpp" line="49"/>
diff --git a/src/plugins/smith_waterman/src/PairAlignSequences.cpp b/src/plugins/smith_waterman/src/PairAlignSequences.cpp
index 1571f25..5809e35 100644
--- a/src/plugins/smith_waterman/src/PairAlignSequences.cpp
+++ b/src/plugins/smith_waterman/src/PairAlignSequences.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/PairAlignSequences.h b/src/plugins/smith_waterman/src/PairAlignSequences.h
index 08a3754..53ce022 100644
--- a/src/plugins/smith_waterman/src/PairAlignSequences.h
+++ b/src/plugins/smith_waterman/src/PairAlignSequences.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.cpp b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.cpp
index 5283b82..eda4179 100644
--- a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.cpp
+++ b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,20 +30,12 @@
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
 #include <U2Algorithm/PairwiseAlignmentTask.h>
 
-#include <QtCore/QStringList>
-#include <QtCore/QVariant>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QLayout>
-#include <QtGui/QGroupBox>
-#include <QtGui/QFormLayout>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QGroupBox>
-#include <QtWidgets/QFormLayout>
-#endif
+#include <QStringList>
+#include <QVariant>
+#include <QLabel>
+#include <QLayout>
+#include <QGroupBox>
+#include <QFormLayout>
 
 namespace U2 {
 
diff --git a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
index 546d0b0..c030483 100644
--- a/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
+++ b/src/plugins/smith_waterman/src/PairwiseAlignmentSmithWatermanGUIExtension.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,17 +27,10 @@
 
 #include <U2View/AlignmentAlgorithmGUIExtension.h>
 
-#include <QtCore/QVariantMap>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QComboBox>
-#include <QtGui/QDoubleSpinBox>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QDoubleSpinBox>
-#endif
+#include <QVariantMap>
+#include <QWidget>
+#include <QComboBox>
+#include <QDoubleSpinBox>
 
 namespace U2 {
 
diff --git a/src/plugins/smith_waterman/src/SWAlgorithmPlugin.cpp b/src/plugins/smith_waterman/src/SWAlgorithmPlugin.cpp
index bcf6c7f..333d5e4 100644
--- a/src/plugins/smith_waterman/src/SWAlgorithmPlugin.cpp
+++ b/src/plugins/smith_waterman/src/SWAlgorithmPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,8 +34,8 @@
 
 #include <U2View/MSAEditor.h>
 #include <U2Gui/OptionsPanel.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequence.h>
 #include <U2Algorithm/SubstMatrixRegistry.h>
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
diff --git a/src/plugins/smith_waterman/src/SWAlgorithmPlugin.h b/src/plugins/smith_waterman/src/SWAlgorithmPlugin.h
index 7459b93..6c6d6d9 100644
--- a/src/plugins/smith_waterman/src/SWAlgorithmPlugin.h
+++ b/src/plugins/smith_waterman/src/SWAlgorithmPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp b/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
index 4c74ac5..9d94200 100644
--- a/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
+++ b/src/plugins/smith_waterman/src/SWAlgorithmTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,9 +45,9 @@
 #include <U2Algorithm/SmithWatermanResult.h>
 #include <U2Algorithm/SubstMatrixRegistry.h>
 
-#include <QtCore/QMutexLocker>
-#include <QtCore/QMap>
-#include <QtCore/QVariant>
+#include <QMutexLocker>
+#include <QMap>
+#include <QVariant>
 
 using namespace std;
 
diff --git a/src/plugins/smith_waterman/src/SWAlgorithmTask.h b/src/plugins/smith_waterman/src/SWAlgorithmTask.h
index ca539df..39d55ac 100644
--- a/src/plugins/smith_waterman/src/SWAlgorithmTask.h
+++ b/src/plugins/smith_waterman/src/SWAlgorithmTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,8 +32,8 @@
 #include "SmithWatermanAlgorithm.h"
 #include "PairAlignSequences.h"
 
-#include <QtCore/QVector>
-#include <QtCore/QMutex>
+#include <QVector>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins/smith_waterman/src/SWQuery.cpp b/src/plugins/smith_waterman/src/SWQuery.cpp
index d407d26..7ea49b9 100644
--- a/src/plugins/smith_waterman/src/SWQuery.cpp
+++ b/src/plugins/smith_waterman/src/SWQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,8 +36,6 @@
 #include <U2Lang/ConfigurationEditor.h>
 #include <U2Lang/BaseTypes.h>
 
-#include <QtCore/qmath.h>
-
 namespace U2 {
 
 static const QString PATTERN_ATTR("pattern");
diff --git a/src/plugins/smith_waterman/src/SWQuery.h b/src/plugins/smith_waterman/src/SWQuery.h
index a59c879..03c4511 100644
--- a/src/plugins/smith_waterman/src/SWQuery.h
+++ b/src/plugins/smith_waterman/src/SWQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SWTaskFactory.cpp b/src/plugins/smith_waterman/src/SWTaskFactory.cpp
index 543caa4..1957ee8 100644
--- a/src/plugins/smith_waterman/src/SWTaskFactory.cpp
+++ b/src/plugins/smith_waterman/src/SWTaskFactory.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SWTaskFactory.h b/src/plugins/smith_waterman/src/SWTaskFactory.h
index c6039d3..679b7dc 100644
--- a/src/plugins/smith_waterman/src/SWTaskFactory.h
+++ b/src/plugins/smith_waterman/src/SWTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@
 
 #include "SWAlgorithmTask.h"
 
-#include <QtCore/QByteArray>
+#include <QByteArray>
 
 
 namespace U2 {
diff --git a/src/plugins/smith_waterman/src/SWWorker.cpp b/src/plugins/smith_waterman/src/SWWorker.cpp
index 24dc025..cf311fb 100644
--- a/src/plugins/smith_waterman/src/SWWorker.cpp
+++ b/src/plugins/smith_waterman/src/SWWorker.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/MultiTask.h>
 #include <U2Core/PluginModel.h>
diff --git a/src/plugins/smith_waterman/src/SWWorker.h b/src/plugins/smith_waterman/src/SWWorker.h
index b6ee0aa..b4100b2 100644
--- a/src/plugins/smith_waterman/src/SWWorker.h
+++ b/src/plugins/smith_waterman/src/SWWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.cpp b/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.cpp
index 42bb2c1..b64bd5f 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.h b/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.h
index 93677e0..8ce13ed 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.h
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,8 @@
 #include <U2Core/SMatrix.h>
 #include <U2Algorithm/SmithWatermanSettings.h>
 
-#include <QtCore/QVector>
-#include <QtCore/QByteArray>
+#include <QVector>
+#include <QByteArray>
 
 namespace U2 {
 
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.cpp b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.cpp
index 9a24c51..2096967 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.h b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.h
index 5a80e29..4f8af48 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.h
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmCUDA.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
index 7e4529c..c51ecf7 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,9 +28,9 @@
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QString>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
+#include <QString>
+#include <QFile>
+#include <QTextStream>
 
 #include <U2Algorithm/OpenCLUtils.h>
 #include <U2Algorithm/OpenCLHelper.h>
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.h b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.h
index 2e070e8..9b10667 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.h
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmOPENCL.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp
index f98372e..0206cf6 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,7 +35,7 @@ extern "C" {
 // http://sourceforge.net/p/predef/wiki/Compilers/
 
 #ifdef _MSC_VER
-#if _MSC_VER <= 1800 && UGENE_X86_64
+#if _MSC_VER <= 1900 && UGENE_X86_64
 #define LAME_MSC
 #endif
 #endif
diff --git a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h
index 64bed74..689114a 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h
+++ b/src/plugins/smith_waterman/src/SmithWatermanAlgorithmSSE2.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanTests.cpp b/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
index 78c8248..8d18e72 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
+++ b/src/plugins/smith_waterman/src/SmithWatermanTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/SmithWatermanTests.h b/src/plugins/smith_waterman/src/SmithWatermanTests.h
index 68bc8b5..41bdfea 100644
--- a/src/plugins/smith_waterman/src/SmithWatermanTests.h
+++ b/src/plugins/smith_waterman/src/SmithWatermanTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,8 @@
 #include <U2Algorithm/SmithWatermanResult.h>
 
 
-#include <QtCore/QByteArray>
-#include <QtXml/QDomElement>
+#include <QByteArray>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins/smith_waterman/src/sw_cuda.cu b/src/plugins/smith_waterman/src/sw_cuda.cu
index c24fbe3..cd3ee8e 100644
--- a/src/plugins/smith_waterman/src/sw_cuda.cu
+++ b/src/plugins/smith_waterman/src/sw_cuda.cu
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.unipro.ru
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/sw_cuda_cpp.cpp b/src/plugins/smith_waterman/src/sw_cuda_cpp.cpp
index d784e2c..7dcb7d1 100644
--- a/src/plugins/smith_waterman/src/sw_cuda_cpp.cpp
+++ b/src/plugins/smith_waterman/src/sw_cuda_cpp.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/src/sw_cuda_cpp.h b/src/plugins/smith_waterman/src/sw_cuda_cpp.h
index d4318e3..efe714e 100644
--- a/src/plugins/smith_waterman/src/sw_cuda_cpp.h
+++ b/src/plugins/smith_waterman/src/sw_cuda_cpp.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/smith_waterman/transl/english.ts b/src/plugins/smith_waterman/transl/english.ts
index df7f73f..32b11e2 100644
--- a/src/plugins/smith_waterman/transl/english.ts
+++ b/src/plugins/smith_waterman/transl/english.ts
@@ -411,157 +411,157 @@
 <context>
     <name>U2::QDSWActor</name>
     <message>
-        <location filename="../src/SWQuery.cpp" line="94"/>
+        <location filename="../src/SWQuery.cpp" line="92"/>
         <source>matches with <u>at least %1 score</u></source>
         <translation>matches with <u>at least %1 score</u></translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="94"/>
+        <location filename="../src/SWQuery.cpp" line="92"/>
         <source>exact matches</source>
         <translation>exact matches</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="98"/>
+        <location filename="../src/SWQuery.cpp" line="96"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="99"/>
+        <location filename="../src/SWQuery.cpp" line="97"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="100"/>
+        <location filename="../src/SWQuery.cpp" line="98"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="104"/>
+        <location filename="../src/SWQuery.cpp" line="102"/>
         <source>Finds pattern <u>%1</u>.<br>Looks for <u>%2</u> in <u>%3</u>.</source>
         <translation>Finds pattern <u>%1</u>.<br>Looks for <u>%2</u> in <u>%3</u>.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="132"/>
+        <location filename="../src/SWQuery.cpp" line="130"/>
         <source>%1: percent of score out of bounds.</source>
         <translation>%1: percent of score out of bounds.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="142"/>
+        <location filename="../src/SWQuery.cpp" line="140"/>
         <source>%1: incorrect result filter.</source>
         <translation>%1: incorrect result filter.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="147"/>
+        <location filename="../src/SWQuery.cpp" line="145"/>
         <source>%1: pattern is empty.</source>
         <translation>%1: pattern is empty.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="153"/>
+        <location filename="../src/SWQuery.cpp" line="151"/>
         <source>%1: can not find %2.</source>
         <translation>%1: can not find %2.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="197"/>
+        <location filename="../src/SWQuery.cpp" line="195"/>
         <source>SSearch</source>
         <translation>SSearch</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="205"/>
+        <location filename="../src/SWQuery.cpp" line="203"/>
         <source>smith_waterman_task</source>
         <translation>Smith-Waterman task</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="235"/>
+        <location filename="../src/SWQuery.cpp" line="233"/>
         <source>Smith-Waterman</source>
         <translation>Smith-Waterman</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="236"/>
+        <location filename="../src/SWQuery.cpp" line="234"/>
         <source>Finds regions of similarity to the specified pattern in each input sequence (nucleotide or protein one). <p>Under the hood is the well-known Smith-Waterman algorithm for performing local sequence alignment.</source>
         <translation>Finds regions of similarity to the specified pattern in each input sequence (nucleotide or protein one). <p>Under the hood is the well-known Smith-Waterman algorithm for performing local sequence alignment.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="245"/>
+        <location filename="../src/SWQuery.cpp" line="243"/>
         <source>Pattern</source>
         <translation>Pattern</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="245"/>
+        <location filename="../src/SWQuery.cpp" line="243"/>
         <source>A subsequence pattern to look for.</source>
         <translation>A subsequence pattern to look for.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="246"/>
+        <location filename="../src/SWQuery.cpp" line="244"/>
         <source>Min score</source>
         <translation>Min score</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="246"/>
+        <location filename="../src/SWQuery.cpp" line="244"/>
         <source>The search stringency.</source>
         <translation>The search stringency.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="247"/>
+        <location filename="../src/SWQuery.cpp" line="245"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="247"/>
+        <location filename="../src/SWQuery.cpp" line="245"/>
         <source>Algorithm version.</source>
         <translation>Algorithm version.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="248"/>
+        <location filename="../src/SWQuery.cpp" line="246"/>
         <source>Search in translation</source>
         <translation>Search in translation</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="248"/>
+        <location filename="../src/SWQuery.cpp" line="246"/>
         <source>Translate a supplied nucleotide sequence to protein then search in the translated sequence.</source>
         <translation>Translate a supplied nucleotide sequence to protein then search in the translated sequence.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="249"/>
+        <location filename="../src/SWQuery.cpp" line="247"/>
         <source>Scoring matrix</source>
         <translation>Scoring matrix</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="249"/>
+        <location filename="../src/SWQuery.cpp" line="247"/>
         <source>The scoring matrix.</source>
         <translation>The scoring matrix.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="250"/>
+        <location filename="../src/SWQuery.cpp" line="248"/>
         <source>Filter results</source>
         <translation>Filter results</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="250"/>
+        <location filename="../src/SWQuery.cpp" line="248"/>
         <source>Result filtering strategy.</source>
         <translation>Result filtering strategy.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="251"/>
+        <location filename="../src/SWQuery.cpp" line="249"/>
         <source>Gap open score</source>
         <translation>Gap open score</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="251"/>
+        <location filename="../src/SWQuery.cpp" line="249"/>
         <source>Gap open score.</source>
         <translation>Gap open score.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="252"/>
+        <location filename="../src/SWQuery.cpp" line="250"/>
         <source>Gap ext score</source>
         <translation>Gap ext score</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="252"/>
+        <location filename="../src/SWQuery.cpp" line="250"/>
         <source>Gap extension score.</source>
         <translation>Gap extension score.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="283"/>
+        <location filename="../src/SWQuery.cpp" line="281"/>
         <source>Auto</source>
         <translation>Auto</translation>
     </message>
diff --git a/src/plugins/smith_waterman/transl/russian.ts b/src/plugins/smith_waterman/transl/russian.ts
index 614e49c..beedcbf 100644
--- a/src/plugins/smith_waterman/transl/russian.ts
+++ b/src/plugins/smith_waterman/transl/russian.ts
@@ -411,157 +411,157 @@
 <context>
     <name>U2::QDSWActor</name>
     <message>
-        <location filename="../src/SWQuery.cpp" line="94"/>
+        <location filename="../src/SWQuery.cpp" line="92"/>
         <source>matches with <u>at least %1 score</u></source>
         <translation>с оценкой не менее %1</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="94"/>
+        <location filename="../src/SWQuery.cpp" line="92"/>
         <source>exact matches</source>
         <translation>точным совпадением</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="98"/>
+        <location filename="../src/SWQuery.cpp" line="96"/>
         <source>both strands</source>
         <translation>все</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="99"/>
+        <location filename="../src/SWQuery.cpp" line="97"/>
         <source>direct strand</source>
         <translation>только прямые</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="100"/>
+        <location filename="../src/SWQuery.cpp" line="98"/>
         <source>complement strand</source>
         <translation>только комплементарные</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="104"/>
+        <location filename="../src/SWQuery.cpp" line="102"/>
         <source>Finds pattern <u>%1</u>.<br>Looks for <u>%2</u> in <u>%3</u>.</source>
         <translation>Искать паттерн <u>%1</u>.<br>Искать совпадения <u>%2</u> в <u>%3</u>.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="132"/>
+        <location filename="../src/SWQuery.cpp" line="130"/>
         <source>%1: percent of score out of bounds.</source>
         <translation>%1: percent of score out of bounds.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="142"/>
+        <location filename="../src/SWQuery.cpp" line="140"/>
         <source>%1: incorrect result filter.</source>
         <translation>%1: incorrect result filter.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="147"/>
+        <location filename="../src/SWQuery.cpp" line="145"/>
         <source>%1: pattern is empty.</source>
         <translation>%1: pattern is empty.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="153"/>
+        <location filename="../src/SWQuery.cpp" line="151"/>
         <source>%1: can not find %2.</source>
         <translation>%1: can not find %2.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="197"/>
+        <location filename="../src/SWQuery.cpp" line="195"/>
         <source>SSearch</source>
         <translation>SSearch</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="205"/>
+        <location filename="../src/SWQuery.cpp" line="203"/>
         <source>smith_waterman_task</source>
         <translation>Поиск Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="235"/>
+        <location filename="../src/SWQuery.cpp" line="233"/>
         <source>Smith-Waterman</source>
         <translation>Поиск Смита-Ватермана</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="236"/>
+        <location filename="../src/SWQuery.cpp" line="234"/>
         <source>Finds regions of similarity to the specified pattern in each input sequence (nucleotide or protein one). <p>Under the hood is the well-known Smith-Waterman algorithm for performing local sequence alignment.</source>
         <translation> Поиск подпоследовательностей, похожих на указанный паттерн, в каждой входной последовательности (нуклеотидной или протеиновой), с учётом выбранной матрицы весов. Используется реализация широко известного алгоритма Смита-Ватермана для локального выравнивания пар последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="245"/>
+        <location filename="../src/SWQuery.cpp" line="243"/>
         <source>Pattern</source>
         <translation>Паттерн</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="245"/>
+        <location filename="../src/SWQuery.cpp" line="243"/>
         <source>A subsequence pattern to look for.</source>
         <translation>Паттерн для поиска интересующих подпоследовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="246"/>
+        <location filename="../src/SWQuery.cpp" line="244"/>
         <source>Min score</source>
         <translation>Мин оценка</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="246"/>
+        <location filename="../src/SWQuery.cpp" line="244"/>
         <source>The search stringency.</source>
         <translation>Строгость поиска.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="247"/>
+        <location filename="../src/SWQuery.cpp" line="245"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="247"/>
+        <location filename="../src/SWQuery.cpp" line="245"/>
         <source>Algorithm version.</source>
         <translation>Выбор версии алгоритма.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="248"/>
+        <location filename="../src/SWQuery.cpp" line="246"/>
         <source>Search in translation</source>
         <translation>Искать в трансляции</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="248"/>
+        <location filename="../src/SWQuery.cpp" line="246"/>
         <source>Translate a supplied nucleotide sequence to protein then search in the translated sequence.</source>
         <translation>Транслировать входную нуклеотидную последовательность в протеиновую, искать указанный паттерн в последней.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="249"/>
+        <location filename="../src/SWQuery.cpp" line="247"/>
         <source>Scoring matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="249"/>
+        <location filename="../src/SWQuery.cpp" line="247"/>
         <source>The scoring matrix.</source>
         <translation> Матрица весов для алгоритма.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="250"/>
+        <location filename="../src/SWQuery.cpp" line="248"/>
         <source>Filter results</source>
         <translation>Фильтр результатов</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="250"/>
+        <location filename="../src/SWQuery.cpp" line="248"/>
         <source>Result filtering strategy.</source>
         <translation> Дополнительная фильтрация результатов.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="251"/>
+        <location filename="../src/SWQuery.cpp" line="249"/>
         <source>Gap open score</source>
         <translation>Вес открытия пробела</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="251"/>
+        <location filename="../src/SWQuery.cpp" line="249"/>
         <source>Gap open score.</source>
         <translation>Вес открытия пробела.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="252"/>
+        <location filename="../src/SWQuery.cpp" line="250"/>
         <source>Gap ext score</source>
         <translation>Вес продления пробела</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="252"/>
+        <location filename="../src/SWQuery.cpp" line="250"/>
         <source>Gap extension score.</source>
         <translation>Вес продления пробела.</translation>
     </message>
     <message>
-        <location filename="../src/SWQuery.cpp" line="283"/>
+        <location filename="../src/SWQuery.cpp" line="281"/>
         <source>Auto</source>
         <translation>Авто</translation>
     </message>
diff --git a/src/plugins/test_runner/src/ExcludeReasonDialog.h b/src/plugins/test_runner/src/ExcludeReasonDialog.h
index 731ce15..0f17176 100644
--- a/src/plugins/test_runner/src/ExcludeReasonDialog.h
+++ b/src/plugins/test_runner/src/ExcludeReasonDialog.h
@@ -1,7 +1,7 @@
 #ifndef EXCLUDERESAONDIALOG_H
 #define EXCLUDERESAONDIALOG_H
 
-#include <QtWidgets/QDialog>
+#include <QDialog>
 
 class Ui_ExcludeReasonDialog;
 
diff --git a/src/plugins/test_runner/src/GTestScriptWrapper.cpp b/src/plugins/test_runner/src/GTestScriptWrapper.cpp
index ec0cdf2..5d65620 100644
--- a/src/plugins/test_runner/src/GTestScriptWrapper.cpp
+++ b/src/plugins/test_runner/src/GTestScriptWrapper.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,9 @@
  * MA 02110-1301, USA.
  */
 
+#include <QScriptContext>
+#include <QScriptEngine>
+
 #include "GTestScriptWrapper.h"
 
 namespace U2 {
diff --git a/src/plugins/test_runner/src/GTestScriptWrapper.h b/src/plugins/test_runner/src/GTestScriptWrapper.h
index aca0aa0..778bc3f 100644
--- a/src/plugins/test_runner/src/GTestScriptWrapper.h
+++ b/src/plugins/test_runner/src/GTestScriptWrapper.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,11 @@
 #ifndef _U2_TEST_SCRIPT_WRAPPER_H_
 #define _U2_TEST_SCRIPT_WRAPPER_H_
 
-#include <QtScript>
-#include <QTest>
 #include <QObject>
+#include <QScriptValue>
+#include <QTest>
+
+class QScriptContext;
 
 namespace U2 {
 
diff --git a/src/plugins/test_runner/src/TestRunnerPlugin.cpp b/src/plugins/test_runner/src/TestRunnerPlugin.cpp
index 99790a7..cdd5bf8 100644
--- a/src/plugins/test_runner/src/TestRunnerPlugin.cpp
+++ b/src/plugins/test_runner/src/TestRunnerPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,14 +31,8 @@
 
 #include <U2Test/GTest.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
-
-#include <QtXml/QtXml>
-#include <QtCore/QProcess>
+#include <QMenu>
+#include <QProcess>
 
 #define SETTINGS_ROOT QString("test_runner/")
 #define NUM_THREADS_VAR_VALUE "10"
diff --git a/src/plugins/test_runner/src/TestRunnerPlugin.h b/src/plugins/test_runner/src/TestRunnerPlugin.h
index b63d12b..54346bd 100644
--- a/src/plugins/test_runner/src/TestRunnerPlugin.h
+++ b/src/plugins/test_runner/src/TestRunnerPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/ServiceModel.h>
 #include <U2Test/TestRunnerTask.h>
-#include <QtScript>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/plugins/test_runner/src/TestViewController.cpp b/src/plugins/test_runner/src/TestViewController.cpp
index 3b4d917..6964db5 100644
--- a/src/plugins/test_runner/src/TestViewController.cpp
+++ b/src/plugins/test_runner/src/TestViewController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QDialogButtonBox>
+#include <QDomDocument>
 #include <QFormLayout>
 #include <QHBoxLayout>
 #include <QLineEdit>
@@ -28,15 +29,16 @@
 #include <QMessageBox>
 #include <QToolBar>
 #include <QVBoxLayout>
+#include <QTextStream>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineCoreOptions.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/Log.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2Test/GTest.h>
@@ -267,7 +269,7 @@ void TestViewController::addTestSuite(GTestSuite* ts) {
         excludedSorted.insert(dynamic_cast<GTestRef*>(iter.key())->getShortName(), dynamic_cast<GTestRef*>(iter.key()) );
     }
     foreach(GTestRef* t, excludedSorted.values()) {
-        QString firstDirName=t->getShortName().section('/', 0 , 0 );//find first directory name
+        QString firstDirName=t->getShortName().section('/', 0 , 0 );//find first folder name
         if(t->getShortName()==firstDirName){
             addTest(tsi, t, ts->getExcludedTests().value(t));
         } else {
@@ -284,7 +286,7 @@ void TestViewController::addTestSuite(GTestSuite* ts) {
     }
     //add to tree Tests to run
     foreach(GTestRef* t, ts->getTests()) {
-        QString firstDirName=t->getShortName().section('/', 0 , 0 );//find first directory name
+        QString firstDirName=t->getShortName().section('/', 0 , 0 );//find first folder name
         if (t->getShortName()==firstDirName){
             addTest(tsi, t,"");
         } else {
diff --git a/src/plugins/test_runner/src/TestViewController.h b/src/plugins/test_runner/src/TestViewController.h
index a1bba9c..3690dac 100644
--- a/src/plugins/test_runner/src/TestViewController.h
+++ b/src/plugins/test_runner/src/TestViewController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,14 +26,9 @@
 #include <ui_TestView.h>
 #include <U2Core/CMDLineRegistry.h>
 
-#include <QtCore/QTime>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QTime>
+#include <QTreeWidgetItem>
+#include <QMainWindow>
 
 namespace U2 {
 
diff --git a/src/plugins/test_runner/src/TestViewReporter.cpp b/src/plugins/test_runner/src/TestViewReporter.cpp
index 9853bdd..570a998 100644
--- a/src/plugins/test_runner/src/TestViewReporter.cpp
+++ b/src/plugins/test_runner/src/TestViewReporter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#include <QtGui/QToolBar>
-#else
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QToolBar>
-#endif
+#include <QMenu>
+#include <QToolBar>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
diff --git a/src/plugins/test_runner/src/TestViewReporter.h b/src/plugins/test_runner/src/TestViewReporter.h
index 0bb9714..5b91e3c 100644
--- a/src/plugins/test_runner/src/TestViewReporter.h
+++ b/src/plugins/test_runner/src/TestViewReporter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,12 +27,7 @@
 #include <U2Gui/MainWindow.h>
 #include <ui_Reporter.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-
+#include <QTreeWidgetItem>
 
 namespace U2 {
 
diff --git a/src/plugins/test_runner/test_runner.pri b/src/plugins/test_runner/test_runner.pri
index a0a2c4f..241b4ea 100644
--- a/src/plugins/test_runner/test_runner.pri
+++ b/src/plugins/test_runner/test_runner.pri
@@ -1,7 +1,6 @@
 # include (test_runner.pri)
 
-QT += testlib
-greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets
+QT += testlib webkitwidgets
 
 PLUGIN_ID=test_runner
 PLUGIN_NAME=Test runner
diff --git a/src/plugins/test_runner/transl/english.ts b/src/plugins/test_runner/transl/english.ts
index ad07d78..b0ff284 100644
--- a/src/plugins/test_runner/transl/english.ts
+++ b/src/plugins/test_runner/transl/english.ts
@@ -69,18 +69,18 @@
 <context>
     <name>U2::TestRunnerPlugin</name>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="58"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="52"/>
         <source>test_runner_plug_name</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="58"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="52"/>
         <source>test_runner_desc</source>
         <translation>Test runner allows to run and manage tests suites and individual tests for Unipro UGENE. Enabled if environment variable UGENE_DEV is set</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="102"/>
-        <location filename="../src/TestRunnerPlugin.cpp" line="113"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="96"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="107"/>
         <source>Can't load suite %1</source>
         <translation>Can't load suite %1</translation>
     </message>
@@ -88,18 +88,18 @@
 <context>
     <name>U2::TestRunnerService</name>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="148"/>
-        <location filename="../src/TestRunnerPlugin.cpp" line="184"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="142"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="178"/>
         <source>Test runner</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="148"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="142"/>
         <source>Service to support UGENE embedded testing</source>
         <translation>Service to support UGENE embedded testing</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="298"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="292"/>
         <source>Error reading test suite from %1. Error: %2</source>
         <translation>Error reading test suite from %1. Error: %2</translation>
     </message>
@@ -107,80 +107,80 @@
 <context>
     <name>U2::TestViewController</name>
     <message>
-        <location filename="../src/TestViewController.cpp" line="436"/>
-        <location filename="../src/TestViewController.cpp" line="476"/>
-        <location filename="../src/TestViewController.cpp" line="786"/>
-        <location filename="../src/TestViewController.cpp" line="806"/>
+        <location filename="../src/TestViewController.cpp" line="438"/>
+        <location filename="../src/TestViewController.cpp" line="478"/>
+        <location filename="../src/TestViewController.cpp" line="788"/>
+        <location filename="../src/TestViewController.cpp" line="808"/>
         <source>error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="941"/>
+        <location filename="../src/TestViewController.cpp" line="943"/>
         <source>info</source>
         <translation>Information</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="948"/>
+        <location filename="../src/TestViewController.cpp" line="950"/>
         <source>env_mb_title</source>
         <translation>Environment variables</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1161"/>
+        <location filename="../src/TestViewController.cpp" line="1163"/>
         <source>passed</source>
         <translation>Passed</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1164"/>
+        <location filename="../src/TestViewController.cpp" line="1166"/>
         <source>failed</source>
         <translation>Failed</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1166"/>
+        <location filename="../src/TestViewController.cpp" line="1168"/>
         <source>not_run</source>
         <translation>Not run</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1200"/>
+        <location filename="../src/TestViewController.cpp" line="1202"/>
         <source>state: </source>
         <translation>State:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1202"/>
+        <location filename="../src/TestViewController.cpp" line="1204"/>
         <source>fail_desc: </source>
         <translation>Fail reason:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1205"/>
+        <location filename="../src/TestViewController.cpp" line="1207"/>
         <source>source_file:</source>
         <translation>Test file:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="69"/>
+        <location filename="../src/TestViewController.cpp" line="71"/>
         <source>Test runner</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="82"/>
+        <location filename="../src/TestViewController.cpp" line="84"/>
         <source>Add suite</source>
         <translation>Add suite</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="86"/>
+        <location filename="../src/TestViewController.cpp" line="88"/>
         <source>Remove suite</source>
         <translation>Remove suite</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="90"/>
+        <location filename="../src/TestViewController.cpp" line="92"/>
         <source>Run all tests</source>
         <translation>Run all tests</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="94"/>
+        <location filename="../src/TestViewController.cpp" line="96"/>
         <source>Run selected</source>
         <translation>Run selected</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="100"/>
+        <location filename="../src/TestViewController.cpp" line="102"/>
         <source>Stop</source>
         <translation>Stop</translation>
     </message>
@@ -189,47 +189,47 @@
         <translation type="obsolete">Setup environment</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="104"/>
+        <location filename="../src/TestViewController.cpp" line="106"/>
         <source>Set environment</source>
         <translation>Set environment</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="108"/>
+        <location filename="../src/TestViewController.cpp" line="110"/>
         <source>Generate report</source>
         <translation>Generate report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="112"/>
+        <location filename="../src/TestViewController.cpp" line="114"/>
         <source>Reload suites</source>
         <translation>Reload suites</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="117"/>
+        <location filename="../src/TestViewController.cpp" line="119"/>
         <source>Select All</source>
         <translation>Select All</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="123"/>
+        <location filename="../src/TestViewController.cpp" line="125"/>
         <source>Set Tests Enabled</source>
         <translation>Set Tests Enabled</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="129"/>
+        <location filename="../src/TestViewController.cpp" line="131"/>
         <source>Set Tests Disabled</source>
         <translation>Set Tests Disabled</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="135"/>
+        <location filename="../src/TestViewController.cpp" line="137"/>
         <source>Change Tests Excluded State</source>
         <translation>Change Tests Excluded State</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="139"/>
+        <location filename="../src/TestViewController.cpp" line="141"/>
         <source>Save Selected Suites</source>
         <translation>Save Selected Suites</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="436"/>
+        <location filename="../src/TestViewController.cpp" line="438"/>
         <source>Error reading test suites: 
 
  %1</source>
@@ -238,23 +238,23 @@
  %1</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="451"/>
+        <location filename="../src/TestViewController.cpp" line="453"/>
         <source>Select test suite file</source>
         <translation>Select test suite file</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="476"/>
+        <location filename="../src/TestViewController.cpp" line="478"/>
         <source>Error reading test suite: %1</source>
         <translation>Error reading test suite: %1</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="786"/>
-        <location filename="../src/TestViewController.cpp" line="806"/>
+        <location filename="../src/TestViewController.cpp" line="788"/>
+        <location filename="../src/TestViewController.cpp" line="808"/>
         <source>Not all environment variables set</source>
         <translation>Not all environment variables set</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="941"/>
+        <location filename="../src/TestViewController.cpp" line="943"/>
         <source>No environment variables found</source>
         <translation>No environment variables found</translation>
     </message>
@@ -262,17 +262,17 @@
 <context>
     <name>U2::TestViewReporter</name>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="56"/>
+        <location filename="../src/TestViewReporter.cpp" line="50"/>
         <source>save</source>
         <translation>Save report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="464"/>
+        <location filename="../src/TestViewReporter.cpp" line="458"/>
         <source>select_save_path</source>
         <translation>Select file to save report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="464"/>
+        <location filename="../src/TestViewReporter.cpp" line="458"/>
         <source>*.html</source>
         <translation>*.html</translation>
     </message>
diff --git a/src/plugins/test_runner/transl/russian.ts b/src/plugins/test_runner/transl/russian.ts
index 8ffc9bc..64e8208 100644
--- a/src/plugins/test_runner/transl/russian.ts
+++ b/src/plugins/test_runner/transl/russian.ts
@@ -69,18 +69,18 @@
 <context>
     <name>U2::TestRunnerPlugin</name>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="58"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="52"/>
         <source>test_runner_plug_name</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="58"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="52"/>
         <source>test_runner_desc</source>
         <translation>Test runner allows to run and manage tests suites and individual tests for Unipro UGENE. Enabled if environment variable UGENE_DEV is set</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="102"/>
-        <location filename="../src/TestRunnerPlugin.cpp" line="113"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="96"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="107"/>
         <source>Can't load suite %1</source>
         <translation>Can't load suite %1</translation>
     </message>
@@ -88,18 +88,18 @@
 <context>
     <name>U2::TestRunnerService</name>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="148"/>
-        <location filename="../src/TestRunnerPlugin.cpp" line="184"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="142"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="178"/>
         <source>Test runner</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="148"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="142"/>
         <source>Service to support UGENE embedded testing</source>
         <translation>Service to support UGENE embedded testing</translation>
     </message>
     <message>
-        <location filename="../src/TestRunnerPlugin.cpp" line="298"/>
+        <location filename="../src/TestRunnerPlugin.cpp" line="292"/>
         <source>Error reading test suite from %1. Error: %2</source>
         <translation>Error reading test suite from %1. Error: %2</translation>
     </message>
@@ -107,80 +107,80 @@
 <context>
     <name>U2::TestViewController</name>
     <message>
-        <location filename="../src/TestViewController.cpp" line="436"/>
-        <location filename="../src/TestViewController.cpp" line="476"/>
-        <location filename="../src/TestViewController.cpp" line="786"/>
-        <location filename="../src/TestViewController.cpp" line="806"/>
+        <location filename="../src/TestViewController.cpp" line="438"/>
+        <location filename="../src/TestViewController.cpp" line="478"/>
+        <location filename="../src/TestViewController.cpp" line="788"/>
+        <location filename="../src/TestViewController.cpp" line="808"/>
         <source>error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="941"/>
+        <location filename="../src/TestViewController.cpp" line="943"/>
         <source>info</source>
         <translation>Information</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="948"/>
+        <location filename="../src/TestViewController.cpp" line="950"/>
         <source>env_mb_title</source>
         <translation>Environment variables</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1161"/>
+        <location filename="../src/TestViewController.cpp" line="1163"/>
         <source>passed</source>
         <translation>Passed</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1164"/>
+        <location filename="../src/TestViewController.cpp" line="1166"/>
         <source>failed</source>
         <translation>Failed</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1166"/>
+        <location filename="../src/TestViewController.cpp" line="1168"/>
         <source>not_run</source>
         <translation>Not run</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1200"/>
+        <location filename="../src/TestViewController.cpp" line="1202"/>
         <source>state: </source>
         <translation>State:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1202"/>
+        <location filename="../src/TestViewController.cpp" line="1204"/>
         <source>fail_desc: </source>
         <translation>Fail reason:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="1205"/>
+        <location filename="../src/TestViewController.cpp" line="1207"/>
         <source>source_file:</source>
         <translation>Test file:</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="69"/>
+        <location filename="../src/TestViewController.cpp" line="71"/>
         <source>Test runner</source>
         <translation>Test runner</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="82"/>
+        <location filename="../src/TestViewController.cpp" line="84"/>
         <source>Add suite</source>
         <translation>Add suite</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="86"/>
+        <location filename="../src/TestViewController.cpp" line="88"/>
         <source>Remove suite</source>
         <translation>Remove suite</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="90"/>
+        <location filename="../src/TestViewController.cpp" line="92"/>
         <source>Run all tests</source>
         <translation>Run all tests</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="94"/>
+        <location filename="../src/TestViewController.cpp" line="96"/>
         <source>Run selected</source>
         <translation>Run selected</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="100"/>
+        <location filename="../src/TestViewController.cpp" line="102"/>
         <source>Stop</source>
         <translation>Stop</translation>
     </message>
@@ -189,47 +189,47 @@
         <translation type="obsolete">Setup environment</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="104"/>
+        <location filename="../src/TestViewController.cpp" line="106"/>
         <source>Set environment</source>
         <translation>Выбрать окружение</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="108"/>
+        <location filename="../src/TestViewController.cpp" line="110"/>
         <source>Generate report</source>
         <translation>Generate report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="112"/>
+        <location filename="../src/TestViewController.cpp" line="114"/>
         <source>Reload suites</source>
         <translation>Reload suites</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="117"/>
+        <location filename="../src/TestViewController.cpp" line="119"/>
         <source>Select All</source>
         <translation>Select All</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="123"/>
+        <location filename="../src/TestViewController.cpp" line="125"/>
         <source>Set Tests Enabled</source>
         <translation>Set Tests Enabled</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="129"/>
+        <location filename="../src/TestViewController.cpp" line="131"/>
         <source>Set Tests Disabled</source>
         <translation>Set Tests Disabled</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="135"/>
+        <location filename="../src/TestViewController.cpp" line="137"/>
         <source>Change Tests Excluded State</source>
         <translation>Change Tests Excluded State</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="139"/>
+        <location filename="../src/TestViewController.cpp" line="141"/>
         <source>Save Selected Suites</source>
         <translation>Save Selected Suites</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="436"/>
+        <location filename="../src/TestViewController.cpp" line="438"/>
         <source>Error reading test suites: 
 
  %1</source>
@@ -238,23 +238,23 @@
  %1</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="451"/>
+        <location filename="../src/TestViewController.cpp" line="453"/>
         <source>Select test suite file</source>
         <translation>Select test suite file</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="476"/>
+        <location filename="../src/TestViewController.cpp" line="478"/>
         <source>Error reading test suite: %1</source>
         <translation>Error reading test suite: %1</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="786"/>
-        <location filename="../src/TestViewController.cpp" line="806"/>
+        <location filename="../src/TestViewController.cpp" line="788"/>
+        <location filename="../src/TestViewController.cpp" line="808"/>
         <source>Not all environment variables set</source>
         <translation>Not all environment variables set</translation>
     </message>
     <message>
-        <location filename="../src/TestViewController.cpp" line="941"/>
+        <location filename="../src/TestViewController.cpp" line="943"/>
         <source>No environment variables found</source>
         <translation>No environment variables found</translation>
     </message>
@@ -262,17 +262,17 @@
 <context>
     <name>U2::TestViewReporter</name>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="56"/>
+        <location filename="../src/TestViewReporter.cpp" line="50"/>
         <source>save</source>
         <translation>Save report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="464"/>
+        <location filename="../src/TestViewReporter.cpp" line="458"/>
         <source>select_save_path</source>
         <translation>Select file to save report</translation>
     </message>
     <message>
-        <location filename="../src/TestViewReporter.cpp" line="464"/>
+        <location filename="../src/TestViewReporter.cpp" line="458"/>
         <source>*.html</source>
         <translation>*.html</translation>
     </message>
diff --git a/src/plugins/weight_matrix/src/PMatrixFormat.cpp b/src/plugins/weight_matrix/src/PMatrixFormat.cpp
index c7f6cee..bd93562 100644
--- a/src/plugins/weight_matrix/src/PMatrixFormat.cpp
+++ b/src/plugins/weight_matrix/src/PMatrixFormat.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/DatatypeSerializeUtils.h>
 #include <U2Core/IOAdapter.h>
diff --git a/src/plugins/weight_matrix/src/PMatrixFormat.h b/src/plugins/weight_matrix/src/PMatrixFormat.h
index b059a71..a668660 100644
--- a/src/plugins/weight_matrix/src/PMatrixFormat.h
+++ b/src/plugins/weight_matrix/src/PMatrixFormat.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
index b9776fb..6d5f69b 100644
--- a/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMBuildDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -37,7 +37,7 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -64,7 +64,7 @@ PWMBuildDialogController::PWMBuildDialogController(QWidget* w)
       logoArea(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223219");
+    new HelpButton(this, buttonBox, "20875123");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Start"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -86,7 +86,7 @@ PWMBuildDialogController::PWMBuildDialogController(QWidget* w)
 void PWMBuildDialogController::sl_inFileButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Select file with alignment"), lod,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true).append("\n").append(
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true).append("\n").append(
         DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, false)));
     if (lod.url.isEmpty()) {
         return;
@@ -102,7 +102,7 @@ void PWMBuildDialogController::sl_inFileButtonClicked() {
 
     DocumentFormat* format = NULL;
     foreach(const FormatDetectionResult& i, formats) {
-        if (i.format->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+        if (i.format->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             format = i.format;
             break;
         }
@@ -129,11 +129,10 @@ void PWMBuildDialogController::sl_inFileButtonClicked() {
     Document *doc = format->loadDocument(iof, inFile, hints, ti);
     CHECK_OP_EXT(ti, reportError(ti.getError()), );
 
-    QList<GObject*> mobjs = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> mobjs = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (!mobjs.isEmpty()) {
-        MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(mobjs.first());
-        const MAlignment &ma = mobj->getMAlignment();
-        replaceLogo(ma);
+        MultipleSequenceAlignmentObject* mobj =  qobject_cast<MultipleSequenceAlignmentObject*>(mobjs.first());
+        replaceLogo(mobj->getMultipleAlignment());
     } else {
         mobjs = doc->findGObjectByType(GObjectTypes::SEQUENCE);
         if (mobjs.isEmpty()) {
@@ -141,7 +140,7 @@ void PWMBuildDialogController::sl_inFileButtonClicked() {
             return;
         }
         U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(mobjs.first());
-        MAlignment ma(dnaObj->getSequenceName(), dnaObj->getAlphabet());
+        MultipleSequenceAlignment ma(dnaObj->getSequenceName(), dnaObj->getAlphabet());
         foreach (GObject* obj, mobjs) {
             U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(obj);
             if (dnaObj->getAlphabet()->getType() != DNAAlphabet_NUCL) {
@@ -150,8 +149,7 @@ void PWMBuildDialogController::sl_inFileButtonClicked() {
             U2OpStatus2Log os;
             QByteArray seqData = dnaObj->getWholeSequenceData(os);
             CHECK_OP_EXT(os, reportError(os.getError()), );
-            ma.addRow(dnaObj->getSequenceName(), seqData, os);
-            CHECK_OP_EXT(os, reportError(os.getError()), );
+            ma->addRow(dnaObj->getSequenceName(), seqData);
         }
         replaceLogo(ma);
     }
@@ -169,9 +167,9 @@ void PWMBuildDialogController::reportError(const QString &message) {
     QMessageBox::warning(this, L10N::errorTitle(), message);
 }
 
-void PWMBuildDialogController::replaceLogo(const MAlignment& ma) {
+void PWMBuildDialogController::replaceLogo(const MultipleSequenceAlignment& ma) {
     int logoheight = 150;
-    if (ma.getLength() < 50) {
+    if (ma->getLength() < 50) {
         AlignmentLogoSettings logoSettings(ma);
         logoWidget->resize(logoWidget->width(), logoheight);
         logoWidget->setMinimumHeight(logoheight);
@@ -330,23 +328,23 @@ void PWMBuildDialogController::reject() {
 //////////////////////////////////////////////////////////////////////////
 // tasks
 
-PFMatrixBuildTask::PFMatrixBuildTask(const PMBuildSettings& s, const MAlignment& ma)
-: Task (tr("Build Frequency Matrix"), TaskFlag_None), settings(s), ma(ma)
+PFMatrixBuildTask::PFMatrixBuildTask(const PMBuildSettings& s, const MultipleSequenceAlignment& ma)
+: Task (tr("Build Frequency Matrix"), TaskFlag_None), settings(s), ma(ma->getCopy())
 {
     GCOUNTER( cvar, tvar, "PFMatrixBuildTask" );
     tpm = Task::Progress_Manual;
 }
 
 void PFMatrixBuildTask::run() {
-    if (!ma.hasEqualLength()) {
+    if (!ma->hasEqualLength()) {
         stateInfo.setError(  tr("Sequences in alignment have various lengths") );
         return;
     }
-    if (ma.isEmpty()) {
+    if (ma->isEmpty()) {
         stateInfo.setError(  tr("Alignment is empty") );
         return;
     }
-    if (!ma.getAlphabet()->isNucleic()) {
+    if (!ma->getAlphabet()->isNucleic()) {
         stateInfo.setError(  tr("Alignment is not nucleic") );
         return;
     }
@@ -370,7 +368,7 @@ PFMatrixBuildToFileTask::PFMatrixBuildToFileTask(const QString& inFile, const QS
 
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.supportedObjectTypes += GObjectTypes::SEQUENCE;
     c.rawData = IOAdapterUtils::readFileHeader(inFile);
     QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(inFile);
@@ -381,7 +379,7 @@ PFMatrixBuildToFileTask::PFMatrixBuildToFileTask(const QString& inFile, const QS
 
     DocumentFormatId format = "";
     foreach(const FormatDetectionResult& i, formats) {
-        if (i.format->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+        if (i.format->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             format = i.format->getFormatId();
             break;
         }
@@ -417,19 +415,17 @@ QList<Task*> PFMatrixBuildToFileTask::onSubTaskFinished(Task* subTask) {
         setUseDescriptionFromSubtask(true);
         Document* d = loadTask->getDocument();
         assert(d != NULL);
-        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (!mobjs.isEmpty()) {
-            MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(mobjs.first());
-            const MAlignment &ma = mobj->getMAlignment();
-            buildTask = new PFMatrixBuildTask(settings, ma);
+            MultipleSequenceAlignmentObject* mobj =  qobject_cast<MultipleSequenceAlignmentObject*>(mobjs.first());
+            buildTask = new PFMatrixBuildTask(settings, mobj->getMultipleAlignment());
             res.append(buildTask);
         } else {
             mobjs = d->findGObjectByType(GObjectTypes::SEQUENCE);
             if (!mobjs.isEmpty()) {
                 U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(mobjs.first());
                 QString baseName = d->getURL().baseFileName();
-                MAlignment ma(baseName, dnaObj->getAlphabet());
-                QList<MAlignmentRow> rows;
+                MultipleSequenceAlignment ma(baseName, dnaObj->getAlphabet());
                 foreach (GObject* obj, mobjs) {
                     U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(obj);
                     if (dnaObj->getAlphabet()->getType() != DNAAlphabet_NUCL) {
@@ -437,8 +433,7 @@ QList<Task*> PFMatrixBuildToFileTask::onSubTaskFinished(Task* subTask) {
                     }
                     QByteArray seqData = dnaObj->getWholeSequenceData(stateInfo);
                     CHECK_OP(stateInfo, res);
-                    ma.addRow(dnaObj->getSequenceName(), seqData, stateInfo);
-                    CHECK_OP(stateInfo, res);
+                    ma->addRow(dnaObj->getSequenceName(), seqData);
                 }
                 buildTask = new PFMatrixBuildTask(settings, ma);
                 res.append(buildTask);
@@ -454,8 +449,8 @@ QList<Task*> PFMatrixBuildToFileTask::onSubTaskFinished(Task* subTask) {
     return res;
 }
 
-PWMatrixBuildTask::PWMatrixBuildTask(const PMBuildSettings& s, const MAlignment& ma)
-: Task (tr("Build Weight Matrix"), TaskFlag_None), settings(s), ma(ma)
+PWMatrixBuildTask::PWMatrixBuildTask(const PMBuildSettings& s, const MultipleSequenceAlignment& ma)
+: Task (tr("Build Weight Matrix"), TaskFlag_None), settings(s), ma(ma->getCopy())
 {
     GCOUNTER( cvar, tvar, "PWMatrixBuildTask" );
     tpm = Task::Progress_Manual;
@@ -482,15 +477,15 @@ void PWMatrixBuildTask::run() {
             return;
         }
     } else {
-        if (!ma.hasEqualLength()) {
+        if (!ma->hasEqualLength()) {
             stateInfo.setError(  tr("Sequences in alignment have various lengths") );
             return;
         }
-        if (ma.isEmpty()) {
+        if (ma->isEmpty()) {
             stateInfo.setError(  tr("Alignment is empty") );
             return;
         }
-        if (!ma.getAlphabet()->isNucleic()) {
+        if (!ma->getAlphabet()->isNucleic()) {
             stateInfo.setError(  tr("Alignment is not nucleic") );
             return;
         }
@@ -520,7 +515,7 @@ PWMatrixBuildToFileTask::PWMatrixBuildToFileTask(const QString& inFile, const QS
 
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.supportedObjectTypes += GObjectTypes::SEQUENCE;
     c.rawData = IOAdapterUtils::readFileHeader(inFile);
     QList<FormatDetectionResult> formats = DocumentUtils::detectFormat(inFile);
@@ -550,18 +545,17 @@ QList<Task*> PWMatrixBuildToFileTask::onSubTaskFinished(Task* subTask) {
         setUseDescriptionFromSubtask(true);
         Document* d = loadTask->getDocument();
         assert(d != NULL);
-        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (!mobjs.isEmpty()) {
-            MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(mobjs.first());
-            const MAlignment &ma = mobj->getMAlignment();
-            buildTask = new PWMatrixBuildTask(settings, ma);
+            MultipleSequenceAlignmentObject* mobj =  qobject_cast<MultipleSequenceAlignmentObject*>(mobjs.first());
+            buildTask = new PWMatrixBuildTask(settings, mobj->getMultipleAlignment());
             res.append(buildTask);
         } else {
             mobjs = d->findGObjectByType(GObjectTypes::SEQUENCE);
             if (!mobjs.isEmpty()) {
                 U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(mobjs.first());
                 QString baseName = d->getURL().baseFileName();
-                MAlignment ma(baseName, dnaObj->getAlphabet());
+                MultipleSequenceAlignment ma(baseName, dnaObj->getAlphabet());
                 foreach (GObject* obj, mobjs) {
                     U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(obj);
                     if (dnaObj->getAlphabet()->getType() != DNAAlphabet_NUCL) {
@@ -569,8 +563,7 @@ QList<Task*> PWMatrixBuildToFileTask::onSubTaskFinished(Task* subTask) {
                     }
                     QByteArray seqData = dnaObj->getWholeSequenceData(stateInfo);
                     CHECK_OP(stateInfo, res);
-                    ma.addRow(dnaObj->getSequenceName(), seqData, stateInfo);
-                    CHECK_OP(stateInfo, res);
+                    ma->addRow(dnaObj->getSequenceName(), seqData);
                 }
 
                 buildTask = new PWMatrixBuildTask(settings, ma);
diff --git a/src/plugins/weight_matrix/src/PWMBuildDialogController.h b/src/plugins/weight_matrix/src/PWMBuildDialogController.h
index 33172c0..c47e13c 100644
--- a/src/plugins/weight_matrix/src/PWMBuildDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMBuildDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Algorithm/PWMConversionAlgorithm.h>
 
 #include <U2Core/DNASequence.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/PFMatrix.h>
 #include <U2Core/PWMatrix.h>
 #include <U2Core/Task.h>
@@ -74,20 +74,20 @@ private:
     AlignmentLogoRenderArea* logoArea;
     QPushButton* okButton;
     QPushButton* cancelButton;
-    void replaceLogo(const MAlignment& ma);
+    void replaceLogo(const MultipleSequenceAlignment& ma);
 };
 
 
 class PFMatrixBuildTask : public Task {
     Q_OBJECT
 public:
-    PFMatrixBuildTask(const PMBuildSettings& s, const MAlignment& ma);
+    PFMatrixBuildTask(const PMBuildSettings& s, const MultipleSequenceAlignment& ma);
     void run();
     PFMatrix getResult() const {return m;}
 
 private:
     PMBuildSettings        settings;
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     PFMatrix                m;
 };
 
@@ -107,14 +107,14 @@ private:
 class PWMatrixBuildTask : public Task {
     Q_OBJECT
 public:
-    PWMatrixBuildTask(const PMBuildSettings& s, const MAlignment& ma);
+    PWMatrixBuildTask(const PMBuildSettings& s, const MultipleSequenceAlignment& ma);
     PWMatrixBuildTask(const PMBuildSettings& s, const PFMatrix& m);
     void run();
     PWMatrix getResult() const {return m;}
 
 private:
     PMBuildSettings         settings;
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     PFMatrix                tempMatrix;
     PWMatrix                m;
 };
diff --git a/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp b/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
index bc42c27..5419265 100644
--- a/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMJASPARDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,22 +23,17 @@
 
 #include <U2Gui/GUIUtils.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QPushButton>
+#include <QMessageBox>
 
 namespace U2 {
 
 PWMJASPARDialogController::PWMJASPARDialogController(QWidget *w)
 : QDialog(w) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223218");
+    new HelpButton(this, buttonBox, "20875122");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Select"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
diff --git a/src/plugins/weight_matrix/src/PWMJASPARDialogController.h b/src/plugins/weight_matrix/src/PWMJASPARDialogController.h
index 3719284..05a13ce 100644
--- a/src/plugins/weight_matrix/src/PWMJASPARDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMJASPARDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,15 +24,9 @@
 
 #include <ui_SearchJASPARDatabase.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QDialog>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTreeWidgetItem>
-#endif
+#include <QDialog>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
 
 #include <U2Core/PFMatrix.h>
 
diff --git a/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp b/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
index 81f1aac..905eb53 100644
--- a/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
+++ b/src/plugins/weight_matrix/src/PWMSearchDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -38,16 +38,17 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/CreateAnnotationDialog.h>
 #include <U2Gui/CreateAnnotationWidgetController.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/HelpButton.h>
 #include <U2Gui/LastUsedDirHelper.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/ADVSequenceObjectContext.h>
 #include <U2View/AnnotatedDNAView.h>
@@ -108,7 +109,7 @@ public:
 
 PWMSearchDialogController::PWMSearchDialogController(ADVSequenceObjectContext* _ctx, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223217");
+    new HelpButton(this, buttonBox, "20875121");
     buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Add to queue"));
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -245,6 +246,7 @@ void PWMSearchDialogController::sl_onSaveAnnotations() {
     if (rc != QDialog::Accepted) {
         return;
     }
+    ctx->getAnnotatedDNAView()->tryAddObject(m.getAnnotationObject());
     const QString& name = m.data->name;
     QList<SharedAnnotationData> list;
     for (int i = 0, n = resultsTree->topLevelItemCount(); i<n; ++i) {
@@ -430,7 +432,7 @@ void PWMSearchDialogController::sl_onClearQueue() {
 
 void PWMSearchDialogController::sl_onLoadFolder() {
     LastUsedDirHelper lod(WeightMatrixIO::WEIGHT_MATRIX_ID);
-    lod.dir = U2FileDialog::getExistingDirectory(this, tr("Select directory with frequency or weight matrices"), lod);
+    lod.dir = U2FileDialog::getExistingDirectory(this, tr("Select folder with frequency or weight matrices"), lod);
     if (lod.dir.isEmpty()) {
         return;
     }
diff --git a/src/plugins/weight_matrix/src/PWMSearchDialogController.h b/src/plugins/weight_matrix/src/PWMSearchDialogController.h
index 0771cf5..2bba580 100644
--- a/src/plugins/weight_matrix/src/PWMSearchDialogController.h
+++ b/src/plugins/weight_matrix/src/PWMSearchDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,14 +27,10 @@
 
 #include <ui_PWMSearchDialog.h>
 
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-#include <QtGui/QCloseEvent>
-#include <QtCore/QTimer>
+#include <QList>
+#include <QTreeWidgetItem>
+#include <QCloseEvent>
+#include <QTimer>
 
 #include <U2Core/PFMatrix.h>
 #include <U2Core/PWMatrix.h>
diff --git a/src/plugins/weight_matrix/src/SetParametersDialogController.cpp b/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
index 6c46cb8..bc201bc 100644
--- a/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
+++ b/src/plugins/weight_matrix/src/SetParametersDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Algorithm/PWMConversionAlgorithmRegistry.h>
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
-
+#include <QPushButton>
 
 namespace U2 {
 
@@ -37,7 +32,7 @@ SetParametersDialogController::SetParametersDialogController(QWidget *w)
     : QDialog(w) {
 
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223217");
+    new HelpButton(this, buttonBox, "20875121");
 
     QStringList algo = AppContext::getPWMConversionAlgorithmRegistry()->getAlgorithmIds();
     algorithmComboBox->addItems(algo);
diff --git a/src/plugins/weight_matrix/src/SetParametersDialogController.h b/src/plugins/weight_matrix/src/SetParametersDialogController.h
index bb4b826..bd3de69 100644
--- a/src/plugins/weight_matrix/src/SetParametersDialogController.h
+++ b/src/plugins/weight_matrix/src/SetParametersDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 
 #include <ui_SetDefaultParametersDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include "WeightMatrixPlugin.h"
 
diff --git a/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp b/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
index 3ea1e1d..a396ca6 100644
--- a/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
+++ b/src/plugins/weight_matrix/src/ViewMatrixDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,16 +28,9 @@
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Gui/HelpButton.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#include <QtGui/QTableWidget>
-#include <QtGui/QTableWidgetItem>
-#else
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTableWidget>
-#include <QtWidgets/QTableWidgetItem>
-#endif
-
+#include <QPushButton>
+#include <QTableWidget>
+#include <QTableWidgetItem>
 
 namespace U2 {
 
@@ -89,7 +82,7 @@ MatrixAndLogoController::MatrixAndLogoController( PFMatrix matrix, QWidget *p):Q
     }
 
     const DNAAlphabet* al = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
-    MAlignment ma(QString("Temporary alignment"), al);
+    MultipleSequenceAlignment ma(QString("Temporary alignment"), al);
     for (int i = 0; i < size; i++) {
         QByteArray arr;
         for (int j = 0; j < len; j++) {
@@ -109,9 +102,7 @@ MatrixAndLogoController::MatrixAndLogoController( PFMatrix matrix, QWidget *p):Q
                 }
             }
         }
-        U2OpStatus2Log os;
-        ma.addRow(QString("Row %1").arg(i), arr, os);
-        CHECK_OP(os, );
+        ma->addRow(QString("Row %1").arg(i), arr);
     }
     AlignmentLogoSettings logoSettings(ma);
     logoWidget->resize(logowidth, logoheight);
@@ -183,7 +174,7 @@ ViewMatrixDialogController::ViewMatrixDialogController(PFMatrix matrix, QWidget
 
 ViewMatrixDialogController::ViewMatrixDialogController(PWMatrix matrix, QWidget *w): QDialog(w){
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223219");
+    new HelpButton(this, buttonBox, "20875123");
     buttonBox->button(QDialogButtonBox::Close)->setText(tr("Close"));
 
     ml = new MatrixAndLogoController(matrix, this);
diff --git a/src/plugins/weight_matrix/src/ViewMatrixDialogController.h b/src/plugins/weight_matrix/src/ViewMatrixDialogController.h
index 3a52d2a..07570b3 100644
--- a/src/plugins/weight_matrix/src/ViewMatrixDialogController.h
+++ b/src/plugins/weight_matrix/src/ViewMatrixDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <ui_ViewMatrixDialog.h>
 #include <ui_MatrixAndLogoWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 #include <U2Core/PFMatrix.h>
 #include <U2Core/PWMatrix.h>
diff --git a/src/plugins/weight_matrix/src/WMQuery.cpp b/src/plugins/weight_matrix/src/WMQuery.cpp
index bddccc5..396779f 100644
--- a/src/plugins/weight_matrix/src/WMQuery.cpp
+++ b/src/plugins/weight_matrix/src/WMQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,12 +35,7 @@
 
 #include <U2Gui/DialogUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
+#include <QApplication>
 
 namespace U2 {
 
diff --git a/src/plugins/weight_matrix/src/WMQuery.h b/src/plugins/weight_matrix/src/WMQuery.h
index 38d3b10..fdf8505 100644
--- a/src/plugins/weight_matrix/src/WMQuery.h
+++ b/src/plugins/weight_matrix/src/WMQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.cpp b/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.cpp
index e3a0b11..213b61b 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.h b/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.h
index d06fcff..cb6fe85 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixBuildWorker.cpp b/src/plugins/weight_matrix/src/WeightMatrixBuildWorker.cpp
index 5776760..202e2d0 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixBuildWorker.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixBuildWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,30 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "WeightMatrixWorkers.h"
-#include "WeightMatrixIOWorkers.h"
-#include "WeightMatrixPlugin.h"
-#include "PWMBuildDialogController.h"
-
 #include <U2Algorithm/BuiltInPWMConversionAlgorithms.h>
 #include <U2Algorithm/PWMConversionAlgorithmRegistry.h>
 
-#include <U2Lang/Datatype.h>
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
+#include <U2Core/AppContext.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/Datatype.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
 
-#include <U2Core/AppContext.h>
-#include <U2Core/MAlignment.h>
-
-/* TRANSLATOR U2::WeightMatrixIO */
-/* TRANSLATOR U2::LocalWorkflow::PWMatrixBuildWorker */
+#include "PWMBuildDialogController.h"
+#include "WeightMatrixIOWorkers.h"
+#include "WeightMatrixPlugin.h"
+#include "WeightMatrixWorkers.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -138,11 +137,10 @@ Task* PWMatrixBuildWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
 
-        Task* t = new PWMatrixBuildTask(cfg, msa);
+        Task* t = new PWMatrixBuildTask(cfg, msaObj->getMultipleAlignment());
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
         return t;
     } else if (input->isEnded()) {
@@ -228,11 +226,10 @@ Task* PFMatrixBuildWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
 
-        Task* t = new PFMatrixBuildTask(cfg, msa);
+        Task* t = new PFMatrixBuildTask(cfg, msaObj->getMultipleAlignment());
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
         return t;
     } else if (input->isEnded()) {
diff --git a/src/plugins/weight_matrix/src/WeightMatrixIO.cpp b/src/plugins/weight_matrix/src/WeightMatrixIO.cpp
index d298d8b..9cd5c8d 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixIO.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixIO.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,15 +35,11 @@
 
 #include <U2Core/DIProperties.h>
 
-#include <QtCore/QVector>
-#include <QtCore/QTextStream>
-#include <QtCore/QFile>
+#include <QVector>
+#include <QTextStream>
+#include <QFile>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QMessageBox>
 
 /* TRANSLATOR U2::IOAdapter */
 
@@ -88,7 +84,7 @@ PFMatrix WeightMatrixIO::readPFMatrix(IOAdapterFactory* iof, const QString& url,
     QByteArray block(BUFF_SIZE, '\0');
     qint64 blockLen = 0;
     while ((blockLen = io->readBlock(block.data(), BUFF_SIZE)) > 0) {
-        text.append(QByteArray::fromRawData(block.data(), blockLen));
+        text.append(QByteArray(block.data(), blockLen));
         if (text.size() > 1000*1000) {
             si.setError(L10N::errorFileTooLarge(url));
             break;
@@ -190,7 +186,7 @@ PWMatrix WeightMatrixIO::readPWMatrix(IOAdapterFactory* iof, const QString& url,
     QByteArray block(BUFF_SIZE, '\0');
     qint64 blockLen = 0;
     while ((blockLen = io->readBlock(block.data(), BUFF_SIZE)) > 0) {
-        text.append(QByteArray::fromRawData(block.data(), blockLen));
+        text.append(QByteArray(block.data(), blockLen));
         if (text.size() > 1000*1000) {
             si.setError(L10N::errorFileTooLarge(url));
             break;
diff --git a/src/plugins/weight_matrix/src/WeightMatrixIO.h b/src/plugins/weight_matrix/src/WeightMatrixIO.h
index f6238e5..d3ecb7e 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixIO.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixIO.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_WEIGHT_MATRIX_IO_H_
 #define _U2_WEIGHT_MATRIX_IO_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QString>
+#include <QObject>
+#include <QString>
 
 #include <U2Core/Task.h>
 
diff --git a/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.cpp b/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.cpp
index 3b084f3..505d0ef 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.h b/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.h
index 5b9879d..5fc7a76 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixIOWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixPlugin.cpp b/src/plugins/weight_matrix/src/WeightMatrixPlugin.cpp
index e553cb4..faf89dd 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixPlugin.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixPlugin.h b/src/plugins/weight_matrix/src/WeightMatrixPlugin.h
index be44550..0e03fa5 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixPlugin.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/PluginModel.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins/weight_matrix/src/WeightMatrixSearchTask.cpp b/src/plugins/weight_matrix/src/WeightMatrixSearchTask.cpp
index 4a5928c..0091960 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixSearchTask.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/src/WeightMatrixSearchTask.h b/src/plugins/weight_matrix/src/WeightMatrixSearchTask.h
index 6ab9333..7c6ff34 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixSearchTask.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,8 +28,8 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/SequenceWalkerTask.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QPair>
+#include <QMutex>
+#include <QPair>
 
 namespace U2 {
 
diff --git a/src/plugins/weight_matrix/src/WeightMatrixSearchWorker.cpp b/src/plugins/weight_matrix/src/WeightMatrixSearchWorker.cpp
index 404d5db..55b90aa 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixSearchWorker.cpp
+++ b/src/plugins/weight_matrix/src/WeightMatrixSearchWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,37 +19,34 @@
  * MA 02110-1301, USA.
  */
 
-#include "WeightMatrixWorkers.h"
-#include "WeightMatrixIOWorkers.h"
-#include "WeightMatrixSearchTask.h"
-
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/BaseAttributes.h>
+#include <QApplication>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
+#include <U2Core/FailTask.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
 #include <U2Core/MultiTask.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-/* TRANSLATOR U2::LocalWorkflow::PWMatrixSearchWorker */
+#include "WeightMatrixIOWorkers.h"
+#include "WeightMatrixSearchTask.h"
+#include "WeightMatrixWorkers.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/weight_matrix/src/WeightMatrixWorkers.h b/src/plugins/weight_matrix/src/WeightMatrixWorkers.h
index 5777672..209e108 100644
--- a/src/plugins/weight_matrix/src/WeightMatrixWorkers.h
+++ b/src/plugins/weight_matrix/src/WeightMatrixWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/weight_matrix/transl/english.ts b/src/plugins/weight_matrix/transl/english.ts
index a2e164e..70dc76c 100644
--- a/src/plugins/weight_matrix/transl/english.ts
+++ b/src/plugins/weight_matrix/transl/english.ts
@@ -78,7 +78,7 @@
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="82"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="81"/>
         <source>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</source>
         <translation>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</translation>
     </message>
@@ -220,8 +220,8 @@
         <translation>Status</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="188"/>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="85"/>
+        <location filename="../src/WMQuery.cpp" line="183"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="82"/>
         <source>Minimum score to detect transcription factor binding site</source>
         <translation>Minimum score to detect transcription factor binding site</translation>
     </message>
@@ -229,27 +229,27 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="185"/>
+        <location filename="../src/WMQuery.cpp" line="180"/>
         <source>Weight Matrix</source>
         <translation>Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="186"/>
+        <location filename="../src/WMQuery.cpp" line="181"/>
         <source>Searches the sequence for transcription factor binding sites significantly similar to the specified weight matrix.</source>
         <translation>Searches the sequence for transcription factor binding sites significantly similar to the specified weight matrix.</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="188"/>
+        <location filename="../src/WMQuery.cpp" line="183"/>
         <source>Min score</source>
         <translation>Min score</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="189"/>
+        <location filename="../src/WMQuery.cpp" line="184"/>
         <source>Matrix</source>
         <translation>Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="189"/>
+        <location filename="../src/WMQuery.cpp" line="184"/>
         <source>Path to profile</source>
         <translation>Path to profile</translation>
     </message>
@@ -318,7 +318,7 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixBuildPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="210"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="208"/>
         <source>For each MSA from <u>%1</u>, build Frequency Matrix.</source>
         <translation>For each MSA from <u>%1</u>, build Frequency Matrix.</translation>
     </message>
@@ -326,50 +326,50 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixBuildWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="172"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="170"/>
         <source>Input alignment</source>
         <translation>Input alignment</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="173"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="171"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Input multiple sequence alignment for building statistical model.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="177"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="175"/>
         <source>Frequency matrix</source>
         <translation>Frequency matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="178"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="176"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Produced statistical model of specified TFBS data.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="190"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="188"/>
         <source>Build Frequency Matrix</source>
         <translation>Build Frequency Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="191"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="189"/>
         <source>Builds frequency matrix. Frequency matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Builds frequency matrix. Frequency matrices are used for probabilistic recognition of transcription factor binding sites.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="197"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="195"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Mononucleic</translation>
+        <translation>Mononucleic</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="198"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="196"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Dinucleic</translation>
+        <translation>Dinucleic</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::PFMatrixConvertPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="314"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="311"/>
         <source>For each frequency matrix from <u>%1</u>, build weight matrix.</source>
         <translation>For each frequency matrix from <u>%1</u>, build weight matrix.</translation>
     </message>
@@ -377,44 +377,44 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixConvertWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="267"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="264"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="263"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="260"/>
         <source>Frequency matrix to convert.</source>
         <translation>Frequency matrix to convert.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="262"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="259"/>
         <source>Frequency matrix</source>
         <translation>Frequency matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="268"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="265"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Produced statistical model of specified TFBS data.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="285"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="282"/>
         <source>Convert Frequency Matrix</source>
         <translation>Convert Frequency Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="286"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="283"/>
         <source>Converts frequency matrix to weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Converts frequency matrix to weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="301"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="298"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Mononucleic</translation>
+        <translation>Mononucleic</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="302"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="299"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Dinucleic</translation>
+        <translation>Dinucleic</translation>
     </message>
 </context>
 <context>
@@ -457,7 +457,7 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixBuildPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="120"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="119"/>
         <source>For each MSA from <u>%1</u>, build weight matrix.</source>
         <translation>For each MSA from <u>%1</u>, build weight matrix.</translation>
     </message>
@@ -465,67 +465,67 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixBuildWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="68"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="67"/>
         <source>Input alignment</source>
         <translation>Input alignment</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="69"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="68"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Input multiple sequence alignment for building statistical model.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="73"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="72"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="73"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="72"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Produced statistical model of specified TFBS data.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="81"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="276"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="80"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="273"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="87"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="186"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="281"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="86"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="184"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="278"/>
         <source>Matrix type</source>
         <translation>Matrix type</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="87"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="186"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="281"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="86"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="184"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="278"/>
         <source>Dinucleic matrices are more detailed, while mononucleic one are more useful for small input data sets.</source>
         <translation>Dinucleic matrices are more detailed, while mononucleic one are more useful for small input data sets.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="91"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="90"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="92"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="91"/>
         <source>Builds weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Builds weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="107"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="106"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Mononucleic</translation>
+        <translation>Mononucleic</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="108"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="107"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Dinucleic</translation>
+        <translation>Dinucleic</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="276"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="273"/>
         <source>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</source>
         <translation>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</translation>
     </message>
@@ -549,22 +549,22 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixSearchPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="133"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="130"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="134"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="131"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>For each sequence from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="135"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="132"/>
         <source>with all profiles provided by <u>%1</u>,</source>
         <translation>with all profiles provided by <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="148"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="145"/>
         <source>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</translation>
     </message>
@@ -572,87 +572,87 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixSearchWorker</name>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="63"/>
         <source>Weight matrix</source>
         <translation>Weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="63"/>
         <source>Profile data to search with.</source>
         <translation>Profile data to search with.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="67"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="64"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="67"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="64"/>
         <source>Input nucleotide sequence to search in.</source>
         <translation>Input nucleotide sequence to search in.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="68"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="65"/>
         <source>Weight matrix annotations</source>
         <translation>Weight matrix annotations</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="69"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
         <source>Annotations marking found TFBS sites.</source>
         <translation>Annotations marking found TFBS sites.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="82"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="79"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="83"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="80"/>
         <source>Annotation name for marking found regions.</source>
         <translation>Annotation name for marking found regions.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="84"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="81"/>
         <source>Min score</source>
         <translation>Min score</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="92"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="89"/>
         <source>Search for TFBS with Weight Matrix</source>
         <translation>Search for TFBS with Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="93"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="90"/>
         <source>Searches each input sequence for transcription factor binding sites significantly similar to specified weight matrices. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</source>
         <translation>Searches each input sequence for transcription factor binding sites significantly similar to specified weight matrices. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="142"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="139"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="143"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="140"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="144"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="141"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="225"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="222"/>
         <source>Find TFBS in %1</source>
         <translation>Find TFBS in %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="229"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="226"/>
         <source>Bad sequence supplied to Weight Matrix Search: %1</source>
         <translation>Bad sequence supplied to Weight Matrix Search: %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="251"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="248"/>
         <source>Found %1 TFBS</source>
         <translation>Found %1 TFBS</translation>
     </message>
@@ -681,8 +681,8 @@
 <context>
     <name>U2::MatrixViewController</name>
     <message>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="203"/>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="211"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="194"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="202"/>
         <source>Matrix viewer</source>
         <translation>Matrix viewer</translation>
     </message>
@@ -690,27 +690,27 @@
 <context>
     <name>U2::PFMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="334"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="332"/>
         <source>Build Frequency Matrix</source>
         <translation>Build Frequency Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="342"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="340"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Sequences in alignment have various lengths</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="346"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="344"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="350"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="348"/>
         <source>Alignment is not nucleic</source>
         <translation>Alignment is not nucleic</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="353"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="351"/>
         <source>Calculating frequencies of nucleotids</source>
         <translation>Calculating frequencies of nucleotids</translation>
     </message>
@@ -718,27 +718,27 @@
 <context>
     <name>U2::PFMatrixBuildToFileTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="367"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="365"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="378"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="376"/>
         <source>Input format error</source>
         <translation>Input format error</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="403"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="401"/>
         <source>Loading alignment</source>
         <translation>Loading alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="436"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="432"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="446"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="441"/>
         <source>No alignments or sequences found</source>
         <translation>No alignments or sequences found</translation>
     </message>
@@ -805,29 +805,29 @@ Maybe model data are not enough for selected algorithm</translation>
         <translation>Select file with alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="148"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="147"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="289"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="287"/>
         <source>Select file to save frequency matrix to...</source>
         <translation>Select file to save frequency matrix to...</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="292"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="290"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="308"/>
         <source>Frequency matrices</source>
-        <translation type="unfinished">Frequency matrices</translation>
+        <translation>Frequency matrices</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="293"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="311"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="291"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="309"/>
         <source>Weight matrices</source>
-        <translation type="unfinished">Weight matrices</translation>
+        <translation>Weight matrices</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="307"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="305"/>
         <source>Select file to save weight matrix to...</source>
         <translation>Select file to save weight matrix to...</translation>
     </message>
@@ -842,28 +842,28 @@ Do you want to write over this file?</source>
 Do you want to write over this file?</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="210"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="208"/>
         <source>Illegal input file name</source>
         <translation>Illegal input file name</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="215"/>
         <source>Illegal output file name</source>
         <translation>Illegal output file name</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="245"/>
         <source>Counting frequency statistics</source>
         <translation>Counting frequency statistics</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="250"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="248"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
         <location filename="../src/PWMBuildDialogController.cpp" line="69"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="251"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="249"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -873,38 +873,38 @@ Do you want to write over this file?</translation>
         <translation>Could not detect the format of the file. Files must be in supported multiple alignment or sequence formats.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="140"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="139"/>
         <source>There are no sequences in the file.</source>
         <translation>There are no sequences in the file.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="263"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="261"/>
         <source>Build finished with errors: %1</source>
         <translation>Build finished with errors: %1</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="266"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="264"/>
         <source>Build canceled</source>
         <translation>Build canceled</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="269"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="267"/>
         <source>Build finished successfuly</source>
         <translation>Build finished successfuly</translation>
     </message>
     <message>
         <location filename="../src/PWMBuildDialogController.cpp" line="68"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="272"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="270"/>
         <source>Start</source>
         <translation>Start</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="273"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="271"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="279"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="277"/>
         <source>Running state %1 progress %2%</source>
         <translation>Running state %1 progress %2%</translation>
     </message>
@@ -912,12 +912,12 @@ Do you want to write over this file?</translation>
 <context>
     <name>U2::PWMJASPARDialogController</name>
     <message>
-        <location filename="../src/PWMJASPARDialogController.cpp" line="42"/>
+        <location filename="../src/PWMJASPARDialogController.cpp" line="37"/>
         <source>Select</source>
         <translation>Select</translation>
     </message>
     <message>
-        <location filename="../src/PWMJASPARDialogController.cpp" line="43"/>
+        <location filename="../src/PWMJASPARDialogController.cpp" line="38"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -925,98 +925,98 @@ Do you want to write over this file?</translation>
 <context>
     <name>U2::PWMSearchDialogController</name>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="114"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="183"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="115"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="184"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="183"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="184"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="195"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="196"/>
         <source>Progress %1% </source>
         <translation>Progress %1% </translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="197"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="198"/>
         <source>Results found: %1.</source>
         <translation>Results found: %1.</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="216"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="217"/>
         <source>Select file with frequency or weight matrix</source>
         <translation>Select file with frequency or weight matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="291"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="293"/>
         <source>Same model with same parameters already in the search queue</source>
         <translation>Same model with same parameters already in the search queue</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="332"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="564"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="334"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="566"/>
         <source>Zero length or corrupted model
 Maybe model data is not enough for selected algorithm</source>
         <translation>Zero length or corrupted model
 Maybe model data is not enough for selected algorithm</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="360"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="471"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="362"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="473"/>
         <source>Model not selected</source>
         <translation>Model not selected</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="366"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="368"/>
         <source>Load file with list of matrices</source>
         <translation>Load file with list of matrices</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="366"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="406"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="368"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="408"/>
         <source>CSV files (*.csv)</source>
         <translation>CSV files (*.csv)</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="406"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="408"/>
         <source>Save file with list of matrices</source>
         <translation>Save file with list of matrices</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="433"/>
-        <source>Select directory with frequency or weight matrices</source>
-        <translation>Select directory with frequency or weight matrices</translation>
+        <location filename="../src/PWMSearchDialogController.cpp" line="435"/>
+        <source>Select folder with frequency or weight matrices</source>
+        <translation>Select folder with frequency or weight matrices</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="585"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="587"/>
         <source>Reverse complement strand</source>
         <translation>Reverse complement strand</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="585"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="587"/>
         <source>Direct strand</source>
         <translation>Direct strand</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="276"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="278"/>
         <source>Zero length or corrupted model</source>
         <translation>Zero length or corrupted model</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="112"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="113"/>
         <source>Add to queue</source>
         <translation>Add to queue</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="113"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="114"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="481"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="483"/>
         <source>Range is too small</source>
         <translation>Range is too small</translation>
     </message>
@@ -1024,28 +1024,28 @@ Maybe model data is not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="458"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="465"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="453"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="460"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="474"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="469"/>
         <source>Can't convert mononucleotide matrix to dinucleotide one</source>
         <translation>Can't convert mononucleotide matrix to dinucleotide one</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="486"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="481"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Sequences in alignment have various lengths</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="490"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="485"/>
         <source>Alignment is empty</source>
         <translation>Alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="494"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="489"/>
         <source>Alignment is not nucleic</source>
         <translation>Alignment is not nucleic</translation>
     </message>
@@ -1053,27 +1053,27 @@ Maybe model data is not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMatrixBuildToFileTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="517"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="512"/>
         <source>Build Weight Matrix</source>
         <translation>Build Weight Matrix</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="528"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="523"/>
         <source>Input format error</source>
         <translation>Input format error</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="536"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="531"/>
         <source>Loading alignment</source>
         <translation>Loading alignment</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="568"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="562"/>
         <source>Wrong sequence alphabet</source>
         <translation>Wrong sequence alphabet</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="579"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="572"/>
         <source>No alignments or sequences found</source>
         <translation>No alignments or sequences found</translation>
     </message>
@@ -1135,27 +1135,27 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::QDWMActor</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="113"/>
+        <location filename="../src/WMQuery.cpp" line="108"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="114"/>
+        <location filename="../src/WMQuery.cpp" line="109"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="115"/>
+        <location filename="../src/WMQuery.cpp" line="110"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="126"/>
+        <location filename="../src/WMQuery.cpp" line="121"/>
         <source>Searches TFBS with all profiles from <u>%1</u> <br> Recognizes sites with <u>similarity %2</u>, processes <u>%3</u>.</source>
         <translation>Searches TFBS with all profiles from <u>%1</u> <br> Recognizes sites with <u>similarity %2</u>, processes <u>%3</u>.</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="155"/>
+        <location filename="../src/WMQuery.cpp" line="150"/>
         <source>%1: sequence should be nucleic.</source>
         <translation>%1: sequence should be nucleic.</translation>
     </message>
@@ -1163,8 +1163,8 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::ViewMatrixDialogController</name>
     <message>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="173"/>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="187"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="164"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="178"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
@@ -1172,7 +1172,7 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::WMQDTask</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="53"/>
+        <location filename="../src/WMQuery.cpp" line="48"/>
         <source>Weight matrix query</source>
         <translation>Weight matrix query</translation>
     </message>
@@ -1188,40 +1188,40 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::WeightMatrixIO</name>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="58"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="54"/>
         <source>Frequency and weight matrices</source>
         <translation>Frequency and weight matrices</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="62"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="58"/>
         <source>Frequency matrices</source>
         <translation>Frequency matrices</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="66"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="62"/>
         <source>Weight matrices</source>
         <translation>Weight matrices</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="118"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="225"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="114"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="221"/>
         <source>Error parsing settings line %1</source>
         <translation>Error parsing settings line %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="126"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="234"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="122"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="230"/>
         <source>Error parsing value %1</source>
         <translation>Error parsing value %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="130"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="126"/>
         <source>Unexpected negative frequency value %1</source>
         <translation>Unexpected negative frequency value %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="144"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="247"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="140"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="243"/>
         <source>Incorrect size of weight matrix: %1</source>
         <translation>Incorrect size of weight matrix: %1</translation>
     </message>
diff --git a/src/plugins/weight_matrix/transl/russian.ts b/src/plugins/weight_matrix/transl/russian.ts
index 5cdc625..680ff64 100644
--- a/src/plugins/weight_matrix/transl/russian.ts
+++ b/src/plugins/weight_matrix/transl/russian.ts
@@ -78,7 +78,7 @@
         <translation>Весовой алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="82"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="81"/>
         <source>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</source>
         <translation>Различные весовые алгоритмы применяют разные функции для построения весовых матриц. Это позволяет добиться большей точности на разных наборах входных данных. Алгоритмы Log-odds, NLG и Match чувствительны к матрица с нулевыми ячейками, поэтому некоторые из них могут не работать на таких матрицах.</translation>
     </message>
@@ -220,8 +220,8 @@
         <translation>Статус</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="188"/>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="85"/>
+        <location filename="../src/WMQuery.cpp" line="183"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="82"/>
         <source>Minimum score to detect transcription factor binding site</source>
         <translation>Минимальный скор распознавания сайта связывания транскрипционного фактора</translation>
     </message>
@@ -229,27 +229,27 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="186"/>
+        <location filename="../src/WMQuery.cpp" line="181"/>
         <source>Searches the sequence for transcription factor binding sites significantly similar to the specified weight matrix.</source>
         <translation>Ищет последовательность для сайтов связывания транскрипционного фактора в соответствии с указанной весовой матрицей.</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="185"/>
+        <location filename="../src/WMQuery.cpp" line="180"/>
         <source>Weight Matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="188"/>
+        <location filename="../src/WMQuery.cpp" line="183"/>
         <source>Min score</source>
         <translation>Мин. скор</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="189"/>
+        <location filename="../src/WMQuery.cpp" line="184"/>
         <source>Matrix</source>
         <translation>Матрица</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="189"/>
+        <location filename="../src/WMQuery.cpp" line="184"/>
         <source>Path to profile</source>
         <translation>Путь до матрицы</translation>
     </message>
@@ -318,7 +318,7 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixBuildPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="210"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="208"/>
         <source>For each MSA from <u>%1</u>, build Frequency Matrix.</source>
         <translation>Для каждого MSA из <u>%1</u>, строится весовая матрица.</translation>
     </message>
@@ -326,50 +326,50 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixBuildWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="172"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="170"/>
         <source>Input alignment</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="173"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="171"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Введите выравнивание для построения статистической модели.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="177"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="175"/>
         <source>Frequency matrix</source>
         <translation>Частотная матрица</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="178"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="176"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Итоговая матрица для заданного ССТФ.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="190"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="188"/>
         <source>Build Frequency Matrix</source>
         <translation>Построение частотной матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="191"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="189"/>
         <source>Builds frequency matrix. Frequency matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Построение частотной матрицы. Частотные матрицы используются для вероятностного распознавания сайтов связывания транскрипционных факторов.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="197"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="195"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Мононуклеотидная</translation>
+        <translation>Мононуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="198"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="196"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Динуклеотидная</translation>
+        <translation>Динуклеотидная</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::PFMatrixConvertPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="314"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="311"/>
         <source>For each frequency matrix from <u>%1</u>, build weight matrix.</source>
         <translation>Для каждой частотной матрицы из <u>%1</u>, построить весовую матрицу.</translation>
     </message>
@@ -377,44 +377,44 @@
 <context>
     <name>U2::LocalWorkflow::PFMatrixConvertWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="267"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="264"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="263"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="260"/>
         <source>Frequency matrix to convert.</source>
         <translation>Частотная матрица для конвертации.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="262"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="259"/>
         <source>Frequency matrix</source>
         <translation>Частотная матрица</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="268"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="265"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Итоговая матрица для заданного ССТФ.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="285"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="282"/>
         <source>Convert Frequency Matrix</source>
         <translation>Преобразование частотной матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="286"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="283"/>
         <source>Converts frequency matrix to weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Преобразование частотной матрицы в весовую. Весовые матрицы используются для вероятностного распознавания сайтов связывания транскрипционных факторов.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="301"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="298"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Мононуклеотидная</translation>
+        <translation>Мононуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="302"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="299"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Динуклеотидная</translation>
+        <translation>Динуклеотидная</translation>
     </message>
 </context>
 <context>
@@ -457,7 +457,7 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixBuildPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="120"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="119"/>
         <source>For each MSA from <u>%1</u>, build weight matrix.</source>
         <translation>Для каждого MSA из <u>%1</u>, строится весовая матрица.</translation>
     </message>
@@ -465,67 +465,67 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixBuildWorker</name>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="68"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="67"/>
         <source>Input alignment</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="69"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="68"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Введите выравнивание для построения статистической модели.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="73"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="72"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="73"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="72"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Итоговая матрица для заданного ССТФ.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="81"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="276"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="80"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="273"/>
         <source>Weight algorithm</source>
         <translation>Весовой алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="87"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="186"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="281"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="86"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="184"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="278"/>
         <source>Matrix type</source>
         <translation>Тип матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="87"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="186"/>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="281"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="86"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="184"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="278"/>
         <source>Dinucleic matrices are more detailed, while mononucleic one are more useful for small input data sets.</source>
         <translation>Динуклеотидные матрицы более детальные, а мононуклеотидные более используемы для маленьких наборов данных.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="91"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="90"/>
         <source>Build Weight Matrix</source>
         <translation>Построение весовой матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="92"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="91"/>
         <source>Builds weight matrix. Weight matrices are used for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Построение весовой матрицы. Весовые матрицы используются для вероятностного распознавания сайтов связывания транскрипционных факторов.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="107"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="106"/>
         <source>Mononucleic</source>
-        <translation type="unfinished">Мононуклеотидная</translation>
+        <translation>Мононуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="108"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="107"/>
         <source>Dinucleic</source>
-        <translation type="unfinished">Динуклеотидная</translation>
+        <translation>Динуклеотидная</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixBuildWorker.cpp" line="276"/>
+        <location filename="../src/WeightMatrixBuildWorker.cpp" line="273"/>
         <source>Different weight algorithms uses different functions to build weight matrices. It allows us to get better precision on different data sets. Log-odds, NLG and Match algorithms are sensitive to input matrices with zero values, so some of them may not work on those matrices.</source>
         <translation>Различные весовые алгоритмы применяют разные функции для построения весовых матриц. Это позволяет добиться большей точности на разных наборах входных данных. Алгоритмы Log-odds, NLG и Match чувствительны к матрица с нулевыми ячейками, поэтому некоторые из них могут не работать на таких матрицах.</translation>
     </message>
@@ -549,22 +549,22 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixSearchPrompter</name>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="133"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="130"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="134"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="131"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>Для каждой последовательности из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="135"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="132"/>
         <source>with all profiles provided by <u>%1</u>,</source>
         <translation>со всеми матрицами, предоставленными <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="148"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="145"/>
         <source>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 ищет сайты свазывания транскрипционных факторов (ССТФ) %2. <br>Распознаёт сайты со <u>сходством %3%</u>, производит <u>%4</u>. <br>Выводит список найденных регионов в виде аннотаций <u>%5</u>.</translation>
     </message>
@@ -572,87 +572,87 @@
 <context>
     <name>U2::LocalWorkflow::PWMatrixSearchWorker</name>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="63"/>
         <source>Weight matrix</source>
         <translation>Весовая матрица</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="63"/>
         <source>Profile data to search with.</source>
         <translation>Матрицы для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="67"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="64"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="67"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="64"/>
         <source>Input nucleotide sequence to search in.</source>
         <translation>Входная нуклеотидная последовательность для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="68"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="65"/>
         <source>Weight matrix annotations</source>
         <translation>Аннотации весовых матриц</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="69"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="66"/>
         <source>Annotations marking found TFBS sites.</source>
         <translation>Аннотации, отмечающие найденные ССТФ.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="82"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="79"/>
         <source>Result annotation</source>
         <translation>Итоговая аннотация</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="83"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="80"/>
         <source>Annotation name for marking found regions.</source>
         <translation>Имя аннотации для обозначения найденных регионов.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="84"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="81"/>
         <source>Min score</source>
         <translation>Мин. скор</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="92"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="89"/>
         <source>Search for TFBS with Weight Matrix</source>
         <translation>Поиск сайтов связывания ТФ с помощью весовой матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="93"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="90"/>
         <source>Searches each input sequence for transcription factor binding sites significantly similar to specified weight matrices. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</source>
         <translation>Производит в каждой входной последовательности поиск сайтов связывания транскрипционных факторов, заданных весовыми матрицами. В случае, если предоставлено несколько матриц, проводится поиск по каждой матрице, результаты объединяются в набор аннотаций для каждой последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="142"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="139"/>
         <source>both strands</source>
         <translation>все</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="143"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="140"/>
         <source>direct strand</source>
         <translation>только прямые</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="144"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="141"/>
         <source>complement strand</source>
         <translation>только комплементарные</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="225"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="222"/>
         <source>Find TFBS in %1</source>
         <translation>Поиск ССТФ в %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="229"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="226"/>
         <source>Bad sequence supplied to Weight Matrix Search: %1</source>
         <translation>Поиску по весовым матрицам предоставлена неверная последовательность: %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixSearchWorker.cpp" line="251"/>
+        <location filename="../src/WeightMatrixSearchWorker.cpp" line="248"/>
         <source>Found %1 TFBS</source>
         <translation>Найдено %1 ССТФ</translation>
     </message>
@@ -681,8 +681,8 @@
 <context>
     <name>U2::MatrixViewController</name>
     <message>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="203"/>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="211"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="194"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="202"/>
         <source>Matrix viewer</source>
         <translation>Просмотр матрицы</translation>
     </message>
@@ -690,27 +690,27 @@
 <context>
     <name>U2::PFMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="334"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="332"/>
         <source>Build Frequency Matrix</source>
         <translation>Построить частотную матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="342"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="340"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Последовательности в выравнивании имеют разную длину</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="346"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="344"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание пусто</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="350"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="348"/>
         <source>Alignment is not nucleic</source>
         <translation>Неправильный алфавит выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="353"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="351"/>
         <source>Calculating frequencies of nucleotids</source>
         <translation>Подсчёт частотной статистики</translation>
     </message>
@@ -718,27 +718,27 @@
 <context>
     <name>U2::PFMatrixBuildToFileTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="367"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="365"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="378"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="376"/>
         <source>Input format error</source>
         <translation>Неверный входной формат</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="403"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="401"/>
         <source>Loading alignment</source>
         <translation>Загрузка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="436"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="432"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="446"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="441"/>
         <source>No alignments or sequences found</source>
         <translation>Не выбрано ни одного выравнивания или последовательности</translation>
     </message>
@@ -805,29 +805,29 @@ Maybe model data are not enough for selected algorithm</translation>
         <translation>Выберите файл с выравниванием</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="148"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="147"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="289"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="287"/>
         <source>Select file to save frequency matrix to...</source>
         <translation>Выберите файл для сохранения частотной матрицы...</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="292"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="310"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="290"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="308"/>
         <source>Frequency matrices</source>
-        <translation type="unfinished">Частотные матрицы</translation>
+        <translation>Частотные матрицы</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="293"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="311"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="291"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="309"/>
         <source>Weight matrices</source>
-        <translation type="unfinished">Весовые матрицы</translation>
+        <translation>Весовые матрицы</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="307"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="305"/>
         <source>Select file to save weight matrix to...</source>
         <translation>Выберите файл для сохранения весовой матрицы...</translation>
     </message>
@@ -842,28 +842,28 @@ Do you want to write over this file?</source>
 Вы хотите переписать его?</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="210"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="208"/>
         <source>Illegal input file name</source>
         <translation>Неправильное имя входного файла</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="217"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="215"/>
         <source>Illegal output file name</source>
         <translation>Неправильное имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="247"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="245"/>
         <source>Counting frequency statistics</source>
         <translation>Подсчёт частотной статистики</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="250"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="248"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
         <location filename="../src/PWMBuildDialogController.cpp" line="69"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="251"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="249"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -873,38 +873,38 @@ Do you want to write over this file?</source>
         <translation>Невозможно распознать формат файла. Фалы должны быть в одном из поддерживаемых форматов: в виде множественного выравнивания или в формате последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="140"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="139"/>
         <source>There are no sequences in the file.</source>
         <translation>В файле нет последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="263"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="261"/>
         <source>Build finished with errors: %1</source>
         <translation>Построение завершено с ошибками: %1</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="266"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="264"/>
         <source>Build canceled</source>
         <translation>Построение отменено</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="269"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="267"/>
         <source>Build finished successfuly</source>
         <translation>Построение завершено успешно</translation>
     </message>
     <message>
         <location filename="../src/PWMBuildDialogController.cpp" line="68"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="272"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="270"/>
         <source>Start</source>
         <translation>Старт</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="273"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="271"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="279"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="277"/>
         <source>Running state %1 progress %2%</source>
         <translation>Состояние выполнения %1 прогресс %2%</translation>
     </message>
@@ -912,12 +912,12 @@ Do you want to write over this file?</source>
 <context>
     <name>U2::PWMJASPARDialogController</name>
     <message>
-        <location filename="../src/PWMJASPARDialogController.cpp" line="42"/>
+        <location filename="../src/PWMJASPARDialogController.cpp" line="37"/>
         <source>Select</source>
         <translation>Выбрать</translation>
     </message>
     <message>
-        <location filename="../src/PWMJASPARDialogController.cpp" line="43"/>
+        <location filename="../src/PWMJASPARDialogController.cpp" line="38"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -925,98 +925,98 @@ Do you want to write over this file?</source>
 <context>
     <name>U2::PWMSearchDialogController</name>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="114"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="183"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="115"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="184"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="183"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="184"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="195"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="196"/>
         <source>Progress %1% </source>
         <translation>Прогресс %1% </translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="197"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="198"/>
         <source>Results found: %1.</source>
         <translation>Результатов найдено: %1.</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="216"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="217"/>
         <source>Select file with frequency or weight matrix</source>
         <translation>Выберите файл с весовой или частотной матрицей</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="291"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="293"/>
         <source>Same model with same parameters already in the search queue</source>
         <translation>Модель с такими же параметрами уже находится в очереди</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="332"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="564"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="334"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="566"/>
         <source>Zero length or corrupted model
 Maybe model data is not enough for selected algorithm</source>
         <translation>Zero length or corrupted model
 Maybe model data is not enough for selected algorithm</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="360"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="471"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="362"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="473"/>
         <source>Model not selected</source>
         <translation>Не выбрана матрица</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="366"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="368"/>
         <source>Load file with list of matrices</source>
         <translation>Загрузить файл со списком матриц</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="366"/>
-        <location filename="../src/PWMSearchDialogController.cpp" line="406"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="368"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="408"/>
         <source>CSV files (*.csv)</source>
         <translation>Файлы CSV (*.csv)</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="406"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="408"/>
         <source>Save file with list of matrices</source>
         <translation>Сохранить файл со списком матриц</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="433"/>
-        <source>Select directory with frequency or weight matrices</source>
+        <location filename="../src/PWMSearchDialogController.cpp" line="435"/>
+        <source>Select folder with frequency or weight matrices</source>
         <translation>Выберите папку с частотными или весовыми матрицами</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="585"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="587"/>
         <source>Reverse complement strand</source>
         <translation>Только комплементарные</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="585"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="587"/>
         <source>Direct strand</source>
         <translation>Только прямые</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="276"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="278"/>
         <source>Zero length or corrupted model</source>
         <translation>Повреждённая матрица либо матрица нулевой длины</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="112"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="113"/>
         <source>Add to queue</source>
         <translation>Добавить в очередь</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="113"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="114"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
-        <location filename="../src/PWMSearchDialogController.cpp" line="481"/>
+        <location filename="../src/PWMSearchDialogController.cpp" line="483"/>
         <source>Range is too small</source>
         <translation>Регион слишком мал</translation>
     </message>
@@ -1024,28 +1024,28 @@ Maybe model data is not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMatrixBuildTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="458"/>
-        <location filename="../src/PWMBuildDialogController.cpp" line="465"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="453"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="460"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="474"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="469"/>
         <source>Can't convert mononucleotide matrix to dinucleotide one</source>
         <translation>Невозможно преобразовать мононуклеотидную матрицу в динуклеотидную</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="486"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="481"/>
         <source>Sequences in alignment have various lengths</source>
         <translation>Последовательности в выравнивании имеют разную длину</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="490"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="485"/>
         <source>Alignment is empty</source>
         <translation>Выравнивание пусто</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="494"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="489"/>
         <source>Alignment is not nucleic</source>
         <translation>Неправильный алфавит выравнивания</translation>
     </message>
@@ -1053,27 +1053,27 @@ Maybe model data is not enough for selected algorithm</translation>
 <context>
     <name>U2::PWMatrixBuildToFileTask</name>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="517"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="512"/>
         <source>Build Weight Matrix</source>
         <translation>Построить весовую матрицу</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="528"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="523"/>
         <source>Input format error</source>
         <translation>Неверный входной формат</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="536"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="531"/>
         <source>Loading alignment</source>
         <translation>Загрузка выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="568"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="562"/>
         <source>Wrong sequence alphabet</source>
         <translation>Неверный алфавит последовательности</translation>
     </message>
     <message>
-        <location filename="../src/PWMBuildDialogController.cpp" line="579"/>
+        <location filename="../src/PWMBuildDialogController.cpp" line="572"/>
         <source>No alignments or sequences found</source>
         <translation>Не выбрано ни одного выравнивания или последовательности</translation>
     </message>
@@ -1135,27 +1135,27 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::QDWMActor</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="113"/>
+        <location filename="../src/WMQuery.cpp" line="108"/>
         <source>both strands</source>
         <translation>все</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="114"/>
+        <location filename="../src/WMQuery.cpp" line="109"/>
         <source>direct strand</source>
         <translation>только прямые</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="115"/>
+        <location filename="../src/WMQuery.cpp" line="110"/>
         <source>complement strand</source>
         <translation>только комплементарные</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="126"/>
+        <location filename="../src/WMQuery.cpp" line="121"/>
         <source>Searches TFBS with all profiles from <u>%1</u> <br> Recognizes sites with <u>similarity %2</u>, processes <u>%3</u>.</source>
         <translation>Ищет сайты связывания транскрипционных факторов (ССТФ) со всеми профайлами <u>%1</u> <br>. Распознаёт сайты со <u>схожестью %2</u>, рассматривает <u>%3</u>.</translation>
     </message>
     <message>
-        <location filename="../src/WMQuery.cpp" line="155"/>
+        <location filename="../src/WMQuery.cpp" line="150"/>
         <source>%1: sequence should be nucleic.</source>
         <translation>%1: последовательность должна быть нуклеотидной.</translation>
     </message>
@@ -1163,8 +1163,8 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::ViewMatrixDialogController</name>
     <message>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="173"/>
-        <location filename="../src/ViewMatrixDialogController.cpp" line="187"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="164"/>
+        <location filename="../src/ViewMatrixDialogController.cpp" line="178"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
@@ -1172,7 +1172,7 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::WMQDTask</name>
     <message>
-        <location filename="../src/WMQuery.cpp" line="53"/>
+        <location filename="../src/WMQuery.cpp" line="48"/>
         <source>Weight matrix query</source>
         <translation>Запрос весовой матрицы</translation>
     </message>
@@ -1188,40 +1188,40 @@ Maybe model data are not enough for selected algorithm</translation>
 <context>
     <name>U2::WeightMatrixIO</name>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="58"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="54"/>
         <source>Frequency and weight matrices</source>
         <translation>Частотные и весовые матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="62"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="58"/>
         <source>Frequency matrices</source>
         <translation>Частотные матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="66"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="62"/>
         <source>Weight matrices</source>
         <translation>Весовые матрицы</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="118"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="225"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="114"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="221"/>
         <source>Error parsing settings line %1</source>
         <translation>Ошибка при чтении строки %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="126"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="234"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="122"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="230"/>
         <source>Error parsing value %1</source>
         <translation>Ошибка при чтении значения %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="130"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="126"/>
         <source>Unexpected negative frequency value %1</source>
         <translation>Отрицательное значение частоты: %1</translation>
     </message>
     <message>
-        <location filename="../src/WeightMatrixIO.cpp" line="144"/>
-        <location filename="../src/WeightMatrixIO.cpp" line="247"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="140"/>
+        <location filename="../src/WeightMatrixIO.cpp" line="243"/>
         <source>Incorrect size of weight matrix: %1</source>
         <translation>Неправильный размер весовой матрицы: %1</translation>
     </message>
diff --git a/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.cpp b/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.cpp
index bbeaf52..2afc655 100644
--- a/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.cpp
+++ b/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include "ActorCfgModel.h"
+#include <U2Core/U2SafePoints.h>
 
 #include "ActorCfgFilterProxyModel.h"
+#include "ActorCfgModel.h"
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.h b/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.h
index e37d467..39b036a 100644
--- a/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.h
+++ b/src/plugins/workflow_designer/src/ActorCfgFilterProxyModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/ActorCfgModel.cpp b/src/plugins/workflow_designer/src/ActorCfgModel.cpp
index 3da6e77..b9bb663 100644
--- a/src/plugins/workflow_designer/src/ActorCfgModel.cpp
+++ b/src/plugins/workflow_designer/src/ActorCfgModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDebug>
+#include <QDebug>
 
 #include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/Datatype.h>
+#include <U2Lang/IntegralBusType.h>
 #include <U2Lang/URLAttribute.h>
-#include <U2Lang/WorkflowUtils.h>
 #include <U2Lang/WorkflowSettings.h>
-#include <U2Lang/IntegralBusType.h>
-#include <U2Lang/Datatype.h>
-#include <U2Lang/BaseTypes.h>
+#include <U2Lang/WorkflowUtils.h>
 
-#include "WorkflowEditorDelegates.h"
-#include "WorkflowEditor.h"
 #include "ActorCfgModel.h"
+#include "WorkflowEditor.h"
+#include "WorkflowEditorDelegates.h"
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/ActorCfgModel.h b/src/plugins/workflow_designer/src/ActorCfgModel.h
index 7777e43..c8d1aa7 100644
--- a/src/plugins/workflow_designer/src/ActorCfgModel.h
+++ b/src/plugins/workflow_designer/src/ActorCfgModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,11 +22,11 @@
 #ifndef _U2_ACTOR_CFG_H_
 #define _U2_ACTOR_CFG_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QList>
-#include <QtCore/QPair>
-#include <QtCore/QString>
-#include <QtCore/QAbstractTableModel>
+#include <QObject>
+#include <QList>
+#include <QPair>
+#include <QString>
+#include <QAbstractTableModel>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/IntegralBusModel.h>
diff --git a/src/plugins/workflow_designer/src/BreakpointManagerView.cpp b/src/plugins/workflow_designer/src/BreakpointManagerView.cpp
index b0092ce..207270f 100644
--- a/src/plugins/workflow_designer/src/BreakpointManagerView.cpp
+++ b/src/plugins/workflow_designer/src/BreakpointManagerView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,13 +28,14 @@
 #include <QTreeWidget>
 #include <QVBoxLayout>
 
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/BreakpointHitCountDialog.h>
 #include <U2Designer/DelegateEditors.h>
 #include <U2Designer/EditBreakpointLabelsDialog.h>
 #include <U2Designer/NewBreakpointDialog.h>
 
-#include <U2Core/QObjectScopedPointer.h>
-
 #include <U2Lang/WorkflowDebugStatus.h>
 #include <U2Lang/WorkflowSettings.h>
 
diff --git a/src/plugins/workflow_designer/src/BreakpointManagerView.h b/src/plugins/workflow_designer/src/BreakpointManagerView.h
index efa7a76..7526999 100644
--- a/src/plugins/workflow_designer/src/BreakpointManagerView.h
+++ b/src/plugins/workflow_designer/src/BreakpointManagerView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_BREAKPOINT_MANAGER_VIEW_H_
 #define _U2_BREAKPOINT_MANAGER_VIEW_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#else
-#include <QtWidgets/QWidget>
-#endif
+#include <QWidget>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/Schema.h>
diff --git a/src/plugins/workflow_designer/src/ChooseItemDialog.cpp b/src/plugins/workflow_designer/src/ChooseItemDialog.cpp
index a5d2285..b4acff8 100644
--- a/src/plugins/workflow_designer/src/ChooseItemDialog.cpp
+++ b/src/plugins/workflow_designer/src/ChooseItemDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,14 +23,18 @@
 #include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Lang/WorkflowUtils.h>
+#include <QPushButton>
 
 #include "ChooseItemDialog.h"
 
+
 namespace U2 {
 
 ChooseItemDialog::ChooseItemDialog(QWidget* p) : QDialog(p)
 {
     setupUi(this);
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
     connect(listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), SLOT(accept()));
 
 }
diff --git a/src/plugins/workflow_designer/src/ChooseItemDialog.h b/src/plugins/workflow_designer/src/ChooseItemDialog.h
index c1f1cea..06f14ab 100644
--- a/src/plugins/workflow_designer/src/ChooseItemDialog.h
+++ b/src/plugins/workflow_designer/src/ChooseItemDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/CreateScriptWorker.cpp b/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
index b0a3db4..feacaba 100644
--- a/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
+++ b/src/plugins/workflow_designer/src/CreateScriptWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -300,7 +300,7 @@ public:
         if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
             switch(section) {
                 case 0: return CreateScriptElementDialog::tr("Name");
-                case 1: return CreateScriptElementDialog::tr("type");
+                case 1: return CreateScriptElementDialog::tr("Type");
                 default: return QVariant();
             }
         }
@@ -358,7 +358,9 @@ private:
 
 CreateScriptElementDialog::CreateScriptElementDialog(QWidget *p, ActorPrototype* proto): QDialog(p), editing(false) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223341");
+    new HelpButton(this, buttonBox, "20875270");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     inputList->setModel(new CfgListModel());
     inputList->setItemDelegate(new ProxyDelegate());
@@ -596,7 +598,7 @@ void CreateScriptElementDialog::changeDirectoryForActors() {
 
         QDir dir(url);
         if(!dir.exists()) {
-            //coreLog.info(tr("There isn't directory with users workflow elements"));
+            //coreLog.info(tr("There isn't folder with users workflow elements"));
             return;
         }
         dir.setNameFilters(QStringList() << "*.usa");
diff --git a/src/plugins/workflow_designer/src/CreateScriptWorker.h b/src/plugins/workflow_designer/src/CreateScriptWorker.h
index 7d3fc0b..8259cec 100644
--- a/src/plugins/workflow_designer/src/CreateScriptWorker.h
+++ b/src/plugins/workflow_designer/src/CreateScriptWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,17 +22,18 @@
 #ifndef _U2_CREATE_SCRIPT_WORKER_DIALOG_H_
 #define _U2_CREATE_SCRIPT_WORKER_DIALOG_H_
 
-#include "ui_CreateScriptBlockDialog.h"
-#include <U2Lang/ActorModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/BaseTypes.h>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/Settings.h>
 
-#include <QtXml/qdom.h>
+#include <U2Designer/DelegateEditors.h>
+#include <U2Lang/ActorModel.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "ui_CreateScriptBlockDialog.h"
 
 namespace U2 {
 using namespace Workflow;
diff --git a/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp b/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
index 8b88592..36a79bd 100644
--- a/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
+++ b/src/plugins/workflow_designer/src/DashboardsManagerDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -45,7 +45,9 @@ DashboardsManagerDialog::DashboardsManagerDialog(ScanDashboardsDirTask *_task, Q
 : QDialog(parent), task(_task)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223339");
+    new HelpButton(this, buttonBox, "20875268");
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
 
     setupList();
 
@@ -57,13 +59,9 @@ DashboardsManagerDialog::DashboardsManagerDialog(ScanDashboardsDirTask *_task, Q
 
 void DashboardsManagerDialog::setupList() {
     QStringList header;
-    header << tr("Name") << tr("Directory");
+    header << tr("Name") << tr("Folder");
     listWidget->setHeaderLabels(header);
-#if (QT_VERSION < 0x050000) //Qt 5
-    listWidget->header()->setMovable(false);
-#else
     listWidget->header()->setSectionsMovable(false);
-#endif
 
     const int defaultNameColumnWidth = 250;
     listWidget->header()->resizeSection(0, defaultNameColumnWidth);
diff --git a/src/plugins/workflow_designer/src/DashboardsManagerDialog.h b/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
index 3b64520..e777f13 100644
--- a/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
+++ b/src/plugins/workflow_designer/src/DashboardsManagerDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/EstimationDialog.cpp b/src/plugins/workflow_designer/src/EstimationDialog.cpp
index 355f8db..4a33051 100644
--- a/src/plugins/workflow_designer/src/EstimationDialog.cpp
+++ b/src/plugins/workflow_designer/src/EstimationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/EstimationDialog.h b/src/plugins/workflow_designer/src/EstimationDialog.h
index aaa1b5d..e36569f 100644
--- a/src/plugins/workflow_designer/src/EstimationDialog.h
+++ b/src/plugins/workflow_designer/src/EstimationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.cpp b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.cpp
index f812820..0d94fe5 100644
--- a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.cpp
+++ b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,8 @@ GalaxyConfigConfigurationDialogImpl::GalaxyConfigConfigurationDialogImpl( const
     setupUi(this);
 
     ugenePathLineEdit->setText( QApplication::applicationDirPath() );
-    galaxyPathLineEdit->setText( "Set Galaxy directory" );
-    destinationPathLineEdit->setText( "Set destination directory" );
+    galaxyPathLineEdit->setText( "Set Galaxy folder" );
+    destinationPathLineEdit->setText( "Set destination folder" );
 
     connect( cancelPushButton, SIGNAL(clicked()), SLOT( reject() ) );
     connect( createPushButton, SIGNAL(clicked()), SLOT( accept() ) );
@@ -48,21 +48,21 @@ GalaxyConfigConfigurationDialogImpl::GalaxyConfigConfigurationDialogImpl( const
 }
 
 void GalaxyConfigConfigurationDialogImpl::sl_ugeneToolButtonClicked( ) {
-    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set UGENE directory" ), ugenePathLineEdit->text() );
+    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set UGENE folder" ), ugenePathLineEdit->text() );
     if( !newDirectoryPath.isEmpty() ) {
         ugenePathLineEdit->setText( newDirectoryPath );
     }
 }
 
 void GalaxyConfigConfigurationDialogImpl::sl_galaxyToolButtonClicked( ) {
-    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set Galaxy directory" ), galaxyPathLineEdit->text() );
+    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set Galaxy folder" ), galaxyPathLineEdit->text() );
     if( !newDirectoryPath.isEmpty() ) {
         galaxyPathLineEdit->setText( newDirectoryPath );
     }
 }
 
 void GalaxyConfigConfigurationDialogImpl::sl_destinationToolButtonClicked( ) {
-    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set destination directory" ), destinationPathLineEdit->text() );
+    QString newDirectoryPath = U2FileDialog::getExistingDirectory(this, tr( "Set destination folder" ), destinationPathLineEdit->text() );
     if( !newDirectoryPath.isEmpty() ) {
         destinationPathLineEdit->setText( newDirectoryPath );
     }
diff --git a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
index c3f6efc..05ff694 100644
--- a/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
+++ b/src/plugins/workflow_designer/src/GalaxyConfigConfigurationDialogImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp b/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
index 9ba9400..ad05d62 100644
--- a/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
+++ b/src/plugins/workflow_designer/src/ImportSchemaDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@ namespace U2 {
 
 ImportSchemaDialog::ImportSchemaDialog(QWidget* p) : QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223353");
+    new HelpButton(this, buttonBox, "20875282");
 }
 
 void ImportSchemaDialog::accept() {
diff --git a/src/plugins/workflow_designer/src/ImportSchemaDialog.h b/src/plugins/workflow_designer/src/ImportSchemaDialog.h
index 2cb455a..4eb6053 100644
--- a/src/plugins/workflow_designer/src/ImportSchemaDialog.h
+++ b/src/plugins/workflow_designer/src/ImportSchemaDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/InvestigationDataModel.cpp b/src/plugins/workflow_designer/src/InvestigationDataModel.cpp
index c8a847f..6785a70 100644
--- a/src/plugins/workflow_designer/src/InvestigationDataModel.cpp
+++ b/src/plugins/workflow_designer/src/InvestigationDataModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/InvestigationDataModel.h b/src/plugins/workflow_designer/src/InvestigationDataModel.h
index 8ce1a44..9e2cb3c 100644
--- a/src/plugins/workflow_designer/src/InvestigationDataModel.h
+++ b/src/plugins/workflow_designer/src/InvestigationDataModel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,6 +23,7 @@
 #define _U2_INVESTIGATION_DATA_MODEL_H_
 
 #include <QAbstractTableModel>
+#include <QBitArray>
 
 #include <U2Lang/Port.h>
 #include <U2Lang/WorkflowInvestigationData.h>
diff --git a/src/plugins/workflow_designer/src/ItemViewStyle.cpp b/src/plugins/workflow_designer/src/ItemViewStyle.cpp
index e082c2b..e5dc764 100644
--- a/src/plugins/workflow_designer/src/ItemViewStyle.cpp
+++ b/src/plugins/workflow_designer/src/ItemViewStyle.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,36 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#include <qmath.h>
-#include <QtGui/QBitmap>
-#include <QtGui/QPainter>
-#include <QtGui/QRadialGradient>
-#include <QtGui/QTextDocument>
-#include <QtGui/QAbstractTextDocumentLayout>
-
-#include <QtXml/QDomDocument>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsTextItem>
-#include <QtGui/QGraphicsSimpleTextItem>
-#include <QtGui/QStyleOptionGraphicsItem>
-#include <QtGui/QGraphicsView>
-#include <QtGui/QColorDialog>
-#include <QtGui/QFontDialog>
-#include <QtGui/QGraphicsSceneMouseEvent>
-#else
-#include <QtWidgets/QGraphicsTextItem>
-#include <QtWidgets/QGraphicsSimpleTextItem>
-#include <QtWidgets/QStyleOptionGraphicsItem>
-#include <QtWidgets/QGraphicsView>
-#include <QtWidgets/QColorDialog>
-#include <QtWidgets/QFontDialog>
-#include <QtWidgets/QGraphicsSceneMouseEvent>
-#endif
+#include <QAbstractTextDocumentLayout>
+#include <QBitmap>
+#include <QColorDialog>
+#include <QDomDocument>
+#include <QFontDialog>
+#include <QGraphicsSceneMouseEvent>
+#include <QGraphicsSimpleTextItem>
+#include <QGraphicsTextItem>
+#include <QGraphicsView>
+#include <QPainter>
+#include <QRadialGradient>
+#include <QStyleOptionGraphicsItem>
+#include <QTextDocument>
+#include <QtMath>
 
 #include <U2Core/Log.h>
+#include <U2Core/QVariantUtils.h>
+
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/WorkflowSettings.h>
-#include <U2Core/QVariantUtils.h>
 
 #include "WorkflowViewItems.h"
 #include "WorkflowViewController.h"
@@ -176,11 +166,7 @@ void SimpleProcStyle::paint(QPainter *painter,
     painter->save();
     QTextDocument d;
     d.setDefaultFont(defFont);
-#if (QT_VERSION < 0x050000) //Qt 5
-    d.setHtml("<center>" + Qt::escape(owner->getProcess()->getLabel()) + "</center>");
-#else
     d.setHtml("<center>" + owner->getProcess()->getLabel().toHtmlEscaped() + "</center>");
-#endif
     d.setTextWidth(R*2);
     //d.setDefaultTextOption(QTextOption(Qt::AlignHCenter));
     painter->translate(-d.size().width()/2, -d.size().height()/2);
diff --git a/src/plugins/workflow_designer/src/ItemViewStyle.h b/src/plugins/workflow_designer/src/ItemViewStyle.h
index cd58cac..5f05fff 100644
--- a/src/plugins/workflow_designer/src/ItemViewStyle.h
+++ b/src/plugins/workflow_designer/src/ItemViewStyle.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,16 +22,10 @@
 #ifndef _U2_WORKFLOW_ITEM_STYLE_H_
 #define _U2_WORKFLOW_ITEM_STYLE_H_
 
-#include <QtGui/QTextDocument>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <QTextDocument>
+#include <QAction>
+#include <QGraphicsScene>
+#include <QGraphicsItem>
 
 class QDomElement;
 
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
index 46860f8..8e55e3b 100644
--- a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
+++ b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,21 +26,18 @@
 
 #include "PortAliasesConfigurationDialog.h"
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
-
+#include <QPushButton>
 
 namespace U2 {
 namespace Workflow {
 
 PortAliasesConfigurationDialog::PortAliasesConfigurationDialog( const Schema & schema, QWidget * p )
-: QDialog(p), portNameMaxSz(0), currentRow(-1) {
+: QDialog(p), currentRow(-1) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223353");
+    new HelpButton(this, buttonBox, "20875282");
 
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
 
@@ -52,11 +49,7 @@ PortAliasesConfigurationDialog::PortAliasesConfigurationDialog( const Schema & s
     okPushButton->setDefault(true);
     portAliasesTableWidget->verticalHeader()->hide();
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    portAliasesTableWidget->horizontalHeader()->setClickable(false);
-#else
     portAliasesTableWidget->horizontalHeader()->setSectionsClickable(false);
-#endif
     portAliasesTableWidget->horizontalHeader()->setStretchLastSection( true );
 
     foreach (Actor *actor, schema.getProcesses()) {
@@ -74,8 +67,6 @@ PortAliasesConfigurationDialog::PortAliasesConfigurationDialog( const Schema & s
             QListWidgetItem *item = new QListWidgetItem(itemName);
             portListWidget->insertItem(pos, item);
             portListMap.insert(pos, port);
-            int pointSz = item->font().pointSize();
-            portNameMaxSz = qMax(pointSz * itemName.size(), portNameMaxSz)*4/5;
         }
     }
     if (portListMap.isEmpty()) {
@@ -132,13 +123,6 @@ void PortAliasesConfigurationDialog::sl_portSelected(int row) {
     portAliasEdit->setText(model.ports.value(currentPort).first);
     portDescriptionEdit->setText(model.ports.value(currentPort).second);
 
-    portAliasesTableWidget->resizeColumnToContents(0);
-    if(portNameMaxSz > 0 && portNameMaxSz < splitter->width()) {
-        QList<int> szs;
-        szs << portNameMaxSz;
-        szs << splitter->width() - portNameMaxSz;
-        splitter->setSizes(szs);
-    }
 }
 
 void PortAliasesConfigurationDialog::sl_onDataChange(int row, int col) {
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
index 01b5573..f13706d 100644
--- a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
+++ b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -58,7 +58,6 @@ private slots:
 private:
     PortAliasesCfgDlgModel      model;
     QMap<int, Port*>            portListMap; // pairs (row, port)
-    int                         portNameMaxSz;
     int                         currentRow;
 
     void accept();
diff --git a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui
index 9e53eb8..221b78c 100644
--- a/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui
+++ b/src/plugins/workflow_designer/src/PortAliasesConfigurationDialog.ui
@@ -13,6 +13,12 @@
     <height>404</height>
    </rect>
   </property>
+  <property name="minimumSize">
+   <size>
+    <width>878</width>
+    <height>404</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Configure Port and Slot Aliases</string>
   </property>
@@ -21,7 +27,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0,0">
    <property name="sizeConstraint">
-    <enum>QLayout::SetMinAndMaxSize</enum>
+    <enum>QLayout::SetDefaultConstraint</enum>
    </property>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
@@ -67,14 +73,20 @@
       </property>
      </widget>
      <widget class="QTableWidget" name="portAliasesTableWidget">
+      <attribute name="horizontalHeaderDefaultSectionSize">
+       <number>200</number>
+      </attribute>
+      <attribute name="horizontalHeaderMinimumSectionSize">
+       <number>200</number>
+      </attribute>
       <column>
        <property name="text">
-        <string>Available slot</string>
+        <string>Slot</string>
        </property>
       </column>
       <column>
        <property name="text">
-        <string>Slot alias</string>
+        <string>Alias</string>
        </property>
       </column>
      </widget>
diff --git a/src/plugins/workflow_designer/src/SampleActionsManager.cpp b/src/plugins/workflow_designer/src/SampleActionsManager.cpp
index f07fdab..d7ceb5b 100644
--- a/src/plugins/workflow_designer/src/SampleActionsManager.cpp
+++ b/src/plugins/workflow_designer/src/SampleActionsManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/SampleActionsManager.h b/src/plugins/workflow_designer/src/SampleActionsManager.h
index db3fe5d..e09f7c8 100644
--- a/src/plugins/workflow_designer/src/SampleActionsManager.h
+++ b/src/plugins/workflow_designer/src/SampleActionsManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/SceneSerializer.cpp b/src/plugins/workflow_designer/src/SceneSerializer.cpp
index 28b7d97..9b3dc86 100644
--- a/src/plugins/workflow_designer/src/SceneSerializer.cpp
+++ b/src/plugins/workflow_designer/src/SceneSerializer.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,21 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtXml/qdom.h>
-#include <QtCore/QPointF>
+#include <QDomElement>
+#include <QPointF>
 
 #include <U2Core/Log.h>
+
+#include <U2Core/QVariantUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/WorkflowEnv.h>
-#include <U2Core/QVariantUtils.h>
-#include <U2Lang/WorkflowUtils.h>
 #include <U2Lang/WorkflowSettings.h>
+#include <U2Lang/WorkflowUtils.h>
 
+#include "SceneSerializer.h"
 #include "WorkflowViewController.h"
 #include "WorkflowViewItems.h"
-#include "SceneSerializer.h"
 
 /* TRANSLATOR U2::LocalWorkflow::WorkflowView */
 
diff --git a/src/plugins/workflow_designer/src/SceneSerializer.h b/src/plugins/workflow_designer/src/SceneSerializer.h
index 8b84df8..0792403 100644
--- a/src/plugins/workflow_designer/src/SceneSerializer.h
+++ b/src/plugins/workflow_designer/src/SceneSerializer.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui
index 2be4a18..4fd1499 100644
--- a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui
+++ b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialog.ui
@@ -9,10 +9,16 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>618</width>
-    <height>265</height>
+    <width>794</width>
+    <height>293</height>
    </rect>
   </property>
+  <property name="minimumSize">
+   <size>
+    <width>794</width>
+    <height>293</height>
+   </size>
+  </property>
   <property name="windowTitle">
    <string>Configure Parameter Aliases</string>
   </property>
@@ -64,19 +70,28 @@
       </property>
      </widget>
      <widget class="QTableWidget" name="paramAliasesTableWidget">
+      <property name="sizeAdjustPolicy">
+       <enum>QAbstractScrollArea::AdjustToContents</enum>
+      </property>
+      <attribute name="horizontalHeaderDefaultSectionSize">
+       <number>140</number>
+      </attribute>
+      <attribute name="horizontalHeaderMinimumSectionSize">
+       <number>140</number>
+      </attribute>
       <column>
        <property name="text">
-        <string>Schema parameter</string>
+        <string>Parameter</string>
        </property>
       </column>
       <column>
        <property name="text">
-        <string>Parameter alias</string>
+        <string>Alias</string>
        </property>
       </column>
       <column>
        <property name="text">
-        <string>Help message</string>
+        <string>Description</string>
        </property>
        <property name="toolTip">
         <string/>
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
index 8c6c20a..45420bd 100644
--- a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
+++ b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,21 +24,19 @@
 #include <U2Lang/ActorModel.h>
 #include "SchemaAliasesConfigurationDialogImpl.h"
 #include <U2Gui/HelpButton.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QPushButton>
-#endif
-
+#include <QPushButton>
+#include <QHeaderView>
 
 namespace U2 {
 namespace Workflow {
 
 SchemaAliasesConfigurationDialogImpl::SchemaAliasesConfigurationDialogImpl( const Schema & schema, QWidget * p )
-: QDialog(p), procNameMaxSz(0) {
+: QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223353");
-
+    new HelpButton(this, buttonBox, "20875282");
+    
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     QPushButton* cancelPushButton = buttonBox->button(QDialogButtonBox::Cancel);
     QPushButton* okPushButton = buttonBox->button(QDialogButtonBox::Ok);
 
@@ -47,12 +45,7 @@ SchemaAliasesConfigurationDialogImpl::SchemaAliasesConfigurationDialogImpl( cons
 
     okPushButton->setDefault(true);
     paramAliasesTableWidget->verticalHeader()->hide();
-
-#if (QT_VERSION < 0x050000) //Qt 5
-    paramAliasesTableWidget->horizontalHeader()->setClickable(false);
-#else
     paramAliasesTableWidget->horizontalHeader()->setSectionsClickable(false);
-#endif
     paramAliasesTableWidget->horizontalHeader()->setStretchLastSection( true );
 
     foreach( Actor * actor, schema.getProcesses() ) {
@@ -61,8 +54,6 @@ SchemaAliasesConfigurationDialogImpl::SchemaAliasesConfigurationDialogImpl( cons
         QListWidgetItem * item = new QListWidgetItem( actor->getLabel() );
         procsListWidget->insertItem( pos, item );
         procListMap.insert( pos, actor->getId() );
-        int pointSz = item->font().pointSize();
-        procNameMaxSz = qMax(pointSz * actor->getLabel().size(), procNameMaxSz);
     }
 
     connect( procsListWidget, SIGNAL(currentRowChanged( int )), SLOT(sl_procSelected( int )) );
@@ -155,17 +146,11 @@ void SchemaAliasesConfigurationDialogImpl::sl_procSelected( int row ) {
 
         QTableWidgetItem * helpItem = new QTableWidgetItem(model.help.value(currentActor).value(it.key()));
         paramAliasesTableWidget->setItem(rowInd, 2, helpItem);
+        paramAliasesTableWidget->horizontalHeader()->setStretchLastSection(true);        
 
         rowInd++;
         ++it;
     }
-    paramAliasesTableWidget->resizeColumnToContents(0);
-    if(procNameMaxSz > 0 && procNameMaxSz < splitter->width()) {
-        QList<int> szs;
-        szs << procNameMaxSz;
-        szs << splitter->width() - procNameMaxSz;
-        splitter->setSizes(szs);
-    }
 }
 
 void SchemaAliasesConfigurationDialogImpl::sl_onDataChange( int row, int col ) {
diff --git a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
index 1d1ab6e..6b3cfee 100644
--- a/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
+++ b/src/plugins/workflow_designer/src/SchemaAliasesConfigurationDialogImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -54,7 +54,6 @@ private slots:
 private:
     SchemaAliasesCfgDlgModel    model;
     QMap<int, ActorId>          procListMap; // pairs (row, actorId)
-    int                         procNameMaxSz;
 
 }; // SchemaAliasesConfigurationDialogImpl
 
diff --git a/src/plugins/workflow_designer/src/StartupDialog.cpp b/src/plugins/workflow_designer/src/StartupDialog.cpp
index c859627..05ebf0e 100644
--- a/src/plugins/workflow_designer/src/StartupDialog.cpp
+++ b/src/plugins/workflow_designer/src/StartupDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -36,7 +36,7 @@ StartupDialog::StartupDialog(QWidget *parent)
 : QDialog(parent)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223310");
+    new HelpButton(this, buttonBox, "20875239");
 
     label->setStyleSheet(L10N::infoHintStyleSheet());
 
@@ -62,7 +62,7 @@ void StartupDialog::sl_accepted(){
     }
     QFile file(dir.filePath("ex1.txt"));
     if (!file.open(QIODevice::WriteOnly)){
-        QMessageBox::critical(this, this->windowTitle(), tr("You have no write access to the directory. Please choose another one."));
+        QMessageBox::critical(this, this->windowTitle(), tr("You have no write access to the folder. Please choose another one."));
         return;
     }
     file.close();
diff --git a/src/plugins/workflow_designer/src/StartupDialog.h b/src/plugins/workflow_designer/src/StartupDialog.h
index 4c7d899..c51ce30 100644
--- a/src/plugins/workflow_designer/src/StartupDialog.h
+++ b/src/plugins/workflow_designer/src/StartupDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,7 @@
 
 #include <ui_StartupDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-
+#include <QDialog>
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/TableViewTabKey.cpp b/src/plugins/workflow_designer/src/TableViewTabKey.cpp
index d48af3f..2d0161c 100644
--- a/src/plugins/workflow_designer/src/TableViewTabKey.cpp
+++ b/src/plugins/workflow_designer/src/TableViewTabKey.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QKeyEvent>
+#include <QKeyEvent>
 
 #include "TableViewTabKey.h"
 
diff --git a/src/plugins/workflow_designer/src/TableViewTabKey.h b/src/plugins/workflow_designer/src/TableViewTabKey.h
index 1a70b53..e4445e2 100644
--- a/src/plugins/workflow_designer/src/TableViewTabKey.h
+++ b/src/plugins/workflow_designer/src/TableViewTabKey.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_TABLE_VIEW_TAB_KEY_H_
 #define _U2_TABLE_VIEW_TAB_KEY_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTableView>
-#else
-#include <QtWidgets/QTableView>
-#endif
+#include <QTableView>
 
 namespace U2 {
 class TableViewTabKey : public QTableView
diff --git a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
index 85a0575..4594e24 100644
--- a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,53 +19,44 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDir>
 #include <QMessageBox>
-
-#include "WorkflowDesignerPlugin.h"
-#include "WorkflowViewController.h"
-#include "WorkflowDocument.h"
-#include "WorkflowSettingsController.h"
-#include "WorkflowSamples.h"
-#include "tasks/ReadAssemblyTask.h"
-
-#include "library/CoreLib.h"
-#include "library/IncludedProtoFactoryImpl.h"
-
-#include <util/SaveSchemaImageUtils.h>
-#include <util/DatasetsCountValidator.h>
-
-#include <U2Lang/IncludedProtoFactory.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/WorkflowTasksRegistry.h>
+#include <QMenu>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/CMDLineHelpProvider.h>
+#include <U2Core/CMDLineRegistry.h>
+#include <U2Core/CMDLineUtils.h>
+#include <U2Core/GAutoDeleteList.h>
 #include <U2Core/L10n.h>
+#include <U2Core/ServiceTypes.h>
 #include <U2Core/Settings.h>
 #include <U2Core/Task.h>
-#include <U2Core/ServiceTypes.h>
-
-#include <U2Core/CMDLineRegistry.h>
-#include <U2Core/CMDLineHelpProvider.h>
-#include <U2Core/CMDLineUtils.h>
-#include <cmdline/WorkflowCMDLineTasks.h>
-#include <cmdline/GalaxyConfigTask.h>
+#include <U2Core/TaskStarter.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/ToolsMenu.h>
 
-#include <U2Core/TaskStarter.h>
-#include <U2Core/GAutoDeleteList.h>
-#include <U2Test/XMLTestFormat.h>
+#include <U2Lang/IncludedProtoFactory.h>
+#include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowTasksRegistry.h>
+
 #include <U2Test/GTest.h>
 #include <U2Test/GTestFrameworkComponents.h>
+#include <U2Test/XMLTestFormat.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
-
-/* TRANSLATOR U2::LocalWorkflow::WorkflowView */
-/* TRANSLATOR U2::LocalWorkflow::WorkflowDesignerPlugin */
+#include "WorkflowDesignerPlugin.h"
+#include "WorkflowDocument.h"
+#include "WorkflowSamples.h"
+#include "WorkflowSettingsController.h"
+#include "WorkflowViewController.h"
+#include "cmdline/GalaxyConfigTask.h"
+#include "cmdline/WorkflowCMDLineTasks.h"
+#include "library/CoreLib.h"
+#include "library/IncludedProtoFactoryImpl.h"
+#include "tasks/ReadAssemblyTask.h"
+#include "util/DatasetsCountValidator.h"
+#include "util/SaveSchemaImageUtils.h"
 
 namespace U2 {
 
@@ -335,10 +326,10 @@ void WorkflowDesignerService::initSampleActions() {
 
     const QString externalToolsPlugin = "external_tool_support";
 
-    SampleAction sangerAlign(ToolsMenu::SANGER_CONTROL, ToolsMenu::SANGER_MENU, "Sanger sequencing/trim-and-align.uwl", SampleAction::Select, tr("Reads quality control and alignment"));
-
     SampleAction ngsControl(ToolsMenu::NGS_CONTROL, ToolsMenu::NGS_MENU, "NGS/fastqc.uwl", SampleAction::OpenWizard, tr("Reads quality control..."));
     ngsControl.requiredPlugins << externalToolsPlugin;
+    SampleAction ngsScaffold(ToolsMenu::NGS_SCAFFOLD, ToolsMenu::NGS_MENU, "Scenarios/length_filter.uwl", SampleAction::OpenWizard, tr("Filter short scaffolds..."));
+    ngsScaffold.requiredPlugins << externalToolsPlugin;
     SampleAction ngsRawDna(ToolsMenu::NGS_RAW_DNA, ToolsMenu::NGS_MENU, "NGS/raw_dna.uwl", SampleAction::Select, tr("Raw DNA-Seq data processing"));
     ngsRawDna.requiredPlugins << externalToolsPlugin;
     SampleAction ngsVariants(ToolsMenu::NGS_CALL_VARIANTS, ToolsMenu::NGS_MENU, "NGS/call_variants.uwl", SampleAction::Select, tr("Variant calling"));
@@ -367,8 +358,8 @@ void WorkflowDesignerService::initSampleActions() {
     SampleAction blastNcbi(ToolsMenu::BLAST_NCBI, ToolsMenu::BLAST_MENU, "Scenarios/remote_blasting.uwl", SampleAction::Select, tr("Remote NCBI BLAST"));
     blastNcbi.requiredPlugins << "remote_blast";
 
-    samples->registerAction(sangerAlign);
     samples->registerAction(ngsControl);
+    samples->registerAction(ngsScaffold);
     samples->registerAction(ngsRawDna);
     samples->registerAction(ngsVariants);
     samples->registerAction(ngsVariantsAndEffect);
diff --git a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
index 8b0959a..7d0054c 100644
--- a/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
+++ b/src/plugins/workflow_designer/src/WorkflowDesignerPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowDocument.cpp b/src/plugins/workflow_designer/src/WorkflowDocument.cpp
index cac8a61..c623bb2 100644
--- a/src/plugins/workflow_designer/src/WorkflowDocument.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowDocument.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-#include <QtXml/qdom.h>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/GHints.h>
diff --git a/src/plugins/workflow_designer/src/WorkflowDocument.h b/src/plugins/workflow_designer/src/WorkflowDocument.h
index 2a7f215..f59b2c7 100644
--- a/src/plugins/workflow_designer/src/WorkflowDocument.h
+++ b/src/plugins/workflow_designer/src/WorkflowDocument.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,9 +28,8 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Gui/ObjectViewTasks.h>
 
-#include <QtCore/QStringList>
+#include <QStringList>
 
-#include <QtXml/qdom.h>
 class QDomDocument;
 
 namespace U2 {
diff --git a/src/plugins/workflow_designer/src/WorkflowEditor.cpp b/src/plugins/workflow_designer/src/WorkflowEditor.cpp
index db6d1c7..8273516 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditor.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowEditor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,14 +39,9 @@
 #include <U2Lang/WorkflowUtils.h>
 #include "TableViewTabKey.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QHeaderView>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QHeaderView>
-#endif
-#include <QtGui/QKeyEvent>
+#include <QAction>
+#include <QHeaderView>
+#include <QKeyEvent>
 
 #define MAIN_SPLITTER "main.splitter"
 #define TAB_SPLITTER "tab.splitter"
@@ -54,8 +49,13 @@
 namespace U2 {
 
 WorkflowEditor::WorkflowEditor(WorkflowView *p)
-: QWidget(p), owner(p), custom(NULL),
-customWidget(NULL), subject(NULL), actor(NULL)
+    : QWidget(p),
+      owner(p),
+      custom(NULL),
+      customWidget(NULL),
+      subject(NULL),
+      actor(NULL),
+      onFirstTableShow(true)
 {
     GCOUNTER( cvar, tvar, "WorkflowEditor" );
     setupUi(this);
@@ -79,25 +79,19 @@ customWidget(NULL), subject(NULL), actor(NULL)
     outputPortBox->setVisible(true);
 
     caption->setMinimumHeight(nameEdit->sizeHint().height());
-    //doc->setMaximumHeight(height()/4);
 
     actorModel = new ActorCfgModel(this, owner);
     proxyModel = new ActorCfgFilterProxyModel(this);
     proxyModel->setSourceModel(actorModel);
     table->setModel(proxyModel);
 
-    table->horizontalHeader()->setStretchLastSection(true);
-
-#if (QT_VERSION < 0x050000) //Qt 5
-    table->horizontalHeader()->setClickable(false);
-    table->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-#else
     table->horizontalHeader()->setSectionsClickable(false);
     table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
-#endif
+
     table->verticalHeader()->hide();
     table->verticalHeader()->setDefaultSectionSize(QFontMetrics(QFont()).height() + 6);
     table->setItemDelegate(new SuperDelegate(this));
+    table->installEventFilter(this);
 
     reset();
 
@@ -167,20 +161,12 @@ void WorkflowEditor::changeScriptMode(bool _mode) {
         table->clearSelection();
         table->setCurrentIndex(QModelIndex());
     }
+    bool updateRequired = _mode != actorModel->getScriptMode();
     actorModel->changeScriptMode(_mode);
-    //table->horizontalHeader()->resizeSections(QHeaderView::ResizeToContents);
 
-#if (QT_VERSION < 0x050000) //Qt 5
-    table->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-#else
     table->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
-#endif
-    table->horizontalHeader()->setStretchLastSection(true);
-    if(_mode) {
-        int tWidth = table->width();
-        table->setColumnWidth(0, tWidth/3 - 2);
-        table->setColumnWidth(1, tWidth/3 - 2);
-        table->setColumnWidth(2, tWidth/3 - 2);
+    if ((updateRequired && _mode)) {
+        table->horizontalHeader()->resizeSections(QHeaderView::Stretch);
     }
 }
 
@@ -531,6 +517,11 @@ void WorkflowEditor::restoreState(const QVariant& v) {
 }
 
 bool WorkflowEditor::eventFilter(QObject* object, QEvent* event) {
+    if (event->type() == QEvent::Show && object == table && onFirstTableShow) {
+        // the workaround for correct columns width
+        onFirstTableShow = false;
+        table->horizontalHeader()->resizeSections(QHeaderView::Stretch);
+    }
     if (event->type() == QEvent::Shortcut ||
         event->type() == QEvent::ShortcutOverride)
     {
diff --git a/src/plugins/workflow_designer/src/WorkflowEditor.h b/src/plugins/workflow_designer/src/WorkflowEditor.h
index 84f6d54..0f63750 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditor.h
+++ b/src/plugins/workflow_designer/src/WorkflowEditor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Lang/WorkflowDebugStatus.h>
 #include <ui_WorkflowEditorWidget.h>
 
-#include <QtGui/QShortcutEvent>
+#include <QShortcutEvent>
 
 class QSortFilterProxyModel;
 
@@ -95,6 +95,8 @@ private:
     QList<QWidget *> inputPortWidget;
     QList<QWidget *> outputPortWidget;
     int paramHeight, inputHeight, outputHeight;
+
+    bool onFirstTableShow;
 };
 
 class SpecialParametersPanel : public QWidget {
diff --git a/src/plugins/workflow_designer/src/WorkflowEditorDelegates.cpp b/src/plugins/workflow_designer/src/WorkflowEditorDelegates.cpp
index e953777..09e53d6 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditorDelegates.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowEditorDelegates.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowEditorDelegates.h b/src/plugins/workflow_designer/src/WorkflowEditorDelegates.h
index 7957fdb..8d41162 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditorDelegates.h
+++ b/src/plugins/workflow_designer/src/WorkflowEditorDelegates.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,11 +23,7 @@
 #define _U2_WORKFLOW_DESIGNER_EDITOR_DELEGATES_H_
 
 #include <U2Lang/ConfigurationEditor.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QItemDelegate>
-#else
-#include <QtWidgets/QItemDelegate>
-#endif
+#include <QItemDelegate>
 
 Q_DECLARE_METATYPE(U2::PropertyDelegate*)
 
diff --git a/src/plugins/workflow_designer/src/WorkflowEditorWidget.ui b/src/plugins/workflow_designer/src/WorkflowEditorWidget.ui
index 50d6edc..e476a3c 100644
--- a/src/plugins/workflow_designer/src/WorkflowEditorWidget.ui
+++ b/src/plugins/workflow_designer/src/WorkflowEditorWidget.ui
@@ -254,6 +254,9 @@ QGroupBox::indicator:checked {
              <property name="cornerButtonEnabled">
               <bool>false</bool>
              </property>
+             <attribute name="horizontalHeaderStretchLastSection">
+              <bool>true</bool>
+             </attribute>
             </widget>
            </widget>
           </item>
diff --git a/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.cpp b/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.cpp
index 8f47f43..9e1fb22 100644
--- a/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QTabWidget>
-#include <QtGui/QTableView>
-#include <QtGui/QHeaderView>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QTabWidget>
-#include <QtWidgets/QTableView>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QMenu>
-#endif
-#include <QtGui/QClipboard>
+#include <QApplication>
+#include <QClipboard>
+#include <QHeaderView>
+#include <QMenu>
+#include <QTabWidget>
+#include <QTableView>
+#include <QtMath>
 
 #include "InvestigationDataModel.h"
 #include "WorkflowInvestigationWidgetsController.h"
@@ -97,11 +89,7 @@ bool WorkflowInvestigationWidgetsController::eventFilter(QObject *watched, QEven
     {
         if(NULL == investigationView->model() && NULL != investigatedLink) {
             createInvestigationModel();
-#if (QT_VERSION < 0x050000) //Qt 5
-            investigationView->horizontalHeader()->setResizeMode(QHeaderView::Interactive);
-#else
             investigationView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
-#endif
             adjustInvestigationColumnWidth(investigationView);
         }
     }
diff --git a/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.h b/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.h
index 09cfe11..272e2f3 100644
--- a/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.h
+++ b/src/plugins/workflow_designer/src/WorkflowInvestigationWidgetsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_WORKFLOW_INVESTIGATION_WIDGETS_CONTROLLER_H_
 #define _U2_WORKFLOW_INVESTIGATION_WIDGETS_CONTROLLER_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QMap>
+#include <QObject>
+#include <QMap>
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/WorkflowInvestigationData.h>
diff --git a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
index f3482de..00afef9 100644
--- a/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowMetaDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,8 +42,10 @@ WorkflowMetaDialog::WorkflowMetaDialog(QWidget * p, const Metadata& meta)
       meta(meta),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223332");
-
+    new HelpButton(this, buttonBox, "20875261");
+    
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
     cancelButton = buttonBox->button(QDialogButtonBox::Cancel);
     okButton = buttonBox->button(QDialogButtonBox::Ok);
 
diff --git a/src/plugins/workflow_designer/src/WorkflowMetaDialog.h b/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
index 9e7371d..74541d0 100644
--- a/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
+++ b/src/plugins/workflow_designer/src/WorkflowMetaDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowPalette.cpp b/src/plugins/workflow_designer/src/WorkflowPalette.cpp
index fb398b1..8d42942 100644
--- a/src/plugins/workflow_designer/src/WorkflowPalette.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowPalette.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,6 +40,7 @@
 #include <U2Core/Log.h>
 #include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
@@ -70,7 +71,7 @@ WorkflowPalette::WorkflowPalette(ActorPrototypeRegistry* reg, QWidget *parent)
     vl->addLayout(nameFilter);
     vl->addWidget(elementsList);
 
-    connect(elementsList, SIGNAL(processSelected(Workflow::ActorPrototype*)), SIGNAL(processSelected(Workflow::ActorPrototype*)));
+    connect(elementsList, SIGNAL(processSelected(Workflow::ActorPrototype*, bool)), SIGNAL(processSelected(Workflow::ActorPrototype*, bool)));
     connect(elementsList, SIGNAL(si_protoDeleted(const QString &)), SIGNAL(si_protoDeleted(const QString &)));
     connect(elementsList, SIGNAL(si_protoChanged()), SIGNAL(si_protoChanged()));
     connect(elementsList, SIGNAL(si_protoListModified()), SIGNAL(si_protoListModified()));
@@ -131,7 +132,7 @@ void PaletteDelegate::paint(QPainter *painter, const QStyleOptionViewItem &optio
         buttonOption.features = QStyleOptionButton::None;
         m_view->style()->drawControl(QStyle::CE_PushButton, &buttonOption, painter, m_view);
 
-        QStyleOptionViewItemV2 branchOption;
+        QStyleOptionViewItem branchOption;
         static const int i = 9; // ### hardcoded in qcommonstyle.cpp
         QRect r = option.rect;
         branchOption.rect = QRect(r.left() + i/2, r.top() + (r.height() - i)/2, i, i);
@@ -215,11 +216,7 @@ WorkflowPaletteElements::WorkflowPaletteElements(ActorPrototypeRegistry* reg, QW
     setMouseTracking(true);
     setColumnCount(1);
     header()->hide();
-#if (QT_VERSION < 0x050000) //Qt 5
-    header()->setResizeMode(QHeaderView::Stretch);
-#else
     header()->setSectionResizeMode(QHeaderView::Stretch);
-#endif
 
     //setTextElideMode (Qt::ElideMiddle);
     setContent(reg);
@@ -233,6 +230,8 @@ QMenu * WorkflowPaletteElements::createMenu(const QString &name) {
     return menu;
 }
 
+#define MENU_ACTION_MARKER  QString("menu-action")
+
 void WorkflowPaletteElements::createMenu(QMenu *menu) {
     menu->clear();
     QMenu *dataSink = NULL, *dataSource = NULL, *userScript = NULL, *externalTools = NULL;
@@ -248,7 +247,11 @@ void WorkflowPaletteElements::createMenu(QMenu *menu) {
         QMapIterator<QString, QAction *> jt(map);
         while(jt.hasNext()) {
             jt.next();
-            grpMenu->addAction(jt.value());
+            QAction* elementAction = jt.value();
+            QAction* menuAction = new QAction(elementAction->icon(), elementAction->text(), elementAction);
+            menuAction->setData(MENU_ACTION_MARKER);
+            connect(menuAction, SIGNAL(triggered(bool)), SLOT(sl_selectProcess(bool)));
+            grpMenu->addAction(menuAction);
         }
         if(it.key() == BaseActorCategories::CATEGORY_DATASRC().getDisplayName()) {
             dataSource = grpMenu;
@@ -462,14 +465,22 @@ void WorkflowPaletteElements::sl_selectProcess(bool checked) {
     if (currentAction && currentAction != sender()) {
         currentAction->setChecked(false);
     }
-    if (!checked) {
-        currentAction = NULL;
+
+    QAction * senderAction= qobject_cast<QAction*>(sender());
+    bool fromMenu = false;
+    if (senderAction->data() == MENU_ACTION_MARKER) {
+        fromMenu = true;
+        currentAction = qobject_cast<QAction*>(senderAction->parent());
+    } else if (checked) {
+        currentAction = senderAction;
     } else {
-        currentAction = qobject_cast<QAction*>(sender());
-        assert(currentAction);
+        currentAction = NULL;
+    }
+    if (currentAction) {
+        Workflow::ActorPrototype* actor =  currentAction->data().value<Workflow::ActorPrototype*>();
+        emit processSelected(actor, fromMenu);
     }
-    emit processSelected(currentAction ?
-        (currentAction->data().value<Workflow::ActorPrototype*>()) : NULL );
+
 }
 
 void WorkflowPaletteElements::editElement() {
diff --git a/src/plugins/workflow_designer/src/WorkflowPalette.h b/src/plugins/workflow_designer/src/WorkflowPalette.h
index 007e00a..e3a1cf1 100644
--- a/src/plugins/workflow_designer/src/WorkflowPalette.h
+++ b/src/plugins/workflow_designer/src/WorkflowPalette.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,13 +27,8 @@
 
 #include <ui_PaletteWidget.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QAction>
+#include <QTreeWidget>
 
 namespace U2 {
 using namespace Workflow;
@@ -60,7 +55,7 @@ public slots:
     void resetSelection();
 
 signals:
-    void processSelected(Workflow::ActorPrototype*);
+    void processSelected(Workflow::ActorPrototype*, bool);
     void si_protoDeleted(const QString &);
     void si_protoChanged();
     void si_protoListModified();
@@ -87,7 +82,7 @@ public slots:
     void sl_nameFilterChanged(const QString &filter);
 
 signals:
-    void processSelected(Workflow::ActorPrototype*);
+    void processSelected(Workflow::ActorPrototype*, bool putToScene);
     void si_protoDeleted(const QString &);
     void si_protoChanged();
     void si_protoListModified();
@@ -100,7 +95,7 @@ protected:
 
 private slots:
     void handleItemAction();
-    void sl_selectProcess(bool checked = false);
+    void sl_selectProcess(bool checked);
     void rebuild();
     void editElement();
     bool removeElement();
diff --git a/src/plugins/workflow_designer/src/WorkflowSamples.cpp b/src/plugins/workflow_designer/src/WorkflowSamples.cpp
index 29065ae..71ce81a 100644
--- a/src/plugins/workflow_designer/src/WorkflowSamples.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowSamples.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,51 +19,40 @@
  * MA 02110-1301, USA.
  */
 
-#include "WorkflowSamples.h"
-#include "WorkflowViewController.h"
-#include <util/SaveSchemaImageUtils.h>
-#include <U2Core/Log.h>
+#include <QAbstractItemModel>
+#include <QApplication>
+#include <QContextMenuEvent>
+#include <QDir>
+#include <QHeaderView>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMenu>
+#include <QPainter>
+#include <QStyle>
+#include <QStyledItemDelegate>
+#include <QTextDocument>
+#include <QTextStream>
+#include <QToolButton>
+#include <QTreeView>
+#include <QUrl>
+#include <QVBoxLayout>
+
 #include <U2Core/L10n.h>
+#include <U2Core/Log.h>
 #include <U2Core/Settings.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/WorkflowGUIUtils.h>
 
 #include <U2Lang/HRSchemaSerializer.h>
-#include <U2Lang/WorkflowUtils.h>
 #include <U2Lang/WorkflowSettings.h>
+#include <U2Lang/WorkflowUtils.h>
+
+#include "WorkflowSamples.h"
+#include "WorkflowViewController.h"
+#include "util/SaveSchemaImageUtils.h"
 
-#include <QtCore/QDir>
-#include <QtCore/QUrl>
-#include <QtCore/QTextStream>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#include <QtGui/QStyle>
-#include <QtGui/QLabel>
-#include <QtGui/QLineEdit>
-#include <QtGui/QMenu>
-#include <QtGui/QToolButton>
-#include <QtGui/QHeaderView>
-#include <QtGui/QTreeView>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QStyledItemDelegate>
-#else
-#include <QtWidgets/QApplication>
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QLineEdit>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QHeaderView>
-#include <QtWidgets/QTreeView>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QStyledItemDelegate>
-#endif
-#include <QtCore/QAbstractItemModel>
-#include <QtGui/QPainter>
-#include <QtGui/QContextMenuEvent>
-#include <QtGui/QTextDocument>
-
-Q_DECLARE_METATYPE(QTextDocument*);
+Q_DECLARE_METATYPE(QTextDocument*)
 
 namespace U2 {
 
@@ -85,7 +74,7 @@ public:
         if (value.isValid())
             return qvariant_cast<QSize>(value);
 
-        QStyleOptionViewItemV4 opt = option;
+        QStyleOptionViewItem opt = option;
         initStyleOption(&opt, index);
         const QWidget *widget = qobject_cast<QWidget*>(parent());//QStyledItemDelegatePrivate::widget(option);
         QStyle *style = widget ? widget->style() : QApplication::style();
@@ -247,7 +236,10 @@ void SamplePane::mouseDoubleClickEvent( QMouseEvent *e) {
     }
 
     QSize ts = doc->size().toSize();
-    QRect textRect;
+    QRect textRect(width() / 2- pageWidth / 2,
+        height() / 2 - pageHeight / 2,
+        pageWidth,
+        pageHeight);
     textRect.setSize(ts);
 
     QPoint position = e->pos();
diff --git a/src/plugins/workflow_designer/src/WorkflowSamples.h b/src/plugins/workflow_designer/src/WorkflowSamples.h
index af23979..153d5d9 100644
--- a/src/plugins/workflow_designer/src/WorkflowSamples.h
+++ b/src/plugins/workflow_designer/src/WorkflowSamples.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,21 +26,11 @@
 #include <U2Gui/GlassView.h>
 #include <U2Core/Task.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QToolBox>
-#include <QtGui/QButtonGroup>
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QToolBox>
-#include <QtWidgets/QButtonGroup>
-#include <QtWidgets/QTreeWidget>
-#endif
-
-#include <QtXml/qdom.h>
+#include <QAction>
+#include <QHBoxLayout>
+#include <QToolBox>
+#include <QButtonGroup>
+#include <QTreeWidget>
 
 namespace U2 {
 class WorkflowView;
diff --git a/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.cpp b/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.cpp
index e3d469b..f56e8e1 100644
--- a/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,19 +19,20 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtXml/qdom.h>
+#include <QDomDocument>
 
 #include <U2Core/AppContext.h>
-#include <U2Core/Settings.h>
 #include <U2Core/Counter.h>
-#include <U2Core/L10n.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/L10n.h>
+#include <U2Core/Settings.h>
+
 #include <U2Lang/HRSchemaSerializer.h>
 
-#include "WorkflowViewController.h"
 #include "SceneSerializer.h"
 #include "WorkflowDocument.h"
 #include "WorkflowSceneIOTasks.h"
+#include "WorkflowViewController.h"
 
 namespace U2 {
 using namespace Workflow;
diff --git a/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.h b/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.h
index ce7daad..1c7e701 100644
--- a/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.h
+++ b/src/plugins/workflow_designer/src/WorkflowSceneIOTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_WORKFLOW_SCENE_IO_TASK_H_
 #define _U2_WORKFLOW_SCENE_IO_TASK_H_
 
-#include <QtCore/QPointer>
+#include <QPointer>
 
 #include <U2Core/Task.h>
 #include <U2Lang/Schema.h>
diff --git a/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp b/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
index 89f6b78..3450020 100644
--- a/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowSettingsController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -75,7 +75,7 @@ AppSettingsGUIPageWidget* WorkflowSettingsPageController::createWidget(AppSettin
     return r;
 }
 
-const QString WorkflowSettingsPageController::helpPageId = QString("18222951");
+const QString WorkflowSettingsPageController::helpPageId = QString("20874856");
 
 WorkflowSettingsPageWidget::WorkflowSettingsPageWidget(WorkflowSettingsPageController* ) {
     setupUi(this);
diff --git a/src/plugins/workflow_designer/src/WorkflowSettingsController.h b/src/plugins/workflow_designer/src/WorkflowSettingsController.h
index 0d1ce0b..da42a18 100644
--- a/src/plugins/workflow_designer/src/WorkflowSettingsController.h
+++ b/src/plugins/workflow_designer/src/WorkflowSettingsController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowTabView.cpp b/src/plugins/workflow_designer/src/WorkflowTabView.cpp
index 6f5a29e..a58b071 100644
--- a/src/plugins/workflow_designer/src/WorkflowTabView.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowTabView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowTabView.h b/src/plugins/workflow_designer/src/WorkflowTabView.h
index c20f959..1f4bf56 100644
--- a/src/plugins/workflow_designer/src/WorkflowTabView.h
+++ b/src/plugins/workflow_designer/src/WorkflowTabView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/WorkflowViewController.cpp b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
index 6b43abd..945a6cb 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewController.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowViewController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -55,6 +55,7 @@
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
+#include <U2Core/GUrlUtils.h>
 
 #include <U2Designer/Dashboard.h>
 #include <U2Designer/DelegateEditors.h>
@@ -384,7 +385,7 @@ void WorkflowView::setupScene() {
 void WorkflowView::setupPalette() {
     palette = new WorkflowPalette(WorkflowEnv::getProtoRegistry());
     palette->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Ignored));
-    connect(palette, SIGNAL(processSelected(Workflow::ActorPrototype*)), SLOT(sl_selectPrototype(Workflow::ActorPrototype*)));
+    connect(palette, SIGNAL(processSelected(Workflow::ActorPrototype*, bool)), SLOT(sl_selectPrototype(Workflow::ActorPrototype*, bool)));
     connect(palette, SIGNAL(si_protoDeleted(const QString&)), SLOT(sl_protoDeleted(const QString&)));
     connect(palette, SIGNAL(si_protoListModified()), SLOT(sl_protoListModified()));
     connect(palette, SIGNAL(si_protoChanged()), scene, SLOT(sl_updateDocs()));
@@ -905,7 +906,7 @@ namespace {
         if (!dir.exists()) {
             bool created = dir.mkpath(dir.absolutePath());
             if (!created) {
-                os.setError(QObject::tr("Can not create the directory: ") + dir.absolutePath());
+                os.setError(QObject::tr("Can not create the folder: ") + dir.absolutePath());
                 return "";
             }
         }
@@ -1831,7 +1832,7 @@ void WorkflowView::sl_importSchemaToElement() {
     }
 }
 
-void WorkflowView::sl_selectPrototype(Workflow::ActorPrototype* p) {
+void WorkflowView::sl_selectPrototype(Workflow::ActorPrototype* p, bool putToScene) {
     propertyEditor->setEditable(!p);
     scene->clearSelection();
     currentProto = p;
@@ -1843,8 +1844,12 @@ void WorkflowView::sl_selectPrototype(Workflow::ActorPrototype* p) {
     } else {
         delete currentActor;
         currentActor = createActor(p, QVariantMap());
-        propertyEditor->setDescriptor(p, tr("Drag the palette element to the scene or just click on the scene to add the element."));
-        scene->views().at(0)->setCursor(Qt::CrossCursor);
+        if (putToScene) {
+            addProcess(currentActor, scene->getLastMousePressPoint());
+        } else {
+            propertyEditor->setDescriptor(p, tr("Drag the palette element to the scene or just click on the scene to add the element."));
+            scene->views().at(0)->setCursor(Qt::CrossCursor);
+        }
     }
 }
 
@@ -2065,7 +2070,9 @@ void WorkflowView::sl_onSelectionChanged() {
 
 void WorkflowView::sl_exportScene() {
     propertyEditor->commit();
-    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(sceneView->viewport(), ExportImageDialog::WD, ExportImageDialog::SupportScaling, sceneView->viewport());
+    QString fileName = GUrlUtils::fixFileName(meta.name);
+    QObjectScopedPointer<ExportImageDialog> dialog = new ExportImageDialog(sceneView->viewport(), ExportImageDialog::WD,
+                                                                           fileName, ExportImageDialog::SupportScaling,  sceneView->viewport());
     dialog->exec();
 }
 
@@ -2113,7 +2120,11 @@ void WorkflowView::runWizard(Wizard *w) {
             loadWizardResult(result);
             return;
         }
+
+        const bool isSample = meta.isSample();
         updateMeta();
+        meta.setSampleMark(isSample);
+
         WizardController::ApplyResult res = controller.applyChanges(meta);
         if (WizardController::ACTORS_REPLACED == res) {
             recreateScene();
@@ -2701,6 +2712,7 @@ void WorkflowScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent) {
     if (!locked && !mouseEvent->isAccepted() && controller->selectedProto() && (mouseEvent->button() == Qt::LeftButton)) {
         controller->addProcess(controller->getActor(), mouseEvent->scenePos());
     }
+    lastMousePressPoint = mouseEvent->scenePos();
     QGraphicsScene::mousePressEvent(mouseEvent);
 }
 
diff --git a/src/plugins/workflow_designer/src/WorkflowViewController.h b/src/plugins/workflow_designer/src/WorkflowViewController.h
index 542dd9f..c2e415b 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewController.h
+++ b/src/plugins/workflow_designer/src/WorkflowViewController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -77,6 +77,8 @@ public:
     WorkflowAbstractRunner* getRunner() const {return runner;}
     void setRunner(WorkflowAbstractRunner* r) {runner = r;}
 
+    const QPointF& getLastMousePressPoint() const {return lastMousePressPoint;}
+
     QList<Actor*> getSelectedActors() const;
 
     void clearScene();
@@ -126,6 +128,10 @@ private:
     WorkflowAbstractRunner* runner;
     int hint;
     QAction* openDocumentsAction;
+
+
+    /* Point stores last mouse press position on the scene.  Used to insert new elements from context menu */
+    QPointF lastMousePressPoint;
 }; // WorkflowScene
 
 class WorkflowView : public MWMDIWindow, public SchemaConfig {
@@ -189,7 +195,7 @@ private slots:
     void sl_editItem();
     void sl_onSelectionChanged();
     void sl_showEditor();
-    void sl_selectPrototype(Workflow::ActorPrototype*);
+    void sl_selectPrototype(Workflow::ActorPrototype*, bool);
     void sl_procItemAdded();
     void sl_exportScene();
     void sl_saveScene();
diff --git a/src/plugins/workflow_designer/src/WorkflowViewItems.cpp b/src/plugins/workflow_designer/src/WorkflowViewItems.cpp
index 6fb857e..7c45853 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewItems.cpp
+++ b/src/plugins/workflow_designer/src/WorkflowViewItems.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,43 +19,34 @@
  * MA 02110-1301, USA.
  */
 
-#include "WorkflowViewItems.h"
-#include "ItemViewStyle.h"
-#include "WorkflowViewController.h"
-#include "WorkflowEditor.h"
+#include <QBitmap>
+#include <QDomElement>
+#include <QGraphicsItem>
+#include <QGraphicsSceneMouseEvent>
+#include <QGraphicsSimpleTextItem>
+#include <QGraphicsTextItem>
+#include <QGraphicsView>
+#include <QPainter>
+#include <QRadialGradient>
+#include <QStyleOptionGraphicsItem>
+#include <QTextDocument>
+#include <QtMath>
+
+#include <U2Core/Log.h>
+#include <U2Core/QVariantUtils.h>
 
-#include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/ActorModel.h>
-#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/IntegralBus.h>
+#include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowRunTask.h>
 #include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <U2Core/Log.h>
-#include <QtGui/QBitmap>
-#include <QtGui/QPainter>
-#include <QtGui/QRadialGradient>
-#include <QtGui/QTextDocument>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QGraphicsTextItem>
-#include <QtGui/QGraphicsItem>
-#include <QtGui/QGraphicsSimpleTextItem>
-#include <QtGui/QGraphicsSceneMouseEvent>
-#include <QtGui/QStyleOptionGraphicsItem>
-#include <QtGui/QGraphicsView>
-#else
-#include <QtWidgets/QGraphicsTextItem>
-#include <QtWidgets/QGraphicsItem>
-#include <QtWidgets/QGraphicsSimpleTextItem>
-#include <QtWidgets/QGraphicsSceneMouseEvent>
-#include <QtWidgets/QStyleOptionGraphicsItem>
-#include <QtWidgets/QGraphicsView>
-#endif
-#include <QtCore/qmath.h>
-
-#include <U2Core/QVariantUtils.h>
-#include <QtXml/qdom.h>
+#include "ItemViewStyle.h"
+#include "WorkflowEditor.h"
+#include "WorkflowViewController.h"
+#include "WorkflowViewItems.h"
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/WorkflowViewItems.h b/src/plugins/workflow_designer/src/WorkflowViewItems.h
index f093675..12a01fb 100644
--- a/src/plugins/workflow_designer/src/WorkflowViewItems.h
+++ b/src/plugins/workflow_designer/src/WorkflowViewItems.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,17 +25,10 @@
 #include <U2Lang/ActorModel.h>
 #include "U2Lang/LocalDomain.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QWidget>
-#include <QtGui/QGraphicsScene>
-#include <QtGui/QGraphicsItem>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QGraphicsScene>
-#include <QtWidgets/QGraphicsItem>
-#endif
+#include <QAction>
+#include <QWidget>
+#include <QGraphicsScene>
+#include <QGraphicsItem>
 
 class QDomElement;
 
diff --git a/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.cpp b/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.cpp
old mode 100644
new mode 100755
index 77201a7..a4b11bd
--- a/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.cpp
+++ b/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,11 +32,7 @@
 #include <U2Designer/DelegateEditors.h>
 #include <U2Core/U2SafePoints.h>
 #include "GalaxyConfigTask.h"
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
+#include <QApplication>
 
 namespace U2 {
 using namespace WorkflowSerialize;
@@ -94,8 +90,8 @@ void tryToAppendSlash( QString &path ) {
 }
 
 void GalaxyConfigTask::fillGObjectTypeMap() {
-    portGObjectTypeMap[BasePorts::OUT_MSA_PORT_ID()]             = GObjectTypes::MULTIPLE_ALIGNMENT;
-    portGObjectTypeMap[BasePorts::IN_MSA_PORT_ID()]              = GObjectTypes::MULTIPLE_ALIGNMENT;
+    portGObjectTypeMap[BasePorts::OUT_MSA_PORT_ID()]             = GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
+    portGObjectTypeMap[BasePorts::IN_MSA_PORT_ID()]              = GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     portGObjectTypeMap[BasePorts::OUT_SEQ_PORT_ID()]             = GObjectTypes::SEQUENCE;
     portGObjectTypeMap[BasePorts::IN_SEQ_PORT_ID()]              = GObjectTypes::SEQUENCE;
     portGObjectTypeMap[BasePorts::OUT_ANNOTATIONS_PORT_ID()]     = GObjectTypes::ANNOTATION_TABLE;
@@ -132,7 +128,7 @@ void GalaxyConfigTask::prepare() {
     tryToAppendSlash( destinationPath );
 
     if( galaxyPath.isEmpty() && !getGalaxyPath() ) {
-        coreLog.info( "Galaxy directory is not found" );
+        coreLog.info( "Galaxy folder is not found" );
     }
 
     fillGObjectTypeMap();
@@ -159,7 +155,7 @@ void GalaxyConfigTask::tryToFindInPath( const QString &objectName, QString &obje
     QString pathVariable = qgetenv("PATH").constData();
     const int objectNamePosition = pathVariable.indexOf( objectName );
     if( objectNamePosition == SUBSTRING_NOT_FOUND ) {
-        coreLog.info( QString("Path to %1 directory is not found in PATH variable").arg(objectName) );
+        coreLog.info( QString("Path to %1 folder is not found in PATH variable").arg(objectName) );
         return;
     }
     int currPos = objectNamePosition;
@@ -186,7 +182,7 @@ void GalaxyConfigTask::tryToFindByLocate( const QString &objectName, QString &ob
 
     QFile file( fileName );
     if( !file.open(QIODevice::ReadOnly ) ) {
-        coreLog.info( QString("Can not read %1_path.txt file to get path to %1 directory. Check user privileges").arg(objectName) );
+        coreLog.info( QString("Can not read %1_path.txt file to get path to %1 folder. Check user privileges").arg(objectName) );
         return;
     }
     QTextStream inFile(&file);
@@ -195,7 +191,7 @@ void GalaxyConfigTask::tryToFindByLocate( const QString &objectName, QString &ob
 
     QFile::remove( fileName );
     if( !objectPath.length() ) {
-        coreLog.info( QString("Path to %1 directory is not found by \"locate\" command").arg(objectName) );
+        coreLog.info( QString("Path to %1 folder is not found by \"locate\" command").arg(objectName) );
         return;
     }
 
@@ -208,7 +204,7 @@ bool GalaxyConfigTask::fileExists( const QString &objectPath, const QString &suf
         if( QFile::exists( fullPath ) ) {
             return true;
         }
-        coreLog.info( QString("Galaxy directory does not contain %1 file").arg(suffix) );
+        coreLog.info( QString("Galaxy folder does not contain %1 file").arg(suffix) );
     }
     return false;
 }
@@ -893,7 +889,7 @@ bool GalaxyConfigTask::tryToCopySchemeConfigFile() {
     }
     QFileInfo destinationDirInfo( destinationPath );
     if( !destinationDirInfo.isWritable() ) {
-        stateInfo.setError( QString("Directory %1 is not writable by this user").arg(destinationPath) );
+        stateInfo.setError( QString("Folder %1 is not writable by this user").arg(destinationPath) );
         return false;
     }
 
@@ -951,13 +947,13 @@ bool GalaxyConfigTask::prepareToolDirectory() {
     if( !directory.exists() ) {
         bool created = directory.mkdir( pathToCopy );
         if( !created ) {
-            stateInfo.setError( QString("Can not create %1 directory. Check user privileges").arg(pathToCopy) );
+            stateInfo.setError( QString("Can not create %1 folder. Check user privileges").arg(pathToCopy) );
             return false;
         }
     }
     QFileInfo copyPathDirectory( pathToCopy );
     if( !copyPathDirectory.isWritable() ) {
-        stateInfo.setError( QString("Directory %1 is not writable by this user").arg(pathToCopy) );
+        stateInfo.setError( QString("Folder %1 is not writable by this user").arg(pathToCopy) );
         return false;
     }
 
diff --git a/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.h b/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.h
old mode 100644
new mode 100755
index f26c626..b1edd7e
--- a/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.h
+++ b/src/plugins/workflow_designer/src/cmdline/GalaxyConfigTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
index ea67549..b5c74a2 100644
--- a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
+++ b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/L10n.h>
 #include <U2Core/Log.h>
 #include <U2Core/Settings.h>
 #include <U2Core/Counter.h>
@@ -46,7 +47,12 @@ namespace U2 {
 * WorkflowRunFromCMDLineBase
 *******************************************/
 WorkflowRunFromCMDLineBase::WorkflowRunFromCMDLineBase()
-: Task( tr( "Workflow run from cmdline" ), TaskFlag_NoRun ), schema(NULL), optionsStartAt(-1), loadTask(NULL) {
+    : Task(tr("Workflow run from cmdline"), TaskFlag_None),
+      schema(NULL),
+      optionsStartAt(-1),
+      loadTask(NULL),
+      workflowRunTask(NULL)
+{
     GCOUNTER(cvar,tvar,"workflow_run_from_cmdline");
 
     CMDLineRegistry * cmdLineRegistry = AppContext::getCMDLineRegistry();
@@ -101,10 +107,10 @@ WorkflowRunFromCMDLineBase::~WorkflowRunFromCMDLineBase() {
 static void setSchemaCMDLineOptions( Schema * schema, int optionsStartAtIdx ) {
     assert( schema != NULL && optionsStartAtIdx > 0 );
 
-    QList<StringPair> parameters = AppContext::getCMDLineRegistry()->getParameters();
+    QList<StrStrPair> parameters = AppContext::getCMDLineRegistry()->getParameters();
     int sz = parameters.size();
     for( int i = optionsStartAtIdx; i < sz; ++i ) {
-        const StringPair & param = parameters.at(i);
+        const StrStrPair & param = parameters.at(i);
         if( param.first.isEmpty() ) { // TODO: unnamed parameters not supported yet
             continue;
         }
@@ -173,11 +179,27 @@ QList<Task*> WorkflowRunFromCMDLineBase::onSubTaskFinished( Task* subTask ) {
             return res;
         }
 
-        res << getWorkflowRunTask();
+        workflowRunTask = getWorkflowRunTask();
+        res << workflowRunTask;
     }
     return res;
 }
 
+void WorkflowRunFromCMDLineBase::run() {
+    CMDLineRegistry *cmdLineRegistry = AppContext::getCMDLineRegistry();
+    SAFE_POINT(NULL != cmdLineRegistry, "CMDLineRegistry is NULL", );
+    CHECK(NULL != workflowRunTask, );
+
+    const QString reportFilePath = cmdLineRegistry->getParameterValue(CmdlineTaskRunner::REPORT_FILE_ARG);
+    CHECK(!reportFilePath.isEmpty(), );
+
+    QFile reportFile(reportFilePath);
+    const bool opened = reportFile.open(QIODevice::WriteOnly);
+    CHECK_EXT(opened, setError(L10N::errorOpeningFileWrite(reportFilePath)), );
+
+    reportFile.write(workflowRunTask->generateReport().toLocal8Bit());
+}
+
 /*******************************************
 * WorkflowRunFromCMDLineTask
 *******************************************/
diff --git a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
index d8f4c50..0b7d8ec 100644
--- a/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
+++ b/src/plugins/workflow_designer/src/cmdline/WorkflowCMDLineTasks.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,7 @@ public:
     WorkflowRunFromCMDLineBase();
     virtual ~WorkflowRunFromCMDLineBase();
     QList<Task*> onSubTaskFinished( Task* subTask );
+    void run();
 
 protected:
     virtual Task * getWorkflowRunTask() const = 0;
@@ -45,6 +46,7 @@ protected:
     Schema*             schema;
     int                 optionsStartAt;
     LoadWorkflowTask *  loadTask;
+    Task *              workflowRunTask;
     QString             schemaName;
     QMap<ActorId, ActorId> remapping;
 
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.cpp
index df658de..064fda2 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QVariant>
+#include <QVariant>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Lang/WorkflowContext.h>
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.h
index 5ee165c..3e5b915 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/AnnotationsMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.cpp
index 23d1200..d6f4e41 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/U2AssemblyDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
-#include <U2Lang/WorkflowContext.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/WorkflowContext.h>
 
 #include "AssemblyMessageTranslator.h"
 
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.h
index 7f62f22..fe3dde0 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/AssemblyMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.cpp
index 6013cc8..88b5ec8 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.h
index 71c807b..a32e41d 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/BaseMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_BASE_MESSAGE_TRANSLATOR_H_
 #define _U2_BASE_MESSAGE_TRANSLATOR_H_
 
-#include <QtCore/QString>
-#include <QtCore/QVariant>
+#include <QString>
+#include <QVariant>
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.cpp
index 7efadef..5852db8 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
+
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Core/MAlignmentObject.h>
-#include <U2Lang/WorkflowContext.h>
 #include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/WorkflowContext.h>
 
 #include "MultipleAlignmentMessageTranslator.h"
 
@@ -37,29 +39,28 @@ namespace U2 {
 
 using namespace Workflow;
 
-MultipleAlignmentMessageTranslator::MultipleAlignmentMessageTranslator(
-    const QVariant &atomicMessage, WorkflowContext *initContext)
+MultipleAlignmentMessageTranslator::MultipleAlignmentMessageTranslator(const QVariant &atomicMessage, WorkflowContext *initContext)
     : BaseMessageTranslator(atomicMessage, initContext)
 {
     SAFE_POINT( source.canConvert<SharedDbiDataHandler>( ), "Invalid MSA data supplied!", );
     SharedDbiDataHandler malignmentId = source.value<SharedDbiDataHandler>( );
-    QScopedPointer<MAlignmentObject> malignmentObject( StorageUtils::getMsaObject(
+    QScopedPointer<MultipleSequenceAlignmentObject> malignmentObject( StorageUtils::getMsaObject(
         context->getDataStorage( ), malignmentId ) );
     SAFE_POINT( !malignmentObject.isNull( ), "Invalid MSA object detected!", );
-    malignment = malignmentObject->getMAlignment( );
+    malignment = malignmentObject->getMsaCopy();
 }
 
 QString MultipleAlignmentMessageTranslator::getTranslation( ) const {
-    const QString alignmentName = malignment.getName( );
+    const QString alignmentName = malignment->getName( );
     const QString displayingName = ( alignmentName.isEmpty( ) )
         ? QObject::tr( EMPTY_ALIGNMENT_NAME_LABEL ) : ( "'" + alignmentName + "'" );
 
     QString result = QObject::tr( ALIGNMENT_NAME_LABEL ) + displayingName + INFO_TAGS_SEPARATOR;
-    result += QObject::tr( ALIGNMENT_LENGTH_LABEL ) + QString::number( malignment.getLength( ) )
+    result += QObject::tr( ALIGNMENT_LENGTH_LABEL ) + QString::number( malignment->getLength( ) )
         + INFO_TAGS_SEPARATOR;
-    result += QObject::tr( COUNT_OF_ROWS_LABEL ) + QString::number( malignment.getNumRows( ) )
+    result += QObject::tr( COUNT_OF_ROWS_LABEL ) + QString::number( malignment->getNumRows( ) )
         + INFO_TAGS_SEPARATOR;
-    result += QObject::tr( ROW_NAMES_LABEL ) + "'" + malignment.getRowNames( ).join( "', '" )
+    result += QObject::tr( ROW_NAMES_LABEL ) + "'" + malignment->getRowNames( ).join( "', '" )
         + "'";
 
     return result;
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.h
index d818b08..f40bf8f 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/MultipleAlignmentMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,12 @@
 #ifndef _U2_MULTIPLE_ALIGNMENT_MESSAGE_TRANSLATOR_H_
 #define _U2_MULTIPLE_ALIGNMENT_MESSAGE_TRANSLATOR_H_
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include "BaseMessageTranslator.h"
 
 namespace U2 {
 
-class MAlignment;
-
 class MultipleAlignmentMessageTranslator : public BaseMessageTranslator {
 public:
     MultipleAlignmentMessageTranslator( const QVariant &atomicMessage,
@@ -38,7 +36,7 @@ public:
     QString getTranslation( ) const;
 
 protected:
-    MAlignment malignment;
+    MultipleSequenceAlignment malignment;
 };
 
 } // namespace U2
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.cpp
index 5d5a67c..e02daf0 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Lang/WorkflowContext.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/WorkflowContext.h>
 
 #include "SequenceMessageTranslator.h"
 
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.h
index 5150df6..e8d5573 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/SequenceMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.cpp
index aebbf73..87d55f5 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,13 +19,15 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
-#include <QtCore/QVariant>
+#include <QScopedPointer>
+#include <QVariant>
 
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/U2VariantDbi.h>
-#include <U2Lang/WorkflowContext.h>
+
 #include <U2Lang/DbiDataHandler.h>
+#include <U2Lang/WorkflowContext.h>
 
 #include "VariationTrackMessageTranslator.h"
 
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.h b/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.h
index 711f360..a7b8922 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/VariationTrackMessageTranslator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.cpp b/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.cpp
index a5d351d..08acd33 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.cpp
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,16 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
-#include <QtCore/QStringList>
-#include <QtCore/QVariantMap>
+#include <QScopedPointer>
+#include <QStringList>
+#include <QVariantMap>
 
+#include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/TextObject.h>
-#include <U2Core/AnnotationTableObject.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
 
 #include <U2Gui/ExportObjectUtils.h>
 
@@ -36,13 +37,12 @@
 #include <U2Lang/WorkflowContext.h>
 #include <U2Lang/WorkflowTransport.h>
 
-#include "BaseMessageTranslator.h"
-#include "SequenceMessageTranslator.h"
 #include "AnnotationsMessageTranslator.h"
-#include "MultipleAlignmentMessageTranslator.h"
 #include "AssemblyMessageTranslator.h"
+#include "BaseMessageTranslator.h"
+#include "MultipleAlignmentMessageTranslator.h"
+#include "SequenceMessageTranslator.h"
 #include "VariationTrackMessageTranslator.h"
-
 #include "WorkflowDebugMessageParserImpl.h"
 
 const QString PRODUCING_ACTOR_AND_DATA_TYPE_SEPARATOR = ":";
@@ -126,7 +126,7 @@ void WorkflowDebugMessageParserImpl::convertMessagesToDocuments(const QString &c
             AnnotationTableObject *annsObj = new AnnotationTableObject("Annotations", context->getDataStorage()->getDbiRef());
             annsObj->addAnnotations(annList);
 
-            ExportObjectUtils::exportAnnotations(annsObj->getAnnotations(), baseFileUrl);
+            ExportObjectUtils::exportAnnotations(annsObj, baseFileUrl);
         } else {
             GObject *objectToWrite = fetchObjectFromMessage(messageType, mapData[convertedType]);
             if(Q_LIKELY(NULL != objectToWrite)) {
diff --git a/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.h b/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.h
index 351db33..b944082 100644
--- a/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.h
+++ b/src/plugins/workflow_designer/src/debug_messages_translation/WorkflowDebugMessageParserImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.cpp b/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.cpp
deleted file mode 100644
index 7d5bf27..0000000
--- a/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.cpp
+++ /dev/null
@@ -1,855 +0,0 @@
-/**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
-* http://ugene.net
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-* MA 02110-1301, USA.
-*/
-
-#include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
-#include <U2Algorithm/PairwiseAlignmentTask.h>
-
-#include <U2Core/AnnotationTableObject.h>
-#include <U2Core/AppContext.h>
-#include <U2Core/AppResources.h>
-#include <U2Core/AppSettings.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/GenbankFeatures.h>
-#include <U2Core/L10n.h>
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/TextUtils.h>
-#include <U2Core/U2OpStatusUtils.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/U2SequenceUtils.h>
-
-#include <U2Designer/DelegateEditors.h>
-
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/WorkflowEnv.h>
-
-#include "AlignToReferenceWorker.h"
-
-namespace U2 {
-namespace LocalWorkflow {
-
-const QString AlignToReferenceWorkerFactory::ACTOR_ID("align-to-reference");
-namespace {
-    const QString OUT_PORT_ID = "out";
-    const QString REF_ATTR_ID = "reference";
-}
-
-/************************************************************************/
-/* AlignToReferenceWorkerFactory */
-/************************************************************************/
-AlignToReferenceWorkerFactory::AlignToReferenceWorkerFactory()
-: DomainFactory(ACTOR_ID)
-{
-
-}
-
-Worker * AlignToReferenceWorkerFactory::createWorker(Actor *a) {
-    return new AlignToReferenceWorker(a);
-}
-
-void AlignToReferenceWorkerFactory::init() {
-    QList<PortDescriptor*> ports;
-    {
-        Descriptor inDesc(BasePorts::IN_SEQ_PORT_ID(), AlignToReferencePrompter::tr("Input sequence"), AlignToReferencePrompter::tr("Input sequence."));
-        Descriptor outDesc(OUT_PORT_ID, AlignToReferencePrompter::tr("Aligned data"), AlignToReferencePrompter::tr("Aligned data."));
-
-        QMap<Descriptor, DataTypePtr> inType;
-        inType[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
-
-        QMap<Descriptor, DataTypePtr> outType;
-        outType[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
-        outType[BaseSlots::ANNOTATION_TABLE_SLOT()] = BaseTypes::ANNOTATION_TABLE_TYPE();
-        outType[BaseSlots::MULTIPLE_ALIGNMENT_SLOT()] = BaseTypes::MULTIPLE_ALIGNMENT_TYPE();
-
-        ports << new PortDescriptor(inDesc, DataTypePtr(new MapDataType(ACTOR_ID + "-in", inType)), true /*input*/);
-        ports << new PortDescriptor(outDesc, DataTypePtr(new MapDataType(ACTOR_ID + "-out", outType)), false /*input*/, true /*multi*/);
-    }
-    QList<Attribute*> attributes;
-    {
-        Descriptor refDesc(REF_ATTR_ID, AlignToReferencePrompter::tr("Reference URL"), AlignToReferencePrompter::tr("A URL to the file with a reference sequence."));
-        attributes << new Attribute(refDesc, BaseTypes::STRING_TYPE(), true);
-    }
-    QMap<QString, PropertyDelegate*> delegates;
-    {
-        delegates[REF_ATTR_ID] = new URLDelegate("", "", false, false, false);
-    }
-
-    Descriptor desc(ACTOR_ID, AlignToReferenceWorker::tr("Align to Reference"),
-        AlignToReferenceWorker::tr("Align input sequences (e.g. Sanger reads) to the reference sequence."));
-    ActorPrototype *proto = new IntegralBusActorPrototype(desc, ports, attributes);
-    proto->setEditor(new DelegateEditor(delegates));
-    proto->setPrompter(new AlignToReferencePrompter(NULL));
-    WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_ALIGNMENT(), proto);
-
-    DomainFactory *localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
-    localDomain->registerEntry(new AlignToReferenceWorkerFactory());
-}
-
-/************************************************************************/
-/* AlignToReferencePrompter */
-/************************************************************************/
-AlignToReferencePrompter::AlignToReferencePrompter(Actor *a)
-: PrompterBase<AlignToReferencePrompter>(a)
-{
-
-}
-
-QString AlignToReferencePrompter::composeRichDoc() {
-    IntegralBusPort *input = qobject_cast<IntegralBusPort*>(target->getPort(BasePorts::IN_SEQ_PORT_ID()));
-    SAFE_POINT(NULL != input, "No input port", "");
-    Actor *producer = input->getProducer(BaseSlots::DNA_SEQUENCE_SLOT().getId());
-    const QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
-    const QString producerName = (NULL != producer) ? producer->getLabel() : unsetStr;
-    const QString refLink = getHyperlink(REF_ATTR_ID, getURL(REF_ATTR_ID));
-    return tr("Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.").arg(producerName).arg(refLink);
-}
-
-/************************************************************************/
-/* AlignToReferenceWorker */
-/************************************************************************/
-AlignToReferenceWorker::AlignToReferenceWorker(Actor *a)
-: BaseDatasetWorker(a, BasePorts::IN_SEQ_PORT_ID(), OUT_PORT_ID), referenceDoc(NULL)
-{
-
-}
-
-void AlignToReferenceWorker::cleanup() {
-    delete referenceDoc;
-    BaseDatasetWorker::cleanup();
-}
-
-Task * AlignToReferenceWorker::createPrepareTask(U2OpStatus &os) const {
-    QString referenceUrl = getValue<QString>(REF_ATTR_ID);
-    QVariantMap hints;
-    hints[DocumentFormat::DBI_REF_HINT] = qVariantFromValue(context->getDataStorage()->getDbiRef());
-    LoadDocumentTask *task = LoadDocumentTask::getDefaultLoadDocTask(referenceUrl, hints);
-    if (NULL == task) {
-        os.setError(tr("Can not read the reference file: ") + referenceUrl);
-    }
-    return task;
-}
-
-void AlignToReferenceWorker::onPrepared(Task *task, U2OpStatus &os) {
-    LoadDocumentTask *loadTask = dynamic_cast<LoadDocumentTask*>(task);
-    CHECK_EXT(NULL != loadTask, os.setError(L10N::internalError("Unexpected prepare task")), );
-
-    QScopedPointer<Document> doc(loadTask->takeDocument());
-    CHECK_EXT(!doc.isNull(), os.setError(tr("Can't read the file: ") + loadTask->getURLString()), );
-    QList<GObject*> objects = doc->findGObjectByType(GObjectTypes::SEQUENCE);
-    CHECK_EXT(!objects.isEmpty(), os.setError(tr("No reference sequence in the file: ") + loadTask->getURLString()), );
-    CHECK_EXT(1 == objects.size(), os.setError(tr("More than one sequence in the reference file: ") + loadTask->getURLString()), );
-
-    referenceDoc = doc.take();
-    referenceDoc->setDocumentOwnsDbiResources(false);
-    reference = context->getDataStorage()->getDataHandler(objects.first()->getEntityRef());
-}
-
-Task * AlignToReferenceWorker::createTask(const QList<Message> &messages) const {
-    QList<SharedDbiDataHandler> reads;
-    foreach (const Message &message, messages) {
-        QVariantMap data = message.getData().toMap();
-        if (data.contains(BaseSlots::DNA_SEQUENCE_SLOT().getId())) {
-            reads << data[BaseSlots::DNA_SEQUENCE_SLOT().getId()].value<SharedDbiDataHandler>();
-        }
-    }
-    return new AlignToReferenceTask(reference, reads, context->getDataStorage());
-}
-
-QVariantMap AlignToReferenceWorker::getResult(Task *task, U2OpStatus &os) const {
-    AlignToReferenceTask *alignTask = dynamic_cast<AlignToReferenceTask*>(task);
-    CHECK_EXT(NULL != alignTask, os.setError(L10N::internalError("Unexpected task")), QVariantMap());
-    QVariantMap result;
-    result[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(alignTask->getAlignment());
-    result[BaseSlots::DNA_SEQUENCE_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(reference);
-    result[BaseSlots::ANNOTATION_TABLE_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(alignTask->getAnnotations());
-    return result;
-}
-
-MessageMetadata AlignToReferenceWorker::generateMetadata(const QString &datasetName) const {
-    SAFE_POINT(NULL != referenceDoc, L10N::nullPointerError("Reference sequence document"), BaseDatasetWorker::generateMetadata(datasetName));
-    return MessageMetadata(referenceDoc->getURLString(), datasetName);
-}
-
-/************************************************************************/
-/* AlignToReferenceTask */
-/************************************************************************/
-namespace {
-    qint64 calcMemUsageBytes(DbiDataStorage *storage, const SharedDbiDataHandler &seqId, U2OpStatus &os) {
-        QScopedPointer<U2SequenceObject> object(StorageUtils::getSequenceObject(storage, seqId));
-        CHECK_EXT(!object.isNull(), os.setError(L10N::nullPointerError("Sequence object")), 0);
-
-        return object->getSequenceLength();
-    }
-
-    int toMb(qint64 bytes) {
-        return 0.5 + (double(bytes) / (1024 * 1024));
-    }
-}
-
-AlignToReferenceTask::AlignToReferenceTask(const SharedDbiDataHandler &reference, const QList<SharedDbiDataHandler> &reads, DbiDataStorage *storage)
-: Task(tr("Align to reference"), TaskFlags_NR_FOSE_COSC), reference(reference), reads(reads), composeSubTask(NULL), storage(storage), subTasksCount(0)
-{
-    setMaxParallelSubtasks(AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount());
-}
-
-void AlignToReferenceTask::prepare() {
-    foreach (const SharedDbiDataHandler &read, reads) {
-        PairwiseAlignmentTask *subTask = new PairwiseAlignmentTask(reference, read, storage);
-        subTasks << subTask;
-        subTask->setSubtaskProgressWeight(1.0f / (2 * reads.count()));
-        addSubTask(subTask);
-    }
-    subTasksCount = subTasks.size();
-}
-
-QList<Task*> AlignToReferenceTask::onSubTaskFinished(Task * /*subTask*/) {
-    QList<Task*> result;
-    if (1 == subTasksCount) {
-        composeSubTask = new ComposeResultSubTask(reference, reads, subTasks, storage);
-        composeSubTask->setSubtaskProgressWeight(0.5f);
-        result << composeSubTask;
-    }
-    subTasksCount--;
-    return result;
-}
-
-SharedDbiDataHandler AlignToReferenceTask::getAlignment() const {
-    CHECK(NULL != composeSubTask, SharedDbiDataHandler());
-    return composeSubTask->getAlignment();
-}
-
-SharedDbiDataHandler AlignToReferenceTask::getAnnotations() const {
-    CHECK(NULL != composeSubTask, SharedDbiDataHandler());
-    return composeSubTask->getAnnotations();
-}
-
-/************************************************************************/
-/* ComposeResultSubTask */
-/************************************************************************/
-ComposeResultSubTask::ComposeResultSubTask(const SharedDbiDataHandler &reference, const QList<SharedDbiDataHandler> &reads, const QList<PairwiseAlignmentTask*> subTasks, DbiDataStorage *storage)
-: Task(tr("Compose alignment"), TaskFlags_FOSE_COSC), reference(reference), reads(reads), subTasks(subTasks), storage(storage)
-{
-    tpm = Task::Progress_Manual;
-}
-
-void ComposeResultSubTask::prepare() {
-    qint64 memUsage = calcMemUsageBytes(storage, reference, stateInfo);
-    CHECK_OP(stateInfo, );
-
-    foreach (const SharedDbiDataHandler &read, reads) {
-        memUsage += calcMemUsageBytes(storage, read, stateInfo);
-        CHECK_OP(stateInfo, );
-    }
-    if (toMb(memUsage) > 0) {
-        addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, toMb(memUsage), false));
-    }
-}
-
-void ComposeResultSubTask::run() {
-    MAlignment alignment = createAlignment();
-    CHECK_OP(stateInfo, );
-
-    createAnnotations(alignment);
-    CHECK_OP(stateInfo, );
-}
-
-SharedDbiDataHandler ComposeResultSubTask::getAlignment() const {
-    return msa;
-}
-
-SharedDbiDataHandler ComposeResultSubTask::getAnnotations() const {
-    return annotations;
-}
-
-MAlignment ComposeResultSubTask::createAlignment() {
-    MAlignment result("Aligned reads");
-
-    DNASequence referenceSeq = getReferenceSequence();
-    CHECK_OP(stateInfo, result);
-    result.setAlphabet(referenceSeq.alphabet);
-
-    // add the reference row
-    result.addRow(referenceSeq.getName(), referenceSeq.seq, 0, stateInfo);
-    CHECK_OP(stateInfo, result);
-
-    QList<U2MsaGap> referenceGaps = getReferenceGaps();
-    CHECK_OP(stateInfo, result);
-
-    insertShiftedGapsIntoReference(result, referenceGaps);
-    CHECK_OP(stateInfo, result);
-
-    for (int i=0; i<reads.size(); i++) {
-        // add the read row
-        DNASequence readSeq = getReadSequence(i);
-        CHECK_OP(stateInfo, result);
-
-        result.addRow(readSeq.getName(), readSeq.seq, i + 1, stateInfo);
-        CHECK_OP(stateInfo, result);
-
-        PairwiseAlignmentTask *subTask = getPATask(i);
-        CHECK_OP(stateInfo, result);
-        foreach (const U2MsaGap &gap, subTask->getReadGaps()) {
-            result.insertGaps(i + 1, gap.offset, gap.gap, stateInfo);
-            CHECK_OP(stateInfo, result);
-        }
-
-        // add reference gaps to the read
-        insertShiftedGapsIntoRead(result, i, referenceGaps);
-        CHECK_OP(stateInfo, result);
-    }
-
-    result.trim(false);
-
-    QScopedPointer<MAlignmentObject> msaObject(MAlignmentImporter::createAlignment(storage->getDbiRef(), result, stateInfo));
-    CHECK_OP(stateInfo, result);
-    msa = storage->getDataHandler(msaObject->getEntityRef());
-
-    // remove gap columns
-    msaObject->deleteColumnWithGaps(GAP_COLUMN_ONLY, stateInfo);
-
-    return msaObject->getMAlignment();
-}
-
-void ComposeResultSubTask::createAnnotations(const MAlignment &alignment) {
-    const MAlignmentRow &referenceRow = alignment.getRow(0);
-    QScopedPointer<AnnotationTableObject> annsObject(new AnnotationTableObject(referenceRow.getName() + " features", storage->getDbiRef()));
-
-    QList<SharedAnnotationData> anns;
-    for (int i=1; i<alignment.getNumRows(); i++) {
-        const MAlignmentRow &readRow = alignment.getRow(i);
-        U2Region region = getReadRegion(readRow, referenceRow);
-        PairwiseAlignmentTask *task = getPATask(i - 1);
-        CHECK_OP(stateInfo, );
-
-        SharedAnnotationData ann(new AnnotationData);
-        ann->location = getLocation(region, task->isComplement());
-        ann->name = GBFeatureUtils::getKeyInfo(GBFeatureKey_misc_feature).text;
-        ann->qualifiers << U2Qualifier("label", task->getInitialReadName());
-        anns.append(ann);
-    }
-    annsObject->addAnnotations(anns);
-
-    annotations = storage->getDataHandler(annsObject->getEntityRef());
-}
-
-U2Region ComposeResultSubTask::getReadRegion(const MAlignmentRow &readRow, const MAlignmentRow &referenceRow) const {
-    U2Region region(0, readRow.getRowLengthWithoutTrailing());
-
-    // calculate read start
-    if (!readRow.getGapModel().isEmpty()) {
-        U2MsaGap firstGap = readRow.getGapModel().first();
-        if (0 == firstGap.offset) {
-            region.startPos += firstGap.gap;
-            region.length -= firstGap.gap;
-        }
-    }
-
-    qint64 leftGap = 0;
-    qint64 innerGap = 0;
-    foreach (const U2MsaGap &gap, referenceRow.getGapModel()) {
-        qint64 endPos = gap.offset + gap.gap;
-        if (gap.offset < region.startPos) {
-            leftGap += gap.gap;
-        } else if (endPos <= region.endPos()) {
-            innerGap += gap.gap;
-        } else {
-            break;
-        }
-    }
-
-    region.startPos -= leftGap;
-    region.length -= innerGap;
-    return region;
-}
-
-U2Location ComposeResultSubTask::getLocation(const U2Region &region, bool isComplement) {
-    U2Location result;
-    result->strand = isComplement ? U2Strand(U2Strand::Complementary) : U2Strand(U2Strand::Direct);
-
-    if (region.startPos < 0) {
-        // TODO: just trim the region because it is incorrect to make the annotation circular: the left (negative) part of the read is not aligned.
-        // Fix it when the task can work with circular references.
-        result->regions << U2Region(0, region.length + region.startPos);
-    } else {
-        result->regions << region;
-    }
-
-    return result;
-}
-
-PairwiseAlignmentTask * ComposeResultSubTask::getPATask(int readNum) {
-    CHECK_EXT(readNum < subTasks.size(), setError(L10N::internalError("Wrong reads number")), NULL);
-    return subTasks[readNum];
-}
-
-DNASequence ComposeResultSubTask::getReadSequence(int readNum) {
-    PairwiseAlignmentTask *subTask = getPATask(readNum);
-    CHECK_OP(stateInfo, DNASequence());
-
-    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, subTask->getRead()));
-    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), DNASequence());
-    DNASequence seq = readObject->getWholeSequence(stateInfo);
-    CHECK_OP(stateInfo, DNASequence());
-    return seq;
-}
-
-DNASequence ComposeResultSubTask::getReferenceSequence() {
-    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
-    CHECK_EXT(!refObject.isNull(), setError(L10N::nullPointerError("Reference sequence")), DNASequence());
-    DNASequence seq = refObject->getWholeSequence(stateInfo);
-    CHECK_OP(stateInfo, DNASequence());
-    return seq;
-}
-
-namespace {
-    bool compare(const U2MsaGap &gap1, const U2MsaGap &gap2) {
-        return gap1.offset < gap2.offset;
-    }
-}
-
-QList<U2MsaGap> ComposeResultSubTask::getReferenceGaps() {
-    QList<U2MsaGap> result;
-
-    for (int i=0; i<reads.size(); i++) {
-        result << getShiftedGaps(i);
-        CHECK_OP(stateInfo, result);
-    }
-    qSort(result.begin(), result.end(), compare);
-    return result;
-}
-
-QList<U2MsaGap> ComposeResultSubTask::getShiftedGaps(int rowNum) {
-    QList<U2MsaGap> result;
-
-    PairwiseAlignmentTask *subTask = getPATask(rowNum);
-    CHECK_OP(stateInfo, result);
-
-    qint64 wholeGap = 0;
-    foreach (const U2MsaGap &gap, subTask->getReferenceGaps()) {
-        result << U2MsaGap(gap.offset - wholeGap, gap.gap);
-        wholeGap += gap.gap;
-    }
-    return result;
-}
-
-void ComposeResultSubTask::insertShiftedGapsIntoReference(MAlignment &alignment, const QList<U2MsaGap> &gaps) {
-    for (int i=gaps.size() - 1; i>=0; i--) {
-        U2MsaGap gap = gaps[i];
-        alignment.insertGaps(0, gap.offset, gap.gap, stateInfo);
-        CHECK_OP(stateInfo, );
-    }
-}
-
-void ComposeResultSubTask::insertShiftedGapsIntoRead(MAlignment &alignment, int readNum, const QList<U2MsaGap> &gaps) {
-    QList<U2MsaGap> ownGaps = getShiftedGaps(readNum);
-    CHECK_OP(stateInfo, );
-
-    qint64 globalOffset = 0;
-    foreach (const U2MsaGap &gap, gaps) {
-        if (ownGaps.contains(gap)) { // task own gaps into account but don't insert them
-            globalOffset += gap.gap;
-            ownGaps.removeOne(gap);
-            continue;
-        }
-        alignment.insertGaps(readNum + 1, globalOffset + gap.offset, gap.gap, stateInfo);
-        CHECK_OP(stateInfo, );
-        globalOffset += gap.gap;
-    }
-}
-
-/************************************************************************/
-/* KAlignSubTask */
-/************************************************************************/
-const qint64 KAlignSubTask::MAX_GAP_SIZE = 10;
-const qint64 KAlignSubTask::EXTENSION_COEF = 2;
-
-KAlignSubTask::KAlignSubTask(const SharedDbiDataHandler &reference, const SharedDbiDataHandler &read, DbiDataStorage *storage)
-: Task("KAlign task wrapper", TaskFlags_FOSE_COSC), reference(reference), read(read), storage(storage), maxRegionSize(0)
-{
-
-}
-
-const SharedDbiDataHandler KAlignSubTask::getRead() const {
-    return read;
-}
-
-qint64 KAlignSubTask::getMaxRegionSize() const {
-    return maxRegionSize;
-}
-
-U2Region KAlignSubTask::getCoreRegion() const {
-    return coreRegion;
-}
-
-void KAlignSubTask::prepare() {
-    qint64 memUsage = calcMemUsageBytes(storage, reference, stateInfo) + calcMemUsageBytes(storage, read, stateInfo);
-    CHECK_OP(stateInfo, );
-    if (toMb(memUsage) > 0) {
-        addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, toMb(memUsage), false));
-    }
-
-    createAlignment();
-    CHECK_OP(stateInfo, );
-
-    AbstractAlignmentTaskFactory *factory = getAbstractAlignmentTaskFactory("Hirschberg (KAlign)", "KAlign", stateInfo);
-    CHECK_OP(stateInfo, );
-
-    QScopedPointer<PairwiseAlignmentTaskSettings> settings(createSettings(storage, msa, stateInfo));
-    CHECK_OP(stateInfo, );
-    addSubTask(factory->getTaskInstance(settings.take()));
-}
-
-void KAlignSubTask::run() {
-    QScopedPointer<MAlignmentObject> msaObject(StorageUtils::getMsaObject(storage, msa));
-    CHECK_EXT(!msaObject.isNull(), setError(L10N::nullPointerError("MSA object")), );
-    int rowCount = msaObject->getNumRows();
-    CHECK_EXT(2 == rowCount, setError(L10N::internalError("Wrong rows count: " + QString::number(rowCount))), );
-
-    MAlignmentRow readRow = msaObject->getRow(1);
-    QList<U2Region> regions = getRegions(readRow.getGapModel(), readRow.getRowLengthWithoutTrailing());
-    calculateCoreRegion(regions);
-    extendCoreRegion(regions);
-
-    algoLog.details(tr("Max region size: %1").arg(maxRegionSize));
-    algoLog.details(tr("Core region: %1-%2").arg(coreRegion.startPos).arg(coreRegion.endPos()-1));
-}
-
-QList<U2Region> KAlignSubTask::getRegions(const QList<U2MsaGap> &gaps, qint64 rowLength) const {
-    QList<U2Region> regions;
-    qint64 startPos = 0;
-    foreach (const U2MsaGap &gap, gaps) {
-        qint64 length = gap.offset - startPos;
-        if (length > 0) {
-            regions << U2Region(startPos, length);
-        }
-        startPos = gap.offset + gap.gap;
-    }
-    if (startPos < rowLength) {
-        qint64 length = rowLength - startPos;
-        regions << U2Region(startPos, length);
-    }
-    return regions;
-}
-
-void KAlignSubTask::calculateCoreRegion(const QList<U2Region> &regions) {
-    coreRegion = U2Region(0, 0);
-    maxRegionSize = 0;
-    U2Region currentRegion = coreRegion;
-    foreach (const U2Region &region, regions) {
-        if (maxRegionSize < region.length) {
-            maxRegionSize = region.length;
-        }
-        if (0 == currentRegion.length) {
-            currentRegion = region;
-            continue;
-        }
-        if (region.startPos - currentRegion.endPos() < MAX_GAP_SIZE) {
-            currentRegion.length = region.endPos() - currentRegion.startPos;
-        } else {
-            if (coreRegion.length < currentRegion.length) {
-                coreRegion = currentRegion;
-            }
-            currentRegion = region;
-        }
-    }
-    if (coreRegion.length < currentRegion.length) {
-        coreRegion = currentRegion;
-    }
-}
-
-void KAlignSubTask::extendCoreRegion(const QList<U2Region> &regions) {
-    qint64 leftSize = 0;
-    qint64 rightSize = 0;
-    foreach (const U2Region &region, regions) {
-        if (region.endPos() - 1 < coreRegion.startPos) {
-            leftSize += region.length;
-        }
-        if (region.startPos > coreRegion.endPos() - 1) {
-            rightSize += region.length;
-        }
-    }
-    coreRegion.startPos -= leftSize * EXTENSION_COEF;
-    coreRegion.length += (leftSize + rightSize) * EXTENSION_COEF;
-}
-
-AbstractAlignmentTaskFactory * KAlignSubTask::getAbstractAlignmentTaskFactory(const QString &algoId, const QString &implId, U2OpStatus &os) {
-    AlignmentAlgorithm *algo = AppContext::getAlignmentAlgorithmsRegistry()->getAlgorithm(algoId);
-    CHECK_EXT(NULL != algo, os.setError(tr("The %1 algorithm is not found. Add the %1 plugin.").arg(algoId)), NULL);
-
-    AlgorithmRealization *algoImpl = algo->getAlgorithmRealization(implId);
-    CHECK_EXT(NULL != algoImpl, os.setError(tr("The %1 algorithm is not found. Check that the %1 plugin is up to date.").arg(algoId)), NULL);
-
-    return algoImpl->getTaskFactory();
-}
-
-void KAlignSubTask::createAlignment() {
-    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
-    CHECK_EXT(!refObject.isNull(), setError(L10N::nullPointerError("Reference sequence")), );
-    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, read));
-    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), );
-
-    MAlignment alignment("msa", refObject->getAlphabet());
-    QByteArray refData = refObject->getWholeSequenceData(stateInfo);
-    CHECK_OP(stateInfo, );
-    alignment.addRow(refObject->getSequenceName(), refData, stateInfo);
-    CHECK_OP(stateInfo, );
-    QByteArray readData = readObject->getWholeSequenceData(stateInfo);
-    CHECK_OP(stateInfo, );
-    alignment.addRow(readObject->getSequenceName(), readData, stateInfo);
-    CHECK_OP(stateInfo, );
-
-    QScopedPointer<MAlignmentObject> msaObj(MAlignmentImporter::createAlignment(storage->getDbiRef(), alignment, stateInfo));
-    CHECK_OP(stateInfo, );
-    msa = storage->getDataHandler(msaObj->getEntityRef());
-}
-
-PairwiseAlignmentTaskSettings * KAlignSubTask::createSettings(DbiDataStorage *storage, const SharedDbiDataHandler &msa, U2OpStatus &os) {
-    QScopedPointer<MAlignmentObject> msaObject(StorageUtils::getMsaObject(storage, msa));
-    CHECK_EXT(!msaObject.isNull(), os.setError(L10N::nullPointerError("MSA object")), NULL);
-
-    U2DataId referenceId = msaObject->getRow(0).getRowDBInfo().sequenceId;
-    U2DataId readId = msaObject->getRow(1).getRowDBInfo().sequenceId;
-
-    PairwiseAlignmentTaskSettings *settings = new PairwiseAlignmentTaskSettings();
-    settings->alphabet = msaObject->getAlphabet()->getId();
-    settings->inNewWindow = false;
-    settings->msaRef = msaObject->getEntityRef();
-    settings->firstSequenceRef = U2EntityRef(msaObject->getEntityRef().dbiRef, referenceId);
-    settings->secondSequenceRef = U2EntityRef(msaObject->getEntityRef().dbiRef, readId);
-    return settings;
-}
-
-/************************************************************************/
-/* PairwiseAlignmentTask */
-/************************************************************************/
-PairwiseAlignmentTask::PairwiseAlignmentTask(const SharedDbiDataHandler &reference, const SharedDbiDataHandler &read, DbiDataStorage *storage)
-: Task("Pairwise Alignment", TaskFlags_FOSE_COSC), reference(reference), read(read), storage(storage), kalign(NULL), rKalign(NULL), cKalign(NULL), rcKalign(NULL), reverse(false), complement(false), offset(0)
-{
-    setMaxParallelSubtasks(2);
-}
-
-void PairwiseAlignmentTask::prepare() {
-    qint64 memUsage = calcMemUsageBytes(storage, reference, stateInfo) + calcMemUsageBytes(storage, read, stateInfo);
-    CHECK_OP(stateInfo, );
-    if (toMb(memUsage) > 0) {
-        addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, toMb(memUsage), false));
-    }
-
-    createRcReads();
-    CHECK_OP(stateInfo, );
-
-    kalign = new KAlignSubTask(reference, read, storage);
-    rKalign = new KAlignSubTask(reference, rRead, storage);
-    cKalign = new KAlignSubTask(reference, cRead, storage);
-    rcKalign = new KAlignSubTask(reference, rcRead, storage);
-    addSubTask(kalign);
-    addSubTask(rKalign);
-    addSubTask(cKalign);
-    addSubTask(rcKalign);
-}
-
-QList<Task*> PairwiseAlignmentTask::onSubTaskFinished(Task *subTask) {
-    QList<Task*> result;
-    CHECK_OP(stateInfo, result);
-    CHECK((kalign == subTask) || (rKalign == subTask) || (cKalign == subTask) || (rcKalign == subTask), result);
-    CHECK(kalign->isFinished() && rKalign->isFinished() && cKalign->isFinished() && rcKalign->isFinished(), result);
-
-    createSWAlignment(initRc());
-
-    AbstractAlignmentTaskFactory *factory = KAlignSubTask::getAbstractAlignmentTaskFactory("Smith-Waterman", "SW_classic", stateInfo);
-    CHECK_OP(stateInfo, result);
-
-    QScopedPointer<PairwiseAlignmentTaskSettings> settings(KAlignSubTask::createSettings(storage, msa, stateInfo));
-    CHECK_OP(stateInfo, result);
-    settings->setCustomValue("SW_gapOpen", -10);
-    settings->setCustomValue("SW_gapExtd", -1);
-    settings->setCustomValue("SW_scoringMatrix", "dna");
-
-    result << factory->getTaskInstance(settings.take());
-    return result;
-}
-
-void PairwiseAlignmentTask::run() {
-    CHECK_OP(stateInfo, );
-    QScopedPointer<MAlignmentObject> msaObject(StorageUtils::getMsaObject(storage, msa));
-    CHECK_EXT(!msaObject.isNull(), setError(L10N::nullPointerError("MSA object")), );
-    int rowCount = msaObject->getNumRows();
-    CHECK_EXT(2 == rowCount, setError(L10N::internalError("Wrong rows count: " + QString::number(rowCount))), );
-
-    referenceGaps = msaObject->getRow(0).getGapModel();
-    readGaps = msaObject->getRow(1).getGapModel();
-
-    CHECK(offset > 0, );
-    shiftGaps(referenceGaps);
-    shiftGaps(readGaps);
-    readGaps.prepend(U2MsaGap(0, offset));
-}
-
-bool PairwiseAlignmentTask::isReverse() const {
-    return reverse;
-}
-
-bool PairwiseAlignmentTask::isComplement() const {
-    return complement;
-}
-
-SharedDbiDataHandler PairwiseAlignmentTask::getRead() const {
-    if (reverse && complement) {
-        return rcKalign->getRead();
-    } else if (reverse) {
-        return rKalign->getRead();
-    } else if (complement) {
-        return cKalign->getRead();
-    } else {
-        return kalign->getRead();
-    }
-}
-
-QList<U2MsaGap> PairwiseAlignmentTask::getReferenceGaps() const {
-    return referenceGaps;
-}
-
-QList<U2MsaGap> PairwiseAlignmentTask::getReadGaps() const {
-    return readGaps;
-}
-
-QString PairwiseAlignmentTask::getInitialReadName() const {
-    return initialReadName;
-}
-
-QByteArray PairwiseAlignmentTask::getComplement(const QByteArray &sequence, const DNAAlphabet *alphabet) {
-    DNATranslation *translator = AppContext::getDNATranslationRegistry()->lookupComplementTranslation(alphabet);
-    CHECK_EXT(NULL != translator, setError(tr("Can't translate read sequence to reverse complement")), "");
-
-    QByteArray translation(sequence.length(), 0);
-    translator->translate(sequence.constData(), sequence.length(), translation.data(), translation.length());
-    return translation;
-}
-
-QByteArray PairwiseAlignmentTask::getReverse(const QByteArray &sequence) const {
-    QByteArray result = sequence;
-    TextUtils::reverse(result.data(), result.length());
-    return result;
-}
-
-QByteArray PairwiseAlignmentTask::getReverseComplement(const QByteArray &sequence, const DNAAlphabet *alphabet) {
-    return getReverse(getComplement(sequence, alphabet));
-}
-
-void PairwiseAlignmentTask::createRcReads() {
-    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, read));
-    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), );
-
-    DNASequence seq = readObject->getWholeSequence(stateInfo);
-    CHECK_OP(stateInfo, );
-    QByteArray sequence = seq.seq;
-    initialReadName = seq.getName();
-
-    seq.seq = getReverse(sequence);
-    seq.setName(initialReadName + "_rev");
-    U2EntityRef rRef = U2SequenceUtils::import(storage->getDbiRef(), seq, stateInfo);
-    CHECK_OP(stateInfo, );
-    rRead = storage->getDataHandler(rRef);
-
-    seq.seq = getComplement(sequence, readObject->getAlphabet());
-    seq.setName(initialReadName + "_compl");
-    U2EntityRef cRef = U2SequenceUtils::import(storage->getDbiRef(), seq, stateInfo);
-    CHECK_OP(stateInfo, );
-    cRead = storage->getDataHandler(cRef);
-
-    seq.seq = getReverseComplement(sequence, readObject->getAlphabet());
-    seq.setName(initialReadName + "_rev_compl");
-    U2EntityRef rcRef = U2SequenceUtils::import(storage->getDbiRef(), seq, stateInfo);
-    CHECK_OP(stateInfo, );
-    rcRead = storage->getDataHandler(rcRef);
-}
-
-KAlignSubTask * PairwiseAlignmentTask::initRc() {
-    QList<qint64> values;
-    values << kalign->getMaxRegionSize();
-    values << rKalign->getMaxRegionSize();
-    values << cKalign->getMaxRegionSize();
-    values << rcKalign->getMaxRegionSize();
-    qSort(values);
-    qint64 max = values.last();
-
-    if (kalign->getMaxRegionSize() == max) {
-        reverse = false;
-        complement = false;
-    } else if (rKalign->getMaxRegionSize() == max) {
-        reverse = true;
-        complement = false;
-    } else if (cKalign->getMaxRegionSize() == max) {
-        reverse = false;
-        complement = true;
-    } else {
-        assert(rcKalign->getMaxRegionSize() == max);
-        reverse = true;
-        complement = true;
-    }
-
-    if (reverse && complement) {
-        return rcKalign;
-    } else if (reverse) {
-        return rKalign;
-    } else if (complement) {
-        return cKalign;
-    } else {
-        return kalign;
-    }
-}
-
-void PairwiseAlignmentTask::createSWAlignment(KAlignSubTask *task) {
-    QScopedPointer<U2SequenceObject> refObject(StorageUtils::getSequenceObject(storage, reference));
-    CHECK_EXT(!refObject.isNull(), setError(L10N::nullPointerError("Reference sequence")), );
-    QScopedPointer<U2SequenceObject> readObject(StorageUtils::getSequenceObject(storage, task->getRead()));
-    CHECK_EXT(!readObject.isNull(), setError(L10N::nullPointerError("Read sequence")), );
-
-    QByteArray referenceData = refObject->getSequenceData(task->getCoreRegion(), stateInfo);
-    CHECK_OP(stateInfo, );
-
-    MAlignment alignment("msa", refObject->getAlphabet());
-    alignment.addRow(refObject->getSequenceName(), referenceData, stateInfo);
-    CHECK_OP(stateInfo, );
-    QByteArray readData = readObject->getWholeSequenceData(stateInfo);
-    CHECK_OP(stateInfo, );
-    alignment.addRow(readObject->getSequenceName(), readData, stateInfo);
-    CHECK_OP(stateInfo, );
-
-    QScopedPointer<MAlignmentObject> msaObj(MAlignmentImporter::createAlignment(storage->getDbiRef(), alignment, stateInfo));
-    CHECK_OP(stateInfo, );
-    msa = storage->getDataHandler(msaObj->getEntityRef());
-    offset = task->getCoreRegion().startPos;
-}
-
-void PairwiseAlignmentTask::shiftGaps(QList<U2MsaGap> &gaps) const {
-    for (int i=0; i<gaps.size(); i++) {
-        gaps[i].offset += offset;
-    }
-}
-
-} // LocalWorkflow
-} // U2
diff --git a/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.h b/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.h
deleted file mode 100644
index dd8a96f..0000000
--- a/src/plugins/workflow_designer/src/library/AlignToReferenceWorker.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/**
-* UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
-* http://ugene.net
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-* MA 02110-1301, USA.
-*/
-
-#ifndef _U2_ALIGN_TO_REFERENCE_WORKER_H_
-#define _U2_ALIGN_TO_REFERENCE_WORKER_H_
-
-#include <U2Lang/BaseDatasetWorker.h>
-#include <U2Lang/WorkflowUtils.h>
-
-namespace U2 {
-class AbstractAlignmentTaskFactory;
-class PairwiseAlignmentTaskSettings;
-namespace LocalWorkflow {
-
-class KAlignSubTask : public Task {
-    Q_OBJECT
-public:
-    KAlignSubTask(const SharedDbiDataHandler &reference, const SharedDbiDataHandler &read, DbiDataStorage *storage);
-    void prepare();
-    void run();
-
-    const SharedDbiDataHandler getRead() const;
-    qint64 getMaxRegionSize() const;
-    U2Region getCoreRegion() const;
-
-    static PairwiseAlignmentTaskSettings * createSettings(DbiDataStorage *storage, const SharedDbiDataHandler &msa, U2OpStatus &os);
-    static AbstractAlignmentTaskFactory * getAbstractAlignmentTaskFactory(const QString &algoId, const QString &implId, U2OpStatus &os);
-
-private:
-    void createAlignment();
-    QList<U2Region> getRegions(const QList<U2MsaGap> &gaps, qint64 rowLength) const;
-    void calculateCoreRegion(const QList<U2Region> &regions);
-    void extendCoreRegion(const QList<U2Region> &regions);
-
-private:
-    const SharedDbiDataHandler reference;
-    const SharedDbiDataHandler read;
-    DbiDataStorage *storage;
-    SharedDbiDataHandler msa;
-
-    qint64 maxRegionSize;
-    U2Region coreRegion;
-
-    static const qint64 MAX_GAP_SIZE;
-    static const qint64 EXTENSION_COEF;
-};
-
-class PairwiseAlignmentTask : public Task {
-    Q_OBJECT
-public:
-    PairwiseAlignmentTask(const SharedDbiDataHandler &reference, const SharedDbiDataHandler &read, DbiDataStorage *storage);
-    void prepare();
-    QList<Task*> onSubTaskFinished(Task *subTask);
-    void run();
-
-    bool isReverse() const;
-    bool isComplement() const;
-    SharedDbiDataHandler getRead() const;
-    QList<U2MsaGap> getReferenceGaps() const;
-    QList<U2MsaGap> getReadGaps() const;
-    QString getInitialReadName() const;
-
-private:
-    QByteArray getComplement(const QByteArray &sequence, const DNAAlphabet *alphabet);
-    QByteArray getReverse(const QByteArray &sequence) const;
-    QByteArray getReverseComplement(const QByteArray &sequence, const DNAAlphabet *alphabet);
-    void createRcReads();
-    KAlignSubTask * initRc();
-    void createSWAlignment(KAlignSubTask *task);
-    void shiftGaps(QList<U2MsaGap> &gaps) const;
-
-private:
-    const SharedDbiDataHandler reference;
-    const SharedDbiDataHandler read;
-    SharedDbiDataHandler rRead;
-    SharedDbiDataHandler cRead;
-    SharedDbiDataHandler rcRead;
-    DbiDataStorage *storage;
-
-    KAlignSubTask *kalign;
-    KAlignSubTask *rKalign;
-    KAlignSubTask *cKalign;
-    KAlignSubTask *rcKalign;
-    bool reverse;
-    bool complement;
-    qint64 offset;
-
-    SharedDbiDataHandler msa;
-    qint64 maxChunkSize;
-    QList<U2MsaGap> referenceGaps;
-    QList<U2MsaGap> readGaps;
-    QString initialReadName;
-};
-
-class ComposeResultSubTask : public Task {
-    Q_OBJECT
-public:
-    ComposeResultSubTask(const SharedDbiDataHandler &reference, const QList<SharedDbiDataHandler> &reads, const QList<PairwiseAlignmentTask*> subTasks, DbiDataStorage *storage);
-    void prepare();
-    void run();
-    SharedDbiDataHandler getAlignment() const;
-    SharedDbiDataHandler getAnnotations() const;
-
-private:
-    PairwiseAlignmentTask * getPATask(int readNum);
-    DNASequence getReadSequence(int readNum);
-    DNASequence getReferenceSequence();
-    QList<U2MsaGap> getReferenceGaps();
-    QList<U2MsaGap> getShiftedGaps(int rowNum);
-    void insertShiftedGapsIntoReference(MAlignment &alignment, const QList<U2MsaGap> &gaps);
-    void insertShiftedGapsIntoRead(MAlignment &alignment, int readNum, const QList<U2MsaGap> &gaps);
-    MAlignment createAlignment();
-    void createAnnotations(const MAlignment &alignment);
-    U2Region getReadRegion(const MAlignmentRow &readRow, const MAlignmentRow &referenceRow) const;
-    U2Location getLocation(const U2Region &region, bool isComplement);
-
-private:
-    const SharedDbiDataHandler reference;
-    const QList<SharedDbiDataHandler> reads;
-    const QList<PairwiseAlignmentTask*> subTasks;
-    DbiDataStorage *storage;
-    SharedDbiDataHandler msa;
-    SharedDbiDataHandler annotations;
-};
-
-class AlignToReferenceTask : public Task {
-    Q_OBJECT
-public:
-    AlignToReferenceTask(const SharedDbiDataHandler &reference, const QList<SharedDbiDataHandler> &reads, DbiDataStorage *storage);
-    void prepare();
-    QList<Task*> onSubTaskFinished(Task *subTask);
-    SharedDbiDataHandler getAlignment() const;
-    SharedDbiDataHandler getAnnotations() const;
-
-private:
-    const SharedDbiDataHandler reference;
-    const QList<SharedDbiDataHandler> reads;
-    QList<PairwiseAlignmentTask*> subTasks;
-    ComposeResultSubTask *composeSubTask;
-    DbiDataStorage *storage;
-    SharedDbiDataHandler msa;
-    SharedDbiDataHandler annotations;
-    int subTasksCount;
-};
-
-class AlignToReferencePrompter : public PrompterBase<AlignToReferencePrompter> {
-    Q_OBJECT
-public:
-    AlignToReferencePrompter(Actor *a);
-
-protected:
-    QString composeRichDoc();
-};
-
-class AlignToReferenceWorker : public BaseDatasetWorker {
-    Q_OBJECT
-public:
-    AlignToReferenceWorker(Actor *a);
-
-    void cleanup();
-
-protected:
-    Task * createPrepareTask(U2OpStatus &os) const;
-    void onPrepared(Task *task, U2OpStatus &os);
-    Task * createTask(const QList<Message> &messages) const;
-    QVariantMap getResult(Task *task, U2OpStatus &os) const;
-    MessageMetadata generateMetadata(const QString &datasetName) const;
-
-private:
-    Document *referenceDoc;
-    SharedDbiDataHandler reference;
-};
-
-class AlignToReferenceWorkerFactory : public DomainFactory {
-public:
-    AlignToReferenceWorkerFactory();
-    Worker * createWorker(Actor *a);
-
-    static const QString ACTOR_ID;
-    static void init();
-};
-
-} // LocalWorkflow
-} // U2
-
-#endif // _U2_ALIGN_TO_REFERENCE_WORKER_H_
diff --git a/src/plugins/workflow_designer/src/library/AminoTranslationWorker.cpp b/src/plugins/workflow_designer/src/library/AminoTranslationWorker.cpp
index d36b34a..2e737df 100644
--- a/src/plugins/workflow_designer/src/library/AminoTranslationWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/AminoTranslationWorker.cpp
@@ -83,7 +83,7 @@ void TranslateSequence2AminoTask::run(){
         translatedSeq.clear();
 
         U2SequenceImporter importer;
-        importer.startSequence(dbiRef, U2ObjectDbi::ROOT_FOLDER, seqObj->getSequenceName() + " " + resultName + QString(" %1").arg(currentSeq) + " direct", false, stateInfo);
+        importer.startSequence(stateInfo, dbiRef, U2ObjectDbi::ROOT_FOLDER, seqObj->getSequenceName() + " " + resultName + QString(" %1").arg(currentSeq) + " direct", false);
 
         int blockCounter = 0;
         qint64 end = directRegion.startPos +  directRegion.length / 3 * 3;
@@ -112,7 +112,7 @@ void TranslateSequence2AminoTask::run(){
         translatedSeq.clear();
 
         U2SequenceImporter importer;
-        importer.startSequence(dbiRef, U2ObjectDbi::ROOT_FOLDER, seqObj->getSequenceName()+ " " + resultName + QString(" %1").arg(currentSeq) + " complementary", false, stateInfo);
+        importer.startSequence(stateInfo, dbiRef, U2ObjectDbi::ROOT_FOLDER, seqObj->getSequenceName()+ " " + resultName + QString(" %1").arg(currentSeq) + " complementary", false);
 
         QByteArray complementarySeq;
         char* complSeq = NULL;
diff --git a/src/plugins/workflow_designer/src/library/AminoTranslationWorker.h b/src/plugins/workflow_designer/src/library/AminoTranslationWorker.h
index 6e8b99c..31ad0e3 100644
--- a/src/plugins/workflow_designer/src/library/AminoTranslationWorker.h
+++ b/src/plugins/workflow_designer/src/library/AminoTranslationWorker.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
-#include <QtCore/QSharedPointer>
+#include <QSharedPointer>
 #include <U2Core/DNATranslation.h>
 
 namespace U2 {
diff --git a/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.cpp b/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.cpp
index 45ba0ce..1167ec3 100644
--- a/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.h b/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.h
index 446a432..f9a2687 100644
--- a/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.h
+++ b/src/plugins/workflow_designer/src/library/AssemblyToSequenceWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/BaseDocWriter.cpp b/src/plugins/workflow_designer/src/library/BaseDocWriter.cpp
index 8b705ed..54d1cf7 100644
--- a/src/plugins/workflow_designer/src/library/BaseDocWriter.cpp
+++ b/src/plugins/workflow_designer/src/library/BaseDocWriter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -234,7 +234,7 @@ void BaseDocWriter::openAdapter(IOAdapter *io, const QString &aUrl, const SaveDo
         if (!info.dir().exists()) {
             bool created = info.dir().mkpath(info.dir().absolutePath());
             if (!created) {
-                os.setError(tr("Can not create directory: %1").arg(info.dir().absolutePath()));
+                os.setError(tr("Can not create folder: %1").arg(info.dir().absolutePath()));
             }
         }
     }
diff --git a/src/plugins/workflow_designer/src/library/BaseDocWriter.h b/src/plugins/workflow_designer/src/library/BaseDocWriter.h
index 00e1eb8..5f72842 100644
--- a/src/plugins/workflow_designer/src/library/BaseDocWriter.h
+++ b/src/plugins/workflow_designer/src/library/BaseDocWriter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/CDSearchWorker.cpp b/src/plugins/workflow_designer/src/library/CDSearchWorker.cpp
index f4ac4e7..edda9ae 100644
--- a/src/plugins/workflow_designer/src/library/CDSearchWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/CDSearchWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,26 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#include "CDSearchWorker.h"
-
 #include <U2Algorithm/CDSearchTaskFactoryRegistry.h>
 
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-
-#include <U2Core/DNASequence.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/TaskSignalMapper.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequence.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "CDSearchWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -77,8 +77,8 @@ void CDSearchWorkerFactory::init() {
         Descriptor ed(EVALUE_ATTR, CDSearchWorker::tr("Expect value"),
             CDSearchWorker::tr("Modifies the <a href=\"http://www.ncbi.nlm.nih.gov/BLAST/blastcgihelp.shtml#expect\">E-value</a> threshold used for filtering results. False positive results should be very rare with the default setting of 0.01 (use a more conservative, i.e. lower setting for more reliable results), results with E-values in the range of 1 and above should be considered putative false positives.")
            );
-        Descriptor pd(DB_PATH_ATTR, CDSearchWorker::tr("Database directory"),
-            CDSearchWorker::tr("Specifies database directory for local search.")
+        Descriptor pd(DB_PATH_ATTR, CDSearchWorker::tr("Database folder"),
+            CDSearchWorker::tr("Specifies database folder for local search.")
            );
 
         a << new Attribute(nd, BaseTypes::STRING_TYPE(), true, "CDD result");
@@ -117,7 +117,7 @@ void CDSearchWorkerFactory::init() {
     }
 
     {
-        delegates[DB_PATH_ATTR] = new URLDelegate("", "Database Directory", false, true, false);
+        delegates[DB_PATH_ATTR] = new URLDelegate("", "Database Folder", false, true, false);
     }
 
     proto->setPrompter(new CDSearchPrompter());
diff --git a/src/plugins/workflow_designer/src/library/CDSearchWorker.h b/src/plugins/workflow_designer/src/library/CDSearchWorker.h
index f56aab9..b91ef69 100644
--- a/src/plugins/workflow_designer/src/library/CDSearchWorker.h
+++ b/src/plugins/workflow_designer/src/library/CDSearchWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/CfgExternalToolModel.cpp b/src/plugins/workflow_designer/src/library/CfgExternalToolModel.cpp
index f67dd89..3eafdba 100644
--- a/src/plugins/workflow_designer/src/library/CfgExternalToolModel.cpp
+++ b/src/plugins/workflow_designer/src/library/CfgExternalToolModel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -269,10 +269,10 @@ void CfgExternalToolModel::initFormats() {
     seqRead.supportedObjectTypes += GObjectTypes::SEQUENCE;
 
     DocumentFormatConstraints msaWrite(commonConstraints);
-    msaWrite.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    msaWrite.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 
     DocumentFormatConstraints msaRead(commonConstraints);
-    msaRead.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    msaRead.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
 
     DocumentFormatConstraints annWrite(commonConstraints);
     annWrite.supportedObjectTypes += GObjectTypes::ANNOTATION_TABLE;
diff --git a/src/plugins/workflow_designer/src/library/CfgExternalToolModel.h b/src/plugins/workflow_designer/src/library/CfgExternalToolModel.h
index 638b1c3..a72c6a4 100644
--- a/src/plugins/workflow_designer/src/library/CfgExternalToolModel.h
+++ b/src/plugins/workflow_designer/src/library/CfgExternalToolModel.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _CFG_EXTERNAL_TOOL_MODEL_H_
 #define _CFG_EXTERNAL_TOOL_MODEL_H_
 
-#include <QtCore/QAbstractTableModel>
+#include <QAbstractTableModel>
 
 #include <U2Lang/ExternalToolCfg.h>
 
diff --git a/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.cpp b/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.cpp
index 690a9c3..ddea976 100644
--- a/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,15 +34,19 @@
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
 #include <U2Formats/ConvertFileTask.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -132,13 +136,13 @@ void ConvertFilesFormatWorkerFactory::init() {
         Descriptor excludedFormats(EXCLUDED_FORMATS_ID, ConvertFilesFormatWorker::tr("Excluded formats"),
             ConvertFilesFormatWorker::tr("Input file won't be converted to any of selected formats."));
 
-        Descriptor outDir(OUT_MODE_ID, ConvertFilesFormatWorker::tr("Output directory"),
-            ConvertFilesFormatWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(OUT_MODE_ID, ConvertFilesFormatWorker::tr("Output folder"),
+            ConvertFilesFormatWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(CUSTOM_DIR_ID, ConvertFilesFormatWorker::tr("Custom directory"),
-            ConvertFilesFormatWorker::tr("Select the custom output directory."));
+        Descriptor customDir(CUSTOM_DIR_ID, ConvertFilesFormatWorker::tr("Custom folder"),
+            ConvertFilesFormatWorker::tr("Select the custom output folder."));
 
         a << new Attribute( BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE(), BaseTypes::STRING_TYPE(), true );
         a << new Attribute(outDir, BaseTypes::NUM_TYPE(), false, QVariant(WORKFLOW_INTERNAL));
@@ -270,7 +274,7 @@ QString ConvertFilesFormatWorker::createWorkingDir( const QString& fileUrl ){
                 result += "/";
             }
         }else{
-            algoLog.error(tr("Convert Format: result directory is empty, default workflow directory is used"));
+            algoLog.error(tr("Convert Format: result folder is empty, default workflow folder is used"));
             useInternal = true;
         }
     }else{
diff --git a/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.h b/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.h
index 2230b2d..ca161c6 100644
--- a/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.h
+++ b/src/plugins/workflow_designer/src/library/ConvertFilesFormatWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp
index 96d7fab..e440b01 100644
--- a/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include <U2Core/AppContext.h>
 #include <U2Core/AnnotationTableObject.h>
+#include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.h b/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.h
index 6777a13..62080bb 100644
--- a/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.h
+++ b/src/plugins/workflow_designer/src/library/ConvertSnpeffVariationsToAnnotationsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/CoreLib.cpp b/src/plugins/workflow_designer/src/library/CoreLib.cpp
index 327211b..63827b3 100644
--- a/src/plugins/workflow_designer/src/library/CoreLib.cpp
+++ b/src/plugins/workflow_designer/src/library/CoreLib.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,6 @@
  * MA 02110-1301, USA.
  */
 
-#include <qdom.h>
-
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
@@ -50,7 +48,6 @@
 #include <U2Lang/WorkflowManager.h>
 #include <U2Lang/WorkflowSettings.h>
 
-#include "AlignToReferenceWorker.h"
 #include "AminoTranslationWorker.h"
 #include "AssemblyToSequenceWorker.h"
 #include "BaseDocWriter.h"
@@ -86,6 +83,7 @@
 #include "ReverseComplementWorker.h"
 #include "RmdupBamWorker.h"
 #include "ScriptWorker.h"
+#include "SequenceQualityTrimWorker.h"
 #include "SequenceSplitWorker.h"
 #include "SequencesToMSAWorker.h"
 #include "SortBamWorker.h"
@@ -171,7 +169,7 @@ void CoreLib::init() {
         QList<PortDescriptor*> p; QList<Attribute*> a;
         a << new Attribute(BaseAttributes::READ_BY_LINES_ATTRIBUTE(), BaseTypes::BOOL_TYPE(), false, false);
 
-        Descriptor acd(CoreLibConstants::READ_TEXT_PROTO_ID, tr("Read Plain Text"), tr("Reads text from local or remote files."));
+        Descriptor acd(CoreLibConstants::READ_TEXT_PROTO_ID, tr("Read Plain Text"), tr("Reads text from local or remote files. All text file formats supported by UGENE are allowed as input to this element."));
         p << new PortDescriptor(Descriptor(BasePorts::OUT_TEXT_PORT_ID(), tr("Plain text"), ""), dtl, false, true);
         ReadDocActorProto* proto = new ReadDocActorProto(BaseDocumentFormats::PLAIN_TEXT, acd, p, a);
         proto->setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::TEXT);
@@ -204,7 +202,7 @@ void CoreLib::init() {
     // GENERIC WRITE MSA actor proto
     {
         DocumentFormatConstraints constr;
-        constr.supportedObjectTypes.insert( GObjectTypes::MULTIPLE_ALIGNMENT );
+        constr.supportedObjectTypes.insert( GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT );
         constr.addFlagToSupport(DocumentFormatFlag_SupportWriting);
         constr.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
         QList<DocumentFormatId> supportedFormats = AppContext::getDocumentFormatRegistry()->selectFormats( constr );
@@ -223,7 +221,7 @@ void CoreLib::init() {
 
             QVariantMap m;
             foreach( const DocumentFormatId & fid, supportedFormats ) {
-                m[fid] = fid;
+                m[AppContext::getDocumentFormatRegistry()->getFormatById(fid)->getFormatName()] = fid;
             }
             proto->getEditor()->addDelegate(new ComboBoxDelegate(m), BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId());
             proto->setPrompter(new WriteDocPrompter(tr("Save all MSAs from <u>%1</u> to <u>%2</u>."), BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()));
@@ -268,7 +266,7 @@ void CoreLib::init() {
 
             QVariantMap m;
             foreach( const DocumentFormatId & fid, supportedFormats ) {
-                m[fid] = fid;
+                m[AppContext::getDocumentFormatRegistry()->getFormatById(fid)->getFormatName()] = fid;
             }
 
             ComboBoxDelegate *comboDelegate = new ComboBoxDelegate(m);
@@ -283,7 +281,6 @@ void CoreLib::init() {
             r->registerProto(BaseActorCategories::CATEGORY_DATASINK(), proto);
         }
     }
-    AlignToReferenceWorkerFactory::init();
     Alignment2SequenceWorkerFactory::init();
     AminoTranslationWorkerFactory::init();
     AssemblyToSequencesWorkerFactory::init();
@@ -297,6 +294,7 @@ void CoreLib::init() {
     ExtractConsensusWorkerFactory::init();
     ExtractMSAConsensusSequenceWorkerFactory::init();
     ExtractMSAConsensusStringWorkerFactory::init();
+    FastqQualityTrimWorkerFactory::init();
     FetchSequenceByIdFromAnnotationFactory::init();
     FilterAnnotationsByQualifierWorkerFactory::init();
     FilterAnnotationsWorkerFactory::init();
@@ -310,14 +308,14 @@ void CoreLib::init() {
     MergeFastqWorkerFactory::init();
     MultiplexerWorkerFactory::init();
     PassFilterWorkerFactory::init();
-    QualityTrimWorkerFactory::init();
     RCWorkerFactory::init();
     ReadAnnotationsWorkerFactory::init();
     ReadAssemblyWorkerFactory::init();
     ReadVariationWorkerFactory::init();
-    RenameChomosomeInVariationWorkerFactory::init();
     RemoteDBFetcherFactory::init();
+    RenameChomosomeInVariationWorkerFactory::init();
     RmdupBamWorkerFactory::init();
+    SequenceQualityTrimWorkerFactory::init();
     SequenceSplitWorkerFactory::init();
     SequencesToMSAWorkerFactory::init();
     SortBamWorkerFactory::init();
@@ -335,7 +333,7 @@ void CoreLib::initUsersWorkers() {
 
     QDir dir(path);
     if(!dir.exists()) {
-        //log.info(tr("There isn't directory with users workflow elements"));
+        //log.info(tr("There isn't folder with users workflow elements"));
         return;
     }
     dir.setNameFilters(QStringList() << "*.usa"); //think about file extension // Answer: Ok :)
diff --git a/src/plugins/workflow_designer/src/library/CoreLib.h b/src/plugins/workflow_designer/src/library/CoreLib.h
index f7998bc..492f94f 100644
--- a/src/plugins/workflow_designer/src/library/CoreLib.h
+++ b/src/plugins/workflow_designer/src/library/CoreLib.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
index 56fbe1e..17f22de 100644
--- a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
+++ b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,6 +26,7 @@
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DocumentModel.h>
 #include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
index e9c6eb1..9c0bf5b 100644
--- a/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
+++ b/src/plugins/workflow_designer/src/library/CreateExternalProcessDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/DocActors.cpp b/src/plugins/workflow_designer/src/library/DocActors.cpp
index ecbdb8a..4c888cd 100644
--- a/src/plugins/workflow_designer/src/library/DocActors.cpp
+++ b/src/plugins/workflow_designer/src/library/DocActors.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,20 +21,23 @@
 
 #include <QApplication>
 
-#include "DocActors.h"
-#include "CoreLib.h"
-#include "../util/DatasetValidator.h"
+#include <U2Core/DocumentModel.h>
+#include <U2Core/FormatUtils.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
+
 #include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
 #include <U2Lang/SharedDbUrlUtils.h>
 #include <U2Lang/URLAttribute.h>
-#include <U2Core/DocumentModel.h>
-#include <U2Core/FormatUtils.h>
-#include <U2Core/SaveDocumentTask.h>
+
+#include "../util/DatasetValidator.h"
+#include "CoreLib.h"
+#include "DocActors.h"
 
 namespace U2 {
 namespace Workflow {
diff --git a/src/plugins/workflow_designer/src/library/DocActors.h b/src/plugins/workflow_designer/src/library/DocActors.h
index dca062e..ef58fac 100644
--- a/src/plugins/workflow_designer/src/library/DocActors.h
+++ b/src/plugins/workflow_designer/src/library/DocActors.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/DocWorkers.cpp b/src/plugins/workflow_designer/src/library/DocWorkers.cpp
index fdac6ce..81edf4e 100644
--- a/src/plugins/workflow_designer/src/library/DocWorkers.cpp
+++ b/src/plugins/workflow_designer/src/library/DocWorkers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include "CoreLib.h"
 #include "GenericReadWorker.h"
@@ -36,10 +36,11 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/QVariantUtils.h>
 #include <U2Core/TextObject.h>
+#include <U2Core/U2AttributeUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SequenceUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -239,7 +240,7 @@ static U2SequenceObject *addSeqObject(Document *doc, DNASequence &seq) {
     U2SequenceObject *dna = NULL;
     if (doc->getDocumentFormat()->isObjectOpSupported(doc, DocumentFormat::DocObjectOp_Add, GObjectTypes::SEQUENCE)) {
         U2OpStatus2Log os;
-        U2EntityRef seqRef = U2SequenceUtils::import(doc->getDbiRef(), seq, os);
+        U2EntityRef seqRef = U2SequenceUtils::import(os, doc->getDbiRef(), seq);
         CHECK_OP(os, NULL);
         dna = new U2SequenceObject(seq.getName(), seqRef);
         doc->addObject(dna);
@@ -326,10 +327,13 @@ inline static U2SequenceObject * getCopiedSequenceObject(const QVariantMap &data
     if (refCount > 2) { // need to copy because it is used by another worker
         DNASequence seq = seqObj->getSequence(reg, os);
         CHECK_OP(os, NULL);
-        U2EntityRef seqRef = U2SequenceUtils::import(context->getDataStorage()->getDbiRef(), seq, os);
+        U2EntityRef seqRef = U2SequenceUtils::import(os, context->getDataStorage()->getDbiRef(), seq);
         CHECK_OP(os, NULL);
 
-        return new U2SequenceObject(seqObj->getSequenceName(), seqRef);
+        U2SequenceObject *clonedSeqObj = new U2SequenceObject(seqObj->getSequenceName(), seqRef);
+        U2AttributeUtils::copyObjectAttributes(seqObj->getEntityRef(), clonedSeqObj->getEntityRef(), os);
+
+        return clonedSeqObj;
     } else {
         return seqObj.take();
     }
@@ -844,20 +848,20 @@ void MSAWriter::data2doc(Document* doc, const QVariantMap& data) {
 
 void MSAWriter::data2document(Document* doc, const QVariantMap& data, WorkflowContext* context) {
     SharedDbiDataHandler msaId = data.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-    QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+    QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
     SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", );
-    MAlignment ma = msaObj->getMAlignment();
+    MultipleSequenceAlignment msa = msaObj->getMsaCopy();
 
-    SAFE_POINT(!ma.isEmpty(), tr("Empty alignment passed for writing to %1").arg(doc->getURLString()), )
+    SAFE_POINT(!msa->isEmpty(), tr("Empty alignment passed for writing to %1").arg(doc->getURLString()), )
 
-    if (ma.getName().isEmpty()) {
+    if (msa->getName().isEmpty()) {
         QString name = QString(MA_OBJECT_NAME + "_%1").arg(ct);
-        ma.setName(name);
+        msa->setName(name);
         ct++;
     }
 
     U2OpStatus2Log os;
-    MAlignmentObject* obj = MAlignmentImporter::createAlignment(doc->getDbiRef(), ma, os);
+    MultipleSequenceAlignmentObject* obj = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), msa, os);
     CHECK_OP(os, );
 
     doc->addObject(obj);
diff --git a/src/plugins/workflow_designer/src/library/DocWorkers.h b/src/plugins/workflow_designer/src/library/DocWorkers.h
index e10d585..0f035cb 100644
--- a/src/plugins/workflow_designer/src/library/DocWorkers.h
+++ b/src/plugins/workflow_designer/src/library/DocWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ExternalProcessWorker.cpp b/src/plugins/workflow_designer/src/library/ExternalProcessWorker.cpp
index 58dcc57..0aae5ba 100644
--- a/src/plugins/workflow_designer/src/library/ExternalProcessWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ExternalProcessWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,8 +28,8 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/AnnotationTableObject.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/GObjectRelationRoles.h>
@@ -48,7 +48,7 @@
 
 #include <U2Designer/DelegateEditors.h>
 
-#include <QtCore/QDateTime>
+#include <QDateTime>
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -103,14 +103,14 @@ namespace {
         return annsObj;
     }
 
-    static MAlignmentObject * toAlignment(const QVariantMap &data, WorkflowContext *context, U2OpStatus &os) {
+    static MultipleSequenceAlignmentObject * toAlignment(const QVariantMap &data, WorkflowContext *context, U2OpStatus &os) {
         QString slot = BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId();
         if (!data.contains(slot)) {
             os.setError(QObject::tr("Empty alignment slot"));
             return NULL;
         }
         SharedDbiDataHandler msaId = data[slot].value<SharedDbiDataHandler>();
-        MAlignmentObject *msaObj = StorageUtils::getMsaObject(context->getDataStorage(), msaId);
+        MultipleSequenceAlignmentObject *msaObj = StorageUtils::getMsaObject(context->getDataStorage(), msaId);
         if (NULL == msaObj) {
             os.setError(QObject::tr("Error with alignment object"));
         }
@@ -182,7 +182,7 @@ namespace {
             CHECK_OP(os,);
             d->addObject(annsObj);
         } else if (dataCfg.isAlignment()) {
-            MAlignmentObject *msaObj = toAlignment(data, context, os);
+            MultipleSequenceAlignmentObject *msaObj = toAlignment(data, context, os);
             CHECK_OP(os,);
             d->addObject(msaObj);
         } else if (dataCfg.isAnnotatedSequence()) {
@@ -320,10 +320,10 @@ static GObject * getObject(Document *d, GObjectType t, U2OpStatus &os) {
 }
 
 static SharedDbiDataHandler getAlignment(Document *d, WorkflowContext *context, U2OpStatus &os) {
-    GObject *obj = getObject(d, GObjectTypes::MULTIPLE_ALIGNMENT, os);
+    GObject *obj = getObject(d, GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, os);
     CHECK_OP(os, SharedDbiDataHandler());
 
-    MAlignmentObject *msaObj =  static_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *msaObj =  static_cast<MultipleSequenceAlignmentObject*>(obj);
     if (NULL == msaObj) {
         os.setError(QObject::tr("Error with alignment object"));
         return SharedDbiDataHandler();
@@ -454,7 +454,7 @@ void ExternalProcessWorker::sl_onTaskFinishied() {
             foreach(const U2EntityRef &eRef, refs) {
                 QScopedPointer<U2SequenceObject> obj(new U2SequenceObject("tmp_name", eRef));
                 if (first) {
-                    seqImporter.startSequence(context->getDataStorage()->getDbiRef(), U2ObjectDbi::ROOT_FOLDER, slotId, false, os);
+                    seqImporter.startSequence(os, context->getDataStorage()->getDbiRef(), U2ObjectDbi::ROOT_FOLDER, slotId, false);
                     first = false;
                 }
                 U2Region wholeSeq(0, obj->getSequenceLength());
diff --git a/src/plugins/workflow_designer/src/library/ExternalProcessWorker.h b/src/plugins/workflow_designer/src/library/ExternalProcessWorker.h
index 219f3fc..5055907 100644
--- a/src/plugins/workflow_designer/src/library/ExternalProcessWorker.h
+++ b/src/plugins/workflow_designer/src/library/ExternalProcessWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
index 5746aaf..6356ed4 100644
--- a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/FormatUtils.h>
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.h b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.h
index 9c6ee8b..067a1d8 100644
--- a/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.h
+++ b/src/plugins/workflow_designer/src/library/ExtractAssemblyCoverageWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.cpp b/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.cpp
index 3188268..86e3a7b 100644
--- a/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,6 +27,7 @@
 #include <U2Core/FailTask.h>
 #include <U2Core/U2AssemblyDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.h b/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.h
index b3792f6..964e125 100644
--- a/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.h
+++ b/src/plugins/workflow_designer/src/library/ExtractConsensusWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.cpp b/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.cpp
index 876f936..966e70a 100644
--- a/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,16 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
 #include <U2Algorithm/MSAConsensusAlgorithmRegistry.h>
 #include <U2Algorithm/MSAConsensusUtils.h>
-#include <U2Algorithm/BuiltInConsensusAlgorithms.h>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/FailTask.h>
 #include <U2Core/U2AssemblyDbi.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -69,7 +70,7 @@ void ExtractMSAConsensusWorker::init() {
 Task* ExtractMSAConsensusWorker::tick() {
     if (hasMsa()) {
         U2OpStatusImpl os;
-        MAlignment msa = takeMsa(os);
+        MultipleSequenceAlignment msa = takeMsa(os);
         CHECK_OP(os, new FailTask(os.getError()));
         extractMsaConsensus = createTask(msa);
         return extractMsaConsensus;
@@ -98,20 +99,20 @@ bool ExtractMSAConsensusWorker::hasMsa() const {
     return port->hasMessage();
 }
 
-MAlignment ExtractMSAConsensusWorker::takeMsa(U2OpStatus &os) {
+MultipleSequenceAlignment ExtractMSAConsensusWorker::takeMsa(U2OpStatus &os) {
     const Message m = getMessageAndSetupScriptValues(ports[BasePorts::IN_MSA_PORT_ID()]);
     const QVariantMap data = m.getData().toMap();
     if (!data.contains(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId())) {
         os.setError(tr("Empty msa slot"));
-        return MAlignment();
+        return MultipleSequenceAlignment();
     }
     const SharedDbiDataHandler dbiId = data[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()].value<SharedDbiDataHandler>();
-    const MAlignmentObject *obj = StorageUtils::getMsaObject(context->getDataStorage(), dbiId);
+    const MultipleSequenceAlignmentObject *obj = StorageUtils::getMsaObject(context->getDataStorage(), dbiId);
     if (NULL == obj) {
         os.setError(tr("Error with msa object"));
-        return MAlignment();
+        return MultipleSequenceAlignment();
     }
-    return obj->getMAlignment();
+    return obj->getMultipleAlignment();
 }
 
 ///////////////////////////////////////////////////////////////////////
@@ -139,7 +140,7 @@ void ExtractMSAConsensusStringWorker::sendResult(const SharedDbiDataHandler & /*
     outPort->put(Message(outPort->getBusType(), data));
 }
 
-ExtractMSAConsensusTaskHelper* ExtractMSAConsensusStringWorker::createTask(const MAlignment &msa){
+ExtractMSAConsensusTaskHelper* ExtractMSAConsensusStringWorker::createTask(const MultipleSequenceAlignment &msa){
     const QString algoId = getValue<QString>(ALGO_ATTR_ID);
     const int threshold = getValue<int>(THRESHOLD_ATTR_ID);
     extractMsaConsensus = new ExtractMSAConsensusTaskHelper(algoId, threshold, true, msa, context->getDataStorage()->getDbiRef());
@@ -171,7 +172,7 @@ void ExtractMSAConsensusSequenceWorker::sendResult(const SharedDbiDataHandler &s
     outPort->put(Message(outPort->getBusType(), data));
 }
 
-ExtractMSAConsensusTaskHelper* ExtractMSAConsensusSequenceWorker::createTask(const MAlignment &msa){
+ExtractMSAConsensusTaskHelper* ExtractMSAConsensusSequenceWorker::createTask(const MultipleSequenceAlignment &msa){
     const QString algoId = getValue<QString>(ALGO_ATTR_ID);
     const int threshold = getValue<int>(THRESHOLD_ATTR_ID);
     const bool keepGaps = getValue<bool>(GAPS_ATTR_ID);
@@ -182,12 +183,12 @@ ExtractMSAConsensusTaskHelper* ExtractMSAConsensusSequenceWorker::createTask(con
 
 ///////////////////////////////////////////////////////////////////////
 //ExtractMSAConsensusTaskHelper
-ExtractMSAConsensusTaskHelper::ExtractMSAConsensusTaskHelper(const QString &algoId, int threshold, bool keepGaps, const MAlignment &msa, const U2DbiRef &targetDbi)
+ExtractMSAConsensusTaskHelper::ExtractMSAConsensusTaskHelper(const QString &algoId, int threshold, bool keepGaps, const MultipleSequenceAlignment &msa, const U2DbiRef &targetDbi)
 : Task(ExtractMSAConsensusTaskHelper::tr("Extract consensus"), TaskFlags_NR_FOSCOE),
   algoId(algoId),
   threshold(threshold),
   keepGaps(keepGaps),
-  msa(msa),
+  msa(msa->getCopy()),
   targetDbi(targetDbi)
   //,resultText("")
 {
@@ -196,7 +197,7 @@ ExtractMSAConsensusTaskHelper::ExtractMSAConsensusTaskHelper(const QString &algo
 
 QString ExtractMSAConsensusTaskHelper::getResultName () const {
     QString res;
-    res = msa.getName();
+    res = msa->getName();
     res+="_consensus";
     return res;
 }
@@ -212,7 +213,7 @@ void ExtractMSAConsensusTaskHelper::prepare() {
 
     if (algo->getFactory()->isSequenceLikeResult()) {
         U2SequenceImporter seqImporter;
-        seqImporter.startSequence(targetDbi, U2ObjectDbi::ROOT_FOLDER, getResultName(), false, stateInfo);
+        seqImporter.startSequence(stateInfo, targetDbi, U2ObjectDbi::ROOT_FOLDER, getResultName(), false);
         seqImporter.addBlock(resultText.data(), resultText.length(), stateInfo);
         resultSequence = seqImporter.finalizeSequence(stateInfo);
     }
diff --git a/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.h b/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.h
index e9091bd..40dcc57 100644
--- a/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.h
+++ b/src/plugins/workflow_designer/src/library/ExtractMSAConsensusWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,7 +43,7 @@ public:
     Task * tick();
     void cleanup();
 protected:
-    virtual ExtractMSAConsensusTaskHelper* createTask(const MAlignment &msa) = 0;
+    virtual ExtractMSAConsensusTaskHelper* createTask(const MultipleSequenceAlignment &msa) = 0;
     virtual void finish() = 0;
     virtual void sendResult(const SharedDbiDataHandler &seqId) = 0;
     ExtractMSAConsensusTaskHelper *extractMsaConsensus;
@@ -52,7 +52,7 @@ private slots:
 
 private:
     bool hasMsa() const;
-    MAlignment takeMsa(U2OpStatus &os);
+    MultipleSequenceAlignment takeMsa(U2OpStatus &os);
 };
 
 class ExtractMSAConsensusStringWorker : public ExtractMSAConsensusWorker {
@@ -60,7 +60,7 @@ class ExtractMSAConsensusStringWorker : public ExtractMSAConsensusWorker {
 public:
     ExtractMSAConsensusStringWorker(Actor *actor);
 protected:
-    virtual ExtractMSAConsensusTaskHelper* createTask(const MAlignment &msa);
+    virtual ExtractMSAConsensusTaskHelper* createTask(const MultipleSequenceAlignment &msa);
     virtual void finish();
     virtual void sendResult(const SharedDbiDataHandler &seqId);
 };
@@ -70,7 +70,7 @@ class ExtractMSAConsensusSequenceWorker : public ExtractMSAConsensusWorker {
 public:
     ExtractMSAConsensusSequenceWorker(Actor *actor);
 protected:
-    virtual ExtractMSAConsensusTaskHelper* createTask(const MAlignment &msa);
+    virtual ExtractMSAConsensusTaskHelper* createTask(const MultipleSequenceAlignment &msa);
     virtual void finish();
     virtual void sendResult(const SharedDbiDataHandler &seqId);
 };
@@ -78,7 +78,7 @@ protected:
 class ExtractMSAConsensusTaskHelper : public Task {
     Q_OBJECT
 public:
-    ExtractMSAConsensusTaskHelper(const QString &algoId, int threshold, bool keepGaps, const MAlignment &msa, const U2DbiRef &targetDbi);
+    ExtractMSAConsensusTaskHelper(const QString &algoId, int threshold, bool keepGaps, const MultipleSequenceAlignment &msa, const U2DbiRef &targetDbi);
 
 
     void prepare();
@@ -92,7 +92,7 @@ private:
     const QString algoId;
     const int threshold;
     const bool keepGaps;
-    MAlignment msa;
+    MultipleSequenceAlignment msa;
     const U2DbiRef targetDbi;
     U2Sequence resultSequence;
     QByteArray resultText;
diff --git a/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.cpp b/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.cpp
index af2469b..4e561ab 100644
--- a/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.cpp
+++ b/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,25 +21,32 @@
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/FileAndDirectoryUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
 #include <U2Formats/FastqFormat.h>
-#include <U2Designer/DelegateEditors.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
 
 #include "FASTQWorkersLibrary.h"
 
+#define MAX_PHRED33_VALUE 74
+
 namespace U2 {
 namespace LocalWorkflow {
 
@@ -94,13 +101,13 @@ void CASAVAFilterWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, CASAVAFilterWorker::tr("Output directory"),
-            CASAVAFilterWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, CASAVAFilterWorker::tr("Output folder"),
+            CASAVAFilterWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, CASAVAFilterWorker::tr("Custom directory"),
-            CASAVAFilterWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, CASAVAFilterWorker::tr("Custom folder"),
+            CASAVAFilterWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BaseNGSWorker::OUT_NAME_ID, CASAVAFilterWorker::tr("Output file name"),
             CASAVAFilterWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
@@ -203,7 +210,7 @@ QStringList CASAVAFilterTask::getParameters(U2OpStatus &/*os*/) {
 
 ///////////////////////////////////////////////////////////////
 //QualityTrim
-const QString QualityTrimWorkerFactory::ACTOR_ID("QualityTrim");
+const QString FastqQualityTrimWorkerFactory::ACTOR_ID("QualityTrim");
 
 static const QString QUALITY_ID("qual-id");
 static const QString LEN_ID("len-id");
@@ -212,7 +219,7 @@ static const QString BOTH_ID("both-ends");
 /************************************************************************/
 /* QualityTrimPrompter */
 /************************************************************************/
-QString QualityTrimPrompter::composeRichDoc() {
+QString FastqQualityTrimPrompter::composeRichDoc() {
     IntegralBusPort* input = qobject_cast<IntegralBusPort*>(target->getPort(BaseNGSWorker::INPUT_PORT));
     const Actor* producer = input->getProducer(BaseSlots::URL_SLOT().getId());
     QString unsetStr = "<font color='red'>"+tr("unset")+"</font>";
@@ -225,18 +232,18 @@ QString QualityTrimPrompter::composeRichDoc() {
 /************************************************************************/
 /* QualityTrimWorkerFactory */
 /************************************************************************/
-void QualityTrimWorkerFactory::init() {
-    Descriptor desc( ACTOR_ID, QualityTrimWorker::tr("FASTQ Quality Trimmer"),
-        QualityTrimWorker::tr("The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. "
+void FastqQualityTrimWorkerFactory::init() {
+    Descriptor desc( ACTOR_ID, FastqQualityTrimWorker::tr("FASTQ Quality Trimmer"),
+        FastqQualityTrimWorker::tr("The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. "
                               "Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than "
                               "the minimum length threshold then the sequence is skipped.") );
 
     QList<PortDescriptor*> p;
     {
-        Descriptor inD(BaseNGSWorker::INPUT_PORT, QualityTrimWorker::tr("Input File"),
-            QualityTrimWorker::tr("Set of FASTQ reads files"));
-        Descriptor outD(BaseNGSWorker::OUTPUT_PORT, QualityTrimWorker::tr("Output File"),
-            QualityTrimWorker::tr("Output FASTQ files"));
+        Descriptor inD(BaseNGSWorker::INPUT_PORT, FastqQualityTrimWorker::tr("Input File"),
+            FastqQualityTrimWorker::tr("Set of FASTQ reads files"));
+        Descriptor outD(BaseNGSWorker::OUTPUT_PORT, FastqQualityTrimWorker::tr("Output File"),
+            FastqQualityTrimWorker::tr("Output FASTQ files"));
 
         QMap<Descriptor, DataTypePtr> inM;
         inM[BaseSlots::URL_SLOT()] = BaseTypes::STRING_TYPE();
@@ -249,25 +256,25 @@ void QualityTrimWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, QualityTrimWorker::tr("Output directory"),
-            QualityTrimWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, FastqQualityTrimWorker::tr("Output folder"),
+            FastqQualityTrimWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, QualityTrimWorker::tr("Custom directory"),
-            QualityTrimWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, FastqQualityTrimWorker::tr("Custom folder"),
+            FastqQualityTrimWorker::tr("Select the custom output folder."));
 
-        Descriptor outName(BaseNGSWorker::OUT_NAME_ID, QualityTrimWorker::tr("Output file name"),
-            QualityTrimWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
+        Descriptor outName(BaseNGSWorker::OUT_NAME_ID, FastqQualityTrimWorker::tr("Output file name"),
+            FastqQualityTrimWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
 
-        Descriptor qualT(QUALITY_ID, QualityTrimWorker::tr("Quality threshold"),
-            QualityTrimWorker::tr("Quality threshold for trimming."));
+        Descriptor qualT(QUALITY_ID, FastqQualityTrimWorker::tr("Quality threshold"),
+            FastqQualityTrimWorker::tr("Quality threshold for trimming."));
 
-        Descriptor lenT(LEN_ID, QualityTrimWorker::tr("Min Length"),
-            QualityTrimWorker::tr("Too short reads are discarded by the filter."));
+        Descriptor lenT(LEN_ID, FastqQualityTrimWorker::tr("Min Length"),
+            FastqQualityTrimWorker::tr("Too short reads are discarded by the filter."));
 
-        Descriptor bothD(BOTH_ID, QualityTrimWorker::tr("Trim both ends"),
-            QualityTrimWorker::tr("Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b>"));
+        Descriptor bothD(BOTH_ID, FastqQualityTrimWorker::tr("Trim both ends"),
+            FastqQualityTrimWorker::tr("Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b>"));
 
         a << new Attribute(outDir, BaseTypes::NUM_TYPE(), false, QVariant(FileAndDirectoryUtils::WORKFLOW_INTERNAL));
         Attribute* customDirAttr = new Attribute(customDir, BaseTypes::STRING_TYPE(), false, QVariant(""));
@@ -282,9 +289,9 @@ void QualityTrimWorkerFactory::init() {
     QMap<QString, PropertyDelegate*> delegates;
     {
         QVariantMap directoryMap;
-        QString fileDir = QualityTrimWorker::tr("Input file");
-        QString workflowDir = QualityTrimWorker::tr("Workflow");
-        QString customD = QualityTrimWorker::tr("Custom");
+        QString fileDir = FastqQualityTrimWorker::tr("Input file");
+        QString workflowDir = FastqQualityTrimWorker::tr("Workflow");
+        QString customD = FastqQualityTrimWorker::tr("Custom");
         directoryMap[fileDir] = FileAndDirectoryUtils::FILE_DIRECTORY;
         directoryMap[workflowDir] = FileAndDirectoryUtils::WORKFLOW_INTERNAL;
         directoryMap[customD] = FileAndDirectoryUtils::CUSTOM;
@@ -299,23 +306,23 @@ void QualityTrimWorkerFactory::init() {
 
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
     proto->setEditor(new DelegateEditor(delegates));
-    proto->setPrompter(new QualityTrimPrompter());
+    proto->setPrompter(new FastqQualityTrimPrompter());
 
     WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_NGS_BASIC(), proto);
     DomainFactory *localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
-    localDomain->registerEntry(new QualityTrimWorkerFactory());
+    localDomain->registerEntry(new FastqQualityTrimWorkerFactory());
 }
 
 /************************************************************************/
 /* QualityTrimWorker */
 /************************************************************************/
-QualityTrimWorker::QualityTrimWorker(Actor *a)
+FastqQualityTrimWorker::FastqQualityTrimWorker(Actor *a)
 :BaseNGSWorker(a)
 {
 
 }
 
-QVariantMap QualityTrimWorker::getCustomParameters() const{
+QVariantMap FastqQualityTrimWorker::getCustomParameters() const{
     QVariantMap res;
     res.insert(QUALITY_ID, getValue<int>(QUALITY_ID));
     res.insert(LEN_ID, getValue<int>(LEN_ID));
@@ -323,72 +330,101 @@ QVariantMap QualityTrimWorker::getCustomParameters() const{
     return res;
 }
 
-QString QualityTrimWorker::getDefaultFileName() const{
+QString FastqQualityTrimWorker::getDefaultFileName() const{
     return ".trimmed.fastq";
 }
 
-Task *QualityTrimWorker::getTask(const BaseNGSSetting &settings) const {
-    return new QualityTrimTask(settings);
+Task *FastqQualityTrimWorker::getTask(const BaseNGSSetting &settings) const {
+    return new FastqQualityTrimTask(settings);
 }
 
 //////////////////////////////////////////////////////
 //QualityTrimTask
-QualityTrimTask::QualityTrimTask(const BaseNGSSetting &settings)
+FastqQualityTrimTask::FastqQualityTrimTask(const BaseNGSSetting &settings)
     :BaseNGSTask(settings){
 
     GCOUNTER(cvar, tvar, "NGS:FASTQQualityTrimmerTask");
 }
 
-void QualityTrimTask::runStep(){
+// diagnose
+//   SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS.....................................................
+//   ..........................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX......................
+//   ...............................IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII......................
+//   .................................JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ......................
+//   LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................................................
+//   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+//   |                         |    |        |                              |                     |
+//  33                        59   64       73                            104                   126 <- maxValue is value from here
+// S 0........................26...31.......40
+// X                          -5....0........9.............................40
+// I                                0........9.............................40
+// J                                   3.....9.............................40
+// L 0.2......................26...31........41
+//
+//  S - Sanger        Phred+33,  raw reads typically (0, 40)
+//  X - Solexa        Solexa+64, raw reads typically (-5, 40)
+//  I - Illumina 1.3+ Phred+64,  raw reads typically (0, 40)
+//  J - Illumina 1.5+ Phred+64,  raw reads typically (3, 40) with 0=unused, 1=unused, 2=Read Segment Quality Control Indicator (bold)
+//  L - Illumina 1.8+ Phred+33,  raw reads typically (0, 41)
+DNAQualityType FastqQualityTrimTask::detectQualityType(){
+    int maxValue = 33;
+    int minValue = 126;
+    FASTQIterator iter_qual(settings.inputUrl, stateInfo);
+    CHECK(!stateInfo.hasError(), DNAQualityType_Sanger);
+
+    int counter = 0;
+    while (iter_qual.hasNext()) {
+        CHECK(!stateInfo.isCoR(), DNAQualityType_Sanger);
+
+        if (counter > 1000) {   // check only first 1000 reads in file
+            break;
+        }
+
+        DNASequence dna = iter_qual.next();
+        int seqLen = dna.length();
+        if (seqLen > dna.quality.qualCodes.length()) {
+            continue;
+        } else {
+            for (int pos = 0; pos <= seqLen - 1; pos++) {
+                maxValue = qMax(static_cast<int>(dna.quality.qualCodes.at(pos)), maxValue);
+                minValue = qMin(static_cast<int>(dna.quality.qualCodes.at(pos)), minValue);
+            }
+        }
+        counter++;
+    }
+    return DNAQuality::detectTypeByMinMaxQualityValues(minValue, maxValue);
+}
+
+void FastqQualityTrimTask::runStep(){
     int ncount = 0;
     int ycount = 0;
 
-    QScopedPointer<IOAdapter> io  (IOAdapterUtils::open(settings.outDir + settings.outName, stateInfo, IOAdapterMode_Append));
+    QScopedPointer<IOAdapter> io(IOAdapterUtils::open(settings.outDir + settings.outName, stateInfo, IOAdapterMode_Append));
 
     int quality = settings.customParameters.value(QUALITY_ID, 20).toInt();
     int minLen = settings.customParameters.value(LEN_ID, 0).toInt();
     bool bothEnds = settings.customParameters.value(BOTH_ID, false).toInt();
+    DNAQualityType qualityType = detectQualityType();
+    CHECK_OP(stateInfo, );
 
     FASTQIterator iter(settings.inputUrl, stateInfo);
-    if (stateInfo.hasError()) {
-        return;
-    }
-    while(iter.hasNext()){
-        if(stateInfo.isCoR()){
-            return;
-        }
+    CHECK_OP(stateInfo, );
+
+    while (iter.hasNext()) {
+        CHECK_OP(stateInfo, );
+
         DNASequence dna = iter.next();
-        QString comment = DNAInfo::getFastqComment(dna.info);
-        int seqLen = dna.length();
-        if(seqLen > dna.quality.qualCodes.length()){
+        dna.quality.type = qualityType;
+        const U2Region acceptedRegion = DNASequenceUtils::trimByQuality(dna, quality, minLen, bothEnds);
+
+        if (0 < acceptedRegion.length) {
+            ycount++;
+        } else {
             ncount++;
             continue;
-        }else{
-            int endPosition = seqLen-1;
-            for (; endPosition>=0; endPosition--){
-                if(dna.quality.getValue(endPosition) >= quality){
-                    break;
-                }
-            }
-            int beginPosition = 0;
-            if (bothEnds) {
-                for (; beginPosition<=endPosition; beginPosition++) {
-                    if (dna.quality.getValue(beginPosition) >= quality) {
-                        break;
-                    }
-                }
-            }
-            if(endPosition>=beginPosition && endPosition-beginPosition+1 >= minLen){
-                DNASequence trimmed(dna.getName(), dna.seq.left(endPosition+1).mid(beginPosition), dna.alphabet);
-                trimmed.quality = dna.quality;
-                trimmed.quality.qualCodes = trimmed.quality.qualCodes.left(endPosition+1).mid(beginPosition);
-                FastqFormat::writeEntry(trimmed.getName(), trimmed, io.data(), "Writing error", stateInfo, false);
-                ycount++;
-            }else{
-                ncount++;
-                continue;
-            }
         }
+
+        FastqFormat::writeEntry(dna.getName(), dna, io.data(), "Writing error", stateInfo, false);
     }
 
     algoLog.info(QString("Discarded by trimmer %1").arg(ncount));
@@ -396,7 +432,7 @@ void QualityTrimTask::runStep(){
     algoLog.info(QString("Total by trimmer %1").arg(ncount + ycount));
 }
 
-QStringList QualityTrimTask::getParameters(U2OpStatus &/*os*/){
+QStringList FastqQualityTrimTask::getParameters(U2OpStatus &/*os*/){
     QStringList res;
     return res;
 }
@@ -445,13 +481,13 @@ void MergeFastqWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, MergeFastqWorker::tr("Output directory"),
-            MergeFastqWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(BaseNGSWorker::OUT_MODE_ID, MergeFastqWorker::tr("Output folder"),
+            MergeFastqWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, MergeFastqWorker::tr("Custom directory"),
-            MergeFastqWorker::tr("Select the custom output directory."));
+        Descriptor customDir(BaseNGSWorker::CUSTOM_DIR_ID, MergeFastqWorker::tr("Custom folder"),
+            MergeFastqWorker::tr("Select the custom output folder."));
 
         Descriptor outName(BaseNGSWorker::OUT_NAME_ID, MergeFastqWorker::tr("Output file name"),
             MergeFastqWorker::tr("A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention."));
diff --git a/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.h b/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.h
index 71205da..3acb10e 100644
--- a/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.h
+++ b/src/plugins/workflow_designer/src/library/FASTQWorkersLibrary.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -72,43 +72,44 @@ protected:
 };
 
 //////////////////////////////////////////////////
-//QualityTrim
-class QualityTrimPrompter;
-typedef PrompterBase<QualityTrimPrompter> QualityTrimBase;
-class QualityTrimPrompter : public QualityTrimBase {
+//FastqQualityTrim
+class FastqQualityTrimPrompter;
+typedef PrompterBase<FastqQualityTrimPrompter> QualityTrimBase;
+class FastqQualityTrimPrompter : public QualityTrimBase {
     Q_OBJECT
 public:
-    QualityTrimPrompter(Actor* p = 0) : QualityTrimBase(p) {}
+    FastqQualityTrimPrompter(Actor* p = 0) : QualityTrimBase(p) {}
 protected:
     QString composeRichDoc();
-}; //QualityTrimPrompter
+}; //FastqQualityTrimPrompter
 
-class QualityTrimWorker: public BaseNGSWorker {
+class FastqQualityTrimWorker: public BaseNGSWorker {
     Q_OBJECT
 public:
-    QualityTrimWorker(Actor *a);
+    FastqQualityTrimWorker(Actor *a);
 protected:
     QVariantMap getCustomParameters() const;
     QString getDefaultFileName() const;
     Task *getTask(const BaseNGSSetting &settings) const;
 
-}; //QualityTrimWorker
+}; //FastqQualityTrimWorker
 
-class QualityTrimWorkerFactory : public DomainFactory {
+class FastqQualityTrimWorkerFactory : public DomainFactory {
     static const QString ACTOR_ID;
 public:
     static void init();
-    QualityTrimWorkerFactory() : DomainFactory(ACTOR_ID) {}
-    Worker* createWorker(Actor* a) { return new QualityTrimWorker(a); }
-}; //QualityTrimWorkerFactory
+    FastqQualityTrimWorkerFactory() : DomainFactory(ACTOR_ID) {}
+    Worker* createWorker(Actor* a) { return new FastqQualityTrimWorker(a); }
+}; //FastqQualityTrimWorkerFactory
 
-class QualityTrimTask : public BaseNGSTask{
+class FastqQualityTrimTask : public BaseNGSTask{
     Q_OBJECT
 public:
-    QualityTrimTask (const BaseNGSSetting &settings);
+    FastqQualityTrimTask (const BaseNGSSetting &settings);
 
 protected:
     void runStep();
+    DNAQualityType detectQualityType();
     QStringList getParameters(U2OpStatus& os);
 };
 
diff --git a/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.cpp b/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.cpp
index b1f17f8..e1fbb2f 100644
--- a/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.h b/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.h
index 9e6b564..a5ecaff 100644
--- a/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.h
+++ b/src/plugins/workflow_designer/src/library/FilterAnnotationsByQualifierWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.cpp
index dc90016..896d95c 100644
--- a/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.h b/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.h
index c1c2181..7b6daa2 100644
--- a/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.h
+++ b/src/plugins/workflow_designer/src/library/FilterAnnotationsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/FilterBamWorker.cpp b/src/plugins/workflow_designer/src/library/FilterBamWorker.cpp
index b0b1bd8..54e51c0 100644
--- a/src/plugins/workflow_designer/src/library/FilterBamWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/FilterBamWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
@@ -31,19 +32,21 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
-
 #include "FilterBamWorker.h"
 
 namespace U2 {
@@ -138,13 +141,13 @@ void FilterBamWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(OUT_MODE_ID, FilterBamWorker::tr("Output directory"),
-            FilterBamWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(OUT_MODE_ID, FilterBamWorker::tr("Output folder"),
+            FilterBamWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(CUSTOM_DIR_ID, FilterBamWorker::tr("Custom directory"),
-            FilterBamWorker::tr("Select the custom output directory."));
+        Descriptor customDir(CUSTOM_DIR_ID, FilterBamWorker::tr("Custom folder"),
+            FilterBamWorker::tr("Select the custom output folder."));
 
         Descriptor outName(OUT_NAME_ID, FilterBamWorker::tr("Output name"),
             FilterBamWorker::tr("A name of an output BAM/SAM file. If default of empty value is provided the output name is the name of the first BAM/SAM file with .filtered extention."));
@@ -377,7 +380,7 @@ void SamtoolsViewFilterTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError(tr("Directory does not exist: ") + outDir.absolutePath());
+        setError(tr("Folder does not exist: ") + outDir.absolutePath());
         return ;
     }
 
diff --git a/src/plugins/workflow_designer/src/library/FilterBamWorker.h b/src/plugins/workflow_designer/src/library/FilterBamWorker.h
index a3c2b49..d22ff5a 100644
--- a/src/plugins/workflow_designer/src/library/FilterBamWorker.h
+++ b/src/plugins/workflow_designer/src/library/FilterBamWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/FindWorker.cpp b/src/plugins/workflow_designer/src/library/FindWorker.cpp
index 99160f1..c839126 100644
--- a/src/plugins/workflow_designer/src/library/FindWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/FindWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,6 +19,7 @@
  * MA 02110-1301, USA.
  */
 
+#include <QDebug>
 #include <QScopedPointer>
 
 #include <U2Algorithm/FindAlgorithmTask.h>
@@ -106,7 +107,7 @@ private:
         Workflow::Port* p = a->getPort(BasePorts::IN_SEQ_PORT_ID());
         SAFE_POINT(NULL != p, "NULL port", false);
         QVariant busMap = p->getParameter(Workflow::IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributePureValue();
-        QString slotValue = busMap.value<QStrStrMap>().value(BaseSlots::TEXT_SLOT().getId());
+        QString slotValue = busMap.value<StrStrMap>().value(BaseSlots::TEXT_SLOT().getId());
         return !slotValue.isEmpty();
     }
 };
diff --git a/src/plugins/workflow_designer/src/library/FindWorker.h b/src/plugins/workflow_designer/src/library/FindWorker.h
index d616b1c..c2b084c 100644
--- a/src/plugins/workflow_designer/src/library/FindWorker.h
+++ b/src/plugins/workflow_designer/src/library/FindWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/GenericReadActor.cpp b/src/plugins/workflow_designer/src/library/GenericReadActor.cpp
index 77de0dd..61a5a9a 100644
--- a/src/plugins/workflow_designer/src/library/GenericReadActor.cpp
+++ b/src/plugins/workflow_designer/src/library/GenericReadActor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 #include <limits.h>
 
 /* TRANSLATOR U2::Workflow::SeqReadPrompter */
@@ -86,7 +86,7 @@ GenericSeqActorProto::GenericSeqActorProto() : GenericReadDocProto(CoreLibConsta
     setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::SEQUENCE);
 
     setDisplayName(U2::Workflow::CoreLib::tr("Read Sequence"));
-    desc = U2::Workflow::CoreLib::tr("Reads sequences and annotations if any from local or remote files.");
+    desc = U2::Workflow::CoreLib::tr("Reads sequences and annotations if any from local or remote files. All sequence file formats supported by UGENE (e.g. GenBank, FASTA) are allowed as input to this element.");
     QMap<Descriptor, DataTypePtr> m;
     m[BaseSlots::URL_SLOT()] = BaseTypes::STRING_TYPE();
     m[BaseSlots::DATASET_SLOT()] = BaseTypes::STRING_TYPE();
@@ -143,10 +143,10 @@ GenericSeqActorProto::GenericSeqActorProto() : GenericReadDocProto(CoreLibConsta
 
 GenericMAActorProto::GenericMAActorProto() : GenericReadDocProto(CoreLibConstants::GENERIC_READ_MA_PROTO_ID)
 {
-    setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::MULTIPLE_ALIGNMENT);
+    setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
 
     setDisplayName(U2::Workflow::CoreLib::tr("Read Alignment"));
-    desc = U2::Workflow::CoreLib::tr("Reads multiple sequence alignments (MSAs) from local or remote files."
+    desc = U2::Workflow::CoreLib::tr("Reads multiple sequence alignments (MSAs) from local or remote files. All MSA file formats supported by UGENE are allowed as input to this element."
         "<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).");
 
     QMap<Descriptor, DataTypePtr> m;
@@ -171,7 +171,7 @@ bool GenericMAActorProto::isAcceptableDrop(const QMimeData* md, QVariantMap* par
     QList<DocumentFormat*> fs;
     QString url = WorkflowUtils::getDropUrl(fs, md);
     foreach(DocumentFormat* f, fs) {
-        if (f->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+        if (f->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             if (params != NULL) {
                 params->insert(BaseAttributes::URL_IN_ATTRIBUTE().getId(), url);
             }
diff --git a/src/plugins/workflow_designer/src/library/GenericReadActor.h b/src/plugins/workflow_designer/src/library/GenericReadActor.h
index 471feca..afb63c2 100644
--- a/src/plugins/workflow_designer/src/library/GenericReadActor.h
+++ b/src/plugins/workflow_designer/src/library/GenericReadActor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/GenericReadWorker.cpp b/src/plugins/workflow_designer/src/library/GenericReadWorker.cpp
index c3c8f4c..ae3d3d6 100644
--- a/src/plugins/workflow_designer/src/library/GenericReadWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/GenericReadWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -35,8 +35,8 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/GObjectRelationRoles.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/MSAUtils.h>
 #include <U2Core/U2SafePoints.h>
@@ -226,7 +226,7 @@ void LoadMSATask::run() {
     DocumentFormat* format = NULL;
     QList<DocumentFormat*> fs = DocumentUtils::toFormats(DocumentUtils::detectFormat(url));
     foreach(DocumentFormat* f, fs) {
-        if (f->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+        if (f->getSupportedObjectTypes().contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             format = f;
             break;
         }
@@ -252,16 +252,16 @@ void LoadMSATask::run() {
     CHECK_OP(stateInfo,);
     doc->setDocumentOwnsDbiResources(false);
 
-    if (!doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT).isEmpty()) {
-        foreach(GObject* go, doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+    if (!doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT).isEmpty()) {
+        foreach(GObject* go, doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             SharedDbiDataHandler handler = storage->getDataHandler(go->getEntityRef());
             QVariant res = qVariantFromValue<SharedDbiDataHandler>(handler);
             results.append(res);
         }
     } else {
-        MAlignment ma = MSAUtils::seq2ma(doc->findGObjectByType(GObjectTypes::SEQUENCE), stateInfo);
+        MultipleSequenceAlignment ma = MSAUtils::seq2ma(doc->findGObjectByType(GObjectTypes::SEQUENCE), stateInfo);
 
-        QScopedPointer<MAlignmentObject> msaObj(MAlignmentImporter::createAlignment(storage->getDbiRef(), ma, stateInfo));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(MultipleSequenceAlignmentImporter::createAlignment(storage->getDbiRef(), ma, stateInfo));
         CHECK_OP(stateInfo,);
 
         SharedDbiDataHandler handler = storage->getDataHandler(msaObj->getEntityRef());
@@ -331,7 +331,7 @@ void LoadSeqTask::prepare() {
     QList<DocumentFormat*> fs = DocumentUtils::toFormats(DocumentUtils::detectFormat(url));
     foreach (DocumentFormat *f, fs) {
         const QSet<GObjectType>& types = f->getSupportedObjectTypes();
-        if (types.contains(GObjectTypes::SEQUENCE) || types.contains(GObjectTypes::MULTIPLE_ALIGNMENT)) {
+        if (types.contains(GObjectTypes::SEQUENCE) || types.contains(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
             format = f;
             break;
         }
@@ -408,13 +408,13 @@ void LoadSeqTask::run() {
         //             bool merge = cfg.contains(mergeToken);
         //             int gaps = cfg.value(mergeToken).toInt();
         U2OpStatus2Log os;
-        foreach(GObject* go, doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT)) {
-            foreach(const DNASequence& s, MSAUtils::ma2seq(((MAlignmentObject*)go)->getMAlignment(), false)) {
+        foreach(GObject* go, doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT)) {
+            foreach(const DNASequence& s, MSAUtils::ma2seq((qobject_cast<MultipleSequenceAlignmentObject *>(go))->getMsa(), false)) {
                 if (!selector->matches(s)) {
                     continue;
                 }
                 QVariantMap m;
-                U2EntityRef seqRef = U2SequenceUtils::import(storage->getDbiRef(), s, os);
+                U2EntityRef seqRef = U2SequenceUtils::import(os, storage->getDbiRef(), s);
                 CHECK_OP(os,);
                 m[BaseSlots::URL_SLOT().getId()] = url;
                 m[BaseSlots::DATASET_SLOT().getId()] = cfg.value(BaseSlots::DATASET_SLOT().getId(), "");
diff --git a/src/plugins/workflow_designer/src/library/GenericReadWorker.h b/src/plugins/workflow_designer/src/library/GenericReadWorker.h
index fabe06e..2575b63 100644
--- a/src/plugins/workflow_designer/src/library/GenericReadWorker.h
+++ b/src/plugins/workflow_designer/src/library/GenericReadWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
diff --git a/src/plugins/workflow_designer/src/library/GetFileListWorker.cpp b/src/plugins/workflow_designer/src/library/GetFileListWorker.cpp
index ca9585f..e2c77af 100644
--- a/src/plugins/workflow_designer/src/library/GetFileListWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/GetFileListWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -107,7 +107,7 @@ void GetFileListWorkerFactory::init() {
 
     Descriptor protoDesc(GetFileListWorkerFactory::ACTOR_ID,
         GetFileListWorker::tr("File List"),
-        GetFileListWorker::tr("Produces URL(s) to files from specified directories."));
+        GetFileListWorker::tr("Produces URL(s) to files from specified folders."));
 
     ActorPrototype *proto = new IntegralBusActorPrototype(protoDesc, portDescs, attrs);
     proto->setEditor(new DelegateEditor(QMap<QString, PropertyDelegate*>()));
diff --git a/src/plugins/workflow_designer/src/library/GetFileListWorker.h b/src/plugins/workflow_designer/src/library/GetFileListWorker.h
index 7170e41..0f4ae24 100644
--- a/src/plugins/workflow_designer/src/library/GetFileListWorker.h
+++ b/src/plugins/workflow_designer/src/library/GetFileListWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/GroupWorker.cpp b/src/plugins/workflow_designer/src/library/GroupWorker.cpp
index 7dbf152..d01618a 100644
--- a/src/plugins/workflow_designer/src/library/GroupWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/GroupWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
  */
 
 #include <U2Core/AnnotationData.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2SequenceUtils.h>
diff --git a/src/plugins/workflow_designer/src/library/GroupWorker.h b/src/plugins/workflow_designer/src/library/GroupWorker.h
index 27ff37c..2d86c1a 100644
--- a/src/plugins/workflow_designer/src/library/GroupWorker.h
+++ b/src/plugins/workflow_designer/src/library/GroupWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.cpp
index b19b355..2e4ab93 100644
--- a/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/DNASequence.h>
diff --git a/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.h b/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.h
index 4bab309..dcf1266 100644
--- a/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.h
+++ b/src/plugins/workflow_designer/src/library/ImportAnnotationsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.cpp b/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.cpp
index a799027..b9e367d 100644
--- a/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.cpp
+++ b/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.h b/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.h
index 54318f5..6d4529a 100644
--- a/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.h
+++ b/src/plugins/workflow_designer/src/library/IncludedProtoFactoryImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.cpp b/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.cpp
index 073c030..ed2bd43 100644
--- a/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,21 +19,23 @@
  * MA 02110-1301, USA.
  */
 
-#include "MSA2SequenceWorker.h"
-
 #include <U2Core/AppContext.h>
 #include <U2Core/FailTask.h>
-#include <U2Lang/CoreLibConstants.h>
+#include <U2Core/MSAUtils.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/BaseTypes.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/CoreLibConstants.h>
 #include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Designer/DelegateEditors.h>
 
-#include <U2Core/MAlignment.h>
-#include <U2Core/MSAUtils.h>
+#include "MSA2SequenceWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -62,14 +64,14 @@ Task * Alignment2SequenceWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &ma = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if(ma.isEmpty()) {
+        if(msa->isEmpty()) {
             return new FailTask(tr("empty input alignment"));
         }
-        QList<DNASequence> seqs = MSAUtils::ma2seq(ma,true);
+        QList<DNASequence> seqs = MSAUtils::ma2seq(msa,true);
         QVariantMap channelContext = output->getContext();
         foreach(const DNASequence &seq, seqs) {
             QVariantMap msgData;
diff --git a/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.h b/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.h
index cc4bd21..cce3581 100644
--- a/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.h
+++ b/src/plugins/workflow_designer/src/library/MSA2SequenceWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/MarkSequenceWorker.cpp b/src/plugins/workflow_designer/src/library/MarkSequenceWorker.cpp
index 5df514e..d594a81 100644
--- a/src/plugins/workflow_designer/src/library/MarkSequenceWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/MarkSequenceWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Designer/DelegateEditors.h>
 #include <U2Designer/MarkerEditor.h>
diff --git a/src/plugins/workflow_designer/src/library/MarkSequenceWorker.h b/src/plugins/workflow_designer/src/library/MarkSequenceWorker.h
index 6c73364..71d0f20 100644
--- a/src/plugins/workflow_designer/src/library/MarkSequenceWorker.h
+++ b/src/plugins/workflow_designer/src/library/MarkSequenceWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/MergeBamWorker.cpp b/src/plugins/workflow_designer/src/library/MergeBamWorker.cpp
index 7241f0d..0b1827e 100644
--- a/src/plugins/workflow_designer/src/library/MergeBamWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/MergeBamWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
@@ -31,15 +32,18 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Formats/MergeBamTask.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -99,13 +103,13 @@ void MergeBamWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(OUT_MODE_ID, MergeBamWorker::tr("Output directory"),
-            MergeBamWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(OUT_MODE_ID, MergeBamWorker::tr("Output folder"),
+            MergeBamWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(CUSTOM_DIR_ID, MergeBamWorker::tr("Custom directory"),
-            MergeBamWorker::tr("Select the custom output directory."));
+        Descriptor customDir(CUSTOM_DIR_ID, MergeBamWorker::tr("Custom folder"),
+            MergeBamWorker::tr("Select the custom output folder."));
 
         Descriptor outName(OUT_NAME_ID, MergeBamWorker::tr("Output BAM name"),
             MergeBamWorker::tr("A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .merged.bam extention."));
diff --git a/src/plugins/workflow_designer/src/library/MergeBamWorker.h b/src/plugins/workflow_designer/src/library/MergeBamWorker.h
index 935d0ef..126858d 100644
--- a/src/plugins/workflow_designer/src/library/MergeBamWorker.h
+++ b/src/plugins/workflow_designer/src/library/MergeBamWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp b/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
index 4e3a800..932669e 100644
--- a/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/MultiplexerWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <U2Core/L10n.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
diff --git a/src/plugins/workflow_designer/src/library/MultiplexerWorker.h b/src/plugins/workflow_designer/src/library/MultiplexerWorker.h
index ea9eb5c..26aa8cd 100644
--- a/src/plugins/workflow_designer/src/library/MultiplexerWorker.h
+++ b/src/plugins/workflow_designer/src/library/MultiplexerWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/PassFilterWorker.cpp b/src/plugins/workflow_designer/src/library/PassFilterWorker.cpp
index e2ea501..7a041c8 100644
--- a/src/plugins/workflow_designer/src/library/PassFilterWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/PassFilterWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/PassFilterWorker.h b/src/plugins/workflow_designer/src/library/PassFilterWorker.h
index 6e79f4a..32f58a9 100644
--- a/src/plugins/workflow_designer/src/library/PassFilterWorker.h
+++ b/src/plugins/workflow_designer/src/library/PassFilterWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.cpp
index e1cf778..ecbfbfd 100644
--- a/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -135,7 +135,7 @@ ReadAnnotationsProto::ReadAnnotationsProto()
     setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::ANNOTATION_TABLE);
 
     setDisplayName(ReadAnnotationsWorker::tr("Read Annotations"));
-    setDocumentation(ReadAnnotationsWorker::tr("Reads annotations from files."));
+    setDocumentation(ReadAnnotationsWorker::tr("Reads annotations from files. All annotation file formats supported by UGENE are allowed as input to this element."));
 
     { // ports description
         QMap<Descriptor, DataTypePtr> outTypeMap;
diff --git a/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.h b/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.h
index 97df956..e0bb9e4 100644
--- a/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.h
+++ b/src/plugins/workflow_designer/src/library/ReadAnnotationsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.cpp b/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.cpp
index f6eaaa0..6d9078a 100644
--- a/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -120,7 +120,7 @@ ReadAssemblyProto::ReadAssemblyProto()
     setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::ASSEMBLY);
 
     setDisplayName(ReadAssemblyWorker::tr("Read Assembly"));
-    setDocumentation(ReadAssemblyWorker::tr("Reads assembly from files."));
+    setDocumentation(ReadAssemblyWorker::tr("Reads assembly from files. All assembly file formats supported by UGENE are allowed as input to this element."));
 
     { // ports description
         QMap<Descriptor, DataTypePtr> outTypeMap;
diff --git a/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.h b/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.h
index 15a7333..36838f4 100644
--- a/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.h
+++ b/src/plugins/workflow_designer/src/library/ReadAssemblyWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ReadVariationWorker.cpp b/src/plugins/workflow_designer/src/library/ReadVariationWorker.cpp
index 856c6c9..2e90326 100644
--- a/src/plugins/workflow_designer/src/library/ReadVariationWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ReadVariationWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -185,7 +185,7 @@ ReadVariationProto::ReadVariationProto()
     setCompatibleDbObjectTypes(QSet<GObjectType>() << GObjectTypes::VARIANT_TRACK);
 
     setDisplayName(ReadVariationWorker::tr("Read Variations"));
-    setDocumentation(ReadVariationWorker::tr("Reads variations from files and produces variations tracks."));
+    setDocumentation(ReadVariationWorker::tr("Reads variations from files and produces variations tracks. All variation file formats supported by UGENE are allowed as input to this element."));
     {
         QMap<Descriptor, DataTypePtr> outTypeMap;
         outTypeMap[BaseSlots::VARIATION_TRACK_SLOT()] = BaseTypes::VARIATION_TRACK_TYPE();
diff --git a/src/plugins/workflow_designer/src/library/ReadVariationWorker.h b/src/plugins/workflow_designer/src/library/ReadVariationWorker.h
index 76b0730..879fd72 100644
--- a/src/plugins/workflow_designer/src/library/ReadVariationWorker.h
+++ b/src/plugins/workflow_designer/src/library/ReadVariationWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.cpp b/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.cpp
index 948acef..b2f8721 100644
--- a/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@
 #include <U2Core/GObjectUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/LoadRemoteDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -37,11 +38,11 @@
 
 #include <U2Lang/ActorModel.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/CoreLibConstants.h>
 #include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
 
@@ -92,7 +93,7 @@ QString RemoteDBFetcherPrompter::composeRichDoc()
 
     QString saveDir = getParameter(PATH_ID).value<QString>();
     saveDir = getHyperlink(PATH_ID, saveDir);
-    QString saveDirStr = RemoteDBFetcherWorker::tr("Save result to <u>%1</u> directory.").arg(saveDir);
+    QString saveDirStr = RemoteDBFetcherWorker::tr("Save result to <u>%1</u> folder.").arg(saveDir);
 
     return RemoteDBFetcherWorker::tr("Reads %1 %2 from <u>%3</u> remote database. %4").
         arg(sourceDescString).
@@ -140,7 +141,7 @@ bool RemoteDBFetcherWorker::isReady() const {
 Task* RemoteDBFetcherWorker::tick() {
     if(!QDir(fullPathDir).exists()) {
         if(!QDir().mkpath(fullPathDir)) {
-            return new FailTask(tr("Cannot create directory '%1'").arg(fullPathDir));
+            return new FailTask(tr("Cannot create folder '%1'").arg(fullPathDir));
         }
     }
 
@@ -338,8 +339,8 @@ void RemoteDBFetcherFactory::init()
         attrs << idsListAttr;
 
         Descriptor fullpathd(PATH_ID,
-                         RemoteDBFetcherWorker::tr("Save file to directory"),
-                         RemoteDBFetcherWorker::tr("The directory to store sequence files loaded from a database."));
+                         RemoteDBFetcherWorker::tr("Save file to folder"),
+                         RemoteDBFetcherWorker::tr("The folder to store sequence files loaded from a database."));
         attrs << new Attribute(fullpathd, BaseTypes::STRING_TYPE(), true, DEFAULT_PATH);
     }
 
@@ -412,7 +413,7 @@ QString FetchSequenceByIdFromAnnotationPrompter::composeRichDoc()
 Task* FetchSequenceByIdFromAnnotationWorker::tick() {
 
     if (!QDir(fullPathDir).exists() && !QDir().mkpath(fullPathDir)) {
-        return new FailTask(tr("Cannot create directory '%1'").arg(fullPathDir));
+        return new FailTask(tr("Cannot create folder '%1'").arg(fullPathDir));
     }
 
     if (input->hasMessage()) {
@@ -550,8 +551,8 @@ void FetchSequenceByIdFromAnnotationFactory::init()
     {
 
         Descriptor fullpathd(PATH_ID,
-                         RemoteDBFetcherWorker::tr("Save file to directory"),
-                         RemoteDBFetcherWorker::tr("The directory to store sequence files loaded from a database."));
+                         RemoteDBFetcherWorker::tr("Save file to folder"),
+                         RemoteDBFetcherWorker::tr("The folder to store sequence files loaded from a database."));
         attrs << new Attribute(fullpathd, BaseTypes::STRING_TYPE(), true, DEFAULT_PATH);
 
         Descriptor dbidd(DBID_ID,
diff --git a/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.h b/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.h
index f451756..56f943f 100644
--- a/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.h
+++ b/src/plugins/workflow_designer/src/library/RemoteDBFetcherWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.cpp b/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.cpp
index dfd7b54..98443b0 100644
--- a/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,16 @@
  * MA 02110-1301, USA.
  */
 
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
 
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/BaseTypes.h>
-#include <U2Lang/WorkflowMonitor.h>
 #include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
 
 #include "RenameChromosomeInVariationWorker.h"
 #include "tasks/RenameChromosomeInVariationTask.h"
diff --git a/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.h b/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.h
index fc7b89f..dfeac7e 100644
--- a/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.h
+++ b/src/plugins/workflow_designer/src/library/RenameChromosomeInVariationWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ReverseComplementWorker.cpp b/src/plugins/workflow_designer/src/library/ReverseComplementWorker.cpp
index 128928d..4405cb2 100644
--- a/src/plugins/workflow_designer/src/library/ReverseComplementWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ReverseComplementWorker.cpp
@@ -1,23 +1,45 @@
-#include "ReverseComplementWorker.h"
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
 #include <U2Core/FailTask.h>
 #include <U2Core/TextUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
+
 #include "CoreLib.h"
+#include "ReverseComplementWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/workflow_designer/src/library/RmdupBamWorker.cpp b/src/plugins/workflow_designer/src/library/RmdupBamWorker.cpp
index 5df33e3..047fe6d 100644
--- a/src/plugins/workflow_designer/src/library/RmdupBamWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/RmdupBamWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
@@ -31,14 +32,17 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -101,13 +105,13 @@ void RmdupBamWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(OUT_MODE_ID, RmdupBamWorker::tr("Output directory"),
-            RmdupBamWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(OUT_MODE_ID, RmdupBamWorker::tr("Output folder"),
+            RmdupBamWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(CUSTOM_DIR_ID, RmdupBamWorker::tr("Custom directory"),
-            RmdupBamWorker::tr("Select the custom output directory."));
+        Descriptor customDir(CUSTOM_DIR_ID, RmdupBamWorker::tr("Custom folder"),
+            RmdupBamWorker::tr("Select the custom output folder."));
 
         Descriptor outName(OUT_NAME_ID, RmdupBamWorker::tr("Output BAM name"),
             RmdupBamWorker::tr("A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .nodup.bam extention."));
@@ -298,7 +302,7 @@ void SamtoolsRmdupTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError(tr("Directory does not exist: ") + outDir.absolutePath());
+        setError(tr("Folder does not exist: ") + outDir.absolutePath());
         return ;
     }
 
diff --git a/src/plugins/workflow_designer/src/library/RmdupBamWorker.h b/src/plugins/workflow_designer/src/library/RmdupBamWorker.h
index 4be163a..88efaf1 100644
--- a/src/plugins/workflow_designer/src/library/RmdupBamWorker.h
+++ b/src/plugins/workflow_designer/src/library/RmdupBamWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/SchemaWorker.cpp b/src/plugins/workflow_designer/src/library/SchemaWorker.cpp
index ac7e05e..d886167 100644
--- a/src/plugins/workflow_designer/src/library/SchemaWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/SchemaWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/SchemaWorker.h b/src/plugins/workflow_designer/src/library/SchemaWorker.h
index 93432c1..be57b86 100644
--- a/src/plugins/workflow_designer/src/library/SchemaWorker.h
+++ b/src/plugins/workflow_designer/src/library/SchemaWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/ScriptWorker.cpp b/src/plugins/workflow_designer/src/library/ScriptWorker.cpp
index 4751204..51a4e43 100644
--- a/src/plugins/workflow_designer/src/library/ScriptWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/ScriptWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,9 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtScriptTools/QScriptEngineDebugger>
-
-#include "ScriptWorker.h"
+#include <QScriptEngineDebugger>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/DNAAlphabet.h>
@@ -29,7 +27,8 @@
 #include <U2Core/DNATranslation.h>
 #include <U2Core/FailTask.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
@@ -47,6 +46,7 @@
 #include <U2Lang/SequencePrototype.h>
 #include <U2Lang/WorkflowEnv.h>
 
+#include "ScriptWorker.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins/workflow_designer/src/library/ScriptWorker.h b/src/plugins/workflow_designer/src/library/ScriptWorker.h
index 8522469..7b387f6 100644
--- a/src/plugins/workflow_designer/src/library/ScriptWorker.h
+++ b/src/plugins/workflow_designer/src/library/ScriptWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.cpp b/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.cpp
new file mode 100644
index 0000000..6622aee
--- /dev/null
+++ b/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.cpp
@@ -0,0 +1,170 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/WorkflowContext.h>
+#include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
+
+#include "SequenceQualityTrimWorker.h"
+#include "tasks/SequenceQualityTrimTask.h"
+
+namespace U2 {
+namespace LocalWorkflow {
+
+static const QString QUALITY_ID("qual-id");
+static const QString LEN_ID("len-id");
+static const QString BOTH_ID("both-ends");
+
+SequenceQualityTrimPrompter::SequenceQualityTrimPrompter(Actor *actor)
+    : SequenceQualityTrimBase(actor)
+{
+
+}
+
+QString SequenceQualityTrimPrompter::composeRichDoc() {
+    IntegralBusPort *input = qobject_cast<IntegralBusPort *>(target->getPort(BasePorts::IN_SEQ_PORT_ID()));
+    const Actor *producer = input->getProducer(BaseSlots::DNA_SEQUENCE_SLOT().getId());
+    const QString unsetStr = "<font color='red'>" + tr("unset") + "</font>";
+    const QString producerName = tr("from <u>%1</u>").arg(producer ? producer->getLabel() : unsetStr);
+    const QString trimSide = getHyperlink(BOTH_ID, tr(getParameter(BOTH_ID).toBool() ? "the both ends" : "the end"));
+    return tr("Trim input sequence %1 from %2, using the quality threshold.").arg(producerName).arg(trimSide);
+}
+
+SequenceQualityTrimWorker::SequenceQualityTrimWorker(Actor *actor)
+    : BaseThroughWorker(actor, BasePorts::IN_SEQ_PORT_ID(), BasePorts::OUT_SEQ_PORT_ID())
+{
+
+}
+
+Task *SequenceQualityTrimWorker::createTask(const Message &message, U2OpStatus &os) {
+    SequenceQualityTrimTaskSettings settings;
+    settings.qualityTreshold = getValue<int>(QUALITY_ID);
+    settings.minSequenceLength = getValue<int>(LEN_ID);
+    settings.trimBothEnds = getValue<bool>(BOTH_ID);
+
+    const QVariantMap dataMap = message.getData().toMap();
+    const SharedDbiDataHandler sequenceHandler = dataMap[BaseSlots::DNA_SEQUENCE_SLOT().getId()].value<SharedDbiDataHandler>();
+    settings.sequenceObject = StorageUtils::getSequenceObject(context->getDataStorage(), sequenceHandler);
+    CHECK_EXT(NULL != settings.sequenceObject, os.setError(tr("There is no sequence object in the message")), NULL);
+
+    return new SequenceQualityTrimTask(settings);
+}
+
+QList<Message> SequenceQualityTrimWorker::fetchResult(Task *task, U2OpStatus &os) {
+    QList<Message> messages;
+    SequenceQualityTrimTask *trimTask = qobject_cast<SequenceQualityTrimTask *>(task);
+    SAFE_POINT_EXT(NULL != trimTask, os.setError(tr("An unexpected task type")), messages);
+
+    QScopedPointer<U2SequenceObject> trimmedSequenceObject(trimTask->takeTrimmedSequence());
+    SAFE_POINT_EXT(NULL != trimmedSequenceObject, os.setError("Sequence trim task didn't produce any object without any errors"), messages);
+    if (0 == trimmedSequenceObject->getSequenceLength()) {
+        monitor()->addError(tr("Sequence was filtered out by quality"), actor->getId(), Problem::U2_WARNING);
+        return messages;
+    }
+    SharedDbiDataHandler trimmedSequenceHandler = context->getDataStorage()->putSequence(trimmedSequenceObject.data());
+
+    QVariantMap data;
+    data[BaseSlots::DNA_SEQUENCE_SLOT().getId()] = QVariant::fromValue<SharedDbiDataHandler>(trimmedSequenceHandler);
+    messages << Message(output->getBusType(), data);
+
+    return messages;
+}
+
+const QString SequenceQualityTrimWorkerFactory::ACTOR_ID = "SequenceQualityTrim";
+
+SequenceQualityTrimWorkerFactory::SequenceQualityTrimWorkerFactory() :
+    DomainFactory(ACTOR_ID)
+{
+
+}
+
+void SequenceQualityTrimWorkerFactory::init() {
+    Descriptor desc(ACTOR_ID, SequenceQualityTrimWorker::tr("Sequence Quality Trimmer"),
+        SequenceQualityTrimWorker::tr("The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. "
+                              "Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than "
+                              "the minimum length threshold then the sequence is skipped."));
+
+    QList<PortDescriptor *> ports;
+    {
+        Descriptor inPortDescriptor(BasePorts::IN_SEQ_PORT_ID(), SequenceQualityTrimWorker::tr("Input Sequence"),
+            SequenceQualityTrimWorker::tr("Set of sequences to trim by quality"));
+        Descriptor outPortDescriptor(BasePorts::OUT_SEQ_PORT_ID(), SequenceQualityTrimWorker::tr("Output Sequence"),
+            SequenceQualityTrimWorker::tr("Trimmed sequences"));
+
+        QMap<Descriptor, DataTypePtr> inSlot;
+        inSlot[BaseSlots::DNA_SEQUENCE_SLOT()] = BaseTypes::DNA_SEQUENCE_TYPE();
+        DataTypePtr inType(new MapDataType(BasePorts::IN_SEQ_PORT_ID(), inSlot));
+        ports << new PortDescriptor(inPortDescriptor, inType, true);
+
+        QMap<Descriptor, DataTypePtr> outM;
+        outM[BaseSlots::URL_SLOT()] = BaseTypes::STRING_TYPE();
+        DataTypePtr outType(new MapDataType(BasePorts::OUT_SEQ_PORT_ID(), inSlot));
+        ports << new PortDescriptor(outPortDescriptor, outType, false, true);
+    }
+
+    QList<Attribute *> attributes;
+    {
+        Descriptor qualityTreshold(QUALITY_ID, SequenceQualityTrimWorker::tr("Trimming quality threshold"),
+                                   SequenceQualityTrimWorker::tr("Quality threshold for trimming."));
+
+        Descriptor minSequenceLength(LEN_ID, SequenceQualityTrimWorker::tr("Min length"),
+                                     SequenceQualityTrimWorker::tr("Too short reads are discarded by the filter."));
+
+        Descriptor trimBothEnds(BOTH_ID, SequenceQualityTrimWorker::tr("Trim both ends"),
+                                SequenceQualityTrimWorker::tr("Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b>"));
+
+        attributes << new Attribute(qualityTreshold, BaseTypes:: NUM_TYPE(), false, QVariant(30));
+        attributes << new Attribute(minSequenceLength, BaseTypes::NUM_TYPE(), false, QVariant(0));
+        attributes << new Attribute(trimBothEnds, BaseTypes::BOOL_TYPE(), false, true);
+    }
+
+    QMap<QString, PropertyDelegate *> delegates;
+    {
+        QVariantMap intLimitsMap;
+        intLimitsMap["minimum"] = 0;
+        intLimitsMap["maximum"] = INT_MAX;
+        delegates[QUALITY_ID] = new SpinBoxDelegate(intLimitsMap);
+        delegates[LEN_ID] = new SpinBoxDelegate(intLimitsMap);
+        delegates[BOTH_ID] = new ComboBoxWithBoolsDelegate();
+    }
+
+    ActorPrototype *proto = new IntegralBusActorPrototype(desc, ports, attributes);
+    proto->setEditor(new DelegateEditor(delegates));
+    proto->setPrompter(new SequenceQualityTrimPrompter());
+
+    WorkflowEnv::getProtoRegistry()->registerProto(BaseActorCategories::CATEGORY_BASIC(), proto);
+    DomainFactory *localDomain = WorkflowEnv::getDomainRegistry()->getById(LocalDomainFactory::ID);
+    localDomain->registerEntry(new SequenceQualityTrimWorkerFactory());
+}
+
+Worker *SequenceQualityTrimWorkerFactory::createWorker(Actor *actor) {
+    return new SequenceQualityTrimWorker(actor);
+}
+
+}   // namespace LocalWorkflow
+}   // namespace U2
diff --git a/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.h b/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.h
new file mode 100644
index 0000000..19d22c5
--- /dev/null
+++ b/src/plugins/workflow_designer/src/library/SequenceQualityTrimWorker.h
@@ -0,0 +1,67 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_QUALITY_TRIM_WORKER_H_
+#define _U2_SEQUENCE_QUALITY_TRIM_WORKER_H_
+
+#include <U2Lang/BaseThroughWorker.h>
+#include <U2Lang/WorkflowManager.h>
+#include <U2Lang/WorkflowUtils.h>
+
+namespace U2 {
+namespace LocalWorkflow {
+
+class SequenceQualityTrimPrompter;
+typedef PrompterBase<SequenceQualityTrimPrompter> SequenceQualityTrimBase;
+
+class SequenceQualityTrimPrompter : public SequenceQualityTrimBase {
+    Q_OBJECT
+public:
+    SequenceQualityTrimPrompter(Actor *actor = NULL);
+
+private:
+    QString composeRichDoc();
+};
+
+class SequenceQualityTrimWorker : public BaseThroughWorker {
+    Q_OBJECT
+public:
+    SequenceQualityTrimWorker(Actor *actor);
+
+protected:
+    Task *createTask(const Message &message, U2OpStatus &os);
+    QList<Message> fetchResult(Task *task, U2OpStatus &os);
+};
+
+class SequenceQualityTrimWorkerFactory : public DomainFactory {
+    static const QString ACTOR_ID;
+
+public:
+    SequenceQualityTrimWorkerFactory();
+
+    static void init();
+    Worker *createWorker(Actor* actor);
+};
+
+}   // namespace LocalWorkflow
+}   // namespace U2
+
+#endif // _U2_SEQUENCE_QUALITY_TRIM_WORKER_H_
diff --git a/src/plugins/workflow_designer/src/library/SequenceSplitWorker.cpp b/src/plugins/workflow_designer/src/library/SequenceSplitWorker.cpp
index e2aa372..742f77b 100644
--- a/src/plugins/workflow_designer/src/library/SequenceSplitWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/SequenceSplitWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,20 +30,20 @@
 #include <U2Core/TextUtils.h>
 #include <U2Core/U1AnnotationUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
 #include <U2Lang/ActorPrototypeRegistry.h>
 #include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/ConfigurationEditor.h>
 #include <U2Lang/CoreLibConstants.h>
 #include <U2Lang/WorkflowEnv.h>
 
 #include "GenericReadActor.h"
-
 #include "SequenceSplitWorker.h"
 
 namespace U2 {
diff --git a/src/plugins/workflow_designer/src/library/SequenceSplitWorker.h b/src/plugins/workflow_designer/src/library/SequenceSplitWorker.h
index d8f54d7..c44fde2 100644
--- a/src/plugins/workflow_designer/src/library/SequenceSplitWorker.h
+++ b/src/plugins/workflow_designer/src/library/SequenceSplitWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.cpp b/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.cpp
index 7f8cb3e..efae2ed 100644
--- a/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -75,26 +75,22 @@ Task* SequencesToMSAWorker::tick() {
 void MSAFromSequencesTask::run() {
     CHECK(sequences_.size() > 0, );
     DNASequence seq = sequences_.first();
-    ma.setAlphabet(seq.alphabet);
-
-    U2OpStatus2Log os;
-    ma.addRow(seq.getName(), seq.seq, os);
-    CHECK_OP_EXT(os, setError("An error has occurred during converting an alignment to sequences."),);
+    ma->setAlphabet(seq.alphabet);
+    ma->addRow(seq.getName(), seq.seq);
 
     for (int i=1; i<sequences_.size(); i++) {
         DNASequence sqnc = sequences_.at(i);
-        ma.addRow(sqnc.getName(), sqnc.seq, os);
-        CHECK_OP_EXT(os, setError("An error has occurred during converting an alignment to sequences."),);
+        ma->addRow(sqnc.getName(), sqnc.seq);
     }
 }
 
 void SequencesToMSAWorker::sl_onTaskFinished(Task* t) {
     MSAFromSequencesTask* maTask = qobject_cast<MSAFromSequencesTask*>(t);
-    MAlignment ma = maTask->getResult();
+    MultipleSequenceAlignment ma = maTask->getResult();
 
-    if (!ma.isEmpty()) {
-        if (ma.getName().isEmpty()) {
-            ma.setName("Multiple alignment");
+    if (!ma->isEmpty()) {
+        if (ma->getName().isEmpty()) {
+            ma->setName("Multiple alignment");
         }
 
         SAFE_POINT(NULL != outPort, "NULL outPort!",);
diff --git a/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.h b/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.h
index 260aebd..2666519 100644
--- a/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.h
+++ b/src/plugins/workflow_designer/src/library/SequencesToMSAWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/DNASequence.h>
 
 namespace U2 {
@@ -68,12 +68,12 @@ class MSAFromSequencesTask : public Task {
     Q_OBJECT
 public:
     MSAFromSequencesTask(const QList<DNASequence>& sequences)
-        : Task(tr("MSAFromSequencesTask"), TaskFlag_None), sequences_(sequences), ma(NULL) {}
+        : Task(tr("MSAFromSequencesTask"), TaskFlag_None), sequences_(sequences) {}
     void run();
-    MAlignment getResult() const { return ma; }
+    MultipleSequenceAlignment getResult() const { return ma; }
 private:
     QList<DNASequence> sequences_;
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
 };
 
 } //LocalWorkflow namespace
diff --git a/src/plugins/workflow_designer/src/library/SortBamWorker.cpp b/src/plugins/workflow_designer/src/library/SortBamWorker.cpp
index 0cffc7a..6ebf3c1 100644
--- a/src/plugins/workflow_designer/src/library/SortBamWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/SortBamWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/DocumentUtils.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/FileAndDirectoryUtils.h>
 #include <U2Core/GObject.h>
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/GUrlUtils.h>
@@ -31,14 +32,17 @@
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Designer/DelegateEditors.h>
+
 #include <U2Formats/BAMUtils.h>
-#include <U2Core/FileAndDirectoryUtils.h>
+
 #include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
 #include <U2Lang/BaseAttributes.h>
-#include <U2Lang/BaseTypes.h>
 #include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/WorkflowMonitor.h>
@@ -99,13 +103,13 @@ void SortBamWorkerFactory::init() {
 
     QList<Attribute*> a;
     {
-        Descriptor outDir(OUT_MODE_ID, SortBamWorker::tr("Output directory"),
-            SortBamWorker::tr("Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. "
-            "<b>Workflow</b> - internal workflow directory. "
-            "<b>Input file</b> - the directory of the input file."));
+        Descriptor outDir(OUT_MODE_ID, SortBamWorker::tr("Output folder"),
+            SortBamWorker::tr("Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. "
+            "<b>Workflow</b> - internal workflow folder. "
+            "<b>Input file</b> - the folder of the input file."));
 
-        Descriptor customDir(CUSTOM_DIR_ID, SortBamWorker::tr("Custom directory"),
-            SortBamWorker::tr("Select the custom output directory."));
+        Descriptor customDir(CUSTOM_DIR_ID, SortBamWorker::tr("Custom folder"),
+            SortBamWorker::tr("Select the custom output folder."));
 
         Descriptor outName(OUT_NAME_ID, SortBamWorker::tr("Output BAM name"),
             SortBamWorker::tr("A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .sorted.bam extention."));
@@ -267,7 +271,7 @@ void SamtoolsSortTask::prepare(){
 
     const QDir outDir = QFileInfo(settings.outDir).absoluteDir();
     if (!outDir.exists()) {
-        setError(tr("Directory does not exist: ") + outDir.absolutePath());
+        setError(tr("Folder does not exist: ") + outDir.absolutePath());
         return ;
     }
 }
diff --git a/src/plugins/workflow_designer/src/library/SortBamWorker.h b/src/plugins/workflow_designer/src/library/SortBamWorker.h
index 97e682d..f15cdfe 100644
--- a/src/plugins/workflow_designer/src/library/SortBamWorker.h
+++ b/src/plugins/workflow_designer/src/library/SortBamWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/StatisticWorkers.cpp b/src/plugins/workflow_designer/src/library/StatisticWorkers.cpp
index d13252a..baad020 100644
--- a/src/plugins/workflow_designer/src/library/StatisticWorkers.cpp
+++ b/src/plugins/workflow_designer/src/library/StatisticWorkers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,22 +19,25 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
-#include <U2Lang/ConfigurationEditor.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/CoreLibConstants.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNAAlphabet.h>
 #include <U2Core/AnnotationData.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequence.h>
 #include <U2Core/FailTask.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/ConfigurationEditor.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/WorkflowEnv.h>
 
 #include "StatisticWorkers.h"
 
diff --git a/src/plugins/workflow_designer/src/library/StatisticWorkers.h b/src/plugins/workflow_designer/src/library/StatisticWorkers.h
index fecef65..2409589 100644
--- a/src/plugins/workflow_designer/src/library/StatisticWorkers.h
+++ b/src/plugins/workflow_designer/src/library/StatisticWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/Text2SequenceWorker.cpp b/src/plugins/workflow_designer/src/library/Text2SequenceWorker.cpp
index bec2a8a..71e1278 100644
--- a/src/plugins/workflow_designer/src/library/Text2SequenceWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/Text2SequenceWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/Text2SequenceWorker.h b/src/plugins/workflow_designer/src/library/Text2SequenceWorker.h
index 31cd441..a7e1e28 100644
--- a/src/plugins/workflow_designer/src/library/Text2SequenceWorker.h
+++ b/src/plugins/workflow_designer/src/library/Text2SequenceWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
index 7edfbc1..0668c28 100644
--- a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/AppContext.h>
@@ -63,6 +63,7 @@ const QString WriteAnnotationsWorkerFactory::ACTOR_ID("write-annotations");
 
 static const QString WRITE_ANNOTATIONS_IN_TYPE_ID("write-annotations-in-type");
 static const QString CSV_FORMAT_ID("csv");
+static const QString CSV_FORMAT_NAME("CSV");
 static const QString ANN_TABLE_NAME_4_LOCAL_ST("annotations-name");
 static const QString ANN_TABLE_NAME_4_SHARED_ST("ann-obj-name");
 static const QString ANNOTATIONS_NAME_DEF_VAL("Unknown features");
@@ -384,9 +385,12 @@ void WriteAnnotationsWorkerFactory::init() {
     constr.supportedObjectTypes.insert( GObjectTypes::ANNOTATION_TABLE );
     constr.addFlagToSupport(DocumentFormatFlag_SupportWriting);
     constr.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
-    QList<DocumentFormatId> supportedFormats = AppContext::getDocumentFormatRegistry()->selectFormats( constr );
-    supportedFormats.removeOne(BaseDocumentFormats::VECTOR_NTI_SEQUENCE);
-    supportedFormats.append(CSV_FORMAT_ID);
+    constr.formatsToExclude.insert(BaseDocumentFormats::VECTOR_NTI_SEQUENCE);
+    QMap<DocumentFormatId, QString> supportedFormats;
+    foreach(const DocumentFormatId &id, AppContext::getDocumentFormatRegistry()->selectFormats(constr)) {
+        supportedFormats.insert(id, AppContext::getDocumentFormatRegistry()->getFormatById(id)->getFormatName());
+    }
+    supportedFormats.insert(CSV_FORMAT_ID, CSV_FORMAT_NAME);
     DocumentFormatId format = supportedFormats.contains(BaseDocumentFormats::PLAIN_GENBANK) ? BaseDocumentFormats::PLAIN_GENBANK : supportedFormats.first();
     // attributes description
     QList<Attribute*> attrs;
@@ -482,8 +486,8 @@ void WriteAnnotationsWorkerFactory::init() {
     QMap<QString, PropertyDelegate*> delegates;
     {
         QVariantMap m;
-        foreach( const DocumentFormatId & fid, supportedFormats ) {
-            m[fid] = fid;
+        foreach(const QString &key, supportedFormats.keys()) {
+            m[supportedFormats.value(key)] = key;
         }
         delegates[BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId()] = new ComboBoxDelegate(m);
         delegates[BaseAttributes::URL_OUT_ATTRIBUTE().getId()] =
@@ -544,12 +548,13 @@ QString WriteAnnotationsPrompter::composeRichDoc() {
         FAIL("Unexpected attribute value", QString());
     }
 
-    const QString format = getParameter(BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId()).value<QString>();
+    const QString formatId = getParameter(BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId()).value<QString>();
+    QString formatName = formatId == CSV_FORMAT_ID ? CSV_FORMAT_NAME : AppContext::getDocumentFormatRegistry()->getFormatById(formatId)->getFormatName();
 
     return tr("Save all annotations from <u>%1</u> to %2")
         .arg(annName)
         .arg(getHyperlink(BaseAttributes::URL_OUT_ATTRIBUTE().getId(), url))
-        + (storeToFs ? tr(" in %1 format.").arg(getHyperlink(BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId(), format))
+        + (storeToFs ? tr(" in %1 format.").arg(getHyperlink(BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId(), formatName))
         : tr(" in the ") + QString("<u>%1</u>").arg(dbName) + tr(" database."));
 }
 
diff --git a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.h b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.h
index ac6bd81..dfa394a 100644
--- a/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.h
+++ b/src/plugins/workflow_designer/src/library/WriteAnnotationsWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.cpp b/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.cpp
index b1c45eb..bf03c92 100644
--- a/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.cpp
+++ b/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -184,7 +184,7 @@ void WriteAssemblyWorkerFactory::init() {
 
         Descriptor indexDescr(INDEX_ATTRIBUTE_ID,
             BaseWriteAssemblyWorker::tr("Build index (BAM only)"),
-            BaseWriteAssemblyWorker::tr("Build BAM index for the target BAM file. The file .bai will be created in the same directory."));
+            BaseWriteAssemblyWorker::tr("Build BAM index for the target BAM file. The file .bai will be created in the same folder."));
 
         Attribute *indexAttr = new Attribute(indexDescr, BaseTypes::BOOL_TYPE(), false, true);
         indexAttr->addRelation(new VisibilityRelation(BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId(), BaseDocumentFormats::BAM));
@@ -199,7 +199,7 @@ void WriteAssemblyWorkerFactory::init() {
     {
         QVariantMap formatsMap;
         foreach (const DocumentFormatId &fid, supportedFormats) {
-            formatsMap[fid] = fid;
+            formatsMap[AppContext::getDocumentFormatRegistry()->getFormatById(fid)->getFormatName()] = fid;
         }
         proto->getEditor()->addDelegate(new ComboBoxDelegate(formatsMap), BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId());
     }
diff --git a/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.h b/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.h
index fb64d53..e94a8b0 100644
--- a/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.h
+++ b/src/plugins/workflow_designer/src/library/WriteAssemblyWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/library/WriteVariationWorker.cpp b/src/plugins/workflow_designer/src/library/WriteVariationWorker.cpp
index 828c556..4cbc538 100644
--- a/src/plugins/workflow_designer/src/library/WriteVariationWorker.cpp
+++ b/src/plugins/workflow_designer/src/library/WriteVariationWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -147,7 +147,7 @@ void WriteVariationWorkerFactory::init() {
 
         QVariantMap formatsMap;
         foreach (const DocumentFormatId &fid, supportedFormats) {
-            formatsMap[fid] = fid;
+            formatsMap[AppContext::getDocumentFormatRegistry()->getFormatById(fid)->getFormatName()] = fid;
         }
         proto->getEditor()->addDelegate(new ComboBoxDelegate(formatsMap), BaseAttributes::DOCUMENT_FORMAT_ATTRIBUTE().getId());
         proto->setPrompter(new WriteDocPrompter(WriteVariationWorker::tr("Save all variations from <u>%1</u> to <u>%2</u>."),
diff --git a/src/plugins/workflow_designer/src/library/WriteVariationWorker.h b/src/plugins/workflow_designer/src/library/WriteVariationWorker.h
index 2d1278f..bde3c3f 100644
--- a/src/plugins/workflow_designer/src/library/WriteVariationWorker.h
+++ b/src/plugins/workflow_designer/src/library/WriteVariationWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
index 16ab4cc..386cb02 100644
--- a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
+++ b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/BaseDocumentFormats.h>
diff --git a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.h b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.h
index 60fe86d..6f3b8cb 100644
--- a/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.h
+++ b/src/plugins/workflow_designer/src/tasks/ReadAssemblyTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.cpp b/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.cpp
index 854114b..59007f7 100644
--- a/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.cpp
+++ b/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.h b/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.h
index 29ffde5..4561def 100644
--- a/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.h
+++ b/src/plugins/workflow_designer/src/tasks/RenameChromosomeInVariationTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.cpp b/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.cpp
new file mode 100644
index 0000000..9edfd87
--- /dev/null
+++ b/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.cpp
@@ -0,0 +1,141 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <U2Core/ChromatogramUtils.h>
+#include <U2Core/DNAChromatogramObject.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DNASequenceUtils.h>
+#include <U2Core/U2ObjectRelationsDbi.h>
+#include <U2Core/U2SafePoints.h>
+
+#include "SequenceQualityTrimTask.h"
+
+namespace U2 {
+
+SequenceQualityTrimTaskSettings::SequenceQualityTrimTaskSettings()
+    : qualityTreshold(30),
+      minSequenceLength(0),
+      trimBothEnds(true)
+{
+
+}
+
+SequenceQualityTrimTask::SequenceQualityTrimTask(const SequenceQualityTrimTaskSettings &settings)
+    : Task(tr("Trim sequence by quality"), TaskFlag_ReportingIsSupported | TaskFlag_ReportingIsEnabled),
+      settings(settings),
+      trimmedSequenceObject(NULL),
+      trimmedChromatogramObject(NULL),
+      isFilteredOut(false)
+{
+    SAFE_POINT_EXT(NULL != settings.sequenceObject, setError("Sequence object is NULL"), );
+}
+
+SequenceQualityTrimTask::~SequenceQualityTrimTask() {
+    delete trimmedSequenceObject;
+    delete trimmedChromatogramObject;
+}
+
+U2SequenceObject *SequenceQualityTrimTask::takeTrimmedSequence() {
+    U2SequenceObject *result = trimmedSequenceObject;
+    trimmedSequenceObject = NULL;
+    return result;
+}
+
+void SequenceQualityTrimTask::run() {
+    cloneObjects();
+    CHECK_OP(stateInfo, );
+
+    const U2Region acceptedRegion = trimSequence();
+    CHECK_OP(stateInfo, );
+
+    trimChromatogram(acceptedRegion);
+}
+
+QString SequenceQualityTrimTask::generateReport() const {
+    CHECK(isFilteredOut, "");
+    return tr("The sequence '%1' was filtered out by quality").arg(settings.sequenceObject->getSequenceName());
+}
+
+void SequenceQualityTrimTask::cloneObjects() {
+    cloneSequence();
+    CHECK_OP(stateInfo, );
+    cloneChromatogram();
+    CHECK_OP(stateInfo, );
+    restoreRelation();
+    CHECK_OP(stateInfo, );
+}
+
+void SequenceQualityTrimTask::cloneSequence() {
+    const U2DbiRef dbiRef = settings.sequenceObject->getEntityRef().dbiRef;
+    trimmedSequenceObject = qobject_cast<U2SequenceObject *>(settings.sequenceObject->clone(dbiRef, stateInfo));
+}
+
+void SequenceQualityTrimTask::cloneChromatogram() {
+    const U2DbiRef dbiRef = settings.sequenceObject->getEntityRef().dbiRef;
+    const U2EntityRef chromatogramRef = ChromatogramUtils::getChromatogramIdByRelatedSequenceId(stateInfo, settings.sequenceObject->getEntityRef());
+    CHECK_OP(stateInfo, );
+    CHECK(chromatogramRef.isValid(), );
+
+    const QString chromatogramName = ChromatogramUtils::getChromatogramName(stateInfo, chromatogramRef);
+    CHECK_OP(stateInfo, );
+
+    QScopedPointer<DNAChromatogramObject> chromatogramObject(new DNAChromatogramObject(chromatogramName, chromatogramRef));
+    trimmedChromatogramObject = qobject_cast<DNAChromatogramObject *>(chromatogramObject->clone(dbiRef, stateInfo));
+    CHECK_OP(stateInfo, );
+}
+
+void SequenceQualityTrimTask::restoreRelation() {
+    CHECK(NULL != trimmedChromatogramObject, );
+    SAFE_POINT_EXT(NULL != trimmedSequenceObject, setError("Cloned sequence object is NULL"), );
+
+    U2ObjectRelation dbRelation;
+    dbRelation.id = trimmedChromatogramObject->getEntityRef().entityId;
+    dbRelation.referencedName = trimmedSequenceObject->getGObjectName();
+    dbRelation.referencedObject = trimmedSequenceObject->getEntityRef().entityId;
+    dbRelation.referencedType = trimmedSequenceObject->getGObjectType();
+    dbRelation.relationRole = ObjectRole_Sequence;
+
+    DbiConnection connection(settings.sequenceObject->getEntityRef().dbiRef, stateInfo);
+    CHECK_OP(stateInfo, );
+
+    connection.dbi->getObjectRelationsDbi()->createObjectRelation(dbRelation, stateInfo);
+    CHECK_OP(stateInfo, );
+}
+
+U2Region SequenceQualityTrimTask::trimSequence() {
+    DNASequence sequence = trimmedSequenceObject->getWholeSequence(stateInfo);
+    CHECK_OP(stateInfo, U2Region());
+    CHECK_EXT(sequence.hasQualityScores(), stateInfo.addWarning(tr("The trimming was skipped for the sequences without quality information.")), U2Region(0, trimmedSequenceObject->getSequenceLength()));
+    const U2Region acceptedRegion = DNASequenceUtils::trimByQuality(sequence, settings.qualityTreshold, settings.minSequenceLength, settings.trimBothEnds);
+    isFilteredOut = acceptedRegion.isEmpty();
+    trimmedSequenceObject->setWholeSequence(sequence);
+    return acceptedRegion;
+}
+
+void SequenceQualityTrimTask::trimChromatogram(const U2Region &regionToCrop) {
+    CHECK(NULL != trimmedChromatogramObject, );
+    DNAChromatogram chromatogram = trimmedChromatogramObject->getChromatogram();
+    ChromatogramUtils::crop(chromatogram, regionToCrop.startPos, regionToCrop.length);
+    trimmedChromatogramObject->setChromatogram(stateInfo, chromatogram);
+    CHECK_OP(stateInfo, );
+}
+
+}   // namespace U2
diff --git a/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.h b/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.h
new file mode 100644
index 0000000..0843237
--- /dev/null
+++ b/src/plugins/workflow_designer/src/tasks/SequenceQualityTrimTask.h
@@ -0,0 +1,71 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_SEQUENCE_QUALITY_TRIM_TASK_H_
+#define _U2_SEQUENCE_QUALITY_TRIM_TASK_H_
+
+#include <U2Core/Task.h>
+#include <U2Core/U2Region.h>
+
+namespace U2 {
+
+class DNAChromatogramObject;
+class U2SequenceObject;
+
+class SequenceQualityTrimTaskSettings {
+public:
+    SequenceQualityTrimTaskSettings();
+
+    U2SequenceObject *sequenceObject;
+
+    int qualityTreshold;
+    int minSequenceLength;
+    bool trimBothEnds;
+};
+
+class SequenceQualityTrimTask : public Task {
+    Q_OBJECT
+public:
+    SequenceQualityTrimTask(const SequenceQualityTrimTaskSettings &settings);
+    ~SequenceQualityTrimTask();
+
+    U2SequenceObject *takeTrimmedSequence();
+
+private:
+    void run();
+    QString generateReport() const;
+
+    void cloneObjects();
+    void cloneSequence();
+    void cloneChromatogram();
+    void restoreRelation();
+    U2Region trimSequence();
+    void trimChromatogram(const U2Region &regionToCrop);
+
+    const SequenceQualityTrimTaskSettings settings;
+    U2SequenceObject *trimmedSequenceObject;
+    DNAChromatogramObject *trimmedChromatogramObject;
+    bool isFilteredOut;
+};
+
+}   // namespace U2
+
+#endif // _U2_SEQUENCE_QUALITY_TRIM_TASK_H_
diff --git a/src/plugins/workflow_designer/src/util/DatasetValidator.cpp b/src/plugins/workflow_designer/src/util/DatasetValidator.cpp
index 7954ad6..144f341 100644
--- a/src/plugins/workflow_designer/src/util/DatasetValidator.cpp
+++ b/src/plugins/workflow_designer/src/util/DatasetValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,12 +19,14 @@
  * MA 02110-1301, USA.
  */
 
-#include "DatasetValidator.h"
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Lang/Dataset.h>
 #include <U2Lang/Attribute.h>
 #include <U2Lang/BaseAttributes.h>
 
+#include "DatasetValidator.h"
+
 namespace U2 {
 namespace Workflow {
 
diff --git a/src/plugins/workflow_designer/src/util/DatasetValidator.h b/src/plugins/workflow_designer/src/util/DatasetValidator.h
index e74d13e..38a1e9f 100644
--- a/src/plugins/workflow_designer/src/util/DatasetValidator.h
+++ b/src/plugins/workflow_designer/src/util/DatasetValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/DatasetsCountValidator.cpp b/src/plugins/workflow_designer/src/util/DatasetsCountValidator.cpp
index 332f219..3646b79 100644
--- a/src/plugins/workflow_designer/src/util/DatasetsCountValidator.cpp
+++ b/src/plugins/workflow_designer/src/util/DatasetsCountValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/DatasetsCountValidator.h b/src/plugins/workflow_designer/src/util/DatasetsCountValidator.h
index f0e7673..8de1078 100644
--- a/src/plugins/workflow_designer/src/util/DatasetsCountValidator.h
+++ b/src/plugins/workflow_designer/src/util/DatasetsCountValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/GrouperActionUtils.cpp b/src/plugins/workflow_designer/src/util/GrouperActionUtils.cpp
index 1be78d3..2780e38 100644
--- a/src/plugins/workflow_designer/src/util/GrouperActionUtils.cpp
+++ b/src/plugins/workflow_designer/src/util/GrouperActionUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/QVariantUtils.h>
@@ -119,30 +119,29 @@ bool GrouperActionUtils::equalData(const QString &groupOp, const QVariant &data1
         SharedDbiDataHandler alId1 = data1.value<SharedDbiDataHandler>();
         SharedDbiDataHandler alId2 = data2.value<SharedDbiDataHandler>();
 
-        QScopedPointer<MAlignmentObject> alObj1(StorageUtils::getMsaObject(context->getDataStorage(), alId1));
+        QScopedPointer<MultipleSequenceAlignmentObject> alObj1(StorageUtils::getMsaObject(context->getDataStorage(), alId1));
         SAFE_POINT(NULL != alObj1.data(), "NULL MSA Object!", false);
 
-        QScopedPointer<MAlignmentObject> alObj2(StorageUtils::getMsaObject(context->getDataStorage(), alId2));
+        QScopedPointer<MultipleSequenceAlignmentObject> alObj2(StorageUtils::getMsaObject(context->getDataStorage(), alId2));
         SAFE_POINT(NULL != alObj2.data(), "NULL MSA Object!", false);
 
 
-        const MAlignment &al1 = alObj1->getMAlignment();
-        const MAlignment &al2 = alObj2->getMAlignment();
+        const MultipleSequenceAlignment al1 = alObj1->getMultipleAlignment();
+        const MultipleSequenceAlignment al2 = alObj2->getMultipleAlignment();
 
         if (GroupOperations::BY_NAME() == groupOp) {
-            return al1.getName() == al2.getName();
+            return al1->getName() == al2->getName();
         } else { // id or value
-            if (al1.getRows().size() != al2.getRows().size()) {
+            if (al1->getMsaRows().size() != al2->getMsaRows().size()) {
                 return false;
             }
 
-            QList<MAlignmentRow> rows1 = al1.getRows();
-            QList<MAlignmentRow> rows2 = al2.getRows();
-            QList<MAlignmentRow>::const_iterator it1 = rows1.constBegin();
-            QList<MAlignmentRow>::const_iterator it2 = rows2.constBegin();
+            QList<MultipleSequenceAlignmentRow> rows1 = al1->getMsaRows();
+            QList<MultipleSequenceAlignmentRow> rows2 = al2->getMsaRows();
+            QList<MultipleSequenceAlignmentRow>::const_iterator it1 = rows1.constBegin();
+            QList<MultipleSequenceAlignmentRow>::const_iterator it2 = rows2.constBegin();
             for (; it1 != rows1.constEnd(); ++it1, ++it2) {
-                bool equal = *it1 == *it2;
-                if (!equal) {
+                if (**it1 != **it2) {
                     return false;
                 }
             }
@@ -236,7 +235,7 @@ bool MergeSequencePerformer::applyAction(const QVariant &newData) {
         } else {
             name = "Merged sequence";
         }
-        importer.startSequence(context->getDataStorage()->getDbiRef(), U2ObjectDbi::ROOT_FOLDER, name, false, os);
+        importer.startSequence(os, context->getDataStorage()->getDbiRef(), U2ObjectDbi::ROOT_FOLDER, name, false);
         CHECK_OP(os, false);
         started = true;
     } else {
@@ -272,7 +271,7 @@ QVariantMap MergeSequencePerformer::getParameters() const {
 QString MergeSequencePerformer::PREV_SEQ_LENGTH = QString("prev-seq-length");
 
 Sequence2MSAPerformer::Sequence2MSAPerformer(const QString &outSlot, const GrouperSlotAction &action, WorkflowContext *context)
-: ActionPerformer(outSlot, action, context)
+    : ActionPerformer(outSlot, action, context)
 {
 
 }
@@ -296,8 +295,8 @@ bool Sequence2MSAPerformer::applyAction(const QVariant &newData) {
         } else {
             name = "Grouped alignment";
         }
-        result.setName(name);
-        result.setAlphabet(seqObj->getAlphabet());
+        result->setName(name);
+        result->setAlphabet(seqObj->getAlphabet());
         started = true;
     }
 
@@ -307,15 +306,15 @@ bool Sequence2MSAPerformer::applyAction(const QVariant &newData) {
     }
 
     if (unique) {
-        foreach (MAlignmentRow currRow, result.getRows()) {
-            if ((currRow.getName() == rowName) &&
-                (currRow.getData() == bytes)) {
+        foreach (const MultipleSequenceAlignmentRow &currRow, result->getMsaRows()) {
+            if ((currRow->getName() == rowName) &&
+                (currRow->getData() == bytes)) {
                     return true;
             }
         }
     }
 
-    result.addRow(rowName, bytes, os);
+    result->addRow(rowName, bytes);
 
     return true;
 }
@@ -326,16 +325,16 @@ QVariant Sequence2MSAPerformer::finishAction(U2OpStatus &) {
 }
 
 MergerMSAPerformer::MergerMSAPerformer(const QString &outSlot, const GrouperSlotAction &action, WorkflowContext *context)
-: ActionPerformer(outSlot, action, context)
+    : ActionPerformer(outSlot, action, context)
 {
 
 }
 
 bool MergerMSAPerformer::applyAction(const QVariant &newData) {
     SharedDbiDataHandler newAlId = newData.value<SharedDbiDataHandler>();
-    QScopedPointer<MAlignmentObject> newAlObj(StorageUtils::getMsaObject(context->getDataStorage(), newAlId));
+    QScopedPointer<MultipleSequenceAlignmentObject> newAlObj(StorageUtils::getMsaObject(context->getDataStorage(), newAlId));
     SAFE_POINT(NULL != newAlObj.data(), "NULL MSA Object!", false);
-    const MAlignment &newAl = newAlObj->getMAlignment();
+    const MultipleSequenceAlignment newAl = newAlObj->getMultipleAlignment();
 
     if (!started) {
         QString name;
@@ -344,8 +343,8 @@ bool MergerMSAPerformer::applyAction(const QVariant &newData) {
         } else {
             name = "Grouped alignment";
         }
-        result.setName(name);
-        result.setAlphabet(newAl.getAlphabet());
+        result->setName(name);
+        result->setAlphabet(newAl->getAlphabet());
         started = true;
     }
 
@@ -355,14 +354,14 @@ bool MergerMSAPerformer::applyAction(const QVariant &newData) {
     }
 
     U2OpStatus2Log os;
-    const QList<MAlignmentRow> &rows = result.getRows();
-    foreach (const MAlignmentRow &newRow, newAl.getRows()) {
+    const QList<MultipleSequenceAlignmentRow> rows = result->getMsaRows();
+    foreach (const MultipleSequenceAlignmentRow &newRow, newAl->getMsaRows()) {
         if (unique) {
             if (!rows.contains(newRow)) {
-                result.addRow(newRow.getRowDBInfo(), newRow.getSequence(), os);
+                result->addRow(newRow->getRowDbInfo(), newRow->getSequence(), os);
             }
         } else {
-            result.addRow(newRow.getRowDBInfo(), newRow.getSequence(), os);
+            result->addRow(newRow->getRowDbInfo(), newRow->getSequence(), os);
         }
     }
 
diff --git a/src/plugins/workflow_designer/src/util/GrouperActionUtils.h b/src/plugins/workflow_designer/src/util/GrouperActionUtils.h
index 983e067..792d2d4 100644
--- a/src/plugins/workflow_designer/src/util/GrouperActionUtils.h
+++ b/src/plugins/workflow_designer/src/util/GrouperActionUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #define _GROUPER_ACTION_UTILS_
 
 #include <U2Core/AnnotationData.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2SequenceUtils.h>
 
 #include <U2Lang/Datatype.h>
@@ -94,7 +94,7 @@ public:
     virtual QVariant finishAction(U2OpStatus &os);
 
 private:
-    MAlignment result;
+    MultipleSequenceAlignment result;
 };
 
 class MergerMSAPerformer : public ActionPerformer {
@@ -104,7 +104,7 @@ public:
     virtual QVariant finishAction(U2OpStatus &os);
 
 private:
-    MAlignment result;
+    MultipleSequenceAlignment result;
 };
 
 class MergerStringPerformer : public ActionPerformer {
diff --git a/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.cpp b/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.cpp
index 2ea1b6a..409e462 100644
--- a/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.cpp
+++ b/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.h b/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.h
index 629100f..02c21e3 100644
--- a/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.h
+++ b/src/plugins/workflow_designer/src/util/RequiredSlotsValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.cpp b/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.cpp
index 027582c..68e2a87 100644
--- a/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.cpp
+++ b/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,23 +19,25 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtGui/QPainter>
+#include <QFile>
+#include <QPainter>
 
-#include <U2Core/Log.h>
 #include <U2Core/L10n.h>
+#include <U2Core/Log.h>
+#include <U2Core/U2SafePoints.h>
+
 #include <U2Lang/HRSchemaSerializer.h>
-#include <U2Lang/WorkflowUtils.h>
 #include <U2Lang/WorkflowIOTasks.h>
 #include <U2Lang/WorkflowSettings.h>
-#include "WorkflowViewItems.h"
-#include "WorkflowViewController.h"
-#include "SaveSchemaImageUtils.h"
+#include <U2Lang/WorkflowUtils.h>
 
-#include <QtCore/QFile>
+#include "SaveSchemaImageUtils.h"
+#include "WorkflowViewController.h"
+#include "WorkflowViewItems.h"
 
 namespace U2 {
 
-Logger log("Save workflow image task");
+static Logger log("Save workflow image task");
 
 /********************************
  * ProduceSchemaImageLinkTask
diff --git a/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.h b/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.h
index 3347c56..b93151d 100644
--- a/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.h
+++ b/src/plugins/workflow_designer/src/util/SaveSchemaImageUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_WORKFLOW_SAVE_SCHEMA_IMAGE_UTILS_H_
 #define _U2_WORKFLOW_SAVE_SCHEMA_IMAGE_UTILS_H_
 
-#include <QtGui/QPixmap>
-#include <QtXml/QDomDocument>
+#include <QPixmap>
+#include <QDomDocument>
 
 #include <U2Core/Task.h>
 #include <U2Lang/Schema.h>
diff --git a/src/plugins/workflow_designer/src/util/WorkerNameValidator.cpp b/src/plugins/workflow_designer/src/util/WorkerNameValidator.cpp
index 181611e..9f5dc97 100644
--- a/src/plugins/workflow_designer/src/util/WorkerNameValidator.cpp
+++ b/src/plugins/workflow_designer/src/util/WorkerNameValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/WorkerNameValidator.h b/src/plugins/workflow_designer/src/util/WorkerNameValidator.h
index 2bbeb10..9e39994 100644
--- a/src/plugins/workflow_designer/src/util/WorkerNameValidator.h
+++ b/src/plugins/workflow_designer/src/util/WorkerNameValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/src/util/WriteSequenceValidator.cpp b/src/plugins/workflow_designer/src/util/WriteSequenceValidator.cpp
index 7ee98ae..e5c1140 100644
--- a/src/plugins/workflow_designer/src/util/WriteSequenceValidator.cpp
+++ b/src/plugins/workflow_designer/src/util/WriteSequenceValidator.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,7 +69,7 @@ bool WriteSequenceValidator::isAnnotationsBinded(const Actor *actor) const {
     SAFE_POINT(NULL != p, "NULL port", false);
     Attribute *attr = p->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID);
     SAFE_POINT(NULL != attr, "NULL busmap attribute", false);
-    QStrStrMap busMap = attr->getAttributeValueWithoutScript<QStrStrMap>();
+    StrStrMap busMap = attr->getAttributeValueWithoutScript<StrStrMap>();
     QString bindData = busMap.value(BaseSlots::ANNOTATION_TABLE_SLOT().getId(), "");
     return !bindData.isEmpty();
 }
diff --git a/src/plugins/workflow_designer/src/util/WriteSequenceValidator.h b/src/plugins/workflow_designer/src/util/WriteSequenceValidator.h
index 14c8f36..568f473 100644
--- a/src/plugins/workflow_designer/src/util/WriteSequenceValidator.h
+++ b/src/plugins/workflow_designer/src/util/WriteSequenceValidator.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_designer/transl/english.ts b/src/plugins/workflow_designer/transl/english.ts
index 360d3a3..18b080c 100644
--- a/src/plugins/workflow_designer/transl/english.ts
+++ b/src/plugins/workflow_designer/transl/english.ts
@@ -277,7 +277,11 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="164"/>
         <source>Error occured while saving new actor. Can't write to current directory. Choose another directory for store user's elements</source>
-        <translation>Error occured while saving new actor. Can't write to current directory. Choose another directory for store user's elements</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Error occured while saving new actor. Can't write to current folder. Choose another folder for store user's elements</source>
+        <translation type="vanished">Error occured while saving new actor. Can't write to current folder. Choose another folder for store user's elements</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="182"/>
@@ -340,17 +344,29 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="80"/>
         <source>UGENE directory</source>
-        <translation>UGENE directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="93"/>
         <source>Destination directory</source>
-        <translation>Destination directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="106"/>
         <source>Galaxy directory</source>
-        <translation>Galaxy directory</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>UGENE folder</source>
+        <translation type="vanished">UGENE folder</translation>
+    </message>
+    <message>
+        <source>Destination folder</source>
+        <translation type="vanished">Destination folder</translation>
+    </message>
+    <message>
+        <source>Galaxy folder</source>
+        <translation type="vanished">Galaxy folder</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="119"/>
@@ -382,42 +398,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="23"/>
         <source>Configure Port and Slot Aliases</source>
         <translation>Configure Port and Slot Aliases</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="37"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="43"/>
         <source>Workflow ports</source>
         <translation>Workflow ports</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="72"/>
-        <source>Available slot</source>
-        <translation>Available slot</translation>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="84"/>
+        <source>Slot</source>
+        <translation>Slot</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="77"/>
-        <source>Slot alias</source>
-        <translation>Slot alias</translation>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="89"/>
+        <source>Alias</source>
+        <translation>Alias</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="86"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="98"/>
         <source>Port alias</source>
         <translation>Port alias</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="95"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="107"/>
         <source>Port type:</source>
         <translation>Port type:</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="109"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="121"/>
         <source>Port alias:</source>
         <translation>Port alias:</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="119"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="131"/>
         <source>Port description:</source>
         <translation>Port description:</translation>
     </message>
@@ -487,27 +503,27 @@ p, li { white-space: pre-wrap; }
         <translation>Error with annotations object</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="73"/>
+        <location filename="../src/library/FindWorker.cpp" line="74"/>
         <source>Pattern(s)</source>
         <translation>Pattern(s)</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="73"/>
+        <location filename="../src/library/FindWorker.cpp" line="74"/>
         <source>Semicolon-separated list of patterns to search for.</source>
         <translation>Semicolon-separated list of patterns to search for.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="75"/>
+        <location filename="../src/library/FindWorker.cpp" line="76"/>
         <source>Pattern file</source>
         <translation>Pattern file</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="75"/>
+        <location filename="../src/library/FindWorker.cpp" line="76"/>
         <source>Load pattern from file in any sequence format or in newline-delimited format.</source>
         <translation>Load pattern from file in any sequence format or in newline-delimited format.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="85"/>
+        <location filename="../src/library/FindWorker.cpp" line="86"/>
         <source>Patterns are not set. Set the '%1' or '%2' parameter or bind the input text slot</source>
         <translation>Patterns are not set. Set the '%1' or '%2' parameter or bind the input text slot</translation>
     </message>
@@ -532,82 +548,82 @@ p, li { white-space: pre-wrap; }
         <translation>The format %1 does not support annotations</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="136"/>
+        <location filename="../src/WorkflowViewController.cpp" line="137"/>
         <source>You opened obsolete workflow in XML format. It is strongly recommended to clear working space and create workflow from scratch.</source>
         <translation>You opened obsolete workflow in XML format. It is strongly recommended to clear working space and create workflow from scratch.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="139"/>
+        <location filename="../src/WorkflowViewController.cpp" line="140"/>
         <source>Sorry! This workflow is obsolete and cannot be opened.</source>
         <translation>Sorry! This workflow is obsolete and cannot be opened.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="141"/>
+        <location filename="../src/WorkflowViewController.cpp" line="142"/>
         <source>Breakpoints</source>
         <translation>Breakpoints</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="147"/>
+        <location filename="../src/WorkflowViewController.cpp" line="148"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="199"/>
+        <location filename="../src/WorkflowViewController.cpp" line="200"/>
         <source>Element style</source>
         <translation>Element style</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="210"/>
+        <location filename="../src/WorkflowViewController.cpp" line="211"/>
         <source>Scripting mode</source>
         <translation>Scripting mode</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="908"/>
-        <source>Can not create the directory: </source>
-        <translation>Can not create the directory: </translation>
+        <location filename="../src/WorkflowViewController.cpp" line="909"/>
+        <source>Can not create the folder: </source>
+        <translation>Can not create the folder: </translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="914"/>
+        <location filename="../src/WorkflowViewController.cpp" line="915"/>
         <source>The file '%1' already exists</source>
         <translation>The file '%1' already exists</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="919"/>
+        <location filename="../src/WorkflowViewController.cpp" line="920"/>
         <source>Can not copy the file here: </source>
         <translation>Can not copy the file here: </translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1478"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1479"/>
         <source>Run workflow</source>
         <translation>Run workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="229"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="230"/>
         <source>Extract Consensus from Assembly</source>
         <translation>Extract Consensus from Assembly</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="230"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="231"/>
         <source>Extract the consensus sequence from the incoming assembly.</source>
         <translation>Extract the consensus sequence from the incoming assembly.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="248"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="249"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="249"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="250"/>
         <source>The algorithm of consensus extracting.</source>
         <translation>The algorithm of consensus extracting.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="251"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="252"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="252"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="253"/>
         <source>Set this parameter if the result consensus must keep the gaps.</source>
         <translation>Set this parameter if the result consensus must keep the gaps.</translation>
     </message>
@@ -617,17 +633,17 @@ p, li { white-space: pre-wrap; }
         <translation>Messages in requested queue include info of the '%1' data type that is currently unsupported for view. No intermediate data will be displayed</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="49"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="50"/>
         <source>coverage</source>
         <translation>coverage</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="50"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="51"/>
         <source>bases count</source>
         <translation>bases count</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="265"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="266"/>
         <source>Save annotations</source>
         <translation>Save annotations</translation>
     </message>
@@ -635,12 +651,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>RemoteDBFetcherWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="274"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="275"/>
         <source>List of IDs</source>
         <translation>List of IDs</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="275"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="276"/>
         <source>File with IDs</source>
         <translation>File with IDs</translation>
     </message>
@@ -648,42 +664,50 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SchemaAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="34"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="40"/>
         <source>Workflow elements</source>
         <translation>Workflow elements</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="23"/>
         <source>Configure Parameter Aliases</source>
         <translation>Configure Parameter Aliases</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="69"/>
-        <source>Schema parameter</source>
-        <translation>Schema parameter</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="84"/>
+        <source>Parameter</source>
+        <translation>Parameter</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="74"/>
-        <source>Parameter alias</source>
-        <translation>Parameter alias</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="89"/>
+        <source>Alias</source>
+        <translation>Alias</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="79"/>
-        <source>Help message</source>
-        <translation>Help message</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="94"/>
+        <source>Description</source>
+        <translation>Description</translation>
     </message>
 </context>
 <context>
     <name>StartupDialog</name>
     <message>
+        <source>Choose Output Folder</source>
+        <translation type="vanished">Choose Output Folder</translation>
+    </message>
+    <message>
+        <source>Output Folder</source>
+        <translation type="vanished">Output Folder</translation>
+    </message>
+    <message>
         <location filename="../src/StartupDialog.ui" line="14"/>
         <source>Choose Output Directory</source>
-        <translation>Choose Output Directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/StartupDialog.ui" line="20"/>
         <source>Output Directory</source>
-        <translation>Output Directory</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/StartupDialog.ui" line="33"/>
@@ -696,7 +720,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::ActorCfgModel</name>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="308"/>
+        <location filename="../src/ActorCfgModel.cpp" line="310"/>
         <source>N/A</source>
         <translation>N/A</translation>
     </message>
@@ -704,47 +728,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::BreakpointManagerView</name>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="139"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="140"/>
         <source>&Break at element...</source>
         <translation>&Break at element...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="146"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="147"/>
         <source>Delete &all breakpoints</source>
         <translation>Delete &all breakpoints</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="153"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="154"/>
         <source>&Delete</source>
         <translation>&Delete</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="160"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="161"/>
         <source>Delete the selected breakpoints</source>
         <translation>Delete the selected breakpoints</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="162"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="163"/>
         <source>&Enable or disable all breakpoints</source>
         <translation>&Enable or disable all breakpoints</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="168"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="169"/>
         <source>H&ighlight selected item</source>
         <translation>H&ighlight selected item</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="174"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="175"/>
         <source>&Hit Count...</source>
         <translation>&Hit Count...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="177"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="178"/>
         <source>Edit &labels...</source>
         <translation>Edit &labels...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="180"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="181"/>
         <source>&Condition...</source>
         <translation>&Condition...</translation>
     </message>
@@ -811,93 +835,106 @@ p, li { white-space: pre-wrap; }
     </message>
 </context>
 <context>
+    <name>U2::ChooseItemDialog</name>
+    <message>
+        <location filename="../src/ChooseItemDialog.cpp" line="36"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ChooseItemDialog.cpp" line="37"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateExternalProcessDialog</name>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="323"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
         <source>Warning</source>
         <translation>Warning</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="325"/>
         <source>You have changed the structure of the element (name, slots, attributes' names and types). All elements on the scene would be removed. Do you really want to change it?
 You could also reset the dialog to the initial state.</source>
         <translation>You have changed the structure of the element (name, slots, attributes' names and types). All elements on the scene would be removed. Do you really want to change it?
 You could also reset the dialog to the initial state.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="353"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="354"/>
         <source>Create Element</source>
         <translation>Create Element</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="355"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="356"/>
         <source>Please set the input/output data.</source>
         <translation>Please set the input/output data.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="360"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="361"/>
         <source>Please set the command line to run external tool.</source>
         <translation>Please set the command line to run external tool.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="365"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="464"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="366"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="465"/>
         <source>Please set the name for the new element.</source>
         <translation>Please set the name for the new element.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="371"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="476"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="372"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="477"/>
         <source>Invalid symbols in the element name.</source>
         <translation>Invalid symbols in the element name.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="376"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="481"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="377"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="482"/>
         <source>Element with this name already exists.</source>
         <translation>Element with this name already exists.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="384"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="395"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="406"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="385"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="396"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="407"/>
         <source>For one or more parameter name was not set.</source>
         <translation>For one or more parameter name was not set.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="388"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="399"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="410"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="389"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="400"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="411"/>
         <source>Invalid symbols in a name.</source>
         <translation>Invalid symbols in a name.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="418"/>
         <source>The same name of element parameters was found</source>
         <translation>The same name of element parameters was found</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="425"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
         <source>You don't use parameter %1 in template string. Continue?</source>
         <translation>You don't use parameter %1 in template string. Continue?</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
         <source>Continue</source>
         <translation>Continue</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="428"/>
         <source>Abort</source>
         <translation>Abort</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="470"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="471"/>
         <source>Spaces in the element name.</source>
         <translation>Spaces in the element name.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="496"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="497"/>
         <source>It is the correct name</source>
         <translation>It is the correct name</translation>
     </message>
@@ -910,73 +947,87 @@ You could also reset the dialog to the initial state.</translation>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="303"/>
         <source>type</source>
-        <translation>type</translation>
+        <translation type="vanished">type</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateScriptWorker.cpp" line="303"/>
+        <source>Type</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateScriptWorker.cpp" line="362"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateScriptWorker.cpp" line="363"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="506"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="520"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="533"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="539"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="557"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="565"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="573"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="508"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="522"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="535"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="541"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="559"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="567"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="575"/>
         <source>error</source>
         <translation>error</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="506"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="508"/>
         <source>Two identical types for input port</source>
         <translation>Two identical types for input port</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="507"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="509"/>
         <source>two identical types for input port</source>
         <translation>two identical types for input port</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="520"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="522"/>
         <source>Two identical types for output port</source>
         <translation>Two identical types for output port</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="521"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="523"/>
         <source>two identical types for output port</source>
         <translation>two identical types for output port</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="533"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="534"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="535"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="536"/>
         <source>Name for some attributes is empty</source>
         <translation>Name for some attributes is empty</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="539"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="540"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="541"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="542"/>
         <source>Two attributes with name %1</source>
         <translation>Two attributes with name %1</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="557"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="558"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="559"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="560"/>
         <source>Name for block is empty</source>
         <translation>Name for block is empty</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="565"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="566"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="567"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="568"/>
         <source>Actor with this name already registered</source>
         <translation>Actor with this name already registered</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="573"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="574"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="575"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="576"/>
         <source>Description for block is empty</source>
         <translation>Description for block is empty</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="628"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="630"/>
         <source>Can't save user's workflow element</source>
         <translation>Can't save user's workflow element</translation>
     </message>
@@ -984,12 +1035,12 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::DashboardManagerHelper</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="239"/>
+        <location filename="../src/WorkflowViewController.cpp" line="240"/>
         <source>No Dashboards Found</source>
         <translation>No Dashboards Found</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="240"/>
+        <location filename="../src/WorkflowViewController.cpp" line="241"/>
         <source>You do not have any dashboards yet. You need to run some workflow to use Dashboards Manager.</source>
         <translation>You do not have any dashboards yet. You need to run some workflow to use Dashboards Manager.</translation>
     </message>
@@ -997,22 +1048,28 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::DashboardsManagerDialog</name>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="60"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="50"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="62"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="60"/>
-        <source>Directory</source>
-        <translation>Directory</translation>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="62"/>
+        <source>Folder</source>
+        <translation>Folder</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="179"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="177"/>
         <source>Confirm</source>
         <translation>Confirm</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="180"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="49"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="178"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
@@ -1028,7 +1085,7 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::ExtendedProcStyle</name>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="213"/>
+        <location filename="../src/ItemViewStyle.cpp" line="199"/>
         <source>Auto-resize to text</source>
         <translation>Auto-resize to text</translation>
     </message>
@@ -1036,7 +1093,7 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::GalaxyConfigTask</name>
     <message>
-        <location filename="../src/cmdline/GalaxyConfigTask.cpp" line="83"/>
+        <location filename="../src/cmdline/GalaxyConfigTask.cpp" line="79"/>
         <source>Create Galaxy config from existing workflow</source>
         <translation>Create Galaxy config from existing workflow</translation>
     </message>
@@ -1081,12 +1138,12 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::ItemViewStyle</name>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="72"/>
+        <location filename="../src/ItemViewStyle.cpp" line="62"/>
         <source>Background color</source>
         <translation>Background color</translation>
     </message>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="75"/>
+        <location filename="../src/ItemViewStyle.cpp" line="65"/>
         <source>Font</source>
         <translation>Font</translation>
     </message>
@@ -1094,18 +1151,18 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::LoadSamplesTask</name>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="293"/>
+        <location filename="../src/WorkflowSamples.cpp" line="285"/>
         <source>Load workflow samples</source>
         <translation>Load workflow samples</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="304"/>
+        <location filename="../src/WorkflowSamples.cpp" line="296"/>
         <source>Sample dir does not exist: %1</source>
         <translation>Sample dir does not exist: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="316"/>
-        <location filename="../src/WorkflowSamples.cpp" line="328"/>
+        <location filename="../src/WorkflowSamples.cpp" line="308"/>
+        <location filename="../src/WorkflowSamples.cpp" line="320"/>
         <source>Failed to load sample: %1</source>
         <translation>Failed to load sample: %1</translation>
     </message>
@@ -1113,17 +1170,17 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::LoadWorkflowSceneTask</name>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="68"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="69"/>
         <source>Load workflow scene</source>
         <translation>Load workflow scene</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="86"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="87"/>
         <source>Undefined format: plain text or xml expected</source>
         <translation>Undefined format: plain text or xml expected</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="116"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="117"/>
         <source>Error while parsing file: %1</source>
         <translation>Error while parsing file: %1</translation>
     </message>
@@ -1131,101 +1188,86 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::LocalWorkflow::AlignToReferencePrompter</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="76"/>
         <source>Input sequence</source>
-        <translation>Input sequence</translation>
+        <translation type="vanished">Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="76"/>
         <source>Input sequence.</source>
-        <translation>Input sequence.</translation>
+        <translation type="vanished">Input sequence.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="77"/>
         <source>Aligned data</source>
-        <translation>Aligned data</translation>
+        <translation type="vanished">Aligned data</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="77"/>
         <source>Aligned data.</source>
-        <translation>Aligned data.</translation>
+        <translation type="vanished">Aligned data.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="92"/>
         <source>Reference URL</source>
-        <translation>Reference URL</translation>
+        <translation type="vanished">Reference URL</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="92"/>
         <source>A URL to the file with a reference sequence.</source>
-        <translation>A URL to the file with a reference sequence.</translation>
+        <translation type="vanished">A URL to the file with a reference sequence.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="124"/>
         <source>unset</source>
-        <translation>unset</translation>
+        <translation type="vanished">unset</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="127"/>
         <source>Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</source>
-        <translation>Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</translation>
+        <translation type="vanished">Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::AlignToReferenceTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="213"/>
         <source>Align to reference</source>
-        <translation>Align to reference</translation>
+        <translation type="vanished">Align to reference</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::AlignToReferenceWorker</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="100"/>
         <source>Align to Reference</source>
-        <translation>Align to Reference</translation>
+        <translation type="vanished">Align to Reference</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="101"/>
         <source>Align input sequences (e.g. Sanger reads) to the reference sequence.</source>
-        <translation>Align input sequences (e.g. Sanger reads) to the reference sequence.</translation>
+        <translation type="vanished">Align input sequences (e.g. Sanger reads) to the reference sequence.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="150"/>
         <source>Can not read the reference file: </source>
-        <translation>Can not read the reference file: </translation>
+        <translation type="vanished">Can not read the reference file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="160"/>
         <source>Can't read the file: </source>
-        <translation>Can't read the file: </translation>
+        <translation type="vanished">Can't read the file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="162"/>
         <source>No reference sequence in the file: </source>
-        <translation>No reference sequence in the file: </translation>
+        <translation type="vanished">No reference sequence in the file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="163"/>
         <source>More than one sequence in the reference file: </source>
-        <translation>More than one sequence in the reference file: </translation>
+        <translation type="vanished">More than one sequence in the reference file: </translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::Alignment2SequencePrompter</name>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="135"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="137"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="138"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="140"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="139"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="141"/>
         <source>Split alignment%1 into sequences.</source>
         <translation>Split alignment%1 into sequences.</translation>
     </message>
@@ -1233,37 +1275,37 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::LocalWorkflow::Alignment2SequenceWorker</name>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="70"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="72"/>
         <source>empty input alignment</source>
         <translation>empty input alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="102"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="104"/>
         <source>Input alignment</source>
         <translation>Input alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="103"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="105"/>
         <source>A alignment which will be split into sequences</source>
         <translation>A alignment which will be split into sequences</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="109"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="111"/>
         <source>Output sequences</source>
         <translation>Output sequences</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="110"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="112"/>
         <source>Converted sequences</source>
         <translation>Converted sequences</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="117"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="119"/>
         <source>Split Alignment into Sequences</source>
         <translation>Split Alignment into Sequences</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="118"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="120"/>
         <source>Splits input alignment into sequences</source>
         <translation>Splits input alignment into sequences</translation>
     </message>
@@ -1418,8 +1460,8 @@ You could also reset the dialog to the initial state.</translation>
     </message>
     <message>
         <location filename="../src/library/BaseDocWriter.cpp" line="237"/>
-        <source>Can not create directory: %1</source>
-        <translation>Can not create directory: %1</translation>
+        <source>Can not create folder: %1</source>
+        <translation>Can not create folder: %1</translation>
     </message>
     <message>
         <location filename="../src/library/BaseDocWriter.cpp" line="265"/>
@@ -1471,24 +1513,24 @@ You could also reset the dialog to the initial state.</translation>
     </message>
     <message>
         <location filename="../src/library/WriteAssemblyWorkers.cpp" line="187"/>
-        <source>Build BAM index for the target BAM file. The file .bai will be created in the same directory.</source>
-        <translation>Build BAM index for the target BAM file. The file .bai will be created in the same directory.</translation>
+        <source>Build BAM index for the target BAM file. The file .bai will be created in the same folder.</source>
+        <translation>Build BAM index for the target BAM file. The file .bai will be created in the same folder.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::CASAVAFilterPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="56"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="63"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="57"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="64"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="59"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="66"/>
         <source>Filters FASTQ reads from %1 generated by CASAVA 1.8.</source>
         <translation>Filters FASTQ reads from %1 generated by CASAVA 1.8.</translation>
     </message>
@@ -1496,12 +1538,12 @@ You could also reset the dialog to the initial state.</translation>
 <context>
     <name>U2::LocalWorkflow::CASAVAFilterWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="67"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="74"/>
         <source>CASAVA FASTQ Filter</source>
         <translation>CASAVA FASTQ Filter</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="68"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="75"/>
         <source>Reads in FASTQ file produced by CASAVA 1.8 contain 'N' or 'Y' as a part of an idetifier. 'Y' if a read if filtered, 'N' if the read if the read is not filtered. The workflow cleans up the filtered reads.
 For example:
 @HWI-ST880:181:D1WRUACXX:8:1102:4905:2125 1:N:0:TAAGGG
@@ -1525,67 +1567,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 11++4222322<CEE2<:3<3333333<A<CAFE:1?C??::C?00?BD90.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="81"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="88"/>
         <source>Input File</source>
         <translation>Input File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="82"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="89"/>
         <source>Set of FASTQ reads files</source>
         <translation>Set of FASTQ reads files</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="83"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="90"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="84"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="91"/>
         <source>Output FASTQ files</source>
         <translation>Output FASTQ files</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="97"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="104"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="98"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="105"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="102"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="109"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="103"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="110"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="105"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="112"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="106"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="113"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="120"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="127"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="118"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="125"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="119"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="126"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
@@ -1676,13 +1718,13 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="80"/>
-        <source>Database directory</source>
-        <translation>Database directory</translation>
+        <source>Database folder</source>
+        <translation>Database folder</translation>
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="81"/>
-        <source>Specifies database directory for local search.</source>
-        <translation>Specifies database directory for local search.</translation>
+        <source>Specifies database folder for local search.</source>
+        <translation>Specifies database folder for local search.</translation>
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="91"/>
@@ -1708,25 +1750,24 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ComposeResultSubTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="253"/>
         <source>Compose alignment</source>
-        <translation>Compose alignment</translation>
+        <translation type="vanished">Compose alignment</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::ConvertFilesFormatPrompter</name>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="70"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="74"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="71"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="75"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="73"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="77"/>
         <source>Convert file %1 to selected format if it is not excluded.</source>
         <translation>Convert file %1 to selected format if it is not excluded.</translation>
     </message>
@@ -1734,88 +1775,88 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertFilesFormatWorker</name>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="116"/>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="118"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="120"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="122"/>
         <source>File</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="117"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="121"/>
         <source>A file to perform format conversion</source>
         <translation>A file to perform format conversion</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="119"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="123"/>
         <source>File of selected format</source>
         <translation>File of selected format</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="132"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="136"/>
         <source>Excluded formats</source>
         <translation>Excluded formats</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="133"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="137"/>
         <source>Input file won't be converted to any of selected formats.</source>
         <translation>Input file won't be converted to any of selected formats.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="135"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="139"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="136"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="140"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="140"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="144"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="141"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="145"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="163"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="167"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="161"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="165"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="162"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="166"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="199"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="203"/>
         <source>The file does not exist: %1</source>
         <translation>The file does not exist: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="273"/>
-        <source>Convert Format: result directory is empty, default workflow directory is used</source>
-        <translation>Convert Format: result directory is empty, default workflow directory is used</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="277"/>
+        <source>Convert Format: result folder is empty, default workflow folder is used</source>
+        <translation>Convert Format: result folder is empty, default workflow folder is used</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="326"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="330"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="111"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="115"/>
         <source>File Format Conversion</source>
         <translation>File Format Conversion</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="112"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="116"/>
         <source>Converts the file to selected format if it is not excluded.</source>
         <translation>Converts the file to selected format if it is not excluded.</translation>
     </message>
@@ -1823,12 +1864,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertSnpeffVariationsToAnnotationsPrompter</name>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="60"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="61"/>
         <source>unset</source>
         <translation type="unfinished">unset</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="62"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="63"/>
         <source>Parses information in variations from <u>%1</u> into annotations.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1836,27 +1877,27 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertSnpeffVariationsToAnnotationsWorker</name>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="81"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="82"/>
         <source>Input URL</source>
         <translation type="unfinished">Input URL</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="82"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="83"/>
         <source>Input variation file URL.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="107"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="108"/>
         <source>Convert SnpEff Variations to Annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="108"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="109"/>
         <source>Parses information, added to variations by SnpEff, into standard annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="116"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="117"/>
         <source>Produced from the input file name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2004,174 +2045,84 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
-    <name>U2::LocalWorkflow::DASFetcherPrompter</name>
-    <message>
-        <source>unset</source>
-        <translation type="vanished">unset</translation>
-    </message>
-</context>
-<context>
-    <name>U2::LocalWorkflow::DASFetcherWorker</name>
-    <message>
-        <source>sequences identified with</source>
-        <translation type="vanished">sequences identified with</translation>
-    </message>
-    <message>
-        <source>sequence identified with</source>
-        <translation type="vanished">sequence identified with</translation>
-    </message>
-    <message>
-        <source>Save result to <u>%1</u> directory.</source>
-        <translation type="vanished">Save result to <u>%1</u> directory.</translation>
-    </message>
-    <message>
-        <source>Reads %1 %2 from <u>%3</u> DAS source. %4</source>
-        <translation type="vanished">Reads %1 %2 from <u>%3</u> DAS source. %4</translation>
-    </message>
-    <message>
-        <source>Cannot create directory '%1'</source>
-        <translation type="vanished">Cannot create directory '%1'</translation>
-    </message>
-    <message>
-        <source>failed to load item from DAS source : %3</source>
-        <translation type="vanished">failed to load item from DAS source : %3</translation>
-    </message>
-    <message>
-        <source>Read from DAS</source>
-        <translation type="vanished">Read from DAS</translation>
-    </message>
-    <message>
-        <source>Reads sequences and annotations if any from the Distributed Annotation System.</source>
-        <translation type="vanished">Reads sequences and annotations if any from the Distributed Annotation System.</translation>
-    </message>
-    <message>
-        <source>Sequence</source>
-        <translation type="vanished">Sequence</translation>
-    </message>
-    <message>
-        <source>No DAS registry</source>
-        <translation type="vanished">No DAS registry</translation>
-    </message>
-    <message>
-        <source>No DAS sources</source>
-        <translation type="vanished">No DAS sources</translation>
-    </message>
-    <message>
-        <source>No DAS feature sources</source>
-        <translation type="vanished">No DAS feature sources</translation>
-    </message>
-    <message>
-        <source>Feature Sources</source>
-        <translation type="vanished">Feature Sources</translation>
-    </message>
-    <message>
-        <source>The DAS sources to read features from.</source>
-        <translation type="vanished">The DAS sources to read features from.</translation>
-    </message>
-    <message>
-        <source>Reference Source</source>
-        <translation type="vanished">Reference Source</translation>
-    </message>
-    <message>
-        <source>The DAS source to read reference from.</source>
-        <translation type="vanished">The DAS source to read reference from.</translation>
-    </message>
-    <message>
-        <source>Resource ID(s)</source>
-        <translation type="vanished">Resource ID(s)</translation>
-    </message>
-    <message>
-        <source>Semicolon-separated list of resource ID`s in the source.</source>
-        <translation type="vanished">Semicolon-separated list of resource ID`s in the source.</translation>
-    </message>
-    <message>
-        <source>Save file to directory</source>
-        <translation type="vanished">Save file to directory</translation>
-    </message>
-    <message>
-        <source>The directory to store sequence files loaded from the source.</source>
-        <translation type="vanished">The directory to store sequence files loaded from the source.</translation>
-    </message>
-</context>
-<context>
     <name>U2::LocalWorkflow::DNAStatWorker</name>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="62"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="65"/>
         <source>Input sequence</source>
         <translation>Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="63"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="66"/>
         <source>Sequence for which GC-content and GC3-content will be evaluated.</source>
         <translation>Sequence for which GC-content and GC3-content will be evaluated.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="64"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="67"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="65"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="68"/>
         <source>Resulted annotations, with GC-content and GC3-content.</source>
         <translation>Resulted annotations, with GC-content and GC3-content.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="71"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="74"/>
         <source>GC-content</source>
         <translation>GC-content</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="71"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="74"/>
         <source>Evaluate GC-content.</source>
         <translation>Evaluate GC-content.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="73"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="76"/>
         <source>Evaluate GC1-content.</source>
         <translation>Evaluate GC1-content.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="75"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="78"/>
         <source>Evaluate GC2-content.</source>
         <translation>Evaluate GC2-content.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="77"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="80"/>
         <source>Evaluate GC3-content.</source>
         <translation>Evaluate GC3-content.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="73"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="76"/>
         <source>GC1-content</source>
         <translation>GC1-content</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="75"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="78"/>
         <source>GC2-content</source>
         <translation>GC2-content</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="77"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="80"/>
         <source>GC3-content</source>
         <translation>GC3-content</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="81"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="84"/>
         <source>DNA Statistics</source>
         <translation>DNA Statistics</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="82"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="85"/>
         <source>Evaluates statistics for DNA sequences.</source>
         <translation>Evaluates statistics for DNA sequences.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="120"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="123"/>
         <source>Sequence must be nucleotide</source>
         <translation>Sequence must be nucleotide</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="149"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="152"/>
         <source>No statistics was selected</source>
         <translation>No statistics was selected</translation>
     </message>
@@ -2179,7 +2130,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::DNAStatWorkerPrompter</name>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="93"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="96"/>
         <source>Evaluates GC-Content and GC3-Content.</source>
         <translation>Evaluates GC-Content and GC3-Content.</translation>
     </message>
@@ -2216,52 +2167,52 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractAssemblyCoverageWorker</name>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="100"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="101"/>
         <source>Empty assembly slot</source>
         <translation>Empty assembly slot</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="107"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="108"/>
         <source>Error with assembly object</source>
         <translation>Error with assembly object</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="165"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="166"/>
         <source>Extract Coverage from Assembly</source>
         <translation>Extract Coverage from Assembly</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="166"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="167"/>
         <source>Extract the coverage and bases quantity from the incoming assembly.</source>
         <translation>Extract the coverage and bases quantity from the incoming assembly.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="179"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="180"/>
         <source>Format</source>
         <translation>Format</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="180"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="181"/>
         <source>Format to store the output.</source>
         <translation>Format to store the output.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="182"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="183"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="183"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="184"/>
         <source>Data type to export.</source>
         <translation>Data type to export.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="185"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="186"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="186"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="187"/>
         <source>The minimum coverage value to export.</source>
         <translation>The minimum coverage value to export.</translation>
     </message>
@@ -2269,18 +2220,18 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractAssemblyCoverageWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="246"/>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="259"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="247"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="260"/>
         <source>coverage in "%1" format</source>
         <translation>coverage in "%1" format</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="251"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="252"/>
         <source>nothing</source>
         <translation>nothing</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="266"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="267"/>
         <source>Exports %1 from the incoming assembly with threshold %2 to %3 in tab delimited plain text format.</source>
         <translation>Exports %1 from the incoming assembly with threshold %2 to %3 in tab delimited plain text format.</translation>
     </message>
@@ -2288,12 +2239,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusTaskHelper</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="145"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="146"/>
         <source>Extract consensus</source>
         <translation>Extract consensus</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="188"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="189"/>
         <source>Unknown consensus algorithm: </source>
         <translation>Unknown consensus algorithm: </translation>
     </message>
@@ -2301,12 +2252,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusWorker</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="101"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="102"/>
         <source>Empty assembly slot</source>
         <translation>Empty assembly slot</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="107"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="108"/>
         <source>Error with assembly object</source>
         <translation>Error with assembly object</translation>
     </message>
@@ -2314,7 +2265,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="288"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="289"/>
         <source>Extracts the consensus sequence from the incoming assembly using the %1 algorithm.</source>
         <translation>Extracts the consensus sequence from the incoming assembly using the %1 algorithm.</translation>
     </message>
@@ -2322,71 +2273,71 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusSequenceWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="263"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="264"/>
         <source>Extract Consensus from Alignment as Sequence</source>
         <translation>Extract Consensus from Alignment as Sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="264"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="265"/>
         <source>Extract the consensus sequence from the incoming multiple sequence alignment.</source>
         <translation>Extract the consensus sequence from the incoming multiple sequence alignment.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="276"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="277"/>
         <source>Consensus sequence</source>
         <translation>Consensus sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="277"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="278"/>
         <source>Provides resulting consensus as a sequence</source>
         <translation>Provides resulting consensus as a sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="288"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="374"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="289"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="375"/>
         <source>Algorithm</source>
         <translation>Algorithm</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="289"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="375"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="290"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="376"/>
         <source>The algorithm of consensus extracting.</source>
         <translation>The algorithm of consensus extracting.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="291"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="377"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="292"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="378"/>
         <source>Threshold</source>
         <translation>Threshold</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="292"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="378"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="293"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="379"/>
         <source>The threshold of the algorithm.</source>
         <translation>The threshold of the algorithm.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="294"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="295"/>
         <source>Keep gaps</source>
         <translation>Keep gaps</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="295"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="296"/>
         <source>Set this parameter if the result consensus must keep the gaps.</source>
         <translation>Set this parameter if the result consensus must keep the gaps.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="348"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="349"/>
         <source>Extract Consensus from Alignment as Text</source>
         <translation>Extract Consensus from Alignment as Text</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="349"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="350"/>
         <source>Extract the consensus string from the incoming multiple sequence alignment.</source>
         <translation>Extract the consensus string from the incoming multiple sequence alignment.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="424"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="425"/>
         <source>Extracts the consensus sequence from the incoming alignment(s) using the %1 algorithm.</source>
         <translation>Extracts the consensus sequence from the incoming alignment(s) using the %1 algorithm.</translation>
     </message>
@@ -2394,24 +2345,24 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusStringWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="269"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="354"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="270"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="355"/>
         <source>Input alignment</source>
         <translation>Input alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="270"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="355"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="271"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="356"/>
         <source>A alignment which consensus should be extracted</source>
         <translation>A alignment which consensus should be extracted</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="362"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="363"/>
         <source>Consensus</source>
         <translation>Consensus</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="363"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="364"/>
         <source>Provides resulting consensus as a text</source>
         <translation>Provides resulting consensus as a text</translation>
     </message>
@@ -2419,12 +2370,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusTaskHelper</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="186"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="187"/>
         <source>Extract consensus</source>
         <translation>Extract consensus</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="232"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="233"/>
         <source>Unknown consensus algorithm: </source>
         <translation>Unknown consensus algorithm: </translation>
     </message>
@@ -2432,12 +2383,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="105"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="106"/>
         <source>Empty msa slot</source>
         <translation>Empty msa slot</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="111"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="112"/>
         <source>Error with msa object</source>
         <translation>Error with msa object</translation>
     </message>
@@ -2445,25 +2396,151 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FastQWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="380"/>
+        <location filename="../src/library/DocWorkers.cpp" line="384"/>
         <source>Fastq writer: NULL sequence object</source>
         <translation>Fastq writer: NULL sequence object</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::FastqQualityTrimPrompter</name>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="225"/>
+        <source>unset</source>
+        <translation type="unfinished">unset</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="226"/>
+        <source><u>%1</u></source>
+        <translation type="unfinished"><u>%1</u></translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="228"/>
+        <source>Trim input sequence %1 from the end, using the quality threshold.</source>
+        <translation type="unfinished">Trim input sequence %1 from the end, using the quality threshold.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::FastqQualityTrimWorker</name>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="236"/>
+        <source>FASTQ Quality Trimmer</source>
+        <translation type="unfinished">FASTQ Quality Trimmer</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="237"/>
+        <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
+        <translation type="unfinished">The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="243"/>
+        <source>Input File</source>
+        <translation type="unfinished">Input File</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="244"/>
+        <source>Set of FASTQ reads files</source>
+        <translation type="unfinished">Set of FASTQ reads files</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="245"/>
+        <source>Output File</source>
+        <translation type="unfinished">Output File</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="246"/>
+        <source>Output FASTQ files</source>
+        <translation type="unfinished">Output FASTQ files</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="259"/>
+        <source>Output folder</source>
+        <translation type="unfinished">Output folder</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="260"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation type="unfinished">Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="264"/>
+        <source>Custom folder</source>
+        <translation type="unfinished">Custom folder</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="265"/>
+        <source>Select the custom output folder.</source>
+        <translation type="unfinished">Select the custom output folder.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="267"/>
+        <source>Output file name</source>
+        <translation type="unfinished">Output file name</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="268"/>
+        <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
+        <translation type="unfinished">A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="270"/>
+        <source>Quality threshold</source>
+        <translation type="unfinished">Quality threshold</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="271"/>
+        <source>Quality threshold for trimming.</source>
+        <translation type="unfinished">Quality threshold for trimming.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="273"/>
+        <source>Min Length</source>
+        <translation type="unfinished">Min Length</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="274"/>
+        <source>Too short reads are discarded by the filter.</source>
+        <translation type="unfinished">Too short reads are discarded by the filter.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="276"/>
+        <source>Trim both ends</source>
+        <translation type="unfinished">Trim both ends</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="277"/>
+        <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
+        <translation type="unfinished">Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="292"/>
+        <source>Input file</source>
+        <translation type="unfinished">Input file</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="293"/>
+        <source>Workflow</source>
+        <translation type="unfinished">Workflow</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="294"/>
+        <source>Custom</source>
+        <translation type="unfinished">Custom</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::FetchSequenceByIdFromAnnotationPrompter</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="406"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="407"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="407"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="408"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="409"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="410"/>
         <source>In each annotation from %1 search for accession ID and download the corresponding sequences.</source>
         <translation>In each annotation from %1 search for accession ID and download the corresponding sequences.</translation>
     </message>
@@ -2471,42 +2548,42 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FetchSequenceByIdFromAnnotationWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="415"/>
-        <source>Cannot create directory '%1'</source>
-        <translation>Cannot create directory '%1'</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="416"/>
+        <source>Cannot create folder '%1'</source>
+        <translation>Cannot create folder '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="469"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="470"/>
         <source>failed to load item '%1' from '%2' DB : %3</source>
         <translation>failed to load item '%1' from '%2' DB : %3</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="532"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="533"/>
         <source>Fetch Sequences by ID from Annotation</source>
         <translation>Fetch Sequences by ID from Annotation</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="533"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="534"/>
         <source>Parses annotations to find any IDs and fetches corresponding sequences.</source>
         <translation>Parses annotations to find any IDs and fetches corresponding sequences.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="537"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="538"/>
         <source>Input annotations</source>
         <translation>Input annotations</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="538"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="539"/>
         <source>The annotations are scanned for accesion ids.</source>
         <translation>The annotations are scanned for accesion ids.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="544"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="545"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="545"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="546"/>
         <source>The downloaded sequences</source>
         <translation>The downloaded sequences</translation>
     </message>
@@ -2702,17 +2779,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FilterBamPrompter</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="73"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="76"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="74"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="77"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="76"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="79"/>
         <source>Filter BAM/SAM files from %1 with SAMTools view.</source>
         <translation>Filter BAM/SAM files from %1 with SAMTools view.</translation>
     </message>
@@ -2720,128 +2797,128 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FilterBamWorker</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="120"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="123"/>
         <source>Filter BAM/SAM files</source>
         <translation>Filter BAM/SAM files</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="121"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="124"/>
         <source>Filters BAM/SAM files using SAMTools view.</source>
         <translation>Filters BAM/SAM files using SAMTools view.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="125"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="128"/>
         <source>BAM/SAM File</source>
         <translation>BAM/SAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="126"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="129"/>
         <source>Set of BAM/SAM files to filter</source>
         <translation>Set of BAM/SAM files to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="127"/>
-        <location filename="../src/library/FilterBamWorker.cpp" line="128"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="130"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="131"/>
         <source>Filtered BAM/SAM files</source>
         <translation>Filtered BAM/SAM files</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="141"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="144"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="142"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="145"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="146"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="149"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="147"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="150"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="149"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="152"/>
         <source>Output name</source>
         <translation>Output name</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="150"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="153"/>
         <source>A name of an output BAM/SAM file. If default of empty value is provided the output name is the name of the first BAM/SAM file with .filtered extention.</source>
         <translation>A name of an output BAM/SAM file. If default of empty value is provided the output name is the name of the first BAM/SAM file with .filtered extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="152"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="155"/>
         <source>Output format</source>
         <translation>Output format</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="153"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="156"/>
         <source>Format of an output assembly file.</source>
         <translation>Format of an output assembly file.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="155"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="158"/>
         <source>Region</source>
         <translation>Region</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="156"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="159"/>
         <source>Regions to filter. For BAM output only. chr2 to output the whole chr2. chr2:1000 to output regions of chr 2 starting from 1000. chr2:1000-2000 to ouput regions of chr2 between 1000 and 2000 including the end point. To input multiple regions use the space seprator (e.g. chr1 chr2 chr3:1000-2000).</source>
         <translation>Regions to filter. For BAM output only. chr2 to output the whole chr2. chr2:1000 to output regions of chr 2 starting from 1000. chr2:1000-2000 to ouput regions of chr2 between 1000 and 2000 including the end point. To input multiple regions use the space seprator (e.g. chr1 chr2 chr3:1000-2000).</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="159"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="162"/>
         <source>MAPQ threshold</source>
         <translation>MAPQ threshold</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="160"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="163"/>
         <source>Minimum MAPQ quality score.</source>
         <translation>Minimum MAPQ quality score.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="162"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="165"/>
         <source>Accept flag</source>
         <translation>Accept flag</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="163"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="166"/>
         <source>Only output alignments with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</source>
         <translation>Only output alignments with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="165"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="168"/>
         <source>Skip flag</source>
         <translation>Skip flag</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="166"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="169"/>
         <source>Skip alignment with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</source>
         <translation>Skip alignment with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="185"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="188"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="183"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="186"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="184"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="187"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="242"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="245"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -2849,7 +2926,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindAllRegionsTask</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="536"/>
+        <location filename="../src/library/FindWorker.cpp" line="537"/>
         <source>FindAllRegionsTask</source>
         <translation>FindAllRegionsTask</translation>
     </message>
@@ -2857,52 +2934,52 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindPrompter</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="246"/>
+        <location filename="../src/library/FindWorker.cpp" line="247"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="274"/>
+        <location filename="../src/library/FindWorker.cpp" line="275"/>
         <source>translated</source>
         <translation>translated</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="282"/>
+        <location filename="../src/library/FindWorker.cpp" line="283"/>
         <source>A substring must %1.</source>
         <translation>A substring must %1.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="283"/>
+        <location filename="../src/library/FindWorker.cpp" line="284"/>
         <source>match a pattern exactly</source>
         <translation>match a pattern exactly</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="285"/>
+        <location filename="../src/library/FindWorker.cpp" line="286"/>
         <source>Maximum number of mismatches is %1.</source>
         <translation>Maximum number of mismatches is %1.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="293"/>
+        <location filename="../src/library/FindWorker.cpp" line="294"/>
         <source><u>%1</u> pattern(s)</source>
         <translation><u>%1</u> pattern(s)</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="295"/>
+        <location filename="../src/library/FindWorker.cpp" line="296"/>
         <source>patterns from <u>%1</u></source>
         <translation>patterns from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="303"/>
+        <location filename="../src/library/FindWorker.cpp" line="304"/>
         <source> and <u>%1</u></source>
         <translation> and <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="307"/>
+        <location filename="../src/library/FindWorker.cpp" line="308"/>
         <source> using pattern names</source>
         <translation> using pattern names</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="310"/>
+        <location filename="../src/library/FindWorker.cpp" line="311"/>
         <source>Searches regions in each sequence from <u>%1</u> similar to %2%3.<br/>%4<br/>Searches in <u>%5</u> of a %6sequence. Outputs the regions found annotated as <u>%7</u>.</source>
         <translation>Searches regions in each sequence from <u>%1</u> similar to %2%3.<br/>%4<br/>Searches in <u>%5</u> of a %6sequence. Outputs the regions found annotated as <u>%7</u>.</translation>
     </message>
@@ -2910,143 +2987,143 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindWorker</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="130"/>
+        <location filename="../src/library/FindWorker.cpp" line="131"/>
         <source>Input Data</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="131"/>
+        <location filename="../src/library/FindWorker.cpp" line="132"/>
         <source>An input sequence to search in.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="134"/>
+        <location filename="../src/library/FindWorker.cpp" line="135"/>
         <source>Pattern Annotations</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="135"/>
+        <location filename="../src/library/FindWorker.cpp" line="136"/>
         <source>The regions found.</source>
         <translation>The regions found.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="146"/>
+        <location filename="../src/library/FindWorker.cpp" line="147"/>
         <source>Name of the result annotations.</source>
         <translation>Name of the result annotations.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="149"/>
+        <location filename="../src/library/FindWorker.cpp" line="150"/>
         <source>Use pattern name</source>
         <translation>Use pattern name</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="150"/>
+        <location filename="../src/library/FindWorker.cpp" line="151"/>
         <source>If patterns are loaded from a file, use names of pattern sequences as annotation names. The name from the parameters is used by default.</source>
         <translation>If patterns are loaded from a file, use names of pattern sequences as annotation names. The name from the parameters is used by default.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="152"/>
+        <location filename="../src/library/FindWorker.cpp" line="153"/>
         <source>Max Mismatches</source>
         <translation>Max Mismatches</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="153"/>
+        <location filename="../src/library/FindWorker.cpp" line="154"/>
         <source>Maximum number of mismatches between a substring and a pattern.</source>
         <translation>Maximum number of mismatches between a substring and a pattern.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="157"/>
+        <location filename="../src/library/FindWorker.cpp" line="158"/>
         <source>Allow Insertions/Deletions</source>
         <translation>Allow Insertions/Deletions</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="158"/>
+        <location filename="../src/library/FindWorker.cpp" line="159"/>
         <source>Takes into account possibility of insertions/deletions when searching. By default substitutions are only considered.</source>
         <translation>Takes into account possibility of insertions/deletions when searching. By default substitutions are only considered.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="162"/>
+        <location filename="../src/library/FindWorker.cpp" line="163"/>
         <source>Support ambiguous bases</source>
         <translation>Support ambiguous bases</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="163"/>
+        <location filename="../src/library/FindWorker.cpp" line="164"/>
         <source>Performs correct handling of ambiguous bases. When this option is activated insertions and deletions are not considered. </source>
         <translation>Performs correct handling of ambiguous bases. When this option is activated insertions and deletions are not considered. </translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="167"/>
+        <location filename="../src/library/FindWorker.cpp" line="168"/>
         <source>Search in Translation</source>
         <translation>Search in Translation</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="168"/>
+        <location filename="../src/library/FindWorker.cpp" line="169"/>
         <source>Translates a supplied nucleotide sequence to protein and searches in the translated sequence.</source>
         <translation>Translates a supplied nucleotide sequence to protein and searches in the translated sequence.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="172"/>
+        <location filename="../src/library/FindWorker.cpp" line="173"/>
         <source>Qualifier name for pattern name</source>
         <translation>Qualifier name for pattern name</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="173"/>
+        <location filename="../src/library/FindWorker.cpp" line="174"/>
         <source>Name of qualifier in result annotations which is containing a pattern name.</source>
         <translation>Name of qualifier in result annotations which is containing a pattern name.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="189"/>
+        <location filename="../src/library/FindWorker.cpp" line="190"/>
         <source>Find Pattern</source>
         <translation>Find Pattern</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="190"/>
+        <location filename="../src/library/FindWorker.cpp" line="191"/>
         <source>Searches regions in a sequence similar to a pattern sequence. Outputs a set of annotations.</source>
         <translation>Searches regions in a sequence similar to a pattern sequence. Outputs a set of annotations.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="259"/>
+        <location filename="../src/library/FindWorker.cpp" line="260"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="262"/>
+        <location filename="../src/library/FindWorker.cpp" line="263"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="265"/>
+        <location filename="../src/library/FindWorker.cpp" line="266"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="350"/>
+        <location filename="../src/library/FindWorker.cpp" line="351"/>
         <source>Load file with patterns</source>
         <translation>Load file with patterns</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="374"/>
+        <location filename="../src/library/FindWorker.cpp" line="375"/>
         <source>Null sequence supplied to FindWorker: %1</source>
         <translation>Null sequence supplied to FindWorker: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="420"/>
+        <location filename="../src/library/FindWorker.cpp" line="421"/>
         <source>Empty pattern given</source>
         <translation>Empty pattern given</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="445"/>
+        <location filename="../src/library/FindWorker.cpp" line="446"/>
         <source>Find algorithm subtasks</source>
         <translation>Find algorithm subtasks</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="501"/>
-        <location filename="../src/library/FindWorker.cpp" line="522"/>
+        <location filename="../src/library/FindWorker.cpp" line="502"/>
+        <location filename="../src/library/FindWorker.cpp" line="523"/>
         <source>Found %1 matches of pattern '%2'</source>
         <translation>Found %1 matches of pattern '%2'</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="145"/>
+        <location filename="../src/library/FindWorker.cpp" line="146"/>
         <source>Annotate as</source>
         <translation>Annotate as</translation>
     </message>
@@ -3054,7 +3131,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::GFFWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="635"/>
+        <location filename="../src/library/DocWorkers.cpp" line="639"/>
         <source>GFF writer: NULL sequence object</source>
         <translation>GFF writer: NULL sequence object</translation>
     </message>
@@ -3062,7 +3139,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::GenbankWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="499"/>
+        <location filename="../src/library/DocWorkers.cpp" line="503"/>
         <source>Genbank writer: NULL sequence object</source>
         <translation>Genbank writer: NULL sequence object</translation>
     </message>
@@ -3095,8 +3172,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/GetFileListWorker.cpp" line="110"/>
-        <source>Produces URL(s) to files from specified directories.</source>
-        <translation>Produces URL(s) to files from specified directories.</translation>
+        <source>Produces URL(s) to files from specified folders.</source>
+        <translation>Produces URL(s) to files from specified folders.</translation>
     </message>
     <message>
         <location filename="../src/library/GetFileListWorker.cpp" line="109"/>
@@ -3226,24 +3303,20 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::KAlignSubTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="536"/>
         <source>Max region size: %1</source>
-        <translation>Max region size: %1</translation>
+        <translation type="vanished">Max region size: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="537"/>
         <source>Core region: %1-%2</source>
-        <translation>Core region: %1-%2</translation>
+        <translation type="vanished">Core region: %1-%2</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="600"/>
         <source>The %1 algorithm is not found. Add the %1 plugin.</source>
-        <translation>The %1 algorithm is not found. Add the %1 plugin.</translation>
+        <translation type="vanished">The %1 algorithm is not found. Add the %1 plugin.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="603"/>
         <source>The %1 algorithm is not found. Check that the %1 plugin is up to date.</source>
-        <translation>The %1 algorithm is not found. Check that the %1 plugin is up to date.</translation>
+        <translation type="vanished">The %1 algorithm is not found. Check that the %1 plugin is up to date.</translation>
     </message>
 </context>
 <context>
@@ -3321,7 +3394,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MSAWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="851"/>
+        <location filename="../src/library/DocWorkers.cpp" line="855"/>
         <source>Empty alignment passed for writing to %1</source>
         <translation>Empty alignment passed for writing to %1</translation>
     </message>
@@ -3380,17 +3453,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeBamPrompter</name>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="66"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="70"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="67"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="71"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="69"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="73"/>
         <source>Merge BAM files from %1 with SAMTools merge.</source>
         <translation>Merge BAM files from %1 with SAMTools merge.</translation>
     </message>
@@ -3398,82 +3471,82 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeBamWorker</name>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="81"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="85"/>
         <source>Merge BAM files</source>
         <translation>Merge BAM files</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="82"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="86"/>
         <source>Merge BAM files using SAMTools merge.</source>
         <translation>Merge BAM files using SAMTools merge.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="86"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="90"/>
         <source>BAM File</source>
         <translation>BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="87"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="91"/>
         <source>Set of BAM files to merge</source>
         <translation>Set of BAM files to merge</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="88"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="92"/>
         <source>Merged BAM File</source>
         <translation>Merged BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="89"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="93"/>
         <source>Merged BAM file</source>
         <translation>Merged BAM file</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="102"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="106"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="103"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="107"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="107"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="111"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="108"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="112"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="110"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="114"/>
         <source>Output BAM name</source>
         <translation>Output BAM name</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="111"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="115"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .merged.bam extention.</source>
         <translation>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .merged.bam extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="126"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="130"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="124"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="128"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="125"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="129"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="168"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="172"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -3481,17 +3554,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeFastqPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="416"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="452"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="417"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="453"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="419"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="455"/>
         <source>Merges input sequences %1.</source>
         <translation>Merges input sequences %1.</translation>
     </message>
@@ -3499,77 +3572,77 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeFastqWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="427"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="463"/>
         <source>FASTQ Merger</source>
         <translation>FASTQ Merger</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="428"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="464"/>
         <source>Merges input sequences to one output file</source>
         <translation>Merges input sequences to one output file</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="432"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="468"/>
         <source>Input File</source>
         <translation>Input File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="433"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="469"/>
         <source>Set of FASTQ reads files</source>
         <translation>Set of FASTQ reads files</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="434"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="470"/>
         <source>Output File</source>
         <translation>Output File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="435"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="471"/>
         <source>Output FASTQ file</source>
         <translation>Output FASTQ file</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="448"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="484"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="449"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="485"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="453"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="489"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="454"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="490"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="456"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="492"/>
         <source>Output file name</source>
         <translation>Output file name</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="457"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="493"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="472"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="508"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="470"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="506"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="471"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="507"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
@@ -3577,17 +3650,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerPrompter</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="331"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="332"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="344"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="345"/>
         <source>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</source>
         <translation>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="348"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="349"/>
         <source>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</source>
         <translation>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</translation>
     </message>
@@ -3595,67 +3668,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerWorker</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="279"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
         <source>Multiplexing rule</source>
         <translation>Multiplexing rule</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="262"/>
         <source>First input port</source>
         <translation>First input port</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="244"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="245"/>
         <source>The number of messages, received from "%1" (%2), does not correspond to the number of messages, received from "%3" (%4). Redundant messages were skipped.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="262"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</source>
         <translation>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="265"/>
         <source>Second input port</source>
         <translation>Second input port</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="265"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</source>
         <translation>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="271"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
         <source>Multiplexed output</source>
         <translation>Multiplexed output</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="273"/>
         <source>The port outputs multiplexed messages.</source>
         <translation>The port outputs multiplexed messages.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="281"/>
         <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
         <translation>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each mes [...]
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="296"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
         <source>1 to many</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="298"/>
         <source>1 to 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="303"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
         <source>Multiplexer</source>
         <translation>Multiplexer</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="305"/>
         <source>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</source>
         <translation>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</translation>
     </message>
@@ -3663,9 +3736,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::PairwiseAlignmentTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="745"/>
         <source>Can't translate read sequence to reverse complement</source>
-        <translation>Can't translate read sequence to reverse complement</translation>
+        <translation type="vanished">Can't translate read sequence to reverse complement</translation>
     </message>
 </context>
 <context>
@@ -3727,189 +3799,165 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::QualityTrimPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="218"/>
         <source>unset</source>
-        <translation>unset</translation>
+        <translation type="vanished">unset</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="219"/>
         <source><u>%1</u></source>
-        <translation><u>%1</u></translation>
+        <translation type="vanished"><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="221"/>
         <source>Trim input sequence %1 from the end, using the quality threshold.</source>
-        <translation>Trim input sequence %1 from the end, using the quality threshold.</translation>
+        <translation type="vanished">Trim input sequence %1 from the end, using the quality threshold.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::QualityTrimWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="229"/>
         <source>FASTQ Quality Trimmer</source>
-        <translation>FASTQ Quality Trimmer</translation>
+        <translation type="vanished">FASTQ Quality Trimmer</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="230"/>
         <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
-        <translation>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</translation>
+        <translation type="vanished">The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="236"/>
         <source>Input File</source>
-        <translation>Input File</translation>
+        <translation type="vanished">Input File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="237"/>
         <source>Set of FASTQ reads files</source>
-        <translation>Set of FASTQ reads files</translation>
+        <translation type="vanished">Set of FASTQ reads files</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="238"/>
         <source>Output File</source>
-        <translation>Output File</translation>
+        <translation type="vanished">Output File</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="239"/>
         <source>Output FASTQ files</source>
-        <translation>Output FASTQ files</translation>
+        <translation type="vanished">Output FASTQ files</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="252"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <source>Output folder</source>
+        <translation type="vanished">Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="253"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation type="vanished">Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="257"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <source>Custom folder</source>
+        <translation type="vanished">Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="258"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <source>Select the custom output folder.</source>
+        <translation type="vanished">Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="260"/>
         <source>Output file name</source>
-        <translation>Output file name</translation>
+        <translation type="vanished">Output file name</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="261"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
-        <translation>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
+        <translation type="vanished">A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="263"/>
         <source>Quality threshold</source>
-        <translation>Quality threshold</translation>
+        <translation type="vanished">Quality threshold</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="264"/>
         <source>Quality threshold for trimming.</source>
-        <translation>Quality threshold for trimming.</translation>
+        <translation type="vanished">Quality threshold for trimming.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="266"/>
         <source>Min Length</source>
-        <translation>Min Length</translation>
+        <translation type="vanished">Min Length</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="267"/>
         <source>Too short reads are discarded by the filter.</source>
-        <translation>Too short reads are discarded by the filter.</translation>
+        <translation type="vanished">Too short reads are discarded by the filter.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="269"/>
         <source>Trim both ends</source>
-        <translation>Trim both ends</translation>
+        <translation type="vanished">Trim both ends</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="270"/>
         <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
-        <translation>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></translation>
+        <translation type="vanished">Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="287"/>
         <source>Custom</source>
-        <translation>Custom</translation>
+        <translation type="vanished">Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="285"/>
         <source>Input file</source>
-        <translation>Input file</translation>
+        <translation type="vanished">Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="286"/>
         <source>Workflow</source>
-        <translation>Workflow</translation>
+        <translation type="vanished">Workflow</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::RCWorker</name>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="37"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="59"/>
         <source>Input sequence</source>
         <translation>Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="38"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="60"/>
         <source>The sequence to be complemented</source>
         <translation>The sequence to be complemented</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="39"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="61"/>
         <source>Output sequence</source>
         <translation>Output sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="40"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="62"/>
         <source>Reverse-complement sequence</source>
         <translation>Reverse-complement sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="49"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="71"/>
         <source>Operation type</source>
         <translation>Operation type</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="50"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="72"/>
         <source>Select what to do with sequence.</source>
         <translation>Select what to do with sequence.</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="53"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="75"/>
         <source>Reverse Complement</source>
         <translation>Reverse Complement</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="54"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="76"/>
         <source>Converts input sequence into its reverse, complement or reverse-complement counterpart</source>
         <translation>Converts input sequence into its reverse, complement or reverse-complement counterpart</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="102"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="124"/>
         <source>Null sequence object supplied to FindWorker</source>
         <translation>Null sequence object supplied to FindWorker</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="108"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="130"/>
         <source>Null sequence supplied to FindWorker: %1</source>
         <translation>Null sequence supplied to FindWorker: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="115"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="137"/>
         <source>Can't complement amino sequence</source>
         <translation>Can't complement amino sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="124"/>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="135"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="146"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="157"/>
         <source>Can't find complement translation</source>
         <translation>Can't find complement translation</translation>
     </message>
@@ -3917,17 +3965,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RCWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="76"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="98"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="77"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="99"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="82"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="104"/>
         <source>Converts each input sequence %1 into its %2 counterpart.</source>
         <translation>Converts each input sequence %1 into its %2 counterpart.</translation>
     </message>
@@ -3935,7 +3983,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RawSeqWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="435"/>
+        <location filename="../src/library/DocWorkers.cpp" line="439"/>
         <source>Raw sequence writer: NULL sequence object</source>
         <translation>Raw sequence writer: NULL sequence object</translation>
     </message>
@@ -3972,8 +4020,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadAnnotationsWorker.cpp" line="138"/>
-        <source>Reads annotations from files.</source>
-        <translation>Reads annotations from files.</translation>
+        <source>Reads annotations from files. All annotation file formats supported by UGENE are allowed as input to this element.</source>
+        <translation>Reads annotations from files. All annotation file formats supported by UGENE are allowed as input to this element.</translation>
     </message>
     <message>
         <location filename="../src/library/ReadAnnotationsWorker.cpp" line="148"/>
@@ -4051,8 +4099,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadAssemblyWorker.cpp" line="123"/>
-        <source>Reads assembly from files.</source>
-        <translation>Reads assembly from files.</translation>
+        <source>Reads assembly from files. All assembly file formats supported by UGENE are allowed as input to this element.</source>
+        <translation>Reads assembly from files. All assembly file formats supported by UGENE are allowed as input to this element.</translation>
     </message>
     <message>
         <location filename="../src/library/ReadAssemblyWorker.cpp" line="133"/>
@@ -4103,8 +4151,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadVariationWorker.cpp" line="188"/>
-        <source>Reads variations from files and produces variations tracks.</source>
-        <translation>Reads variations from files and produces variations tracks.</translation>
+        <source>Reads variations from files and produces variations tracks. All variation file formats supported by UGENE are allowed as input to this element.</source>
+        <translation>Reads variations from files and produces variations tracks. All variation file formats supported by UGENE are allowed as input to this element.</translation>
     </message>
     <message>
         <location filename="../src/library/ReadVariationWorker.cpp" line="197"/>
@@ -4141,7 +4189,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RemoteDBFetcherPrompter</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="68"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="69"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
@@ -4149,115 +4197,115 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RemoteDBFetcherWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="78"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="79"/>
         <source>sequences identified with</source>
         <translation>sequences identified with</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="79"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="80"/>
         <source>sequence identified with</source>
         <translation>sequence identified with</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="84"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="85"/>
         <source>sequences identified with resource IDs that will be read from files</source>
         <translation>sequences identified with resource IDs that will be read from files</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="85"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="86"/>
         <source>sequences identified with resource IDs that will be read from file</source>
         <translation>sequences identified with resource IDs that will be read from file</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="95"/>
-        <source>Save result to <u>%1</u> directory.</source>
-        <translation>Save result to <u>%1</u> directory.</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="96"/>
+        <source>Save result to <u>%1</u> folder.</source>
+        <translation>Save result to <u>%1</u> folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="97"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="98"/>
         <source>Reads %1 %2 from <u>%3</u> remote database. %4</source>
         <translation>Reads %1 %2 from <u>%3</u> remote database. %4</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="143"/>
-        <source>Cannot create directory '%1'</source>
-        <translation>Cannot create directory '%1'</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="144"/>
+        <source>Cannot create folder '%1'</source>
+        <translation>Cannot create folder '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="175"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="176"/>
         <source>failed to load item '%1' from '%2' DB : %3</source>
         <translation>failed to load item '%1' from '%2' DB : %3</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="301"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="302"/>
         <source>Read from Remote Database</source>
         <translation>Read from Remote Database</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="302"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="303"/>
         <source>Reads sequences and annotations if any from a remote database.</source>
         <translation>Reads sequences and annotations if any from a remote database.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="306"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="307"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="317"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="318"/>
         <source>Database</source>
         <translation>Database</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="318"/>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="559"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="319"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="560"/>
         <source>The database to read from.</source>
         <translation>The database to read from.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="322"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="323"/>
         <source>Read resource ID(s) from source</source>
         <translation>Read resource ID(s) from source</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="323"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="324"/>
         <source>The source to read resource IDs from: the list or a local file.</source>
         <translation>The source to read resource IDs from: the list or a local file.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="327"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="328"/>
         <source>File with resource IDs</source>
         <translation>File with resource IDs</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="328"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="329"/>
         <source>A file with a list of resource ID`s in the database (one per line).</source>
         <translation>A file with a list of resource ID`s in the database (one per line).</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="334"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="335"/>
         <source>Resource ID(s)</source>
         <translation>Resource ID(s)</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="335"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="336"/>
         <source>Semicolon-separated list of resource ID`s in the database.</source>
         <translation>Semicolon-separated list of resource ID`s in the database.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="341"/>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="553"/>
-        <source>Save file to directory</source>
-        <translation>Save file to directory</translation>
-    </message>
-    <message>
         <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="342"/>
         <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="554"/>
-        <source>The directory to store sequence files loaded from a database.</source>
-        <translation>The directory to store sequence files loaded from a database.</translation>
+        <source>Save file to folder</source>
+        <translation>Save file to folder</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="558"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="343"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="555"/>
+        <source>The folder to store sequence files loaded from a database.</source>
+        <translation>The folder to store sequence files loaded from a database.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="559"/>
         <source>NCBI database</source>
         <translation>NCBI database</translation>
     </message>
@@ -4265,17 +4313,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RenameChomosomeInVariationPrompter</name>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="56"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="58"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="63"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="65"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="65"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="67"/>
         <source>For each variation from %1 replace chromosome prefix%2 %3 with %4 prefix.</source>
         <translation>For each variation from %1 replace chromosome prefix%2 %3 with %4 prefix.</translation>
     </message>
@@ -4283,72 +4331,72 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RenameChomosomeInVariationWorker</name>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="84"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="86"/>
         <source>An unexpected task type</source>
         <translation>An unexpected task type</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="103"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="105"/>
         <source>Source file URL is empty</source>
         <translation>Source file URL is empty</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="122"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="124"/>
         <source>Change Chromosome Notation for VCF</source>
         <translation>Change Chromosome Notation for VCF</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="123"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="125"/>
         <source>Changes chromosome notation for each variant from the input VCF or other variation files.</source>
         <translation>Changes chromosome notation for each variant from the input VCF or other variation files.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="127"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="129"/>
         <source>Input file URL</source>
         <translation>Input file URL</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="128"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="130"/>
         <source>Input files(s) with variations, usually in VCF format.</source>
         <translation>Input files(s) with variations, usually in VCF format.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="129"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="131"/>
         <source>Output file URL</source>
         <translation>Output file URL</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="130"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="132"/>
         <source>Output file(s) with annotated variations.</source>
         <translation>Output file(s) with annotated variations.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="137"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="139"/>
         <source>Produced URL</source>
         <translation>Produced URL</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="137"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="139"/>
         <source>Location of a corresponding produced file.</source>
         <translation>Location of a corresponding produced file.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="144"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="146"/>
         <source>Replace prefixes</source>
         <translation>Replace prefixes</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="145"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="147"/>
         <source>Input the list of chromosome prefixes that you would like to replace, for example "NC_000". Separate different prefixes by semicolons.</source>
         <translation>Input the list of chromosome prefixes that you would like to replace, for example "NC_000". Separate different prefixes by semicolons.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="147"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="149"/>
         <source>Replace by</source>
         <translation>Replace by</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="148"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="150"/>
         <source>Input the prefix that should be set instead, for example "chr".</source>
         <translation>Input the prefix that should be set instead, for example "chr".</translation>
     </message>
@@ -4356,17 +4404,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RmdupBamPrompter</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="67"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="71"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="68"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="72"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="70"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="74"/>
         <source>Remove PCR duplicates of BAM files from %1 with SAMTools rmdup.</source>
         <translation>Remove PCR duplicates of BAM files from %1 with SAMTools rmdup.</translation>
     </message>
@@ -4374,102 +4422,102 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RmdupBamWorker</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="83"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="87"/>
         <source>Remove Duplicates in BAM Files</source>
         <translation>Remove Duplicates in BAM Files</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="84"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="88"/>
         <source>Remove PCR duplicates of BAM files using SAMTools rmdup.</source>
         <translation>Remove PCR duplicates of BAM files using SAMTools rmdup.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="88"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="92"/>
         <source>BAM File</source>
         <translation>BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="89"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="93"/>
         <source>Set of BAM files to rmdup</source>
         <translation>Set of BAM files to rmdup</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="90"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="94"/>
         <source>Cleaned BAM File</source>
         <translation>Cleaned BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="91"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="95"/>
         <source>Cleaned BAM file</source>
         <translation>Cleaned BAM file</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="104"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="108"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="105"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="109"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="109"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="113"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="110"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="114"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="112"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="116"/>
         <source>Output BAM name</source>
         <translation>Output BAM name</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="113"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="117"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .nodup.bam extention.</source>
         <translation>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .nodup.bam extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="115"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="119"/>
         <source>Remove for single-end reads</source>
         <translation>Remove for single-end reads</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="116"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="120"/>
         <source>Remove duplicate for single-end reads. By default, the command works for paired-end reads only (-s).</source>
         <translation>Remove duplicate for single-end reads. By default, the command works for paired-end reads only (-s).</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="118"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="122"/>
         <source>Treat as single-end</source>
         <translation>Treat as single-end</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="119"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="123"/>
         <source>Treat paired-end reads and single-end reads (-S).</source>
         <translation>Treat paired-end reads and single-end reads (-S).</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="135"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="139"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="133"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="137"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="134"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="138"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="177"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="181"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -4477,32 +4525,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SamtoolsRmdupTask</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="289"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="293"/>
         <source>Samtool rmdup for %1 </source>
         <translation>Samtool rmdup for %1 </translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="295"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="299"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="301"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="305"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="335"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="339"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="341"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="345"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="343"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="347"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -4510,45 +4558,45 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SamtoolsSortTask</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="264"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="268"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="270"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="274"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::SamtoolsViewFilterTask</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="368"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="371"/>
         <source>Samtool view (filter) for %1 </source>
         <translation>Samtool view (filter) for %1 </translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="374"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="377"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="380"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="383"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="417"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="420"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="423"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="426"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="425"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="428"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -4604,6 +4652,110 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::SequenceQualityTrimPrompter</name>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="52"/>
+        <source>unset</source>
+        <translation type="unfinished">unset</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="53"/>
+        <source>from <u>%1</u></source>
+        <translation type="unfinished">from <u>%1</u></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="55"/>
+        <source>Trim input sequence %1 from %2, using the quality threshold.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::SequenceQualityTrimWorker</name>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="73"/>
+        <source>There is no sequence object in the message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="81"/>
+        <source>An unexpected task type</source>
+        <translation type="unfinished">An unexpected task type</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="86"/>
+        <source>Sequence was filtered out by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="107"/>
+        <source>Sequence Quality Trimmer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="108"/>
+        <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
+        <translation type="unfinished">The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="114"/>
+        <source>Input Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="115"/>
+        <source>Set of sequences to trim by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="116"/>
+        <source>Output Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="117"/>
+        <source>Trimmed sequences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="132"/>
+        <source>Trimming quality threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Quality threshold</source>
+        <translation type="obsolete">Quality threshold</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="133"/>
+        <source>Quality threshold for trimming.</source>
+        <translation type="unfinished">Quality threshold for trimming.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="135"/>
+        <source>Min length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Min Length</source>
+        <translation type="obsolete">Min Length</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="136"/>
+        <source>Too short reads are discarded by the filter.</source>
+        <translation type="unfinished">Too short reads are discarded by the filter.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="138"/>
+        <source>Trim both ends</source>
+        <translation type="unfinished">Trim both ends</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="139"/>
+        <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
+        <translation type="unfinished">Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::SequenceSplitPromter</name>
     <message>
         <location filename="../src/library/SequenceSplitWorker.cpp" line="67"/>
@@ -4765,32 +4917,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SequencesToMSAWorker</name>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="119"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="115"/>
         <source>Input sequences</source>
         <translation>Input sequences</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="120"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="116"/>
         <source>Sequences to be joined into alignment.</source>
         <translation>Sequences to be joined into alignment.</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="123"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="119"/>
         <source>Result alignment</source>
         <translation>Result alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="124"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="120"/>
         <source>Alignment created from the given sequences.</source>
         <translation>Alignment created from the given sequences.</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="137"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="133"/>
         <source>Join Sequences into Alignment</source>
         <translation>Join Sequences into Alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="138"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="134"/>
         <source>Creates multiple sequence alignment from sequences.</source>
         <translation>Creates multiple sequence alignment from sequences.</translation>
     </message>
@@ -4798,17 +4950,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SortBamPrompter</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="66"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="70"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="67"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="71"/>
         <source> from <u>%1</u></source>
         <translation> from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="69"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="73"/>
         <source>Sort BAM file %1 with SAMTools sort.</source>
         <translation>Sort BAM file %1 with SAMTools sort.</translation>
     </message>
@@ -4816,92 +4968,92 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SortBamWorker</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="81"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="85"/>
         <source>Sort BAM Files</source>
         <translation>Sort BAM Files</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="82"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="86"/>
         <source>Sort BAM Files using SAMTools Sort.</source>
         <translation>Sort BAM Files using SAMTools Sort.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="86"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="90"/>
         <source>BAM File</source>
         <translation>BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="87"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="91"/>
         <source>Set of BAM files to sort</source>
         <translation>Set of BAM files to sort</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="88"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="92"/>
         <source>Sorted BAM File</source>
         <translation>Sorted BAM File</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="89"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="93"/>
         <source>Sorted BAM file</source>
         <translation>Sorted BAM file</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="102"/>
-        <source>Output directory</source>
-        <translation>Output directory</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="106"/>
+        <source>Output folder</source>
+        <translation>Output folder</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="103"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="107"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="107"/>
-        <source>Custom directory</source>
-        <translation>Custom directory</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="111"/>
+        <source>Custom folder</source>
+        <translation>Custom folder</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="108"/>
-        <source>Select the custom output directory.</source>
-        <translation>Select the custom output directory.</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="112"/>
+        <source>Select the custom output folder.</source>
+        <translation>Select the custom output folder.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="110"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="114"/>
         <source>Output BAM name</source>
         <translation>Output BAM name</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="111"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="115"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .sorted.bam extention.</source>
         <translation>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .sorted.bam extention.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="113"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="117"/>
         <source>Build index</source>
         <translation>Build index</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="114"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="118"/>
         <source>Build index for the sorted file with SAMTools index.</source>
         <translation>Build index for the sorted file with SAMTools index.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="129"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="133"/>
         <source>Custom</source>
         <translation>Custom</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="127"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="131"/>
         <source>Input file</source>
         <translation>Input file</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="128"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="132"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="171"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="175"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -5045,17 +5197,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::TextReader</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="139"/>
+        <location filename="../src/library/DocWorkers.cpp" line="140"/>
         <source>Can't load the object %1 from the database %2</source>
         <translation>Can't load the object %1 from the database %2</translation>
     </message>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="146"/>
+        <location filename="../src/library/DocWorkers.cpp" line="147"/>
         <source>Can't load file %1</source>
         <translation>Can't load file %1</translation>
     </message>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="157"/>
+        <location filename="../src/library/DocWorkers.cpp" line="158"/>
         <source>Can't load file %1. %2</source>
         <translation>Can't load file %1. %2</translation>
     </message>
@@ -5063,32 +5215,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::WriteAnnotationsPrompter</name>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="516"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="520"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="529"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="533"/>
         <source>default file</source>
         <translation>default file</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="549"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="554"/>
         <source>Save all annotations from <u>%1</u> to %2</source>
         <translation>Save all annotations from <u>%1</u> to %2</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="552"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="557"/>
         <source> in %1 format.</source>
         <translation> in %1 format.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="553"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="558"/>
         <source> in the </source>
         <translation> in the </translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="553"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="558"/>
         <source> database.</source>
         <translation> database.</translation>
     </message>
@@ -5096,78 +5248,78 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::WriteAnnotationsWorker</name>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="108"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="109"/>
         <source>Unrecognized formatId: '%1'</source>
         <translation>Unrecognized formatId: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="113"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="114"/>
         <source>Invalid shared DB URL</source>
         <translation>Invalid shared DB URL</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="115"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="116"/>
         <source>Invalid path in shared DB</source>
         <translation>Invalid path in shared DB</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="117"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="118"/>
         <source>Unrecognized data storage: '%1'</source>
         <translation>Unrecognized data storage: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="153"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="154"/>
         <source>Unspecified URL to write</source>
         <translation>Unspecified URL to write</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="172"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="173"/>
         <source>Unrecognized data storage</source>
         <translation>Unrecognized data storage</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="211"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="212"/>
         <source>Annotations name not specified. Default value used: '%1'</source>
         <translation>Annotations name not specified. Default value used: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="260"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="261"/>
         <source>Nothing to write</source>
         <translation>Nothing to write</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="379"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="380"/>
         <source>Input annotations</source>
         <translation>Input annotations</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="380"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="381"/>
         <source>Input annotations which will be written to output file</source>
         <translation>Input annotations which will be written to output file</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="416"/>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="443"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="420"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="447"/>
         <source>Merge annotation tables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="417"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="421"/>
         <source>If <i>true</i> all annotation tables from dataset will be merged into one. The value of <i>Annotation table name</i> parameter will be used as the name of result annotation table.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="429"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="433"/>
         <source>Annotation table name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="430"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="434"/>
         <source>The name for the result annotation table that contains merged annotation data from file or dataset.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="444"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="448"/>
         <source>If <i>true</i> all annotation tables from dataset will be merged into one annotation object. The value of <i>Annotation object name</i> parameter will be used as the name of result annotation object.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -5180,42 +5332,42 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation type="vanished">Name of the saved annotations. This option is only available for document formats that support saving of annotations names.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="450"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="454"/>
         <source>Annotation object name</source>
         <translation>Annotation object name</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="451"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="455"/>
         <source>Name of the saved annotation object.</source>
         <translation>Name of the saved annotation object.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="458"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="462"/>
         <source>CSV separator</source>
         <translation>CSV separator</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="459"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="463"/>
         <source>String which separates values in CSV files.</source>
         <translation>String which separates values in CSV files.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="465"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="469"/>
         <source>Write sequence names</source>
         <translation>Write sequence names</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="466"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="470"/>
         <source>Add names of sequences into CSV file.</source>
         <translation>Add names of sequences into CSV file.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="477"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="481"/>
         <source>Write Annotations</source>
         <translation>Write Annotations</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="478"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="482"/>
         <source>Writes all supplied annotations to file(s) in selected format.</source>
         <translation>Writes all supplied annotations to file(s) in selected format.</translation>
     </message>
@@ -5296,17 +5448,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::NameFilterLayout</name>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="370"/>
+        <location filename="../src/WorkflowSamples.cpp" line="362"/>
         <source>Type to filter by name...</source>
         <translation>Type to filter by name...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="372"/>
+        <location filename="../src/WorkflowSamples.cpp" line="364"/>
         <source>Name filter:</source>
         <translation>Name filter:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="379"/>
+        <location filename="../src/WorkflowSamples.cpp" line="371"/>
         <source>Esc</source>
         <translation>Esc</translation>
     </message>
@@ -5314,12 +5466,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::ProduceSchemaImageLinkTask</name>
     <message>
-        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="44"/>
+        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="46"/>
         <source>Save workflow image</source>
         <translation>Save workflow image</translation>
     </message>
     <message>
-        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="48"/>
+        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="50"/>
         <source>Cannot find workflow: %1</source>
         <translation>Cannot find workflow: %1</translation>
     </message>
@@ -5361,132 +5513,150 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::SaveWorkflowSceneTask</name>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="45"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="46"/>
         <source>Save workflow scene task</source>
         <translation>Save workflow scene task</translation>
     </message>
 </context>
 <context>
+    <name>U2::SequenceQualityTrimTask</name>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="42"/>
+        <source>Trim sequence by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="74"/>
+        <source>The sequence '%1' was filtered out by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="126"/>
+        <source>The trimming was skipped for the sequences without quality information.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::StartupDialog</name>
     <message>
         <location filename="../src/StartupDialog.cpp" line="65"/>
-        <source>You have no write access to the directory. Please choose another one.</source>
-        <translation>You have no write access to the directory. Please choose another one.</translation>
+        <source>You have no write access to the folder. Please choose another one.</source>
+        <translation>You have no write access to the folder. Please choose another one.</translation>
     </message>
 </context>
 <context>
     <name>U2::Workflow::CoreLib</name>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="126"/>
+        <location filename="../src/library/CoreLib.cpp" line="124"/>
         <source>Location</source>
         <translation>Location</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="126"/>
+        <location filename="../src/library/CoreLib.cpp" line="124"/>
         <source>Location for writing data</source>
         <translation>Location for writing data</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="153"/>
+        <location filename="../src/library/CoreLib.cpp" line="151"/>
         <source>Write FASTA</source>
         <translation>Write FASTA</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="153"/>
+        <location filename="../src/library/CoreLib.cpp" line="151"/>
         <source>Writes all supplied sequences to file(s) in FASTA format.</source>
         <translation>Writes all supplied sequences to file(s) in FASTA format.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="154"/>
-        <location filename="../src/library/CoreLib.cpp" line="252"/>
+        <location filename="../src/library/CoreLib.cpp" line="152"/>
+        <location filename="../src/library/CoreLib.cpp" line="250"/>
         <location filename="../src/library/GenericReadActor.cpp" line="100"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="154"/>
+        <location filename="../src/library/CoreLib.cpp" line="152"/>
         <source>A sequence along with FASTA header line.</source>
         <translation>A sequence along with FASTA header line.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="174"/>
+        <location filename="../src/library/CoreLib.cpp" line="172"/>
         <source>Read Plain Text</source>
         <translation>Read Plain Text</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="174"/>
-        <source>Reads text from local or remote files.</source>
-        <translation>Reads text from local or remote files.</translation>
+        <location filename="../src/library/CoreLib.cpp" line="172"/>
+        <source>Reads text from local or remote files. All text file formats supported by UGENE are allowed as input to this element.</source>
+        <translation>Reads text from local or remote files. All text file formats supported by UGENE are allowed as input to this element.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="175"/>
-        <location filename="../src/library/CoreLib.cpp" line="195"/>
+        <location filename="../src/library/CoreLib.cpp" line="173"/>
+        <location filename="../src/library/CoreLib.cpp" line="193"/>
         <source>Plain text</source>
         <translation>Plain text</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="178"/>
+        <location filename="../src/library/CoreLib.cpp" line="176"/>
         <source>Reads text from <u>%1</u>.</source>
         <translation>Reads text from <u>%1</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="194"/>
+        <location filename="../src/library/CoreLib.cpp" line="192"/>
         <source>Write Plain Text</source>
         <translation>Write Plain Text</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="194"/>
+        <location filename="../src/library/CoreLib.cpp" line="192"/>
         <source>Write strings to a file.</source>
         <translation>Write strings to a file.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="201"/>
+        <location filename="../src/library/CoreLib.cpp" line="199"/>
         <source>Save text from <u>%1</u> to <u>%2</u>.</source>
         <translation>Save text from <u>%1</u> to <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="428"/>
+        <location filename="../src/library/CoreLib.cpp" line="426"/>
         <source>Another worker with this name is already registered: %1</source>
         <translation>Another worker with this name is already registered: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="430"/>
+        <location filename="../src/library/CoreLib.cpp" line="428"/>
         <source>The actor '%1' has been already registered</source>
         <translation>The actor '%1' has been already registered</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="216"/>
+        <location filename="../src/library/CoreLib.cpp" line="214"/>
         <location filename="../src/library/GenericReadActor.cpp" line="160"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="229"/>
+        <location filename="../src/library/CoreLib.cpp" line="227"/>
         <source>Save all MSAs from <u>%1</u> to <u>%2</u>.</source>
         <translation>Save all MSAs from <u>%1</u> to <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="215"/>
+        <location filename="../src/library/CoreLib.cpp" line="213"/>
         <source>Write Alignment</source>
         <translation>Write Alignment</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="215"/>
+        <location filename="../src/library/CoreLib.cpp" line="213"/>
         <source>Writes all supplied alignments to file(s) in selected format.</source>
         <translation>Writes all supplied alignments to file(s) in selected format.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="251"/>
+        <location filename="../src/library/CoreLib.cpp" line="249"/>
         <source>Write Sequence</source>
         <translation>Write Sequence</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="251"/>
+        <location filename="../src/library/CoreLib.cpp" line="249"/>
         <source>Writes all supplied sequences to file(s) in selected format.</source>
         <translation>Writes all supplied sequences to file(s) in selected format.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="282"/>
+        <location filename="../src/library/CoreLib.cpp" line="280"/>
         <source>Save all sequences from <u>%1</u> to <u>%2</u>.</source>
         <translation>Save all sequences from <u>%1</u> to <u>%2</u>.</translation>
     </message>
@@ -5497,8 +5667,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="89"/>
-        <source>Reads sequences and annotations if any from local or remote files.</source>
-        <translation>Reads sequences and annotations if any from local or remote files.</translation>
+        <source>Reads sequences and annotations if any from local or remote files. All sequence file formats supported by UGENE (e.g. GenBank, FASTA) are allowed as input to this element.</source>
+        <translation>Reads sequences and annotations if any from local or remote files. All sequence file formats supported by UGENE (e.g. GenBank, FASTA) are allowed as input to this element.</translation>
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="101"/>
@@ -5517,8 +5687,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="149"/>
-        <source>Reads multiple sequence alignments (MSAs) from local or remote files.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</source>
-        <translation>Reads multiple sequence alignments (MSAs) from local or remote files.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</translation>
+        <source>Reads multiple sequence alignments (MSAs) from local or remote files. All MSA file formats supported by UGENE are allowed as input to this element.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</source>
+        <translation>Reads multiple sequence alignments (MSAs) from local or remote files. All MSA file formats supported by UGENE are allowed as input to this element.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</translation>
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="163"/>
@@ -5530,53 +5700,63 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <name>U2::Workflow::GalaxyConfigConfigurationDialogImpl</name>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="51"/>
-        <source>Set UGENE directory</source>
-        <translation>Set UGENE directory</translation>
+        <source>Set UGENE folder</source>
+        <translation>Set UGENE folder</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="58"/>
-        <source>Set Galaxy directory</source>
-        <translation>Set Galaxy directory</translation>
+        <source>Set Galaxy folder</source>
+        <translation>Set Galaxy folder</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="65"/>
-        <source>Set destination directory</source>
-        <translation>Set destination directory</translation>
+        <source>Set destination folder</source>
+        <translation>Set destination folder</translation>
     </message>
 </context>
 <context>
     <name>U2::Workflow::PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="127"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="39"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="40"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="118"/>
         <source>Input</source>
         <translation>Input</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="129"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="120"/>
         <source>Output</source>
         <translation>Output</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="246"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="230"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="237"/>
         <location filename="../src/PortAliasesConfigurationDialog.cpp" line="253"/>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="269"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="247"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="231"/>
         <source>There is a port with some aliased slots but without alias name:
 %1</source>
         <translation>There is a port with some aliased slots but without alias name:
 %1</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="254"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="238"/>
         <source>Slot aliases of one port must be different!</source>
         <translation>Slot aliases of one port must be different!</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="270"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="254"/>
         <source>Port aliases must be different! Rename one of ports:
 %1 or %2</source>
         <translation>Port aliases must be different! Rename one of ports:
@@ -5626,6 +5806,19 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
+    <name>U2::Workflow::SchemaAliasesConfigurationDialogImpl</name>
+    <message>
+        <location filename="../src/SchemaAliasesConfigurationDialogImpl.cpp" line="38"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/SchemaAliasesConfigurationDialogImpl.cpp" line="39"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+</context>
+<context>
     <name>U2::Workflow::SeqReadPrompter</name>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="104"/>
@@ -5685,17 +5878,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteDocPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="226"/>
+        <location filename="../src/library/DocActors.cpp" line="229"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="261"/>
+        <location filename="../src/library/DocActors.cpp" line="264"/>
         <source> in the </source>
         <translation> in the </translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="261"/>
+        <location filename="../src/library/DocActors.cpp" line="264"/>
         <source> database.</source>
         <translation> database.</translation>
     </message>
@@ -5703,12 +5896,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteFastaPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="200"/>
+        <location filename="../src/library/DocActors.cpp" line="203"/>
         <source>Writes sequence(s) in %1 format to <u>%2</u>.</source>
         <translation>Writes sequence(s) in %1 format to <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="204"/>
+        <location filename="../src/library/DocActors.cpp" line="207"/>
         <source>Writes sequence(s) from <u>%1</u> in %2 format to  <u>%3</u>.</source>
         <translation>Writes sequence(s) from <u>%1</u> in %2 format to  <u>%3</u>.</translation>
     </message>
@@ -5716,32 +5909,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteGenbankPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="158"/>
+        <location filename="../src/library/DocActors.cpp" line="161"/>
         <source> sequence from <u>%1</u></source>
         <translation> sequence from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="161"/>
+        <location filename="../src/library/DocActors.cpp" line="164"/>
         <source> set of annotations from <u>%1</u></source>
         <translation> set of annotations from <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="170"/>
+        <location filename="../src/library/DocActors.cpp" line="173"/>
         <source>Write sequence(s) in Genbank format to <u>%1</u>.</source>
         <translation>Write sequence(s) in Genbank format to <u>%1</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="173"/>
+        <location filename="../src/library/DocActors.cpp" line="176"/>
         <source>each %1 and %2</source>
         <translation>each %1 and %2</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="175"/>
+        <location filename="../src/library/DocActors.cpp" line="178"/>
         <source>each </source>
         <translation>each</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="178"/>
+        <location filename="../src/library/DocActors.cpp" line="181"/>
         <source>Write %1 in Genbank format, to <u>%2</u>.</source>
         <translation>Write %1 in Genbank format, to <u>%2</u>.</translation>
     </message>
@@ -5749,67 +5942,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerPlugin</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="84"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="75"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="84"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="75"/>
         <source>Workflow Designer allows to create complex computational workflows.</source>
         <translation>Workflow Designer allows to create complex computational workflows.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="157"/>
         <source>Runs the specified task.</source>
         <translation>Runs the specified task.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="158"/>
         <source>Runs the specified task. A path to a user-defined UGENE workflow be used as a task name.</source>
         <translation>Runs the specified task. A path to a user-defined UGENE workflow be used as a task name.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="160"/>
         <source><task_name> [<task_parameter>=value ...]</source>
         <translation><task_name> [<task_parameter>=value ...]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
         <source>Prints the content of the specified slot.</source>
         <translation>Prints the content of the specified slot.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="176"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
         <source>Prints the content of the specified slot. The incoming/outcoming content of specified slot is printed to the standart output.</source>
         <translation>Prints the content of the specified slot. The incoming/outcoming content of specified slot is printed to the standart output.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="178"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
         <source><actor_name>.<port_name>.<slot_name></source>
         <translation><actor_name>.<port_name>.<slot_name></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="183"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="174"/>
         <source>Creates new Galaxy tool config.</source>
         <translation>Creates new Galaxy tool config.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="184"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
         <source>Creates new Galaxy tool config from existing workflow. Paths to UGENE and Galaxy can be set</source>
         <translation>Creates new Galaxy tool config from existing workflow. Paths to UGENE and Galaxy can be set</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="186"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="177"/>
         <source><uwl-file> [--ugene-path=value] [--galaxy-path=value]</source>
         <translation><uwl-file> [--ugene-path=value] [--galaxy-path=value]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="197"/>
         <source>Close Designer</source>
         <translation>Close Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
         <source>Close Designer canceled</source>
         <translation>Close Designer canceled</translation>
     </message>
@@ -5817,7 +6010,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerService</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="224"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
@@ -5826,92 +6019,96 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation type="vanished">New workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="264"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="255"/>
         <source>Workflow Designer...</source>
         <translation>Workflow Designer...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="274"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="265"/>
         <source>New workflow...</source>
         <translation>New workflow...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="305"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="296"/>
         <source>Can not open Workflow Designer. Please, try to reload UGENE.</source>
         <translation>Can not open Workflow Designer. Please, try to reload UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="338"/>
         <source>Reads quality control and alignment</source>
-        <translation>Reads quality control and alignment</translation>
+        <translation type="vanished">Reads quality control and alignment</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="340"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="329"/>
         <source>Reads quality control...</source>
         <translation>Reads quality control...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="342"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="331"/>
+        <source>Filter short scaffolds...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="333"/>
         <source>Raw DNA-Seq data processing</source>
         <translation>Raw DNA-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="344"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="335"/>
         <source>Variant calling</source>
         <translation>Variant calling</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="346"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="337"/>
         <source>Variant calling and effects prediction</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="348"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="339"/>
         <source>Annotate variants and predict effects</source>
         <translation>Annotate variants and predict effects</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="350"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="341"/>
         <source>Raw RNA-Seq data processing</source>
         <translation>Raw RNA-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="352"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="343"/>
         <source>RNA-Seq data analysis</source>
         <translation>RNA-Seq data analysis</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="354"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="345"/>
         <source>Extract transcript sequences</source>
         <translation>Extract transcript sequences</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="356"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="347"/>
         <source>Raw ChIP-Seq data processing</source>
         <translation>Raw ChIP-Seq data processing</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="349"/>
         <source>ChIP-Seq data analysis</source>
         <translation>ChIP-Seq data analysis</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="360"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="351"/>
         <source>ChIP-Seq coverage</source>
         <translation>ChIP-Seq coverage</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="362"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="353"/>
         <source>Extract coverage from assemblies</source>
         <translation>Extract coverage from assemblies</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="364"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="355"/>
         <source>Extract consensus from assemblies</source>
         <translation>Extract consensus from assemblies</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="367"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
         <source>Remote NCBI BLAST</source>
         <translation>Remote NCBI BLAST</translation>
     </message>
@@ -5919,19 +6116,19 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDocFormat</name>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="83"/>
-        <location filename="../src/WorkflowDocument.cpp" line="91"/>
-        <location filename="../src/WorkflowDocument.cpp" line="116"/>
+        <location filename="../src/WorkflowDocument.cpp" line="82"/>
+        <location filename="../src/WorkflowDocument.cpp" line="90"/>
+        <location filename="../src/WorkflowDocument.cpp" line="115"/>
         <source>Workflow</source>
         <translation>Workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="85"/>
+        <location filename="../src/WorkflowDocument.cpp" line="84"/>
         <source>WorkflowDoc is a format used for creating/editing/storing/retrievingworkflow with the text file</source>
         <translation>WorkflowDoc is a format used for creating/editing/storing/retrievingworkflow with the text file</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="108"/>
+        <location filename="../src/WorkflowDocument.cpp" line="107"/>
         <source>Invalid header. %1 expected</source>
         <translation>Invalid header. %1 expected</translation>
     </message>
@@ -5939,68 +6136,68 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowEditor</name>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="208"/>
+        <location filename="../src/ActorCfgModel.cpp" line="210"/>
         <source>Name</source>
         <translation>Name</translation>
     </message>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="210"/>
+        <location filename="../src/ActorCfgModel.cpp" line="212"/>
         <source>Value</source>
         <translation>Value</translation>
     </message>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="212"/>
+        <location filename="../src/ActorCfgModel.cpp" line="214"/>
         <source>Script</source>
         <translation>Script</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="219"/>
-        <location filename="../src/WorkflowEditor.cpp" line="358"/>
+        <location filename="../src/WorkflowEditor.cpp" line="205"/>
+        <location filename="../src/WorkflowEditor.cpp" line="344"/>
         <source>Parameters</source>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="285"/>
+        <location filename="../src/WorkflowEditor.cpp" line="271"/>
         <source>Element name:</source>
         <translation>Element name:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="288"/>
+        <location filename="../src/WorkflowEditor.cpp" line="274"/>
         <source>To configure the parameters of the element go to "Parameters" area below.</source>
         <translation>To configure the parameters of the element go to "Parameters" area below.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="407"/>
+        <location filename="../src/WorkflowEditor.cpp" line="393"/>
         <source><b>%1 "%2"</b> of task "%3":<br>%4<br><br>%5</source>
         <translation><b>%1 "%2"</b> of task "%3":<br>%4<br><br>%5</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="408"/>
+        <location filename="../src/WorkflowEditor.cpp" line="394"/>
         <source>Output port</source>
         <translation>Output port</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="408"/>
+        <location filename="../src/WorkflowEditor.cpp" line="394"/>
         <source>Input port</source>
         <translation>Input port</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="412"/>
+        <location filename="../src/WorkflowEditor.cpp" line="398"/>
         <source>You can observe data slots of the port and configure connections if any in the "Parameters" widget suited below.</source>
         <translation>You can observe data slots of the port and configure connections if any in the "Parameters" widget suited below.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="436"/>
+        <location filename="../src/WorkflowEditor.cpp" line="422"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="438"/>
+        <location filename="../src/WorkflowEditor.cpp" line="424"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="446"/>
+        <location filename="../src/WorkflowEditor.cpp" line="432"/>
         <source>Select an element to inspect.</source>
         <translation>Select an element to inspect.</translation>
     </message>
@@ -6008,17 +6205,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowInvestigationWidgetsController</name>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="122"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="110"/>
         <source>Messages from '</source>
         <translation>Messages from '</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="123"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="111"/>
         <source>' to '</source>
         <translation>' to '</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="123"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="111"/>
         <source>'</source>
         <translation>'</translation>
     </message>
@@ -6026,7 +6223,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/WorkflowMetaDialog.cpp" line="93"/>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="47"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="48"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="95"/>
         <source>Save workflow to file</source>
         <translation>Save workflow to file</translation>
     </message>
@@ -6034,27 +6241,27 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowPaletteElements</name>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="560"/>
+        <location filename="../src/WorkflowPalette.cpp" line="571"/>
         <source>Can't remove element %1</source>
         <translation>Can't remove element %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="582"/>
+        <location filename="../src/WorkflowPalette.cpp" line="593"/>
         <source>Expand all</source>
         <translation>Expand all</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="583"/>
+        <location filename="../src/WorkflowPalette.cpp" line="594"/>
         <source>Collapse all</source>
         <translation>Collapse all</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="586"/>
+        <location filename="../src/WorkflowPalette.cpp" line="597"/>
         <source>Edit</source>
         <translation>Edit</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="587"/>
+        <location filename="../src/WorkflowPalette.cpp" line="598"/>
         <source>Remove</source>
         <translation>Remove</translation>
     </message>
@@ -6073,37 +6280,37 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowRunFromCMDLineBase</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="49"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="50"/>
         <source>Workflow run from cmdline</source>
         <translation>Workflow run from cmdline</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="71"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="77"/>
         <source>no task to run</source>
         <translation>no task to run</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="88"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="94"/>
         <source>Cannot find workflow: %1</source>
         <translation>Cannot find workflow: %1</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="117"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
         <source>alias '%1' not set in workflow</source>
         <translation>alias '%1' not set in workflow</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="129"/>
         <source>actor parameter '%1' not found</source>
         <translation>actor parameter '%1' not found</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="130"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="136"/>
         <source>cannot parse value from '%1'</source>
         <translation>cannot parse value from '%1'</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="138"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="144"/>
         <source>Incorrect value for '%1', null or default value passed to workflow</source>
         <translation>Incorrect value for '%1', null or default value passed to workflow</translation>
     </message>
@@ -6111,22 +6318,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowScene</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2536"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2547"/>
         <source>Open document(s)</source>
         <translation>Open document(s)</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2707"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2707"/>
         <source>Unable to open specified documents. Watch log for details.</source>
         <translation>Unable to open specified documents. Watch log for details.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2778"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2790"/>
         <source>Drop an element from the palette here</source>
         <translation>Drop an element from the palette here</translation>
     </message>
@@ -6170,7 +6377,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="927"/>
+        <location filename="../src/WorkflowViewController.cpp" line="928"/>
         <source>UGENE workflow element</source>
         <translation type="unfinished">UGENE workflow element</translation>
     </message>
@@ -6178,372 +6385,372 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowView</name>
     <message>
-        <location filename="../src/SceneSerializer.cpp" line="120"/>
+        <location filename="../src/SceneSerializer.cpp" line="122"/>
         <source>Invalid content: duplicate process %1</source>
         <translation>Invalid content: duplicate process %1</translation>
     </message>
     <message>
-        <location filename="../src/SceneSerializer.cpp" line="126"/>
+        <location filename="../src/SceneSerializer.cpp" line="128"/>
         <source>Invalid content: unknown process type %1</source>
         <translation>Invalid content: unknown process type %1</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="82"/>
-        <location filename="../src/WorkflowViewController.cpp" line="781"/>
+        <location filename="../src/WorkflowViewController.cpp" line="782"/>
         <source>Minimal</source>
         <translation>Minimal</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="83"/>
-        <location filename="../src/WorkflowViewController.cpp" line="787"/>
+        <location filename="../src/WorkflowViewController.cpp" line="788"/>
         <source>Extended</source>
         <translation>Extended</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="325"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2333"/>
+        <location filename="../src/WorkflowViewController.cpp" line="326"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2344"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="394"/>
+        <location filename="../src/WorkflowViewController.cpp" line="395"/>
         <source>Elements</source>
         <translation>Elements</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="397"/>
+        <location filename="../src/WorkflowViewController.cpp" line="398"/>
         <source>Samples</source>
         <translation>Samples</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="413"/>
-        <location filename="../src/WorkflowViewController.cpp" line="549"/>
+        <location filename="../src/WorkflowViewController.cpp" line="414"/>
+        <location filename="../src/WorkflowViewController.cpp" line="550"/>
         <source>Error list</source>
         <translation>Error list</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="441"/>
-        <location filename="../src/WorkflowViewController.cpp" line="443"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2256"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2258"/>
+        <location filename="../src/WorkflowViewController.cpp" line="442"/>
+        <location filename="../src/WorkflowViewController.cpp" line="444"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2267"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2269"/>
         <source>Warning!</source>
         <translation>Warning!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="447"/>
         <source>Undefined workflow format for %1</source>
         <translation>Undefined workflow format for %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="447"/>
         <source>file</source>
         <translation>file</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="611"/>
+        <location filename="../src/WorkflowViewController.cpp" line="612"/>
         <source>&Run workflow</source>
         <translation>&Run workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="618"/>
+        <location filename="../src/WorkflowViewController.cpp" line="619"/>
         <source>S&top workflow</source>
         <translation>S&top workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="625"/>
+        <location filename="../src/WorkflowViewController.cpp" line="626"/>
         <source>&Validate workflow</source>
         <translation>&Validate workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="631"/>
+        <location filename="../src/WorkflowViewController.cpp" line="632"/>
         <source>&Estimate workflow</source>
         <translation>&Estimate workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="637"/>
+        <location filename="../src/WorkflowViewController.cpp" line="638"/>
         <source>&Pause workflow</source>
         <translation>&Pause workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="645"/>
+        <location filename="../src/WorkflowViewController.cpp" line="646"/>
         <source>&Next step</source>
         <translation>&Next step</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="655"/>
+        <location filename="../src/WorkflowViewController.cpp" line="656"/>
         <source>Process one &message</source>
         <translation>Process one &message</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="665"/>
+        <location filename="../src/WorkflowViewController.cpp" line="666"/>
         <source>&New workflow...</source>
         <translation>&New workflow...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="671"/>
+        <location filename="../src/WorkflowViewController.cpp" line="672"/>
         <source>&Save workflow</source>
         <translation>&Save workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="678"/>
+        <location filename="../src/WorkflowViewController.cpp" line="679"/>
         <source>&Save workflow as...</source>
         <translation>&Save workflow as...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="683"/>
+        <location filename="../src/WorkflowViewController.cpp" line="684"/>
         <source>Show wizard</source>
         <translation>Show wizard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="701"/>
+        <location filename="../src/WorkflowViewController.cpp" line="702"/>
         <source>&Load workflow</source>
         <translation>&Load workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="712"/>
+        <location filename="../src/WorkflowViewController.cpp" line="713"/>
         <source>Delete</source>
         <translation>Delete</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="737"/>
+        <location filename="../src/WorkflowViewController.cpp" line="738"/>
         <source>Set parameter aliases...</source>
         <translation>Set parameter aliases...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="742"/>
+        <location filename="../src/WorkflowViewController.cpp" line="743"/>
         <source>Set port and slot aliases...</source>
         <translation>Set port and slot aliases...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="815"/>
+        <location filename="../src/WorkflowViewController.cpp" line="816"/>
         <source>Create element with script...</source>
         <translation>Create element with script...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="820"/>
+        <location filename="../src/WorkflowViewController.cpp" line="821"/>
         <source>Edit script of the element...</source>
         <translation>Edit script of the element...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="826"/>
+        <location filename="../src/WorkflowViewController.cpp" line="827"/>
         <source>Create element with command line tool...</source>
         <translation>Create element with command line tool...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="837"/>
+        <location filename="../src/WorkflowViewController.cpp" line="838"/>
         <source>Add element with command line tool...</source>
         <translation>Add element with command line tool...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="932"/>
-        <location filename="../src/WorkflowViewController.cpp" line="957"/>
+        <location filename="../src/WorkflowViewController.cpp" line="933"/>
+        <location filename="../src/WorkflowViewController.cpp" line="958"/>
         <source>Can't load element.</source>
         <translation>Can't load element.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1314"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1375"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1315"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1376"/>
         <source>Element style</source>
         <translation>Element style</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1368"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1369"/>
         <source>Element properties</source>
         <translation>Element properties</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2270"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2281"/>
         <source>New workflow</source>
         <translation type="unfinished">New workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="755"/>
+        <location filename="../src/WorkflowViewController.cpp" line="756"/>
         <source>Select all elements</source>
         <translation>Select all elements</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="707"/>
+        <location filename="../src/WorkflowViewController.cpp" line="708"/>
         <source>&Export workflow as image</source>
         <translation>&Export workflow as image</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="716"/>
+        <location filename="../src/WorkflowViewController.cpp" line="717"/>
         <source>Dashboards manager</source>
         <translation>Dashboards manager</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="750"/>
+        <location filename="../src/WorkflowViewController.cpp" line="751"/>
         <source>Create Galaxy tool config...</source>
         <translation>Create Galaxy tool config...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="758"/>
+        <location filename="../src/WorkflowViewController.cpp" line="759"/>
         <source>&Copy</source>
         <translation>&Copy</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="766"/>
+        <location filename="../src/WorkflowViewController.cpp" line="767"/>
         <source>Cu&t</source>
         <translation>Cu&t</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="773"/>
+        <location filename="../src/WorkflowViewController.cpp" line="774"/>
         <source>&Paste</source>
         <translation>&Paste</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="795"/>
+        <location filename="../src/WorkflowViewController.cpp" line="796"/>
         <source>Hide scripting options</source>
         <translation>Hide scripting options</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="802"/>
+        <location filename="../src/WorkflowViewController.cpp" line="803"/>
         <source>Show scripting options</source>
         <translation>Show scripting options</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="810"/>
+        <location filename="../src/WorkflowViewController.cpp" line="811"/>
         <source>Unlock Scene</source>
         <translation>Unlock Scene</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1320"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1321"/>
         <source>Scripting mode</source>
         <translation>Scripting mode</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="928"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1281"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1385"/>
+        <location filename="../src/WorkflowViewController.cpp" line="929"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1282"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1386"/>
         <source>Add element</source>
         <translation>Add element</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="746"/>
+        <location filename="../src/WorkflowViewController.cpp" line="747"/>
         <source>Import workflow to element...</source>
         <translation>Import workflow to element...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="831"/>
+        <location filename="../src/WorkflowViewController.cpp" line="832"/>
         <source>Edit configuration...</source>
         <translation>Edit configuration...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="997"/>
+        <location filename="../src/WorkflowViewController.cpp" line="998"/>
         <source>Can't remove element %1</source>
         <translation>Can't remove element %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1420"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1421"/>
         <source>Empty workflow!</source>
         <translation>Empty workflow!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1420"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1421"/>
         <source>Nothing to run: empty workflow</source>
         <translation>Nothing to run: empty workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1445"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1446"/>
         <source>Workflow cannot be executed</source>
         <translation>Workflow cannot be executed</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1447"/>
         <source>Please fix issues listed in the error list (located under workflow).</source>
         <translation>Please fix issues listed in the error list (located under workflow).</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1449"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
         <source>Workflow is valid.
 </source>
         <translation>Workflow is valid.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1452"/>
         <source>Well done!</source>
         <translation>Well done!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1453"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1454"/>
         <source>There are non-critical warnings.</source>
         <translation>There are non-critical warnings.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1455"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1456"/>
         <source>Workflow is valid</source>
         <translation>Workflow is valid</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1697"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1730"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1698"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1731"/>
         <source>Bad input!</source>
         <translation>Bad input!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1697"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1698"/>
         <source>Aliases for workflow parameters should be different!</source>
         <translation>Aliases for workflow parameters should be different!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1800"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1801"/>
         <source>The workflow contains a wizard. Sorry, but current version of UGENE doesn't support of wizards in the includes.</source>
         <translation>The workflow contains a wizard. Sorry, but current version of UGENE doesn't support of wizards in the includes.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1802"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1830"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1803"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1831"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1730"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1731"/>
         <source>Workflow does not contain any parameter aliases</source>
         <translation>Workflow does not contain any parameter aliases</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1744"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1745"/>
         <source>Internal error!</source>
         <translation>Internal error!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1744"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1745"/>
         <source>Can not create Galaxy config</source>
         <translation>Can not create Galaxy config</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1846"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1850"/>
         <source>Drag the palette element to the scene or just click on the scene to add the element.</source>
         <translation>Drag the palette element to the scene or just click on the scene to add the element.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2136"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2147"/>
         <source>File is not found: %1</source>
         <translation>File is not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2174"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2185"/>
         <source>Show dashboard</source>
         <translation>Show dashboard</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2183"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2194"/>
         <source>Show workflow</source>
         <translation>Show workflow</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2229"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2232"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2240"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2243"/>
         <source>Open workflow file</source>
         <translation>Open workflow file</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2302"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2313"/>
         <source>Workflow Designer - %1</source>
         <translation>Workflow Designer - %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2334"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2345"/>
         <source>The workflow has been modified.
 Do you want to save changes?</source>
         <translation>The workflow has been modified.
@@ -6553,12 +6760,12 @@ Do you want to save changes?</translation>
 <context>
     <name>U2::WorkflowViewFactory</name>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="161"/>
+        <location filename="../src/WorkflowDocument.cpp" line="160"/>
         <source>Open multiple views</source>
         <translation>Open multiple views</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.h" line="86"/>
+        <location filename="../src/WorkflowDocument.h" line="85"/>
         <source>Workflow Designer</source>
         <translation>Workflow Designer</translation>
     </message>
@@ -6586,12 +6793,12 @@ Do you want to save changes?</translation>
         <translation>Parameters</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditorWidget.ui" line="273"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="276"/>
         <source>Input data</source>
         <translation>Input data</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditorWidget.ui" line="320"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="323"/>
         <source>Output data</source>
         <translation>Output data</translation>
     </message>
@@ -6657,24 +6864,45 @@ Do you want to save changes?</translation>
         <translation>Enable debugger</translation>
     </message>
     <message>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
+        <source>Directories</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="124"/>
         <source>Use directory for output files</source>
-        <translation>Use directory for output files</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="145"/>
         <source>Directory for custom elements with scripts</source>
-        <translation>Directory for custom elements with scripts</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="166"/>
         <source>Directory for custom elements with command line tools</source>
-        <translation>Directory for custom elements with command line tools</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="187"/>
         <source>Directory for included schema elements</source>
-        <translation>Directory for included schema elements</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Use folder for output files</source>
+        <translation type="vanished">Use folder for output files</translation>
+    </message>
+    <message>
+        <source>Folder for custom elements with scripts</source>
+        <translation type="vanished">Folder for custom elements with scripts</translation>
+    </message>
+    <message>
+        <source>Folder for custom elements with command line tools</source>
+        <translation type="vanished">Folder for custom elements with command line tools</translation>
+    </message>
+    <message>
+        <source>Folder for included schema elements</source>
+        <translation type="vanished">Folder for included schema elements</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="33"/>
@@ -6697,9 +6925,8 @@ Do you want to save changes?</translation>
         <translation>Track running progress</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
-        <source>Directories</source>
-        <translation>Directories</translation>
+        <source>Folders</source>
+        <translation type="vanished">Folders</translation>
     </message>
 </context>
 <context>
@@ -6712,7 +6939,7 @@ Do you want to save changes?</translation>
 <context>
     <name>WriteDocPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="188"/>
+        <location filename="../src/library/DocActors.cpp" line="191"/>
         <source>default file</source>
         <translation>default file</translation>
     </message>
diff --git a/src/plugins/workflow_designer/transl/russian.ts b/src/plugins/workflow_designer/transl/russian.ts
index 12233fa..d36adc3 100644
--- a/src/plugins/workflow_designer/transl/russian.ts
+++ b/src/plugins/workflow_designer/transl/russian.ts
@@ -19,7 +19,7 @@
     <message>
         <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="14"/>
         <source>Create Element with Command Line Tool</source>
-        <translation>Создать элемент при помощи инструмента командной строки</translation>
+        <translation>Создать элемент при помощи командной строки</translation>
     </message>
     <message>
         <location filename="../src/library/ExternalProcessWorkerDialog.ui" line="49"/>
@@ -142,7 +142,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="14"/>
         <source>Create Element with Script</source>
-        <translation>Создать элемент используя скрипт</translation>
+        <translation>Создать элемент при помощи скрипта</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="22"/>
@@ -182,12 +182,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="65"/>
         <source>Add input slot</source>
-        <translation>Добавить входной слот</translation>
+        <translation>Добавить слот</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="72"/>
         <source>Delete input slot</source>
-        <translation>Удалить входной слот</translation>
+        <translation>Удалить слот</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="79"/>
@@ -197,12 +197,12 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="86"/>
         <source>Add output slot</source>
-        <translation>Добавить выходной слот</translation>
+        <translation>Добавить слот</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="93"/>
         <source>Delete output slot</source>
-        <translation>Удалить выходной слот</translation>
+        <translation>Удалить слот</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="110"/>
@@ -227,7 +227,11 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="164"/>
         <source>Error occured while saving new actor. Can't write to current directory. Choose another directory for store user's elements</source>
-        <translation>Произошла ошибка во время сохранения нового актера. Невозможно записать в текущем каталоге. Выберите другой каталог</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Error occured while saving new actor. Can't write to current folder. Choose another folder for store user's elements</source>
+        <translation type="vanished">Произошла ошибка во время сохранения нового актера. Невозможно записать в текущей папке. Выберите другую папку</translation>
     </message>
     <message>
         <location filename="../src/CreateScriptBlockDialog.ui" line="182"/>
@@ -290,17 +294,29 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="80"/>
         <source>UGENE directory</source>
-        <translation>Каталог UGENE</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="93"/>
         <source>Destination directory</source>
-        <translation>Расположение каталога</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="106"/>
         <source>Galaxy directory</source>
-        <translation>Каталог Galaxy</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>UGENE folder</source>
+        <translation type="vanished">Папка UGENE</translation>
+    </message>
+    <message>
+        <source>Destination folder</source>
+        <translation type="vanished">Расположение папки</translation>
+    </message>
+    <message>
+        <source>Galaxy folder</source>
+        <translation type="vanished">Папка Galaxy</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialog.ui" line="119"/>
@@ -332,42 +348,42 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="23"/>
         <source>Configure Port and Slot Aliases</source>
         <translation> Конфигурация интерфейса командной строки для портов и слотов</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="37"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="43"/>
         <source>Workflow ports</source>
         <translation>Порты схемы</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="72"/>
-        <source>Available slot</source>
-        <translation>Доступный слот</translation>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="84"/>
+        <source>Slot</source>
+        <translation>Слот</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="77"/>
-        <source>Slot alias</source>
-        <translation>Алиас слота</translation>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="89"/>
+        <source>Alias</source>
+        <translation>Алиас</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="86"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="98"/>
         <source>Port alias</source>
         <translation>Алиас порта</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="95"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="107"/>
         <source>Port type:</source>
         <translation>Тип порта:</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="109"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="121"/>
         <source>Port alias:</source>
         <translation>Алиас порта:</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.ui" line="119"/>
+        <location filename="../src/PortAliasesConfigurationDialog.ui" line="131"/>
         <source>Port description:</source>
         <translation>Описание порта:</translation>
     </message>
@@ -437,27 +453,27 @@ p, li { white-space: pre-wrap; }
         <translation>Ошибка с объектом типа аннотация</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="73"/>
+        <location filename="../src/library/FindWorker.cpp" line="74"/>
         <source>Pattern(s)</source>
         <translation>Паттерн(ы)</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="73"/>
+        <location filename="../src/library/FindWorker.cpp" line="74"/>
         <source>Semicolon-separated list of patterns to search for.</source>
         <translation>Список паттернов для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="75"/>
+        <location filename="../src/library/FindWorker.cpp" line="76"/>
         <source>Pattern file</source>
         <translation>Файл с паттерном</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="75"/>
+        <location filename="../src/library/FindWorker.cpp" line="76"/>
         <source>Load pattern from file in any sequence format or in newline-delimited format.</source>
         <translation>Загружает паттерн из файла в формате последовательности или в формате строк с разделителями.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="85"/>
+        <location filename="../src/library/FindWorker.cpp" line="86"/>
         <source>Patterns are not set. Set the '%1' or '%2' parameter or bind the input text slot</source>
         <translation>Паттерн(ы) не выбраны. Установите '%1' или '%2' параметр parameter или свяжите со входным слотом типа текст</translation>
     </message>
@@ -482,82 +498,82 @@ p, li { white-space: pre-wrap; }
         <translation>Формат %1 не поддерживает аннотации</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="141"/>
+        <location filename="../src/WorkflowViewController.cpp" line="142"/>
         <source>Breakpoints</source>
         <translation>Точки остановки</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="199"/>
+        <location filename="../src/WorkflowViewController.cpp" line="200"/>
         <source>Element style</source>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="147"/>
+        <location filename="../src/WorkflowViewController.cpp" line="148"/>
         <source>%</source>
         <translation>%</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="136"/>
+        <location filename="../src/WorkflowViewController.cpp" line="137"/>
         <source>You opened obsolete workflow in XML format. It is strongly recommended to clear working space and create workflow from scratch.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="139"/>
+        <location filename="../src/WorkflowViewController.cpp" line="140"/>
         <source>Sorry! This workflow is obsolete and cannot be opened.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="210"/>
+        <location filename="../src/WorkflowViewController.cpp" line="211"/>
         <source>Scripting mode</source>
         <translation>Скриптинг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="908"/>
-        <source>Can not create the directory: </source>
-        <translation>Невозможно создать директорию:</translation>
+        <location filename="../src/WorkflowViewController.cpp" line="909"/>
+        <source>Can not create the folder: </source>
+        <translation>Невозможно создать папку:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="914"/>
+        <location filename="../src/WorkflowViewController.cpp" line="915"/>
         <source>The file '%1' already exists</source>
         <translation>Файл '%1' уже существует</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="919"/>
+        <location filename="../src/WorkflowViewController.cpp" line="920"/>
         <source>Can not copy the file here: </source>
         <translation>Невозможно скопировать файл:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1478"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1479"/>
         <source>Run workflow</source>
         <translation>Запустить схему</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="229"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="230"/>
         <source>Extract Consensus from Assembly</source>
         <translation>Извлечение консенсуса из сборки</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="230"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="231"/>
         <source>Extract the consensus sequence from the incoming assembly.</source>
         <translation>Извлечь консенсусную последовательность из входной сборки.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="248"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="249"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="249"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="250"/>
         <source>The algorithm of consensus extracting.</source>
         <translation>Алгоритм извлечения консенсусной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="251"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="252"/>
         <source>Keep gaps</source>
         <translation>Оставить пробелы</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="252"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="253"/>
         <source>Set this parameter if the result consensus must keep the gaps.</source>
         <translation>Установить этот параметр если консенсус должен содержать пробелы.</translation>
     </message>
@@ -567,17 +583,17 @@ p, li { white-space: pre-wrap; }
         <translation>Messages in requested queue include info of the '%1' data type that is currently unsupported for view. No intermediate data will be displayed</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="49"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="50"/>
         <source>coverage</source>
         <translation>покрытие</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="50"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="51"/>
         <source>bases count</source>
         <translation>число оснований</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="265"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="266"/>
         <source>Save annotations</source>
         <translation>Сохранить аннотации</translation>
     </message>
@@ -585,12 +601,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>RemoteDBFetcherWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="274"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="275"/>
         <source>List of IDs</source>
         <translation>Список идентификаторов</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="275"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="276"/>
         <source>File with IDs</source>
         <translation>Файл с идентификаторами</translation>
     </message>
@@ -598,42 +614,50 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>SchemaAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="17"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="23"/>
         <source>Configure Parameter Aliases</source>
         <translation>Конфигурация алиасов параметров</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="34"/>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="40"/>
         <source>Workflow elements</source>
         <translation>Элементы</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="69"/>
-        <source>Schema parameter</source>
-        <translation>Параметр схемы</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="84"/>
+        <source>Parameter</source>
+        <translation>Параметр</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="74"/>
-        <source>Parameter alias</source>
-        <translation>Алиас параметра</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="89"/>
+        <source>Alias</source>
+        <translation>Алиас</translation>
     </message>
     <message>
-        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="79"/>
-        <source>Help message</source>
-        <translation>Вспомогательное сообщение</translation>
+        <location filename="../src/SchemaAliasesConfigurationDialog.ui" line="94"/>
+        <source>Description</source>
+        <translation>Описание</translation>
     </message>
 </context>
 <context>
     <name>StartupDialog</name>
     <message>
+        <source>Choose Output Folder</source>
+        <translation type="vanished">Выбор папки для сохранения выходных данных</translation>
+    </message>
+    <message>
+        <source>Output Folder</source>
+        <translation type="vanished">Выходная папка</translation>
+    </message>
+    <message>
         <location filename="../src/StartupDialog.ui" line="14"/>
         <source>Choose Output Directory</source>
-        <translation>Выбор директории для сохранения выходных данных</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/StartupDialog.ui" line="20"/>
         <source>Output Directory</source>
-        <translation>Выходная директория</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/StartupDialog.ui" line="33"/>
@@ -647,7 +671,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::ActorCfgModel</name>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="308"/>
+        <location filename="../src/ActorCfgModel.cpp" line="310"/>
         <source>N/A</source>
         <translation>N/A</translation>
     </message>
@@ -655,47 +679,47 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::BreakpointManagerView</name>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="139"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="140"/>
         <source>&Break at element...</source>
         <translation>&Точка остановки на элементе...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="146"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="147"/>
         <source>Delete &all breakpoints</source>
         <translation>Удалить &все точки остановки</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="153"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="154"/>
         <source>&Delete</source>
         <translation>&Удалить</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="160"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="161"/>
         <source>Delete the selected breakpoints</source>
         <translation>Удалить выделенные точки остановки</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="162"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="163"/>
         <source>&Enable or disable all breakpoints</source>
         <translation>&Включить или выключить все точки останвоки</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="168"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="169"/>
         <source>H&ighlight selected item</source>
         <translation>&Подсветить выделенный элемент</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="174"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="175"/>
         <source>&Hit Count...</source>
         <translation>&Число попаданий...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="177"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="178"/>
         <source>Edit &labels...</source>
         <translation>Редактировать &название...</translation>
     </message>
     <message>
-        <location filename="../src/BreakpointManagerView.cpp" line="180"/>
+        <location filename="../src/BreakpointManagerView.cpp" line="181"/>
         <source>&Condition...</source>
         <translation>&Условие...</translation>
     </message>
@@ -762,92 +786,105 @@ p, li { white-space: pre-wrap; }
     </message>
 </context>
 <context>
+    <name>U2::ChooseItemDialog</name>
+    <message>
+        <location filename="../src/ChooseItemDialog.cpp" line="36"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/ChooseItemDialog.cpp" line="37"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::CreateExternalProcessDialog</name>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="323"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
         <source>Warning</source>
         <translation>Предупреждение</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="324"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="325"/>
         <source>You have changed the structure of the element (name, slots, attributes' names and types). All elements on the scene would be removed. Do you really want to change it?
 You could also reset the dialog to the initial state.</source>
         <translation>Вы изменили структуру элемента (имя, слоты, имена или типы аттрибутов'). Все элементы на сцене будут удалены. Вы действительно хотите сделать это? Также вы можете вернуть диалог к изначальному состоянию.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="353"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="354"/>
         <source>Create Element</source>
         <translation>Создание элемента</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="355"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="356"/>
         <source>Please set the input/output data.</source>
         <translation>Установите входные и выходные данные.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="360"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="361"/>
         <source>Please set the command line to run external tool.</source>
         <translation>Установите параметры командной строки чтобы запустить внутренний инструмент.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="365"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="464"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="366"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="465"/>
         <source>Please set the name for the new element.</source>
         <translation>Установите имя для нового элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="371"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="476"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="372"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="477"/>
         <source>Invalid symbols in the element name.</source>
         <translation>Некорректные символы в имени элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="376"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="481"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="377"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="482"/>
         <source>Element with this name already exists.</source>
         <translation>Элемент с таким именем уже существует.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="384"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="395"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="406"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="385"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="396"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="407"/>
         <source>For one or more parameter name was not set.</source>
         <translation>Для одного или более парваметров не задано имя.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="388"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="399"/>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="410"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="389"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="400"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="411"/>
         <source>Invalid symbols in a name.</source>
         <translation>Некорректные символы в имени.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="417"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="418"/>
         <source>The same name of element parameters was found</source>
         <translation>Параметр с таким именем уже существует</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="425"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
         <source>You don't use parameter %1 in template string. Continue?</source>
         <translation>Вы не можете использовать параметр %1 в шаблонной строке. Продолжить?</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="426"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
         <source>Continue</source>
         <translation>Продолжить</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="427"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="428"/>
         <source>Abort</source>
         <translation>Вернуться</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="470"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="471"/>
         <source>Spaces in the element name.</source>
         <translation>Пробелы в имени элемента.</translation>
     </message>
     <message>
-        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="496"/>
+        <location filename="../src/library/CreateExternalProcessDialog.cpp" line="497"/>
         <source>It is the correct name</source>
         <translation>Это корректное имя</translation>
     </message>
@@ -861,72 +898,82 @@ You could also reset the dialog to the initial state.</source>
     </message>
     <message>
         <location filename="../src/CreateScriptWorker.cpp" line="303"/>
-        <source>type</source>
-        <translation>тип</translation>
+        <source>Type</source>
+        <translation>Тип</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="506"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="520"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="533"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="539"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="557"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="565"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="573"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="362"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateScriptWorker.cpp" line="363"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/CreateScriptWorker.cpp" line="508"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="522"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="535"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="541"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="559"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="567"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="575"/>
         <source>error</source>
         <translation>ошибка</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="506"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="508"/>
         <source>Two identical types for input port</source>
         <translation>Два одинаковых типа для входного порта</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="507"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="509"/>
         <source>two identical types for input port</source>
         <translation>два одинаковых типа для входного порта</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="520"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="522"/>
         <source>Two identical types for output port</source>
         <translation>Два одинаковых типа для выходного порта</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="521"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="523"/>
         <source>two identical types for output port</source>
         <translation>два одинаковых типа для входного порта</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="533"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="534"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="535"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="536"/>
         <source>Name for some attributes is empty</source>
         <translation>Имена для некоторых аттрибутов пусты</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="539"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="540"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="541"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="542"/>
         <source>Two attributes with name %1</source>
-        <translation>Два аттрибута с именем %1</translation>
+        <translation>Два атрибута с именем %1</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="557"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="558"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="559"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="560"/>
         <source>Name for block is empty</source>
         <translation>Имя для блока пусто</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="565"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="566"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="567"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="568"/>
         <source>Actor with this name already registered</source>
         <translation>Указатель с этим именем уже зарегистрирован</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="573"/>
-        <location filename="../src/CreateScriptWorker.cpp" line="574"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="575"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="576"/>
         <source>Description for block is empty</source>
         <translation>Описание для блока пусто</translation>
     </message>
     <message>
-        <location filename="../src/CreateScriptWorker.cpp" line="628"/>
+        <location filename="../src/CreateScriptWorker.cpp" line="630"/>
         <source>Can't save user's workflow element</source>
         <translation>Невозможно сохранить элемент</translation>
     </message>
@@ -934,12 +981,12 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::DashboardManagerHelper</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="239"/>
+        <location filename="../src/WorkflowViewController.cpp" line="240"/>
         <source>No Dashboards Found</source>
         <translation>Не найдено панелей</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="240"/>
+        <location filename="../src/WorkflowViewController.cpp" line="241"/>
         <source>You do not have any dashboards yet. You need to run some workflow to use Dashboards Manager.</source>
         <translation>У вас еще нет ни одной панели. Вам необходимо запустить какую-нибудь схему, чтобы использовать менеджер панелей.</translation>
     </message>
@@ -947,22 +994,28 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::DashboardsManagerDialog</name>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="60"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="50"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="62"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="60"/>
-        <source>Directory</source>
-        <translation>Директория</translation>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="62"/>
+        <source>Folder</source>
+        <translation>Папка</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="179"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="177"/>
         <source>Confirm</source>
         <translation>Подтвердить</translation>
     </message>
     <message>
-        <location filename="../src/DashboardsManagerDialog.cpp" line="180"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="49"/>
+        <location filename="../src/DashboardsManagerDialog.cpp" line="178"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
@@ -978,7 +1031,7 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::ExtendedProcStyle</name>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="213"/>
+        <location filename="../src/ItemViewStyle.cpp" line="199"/>
         <source>Auto-resize to text</source>
         <translation>Динамический размер</translation>
     </message>
@@ -986,7 +1039,7 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::GalaxyConfigTask</name>
     <message>
-        <location filename="../src/cmdline/GalaxyConfigTask.cpp" line="83"/>
+        <location filename="../src/cmdline/GalaxyConfigTask.cpp" line="79"/>
         <source>Create Galaxy config from existing workflow</source>
         <translation>Создать конфинурацию Galaxy с внутренней схемой</translation>
     </message>
@@ -1031,12 +1084,12 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::ItemViewStyle</name>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="72"/>
+        <location filename="../src/ItemViewStyle.cpp" line="62"/>
         <source>Background color</source>
         <translation>Цвет фона</translation>
     </message>
     <message>
-        <location filename="../src/ItemViewStyle.cpp" line="75"/>
+        <location filename="../src/ItemViewStyle.cpp" line="65"/>
         <source>Font</source>
         <translation>Шрифт</translation>
     </message>
@@ -1044,18 +1097,18 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::LoadSamplesTask</name>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="293"/>
+        <location filename="../src/WorkflowSamples.cpp" line="285"/>
         <source>Load workflow samples</source>
         <translation>Загрузка примеров</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="304"/>
+        <location filename="../src/WorkflowSamples.cpp" line="296"/>
         <source>Sample dir does not exist: %1</source>
         <translation>Папка с примерами не найдена: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="316"/>
-        <location filename="../src/WorkflowSamples.cpp" line="328"/>
+        <location filename="../src/WorkflowSamples.cpp" line="308"/>
+        <location filename="../src/WorkflowSamples.cpp" line="320"/>
         <source>Failed to load sample: %1</source>
         <translation>Не удалось загрузить пример %1</translation>
     </message>
@@ -1063,17 +1116,17 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::LoadWorkflowSceneTask</name>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="68"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="69"/>
         <source>Load workflow scene</source>
         <translation>Загрузить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="86"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="87"/>
         <source>Undefined format: plain text or xml expected</source>
         <translation>Неизвестный формат: содержится тест или xml</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="116"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="117"/>
         <source>Error while parsing file: %1</source>
         <translation>Ошибка во время конвертации файла: %1</translation>
     </message>
@@ -1081,101 +1134,86 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::LocalWorkflow::AlignToReferencePrompter</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="76"/>
         <source>Input sequence</source>
-        <translation>Входная последовательность</translation>
+        <translation type="vanished">Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="76"/>
         <source>Input sequence.</source>
-        <translation>Входная последовательность.</translation>
+        <translation type="vanished">Входная последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="77"/>
         <source>Aligned data</source>
-        <translation>Выровненные данные</translation>
+        <translation type="vanished">Выровненные данные</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="77"/>
         <source>Aligned data.</source>
-        <translation>Выровненные данные.</translation>
+        <translation type="vanished">Выровненные данные.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="92"/>
         <source>Reference URL</source>
-        <translation>Путь до референса</translation>
+        <translation type="vanished">Путь до референса</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="92"/>
         <source>A URL to the file with a reference sequence.</source>
-        <translation>Путь до файла с референсной последовательностью.</translation>
+        <translation type="vanished">Путь до файла с референсной последовательностью.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="124"/>
         <source>unset</source>
-        <translation>не указан</translation>
+        <translation type="vanished">не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="127"/>
         <source>Aligns each sequence from <u>%1</u> to the reference sequence from <u>%2</u>.</source>
-        <translation>Выравнивает каждую последовательность из <u>%1</u> на референсчную последовательность из <u>%2</u>.</translation>
+        <translation type="vanished">Выравнивает каждую последовательность из <u>%1</u> на референсчную последовательность из <u>%2</u>.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::AlignToReferenceTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="213"/>
         <source>Align to reference</source>
-        <translation>Выравнивание на референс</translation>
+        <translation type="vanished">Выравнивание на референс</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::AlignToReferenceWorker</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="100"/>
         <source>Align to Reference</source>
-        <translation>Выравнивание на референс</translation>
+        <translation type="vanished">Выравнивание на референс</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="101"/>
         <source>Align input sequences (e.g. Sanger reads) to the reference sequence.</source>
-        <translation>Выровнять входные последовательности на референсную последовательность.</translation>
+        <translation type="vanished">Выровнять входные последовательности на референсную последовательность.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="150"/>
         <source>Can not read the reference file: </source>
-        <translation>Can not read the reference file: </translation>
+        <translation type="vanished">Can not read the reference file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="160"/>
         <source>Can't read the file: </source>
-        <translation>Can't read the file: </translation>
+        <translation type="vanished">Can't read the file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="162"/>
         <source>No reference sequence in the file: </source>
-        <translation>No reference sequence in the file: </translation>
+        <translation type="vanished">No reference sequence in the file: </translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="163"/>
         <source>More than one sequence in the reference file: </source>
-        <translation>More than one sequence in the reference file: </translation>
+        <translation type="vanished">More than one sequence in the reference file: </translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::Alignment2SequencePrompter</name>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="135"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="137"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="138"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="140"/>
         <source> from <u>%1</u></source>
         <translation>из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="139"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="141"/>
         <source>Split alignment%1 into sequences.</source>
         <translation>Разделить выравнивание%1 на последовательности.</translation>
     </message>
@@ -1183,37 +1221,37 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::LocalWorkflow::Alignment2SequenceWorker</name>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="70"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="72"/>
         <source>empty input alignment</source>
         <translation>пустое входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="102"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="104"/>
         <source>Input alignment</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="103"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="105"/>
         <source>A alignment which will be split into sequences</source>
         <translation>Выравнивание, которое будет разделено на последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="109"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="111"/>
         <source>Output sequences</source>
         <translation>Выходные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="110"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="112"/>
         <source>Converted sequences</source>
         <translation>Сконвертированные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="117"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="119"/>
         <source>Split Alignment into Sequences</source>
         <translation>Разделение выравнивания на последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/MSA2SequenceWorker.cpp" line="118"/>
+        <location filename="../src/library/MSA2SequenceWorker.cpp" line="120"/>
         <source>Splits input alignment into sequences</source>
         <translation>Разделить входное выравнивание на последовательности</translation>
     </message>
@@ -1368,8 +1406,8 @@ You could also reset the dialog to the initial state.</source>
     </message>
     <message>
         <location filename="../src/library/BaseDocWriter.cpp" line="237"/>
-        <source>Can not create directory: %1</source>
-        <translation>Невозможно создать директорию: %1</translation>
+        <source>Can not create folder: %1</source>
+        <translation>Невозможно создать папку: %1</translation>
     </message>
     <message>
         <location filename="../src/library/BaseDocWriter.cpp" line="265"/>
@@ -1421,24 +1459,24 @@ You could also reset the dialog to the initial state.</source>
     </message>
     <message>
         <location filename="../src/library/WriteAssemblyWorkers.cpp" line="187"/>
-        <source>Build BAM index for the target BAM file. The file .bai will be created in the same directory.</source>
-        <translation>построение индекса для BAM-файла. Файл с расширением .bai будет создан в той же директории.</translation>
+        <source>Build BAM index for the target BAM file. The file .bai will be created in the same folder.</source>
+        <translation>построение индекса для BAM-файла. Файл с расширением .bai будет создан в той же папке.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::CASAVAFilterPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="56"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="63"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="57"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="64"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="59"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="66"/>
         <source>Filters FASTQ reads from %1 generated by CASAVA 1.8.</source>
         <translation>Фильтрует FASTQ риды из %1 сгенерированные CASAVA 1.8.</translation>
     </message>
@@ -1446,12 +1484,12 @@ You could also reset the dialog to the initial state.</source>
 <context>
     <name>U2::LocalWorkflow::CASAVAFilterWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="67"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="74"/>
         <source>CASAVA FASTQ Filter</source>
         <translation>Фильтр CASAVA FASTQ</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="68"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="75"/>
         <source>Reads in FASTQ file produced by CASAVA 1.8 contain 'N' or 'Y' as a part of an idetifier. 'Y' if a read if filtered, 'N' if the read if the read is not filtered. The workflow cleans up the filtered reads.
 For example:
 @HWI-ST880:181:D1WRUACXX:8:1102:4905:2125 1:N:0:TAAGGG
@@ -1475,67 +1513,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 11++4222322<CEE2<:3<3333333<A<CAFE:1?C??::C?00?BD90.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="81"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="88"/>
         <source>Input File</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="82"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="89"/>
         <source>Set of FASTQ reads files</source>
         <translation>Набор файлов с FASTQ ридами</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="83"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="90"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="84"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="91"/>
         <source>Output FASTQ files</source>
         <translation>Выхордные FASTQ файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="97"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="104"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="98"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="105"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="102"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="109"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="103"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="110"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="105"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="112"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="106"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="113"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>Имя выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="120"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="127"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="118"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="125"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="119"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="126"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
@@ -1622,13 +1660,13 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="80"/>
-        <source>Database directory</source>
-        <translation>Директория базы данных</translation>
+        <source>Database folder</source>
+        <translation>Папка базы данных</translation>
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="81"/>
-        <source>Specifies database directory for local search.</source>
-        <translation>Устанавливает директорию базы данных для локального поиска.</translation>
+        <source>Specifies database folder for local search.</source>
+        <translation>Устанавливает папку базы данных для локального поиска.</translation>
     </message>
     <message>
         <location filename="../src/library/CDSearchWorker.cpp" line="91"/>
@@ -1654,25 +1692,24 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ComposeResultSubTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="253"/>
         <source>Compose alignment</source>
-        <translation>Составить выравнивание</translation>
+        <translation type="vanished">Составить выравнивание</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::ConvertFilesFormatPrompter</name>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="70"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="74"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="71"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="75"/>
         <source> from <u>%1</u></source>
         <translation>из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="73"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="77"/>
         <source>Convert file %1 to selected format if it is not excluded.</source>
         <translation>Конвертировать файл %1 в выбранный формат если он не исключен.</translation>
     </message>
@@ -1680,88 +1717,88 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertFilesFormatWorker</name>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="116"/>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="118"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="120"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="122"/>
         <source>File</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="117"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="121"/>
         <source>A file to perform format conversion</source>
         <translation>Файл для конвертации формата</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="119"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="123"/>
         <source>File of selected format</source>
         <translation>Файл заданного формата</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="132"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="136"/>
         <source>Excluded formats</source>
         <translation>Исключенные форматы</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="133"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="137"/>
         <source>Input file won't be converted to any of selected formats.</source>
         <translation>Входной файл должен быть конвертирован в один из выбранных форматов.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="135"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="139"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="136"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="140"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="140"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="144"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="141"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="145"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="163"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="167"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="161"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="165"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="162"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="166"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="199"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="203"/>
         <source>The file does not exist: %1</source>
         <translation>The file does not exist: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="273"/>
-        <source>Convert Format: result directory is empty, default workflow directory is used</source>
-        <translation>Convert Format: result directory is empty, default workflow directory is used</translation>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="277"/>
+        <source>Convert Format: result folder is empty, default workflow folder is used</source>
+        <translation>Convert Format: result folder is empty, default workflow folder is used</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="326"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="330"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="111"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="115"/>
         <source>File Format Conversion</source>
         <translation>Преобразование форматов файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="112"/>
+        <location filename="../src/library/ConvertFilesFormatWorker.cpp" line="116"/>
         <source>Converts the file to selected format if it is not excluded.</source>
         <translation>Преобразовывает файл в выбранный формат если он не исключен.</translation>
     </message>
@@ -1769,12 +1806,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertSnpeffVariationsToAnnotationsPrompter</name>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="60"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="61"/>
         <source>unset</source>
         <translation type="unfinished">не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="62"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="63"/>
         <source>Parses information in variations from <u>%1</u> into annotations.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1782,27 +1819,27 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ConvertSnpeffVariationsToAnnotationsWorker</name>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="81"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="82"/>
         <source>Input URL</source>
         <translation type="unfinished">Входной путь</translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="82"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="83"/>
         <source>Input variation file URL.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="107"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="108"/>
         <source>Convert SnpEff Variations to Annotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="108"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="109"/>
         <source>Parses information, added to variations by SnpEff, into standard annotations.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="116"/>
+        <location filename="../src/library/ConvertSnpeffVariationsToAnnotationsWorker.cpp" line="117"/>
         <source>Produced from the input file name</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1810,82 +1847,82 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::DNAStatWorker</name>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="62"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="65"/>
         <source>Input sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="63"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="66"/>
         <source>Sequence for which GC-content and GC3-content will be evaluated.</source>
         <translation>Последовательность, для которой GC3-контент будет оценен.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="64"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="67"/>
         <source>Result annotation</source>
         <translation>Результирующая аннотация</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="65"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="68"/>
         <source>Resulted annotations, with GC-content and GC3-content.</source>
         <translation>Результирующие аннотации с GC-контентом и GC3-контентом.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="71"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="74"/>
         <source>GC-content</source>
         <translation>GC-контент</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="71"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="74"/>
         <source>Evaluate GC-content.</source>
         <translation>Оценить GC-контент.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="73"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="76"/>
         <source>Evaluate GC1-content.</source>
         <translation>Оценить GC1-контент.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="75"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="78"/>
         <source>Evaluate GC2-content.</source>
         <translation>Оценить GC2-контент.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="77"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="80"/>
         <source>Evaluate GC3-content.</source>
         <translation>Оценить GC3-контент.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="73"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="76"/>
         <source>GC1-content</source>
         <translation>GC1-контент</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="75"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="78"/>
         <source>GC2-content</source>
         <translation>GC2-контент</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="77"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="80"/>
         <source>GC3-content</source>
         <translation>GC3-контент</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="81"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="84"/>
         <source>DNA Statistics</source>
         <translation>Статистики для последовательности ДНК</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="82"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="85"/>
         <source>Evaluates statistics for DNA sequences.</source>
         <translation>Оценивает статистики для DNA последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="120"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="123"/>
         <source>Sequence must be nucleotide</source>
         <translation>Последовательность должна быть нуклеотидной</translation>
     </message>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="149"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="152"/>
         <source>No statistics was selected</source>
         <translation>Статистики не были выбраны</translation>
     </message>
@@ -1893,7 +1930,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::DNAStatWorkerPrompter</name>
     <message>
-        <location filename="../src/library/StatisticWorkers.cpp" line="93"/>
+        <location filename="../src/library/StatisticWorkers.cpp" line="96"/>
         <source>Evaluates GC-Content and GC3-Content.</source>
         <translation>Оценивает GC-контент и GC3-контент.</translation>
     </message>
@@ -1930,71 +1967,71 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractAssemblyCoverageWorker</name>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="100"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="101"/>
         <source>Empty assembly slot</source>
         <translation>Слот сборки пуст</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="107"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="108"/>
         <source>Error with assembly object</source>
         <translation>Ошибка со сборкой</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="165"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="166"/>
         <source>Extract Coverage from Assembly</source>
         <translation>Расчет покрытия по сборке</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="166"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="167"/>
         <source>Extract the coverage and bases quantity from the incoming assembly.</source>
-        <translation>Извлекает покрытие и содержание оснований из входной сборки.</translation>
+        <translation>этот элемент извлекает значение покрытия и качества из входной сборки.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="179"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="180"/>
         <source>Format</source>
         <translation>Формат</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="180"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="181"/>
         <source>Format to store the output.</source>
         <translation>Формат для сохранения выходных файлов.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="182"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="183"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="183"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="184"/>
         <source>Data type to export.</source>
         <translation>Тип данных для экспорта.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="185"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="186"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="186"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="187"/>
         <source>The minimum coverage value to export.</source>
-        <translation>Минимальное покрытие для экспорта.</translation>
+        <translation>минимальное покрытие для экспорта.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::ExtractAssemblyCoverageWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="246"/>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="259"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="247"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="260"/>
         <source>coverage in "%1" format</source>
         <translation>покрытие в формате "%1"</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="251"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="252"/>
         <source>nothing</source>
         <translation>ничего</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="266"/>
+        <location filename="../src/library/ExtractAssemblyCoverageWorker.cpp" line="267"/>
         <source>Exports %1 from the incoming assembly with threshold %2 to %3 in tab delimited plain text format.</source>
         <translation>Экспортирует %1 из входной сборки с порогом %2 в %3 в текстовом формате.</translation>
     </message>
@@ -2002,12 +2039,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusTaskHelper</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="145"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="146"/>
         <source>Extract consensus</source>
         <translation>Извлечь консенсус</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="188"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="189"/>
         <source>Unknown consensus algorithm: </source>
         <translation>Неизвестный консенсусный алгоритм: </translation>
     </message>
@@ -2015,12 +2052,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusWorker</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="101"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="102"/>
         <source>Empty assembly slot</source>
         <translation>Слот сборки пуст</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="107"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="108"/>
         <source>Error with assembly object</source>
         <translation>Ошибка со сборкой</translation>
     </message>
@@ -2028,7 +2065,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractConsensusWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ExtractConsensusWorker.cpp" line="288"/>
+        <location filename="../src/library/ExtractConsensusWorker.cpp" line="289"/>
         <source>Extracts the consensus sequence from the incoming assembly using the %1 algorithm.</source>
         <translation>Извлекает консенсусную последовательность из входной сборки используя %1 алгоритм.</translation>
     </message>
@@ -2036,71 +2073,71 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusSequenceWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="263"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="264"/>
         <source>Extract Consensus from Alignment as Sequence</source>
         <translation>Извлечение консенсуса выравнивания как последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="264"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="265"/>
         <source>Extract the consensus sequence from the incoming multiple sequence alignment.</source>
         <translation>Извлекает консенсусную последовательность из входного множественного выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="276"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="277"/>
         <source>Consensus sequence</source>
         <translation>Консенсусная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="277"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="278"/>
         <source>Provides resulting consensus as a sequence</source>
         <translation>Выводит консенсус как последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="288"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="374"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="289"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="375"/>
         <source>Algorithm</source>
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="289"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="375"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="290"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="376"/>
         <source>The algorithm of consensus extracting.</source>
         <translation>Алгоритм извлечения консенсусной последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="291"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="377"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="292"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="378"/>
         <source>Threshold</source>
         <translation>Порог</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="292"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="378"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="293"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="379"/>
         <source>The threshold of the algorithm.</source>
         <translation>Порог для алгоритма.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="294"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="295"/>
         <source>Keep gaps</source>
         <translation>Оставить пробелы</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="295"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="296"/>
         <source>Set this parameter if the result consensus must keep the gaps.</source>
         <translation>Установить этот параметр если консенсус должен содержать пробелы.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="348"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="349"/>
         <source>Extract Consensus from Alignment as Text</source>
         <translation>Извлечение консенсуса выравнивания как текста</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="349"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="350"/>
         <source>Extract the consensus string from the incoming multiple sequence alignment.</source>
         <translation>Извлекает консенсус как строку из входного множественного выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="424"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="425"/>
         <source>Extracts the consensus sequence from the incoming alignment(s) using the %1 algorithm.</source>
         <translation>Извлекает консенсусную последовательность из входного выравниваня при помощи %1 алгоритма.</translation>
     </message>
@@ -2108,24 +2145,24 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusStringWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="269"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="354"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="270"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="355"/>
         <source>Input alignment</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="270"/>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="355"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="271"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="356"/>
         <source>A alignment which consensus should be extracted</source>
         <translation>Выравнивание, соответствующее консенсусу должно быть извлечено</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="362"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="363"/>
         <source>Consensus</source>
         <translation>Консенсус</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="363"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="364"/>
         <source>Provides resulting consensus as a text</source>
         <translation>Выводит консенсус как текст</translation>
     </message>
@@ -2133,12 +2170,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusTaskHelper</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="186"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="187"/>
         <source>Extract consensus</source>
         <translation>Извлечь консенсус</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="232"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="233"/>
         <source>Unknown consensus algorithm: </source>
         <translation>Неизвестный консенсусный алгоритм: </translation>
     </message>
@@ -2146,12 +2183,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::ExtractMSAConsensusWorker</name>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="105"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="106"/>
         <source>Empty msa slot</source>
         <translation>Empty msa slot</translation>
     </message>
     <message>
-        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="111"/>
+        <location filename="../src/library/ExtractMSAConsensusWorker.cpp" line="112"/>
         <source>Error with msa object</source>
         <translation>Error with msa object</translation>
     </message>
@@ -2159,25 +2196,151 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FastQWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="380"/>
+        <location filename="../src/library/DocWorkers.cpp" line="384"/>
         <source>Fastq writer: NULL sequence object</source>
         <translation>Записать Fastq: нет последовательности</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::FastqQualityTrimPrompter</name>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="225"/>
+        <source>unset</source>
+        <translation type="unfinished">не указан</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="226"/>
+        <source><u>%1</u></source>
+        <translation type="unfinished"><u>%1</u></translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="228"/>
+        <source>Trim input sequence %1 from the end, using the quality threshold.</source>
+        <translation type="unfinished">Обрезает входные последовательности %1 от конца, используя порог качества.</translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::FastqQualityTrimWorker</name>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="236"/>
+        <source>FASTQ Quality Trimmer</source>
+        <translation type="unfinished">Обрезание последовательностей в файле FASTQ с учетом качества прочтения</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="237"/>
+        <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
+        <translation type="unfinished">Схема сканирует каждую входную последовательность начиная с конца для поиска первой позиции где качество больше или равно минимальному порогу качества. После этого происходит подрезание до этой позиции.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="243"/>
+        <source>Input File</source>
+        <translation type="unfinished">Входной файл</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="244"/>
+        <source>Set of FASTQ reads files</source>
+        <translation type="unfinished">Набор файлов с FASTQ ридами</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="245"/>
+        <source>Output File</source>
+        <translation type="unfinished">Выходной файл</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="246"/>
+        <source>Output FASTQ files</source>
+        <translation type="unfinished">Выхордные FASTQ файлы</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="259"/>
+        <source>Output folder</source>
+        <translation type="unfinished">Выходная папка</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="260"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation type="unfinished">выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="264"/>
+        <source>Custom folder</source>
+        <translation type="unfinished">Частная папка</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="265"/>
+        <source>Select the custom output folder.</source>
+        <translation type="unfinished">Укажите частную выходную папку.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="267"/>
+        <source>Output file name</source>
+        <translation type="unfinished">Имя выходного файла</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="268"/>
+        <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
+        <translation type="unfinished">Имя выходного файла.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="270"/>
+        <source>Quality threshold</source>
+        <translation>Порог качества</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="271"/>
+        <source>Quality threshold for trimming.</source>
+        <translation>порог качества для подрезания.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="273"/>
+        <source>Min Length</source>
+        <translation>Минимальная длина</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="274"/>
+        <source>Too short reads are discarded by the filter.</source>
+        <translation>слишком короткие риды будут удалены.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="276"/>
+        <source>Trim both ends</source>
+        <translation>Обрезка обоих концов</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="277"/>
+        <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
+        <translation>обрезать оба конца рида или нет. Для ридов, полученных методом Сенгера, обычно необходимо установить значение <b>Истина</b>, а для ридов NGS — <b>Ложь</b>.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="292"/>
+        <source>Input file</source>
+        <translation type="unfinished">Входной файл</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="293"/>
+        <source>Workflow</source>
+        <translation type="unfinished">Схема</translation>
+    </message>
+    <message>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="294"/>
+        <source>Custom</source>
+        <translation type="unfinished">Частная</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::FetchSequenceByIdFromAnnotationPrompter</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="406"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="407"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="407"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="408"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="409"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="410"/>
         <source>In each annotation from %1 search for accession ID and download the corresponding sequences.</source>
         <translation>В каждой аннотации из %1 ищет доступные идентификаторы и скачивает соответствующие последовательности.</translation>
     </message>
@@ -2185,42 +2348,42 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FetchSequenceByIdFromAnnotationWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="415"/>
-        <source>Cannot create directory '%1'</source>
-        <translation>Не удается создать директорию '%1'</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="416"/>
+        <source>Cannot create folder '%1'</source>
+        <translation>Не удается создать папку '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="469"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="470"/>
         <source>failed to load item '%1' from '%2' DB : %3</source>
         <translation>Не удалось загрузить  '%1' из базы данных '%2': %3</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="532"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="533"/>
         <source>Fetch Sequences by ID from Annotation</source>
         <translation>Извлечение последовательностей по ID в аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="533"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="534"/>
         <source>Parses annotations to find any IDs and fetches corresponding sequences.</source>
         <translation>Разделяет аннотации по поиску идентификаторов и извлекает соответствующие последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="537"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="538"/>
         <source>Input annotations</source>
         <translation>Входные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="538"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="539"/>
         <source>The annotations are scanned for accesion ids.</source>
         <translation>Аннотации сканируются для присвоения идентификаторов.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="544"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="545"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="545"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="546"/>
         <source>The downloaded sequences</source>
         <translation>Скачанные последовательности</translation>
     </message>
@@ -2416,17 +2579,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FilterBamPrompter</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="73"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="76"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="74"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="77"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="76"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="79"/>
         <source>Filter BAM/SAM files from %1 with SAMTools view.</source>
         <translation>Фильтрует BAM/SAM файлы из %1 при помощи SAMTools.</translation>
     </message>
@@ -2434,128 +2597,128 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FilterBamWorker</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="120"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="123"/>
         <source>Filter BAM/SAM files</source>
         <translation>Фильтрация BAM/SAM-файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="121"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="124"/>
         <source>Filters BAM/SAM files using SAMTools view.</source>
-        <translation>Фильтрует BAM/SAM файлы при помощи SAMTools.</translation>
+        <translation>фильтровать BAM/SAM файлы при помощи команды SAMTools view.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="125"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="128"/>
         <source>BAM/SAM File</source>
         <translation>BAM/SAM файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="126"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="129"/>
         <source>Set of BAM/SAM files to filter</source>
         <translation>Набор BAM/SAM файлов для фильтрации</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="127"/>
-        <location filename="../src/library/FilterBamWorker.cpp" line="128"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="130"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="131"/>
         <source>Filtered BAM/SAM files</source>
         <translation>Отфильтрованные BAM/SAM файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="141"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="144"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="142"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="145"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="146"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="149"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="147"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="150"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="149"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="152"/>
         <source>Output name</source>
         <translation>Выходное имя</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="150"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="153"/>
         <source>A name of an output BAM/SAM file. If default of empty value is provided the output name is the name of the first BAM/SAM file with .filtered extention.</source>
         <translation>Имя выходного BAM/SAM файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="152"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="155"/>
         <source>Output format</source>
         <translation>Выходной формат</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="153"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="156"/>
         <source>Format of an output assembly file.</source>
         <translation>Формат выходного файла сборки.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="155"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="158"/>
         <source>Region</source>
-        <translation>Регион</translation>
+        <translation>Участок</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="156"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="159"/>
         <source>Regions to filter. For BAM output only. chr2 to output the whole chr2. chr2:1000 to output regions of chr 2 starting from 1000. chr2:1000-2000 to ouput regions of chr2 between 1000 and 2000 including the end point. To input multiple regions use the space seprator (e.g. chr1 chr2 chr3:1000-2000).</source>
-        <translation>Регионы для фильтрации. Только для выходных файлов BAM. Например: chr2 - для всего chr2. chr2:1000 - для регионов chr 2 начинающихся с 1000. chr2:1000-2000 - для регионов chr2 между 1000 и 2000 включая конечную точку. Для ввода нескольких регионов используйте пробел (т.е. chr1 chr2 chr3:1000-2000).</translation>
+        <translation>участки для фильтрации. Только в случае выходных файлов в формате BAM. Например, chr2 - для всей chr2. chr2:1000 - для регионов chr 2, начиная с 1000. chr2:1000-2000 - для регионов chr2 между 1000 и 2000, включая конец интервала. Для ввода нескольких участков используйте пробел (напр, chr1 chr2 chr3:1000-2000).</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="159"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="162"/>
         <source>MAPQ threshold</source>
         <translation>Порог MAPQ</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="160"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="163"/>
         <source>Minimum MAPQ quality score.</source>
-        <translation>Минимальная оценка качества MAPQ.</translation>
+        <translation>минимальная оценка качества MAPQ.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="162"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="165"/>
         <source>Accept flag</source>
         <translation>Флаг принятия</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="163"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="166"/>
         <source>Only output alignments with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</source>
-        <translation>Только выходные выравнивания с выбранными элементами. Выберите элементы для составления флага.</translation>
+        <translation>включить в выходной файл только риды с выбранными характеристиками. Выберите элементы для составления флага. Не выбирайте ничего, если фильтровать риды не нужно (если выбран один параметр, риды будут отфильтрованы по нему).</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="165"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="168"/>
         <source>Skip flag</source>
         <translation>Флаг игнорирования</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="166"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="169"/>
         <source>Skip alignment with the selected items. Select the items in the combobox to configure bit flag. Do not select the items to avoid filtration by this parameter.</source>
-        <translation>Игнорировать выравнивания с выбранными элементами.</translation>
+        <translation>исключить из выходного файла  риды с выбранными характеристиками. Выберите элементы для составления флага. Не выбирайте ничего, если фильтровать риды не нужно.</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="185"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="188"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="183"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="186"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="184"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="187"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="242"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="245"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -2563,7 +2726,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindAllRegionsTask</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="536"/>
+        <location filename="../src/library/FindWorker.cpp" line="537"/>
         <source>FindAllRegionsTask</source>
         <translation>FindAllRegionsTask</translation>
     </message>
@@ -2571,52 +2734,52 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindPrompter</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="246"/>
+        <location filename="../src/library/FindWorker.cpp" line="247"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="274"/>
+        <location filename="../src/library/FindWorker.cpp" line="275"/>
         <source>translated</source>
         <translation>транслированной</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="282"/>
+        <location filename="../src/library/FindWorker.cpp" line="283"/>
         <source>A substring must %1.</source>
         <translation>Подстрока обязательна %1.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="283"/>
+        <location filename="../src/library/FindWorker.cpp" line="284"/>
         <source>match a pattern exactly</source>
         <translation>сопоставить паттерн точно</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="285"/>
+        <location filename="../src/library/FindWorker.cpp" line="286"/>
         <source>Maximum number of mismatches is %1.</source>
         <translation>Максимальное число несовпадений равно %1.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="293"/>
+        <location filename="../src/library/FindWorker.cpp" line="294"/>
         <source><u>%1</u> pattern(s)</source>
         <translation><u>%1</u> паттерн(ы)</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="295"/>
+        <location filename="../src/library/FindWorker.cpp" line="296"/>
         <source>patterns from <u>%1</u></source>
         <translation>паттерны из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="303"/>
+        <location filename="../src/library/FindWorker.cpp" line="304"/>
         <source> and <u>%1</u></source>
         <translation>и <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="307"/>
+        <location filename="../src/library/FindWorker.cpp" line="308"/>
         <source> using pattern names</source>
         <translation>использовать имя паттерна</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="310"/>
+        <location filename="../src/library/FindWorker.cpp" line="311"/>
         <source>Searches regions in each sequence from <u>%1</u> similar to %2%3.<br/>%4<br/>Searches in <u>%5</u> of a %6sequence. Outputs the regions found annotated as <u>%7</u>.</source>
         <translation>Ищет регионы в каждой последовательности начиная с <u>%1</u> по %2%3.<br/>%4<br/>Ищет в <u>%5</u> %6 последовательностях. Выходные регионы аннотируются как <u>%7</u>.</translation>
     </message>
@@ -2624,143 +2787,143 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::FindWorker</name>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="501"/>
-        <location filename="../src/library/FindWorker.cpp" line="522"/>
+        <location filename="../src/library/FindWorker.cpp" line="502"/>
+        <location filename="../src/library/FindWorker.cpp" line="523"/>
         <source>Found %1 matches of pattern '%2'</source>
         <translation>Найдено %1 вхождений паттерна "%2"</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="130"/>
+        <location filename="../src/library/FindWorker.cpp" line="131"/>
         <source>Input Data</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="131"/>
+        <location filename="../src/library/FindWorker.cpp" line="132"/>
         <source>An input sequence to search in.</source>
         <translation>Последовательность, для которой применяется алгоритм поиска.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="134"/>
+        <location filename="../src/library/FindWorker.cpp" line="135"/>
         <source>Pattern Annotations</source>
         <translation>Найденные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="135"/>
+        <location filename="../src/library/FindWorker.cpp" line="136"/>
         <source>The regions found.</source>
         <translation>Аннотации, найденные для последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="146"/>
+        <location filename="../src/library/FindWorker.cpp" line="147"/>
         <source>Name of the result annotations.</source>
         <translation>Имя аннотаций для найденных регионов.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="149"/>
+        <location filename="../src/library/FindWorker.cpp" line="150"/>
         <source>Use pattern name</source>
         <translation>Использовать имя паттерна</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="150"/>
+        <location filename="../src/library/FindWorker.cpp" line="151"/>
         <source>If patterns are loaded from a file, use names of pattern sequences as annotation names. The name from the parameters is used by default.</source>
         <translation>Если паттерны загружаются из файла, используйте имена паттернов последовательностей как имена аннотаций. Имена из параметров используются по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="152"/>
+        <location filename="../src/library/FindWorker.cpp" line="153"/>
         <source>Max Mismatches</source>
         <translation>Допустимо несовпадений</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="153"/>
+        <location filename="../src/library/FindWorker.cpp" line="154"/>
         <source>Maximum number of mismatches between a substring and a pattern.</source>
         <translation>Максимальное допустимое число несовпадений между подпоследовательностью и паттерном.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="157"/>
+        <location filename="../src/library/FindWorker.cpp" line="158"/>
         <source>Allow Insertions/Deletions</source>
         <translation>Разрешить вставки/делеции</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="158"/>
+        <location filename="../src/library/FindWorker.cpp" line="159"/>
         <source>Takes into account possibility of insertions/deletions when searching. By default substitutions are only considered.</source>
         <translation>В случае когда допустимы несовпадения между подпоследовательностью и паттерном учитывает вставки/делеции. По умолчанию учитываются только замены.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="162"/>
+        <location filename="../src/library/FindWorker.cpp" line="163"/>
         <source>Support ambiguous bases</source>
         <translation>Поддержка неопределенных баз</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="163"/>
+        <location filename="../src/library/FindWorker.cpp" line="164"/>
         <source>Performs correct handling of ambiguous bases. When this option is activated insertions and deletions are not considered. </source>
         <translation>Выполняет корректную обработку неопределенных баз. Когда эта опция включена вставки и удаления не рассматриваются.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="167"/>
+        <location filename="../src/library/FindWorker.cpp" line="168"/>
         <source>Search in Translation</source>
         <translation>Искать в трансляции</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="168"/>
+        <location filename="../src/library/FindWorker.cpp" line="169"/>
         <source>Translates a supplied nucleotide sequence to protein and searches in the translated sequence.</source>
         <translation>Указывает транслировать входную нуклеотидную последовательность в протеиновую и искать указанный паттерн в полученной протеиновой последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="190"/>
+        <location filename="../src/library/FindWorker.cpp" line="191"/>
         <source>Searches regions in a sequence similar to a pattern sequence. Outputs a set of annotations.</source>
         <translation>Поиск подпоследовательностей, похожих на указанный паттерн, в каждой входной последовательности (нуклеотидной или протеиновой).</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="259"/>
+        <location filename="../src/library/FindWorker.cpp" line="260"/>
         <source>both strands</source>
         <translation>в обеих цепях</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="262"/>
+        <location filename="../src/library/FindWorker.cpp" line="263"/>
         <source>direct strand</source>
         <translation>прямой цепи</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="265"/>
+        <location filename="../src/library/FindWorker.cpp" line="266"/>
         <source>complement strand</source>
         <translation>комплементарной цепи</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="350"/>
+        <location filename="../src/library/FindWorker.cpp" line="351"/>
         <source>Load file with patterns</source>
         <translation>Загрузить файл с паттернами</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="420"/>
+        <location filename="../src/library/FindWorker.cpp" line="421"/>
         <source>Empty pattern given</source>
         <translation>Пустой паттерн</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="445"/>
+        <location filename="../src/library/FindWorker.cpp" line="446"/>
         <source>Find algorithm subtasks</source>
         <translation>Подзадача алгоритма поиска</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="145"/>
+        <location filename="../src/library/FindWorker.cpp" line="146"/>
         <source>Annotate as</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="172"/>
+        <location filename="../src/library/FindWorker.cpp" line="173"/>
         <source>Qualifier name for pattern name</source>
         <translation>Имя квалифаера для имени паттерна</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="173"/>
+        <location filename="../src/library/FindWorker.cpp" line="174"/>
         <source>Name of qualifier in result annotations which is containing a pattern name.</source>
         <translation>Имя квалифаера в результирующих аннотациях, которое содержит имя паттерна.</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="189"/>
+        <location filename="../src/library/FindWorker.cpp" line="190"/>
         <source>Find Pattern</source>
         <translation>Поиск подстроки</translation>
     </message>
     <message>
-        <location filename="../src/library/FindWorker.cpp" line="374"/>
+        <location filename="../src/library/FindWorker.cpp" line="375"/>
         <source>Null sequence supplied to FindWorker: %1</source>
         <translation>Пустая последовательность для поиска подстрок: %1</translation>
     </message>
@@ -2768,7 +2931,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::GFFWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="635"/>
+        <location filename="../src/library/DocWorkers.cpp" line="639"/>
         <source>GFF writer: NULL sequence object</source>
         <translation>Записать GFF: нет последовательности</translation>
     </message>
@@ -2776,7 +2939,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::GenbankWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="499"/>
+        <location filename="../src/library/DocWorkers.cpp" line="503"/>
         <source>Genbank writer: NULL sequence object</source>
         <translation>Записать Genbank: нет последовательности</translation>
     </message>
@@ -2809,8 +2972,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/GetFileListWorker.cpp" line="110"/>
-        <source>Produces URL(s) to files from specified directories.</source>
-        <translation>этот элемент производит пути до файлов из указанных директорий.</translation>
+        <source>Produces URL(s) to files from specified folders.</source>
+        <translation>этот элемент производит пути до файлов из указанных папок.</translation>
     </message>
     <message>
         <location filename="../src/library/GetFileListWorker.cpp" line="109"/>
@@ -2940,24 +3103,20 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::KAlignSubTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="536"/>
         <source>Max region size: %1</source>
-        <translation>Max region size: %1</translation>
+        <translation type="vanished">Max region size: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="537"/>
         <source>Core region: %1-%2</source>
-        <translation>Core region: %1-%2</translation>
+        <translation type="vanished">Core region: %1-%2</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="600"/>
         <source>The %1 algorithm is not found. Add the %1 plugin.</source>
-        <translation>The %1 algorithm is not found. Add the %1 plugin.</translation>
+        <translation type="vanished">The %1 algorithm is not found. Add the %1 plugin.</translation>
     </message>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="603"/>
         <source>The %1 algorithm is not found. Check that the %1 plugin is up to date.</source>
-        <translation>The %1 algorithm is not found. Check that the %1 plugin is up to date.</translation>
+        <translation type="vanished">The %1 algorithm is not found. Check that the %1 plugin is up to date.</translation>
     </message>
 </context>
 <context>
@@ -3035,7 +3194,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MSAWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="851"/>
+        <location filename="../src/library/DocWorkers.cpp" line="855"/>
         <source>Empty alignment passed for writing to %1</source>
         <translation>Пустое выравнивание для записи в %1</translation>
     </message>
@@ -3094,17 +3253,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeBamPrompter</name>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="66"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="70"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="67"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="71"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="69"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="73"/>
         <source>Merge BAM files from %1 with SAMTools merge.</source>
         <translation>Соединяет BAM файлы из%1 при помощи SAMTools.</translation>
     </message>
@@ -3112,82 +3271,82 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeBamWorker</name>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="81"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="85"/>
         <source>Merge BAM files</source>
         <translation>Соединение BAM-файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="82"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="86"/>
         <source>Merge BAM files using SAMTools merge.</source>
         <translation>Соединить BAM файлы при помощи SAMTools.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="86"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="90"/>
         <source>BAM File</source>
         <translation>BAM файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="87"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="91"/>
         <source>Set of BAM files to merge</source>
         <translation>Набор BAM файлов для слияния</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="88"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="92"/>
         <source>Merged BAM File</source>
         <translation>Соединенный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="89"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="93"/>
         <source>Merged BAM file</source>
         <translation>Соединенный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="102"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="106"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="103"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="107"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="107"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="111"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="108"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/MergeBamWorker.cpp" line="112"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="110"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="114"/>
         <source>Output BAM name</source>
         <translation>Имя выходного BAM файла</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="111"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="115"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .merged.bam extention.</source>
         <translation>Имя выходного BAM файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="126"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="130"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="124"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="128"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="125"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="129"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/library/MergeBamWorker.cpp" line="168"/>
+        <location filename="../src/library/MergeBamWorker.cpp" line="172"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -3195,17 +3354,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeFastqPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="416"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="452"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="417"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="453"/>
         <source> from <u>%1</u></source>
         <translation>из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="419"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="455"/>
         <source>Merges input sequences %1.</source>
         <translation>Соединяет входные файлы %1.</translation>
     </message>
@@ -3213,77 +3372,77 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MergeFastqWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="427"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="463"/>
         <source>FASTQ Merger</source>
         <translation>Слияние файлов FASTQ</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="428"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="464"/>
         <source>Merges input sequences to one output file</source>
-        <translation>Соединяет входные последовательности в один выходной файл</translation>
+        <translation>этот элемент соединяет входные последовательности в один выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="432"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="468"/>
         <source>Input File</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="433"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="469"/>
         <source>Set of FASTQ reads files</source>
         <translation>Набор файлов с FASTQ ридами</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="434"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="470"/>
         <source>Output File</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="435"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="471"/>
         <source>Output FASTQ file</source>
         <translation>Выходной FASTQ файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="448"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="484"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="449"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="485"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="453"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="489"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="454"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="490"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="456"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="492"/>
         <source>Output file name</source>
         <translation>Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="457"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="493"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
         <translation>Имя выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="472"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="508"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="470"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="506"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="471"/>
+        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="507"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
@@ -3291,17 +3450,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerPrompter</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="331"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="332"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="344"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="345"/>
         <source>Gets one message from <u>%1</u> and one message from <u>%2</u>, joins them into a single message, and transfers it to the output. Repeats this while there are available messages in both input ports.</source>
         <translation>Принять по одному сообщению от каждого из элементов <u>%1</u> и <u>%2</u>, объединить эти сообщения в одно и передать его дальше. Повторять процедуру до тех пор, пока в обоих входных портах имеются сообщения.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="348"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="349"/>
         <source>Gets one message from <u>%1</u>, joins it with each message from <u>%2</u>, and transfers the joined messages to the output. Repeats this for each message from <u>%1</u>.</source>
         <translation>Принимает сообщение от элемента <u>%1</u>, объединяет его по очереди с каждым сообщением от элемента <u>%2</u> и отправляет полученные сообщения дальше. Процедура повторяется до тех пор, пока имеются сообщения от <u>%1</u>.</translation>
     </message>
@@ -3309,67 +3468,67 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::MultiplexerWorker</name>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="279"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
         <source>Multiplexing rule</source>
         <translation>Правило мультиплексирования</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="262"/>
         <source>First input port</source>
         <translation>Первый входной порт</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="244"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="245"/>
         <source>The number of messages, received from "%1" (%2), does not correspond to the number of messages, received from "%3" (%4). Redundant messages were skipped.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="261"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="262"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from this port is concatenated with messages from the other port.</source>
         <translation>Один из входных портов <i>Мультиплексера</i>. В случае, если задано правило мультиплексирования "1 to many", сообщения из этого порта объединяются с каждым сообщением из другого порта.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="265"/>
         <source>Second input port</source>
         <translation>Второй входной порт</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="264"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="265"/>
         <source>One of the two input ports of the <i>Multiplexer</i> element. When rule "1 to many" is set up, each message from the other port is concatenated with messages from this port.</source>
         <translation>Один из входных портов <i>Мультиплексера</i>. В случае, если задано правило мультиплексирования "1 to many", сообщения из другого порта объединяются с каждым сообщением из этого порта.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="271"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
         <source>Multiplexed output</source>
         <translation>Мультиплексированные сообщения</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="272"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="273"/>
         <source>The port outputs multiplexed messages.</source>
         <translation>Сообщения, полученные в результате объединения двух потоков сообщений.</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="280"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="281"/>
         <source>Specifies how to multiplex the input messages: <li><b>1 to 1</b> - the multiplexer gets one message from the first input port and one message from the second input port, joins them into a single message, and transfers it to the output. This procedure is repeated while there are available messages in both input ports.</li> <li><b>1 to many</b> - the multiplexer gets one message from the first input port, joins it with each message  [...]
         <translation>данный параметр определяет способ объединения сообщений из двух входных портов: значение <li><b>1 to 1</b> означает, что одно сообщение из первого входного порта объединяется с одним сообщением из второго входного порта. Полученное мультиплексированное сообщение передается на выход. Данная процедура повторяется до тех пор, пока в обоих портах имеются сообщения. Значение </li> <li><b>1 to many</b> означает, что одно сообщение  [...]
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="296"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
         <source>1 to many</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="297"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="298"/>
         <source>1 to 1</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="303"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
         <source>Multiplexer</source>
         <translation>Мультиплексер</translation>
     </message>
     <message>
-        <location filename="../src/library/MultiplexerWorker.cpp" line="304"/>
+        <location filename="../src/library/MultiplexerWorker.cpp" line="305"/>
         <source>The element allows one to join two data flows into a single data flow, i.e. to join messages from two input ports into concatenated messages and send them to the output. The concatenation approach is determined by the <i>Multiplexing rule</i> parameter.</source>
         <translation>этот элемент позволяет объединять данные из двух различных источников, а именно объединять сообщения, пришедшие во входные порты, в комплексные мультиплексированные сообщения. Способ объединения сообщений задается с помощью параметра <i>Правило мультиплексирования</i>.</translation>
     </message>
@@ -3377,9 +3536,8 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::PairwiseAlignmentTask</name>
     <message>
-        <location filename="../src/library/AlignToReferenceWorker.cpp" line="745"/>
         <source>Can't translate read sequence to reverse complement</source>
-        <translation>Can't translate read sequence to reverse complement</translation>
+        <translation type="vanished">Can't translate read sequence to reverse complement</translation>
     </message>
 </context>
 <context>
@@ -3441,189 +3599,149 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::QualityTrimPrompter</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="218"/>
         <source>unset</source>
-        <translation>не указан</translation>
+        <translation type="vanished">не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="219"/>
         <source><u>%1</u></source>
-        <translation><u>%1</u></translation>
+        <translation type="vanished"><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="221"/>
         <source>Trim input sequence %1 from the end, using the quality threshold.</source>
-        <translation>Обрезает входные последовательности %1 от конца, используя порог качества.</translation>
+        <translation type="vanished">Обрезает входные последовательности %1 от конца, используя порог качества.</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::QualityTrimWorker</name>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="229"/>
         <source>FASTQ Quality Trimmer</source>
-        <translation>Обрезание последовательностей в файле FASTQ с учетом качества прочтения</translation>
+        <translation type="vanished">Обрезание последовательностей в файле FASTQ с учетом качества прочтения</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="230"/>
         <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
-        <translation>Схема сканирует каждую входную последовательность начиная с конца для поиска первой позиции где качество больше или равно минимальному порогу качества. После этого происходит подрезание до этой позиции.</translation>
+        <translation type="vanished">Схема сканирует каждую входную последовательность начиная с конца для поиска первой позиции где качество больше или равно минимальному порогу качества. После этого происходит подрезание до этой позиции.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="236"/>
         <source>Input File</source>
-        <translation>Входной файл</translation>
+        <translation type="vanished">Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="237"/>
         <source>Set of FASTQ reads files</source>
-        <translation>Набор файлов с FASTQ ридами</translation>
+        <translation type="vanished">Набор файлов с FASTQ ридами</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="238"/>
         <source>Output File</source>
-        <translation>Выходной файл</translation>
+        <translation type="vanished">Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="239"/>
         <source>Output FASTQ files</source>
-        <translation>Выхордные FASTQ файлы</translation>
+        <translation type="vanished">Выхордные FASTQ файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="252"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <source>Output folder</source>
+        <translation type="vanished">Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="253"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation type="vanished">выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="257"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <source>Custom folder</source>
+        <translation type="vanished">Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="258"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <source>Select the custom output folder.</source>
+        <translation type="vanished">Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="260"/>
         <source>Output file name</source>
-        <translation>Имя выходного файла</translation>
+        <translation type="vanished">Имя выходного файла</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="261"/>
         <source>A name of an output file. If default of empty value is provided the output name is the name of the first file with additional extention.</source>
-        <translation>Имя выходного файла.</translation>
+        <translation type="vanished">Имя выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="263"/>
         <source>Quality threshold</source>
-        <translation>Порог качества</translation>
+        <translation type="vanished">Порог качества</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="264"/>
-        <source>Quality threshold for trimming.</source>
-        <translation>Порог качества для подрезания.</translation>
-    </message>
-    <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="266"/>
         <source>Min Length</source>
-        <translation>Минимальная длина</translation>
-    </message>
-    <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="267"/>
-        <source>Too short reads are discarded by the filter.</source>
-        <translation>Слишком короткие риды отбрасываются фильтром.</translation>
-    </message>
-    <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="269"/>
-        <source>Trim both ends</source>
-        <translation>Подрезание обоих концов</translation>
-    </message>
-    <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="270"/>
-        <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
-        <translation>Подрезать оба конца рида или нет. Обычно, необходимо установить значение <b>Истина</b> для <b>Sanger</b> ридов и <b>Ложь</b> для <b>NGS</b></translation>
+        <translation type="vanished">Минимальная длина</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="287"/>
         <source>Custom</source>
-        <translation>Частная</translation>
+        <translation type="vanished">Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="285"/>
         <source>Input file</source>
-        <translation>Входной файл</translation>
+        <translation type="vanished">Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/FASTQWorkersLibrary.cpp" line="286"/>
         <source>Workflow</source>
-        <translation>Схема</translation>
+        <translation type="vanished">Схема</translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::RCWorker</name>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="37"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="59"/>
         <source>Input sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="38"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="60"/>
         <source>The sequence to be complemented</source>
         <translation>Последовательность была комплементирована</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="39"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="61"/>
         <source>Output sequence</source>
         <translation>Выходная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="40"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="62"/>
         <source>Reverse-complement sequence</source>
         <translation>Обратно-комплементарная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="49"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="71"/>
         <source>Operation type</source>
         <translation>Тип операции</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="50"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="72"/>
         <source>Select what to do with sequence.</source>
         <translation>Выберите, что сделать с последовательностью.</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="53"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="75"/>
         <source>Reverse Complement</source>
         <translation>Создание обратно-комплементарной последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="54"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="76"/>
         <source>Converts input sequence into its reverse, complement or reverse-complement counterpart</source>
         <translation>Конвертирует входную последовательность в обратную, комплементарную или обратно-комплементарную</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="102"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="124"/>
         <source>Null sequence object supplied to FindWorker</source>
         <translation>Ничего не подается в элемент поиска</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="108"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="130"/>
         <source>Null sequence supplied to FindWorker: %1</source>
         <translation>Пустая последовательность для поиска подстрок: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="115"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="137"/>
         <source>Can't complement amino sequence</source>
         <translation>Невозможно комплементировать амино последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="124"/>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="135"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="146"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="157"/>
         <source>Can't find complement translation</source>
         <translation>Невозможно найти комплементарную трансляцию</translation>
     </message>
@@ -3631,17 +3749,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RCWorkerPrompter</name>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="76"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="98"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="77"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="99"/>
         <source> from <u>%1</u></source>
         <translation>из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/ReverseComplementWorker.cpp" line="82"/>
+        <location filename="../src/library/ReverseComplementWorker.cpp" line="104"/>
         <source>Converts each input sequence %1 into its %2 counterpart.</source>
         <translation>Конвертирует каждую входную последовательность %1 в ее %2 копию.</translation>
     </message>
@@ -3649,7 +3767,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RawSeqWriter</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="435"/>
+        <location filename="../src/library/DocWorkers.cpp" line="439"/>
         <source>Raw sequence writer: NULL sequence object</source>
         <translation>Записать колонки последовательностей: нет последовательностей</translation>
     </message>
@@ -3686,7 +3804,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadAnnotationsWorker.cpp" line="138"/>
-        <source>Reads annotations from files.</source>
+        <source>Reads annotations from files. All annotation file formats supported by UGENE are allowed as input to this element.</source>
         <translation>этот элемент считывает аннотации из файлов.</translation>
     </message>
     <message>
@@ -3765,7 +3883,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadAssemblyWorker.cpp" line="123"/>
-        <source>Reads assembly from files.</source>
+        <source>Reads assembly from files. All assembly file formats supported by UGENE are allowed as input to this element.</source>
         <translation>этот элемент считывает сборки из файлов.</translation>
     </message>
     <message>
@@ -3817,7 +3935,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
     <message>
         <location filename="../src/library/ReadVariationWorker.cpp" line="188"/>
-        <source>Reads variations from files and produces variations tracks.</source>
+        <source>Reads variations from files and produces variations tracks. All variation file formats supported by UGENE are allowed as input to this element.</source>
         <translation>этот элемент читает вариации из файлов и производит наборы вариаций.</translation>
     </message>
     <message>
@@ -3855,7 +3973,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RemoteDBFetcherPrompter</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="68"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="69"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
@@ -3863,116 +3981,116 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RemoteDBFetcherWorker</name>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="78"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="79"/>
         <source>sequences identified with</source>
         <translation>последовательности с идентификаторами</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="79"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="80"/>
         <source>sequence identified with</source>
         <translation>последовательность с идентификатором</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="84"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="85"/>
         <source>sequences identified with resource IDs that will be read from files</source>
         <translation>последовательности, определенные идентификаторами, которые будут прочитаны из файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="85"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="86"/>
         <source>sequences identified with resource IDs that will be read from file</source>
         <translation>последовательности, определенные идентификаторами, которые будут прочитаны из файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="95"/>
-        <source>Save result to <u>%1</u> directory.</source>
-        <translation>Сохранить результат в директорию <u>%1</u>.</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="96"/>
+        <source>Save result to <u>%1</u> folder.</source>
+        <translation>Сохранить результат в папку <u>%1</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="97"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="98"/>
         <source>Reads %1 %2 from <u>%3</u> remote database. %4</source>
         <translation>Прочитать %1 %2 из удаленной базы данных <u>%3</u>. %4</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="143"/>
-        <source>Cannot create directory '%1'</source>
-        <translation>Не удается создать директорию '%1'</translation>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="144"/>
+        <source>Cannot create folder '%1'</source>
+        <translation>Не удается создать папку '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="175"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="176"/>
         <source>failed to load item '%1' from '%2' DB : %3</source>
         <translation>Не удалось загрузить  '%1' из базы данных '%2': %3</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="301"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="302"/>
         <source>Read from Remote Database</source>
         <translation>Чтение из удаленной базы данных</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="302"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="303"/>
         <source>Reads sequences and annotations if any from a remote database.</source>
         <translation>этот элемент загружает последовательности, а также аннотации в случае их наличия, из удаленной базы данных.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="306"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="307"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="317"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="318"/>
         <source>Database</source>
         <translation>База данных</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="318"/>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="559"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="319"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="560"/>
         <source>The database to read from.</source>
         <translation>выберите удаленную базу данных, из которой требуется загрузить данные.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="322"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="323"/>
         <source>Read resource ID(s) from source</source>
         <translation>Идентификаторы из источника</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="323"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="324"/>
         <source>The source to read resource IDs from: the list or a local file.</source>
         <translation>источник идентификаторов (список или локальный файл).</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="327"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="328"/>
         <source>File with resource IDs</source>
         <translation>Файл с идентификаторами</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="328"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="329"/>
         <source>A file with a list of resource ID`s in the database (one per line).</source>
         <translation>Файл с идентификаторами в базе данных (по одному в строке).</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="334"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="335"/>
         <source>Resource ID(s)</source>
         <translation>Идентификаторы</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="335"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="336"/>
         <source>Semicolon-separated list of resource ID`s in the database.</source>
         <translation>Список идентификаторов ресурсов в базе данных. Различные значения отделяются друг от друга с помощью ";".
 <p> Например: "NC_001363;D11266".</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="341"/>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="553"/>
-        <source>Save file to directory</source>
-        <translation>Сохранить в директорию</translation>
-    </message>
-    <message>
         <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="342"/>
         <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="554"/>
-        <source>The directory to store sequence files loaded from a database.</source>
-        <translation>Директория, в которую будут сохранены файлы, загруженные из базы данных.</translation>
+        <source>Save file to folder</source>
+        <translation>Сохранить в папку</translation>
+    </message>
+    <message>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="343"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="555"/>
+        <source>The folder to store sequence files loaded from a database.</source>
+        <translation>Папка, в которую будут сохранены файлы, загруженные из базы данных.</translation>
     </message>
     <message>
-        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="558"/>
+        <location filename="../src/library/RemoteDBFetcherWorker.cpp" line="559"/>
         <source>NCBI database</source>
         <translation>База данных NCBI</translation>
     </message>
@@ -3980,17 +4098,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RenameChomosomeInVariationPrompter</name>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="56"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="58"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="63"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="65"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="65"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="67"/>
         <source>For each variation from %1 replace chromosome prefix%2 %3 with %4 prefix.</source>
         <translation>Для каждой вариации из %1 переписывает префикс хромосомы%2 %3 с %4 префиксом.</translation>
     </message>
@@ -3998,72 +4116,72 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RenameChomosomeInVariationWorker</name>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="84"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="86"/>
         <source>An unexpected task type</source>
         <translation>An unexpected task type</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="103"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="105"/>
         <source>Source file URL is empty</source>
         <translation>Source file URL is empty</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="122"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="124"/>
         <source>Change Chromosome Notation for VCF</source>
         <translation>Изменение обозначения хромосомы для VCF</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="123"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="125"/>
         <source>Changes chromosome notation for each variant from the input VCF or other variation files.</source>
         <translation>этот элемент изменяет обозначения хромосом для каждой вариации из входного VCF-файла или других файлов.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="127"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="129"/>
         <source>Input file URL</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="128"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="130"/>
         <source>Input files(s) with variations, usually in VCF format.</source>
         <translation>Входные файлы с вариациями, обычно в VCF формате.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="129"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="131"/>
         <source>Output file URL</source>
         <translation>Выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="130"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="132"/>
         <source>Output file(s) with annotated variations.</source>
         <translation>Выходной файл с аннотированными вариациями.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="137"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="139"/>
         <source>Produced URL</source>
         <translation>Производимые пути</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="137"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="139"/>
         <source>Location of a corresponding produced file.</source>
         <translation>Расположение выходного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="144"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="146"/>
         <source>Replace prefixes</source>
         <translation>Заменить префиксы</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="145"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="147"/>
         <source>Input the list of chromosome prefixes that you would like to replace, for example "NC_000". Separate different prefixes by semicolons.</source>
         <translation>введите список префиксов, которые необходимо переписать, например "NC_000". Разделяйте префиксы точкой с запятой.</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="147"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="149"/>
         <source>Replace by</source>
         <translation>Заменить</translation>
     </message>
     <message>
-        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="148"/>
+        <location filename="../src/library/RenameChromosomeInVariationWorker.cpp" line="150"/>
         <source>Input the prefix that should be set instead, for example "chr".</source>
         <translation>введите префикс, на который нужно заменить указанные префиксы, например "chr".</translation>
     </message>
@@ -4071,17 +4189,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RmdupBamPrompter</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="67"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="71"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="68"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="72"/>
         <source><u>%1</u></source>
         <translation><u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="70"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="74"/>
         <source>Remove PCR duplicates of BAM files from %1 with SAMTools rmdup.</source>
         <translation>Удаляет дубликаты PCR из BAM файлов из %1 при помощи SAMTools.</translation>
     </message>
@@ -4089,102 +4207,102 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::RmdupBamWorker</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="83"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="87"/>
         <source>Remove Duplicates in BAM Files</source>
         <translation>Удаление дубликатов в BAM-файлах</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="84"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="88"/>
         <source>Remove PCR duplicates of BAM files using SAMTools rmdup.</source>
         <translation>Удаляет дубликаты PCR из BAM файлов при помощи SAMTools.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="88"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="92"/>
         <source>BAM File</source>
         <translation>BAM файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="89"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="93"/>
         <source>Set of BAM files to rmdup</source>
         <translation>Набор BAM файлов для удаления дубликатов</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="90"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="94"/>
         <source>Cleaned BAM File</source>
         <translation>Обработанный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="91"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="95"/>
         <source>Cleaned BAM file</source>
         <translation>Обработанный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="104"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="108"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="105"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="109"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="109"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="113"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="110"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="114"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="112"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="116"/>
         <source>Output BAM name</source>
         <translation>Имя выходного BAM файла</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="113"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="117"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .nodup.bam extention.</source>
         <translation>Имя выходного BAM файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="115"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="119"/>
         <source>Remove for single-end reads</source>
         <translation>Удалить для непарных ридов</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="116"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="120"/>
         <source>Remove duplicate for single-end reads. By default, the command works for paired-end reads only (-s).</source>
         <translation>Удаляет дубликаты для непарных ридов. По умолчанию, команда работает только для парных ридов (-s).</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="118"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="122"/>
         <source>Treat as single-end</source>
         <translation>Считать как непарные</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="119"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="123"/>
         <source>Treat paired-end reads and single-end reads (-S).</source>
         <translation>Считать парные и непарные риды (-S).</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="135"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="139"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="133"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="137"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="134"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="138"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="177"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="181"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -4192,32 +4310,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SamtoolsRmdupTask</name>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="289"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="293"/>
         <source>Samtool rmdup for %1 </source>
         <translation>Samtool rmdup для %1 </translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="295"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="299"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="301"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="305"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="335"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="339"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="341"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="345"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/library/RmdupBamWorker.cpp" line="343"/>
+        <location filename="../src/library/RmdupBamWorker.cpp" line="347"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -4225,45 +4343,45 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SamtoolsSortTask</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="264"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="268"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="270"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="274"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
 </context>
 <context>
     <name>U2::LocalWorkflow::SamtoolsViewFilterTask</name>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="368"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="371"/>
         <source>Samtool view (filter) for %1 </source>
         <translation>Samtool view (filter) for %1 </translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="374"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="377"/>
         <source>No assembly URL to filter</source>
         <translation>No assembly URL to filter</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="380"/>
-        <source>Directory does not exist: </source>
-        <translation>Directory does not exist: </translation>
+        <location filename="../src/library/FilterBamWorker.cpp" line="383"/>
+        <source>Folder does not exist: </source>
+        <translation>Folder does not exist: </translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="417"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="420"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="423"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="426"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/library/FilterBamWorker.cpp" line="425"/>
+        <location filename="../src/library/FilterBamWorker.cpp" line="428"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
@@ -4319,6 +4437,110 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::SequenceQualityTrimPrompter</name>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="52"/>
+        <source>unset</source>
+        <translation type="unfinished">не указан</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="53"/>
+        <source>from <u>%1</u></source>
+        <translation type="unfinished">из <u>%1</u></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="55"/>
+        <source>Trim input sequence %1 from %2, using the quality threshold.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>U2::LocalWorkflow::SequenceQualityTrimWorker</name>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="73"/>
+        <source>There is no sequence object in the message</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="81"/>
+        <source>An unexpected task type</source>
+        <translation type="unfinished">An unexpected task type</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="86"/>
+        <source>Sequence was filtered out by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="107"/>
+        <source>Sequence Quality Trimmer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="108"/>
+        <source>The workflow scans each input sequence from the end to find the first position where the quality is greater or equal to the minimum quality threshold. Then it trims the sequence to that position. If a the whole sequence has quality less than the threshold or the length of the output sequence less than the minimum length threshold then the sequence is skipped.</source>
+        <translation type="unfinished">Схема сканирует каждую входную последовательность начиная с конца для поиска первой позиции где качество больше или равно минимальному порогу качества. После этого происходит подрезание до этой позиции.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="114"/>
+        <source>Input Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="115"/>
+        <source>Set of sequences to trim by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="116"/>
+        <source>Output Sequence</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="117"/>
+        <source>Trimmed sequences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="132"/>
+        <source>Trimming quality threshold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Quality threshold</source>
+        <translation type="vanished">Порог качества</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="133"/>
+        <source>Quality threshold for trimming.</source>
+        <translation>порог качества для подрезания.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="135"/>
+        <source>Min length</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Min Length</source>
+        <translation type="vanished">Минимальная длина</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="136"/>
+        <source>Too short reads are discarded by the filter.</source>
+        <translation>слишком короткие риды будут удалены.</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="138"/>
+        <source>Trim both ends</source>
+        <translation>Обрезка обоих концов</translation>
+    </message>
+    <message>
+        <location filename="../src/library/SequenceQualityTrimWorker.cpp" line="139"/>
+        <source>Trim the both ends of a read or not. Usually, you need to set <b>True</b> for <b>Sanger</b> sequencing and <b>False</b> for <b>NGS</b></source>
+        <translation>обрезать оба конца рида или нет. Для ридов, полученных методом Сенгера, обычно необходимо установить значение <b>Истина</b>, а для ридов NGS — <b>Ложь</b>.</translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::SequenceSplitPromter</name>
     <message>
         <location filename="../src/library/SequenceSplitWorker.cpp" line="67"/>
@@ -4480,32 +4702,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SequencesToMSAWorker</name>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="119"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="115"/>
         <source>Input sequences</source>
         <translation>Входные последовательности</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="120"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="116"/>
         <source>Sequences to be joined into alignment.</source>
         <translation>Последовательности будут добавлены к выравниванию.</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="123"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="119"/>
         <source>Result alignment</source>
         <translation>Результирующее выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="124"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="120"/>
         <source>Alignment created from the given sequences.</source>
         <translation>Выравнивание созданное из данных последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="137"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="133"/>
         <source>Join Sequences into Alignment</source>
         <translation>Соединение последовательностей в выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/SequencesToMSAWorker.cpp" line="138"/>
+        <location filename="../src/library/SequencesToMSAWorker.cpp" line="134"/>
         <source>Creates multiple sequence alignment from sequences.</source>
         <translation>Создает множественное выравнивание из последовательностей.</translation>
     </message>
@@ -4513,17 +4735,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SortBamPrompter</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="66"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="70"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="67"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="71"/>
         <source> from <u>%1</u></source>
         <translation>из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="69"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="73"/>
         <source>Sort BAM file %1 with SAMTools sort.</source>
         <translation>Сортирует BAM файл %1 при помощи SAMTools.</translation>
     </message>
@@ -4531,92 +4753,92 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::SortBamWorker</name>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="81"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="85"/>
         <source>Sort BAM Files</source>
         <translation>Сортировка BAM-файлов</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="82"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="86"/>
         <source>Sort BAM Files using SAMTools Sort.</source>
         <translation>Сортирует BAM файлы при помощи SAMTools.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="86"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="90"/>
         <source>BAM File</source>
         <translation>BAM файлы</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="87"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="91"/>
         <source>Set of BAM files to sort</source>
         <translation>Набор BAM файлов для сортировки</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="88"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="92"/>
         <source>Sorted BAM File</source>
         <translation>Отсортированный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="89"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="93"/>
         <source>Sorted BAM file</source>
         <translation>Отсортированный BAM файл</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="102"/>
-        <source>Output directory</source>
-        <translation>Выходная директория</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="106"/>
+        <source>Output folder</source>
+        <translation>Выходная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="103"/>
-        <source>Select an output directory. <b>Custom</b> - specify the output directory in the 'Custom directory' parameter. <b>Workflow</b> - internal workflow directory. <b>Input file</b> - the directory of the input file.</source>
-        <translation>выберите выходную директорию. <b>Частная</b> - укажите директорию в параметре 'Частная директория'. <b>Заданная</b> - внутренняя директория дизайнера. <b>Входной файл</b> - директория входного файла.</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="107"/>
+        <source>Select an output folder. <b>Custom</b> - specify the output folder in the 'Custom folder' parameter. <b>Workflow</b> - internal workflow folder. <b>Input file</b> - the folder of the input file.</source>
+        <translation>выберите выходную папку. <b>Частная</b> - укажите папку в параметре 'Частная папка'. <b>Заданная</b> - внутренняя папка дизайнера. <b>Входной файл</b> - папка входного файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="107"/>
-        <source>Custom directory</source>
-        <translation>Частная директория</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="111"/>
+        <source>Custom folder</source>
+        <translation>Частная папка</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="108"/>
-        <source>Select the custom output directory.</source>
-        <translation>Укажите частную выходную директорию.</translation>
+        <location filename="../src/library/SortBamWorker.cpp" line="112"/>
+        <source>Select the custom output folder.</source>
+        <translation>Укажите частную выходную папку.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="110"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="114"/>
         <source>Output BAM name</source>
         <translation>Имя выходного BAM файла</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="111"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="115"/>
         <source>A name of an output BAM file. If default of empty value is provided the output name is the name of the first BAM file with .sorted.bam extention.</source>
         <translation>Имя выходного BAM файла.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="113"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="117"/>
         <source>Build index</source>
         <translation>Построить индекс</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="114"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="118"/>
         <source>Build index for the sorted file with SAMTools index.</source>
         <translation>Построить индекс для отсортированного файла при помощи SAMTools.</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="129"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="133"/>
         <source>Custom</source>
         <translation>Частная</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="127"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="131"/>
         <source>Input file</source>
         <translation>Входной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="128"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="132"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/library/SortBamWorker.cpp" line="171"/>
+        <location filename="../src/library/SortBamWorker.cpp" line="175"/>
         <source>Unknown file format: </source>
         <translation>Unknown file format: </translation>
     </message>
@@ -4760,17 +4982,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::TextReader</name>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="139"/>
+        <location filename="../src/library/DocWorkers.cpp" line="140"/>
         <source>Can't load the object %1 from the database %2</source>
         <translation>Can't load the object %1 from the database %2</translation>
     </message>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="146"/>
+        <location filename="../src/library/DocWorkers.cpp" line="147"/>
         <source>Can't load file %1</source>
         <translation>Не удается загрузить файл %1</translation>
     </message>
     <message>
-        <location filename="../src/library/DocWorkers.cpp" line="157"/>
+        <location filename="../src/library/DocWorkers.cpp" line="158"/>
         <source>Can't load file %1. %2</source>
         <translation>Невозможно загрузить файл %1. %2</translation>
     </message>
@@ -4778,32 +5000,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::WriteAnnotationsPrompter</name>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="516"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="520"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="529"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="533"/>
         <source>default file</source>
         <translation>файл по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="549"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="554"/>
         <source>Save all annotations from <u>%1</u> to %2</source>
         <translation>Сохранить все аннотации из <u>%1</u> в %2</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="552"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="557"/>
         <source> in %1 format.</source>
         <translation> в формат %1.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="553"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="558"/>
         <source> in the </source>
         <translation>в</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="553"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="558"/>
         <source> database.</source>
         <translation> базе данных.</translation>
     </message>
@@ -4811,78 +5033,78 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::LocalWorkflow::WriteAnnotationsWorker</name>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="108"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="109"/>
         <source>Unrecognized formatId: '%1'</source>
         <translation>Unrecognized formatId: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="113"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="114"/>
         <source>Invalid shared DB URL</source>
         <translation>Invalid shared DB URL</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="115"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="116"/>
         <source>Invalid path in shared DB</source>
         <translation>Invalid path in shared DB</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="117"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="118"/>
         <source>Unrecognized data storage: '%1'</source>
         <translation>Unrecognized data storage: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="153"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="154"/>
         <source>Unspecified URL to write</source>
         <translation>Unspecified URL to write</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="172"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="173"/>
         <source>Unrecognized data storage</source>
         <translation>Unrecognized data storage</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="211"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="212"/>
         <source>Annotations name not specified. Default value used: '%1'</source>
         <translation>Annotations name not specified. Default value used: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="260"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="261"/>
         <source>Nothing to write</source>
         <translation>Нет данных для записи</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="379"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="380"/>
         <source>Input annotations</source>
         <translation>Входные аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="380"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="381"/>
         <source>Input annotations which will be written to output file</source>
         <translation>Входные аннотации, которые будут записаны в выходной файл</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="416"/>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="443"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="420"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="447"/>
         <source>Merge annotation tables</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="417"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="421"/>
         <source>If <i>true</i> all annotation tables from dataset will be merged into one. The value of <i>Annotation table name</i> parameter will be used as the name of result annotation table.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="429"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="433"/>
         <source>Annotation table name</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="430"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="434"/>
         <source>The name for the result annotation table that contains merged annotation data from file or dataset.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="444"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="448"/>
         <source>If <i>true</i> all annotation tables from dataset will be merged into one annotation object. The value of <i>Annotation object name</i> parameter will be used as the name of result annotation object.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -4895,42 +5117,42 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation type="vanished">имя для сохранения аннотаций. Этот параметр доступен только для форматов, которые поддерживают сохранение имен аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="450"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="454"/>
         <source>Annotation object name</source>
         <translation>Имя объекта аннотации</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="451"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="455"/>
         <source>Name of the saved annotation object.</source>
         <translation>Имя аннотаций: имя для сохранения объекта аннотации.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="458"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="462"/>
         <source>CSV separator</source>
         <translation>Разделитель CSV</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="459"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="463"/>
         <source>String which separates values in CSV files.</source>
         <translation>символ, который разделяет значения в файлах CSV.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="465"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="469"/>
         <source>Write sequence names</source>
         <translation>Записать имена последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="466"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="470"/>
         <source>Add names of sequences into CSV file.</source>
         <translation>добавить имена последовательностей в CSV-файл.</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="477"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="481"/>
         <source>Write Annotations</source>
         <translation>Запись аннотаций</translation>
     </message>
     <message>
-        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="478"/>
+        <location filename="../src/library/WriteAnnotationsWorker.cpp" line="482"/>
         <source>Writes all supplied annotations to file(s) in selected format.</source>
         <translation>этот элемент записывает все аннотации в файл заданного формата.</translation>
     </message>
@@ -5011,17 +5233,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::NameFilterLayout</name>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="370"/>
+        <location filename="../src/WorkflowSamples.cpp" line="362"/>
         <source>Type to filter by name...</source>
         <translation>Тип для фильтрации по имени...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="372"/>
+        <location filename="../src/WorkflowSamples.cpp" line="364"/>
         <source>Name filter:</source>
         <translation>Имя фильтра:</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSamples.cpp" line="379"/>
+        <location filename="../src/WorkflowSamples.cpp" line="371"/>
         <source>Esc</source>
         <translation>Отмена</translation>
     </message>
@@ -5029,12 +5251,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::ProduceSchemaImageLinkTask</name>
     <message>
-        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="44"/>
+        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="46"/>
         <source>Save workflow image</source>
         <translation>Сохранить схему как изображение</translation>
     </message>
     <message>
-        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="48"/>
+        <location filename="../src/util/SaveSchemaImageUtils.cpp" line="50"/>
         <source>Cannot find workflow: %1</source>
         <translation>Невозможно найти схему: %1</translation>
     </message>
@@ -5076,117 +5298,135 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::SaveWorkflowSceneTask</name>
     <message>
-        <location filename="../src/WorkflowSceneIOTasks.cpp" line="45"/>
+        <location filename="../src/WorkflowSceneIOTasks.cpp" line="46"/>
         <source>Save workflow scene task</source>
         <translation>Сохранить задачу схемы</translation>
     </message>
 </context>
 <context>
+    <name>U2::SequenceQualityTrimTask</name>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="42"/>
+        <source>Trim sequence by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="74"/>
+        <source>The sequence '%1' was filtered out by quality</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/tasks/SequenceQualityTrimTask.cpp" line="126"/>
+        <source>The trimming was skipped for the sequences without quality information.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::StartupDialog</name>
     <message>
         <location filename="../src/StartupDialog.cpp" line="65"/>
-        <source>You have no write access to the directory. Please choose another one.</source>
-        <translation>Вы не имеете прав на запись в директорию. Выберите другую директорию.</translation>
+        <source>You have no write access to the folder. Please choose another one.</source>
+        <translation>Вы не имеете прав на запись в папку. Выберите другую папку.</translation>
     </message>
 </context>
 <context>
     <name>U2::Workflow::CoreLib</name>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="153"/>
+        <location filename="../src/library/CoreLib.cpp" line="151"/>
         <source>Write FASTA</source>
         <translation>Запись FASTA</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="174"/>
+        <location filename="../src/library/CoreLib.cpp" line="172"/>
         <source>Read Plain Text</source>
         <translation>Чтение текста</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="174"/>
-        <source>Reads text from local or remote files.</source>
+        <location filename="../src/library/CoreLib.cpp" line="172"/>
+        <source>Reads text from local or remote files. All text file formats supported by UGENE are allowed as input to this element.</source>
         <translation>этот элемент считывает текстовые данные из файлов, расположенных локально или удаленно.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="194"/>
+        <location filename="../src/library/CoreLib.cpp" line="192"/>
         <source>Write Plain Text</source>
         <translation>Запись текста</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="194"/>
+        <location filename="../src/library/CoreLib.cpp" line="192"/>
         <source>Write strings to a file.</source>
         <translation>этот элемент записывает текстовые данные в файл.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="251"/>
+        <location filename="../src/library/CoreLib.cpp" line="249"/>
         <source>Writes all supplied sequences to file(s) in selected format.</source>
         <translation>этот элемент записывает последовательности в файл(ы) заданного формата.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="282"/>
+        <location filename="../src/library/CoreLib.cpp" line="280"/>
         <source>Save all sequences from <u>%1</u> to <u>%2</u>.</source>
         <translation>Сохранить все последовательности из <u>%1</u> в <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="428"/>
+        <location filename="../src/library/CoreLib.cpp" line="426"/>
         <source>Another worker with this name is already registered: %1</source>
         <translation>Другой эелемент с таким именем уже был зарегистрирован: %1</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="430"/>
+        <location filename="../src/library/CoreLib.cpp" line="428"/>
         <source>The actor '%1' has been already registered</source>
         <translation>Метка '%1' уже была зарегистрирована</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="154"/>
-        <location filename="../src/library/CoreLib.cpp" line="252"/>
+        <location filename="../src/library/CoreLib.cpp" line="152"/>
+        <location filename="../src/library/CoreLib.cpp" line="250"/>
         <location filename="../src/library/GenericReadActor.cpp" line="100"/>
         <source>Sequence</source>
         <translation>Последовательность</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="175"/>
-        <location filename="../src/library/CoreLib.cpp" line="195"/>
+        <location filename="../src/library/CoreLib.cpp" line="173"/>
+        <location filename="../src/library/CoreLib.cpp" line="193"/>
         <source>Plain text</source>
         <translation>Текстовые данные</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="126"/>
+        <location filename="../src/library/CoreLib.cpp" line="124"/>
         <source>Location</source>
         <translation>Путь к файлу</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="178"/>
+        <location filename="../src/library/CoreLib.cpp" line="176"/>
         <source>Reads text from <u>%1</u>.</source>
         <translation>Прочитать текст из <u>%1</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="201"/>
+        <location filename="../src/library/CoreLib.cpp" line="199"/>
         <source>Save text from <u>%1</u> to <u>%2</u>.</source>
         <translation>Сохранить текст из <u>%1</u> в <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="216"/>
+        <location filename="../src/library/CoreLib.cpp" line="214"/>
         <location filename="../src/library/GenericReadActor.cpp" line="160"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="229"/>
+        <location filename="../src/library/CoreLib.cpp" line="227"/>
         <source>Save all MSAs from <u>%1</u> to <u>%2</u>.</source>
         <translation>Сохранить множественные выравнивания из <u>%1</u> в <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="215"/>
+        <location filename="../src/library/CoreLib.cpp" line="213"/>
         <source>Write Alignment</source>
         <translation>Запись множественного выравнивания</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="215"/>
+        <location filename="../src/library/CoreLib.cpp" line="213"/>
         <source>Writes all supplied alignments to file(s) in selected format.</source>
         <translation>этот элемент записывает все входные выравнивания в файл(ы) заданного формата.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="251"/>
+        <location filename="../src/library/CoreLib.cpp" line="249"/>
         <source>Write Sequence</source>
         <translation>Запись последовательности</translation>
     </message>
@@ -5216,29 +5456,29 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
         <translation>Биологические последовательности разных видов (ДНК, РНК, протеины).</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="126"/>
+        <location filename="../src/library/CoreLib.cpp" line="124"/>
         <source>Location for writing data</source>
         <translation>Путь к файлу для записи данных</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="154"/>
+        <location filename="../src/library/CoreLib.cpp" line="152"/>
         <source>A sequence along with FASTA header line.</source>
         <translation>Последовательность вместе с заголовком FASTA.</translation>
     </message>
     <message>
-        <location filename="../src/library/CoreLib.cpp" line="153"/>
+        <location filename="../src/library/CoreLib.cpp" line="151"/>
         <source>Writes all supplied sequences to file(s) in FASTA format.</source>
         <translation>этот элемент записывает все входные данные в файл(ы) в формате FASTA.</translation>
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="149"/>
-        <source>Reads multiple sequence alignments (MSAs) from local or remote files.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</source>
+        <source>Reads multiple sequence alignments (MSAs) from local or remote files. All MSA file formats supported by UGENE are allowed as input to this element.<p>Besides recognized alignment formats, it supports aligning from a set of sequences in a corresponding file (e.g. FASTA or Genbank).</source>
         <translation>этот элемент считывает множественные выравнивания из файлов, расположенных локально или удаленно.
 <p>Помимо чтения готовых выравниваний известных форматов, поддерживается автоматическое составление выравниваний из наборов последовательностей, которые могут быть прочитаны из файла любого подходящего формата (например,  FASTA или Genbank).</translation>
     </message>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="89"/>
-        <source>Reads sequences and annotations if any from local or remote files.</source>
+        <source>Reads sequences and annotations if any from local or remote files. All sequence file formats supported by UGENE (e.g. GenBank, FASTA) are allowed as input to this element.</source>
         <translation>этот элемент загружает последовательности, а также аннотации в случае их наличия, из файлов, расположенных локально или удаленно.</translation>
     </message>
 </context>
@@ -5246,52 +5486,62 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     <name>U2::Workflow::GalaxyConfigConfigurationDialogImpl</name>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="51"/>
-        <source>Set UGENE directory</source>
-        <translation>Установить директорию UGENE</translation>
+        <source>Set UGENE folder</source>
+        <translation>Установить папку UGENE</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="58"/>
-        <source>Set Galaxy directory</source>
-        <translation>Установить директорию Galaxy</translation>
+        <source>Set Galaxy folder</source>
+        <translation>Установить папку Galaxy</translation>
     </message>
     <message>
         <location filename="../src/GalaxyConfigConfigurationDialogImpl.cpp" line="65"/>
-        <source>Set destination directory</source>
-        <translation>Установить директорию назначения</translation>
+        <source>Set destination folder</source>
+        <translation>Установить папку назначения</translation>
     </message>
 </context>
 <context>
     <name>U2::Workflow::PortAliasesConfigurationDialog</name>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="127"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="39"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="40"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="118"/>
         <source>Input</source>
         <translation>Вход</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="129"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="120"/>
         <source>Output</source>
         <translation>Выход</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="246"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="230"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="237"/>
         <location filename="../src/PortAliasesConfigurationDialog.cpp" line="253"/>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="269"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="247"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="231"/>
         <source>There is a port with some aliased slots but without alias name:
 %1</source>
         <translation>Есть порт без имени алиаса слота: %1</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="254"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="238"/>
         <source>Slot aliases of one port must be different!</source>
         <translation>Алиасы слотов одного порта должны быть разными!</translation>
     </message>
     <message>
-        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="270"/>
+        <location filename="../src/PortAliasesConfigurationDialog.cpp" line="254"/>
         <source>Port aliases must be different! Rename one of ports:
 %1 or %2</source>
         <translation>Алиасы портов должны быть разными! Переименуйте алиас одного из портов: %1 или %2</translation>
@@ -5340,6 +5590,19 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
     </message>
 </context>
 <context>
+    <name>U2::Workflow::SchemaAliasesConfigurationDialogImpl</name>
+    <message>
+        <location filename="../src/SchemaAliasesConfigurationDialogImpl.cpp" line="38"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/SchemaAliasesConfigurationDialogImpl.cpp" line="39"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+</context>
+<context>
     <name>U2::Workflow::SeqReadPrompter</name>
     <message>
         <location filename="../src/library/GenericReadActor.cpp" line="104"/>
@@ -5395,17 +5658,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteDocPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="226"/>
+        <location filename="../src/library/DocActors.cpp" line="229"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="261"/>
+        <location filename="../src/library/DocActors.cpp" line="264"/>
         <source> in the </source>
         <translation>в</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="261"/>
+        <location filename="../src/library/DocActors.cpp" line="264"/>
         <source> database.</source>
         <translation> базе данных.</translation>
     </message>
@@ -5413,12 +5676,12 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteFastaPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="200"/>
+        <location filename="../src/library/DocActors.cpp" line="203"/>
         <source>Writes sequence(s) in %1 format to <u>%2</u>.</source>
         <translation>Сохранить последовательности в формате %1 в <u>%2</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="204"/>
+        <location filename="../src/library/DocActors.cpp" line="207"/>
         <source>Writes sequence(s) from <u>%1</u> in %2 format to  <u>%3</u>.</source>
         <translation>Запись последовательностей из <u>%1</u> в <u>%3</u> в формате %2.</translation>
     </message>
@@ -5426,32 +5689,32 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::Workflow::WriteGenbankPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="158"/>
+        <location filename="../src/library/DocActors.cpp" line="161"/>
         <source> sequence from <u>%1</u></source>
         <translation>последовательности из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="161"/>
+        <location filename="../src/library/DocActors.cpp" line="164"/>
         <source> set of annotations from <u>%1</u></source>
         <translation>набора аннотаций из <u>%1</u></translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="170"/>
+        <location filename="../src/library/DocActors.cpp" line="173"/>
         <source>Write sequence(s) in Genbank format to <u>%1</u>.</source>
         <translation>Запись последовательностей в формате Genbank в <u>%1</u>.</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="173"/>
+        <location filename="../src/library/DocActors.cpp" line="176"/>
         <source>each %1 and %2</source>
         <translation>каждые %1 и %2</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="175"/>
+        <location filename="../src/library/DocActors.cpp" line="178"/>
         <source>each </source>
         <translation>каждые</translation>
     </message>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="178"/>
+        <location filename="../src/library/DocActors.cpp" line="181"/>
         <source>Write %1 in Genbank format, to <u>%2</u>.</source>
         <translation>Запись %1 в формате Genbank в <u>%2</u>.</translation>
     </message>
@@ -5459,68 +5722,68 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerPlugin</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="84"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="75"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="84"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="75"/>
         <source>Workflow Designer allows to create complex computational workflows.</source>
         <translation>Дизайнер вычислительных схем позволяет создавать и переиспользовать многоэтапные алгоритмы обработки данных.
 Алгоритмы создаются в виде визуальных диаграмм потоков данных, не требуя навыков программирования или знания языков программирования.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="157"/>
         <source>Runs the specified task.</source>
         <translation>Выполняет указанную задачу.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="158"/>
         <source>Runs the specified task. A path to a user-defined UGENE workflow be used as a task name.</source>
         <translation>Запускает указанную задачу. Путь до пользовательской UGENE схемы будет использован для имени задачи.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="160"/>
         <source><task_name> [<task_parameter>=value ...]</source>
         <translation><task_name> [<task_parameter>=value ...]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="166"/>
         <source>Prints the content of the specified slot.</source>
         <translation>Печатает содержимое указанного слота.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="176"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="167"/>
         <source>Prints the content of the specified slot. The incoming/outcoming content of specified slot is printed to the standart output.</source>
         <translation>Печатает содержимое указанного слота. Входное/выходное содержимое указанного слота печатается стандартно.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="178"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="169"/>
         <source><actor_name>.<port_name>.<slot_name></source>
         <translation><actor_name>.<port_name>.<slot_name></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="183"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="174"/>
         <source>Creates new Galaxy tool config.</source>
         <translation>Создает новую конфигурацию Galaxy-инструмента.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="184"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="175"/>
         <source>Creates new Galaxy tool config from existing workflow. Paths to UGENE and Galaxy can be set</source>
         <translation>Создает новую конфигурацию для инструмента Galaxy из существующей схемы. Пути для UGENE и Galaxy могут быть установлены</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="186"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="177"/>
         <source><uwl-file> [--ugene-path=value] [--galaxy-path=value]</source>
         <translation><uwl-file> [--ugene-path=value] [--galaxy-path=value]</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="197"/>
         <source>Close Designer</source>
         <translation>Закрытие дизайнера схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="206"/>
         <source>Close Designer canceled</source>
         <translation>Закрытие дизайнера схем отменено</translation>
     </message>
@@ -5528,97 +5791,101 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDesignerService</name>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="224"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="215"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="264"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="255"/>
         <source>Workflow Designer...</source>
         <translation>Дизайнер вычислительных схем...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="274"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="265"/>
         <source>New workflow...</source>
         <translation>Новая схема...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="305"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="296"/>
         <source>Can not open Workflow Designer. Please, try to reload UGENE.</source>
         <translation>Невозможно открыть дизайнер вычислительных схем. Попробуйте перезагрузить UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="338"/>
         <source>Reads quality control and alignment</source>
-        <translation>Контроль качества коротких прочтений и выравнивание</translation>
+        <translation type="vanished">Контроль качества коротких прочтений и выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="340"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="329"/>
         <source>Reads quality control...</source>
         <translation>Контроль качества коротких прочтений...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="342"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="331"/>
+        <source>Filter short scaffolds...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="333"/>
         <source>Raw DNA-Seq data processing</source>
         <translation>Обработка сырых данных секвенирования ДНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="344"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="335"/>
         <source>Variant calling</source>
         <translation>Поиск вариаций</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="346"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="337"/>
         <source>Variant calling and effects prediction</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="348"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="339"/>
         <source>Annotate variants and predict effects</source>
         <translation>Аннотация вариаций и предсказание эффекта</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="350"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="341"/>
         <source>Raw RNA-Seq data processing</source>
         <translation>Обработка сырых данных секвенирования РНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="352"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="343"/>
         <source>RNA-Seq data analysis</source>
         <translation>Анализ данных секвенирования РНК</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="354"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="345"/>
         <source>Extract transcript sequences</source>
         <translation>Извлечение последовательности транскриптов</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="356"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="347"/>
         <source>Raw ChIP-Seq data processing</source>
         <translation>Обработка сырых данных ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="349"/>
         <source>ChIP-Seq data analysis</source>
         <translation>Анализ данных ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="360"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="351"/>
         <source>ChIP-Seq coverage</source>
         <translation>Покрытие ChIP-Seq</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="362"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="353"/>
         <source>Extract coverage from assemblies</source>
         <translation>Расчет покрытия по сборке</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="364"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="355"/>
         <source>Extract consensus from assemblies</source>
         <translation>Извлечение консенсуса из сборки</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDesignerPlugin.cpp" line="367"/>
+        <location filename="../src/WorkflowDesignerPlugin.cpp" line="358"/>
         <source>Remote NCBI BLAST</source>
         <translation>Удаленный поиск с помощью NCBI BLAST</translation>
     </message>
@@ -5626,19 +5893,19 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowDocFormat</name>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="83"/>
-        <location filename="../src/WorkflowDocument.cpp" line="91"/>
-        <location filename="../src/WorkflowDocument.cpp" line="116"/>
+        <location filename="../src/WorkflowDocument.cpp" line="82"/>
+        <location filename="../src/WorkflowDocument.cpp" line="90"/>
+        <location filename="../src/WorkflowDocument.cpp" line="115"/>
         <source>Workflow</source>
         <translation>Схема</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="85"/>
+        <location filename="../src/WorkflowDocument.cpp" line="84"/>
         <source>WorkflowDoc is a format used for creating/editing/storing/retrievingworkflow with the text file</source>
         <translation>Формат схем это формат используемый для создания/редактирования/восстановления схемы с текстовым файлом</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="108"/>
+        <location filename="../src/WorkflowDocument.cpp" line="107"/>
         <source>Invalid header. %1 expected</source>
         <translation>Неверный заголовок. Ожидается %1</translation>
     </message>
@@ -5646,69 +5913,69 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowEditor</name>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="285"/>
+        <location filename="../src/WorkflowEditor.cpp" line="271"/>
         <source>Element name:</source>
         <translation>Имя элемента: </translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="436"/>
+        <location filename="../src/WorkflowEditor.cpp" line="422"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="438"/>
+        <location filename="../src/WorkflowEditor.cpp" line="424"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="446"/>
+        <location filename="../src/WorkflowEditor.cpp" line="432"/>
         <source>Select an element to inspect.</source>
         <translation>Выберите элемент для просмотра или редактирования.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="288"/>
+        <location filename="../src/WorkflowEditor.cpp" line="274"/>
         <source>To configure the parameters of the element go to "Parameters" area below.</source>
         <translation>Параметры элемента можно отредактировать в таблице, расположенной ниже.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="412"/>
+        <location filename="../src/WorkflowEditor.cpp" line="398"/>
         <source>You can observe data slots of the port and configure connections if any in the "Parameters" widget suited below.</source>
         <translation>Слоты данных, входящие в порт, указаны в таблице, расположенной немного ниже.
 <br>Там же можно изменить привязку данных в связях, если они есть.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="407"/>
+        <location filename="../src/WorkflowEditor.cpp" line="393"/>
         <source><b>%1 "%2"</b> of task "%3":<br>%4<br><br>%5</source>
         <translation><b>%1 "%2"</b> задачи "%3":<br>%4<br><br>%5</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="219"/>
-        <location filename="../src/WorkflowEditor.cpp" line="358"/>
+        <location filename="../src/WorkflowEditor.cpp" line="205"/>
+        <location filename="../src/WorkflowEditor.cpp" line="344"/>
         <source>Parameters</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="408"/>
+        <location filename="../src/WorkflowEditor.cpp" line="394"/>
         <source>Output port</source>
         <translation>Выходной порт</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditor.cpp" line="408"/>
+        <location filename="../src/WorkflowEditor.cpp" line="394"/>
         <source>Input port</source>
         <translation>Входной порт</translation>
     </message>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="208"/>
+        <location filename="../src/ActorCfgModel.cpp" line="210"/>
         <source>Name</source>
         <translation>Имя</translation>
     </message>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="210"/>
+        <location filename="../src/ActorCfgModel.cpp" line="212"/>
         <source>Value</source>
         <translation>Значение</translation>
     </message>
     <message>
-        <location filename="../src/ActorCfgModel.cpp" line="212"/>
+        <location filename="../src/ActorCfgModel.cpp" line="214"/>
         <source>Script</source>
         <translation>Скрипт</translation>
     </message>
@@ -5716,17 +5983,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowInvestigationWidgetsController</name>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="122"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="110"/>
         <source>Messages from '</source>
         <translation>Сообщения из '</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="123"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="111"/>
         <source>' to '</source>
         <translation>' в '</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="123"/>
+        <location filename="../src/WorkflowInvestigationWidgetsController.cpp" line="111"/>
         <source>'</source>
         <translation>'</translation>
     </message>
@@ -5734,7 +6001,17 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowMetaDialog</name>
     <message>
-        <location filename="../src/WorkflowMetaDialog.cpp" line="93"/>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="47"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="48"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/WorkflowMetaDialog.cpp" line="95"/>
         <source>Save workflow to file</source>
         <translation>Сохранить схему в файл</translation>
     </message>
@@ -5742,27 +6019,27 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowPaletteElements</name>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="560"/>
+        <location filename="../src/WorkflowPalette.cpp" line="571"/>
         <source>Can't remove element %1</source>
         <translation>Не могу удалить элемент %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="582"/>
+        <location filename="../src/WorkflowPalette.cpp" line="593"/>
         <source>Expand all</source>
         <translation>Развернуть все</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="583"/>
+        <location filename="../src/WorkflowPalette.cpp" line="594"/>
         <source>Collapse all</source>
         <translation>Свернуть все</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="586"/>
+        <location filename="../src/WorkflowPalette.cpp" line="597"/>
         <source>Edit</source>
         <translation>Изменить</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowPalette.cpp" line="587"/>
+        <location filename="../src/WorkflowPalette.cpp" line="598"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
@@ -5781,37 +6058,37 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowRunFromCMDLineBase</name>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="49"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="50"/>
         <source>Workflow run from cmdline</source>
         <translation>Запуск схемы из командной строки</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="71"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="77"/>
         <source>no task to run</source>
         <translation>нет задач для выполнения</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="88"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="94"/>
         <source>Cannot find workflow: %1</source>
         <translation>Невозможно найти схему: %1</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="117"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
         <source>alias '%1' not set in workflow</source>
         <translation>алиас '%1' не установлен в схеме</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="138"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="144"/>
         <source>Incorrect value for '%1', null or default value passed to workflow</source>
         <translation>Некорректное значение '%1', нулевое или дефолтное значение передано схеме</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="123"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="129"/>
         <source>actor parameter '%1' not found</source>
         <translation>текущий параметр '%1' не найден</translation>
     </message>
     <message>
-        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="130"/>
+        <location filename="../src/cmdline/WorkflowCMDLineTasks.cpp" line="136"/>
         <source>cannot parse value from '%1'</source>
         <translation>невозможно разобрать значение из '%1'</translation>
     </message>
@@ -5819,22 +6096,22 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowScene</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2536"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2547"/>
         <source>Open document(s)</source>
         <translation>Открыть документы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2707"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2696"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2707"/>
         <source>Unable to open specified documents. Watch log for details.</source>
         <translation>Невозможно открыть указанные документы. Посмотрите лог для выяснения деталей.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2778"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2790"/>
         <source>Drop an element from the palette here</source>
         <translation>Перенесите сюда элемент из палитры</translation>
     </message>
@@ -5878,7 +6155,7 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowUtils</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="927"/>
+        <location filename="../src/WorkflowViewController.cpp" line="928"/>
         <source>UGENE workflow element</source>
         <translation type="unfinished">UGENE элемент </translation>
     </message>
@@ -5886,373 +6163,373 @@ TCCTTACTGTCTGAGCAATGGGATTCCATCTTTTACGATCTAGACATGGCT
 <context>
     <name>U2::WorkflowView</name>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="325"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2333"/>
+        <location filename="../src/WorkflowViewController.cpp" line="326"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2344"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер схем</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="413"/>
-        <location filename="../src/WorkflowViewController.cpp" line="549"/>
+        <location filename="../src/WorkflowViewController.cpp" line="414"/>
+        <location filename="../src/WorkflowViewController.cpp" line="550"/>
         <source>Error list</source>
         <translation>Проблемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="441"/>
-        <location filename="../src/WorkflowViewController.cpp" line="443"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2256"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2258"/>
+        <location filename="../src/WorkflowViewController.cpp" line="442"/>
+        <location filename="../src/WorkflowViewController.cpp" line="444"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2267"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2269"/>
         <source>Warning!</source>
         <translation>Предупреждение!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="447"/>
         <source>Undefined workflow format for %1</source>
         <translation>Неизвестный workflow формат в %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="447"/>
         <source>file</source>
         <translation>файл</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="678"/>
+        <location filename="../src/WorkflowViewController.cpp" line="679"/>
         <source>&Save workflow as...</source>
         <translation>&Сохранить схему как...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="683"/>
+        <location filename="../src/WorkflowViewController.cpp" line="684"/>
         <source>Show wizard</source>
         <translation>Показать визард</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="712"/>
+        <location filename="../src/WorkflowViewController.cpp" line="713"/>
         <source>Delete</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="932"/>
-        <location filename="../src/WorkflowViewController.cpp" line="957"/>
+        <location filename="../src/WorkflowViewController.cpp" line="933"/>
+        <location filename="../src/WorkflowViewController.cpp" line="958"/>
         <source>Can't load element.</source>
         <translation>Невозможно загрузить элемент.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="997"/>
+        <location filename="../src/WorkflowViewController.cpp" line="998"/>
         <source>Can't remove element %1</source>
         <translation>Не могу удалить элемент %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1314"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1375"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1315"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1376"/>
         <source>Element style</source>
         <translation>Стиль</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1802"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1830"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1803"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1831"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="755"/>
+        <location filename="../src/WorkflowViewController.cpp" line="756"/>
         <source>Select all elements</source>
         <translation>Выбрать все элементы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="746"/>
+        <location filename="../src/WorkflowViewController.cpp" line="747"/>
         <source>Import workflow to element...</source>
         <translation>Импортировать схему в элемент...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="750"/>
+        <location filename="../src/WorkflowViewController.cpp" line="751"/>
         <source>Create Galaxy tool config...</source>
         <translation>Создать конфигурацию Galaxy инструмента...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="758"/>
+        <location filename="../src/WorkflowViewController.cpp" line="759"/>
         <source>&Copy</source>
         <translation>&Копировать</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="766"/>
+        <location filename="../src/WorkflowViewController.cpp" line="767"/>
         <source>Cu&t</source>
         <translation>&Вырезать</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="773"/>
+        <location filename="../src/WorkflowViewController.cpp" line="774"/>
         <source>&Paste</source>
         <translation>&Вставить</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="82"/>
-        <location filename="../src/WorkflowViewController.cpp" line="781"/>
+        <location filename="../src/WorkflowViewController.cpp" line="782"/>
         <source>Minimal</source>
         <translation>Упрощённый</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsController.cpp" line="83"/>
-        <location filename="../src/WorkflowViewController.cpp" line="787"/>
+        <location filename="../src/WorkflowViewController.cpp" line="788"/>
         <source>Extended</source>
         <translation>Развёрнутый</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="928"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1281"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1385"/>
+        <location filename="../src/WorkflowViewController.cpp" line="929"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1282"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1386"/>
         <source>Add element</source>
         <translation>Добавить элемент</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="611"/>
+        <location filename="../src/WorkflowViewController.cpp" line="612"/>
         <source>&Run workflow</source>
         <translation>&Запустить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="618"/>
+        <location filename="../src/WorkflowViewController.cpp" line="619"/>
         <source>S&top workflow</source>
         <translation>О&тменить выполнение схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="625"/>
+        <location filename="../src/WorkflowViewController.cpp" line="626"/>
         <source>&Validate workflow</source>
         <translation>&Проверить валидность схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="631"/>
+        <location filename="../src/WorkflowViewController.cpp" line="632"/>
         <source>&Estimate workflow</source>
         <translation>&Оценить время на выполнение схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="637"/>
+        <location filename="../src/WorkflowViewController.cpp" line="638"/>
         <source>&Pause workflow</source>
         <translation>&Остановить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="645"/>
+        <location filename="../src/WorkflowViewController.cpp" line="646"/>
         <source>&Next step</source>
         <translation>&Следующий шаг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="655"/>
+        <location filename="../src/WorkflowViewController.cpp" line="656"/>
         <source>Process one &message</source>
         <translation>По одному &сообщению</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="665"/>
+        <location filename="../src/WorkflowViewController.cpp" line="666"/>
         <source>&New workflow...</source>
         <translation>&Новая схема...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="671"/>
+        <location filename="../src/WorkflowViewController.cpp" line="672"/>
         <source>&Save workflow</source>
         <translation>&Сохранить схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="701"/>
+        <location filename="../src/WorkflowViewController.cpp" line="702"/>
         <source>&Load workflow</source>
         <translation>&Загрузка схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="707"/>
+        <location filename="../src/WorkflowViewController.cpp" line="708"/>
         <source>&Export workflow as image</source>
         <translation>&Экспорт схемы в изображение</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="716"/>
+        <location filename="../src/WorkflowViewController.cpp" line="717"/>
         <source>Dashboards manager</source>
         <translation>Менеджер панелей</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="737"/>
+        <location filename="../src/WorkflowViewController.cpp" line="738"/>
         <source>Set parameter aliases...</source>
         <translation>Выбрать алиасы параметров...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="742"/>
+        <location filename="../src/WorkflowViewController.cpp" line="743"/>
         <source>Set port and slot aliases...</source>
         <translation>Выбрать алиасы портов и слотов...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="795"/>
+        <location filename="../src/WorkflowViewController.cpp" line="796"/>
         <source>Hide scripting options</source>
         <translation>Не показывать опции скриптинга</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="802"/>
+        <location filename="../src/WorkflowViewController.cpp" line="803"/>
         <source>Show scripting options</source>
         <translation>Показывать опции скриптинга</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="815"/>
+        <location filename="../src/WorkflowViewController.cpp" line="816"/>
         <source>Create element with script...</source>
         <translation>Создать элемент при помощи скрипта...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="820"/>
+        <location filename="../src/WorkflowViewController.cpp" line="821"/>
         <source>Edit script of the element...</source>
         <translation>Изменить скрипт элемента...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="826"/>
+        <location filename="../src/WorkflowViewController.cpp" line="827"/>
         <source>Create element with command line tool...</source>
-        <translation>Создать элемент при помощи инструмента командной строки...</translation>
+        <translation>Создать элемент при помощи командной строки...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="831"/>
+        <location filename="../src/WorkflowViewController.cpp" line="832"/>
         <source>Edit configuration...</source>
         <translation>Изменить конфигурацию...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="837"/>
+        <location filename="../src/WorkflowViewController.cpp" line="838"/>
         <source>Add element with command line tool...</source>
-        <translation>Добавить элемент при помощи инструмента командной строки...</translation>
+        <translation>Добавить элемент при помощи командной строки...</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1420"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1421"/>
         <source>Empty workflow!</source>
         <translation>Пустая схема!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1420"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1421"/>
         <source>Nothing to run: empty workflow</source>
         <translation>Выполнять нечего: схема пуста</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1445"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1446"/>
         <source>Workflow cannot be executed</source>
         <translation>Схема не может быть выполнена</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1446"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1447"/>
         <source>Please fix issues listed in the error list (located under workflow).</source>
         <translation>Исправьте ошибки представленные в списке ошибок (располодженный под схемой).</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1451"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1452"/>
         <source>Well done!</source>
         <translation>Готово!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1453"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1454"/>
         <source>There are non-critical warnings.</source>
         <translation>Нет критических ошибок.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1455"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1456"/>
         <source>Workflow is valid</source>
         <translation>Схема валидна</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1697"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1698"/>
         <source>Aliases for workflow parameters should be different!</source>
         <translation>Алиасы для параметров схемы должны бть разными!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1730"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1731"/>
         <source>Workflow does not contain any parameter aliases</source>
         <translation>Схема не содержит алиасов параметров</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1744"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1745"/>
         <source>Internal error!</source>
         <translation>Веутренняя ошибка!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1744"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1745"/>
         <source>Can not create Galaxy config</source>
         <translation>Невозможно создать конфигурацию Galaxy</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1800"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1801"/>
         <source>The workflow contains a wizard. Sorry, but current version of UGENE doesn't support of wizards in the includes.</source>
         <translation>Схема содержит визард. Текущая версия UGENE не поддерживает визарды в схемах.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2136"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2147"/>
         <source>File is not found: %1</source>
         <translation>Файл не найден: %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2174"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2185"/>
         <source>Show dashboard</source>
         <translation>Показать панель</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2183"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2194"/>
         <source>Show workflow</source>
         <translation>Показать схему</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2229"/>
-        <location filename="../src/WorkflowViewController.cpp" line="2232"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2240"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2243"/>
         <source>Open workflow file</source>
         <translation>Открыть файл схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2270"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2281"/>
         <source>New workflow</source>
         <translation>Новая схема</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2334"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2345"/>
         <source>The workflow has been modified.
 Do you want to save changes?</source>
         <translation>Схема была изменена. Вы хотите сохранить изменения?</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1320"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1321"/>
         <source>Scripting mode</source>
         <translation>Скриптинг</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1368"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1369"/>
         <source>Element properties</source>
         <translation>Свойства элемента</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1449"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1450"/>
         <source>Workflow is valid.
 </source>
         <translation>Схема валидна.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1697"/>
-        <location filename="../src/WorkflowViewController.cpp" line="1730"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1698"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1731"/>
         <source>Bad input!</source>
         <translation>Неверные входные данные!</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="2302"/>
+        <location filename="../src/WorkflowViewController.cpp" line="2313"/>
         <source>Workflow Designer - %1</source>
         <translation>Дизайнер схем - %1</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="1846"/>
+        <location filename="../src/WorkflowViewController.cpp" line="1850"/>
         <source>Drag the palette element to the scene or just click on the scene to add the element.</source>
         <translation>Перетащите элемент из палитры на плоскость или просто кликните мышью в нужном месте схемы.</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="394"/>
+        <location filename="../src/WorkflowViewController.cpp" line="395"/>
         <source>Elements</source>
         <translation>Элементы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="397"/>
+        <location filename="../src/WorkflowViewController.cpp" line="398"/>
         <source>Samples</source>
         <translation>Примеры</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowViewController.cpp" line="810"/>
+        <location filename="../src/WorkflowViewController.cpp" line="811"/>
         <source>Unlock Scene</source>
         <translation>Разблокировать схему</translation>
     </message>
     <message>
-        <location filename="../src/SceneSerializer.cpp" line="120"/>
+        <location filename="../src/SceneSerializer.cpp" line="122"/>
         <source>Invalid content: duplicate process %1</source>
         <translation>Ошибка: дубликат процесса %1</translation>
     </message>
     <message>
-        <location filename="../src/SceneSerializer.cpp" line="126"/>
+        <location filename="../src/SceneSerializer.cpp" line="128"/>
         <source>Invalid content: unknown process type %1</source>
         <translation>Ошибка: неизвестный тип задачи "%1"</translation>
     </message>
@@ -6260,12 +6537,12 @@ Do you want to save changes?</source>
 <context>
     <name>U2::WorkflowViewFactory</name>
     <message>
-        <location filename="../src/WorkflowDocument.cpp" line="161"/>
+        <location filename="../src/WorkflowDocument.cpp" line="160"/>
         <source>Open multiple views</source>
         <translation>Открытие нескольких окон</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowDocument.h" line="86"/>
+        <location filename="../src/WorkflowDocument.h" line="85"/>
         <source>Workflow Designer</source>
         <translation>Дизайнер вычислительных схем</translation>
     </message>
@@ -6293,12 +6570,12 @@ Do you want to save changes?</source>
         <translation>Параметры</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditorWidget.ui" line="273"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="276"/>
         <source>Input data</source>
         <translation>Входные данные</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowEditorWidget.ui" line="320"/>
+        <location filename="../src/WorkflowEditorWidget.ui" line="323"/>
         <source>Output data</source>
         <translation>Выходные данные</translation>
     </message>
@@ -6364,24 +6641,45 @@ Do you want to save changes?</source>
         <translation>Включить отладку</translation>
     </message>
     <message>
+        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
+        <source>Directories</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="124"/>
         <source>Use directory for output files</source>
-        <translation>Использовать директорию для выходных файлов</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="145"/>
         <source>Directory for custom elements with scripts</source>
-        <translation>Директория для элементов пользователя со скриптами</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="166"/>
         <source>Directory for custom elements with command line tools</source>
-        <translation>Директория для элементов пользователя с внешними утилитами</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="187"/>
         <source>Directory for included schema elements</source>
-        <translation>Директория для включенных элементов схемы</translation>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <source>Use folder for output files</source>
+        <translation type="vanished">Использовать папку для выходных файлов</translation>
+    </message>
+    <message>
+        <source>Folder for custom elements with scripts</source>
+        <translation type="vanished">Папка для элементов пользователя со скриптами</translation>
+    </message>
+    <message>
+        <source>Folder for custom elements with command line tools</source>
+        <translation type="vanished">Папка для элементов пользователя с внешними утилитами</translation>
+    </message>
+    <message>
+        <source>Folder for included schema elements</source>
+        <translation type="vanished">Папка для включенных элементов схемы</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="26"/>
@@ -6394,9 +6692,8 @@ Do you want to save changes?</source>
         <translation>Отображать прогресс выполнения схемы</translation>
     </message>
     <message>
-        <location filename="../src/WorkflowSettingsWidget.ui" line="118"/>
-        <source>Directories</source>
-        <translation>Директории</translation>
+        <source>Folders</source>
+        <translation type="vanished">Папки</translation>
     </message>
     <message>
         <location filename="../src/WorkflowSettingsWidget.ui" line="33"/>
@@ -6412,7 +6709,7 @@ Do you want to save changes?</source>
 <context>
     <name>WriteDocPrompter</name>
     <message>
-        <location filename="../src/library/DocActors.cpp" line="188"/>
+        <location filename="../src/library/DocActors.cpp" line="191"/>
         <source>default file</source>
         <translation>файл по умолчанию</translation>
     </message>
diff --git a/src/plugins/workflow_designer/workflow_designer.pri b/src/plugins/workflow_designer/workflow_designer.pri
index 9574b82..61f9ef4 100644
--- a/src/plugins/workflow_designer/workflow_designer.pri
+++ b/src/plugins/workflow_designer/workflow_designer.pri
@@ -6,5 +6,4 @@ PLUGIN_VENDOR=Unipro
 
 include( ../../ugene_plugin_common.pri )
 
-QT += scripttools
-greaterThan(QT_MAJOR_VERSION, 4): QT += webkitwidgets printsupport
+QT += scripttools webkitwidgets printsupport
diff --git a/src/plugins/workflow_designer/workflow_designer.pro b/src/plugins/workflow_designer/workflow_designer.pro
index 8a6b9e9..5088680 100644
--- a/src/plugins/workflow_designer/workflow_designer.pro
+++ b/src/plugins/workflow_designer/workflow_designer.pro
@@ -40,7 +40,6 @@ HEADERS += src/ActorCfgFilterProxyModel.h \
            src/debug_messages_translation/SequenceMessageTranslator.h \
            src/debug_messages_translation/VariationTrackMessageTranslator.h \
            src/debug_messages_translation/WorkflowDebugMessageParserImpl.h \
-           src/library/AlignToReferenceWorker.h \
            src/library/AminoTranslationWorker.h \
            src/library/AssemblyToSequenceWorker.h \
            src/library/BaseDocWriter.h \
@@ -81,6 +80,7 @@ HEADERS += src/ActorCfgFilterProxyModel.h \
            src/library/RmdupBamWorker.h \
            src/library/SchemaWorker.h \
            src/library/ScriptWorker.h \
+           src/library/SequenceQualityTrimWorker.h \
            src/library/SequenceSplitWorker.h \
            src/library/SequencesToMSAWorker.h \
            src/library/StatisticWorkers.h \
@@ -91,6 +91,7 @@ HEADERS += src/ActorCfgFilterProxyModel.h \
            src/library/WriteVariationWorker.h \
            src/tasks/ReadAssemblyTask.h \
            src/tasks/RenameChromosomeInVariationTask.h \
+           src/tasks/SequenceQualityTrimTask.h \
            src/util/DatasetsCountValidator.h \
            src/util/DatasetValidator.h \
            src/util/GrouperActionUtils.h \
@@ -152,7 +153,6 @@ SOURCES += src/ActorCfgFilterProxyModel.cpp \
            src/debug_messages_translation/SequenceMessageTranslator.cpp \
            src/debug_messages_translation/VariationTrackMessageTranslator.cpp \
            src/debug_messages_translation/WorkflowDebugMessageParserImpl.cpp \
-           src/library/AlignToReferenceWorker.cpp \
            src/library/AminoTranslationWorker.cpp \
            src/library/AssemblyToSequenceWorker.cpp \
            src/library/BaseDocWriter.cpp \
@@ -193,6 +193,7 @@ SOURCES += src/ActorCfgFilterProxyModel.cpp \
            src/library/RmdupBamWorker.cpp \
            src/library/SchemaWorker.cpp \
            src/library/ScriptWorker.cpp \
+           src/library/SequenceQualityTrimWorker.cpp \
            src/library/SequenceSplitWorker.cpp \
            src/library/SequencesToMSAWorker.cpp \
            src/library/StatisticWorkers.cpp \
@@ -203,6 +204,7 @@ SOURCES += src/ActorCfgFilterProxyModel.cpp \
            src/library/WriteVariationWorker.cpp \
            src/tasks/ReadAssemblyTask.cpp \
            src/tasks/RenameChromosomeInVariationTask.cpp \
+           src/tasks/SequenceQualityTrimTask.cpp \
            src/util/DatasetsCountValidator.cpp \
            src/util/DatasetValidator.cpp \
            src/util/GrouperActionUtils.cpp \
diff --git a/src/plugins/workflow_dump/src/WorkflowDumpPlugin.cpp b/src/plugins/workflow_dump/src/WorkflowDumpPlugin.cpp
index 1d6d025..83a3ffa 100644
--- a/src/plugins/workflow_dump/src/WorkflowDumpPlugin.cpp
+++ b/src/plugins/workflow_dump/src/WorkflowDumpPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins/workflow_dump/src/WorkflowDumpPlugin.h b/src/plugins/workflow_dump/src/WorkflowDumpPlugin.h
index c16c760..19d726d 100644
--- a/src/plugins/workflow_dump/src/WorkflowDumpPlugin.h
+++ b/src/plugins/workflow_dump/src/WorkflowDumpPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/BallPlugin.cpp b/src/plugins_3rdparty/ball/src/BallPlugin.cpp
index 301e45d..e3cc516 100644
--- a/src/plugins_3rdparty/ball/src/BallPlugin.cpp
+++ b/src/plugins_3rdparty/ball/src/BallPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/BallPlugin.h b/src/plugins_3rdparty/ball/src/BallPlugin.h
index d326787..36f2c75 100644
--- a/src/plugins_3rdparty/ball/src/BallPlugin.h
+++ b/src/plugins_3rdparty/ball/src/BallPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/SAS.cpp b/src/plugins_3rdparty/ball/src/SAS.cpp
index 6bab8ec..cc1037a 100644
--- a/src/plugins_3rdparty/ball/src/SAS.cpp
+++ b/src/plugins_3rdparty/ball/src/SAS.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/SAS.h b/src/plugins_3rdparty/ball/src/SAS.h
index 52df92c..5b60ba4 100644
--- a/src/plugins_3rdparty/ball/src/SAS.h
+++ b/src/plugins_3rdparty/ball/src/SAS.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/SES.cpp b/src/plugins_3rdparty/ball/src/SES.cpp
index 5c31ace..c2b3e12 100644
--- a/src/plugins_3rdparty/ball/src/SES.cpp
+++ b/src/plugins_3rdparty/ball/src/SES.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/SES.h b/src/plugins_3rdparty/ball/src/SES.h
index 408e8f5..0c867b0 100644
--- a/src/plugins_3rdparty/ball/src/SES.h
+++ b/src/plugins_3rdparty/ball/src/SES.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ball/src/include/BALL/CONFIG/config.h b/src/plugins_3rdparty/ball/src/include/BALL/CONFIG/config.h
index 4adb5e2..38820ee 100644
--- a/src/plugins_3rdparty/ball/src/include/BALL/CONFIG/config.h
+++ b/src/plugins_3rdparty/ball/src/include/BALL/CONFIG/config.h
@@ -4,7 +4,7 @@
 #ifndef BALL_CONFIG_CONFIG_H
 #define BALL_CONFIG_CONFIG_H
 
-#include <QtCore/QtGlobal>
+#include <QtGlobal>
 
 #ifdef _WINDOWS
 typedef signed char             int8_t;
@@ -31,7 +31,7 @@ typedef unsigned long long int  uint64_t;
 /* #undef BALL_DEBUG */
 /* #undef BALL_NO_INLINE_FUNCTIONS */
 
-// The path to the directory where BALL is installed.
+// The path to the folder where BALL is installed.
 //#define BALL_PATH "/usr/local"
 //#define BALL_DATA_PATH "/usr/local/share/BALL/data"
 
diff --git a/src/plugins_3rdparty/ball/src/source/DATATYPE/string.cpp b/src/plugins_3rdparty/ball/src/source/DATATYPE/string.cpp
index 317dc46..eff131b 100644
--- a/src/plugins_3rdparty/ball/src/source/DATATYPE/string.cpp
+++ b/src/plugins_3rdparty/ball/src/source/DATATYPE/string.cpp
@@ -4,8 +4,8 @@
 
 #include <BALL/DATATYPE/string.h>
 
-#include <QtCore/QString>
-#include <QtCore/QByteArray>
+#include <QString>
+#include <QByteArray>
 
 #include <cstdio>
 #include <cstdarg>
diff --git a/src/plugins_3rdparty/gor4/src/GorIVAlgTask.cpp b/src/plugins_3rdparty/gor4/src/GorIVAlgTask.cpp
index 6776d5b..7ba7f30 100644
--- a/src/plugins_3rdparty/gor4/src/GorIVAlgTask.cpp
+++ b/src/plugins_3rdparty/gor4/src/GorIVAlgTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,12 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/Counter.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2View/SecStructPredictUtils.h>
+
 #include "GorIVAlgTask.h"
 #include "gor.h"
 
@@ -64,8 +66,8 @@ void GorIVAlgTask::run()
 
     //TODO: BUG-0000808
     QMutexLocker runLocker( &runLock );
-    runGORIV(seqDb, strucDb, sequence.data(), sequence.size() - 1, output.data());
-
+    runGORIV(seqDb, strucDb, sequence.data(), sequence.size() - 1, output.data(), stateInfo);
+    CHECK_OP(stateInfo, );
     results = SecStructPredictUtils::saveAlgorithmResultsAsAnnotations(output, GORIV_ANNOTATION_NAME);
 }
 
diff --git a/src/plugins_3rdparty/gor4/src/GorIVAlgTask.h b/src/plugins_3rdparty/gor4/src/GorIVAlgTask.h
index dede85a..6f06a58 100644
--- a/src/plugins_3rdparty/gor4/src/GorIVAlgTask.h
+++ b/src/plugins_3rdparty/gor4/src/GorIVAlgTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_GORIV_ALG_TASK_H_
 #define _U2_GORIV_ALG_TASK_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 #include <U2Algorithm/SecStructPredictTask.h>
 
 
diff --git a/src/plugins_3rdparty/gor4/src/GorIVPlugin.cpp b/src/plugins_3rdparty/gor4/src/GorIVPlugin.cpp
index 54d9301..938413f 100644
--- a/src/plugins_3rdparty/gor4/src/GorIVPlugin.cpp
+++ b/src/plugins_3rdparty/gor4/src/GorIVPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtCore/QMap>
-#include <QtCore/QFile>
+#include <QAction>
+#include <QFile>
+#include <QMap>
+#include <QMenu>
+#include <QMessageBox>
 
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Gui/GUIUtils.h>
diff --git a/src/plugins_3rdparty/gor4/src/GorIVPlugin.h b/src/plugins_3rdparty/gor4/src/GorIVPlugin.h
index e1c73d2..94fe7e5 100644
--- a/src/plugins_3rdparty/gor4/src/GorIVPlugin.h
+++ b/src/plugins_3rdparty/gor4/src/GorIVPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/gor4/src/gor.cpp b/src/plugins_3rdparty/gor4/src/gor.cpp
index 72a5a5b..796f3bf 100644
--- a/src/plugins_3rdparty/gor4/src/gor.cpp
+++ b/src/plugins_3rdparty/gor4/src/gor.cpp
@@ -4,12 +4,15 @@
 #include <stddef.h>
 #include <stdlib.h>
 #include <ctype.h>
-#include <QtGlobal>
-#include <QtCore/QTextStream>
+
+#include <QTextStream>
+
+#include <U2Core/U2SafePoints.h>
 
 #include "nrutil.h"
 #include "gor.h"
 
+#include "GorIVAlgTask.h"
 
 //disable "unsafe functions" deprecation warnings on MS VS
 #ifdef Q_OS_WIN
@@ -50,7 +53,7 @@ double infodir[3][WINSIZ+1][23];
 float nS[4], pS[4];
 
 
-int runGORIV( QFile& seqDb, QFile& strucDb , char* inputSeq, int numResidues, char* outputSeq )
+int runGORIV( QFile& seqDb, QFile& strucDb , char* inputSeq, int numResidues, char* outputSeq, U2::U2OpStatus &os )
 {
  
 /***************************************************************************/
@@ -120,8 +123,10 @@ int runGORIV( QFile& seqDb, QFile& strucDb , char* inputSeq, int numResidues, ch
  * Input the sequences and observed secondary structures for the data base
  */
 
-  readFile(seqDb,nprot_dbase,seq,title_seq,temp);
-  readFile(strucDb,nprot_dbase,obs,title_obs,sequence);
+  readFile(seqDb,nprot_dbase,seq,title_seq,temp,os);
+  CHECK_OP(os, 1);
+  readFile(strucDb,nprot_dbase,obs,title_obs,sequence,os);
+  CHECK_OP(os, 1);
 
 /*
  * Check that the data are consistent in the two files
@@ -143,14 +148,16 @@ int runGORIV( QFile& seqDb, QFile& strucDb , char* inputSeq, int numResidues, ch
 
   if(nerr > 0) {
     printf("%d errors\n",nerr);
-    exit(1);
+    os.setError(U2::GorIVAlgTask::tr("%1 errors").arg(QString::number(nerr)));
+    return 1;
   }
 
   /*
   * Calculate the parameters
   */
 
-  Parameters(nprot_dbase,sequence,obs,seq);
+  Parameters(nprot_dbase,sequence,obs,seq, os);
+  CHECK_OP(os, 1);
 
   /*
   * Predict the secondary structure of protein pro.
@@ -190,7 +197,7 @@ int runGORIV( QFile& seqDb, QFile& strucDb , char* inputSeq, int numResidues, ch
 /* the proteins in the data base.                                            */
 /*                                                                           */
 /*****************************************************************************/
-void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter)
+void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter, U2::U2OpStatus &os)
 {
   
     Q_ASSERT(file.isOpen());
@@ -217,7 +224,8 @@ void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter)
             nres++;
             if(nres > MAXRES) {
                 printf("The value of MAXRES should be increased: %d",MAXRES);
-                exit(1);
+                os.setError(U2::GorIVAlgTask::tr("The value of MAXRES should be increased: %1").arg(QString::number(MAXRES)));
+                return;
             }
             if((c >= 'A' && c < 'Z') && c != 'B' && c != 'J' && c != 'O' && c != 'U') {
                 keep[nres] = c;
@@ -225,7 +233,9 @@ void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter)
             else {
                 printf("protein: %d residue: %d\n",ip,nres);
                 printf("Invalid amino acid type or secondary structure state: ==>%c<==\n",c);
-                exit(1);
+                os.setError(U2::GorIVAlgTask::tr("protein: %1 residue: %2\nInvalid amino acid type or secondary structure state : ==>%3<==")
+                    .arg(QString::number(ip)).arg(QString::number(nres).arg(c)));
+                return;
             }
         }
         
@@ -379,9 +389,9 @@ void predic(int nres, char *seq, char *pred, float **proba)
 /***************************************************************************/
 int seq_indx(int c);
 int obs_indx(int c);
-void Indices(int np, int *dis1, int *dis2);
+void Indices(int np, int *dis1, int *dis2, U2::U2OpStatus &os);
 
-void Parameters(int nprot_dbase, int *nres, char **obs, char **seq)
+void Parameters(int nprot_dbase, int *nres, char **obs, char **seq, U2::U2OpStatus &os)
 {
 /*
  * Compute the frequencies from proteins in the data base.
@@ -484,13 +494,15 @@ void Parameters(int nprot_dbase, int *nres, char **obs, char **seq)
 	  f1 = Doublet[konf][np][aa1][aa2];
 	  f2 = Doublet[3][np][aa1][aa2];
 	  if(f1 < MINFREQ) {
-	    Indices(np,&dis1,&dis2);
+	    Indices(np,&dis1,&dis2, os);
+        CHECK_OP(os, );
 	    f3 = Singlet[konf][dis1][aa1] * Singlet[konf][dis2][aa1] / (float) nS[konf];
 	    f1 = (f3 - f1) * (float) interpol_coeff + f1;
 	    if(f1 < 1.e-6) f1 = 1.0;
 	  }
 	  if(f2 < MINFREQ) {
-	    Indices(np,&dis1,&dis2);
+	    Indices(np,&dis1,&dis2, os);
+        CHECK_OP(os, );
 	    f3 = Singlet[3][dis1][aa1] * Singlet[3][dis2][aa1] / (float) nS[3];
 	    f2 = (f3 - f2) * (float) interpol_coeff + f2;
 	    if(f2 < 1.e-6) f2 = 1.0;
@@ -520,7 +532,7 @@ void Parameters(int nprot_dbase, int *nres, char **obs, char **seq)
 /* Determine indices dis1 dis2 as a function of np                           */
 /*                                                                           */
 /*****************************************************************************/
-void Indices(int np, int *dis1, int *dis2)
+void Indices(int np, int *dis1, int *dis2, U2::U2OpStatus &os)
 {
   int i, j, k;
 
@@ -536,7 +548,8 @@ void Indices(int np, int *dis1, int *dis2)
     }
   }
   printf("Error invalid value of np= %d\n",np);
-  exit(1);
+  os.setError(U2::GorIVAlgTask::tr("Error invalid value of np= %1").arg(QString::number(np)));
+  return;
 }
 /*********************************************************************************/
 /*                                                                               */
diff --git a/src/plugins_3rdparty/gor4/src/gor.h b/src/plugins_3rdparty/gor4/src/gor.h
index 7db925f..7c2e0c1 100644
--- a/src/plugins_3rdparty/gor4/src/gor.h
+++ b/src/plugins_3rdparty/gor4/src/gor.h
@@ -2,16 +2,18 @@
 #define _GOR_H_
 
 #include "nrutil.h"
-#include <QtCore/QFile>
+#include <QFile>
+
+#include <U2Core/U2OpStatus.h>
 
 #define GORIV_ANNOTATION_NAME "gorIV_results"
 
 
-int runGORIV(QFile& seqDBFile, QFile& strucDBFile, char* inputSeq, int numResidues, char* outputSeq);
+int runGORIV(QFile& seqDBFile, QFile& strucDBFile, char* inputSeq, int numResidues, char* outputSeq, U2::U2OpStatus &os);
 int seq_indx(int c);
 int obs_indx(int c);
-void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter);
-void Parameters(int nprot_dbase, int *nres, char **obs, char **seq);
+void readFile(QFile& file, int nprot, char **obs, char **title, int *pnter, U2::U2OpStatus &os);
+void Parameters(int nprot_dbase, int *nres, char **obs, char **seq, U2::U2OpStatus &os);
 void predic(int nres, char *seq, char *pred, float **proba);
 void First_Pass(int nres, float **proba, char *pred);
 void Second_Pass(int nres, float **proba, char *pred);
diff --git a/src/plugins_3rdparty/gor4/transl/english.ts b/src/plugins_3rdparty/gor4/transl/english.ts
index 400b2e0..d24a4cf 100644
--- a/src/plugins_3rdparty/gor4/transl/english.ts
+++ b/src/plugins_3rdparty/gor4/transl/english.ts
@@ -4,7 +4,7 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="32"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="34"/>
         <source>GORIV</source>
         <translation>GORIV</translation>
     </message>
@@ -25,14 +25,38 @@
     </message>
 </context>
 <context>
+    <name>U2::GorIVAlgTask</name>
+    <message>
+        <location filename="../src/gor.cpp" line="151"/>
+        <source>%1 errors</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="227"/>
+        <source>The value of MAXRES should be increased: %1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="236"/>
+        <source>protein: %1 residue: %2
+Invalid amino acid type or secondary structure state : ==>%3<==</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="551"/>
+        <source>Error invalid value of np= %1</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>U2::SecStructPredictPlugin</name>
     <message>
-        <location filename="../src/GorIVPlugin.cpp" line="58"/>
+        <location filename="../src/GorIVPlugin.cpp" line="51"/>
         <source>GORIV</source>
         <translation>GORIV</translation>
     </message>
     <message>
-        <location filename="../src/GorIVPlugin.cpp" line="58"/>
+        <location filename="../src/GorIVPlugin.cpp" line="51"/>
         <source>GORIV protein secondary structure prediction</source>
         <translation>GORIV protein secondary structure prediction</translation>
     </message>
@@ -40,19 +64,19 @@
 <context>
     <name>U2::SecStructPredictTask</name>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="48"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="50"/>
         <source>seq database not found</source>
-        <translation type="unfinished">Sequence database not found</translation>
+        <translation>Sequence database not found</translation>
     </message>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="54"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="56"/>
         <source>observed structures database not found</source>
-        <translation type="unfinished">observed structures database not found</translation>
+        <translation>observed structures database not found</translation>
     </message>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="61"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="63"/>
         <source>sequence is too long, max seq size is 10000</source>
-        <translation type="unfinished">Too long input sequence: maximum allowed length is 10000</translation>
+        <translation>Too long input sequence: maximum allowed length is 10000</translation>
     </message>
 </context>
 </TS>
diff --git a/src/plugins_3rdparty/gor4/transl/russian.ts b/src/plugins_3rdparty/gor4/transl/russian.ts
index d1671f7..da14f11 100644
--- a/src/plugins_3rdparty/gor4/transl/russian.ts
+++ b/src/plugins_3rdparty/gor4/transl/russian.ts
@@ -4,7 +4,7 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="32"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="34"/>
         <source>GORIV</source>
         <translation>GORIV</translation>
     </message>
@@ -25,14 +25,38 @@
     </message>
 </context>
 <context>
+    <name>U2::GorIVAlgTask</name>
+    <message>
+        <location filename="../src/gor.cpp" line="151"/>
+        <source>%1 errors</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="227"/>
+        <source>The value of MAXRES should be increased: %1</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="236"/>
+        <source>protein: %1 residue: %2
+Invalid amino acid type or secondary structure state : ==>%3<==</source>
+        <translation></translation>
+    </message>
+    <message>
+        <location filename="../src/gor.cpp" line="551"/>
+        <source>Error invalid value of np= %1</source>
+        <translation></translation>
+    </message>
+</context>
+<context>
     <name>U2::SecStructPredictPlugin</name>
     <message>
-        <location filename="../src/GorIVPlugin.cpp" line="58"/>
+        <location filename="../src/GorIVPlugin.cpp" line="51"/>
         <source>GORIV</source>
         <translation>GORIV</translation>
     </message>
     <message>
-        <location filename="../src/GorIVPlugin.cpp" line="58"/>
+        <location filename="../src/GorIVPlugin.cpp" line="51"/>
         <source>GORIV protein secondary structure prediction</source>
         <translation>Предсказание вторичной структуры протеинов GORIV</translation>
     </message>
@@ -40,19 +64,19 @@
 <context>
     <name>U2::SecStructPredictTask</name>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="48"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="50"/>
         <source>seq database not found</source>
-        <translation type="unfinished">Sequence database not found</translation>
+        <translation>Sequence database not found</translation>
     </message>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="54"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="56"/>
         <source>observed structures database not found</source>
-        <translation type="unfinished">observed structures database not found</translation>
+        <translation>observed structures database not found</translation>
     </message>
     <message>
-        <location filename="../src/GorIVAlgTask.cpp" line="61"/>
+        <location filename="../src/GorIVAlgTask.cpp" line="63"/>
         <source>sequence is too long, max seq size is 10000</source>
-        <translation type="unfinished">Too long input sequence: maximum allowed length is 10000</translation>
+        <translation>Too long input sequence: maximum allowed length is 10000</translation>
     </message>
 </context>
 </TS>
diff --git a/src/plugins_3rdparty/hmm2/src/HMMIO.cpp b/src/plugins_3rdparty/hmm2/src/HMMIO.cpp
index f4bc8f3..c754f72 100644
--- a/src/plugins_3rdparty/hmm2/src/HMMIO.cpp
+++ b/src/plugins_3rdparty/hmm2/src/HMMIO.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,8 +34,7 @@
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Gui/DialogUtils.h>
 
-#include <QtCore/QtAlgorithms>
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/HMMIO.h b/src/plugins_3rdparty/hmm2/src/HMMIO.h
index 4e4585a..c93c770 100644
--- a/src/plugins_3rdparty/hmm2/src/HMMIO.h
+++ b/src/plugins_3rdparty/hmm2/src/HMMIO.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,8 +25,8 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/Task.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QString>
+#include <QObject>
+#include <QString>
 
 struct plan7_s;
 struct msa_struct;
diff --git a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
index 7fcdf13..e66ecc8 100644
--- a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.h b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.h
index f4b5a6c..4e5266e 100644
--- a/src/plugins_3rdparty/hmm2/src/HMMIOWorker.h
+++ b/src/plugins_3rdparty/hmm2/src/HMMIOWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.cpp b/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.cpp
index 0189743..b4bba4a 100644
--- a/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.cpp
+++ b/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.h b/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.h
index cb62cf4..12d660b 100644
--- a/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.h
+++ b/src/plugins_3rdparty/hmm2/src/TaskLocalStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,9 +24,9 @@
 
 #include <hmmer2/funcs.h>
 
-#include <QtCore/QThreadStorage>
-#include <QtCore/QHash>
-#include <QtCore/QMutex>
+#include <QThreadStorage>
+#include <QHash>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/uHMMPlugin.cpp b/src/plugins_3rdparty/hmm2/src/uHMMPlugin.cpp
index de1e1d4..359330f 100644
--- a/src/plugins_3rdparty/hmm2/src/uHMMPlugin.cpp
+++ b/src/plugins_3rdparty/hmm2/src/uHMMPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,7 +31,7 @@
 #include <U2Core/GObjectSelection.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/L10n.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Task.h>
 #include <U2Core/U2OpStatusUtils.h>
 
@@ -49,7 +49,7 @@
 #include <U2View/ADVUtils.h>
 #include <U2View/AnnotatedDNAView.h>
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "HMMIO.h"
 #include "HMMIOWorker.h"
@@ -133,7 +133,7 @@ void uHMMPlugin::sl_calibrate() {
 }
 
 void uHMMPlugin::sl_build() {
-    MAlignment ma;
+    MultipleSequenceAlignment ma = MultipleSequenceAlignment();
 
     //try to find alignment check that MSA Editor is active
     QString profileName;
@@ -144,9 +144,9 @@ void uHMMPlugin::sl_build() {
             GObjectView* ov = ow->getObjectView();
             MSAEditor* av = qobject_cast<MSAEditor*>(ov);
             if (av!=NULL) {
-                MAlignmentObject* maObj = av->getMSAObject();
+                MultipleSequenceAlignmentObject* maObj = av->getMaObject();
                 if (maObj!=NULL) {
-                    ma = maObj->getMAlignment();
+                    ma = maObj->getMsaCopy();
                     profileName = maObj->getGObjectName() == MA_OBJECT_NAME ? maObj->getDocument()->getName() : maObj->getGObjectName();
                 }
             }
@@ -163,6 +163,7 @@ void uHMMPlugin::sl_search() {
     //2. if not -> check that DNASequence object is selected in project view
 
     U2SequenceObject* obj = NULL;
+    ADVSequenceObjectContext* seqCtx = NULL;
 
     MWMDIWindow* w = AppContext::getMainWindow()->getMDIManager()->getActiveWindow();
     if (w!=NULL) {
@@ -171,7 +172,7 @@ void uHMMPlugin::sl_search() {
             GObjectView* ov = ow->getObjectView();
             AnnotatedDNAView* av = qobject_cast<AnnotatedDNAView*>(ov);
             if (av!=NULL) {
-                ADVSequenceObjectContext* seqCtx = av->getSequenceInFocus();
+                seqCtx = av->getSequenceInFocus();
                 obj = seqCtx->getSequenceObject();
             }
         }
@@ -190,27 +191,27 @@ void uHMMPlugin::sl_search() {
         QMessageBox::critical(p, tr("Error"), tr("Error! Select sequence in Project view or open sequence view."));
         return;
     }
-
-    U2OpStatusImpl os;
-    DNASequence sequence = obj->getWholeSequence(os);
-    CHECK_OP_EXT(os, QMessageBox::critical(QApplication::activeWindow(), L10N::errorTitle(), os.getError()), );
-    QObjectScopedPointer<HMMSearchDialogController> d = new HMMSearchDialogController(sequence, obj, p);
-    d->exec();
+    if(seqCtx != NULL){
+        QObjectScopedPointer<HMMSearchDialogController> d = new HMMSearchDialogController(seqCtx, p);
+        d->exec();
+    }else{
+        QObjectScopedPointer<HMMSearchDialogController> d = new HMMSearchDialogController(obj, p);
+        d->exec();
+    }
 }
 
 
 //////////////////////////////////////////////////////////////////////////
 // contexts
 
-HMMMSAEditorContext::HMMMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+HMMMSAEditorContext::HMMMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 }
 
 
 void HMMMSAEditorContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL)
-        return;
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
 
     GObjectViewAction* a = new GObjectViewAction(this, view, tr("Build HMMER2 profile"));
     a->setObjectName("Build HMMER2 profile");
@@ -221,9 +222,8 @@ void HMMMSAEditorContext::initViewContext(GObjectView* view) {
 
 void HMMMSAEditorContext::buildMenu(GObjectView* v, QMenu* m) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(v);
-    assert( NULL != msaed && NULL != m );
-    if (msaed->getMSAObject() == NULL)
-        return;
+    SAFE_POINT( NULL != msaed && NULL != m, "Invalid GObjectVeiw or QMenu", );
+    CHECK(msaed->getMaObject() != NULL, );
 
     QList<GObjectViewAction*> list = getViewActions(v);
     assert(list.size()==1);
@@ -239,10 +239,10 @@ void HMMMSAEditorContext::sl_build() {
     assert(action!=NULL);
     MSAEditor* ed = qobject_cast<MSAEditor*>(action->getObjectView());
     assert(ed!=NULL);
-    MAlignmentObject* obj = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj) {
         QString profileName = obj->getGObjectName() == MA_OBJECT_NAME ? obj->getDocument()->getName() : obj->getGObjectName();
-        QObjectScopedPointer<HMMBuildDialogController> d = new HMMBuildDialogController(profileName, obj->getMAlignment());
+        QObjectScopedPointer<HMMBuildDialogController> d = new HMMBuildDialogController(profileName, obj->getMultipleAlignment());
         d->exec();
         CHECK(!d.isNull(), );
     }
@@ -274,10 +274,7 @@ void HMMADVContext::sl_search() {
         QMessageBox::critical(p, tr("Error"), tr("No sequences found"));
         return;
     }
-    U2OpStatusImpl os;
-    DNASequence sequence = seqCtx->getSequenceObject()->getWholeSequence(os);
-    CHECK_OP_EXT(os, QMessageBox::critical(QApplication::activeWindow(), L10N::errorTitle(), os.getError()), );
-    QObjectScopedPointer<HMMSearchDialogController> d = new HMMSearchDialogController(sequence, seqCtx->getSequenceObject(), p);
+    QObjectScopedPointer<HMMSearchDialogController> d = new HMMSearchDialogController(seqCtx, p);
     d->exec();
 }
 
diff --git a/src/plugins_3rdparty/hmm2/src/uHMMPlugin.h b/src/plugins_3rdparty/hmm2/src/uHMMPlugin.h
index 1bf1995..2cd630e 100644
--- a/src/plugins_3rdparty/hmm2/src/uHMMPlugin.h
+++ b/src/plugins_3rdparty/hmm2/src/uHMMPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
index 2368792..942f777 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Gui/DialogUtils.h>
@@ -45,17 +45,17 @@
 #include "hmmer2/funcs.h"
 
 namespace U2 {
-HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MAlignment& _ma, QWidget* p) 
+HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MultipleSequenceAlignment& _ma, QWidget* p) 
     : QDialog(p),
-      ma(_ma),
+      ma(_ma->getCopy()),
       profileName(_pn),
       saveController(NULL) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223195");
+    new HelpButton(this, buttonBox, "20875099");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
-    if (!ma.isEmpty()) {
+    if (!ma->isEmpty()) {
         msaFileButton->setHidden(true);
         msaFileEdit->setHidden(true);
         msaFileLabel->setHidden(true);
@@ -75,7 +75,7 @@ HMMBuildDialogController::HMMBuildDialogController(const QString& _pn, const MAl
 void HMMBuildDialogController::sl_msaFileClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Select file with alignment"),
-        lod, DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        lod, DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     
     if (lod.url.isEmpty()) {
         return;
@@ -96,7 +96,7 @@ void HMMBuildDialogController::sl_okClicked() {
     QString errMsg;
 
     QString inFile = msaFileEdit->text();
-    if (ma.isEmpty() && (inFile.isEmpty() || !QFileInfo(inFile).exists())) {
+    if (ma->isEmpty() && (inFile.isEmpty() || !QFileInfo(inFile).exists())) {
         errMsg = tr("Incorrect alignment file!");
         msaFileEdit->setFocus();
     }
@@ -122,7 +122,7 @@ void HMMBuildDialogController::sl_okClicked() {
         return;
     }
 
-    task = ma.isEmpty() ? new HMMBuildToFileTask(inFile, outFile, s) : new HMMBuildToFileTask(ma, outFile, s);
+    task = ma->isEmpty() ? new HMMBuildToFileTask(inFile, outFile, s) : new HMMBuildToFileTask(ma, outFile, s);
     task->setReportingEnabled(true);
     connect(task, SIGNAL(si_stateChanged()), SLOT(sl_onStateChanged()));
     connect(task, SIGNAL(si_progressChanged()), SLOT(sl_onProgressChanged()));
@@ -193,7 +193,11 @@ void HMMBuildDialogController::initSaveController() {
 //  HMMBuildTask
 
 HMMBuildToFileTask::HMMBuildToFileTask(const QString& inFile, const QString& _outFile, const UHMMBuildSettings& s) 
-: Task("", TaskFlag_ReportingIsSupported), settings(s), outFile(_outFile), loadTask(NULL), buildTask(NULL)
+    : Task("", TaskFlag_ReportingIsSupported),
+      settings(s),
+      outFile(_outFile),
+      loadTask(NULL),
+      buildTask(NULL)
 {
     setTaskName(tr("Build HMM profile '%1' -> '%2'").arg(QFileInfo(inFile).fileName()).arg(QFileInfo(outFile).fileName()));
     setVerboseLogMode(true);
@@ -203,7 +207,7 @@ HMMBuildToFileTask::HMMBuildToFileTask(const QString& inFile, const QString& _ou
 
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(inFile);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -221,14 +225,14 @@ HMMBuildToFileTask::HMMBuildToFileTask(const QString& inFile, const QString& _ou
     addSubTask(loadTask);
 }
 
-HMMBuildToFileTask::HMMBuildToFileTask(const MAlignment& _ma, const QString& _outFile, const UHMMBuildSettings& s) 
+HMMBuildToFileTask::HMMBuildToFileTask(const MultipleSequenceAlignment& _ma, const QString& _outFile, const UHMMBuildSettings& s) 
 : Task("", TaskFlags_FOSCOE | TaskFlag_ReportingIsSupported),
-settings(s), outFile(_outFile), ma(_ma), loadTask(NULL), buildTask(NULL)
+settings(s), outFile(_outFile), ma(_ma->getCopy()), loadTask(NULL), buildTask(NULL)
 {
     setTaskName(tr("Build HMM profile to '%1'").arg(QFileInfo(outFile).fileName()));
     setVerboseLogMode(true);
 
-    assert(!(outFile.isEmpty() || ma.isEmpty()));
+    assert(!(outFile.isEmpty() || ma->isEmpty()));
     if (settings.name.isEmpty()) {
         QFileInfo fi(outFile);
         settings.name = fi.baseName(); //FIXME temporary workaround
@@ -246,19 +250,19 @@ QList<Task*> HMMBuildToFileTask::onSubTaskFinished(Task* subTask) {
     }
 
     if (subTask == loadTask) {
-        assert(ma.isEmpty());
+        assert(ma->isEmpty());
         Document*  doc = loadTask->getDocument();
         //assert(doc);
         if(!doc) {
             stateInfo.setError(tr("Incorrect input file"));
             return res;
         }
-        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (list.isEmpty()) {
             stateInfo.setError(  tr("Alignment object not found!") );
         } else {
-            MAlignmentObject* msa = qobject_cast<MAlignmentObject*>(list.first());
-            const MAlignment &ma = msa->getMAlignment();
+            MultipleSequenceAlignmentObject* msa = qobject_cast<MultipleSequenceAlignmentObject*>(list.first());
+            const MultipleSequenceAlignment ma = msa->getMultipleAlignment();
             if (settings.name.isEmpty()) {
                 settings.name = msa->getGObjectName() == MA_OBJECT_NAME ? doc->getName() : msa->getGObjectName();
             }
@@ -320,8 +324,8 @@ QString HMMBuildToFileTask::generateReport() const {
 }
 
 
-HMMBuildTask::HMMBuildTask(const UHMMBuildSettings& s, const MAlignment& _ma) 
-  : Task("", TaskFlag_None), ma(_ma), settings(s), hmm(NULL)
+HMMBuildTask::HMMBuildTask(const UHMMBuildSettings& s, const MultipleSequenceAlignment& _ma) 
+  : Task("", TaskFlag_None), ma(_ma->getCopy()), settings(s), hmm(NULL)
 {
     GCOUNTER( cvar, tvar, "HMMBuildTask" );
     setTaskName(tr("Build HMM profile '%1'").arg(s.name));
@@ -340,39 +344,39 @@ void HMMBuildTask::run() {
 }
 
 void HMMBuildTask::_run() {
-    if (ma.getNumRows() == 0) {
+    if (ma->getNumRows() == 0) {
         stateInfo.setError(  tr("Multiple alignment is empty") );
         return;
     }
-    if (ma.getLength() == 0) {
+    if (ma->getLength() == 0) {
         stateInfo.setError(  tr("Multiple alignment is of 0 length") );
         return;
     }
     //todo: check HMM for RAW alphabet!
-    if (ma.getAlphabet()->isRaw()) {
+    if (ma->getAlphabet()->isRaw()) {
         stateInfo.setError(  tr("Invalid alphabet! Only amino and nucleic alphabets are supported") );
         return;
     }
 
     //everything ok here: fill msa
 
-    msa_struct* msa = MSAAlloc(ma.getNumRows(), ma.getLength());
+    msa_struct* msa = MSAAlloc(ma->getNumRows(), ma->getLength());
     if (msa == NULL) {
         stateInfo.setError(  tr("Error creating MSA structure") );
         return;
     }
     U2OpStatus2Log os;
-    for (int i=0; i<ma.getNumRows();i++) {
-        const MAlignmentRow& row = ma.getRow(i);
-        QByteArray seq = row.toByteArray(ma.getLength(), os);
+    for (int i=0; i<ma->getNumRows();i++) {
+        const MultipleSequenceAlignmentRow row = ma->getMsaRow(i);
+        QByteArray seq = row->toByteArray(os, ma->getLength());
         free(msa->aseq[i]);
         msa->aseq[i] = sre_strdup(seq.constData(), seq.size());
-        QByteArray name = row.getName().toLatin1();
+        QByteArray name = row->getName().toLatin1();
         msa->sqname[i] = sre_strdup(name.constData(), name.size());
         msa->wgt[i] = 1.0; // default weights 
     }
     
-    int atype = ma.getAlphabet()->isNucleic() ? hmmNUCLEIC :hmmAMINO;
+    int atype = ma->getAlphabet()->isNucleic() ? hmmNUCLEIC :hmmAMINO;
     try {
         hmm = UHMMBuild::build(msa, atype, settings, stateInfo);
     } catch (HMMException e) {
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
index ec1a213..3fa7f0d 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 
 #include <ui_HMMBuildDialog.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Task.h>
 
 #include "uhmmbuild.h"
@@ -41,7 +41,7 @@ class SaveDocumentController;
 class HMMBuildDialogController : public QDialog, public Ui_HMMBuildDialog {
     Q_OBJECT
 public:
-    HMMBuildDialogController(const QString& profileName, const MAlignment& ma, QWidget* p = NULL);
+    HMMBuildDialogController(const QString& profileName, const MultipleSequenceAlignment& ma, QWidget* p = NULL);
     
 public slots:
     void reject();
@@ -56,7 +56,7 @@ private slots:
 private:
     void initSaveController();
 
-    MAlignment  ma;
+    MultipleSequenceAlignment  ma;
     QString     profileName;
     Task*       task;
     QPushButton* okButton;
@@ -71,14 +71,14 @@ private:
 class HMMBuildTask: public Task {
     Q_OBJECT
 public:
-    HMMBuildTask(const UHMMBuildSettings& s, const MAlignment& ma);
+    HMMBuildTask(const UHMMBuildSettings& s, const MultipleSequenceAlignment& ma);
     ~HMMBuildTask();
 
     void run();
     void _run();
     plan7_s* getHMM() const {return hmm;}
 private:
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     UHMMBuildSettings settings;
     plan7_s* hmm;
 };
@@ -88,7 +88,7 @@ class HMMBuildToFileTask : public Task {
 public:
     HMMBuildToFileTask(const QString& inFile, const QString& outFile, const UHMMBuildSettings& s);
 
-    HMMBuildToFileTask(const MAlignment& ma, const QString& outFile, const UHMMBuildSettings& s);
+    HMMBuildToFileTask(const MultipleSequenceAlignment& ma, const QString& outFile, const UHMMBuildSettings& s);
 
     virtual QList<Task*> onSubTaskFinished(Task* subTask);
 
@@ -100,7 +100,7 @@ public:
 private:
     UHMMBuildSettings   settings;
     QString             outFile;
-    MAlignment          ma;
+    MultipleSequenceAlignment          ma;
     LoadDocumentTask*   loadTask;
     HMMBuildTask*       buildTask;
 };
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
index 8cb57a6..e68a063 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/HMMBuildWorker.cpp
@@ -1,26 +1,47 @@
-#include "HMMBuildWorker.h"
-#include "HMMIOWorker.h"
-#include "HMMBuildDialogController.h"
-#include "u_calibrate/HMMCalibrateTask.h"
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
 
-#include <U2Lang/Datatype.h>
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
-
-#include <U2Core/MAlignment.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/FailTask.h>
 #include <U2Core/Log.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/TaskSignalMapper.h>
-#include <U2Core/FailTask.h>
+#include <U2Core/U2SafePoints.h>
 
-/* TRANSLATOR U2::LocalWorkflow::HMMBuildWorker */
+#include <U2Designer/DelegateEditors.h>
+
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/Datatype.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "HMMBuildDialogController.h"
+#include "HMMBuildWorker.h"
+#include "HMMIOWorker.h"
+#include "u_calibrate/HMMCalibrateTask.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -247,9 +268,9 @@ Task* HMMBuildWorker::tick() {
 
             QVariantMap qm = inputMessage.getData().toMap();
             SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-            QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+            QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
             SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-            const MAlignment &msa = msaObj->getMAlignment();
+            const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
             
             Task* t = new HMMBuildTask(cfg, msa);
             connect(new TaskSignalMapper(t), SIGNAL(si_taskFinished(Task*)), SLOT(sl_taskFinished(Task*)));
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.cpp b/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.cpp
index 1cd688b..1fdd692 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.cpp
@@ -4,9 +4,9 @@
 
 #include <U2Core/Task.h>
 
-#include <QtCore/QByteArray>
-#include <QtCore/QVector>
-#include <QtCore/QFile>
+#include <QByteArray>
+#include <QVector>
+#include <QFile>
 
 
 namespace U2 {
diff --git a/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.h b/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.h
index 4b4a0b2..cdb9096 100644
--- a/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.h
+++ b/src/plugins_3rdparty/hmm2/src/u_build/uhmmbuild.h
@@ -4,8 +4,8 @@
 struct plan7_s;
 struct msa_struct;
 
-#include <QtCore/QString>
-#include <QtCore/QObject>
+#include <QString>
+#include <QObject>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
index 95cde59..6231363 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -42,7 +42,7 @@ HMMCalibrateDialogController::HMMCalibrateDialogController(QWidget* w)
       saveController(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223196");
+    new HelpButton(this, buttonBox, "20875100");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Calibrate"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
index 2f0629e..6601013 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateTask.cpp b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateTask.cpp
index f0881e0..e0d5254 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateTask.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/HMMCalibrateTask.cpp
@@ -6,7 +6,7 @@
 
 #include <U2Core/Counter.h>
 
-#include <QtCore/QFileInfo>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_calibrate/uhmmcalibrate.h b/src/plugins_3rdparty/hmm2/src/u_calibrate/uhmmcalibrate.h
index 491f84d..5753f30 100644
--- a/src/plugins_3rdparty/hmm2/src/u_calibrate/uhmmcalibrate.h
+++ b/src/plugins_3rdparty/hmm2/src/u_calibrate/uhmmcalibrate.h
@@ -6,8 +6,8 @@ struct alphabet_s;
 struct histogram_s;
 
 #include <float.h>
-#include <QtCore/QMutex>
-#include <QtCore/QVector>
+#include <QMutex>
+#include <QVector>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
index 855943e..f774e49 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C)2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C)2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -40,6 +40,9 @@
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/U2FileDialog.h>
 
+#include <U2View/ADVSequenceObjectContext.h>
+#include <U2View/AnnotatedDNAView.h>
+
 #include "HMMIO.h"
 #include "HMMSearchDialogController.h"
 #include "HMMSearchTask.h"
@@ -48,16 +51,26 @@
 
 namespace U2 {
 
-HMMSearchDialogController::HMMSearchDialogController(const DNASequence& sequence, const U2SequenceObject* seqObj, QWidget* p)
-: QDialog(p)
+HMMSearchDialogController::HMMSearchDialogController(const U2SequenceObject* seqObj, QWidget* p)
+: QDialog(p), seqCtx(NULL)
+{
+    init(seqObj);
+}
+HMMSearchDialogController::HMMSearchDialogController(ADVSequenceObjectContext* seqCtx, QWidget* p)
+: QDialog(p), seqCtx(seqCtx)
 {
-    qDebug() << "HMMSearchDialogController was created";
 
-    dnaSequence = sequence;
+    init(seqCtx->getSequenceObject());
+}
+void HMMSearchDialogController::init(const U2SequenceObject *seqObj){
+    qDebug() << "HMMSearchDialogController was created";
+    U2OpStatusImpl os;
+    dnaSequence = seqObj->getWholeSequence(os);
+    CHECK_OP_EXT(os, QMessageBox::critical(QApplication::activeWindow(), L10N::errorTitle(), os.getError()), );
 
     searchTask = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223197");
+    new HelpButton(this, buttonBox, "20875101");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Close"));
 
@@ -156,6 +169,9 @@ void HMMSearchDialogController::sl_okClicked(){
     }
 
     const CreateAnnotationModel& cm = createController->getModel();
+    if(seqCtx != NULL){
+        seqCtx->getAnnotatedDNAView()->tryAddObject(cm.getAnnotationObject());
+    }
     QString annotationName = cm.data->name;
     searchTask = new HMMSearchToAnnotationsTask(hmmFile, dnaSequence, cm.getAnnotationObject(), cm.groupName, cm.description, cm.data->type, annotationName, s);
     searchTask->setReportingEnabled(true);
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
index 5de8023..30aa503 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,17 +33,14 @@
 
 #include <QDebug>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
-#include <QtCore/QPointer>
+#include <QDialog>
+#include <QPointer>
 
 struct plan7_s;
 
 namespace U2 {
 
+class ADVSequenceObjectContext;
 class CreateAnnotationWidgetController;
 class CreateAnnotationModel;
 class AnnotationTableObject;
@@ -58,7 +55,8 @@ class HMMReadTask;
 class HMMSearchDialogController : public QDialog, public Ui_HMMSearchDialog {
     Q_OBJECT
 public:
-    HMMSearchDialogController(const DNASequence& sequence, const U2SequenceObject* obj, QWidget* p = NULL);
+    HMMSearchDialogController(const U2SequenceObject* obj, QWidget* p = NULL);
+    HMMSearchDialogController(ADVSequenceObjectContext* seqCtx, QWidget* p = NULL);
     ~HMMSearchDialogController();
 
 public slots:
@@ -74,11 +72,13 @@ private slots:
     void sl_onProgressChanged();
 
 private:
+    void init(const U2SequenceObject* seqObj);
     DNASequence                         dnaSequence;
     Task*                               searchTask;
     CreateAnnotationWidgetController*   createController;
     QPushButton*                        okButton;
     QPushButton*                        cancelButton;
+    ADVSequenceObjectContext*           seqCtx;
 };
 
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.cpp
index f1ae29b..b62d939 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,22 +19,24 @@
  * MA 02110-1301, USA.
  */
 
-#include "HMMSearchQDActor.h"
-#include "uhmmsearch.h"
-#include "HMMIO.h"
-#include "HMMSearchTask.h"
+#include <math.h>
 
-#include <U2Core/FailTask.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/TaskSignalMapper.h>
 #include <U2Core/DNASequenceObject.h>
-
-#include <U2Gui/DialogUtils.h>
+#include <U2Core/FailTask.h>
+#include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
+#include <U2Gui/DialogUtils.h>
+
 #include <U2Lang/BaseTypes.h>
 
+#include "HMMIO.h"
+#include "HMMSearchQDActor.h"
+#include "HMMSearchTask.h"
+#include "uhmmsearch.h"
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.h b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.h
index 2b543b4..7453a5e 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchQDActor.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.cpp
index a3d61f7..f3e5fe9 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.h b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.h
index a1f3138..a6f1381 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,7 +24,7 @@
 
 #include "uhmmsearch.h"
 #include "HMMIO.h"
-#include <QtCore/QMutex>
+#include <QMutex>
 #include <U2Core/U2Region.h>
 #include <U2Core/Task.h>
 #include <U2Core/DNASequence.h>
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
index 70d4b22..4b64454 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/HMMSearchWorker.cpp
@@ -1,38 +1,55 @@
-#include "HMMSearchWorker.h"
-#include "HMMIOWorker.h"
-#include "HMMSearchTask.h"
-
-#include <hmmer2/funcs.h>
-
-#include <U2Lang/Datatype.h>
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/CoreLibConstants.h>
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.unipro.ru
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QApplication>
 
 #include <U2Core/AnnotationData.h>
-#include <U2Core/DNASequence.h>
-#include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
+#include <U2Core/DNASequence.h>
 #include <U2Core/DNASequenceObject.h>
-#include <U2Core/Log.h>
+#include <U2Core/DNATranslation.h>
 #include <U2Core/FailTask.h>
+#include <U2Core/Log.h>
 #include <U2Core/MultiTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-/* TRANSLATOR U2::LocalWorkflow::HMMSearchWorker */
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/Datatype.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "HMMSearchWorker.h"
+#include "HMMIOWorker.h"
+#include "HMMSearchTask.h"
+#include "hmmer2/funcs.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.cpp b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.cpp
index dc1531d..33f2f64 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.cpp
@@ -18,30 +18,30 @@
 namespace U2 {
 
 static void main_loop_serial(struct plan7_s *hmm, const char* seq, int seqLen, struct threshold_s *thresh, int do_forward,
-                            int do_null2, int do_xnu, struct histogram_s *histogram, struct tophit_s *ghit, 
+                            int do_null2, int do_xnu, struct histogram_s *histogram, struct tophit_s *ghit,
                             struct tophit_s *dhit, int *ret_nseq, TaskStateInfo& ti);
 
-QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int seqLen, const UHMMSearchSettings& s, TaskStateInfo& si) 
+QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int seqLen, const UHMMSearchSettings& s, TaskStateInfo& si)
 {
     plan7_s * hmm = HMMIO::cloneHMM( _hmm );
-    //Set up optional Pfam score thresholds. 
+    //Set up optional Pfam score thresholds.
     threshold_s thresh;         // contains all threshold (cutoff) info
     thresh.globE   = s.globE; // use a reasonable Eval threshold
     thresh.globT   = -FLT_MAX;  // but no bit threshold
-	thresh.domT    = s.domT;  // no domain bit threshold 
+	thresh.domT    = s.domT;  // no domain bit threshold
 	thresh.domE    = s.domE;   // and no domain Eval threshold
-    thresh.autocut = CUT_NONE;  // and no Pfam cutoffs used        
-    thresh.Z       = s.eValueNSeqs; // Z not preset; use actual # of seqs 
+    thresh.autocut = CUT_NONE;  // and no Pfam cutoffs used
+    thresh.Z       = s.eValueNSeqs; // Z not preset; use actual # of seqs
 
-    int   do_null2      = TRUE;    // TRUE to adjust scores with null model #2 
-    int   do_forward    = FALSE;   // TRUE to use Forward() not Viterbi()      
-    int   do_xnu        = FALSE;   // TRUE to filter sequences thru XNU        
+    int   do_null2      = TRUE;    // TRUE to adjust scores with null model #2
+    int   do_forward    = FALSE;   // TRUE to use Forward() not Viterbi()
+    int   do_xnu        = FALSE;   // TRUE to filter sequences thru XNU
     QList<UHMMSearchResult> res;   // the results of the method
 
     //get HMMERTaskLocalData
 	HMMERTaskLocalData *tld = getHMMERTaskLocalData();
 	alphabet_s *al = &tld->al;
-	
+
     SetAlphabet(hmm->atype);
 
     P7Logoddsify(hmm, !do_forward); //TODO: clone model to avoid changes in it or make it thread safe??
@@ -52,9 +52,9 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
     }
 
     /*****************************************************************
-    * Set up optional Pfam score thresholds. 
+    * Set up optional Pfam score thresholds.
     * Can do this before starting any searches, since we'll only use 1 HMM.
-    *****************************************************************/ 
+    *****************************************************************/
 
     if (!SetAutocuts(&thresh, hmm)) {
         si.setError(  "HMM did not contain the GA, TC, or NC cutoffs you needed" );
@@ -65,8 +65,8 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
     histogram_s *histogram  = AllocHistogram(-200, 200, 100);  //keeps full histogram of all scores
     tophit_s   *ghit        = AllocTophits(200);               // per-seq hits: 200=lumpsize
     tophit_s   *dhit        = AllocTophits(200);               // domain hits:  200=lumpsize
-    
-    int     nseq = 0;         // number of sequences searched   
+
+    int     nseq = 0;         // number of sequences searched
 #ifdef UGENE_CELL
     if( HMMSearchAlgo_CellOptimized == s.alg ) {
         if( hmm->M < MAX_HMM_LENGTH ) {
@@ -88,7 +88,7 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
     }
     // Process hit lists, produce text output
 
-    // Set the theoretical EVD curve in our histogram using calibration in the HMM, if available. 
+    // Set the theoretical EVD curve in our histogram using calibration in the HMM, if available.
     if (hmm->flags & PLAN7_STATS) {
         ExtremeValueSetHistogram(histogram, hmm->mu, hmm->lambda, histogram->lowscore, histogram->highscore, 0);
     }
@@ -96,7 +96,7 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
         thresh.Z = nseq;       // set Z for good now that we're done
     }
 
-    //report our output 
+    //report our output
 
     FullSortTophits(dhit);
 
@@ -104,27 +104,27 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
 
     // Report domain hits (sorted on E-value)
     for (int i = 0; i < dhit->num && !si.cancelFlag; i++) {
-        float   sc;                 // score of an HMM search                
+        float   sc;                 // score of an HMM search
         double  pvalue;             // pvalue of an HMM score
         double  evalue;             // evalue of an HMM score
         char    *name, *desc;       // hit sequence name and description
         double  motherp;            // pvalue of a whole seq HMM score
-        float   mothersc;           // score of a whole seq parent of domain 
-        int     sqfrom, sqto;       // coordinates in sequence                
+        float   mothersc;           // score of a whole seq parent of domain
+        int     sqfrom, sqto;       // coordinates in sequence
         int     sqlen;              // length of seq that was hit
-        int     hmmfrom, hmmto;     // coordinate in HMM                      
-        int     ndom;               // total # of domains in this seq   
-        int     domidx;             // number of this domain 
+        int     hmmfrom, hmmto;     // coordinate in HMM
+        int     ndom;               // total # of domains in this seq
+        int     domidx;             // number of this domain
 
         GetRankedHit(dhit, i, &pvalue, &sc, &motherp, &mothersc,
                     &name, NULL, &desc,
                     &sqfrom, &sqto, &sqlen,      // seq position info
-                    &hmmfrom, &hmmto, NULL,      // HMM position info 
+                    &hmmfrom, &hmmto, NULL,      // HMM position info
                     &domidx, &ndom,              // domain info
-                    NULL);                       // alignment info     
+                    NULL);                       // alignment info
 
         evalue = pvalue * (double) thresh.Z;
-        
+
         if (motherp * (double) thresh.Z > thresh.globE || mothersc < thresh.globT)  {
             continue;
         } else if (evalue <= thresh.domE && sc >= thresh.domT) {
@@ -138,7 +138,7 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
     FreeTophits(ghit);
     FreeTophits(dhit);
 	FreePlan7( hmm );
-    
+
     return res;
 }
 
@@ -149,27 +149,27 @@ QList<UHMMSearchResult> UHMMSearch::search(plan7_s* _hmm, const char* seq, int s
 // Purpose:  Search an HMM against a sequence database.
 //           main loop for the serial (non-PVM, non-threads)
 //           version.
-//           
+//
 //           In:   HMM and open sqfile, plus options
 //           Out:  histogram, global hits list, domain hits list, nseq.
 //
-// Args:     hmm        - the HMM to search with. 
-//           seq, 
+// Args:     hmm        - the HMM to search with.
+//           seq,
 //           seqLen
 //           thresh     - score/evalue threshold info
-//           do_forward - TRUE to score using Forward()        
+//           do_forward - TRUE to score using Forward()
 //           do_null2   - TRUE to use ad hoc null2 score correction
 //           do_xnu     - TRUE to apply XNU mask
 //           histogram  - RETURN: score histogram
 //           ghit       - RETURN: ranked global scores
 //           dhit       - RETURN: ranked domain scores
 //           ret_nseq   - RETURN: actual number of seqs searched
-//           
+//
 // Returns:  (void)
 
 static void
 main_loop_serial(struct plan7_s *hmm, const char* seq, int seqLen, struct threshold_s *thresh, int do_forward,
-                 int do_null2, int do_xnu, struct histogram_s *histogram, struct tophit_s *ghit, struct tophit_s *dhit, 
+                 int do_null2, int do_xnu, struct histogram_s *histogram, struct tophit_s *ghit, struct tophit_s *dhit,
                  int *ret_nseq, TaskStateInfo& ti)
 {
 	//get HMMERTaskLocalData
@@ -186,7 +186,7 @@ main_loop_serial(struct plan7_s *hmm, const char* seq, int seqLen, struct thresh
     // Create a DP matrix; initially only two rows big, but growable;
     // we overalloc by 25 rows (L dimension) when we grow; not growable
     // in model dimension, since we know the hmm size
-    mx = CreatePlan7Matrix(1, hmm->M, 25, 0); 
+    mx = CreatePlan7Matrix(1, hmm->M, 25, 0);
 
     assert(seqLen > 0);
 
@@ -212,25 +212,25 @@ main_loop_serial(struct plan7_s *hmm, const char* seq, int seqLen, struct thresh
     //    PostprocessSignificantHit() is going to do to the per-seq score.
     if (do_forward) {
         sc  = P7Forward(dsq, seqLen, hmm, NULL);
-        if (do_null2)   sc -= TraceScoreCorrection(hmm, tr, dsq); 
+        if (do_null2)   sc -= TraceScoreCorrection(hmm, tr, dsq);
     }
 
     // 2. Store score/pvalue for global alignment; will sort on score,
-    //    which in hmmsearch is monotonic with E-value. 
+    //    which in hmmsearch is monotonic with E-value.
     //    Keep all domains in a significant sequence hit.
     //    We can only make a lower bound estimate of E-value since
     //    we don't know the final value of nseq yet, so the list
     //    of hits we keep in memory is >= the list we actually
-    //    output. 
+    //    output.
     //
     pvalue = PValue(hmm, sc);
     evalue = thresh->Z ? (double) thresh->Z * pvalue : (double) pvalue;
     if (sc >= thresh->globT && evalue <= thresh->globE)  {
-        sc = PostprocessSignificantHit(ghit, dhit, 
+        sc = PostprocessSignificantHit(ghit, dhit,
             tr, hmm, dsq, seqLen,
-            "sequence", //todo: sqinfo.name, 
-            NULL, 
-            NULL, 
+			(char *)"sequence", //todo: sqinfo.name,
+            NULL,
+            NULL,
             do_forward, sc,
             do_null2,
             thresh,
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.h b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.h
index 4b3c629..4dd7012 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch.h
@@ -2,7 +2,7 @@
 #define _U2_UHMM_SEARCH_H_
 
 #include <U2Core/U2Region.h>
-#include <QtCore/QObject>
+#include <QObject>
 #include <float.h>
 
 struct plan7_s;
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.cpp b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.cpp
index f1e4571..af22c55 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.cpp
@@ -110,7 +110,7 @@ void main_loop_opt( struct plan7_s * hmm_, const char * seq_, int seqlen, struct
 
             if ( sc >= thresh->domT && evalue <= thresh->domE ) {
                 // This function adds new results to dhit->unsrt. They are added right after 'last_hit_index'
-                sc = PostprocessSignificantHit( ghit, dhit, tr, hmm, curSeqAddr, curSeqLen,  "seq", 0, 0, do_forward, sc, do_null2, thresh, FALSE );
+                sc = PostprocessSignificantHit( ghit, dhit, tr, hmm, curSeqAddr, curSeqLen,  (char *)"seq", 0, 0, do_forward, sc, do_null2, thresh, FALSE );
 
                 //shifting results 
                 for( int hi = last_hit_index; hi < dhit->num; ++hi ) {
diff --git a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.h b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.h
index a329a80..d4b36bc 100644
--- a/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.h
+++ b/src/plugins_3rdparty/hmm2/src/u_search/uhmmsearch_opt.h
@@ -1,7 +1,7 @@
 #ifndef __UHMMSEARCH_OPT_H__
 #define __UHMMSEARCH_OPT_H__
 
-#include <QtCore/QVector>
+#include <QVector>
 
 #include <hmmer2/config.h>
 #include <hmmer2/structs.h>
diff --git a/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.cpp b/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.cpp
index 533e082..9383953 100644
--- a/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.cpp
+++ b/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.cpp
@@ -1,16 +1,29 @@
-#include "uhmmerTests.h"
-
-#include <float.h>
-
-#include "u_search/HMMSearchDialogController.h"
-#include "u_calibrate/HMMCalibrateTask.h"
-#include "u_build/HMMBuildDialogController.h"
-
-#include <hmmer2/funcs.h>
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QDir>
+#include <QFileInfo>
 
 #include <U2Core/DNASequence.h>
 #include <U2Core/TextUtils.h>
-
 #include <U2Core/AppContext.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
@@ -19,13 +32,19 @@
 #include <U2Core/GObject.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/SaveDocumentTask.h>
-
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/AnnotationTableObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/TextObject.h>
+
 #include <U2Test/GTestFrameworkComponents.h>
 
+#include "uhmmerTests.h"
+#include "hmmer2/funcs.h"
+#include "u_build/HMMBuildDialogController.h"
+#include "u_calibrate/HMMCalibrateTask.h"
+#include "u_search/HMMSearchDialogController.h"
+
 namespace U2 {
 
 #define HMM_FILE_ATTR "hmmfile"
diff --git a/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.h b/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.h
index a29eb33..c34bc29 100644
--- a/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.h
+++ b/src/plugins_3rdparty/hmm2/src/u_tests/uhmmerTests.h
@@ -4,7 +4,7 @@
 #include <U2Core/GObject.h>
 #include <U2Test/XMLTestUtils.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/hmm2/transl/english.ts b/src/plugins_3rdparty/hmm2/transl/english.ts
index 16ca0fd..886f999 100644
--- a/src/plugins_3rdparty/hmm2/transl/english.ts
+++ b/src/plugins_3rdparty/hmm2/transl/english.ts
@@ -102,30 +102,30 @@ This is analogous to the standard Smith/Waterman algorithm or the hmmsw program
 <context>
     <name>HMMBuildWorker</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="89"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="110"/>
         <source>Fix the length of the random sequences to <n>, where <n> is a positive (and reasonably sized) integer. <p>The default is instead to generate sequences with a variety of different lengths, controlled by a Gaussian (normal) distribution.</source>
         <translation>Fix the length of the random sequences to <n>, where <n> is a positive (and reasonably sized) integer. 
 The default is instead to generate sequences with a variety of different lengths, controlled by a Gaussian (normal) distribution.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="92"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="113"/>
         <source>Mean length of the synthetic sequences, positive real number. The default value is 325.</source>
         <translation>Mean length of the synthetic sequences, positive real number. The default value is 325.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="94"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="115"/>
         <source>Number of synthetic sequences. If <n> is less than about 1000, the fit to the EVD may fail. <p>Higher numbers of <n> will give better determined EVD parameters. <p>The default is 5000; it was empirically chosen as a tradeoff between accuracy and computation time.</source>
         <translation>Number of synthetic sequences. If <n> is less than about 1000, the fit to the EVD may fail. 
 Higher numbers of <n> will give better determined EVD parameters. 
 The default is 5000; it was empirically chosen as a tradeoff between accuracy and computation time.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="98"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="119"/>
         <source>Standard deviation of the synthetic sequence length. A positive number. <p>The default is 200. Note that the Gaussian is left-truncated so that no sequences have lengths <= 0.</source>
         <translation>Standard deviation of the synthetic sequence length. A positive number. <p>The default is 200. Note that the Gaussian is left-truncated so that no sequences have lengths <= 0.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="101"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
         <source>The random seed, where <n> is a positive integer. <p>The default is to use time() to generate a different seed for each run, <p>which means that two different runs of hmmcalibrate on the same HMM will give slightly different results. <p>You can use this option to generate reproducible results for different hmmcalibrate runs on the same HMM.</source>
         <translation>The random seed, where <n> is a positive integer. The default is to use time() to generate a different seed for each run, 
 which means that two different runs of hmmcalibrate on the same HMM will give slightly different results. 
@@ -270,7 +270,7 @@ You can use this option to generate reproducible results for different hmmcalibr
         <location filename="../src/u_search/HMMSearchDialog.ui" line="226"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="229"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="232"/>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="93"/>
         <source>E-value filtering can be used to exclude low-probability hits from result.</source>
         <translation>E-value filtering can be used to exclude low-probability hits from result.</translation>
     </message>
@@ -286,7 +286,7 @@ You can use this option to generate reproducible results for different hmmcalibr
         <location filename="../src/u_search/HMMSearchDialog.ui" line="135"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="138"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="141"/>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="94"/>
         <source>Score based filtering is an alternative to E-value filtering to exclude low-probability hits from result.</source>
         <translation>Score based filtering is an alternative to E-value filtering to exclude low-probability hits from result.</translation>
     </message>
@@ -328,7 +328,7 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="92"/>
         <source>Calculate the E-value scores as if we had seen a sequence database of &lt;n&gt; sequences.</source>
         <translation>Calculate the E-value scores as if we had seen a sequence database of <n> sequences.</translation>
     </message>
@@ -344,7 +344,7 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::GTest_uHMMERCalibrate</name>
     <message>
-        <location filename="../src/u_tests/uhmmerTests.cpp" line="570"/>
+        <location filename="../src/u_tests/uhmmerTests.cpp" line="589"/>
         <source>uhmmer-calibrate-subtask</source>
         <translation>HMM Calibrate</translation>
     </message>
@@ -352,83 +352,83 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMM2QDActor</name>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="65"/>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="150"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="67"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="152"/>
         <source>HMM2</source>
         <translation>HMM2</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="78"/>
         <source>QD HMM2 search</source>
         <translation>QD HMM2 search</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="82"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="84"/>
         <source>Power of e-value must be less or equal to zero. Using default value: 1e-1</source>
         <translation>Power of e-value must be less or equal to zero. Using default value: 1e-1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="151"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="153"/>
         <source>Searches HMM signals in a sequence with one or more profile HMM2 and saves the results as annotations.</source>
         <translation>Searches HMM signals in a sequence with one or more profile HMM2 and saves the results as annotations.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="157"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="159"/>
         <source>Profile HMM</source>
         <translation>Profile HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="158"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="160"/>
         <source>Semicolon-separated list of input HMM files.</source>
         <translation>Semicolon-separated list of input HMM files.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="161"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="163"/>
         <source>Min Length</source>
         <translation>Min Length</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="162"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="164"/>
         <source>Minimum length of a result region.</source>
         <translation>Minimum length of a result region.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="165"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="167"/>
         <source>Max Length</source>
         <translation>Max Length</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="166"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="168"/>
         <source>Maximum length of a result region.</source>
         <translation>Maximum length of a result region.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="169"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="171"/>
         <source>Filter by High E-value</source>
         <translation>Filter by High E-value</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="170"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="172"/>
         <source>Reports domains &lt;= this E-value threshold in output.</source>
         <translation>Reports domains &lt;= this E-value threshold in output.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="174"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="176"/>
         <source>Filter by Low Score</source>
         <translation>Filter by Low Score</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="175"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="177"/>
         <source>Reports domains &gt;= this score cutoff in output.</source>
         <translation>Reports domains &gt;= this score cutoff in output.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="178"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="180"/>
         <source>Number of Sequences</source>
         <translation>Number of Sequences</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="179"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="181"/>
         <source>Specifies number of significant sequences. It is used for domain E-value calculations.</source>
         <translation>Specifies number of significant sequences. It is used for domain E-value calculations.</translation>
     </message>
@@ -532,33 +532,33 @@ You can use this option to generate reproducible results for different hmmcalibr
     <message>
         <location filename="../src/u_build/HMMBuildDialogController.cpp" line="186"/>
         <source>HMM models</source>
-        <translation type="unfinished">HMM models</translation>
+        <translation>HMM models</translation>
     </message>
 </context>
 <context>
     <name>U2::HMMBuildTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="327"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="331"/>
         <source>Build HMM profile '%1'</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="344"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
         <source>Multiple alignment is empty</source>
         <translation>Multiple alignment is empty</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="352"/>
         <source>Multiple alignment is of 0 length</source>
         <translation>Multiple alignment is of 0 length</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="353"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="357"/>
         <source>Invalid alphabet! Only amino and nucleic alphabets are supported</source>
         <translation>Invalid alphabet! Only amino and nucleic alphabets are supported</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="361"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="365"/>
         <source>Error creating MSA structure</source>
         <translation>Error creating MSA structure</translation>
     </message>
@@ -566,57 +566,57 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMBuildToFileTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="316"/>
         <source>none</source>
         <translation>none</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="198"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="202"/>
         <source>Build HMM profile '%1' -> '%2'</source>
         <translation>Build HMM profile '%1' -> '%2'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="211"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="215"/>
         <source>Error reading alignment file</source>
         <translation>Error reading alignment file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="228"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="232"/>
         <source>Build HMM profile to '%1'</source>
         <translation>Build HMM profile to '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="253"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="257"/>
         <source>Incorrect input file</source>
         <translation>Incorrect input file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="258"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="262"/>
         <source>Alignment object not found!</source>
         <translation>Alignment object not found!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="300"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="304"/>
         <source>Source alignment</source>
         <translation>Source alignment</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="305"/>
         <source>Profile name</source>
         <translation>Profile name</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="303"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="307"/>
         <source>Task was not finished</source>
         <translation>Task was not finished</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="308"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
         <source>Profile file</source>
         <translation>Profile file</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="309"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="313"/>
         <source>Expert options</source>
         <translation>Expert options</translation>
     </message>
@@ -699,7 +699,7 @@ You can use this option to generate reproducible results for different hmmcalibr
     <message>
         <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="166"/>
         <source>HMM models</source>
-        <translation type="unfinished">HMM models</translation>
+        <translation>HMM models</translation>
     </message>
 </context>
 <context>
@@ -790,80 +790,80 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMIO</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="339"/>
+        <location filename="../src/HMMIO.cpp" line="338"/>
         <source>ALPH must precede NULE in HMM save files</source>
         <translation>ALPH must precede NULE in HMM save files</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="215"/>
-        <location filename="../src/HMMIO.cpp" line="231"/>
-        <location filename="../src/HMMIO.cpp" line="391"/>
-        <location filename="../src/HMMIO.cpp" line="397"/>
-        <location filename="../src/HMMIO.cpp" line="423"/>
-        <location filename="../src/HMMIO.cpp" line="454"/>
-        <location filename="../src/HMMIO.cpp" line="479"/>
+        <location filename="../src/HMMIO.cpp" line="214"/>
+        <location filename="../src/HMMIO.cpp" line="230"/>
+        <location filename="../src/HMMIO.cpp" line="390"/>
+        <location filename="../src/HMMIO.cpp" line="396"/>
+        <location filename="../src/HMMIO.cpp" line="422"/>
+        <location filename="../src/HMMIO.cpp" line="453"/>
+        <location filename="../src/HMMIO.cpp" line="478"/>
         <source>Illegal line</source>
         <translation>Illegal line</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="219"/>
+        <location filename="../src/HMMIO.cpp" line="218"/>
         <source>File format is not supported</source>
         <translation>File format is not supported</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="277"/>
-        <location filename="../src/HMMIO.cpp" line="282"/>
-        <location filename="../src/HMMIO.cpp" line="289"/>
-        <location filename="../src/HMMIO.cpp" line="294"/>
-        <location filename="../src/HMMIO.cpp" line="301"/>
-        <location filename="../src/HMMIO.cpp" line="306"/>
-        <location filename="../src/HMMIO.cpp" line="313"/>
-        <location filename="../src/HMMIO.cpp" line="319"/>
-        <location filename="../src/HMMIO.cpp" line="328"/>
-        <location filename="../src/HMMIO.cpp" line="333"/>
-        <location filename="../src/HMMIO.cpp" line="345"/>
-        <location filename="../src/HMMIO.cpp" line="354"/>
-        <location filename="../src/HMMIO.cpp" line="359"/>
-        <location filename="../src/HMMIO.cpp" line="403"/>
-        <location filename="../src/HMMIO.cpp" line="408"/>
-        <location filename="../src/HMMIO.cpp" line="412"/>
-        <location filename="../src/HMMIO.cpp" line="429"/>
-        <location filename="../src/HMMIO.cpp" line="433"/>
-        <location filename="../src/HMMIO.cpp" line="438"/>
-        <location filename="../src/HMMIO.cpp" line="445"/>
-        <location filename="../src/HMMIO.cpp" line="460"/>
-        <location filename="../src/HMMIO.cpp" line="469"/>
-        <location filename="../src/HMMIO.cpp" line="485"/>
-        <location filename="../src/HMMIO.cpp" line="493"/>
-        <location filename="../src/HMMIO.cpp" line="499"/>
-        <location filename="../src/HMMIO.cpp" line="504"/>
+        <location filename="../src/HMMIO.cpp" line="276"/>
+        <location filename="../src/HMMIO.cpp" line="281"/>
+        <location filename="../src/HMMIO.cpp" line="288"/>
+        <location filename="../src/HMMIO.cpp" line="293"/>
+        <location filename="../src/HMMIO.cpp" line="300"/>
+        <location filename="../src/HMMIO.cpp" line="305"/>
+        <location filename="../src/HMMIO.cpp" line="312"/>
+        <location filename="../src/HMMIO.cpp" line="318"/>
+        <location filename="../src/HMMIO.cpp" line="327"/>
+        <location filename="../src/HMMIO.cpp" line="332"/>
+        <location filename="../src/HMMIO.cpp" line="344"/>
+        <location filename="../src/HMMIO.cpp" line="353"/>
+        <location filename="../src/HMMIO.cpp" line="358"/>
+        <location filename="../src/HMMIO.cpp" line="402"/>
+        <location filename="../src/HMMIO.cpp" line="407"/>
+        <location filename="../src/HMMIO.cpp" line="411"/>
+        <location filename="../src/HMMIO.cpp" line="428"/>
+        <location filename="../src/HMMIO.cpp" line="432"/>
+        <location filename="../src/HMMIO.cpp" line="437"/>
+        <location filename="../src/HMMIO.cpp" line="444"/>
+        <location filename="../src/HMMIO.cpp" line="459"/>
+        <location filename="../src/HMMIO.cpp" line="468"/>
+        <location filename="../src/HMMIO.cpp" line="484"/>
+        <location filename="../src/HMMIO.cpp" line="492"/>
+        <location filename="../src/HMMIO.cpp" line="498"/>
+        <location filename="../src/HMMIO.cpp" line="503"/>
         <source>Invalid file structure near %1</source>
         <translation>Invalid file structure near %1</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="248"/>
-        <location filename="../src/HMMIO.cpp" line="374"/>
-        <location filename="../src/HMMIO.cpp" line="378"/>
+        <location filename="../src/HMMIO.cpp" line="247"/>
+        <location filename="../src/HMMIO.cpp" line="373"/>
+        <location filename="../src/HMMIO.cpp" line="377"/>
         <source>Value is illegal: %1</source>
         <translation>Value is illegal: %1</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="72"/>
+        <location filename="../src/HMMIO.cpp" line="71"/>
         <source>Alphabet is not set</source>
         <translation>Alphabet is not set</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="382"/>
+        <location filename="../src/HMMIO.cpp" line="381"/>
         <source>Value is not set for '%1'</source>
         <translation>Value is not set for '%1'</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="518"/>
+        <location filename="../src/HMMIO.cpp" line="517"/>
         <source>No '//' symbol found</source>
         <translation>No '//' symbol found</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="636"/>
+        <location filename="../src/HMMIO.cpp" line="635"/>
         <source>HMM models</source>
         <translation>HMM models</translation>
     </message>
@@ -871,7 +871,7 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMMSAEditorContext</name>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="215"/>
+        <location filename="../src/uHMMPlugin.cpp" line="216"/>
         <source>Build HMMER2 profile</source>
         <translation>Build HMMER2 profile</translation>
     </message>
@@ -879,7 +879,7 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMReadTask</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="651"/>
+        <location filename="../src/HMMIO.cpp" line="650"/>
         <source>Read HMM profile '%1'.</source>
         <translation>Read HMM profile '%1'.</translation>
     </message>
@@ -887,80 +887,80 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMSearchDialogController</name>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="114"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="127"/>
         <source>Select file with HMM model</source>
         <translation>Select file with HMM model</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="144"/>
         <source>HMM file not set!</source>
         <translation>HMM file not set!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="148"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="154"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="161"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="167"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="154"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="167"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="165"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="181"/>
         <source>Starting search process</source>
         <translation>Starting search process</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="168"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="184"/>
         <source>Hide</source>
         <translation>Hide</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="169"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="185"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="184"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="200"/>
         <source>HMM search finished with error: %1</source>
         <translation>HMM search finished with error: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="186"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="202"/>
         <source>HMM search finished successfuly!</source>
         <translation>HMM search finished successfuly!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="196"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="212"/>
         <source>Progress: %1%</source>
         <translation>Progress: %1%</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="90"/>
         <source>Cell BE optimized</source>
         <translation>Cell BE optimized</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="61"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="188"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="204"/>
         <source>Search</source>
         <translation>Search</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="62"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="189"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="205"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="80"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="93"/>
         <source>SSE optimized</source>
         <translation>SSE optimized</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="82"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="95"/>
         <source>Conservative</source>
         <translation>Conservative</translation>
     </message>
@@ -1001,47 +1001,47 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMSearchToAnnotationsTask</name>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="215"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="231"/>
         <source>HMM search, file '%1'</source>
         <translation>HMM search, file '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="221"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="237"/>
         <source>RAW alphabet is not supported!</source>
         <translation>RAW alphabet is not supported!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="237"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="253"/>
         <source>Annotation object was removed</source>
         <translation>Annotation object was removed</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="264"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="280"/>
         <source>HMM profile used</source>
         <translation>HMM profile used</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="267"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="283"/>
         <source>Task was not finished</source>
         <translation>Task was not finished</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="272"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="288"/>
         <source>Result annotation table</source>
         <translation>Result annotation table</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="273"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="289"/>
         <source>Result annotation group</source>
         <translation>Result annotation group</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="274"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="290"/>
         <source>Result annotation name</source>
         <translation>Result annotation name</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="277"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="293"/>
         <source>Results count</source>
         <translation>Results count</translation>
     </message>
@@ -1049,7 +1049,7 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::HMMWriteTask</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="671"/>
+        <location filename="../src/HMMIO.cpp" line="670"/>
         <source>Write HMM profile '%1'</source>
         <translation>Write HMM profile '%1'</translation>
     </message>
@@ -1057,27 +1057,27 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::LocalWorkflow::HMMBuildPrompter</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="182"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="203"/>
         <source>For each MSA from <u>%1</u>,</source>
         <translation>For each MSA from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="186"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="207"/>
         <source> and calibrate</source>
         <translation> and calibrate</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="188"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="209"/>
         <source>default</source>
         <translation>default</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="188"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="209"/>
         <source>custom</source>
         <translation>custom</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="190"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="211"/>
         <source>%1 build%2 HMM profile using <u>%3</u> settings.</source>
         <translation>%1 build%2 HMM profile using <u>%3</u> settings.</translation>
     </message>
@@ -1085,77 +1085,77 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::LocalWorkflow::HMMBuildWorker</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="296"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="317"/>
         <source>Built HMM profile</source>
         <translation>Built HMM profile</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="302"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="323"/>
         <source>Calibrated HMM profile</source>
         <translation>Calibrated HMM profile</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="143"/>
         <source>HMM2 Build</source>
         <translation>HMM2 Build</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
         <source>HMM profile</source>
         <translation>HMM profile</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="75"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="96"/>
         <source>HMM strategy</source>
         <translation>HMM strategy</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="75"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="96"/>
         <source>Specifies kind of alignments you want to allow.</source>
         <translation>Specifies kind of alignments you want to allow.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="76"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
         <source>Profile name</source>
         <translation>Profile name</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="76"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
         <source>Descriptive name of the HMM profile.</source>
         <translation>Descriptive name of the HMM profile.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="83"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="104"/>
         <source>Calibrate profile</source>
         <translation>Calibrate profile</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="85"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="106"/>
         <source>Parallel calibration</source>
         <translation>Parallel calibration</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="88"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="109"/>
         <source>Fixed length of samples</source>
         <translation>Fixed length of samples</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="91"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="112"/>
         <source>Mean length of samples</source>
         <translation>Mean length of samples</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="93"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="114"/>
         <source>Number of samples</source>
         <translation>Number of samples</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="118"/>
         <source>Standard deviation</source>
         <translation>Standard deviation</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="100"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="121"/>
         <source>Random seed</source>
         <translation>Random seed</translation>
     </message>
@@ -1164,48 +1164,48 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation type="obsolete">HMM Build</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="156"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="177"/>
         <source>Default</source>
-        <translation type="unfinished"></translation>
+        <translation>Default</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="218"/>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="219"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="239"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="240"/>
         <source>Incorrect value for seed parameter</source>
         <translation>Incorrect value for seed parameter</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="237"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="258"/>
         <source>Schema name not specified. Using default value: '%1'</source>
         <translation>Schema name not specified. Using default value: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="63"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="84"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="64"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="85"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Input multiple sequence alignment for building statistical model.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
         <source>Produced HMM profile</source>
         <translation>Produced HMM profile</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="83"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="104"/>
         <source>Enables/disables optional profile calibration.<p>An empirical HMM calibration costs time but it only has to be done once per model, and can greatly increase the sensitivity of a database search.</source>
         <translation>Enables/disables optional profile calibration.<p>An empirical HMM calibration costs time but it only has to be done once per model, and can greatly increase the sensitivity of a database search.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="107"/>
         <source>Number of parallel threads that the calibration will run in.</source>
         <translation>Number of parallel threads that the calibration will run in.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="143"/>
         <source>Builds a HMM profile from a multiple sequence alignment.<p>The HMM profile is a statistical model which captures position-specific information about how conserved each column of the alignment is, and which residues are likely.</source>
         <translation>Builds a HMM profile from a multiple sequence alignment.<p>The HMM profile is a statistical model which captures position-specific information about how conserved each column of the alignment is, and which residues are likely.</translation>
     </message>
@@ -1288,27 +1288,27 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::LocalWorkflow::HMMSearchPrompter</name>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="127"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="144"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>For each sequence from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="148"/>
         <source>Use <u>default</u> settings.</source>
         <translation>Use <u>default</u> settings.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="148"/>
         <source>Use <u>custom</u> settings.</source>
         <translation>Use <u>custom</u> settings.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="133"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="150"/>
         <source>%1 HMM signals%2. %3<br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation>%1 HMM signals%2. %3<br>Output the list of found regions annotated as <u>%4</u>.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="128"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="145"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation>using all profiles provided by <u>%1</u>,</translation>
     </message>
@@ -1316,87 +1316,87 @@ You can use this option to generate reproducible results for different hmmcalibr
 <context>
     <name>U2::LocalWorkflow::HMMSearchWorker</name>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="215"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="232"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation>Bad sequence supplied to input: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="238"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="255"/>
         <source>Found %1 HMM signals</source>
         <translation>Found %1 HMM signals</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="56"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="73"/>
         <source>HMM profile</source>
         <translation>HMM profile</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="57"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
         <source>Input sequence</source>
         <translation>Input sequence</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="59"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
         <source>HMM annotations</source>
         <translation>HMM annotations</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="91"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="92"/>
         <source>Number of seqs</source>
         <translation>Number of seqs</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="93"/>
         <source>Filter by high E-value</source>
         <translation>Filter by high E-value</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="94"/>
         <source>Filter by low score</source>
         <translation>Filter by low score</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="85"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="102"/>
         <source>HMM2 Search</source>
         <translation>HMM2 Search</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="158"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="175"/>
         <source>Power of e-value must be less or equal to zero. Using default value: 1e-1</source>
         <translation>Power of e-value must be less or equal to zero. Using default value: 1e-1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="167"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="184"/>
         <source>Value for attribute name is empty, default name used</source>
         <translation>Value for attribute name is empty, default name used</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="211"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="228"/>
         <source>Find HMM signals in %1</source>
         <translation>Find HMM signals in %1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="56"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="73"/>
         <source>HMM profile(s) to search with.</source>
         <translation>HMM profile(s) to search with.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="58"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
         <source>An input sequence (nucleotide or protein) to search in.</source>
         <translation>An input sequence (nucleotide or protein) to search in.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="60"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation>Annotations marking found similar sequence regions.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="91"/>
         <source>A name of the result annotations.</source>
         <translation>A name of the result annotations.</translation>
     </message>
@@ -1405,7 +1405,7 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation type="obsolete">HMM Search</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="86"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="103"/>
         <source>Searches each input sequence for significantly similar sequence matches to all specified HMM profiles. In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence.</source>
         <translation>Searches each input sequence for significantly similar sequence matches to all specified HMM profiles. In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence.</translation>
     </message>
@@ -1477,12 +1477,12 @@ You can use this option to generate reproducible results for different hmmcalibr
         <translation>Search with HMMER2...</translation>
     </message>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="190"/>
+        <location filename="../src/uHMMPlugin.cpp" line="191"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="190"/>
+        <location filename="../src/uHMMPlugin.cpp" line="191"/>
         <source>Error! Select sequence in Project view or open sequence view.</source>
         <translation>Error! Select sequence in Project view or open sequence view.</translation>
     </message>
diff --git a/src/plugins_3rdparty/hmm2/transl/russian.ts b/src/plugins_3rdparty/hmm2/transl/russian.ts
index 7554a56..d32ec01 100644
--- a/src/plugins_3rdparty/hmm2/transl/russian.ts
+++ b/src/plugins_3rdparty/hmm2/transl/russian.ts
@@ -99,31 +99,31 @@
 <context>
     <name>HMMBuildWorker</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="89"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="110"/>
         <source>Fix the length of the random sequences to <n>, where <n> is a positive (and reasonably sized) integer. <p>The default is instead to generate sequences with a variety of different lengths, controlled by a Gaussian (normal) distribution.</source>
         <translation>Фиксированная длина случайных последовательностей, положительное число разумной величины.
 По умолчанию, генерируются последовательности с нормальным (Гауссовым) распределением по длине.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="92"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="113"/>
         <source>Mean length of the synthetic sequences, positive real number. The default value is 325.</source>
         <translation>Средняя длина синтетических последовательностей.
 Положительное число, 325 по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="94"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="115"/>
         <source>Number of synthetic sequences. If <n> is less than about 1000, the fit to the EVD may fail. <p>Higher numbers of <n> will give better determined EVD parameters. <p>The default is 5000; it was empirically chosen as a tradeoff between accuracy and computation time.</source>
         <translation>Количество синтетических последовательностей.
 Значение по умолчанию (5000) было эмпирически определено как компромисс между точностью и временем вычисления.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="98"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="119"/>
         <source>Standard deviation of the synthetic sequence length. A positive number. <p>The default is 200. Note that the Gaussian is left-truncated so that no sequences have lengths <= 0.</source>
         <translation>Стандартное отклонение длины синтетической последовательности.
 Должно быть больше нуля, по умолчанию 200.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="101"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
         <source>The random seed, where <n> is a positive integer. <p>The default is to use time() to generate a different seed for each run, <p>which means that two different runs of hmmcalibrate on the same HMM will give slightly different results. <p>You can use this option to generate reproducible results for different hmmcalibrate runs on the same HMM.</source>
         <translation>Случайная затравка положительным целым числом. 
 По умолчанию используется текущее время в миллисекундах для каждого запуска,что приводит к небольшим и незначительным различиям при каждой калибровке одного и того же профайла.
@@ -264,7 +264,7 @@ The default is instead to generate sequences with a variety of different lengths
         <location filename="../src/u_search/HMMSearchDialog.ui" line="226"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="229"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="232"/>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="93"/>
         <source>E-value filtering can be used to exclude low-probability hits from result.</source>
         <translation>Отбрасывание результатов по Е-величине помогает исключить мало-вероятные сигналы.</translation>
     </message>
@@ -280,7 +280,7 @@ The default is instead to generate sequences with a variety of different lengths
         <location filename="../src/u_search/HMMSearchDialog.ui" line="135"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="138"/>
         <location filename="../src/u_search/HMMSearchDialog.ui" line="141"/>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="94"/>
         <source>Score based filtering is an alternative to E-value filtering to exclude low-probability hits from result.</source>
         <translation>Помогает исключить мало-вероятные сигналы.</translation>
     </message>
@@ -322,7 +322,7 @@ The default is instead to generate sequences with a variety of different lengths
         <translation>Алгоритм</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="92"/>
         <source>Calculate the E-value scores as if we had seen a sequence database of &lt;n&gt; sequences.</source>
         <translation>Считать Е-величину как если бы имелась база из <n> последовательностей.</translation>
     </message>
@@ -338,7 +338,7 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::GTest_uHMMERCalibrate</name>
     <message>
-        <location filename="../src/u_tests/uhmmerTests.cpp" line="570"/>
+        <location filename="../src/u_tests/uhmmerTests.cpp" line="589"/>
         <source>uhmmer-calibrate-subtask</source>
         <translation>Калибровка HMM профайла</translation>
     </message>
@@ -346,83 +346,83 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMM2QDActor</name>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="65"/>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="150"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="67"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="152"/>
         <source>HMM2</source>
         <translation>HMM2</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="78"/>
         <source>QD HMM2 search</source>
         <translation>Искать сигналы HMM2</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="82"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="84"/>
         <source>Power of e-value must be less or equal to zero. Using default value: 1e-1</source>
         <translation>Степень e-value должна быть меньше или равна нулю. Исползутся значение по умолчанию: 1е-1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="151"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="153"/>
         <source>Searches HMM signals in a sequence with one or more profile HMM2 and saves the results as annotations.</source>
         <translation>Поиск HMM сигналов в последовательности, используя один или несколько HMM2 профилей и сохранение результирующих аннотаций.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="157"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="159"/>
         <source>Profile HMM</source>
         <translation>Профиль HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="158"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="160"/>
         <source>Semicolon-separated list of input HMM files.</source>
         <translation>Список входных HMM-профилей, разделенных точкой с запятой.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="161"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="163"/>
         <source>Min Length</source>
         <translation>Мин длина</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="162"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="164"/>
         <source>Minimum length of a result region.</source>
         <translation>Мин длина результирующего региона.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="165"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="167"/>
         <source>Max Length</source>
         <translation>Макс длина</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="166"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="168"/>
         <source>Maximum length of a result region.</source>
         <translation>Максимальная длина результируюшего региона.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="169"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="171"/>
         <source>Filter by High E-value</source>
         <translation>Фильтрация по высокому Е-значению</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="170"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="172"/>
         <source>Reports domains &lt;= this E-value threshold in output.</source>
         <translation>Возвращать результаты &lt;= данного E-value (математическое ожидание).</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="174"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="176"/>
         <source>Filter by Low Score</source>
         <translation>Фильтрация по низкому score</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="175"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="177"/>
         <source>Reports domains &gt;= this score cutoff in output.</source>
         <translation>Возвращать результаты &lt;= данного score (веса).</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="178"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="180"/>
         <source>Number of Sequences</source>
         <translation>Число последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="179"/>
+        <location filename="../src/u_search/HMMSearchQDActor.cpp" line="181"/>
         <source>Specifies number of significant sequences. It is used for domain E-value calculations.</source>
         <translation>Число значимых последовательностей. Используется для вычисления E-value.</translation>
     </message>
@@ -457,7 +457,7 @@ The default is instead to generate sequences with a variety of different lengths
         <location filename="../src/u_build/HMMBuildDialogController.cpp" line="56"/>
         <location filename="../src/u_build/HMMBuildDialogController.cpp" line="164"/>
         <source>Close</source>
-        <translation>Close</translation>
+        <translation type="unfinished">Отмена</translation>
     </message>
     <message>
         <location filename="../src/u_build/HMMBuildDialogController.cpp" line="77"/>
@@ -522,33 +522,33 @@ The default is instead to generate sequences with a variety of different lengths
     <message>
         <location filename="../src/u_build/HMMBuildDialogController.cpp" line="186"/>
         <source>HMM models</source>
-        <translation type="unfinished">Профайлы HMM</translation>
+        <translation>Профайлы HMM</translation>
     </message>
 </context>
 <context>
     <name>U2::HMMBuildTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="327"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="331"/>
         <source>Build HMM profile '%1'</source>
         <translation>Построение HMM профала '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="344"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
         <source>Multiple alignment is empty</source>
         <translation>Выравнивание не содержит данных</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="348"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="352"/>
         <source>Multiple alignment is of 0 length</source>
         <translation>Выравнивание длины 0</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="353"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="357"/>
         <source>Invalid alphabet! Only amino and nucleic alphabets are supported</source>
         <translation>Неподдерживаемый тип алфавита</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="361"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="365"/>
         <source>Error creating MSA structure</source>
         <translation>Недостаточно памяти для построения выравнивания</translation>
     </message>
@@ -556,57 +556,57 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMBuildToFileTask</name>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="316"/>
         <source>none</source>
         <translation>нет</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="198"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="202"/>
         <source>Build HMM profile '%1' -> '%2'</source>
         <translation>Построение HMM профайла '%1'->'%2'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="211"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="215"/>
         <source>Error reading alignment file</source>
         <translation>Ошибка чтения файла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="228"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="232"/>
         <source>Build HMM profile to '%1'</source>
         <translation>Построение HMM профайла '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="253"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="257"/>
         <source>Incorrect input file</source>
         <translation>Неправильный входной файл</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="258"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="262"/>
         <source>Alignment object not found!</source>
         <translation>Объект выравнивания не найден!</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="300"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="304"/>
         <source>Source alignment</source>
         <translation>Исходное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="301"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="305"/>
         <source>Profile name</source>
         <translation>Имя профайла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="303"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="307"/>
         <source>Task was not finished</source>
         <translation>Задача была не завершена</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="308"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="312"/>
         <source>Profile file</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="309"/>
+        <location filename="../src/u_build/HMMBuildDialogController.cpp" line="313"/>
         <source>Expert options</source>
         <translation>Дополнительные опции</translation>
     </message>
@@ -689,7 +689,7 @@ The default is instead to generate sequences with a variety of different lengths
     <message>
         <location filename="../src/u_calibrate/HMMCalibrateDialogController.cpp" line="166"/>
         <source>HMM models</source>
-        <translation type="unfinished">Профайлы HMM</translation>
+        <translation>Профайлы HMM</translation>
     </message>
 </context>
 <context>
@@ -780,80 +780,80 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMIO</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="215"/>
-        <location filename="../src/HMMIO.cpp" line="231"/>
-        <location filename="../src/HMMIO.cpp" line="391"/>
-        <location filename="../src/HMMIO.cpp" line="397"/>
-        <location filename="../src/HMMIO.cpp" line="423"/>
-        <location filename="../src/HMMIO.cpp" line="454"/>
-        <location filename="../src/HMMIO.cpp" line="479"/>
+        <location filename="../src/HMMIO.cpp" line="214"/>
+        <location filename="../src/HMMIO.cpp" line="230"/>
+        <location filename="../src/HMMIO.cpp" line="390"/>
+        <location filename="../src/HMMIO.cpp" line="396"/>
+        <location filename="../src/HMMIO.cpp" line="422"/>
+        <location filename="../src/HMMIO.cpp" line="453"/>
+        <location filename="../src/HMMIO.cpp" line="478"/>
         <source>Illegal line</source>
         <translation>Ошибка формата</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="219"/>
+        <location filename="../src/HMMIO.cpp" line="218"/>
         <source>File format is not supported</source>
         <translation>Формат не поддерживается</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="277"/>
-        <location filename="../src/HMMIO.cpp" line="282"/>
-        <location filename="../src/HMMIO.cpp" line="289"/>
-        <location filename="../src/HMMIO.cpp" line="294"/>
-        <location filename="../src/HMMIO.cpp" line="301"/>
-        <location filename="../src/HMMIO.cpp" line="306"/>
-        <location filename="../src/HMMIO.cpp" line="313"/>
-        <location filename="../src/HMMIO.cpp" line="319"/>
-        <location filename="../src/HMMIO.cpp" line="328"/>
-        <location filename="../src/HMMIO.cpp" line="333"/>
-        <location filename="../src/HMMIO.cpp" line="345"/>
-        <location filename="../src/HMMIO.cpp" line="354"/>
-        <location filename="../src/HMMIO.cpp" line="359"/>
-        <location filename="../src/HMMIO.cpp" line="403"/>
-        <location filename="../src/HMMIO.cpp" line="408"/>
-        <location filename="../src/HMMIO.cpp" line="412"/>
-        <location filename="../src/HMMIO.cpp" line="429"/>
-        <location filename="../src/HMMIO.cpp" line="433"/>
-        <location filename="../src/HMMIO.cpp" line="438"/>
-        <location filename="../src/HMMIO.cpp" line="445"/>
-        <location filename="../src/HMMIO.cpp" line="460"/>
-        <location filename="../src/HMMIO.cpp" line="469"/>
-        <location filename="../src/HMMIO.cpp" line="485"/>
-        <location filename="../src/HMMIO.cpp" line="493"/>
-        <location filename="../src/HMMIO.cpp" line="499"/>
-        <location filename="../src/HMMIO.cpp" line="504"/>
+        <location filename="../src/HMMIO.cpp" line="276"/>
+        <location filename="../src/HMMIO.cpp" line="281"/>
+        <location filename="../src/HMMIO.cpp" line="288"/>
+        <location filename="../src/HMMIO.cpp" line="293"/>
+        <location filename="../src/HMMIO.cpp" line="300"/>
+        <location filename="../src/HMMIO.cpp" line="305"/>
+        <location filename="../src/HMMIO.cpp" line="312"/>
+        <location filename="../src/HMMIO.cpp" line="318"/>
+        <location filename="../src/HMMIO.cpp" line="327"/>
+        <location filename="../src/HMMIO.cpp" line="332"/>
+        <location filename="../src/HMMIO.cpp" line="344"/>
+        <location filename="../src/HMMIO.cpp" line="353"/>
+        <location filename="../src/HMMIO.cpp" line="358"/>
+        <location filename="../src/HMMIO.cpp" line="402"/>
+        <location filename="../src/HMMIO.cpp" line="407"/>
+        <location filename="../src/HMMIO.cpp" line="411"/>
+        <location filename="../src/HMMIO.cpp" line="428"/>
+        <location filename="../src/HMMIO.cpp" line="432"/>
+        <location filename="../src/HMMIO.cpp" line="437"/>
+        <location filename="../src/HMMIO.cpp" line="444"/>
+        <location filename="../src/HMMIO.cpp" line="459"/>
+        <location filename="../src/HMMIO.cpp" line="468"/>
+        <location filename="../src/HMMIO.cpp" line="484"/>
+        <location filename="../src/HMMIO.cpp" line="492"/>
+        <location filename="../src/HMMIO.cpp" line="498"/>
+        <location filename="../src/HMMIO.cpp" line="503"/>
         <source>Invalid file structure near %1</source>
         <translation>Некорректная структура файла вблизи "%1"</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="339"/>
+        <location filename="../src/HMMIO.cpp" line="338"/>
         <source>ALPH must precede NULE in HMM save files</source>
         <translation>ALPH must precede NULE in HMM save files</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="248"/>
-        <location filename="../src/HMMIO.cpp" line="374"/>
-        <location filename="../src/HMMIO.cpp" line="378"/>
+        <location filename="../src/HMMIO.cpp" line="247"/>
+        <location filename="../src/HMMIO.cpp" line="373"/>
+        <location filename="../src/HMMIO.cpp" line="377"/>
         <source>Value is illegal: %1</source>
         <translation>Некорректное значение: "%1"</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="72"/>
+        <location filename="../src/HMMIO.cpp" line="71"/>
         <source>Alphabet is not set</source>
         <translation>Не установлен алфавит</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="382"/>
+        <location filename="../src/HMMIO.cpp" line="381"/>
         <source>Value is not set for '%1'</source>
         <translation>Не установлено значение для "%1"</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="518"/>
+        <location filename="../src/HMMIO.cpp" line="517"/>
         <source>No '//' symbol found</source>
         <translation>Не найден маркер конца структуры: '//'</translation>
     </message>
     <message>
-        <location filename="../src/HMMIO.cpp" line="636"/>
+        <location filename="../src/HMMIO.cpp" line="635"/>
         <source>HMM models</source>
         <translation>Профайлы HMM</translation>
     </message>
@@ -861,7 +861,7 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMMSAEditorContext</name>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="215"/>
+        <location filename="../src/uHMMPlugin.cpp" line="216"/>
         <source>Build HMMER2 profile</source>
         <translation>Построить профиль с помощью HMMER2</translation>
     </message>
@@ -869,7 +869,7 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMReadTask</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="651"/>
+        <location filename="../src/HMMIO.cpp" line="650"/>
         <source>Read HMM profile '%1'.</source>
         <translation>Чтение HMM профайла '%1'.</translation>
     </message>
@@ -877,80 +877,80 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMSearchDialogController</name>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="114"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="127"/>
         <source>Select file with HMM model</source>
         <translation>Выбор HMM профайла для калибровки</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="144"/>
         <source>HMM file not set!</source>
         <translation>Укажите файл с HMM профайлом!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="148"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="154"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="161"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="167"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="154"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="167"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="165"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="181"/>
         <source>Starting search process</source>
         <translation>Начинается поиск</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="168"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="184"/>
         <source>Hide</source>
         <translation>Скрыть</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="169"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="185"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="184"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="200"/>
         <source>HMM search finished with error: %1</source>
         <translation>Построение HMM профайла завершилось с ошибкой: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="186"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="202"/>
         <source>HMM search finished successfuly!</source>
         <translation>HMM профайл успешно построен!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="196"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="212"/>
         <source>Progress: %1%</source>
         <translation>Прогресс: %1%</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="90"/>
         <source>Cell BE optimized</source>
         <translation>Оптимизирован для Cell BE</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="61"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="188"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="204"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="62"/>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="189"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="205"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="80"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="93"/>
         <source>SSE optimized</source>
         <translation>Оптимизирован для SSE</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="82"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="95"/>
         <source>Conservative</source>
         <translation>Стандартный</translation>
     </message>
@@ -991,47 +991,47 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMSearchToAnnotationsTask</name>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="215"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="231"/>
         <source>HMM search, file '%1'</source>
         <translation>HMM поиск, файл '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="221"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="237"/>
         <source>RAW alphabet is not supported!</source>
         <translation>Неправильный алфавит последовательности!</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="237"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="253"/>
         <source>Annotation object was removed</source>
         <translation>Объект аннотаций был удалён</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="264"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="280"/>
         <source>HMM profile used</source>
         <translation>Использованный HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="267"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="283"/>
         <source>Task was not finished</source>
         <translation>Задача была не завершена</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="272"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="288"/>
         <source>Result annotation table</source>
         <translation>Таблица аннотаций результата</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="273"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="289"/>
         <source>Result annotation group</source>
         <translation>Группа аннотаций результата</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="274"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="290"/>
         <source>Result annotation name</source>
         <translation>Имя аннотаций результата</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="277"/>
+        <location filename="../src/u_search/HMMSearchDialogController.cpp" line="293"/>
         <source>Results count</source>
         <translation>Количество найденных регионов</translation>
     </message>
@@ -1039,7 +1039,7 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::HMMWriteTask</name>
     <message>
-        <location filename="../src/HMMIO.cpp" line="671"/>
+        <location filename="../src/HMMIO.cpp" line="670"/>
         <source>Write HMM profile '%1'</source>
         <translation>Запись HMM профайла '%1'</translation>
     </message>
@@ -1047,27 +1047,27 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::LocalWorkflow::HMMBuildPrompter</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="182"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="203"/>
         <source>For each MSA from <u>%1</u>,</source>
         <translation>Для каждого выравнивания из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="186"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="207"/>
         <source> and calibrate</source>
         <translation> и калибровать</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="188"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="209"/>
         <source>default</source>
         <translation>настройки по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="188"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="209"/>
         <source>custom</source>
         <translation>выбранные настройки</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="190"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="211"/>
         <source>%1 build%2 HMM profile using <u>%3</u> settings.</source>
         <translation>%1 построить%2 HMM профайл используя <u>%3</u>.</translation>
     </message>
@@ -1075,77 +1075,77 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::LocalWorkflow::HMMBuildWorker</name>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="296"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="317"/>
         <source>Built HMM profile</source>
         <translation>Построен профайл HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="302"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="323"/>
         <source>Calibrated HMM profile</source>
         <translation>Откалиброван профайл HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="143"/>
         <source>HMM2 Build</source>
         <translation>Построение профиля с помощью HMMER2</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
         <source>HMM profile</source>
         <translation>Профайл HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="75"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="96"/>
         <source>HMM strategy</source>
         <translation>Стратегия HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="75"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="96"/>
         <source>Specifies kind of alignments you want to allow.</source>
         <translation>Выбор типа искомого выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="76"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
         <source>Profile name</source>
         <translation>Имя профайла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="76"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
         <source>Descriptive name of the HMM profile.</source>
         <translation>Описательное имя целевого профайла HMM.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="83"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="104"/>
         <source>Calibrate profile</source>
         <translation>Калибровать</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="85"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="106"/>
         <source>Parallel calibration</source>
         <translation>Параллельная калибрация</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="88"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="109"/>
         <source>Fixed length of samples</source>
         <translation>Фиксированная длина сэмплов</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="91"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="112"/>
         <source>Mean length of samples</source>
         <translation>Средняя длина сэмплов</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="93"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="114"/>
         <source>Number of samples</source>
         <translation>Число сэмплов</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="97"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="118"/>
         <source>Standard deviation</source>
         <translation>Стандартное отклонение</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="100"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="121"/>
         <source>Random seed</source>
         <translation>Затравка</translation>
     </message>
@@ -1154,48 +1154,48 @@ The default is instead to generate sequences with a variety of different lengths
         <translation type="obsolete">Построение HMM профайла</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="156"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="177"/>
         <source>Default</source>
-        <translation type="unfinished"></translation>
+        <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="218"/>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="219"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="239"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="240"/>
         <source>Incorrect value for seed parameter</source>
         <translation>Некорректное значение для параметра затравки</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="237"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="258"/>
         <source>Schema name not specified. Using default value: '%1'</source>
         <translation>Не задано имя схемы. Использовано значение по умолчанию: '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="63"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="84"/>
         <source>Input MSA</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="64"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="85"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Множественное выравнивание последовательностей для построения статистической модели.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="65"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
         <source>Produced HMM profile</source>
         <translation>Произведённый профайл HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="83"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="104"/>
         <source>Enables/disables optional profile calibration.<p>An empirical HMM calibration costs time but it only has to be done once per model, and can greatly increase the sensitivity of a database search.</source>
         <translation>Включить/выключить калибрацию профайлов. <p>Однократная калибрация случайными синтетическими последовательностями занимает некоторое время, но может существенно улучшить чувствительность поиска.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="86"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="107"/>
         <source>Number of parallel threads that the calibration will run in.</source>
         <translation>Число потоков для параллельной калибрации.</translation>
     </message>
     <message>
-        <location filename="../src/u_build/HMMBuildWorker.cpp" line="122"/>
+        <location filename="../src/u_build/HMMBuildWorker.cpp" line="143"/>
         <source>Builds a HMM profile from a multiple sequence alignment.<p>The HMM profile is a statistical model which captures position-specific information about how conserved each column of the alignment is, and which residues are likely.</source>
         <translation>Строит профайлы HMM по входящим множественным выравниваниям.</translation>
     </message>
@@ -1278,27 +1278,27 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::LocalWorkflow::HMMSearchPrompter</name>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="127"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="144"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>Для каждой последовательности из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="148"/>
         <source>Use <u>default</u> settings.</source>
         <translation>Использовать настройки <u>по умолчанию</u>.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="131"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="148"/>
         <source>Use <u>custom</u> settings.</source>
         <translation>Использовать <u>указанные</u> настройки.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="133"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="150"/>
         <source>%1 HMM signals%2. %3<br>Output the list of found regions annotated as <u>%4</u>.</source>
         <translation>%1 HMM сигналы%2. %3<br>Выдать список найденных регионов аннотированных как <u>%4</u>.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="128"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="145"/>
         <source>using all profiles provided by <u>%1</u>,</source>
         <translation>со всеми профайлами из <u>%1</u>,</translation>
     </message>
@@ -1306,92 +1306,92 @@ The default is instead to generate sequences with a variety of different lengths
 <context>
     <name>U2::LocalWorkflow::HMMSearchWorker</name>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="215"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="232"/>
         <source>Bad sequence supplied to input: %1</source>
         <translation>Некорректная последовательность: %1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="238"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="255"/>
         <source>Found %1 HMM signals</source>
         <translation>Найдено %1 сигналов HMM</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="56"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="73"/>
         <source>HMM profile</source>
         <translation>HMM профайл</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="57"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
         <source>Input sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="59"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
         <source>HMM annotations</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="91"/>
         <source>Result annotation</source>
         <translation>Имя аннотации</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="92"/>
         <source>Number of seqs</source>
         <translation>Число последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="76"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="93"/>
         <source>Filter by high E-value</source>
         <translation>Фильтр на большие Е</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="94"/>
         <source>Filter by low score</source>
         <translation>Фильтр на малые веса</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="85"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="102"/>
         <source>HMM2 Search</source>
         <translation>Поиск с помощью HMMER2</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="158"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="175"/>
         <source>Power of e-value must be less or equal to zero. Using default value: 1e-1</source>
         <translation>Степень e-value должна быть меньше или равна нулю. Исползутся значение по умолчанию: 1е-1</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="167"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="184"/>
         <source>Value for attribute name is empty, default name used</source>
         <translation>Имя не указано, использовано значение по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="211"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="228"/>
         <source>Find HMM signals in %1</source>
         <translation>Поиск HMM сигналов в последовательности '%1'</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="56"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="73"/>
         <source>HMM profile(s) to search with.</source>
         <translation>HMM профайлы для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="58"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="75"/>
         <source>An input sequence (nucleotide or protein) to search in.</source>
         <translation>Входная последовательность для поиска (протеиновая или нуклеотидная).</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="60"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="77"/>
         <source>Annotations marking found similar sequence regions.</source>
         <translation>Аннотации размечающие найденные регионы совпадения с HMM.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="74"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="91"/>
         <source>A name of the result annotations.</source>
         <translation>Имя аннотации для разметки результатов.</translation>
     </message>
     <message>
-        <location filename="../src/u_search/HMMSearchWorker.cpp" line="86"/>
+        <location filename="../src/u_search/HMMSearchWorker.cpp" line="103"/>
         <source>Searches each input sequence for significantly similar sequence matches to all specified HMM profiles. In case several profiles were supplied, searches with all profiles one by one and outputs united set of annotations for each sequence.</source>
         <translation>Ищет значимые совпадения с указанными HMM профайлами в каждой входной последовательности и выдаёт набор аннотированных регионов. Профайлов может быть несколько, поиск отработает для каждого профайла и выдаст общий набор аннотаций для каждой последовательности.</translation>
     </message>
@@ -1465,12 +1465,12 @@ The default is instead to generate sequences with a variety of different lengths
         <translation>Поиск с помощью HMMER2...</translation>
     </message>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="190"/>
+        <location filename="../src/uHMMPlugin.cpp" line="191"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/uHMMPlugin.cpp" line="190"/>
+        <location filename="../src/uHMMPlugin.cpp" line="191"/>
         <source>Error! Select sequence in Project view or open sequence view.</source>
         <translation>Сначала выберите последовательность.</translation>
     </message>
diff --git a/src/plugins_3rdparty/kalign/src/KalignAdapter.cpp b/src/plugins_3rdparty/kalign/src/KalignAdapter.cpp
index 289c5a9..582f091 100644
--- a/src/plugins_3rdparty/kalign/src/KalignAdapter.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,15 +26,15 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/Task.h>
 #include <U2Core/GAutoDeleteList.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <algorithm>
 #include <cctype>
 
-#include <QtCore/QVector>
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
+#include <QVector>
+#include <QMutex>
+#include <QMutexLocker>
 
 extern "C" {
 #include "kalign2/kalign2.h"
@@ -43,7 +43,7 @@ extern "C" {
 namespace U2 {
 
 //////////////////////////////////////////////////////////////////////////
-void KalignAdapter::align(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti) {
+void KalignAdapter::align(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     if(ti.cancelFlag)  {
         return;
     }
@@ -80,12 +80,12 @@ void cleanupMemory(float **submatrix, unsigned int numseq, float **dm, struct al
 }
 
 void throwCancellingException() {
-    throwKalignException("Align task has been cancelled");
+    throwKalignException((char *) "Align task has been cancelled");
 }
 
 }
 
-void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti) {
+void KalignAdapter::alignUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     ti.progress = 0;
     int* tree = 0;
     quint32 a, b, c;
@@ -102,7 +102,7 @@ void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
     unsigned int &numseq = ctx->numseq;
     unsigned int &numprofiles = ctx->numprofiles;
 
-    if (ma.getNumRows() < 2){
+    if (ma->getNumRows() < 2){
         if (!numseq){
             k_printf("No sequences found.\n\n");
         } else {
@@ -129,13 +129,13 @@ void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
     /* Convert MA to aln                                                    */
     /************************************************************************/
     k_printf("Prepare data");
-    numseq = ma.getNumRows();
+    numseq = ma->getNumRows();
     numprofiles = (numseq << 1) - 1;
     aln = aln_alloc(aln);
     for(quint32 i = 0 ; i < numseq; i++) {
-        const MAlignmentRow& row= ma.getRow(i);
-        aln->sl[i] = row.getUngappedLength(); //row.getCoreLength() - row.getCore().count('-');
-        aln->lsn[i] = row.getName().length();
+        const MultipleSequenceAlignmentRow row= ma->getMsaRow(i);
+        aln->sl[i] = row->getUngappedLength();
+        aln->lsn[i] = row->getName().length();
     }
 
     for (quint32 i = 0; i < numseq;i++) {
@@ -154,9 +154,9 @@ void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
 
     int aacode[26] = {0,1,2,3,4,5,6,7,8,-1,9,10,11,12,23,13,14,15,16,17,17,18,19,20,21,22};
     for(quint32 i = 0; i < numseq; i++) {
-        const MAlignmentRow& row= ma.getRow(i);
-        qstrncpy(aln->sn[i], row.getName().toLatin1(), row.getName().length() + 1); //+1 to include '\0'
-        QString gapless = QString(row.getCore()).remove('-');
+        const MultipleSequenceAlignmentRow row= ma->getMsaRow(i);
+        qstrncpy(aln->sn[i], row->getName().toLatin1(), row->getName().length() + 1); //+1 to include '\0'
+        QString gapless = QString(row->getCore()).remove('-');
         qstrncpy(aln->seq[i], gapless.toLatin1(), gapless.length() + 1);	//+1 to include '\0'
         for (quint32 j = 0; j < aln->sl[i]; j++) {
             if (isalpha((int)aln->seq[i][j])){
@@ -414,7 +414,7 @@ void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
     /************************************************************************/
     /* Convert aln to MA                                                    */
     /************************************************************************/
-    res.setAlphabet(ma.getAlphabet());
+    res->setAlphabet(ma->getAlphabet());
     for (quint32 i = 0; i < numseq;i++){
         int f = aln->nsip[i];
         QString seq;
@@ -422,8 +422,7 @@ void KalignAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
             seq += QString(aln->s[f][j],'-') + aln->seq[f][j];
         }
         seq += QString(aln->s[f][aln->sl[f]],'-');
-        U2OpStatus2Log os;
-        res.addRow(QString(aln->sn[f]), seq.toLatin1(), os);
+        res->addRow(QString(aln->sn[f]), seq.toLatin1());
     }
 
     //output(aln,param);
diff --git a/src/plugins_3rdparty/kalign/src/KalignAdapter.h b/src/plugins_3rdparty/kalign/src/KalignAdapter.h
index 014667d..3d03d50 100644
--- a/src/plugins_3rdparty/kalign/src/KalignAdapter.h
+++ b/src/plugins_3rdparty/kalign/src/KalignAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,20 +22,21 @@
 #ifndef _U2_KALIGN_ADAPTER_H_
 #define _U2_KALIGN_ADAPTER_H_
 
-#include <QtCore/QObject>
+#include <QObject>
+
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
-class MAlignment;
 class TaskStateInfo;
 
 class KalignAdapter : public QObject {
 	Q_OBJECT
 public:
-	static void align(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti);
+	static void align(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 
 private:
-	static void alignUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti);
+	static void alignUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 };
 
 }//namespace
diff --git a/src/plugins_3rdparty/kalign/src/KalignConstants.h b/src/plugins_3rdparty/kalign/src/KalignConstants.h
index 538c3a6..866c260 100644
--- a/src/plugins_3rdparty/kalign/src/KalignConstants.h
+++ b/src/plugins_3rdparty/kalign/src/KalignConstants.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
index 6d02bf0..1ee3724 100644
--- a/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -55,18 +55,18 @@ public:
 
 };
 
-KalignDialogController::KalignDialogController(QWidget* w, const MAlignment& _ma, KalignTaskSettings& _settings) 
-: QDialog(w), ma(_ma), settings(_settings)
+KalignDialogController::KalignDialogController(QWidget* w, const MultipleSequenceAlignment& _ma, KalignTaskSettings& _settings) 
+: QDialog(w), ma(_ma->getCopy()), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223241");
+    new HelpButton(this, buttonBox, "20875145");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     setupUiExt();
     inputGroupBox->setVisible(false);
     this->adjustSize();
-    translateCheckBox->setEnabled(ma.getAlphabet()->isNucleic());
+    translateCheckBox->setEnabled(ma->getAlphabet()->isNucleic());
     const DNAAlphabet* al = AppContext::getDNAAlphabetRegistry()->findById(BaseDNAAlphabetIds::NUCL_DNA_DEFAULT());
     DNATranslationRegistry* tr = AppContext::getDNATranslationRegistry();
     QList<DNATranslation*> aminoTs = tr->lookupTranslation(al, DNATranslationType_NUCL_2_AMINO);
@@ -83,7 +83,7 @@ void KalignDialogController::setupUiExt() {
     terminalGapSpinBox->setEnabled(false);
     bonusScoreSpinBox->setEnabled(false);
 
-    if(ma.getAlphabet()->isAmino()) {
+    if(ma->getAlphabet()->isAmino()) {
         gapOpenSpinBox->setValue(53.9);
         gapExtensionPenaltySpinBox->setValue(8.52);
         terminalGapSpinBox->setValue(4.42);
@@ -123,7 +123,7 @@ KalignAlignWithExtFileSpecifyDialogController::KalignAlignWithExtFileSpecifyDial
       saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223267");
+    new HelpButton(this, buttonBox, "20875171");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -144,7 +144,7 @@ KalignAlignWithExtFileSpecifyDialogController::KalignAlignWithExtFileSpecifyDial
 void KalignAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins_3rdparty/kalign/src/KalignDialogController.h b/src/plugins_3rdparty/kalign/src/KalignDialogController.h
index 01c45c8..ff694aa 100644
--- a/src/plugins_3rdparty/kalign/src/KalignDialogController.h
+++ b/src/plugins_3rdparty/kalign/src/KalignDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,7 +39,7 @@ class KalignDialogController : public QDialog, public Ui_KalignDialog {
     Q_OBJECT
 
 public:
-    KalignDialogController(QWidget* w, const MAlignment& ma, KalignTaskSettings& settings);
+    KalignDialogController(QWidget* w, const MultipleSequenceAlignment& ma, KalignTaskSettings& settings);
     bool translateToAmino();
     QString getTranslationId();
 
@@ -48,7 +48,7 @@ public slots:
 
 private:
     void setupUiExt(); 
-    MAlignment                          ma;
+    MultipleSequenceAlignment                          ma;
     KalignTaskSettings&                 settings;
 };
 
diff --git a/src/plugins_3rdparty/kalign/src/KalignException.cpp b/src/plugins_3rdparty/kalign/src/KalignException.cpp
index f514cf6..fe1cba2 100644
--- a/src/plugins_3rdparty/kalign/src/KalignException.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignException.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/KalignException.h b/src/plugins_3rdparty/kalign/src/KalignException.h
index fae768e..1f939a7 100644
--- a/src/plugins_3rdparty/kalign/src/KalignException.h
+++ b/src/plugins_3rdparty/kalign/src/KalignException.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/KalignPlugin.cpp b/src/plugins_3rdparty/kalign/src/KalignPlugin.cpp
index 0be3400..dc1160d 100644
--- a/src/plugins_3rdparty/kalign/src/KalignPlugin.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,22 +32,23 @@
 #include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Task.h>
 #include <U2Core/TaskSignalMapper.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/Notification.h>
 #include <U2Gui/ToolsMenu.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Lang/WorkflowSettings.h>
 
 #include <U2Test/GTestFrameworkComponents.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "KalignConstants.h"
 #include "KalignDialogController.h"
@@ -138,17 +139,15 @@ void KalignAction::sl_updateState() {
     setEnabled(!item->isStateLocked() && !msaEditor->isAlignmentEmpty());
 }
 
-KalignMSAEditorContext::KalignMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+KalignMSAEditorContext::KalignMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 }
 
 void KalignMSAEditorContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-        return;
-    }
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
 
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     KalignAction* alignAction = new KalignAction(this, view, tr("Align with Kalign..."), 2000);
@@ -157,8 +156,8 @@ void KalignMSAEditorContext::initViewContext(GObjectView* view) {
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
 
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align()));
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     addViewAction(alignAction);
 }
 
@@ -175,10 +174,10 @@ void KalignMSAEditorContext::sl_align() {
     KalignAction* action = qobject_cast<KalignAction*>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMSAEditor();
-    MAlignmentObject* obj = ed->getMSAObject();
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
 
     KalignTaskSettings s;
-    QObjectScopedPointer<KalignDialogController> dlg = new KalignDialogController(ed->getWidget(), obj->getMAlignment(), s);
+    QObjectScopedPointer<KalignDialogController> dlg = new KalignDialogController(ed->getWidget(), obj->getMultipleAlignment(), s);
     const int rc = dlg->exec();
     CHECK(!dlg.isNull(), );
 
diff --git a/src/plugins_3rdparty/kalign/src/KalignPlugin.h b/src/plugins_3rdparty/kalign/src/KalignPlugin.h
index 1a94231..6164658 100644
--- a/src/plugins_3rdparty/kalign/src/KalignPlugin.h
+++ b/src/plugins_3rdparty/kalign/src/KalignPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 //#include <kalign_local_task/KalignLocalTask.h> //TODO
 
diff --git a/src/plugins_3rdparty/kalign/src/KalignTask.cpp b/src/plugins_3rdparty/kalign/src/KalignTask.cpp
index e311eb9..5ee3a4b 100644
--- a/src/plugins_3rdparty/kalign/src/KalignTask.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -69,39 +69,41 @@ void KalignTaskSettings::reset() {
     inputFilePath="";
 }
 
-KalignTask::KalignTask(const MAlignment& ma, const KalignTaskSettings& _config)
-:TLSTask(tr("KALIGN alignment"), TaskFlags_FOSCOE), config(_config), inputMA(ma)
+KalignTask::KalignTask(const MultipleSequenceAlignment& ma, const KalignTaskSettings& _config)
+    :TLSTask(tr("KALIGN alignment"), TaskFlags_FOSCOE),
+      config(_config),
+      inputMA(ma->getExplicitCopy())
 {
     GCOUNTER( cvar, tvar, "KalignTask" );
-    inputSubMA = inputMA;
-    resultSubMA.setAlphabet(inputSubMA.getAlphabet());
-    QString inputMAName = inputMA.getName();
-    resultMA.setName(inputMAName);
-    resultSubMA.setName(inputMAName);
+    inputSubMA = inputMA->getExplicitCopy();
+    resultSubMA->setAlphabet(inputSubMA->getAlphabet());
+    QString inputMAName = inputMA->getName();
+    resultMA->setName(inputMAName);
+    resultSubMA->setName(inputMAName);
     tpm = Task::Progress_Manual;
-    quint64 mem = inputMA.getNumRows() * sizeof(float);
-    quint64 profileMem = (ma.getLength() + 2)*22*sizeof(float); // the size of profile that is built during kalign
+    quint64 mem = inputMA->getNumRows() * sizeof(float);
+    quint64 profileMem = (ma->getLength() + 2)*22*sizeof(float); // the size of profile that is built during kalign
     addTaskResource(TaskResourceUsage(RESOURCE_MEMORY, (profileMem + (mem * mem + 3 * mem)) / (1024 * 1024)));
 }
 
 void KalignTask::_run() {
-    SAFE_POINT_EXT(NULL != inputMA.getAlphabet(), stateInfo.setError("The alphabet is NULL"),);
-    if (inputMA.getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
-            inputMA.getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
-        setError(tr("Unsupported alphabet: %1").arg(inputMA.getAlphabet()->getName()));
+    SAFE_POINT_EXT(NULL != inputMA->getAlphabet(), stateInfo.setError("The alphabet is NULL"),);
+    if (inputMA->getAlphabet()->getId() == BaseDNAAlphabetIds::RAW() ||
+            inputMA->getAlphabet()->getId() == BaseDNAAlphabetIds::AMINO_EXTENDED()) {
+        setError(tr("Unsupported alphabet: %1").arg(inputMA->getAlphabet()->getName()));
         return;
     }
     algoLog.info(tr("Kalign alignment started"));
     CHECK(!hasError(),);
     doAlign();
     if (!hasError() && !isCanceled()) {
-        SAFE_POINT_EXT(NULL != resultMA.getAlphabet(), "The alphabet is NULL",);
+        SAFE_POINT_EXT(NULL != resultMA->getAlphabet(), "The alphabet is NULL",);
         algoLog.info(tr("Kalign alignment successfully finished"));
     }
 }
 
 void KalignTask::doAlign() {
-    SAFE_POINT_EXT(resultSubMA.isEmpty(), stateInfo.setError("Incorrect result state"),);
+    SAFE_POINT_EXT(resultSubMA->isEmpty(), stateInfo.setError("Incorrect result state"),);
     KalignAdapter::align(inputSubMA, resultSubMA, stateInfo);
     if (hasError()) {
         return;
@@ -138,7 +140,7 @@ TLSContext* KalignTask::createContextInstance()
 //////////////////////////////////////////////////////////////////////////
 // KalignGObjectTask
 
-KalignGObjectTask::KalignGObjectTask(MAlignmentObject* _obj, const KalignTaskSettings& _config)
+KalignGObjectTask::KalignGObjectTask(MultipleSequenceAlignmentObject* _obj, const KalignTaskSettings& _config)
 : AlignGObjectTask("", TaskFlags_NR_FOSCOE, _obj), lock(NULL), kalignTask(NULL), config(_config)
 {
     QString aliName = obj->getDocument()->getName();
@@ -168,7 +170,7 @@ void KalignGObjectTask::prepare() {
 
     lock = new StateLock(KALIGN_LOCK_REASON, StateLockFlag_LiveLock);
     obj->lockState(lock);
-    kalignTask = new KalignTask(obj->getMAlignment(), config);
+    kalignTask = new KalignTask(obj->getMultipleAlignment(), config);
     addSubTask(kalignTask);
 }
 
@@ -180,21 +182,21 @@ Task::ReportResult KalignGObjectTask::report() {
     CHECK_EXT(!obj->isStateLocked(), stateInfo.setError("object_is_state_locked"), ReportResult_Finished);
 
     // Apply the result
-    const MAlignment& inputMA = kalignTask->inputMA;
-    MAlignment resultMA = kalignTask->resultMA;
+    const MultipleSequenceAlignment& inputMA = kalignTask->inputMA;
+    MultipleSequenceAlignment resultMA = kalignTask->resultMA;
 
     QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(inputMA, resultMA, stateInfo);
     CHECK_OP(stateInfo, ReportResult_Finished);
 
-    if (rowsOrder.count() != inputMA.getNumRows()) {
+    if (rowsOrder.count() != inputMA->getNumRows()) {
         stateInfo.setError("Unexpected number of rows in the result multiple alignment!");
         return ReportResult_Finished;
     }
 
     QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-    for (int i = 0, n = resultMA.getNumRows(); i < n; ++i) {
-        qint64 rowId = resultMA.getRow(i).getRowDBInfo().rowId;
-        const QList<U2MsaGap>& newGapModel = resultMA.getRow(i).getGapModel();
+    for (int i = 0, n = resultMA->getNumRows(); i < n; ++i) {
+        qint64 rowId = resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+        const QList<U2MsaGap>& newGapModel = resultMA->getMsaRow(i)->getGapModel();
         rowsGapModel.insert(rowId, newGapModel);
     }
 
@@ -206,7 +208,7 @@ Task::ReportResult KalignGObjectTask::report() {
             lock = NULL;
         }
         else {
-            stateInfo.setError("MAlignment object has been changed");
+            stateInfo.setError("MultipleSequenceAlignment object has been changed");
             return ReportResult_Finished;
         }
 
@@ -218,11 +220,11 @@ Task::ReportResult KalignGObjectTask::report() {
             return ReportResult_Finished;
         }
 
-        obj->updateGapModel(rowsGapModel, stateInfo);
+        obj->updateGapModel(stateInfo, rowsGapModel);
         SAFE_POINT_OP(stateInfo, ReportResult_Finished);
 
-        if (rowsOrder != inputMA.getRowsIds()) {
-            obj->updateRowsOrder(rowsOrder, stateInfo);
+        if (rowsOrder != inputMA->getRowsIds()) {
+            obj->updateRowsOrder(stateInfo, rowsOrder);
             SAFE_POINT_OP(stateInfo, ReportResult_Finished);
         }
     }
@@ -235,7 +237,7 @@ Task::ReportResult KalignGObjectTask::report() {
 //KalignGObjectRunFromSchemaTask
 
 
-KalignGObjectRunFromSchemaTask::KalignGObjectRunFromSchemaTask(MAlignmentObject * obj, const KalignTaskSettings & c)
+KalignGObjectRunFromSchemaTask::KalignGObjectRunFromSchemaTask(MultipleSequenceAlignmentObject * obj, const KalignTaskSettings & c)
 : AlignGObjectTask("", TaskFlags_NR_FOSCOE,obj), config(c)
 {
     setMAObject(obj);
@@ -255,7 +257,7 @@ void KalignGObjectRunFromSchemaTask::prepare() {
     addSubTask(new SimpleMSAWorkflow4GObjectTask(tr("Workflow wrapper '%1'").arg(getTaskName()), obj, conf));
 }
 
-void KalignGObjectRunFromSchemaTask::setMAObject(MAlignmentObject* maobj) {
+void KalignGObjectRunFromSchemaTask::setMAObject(MultipleSequenceAlignmentObject* maobj) {
     SAFE_POINT_EXT(maobj != NULL, setError("Invalid MSA object detected"),);
     const Document* maDoc = maobj->getDocument();
     SAFE_POINT_EXT(NULL != maDoc, setError("Invalid MSA document detected"),);
@@ -290,7 +292,7 @@ void KalignWithExtFileSpecifySupportTask::prepare() {
 
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(config.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -322,7 +324,7 @@ QList<Task*> KalignWithExtFileSpecifySupportTask::onSubTaskFinished( Task* subTa
         currentDocument = loadDocumentTask->takeDocument();
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
 
         kalignGObjectTask = new KalignGObjectRunFromSchemaTask(mAObject, config);
diff --git a/src/plugins_3rdparty/kalign/src/KalignTask.h b/src/plugins_3rdparty/kalign/src/KalignTask.h
index 8986ff7..c4ad190 100644
--- a/src/plugins_3rdparty/kalign/src/KalignTask.h
+++ b/src/plugins_3rdparty/kalign/src/KalignTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,15 +22,14 @@
 #ifndef _U2_KALIGN_TASK_H_
 #define _U2_KALIGN_TASK_H_
 
+#include <U2Algorithm/MsaUtilTasks.h>
 
 #include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/TLSTask.h>
-#include <U2Algorithm/MAlignmentUtilTasks.h>
 #include <U2Core/U2Mod.h>
 
-
 #define KALIGN_CONTEXT_ID "kalign"
 
 struct kalign_context;
@@ -38,7 +37,7 @@ struct kalign_context;
 namespace U2 {
 
 class StateLock;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 class LoadDocumentTask;
 
 class KalignContext : public TLSContext {
@@ -63,28 +62,28 @@ public:
 class KalignTask : public TLSTask {
     Q_OBJECT
 public:
-    KalignTask(const MAlignment& ma, const KalignTaskSettings& config);
+    KalignTask(const MultipleSequenceAlignment& ma, const KalignTaskSettings& config);
     
     void _run();
     void doAlign();
     ReportResult report();
     
     KalignTaskSettings          config;
-    MAlignment                  inputMA;
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  inputMA;
+    MultipleSequenceAlignment                  resultMA;
     
-    MAlignment                  inputSubMA;
-    MAlignment                  resultSubMA;
+    MultipleSequenceAlignment                  inputSubMA;
+    MultipleSequenceAlignment                  resultSubMA;
     
 protected:
     TLSContext* createContextInstance();
 };
 
-//locks MAlignment object and propagate KalignTask results to it
+//locks MultipleSequenceAlignment object and propagate KalignTask results to it
 class  KalignGObjectTask : public AlignGObjectTask {
     Q_OBJECT
 public:
-    KalignGObjectTask(MAlignmentObject* obj, const KalignTaskSettings& config);
+    KalignGObjectTask(MultipleSequenceAlignmentObject* obj, const KalignTaskSettings& config);
     ~KalignGObjectTask();     
 
     virtual void prepare();
@@ -112,10 +111,10 @@ public:
 class KalignGObjectRunFromSchemaTask : public AlignGObjectTask {
     Q_OBJECT
 public:
-    KalignGObjectRunFromSchemaTask(MAlignmentObject * obj, const KalignTaskSettings & config);
+    KalignGObjectRunFromSchemaTask(MultipleSequenceAlignmentObject * obj, const KalignTaskSettings & config);
 
     void prepare();
-    void setMAObject(MAlignmentObject* maobj);
+    void setMAObject(MultipleSequenceAlignmentObject* maobj);
 private:
     KalignTaskSettings      config;
 };
@@ -130,7 +129,7 @@ public:
     void prepare();
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*   mAObject;
+    MultipleSequenceAlignmentObject*   mAObject;
     Document*           currentDocument;
     bool                cleanDoc;
     SaveDocumentTask*   saveDocumentTask;
diff --git a/src/plugins_3rdparty/kalign/src/KalignUtils.cpp b/src/plugins_3rdparty/kalign/src/KalignUtils.cpp
index 8475fa9..140cdee 100644
--- a/src/plugins_3rdparty/kalign/src/KalignUtils.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/KalignUtils.h b/src/plugins_3rdparty/kalign/src/KalignUtils.h
index 71f7a39..2f4e5e3 100644
--- a/src/plugins_3rdparty/kalign/src/KalignUtils.h
+++ b/src/plugins_3rdparty/kalign/src/KalignUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/KalignWorker.cpp b/src/plugins_3rdparty/kalign/src/KalignWorker.cpp
index d27d906..111fe10 100644
--- a/src/plugins_3rdparty/kalign/src/KalignWorker.cpp
+++ b/src/plugins_3rdparty/kalign/src/KalignWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,27 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#include "KalignWorker.h"
-#include "KalignConstants.h"
-#include "TaskLocalStorage.h"
-#include "KalignDialogController.h"
-
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/NoFailTaskWrapper.h>
+#include <U2Lang/WorkflowEnv.h>
 
-/* TRANSLATOR U2::LocalWorkflow::KalignWorker */
+#include "KalignConstants.h"
+#include "KalignDialogController.h"
+#include "KalignWorker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -82,7 +81,7 @@ void KalignWorkerFactory::init() {
 
     Descriptor desc(ACTOR_ID, KalignWorker::tr("Align with Kalign"),
         KalignWorker::tr("Aligns multiple sequence alignments (MSAs) supplied with Kalign."
-		"<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href=\"http://msa.sbc.su.se\">http://msa.sbc.su.se</a>."));
+        "<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href=\"http://msa->sbc.su.se\">http://msa->sbc.su.se</a>."));
 
     ActorPrototype* proto = new IntegralBusActorPrototype(desc, p, a);
 
@@ -152,12 +151,12 @@ Task* KalignWorker::tick() {
 
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if (msa.isEmpty()) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to Kalign.").arg(msa.getName()));
+        if (msa->isEmpty()) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to Kalign.").arg(msa->getName()));
             return NULL;
         }
         Task *t = new NoFailTaskWrapper(new KalignTask(msa, cfg));
@@ -185,13 +184,13 @@ void KalignWorker::sl_taskFinished() {
 
     SAFE_POINT(NULL != output, "NULL output!", );
     send(t->resultMA);
-    algoLog.info(tr("Aligned %1 with Kalign").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with Kalign").arg(t->resultMA->getName()));
 }
 
 void KalignWorker::cleanup() {
 }
 
-void KalignWorker::send(const MAlignment &msa) {
+void KalignWorker::send(const MultipleSequenceAlignment &msa) {
     SAFE_POINT(NULL != output, "NULL output!", );
     SharedDbiDataHandler msaId = context->getDataStorage()->putAlignment(msa);
     QVariantMap m;
diff --git a/src/plugins_3rdparty/kalign/src/KalignWorker.h b/src/plugins_3rdparty/kalign/src/KalignWorker.h
index d5ba032..93924d5 100644
--- a/src/plugins_3rdparty/kalign/src/KalignWorker.h
+++ b/src/plugins_3rdparty/kalign/src/KalignWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -56,7 +56,7 @@ private:
     KalignTaskSettings cfg;
 
 private:
-    void send(const MAlignment &msa);
+    void send(const MultipleSequenceAlignment &msa);
 }; 
 
 class KalignWorkerFactory : public DomainFactory {
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.cpp b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.cpp
index 05ac1e7..03268cd 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.cpp
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.cpp
@@ -6,18 +6,11 @@
 #include <U2Core/DNATranslation.h>
 #include <U2Core/U2SafePoints.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QVBoxLayout>
-#include <QtGui/QLayout>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QVBoxLayout>
-#include <QtWidgets/QLayout>
-#endif
-
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QLabel>
+#include <QLayout>
+#include <QList>
+#include <QString>
+#include <QVBoxLayout>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
index 5ad8549..d9a9a12 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergGUIExtensionFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,18 +26,11 @@
 
 #include <U2View/AlignmentAlgorithmGUIExtension.h>
 
-#include <QtCore/QObject>
-#include <QtCore/QVariantMap>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDoubleSpinBox>
-#include <QtGui/QComboBox>
-#include <QtGui/QCheckBox>
-#else
-#include <QtWidgets/QDoubleSpinBox>
-#include <QtWidgets/QComboBox>
-#include <QtWidgets/QCheckBox>
-#endif
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDoubleSpinBox>
+#include <QObject>
+#include <QVariantMap>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.cpp b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.cpp
index 090e39c..e8df1a3 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.cpp
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.cpp
@@ -11,21 +11,21 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/MAlignment.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/MAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/ProjectModel.h>
 
-#include <U2Algorithm/MAlignmentUtilTasks.h>
+#include <U2Algorithm/MsaUtilTasks.h>
 
 #include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/SimpleWorkflowTask.h>
 
-#include <QtCore/QVariant>
-#include <QtCore/QString>
-#include <QtCore/QRegExp>
+#include <QVariant>
+#include <QString>
+#include <QRegExp>
 
 namespace U2 {
 
@@ -54,9 +54,12 @@ bool PairwiseAlignmentHirschbergTaskSettings::convertCustomSettings() {
     return true;
 }
 
-PairwiseAlignmentHirschbergTask::PairwiseAlignmentHirschbergTask(PairwiseAlignmentHirschbergTaskSettings* _settings) :
-    PairwiseAlignmentTask(TaskFlag_NoRun), settings(_settings), kalignSubTask(NULL), workflowKalignSubTask(NULL), ma(NULL) {
-
+PairwiseAlignmentHirschbergTask::PairwiseAlignmentHirschbergTask(PairwiseAlignmentHirschbergTaskSettings* _settings)
+    : PairwiseAlignmentTask(TaskFlag_NoRun),
+      settings(_settings),
+      kalignSubTask(NULL),
+      workflowKalignSubTask(NULL)
+{
     SAFE_POINT(settings != NULL, "Task settings are not defined.", );
     SAFE_POINT(settings->convertCustomSettings() && settings->isValid(), "Invalide task settings.", );
 
@@ -79,11 +82,9 @@ PairwiseAlignmentHirschbergTask::PairwiseAlignmentHirschbergTask(PairwiseAlignme
     alphabet = U2AlphabetUtils::getById(settings->alphabet);
     SAFE_POINT(alphabet != NULL, "Albhabet is invalid.", );
 
-    ma = new MAlignment(firstName + " vs. " + secondName, alphabet);
-    ma->addRow(firstName, first, os);
-    CHECK_OP(os, );
-    ma->addRow(secondName, second, os);
-    CHECK_OP(os, );
+    ma = MultipleSequenceAlignment(firstName + " vs. " + secondName, alphabet);
+    ma->addRow(firstName, first);
+    ma->addRow(secondName, second);
 
     KalignTaskSettings kalignSettings;
     kalignSettings.gapOpenPenalty = settings->gapOpen;
@@ -91,14 +92,13 @@ PairwiseAlignmentHirschbergTask::PairwiseAlignmentHirschbergTask(PairwiseAlignme
     kalignSettings.termGapPenalty = settings->gapTerm;
     kalignSettings.secret = settings->bonusScore;
 
-    kalignSubTask = new KalignTask(*ma, kalignSettings);
+    kalignSubTask = new KalignTask(ma, kalignSettings);
     setUseDescriptionFromSubtask(true);
     setVerboseLogMode(true);
     addSubTask(kalignSubTask);
 }
 
 PairwiseAlignmentHirschbergTask::~PairwiseAlignmentHirschbergTask() {
-    delete ma;
     delete settings;
 }
 
@@ -125,9 +125,9 @@ QList<Task*> PairwiseAlignmentHirschbergTask::onSubTaskFinished(Task *subTask) {
             alignmentDoc = format->createNewLoadedDocument(IOAdapterUtils::get(BaseIOAdapters::LOCAL_FILE), GUrl(newFileUrl), localStateInfo);
             CHECK_OP(localStateInfo, res);
 
-            MAlignment resultMa = kalignSubTask->resultMA;
+            MultipleSequenceAlignment resultMa = kalignSubTask->resultMA;
 
-            MAlignmentObject * docObject = MAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), resultMa, localStateInfo);
+            MultipleSequenceAlignmentObject * docObject = MultipleSequenceAlignmentImporter::createAlignment(alignmentDoc->getDbiRef(), resultMa, localStateInfo);
             CHECK_OP(localStateInfo, res);
 
             alignmentDoc->addObject(docObject);
@@ -147,11 +147,11 @@ QList<Task*> PairwiseAlignmentHirschbergTask::onSubTaskFinished(Task *subTask) {
             SAFE_POINT_OP(os, res);
             for (int rowNumber = 0; rowNumber < rows.length(); ++rowNumber) {
                 if (rows[rowNumber].sequenceId == settings->firstSequenceRef.entityId) {
-                    con.dbi->getMsaDbi()->updateGapModel(settings->msaRef.entityId, rows[rowNumber].rowId, kalignSubTask->resultMA.getRow(0).getGapModel(), os);
+                    con.dbi->getMsaDbi()->updateGapModel(settings->msaRef.entityId, rows[rowNumber].rowId, kalignSubTask->resultMA->getMsaRow(0)->getGapModel(), os);
                     CHECK_OP(os, res);
                 }
                 if (rows[rowNumber].sequenceId == settings->secondSequenceRef.entityId) {
-                    con.dbi->getMsaDbi()->updateGapModel(settings->msaRef.entityId, rows[rowNumber].rowId, kalignSubTask->resultMA.getRow(1).getGapModel(), os);
+                    con.dbi->getMsaDbi()->updateGapModel(settings->msaRef.entityId, rows[rowNumber].rowId, kalignSubTask->resultMA->getMsaRow(1)->getGapModel(), os);
                     CHECK_OP(os, res);
                 }
             }
@@ -164,7 +164,7 @@ Task::ReportResult PairwiseAlignmentHirschbergTask::report() {
     propagateSubtaskError();
     CHECK_OP(stateInfo, ReportResult_Finished);
 
-    assert(kalignSubTask->inputMA.getNumRows() == kalignSubTask->resultMA.getNumRows());
+    assert(kalignSubTask->inputMA->getNumRows() == kalignSubTask->resultMA->getNumRows());
 
     return ReportResult_Finished;
 }
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.h b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.h
index b454ff8..dc3c0c1 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.h
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,13 +25,13 @@
 #include <U2Algorithm/PairwiseAlignmentTask.h>
 
 #include <U2Core/DNATranslation.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
-class KalignTask;
-class KalignGObjectRunFromSchemaTask;
 class DNAAlphabet;
-class MAlignment;
+class KalignGObjectRunFromSchemaTask;
+class KalignTask;
 class Project;
 
 class PairwiseAlignmentHirschbergTaskSettings : public PairwiseAlignmentTaskSettings {
@@ -72,7 +72,7 @@ protected:
     PairwiseAlignmentHirschbergTaskSettings* settings;
     KalignTask* kalignSubTask;
     KalignGObjectRunFromSchemaTask* workflowKalignSubTask;
-    MAlignment* ma;
+    MultipleSequenceAlignment ma;
     const DNAAlphabet* alphabet;
 };
 
diff --git a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTaskFactory.h b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTaskFactory.h
index e1de8ce..7ea9cad 100644
--- a/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTaskFactory.h
+++ b/src/plugins_3rdparty/kalign/src/PairwiseAlignmentHirschbergTaskFactory.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/TaskLocalStorage.cpp b/src/plugins_3rdparty/kalign/src/TaskLocalStorage.cpp
index dfc5837..9d673cd 100644
--- a/src/plugins_3rdparty/kalign/src/TaskLocalStorage.cpp
+++ b/src/plugins_3rdparty/kalign/src/TaskLocalStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/kalign/src/TaskLocalStorage.h b/src/plugins_3rdparty/kalign/src/TaskLocalStorage.h
index 633e70e..fa4d152 100644
--- a/src/plugins_3rdparty/kalign/src/TaskLocalStorage.h
+++ b/src/plugins_3rdparty/kalign/src/TaskLocalStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _KALIGN_TASK_LOCAL_STORAGE_
 #define _KALIGN_TASK_LOCAL_STORAGE_
 
-#include <QtCore/QThreadStorage>
+#include <QThreadStorage>
 
 class KalignContext;
 
diff --git a/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.cpp b/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.cpp
index e8e5c31..d9f0000 100644
--- a/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.cpp
+++ b/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,34 +19,29 @@
  * MA 02110-1301, USA.
  */
 
-#include "KalignTests.h"
-#include "KalignTask.h"
-#include "KalignConstants.h"
-
-//#include <kalign_local_task/KalignLocalTask.h>
-
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/SaveDocumentTask.h>
+#include <QDir>
+#include <QtMath>
 
-#include <U2Core/DocumentModel.h>
-#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/SaveDocumentTask.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/DNASequenceObject.h>
-
-#include <QtCore/QDir>
-
-
-/* TRANSLATOR U2::GTest*/
+#include "KalignConstants.h"
+#include "KalignTask.h"
+#include "KalignTests.h"
 
 namespace U2 {
 
-extern double QScore(const MAlignment& maTest, const MAlignment& maRef, TaskStateInfo& ti);
+extern double QScore(const MultipleSequenceAlignment& maTest, const MultipleSequenceAlignment& maRef, TaskStateInfo& ti);
 
 #define OUT_FILE_NAME_ATTR "out"
 #define IN_FILE_NAME_ATTR "in"
@@ -106,11 +101,11 @@ void Kalign_Load_Align_Compare_Task::prepare() {
     loadTask1->setSubtaskProgressWeight(0);
 }
 
-MAlignment Kalign_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
+MultipleSequenceAlignment Kalign_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
 
     int seqCount = dnaSeqs.count();
     U2SequenceObject *seq = qobject_cast<U2SequenceObject *>(dnaSeqs[0]);
-    MAlignment ma("Alignment",seq->getAlphabet());
+    MultipleSequenceAlignment ma("Alignment", seq->getAlphabet());
     for(int i=0; i<seqCount; i++) {
         seq = qobject_cast<U2SequenceObject *>(dnaSeqs[i]);
         if(seq == NULL) {
@@ -118,9 +113,8 @@ MAlignment Kalign_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
             return ma;
         }
         QByteArray seqData = seq->getWholeSequenceData(stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
-        ma.addRow(seq->getSequenceName(), seqData, stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
+        SAFE_POINT_OP(stateInfo, MultipleSequenceAlignment());
+        ma->addRow(seq->getSequenceName(), seqData);
     }
     return ma;
 }
@@ -146,16 +140,16 @@ QList<Task*> Kalign_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma1 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma1 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma1 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
 
@@ -170,7 +164,7 @@ QList<Task*> Kalign_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
         }
         KalignTask * localKalign = qobject_cast<KalignTask*>( subTask );
         assert( NULL != localKalign );
-        ma1->copyGapModel(localKalign->resultMA.getRows());
+        ma1->updateGapModel(localKalign->resultMA->getMsaRows());
     }
     else if (subTask == loadTask2) {
         if (loadTask2->hasError()) {
@@ -189,16 +183,16 @@ QList<Task*> Kalign_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma2 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma2 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma2 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
     }
@@ -207,26 +201,26 @@ QList<Task*> Kalign_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
 
 void Kalign_Load_Align_Compare_Task::run() {
 
-    const QList<MAlignmentRow> &alignedSeqs1 = ma1->getMAlignment().getRows();
-    const QList<MAlignmentRow> &alignedSeqs2 = ma2->getMAlignment().getRows();
+    const QList<MultipleSequenceAlignmentRow> alignedSeqs1 = ma1->getMsa()->getMsaRows();
+    const QList<MultipleSequenceAlignmentRow> alignedSeqs2 = ma2->getMsa()->getMsaRows();
 
-    foreach(const MAlignmentRow &maItem1, alignedSeqs1) {
+    foreach(const MultipleSequenceAlignmentRow &maItem1, alignedSeqs1) {
         bool nameFound = false;
-        foreach(const MAlignmentRow &maItem2, alignedSeqs2) {
-            if (maItem1.getName() == maItem2.getName()) {
+        foreach(const MultipleSequenceAlignmentRow &maItem2, alignedSeqs2) {
+            if (maItem1->getName() == maItem2->getName()) {
                 nameFound = true;
-                if(maItem2.getCoreEnd() != maItem1.getCoreEnd()) {
-                    stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(maItem1.getCoreEnd()).arg(maItem2.getCoreEnd()) );
+                if(maItem2->getCoreEnd() != maItem1->getCoreEnd()) {
+                    stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(maItem1->getCoreEnd()).arg(maItem2->getCoreEnd()) );
                     return;
                 }
                 if (maItem1 != maItem2) {
-                    stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(QString(maItem1.getCore())).arg(QString(maItem2.getCore())) );
+                    stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(QString(maItem1->getCore())).arg(QString(maItem2->getCore())) );
                     return;
                 }
             }
         }
         if (!nameFound) {
-            stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1.getName()) );
+            stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1->getName()) );
         }
     }
 }
@@ -360,11 +354,11 @@ void GTest_Kalign_Load_Align_QScore::prepare() {
     loadTask1->setSubtaskProgressWeight(0);
 }
 
-MAlignment GTest_Kalign_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
+MultipleSequenceAlignment GTest_Kalign_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
 
     int seqCount = dnaSeqs.count();
     U2SequenceObject *seq = qobject_cast<U2SequenceObject *>(dnaSeqs[0]);
-    MAlignment ma("Alignment",seq->getAlphabet());
+    MultipleSequenceAlignment ma("Alignment", seq->getAlphabet());
     for(int i=0; i<seqCount; i++) {
         seq = qobject_cast<U2SequenceObject *>(dnaSeqs[i]);
         if(seq == NULL) {
@@ -372,9 +366,8 @@ MAlignment GTest_Kalign_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
             return ma;
         }
         QByteArray seqData = seq->getWholeSequenceData(stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
-        ma.addRow(seq->getSequenceName(), seqData, stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
+        SAFE_POINT_OP(stateInfo, MultipleSequenceAlignment());
+        ma->addRow(seq->getSequenceName(), seqData);
     }
     return ma;
 }
@@ -400,20 +393,20 @@ QList<Task*> GTest_Kalign_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma1 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma1 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma1 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
 
-        kalignTask = new KalignTask(ma1->getMAlignment(),config);
+        kalignTask = new KalignTask(ma1->getMultipleAlignment(), config);
         res << kalignTask;
         this->connect(kalignTask,SIGNAL(si_progressChanged()),SLOT(sl_kalignProgressChg()));
     }
@@ -424,7 +417,7 @@ QList<Task*> GTest_Kalign_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
         }
         KalignTask * localKalign = qobject_cast<KalignTask*>( subTask );
         assert( NULL != localKalign );
-        ma1->copyGapModel(localKalign->resultMA.getRows());
+        ma1->updateGapModel(localKalign->resultMA->getMsaRows());
     }
     else if (subTask == loadTask2) {
         if (loadTask2->hasError()) {
@@ -443,16 +436,16 @@ QList<Task*> GTest_Kalign_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma2 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma2 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma2 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
     }
@@ -460,7 +453,7 @@ QList<Task*> GTest_Kalign_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
 }
 
 void GTest_Kalign_Load_Align_QScore::run() {
-    double qscore = QScore(ma1->getMAlignment(), ma2->getMAlignment(), stateInfo);
+    double qscore = QScore(ma1->getMultipleAlignment(), ma2->getMultipleAlignment(), stateInfo);
     if (stateInfo.hasError()) {
         return;
     }
diff --git a/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.h b/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.h
index de247f4..069fb6c 100644
--- a/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.h
+++ b/src/plugins_3rdparty/kalign/src/kalign_tests/KalignTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,20 +22,20 @@
 #ifndef _U2_KALIGN_TESTS_H_
 #define _U2_KALIGN_TESTS_H_
 
-#include "KalignTask.h"
+#include <QDomElement>
+#include <QFileInfo>
 
-#include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
 
-#include <QtXml/QDomElement>
-#include <QtCore/QFileInfo>
+#include <U2Test/XMLTestUtils.h>
+
+#include "KalignTask.h"
 
 namespace U2 {
 
 class KalignGObjectTask;
-class MAlignmentObject;
 class LoadDocumentTask;
-class MAlignment;
+class MultipleSequenceAlignmentObject;
 
 class  Kalign_Load_Align_Compare_Task : public Task {
 	Q_OBJECT
@@ -53,15 +53,15 @@ public:
 		void sl_kalignProgressChg() {stateInfo.progress = kalignTask->getProgress();}
 
 private:
-	MAlignment dna_to_ma(QList<GObject*> dnaSeqs);
+	MultipleSequenceAlignment dna_to_ma(QList<GObject*> dnaSeqs);
 	QString str_inFileURL;
 	QString str_patFileURL;
 	LoadDocumentTask*           loadTask1;
 	LoadDocumentTask*           loadTask2;
 	Task*                       kalignTask; 
 	KalignTaskSettings          config;
-	MAlignmentObject*           ma1;
-	MAlignmentObject*           ma2;
+	MultipleSequenceAlignmentObject*           ma1;
+	MultipleSequenceAlignmentObject*           ma2;
 };
 
 class GTest_Kalign_Load_Align_Compare: public GTest {
@@ -87,7 +87,7 @@ public:
 	Task::ReportResult report();
 	void run();
 	QList<Task*> onSubTaskFinished(Task* subTask);
-	MAlignment dna_to_ma(QList<GObject*> dnaSeqs);
+	MultipleSequenceAlignment dna_to_ma(QList<GObject*> dnaSeqs);
 
 	public slots:
 		void sl_kalignProgressChg() {stateInfo.progress = kalignTask->getProgress();}
@@ -101,8 +101,8 @@ private:
 	LoadDocumentTask*           loadTask2;
 	Task*                       kalignTask; 
 	KalignTaskSettings          config;
-	MAlignmentObject*           ma1;
-	MAlignmentObject*           ma2;
+	MultipleSequenceAlignmentObject*           ma1;
+	MultipleSequenceAlignmentObject*           ma2;
 };
 
 class KalignTests {
diff --git a/src/plugins_3rdparty/kalign/transl/english.ts b/src/plugins_3rdparty/kalign/transl/english.ts
index 6375178..e8fcb4b 100644
--- a/src/plugins_3rdparty/kalign/transl/english.ts
+++ b/src/plugins_3rdparty/kalign/transl/english.ts
@@ -11,7 +11,7 @@
     <message>
         <location filename="../src/KalignDialog.ui" line="46"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
         <location filename="../src/KalignDialog.ui" line="54"/>
@@ -152,12 +152,12 @@
 <context>
     <name>U2::KalignGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/KalignTask.cpp" line="255"/>
+        <location filename="../src/KalignTask.cpp" line="257"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="265"/>
+        <location filename="../src/KalignTask.cpp" line="267"/>
         <source>KAlign align '%1'</source>
         <translation>KAlign align '%1'</translation>
     </message>
@@ -165,7 +165,7 @@
 <context>
     <name>U2::KalignGObjectTask</name>
     <message>
-        <location filename="../src/KalignTask.cpp" line="146"/>
+        <location filename="../src/KalignTask.cpp" line="148"/>
         <source>KALIGN align '%1'</source>
         <translation>KALIGN align '%1'</translation>
     </message>
@@ -173,7 +173,7 @@
 <context>
     <name>U2::KalignMSAEditorContext</name>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="154"/>
+        <location filename="../src/KalignPlugin.cpp" line="153"/>
         <source>Align with Kalign...</source>
         <translation>Align with Kalign...</translation>
     </message>
@@ -181,17 +181,17 @@
 <context>
     <name>U2::KalignPlugin</name>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="70"/>
+        <location filename="../src/KalignPlugin.cpp" line="71"/>
         <source>Kalign</source>
         <translation>Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="71"/>
+        <location filename="../src/KalignPlugin.cpp" line="72"/>
         <source>A port of Kalign package for multiple sequence alignment. Check http://msa.sbc.su.se for the original version</source>
         <translation>A port of Kalign package for multiple sequence alignment. Check http://msa.sbc.su.se for the original version</translation>
     </message>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="81"/>
+        <location filename="../src/KalignPlugin.cpp" line="82"/>
         <source>Align with Kalign...</source>
         <translation>Align with Kalign...</translation>
     </message>
@@ -204,17 +204,17 @@
         <translation>KALIGN alignment</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="91"/>
+        <location filename="../src/KalignTask.cpp" line="93"/>
         <source>Unsupported alphabet: %1</source>
         <translation>Unsupported alphabet: %1</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="94"/>
+        <location filename="../src/KalignTask.cpp" line="96"/>
         <source>Kalign alignment started</source>
         <translation>Kalign alignment started</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="99"/>
+        <location filename="../src/KalignTask.cpp" line="101"/>
         <source>Kalign alignment successfully finished</source>
         <translation>Kalign alignment successfully finished</translation>
     </message>
@@ -222,12 +222,12 @@
 <context>
     <name>U2::LocalWorkflow::KalignPrompter</name>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="122"/>
+        <location filename="../src/KalignWorker.cpp" line="121"/>
         <source> from %1</source>
         <translation> from %1</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="124"/>
+        <location filename="../src/KalignWorker.cpp" line="123"/>
         <source>Aligns each MSA supplied <u>%1</u> with "<u>Kalign</u>".</source>
         <translation>Aligns each MSA supplied <u>%1</u> with "<u>Kalign</u>".</translation>
     </message>
@@ -235,82 +235,86 @@
 <context>
     <name>U2::LocalWorkflow::KalignWorker</name>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="58"/>
+        <location filename="../src/KalignWorker.cpp" line="57"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="58"/>
+        <location filename="../src/KalignWorker.cpp" line="57"/>
         <source>Input MSA to process.</source>
         <translation>Input MSA to process.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="59"/>
+        <location filename="../src/KalignWorker.cpp" line="58"/>
         <source>Kalign result MSA</source>
         <translation>Kalign result MSA</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="60"/>
+        <location filename="../src/KalignWorker.cpp" line="59"/>
         <source>The result of the Kalign alignment.</source>
         <translation>The result of the Kalign alignment.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="69"/>
+        <location filename="../src/KalignWorker.cpp" line="68"/>
         <source>Gap open penalty</source>
         <translation>Gap open penalty</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="70"/>
+        <location filename="../src/KalignWorker.cpp" line="69"/>
         <source>The penalty for opening/closing a gap. Half the value will be subtracted from the alignment score when opening, and half when closing a gap.</source>
         <translation>The penalty for opening/closing a gap. Half the value will be subtracted from the alignment score when opening, and half when closing a gap.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="71"/>
+        <location filename="../src/KalignWorker.cpp" line="70"/>
         <source>Gap extension penalty</source>
         <translation>Gap extension penalty</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="72"/>
+        <location filename="../src/KalignWorker.cpp" line="71"/>
         <source>The penalty for extending a gap.</source>
         <translation>The penalty for extending a gap.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="73"/>
+        <location filename="../src/KalignWorker.cpp" line="72"/>
         <source>Terminal gap penalty</source>
         <translation>Terminal gap penalty</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="74"/>
+        <location filename="../src/KalignWorker.cpp" line="73"/>
         <source>The penalty to extend gaps from the N/C terminal of protein or 5'/3' terminal of nucleotide sequences.</source>
         <translation>The penalty to extend gaps from the N/C terminal of protein or 5'/3' terminal of nucleotide sequences.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="75"/>
+        <location filename="../src/KalignWorker.cpp" line="74"/>
         <source>Bonus score</source>
         <translation>Bonus score</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="76"/>
+        <location filename="../src/KalignWorker.cpp" line="75"/>
         <source>A bonus score that is added to each pair of aligned residues.</source>
         <translation>A bonus score that is added to each pair of aligned residues.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="83"/>
+        <location filename="../src/KalignWorker.cpp" line="82"/>
         <source>Align with Kalign</source>
         <translation>Align with Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="84"/>
+        <location filename="../src/KalignWorker.cpp" line="83"/>
+        <source>Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa->sbc.su.se">http://msa->sbc.su.se</a>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa.sbc.su.se">http://msa.sbc.su.se</a>.</source>
-        <translation>Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa.sbc.su.se">http://msa.sbc.su.se</a>.</translation>
+        <translation type="vanished">Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa.sbc.su.se">http://msa.sbc.su.se</a>.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="160"/>
+        <location filename="../src/KalignWorker.cpp" line="159"/>
         <source>An empty MSA '%1' has been supplied to Kalign.</source>
         <translation>An empty MSA '%1' has been supplied to Kalign.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="188"/>
+        <location filename="../src/KalignWorker.cpp" line="187"/>
         <source>Aligned %1 with Kalign</source>
         <translation>Aligned %1 with Kalign</translation>
     </message>
diff --git a/src/plugins_3rdparty/kalign/transl/russian.ts b/src/plugins_3rdparty/kalign/transl/russian.ts
index 505a96a..714d259 100644
--- a/src/plugins_3rdparty/kalign/transl/russian.ts
+++ b/src/plugins_3rdparty/kalign/transl/russian.ts
@@ -11,7 +11,7 @@
     <message>
         <location filename="../src/KalignDialog.ui" line="46"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/KalignDialog.ui" line="54"/>
@@ -152,12 +152,12 @@
 <context>
     <name>U2::KalignGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/KalignTask.cpp" line="255"/>
+        <location filename="../src/KalignTask.cpp" line="257"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="265"/>
+        <location filename="../src/KalignTask.cpp" line="267"/>
         <source>KAlign align '%1'</source>
         <translation>Выравнивание с помощью Kalign '%1'</translation>
     </message>
@@ -165,7 +165,7 @@
 <context>
     <name>U2::KalignGObjectTask</name>
     <message>
-        <location filename="../src/KalignTask.cpp" line="146"/>
+        <location filename="../src/KalignTask.cpp" line="148"/>
         <source>KALIGN align '%1'</source>
         <translation>Выравнивание с помощью Kalign '%1'</translation>
     </message>
@@ -173,7 +173,7 @@
 <context>
     <name>U2::KalignMSAEditorContext</name>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="154"/>
+        <location filename="../src/KalignPlugin.cpp" line="153"/>
         <source>Align with Kalign...</source>
         <translation>Выравнивание с помощью Kalign...</translation>
     </message>
@@ -181,17 +181,17 @@
 <context>
     <name>U2::KalignPlugin</name>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="70"/>
+        <location filename="../src/KalignPlugin.cpp" line="71"/>
         <source>Kalign</source>
         <translation>Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="71"/>
+        <location filename="../src/KalignPlugin.cpp" line="72"/>
         <source>A port of Kalign package for multiple sequence alignment. Check http://msa.sbc.su.se for the original version</source>
         <translation>Встроенный в UGENE программный пакет для множественного выравнивания последовательности. Здесь http://msa.sbc.su.se находится оригинальная версия</translation>
     </message>
     <message>
-        <location filename="../src/KalignPlugin.cpp" line="81"/>
+        <location filename="../src/KalignPlugin.cpp" line="82"/>
         <source>Align with Kalign...</source>
         <translation>Выравнивание с помощью Kalign...</translation>
     </message>
@@ -204,17 +204,17 @@
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="91"/>
+        <location filename="../src/KalignTask.cpp" line="93"/>
         <source>Unsupported alphabet: %1</source>
         <translation>Неподдерживаемый алфавит: %1</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="94"/>
+        <location filename="../src/KalignTask.cpp" line="96"/>
         <source>Kalign alignment started</source>
         <translation>Kalign alignment started</translation>
     </message>
     <message>
-        <location filename="../src/KalignTask.cpp" line="99"/>
+        <location filename="../src/KalignTask.cpp" line="101"/>
         <source>Kalign alignment successfully finished</source>
         <translation>Kalign alignment successfully finished</translation>
     </message>
@@ -222,12 +222,12 @@
 <context>
     <name>U2::LocalWorkflow::KalignPrompter</name>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="122"/>
+        <location filename="../src/KalignWorker.cpp" line="121"/>
         <source> from %1</source>
         <translation> из %1</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="124"/>
+        <location filename="../src/KalignWorker.cpp" line="123"/>
         <source>Aligns each MSA supplied <u>%1</u> with "<u>Kalign</u>".</source>
         <translation>Для каждого МВ <u>%1</u>, построить выравнивание с использованием <u>"Kalign"</u>.</translation>
     </message>
@@ -235,84 +235,88 @@
 <context>
     <name>U2::LocalWorkflow::KalignWorker</name>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="58"/>
+        <location filename="../src/KalignWorker.cpp" line="57"/>
         <source>Input MSA</source>
         <translation>Входное МВ</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="58"/>
+        <location filename="../src/KalignWorker.cpp" line="57"/>
         <source>Input MSA to process.</source>
         <translation>Множественное выравнивание последовательностей для обработки.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="59"/>
+        <location filename="../src/KalignWorker.cpp" line="58"/>
         <source>Kalign result MSA</source>
         <translation>Результат выравнивания МВ c помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="60"/>
+        <location filename="../src/KalignWorker.cpp" line="59"/>
         <source>The result of the Kalign alignment.</source>
         <translation>Результат выравнивания с помощью Kalign.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="69"/>
+        <location filename="../src/KalignWorker.cpp" line="68"/>
         <source>Gap open penalty</source>
         <translation>Штраф за открытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="70"/>
+        <location filename="../src/KalignWorker.cpp" line="69"/>
         <source>The penalty for opening/closing a gap. Half the value will be subtracted from the alignment score when opening, and half when closing a gap.</source>
         <translation>Штраф за открытие/закрытие пробела. Половина значения будет вычитаться из результата выравнивания при открытии, и половина при закрытии пробела.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="71"/>
+        <location filename="../src/KalignWorker.cpp" line="70"/>
         <source>Gap extension penalty</source>
         <translation>Штраф за промежуточный пробел</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="72"/>
+        <location filename="../src/KalignWorker.cpp" line="71"/>
         <source>The penalty for extending a gap.</source>
         <translation>Штраф за открытие пробела.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="73"/>
+        <location filename="../src/KalignWorker.cpp" line="72"/>
         <source>Terminal gap penalty</source>
         <translation>Штраф за закрытие пробела</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="74"/>
+        <location filename="../src/KalignWorker.cpp" line="73"/>
         <source>The penalty to extend gaps from the N/C terminal of protein or 5'/3' terminal of nucleotide sequences.</source>
         <translation>Штраф за расширение пробела терминала N/C для белков или терминала 5'/3' для нуклеотидных последовательностей.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="75"/>
+        <location filename="../src/KalignWorker.cpp" line="74"/>
         <source>Bonus score</source>
         <translation>Бонусные очки</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="76"/>
+        <location filename="../src/KalignWorker.cpp" line="75"/>
         <source>A bonus score that is added to each pair of aligned residues.</source>
         <translation>Бонусное значение, которое добавляется к матрице подстановок.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="83"/>
+        <location filename="../src/KalignWorker.cpp" line="82"/>
         <source>Align with Kalign</source>
         <translation>Выравнивание с помощью Kalign</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="84"/>
+        <location filename="../src/KalignWorker.cpp" line="83"/>
+        <source>Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa->sbc.su.se">http://msa->sbc.su.se</a>.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Aligns multiple sequence alignments (MSAs) supplied with Kalign.<p>Kalign is a fast and accurate multiple sequence alignment tool. The original version of the tool can be found on <a href="http://msa.sbc.su.se">http://msa.sbc.su.se</a>.</source>
-        <translation>Для каждого множественного выравнивания (МВ) применяет Kalign.
+        <translation type="vanished">Для каждого множественного выравнивания (МВ) применяет Kalign.
 <p>Kalign это быстрый и точный алгоритм множественного выравнивания последовательности. 
 Здесь <a href="http://msa.sbc.su.se">http://msa.sbc.su.se</a> находится оригинальная версия.       </translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="160"/>
+        <location filename="../src/KalignWorker.cpp" line="159"/>
         <source>An empty MSA '%1' has been supplied to Kalign.</source>
         <translation>Kalign получил пустое МВ '%1'.</translation>
     </message>
     <message>
-        <location filename="../src/KalignWorker.cpp" line="188"/>
+        <location filename="../src/KalignWorker.cpp" line="187"/>
         <source>Aligned %1 with Kalign</source>
         <translation>%1 выровнено с Kalign</translation>
     </message>
diff --git a/src/plugins_3rdparty/phylip/phylip.license b/src/plugins_3rdparty/phylip/phylip.license
index 38db8ba..36cfe80 100644
--- a/src/plugins_3rdparty/phylip/phylip.license
+++ b/src/plugins_3rdparty/phylip/phylip.license
@@ -1,14 +1,28 @@
                     Copyright Notice for PHYLIP
 
- Copyright 1980-20089 University of Washington. All rights reserved.
-Permission is granted to reproduce, perform, and modify these programs and
-documentation files. Permission is granted to distribute or provide access to
-these programs provided that this copyright notice is not removed, the programs
-are not integrated with or called by any product or service that generates
-revenue, and that your distribution of these documentation files and programs
-are free. Any modified versions of these materials that are distributed or
-accessible shall indicate that they are based on these programs. Institutions
-of higher education are granted permission to distribute this material to their
-students and staff for a fee to recover distribution costs. Permission requests
-for any other distribution of these program should be directed to license (at)
-u.washington.edu . 
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+  this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE. 
\ No newline at end of file
diff --git a/src/plugins_3rdparty/phylip/src/DistanceMatrix.cpp b/src/plugins_3rdparty/phylip/src/DistanceMatrix.cpp
index 19008ba..799e2d0 100644
--- a/src/plugins_3rdparty/phylip/src/DistanceMatrix.cpp
+++ b/src/plugins_3rdparty/phylip/src/DistanceMatrix.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #include "U2Core/global.h"
 #include <U2Core/DNAAlphabet.h>
 
-#include <QtCore/QSharedData>
+#include <QSharedData>
 
 #include "dnadist.h"
 #include "protdist.h"
@@ -33,16 +33,16 @@
 
 namespace U2{
 
-void DistanceMatrix::calculateOutOfAlignment( const MAlignment& ma, const CreatePhyTreeSettings& settings ) {
+void DistanceMatrix::calculateOutOfAlignment( const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& settings ) {
     try {
         malignment = &ma;
         int index = 0;
-        int size = ma.getNumRows();
+        int size = ma->getNumRows();
         this->size = size;
         printdata = false;
 
-        foreach(const MAlignmentRow& r, ma.getRows()) {
-            const QString& str = r.getName();
+        foreach(const MultipleSequenceAlignmentRow& r, ma->getMsaRows()) {
+            const QString& str = r->getName();
             index_map.insert(str, index);
             index++;
             unprocessed_taxa.append(str);
@@ -61,11 +61,11 @@ void DistanceMatrix::calculateOutOfAlignment( const MAlignment& ma, const Create
 
             rawMatrix.append(row);
         }
-        spp = ma.getNumRows();
-        sites = ma.getLength();
+        spp = ma->getNumRows();
+        sites = ma->getLength();
         chars = sites;
         nonodes = 2*sites - 1;
-        DNAAlphabetType alphabetType = ma.getAlphabet()->getType();
+        DNAAlphabetType alphabetType = ma->getAlphabet()->getType();
 
         ibmpc = IBMCRT;
         ansi = ANSICRT;
@@ -86,8 +86,7 @@ void DistanceMatrix::calculateOutOfAlignment( const MAlignment& ma, const Create
 
             for (int k=0; k<spp; k++){
                 for(int j=0; j<sites; j++) {
-                    const MAlignmentRow& rowK = ma.getRow(k);
-                    y[k][j] = rowK.charAt(j);
+                    y[k][j] = ma->getMsaRow(k)->charAt(j);
                 }
             }
             makeweights();
@@ -132,8 +131,7 @@ void DistanceMatrix::calculateOutOfAlignment( const MAlignment& ma, const Create
 
             for (int k=0; k<spp; k++){
                 for(int j=0; j<sites; j++){
-                    const MAlignmentRow& rowK = ma.getRow(k);
-                    charstate = rowK.charAt(j);
+                    charstate = ma->getMsaRow(k)->charAt(j);
                     switch (charstate) {
                         case 'A':
                             aa = ala;
@@ -256,7 +254,7 @@ void DistanceMatrix::calculateOutOfAlignment( const MAlignment& ma, const Create
             }
         }
     } catch(const std::bad_alloc &) {
-        errorMessage = QString("Not enough memory to calculate distance matrix for alignment \"%1\"").arg(ma.getName());
+        errorMessage = QString("Not enough memory to calculate distance matrix for alignment \"%1\"").arg(ma->getName());
         if(NULL != gnode) {
             for (int i = 0; i < spp; i++) {
                 free(gnode[i]);
diff --git a/src/plugins_3rdparty/phylip/src/DistanceMatrix.h b/src/plugins_3rdparty/phylip/src/DistanceMatrix.h
index 8e0f3cd..ced9c77 100644
--- a/src/plugins_3rdparty/phylip/src/DistanceMatrix.h
+++ b/src/plugins_3rdparty/phylip/src/DistanceMatrix.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #include <QString>
 #include <U2Algorithm/SubstMatrixRegistry.h>
 #include <U2Core/AppResources.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/PhyTree.h>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <QVector>
@@ -39,7 +39,7 @@ private:
     float* rawdata;
     int size;
     QMap<QString, int> index_map;
-    const MAlignment* malignment;
+    const MultipleSequenceAlignment* malignment;
     PhyTreeData* treedata;
     matrix qdata;
     matrix middlematrix;
@@ -51,7 +51,7 @@ private:
 public:
     matrix rawMatrix;
     bool isValid();
-    void calculateOutOfAlignment(const MAlignment& ma, const CreatePhyTreeSettings& settings);
+    void calculateOutOfAlignment(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& settings);
     ~DistanceMatrix();
     const QString& getErrorMessage() {return errorMessage;}
     void freeMemory(void*& allocatedMemory){free(allocatedMemory);}
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
index ec600f5..5e9295e 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -41,7 +41,7 @@ namespace U2 {
 
 QMutex NeighborJoinCalculateTreeTask::runLock;
 
-void createPhyTreeFromPhylipTree(const MAlignment &ma, node *p, double m, boolean njoin, node *start, PhyNode* root, int bootstrap_repl)
+void createPhyTreeFromPhylipTree(const MultipleSequenceAlignment &ma, node *p, double m, boolean njoin, node *start, PhyNode* root, int bootstrap_repl)
 {
     /* used in fitch & neighbor */
     long i=0;
@@ -60,8 +60,8 @@ void createPhyTreeFromPhylipTree(const MAlignment &ma, node *p, double m, boolea
             if(bootstrap_repl != 0){
                 current->setName(QString::fromLatin1(p->nayme));
             }else{
-                assert(p->index - 1 < ma.getNumRows());
-                current->setName(QString(ma.getRow(p->index - 1).getName()));
+                assert(p->index - 1 < ma->getNumRows());
+                current->setName(QString(ma->getMsaRow(p->index - 1)->getName()));
             }
         } else {
             current->setName(QString("node %1").arg(counter++));
@@ -97,15 +97,15 @@ void replacePhylipRestrictedSymbols(QByteArray& name) {
     }
 }
 
-Task* NeighborJoinAdapter::createCalculatePhyTreeTask(const MAlignment& ma, const CreatePhyTreeSettings& s){
+Task* NeighborJoinAdapter::createCalculatePhyTreeTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s){
     return new PhylipCmdlineTask(ma, s);
 }
 
-CreatePhyTreeWidget * NeighborJoinAdapter::createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent) {
+CreatePhyTreeWidget * NeighborJoinAdapter::createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent) {
     return new NeighborJoinWidget(ma, parent);
 }
 
-NeighborJoinCalculateTreeTask::NeighborJoinCalculateTreeTask(const MAlignment& ma, const CreatePhyTreeSettings& s)
+NeighborJoinCalculateTreeTask::NeighborJoinCalculateTreeTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s)
 :PhyTreeGeneratorTask(ma, s), memLocker(stateInfo){
     setTaskName("NeighborJoin algorithm");
 }
@@ -118,7 +118,7 @@ void NeighborJoinCalculateTreeTask::run(){
 
     PhyTree phyTree(NULL);
 
-    if (inputMA.getNumRows() < 3) {
+    if (inputMA->getNumRows() < 3) {
         setError("Neighbor-Joining runs must have at least 3 species");
         result = phyTree;
         return;
@@ -151,7 +151,7 @@ void NeighborJoinCalculateTreeTask::run(){
             for (int i = 0; i < settings.replicates; i++){
                 stateInfo.progress = (int)(i/(float)settings.replicates * 100);
 
-                const MAlignment& curMSA = seqBoot->getMSA(i);
+                const MultipleSequenceAlignment& curMSA = seqBoot->getMSA(i);
                 QScopedPointer<DistanceMatrix> distanceMatrix(new DistanceMatrix);
                 distanceMatrix->calculateOutOfAlignment(curMSA,settings);
 
@@ -185,8 +185,8 @@ void NeighborJoinCalculateTreeTask::run(){
 
                 naym* nayme = getNayme();
                 for (int i = 0; i < sz; ++i) {
-                    const MAlignmentRow& row = inputMA.getRow(i);
-                    QByteArray name = row.getName().toLatin1();
+                    const MultipleSequenceAlignmentRow row = inputMA->getMsaRow(i);
+                    QByteArray name = row->getName().toLatin1();
                     replacePhylipRestrictedSymbols(name);
                     qstrncpy(nayme[i], name.constData(), sizeof(naym));
 
@@ -265,8 +265,8 @@ void NeighborJoinCalculateTreeTask::run(){
 
             naym* nayme = getNayme();
             for (int i = 0; i < sz; ++i) {
-                const MAlignmentRow& row = inputMA.getRow(i);
-                QByteArray name = row.getName().toLatin1();
+                const MultipleSequenceAlignmentRow row = inputMA->getMsaRow(i);
+                QByteArray name = row->getName().toLatin1();
                 replacePhylipRestrictedSymbols(name);
                 qstrncpy(nayme[i], name.constData(), sizeof(naym));
             }
@@ -290,7 +290,7 @@ void NeighborJoinCalculateTreeTask::run(){
         }
     }
     catch (const std::bad_alloc &) {
-        setError(QString("Not enough memory to calculate tree for alignment \"%1\"").arg(inputMA.getName()));
+        setError(QString("Not enough memory to calculate tree for alignment \"%1\"").arg(inputMA->getName()));
     }
     catch (const char* message) {
         stateInfo.setError(QString("Phylip error %1").arg(message));
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.h b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.h
index 261acfc..5d8e83f 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.h
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,28 +26,24 @@
 
 #include <U2Algorithm/PhyTreeGenerator.h>
 #include <U2Algorithm/PhyTreeGeneratorTask.h>
-//#include <U2Algorithm/SubstMatrixRegistry.h>
 
 #include <U2Core/AppResources.h>
-//#include <U2Core/PhyTree.h>
-
-//#include <U2View/CreatePhyTreeDialogController.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 { 
 
-class MAlignment;
-class TaskStateInfo;
 class PhyTreeGeneratorTask;
+class TaskStateInfo;
 
 class NeighborJoinAdapter : public PhyTreeGenerator {
 public:
-    Task * createCalculatePhyTreeTask(const MAlignment& ma, const CreatePhyTreeSettings& s);
-    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MAlignment &ma, QWidget *parent = NULL);
+    Task * createCalculatePhyTreeTask(const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& s);
+    CreatePhyTreeWidget *createPhyTreeSettingsWidget(const MultipleSequenceAlignment &ma, QWidget *parent = NULL);
 };
 
 class NeighborJoinCalculateTreeTask: public PhyTreeGeneratorTask {
 public:
-    NeighborJoinCalculateTreeTask(const MAlignment &ma, const CreatePhyTreeSettings &s);
+    NeighborJoinCalculateTreeTask(const MultipleSequenceAlignment &ma, const CreatePhyTreeSettings &s);
     void run();
 
 private:
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.cpp b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.cpp
index 9242295..aef5e9e 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.cpp
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -23,7 +23,7 @@
 #include <U2Core/AppResources.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/DNAAlphabet.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/Settings.h>
 
 #include "NeighborJoinWidget.h"
@@ -62,7 +62,7 @@ QList<QString> ConsensusModelTypes::getConsensusModelTypes() {
     return list;
 }
 
-NeighborJoinWidget::NeighborJoinWidget(const MAlignment &ma, QWidget *parent) :
+NeighborJoinWidget::NeighborJoinWidget(const MultipleSequenceAlignment &ma, QWidget *parent) :
     CreatePhyTreeWidget(parent)
 {
     setupUi(this);
@@ -122,7 +122,7 @@ void NeighborJoinWidget::restoreDefault() {
     displayOptions->restoreDefault();
 }
 
-bool NeighborJoinWidget::checkMemoryEstimation(QString &msg, const MAlignment &msa, const CreatePhyTreeSettings &settings) {
+bool NeighborJoinWidget::checkMemoryEstimation(QString &msg, const MultipleSequenceAlignment &msa, const CreatePhyTreeSettings &settings) {
     AppResourcePool *s = AppContext::getAppSettings()->getAppResourcePool();
     const qint64 appMemMb = s->getMaxMemorySizeInMB();
 
@@ -138,8 +138,8 @@ bool NeighborJoinWidget::checkMemoryEstimation(QString &msg, const MAlignment &m
     //sizeof(sitelike) = 32
     //sizeof(ratelike) = 4
 
-    const qint64 spp = msa.getNumRows();
-    const qint64 endsite = msa.getLength();
+    const qint64 spp = msa->getNumRows();
+    const qint64 endsite = msa->getLength();
     const qint64 ugeneLowestMemoryUsageMb = 50;
     const qint64 minMemoryForDistanceMatrixMb = (qint64)(spp * endsite * 32 + endsite * 4) / (1024 * 1024);
 
@@ -184,8 +184,8 @@ void NeighborJoinWidget::sl_onConsensusTypeChanged(const QString &consensusTypeN
     }
 }
 
-void NeighborJoinWidget::init(const MAlignment &ma) {
-    const DNAAlphabetType alphabetType = ma.getAlphabet()->getType();
+void NeighborJoinWidget::init(const MultipleSequenceAlignment &ma) {
+    const DNAAlphabetType alphabetType = ma->getAlphabet()->getType();
     if ((alphabetType == DNAAlphabet_RAW) || (alphabetType == DNAAlphabet_NUCL)) {
         cbModel->addItems(DNADistModelTypes::getDNADistModelTypes());
     } else {
diff --git a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
index 2634618..87c4621 100644
--- a/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
+++ b/src/plugins_3rdparty/phylip/src/NeighborJoinWidget.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -28,8 +28,6 @@
 
 namespace U2 {
 
-class MAlignment;
-
 class ConsensusModelTypes {
 public:
     static QString M1;
@@ -42,12 +40,12 @@ public:
 class NeighborJoinWidget : public CreatePhyTreeWidget, public Ui_NeighborJoinWidget {
     Q_OBJECT
 public:
-    NeighborJoinWidget(const MAlignment &ma, QWidget *parent = NULL);
+    NeighborJoinWidget(const MultipleSequenceAlignment &ma, QWidget *parent = NULL);
 
     void fillSettings(CreatePhyTreeSettings &settings);
     void storeSettings();
     void restoreDefault();
-    bool checkMemoryEstimation(QString &msg, const MAlignment &msa, const CreatePhyTreeSettings &settings);
+    bool checkMemoryEstimation(QString &msg, const MultipleSequenceAlignment &msa, const CreatePhyTreeSettings &settings);
     bool checkSettings(QString &msg, const CreatePhyTreeSettings &settings);
 
 private slots:
@@ -55,7 +53,7 @@ private slots:
     void sl_onConsensusTypeChanged(const QString &consensusTypeName);
 
 private:
-    void init(const MAlignment &ma);
+    void init(const MultipleSequenceAlignment &ma);
     void connectSignals();
     static int getRandomSeed();
     static bool checkSeed(int seed);
diff --git a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp
index 3941752..a81733f 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -20,15 +20,17 @@
 */
 
 #include <QFile>
+
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/CmdlineInOutTaskRunner.h>
 #include <U2Core/DeleteObjectsTask.h>
 #include <U2Core/GUrlUtils.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PhyTreeObject.h>
 #include <U2Core/U2DbiRegistry.h>
+#include <U2Core/U2SafePoints.h>
 #include <U2Core/UserApplicationsSettings.h>
 
 #include "PhylipCmdlineTask.h"
@@ -46,7 +48,7 @@ const QString PhylipCmdlineTask::SEED_ARG = "seed";
 const QString PhylipCmdlineTask::FRACTION_ARG = "fraction";
 const QString PhylipCmdlineTask::CONSENSUS_ARG = "consensus";
 
-PhylipCmdlineTask::PhylipCmdlineTask(const MAlignment &msa, const CreatePhyTreeSettings &settings)
+PhylipCmdlineTask::PhylipCmdlineTask(const MultipleSequenceAlignment &msa, const CreatePhyTreeSettings &settings)
 : PhyTreeGeneratorTask(msa, settings), cmdlineTask(NULL), msaObject(NULL), treeObject(NULL)
 {
     setTaskName(tr("PHYLIP command line wrapper task"));
@@ -84,7 +86,7 @@ Task::ReportResult PhylipCmdlineTask::report() {
 void PhylipCmdlineTask::createCmdlineTask() {
     CmdlineInOutTaskConfig config;
     CHECK_OP(stateInfo, );
-    msaObject = MAlignmentImporter::createAlignment(dbiRef, const_cast<MAlignment&>(inputMA), stateInfo);
+    msaObject = MultipleSequenceAlignmentImporter::createAlignment(dbiRef, const_cast<MultipleSequenceAlignment&>(inputMA), stateInfo);
     CHECK_OP(stateInfo, );
     msaObject->setParent(this);
     config.inputObjects << msaObject;
diff --git a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h
index 288e5f7..4551767 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h
+++ b/src/plugins_3rdparty/phylip/src/PhylipCmdlineTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -27,14 +27,14 @@
 namespace U2 {
 
 class CmdlineInOutTaskRunner;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 class PhyTreeObject;
 class TmpDbiHandle;
 
 class PhylipCmdlineTask : public PhyTreeGeneratorTask {
     Q_OBJECT
 public:
-    PhylipCmdlineTask(const MAlignment &msa, const CreatePhyTreeSettings &settings);
+    PhylipCmdlineTask(const MultipleSequenceAlignment &msa, const CreatePhyTreeSettings &settings);
     ~PhylipCmdlineTask();
 
     void prepare();
@@ -57,7 +57,7 @@ private:
 
 private:
     CmdlineInOutTaskRunner *cmdlineTask;
-    MAlignmentObject *msaObject;
+    MultipleSequenceAlignmentObject *msaObject;
     PhyTreeObject *treeObject;
     QString dbiPath;
     U2DbiRef dbiRef;
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp b/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
index deac683..d164c51 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -48,7 +48,7 @@ const QString PhylipPlugin::PHYLIP_NEIGHBOUR_JOIN("PHYLIP Neighbor Joining");
 
 PhylipPlugin::PhylipPlugin() 
 : Plugin(tr("PHYLIP"), tr("PHYLIP (the PHYLogeny Inference Package) is a package of programs for inferring phylogenies (evolutionary trees)."
-         " Original version at: http://evolution.genetics.washington.edu/phylip.html"), false)
+         " Original version at: http://evolution.genetics.washington.edu/phylip.html"))
 {
 
     PhyTreeGeneratorRegistry* registry = AppContext::getPhyTreeGeneratorRegistry();
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPlugin.h b/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
index 6ee9fca..cd4741f 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
+++ b/src/plugins_3rdparty/phylip/src/PhylipPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
index 2de32fa..0a7aa20 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,11 +31,11 @@
 #include <U2Core/Log.h>
 
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/PhyTreeObject.h>
 
-#include <QtCore/QDir>
+#include <QDir>
 #include <U2Core/AppContext.h>
 #include "DistanceMatrix.h"
 #include <U2Algorithm/CreatePhyTreeSettings.h>
@@ -77,19 +77,19 @@ void GTest_NeighborJoin::prepare() {
         return;
     }
 
-    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = maDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     assert(obj!=NULL);
-    MAlignmentObject* ma = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* ma = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(ma==NULL){
         stateInfo.setError(  QString("error can't cast to multiple alignment from GObject") );
         return;
@@ -105,7 +105,7 @@ void GTest_NeighborJoin::prepare() {
 
 	QList<GObject*> list2 = treeDoc->findGObjectByType(GObjectTypes::PHYLOGENETIC_TREE);
 	if (list2.size() == 0) {
-		stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+		stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
 		return;
 	}
 
@@ -133,7 +133,7 @@ void GTest_NeighborJoin::prepare() {
         settings.replicates = 100;
     }
 
-    task = new PhyTreeGeneratorLauncherTask(input->getMAlignment(), settings);
+    task = new PhyTreeGeneratorLauncherTask(input->getMultipleAlignment(), settings);
     addSubTask(task);
 }
 
diff --git a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.h b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.h
index 9e31b7f..81e848f 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipPluginTests.h
+++ b/src/plugins_3rdparty/phylip/src/PhylipPluginTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,14 +25,14 @@
 #include <U2Core/GObject.h>
 #include <U2Algorithm/PhyTreeGeneratorTask.h>
 
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include <QFileInfo>
 #include <QList>
 
 namespace U2{
 
 class PhyTreeObject;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 class GTest_NeighborJoin : public GTest {
 	Q_OBJECT
@@ -50,7 +50,7 @@ private:
     Document* maDoc;
     Document* treeDoc;
     PhyTreeGeneratorLauncherTask* task;
-    MAlignmentObject* input;
+    MultipleSequenceAlignmentObject* input;
     PhyTreeObject* treeObjFromDoc;
 };
 
diff --git a/src/plugins_3rdparty/phylip/src/PhylipTask.cpp b/src/plugins_3rdparty/phylip/src/PhylipTask.cpp
index 65e35ab..8eeb8b8 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipTask.cpp
+++ b/src/plugins_3rdparty/phylip/src/PhylipTask.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
 */
 
 #include <U2Core/CmdlineInOutTaskRunner.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/PhyTreeObject.h>
 #include <U2Core/U2SafePoints.h>
 #include "NeighborJoinAdapter.h"
@@ -35,10 +35,10 @@ PhylipTask::PhylipTask(const U2EntityRef &msaRef, const U2DbiRef &outDbiRef, con
 }
 
 void PhylipTask::prepare() {
-    MAlignmentObject *msaObject = new MAlignmentObject("msa", msaRef);
+    MultipleSequenceAlignmentObject *msaObject = new MultipleSequenceAlignmentObject("msa", msaRef);
     msaObject->setParent(this);
 
-    treeTask = new NeighborJoinCalculateTreeTask(msaObject->getMAlignment(), settings);
+    treeTask = new NeighborJoinCalculateTreeTask(msaObject->getMultipleAlignment(), settings);
     addSubTask(treeTask);
 }
 
diff --git a/src/plugins_3rdparty/phylip/src/PhylipTask.h b/src/plugins_3rdparty/phylip/src/PhylipTask.h
index db8e1f2..e454d42 100644
--- a/src/plugins_3rdparty/phylip/src/PhylipTask.h
+++ b/src/plugins_3rdparty/phylip/src/PhylipTask.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/phylip/src/SeqBootAdapter.cpp b/src/plugins_3rdparty/phylip/src/SeqBootAdapter.cpp
index e292062..16b4c2d 100644
--- a/src/plugins_3rdparty/phylip/src/SeqBootAdapter.cpp
+++ b/src/plugins_3rdparty/phylip/src/SeqBootAdapter.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -28,16 +28,16 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 
-#include <QtCore/QByteArray>
-#include <QtCore/QSharedData>
-#include <QtCore/QTime>
+#include <QByteArray>
+#include <QSharedData>
+#include <QTime>
 
 #include <iostream>
 #include <float.h>
 
 namespace U2{
 
-SeqBoot::SeqBoot() : malignment(NULL) {
+SeqBoot::SeqBoot() {
     seqLen = 0;
     seqRowCount = 0;
 }
@@ -47,11 +47,7 @@ SeqBoot::~SeqBoot(){
 }
 
 void SeqBoot::clearGenratedSequences(){
-    for(int i = 0; i < generatedSeq.size(); i++){
-            delete generatedSeq[i];
-    }
     generatedSeq.clear();
-    
 }
 
 QString SeqBoot::getTmpFileTemplate(){
@@ -68,50 +64,48 @@ QString SeqBoot::getTmpFileTemplate(){
 
 
 void SeqBoot::initGenerSeq(int reps, int rowC, int seqLen){
-    generatedSeq = QVector<MAlignment*>(reps);
+    generatedSeq = QVector<MultipleSequenceAlignment>(reps);
     this->seqLen = seqLen;
     seqRowCount = rowC;
         
     for(int i = 0; i < reps; i++){
-        generatedSeq[i] = new MAlignment(QString("bootstrap %1").arg(reps), malignment->getAlphabet());
+        generatedSeq[i] = MultipleSequenceAlignment(QString("bootstrap %1").arg(reps), malignment->getAlphabet());
     }
     
 }
 
-const MAlignment& SeqBoot::getMSA(int pos) const {
-    return *generatedSeq[pos];
+const MultipleSequenceAlignment& SeqBoot::getMSA(int pos) const {
+    return generatedSeq[pos];
 
 }
 
-void SeqBoot::generateSequencesFromAlignment( const MAlignment& ma, const CreatePhyTreeSettings& settings ){
+void SeqBoot::generateSequencesFromAlignment( const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& settings ){
     if(!settings.bootstrap){
         return ;
     }
 
-    malignment = &ma;
+    malignment = ma;
     int replicates = settings.replicates;
     
     seqboot_getoptions();
     
     reps = replicates;
 
-    spp = ma.getNumRows();
-    sites = ma.getLength();
+    spp = ma->getNumRows();
+    sites = ma->getLength();
 
     initGenerSeq(replicates, spp, sites);
     loci = sites;
     maxalleles = 1;
 
-    DNAAlphabetType alphabetType = ma.getAlphabet()->getType();
-
     seq_allocrest();
     seq_inputoptions();
 
     nodep_boot = matrix_char_new(spp, sites);
     for (int k=0; k<spp; k++){
         for(int j=0; j<sites; j++) {
-            const MAlignmentRow& rowK = ma.getRow(k);
-            nodep_boot[k][j] = rowK.charAt(j);
+            const MultipleSequenceAlignmentRow rowK = ma->getMsaRow(k);
+            nodep_boot[k][j] = rowK->charAt(j);
         }
     }
 
@@ -128,7 +122,7 @@ void SeqBoot::generateSequencesFromAlignment( const MAlignment& ma, const Create
     } while (inseed != 0);
 
     
-    bootwrite(generatedSeq, *malignment);
+    bootwrite(generatedSeq, malignment);
 
     freenewer();
     freenew();
diff --git a/src/plugins_3rdparty/phylip/src/SeqBootAdapter.h b/src/plugins_3rdparty/phylip/src/SeqBootAdapter.h
index 44b4fc1..715b611 100644
--- a/src/plugins_3rdparty/phylip/src/SeqBootAdapter.h
+++ b/src/plugins_3rdparty/phylip/src/SeqBootAdapter.h
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 #include "seqboot.h"
 #include "cons.h"
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/PhyTree.h>
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <QVector>
@@ -35,8 +35,8 @@ typedef QVector<matrixrow> matrix;
 
 class SeqBoot{
 private:
-    const MAlignment* malignment;
-    QVector<MAlignment*> generatedSeq;
+    MultipleSequenceAlignment malignment;
+    QVector<MultipleSequenceAlignment> generatedSeq;
     int seqLen;
     int seqRowCount;
 
@@ -44,9 +44,9 @@ private:
 public:
     QString getTmpFileTemplate();
     void clearGenratedSequences(); //to free memory
-    void generateSequencesFromAlignment( const MAlignment& ma, const CreatePhyTreeSettings& settings );
+    void generateSequencesFromAlignment( const MultipleSequenceAlignment& ma, const CreatePhyTreeSettings& settings );
 
-    const MAlignment& getMSA(int pos) const;
+    const MultipleSequenceAlignment& getMSA(int pos) const;
 
     void initGenerSeq(int reps, int rowC, int seqLen);
 
diff --git a/src/plugins_3rdparty/phylip/src/cons.cpp b/src/plugins_3rdparty/phylip/src/cons.cpp
index 78f5a88..3bf7539 100644
--- a/src/plugins_3rdparty/phylip/src/cons.cpp
+++ b/src/plugins_3rdparty/phylip/src/cons.cpp
@@ -23,7 +23,7 @@ node *grbg;
 long tipy;
 
 double **timesseen, **tmseen2, **times2 ;
-double *timesseen_changes, *tchange2;
+double *tchange2;
 double trweight, ntrees, mlfrac;
 
 /* prototypes */
@@ -1058,9 +1058,6 @@ void rehash()
 
         lengths2[new_index] = lengths[old_index];
 
-        tchange2[new_index] = timesseen_changes[old_index];
-
-
         free(grouping[old_index]);
         free(timesseen[old_index]);
         free(order[i]);
@@ -1082,15 +1079,13 @@ void rehash()
   free(timesseen);
   free(grouping);
   free(order);
-  free(timesseen_changes);
 
   free(s);
 
   timesseen = tmseen2;
   grouping = grping2;
   lengths = lengths2;
-  order = order2;
-  timesseen_changes = tchange2;
+  order = order2; 
 
   maxgrp = new_maxgrp;
 
@@ -1135,6 +1130,11 @@ void enternodeset(node* r)
             same = false;
         }
       }
+      else {                       /* if group is present but timessen = 0 */
+          for (j = 0; j < setsz; j++)   /* replace by correct group */
+              grouping[i - 1][j] = s[j];
+          *timesseen[i - 1] = 1;
+      }
     }
     if (grouping[i - 1] && same) {  /* if it is there, increment timesseen */
       *timesseen[i - 1] += times;
@@ -1433,7 +1433,7 @@ void store_pattern (pattern_elm ***pattern_array, int trees_in_file)
   /* First, find out how many groups exist in the given tree. */
   for (i = 0 ; i < maxgrp ; i++)
     if ((grouping[i] != NULL) &&
-       (*timesseen[i] > timesseen_changes[i]))
+       (*timesseen[i] > 0))
       /* If this is group exists and is present in the current tree, */
       total_groups++ ;
 
@@ -1455,13 +1455,12 @@ void store_pattern (pattern_elm ***pattern_array, int trees_in_file)
      appropriately. */
   for (i = 0 ; i < maxgrp ; i++)
     if (grouping[i] != NULL) {
-      if (*timesseen[i] > timesseen_changes[i]) {
+      if (*timesseen[i] > 0) {
         for (k = 0 ; k < setsz ; k++)
           pattern_array[k][trees_in_file]->apattern[j] = grouping[i][k] ;  
         pattern_array[0][trees_in_file]->length[j] = lengths[i];
         j++ ;
 
-        timesseen_changes[i] = *timesseen[i] ;
           /* 
              EWFIX.BUG.756
 
@@ -1478,6 +1477,7 @@ void store_pattern (pattern_elm ***pattern_array, int trees_in_file)
              consense.
              
           */
+        *timesseen[i] = 0;
       }
     }
   *pattern_array[0][trees_in_file]->patternsize = total_groups;
@@ -1532,10 +1532,6 @@ void read_groups (pattern_elm ****pattern_array,
   grouping  = (group_type **)  Malloc(maxgrp*sizeof(group_type *));
   lengths  = (double *)  Malloc(maxgrp*sizeof(double));
 
-  timesseen_changes = (double*)Malloc(maxgrp*sizeof(double));
-  for (i = 0; i < maxgrp; i++)
-    timesseen_changes[i] = 0.0;
-
   for (i = 0; i < maxgrp; i++)
     grouping[i] = NULL;
 
@@ -1623,6 +1619,10 @@ void read_groups (pattern_elm ****pattern_array,
            current pattern as an element of it's trees array. */
       store_pattern ((*pattern_array), trees_read) ;
       trees_read++ ;
+      for (i = 0; i < maxgrp; i++)
+          if (grouping[i] != NULL) {
+              *timesseen[i] = 0;
+          }
     }
   }
 } /* read_groups */
@@ -1646,7 +1646,6 @@ void clean_up_final()
     free(nayme);
     free(order);
     free(timesseen);
-    free(timesseen_changes);
     free(fullset);
     free(lengths);
 
diff --git a/src/plugins_3rdparty/phylip/src/cons.h b/src/plugins_3rdparty/phylip/src/cons.h
index d32897e..f51aae3 100644
--- a/src/plugins_3rdparty/phylip/src/cons.h
+++ b/src/plugins_3rdparty/phylip/src/cons.h
@@ -38,7 +38,7 @@
     extern long tipy;
 
     extern double **timesseen, **tmseen2, **times2 ;
-    extern double *timesseen_changes, *tchange2;
+    extern double *tchange2;
     extern double trweight, ntrees, mlfrac;
 
 typedef struct pattern_elm {
diff --git a/src/plugins_3rdparty/phylip/src/dist.cpp b/src/plugins_3rdparty/phylip/src/dist.cpp
index ee3be1a..fd969ce 100644
--- a/src/plugins_3rdparty/phylip/src/dist.cpp
+++ b/src/plugins_3rdparty/phylip/src/dist.cpp
@@ -1,12 +1,36 @@
 #include "phylip.h"
 #include "dist.h"
 
-#include <QtCore/QString>
-
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+#include <QString>
+
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 void dist_alloctree(pointptr *treenode, long nonodes, U2::MemoryLocker& memLocker)
 {
diff --git a/src/plugins_3rdparty/phylip/src/dist.h b/src/plugins_3rdparty/phylip/src/dist.h
index 2be1a61..39bfccd 100644
--- a/src/plugins_3rdparty/phylip/src/dist.h
+++ b/src/plugins_3rdparty/phylip/src/dist.h
@@ -2,10 +2,34 @@
 #define NDIST_H
 #include "phylip.h"
 #include <U2Core/AppResources.h>
-/* version 3.6. (c) Copyright 1993-2000 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 /*
     dist.h: included in fitch, kitsch, & neighbor
diff --git a/src/plugins_3rdparty/phylip/src/dnadist.cpp b/src/plugins_3rdparty/phylip/src/dnadist.cpp
index afad3d2..14c79b9 100644
--- a/src/plugins_3rdparty/phylip/src/dnadist.cpp
+++ b/src/plugins_3rdparty/phylip/src/dnadist.cpp
@@ -1,10 +1,34 @@
 //#include "phylip.h"
 //#include "seq.h"
 #include "dnadist.h"
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <U2Core/Task.h>
@@ -601,8 +625,7 @@ void dnadist_sitecombine()
     j = i + 1;
     tied = true;
     while (j <= sites && tied) {
-      tied = (oldweight[alias[i - 1] - 1] == oldweight[alias[j - 1] - 1] &&
-              category[alias[i - 1] - 1] == category[alias[j - 1] - 1]);
+      tied = (category[alias[i - 1] - 1] == category[alias[j - 1] - 1]);
       k = 1;
       while (k <= spp && tied) {
         tied = (tied &&
@@ -638,8 +661,6 @@ void dnadist_sitescrunch()
           found = (ally[alias[j - 1] - 1] == alias[j - 1]);
           j++;
           completed = (j > sites);
-          if (j <= sites)
-            completed = (oldweight[alias[j - 1] - 1] == 0);
         } while (!(found || completed));
         if (found) {
           j--;
@@ -665,6 +686,7 @@ void makeweights()
   for (i = 1; i <= sites; i++) {
     alias[i - 1] = i;
     ally[i - 1] = i;
+    location[i - 1] = 0;
     weight[i - 1] = 0;
   }
   dnadist_sitesort();
@@ -672,7 +694,7 @@ void makeweights()
   dnadist_sitescrunch();
   endsite = 0;
   for (i = 1; i <= sites; i++) {
-    if (ally[i - 1] == i && oldweight[i - 1] > 0)
+    if (ally[i - 1] == i)
       endsite++;
   }
   for (i = 1; i <= endsite; i++)
@@ -686,7 +708,8 @@ void makeweights()
   for (i = 0; i < categs; i++)
     rate[i] *= weightsum / sumrates;
   for (i = 0; i < sites; i++)
-    weight[location[ally[i] - 1] - 1] += oldweight[i];
+    if (location[ally[i] - 1] > 0)
+      weight[location[ally[i] - 1] - 1] += oldweight[i];
 }  /* makeweights */
 
 
diff --git a/src/plugins_3rdparty/phylip/src/neighbor.cpp b/src/plugins_3rdparty/phylip/src/neighbor.cpp
index d119fb2..7e375e7 100644
--- a/src/plugins_3rdparty/phylip/src/neighbor.cpp
+++ b/src/plugins_3rdparty/phylip/src/neighbor.cpp
@@ -1,8 +1,32 @@
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Mary Kuhner, Jon Yamato, Joseph Felsenstein, Akiko Fuseki,
-   Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Mary Kuhner, Jon Yamato, Joseph Felsenstein, Akiko Fuseki,
+Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #include <float.h>
 #include <QString>
@@ -592,7 +616,7 @@ void maketree()
 void neighbour_init(int num, U2::MemoryLocker& memLocker, const QString& filename) 
 {
     int argc = 1;                
-    char* argv[] = { "Neighbor" };
+    const char* argv[] = { "Neighbor" };
     spp = num;
     //openfile(&infile,INFILE,"input file", "r",argv[0],infilename);
     //openfile(&outfile,OUTFILE,"output file", "w",argv[0],outfilename);
diff --git a/src/plugins_3rdparty/phylip/src/phylip.cpp b/src/plugins_3rdparty/phylip/src/phylip.cpp
index 36a8bfb..b674cdd 100644
--- a/src/plugins_3rdparty/phylip/src/phylip.cpp
+++ b/src/plugins_3rdparty/phylip/src/phylip.cpp
@@ -1,9 +1,32 @@
-
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, Andrew Keeffe,
-   and Dan Fineman.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Mary Kuhner, Jon Yamato, Joseph Felsenstein, Akiko Fuseki,
+Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #ifdef OSX_CARBON
 #include <Carbon/Carbon.h>
@@ -280,22 +303,24 @@ void openfile(FILE **fp,const char *filename,const char *filedesc,
   char ch;
   const char *progname_without_path;
   long loopcount, loopcount2;
+  /*
 #if defined(OSX_CARBON) && defined(__MWERKS__)
   ProcessSerialNumber myProcess;
   FSRef bundleLocation;
   unsigned char bundlePath[FNMLNGTH];
   
   if(!fixedpath){
-    /* change path to the bundle location instead of root directory */
+    // change path to the bundle location instead of root folder
     GetCurrentProcess(&myProcess);
     GetProcessBundleLocation(&myProcess, &bundleLocation);
     FSRefMakePath(&bundleLocation, bundlePath, FNMLNGTH);
     chdir((const char*)bundlePath);
-    chdir(".."); /* get out of the .app directory */
+    chdir(".."); // get out of the .app folder
     
     fixedpath = true;
   }
 #endif
+*/
 
   progname_without_path = get_command_name(application);
 
diff --git a/src/plugins_3rdparty/phylip/src/phylip.h b/src/plugins_3rdparty/phylip/src/phylip.h
index 2dba2ff..b035d68 100644
--- a/src/plugins_3rdparty/phylip/src/phylip.h
+++ b/src/plugins_3rdparty/phylip/src/phylip.h
@@ -1,13 +1,37 @@
 #ifndef _PHYLIP_H_
 #define _PHYLIP_H_
 
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
+/* version 3.696.
    Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, Andrew Keeffe,
    Mike Palczewski, Doug Buxton and Dan Fineman.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
 
-#define PHY_VERSION "3.69"
+   Copyright (c) 1980-2014, Joseph Felsenstein
+   All rights reserved.
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are met:
+
+   1. Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright notice,
+      this list of conditions and the following disclaimer in the documentation
+      and/or other materials provided with the distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+   AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+   ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+   CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+   SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+   CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+   POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#define PHY_VERSION "3.696"
 
 /* Debugging options */
 /* Define this to disable assertions */
@@ -162,7 +186,7 @@ void phyFillScreenColor(void);
 #endif
 
 #ifdef DOS
-#define MALLOCRETURN void 
+#define MALLOCRETURN void
 #else
 #define MALLOCRETURN void
 #endif
@@ -180,12 +204,12 @@ void phyFillScreenColor(void);
 #endif
 /*  if on a Mac cannot use screen controls */
 #ifdef MAC
-#define IBMCRT false 
+#define IBMCRT false
 #define ANSICRT false
 #endif
 /*  if on a Windows system can use IBM PC screen controls */
 #ifdef WIN32
-#define IBMCRT true 
+#define IBMCRT true
 #define ANSICRT false
 #endif
 /* otherwise, let's assume we are on a Linux or Unix system
@@ -193,7 +217,7 @@ void phyFillScreenColor(void);
 #ifndef MAC
 #ifndef DOS
 #ifndef WIN32
-#define IBMCRT false 
+#define IBMCRT false
 #define ANSICRT true
 #endif
 #endif
@@ -216,22 +240,13 @@ void phyFillScreenColor(void);
 #include <math.h>
 #include <ctype.h>
 
-#ifdef MAC
-#ifdef DRAW
-#include "interface.h"
-#else
-#include "macface.h"
-#endif
-#define getch gettch
-#endif
-
-/* directory delimiters */
+/* folder delimiters */
 #ifdef MAC
 #define DELIMITER ':'
-#else 
+#else
 #ifdef WIN32
 #define DELIMITER '\\'
-#else 
+#else
 #define DELIMITER '/'
 #endif
 #endif
@@ -250,8 +265,16 @@ typedef void *Anyptr;
 
 typedef unsigned char boolean;
 
-#define true    1
-#define false   0
+#ifdef _MSC_VER
+#  if _MSC_VER < 1900
+#    define true    1
+#    define false   0
+#  endif
+#else
+#  define true    1
+#  define false   0
+#endif
+
 
 /* Number of items per machine word in set.
  * Used in consensus programs and clique */
@@ -271,7 +294,6 @@ MALLOCRETURN    *mymalloc(long);
 #define MAXNCH          30   /* must be greater than or equal to nmlngth */
 #define maxcategs       9    /* maximum number of site types */
 #define maxcategs2     11    /* maximum number of site types + 2 */
-#define point           "."
 #define pointe          '.'
 #define down            2
 #define MAXSHIMOTREES 100
@@ -365,7 +387,7 @@ typedef Phylip_Char plotstring[MAXNCH];
    cascaded if statements */
 #include <limits.h>
 
-/* minimum double we feel safe with, anything less will be considered 
+/* minimum double we feel safe with, anything less will be considered
    underflow */
 #define MIN_DOUBLE 10e-100
 
@@ -379,16 +401,16 @@ typedef Phylip_Char plotstring[MAXNCH];
 #if INT_MAX == MAX_32BITS
 typedef int  group_type;
 
-#else  
+#else
      #if INT_MAX == MAX_32BITS_PLUS
      typedef int  group_type;
 
-     #else 
+     #else
           /* Else, if longs are 4 bytes, use them */
           #if LONG_MAX == MAX_32BITS
           typedef long group_type;
 
-          #else 
+          #else
                #if LONG_MAX == MAX_32BITS_PLUS
                 typedef long group_type;
 
@@ -414,7 +436,7 @@ typedef enum {
 bases& operator++(bases& b, int);  // int denotes postfix++
 
 typedef enum {
-  alanine, arginine, asparagine, aspartic, cysteine, 
+  alanine, arginine, asparagine, aspartic, cysteine,
   glutamine, glutamic, glycine, histidine, isoleucine,
   leucine, lysine, methionine, phenylalanine, proline,
   serine, threonine, tryptophan, tyrosine, valine
@@ -435,15 +457,15 @@ typedef enum {
 
 typedef double sitelike[(long)T - (long)A + 1];   /* used in dnaml, dnadist */
 typedef double psitelike[(long)valine - (long)alanine + 1];
-                             /* used in proml                                    */        
-     
+                             /* used in proml                                    */
+
 typedef long *baseptr;       /* baseptr used in dnapars, dnacomp & dnapenny */
 typedef long *baseptr2;      /* baseptr used in dnamove                     */
 typedef unsigned char *discbaseptr;         /* discbaseptr used in pars     */
 typedef sitelike *ratelike;                    /* used in dnaml ...            */
 typedef psitelike *pratelike;                    /* used in proml                    */
 typedef ratelike *phenotype;    /* phenotype used in dnaml, dnamlk, dnadist */
-typedef pratelike *pphenotype;  /* phenotype used in proml                    */ 
+typedef pratelike *pphenotype;  /* phenotype used in proml                    */
 typedef double *sitelike2;
 typedef sitelike2 *phenotype2;              /* phenotype2 used in restml    */
 typedef double *phenotype3;                 /* for continuous char programs */
@@ -483,7 +505,7 @@ typedef struct node {
   phenotype x;                     /* x used in dnaml, dnamlk, dnadist     */
   phenotype2 x2;                   /* x2 used in restml                    */
   phenotype3 view;                 /* contml etc                           */
-  pphenotype protx;                /* protx used in proml */ 
+  pphenotype protx;                /* protx used in proml */
   aas *seq;                  /* the sequence used in protpars              */
   seqptr siteset;            /* temporary storage for aa's used in protpars*/
   double v, deltav, ssq;       /* ssq used only in contrast                */
@@ -555,11 +577,11 @@ typedef struct tree {
 
   /* A pointer to the first node. Typically, root is used when the tree is rooted,
    * and points to an internal node with no back link. */
-  node *root;                    
-  
+  node *root;
+
   /* start is used when trees are unrooted. It points to an internal node whose
    * back link typically points to the outgroup leaf. */
-  node *start;                    
+  node *start;
 
   /* In maximum likelihood programs, the most recent evaluation is stored here */
   double likelihood;
@@ -686,7 +708,7 @@ void   hookup(node *, node *);
 void   unhookup(node *, node *);
 void   link_trees(long, long , long, pointarray);
 void   allocate_nodep(pointarray *, FILE **, long  *);
-  
+
 void   malloc_pheno(node *, long, long);
 void   malloc_ppheno(node *, long, long);
 long   take_name_from_tree (Phylip_Char *, Phylip_Char *, FILE *);
diff --git a/src/plugins_3rdparty/phylip/src/protdist.cpp b/src/plugins_3rdparty/phylip/src/protdist.cpp
index b14fb4c..7701866 100644
--- a/src/plugins_3rdparty/phylip/src/protdist.cpp
+++ b/src/plugins_3rdparty/phylip/src/protdist.cpp
@@ -6,10 +6,35 @@
 #include <U2Algorithm/CreatePhyTreeSettings.h>
 #include <U2Core/Task.h>
 
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+
 
 
 long chars /*,datasets ith, ctgry, categs*/;
diff --git a/src/plugins_3rdparty/phylip/src/seq.cpp b/src/plugins_3rdparty/phylip/src/seq.cpp
index 94df828..456ea2f 100644
--- a/src/plugins_3rdparty/phylip/src/seq.cpp
+++ b/src/plugins_3rdparty/phylip/src/seq.cpp
@@ -2,10 +2,34 @@
 #include "phylip.h"
 #include "seq.h"
 
-/* version 3.6. (c) Copyright 1993-2004 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 long nonodes, endsite, outgrno, nextree, which;
 boolean interleaved, printdata, outgropt, treeprint, dotdiff, transvp;
@@ -562,7 +586,7 @@ void sitesort2(long sites, steptr aliasweight)
   /* Shell sort keeping sites, weights in same order */
   /* used in dnaml & dnamnlk */
   long gap, i, j, jj, jg, k, itemp;
-  boolean flip, tied, samewt;
+  boolean flip, tied;
 
   gap = sites / 2;
   while (gap > 0) {
@@ -572,11 +596,8 @@ void sitesort2(long sites, steptr aliasweight)
       while (j > 0 && flip) {
         jj = alias[j - 1];
         jg = alias[j + gap - 1];
-        samewt = ((weight[jj - 1] != 0) && (weight[jg - 1] != 0))
-                 || ((weight[jj - 1] == 0) && (weight[jg - 1] == 0));
-        tied = samewt && (category[jj - 1] == category[jg - 1]);
-        flip = ((!samewt) && (weight[jj - 1] == 0))
-               || (samewt && (category[jj - 1] > category[jg - 1]));
+        tied = (category[jj - 1] == category[jg - 1]);
+        flip = (category[jj - 1] > category[jg - 1]);
         k = 1;
         while (k <= spp && tied) {
           flip = (y[k - 1][jj - 1] > y[k - 1][jg - 1]);
@@ -604,17 +625,14 @@ void sitecombine2(long sites, steptr aliasweight)
   /* combine sites that have identical patterns */
   /* used in dnaml & dnamlk */
   long i, j, k;
-  boolean tied, samewt;
+  boolean tied;
 
   i = 1;
   while (i < sites) {
     j = i + 1;
     tied = true;
     while (j <= sites && tied) {
-      samewt = ((aliasweight[i - 1] != 0) && (aliasweight[j - 1] != 0))
-               || ((aliasweight[i - 1] == 0) && (aliasweight[j - 1] == 0));
-      tied = samewt
-             && (category[alias[i - 1] - 1] == category[alias[j - 1] - 1]);
+      tied = (category[alias[i - 1] - 1] == category[alias[j - 1] - 1]);
       k = 1;
       while (k <= spp && tied) {
         tied = (tied &&
diff --git a/src/plugins_3rdparty/phylip/src/seq.h b/src/plugins_3rdparty/phylip/src/seq.h
index 58699a7..de4f8fa 100644
--- a/src/plugins_3rdparty/phylip/src/seq.h
+++ b/src/plugins_3rdparty/phylip/src/seq.h
@@ -1,7 +1,31 @@
-/* version 3.6. (c) Copyright 1993-2000 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 /*
     seq.h:  included in dnacomp, dnadist, dnainvar, dnaml, dnamlk, dnamove,
diff --git a/src/plugins_3rdparty/phylip/src/seqboot.cpp b/src/plugins_3rdparty/phylip/src/seqboot.cpp
index 19af741..e1dea29 100644
--- a/src/plugins_3rdparty/phylip/src/seqboot.cpp
+++ b/src/plugins_3rdparty/phylip/src/seqboot.cpp
@@ -1,10 +1,33 @@
-/* version 3.6. (c) Copyright 1993-2005 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, Andrew Keeffe,
-   and Doug Buxton.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
-
-#include <U2Core/MAlignment.h>
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include "seqboot.h"
@@ -762,7 +785,7 @@ void charpermute(long m, long n)
 } /* charpermute */
 
 
-void writedata( QVector<U2::MAlignment*>& mavect, int rep, const U2::MAlignment& ma)
+void writedata( QVector<U2::MultipleSequenceAlignment>& mavect, int rep, const U2::MultipleSequenceAlignment& ma)
 {
     
 
@@ -904,11 +927,9 @@ void writedata( QVector<U2::MAlignment*>& mavect, int rep, const U2::MAlignment&
       }
       //putchar('\n');
       if (j >= mavect[rep]->getNumRows()) {
-          U2::U2OpStatus2Log os;
-          mavect[rep]->addRow(ma.getRow(j).getName(), curAr, os);
+          mavect[rep]->addRow(ma->getMsaRow(j)->getName(), curAr);
       }
       else {
-        const U2::MAlignmentRow& curR = mavect[rep]->getRow(j);
         mavect[rep]->appendChars(j,curAr.data(), curAr.length());
       }
       
@@ -1148,7 +1169,7 @@ void writefactors(void)
 } /* writefactors */
 
 
-void bootwrite( QVector<U2::MAlignment*>& mavect, const U2::MAlignment& ma)
+void bootwrite( QVector<U2::MultipleSequenceAlignment>& mavect, const U2::MultipleSequenceAlignment& ma)
 { /* does bootstrapping and writes out data sets */
   long i, j, rr, repdiv10;
 
diff --git a/src/plugins_3rdparty/phylip/src/seqboot.h b/src/plugins_3rdparty/phylip/src/seqboot.h
index c3c6678..3e2fbab 100644
--- a/src/plugins_3rdparty/phylip/src/seqboot.h
+++ b/src/plugins_3rdparty/phylip/src/seqboot.h
@@ -1,18 +1,40 @@
 #ifndef SEQBOOT_H 
 #define SEQBOOT_H
-/* version 3.6. (c) Copyright 1993-2005 by the University of Washington.
-   Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, Andrew Keeffe,
-   and Doug Buxton.
-   Permission is granted to copy and use this program provided no fee is
-   charged for it and provided that this copyright notice is not removed. */
+/* version 3.696.
+Written by Joseph Felsenstein, Akiko Fuseki, Sean Lamont, and Andrew Keeffe.
+
+Copyright (c) 1993-2014, Joseph Felsenstein
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+this list of conditions and the following disclaimer in the documentation
+and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+*/
 
 #include "phylip.h"
 #include "seq.h"
 
 #include <QVector>
-namespace U2 {
-    class MAlignment;
-}
+
+#include <U2Core/MultipleSequenceAlignment.h>
 
 typedef enum {
   seqs, morphology, restsites, genefreqs
@@ -115,12 +137,12 @@ void   bootweights(void);
 void   permute_vec(long *a, long n);
 void   sppermute(long);
 void   charpermute(long, long);
-void writedata(QVector<U2::MAlignment*>& mavect, int rep, const U2::MAlignment& ma);
+void writedata(QVector<U2::MultipleSequenceAlignment*>& mavect, int rep, const U2::MultipleSequenceAlignment& ma);
 void   writeweights(void);
 void   writecategories(void);
 void   writeauxdata(steptr, FILE*);
 void   writefactors(void);
-void bootwrite(QVector<U2::MAlignment*>& mavect, const U2::MAlignment& ma);
+void bootwrite(QVector<U2::MultipleSequenceAlignment>& mavect, const U2::MultipleSequenceAlignment& ma);
 //void   seqboot_inputaux(steptr, FILE*);
 void   freenewer(void);
 /* function prototypes */
diff --git a/src/plugins_3rdparty/phylip/transl/english.ts b/src/plugins_3rdparty/phylip/transl/english.ts
index c11acc9..f773eb7 100644
--- a/src/plugins_3rdparty/phylip/transl/english.ts
+++ b/src/plugins_3rdparty/phylip/transl/english.ts
@@ -29,32 +29,32 @@
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="51"/>
         <source>Distance Matrix</source>
-        <translation type="unfinished">Distance Matrix</translation>
+        <translation>Distance Matrix</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="68"/>
         <source>Distance matrix model</source>
-        <translation type="unfinished">Distance matrix model</translation>
+        <translation>Distance matrix model</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="88"/>
         <source>Coefficient of variation of substitution rate among sites</source>
-        <translation type="unfinished">Coefficient of variation of substitution rate among sites</translation>
+        <translation>Coefficient of variation of substitution rate among sites</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="117"/>
         <source>Gamma distributed rates across sites</source>
-        <translation type="unfinished">Gamma distributed rates across sites</translation>
+        <translation>Gamma distributed rates across sites</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="131"/>
         <source>Transition/transversion ratio</source>
-        <translation type="unfinished">Transition/transversion ratio</translation>
+        <translation>Transition/transversion ratio</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="176"/>
         <source>Bootstrapping and Consensus Tree</source>
-        <translation type="unfinished">Bootstrapping and Consensus Tree</translation>
+        <translation>Bootstrapping and Consensus Tree</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="185"/>
@@ -64,22 +64,22 @@
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="218"/>
         <source>Number of replicates</source>
-        <translation type="unfinished">Number of replicates</translation>
+        <translation>Number of replicates</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="245"/>
         <source>Seed (must be odd)</source>
-        <translation type="unfinished">Seed (must be odd)</translation>
+        <translation>Seed (must be odd)</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="272"/>
         <source>Consensus type</source>
-        <translation type="unfinished">Consensus type</translation>
+        <translation>Consensus type</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="289"/>
         <source>Fraction</source>
-        <translation type="unfinished">Fraction</translation>
+        <translation>Fraction</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="331"/>
@@ -125,26 +125,26 @@ It could cause an error. Do you want to continue?</translation>
         <location filename="../src/NeighborJoinWidget.cpp" line="147"/>
         <source>Probably, for that alignment there is no enough memory to run PHYLIP dnadist module.The module will require more than %1 MB in the estimation.
 It could cause an error. Do you want to continue?</source>
-        <translation type="unfinished">Probably, for that alignment there is no enough memory to run PHYLIP dnadist module.The module will require more than %1 MB in the estimation.
+        <translation>Probably, for that alignment there is no enough memory to run PHYLIP dnadist module.The module will require more than %1 MB in the estimation.
 It could cause an error. Do you want to continue?</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.cpp" line="158"/>
         <source>Seed must be odd</source>
-        <translation type="unfinished">Seed must be odd</translation>
+        <translation>Seed must be odd</translation>
     </message>
 </context>
 <context>
     <name>U2::PhylipCmdlineTask</name>
     <message>
-        <location filename="../src/PhylipCmdlineTask.cpp" line="52"/>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="54"/>
         <source>PHYLIP command line wrapper task</source>
-        <translation type="unfinished"></translation>
+        <translation>PHYLIP command line wrapper task</translation>
     </message>
     <message>
-        <location filename="../src/PhylipCmdlineTask.cpp" line="74"/>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="76"/>
         <source>No tree objects found.</source>
-        <translation type="unfinished"></translation>
+        <translation>No tree objects found.</translation>
     </message>
 </context>
 <context>
@@ -165,7 +165,7 @@ It could cause an error. Do you want to continue?</translation>
     <message>
         <location filename="../src/PhylipTask.cpp" line="33"/>
         <source>PHYLIP task</source>
-        <translation type="unfinished"></translation>
+        <translation>PHYLIP task</translation>
     </message>
 </context>
 <context>
diff --git a/src/plugins_3rdparty/phylip/transl/russian.ts b/src/plugins_3rdparty/phylip/transl/russian.ts
index f161bc9..c6cc4f3 100644
--- a/src/plugins_3rdparty/phylip/transl/russian.ts
+++ b/src/plugins_3rdparty/phylip/transl/russian.ts
@@ -29,32 +29,32 @@
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="51"/>
         <source>Distance Matrix</source>
-        <translation type="unfinished">Матрица расстояний</translation>
+        <translation>Матрица расстояний</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="68"/>
         <source>Distance matrix model</source>
-        <translation type="unfinished">Модель для подсчета матрицы</translation>
+        <translation>Модель для подсчета матрицы</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="88"/>
         <source>Coefficient of variation of substitution rate among sites</source>
-        <translation type="unfinished">Коэффициент вариации скорости замен</translation>
+        <translation>Коэффициент вариации скорости замен</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="117"/>
         <source>Gamma distributed rates across sites</source>
-        <translation type="unfinished">Гамма-распределение скорости замен</translation>
+        <translation>Гамма-распределение скорости замен</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="131"/>
         <source>Transition/transversion ratio</source>
-        <translation type="unfinished">Отношение транзиций к трансверсиям</translation>
+        <translation>Отношение транзиций к трансверсиям</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="176"/>
         <source>Bootstrapping and Consensus Tree</source>
-        <translation type="unfinished">Бутстреп-анализ и консенсусное дерево</translation>
+        <translation>Бутстреп-анализ и консенсусное дерево</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="185"/>
@@ -64,22 +64,22 @@
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="218"/>
         <source>Number of replicates</source>
-        <translation type="unfinished">Количество репликаций</translation>
+        <translation>Количество репликаций</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="245"/>
         <source>Seed (must be odd)</source>
-        <translation type="unfinished">Затравка (должна быть нечетной)</translation>
+        <translation>Затравка (должна быть нечетной)</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="272"/>
         <source>Consensus type</source>
-        <translation type="unfinished">Тип консенсуса</translation>
+        <translation>Тип консенсуса</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="289"/>
         <source>Fraction</source>
-        <translation type="unfinished">Доля</translation>
+        <translation>Доля</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.ui" line="331"/>
@@ -125,26 +125,26 @@ It could cause an error. Do you want to continue?</source>
         <location filename="../src/NeighborJoinWidget.cpp" line="147"/>
         <source>Probably, for that alignment there is no enough memory to run PHYLIP dnadist module.The module will require more than %1 MB in the estimation.
 It could cause an error. Do you want to continue?</source>
-        <translation type="unfinished">Возможно, для этого выравнивания недостаточно памяти для запуска модуля PHYLIP.Это, по предварительной оценке, потребует больше, чем%1 Мб памяти.
+        <translation>Возможно, для этого выравнивания недостаточно памяти для запуска модуля PHYLIP.Это, по предварительной оценке, потребует больше, чем%1 Мб памяти.
 Это может привести к ошибке. Вы хотите продолжить?</translation>
     </message>
     <message>
         <location filename="../src/NeighborJoinWidget.cpp" line="158"/>
         <source>Seed must be odd</source>
-        <translation type="unfinished">Затравка должна быть нечетной</translation>
+        <translation>Затравка должна быть нечетной</translation>
     </message>
 </context>
 <context>
     <name>U2::PhylipCmdlineTask</name>
     <message>
-        <location filename="../src/PhylipCmdlineTask.cpp" line="52"/>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="54"/>
         <source>PHYLIP command line wrapper task</source>
-        <translation type="unfinished"></translation>
+        <translation>PHYLIP command line wrapper task</translation>
     </message>
     <message>
-        <location filename="../src/PhylipCmdlineTask.cpp" line="74"/>
+        <location filename="../src/PhylipCmdlineTask.cpp" line="76"/>
         <source>No tree objects found.</source>
-        <translation type="unfinished"></translation>
+        <translation>No tree objects found.</translation>
     </message>
 </context>
 <context>
@@ -165,7 +165,7 @@ It could cause an error. Do you want to continue?</source>
     <message>
         <location filename="../src/PhylipTask.cpp" line="33"/>
         <source>PHYLIP task</source>
-        <translation type="unfinished"></translation>
+        <translation>PHYLIP task</translation>
     </message>
 </context>
 <context>
diff --git a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
index 4c7ac1d..30ad4ad 100644
--- a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
+++ b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,8 +33,6 @@
 
 namespace U2 {
 
-extern Logger log;
-
 FindExonRegionsTask::FindExonRegionsTask(U2SequenceObject *dObj, const QString &annName)
     : Task("FindExonRegionsTask", TaskFlags_NR_FOSCOE), dnaObj(dObj), exonAnnName(annName)
 {
diff --git a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.h b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.h
index 25501b8..ce6096b 100644
--- a/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.h
+++ b/src/plugins_3rdparty/primer3/src/FindExonRegionsTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp b/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
index 78fe3d0..4430fee 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Dialog.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -43,10 +43,11 @@ namespace U2 {
 
 Primer3Dialog::Primer3Dialog(const Primer3TaskSettings &defaultSettings, ADVSequenceObjectContext *context):
         QDialog(context->getAnnotatedDNAView()->getWidget()),
-        defaultSettings(defaultSettings)
+        defaultSettings(defaultSettings),
+        context(context)
 {
     ui.setupUi(this);
-    new HelpButton(this, ui.helpButton, "18223220");
+    new HelpButton(this, ui.helpButton, "20875124");
 
     QPushButton* pbPick = ui.pickPrimersButton;
     QPushButton* pbReset = ui.resetButton;
@@ -692,6 +693,14 @@ void Primer3Dialog::sl_pbPick_clicked()
     }
     if(doDataExchange())
     {
+        bool objectPrepared = createAnnotationWidgetController->prepareAnnotationObject();
+        if (!objectPrepared){
+            QMessageBox::critical(this, L10N::errorTitle(), tr("Cannot create an annotation object. Please check settings."));
+            return;
+        }
+        const CreateAnnotationModel& m = createAnnotationWidgetController->getModel();
+        AnnotationTableObject *obj = m.getAnnotationObject();
+        context->getAnnotatedDNAView()->tryAddObject(obj);
         accept();
     }
 }
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Dialog.h b/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
index 525cf53..4432555 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Dialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -29,11 +29,7 @@
 #include "ui_Primer3Dialog.h"
 #include "Primer3Task.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 namespace U2 {
 
@@ -75,6 +71,7 @@ private:
     Primer3TaskSettings defaultSettings;
     Primer3TaskSettings settings;
     RegionSelector* rs;
+    ADVSequenceObjectContext *context;
 private slots:
     void sl_pbReset_clicked();
     void sl_pbPick_clicked();
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Dialog.ui b/src/plugins_3rdparty/primer3/src/Primer3Dialog.ui
index 21eb677..ebd5363 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Dialog.ui
+++ b/src/plugins_3rdparty/primer3/src/Primer3Dialog.ui
@@ -2003,12 +2003,14 @@
         <layout class="QVBoxLayout" name="verticalLayout_5">
          <item>
           <widget class="QLabel" name="label_55">
+           <property name="font">
+            <font>
+             <weight>75</weight>
+             <bold>true</bold>
+            </font>
+           </property>
            <property name="text">
-            <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primers</span></p></body></html></string>
+            <string>Primers</string>
            </property>
           </widget>
          </item>
@@ -2419,12 +2421,14 @@ p, li { white-space: pre-wrap; }
         <layout class="QVBoxLayout" name="verticalLayout_3">
          <item>
           <widget class="QLabel" name="label_56">
+           <property name="font">
+            <font>
+             <weight>75</weight>
+             <bold>true</bold>
+            </font>
+           </property>
            <property name="text">
-            <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primer Pairs</span></p></body></html></string>
+            <string>Primer Pairs</string>
            </property>
           </widget>
          </item>
@@ -2736,12 +2740,14 @@ p, li { white-space: pre-wrap; }
         <layout class="QVBoxLayout" name="verticalLayout_6">
          <item>
           <widget class="QLabel" name="label_57">
+           <property name="font">
+            <font>
+             <weight>75</weight>
+             <bold>true</bold>
+            </font>
+           </property>
            <property name="text">
-            <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Hyb Oligos</span></p></body></html></string>
+            <string>Hyb Oligos</string>
            </property>
           </widget>
          </item>
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Plugin.cpp b/src/plugins_3rdparty/primer3/src/Primer3Plugin.cpp
index 68cb737..00e3b44 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Plugin.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Plugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,10 +27,11 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GUIUtils.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Test/GTest.h>
 #include <U2Test/GTestFrameworkComponents.h>
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Plugin.h b/src/plugins_3rdparty/primer3/src/Primer3Plugin.h
index 27dd143..641b24f 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Plugin.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Plugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,11 +24,7 @@
 #include <U2Core/PluginModel.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 #include "Primer3Tests.h"
 
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Query.cpp b/src/plugins_3rdparty/primer3/src/Primer3Query.cpp
index b680d19..53996e9 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Query.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Query.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Query.h b/src/plugins_3rdparty/primer3/src/Primer3Query.h
index cbb2bf0..3066d60 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Query.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Query.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
index d7e6db3..c8e27fb 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Task.h b/src/plugins_3rdparty/primer3/src/Primer3Task.h
index c9fba99..cb0c71d 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Task.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Task.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _PRIMER3_TASK_H_
 #define _PRIMER3_TASK_H_
 
-#include <QtCore/QScopedPointer>
+#include <QScopedPointer>
 
 #include <U2Core/AnnotationData.h>
 #include <U2Core/Task.h>
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
index 7858f59..ebe4139 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
index 3abf9e9..712359e 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3TaskSettings.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,12 @@
 #ifndef PRIMER3TASKSETTINGS_H
 #define PRIMER3TASKSETTINGS_H
 
-#include <QtCore/QMap>
-#include <QtCore/QList>
-#include <QtCore/QString>
-#include <QtCore/QByteArray>
-#include <QtCore/QVector>
-#include <QtCore/QPair>
+#include <QMap>
+#include <QList>
+#include <QString>
+#include <QByteArray>
+#include <QVector>
+#include <QPair>
 #include <U2Core/U2Region.h>
 #include <U2Core/U2Range.h>
 #include "primer3_core/primer3.h"
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp b/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
index f12f294..ecc33aa 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
+++ b/src/plugins_3rdparty/primer3/src/Primer3Tests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/primer3/src/Primer3Tests.h b/src/plugins_3rdparty/primer3/src/Primer3Tests.h
index 2f9c317..6784f56 100644
--- a/src/plugins_3rdparty/primer3/src/Primer3Tests.h
+++ b/src/plugins_3rdparty/primer3/src/Primer3Tests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/global.h>
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 #include "Primer3Task.h"
 
 namespace U2 {
diff --git a/src/plugins_3rdparty/primer3/transl/english.ts b/src/plugins_3rdparty/primer3/transl/english.ts
index ab7285b..fb4df12 100644
--- a/src/plugins_3rdparty/primer3/transl/english.ts
+++ b/src/plugins_3rdparty/primer3/transl/english.ts
@@ -540,7 +540,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="568"/>
-        <location filename="../src/Primer3Dialog.ui" line="2443"/>
+        <location filename="../src/Primer3Dialog.ui" line="2447"/>
         <source>Product Tm</source>
         <translation>Product Tm</translation>
     </message>
@@ -978,19 +978,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1509"/>
-        <location filename="../src/Primer3Dialog.ui" line="2760"/>
+        <location filename="../src/Primer3Dialog.ui" line="2766"/>
         <source>Hyb oligo size</source>
         <translation>Hyb oligo size</translation>
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1516"/>
-        <location filename="../src/Primer3Dialog.ui" line="2753"/>
+        <location filename="../src/Primer3Dialog.ui" line="2759"/>
         <source>Hyb oligo Tm</source>
         <translation>Hyb oligo Tm</translation>
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1523"/>
-        <location filename="../src/Primer3Dialog.ui" line="2767"/>
+        <location filename="../src/Primer3Dialog.ui" line="2773"/>
         <source>Hyb oligo GC%</source>
         <translation>Hyb oligo GC%</translation>
     </message>
@@ -1065,7 +1065,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1730"/>
-        <location filename="../src/Primer3Dialog.ui" line="2923"/>
+        <location filename="../src/Primer3Dialog.ui" line="2929"/>
         <source>Hyb oligo self complementarity</source>
         <translation>Hyb oligo self complementarity</translation>
     </message>
@@ -1275,42 +1275,41 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">There are two classes of weights: for some parameters there is a 'Lt' (less than) and a 'Gt' (greater than) weight. These are the weights that Primer3 uses when the value is less or greater than (respectively) the specified optimum.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2007"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primers</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primers</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2020"/>
+        <location filename="../src/Primer3Dialog.ui" line="2022"/>
         <source>Tm</source>
         <translation>Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2027"/>
+        <location filename="../src/Primer3Dialog.ui" line="2029"/>
         <source>Size  </source>
         <translation>Size  </translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2034"/>
+        <location filename="../src/Primer3Dialog.ui" line="2036"/>
         <source>GC%</source>
         <translation>GC%</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2041"/>
-        <location filename="../src/Primer3Dialog.ui" line="2048"/>
-        <location filename="../src/Primer3Dialog.ui" line="2055"/>
-        <location filename="../src/Primer3Dialog.ui" line="2482"/>
-        <location filename="../src/Primer3Dialog.ui" line="2489"/>
-        <location filename="../src/Primer3Dialog.ui" line="2774"/>
-        <location filename="../src/Primer3Dialog.ui" line="2781"/>
-        <location filename="../src/Primer3Dialog.ui" line="2788"/>
+        <location filename="../src/Primer3Dialog.ui" line="2043"/>
+        <location filename="../src/Primer3Dialog.ui" line="2050"/>
+        <location filename="../src/Primer3Dialog.ui" line="2057"/>
+        <location filename="../src/Primer3Dialog.ui" line="2486"/>
+        <location filename="../src/Primer3Dialog.ui" line="2493"/>
+        <location filename="../src/Primer3Dialog.ui" line="2780"/>
+        <location filename="../src/Primer3Dialog.ui" line="2787"/>
+        <location filename="../src/Primer3Dialog.ui" line="2794"/>
         <source>Lt:</source>
         <translation>Lt:</translation>
     </message>
@@ -1327,60 +1326,60 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Penalty weight for corressponding parameter of a primer less than (Lt) or greater than (Gt) the optimal value. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2110"/>
-        <location filename="../src/Primer3Dialog.ui" line="2117"/>
-        <location filename="../src/Primer3Dialog.ui" line="2124"/>
-        <location filename="../src/Primer3Dialog.ui" line="2496"/>
-        <location filename="../src/Primer3Dialog.ui" line="2503"/>
-        <location filename="../src/Primer3Dialog.ui" line="2843"/>
-        <location filename="../src/Primer3Dialog.ui" line="2850"/>
-        <location filename="../src/Primer3Dialog.ui" line="2857"/>
+        <location filename="../src/Primer3Dialog.ui" line="2112"/>
+        <location filename="../src/Primer3Dialog.ui" line="2119"/>
+        <location filename="../src/Primer3Dialog.ui" line="2126"/>
+        <location filename="../src/Primer3Dialog.ui" line="2500"/>
+        <location filename="../src/Primer3Dialog.ui" line="2507"/>
+        <location filename="../src/Primer3Dialog.ui" line="2849"/>
+        <location filename="../src/Primer3Dialog.ui" line="2856"/>
+        <location filename="../src/Primer3Dialog.ui" line="2863"/>
         <source>Gt:</source>
         <translation>Gt:</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2190"/>
+        <location filename="../src/Primer3Dialog.ui" line="2192"/>
         <source>Self complementarity</source>
         <translation>Self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2197"/>
+        <location filename="../src/Primer3Dialog.ui" line="2199"/>
         <source>3' self complementarity</source>
         <translation>3' self complementarity</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2204"/>
+        <location filename="../src/Primer3Dialog.ui" line="2206"/>
         <source>#N's</source>
         <translation>N</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2211"/>
+        <location filename="../src/Primer3Dialog.ui" line="2213"/>
         <source>Mispriming</source>
         <translation>Mispriming</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2218"/>
-        <location filename="../src/Primer3Dialog.ui" line="3282"/>
+        <location filename="../src/Primer3Dialog.ui" line="2220"/>
+        <location filename="../src/Primer3Dialog.ui" line="3288"/>
         <source>Sequence quality</source>
         <translation>Sequence quality</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2225"/>
+        <location filename="../src/Primer3Dialog.ui" line="2227"/>
         <source>End sequence quality</source>
         <translation>End sequence quality</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2232"/>
+        <location filename="../src/Primer3Dialog.ui" line="2234"/>
         <source>Position penalty</source>
         <translation>Position penalty</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2239"/>
+        <location filename="../src/Primer3Dialog.ui" line="2241"/>
         <source>End stability</source>
         <translation>End stability</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2246"/>
+        <location filename="../src/Primer3Dialog.ui" line="2248"/>
         <source>Template mispriming</source>
         <translation>Template mispriming</translation>
     </message>
@@ -1409,20 +1408,19 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Determines the overall weight of the position penalty in calculating the penalty for a primer.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2423"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primer Pairs</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primer Pairs</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2436"/>
+        <location filename="../src/Primer3Dialog.ui" line="2440"/>
         <source>Product size</source>
         <translation>Product size</translation>
     </message>
@@ -1439,37 +1437,37 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Penalty weight for corressponding parameter of a primer pair less than (Lt) or greater than (Gt) the optimal value. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2553"/>
+        <location filename="../src/Primer3Dialog.ui" line="2557"/>
         <source>Tm difference</source>
         <translation>Tm difference</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2560"/>
+        <location filename="../src/Primer3Dialog.ui" line="2564"/>
         <source>Any complementarity</source>
         <translation>Any complementarity</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2567"/>
+        <location filename="../src/Primer3Dialog.ui" line="2571"/>
         <source>3' complementarity</source>
         <translation>3' complementarity</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2574"/>
+        <location filename="../src/Primer3Dialog.ui" line="2578"/>
         <source>Pair mispriming</source>
         <translation>Pair mispriming</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2581"/>
+        <location filename="../src/Primer3Dialog.ui" line="2585"/>
         <source>Primer penalty weight</source>
         <translation>Primer penalty weight</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2588"/>
+        <location filename="../src/Primer3Dialog.ui" line="2592"/>
         <source>Hyb oligo penalty weight</source>
         <translation>Hyb oligo penalty weight</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2595"/>
+        <location filename="../src/Primer3Dialog.ui" line="2599"/>
         <source>Primer pair template mispriming weight</source>
         <translation>Primer pair template mispriming weight</translation>
     </message>
@@ -1486,13 +1484,12 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Penalty weight for a primer pair parameter different from predefined optimum value.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2740"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Hyb Oligos</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
@@ -1511,17 +1508,17 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Penalty weight for corressponding parameter of a internal oligo less than (Lt) or greater than (Gt) the optimal value. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2930"/>
+        <location filename="../src/Primer3Dialog.ui" line="2936"/>
         <source>Hyb oligo #N's</source>
         <translation>Hyb oligo #N's</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2937"/>
+        <location filename="../src/Primer3Dialog.ui" line="2943"/>
         <source>Hyb oligo mishybing</source>
         <translation>Hyb oligo mishybing</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2944"/>
+        <location filename="../src/Primer3Dialog.ui" line="2950"/>
         <source>Hyb oligo sequence quality</source>
         <translation>Hyb oligo sequence quality</translation>
     </message>
@@ -1538,7 +1535,7 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Penalty weight for an internal oligo parameter different from predefined optimum value.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3033"/>
+        <location filename="../src/Primer3Dialog.ui" line="3039"/>
         <source>RT-PCR</source>
         <translation>RT-PCR</translation>
     </message>
@@ -1569,12 +1566,12 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Checking this option will result in ignoring </span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt; font-style:italic;">Excluded</span><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">  [...]
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3045"/>
+        <location filename="../src/Primer3Dialog.ui" line="3051"/>
         <source>Design primers for RT-PCR analysis</source>
         <translation>Design primers for RT-PCR analysis</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3065"/>
+        <location filename="../src/Primer3Dialog.ui" line="3071"/>
         <source>Exon annotation name:</source>
         <translation>Exon annotation name:</translation>
     </message>
@@ -1583,87 +1580,87 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><html><head/><body><p><span style=" font-size:8pt;">The name of the annotation which defines the exons in the mRNA sequence.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3075"/>
+        <location filename="../src/Primer3Dialog.ui" line="3081"/>
         <source>exon</source>
         <translation>exon</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3100"/>
+        <location filename="../src/Primer3Dialog.ui" line="3106"/>
         <source>Minimum exon junction overlap size</source>
         <translation>Minimum exon junction overlap size</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3177"/>
+        <location filename="../src/Primer3Dialog.ui" line="3183"/>
         <source><html><head/><body><p>If the range is set, primer search will be restricted to selected exons. For example:</p><p><span style=" font-weight:600;">1-5</span></p><p>If the range is larger than actual exon range or the starting exon number exceeds number of exons, error message is shown. </p></body></html></source>
         <translation><html><head/><body><p>If the range is set, primer search will be restricted to selected exons. For example:</p><p><span style=" font-weight:600;">1-5</span></p><p>If the range is larger than actual exon range or the starting exon number exceeds number of exons, error message is shown. </p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3224"/>
         <source><html><head/><body><p>This number of found primer pairs wil bel queried to check if they fullfill the requirements for RTPCR.</p></body></html></source>
         <translation><html><head/><body><p>This number of found primer pairs wil bel queried to check if they fullfill the requirements for RTPCR.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3276"/>
+        <location filename="../src/Primer3Dialog.ui" line="3282"/>
         <source><html><head/><body><p>In this section user can specify sequence quality of target sequence and related parameters.</p></body></html></source>
         <translation><html><head/><body><p>In this section user can specify sequence quality of target sequence and related parameters.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3289"/>
+        <location filename="../src/Primer3Dialog.ui" line="3295"/>
         <source><html><head/><body><p>A list of space separated integers. There must be exactly one integer for each base in the Source Sequence if this argument is non-empty. High numbers indicate high confidence in the base call at that position and low numbers indicate low confidence in the base call at that position.</p></body></html></source>
         <translation><html><head/><body><p>A list of space separated integers. There must be exactly one integer for each base in the Source Sequence if this argument is non-empty. High numbers indicate high confidence in the base call at that position and low numbers indicate low confidence in the base call at that position.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3311"/>
+        <location filename="../src/Primer3Dialog.ui" line="3317"/>
         <source><html><head/><body><p>The minimum sequence quality allowed within a primer.</p></body></html></source>
         <translation><html><head/><body><p>The minimum sequence quality allowed within a primer.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3334"/>
+        <location filename="../src/Primer3Dialog.ui" line="3340"/>
         <source><html><head/><body><p>The minimum sequence quality allowed within the 3' pentamer of a primer.</p></body></html></source>
         <translation><html><head/><body><p>The minimum sequence quality allowed within the 3' pentamer of a primer.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3357"/>
+        <location filename="../src/Primer3Dialog.ui" line="3363"/>
         <source><html><head/><body><p>The minimum legal sequence quality.</p></body></html></source>
         <translation><html><head/><body><p>The minimum legal sequence quality.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3380"/>
+        <location filename="../src/Primer3Dialog.ui" line="3386"/>
         <source><html><head/><body><p>The maximum legal sequence quality.</p></body></html></source>
         <translation><html><head/><body><p>The maximum legal sequence quality.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3396"/>
+        <location filename="../src/Primer3Dialog.ui" line="3402"/>
         <source><html><head/><body><p>This section allows to set output annotations' settings.</p></body></html></source>
         <translation><html><head/><body><p>This section allows to set output annotations' settings.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3451"/>
+        <location filename="../src/Primer3Dialog.ui" line="3457"/>
         <source>Help</source>
         <translation>Help</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3471"/>
+        <location filename="../src/Primer3Dialog.ui" line="3477"/>
         <source>Save settings</source>
         <translation>Save settings</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3478"/>
+        <location filename="../src/Primer3Dialog.ui" line="3484"/>
         <source>Load settings</source>
         <translation>Load settings</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3485"/>
+        <location filename="../src/Primer3Dialog.ui" line="3491"/>
         <source>Reset form</source>
         <translation>Reset form</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3492"/>
+        <location filename="../src/Primer3Dialog.ui" line="3498"/>
         <source>Pick primers</source>
         <translation>Pick primers</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3057"/>
+        <location filename="../src/Primer3Dialog.ui" line="3063"/>
         <source>mRNA sequence</source>
         <translation>mRNA sequence</translation>
     </message>
@@ -1828,96 +1825,111 @@ p, li { white-space: pre-wrap; }
         <translation><html><head/><body><p>This section describes &quot;penalty weights&quot;, which allow the user to modify the criteria that Primer3 uses to select the &quot;best&quot; primers.</p><p>There are two classes of weights: for some parameters there is a 'Lt' (less than) and a 'Gt' (greater than) weight. These are the weights that Primer3 uses when the value is less or greater than (respectively) the spe [...]
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2068"/>
-        <location filename="../src/Primer3Dialog.ui" line="2084"/>
-        <location filename="../src/Primer3Dialog.ui" line="2100"/>
-        <location filename="../src/Primer3Dialog.ui" line="2137"/>
-        <location filename="../src/Primer3Dialog.ui" line="2153"/>
-        <location filename="../src/Primer3Dialog.ui" line="2169"/>
+        <location filename="../src/Primer3Dialog.ui" line="2013"/>
+        <source>Primers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="2070"/>
+        <location filename="../src/Primer3Dialog.ui" line="2086"/>
+        <location filename="../src/Primer3Dialog.ui" line="2102"/>
+        <location filename="../src/Primer3Dialog.ui" line="2139"/>
+        <location filename="../src/Primer3Dialog.ui" line="2155"/>
+        <location filename="../src/Primer3Dialog.ui" line="2171"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a primer less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for corressponding parameter of a primer less than (Lt) or greater than (Gt) the optimal value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2259"/>
-        <location filename="../src/Primer3Dialog.ui" line="2275"/>
-        <location filename="../src/Primer3Dialog.ui" line="2291"/>
-        <location filename="../src/Primer3Dialog.ui" line="2307"/>
-        <location filename="../src/Primer3Dialog.ui" line="2323"/>
-        <location filename="../src/Primer3Dialog.ui" line="2339"/>
-        <location filename="../src/Primer3Dialog.ui" line="2371"/>
-        <location filename="../src/Primer3Dialog.ui" line="2387"/>
+        <location filename="../src/Primer3Dialog.ui" line="2261"/>
+        <location filename="../src/Primer3Dialog.ui" line="2277"/>
+        <location filename="../src/Primer3Dialog.ui" line="2293"/>
+        <location filename="../src/Primer3Dialog.ui" line="2309"/>
+        <location filename="../src/Primer3Dialog.ui" line="2325"/>
+        <location filename="../src/Primer3Dialog.ui" line="2341"/>
+        <location filename="../src/Primer3Dialog.ui" line="2373"/>
+        <location filename="../src/Primer3Dialog.ui" line="2389"/>
         <source><html><head/><body><p>Penalty weight for a primer parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for a primer parameter different from predefined optimum value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2355"/>
+        <location filename="../src/Primer3Dialog.ui" line="2357"/>
         <source><html><head/><body><p>Determines the overall weight of the position penalty in calculating the penalty for a primer.</p></body></html></source>
         <translation><html><head/><body><p>Determines the overall weight of the position penalty in calculating the penalty for a primer.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2456"/>
-        <location filename="../src/Primer3Dialog.ui" line="2472"/>
-        <location filename="../src/Primer3Dialog.ui" line="2516"/>
-        <location filename="../src/Primer3Dialog.ui" line="2532"/>
+        <location filename="../src/Primer3Dialog.ui" line="2431"/>
+        <source>Primer Pairs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="2460"/>
+        <location filename="../src/Primer3Dialog.ui" line="2476"/>
+        <location filename="../src/Primer3Dialog.ui" line="2520"/>
+        <location filename="../src/Primer3Dialog.ui" line="2536"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a primer pair less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for corressponding parameter of a primer pair less than (Lt) or greater than (Gt) the optimal value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2608"/>
-        <location filename="../src/Primer3Dialog.ui" line="2624"/>
-        <location filename="../src/Primer3Dialog.ui" line="2640"/>
-        <location filename="../src/Primer3Dialog.ui" line="2656"/>
-        <location filename="../src/Primer3Dialog.ui" line="2672"/>
-        <location filename="../src/Primer3Dialog.ui" line="2688"/>
-        <location filename="../src/Primer3Dialog.ui" line="2704"/>
+        <location filename="../src/Primer3Dialog.ui" line="2612"/>
+        <location filename="../src/Primer3Dialog.ui" line="2628"/>
+        <location filename="../src/Primer3Dialog.ui" line="2644"/>
+        <location filename="../src/Primer3Dialog.ui" line="2660"/>
+        <location filename="../src/Primer3Dialog.ui" line="2676"/>
+        <location filename="../src/Primer3Dialog.ui" line="2692"/>
+        <location filename="../src/Primer3Dialog.ui" line="2708"/>
         <source><html><head/><body><p>Penalty weight for a primer pair parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for a primer pair parameter different from predefined optimum value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2801"/>
-        <location filename="../src/Primer3Dialog.ui" line="2817"/>
-        <location filename="../src/Primer3Dialog.ui" line="2833"/>
-        <location filename="../src/Primer3Dialog.ui" line="2870"/>
-        <location filename="../src/Primer3Dialog.ui" line="2886"/>
-        <location filename="../src/Primer3Dialog.ui" line="2902"/>
+        <location filename="../src/Primer3Dialog.ui" line="2750"/>
+        <source>Hyb Oligos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="2807"/>
+        <location filename="../src/Primer3Dialog.ui" line="2823"/>
+        <location filename="../src/Primer3Dialog.ui" line="2839"/>
+        <location filename="../src/Primer3Dialog.ui" line="2876"/>
+        <location filename="../src/Primer3Dialog.ui" line="2892"/>
+        <location filename="../src/Primer3Dialog.ui" line="2908"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a internal oligo less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for corressponding parameter of a internal oligo less than (Lt) or greater than (Gt) the optimal value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2957"/>
-        <location filename="../src/Primer3Dialog.ui" line="2973"/>
-        <location filename="../src/Primer3Dialog.ui" line="2989"/>
-        <location filename="../src/Primer3Dialog.ui" line="3005"/>
+        <location filename="../src/Primer3Dialog.ui" line="2963"/>
+        <location filename="../src/Primer3Dialog.ui" line="2979"/>
+        <location filename="../src/Primer3Dialog.ui" line="2995"/>
+        <location filename="../src/Primer3Dialog.ui" line="3011"/>
         <source><html><head/><body><p>Penalty weight for an internal oligo parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Penalty weight for an internal oligo parameter different from predefined optimum value.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3036"/>
+        <location filename="../src/Primer3Dialog.ui" line="3042"/>
         <source><html><head/><body><p>In this section user can specify if primer product must overlap exon-exon junction or span intron. This only applies when designing primers for a cDNA (mRNA) sequence with annotated exons.</p></body></html></source>
         <translation><html><head/><body><p>In this section user can specify if primer product must overlap exon-exon junction or span intron. This only applies when designing primers for a cDNA (mRNA) sequence with annotated exons.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3042"/>
+        <location filename="../src/Primer3Dialog.ui" line="3048"/>
         <source><html><head/><body><p>This feature allows to specify if primer product must span intron-exon boundaries.</p><p>Checking this option will result in ignoring <span style=" font-style:italic;">Excluded</span> and <span style=" font-style:italic;">Target Regions</span> from Main section.</p></body></html></source>
         <translation><html><head/><body><p>This feature allows to specify if primer product must span intron-exon boundaries.</p><p>Checking this option will result in ignoring <span style=" font-style:italic;">Excluded</span> and <span style=" font-style:italic;">Target Regions</span> from Main section.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3072"/>
+        <location filename="../src/Primer3Dialog.ui" line="3078"/>
         <source><html><head/><body><p>The name of the annotation which defines the exons in the mRNA sequence.</p></body></html></source>
         <translation><html><head/><body><p>The name of the annotation which defines the exons in the mRNA sequence.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3112"/>
+        <location filename="../src/Primer3Dialog.ui" line="3118"/>
         <source>At 5' side (bp):</source>
         <translation>At 5' side (bp):</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3142"/>
+        <location filename="../src/Primer3Dialog.ui" line="3148"/>
         <source>At 3'side (bp)</source>
         <translation>At 3'side (bp)</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3164"/>
+        <location filename="../src/Primer3Dialog.ui" line="3170"/>
         <source>Exon range:</source>
         <translation>Exon range:</translation>
     </message>
@@ -1926,12 +1938,12 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><html><head/><body><p><span style=" font-size:8pt;">If the range is set, primer search will be restricted to selected exons. For example:</span></p><p><span style=" font-size:8pt; font-weight:600;">1-5</span></p><p><span style=" font-size:8pt;">If the range is larger than actual exon range or the starting exon number exceeds number of exons, err [...]
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3199"/>
+        <location filename="../src/Primer3Dialog.ui" line="3205"/>
         <source>Primer product must span at least one intron on the corresponding genomic DNA</source>
         <translation>Primer product must span at least one intron on the corresponding genomic DNA</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3211"/>
+        <location filename="../src/Primer3Dialog.ui" line="3217"/>
         <source>Max number of pairs to query:</source>
         <translation>Max number of pairs to query:</translation>
     </message>
@@ -1940,7 +1952,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><html><head/><body><p><span style=" font-size:8pt;">This number of found primer pairs wil bel queried to check if they fullfill the requirements for RTPCR</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3273"/>
+        <location filename="../src/Primer3Dialog.ui" line="3279"/>
         <source>Sequence Quality</source>
         <translation>Sequence Quality</translation>
     </message>
@@ -1969,7 +1981,7 @@ p, li { white-space: pre-wrap; }
 <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A list of space separated integers. There must be exactly one integer for each base in the Source Sequence if this argument is non-empty. High numbers indicate high confidence in the base call at that position and low numbers indicate low confidence in the base call at that position.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3298"/>
+        <location filename="../src/Primer3Dialog.ui" line="3304"/>
         <source>Min sequence quality:</source>
         <translation>Min sequence quality:</translation>
     </message>
@@ -1978,7 +1990,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The minimum sequence quality allowed within a primer.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3321"/>
+        <location filename="../src/Primer3Dialog.ui" line="3327"/>
         <source>Min 3' sequence quality:</source>
         <translation>Min 3' sequence quality:</translation>
     </message>
@@ -1999,7 +2011,7 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">This section allows to set output annotations' settings.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3344"/>
+        <location filename="../src/Primer3Dialog.ui" line="3350"/>
         <source>Sequence quality range min:</source>
         <translation>Sequence quality range min:</translation>
     </message>
@@ -2008,7 +2020,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The minimum legal sequence quality.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3367"/>
+        <location filename="../src/Primer3Dialog.ui" line="3373"/>
         <source>Sequence quality range max:</source>
         <translation>Sequence quality range max:</translation>
     </message>
@@ -2017,7 +2029,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">The maximum legal sequence quality.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3393"/>
+        <location filename="../src/Primer3Dialog.ui" line="3399"/>
         <source>Result Settings</source>
         <translation>Result Settings</translation>
     </message>
@@ -2083,7 +2095,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::FindExonRegionsTask</name>
     <message>
-        <location filename="../src/FindExonRegionsTask.cpp" line="100"/>
+        <location filename="../src/FindExonRegionsTask.cpp" line="98"/>
         <source>Failed to search for exon annotations. The sequence %1 doesn't have any related annotations.</source>
         <translation>Failed to search for exon annotations. The sequence %1 doesn't have any related annotations.</translation>
     </message>
@@ -2172,17 +2184,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3ADVContext</name>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="92"/>
+        <location filename="../src/Primer3Plugin.cpp" line="93"/>
         <source>Primer3...</source>
         <translation>Primer3...</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="146"/>
+        <location filename="../src/Primer3Plugin.cpp" line="147"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="146"/>
+        <location filename="../src/Primer3Plugin.cpp" line="147"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Cannot create an annotation object. Please check settings</translation>
     </message>
@@ -2190,127 +2202,132 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3Dialog</name>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="82"/>
+        <location filename="../src/Primer3Dialog.cpp" line="83"/>
         <source>NONE</source>
         <translation>NONE</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="83"/>
+        <location filename="../src/Primer3Dialog.cpp" line="84"/>
         <source>HUMAN</source>
         <translation>HUMAN</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="84"/>
+        <location filename="../src/Primer3Dialog.cpp" line="85"/>
         <source>RODENT_AND_SIMPLE</source>
         <translation>RODENT_AND_SIMPLE</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="85"/>
+        <location filename="../src/Primer3Dialog.cpp" line="86"/>
         <source>RODENT</source>
         <translation>RODENT</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="86"/>
+        <location filename="../src/Primer3Dialog.cpp" line="87"/>
         <source>DROSOPHILA</source>
         <translation>DROSOPHILA</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="438"/>
+        <location filename="../src/Primer3Dialog.cpp" line="439"/>
         <source>Start Codon Position</source>
         <translation>Start Codon Position</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="452"/>
+        <location filename="../src/Primer3Dialog.cpp" line="453"/>
         <source>Product Min Tm</source>
         <translation>Product Min Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="466"/>
+        <location filename="../src/Primer3Dialog.cpp" line="467"/>
         <source>Product Opt Tm</source>
         <translation>Product Opt Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="480"/>
+        <location filename="../src/Primer3Dialog.cpp" line="481"/>
         <source>Product Max Tm</source>
         <translation>Product Max Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="508"/>
+        <location filename="../src/Primer3Dialog.cpp" line="509"/>
         <source>Inside Penalty</source>
         <translation>Inside Penalty</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="522"/>
+        <location filename="../src/Primer3Dialog.cpp" line="523"/>
         <source>Internal Oligo Opt Tm</source>
         <translation>Internal Oligo Opt Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="534"/>
+        <location filename="../src/Primer3Dialog.cpp" line="535"/>
         <source>Excluded Regions</source>
         <translation>Excluded Regions</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="546"/>
+        <location filename="../src/Primer3Dialog.cpp" line="547"/>
         <source>Internal Oligo Excluded Regions</source>
         <translation>Internal Oligo Excluded Regions</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="664"/>
+        <location filename="../src/Primer3Dialog.cpp" line="665"/>
         <source>Included region is too small for current product size ranges</source>
         <translation>Included region is too small for current product size ranges</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="671"/>
+        <location filename="../src/Primer3Dialog.cpp" line="672"/>
         <source>Product Size Ranges</source>
         <translation>Product Size Ranges</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="595"/>
+        <location filename="../src/Primer3Dialog.cpp" line="596"/>
         <source>Sequence Quality</source>
         <translation>Sequence Quality</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="703"/>
+        <location filename="../src/Primer3Dialog.cpp" line="698"/>
+        <source>Cannot create an annotation object. Please check settings.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.cpp" line="712"/>
         <source>Save primer settings</source>
         <translation>Save primer settings</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="785"/>
+        <location filename="../src/Primer3Dialog.cpp" line="794"/>
         <source>Load settings</source>
         <translation>Load settings</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="795"/>
+        <location filename="../src/Primer3Dialog.cpp" line="804"/>
         <source>Can not load settings file: invalid format.</source>
         <translation>Can not load settings file: invalid format.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="494"/>
+        <location filename="../src/Primer3Dialog.cpp" line="495"/>
         <source>Opt GC%</source>
         <translation>Opt GC%</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="558"/>
+        <location filename="../src/Primer3Dialog.cpp" line="559"/>
         <source>Targets</source>
         <translation>Targets</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="602"/>
+        <location filename="../src/Primer3Dialog.cpp" line="603"/>
         <source>Sequence quality list length must be equal to the sequence length</source>
         <translation>Sequence quality list length must be equal to the sequence length</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="624"/>
+        <location filename="../src/Primer3Dialog.cpp" line="625"/>
         <source>Can't pick hyb oligo and only one primer</source>
         <translation>Can't pick hyb oligo and only one primer</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="644"/>
+        <location filename="../src/Primer3Dialog.cpp" line="645"/>
         <source>Nothing to pick</source>
         <translation>Nothing to pick</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="682"/>
+        <location filename="../src/Primer3Dialog.cpp" line="683"/>
         <source>The field '%1' has invalid value</source>
         <translation>The field '%1' has invalid value</translation>
     </message>
@@ -2318,12 +2335,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3Plugin</name>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="55"/>
+        <location filename="../src/Primer3Plugin.cpp" line="56"/>
         <source>Primer3</source>
         <translation>Primer3</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="55"/>
+        <location filename="../src/Primer3Plugin.cpp" line="56"/>
         <source>Integrated tool for PCR primers design.</source>
         <translation>Integrated tool for PCR primers design.</translation>
     </message>
diff --git a/src/plugins_3rdparty/primer3/transl/russian.ts b/src/plugins_3rdparty/primer3/transl/russian.ts
index 425777d..7d36389 100644
--- a/src/plugins_3rdparty/primer3/transl/russian.ts
+++ b/src/plugins_3rdparty/primer3/transl/russian.ts
@@ -224,7 +224,22 @@
         <translation>Таблица термодинамических параметров</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3396"/>
+        <location filename="../src/Primer3Dialog.ui" line="2013"/>
+        <source>Primers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="2431"/>
+        <source>Primer Pairs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="2750"/>
+        <source>Hyb Oligos</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.ui" line="3402"/>
         <source><html><head/><body><p>This section allows to set output annotations' settings.</p></body></html></source>
         <translation><html><head/><body><p>В этой секции можно задать настройки для аннотаций.</p></body></html></translation>
     </message>
@@ -529,7 +544,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="568"/>
-        <location filename="../src/Primer3Dialog.ui" line="2443"/>
+        <location filename="../src/Primer3Dialog.ui" line="2447"/>
         <source>Product Tm</source>
         <translation>Т. плав. продукта</translation>
     </message>
@@ -845,19 +860,19 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1509"/>
-        <location filename="../src/Primer3Dialog.ui" line="2760"/>
+        <location filename="../src/Primer3Dialog.ui" line="2766"/>
         <source>Hyb oligo size</source>
         <translation>Размер гибридизации олиго</translation>
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1516"/>
-        <location filename="../src/Primer3Dialog.ui" line="2753"/>
+        <location filename="../src/Primer3Dialog.ui" line="2759"/>
         <source>Hyb oligo Tm</source>
         <translation>Tm гибридизации олиго</translation>
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1523"/>
-        <location filename="../src/Primer3Dialog.ui" line="2767"/>
+        <location filename="../src/Primer3Dialog.ui" line="2773"/>
         <source>Hyb oligo GC%</source>
         <translation>GC% гибридизации олиго</translation>
     </message>
@@ -888,7 +903,7 @@ p, li { white-space: pre-wrap; }
     </message>
     <message>
         <location filename="../src/Primer3Dialog.ui" line="1730"/>
-        <location filename="../src/Primer3Dialog.ui" line="2923"/>
+        <location filename="../src/Primer3Dialog.ui" line="2929"/>
         <source>Hyb oligo self complementarity</source>
         <translation>Комплементарность гибридизации олиго</translation>
     </message>
@@ -1070,17 +1085,17 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Equivalent parameter of primer DNA concentration for the internal oligo. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2190"/>
+        <location filename="../src/Primer3Dialog.ui" line="2192"/>
         <source>Self complementarity</source>
         <translation>Комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2197"/>
+        <location filename="../src/Primer3Dialog.ui" line="2199"/>
         <source>3' self complementarity</source>
         <translation>3' комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3033"/>
+        <location filename="../src/Primer3Dialog.ui" line="3039"/>
         <source>RT-PCR</source>
         <translation>RT-PCR</translation>
     </message>
@@ -1110,12 +1125,12 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Эта опция позволяет указать если праймер должен охватывать интрон-экзон границы.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3045"/>
+        <location filename="../src/Primer3Dialog.ui" line="3051"/>
         <source>Design primers for RT-PCR analysis</source>
         <translation>Дизайн праймеров для анализа RT-PCR</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3065"/>
+        <location filename="../src/Primer3Dialog.ui" line="3071"/>
         <source>Exon annotation name:</source>
         <translation>Имя экзон аннотации:</translation>
     </message>
@@ -1124,17 +1139,17 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><html><head/><body><p><span style=" font-size:8pt;">Имя экзон аннотации.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3075"/>
+        <location filename="../src/Primer3Dialog.ui" line="3081"/>
         <source>exon</source>
         <translation>exon</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3100"/>
+        <location filename="../src/Primer3Dialog.ui" line="3106"/>
         <source>Minimum exon junction overlap size</source>
         <translation>Минимальный размер перекрытия соединения экзона</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3164"/>
+        <location filename="../src/Primer3Dialog.ui" line="3170"/>
         <source>Exon range:</source>
         <translation>Диапазон экзона:</translation>
     </message>
@@ -1143,7 +1158,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete"><html><head/><body><p><span style=" font-size:8pt;">Если диапазон указан, то поиск будет выполнен для выделенных экзонов. Например:</span></p><p><span style=" font-size:8pt; font-weight:600;">1-5</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3211"/>
+        <location filename="../src/Primer3Dialog.ui" line="3217"/>
         <source>Max number of pairs to query:</source>
         <translation>Максимальное число пар для запроса:</translation>
     </message>
@@ -1176,7 +1191,7 @@ p, li { white-space: pre-wrap; }
 <p align="justify" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Список разделенных пробелами целых чисел.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3298"/>
+        <location filename="../src/Primer3Dialog.ui" line="3304"/>
         <source>Min sequence quality:</source>
         <translation>Минимальное качество последовательности:</translation>
     </message>
@@ -1185,7 +1200,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимальное качество последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3321"/>
+        <location filename="../src/Primer3Dialog.ui" line="3327"/>
         <source>Min 3' sequence quality:</source>
         <translation>Минимальное 3'качество последовательности:</translation>
     </message>
@@ -1194,7 +1209,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимальное 3'качество последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3344"/>
+        <location filename="../src/Primer3Dialog.ui" line="3350"/>
         <source>Sequence quality range min:</source>
         <translation>Минимум интервала качества последовательности:</translation>
     </message>
@@ -1203,7 +1218,7 @@ p, li { white-space: pre-wrap; }
         <translation type="obsolete">Минимум интервала качества последовательности.</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3367"/>
+        <location filename="../src/Primer3Dialog.ui" line="3373"/>
         <source>Sequence quality range max:</source>
         <translation>Максимум интервала качества последовательности:</translation>
     </message>
@@ -1224,27 +1239,27 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">В этой секции можно задать настройки для аннотаций.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3451"/>
+        <location filename="../src/Primer3Dialog.ui" line="3457"/>
         <source>Help</source>
         <translation>Помощь</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3471"/>
+        <location filename="../src/Primer3Dialog.ui" line="3477"/>
         <source>Save settings</source>
         <translation>Сохранить настройки</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3478"/>
+        <location filename="../src/Primer3Dialog.ui" line="3484"/>
         <source>Load settings</source>
         <translation>Загрузить настройки</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3485"/>
+        <location filename="../src/Primer3Dialog.ui" line="3491"/>
         <source>Reset form</source>
         <translation>Сброс параметров</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3492"/>
+        <location filename="../src/Primer3Dialog.ui" line="3498"/>
         <source>Pick primers</source>
         <translation>Подобрать</translation>
     </message>
@@ -1537,42 +1552,41 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Веса штрафов.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2007"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primers</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Для праймеров</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2020"/>
+        <location filename="../src/Primer3Dialog.ui" line="2022"/>
         <source>Tm</source>
         <translation>Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2027"/>
+        <location filename="../src/Primer3Dialog.ui" line="2029"/>
         <source>Size  </source>
         <translation>Размер </translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2034"/>
+        <location filename="../src/Primer3Dialog.ui" line="2036"/>
         <source>GC%</source>
         <translation>GC%</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2041"/>
-        <location filename="../src/Primer3Dialog.ui" line="2048"/>
-        <location filename="../src/Primer3Dialog.ui" line="2055"/>
-        <location filename="../src/Primer3Dialog.ui" line="2482"/>
-        <location filename="../src/Primer3Dialog.ui" line="2489"/>
-        <location filename="../src/Primer3Dialog.ui" line="2774"/>
-        <location filename="../src/Primer3Dialog.ui" line="2781"/>
-        <location filename="../src/Primer3Dialog.ui" line="2788"/>
+        <location filename="../src/Primer3Dialog.ui" line="2043"/>
+        <location filename="../src/Primer3Dialog.ui" line="2050"/>
+        <location filename="../src/Primer3Dialog.ui" line="2057"/>
+        <location filename="../src/Primer3Dialog.ui" line="2486"/>
+        <location filename="../src/Primer3Dialog.ui" line="2493"/>
+        <location filename="../src/Primer3Dialog.ui" line="2780"/>
+        <location filename="../src/Primer3Dialog.ui" line="2787"/>
+        <location filename="../src/Primer3Dialog.ui" line="2794"/>
         <source>Lt:</source>
         <translation>Lt:</translation>
     </message>
@@ -1589,50 +1603,50 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Вес штрафа для соответствующего параметра праймера меньше чем (Lt) или больше чем (Gt), что является оптимальным значением. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2110"/>
-        <location filename="../src/Primer3Dialog.ui" line="2117"/>
-        <location filename="../src/Primer3Dialog.ui" line="2124"/>
-        <location filename="../src/Primer3Dialog.ui" line="2496"/>
-        <location filename="../src/Primer3Dialog.ui" line="2503"/>
-        <location filename="../src/Primer3Dialog.ui" line="2843"/>
-        <location filename="../src/Primer3Dialog.ui" line="2850"/>
-        <location filename="../src/Primer3Dialog.ui" line="2857"/>
+        <location filename="../src/Primer3Dialog.ui" line="2112"/>
+        <location filename="../src/Primer3Dialog.ui" line="2119"/>
+        <location filename="../src/Primer3Dialog.ui" line="2126"/>
+        <location filename="../src/Primer3Dialog.ui" line="2500"/>
+        <location filename="../src/Primer3Dialog.ui" line="2507"/>
+        <location filename="../src/Primer3Dialog.ui" line="2849"/>
+        <location filename="../src/Primer3Dialog.ui" line="2856"/>
+        <location filename="../src/Primer3Dialog.ui" line="2863"/>
         <source>Gt:</source>
         <translation>Gt:</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2204"/>
+        <location filename="../src/Primer3Dialog.ui" line="2206"/>
         <source>#N's</source>
         <translation>N</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2211"/>
+        <location filename="../src/Primer3Dialog.ui" line="2213"/>
         <source>Mispriming</source>
         <translation>Ошибочное праймирование</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2218"/>
-        <location filename="../src/Primer3Dialog.ui" line="3282"/>
+        <location filename="../src/Primer3Dialog.ui" line="2220"/>
+        <location filename="../src/Primer3Dialog.ui" line="3288"/>
         <source>Sequence quality</source>
         <translation>Качество последовательности</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2225"/>
+        <location filename="../src/Primer3Dialog.ui" line="2227"/>
         <source>End sequence quality</source>
         <translation>Качество конца последовательности</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2232"/>
+        <location filename="../src/Primer3Dialog.ui" line="2234"/>
         <source>Position penalty</source>
         <translation>Позиция штрафа</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2239"/>
+        <location filename="../src/Primer3Dialog.ui" line="2241"/>
         <source>End stability</source>
         <translation>Стабильность конца</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2246"/>
+        <location filename="../src/Primer3Dialog.ui" line="2248"/>
         <source>Template mispriming</source>
         <translation>Шаблон ошибочного праймирования</translation>
     </message>
@@ -1661,7 +1675,7 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Позиция штрафа.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2436"/>
+        <location filename="../src/Primer3Dialog.ui" line="2440"/>
         <source>Product size</source>
         <translation>Размер продукта</translation>
     </message>
@@ -1678,37 +1692,37 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Вес штрафа для соответствующего параметра пары праймеров меньше чем (Lt) или больше чем (Gt), что является оптимальным значением. </span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2553"/>
+        <location filename="../src/Primer3Dialog.ui" line="2557"/>
         <source>Tm difference</source>
         <translation>Максимальная разница Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2560"/>
+        <location filename="../src/Primer3Dialog.ui" line="2564"/>
         <source>Any complementarity</source>
         <translation>Любая комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2567"/>
+        <location filename="../src/Primer3Dialog.ui" line="2571"/>
         <source>3' complementarity</source>
         <translation>3' комплементарность</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2574"/>
+        <location filename="../src/Primer3Dialog.ui" line="2578"/>
         <source>Pair mispriming</source>
         <translation>Ошибочное парное праймирование</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2581"/>
+        <location filename="../src/Primer3Dialog.ui" line="2585"/>
         <source>Primer penalty weight</source>
         <translation>Вес штрафа праймера</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2588"/>
+        <location filename="../src/Primer3Dialog.ui" line="2592"/>
         <source>Hyb oligo penalty weight</source>
         <translation>Вес штрафа гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2595"/>
+        <location filename="../src/Primer3Dialog.ui" line="2599"/>
         <source>Primer pair template mispriming weight</source>
         <translation>Вес шаблона ошибочного праймирования</translation>
     </message>
@@ -1737,17 +1751,17 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Вес штрафа для соответствующего параметра внутреннего олиго меньше чем (Lt) или больше чем (Gt), что является оптимальным значением.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2930"/>
+        <location filename="../src/Primer3Dialog.ui" line="2936"/>
         <source>Hyb oligo #N's</source>
         <translation>N гибридизации олиго</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2937"/>
+        <location filename="../src/Primer3Dialog.ui" line="2943"/>
         <source>Hyb oligo mishybing</source>
         <translation>Ошибочная гибридизация олиго</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2944"/>
+        <location filename="../src/Primer3Dialog.ui" line="2950"/>
         <source>Hyb oligo sequence quality</source>
         <translation>Качество последовательности гибридизации олиго</translation>
     </message>
@@ -1764,38 +1778,37 @@ p, li { white-space: pre-wrap; }
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Вес штрафа для параметра внутреннего олиго отличается от оптимального предопределенного значения.</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3057"/>
+        <location filename="../src/Primer3Dialog.ui" line="3063"/>
         <source>mRNA sequence</source>
         <translation>Последовательность mRNA</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3112"/>
+        <location filename="../src/Primer3Dialog.ui" line="3118"/>
         <source>At 5' side (bp):</source>
         <translation>Со стороны 5' (нк):</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3142"/>
+        <location filename="../src/Primer3Dialog.ui" line="3148"/>
         <source>At 3'side (bp)</source>
         <translation>Со стороны 3' (нк)</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3199"/>
+        <location filename="../src/Primer3Dialog.ui" line="3205"/>
         <source>Primer product must span at least one intron on the corresponding genomic DNA</source>
         <translation>Продук праймера должен охватывать по крайней мере один интрон на соответствующей геномной ДНК</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3273"/>
+        <location filename="../src/Primer3Dialog.ui" line="3279"/>
         <source>Sequence Quality</source>
         <translation>Качество последовательности</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2423"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Primer Pairs</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
@@ -1807,139 +1820,138 @@ p, li { white-space: pre-wrap; }
         <translation><html><head/><body><p>This section describes &quot;penalty weights&quot;, which allow the user to modify the criteria that Primer3 uses to select the &quot;best&quot; primers.</p><p>There are two classes of weights: for some parameters there is a 'Lt' (less than) and a 'Gt' (greater than) weight. These are the weights that Primer3 uses when the value is less or greater than (respectively) the spe [...]
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2068"/>
-        <location filename="../src/Primer3Dialog.ui" line="2084"/>
-        <location filename="../src/Primer3Dialog.ui" line="2100"/>
-        <location filename="../src/Primer3Dialog.ui" line="2137"/>
-        <location filename="../src/Primer3Dialog.ui" line="2153"/>
-        <location filename="../src/Primer3Dialog.ui" line="2169"/>
+        <location filename="../src/Primer3Dialog.ui" line="2070"/>
+        <location filename="../src/Primer3Dialog.ui" line="2086"/>
+        <location filename="../src/Primer3Dialog.ui" line="2102"/>
+        <location filename="../src/Primer3Dialog.ui" line="2139"/>
+        <location filename="../src/Primer3Dialog.ui" line="2155"/>
+        <location filename="../src/Primer3Dialog.ui" line="2171"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a primer less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для соответствующего параметра праймера меньше чем (Lt) или больше чем (Gt), что является оптимальным значением.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2259"/>
-        <location filename="../src/Primer3Dialog.ui" line="2275"/>
-        <location filename="../src/Primer3Dialog.ui" line="2291"/>
-        <location filename="../src/Primer3Dialog.ui" line="2307"/>
-        <location filename="../src/Primer3Dialog.ui" line="2323"/>
-        <location filename="../src/Primer3Dialog.ui" line="2339"/>
-        <location filename="../src/Primer3Dialog.ui" line="2371"/>
-        <location filename="../src/Primer3Dialog.ui" line="2387"/>
+        <location filename="../src/Primer3Dialog.ui" line="2261"/>
+        <location filename="../src/Primer3Dialog.ui" line="2277"/>
+        <location filename="../src/Primer3Dialog.ui" line="2293"/>
+        <location filename="../src/Primer3Dialog.ui" line="2309"/>
+        <location filename="../src/Primer3Dialog.ui" line="2325"/>
+        <location filename="../src/Primer3Dialog.ui" line="2341"/>
+        <location filename="../src/Primer3Dialog.ui" line="2373"/>
+        <location filename="../src/Primer3Dialog.ui" line="2389"/>
         <source><html><head/><body><p>Penalty weight for a primer parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для параметра праймера отличается от оптимального предопределенного значения.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2355"/>
+        <location filename="../src/Primer3Dialog.ui" line="2357"/>
         <source><html><head/><body><p>Determines the overall weight of the position penalty in calculating the penalty for a primer.</p></body></html></source>
         <translation><html><head/><body><p>Позиция штрафа.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2456"/>
-        <location filename="../src/Primer3Dialog.ui" line="2472"/>
-        <location filename="../src/Primer3Dialog.ui" line="2516"/>
-        <location filename="../src/Primer3Dialog.ui" line="2532"/>
+        <location filename="../src/Primer3Dialog.ui" line="2460"/>
+        <location filename="../src/Primer3Dialog.ui" line="2476"/>
+        <location filename="../src/Primer3Dialog.ui" line="2520"/>
+        <location filename="../src/Primer3Dialog.ui" line="2536"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a primer pair less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для соответствующего параметра пары праймеров меньше чем (Lt) или больше чем (Gt), что является оптимальным значением.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2608"/>
-        <location filename="../src/Primer3Dialog.ui" line="2624"/>
-        <location filename="../src/Primer3Dialog.ui" line="2640"/>
-        <location filename="../src/Primer3Dialog.ui" line="2656"/>
-        <location filename="../src/Primer3Dialog.ui" line="2672"/>
-        <location filename="../src/Primer3Dialog.ui" line="2688"/>
-        <location filename="../src/Primer3Dialog.ui" line="2704"/>
+        <location filename="../src/Primer3Dialog.ui" line="2612"/>
+        <location filename="../src/Primer3Dialog.ui" line="2628"/>
+        <location filename="../src/Primer3Dialog.ui" line="2644"/>
+        <location filename="../src/Primer3Dialog.ui" line="2660"/>
+        <location filename="../src/Primer3Dialog.ui" line="2676"/>
+        <location filename="../src/Primer3Dialog.ui" line="2692"/>
+        <location filename="../src/Primer3Dialog.ui" line="2708"/>
         <source><html><head/><body><p>Penalty weight for a primer pair parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для параметра пары праймеров отличается от оптимального предопределенного значения.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2740"/>
         <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">For Hyb Oligos</span></p></body></html></source>
-        <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+        <translation type="vanished"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 <html><head><meta name="qrichtext" content="1" /><style type="text/css">
 p, li { white-space: pre-wrap; }
 </style></head><body style=" font-family:'Sans Serif'; font-size:10pt; font-weight:400; font-style:normal;">
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:14pt; font-weight:600;">Для гибридизации олиго</span></p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2801"/>
-        <location filename="../src/Primer3Dialog.ui" line="2817"/>
-        <location filename="../src/Primer3Dialog.ui" line="2833"/>
-        <location filename="../src/Primer3Dialog.ui" line="2870"/>
-        <location filename="../src/Primer3Dialog.ui" line="2886"/>
-        <location filename="../src/Primer3Dialog.ui" line="2902"/>
+        <location filename="../src/Primer3Dialog.ui" line="2807"/>
+        <location filename="../src/Primer3Dialog.ui" line="2823"/>
+        <location filename="../src/Primer3Dialog.ui" line="2839"/>
+        <location filename="../src/Primer3Dialog.ui" line="2876"/>
+        <location filename="../src/Primer3Dialog.ui" line="2892"/>
+        <location filename="../src/Primer3Dialog.ui" line="2908"/>
         <source><html><head/><body><p>Penalty weight for corressponding parameter of a internal oligo less than (Lt) or greater than (Gt) the optimal value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для соответствующего параметра внутреннего олиго меньше чем (Lt) или больше чем (Gt), что является оптимальным значением.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="2957"/>
-        <location filename="../src/Primer3Dialog.ui" line="2973"/>
-        <location filename="../src/Primer3Dialog.ui" line="2989"/>
-        <location filename="../src/Primer3Dialog.ui" line="3005"/>
+        <location filename="../src/Primer3Dialog.ui" line="2963"/>
+        <location filename="../src/Primer3Dialog.ui" line="2979"/>
+        <location filename="../src/Primer3Dialog.ui" line="2995"/>
+        <location filename="../src/Primer3Dialog.ui" line="3011"/>
         <source><html><head/><body><p>Penalty weight for an internal oligo parameter different from predefined optimum value.</p></body></html></source>
         <translation><html><head/><body><p>Вес штрафа для параметра внутреннего олиго отличается от оптимального предопределенного значения.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3036"/>
+        <location filename="../src/Primer3Dialog.ui" line="3042"/>
         <source><html><head/><body><p>In this section user can specify if primer product must overlap exon-exon junction or span intron. This only applies when designing primers for a cDNA (mRNA) sequence with annotated exons.</p></body></html></source>
         <translation><html><head/><body><p>In this section user can specify if primer product must overlap exon-exon junction or span intron. This only applies when designing primers for a cDNA (mRNA) sequence with annotated exons.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3042"/>
+        <location filename="../src/Primer3Dialog.ui" line="3048"/>
         <source><html><head/><body><p>This feature allows to specify if primer product must span intron-exon boundaries.</p><p>Checking this option will result in ignoring <span style=" font-style:italic;">Excluded</span> and <span style=" font-style:italic;">Target Regions</span> from Main section.</p></body></html></source>
         <translation><html><head/><body><p>Эта опция позволяет указать если праймер должен охватывать интрон-экзон границы.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3072"/>
+        <location filename="../src/Primer3Dialog.ui" line="3078"/>
         <source><html><head/><body><p>The name of the annotation which defines the exons in the mRNA sequence.</p></body></html></source>
         <translation><html><head/><body><p>Имя экзон аннотации.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3177"/>
+        <location filename="../src/Primer3Dialog.ui" line="3183"/>
         <source><html><head/><body><p>If the range is set, primer search will be restricted to selected exons. For example:</p><p><span style=" font-weight:600;">1-5</span></p><p>If the range is larger than actual exon range or the starting exon number exceeds number of exons, error message is shown. </p></body></html></source>
         <translation><html><head/><body><p>If the range is set, primer search will be restricted to selected exons. For example:</p><p><span style=" font-weight:600;">1-5</span></p><p>If the range is larger than actual exon range or the starting exon number exceeds number of exons, error message is shown. </p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3218"/>
+        <location filename="../src/Primer3Dialog.ui" line="3224"/>
         <source><html><head/><body><p>This number of found primer pairs wil bel queried to check if they fullfill the requirements for RTPCR.</p></body></html></source>
         <translation><html><head/><body><p>Максимальное число пар для запроса.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3276"/>
+        <location filename="../src/Primer3Dialog.ui" line="3282"/>
         <source><html><head/><body><p>In this section user can specify sequence quality of target sequence and related parameters.</p></body></html></source>
         <translation><html><head/><body><p>In this section user can specify sequence quality of target sequence and related parameters.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3289"/>
+        <location filename="../src/Primer3Dialog.ui" line="3295"/>
         <source><html><head/><body><p>A list of space separated integers. There must be exactly one integer for each base in the Source Sequence if this argument is non-empty. High numbers indicate high confidence in the base call at that position and low numbers indicate low confidence in the base call at that position.</p></body></html></source>
         <translation><html><head/><body><p>Список разделенных пробелами целых чисел.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3311"/>
+        <location filename="../src/Primer3Dialog.ui" line="3317"/>
         <source><html><head/><body><p>The minimum sequence quality allowed within a primer.</p></body></html></source>
         <translation><html><head/><body><p>Минимальное качество последовательности.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3334"/>
+        <location filename="../src/Primer3Dialog.ui" line="3340"/>
         <source><html><head/><body><p>The minimum sequence quality allowed within the 3' pentamer of a primer.</p></body></html></source>
         <translation><html><head/><body><p>Минимальное 3&apos;качество последовательности.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3357"/>
+        <location filename="../src/Primer3Dialog.ui" line="3363"/>
         <source><html><head/><body><p>The minimum legal sequence quality.</p></body></html></source>
         <translation><html><head/><body><p>Минимум интервала качества последовательности.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3380"/>
+        <location filename="../src/Primer3Dialog.ui" line="3386"/>
         <source><html><head/><body><p>The maximum legal sequence quality.</p></body></html></source>
         <translation><html><head/><body><p>Максимум интервала качества последовательности.</p></body></html></translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.ui" line="3393"/>
+        <location filename="../src/Primer3Dialog.ui" line="3399"/>
         <source>Result Settings</source>
         <translation>Параметры результатов</translation>
     </message>
@@ -2005,7 +2017,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::FindExonRegionsTask</name>
     <message>
-        <location filename="../src/FindExonRegionsTask.cpp" line="100"/>
+        <location filename="../src/FindExonRegionsTask.cpp" line="98"/>
         <source>Failed to search for exon annotations. The sequence %1 doesn't have any related annotations.</source>
         <translation>Failed to search for exon annotations. The sequence %1 doesn't have any related annotations.</translation>
     </message>
@@ -2094,17 +2106,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3ADVContext</name>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="92"/>
+        <location filename="../src/Primer3Plugin.cpp" line="93"/>
         <source>Primer3...</source>
         <translation>Primer3: Подбор праймеров...</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="146"/>
+        <location filename="../src/Primer3Plugin.cpp" line="147"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="146"/>
+        <location filename="../src/Primer3Plugin.cpp" line="147"/>
         <source>Cannot create an annotation object. Please check settings</source>
         <translation>Невозможно создать аннотацию. Проверьте настройки</translation>
     </message>
@@ -2112,127 +2124,132 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3Dialog</name>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="82"/>
+        <location filename="../src/Primer3Dialog.cpp" line="83"/>
         <source>NONE</source>
         <translation>нет</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="83"/>
+        <location filename="../src/Primer3Dialog.cpp" line="84"/>
         <source>HUMAN</source>
         <translation>HUMAN</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="84"/>
+        <location filename="../src/Primer3Dialog.cpp" line="85"/>
         <source>RODENT_AND_SIMPLE</source>
         <translation>RODENT_AND_SIMPLE</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="85"/>
+        <location filename="../src/Primer3Dialog.cpp" line="86"/>
         <source>RODENT</source>
         <translation>RODENT</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="86"/>
+        <location filename="../src/Primer3Dialog.cpp" line="87"/>
         <source>DROSOPHILA</source>
         <translation>DROSOPHILA</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="438"/>
+        <location filename="../src/Primer3Dialog.cpp" line="439"/>
         <source>Start Codon Position</source>
         <translation>Позиция стартового кодона</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="452"/>
+        <location filename="../src/Primer3Dialog.cpp" line="453"/>
         <source>Product Min Tm</source>
         <translation>Минимальная Tm продукта</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="466"/>
+        <location filename="../src/Primer3Dialog.cpp" line="467"/>
         <source>Product Opt Tm</source>
         <translation>Оптимальная Tm продукта</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="480"/>
+        <location filename="../src/Primer3Dialog.cpp" line="481"/>
         <source>Product Max Tm</source>
         <translation>Максимальная Tm продукта</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="494"/>
+        <location filename="../src/Primer3Dialog.cpp" line="495"/>
         <source>Opt GC%</source>
         <translation>Оптимальный GC%</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="508"/>
+        <location filename="../src/Primer3Dialog.cpp" line="509"/>
         <source>Inside Penalty</source>
         <translation>Внутренний штраф</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="522"/>
+        <location filename="../src/Primer3Dialog.cpp" line="523"/>
         <source>Internal Oligo Opt Tm</source>
         <translation>Оптимальная внутренняя Oligo Tm</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="534"/>
+        <location filename="../src/Primer3Dialog.cpp" line="535"/>
         <source>Excluded Regions</source>
         <translation>Исключаемые регионы</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="546"/>
+        <location filename="../src/Primer3Dialog.cpp" line="547"/>
         <source>Internal Oligo Excluded Regions</source>
         <translation>Внутренние исключенные Oligo регионы</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="558"/>
+        <location filename="../src/Primer3Dialog.cpp" line="559"/>
         <source>Targets</source>
         <translation>Целевые регионы</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="664"/>
+        <location filename="../src/Primer3Dialog.cpp" line="665"/>
         <source>Included region is too small for current product size ranges</source>
         <translation>Включенный регион слишком малений для текущих диапазонов размера продукта</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="671"/>
+        <location filename="../src/Primer3Dialog.cpp" line="672"/>
         <source>Product Size Ranges</source>
         <translation>Диапазоны размеров продукта</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="595"/>
+        <location filename="../src/Primer3Dialog.cpp" line="596"/>
         <source>Sequence Quality</source>
         <translation>Качество последовательности</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="602"/>
+        <location filename="../src/Primer3Dialog.cpp" line="603"/>
         <source>Sequence quality list length must be equal to the sequence length</source>
         <translation>Длина списка качества последовательности должна быть равна длине последовательности</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="624"/>
+        <location filename="../src/Primer3Dialog.cpp" line="625"/>
         <source>Can't pick hyb oligo and only one primer</source>
         <translation>Can't pick hyb oligo and only one primer</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="644"/>
+        <location filename="../src/Primer3Dialog.cpp" line="645"/>
         <source>Nothing to pick</source>
         <translation>Nothing to pick</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="682"/>
+        <location filename="../src/Primer3Dialog.cpp" line="683"/>
         <source>The field '%1' has invalid value</source>
         <translation>The field '%1' has invalid value</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="703"/>
+        <location filename="../src/Primer3Dialog.cpp" line="698"/>
+        <source>Cannot create an annotation object. Please check settings.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/Primer3Dialog.cpp" line="712"/>
         <source>Save primer settings</source>
         <translation>Сохранить настройки праймера</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="785"/>
+        <location filename="../src/Primer3Dialog.cpp" line="794"/>
         <source>Load settings</source>
         <translation>Загрузить настройки</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Dialog.cpp" line="795"/>
+        <location filename="../src/Primer3Dialog.cpp" line="804"/>
         <source>Can not load settings file: invalid format.</source>
         <translation>Невозможно загрузить настройки: неверный формат.</translation>
     </message>
@@ -2240,12 +2257,12 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::Primer3Plugin</name>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="55"/>
+        <location filename="../src/Primer3Plugin.cpp" line="56"/>
         <source>Primer3</source>
         <translation>Primer3</translation>
     </message>
     <message>
-        <location filename="../src/Primer3Plugin.cpp" line="55"/>
+        <location filename="../src/Primer3Plugin.cpp" line="56"/>
         <source>Integrated tool for PCR primers design.</source>
         <translation>Инструмент для дизайна праймеров.</translation>
     </message>
diff --git a/src/plugins_3rdparty/psipred/src/PsipredAlgTask.cpp b/src/plugins_3rdparty/psipred/src/PsipredAlgTask.cpp
index d2d769a..b0ee3d9 100644
--- a/src/plugins_3rdparty/psipred/src/PsipredAlgTask.cpp
+++ b/src/plugins_3rdparty/psipred/src/PsipredAlgTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,8 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QDir>
-#include <QtCore/QTemporaryFile>
+#include <QDir>
+#include <QTemporaryFile>
 
 #include <U2View/SecStructPredictUtils.h>
 #include <U2Core/BioStruct3D.h>
diff --git a/src/plugins_3rdparty/psipred/src/PsipredAlgTask.h b/src/plugins_3rdparty/psipred/src/PsipredAlgTask.h
index 5a61729..2382639 100644
--- a/src/plugins_3rdparty/psipred/src/PsipredAlgTask.h
+++ b/src/plugins_3rdparty/psipred/src/PsipredAlgTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _U2_PSIPRED_ALG_TASK_H_
 #define _U2_PSIPRED_ALG_TASK_H_
 
-#include <QtCore/QMutex>
+#include <QMutex>
 #include <U2Algorithm/SecStructPredictTask.h>
 
 
diff --git a/src/plugins_3rdparty/psipred/src/PsipredPlugin.cpp b/src/plugins_3rdparty/psipred/src/PsipredPlugin.cpp
index 3b1928e..20a3234 100644
--- a/src/plugins_3rdparty/psipred/src/PsipredPlugin.cpp
+++ b/src/plugins_3rdparty/psipred/src/PsipredPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,18 +19,11 @@
  * MA 02110-1301, USA.
  */
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMessageBox>
-#endif
-#include <QtCore/QMap>
-#include <QtCore/QFile>
+#include <QAction>
+#include <QMenu>
+#include <QMessageBox>
+#include <QMap>
+#include <QFile>
 
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Gui/GUIUtils.h>
diff --git a/src/plugins_3rdparty/psipred/src/PsipredPlugin.h b/src/plugins_3rdparty/psipred/src/PsipredPlugin.h
index 7147f86..6cac1e2 100644
--- a/src/plugins_3rdparty/psipred/src/PsipredPlugin.h
+++ b/src/plugins_3rdparty/psipred/src/PsipredPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/psipred/src/seq2mtx.cpp b/src/plugins_3rdparty/psipred/src/seq2mtx.cpp
index fe64ada..a56b68e 100644
--- a/src/plugins_3rdparty/psipred/src/seq2mtx.cpp
+++ b/src/plugins_3rdparty/psipred/src/seq2mtx.cpp
@@ -2,9 +2,8 @@
 
 /* Copyright (C) 2000 D.T. Jones */
 
-#include <QtGlobal>
-#include <QtCore/QTemporaryFile>
-#include <QtCore/QTextStream>
+#include <QTemporaryFile>
+#include <QTextStream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <ctype.h>
diff --git a/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp b/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
index abd3171..6be2eb7 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
+++ b/src/plugins_3rdparty/psipred/src/sspred_avpred.cpp
@@ -5,12 +5,11 @@
 
 /* Average Prediction Module */
 
-#include <QtGlobal>
-#include <QtCore/QDir>
-#include <QtCore/QFile>
-#include <QtCore/QTemporaryFile>
-#include <QtCore/QTextStream>
-#include <QtCore/QString>
+#include <QDir>
+#include <QFile>
+#include <QTemporaryFile>
+#include <QTextStream>
+#include <QString>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/UserApplicationsSettings.h>
diff --git a/src/plugins_3rdparty/psipred/src/sspred_avpred.h b/src/plugins_3rdparty/psipred/src/sspred_avpred.h
index 0f9c597..c699176 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_avpred.h
+++ b/src/plugins_3rdparty/psipred/src/sspred_avpred.h
@@ -1,9 +1,9 @@
 #ifndef SSPRED_AVPRED_H
 #define SSPRED_AVPRED_H
 
-#include <QtCore/QVector>
-#include <QtCore/QByteArray>
-#include <QtCore/QStringList>
+#include <QVector>
+#include <QByteArray>
+#include <QStringList>
 
 #include "ssdefs.h"
 
diff --git a/src/plugins_3rdparty/psipred/src/sspred_hmulti.cpp b/src/plugins_3rdparty/psipred/src/sspred_hmulti.cpp
index de16c9d..cc31a87 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_hmulti.cpp
+++ b/src/plugins_3rdparty/psipred/src/sspred_hmulti.cpp
@@ -5,12 +5,11 @@
 
 /* 2nd Level Prediction Module */
 
-#include <QtGlobal>
-#include <QtCore/QByteArray>
-#include <QtCore/QFile>
-#include <QtCore/QTextStream>
-#include <QtCore/QString>
-#include <QtCore/QDir>
+#include <QByteArray>
+#include <QFile>
+#include <QTextStream>
+#include <QString>
+#include <QDir>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/UserApplicationsSettings.h>
diff --git a/src/plugins_3rdparty/psipred/src/sspred_hmulti.h b/src/plugins_3rdparty/psipred/src/sspred_hmulti.h
index 445b84b..9a491fa 100644
--- a/src/plugins_3rdparty/psipred/src/sspred_hmulti.h
+++ b/src/plugins_3rdparty/psipred/src/sspred_hmulti.h
@@ -1,8 +1,8 @@
 #ifndef SSPRED_HMULTI_H
 #define SSPRED_HMULTI_H
 
-#include <QtCore/QVector>
-#include <QtCore/QByteArray>
+#include <QVector>
+#include <QByteArray>
 #include "ssdefs.h"
 
 class QTemporaryFile;
diff --git a/src/plugins_3rdparty/psipred/transl/english.ts b/src/plugins_3rdparty/psipred/transl/english.ts
index 153c543..ee09746 100644
--- a/src/plugins_3rdparty/psipred/transl/english.ts
+++ b/src/plugins_3rdparty/psipred/transl/english.ts
@@ -15,7 +15,7 @@
 <context>
     <name>U2::PsipredPlugin</name>
     <message>
-        <location filename="../src/PsipredPlugin.cpp" line="64"/>
+        <location filename="../src/PsipredPlugin.cpp" line="57"/>
         <source>PsiPred protein secondary structure prediction</source>
         <translation>PsiPred protein secondary structure prediction</translation>
     </message>
@@ -25,12 +25,12 @@
     <message>
         <location filename="../src/PsipredAlgTask.cpp" line="53"/>
         <source>psipred: sequence is too long, max seq size is 10000</source>
-        <translation type="unfinished">Sequence is too long: maximum allowed length is 10000</translation>
+        <translation>Sequence is too long: maximum allowed length is 10000</translation>
     </message>
     <message>
         <location filename="../src/PsipredAlgTask.cpp" line="58"/>
         <source>psipred: sequence is too short, min seq size is 5</source>
-        <translation type="unfinished">Sequence is too short: minimum allowed length is 5</translation>
+        <translation>Sequence is too short: minimum allowed length is 5</translation>
     </message>
 </context>
 </TS>
diff --git a/src/plugins_3rdparty/psipred/transl/russian.ts b/src/plugins_3rdparty/psipred/transl/russian.ts
index 15f24eb..bd7320f 100644
--- a/src/plugins_3rdparty/psipred/transl/russian.ts
+++ b/src/plugins_3rdparty/psipred/transl/russian.ts
@@ -15,7 +15,7 @@
 <context>
     <name>U2::PsipredPlugin</name>
     <message>
-        <location filename="../src/PsipredPlugin.cpp" line="64"/>
+        <location filename="../src/PsipredPlugin.cpp" line="57"/>
         <source>PsiPred protein secondary structure prediction</source>
         <translation>Предсказание вторичной структуры протеинов PsiPred</translation>
     </message>
@@ -25,12 +25,12 @@
     <message>
         <location filename="../src/PsipredAlgTask.cpp" line="53"/>
         <source>psipred: sequence is too long, max seq size is 10000</source>
-        <translation type="unfinished">Sequence is too long: maximum allowed length is 10000</translation>
+        <translation>Sequence is too long: maximum allowed length is 10000</translation>
     </message>
     <message>
         <location filename="../src/PsipredAlgTask.cpp" line="58"/>
         <source>psipred: sequence is too short, min seq size is 5</source>
-        <translation type="unfinished">Sequence is too short: minimum allowed length is 5</translation>
+        <translation>Sequence is too short: minimum allowed length is 5</translation>
     </message>
 </context>
 </TS>
diff --git a/src/plugins_3rdparty/ptools/src/PToolsAligner.cpp b/src/plugins_3rdparty/ptools/src/PToolsAligner.cpp
index 5b3579a..ecde351 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsAligner.cpp
+++ b/src/plugins_3rdparty/ptools/src/PToolsAligner.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ptools/src/PToolsAligner.h b/src/plugins_3rdparty/ptools/src/PToolsAligner.h
index db92edd..5ffcf56 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsAligner.h
+++ b/src/plugins_3rdparty/ptools/src/PToolsAligner.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ptools/src/PToolsPlugin.cpp b/src/plugins_3rdparty/ptools/src/PToolsPlugin.cpp
index e741a1b..bdcbd5c 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsPlugin.cpp
+++ b/src/plugins_3rdparty/ptools/src/PToolsPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ptools/src/PToolsPlugin.h b/src/plugins_3rdparty/ptools/src/PToolsPlugin.h
index 3703023..0460e2b 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsPlugin.h
+++ b/src/plugins_3rdparty/ptools/src/PToolsPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ptools/src/PToolsTests.cpp b/src/plugins_3rdparty/ptools/src/PToolsTests.cpp
index 59b6c8f..2f82323 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsTests.cpp
+++ b/src/plugins_3rdparty/ptools/src/PToolsTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,11 +19,13 @@
  * MA 02110-1301, USA.
  */
 
-#include "PToolsTests.h"
+#include <cmath>
+
+#include <QDomElement>
 
 #include <U2Core/BioStruct3DObject.h>
 
-#include <cmath>
+#include "PToolsTests.h"
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/ptools/src/PToolsTests.h b/src/plugins_3rdparty/ptools/src/PToolsTests.h
index bb13b13..fffee88 100644
--- a/src/plugins_3rdparty/ptools/src/PToolsTests.h
+++ b/src/plugins_3rdparty/ptools/src/PToolsTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/ptools/src/ptools/basetypes.h b/src/plugins_3rdparty/ptools/src/ptools/basetypes.h
index fb34cae..aafe6bd 100644
--- a/src/plugins_3rdparty/ptools/src/ptools/basetypes.h
+++ b/src/plugins_3rdparty/ptools/src/ptools/basetypes.h
@@ -36,7 +36,7 @@
 #include <cassert>
 #include <cstdio>
 //#include <boost/shared_array.hpp> // removed, replaced with QVector
-#include <QtCore/QVector>
+#include <QVector>
 #include <stdexcept>
 
 
diff --git a/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.cpp b/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.cpp
index 30f0068..b8a54c8 100644
--- a/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.cpp
+++ b/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "DIPropertiesSitecon.h"
 
-#include <QtCore/QStringList>
+#include <QStringList>
 #include <algorithm>
 #include <math.h>
 
diff --git a/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.h b/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.h
index 47c7563..2829009 100644
--- a/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.h
+++ b/src/plugins_3rdparty/sitecon/src/DIPropertiesSitecon.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,9 +22,9 @@
 #ifndef _U2_DI_PROPERTIES_SITECON_H_
 #define _U2_DI_PROPERTIES_SITECON_H_
 
-#include <QtCore/QMap>
-#include <QtCore/QList>
-#include <QtCore/QString>
+#include <QMap>
+#include <QList>
+#include <QString>
 
 #include <U2Core/DIProperties.h>
 
diff --git a/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.cpp b/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.cpp
index 77ce8c2..3348748 100644
--- a/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.cpp
+++ b/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.h b/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.h
index f962aba..91c90a7 100644
--- a/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.h
+++ b/src/plugins_3rdparty/sitecon/src/DIPropertiesTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include "DIPropertiesSitecon.h"
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <QtXml/QDomElement>
+#include <QDomElement>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.cpp b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.cpp
index 5f3fc15..28d2c7b 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,11 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNATranslation.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Core/TextUtils.h>
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <math.h>
 
@@ -64,26 +64,26 @@ bool SiteconModel::operator !=(const SiteconModel& model) const {
     return !eq;
 }
 
-QVector<PositionStats> SiteconAlgorithm::calculateDispersionAndAverage(const MAlignment& ma, const SiteconBuildSettings& config, TaskStateInfo& ts) 
+QVector<PositionStats> SiteconAlgorithm::calculateDispersionAndAverage(const MultipleSequenceAlignment& ma, const SiteconBuildSettings& config, TaskStateInfo& ts) 
 {
     const QList<DiPropertySitecon*>& props = config.props;
     assert(!props.isEmpty());
     QVector<PositionStats> matrix;
-    int N = ma.getNumRows();
-    for (int i = 0, n = ma.getLength()-1; i < n && !ts.cancelFlag; i++) { //for every di-nucl
+    int N = ma->getNumRows();
+    for (int i = 0, n = ma->getLength()-1; i < n && !ts.cancelFlag; i++) { //for every di-nucl
         PositionStats posResult;
         foreach(DiPropertySitecon* p, props) { // for every property
             float average = 0; //average in a column
-            foreach(const MAlignmentRow& row, ma.getRows()) { // collect di-position stat for all sequence in alignment
-                average+=p->getOriginal(row.charAt(i), row.charAt(i+1));
+            foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) { // collect di-position stat for all sequence in alignment
+                average+=p->getOriginal(row->charAt(i), row->charAt(i+1));
             }
             average/=N;
 
             float dispersion = 0; // dispersion in a column
-            for (int j = 0; j < ma.getNumRows(); j++) {// collect di-position stat for all sequence in alignment
-                const MAlignmentRow& row = ma.getRow(j);
-                char c1 = row.charAt(i);
-                char c2 = row.charAt(i+1);
+            for (int j = 0; j < ma->getNumRows(); j++) {// collect di-position stat for all sequence in alignment
+                const MultipleSequenceAlignmentRow row = ma->getMsaRow(j);
+                char c1 = row->charAt(i);
+                char c2 = row->charAt(i+1);
                 float v = p->getOriginal(c1, c2);
                 dispersion+=(average - v)*(average - v);
             }
@@ -98,7 +98,7 @@ QVector<PositionStats> SiteconAlgorithm::calculateDispersionAndAverage(const MAl
         matrix.clear();
         return matrix;
     } 
-    assert(matrix.size() == ma.getLength() - 1);
+    assert(matrix.size() == ma->getLength() - 1);
     return matrix;
 }
 
@@ -145,7 +145,7 @@ float SiteconAlgorithm::calculatePSum(const char* seq, int len, const QVector<Po
 
 
 
-QVector<float> SiteconAlgorithm::calculateFirstTypeError(const MAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts) {
+QVector<float> SiteconAlgorithm::calculateFirstTypeError(const MultipleSequenceAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts) {
     float devThresh = critchi(s.chisquare, s.numSequencesInAlignment - 2) / (s.numSequencesInAlignment - 1);
 
     QVector<float> scores;
@@ -154,15 +154,15 @@ QVector<float> SiteconAlgorithm::calculateFirstTypeError(const MAlignment& ma, c
     // 3. Distribute percentage for all scores
 
     U2OpStatus2Log os;
-	int maLen = ma.getLength();
-    for (int i=0; i < ma.getNumRows() && !ts.cancelFlag; i++) {
-        const MAlignmentRow& row = ma.getRow(i);
-        MAlignment subMA = ma;
-        subMA.removeRow(i, os);
+    int maLen = ma->getLength();
+    for (int i=0; i < ma->getNumRows() && !ts.cancelFlag; i++) {
+        const MultipleSequenceAlignmentRow row = ma->getMsaRow(i);
+        MultipleSequenceAlignment subMA = ma->getCopy();
+        subMA->removeRow(i, os);
         QVector<PositionStats> matrix = calculateDispersionAndAverage(subMA, s, ts);
         QVector<PositionStats> normalizedMatrix = normalize(matrix, s);
         calculateWeights(subMA, normalizedMatrix, s, true, ts);
-        float p = calculatePSum(row.toByteArray(maLen, os), maLen, normalizedMatrix, s, devThresh);
+        float p = calculatePSum(row->toByteArray(os, maLen), maLen, normalizedMatrix, s, devThresh);
         scores.append(p);
     }
     QVector<float> res(100, 0);
@@ -247,14 +247,14 @@ QVector<PositionStats> SiteconAlgorithm::normalize(const QVector<PositionStats>&
 }
 
 
-void SiteconAlgorithm::calculateACGTContent(const MAlignment& ma, SiteconBuildSettings& bs) {
-    assert(ma.getAlphabet()->isNucleic());
+void SiteconAlgorithm::calculateACGTContent(const MultipleSequenceAlignment& ma, SiteconBuildSettings& bs) {
+    assert(ma->getAlphabet()->isNucleic());
     bs.acgtContent[0] = bs.acgtContent[1] = bs.acgtContent[2] = bs.acgtContent[3] = 0;
-	int maLen = ma.getLength();
-    int total = ma.getNumRows() * ma.getLength();
-    foreach(const MAlignmentRow& row, ma.getRows()) {
+    int maLen = ma->getLength();
+    int total = ma->getNumRows() * ma->getLength();
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
 		for (int i=0; i < maLen; i++) {
-            char c = row.charAt(i);
+            char c = row->charAt(i);
             if (c == 'A') {
                 bs.acgtContent[0]++;
             } else if (c == 'C') {
@@ -338,7 +338,7 @@ static void dumpWeights(const QString& url, const PWVector& weights, const Sitec
 }
 #endif
 
-int SiteconAlgorithm::calculateWeights(const MAlignment& ma, QVector<PositionStats>& origMatrix, 
+int SiteconAlgorithm::calculateWeights(const MultipleSequenceAlignment& ma, QVector<PositionStats>& origMatrix, 
                                        const SiteconBuildSettings& settings, bool matrixIsNormalized,
                                        TaskStateInfo& si) 
 {
@@ -363,7 +363,7 @@ int SiteconAlgorithm::calculateWeights(const MAlignment& ma, QVector<PositionSta
     //3. calculate diff = W2_max - W1_ave
     //4. mark up to 6 props per pos as weighted with max-diffs < chisquare
 
-    assert(ma.getLength() == settings.windowSize);
+    assert(ma->getLength() == settings.windowSize);
     assert(origMatrix.size() == settings.windowSize - 1);
 
     //clear weights data
@@ -384,7 +384,7 @@ int SiteconAlgorithm::calculateWeights(const MAlignment& ma, QVector<PositionSta
 
     //Part1
     //1. compute props ave on random sequence
-    int rndSeqLen = modelSize * ma.getNumRows() + 10;
+    int rndSeqLen = modelSize * ma->getNumRows() + 10;
     QByteArray rndSeqArray = generateRandomSequence(settings.acgtContent, rndSeqLen, si);
     const char* rndSeq = rndSeqArray.constData();
     
@@ -442,9 +442,9 @@ int SiteconAlgorithm::calculateWeights(const MAlignment& ma, QVector<PositionSta
             const DiStat& ds = ps[j];
             float maxProp = 100;
             if (ds.sdeviation < devThreshold) {
-                for(int k = 0; k < ma.getNumRows(); k++) {
-                    char c1 = ma.charAt(k, i);
-                    char c2 = ma.charAt(k, i+1);
+                for(int k = 0; k < ma->getNumRows(); k++) {
+                    char c1 = ma->charAt(k, i);
+                    char c2 = ma->charAt(k, i+1);
 
                     if (c1 == 'N' || c2=='N')  {
                         continue;
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.h b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.h
index 6766e27..c8e6108 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithm.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,14 @@
 #ifndef _U2_SITECON_ALG_H_
 #define _U2_SITECON_ALG_H_
 
-#include <U2Core/U2Region.h>
-#include <U2Core/Task.h>
+#include <QVector>
 
-#include <QtCore/QVector>
+#include <U2Core/MultipleSequenceAlignment.h>
+#include <U2Core/Task.h>
+#include <U2Core/U2Region.h>
 
 namespace U2 {
 
-class MAlignment;
 class DiPropertySitecon;
 
 //average and deviation for one property
@@ -88,21 +88,21 @@ class DNATranslation;
 class SiteconAlgorithm : public QObject {
     Q_OBJECT
 public:
-    static QVector<PositionStats> calculateDispersionAndAverage(const MAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts);
+    static QVector<PositionStats> calculateDispersionAndAverage(const MultipleSequenceAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts);
 
     static float calculatePSum(const char* seq, int len, const QVector<PositionStats>& normalizedMatrix, 
                                const SiteconBuildSettings& settings, float devThreshold, DNATranslation* complMap = NULL);
         
-    static QVector<float> calculateFirstTypeError(const MAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts);
+    static QVector<float> calculateFirstTypeError(const MultipleSequenceAlignment& ma, const SiteconBuildSettings& s, TaskStateInfo& ts);
 
     static QVector<float> calculateSecondTypeError(const QVector<PositionStats>& matrix, const SiteconBuildSettings& s, TaskStateInfo& ts);
 
     static QVector<PositionStats> normalize(const QVector<PositionStats>& matrix, const SiteconBuildSettings& s);
 
-    static int calculateWeights(const MAlignment& ma, QVector<PositionStats>& matrix, 
+    static int calculateWeights(const MultipleSequenceAlignment& ma, QVector<PositionStats>& matrix, 
                                 const SiteconBuildSettings& settings, bool matrixIsNormalized, TaskStateInfo& s);
 
-    static void calculateACGTContent(const MAlignment& ma, SiteconBuildSettings& bs);
+    static void calculateACGTContent(const MultipleSequenceAlignment& ma, SiteconBuildSettings& bs);
 
     static QByteArray generateRandomSequence(const int* actgContent, int seqLen, TaskStateInfo& ts);
 };
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.cpp b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.cpp
index e9f67fb..d9c3b5e 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,22 +19,22 @@
  * MA 02110-1301, USA.
  */
 
-#include "SiteconAlgorithmTests.h"
-#include "DIPropertiesSitecon.h"
-#include "SiteconIO.h"
+#include <QDomElement>
+#include <QFileInfo>
 
-#include <U2Core/DocumentModel.h>
-#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/IOAdapter.h>
-#include <U2Core/U2SafePoints.h>
-#include <U2Core/GObjectTypes.h>
+#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObjectTypes.h>
 #include <U2Core/GObjectUtils.h>
-#include <U2Core/MAlignmentObject.h>
-
-#include <QtXml/QDomElement>
+#include <U2Core/IOAdapter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
+#include "SiteconAlgorithmTests.h"
+#include "DIPropertiesSitecon.h"
+#include "SiteconIO.h"
 
 /* TRANSLATOR U2::GTest */
 
@@ -91,22 +91,22 @@ void GTest_CalculateACGTContent::prepare(){
         stateInfo.setError(  QString("context not found %1").arg(docName) );
         return;
     }
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
-    MAlignmentObject *mao = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *mao = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(mao==NULL){
-        stateInfo.setError(  QString("error can't cast to MAlignmentObject from GObject") );
+        stateInfo.setError(  QString("error can't cast to MultipleSequenceAlignmentObject from GObject") );
         return;
     }
-    ma = mao->getMAlignment();
+    ma = mao->getMsaCopy();
 }
 
 void GTest_CalculateACGTContent::run() {
@@ -186,29 +186,29 @@ void GTest_CalculateDispersionAndAverage::prepare() {
         stateInfo.setError(  QString("context not found %1").arg(docName) );
         return;
     }
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
-    MAlignmentObject *mao = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *mao = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(mao==NULL){
-        stateInfo.setError(  QString("error can't cast to MAlignmentObject from GObject") );
+        stateInfo.setError(  QString("error can't cast to MultipleSequenceAlignmentObject from GObject") );
         return;
     }
-    ma = mao->getMAlignment();
+    ma = mao->getMsaCopy();
 }
 
 void GTest_CalculateDispersionAndAverage::run() {
     DinucleotitePropertyRegistry di;
     s.props = di.getProperties();
     SiteconAlgorithm::calculateACGTContent(ma, s);
-    s.numSequencesInAlignment = ma.getNumRows();
+    s.numSequencesInAlignment = ma->getNumRows();
     TaskStateInfo stub;
     result = SiteconAlgorithm::calculateDispersionAndAverage(ma, s, stub);
 }
@@ -274,30 +274,30 @@ void GTest_CalculateFirstTypeError::prepare() {
         stateInfo.setError(  QString("context not found %1").arg(docName) );
         return;
     }
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
-    MAlignmentObject *mao = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *mao = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(mao==NULL){
-        stateInfo.setError(  QString("error can't cast to MAlignmentObject from GObject") );
+        stateInfo.setError(  QString("error can't cast to MultipleSequenceAlignmentObject from GObject") );
         return;
     }
-    ma = mao->getMAlignment();
+    ma = mao->getMsaCopy();
 }
 
 void GTest_CalculateFirstTypeError::run() {
     DinucleotitePropertyRegistry di;
     s.props = di.getProperties();
     SiteconAlgorithm::calculateACGTContent(ma, s);
-    s.numSequencesInAlignment = ma.getNumRows();
-    s.windowSize = ma.getLength();
+    s.numSequencesInAlignment = ma->getNumRows();
+    s.windowSize = ma->getLength();
     TaskStateInfo stub;
     result = SiteconAlgorithm::calculateFirstTypeError(ma, s, stub);
 }
@@ -355,30 +355,30 @@ void GTest_CalculateSecondTypeError::prepare() {
         stateInfo.setError(  QString("context not found %1").arg(docName) );
         return;
     }
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
-    MAlignmentObject *mao = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject *mao = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(mao==NULL){
-        stateInfo.setError(  QString("error can't cast to MAlignmentObject from GObject") );
+        stateInfo.setError(  QString("error can't cast to MultipleSequenceAlignmentObject from GObject") );
         return;
     }
-    ma = mao->getMAlignment();
+    ma = mao->getMsaCopy();
 }
 
 void GTest_CalculateSecondTypeError::run() {
     DinucleotitePropertyRegistry di;
     s.props = di.getProperties();
     SiteconAlgorithm::calculateACGTContent(ma, s);
-    s.numSequencesInAlignment = ma.getNumRows();
-    s.windowSize = ma.getLength();
+    s.numSequencesInAlignment = ma->getNumRows();
+    s.windowSize = ma->getLength();
     SiteconModel m;
     m.aliURL = (getContext<Document>(this, docName))->getURLString();
     m.modelName = QFileInfo(m.aliURL).baseName();
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.h b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.h
index 142d05d..e69ab4b 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconAlgorithmTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include "SiteconSearchTask.h"
 #include <U2Test/XMLTestUtils.h>
 #include <U2Core/GObject.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 
 namespace U2 {
@@ -42,7 +42,7 @@ public:
 private:
     QString docName;
     SiteconBuildSettings s;
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     int expectedACGT[4];
 };
 
@@ -58,7 +58,7 @@ public:
 private:
     QString docName;
     SiteconBuildSettings s;
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     QVector<PositionStats> result;
     QVector<ResultVector> expectedResults;    
 };
@@ -75,7 +75,7 @@ private:
     QString docName;
     int offset;
     SiteconBuildSettings s;
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     QVector<float> result;
     QVector<int> expectedResult;    
 };
@@ -92,7 +92,7 @@ private:
     QString docName;
     int offset;
     SiteconBuildSettings s;
-    MAlignment ma;
+    MultipleSequenceAlignment ma;
     QVector<float> result;
     QVector<int> expectedResult;    
 };
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
index 638e72b..51c4515 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,7 +30,7 @@
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
 #include <U2Core/LoadDocumentTask.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/Settings.h>
 
 #include <U2Gui/DialogUtils.h>
@@ -55,7 +55,7 @@ SiteconBuildDialogController::SiteconBuildDialogController(SiteconPlugin* pl, QW
       saveController(NULL) {
     task = NULL;
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223192");
+    new HelpButton(this, buttonBox, "20875096");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Build"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
    
@@ -73,7 +73,7 @@ SiteconBuildDialogController::SiteconBuildDialogController(SiteconPlugin* pl, QW
 void SiteconBuildDialogController::sl_inFileButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Select file with alignment"), lod,
-                                                DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+                                                DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
@@ -181,8 +181,8 @@ void SiteconBuildDialogController::reject() {
 //////////////////////////////////////////////////////////////////////////
 // task
 
-SiteconBuildTask::SiteconBuildTask(const SiteconBuildSettings& s, const MAlignment& ma, const QString& origin) 
-: Task (tr("Build SITECON model"), TaskFlag_None), settings(s), ma(ma)
+SiteconBuildTask::SiteconBuildTask(const SiteconBuildSettings& s, const MultipleSequenceAlignment& ma, const QString& origin) 
+: Task (tr("Build SITECON model"), TaskFlag_None), settings(s), ma(ma->getCopy())
 {
     GCOUNTER( cvar, tvar, "SiteconBuildTask" );
     tpm = Task::Progress_Manual;
@@ -191,36 +191,36 @@ SiteconBuildTask::SiteconBuildTask(const SiteconBuildSettings& s, const MAlignme
 
 void SiteconBuildTask::run() {
     // compute average/dispersion matrix
-    if (!ma.hasEmptyGapModel()) {
+    if (!ma->hasEmptyGapModel()) {
         stateInfo.setError( tr("Alignment contains gaps") );
         return;
     }
-    if (ma.isEmpty()) {
+    if (ma->isEmpty()) {
         stateInfo.setError(  tr("Alignment is empty") );
         return;
     }
-    if (ma.getNumRows() < 2) {
+    if (ma->getNumRows() < 2) {
         stateInfo.setError(  tr("Alignment must have at least 2 sequences") );
         return;
     }
-    if (!ma.getAlphabet()->isNucleic()) {
+    if (!ma->getAlphabet()->isNucleic()) {
         stateInfo.setError(  tr("Alignment is not nucleic") );
         return;
     }
-    if (ma.getLength() < settings.windowSize) {
+    if (ma->getLength() < settings.windowSize) {
         stateInfo.setError(  tr("Window size is greater than alignment length") );
         return;
     }
     
-    int centerPos = ma.getLength() / 2;
+    int centerPos = ma->getLength() / 2;
     int startPos = centerPos - settings.windowSize / 2;
     int endPos = centerPos + (settings.windowSize - settings.windowSize / 2);
-    assert(startPos >=0 && endPos <= ma.getLength());
-    ma = ma.mid(startPos, endPos - startPos);
-    assert(ma.getLength() == settings.windowSize);
+    assert(startPos >=0 && endPos <= ma->getLength());
+    ma = ma->mid(startPos, endPos - startPos);
+    assert(ma->getLength() == settings.windowSize);
 
     SiteconAlgorithm::calculateACGTContent(ma, settings);
-    settings.numSequencesInAlignment = ma.getNumRows();
+    settings.numSequencesInAlignment = ma->getNumRows();
     m.settings = settings;
     stateInfo.setDescription(tr("Calculating average and dispersion matrixes"));
     m.matrix = SiteconAlgorithm::calculateDispersionAndAverage(ma, settings, stateInfo);
@@ -253,7 +253,7 @@ SiteconBuildToFileTask::SiteconBuildToFileTask(const QString& inFile, const QStr
     
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(inFile);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -283,14 +283,14 @@ QList<Task*> SiteconBuildToFileTask::onSubTaskFinished(Task* subTask) {
         setUseDescriptionFromSubtask(true);
         Document* d = loadTask->getDocument();
         assert(d != NULL);
-        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> mobjs = d->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (mobjs.isEmpty()) {
             stateInfo.setError(  tr("No alignment found") );
         } else {
-            MAlignmentObject* mobj =  qobject_cast<MAlignmentObject*>(mobjs.first());
-            const MAlignment &ma = mobj->getMAlignment();
+            MultipleSequenceAlignmentObject* mobj =  qobject_cast<MultipleSequenceAlignmentObject*>(mobjs.first());
+            const MultipleSequenceAlignment msa = mobj->getMultipleAlignment();
             QString baseName = mobj->getDocument()->getURL().baseFileName();
-            buildTask = new SiteconBuildTask(settings, ma, baseName);
+            buildTask = new SiteconBuildTask(settings, msa, baseName);
             res.append(buildTask);
         }
     } else if (subTask == buildTask) {
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
index dd9c559..c72db27 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <ui_SiteconBuildDialog.h>
 #include "SiteconAlgorithm.h"
 #include <U2Core/Task.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
@@ -64,13 +64,13 @@ private:
 class SiteconBuildTask : public Task {
     Q_OBJECT
 public:
-    SiteconBuildTask(const SiteconBuildSettings& s, const MAlignment& ma, const QString& origin = QString());
+    SiteconBuildTask(const SiteconBuildSettings& s, const MultipleSequenceAlignment& ma, const QString& origin = QString());
     void run();
     SiteconModel getResult() const {return m;}
 
 private:
     SiteconBuildSettings    settings;
-    MAlignment              ma;
+    MultipleSequenceAlignment              ma;
     SiteconModel            m;
 };
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconBuildWorker.cpp b/src/plugins_3rdparty/sitecon/src/SiteconBuildWorker.cpp
index fba980e..a800698 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconBuildWorker.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconBuildWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,28 +19,27 @@
  * MA 02110-1301, USA.
  */
 
-#include "SiteconWorkers.h"
-#include "SiteconIOWorkers.h"
-#include "SiteconPlugin.h"
-#include "SiteconBuildDialogController.h"
+#include <U2Core/FailTask.h>
+#include <U2Core/Log.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
 
-#include <U2Lang/Datatype.h>
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
-#include <U2Core/FailTask.h>
-
-#include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Lang/Datatype.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
 
-/* TRANSLATOR U2::SiteconIO */
-/* TRANSLATOR U2::LocalWorkflow::SiteconBuildWorker */
+#include "SiteconBuildDialogController.h"
+#include "SiteconIOWorkers.h"
+#include "SiteconPlugin.h"
+#include "SiteconWorkers.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -148,14 +147,13 @@ Task* SiteconBuildWorker::tick() {
         }
         mtype = SiteconWorkerFactory::SITECON_MODEL_TYPE();
         QVariantMap data = inputMessage.getData().toMap();
-        SiteconModel model = data.value(SiteconWorkerFactory::SITECON_MODEL_TYPE_ID).value<SiteconModel>();
         QString url = data.value(BaseSlots::URL_SLOT().getId()).toString();
         
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
         Task* t = new SiteconBuildTask(cfg, msa, url);
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconIO.cpp b/src/plugins_3rdparty/sitecon/src/SiteconIO.cpp
index d58a8e8..6061d0c 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconIO.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconIO.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,27 +19,26 @@
  * MA 02110-1301, USA.
  */
 
-#include "SiteconIO.h"
-#include "DIPropertiesSitecon.h"
-#include "SiteconMath.h"
-#include "SiteconPlugin.h"
+#include <QFile>
+#include <QFileInfo>
+#include <QTextStream>
+#include <QVector>
+#include <QtMath>
 
 #include <U2Core/AppContext.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
-
-#include <U2Core/TextUtils.h>
 #include <U2Core/SaveDocumentTask.h>
+#include <U2Core/TextUtils.h>
 
 #include <U2Gui/DialogUtils.h>
 
-#include <QtCore/QVector>
-#include <QtCore/QFile>
-#include <QtCore/QFileInfo>
-#include <QtCore/QTextStream>
-#include <QtCore/qmath.h>
+#include "DIPropertiesSitecon.h"
+#include "SiteconIO.h"
+#include "SiteconMath.h"
+#include "SiteconPlugin.h"
 
 /* TRANSLATOR U2::IOAdapter */
 
@@ -89,7 +88,7 @@ SiteconModel SiteconIO::readModel(IOAdapterFactory* iof, const QString& url, Tas
     QByteArray block(BUFF_SIZE, '\0');
     qint64 blockLen = 0;
     while ((blockLen = io->readBlock(block.data(), BUFF_SIZE)) > 0) {
-        text.append(QByteArray::fromRawData(block.data(), blockLen));
+        text.append(QByteArray(block.data(), blockLen));
         if (text.size() > 1000*1000) {
             si.setError(L10N::errorFileTooLarge(url));
             break;
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconIO.h b/src/plugins_3rdparty/sitecon/src/SiteconIO.h
index 1479ea6..4443d08 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconIO.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconIO.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,8 +22,8 @@
 #ifndef _U2_SITECON_IO_H_
 #define _U2_SITECON_IO_H_
 
-#include <QtCore/QObject>
-#include <QtCore/QString>
+#include <QObject>
+#include <QString>
 
 #include "SiteconAlgorithm.h"
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.cpp b/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.cpp
index a1cb1a3..b3a5008 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.h b/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.h
index bd14d86..b5692d5 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconIOWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconPlugin.cpp b/src/plugins_3rdparty/sitecon/src/SiteconPlugin.cpp
index f31fa08..e082d75 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconPlugin.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconPlugin.h b/src/plugins_3rdparty/sitecon/src/SiteconPlugin.h
index 5e11330..4958be0 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconPlugin.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,11 +27,7 @@
 #include <U2Core/PluginModel.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconQuery.cpp b/src/plugins_3rdparty/sitecon/src/SiteconQuery.cpp
index 2516191..00b64a8 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconQuery.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconQuery.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,14 +34,8 @@
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/FailTask.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QApplication>
-#else
-#include <QtWidgets/QApplication>
-#endif
-
-#include <QtCore/QFileInfo>
-
+#include <QApplication>
+#include <QFileInfo>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconQuery.h b/src/plugins_3rdparty/sitecon/src/SiteconQuery.h
index 8d1853f..0965074 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconQuery.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconQuery.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
index bd39f91..71dca92 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -86,7 +86,7 @@ public:
 
 SiteconSearchDialogController::SiteconSearchDialogController(ADVSequenceObjectContext* _ctx, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223188");
+    new HelpButton(this, buttonBox, "20875092");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Search"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -259,6 +259,7 @@ void SiteconSearchDialogController::sl_onSaveAnnotations() {
     if (rc != QDialog::Accepted) {
         return;
     }
+    ctx->getAnnotatedDNAView()->tryAddObject(m.getAnnotationObject());
     const QString& name = m.data->name;
     QList<SharedAnnotationData> list;
     for (int i=0, n = resultsTree->topLevelItemCount(); i<n; ++i) {
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
index 3e9a113..3217ebd 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,14 +28,10 @@
 
 #include <ui_SiteconSearchDialog.h>
 
-#include <QtCore/QList>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-#include <QtGui/QCloseEvent>
-#include <QtCore/QTimer>
+#include <QList>
+#include <QTreeWidgetItem>
+#include <QCloseEvent>
+#include <QTimer>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.cpp b/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.cpp
index 3692f99..a5849c3 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.h b/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.h
index edff7a5..c52938b 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include <U2Core/AnnotationData.h>
 #include <U2Core/SequenceWalkerTask.h>
 
-#include <QtCore/QMutex>
+#include <QMutex>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconSearchWorker.cpp b/src/plugins_3rdparty/sitecon/src/SiteconSearchWorker.cpp
index e4209f9..de5455c 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconSearchWorker.cpp
+++ b/src/plugins_3rdparty/sitecon/src/SiteconSearchWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,34 +19,33 @@
  * MA 02110-1301, USA.
  */
 
-#include "SiteconWorkers.h"
-#include "SiteconIOWorkers.h"
-#include "SiteconSearchTask.h"
-
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Designer/DelegateEditors.h>
-#include <U2Lang/BaseAttributes.h>
-
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequence.h>
 #include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/AppContext.h>
+#include <U2Core/FailTask.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
 #include <U2Core/MultiTask.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
+
+#include <U2Designer/DelegateEditors.h>
 
-//#include <QtGui/QApplication>
-/* TRANSLATOR U2::LocalWorkflow::SiteconSearchWorker */
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
+
+#include "SiteconWorkers.h"
+#include "SiteconIOWorkers.h"
+#include "SiteconSearchTask.h"
 
 namespace U2 {
 namespace LocalWorkflow {
diff --git a/src/plugins_3rdparty/sitecon/src/SiteconWorkers.h b/src/plugins_3rdparty/sitecon/src/SiteconWorkers.h
index 9dd5e41..aaa7762 100644
--- a/src/plugins_3rdparty/sitecon/src/SiteconWorkers.h
+++ b/src/plugins_3rdparty/sitecon/src/SiteconWorkers.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/sitecon/transl/english.ts b/src/plugins_3rdparty/sitecon/transl/english.ts
index ccbc97e..994e1c6 100644
--- a/src/plugins_3rdparty/sitecon/transl/english.ts
+++ b/src/plugins_3rdparty/sitecon/transl/english.ts
@@ -225,7 +225,7 @@
         <translation>Recognition quality threshold, should be less than 100%. Choosing too low threshold will lead to recognition of too many TFBS recognised with too low trustworthiness. Choosing too high threshold may result in no TFBS recognised.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="171"/>
+        <location filename="../src/SiteconQuery.cpp" line="165"/>
         <source>Recognition quality percentage threshold. If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</source>
         <translation>Recognition quality percentage threshold. If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</translation>
     </message>
@@ -241,7 +241,7 @@
 <context>
     <name>U2::LocalWorkflow::SiteconBuildPrompter</name>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="120"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="119"/>
         <source>For each MSA from <u>%1</u>, build SITECON model.</source>
         <translation>For each MSA from <u>%1</u>, build SITECON model.</translation>
     </message>
@@ -249,112 +249,112 @@
 <context>
     <name>U2::LocalWorkflow::SiteconBuildWorker</name>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="84"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="83"/>
         <source>Build SITECON model</source>
         <translation>Build SITECON model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="107"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="106"/>
         <source>None</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="108"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="107"/>
         <source>Algorithm2</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="138"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="137"/>
         <source>Random seed can not be less zero</source>
         <translation>Random seed can not be less zero</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="142"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="141"/>
         <source>Calibration length can not be less zero</source>
         <translation>Calibration length can not be less zero</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="147"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="146"/>
         <source>Window size can not be less zero</source>
         <translation>Window size can not be less zero</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="179"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="177"/>
         <source>Built SITECON model from: %1</source>
         <translation>Built SITECON model from: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="59"/>
         <source>Input alignment</source>
         <translation>Input alignment</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="66"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="65"/>
         <source>Sitecon model</source>
         <translation>Sitecon model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="61"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
         <source>Origin</source>
         <translation>Origin</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="72"/>
         <source>Window size, bp</source>
         <translation>Window size</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="72"/>
         <source>Window size.</source>
         <translation>Window size.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
         <source>Calibration length</source>
         <translation>Calibration length</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
         <source>Calibration length.</source>
         <translation>Calibration length.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
         <source>Random seed</source>
         <translation>Random seed</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
         <source>Random seed.</source>
         <translation>Random seed.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="76"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
         <source>Weight algorithm</source>
         <translation>Weight algorithm</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="59"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Input multiple sequence alignment for building statistical model.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="61"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
         <source>Location of input alignment, used as optional hint for model description.</source>
         <translation>Location of input alignment, used as optional hint for model description.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="66"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="65"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Produced statistical model of specified TFBS data.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="76"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
         <source>Weight algorithm.</source>
         <translation>Weight algorithm.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="85"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="84"/>
         <source>Builds statistical profile for SITECON. The SITECON is a program for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Builds statistical profile for SITECON. The SITECON is a program for probabilistic recognition of transcription factor binding sites.</translation>
     </message>
@@ -378,22 +378,22 @@
 <context>
     <name>U2::LocalWorkflow::SiteconSearchPrompter</name>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="151"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="150"/>
         <source>unset</source>
         <translation>unset</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="152"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="151"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>For each sequence from <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="166"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="165"/>
         <source>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="153"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="152"/>
         <source>with all profiles provided by <u>%1</u>,</source>
         <translation>with all profiles provided by <u>%1</u>,</translation>
     </message>
@@ -401,132 +401,132 @@
 <context>
     <name>U2::LocalWorkflow::SiteconSearchWorker</name>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="160"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="159"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="161"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="160"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="162"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="161"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="65"/>
         <source>Sitecon Model</source>
         <translation>Sitecon Model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
         <source>Sequence</source>
         <translation>Sequence</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="68"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
         <source>SITECON annotations</source>
         <translation>SITECON annotations</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="82"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="81"/>
         <source>Result annotation</source>
         <translation>Result annotation</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="85"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="84"/>
         <source>Recognition quality percentage threshold.<p><i>If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</source>
         <translation>Recognition quality percentage threshold.<p><i>If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="88"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="87"/>
         <source>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"0"</b> value</i></p>.</source>
         <translation>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"0"</b> value</i></p>.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="92"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="91"/>
         <source>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"1"</b> value</i></p>.</source>
         <translation>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"1"</b> value</i></p>.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="102"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="101"/>
         <source>Search for TFBS with SITECON</source>
         <translation>Search for TFBS with SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="205"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="204"/>
         <source>Min score can not be less 60% or more 100%</source>
         <translation>Min score can not be less 60% or more 100%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="208"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="207"/>
         <source>Min Err1 can not be less 0 or more 1</source>
         <translation>Min Err1 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="211"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="210"/>
         <source>Max Err2 can not be less 0 or more 1</source>
         <translation>Max Err2 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="214"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="213"/>
         <source>Search in strand can only be 0(both) or 1(direct) or -1(complement)</source>
         <translation>Search in strand can only be 0(both) or 1(direct) or -1(complement)</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="254"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="253"/>
         <source>Find TFBS in %1</source>
         <translation>Find TFBS in %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="258"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="257"/>
         <source>Bad sequence supplied to SiteconSearch: %1</source>
         <translation>Bad sequence supplied to SiteconSearch: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="282"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="281"/>
         <source>Found %1 TFBS</source>
         <translation>Found %1 TFBS</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="65"/>
         <source>Profile data to search with.</source>
         <translation>Profile data to search with.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
         <source>Input nucleotide sequence to search in.</source>
         <translation>Input nucleotide sequence to search in.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="69"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="68"/>
         <source>Annotations marking found TFBS sites.</source>
         <translation>Annotations marking found TFBS sites.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="83"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="82"/>
         <source>Annotation name for marking found regions.</source>
         <translation>Annotation name for marking found regions.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="103"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="102"/>
         <source>Searches each input sequence for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</source>
         <translation>Searches each input sequence for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="84"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="83"/>
         <source>Min score</source>
         <translation>Min score</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="87"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="86"/>
         <source>Min Err1</source>
         <translation>Min Err1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="91"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="90"/>
         <source>Max Err2</source>
         <translation>Max Err2</translation>
     </message>
@@ -555,107 +555,107 @@
 <context>
     <name>U2::QDSiteconActor</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="71"/>
+        <location filename="../src/SiteconQuery.cpp" line="65"/>
         <source>%1</source>
         <translation>%1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="75"/>
+        <location filename="../src/SiteconQuery.cpp" line="69"/>
         <source>with profile provided by %1 %2</a></source>
         <translation>with profile provided by %1 %2</a></translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="78"/>
+        <location filename="../src/SiteconQuery.cpp" line="72"/>
         <source>with all %1 %2 profiles</a></source>
         <translation>with all %1 %2 profiles</a></translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="81"/>
+        <location filename="../src/SiteconQuery.cpp" line="75"/>
         <source>similarity %1%</source>
         <translation>similarity %1%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="86"/>
+        <location filename="../src/SiteconQuery.cpp" line="80"/>
         <source>both strands</source>
         <translation>both strands</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="87"/>
+        <location filename="../src/SiteconQuery.cpp" line="81"/>
         <source>direct strand</source>
         <translation>direct strand</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="88"/>
+        <location filename="../src/SiteconQuery.cpp" line="82"/>
         <source>complement strand</source>
         <translation>complement strand</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="113"/>
+        <location filename="../src/SiteconQuery.cpp" line="107"/>
         <source>%1: incorrect sitecon model url(s)</source>
         <translation>%1: incorrect sitecon model url(s)</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="117"/>
+        <location filename="../src/SiteconQuery.cpp" line="111"/>
         <source>%1: min score can not be less 60% or more 100%</source>
         <translation>%1: min score can not be less 60% or more 100%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="121"/>
+        <location filename="../src/SiteconQuery.cpp" line="115"/>
         <source>%1: min Err1 can not be less 0 or more 1</source>
         <translation>%1: min Err1 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="125"/>
+        <location filename="../src/SiteconQuery.cpp" line="119"/>
         <source>%1: max Err2 can not be less 0 or more 1</source>
         <translation>%1: max Err2 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="165"/>
+        <location filename="../src/SiteconQuery.cpp" line="159"/>
         <source>Sitecon</source>
         <translation>SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="166"/>
+        <location filename="../src/SiteconQuery.cpp" line="160"/>
         <source>Searches for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations.</source>
         <translation>Searches for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="91"/>
+        <location filename="../src/SiteconQuery.cpp" line="85"/>
         <source>Searches transcription factor binding sites (TFBS) %1.<br>Recognize sites with %2, process %3.</source>
         <translation>Searches transcription factor binding sites (TFBS) %1.<br>Recognize sites with %2, process %3.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="170"/>
+        <location filename="../src/SiteconQuery.cpp" line="164"/>
         <source>Min score</source>
         <translation>Min score</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="172"/>
+        <location filename="../src/SiteconQuery.cpp" line="166"/>
         <source>Min Err1</source>
         <translation>Min Err1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="173"/>
+        <location filename="../src/SiteconQuery.cpp" line="167"/>
         <source>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</source>
         <translation>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="175"/>
+        <location filename="../src/SiteconQuery.cpp" line="169"/>
         <source>Max Err2</source>
         <translation>Max Err2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="176"/>
+        <location filename="../src/SiteconQuery.cpp" line="170"/>
         <source>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</source>
         <translation>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="178"/>
+        <location filename="../src/SiteconQuery.cpp" line="172"/>
         <source>Model</source>
         <translation>Model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="178"/>
+        <location filename="../src/SiteconQuery.cpp" line="172"/>
         <source>Profile data to search with.</source>
         <translation>Profile data to search with.</translation>
     </message>
@@ -663,7 +663,7 @@
 <context>
     <name>U2::QDSiteconTask</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="210"/>
+        <location filename="../src/SiteconQuery.cpp" line="204"/>
         <source>Sitecon Query</source>
         <translation>SITECON Query</translation>
     </message>
@@ -835,108 +835,108 @@
 <context>
     <name>U2::SiteconIO</name>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="108"/>
+        <location filename="../src/SiteconIO.cpp" line="107"/>
         <source>Not a sitecon model</source>
         <translation>Not a sitecon model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="152"/>
+        <location filename="../src/SiteconIO.cpp" line="151"/>
         <source>Error parsing settings, line %1</source>
         <translation>Error parsing settings, line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="163"/>
+        <location filename="../src/SiteconIO.cpp" line="162"/>
         <source>Error parsing window size: %1</source>
         <translation>Error parsing window size: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="176"/>
+        <location filename="../src/SiteconIO.cpp" line="175"/>
         <source>Error parsing calibration len: %1</source>
         <translation>Error parsing calibration len: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="182"/>
+        <location filename="../src/SiteconIO.cpp" line="181"/>
         <source>Error parsing RSEED: %1</source>
         <translation>Error parsing RSEED: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="188"/>
+        <location filename="../src/SiteconIO.cpp" line="187"/>
         <source>Error parsing number of sequence in original alignment: %1</source>
         <translation>Error parsing number of sequence in original alignment: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="194"/>
+        <location filename="../src/SiteconIO.cpp" line="193"/>
         <source>Error parsing in alignment %1</source>
         <translation>Error parsing in alignment %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="263"/>
+        <location filename="../src/SiteconIO.cpp" line="262"/>
         <source>Error parsing %1 in line %2</source>
         <translation>Error parsing %1 in line %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="281"/>
+        <location filename="../src/SiteconIO.cpp" line="280"/>
         <source>Error parsing in line %1</source>
         <translation>Error parsing in line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="291"/>
-        <location filename="../src/SiteconIO.cpp" line="296"/>
+        <location filename="../src/SiteconIO.cpp" line="290"/>
+        <location filename="../src/SiteconIO.cpp" line="295"/>
         <source>Error parsing %1</source>
         <translation>Error parsing %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="300"/>
+        <location filename="../src/SiteconIO.cpp" line="299"/>
         <source>Illegal error %1</source>
         <translation>Illegal error %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="310"/>
+        <location filename="../src/SiteconIO.cpp" line="309"/>
         <source>Error parsing file in line %1</source>
         <translation>Error parsing file in line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="319"/>
+        <location filename="../src/SiteconIO.cpp" line="318"/>
         <source>Number of 'average' and  'sdev' properties not matches</source>
         <translation>Number of 'average' and  'sdev' properties not matches</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="324"/>
+        <location filename="../src/SiteconIO.cpp" line="323"/>
         <source>Number of 'average' and 'weight' properties not matches</source>
         <translation>Number of 'average' and 'weight' properties not matches</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="329"/>
+        <location filename="../src/SiteconIO.cpp" line="328"/>
         <source>Property in file %1 is not the same as built-in: %2</source>
         <translation>Property in file %1 is not the same as built-in: %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="357"/>
+        <location filename="../src/SiteconIO.cpp" line="356"/>
         <source>Error info in file is not complete</source>
         <translation>Error info in file is not complete</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="364"/>
+        <location filename="../src/SiteconIO.cpp" line="363"/>
         <source>Model verification error</source>
         <translation>Model verification error</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="202"/>
+        <location filename="../src/SiteconIO.cpp" line="201"/>
         <source>Illegal weight algorithm: %1</source>
         <translation>Illegal weight algorithm: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="214"/>
+        <location filename="../src/SiteconIO.cpp" line="213"/>
         <source>Model size not matched: %1, expected: %2</source>
         <translation>Model size not matched: %1, expected: %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="237"/>
+        <location filename="../src/SiteconIO.cpp" line="236"/>
         <source>Duplicate property: %1</source>
         <translation>Duplicate property: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="247"/>
+        <location filename="../src/SiteconIO.cpp" line="246"/>
         <source>Property not recognized: %1</source>
         <translation>Property not recognized: %1</translation>
     </message>
@@ -953,7 +953,7 @@
         <translation>SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="51"/>
+        <location filename="../src/SiteconIO.cpp" line="50"/>
         <source>Sitecon models</source>
         <translation>Sitecon models</translation>
     </message>
@@ -1009,7 +1009,7 @@
 <context>
     <name>U2::SiteconReadMultiTask</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="237"/>
+        <location filename="../src/SiteconQuery.cpp" line="231"/>
         <source>Load sitecon models task</source>
         <translation>Load sitecon models task</translation>
     </message>
@@ -1057,9 +1057,9 @@
     </message>
     <message>
         <location filename="../src/SiteconSearchDialogController.cpp" line="195"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="299"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="309"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="321"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="300"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="310"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="322"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
@@ -1069,27 +1069,27 @@
         <translation>%1%,  first type error %2,  second type error %3</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="299"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="300"/>
         <source>No model selected</source>
         <translation>No model selected</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="309"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="310"/>
         <source>Range is too small</source>
         <translation>Range is too small</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="321"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="322"/>
         <source>Error parsing minumum score</source>
         <translation>Error parsing minumum score</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="385"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="386"/>
         <source>Complement strand</source>
         <translation>Complement strand</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="385"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="386"/>
         <source>Direct strand</source>
         <translation>Direct strand</translation>
     </message>
diff --git a/src/plugins_3rdparty/sitecon/transl/russian.ts b/src/plugins_3rdparty/sitecon/transl/russian.ts
index bc02a13..f1df329 100644
--- a/src/plugins_3rdparty/sitecon/transl/russian.ts
+++ b/src/plugins_3rdparty/sitecon/transl/russian.ts
@@ -154,7 +154,7 @@
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="196"/>
         <source>Both strands</source>
-        <translation>Все</translation>
+        <translation>Обе</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="215"/>
@@ -164,7 +164,7 @@
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="218"/>
         <source>Direct strand</source>
-        <translation>Только прямые</translation>
+        <translation>Прямая</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="240"/>
@@ -174,7 +174,7 @@
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="243"/>
         <source>Complement strand</source>
-        <translation>Только комплeментарные</translation>
+        <translation>Комплементарная</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchDialog.ui" line="106"/>
@@ -223,7 +223,7 @@
         <translation>Нижний предел качества распознавания, величина более 60% но меньше 100%. Слишком низкий предел приведёт к нахождению большого числа ложных сигналов, чрезмерно высокий отбросит качественные результаты.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="171"/>
+        <location filename="../src/SiteconQuery.cpp" line="165"/>
         <source>Recognition quality percentage threshold. If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</source>
         <translation>Порог качества. Для того, чтобы отключить этот фильтр укажите наименьшее значение.</translation>
     </message>
@@ -239,7 +239,7 @@
 <context>
     <name>U2::LocalWorkflow::SiteconBuildPrompter</name>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="120"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="119"/>
         <source>For each MSA from <u>%1</u>, build SITECON model.</source>
         <translation>Для каждого выравнивания из <u>%1</u>, построить модель SITECON.</translation>
     </message>
@@ -247,112 +247,112 @@
 <context>
     <name>U2::LocalWorkflow::SiteconBuildWorker</name>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="84"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="83"/>
         <source>Build SITECON model</source>
         <translation>Построение модели SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="107"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="106"/>
         <source>None</source>
         <translation>None</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="108"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="107"/>
         <source>Algorithm2</source>
         <translation>Algorithm2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="138"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="137"/>
         <source>Random seed can not be less zero</source>
         <translation>Затравка не может быть меньше нуля</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="142"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="141"/>
         <source>Calibration length can not be less zero</source>
         <translation>Калибровочная длина не может быть меньше нуля</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="147"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="146"/>
         <source>Window size can not be less zero</source>
         <translation>Window size can not be less zero</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="179"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="177"/>
         <source>Built SITECON model from: %1</source>
         <translation>Построен профайл SITECON из %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="59"/>
         <source>Input alignment</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="66"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="65"/>
         <source>Sitecon model</source>
         <translation>Профайл SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="61"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
         <source>Origin</source>
         <translation>Происхождение</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="72"/>
         <source>Window size, bp</source>
         <translation>Размер окна</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="72"/>
         <source>Window size.</source>
         <translation>Размер окна.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
         <source>Calibration length</source>
         <translation>Калибровочная длина</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="73"/>
         <source>Calibration length.</source>
         <translation>Калибровочная длина.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
         <source>Random seed</source>
         <translation>Затравка</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="74"/>
         <source>Random seed.</source>
         <translation>Затравка.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="76"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
         <source>Weight algorithm</source>
         <translation>Алгоритм весов</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="59"/>
         <source>Input multiple sequence alignment for building statistical model.</source>
         <translation>Входное множественное выравнивание для построения статистической модели данного ССТФ.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="61"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="60"/>
         <source>Location of input alignment, used as optional hint for model description.</source>
         <translation>Адрес множественного выравнивания, используется для описания выходного профайла SITECON.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="66"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="65"/>
         <source>Produced statistical model of specified TFBS data.</source>
         <translation>Произведённый профайл SITECON.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="76"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="75"/>
         <source>Weight algorithm.</source>
         <translation>Алгоритм весов.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconBuildWorker.cpp" line="85"/>
+        <location filename="../src/SiteconBuildWorker.cpp" line="84"/>
         <source>Builds statistical profile for SITECON. The SITECON is a program for probabilistic recognition of transcription factor binding sites.</source>
         <translation>Строит статистический профайл для поиска ССТФ при помощи пакета SITECON.</translation>
     </message>
@@ -376,22 +376,22 @@
 <context>
     <name>U2::LocalWorkflow::SiteconSearchPrompter</name>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="151"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="150"/>
         <source>unset</source>
         <translation>не указан</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="152"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="151"/>
         <source>For each sequence from <u>%1</u>,</source>
         <translation>Для каждой последовательности из <u>%1</u>,</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="166"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="165"/>
         <source>%1 search transcription factor binding sites (TFBS) %2.<br>Recognize sites with <u>similarity %3%</u>, process <u>%4</u>.<br>Output the list of found regions annotated as <u>%5</u>.</source>
         <translation>%1 искать сайты связывания ТФ %2.<br>Распознавать сайты с достоверностью <u>не менее %3%</u>, рассматривать <u>%4 стренды</u>.<br>Выдать список найденных регионов аннотированных как <u>%5</u>.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="153"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="152"/>
         <source>with all profiles provided by <u>%1</u>,</source>
         <translation>со всеми профайлами из <u>%1</u>,</translation>
     </message>
@@ -399,132 +399,132 @@
 <context>
     <name>U2::LocalWorkflow::SiteconSearchWorker</name>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="160"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="159"/>
         <source>both strands</source>
         <translation>все</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="161"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="160"/>
         <source>direct strand</source>
         <translation>только прямые</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="162"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="161"/>
         <source>complement strand</source>
         <translation>только комплиментарные</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="65"/>
         <source>Sitecon Model</source>
         <translation>Профайл SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
         <source>Sequence</source>
         <translation>Входная последовательность</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="68"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
         <source>SITECON annotations</source>
         <translation>Аннотированные ССТФ</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="82"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="81"/>
         <source>Result annotation</source>
         <translation>Аннотации</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="88"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="87"/>
         <source>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"0"</b> value</i></p>.</source>
         <translation>Фильтрация результатов по значению ошибки I рода. <br>Учтите что применяются все фильтры (по оценке и ошибкам 1, 2 рода).</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="92"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="91"/>
         <source>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.<p><i>If you need to switch off this filter choose <b>"1"</b> value</i></p>.</source>
         <translation>Фильтрация результатов по значению ошибки II рода. <br>Учтите что применяются все фильтры (по оценке и ошибкам 1, 2 рода).</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="102"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="101"/>
         <source>Search for TFBS with SITECON</source>
         <translation>Поиск сайтов связывания ТФ с помощью SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="205"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="204"/>
         <source>Min score can not be less 60% or more 100%</source>
         <translation>Минимальная оценка не может быть меньше 60 % и не больше 100%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="208"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="207"/>
         <source>Min Err1 can not be less 0 or more 1</source>
         <translation>Минимальная ошибка первого рода не может быть меньше 0 или больше 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="211"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="210"/>
         <source>Max Err2 can not be less 0 or more 1</source>
         <translation>Максимальная ошибка второго рода не может быть меньше 0 или больше 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="214"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="213"/>
         <source>Search in strand can only be 0(both) or 1(direct) or -1(complement)</source>
         <translation>Направления могут быть следующими: 0 - обе цепи, 1- прямая, -1-комплементарная</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="254"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="253"/>
         <source>Find TFBS in %1</source>
         <translation>Поиск ССТФ в %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="258"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="257"/>
         <source>Bad sequence supplied to SiteconSearch: %1</source>
         <translation>Неправильная последовательность для SITECON поиска : %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="282"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="281"/>
         <source>Found %1 TFBS</source>
         <translation>Найдено %1 возможных сайтов связывания ТФ</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="65"/>
         <source>Profile data to search with.</source>
         <translation>Профайл SITECON характеризующий искомые сайты.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="67"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="66"/>
         <source>Input nucleotide sequence to search in.</source>
         <translation>Входная нуклеотидная последовательность для поиска.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="69"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="68"/>
         <source>Annotations marking found TFBS sites.</source>
         <translation>Аннотации маркирующие найденные регионы.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="83"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="82"/>
         <source>Annotation name for marking found regions.</source>
         <translation>Имя аннотации для разметки найденных регионов.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="103"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="102"/>
         <source>Searches each input sequence for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations for each sequence.</source>
         <translation>Поиск сайтов связывания транскрипционных факторов (ССТФ). В каждой нуклеотидной последовательности, поданной на вход задачи, ищутся значимые совпадения с указанными профайлами SITECON. Найденные регионы выдаются в виде набора аннотаций. Профайлов может быть несколько, поиск отработает для каждого профайла и выдаст общий набор аннотаций для каждой последовательности.<p> Протеиновые последовательности на входе допустимы но игнорируются.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="84"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="83"/>
         <source>Min score</source>
         <translation>Мин оценка</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="85"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="84"/>
         <source>Recognition quality percentage threshold.<p><i>If you need to switch off this filter choose <b>the lowest</b> value</i></p>.</source>
         <translation>Порог качества. Для того, чтобы отключить этот фильтр укажите наименьшее значение.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="87"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="86"/>
         <source>Min Err1</source>
         <translation>Мин ошибка 1 рода</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchWorker.cpp" line="91"/>
+        <location filename="../src/SiteconSearchWorker.cpp" line="90"/>
         <source>Max Err2</source>
         <translation>Макс ошибка 2 рода</translation>
     </message>
@@ -553,107 +553,107 @@
 <context>
     <name>U2::QDSiteconActor</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="71"/>
+        <location filename="../src/SiteconQuery.cpp" line="65"/>
         <source>%1</source>
         <translation>%1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="75"/>
+        <location filename="../src/SiteconQuery.cpp" line="69"/>
         <source>with profile provided by %1 %2</a></source>
         <translation>с профайлом %1 %2</a></translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="78"/>
+        <location filename="../src/SiteconQuery.cpp" line="72"/>
         <source>with all %1 %2 profiles</a></source>
         <translation>со всеми %1 %2 профайлами</a></translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="81"/>
+        <location filename="../src/SiteconQuery.cpp" line="75"/>
         <source>similarity %1%</source>
-        <translation>%1%</translation>
+        <translation>сходство %1%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="86"/>
+        <location filename="../src/SiteconQuery.cpp" line="80"/>
         <source>both strands</source>
         <translation>оба стренда</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="87"/>
+        <location filename="../src/SiteconQuery.cpp" line="81"/>
         <source>direct strand</source>
         <translation>прямой стренд</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="88"/>
+        <location filename="../src/SiteconQuery.cpp" line="82"/>
         <source>complement strand</source>
         <translation>комплементарный стренд</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="113"/>
+        <location filename="../src/SiteconQuery.cpp" line="107"/>
         <source>%1: incorrect sitecon model url(s)</source>
         <translation>%1: incorrect sitecon model url(s)</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="117"/>
+        <location filename="../src/SiteconQuery.cpp" line="111"/>
         <source>%1: min score can not be less 60% or more 100%</source>
         <translation>%1: min score can not be less 60% or more 100%</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="121"/>
+        <location filename="../src/SiteconQuery.cpp" line="115"/>
         <source>%1: min Err1 can not be less 0 or more 1</source>
         <translation>%1: min Err1 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="125"/>
+        <location filename="../src/SiteconQuery.cpp" line="119"/>
         <source>%1: max Err2 can not be less 0 or more 1</source>
         <translation>%1: max Err2 can not be less 0 or more 1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="165"/>
+        <location filename="../src/SiteconQuery.cpp" line="159"/>
         <source>Sitecon</source>
         <translation>SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="166"/>
+        <location filename="../src/SiteconQuery.cpp" line="160"/>
         <source>Searches for transcription factor binding sites significantly similar to specified SITECON profiles. In case several profiles were supplied, searches with all profiles one by one and outputs merged set of annotations.</source>
         <translation>Поиск сайтов связывания транскрипционных факторов (ССТФ). В каждой нуклеотидной последовательности, поданной на вход задачи, ищутся значимые совпадения с указанными профайлами SITECON. Найденные регионы выдаются в виде набора аннотаций. Профайлов может быть несколько, поиск отработает для каждого профайла и выдаст общий набор аннотаций для каждой последовательности.<p> Протеиновые последовательности на входе допустимы но игнорируются.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="91"/>
+        <location filename="../src/SiteconQuery.cpp" line="85"/>
         <source>Searches transcription factor binding sites (TFBS) %1.<br>Recognize sites with %2, process %3.</source>
         <translation>Ищет сайты связывания транскрипционных факторов (ТФ) %1. <br>Распознаёт сайты со сходством %2, рассматривает %3.</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="170"/>
+        <location filename="../src/SiteconQuery.cpp" line="164"/>
         <source>Min score</source>
         <translation>Мин оценка</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="172"/>
+        <location filename="../src/SiteconQuery.cpp" line="166"/>
         <source>Min Err1</source>
         <translation>Мин ошибка 1 рода</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="173"/>
+        <location filename="../src/SiteconQuery.cpp" line="167"/>
         <source>Alternative setting for filtering results, minimal value of Error type I.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</source>
         <translation>Фильтрация результатов по значению ошибки I рода. <br>Учтите что применяются все фильтры (по оценке и ошибкам 1, 2 рода).</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="175"/>
+        <location filename="../src/SiteconQuery.cpp" line="169"/>
         <source>Max Err2</source>
         <translation>Макс ошибка 2 рода</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="176"/>
+        <location filename="../src/SiteconQuery.cpp" line="170"/>
         <source>Alternative setting for filtering results, max value of Error type II.<br>Note that all thresholds (by score, by err1 and by err2) are applied when filtering results.</source>
         <translation>Фильтрация результатов по значению ошибки II рода. <br>Учтите что применяются все фильтры (по оценке и ошибкам 1, 2 рода).</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="178"/>
+        <location filename="../src/SiteconQuery.cpp" line="172"/>
         <source>Model</source>
         <translation>Модель</translation>
     </message>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="178"/>
+        <location filename="../src/SiteconQuery.cpp" line="172"/>
         <source>Profile data to search with.</source>
         <translation>Профайл SITECON характеризующий искомые сайты.</translation>
     </message>
@@ -661,7 +661,7 @@
 <context>
     <name>U2::QDSiteconTask</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="210"/>
+        <location filename="../src/SiteconQuery.cpp" line="204"/>
         <source>Sitecon Query</source>
         <translation>SITECON запрос</translation>
     </message>
@@ -837,108 +837,108 @@
 <context>
     <name>U2::SiteconIO</name>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="108"/>
+        <location filename="../src/SiteconIO.cpp" line="107"/>
         <source>Not a sitecon model</source>
         <translation>Not a sitecon model</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="152"/>
+        <location filename="../src/SiteconIO.cpp" line="151"/>
         <source>Error parsing settings, line %1</source>
         <translation>Error parsing settings, line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="163"/>
+        <location filename="../src/SiteconIO.cpp" line="162"/>
         <source>Error parsing window size: %1</source>
         <translation>Error parsing window size: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="176"/>
+        <location filename="../src/SiteconIO.cpp" line="175"/>
         <source>Error parsing calibration len: %1</source>
         <translation>Error parsing calibration len: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="182"/>
+        <location filename="../src/SiteconIO.cpp" line="181"/>
         <source>Error parsing RSEED: %1</source>
         <translation>Error parsing RSEED: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="188"/>
+        <location filename="../src/SiteconIO.cpp" line="187"/>
         <source>Error parsing number of sequence in original alignment: %1</source>
         <translation>Error parsing number of sequence in original alignment: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="194"/>
+        <location filename="../src/SiteconIO.cpp" line="193"/>
         <source>Error parsing in alignment %1</source>
         <translation>Error parsing in alignment %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="263"/>
+        <location filename="../src/SiteconIO.cpp" line="262"/>
         <source>Error parsing %1 in line %2</source>
         <translation>Error parsing %1 in line %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="281"/>
+        <location filename="../src/SiteconIO.cpp" line="280"/>
         <source>Error parsing in line %1</source>
         <translation>Error parsing in line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="291"/>
-        <location filename="../src/SiteconIO.cpp" line="296"/>
+        <location filename="../src/SiteconIO.cpp" line="290"/>
+        <location filename="../src/SiteconIO.cpp" line="295"/>
         <source>Error parsing %1</source>
         <translation>Error parsing %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="300"/>
+        <location filename="../src/SiteconIO.cpp" line="299"/>
         <source>Illegal error %1</source>
         <translation>Illegal error %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="310"/>
+        <location filename="../src/SiteconIO.cpp" line="309"/>
         <source>Error parsing file in line %1</source>
         <translation>Error parsing file in line %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="319"/>
+        <location filename="../src/SiteconIO.cpp" line="318"/>
         <source>Number of 'average' and  'sdev' properties not matches</source>
         <translation>Number of 'average' and  'sdev' properties not matches</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="324"/>
+        <location filename="../src/SiteconIO.cpp" line="323"/>
         <source>Number of 'average' and 'weight' properties not matches</source>
         <translation>Number of 'average' and 'weight' properties not matches</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="329"/>
+        <location filename="../src/SiteconIO.cpp" line="328"/>
         <source>Property in file %1 is not the same as built-in: %2</source>
         <translation>Property in file %1 is not the same as built-in: %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="357"/>
+        <location filename="../src/SiteconIO.cpp" line="356"/>
         <source>Error info in file is not complete</source>
         <translation>Error info in file is not complete</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="364"/>
+        <location filename="../src/SiteconIO.cpp" line="363"/>
         <source>Model verification error</source>
         <translation>Model verification error</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="202"/>
+        <location filename="../src/SiteconIO.cpp" line="201"/>
         <source>Illegal weight algorithm: %1</source>
         <translation>Illegal weight algorithm: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="214"/>
+        <location filename="../src/SiteconIO.cpp" line="213"/>
         <source>Model size not matched: %1, expected: %2</source>
         <translation>Model size not matched: %1, expected: %2</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="237"/>
+        <location filename="../src/SiteconIO.cpp" line="236"/>
         <source>Duplicate property: %1</source>
         <translation>Duplicate property: %1</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="247"/>
+        <location filename="../src/SiteconIO.cpp" line="246"/>
         <source>Property not recognized: %1</source>
         <translation>Property not recognized: %1</translation>
     </message>
@@ -955,7 +955,7 @@
         <translation>SITECON</translation>
     </message>
     <message>
-        <location filename="../src/SiteconIO.cpp" line="51"/>
+        <location filename="../src/SiteconIO.cpp" line="50"/>
         <source>Sitecon models</source>
         <translation>Профайлы SITECON</translation>
     </message>
@@ -1012,7 +1012,7 @@
 <context>
     <name>U2::SiteconReadMultiTask</name>
     <message>
-        <location filename="../src/SiteconQuery.cpp" line="237"/>
+        <location filename="../src/SiteconQuery.cpp" line="231"/>
         <source>Load sitecon models task</source>
         <translation>Load sitecon models task</translation>
     </message>
@@ -1030,13 +1030,13 @@
     <message>
         <location filename="../src/SiteconSearchDialogController.cpp" line="90"/>
         <source>Search</source>
-        <translation>Искать</translation>
+        <translation>Поиск</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchDialogController.cpp" line="91"/>
         <location filename="../src/SiteconSearchDialogController.cpp" line="153"/>
         <source>Cancel</source>
-        <translation>Отменить</translation>
+        <translation>Отмена</translation>
     </message>
     <message>
         <location filename="../src/SiteconSearchDialogController.cpp" line="153"/>
@@ -1060,9 +1060,9 @@
     </message>
     <message>
         <location filename="../src/SiteconSearchDialogController.cpp" line="195"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="299"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="309"/>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="321"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="300"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="310"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="322"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1072,27 +1072,27 @@
         <translation>%1% err1=%2	err2=%3</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="299"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="300"/>
         <source>No model selected</source>
         <translation>Укажите файл модели</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="309"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="310"/>
         <source>Range is too small</source>
         <translation>Слишком маленький регион для поиска</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="321"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="322"/>
         <source>Error parsing minumum score</source>
         <translation>Неразборчивая строка минимальной ошибки</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="385"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="386"/>
         <source>Complement strand</source>
         <translation>Только комплeментарные</translation>
     </message>
     <message>
-        <location filename="../src/SiteconSearchDialogController.cpp" line="385"/>
+        <location filename="../src/SiteconSearchDialogController.cpp" line="386"/>
         <source>Direct strand</source>
         <translation>Только прямые</translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAdapter.cpp b/src/plugins_3rdparty/umuscle/src/MuscleAdapter.cpp
index 90da78c..b5d4777 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAdapter.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAdapter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,20 +27,20 @@
 #include <U2Core/Task.h>
 #include <U2Core/Log.h>
 #include <U2Core/GAutoDeleteList.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2SafePoints.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <algorithm>
-#include <QtCore/QVector>
+#include <QVector>
 
 
 namespace U2 {
 
 //////////////////////////////////////////////////////////////////////////
 
-void MuscleAdapter::align(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti, bool mhack) {
+void MuscleAdapter::align(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti, bool mhack) {
     if(ti.cancelFlag)  {
         return;
     }
@@ -59,7 +59,7 @@ void MuscleAdapter::align(const MAlignment& ma, MAlignment& res, TaskStateInfo&
     }
 }
 
-void MuscleAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti, bool mhack) {
+void MuscleAdapter::alignUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti, bool mhack) {
     ti.progress = 0;
     MuscleContext* ctx = getMuscleContext();
 
@@ -67,7 +67,7 @@ void MuscleAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
 
     SetSeqWeightMethod(ctx->params.g_SeqWeight1);
 
-    setupAlphaAndScore(ma.getAlphabet(), ti);
+    setupAlphaAndScore(ma->getAlphabet(), ti);
     if (ti.hasError()) {
         return;
     }
@@ -140,8 +140,8 @@ void MuscleAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
     ValidateMuscleIds(msa);
 
     if (1 == ctx->params.g_uMaxIters || 2 == uSeqCount) {
-        assert(int(msa.GetSeqCount()) == ma.getNumRows());
-        prepareAlignResults(msa, ma.getAlphabet(), res, mhack);
+        assert(int(msa.GetSeqCount()) == ma->getNumRows());
+        prepareAlignResults(msa, ma->getAlphabet(), res, mhack);
         return;
     }
 
@@ -185,15 +185,15 @@ void MuscleAdapter::alignUnsafe(const MAlignment& ma, MAlignment& res, TaskState
     ValidateMuscleIds(msa);
     ValidateMuscleIds(GuideTree);
 
-    //assert(int(msa.GetSeqCount()) == ma.getNumSequences());
+    //assert(int(msa.GetSeqCount()) == ma->getNumSequences());
 
-    prepareAlignResults(msa, ma.getAlphabet(), res, mhack);
+    prepareAlignResults(msa, ma->getAlphabet(), res, mhack);
 }
 
 //////////////////////////////////////////////////////////////////////////
 // refine single MSA
 
-void MuscleAdapter::refine(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti) {
+void MuscleAdapter::refine(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     if(ti.cancelFlag)  {
         return;
     }
@@ -215,7 +215,7 @@ void MuscleAdapter::refine(const MAlignment& ma, MAlignment& res, TaskStateInfo&
     }
 }
 
-void MuscleAdapter::refineUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti) {
+void MuscleAdapter::refineUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     ti.progress = 0;
 
     MuscleContext *ctx = getMuscleContext();
@@ -224,7 +224,7 @@ void MuscleAdapter::refineUnsafe(const MAlignment& ma, MAlignment& res, TaskStat
 
     SetSeqWeightMethod(ctx->params.g_SeqWeight1);
 
-    setupAlphaAndScore(ma.getAlphabet(), ti);
+    setupAlphaAndScore(ma->getAlphabet(), ti);
     if (ti.hasError()) {
         return;
     }
@@ -253,7 +253,7 @@ void MuscleAdapter::refineUnsafe(const MAlignment& ma, MAlignment& res, TaskStat
     ValidateMuscleIds(msa);
     ValidateMuscleIds(GuideTree);
 
-    prepareAlignResults(msa, ma.getAlphabet(), res, false);
+    prepareAlignResults(msa, ma->getAlphabet(), res, false);
 }
 
 //////////////////////////////////////////////////////////////////////////
@@ -283,11 +283,11 @@ static ProfPos *ProfileFromMSALocal_ProfileCPP(MSA &msa, Tree &tree) {
     return ProfileFromMSA(msa);
 }
 
-void MuscleAdapter::align2Profiles(const MAlignment& ma1, const MAlignment& ma2, MAlignment& res, TaskStateInfo& ti) {
+void MuscleAdapter::align2Profiles(const MultipleSequenceAlignment& ma1, const MultipleSequenceAlignment& ma2, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     if(ti.cancelFlag)  {
         return;
     }
-    if (ma1.isEmpty() || ma2.isEmpty()) {
+    if (ma1->isEmpty() || ma2->isEmpty()) {
         ti.setError(  tr("Invalid input alignment") );
         return;
     }
@@ -306,9 +306,9 @@ void MuscleAdapter::align2Profiles(const MAlignment& ma1, const MAlignment& ma2,
     }
 }
 
-void MuscleAdapter::align2ProfilesUnsafe(const MAlignment& ma1, const MAlignment& ma2, MAlignment& res, TaskStateInfo& ti) {
-    assert(!ma1.isEmpty() && !ma2.isEmpty());
-    const DNAAlphabet* al = U2AlphabetUtils::deriveCommonAlphabet(ma1.getAlphabet(), ma2.getAlphabet());
+void MuscleAdapter::align2ProfilesUnsafe(const MultipleSequenceAlignment& ma1, const MultipleSequenceAlignment& ma2, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
+    assert(!ma1->isEmpty() && !ma2->isEmpty());
+    const DNAAlphabet* al = U2AlphabetUtils::deriveCommonAlphabet(ma1->getAlphabet(), ma2->getAlphabet());
     CHECK_EXT(al != NULL, ti.setError(  tr("Incompatible alphabets") ), );
 
     MuscleContext *ctx = getMuscleContext();
@@ -326,7 +326,7 @@ void MuscleAdapter::align2ProfilesUnsafe(const MAlignment& ma1, const MAlignment
     MSA msa2;
     convertMAlignment2MSA(msa2, ma2, true);
 
-    MSA::SetIdCount(ma1.getNumRows() + ma2.getNumRows());
+    MSA::SetIdCount(ma1->getNumRows() + ma2->getNumRows());
 
     unsigned uLength1 = msa1.GetColCount();
     unsigned uLength2 = msa2.GetColCount();
@@ -397,8 +397,8 @@ static void originalMSAToCurrent(const QByteArray& adjPath, const QByteArray& or
     }
 }
 
-static void addSequenceToMSA(MAlignment& ma, const QByteArray& path, QByteArray& msaPathChanges, const QByteArray& seq, const QString& name) {
-    assert(msaPathChanges.length() == ma.getLength());
+static void addSequenceToMSA(MultipleSequenceAlignment& ma, const QByteArray& path, QByteArray& msaPathChanges, const QByteArray& seq, const QString& name) {
+    assert(msaPathChanges.length() == ma->getLength());
 
     QVector<int> insCoords; //coords of gaps to be added to model
     QByteArray alignedSeq; //a sequence to be added to model
@@ -408,7 +408,7 @@ static void addSequenceToMSA(MAlignment& ma, const QByteArray& path, QByteArray&
     for(int pathPos = 0; pathPos < pathLen; pathPos++) {
         char c = path[pathPos];
         if (c == 'D') { //gap in seq
-            alignedSeq.append((char)MAlignment_GapChar);
+            alignedSeq.append((char)U2Msa::GAP_CHAR);
             continue;
         }
         //for 'M' or 'I' insert original char to seq
@@ -422,14 +422,14 @@ static void addSequenceToMSA(MAlignment& ma, const QByteArray& path, QByteArray&
     assert(seqPos == seqLen); //all seq symbols used
     int aseqLen = alignedSeq.length(); Q_UNUSED(aseqLen);
     int numIns = insCoords.size();
-    int ma1Len = ma.getLength(); Q_UNUSED(ma1Len);
+    int ma1Len = ma->getLength(); Q_UNUSED(ma1Len);
     assert(aseqLen == ma1Len + numIns);
     if (numIns != 0) {
-        int prevLen = ma.getLength();
+        int prevLen = ma->getLength();
         int newLen = prevLen + numIns;
         QByteArray msaPathChangesNew;
-        for (int i = 0, n = ma.getNumRows(); i < n; i++) {
-            const MAlignmentRow& row = ma.getRow(i);
+        for (int i = 0, n = ma->getNumRows(); i < n; i++) {
+            const MultipleSequenceAlignmentRow row = ma->getMsaRow(i);
             QByteArray newSeq;
             newSeq.reserve(newLen);
             int insCoordsPos = insCoords[0];
@@ -441,40 +441,40 @@ static void addSequenceToMSA(MAlignment& ma, const QByteArray& path, QByteArray&
                         insCoordsIdx++;
                         prevInsCoordsPos = insCoordsPos;
                         insCoordsPos = insCoordsIdx < numIns ? insCoords[insCoordsIdx] : -1;
-                        newSeq.append((char)MAlignment_GapChar);
+                        newSeq.append((char)U2Msa::GAP_CHAR);
                         if (i == 0) {
                             msaPathChangesNew.append('I');
                         }
                     } while (insCoordsPos == prevInsCoordsPos+1);
                 }
-                newSeq.append(row.charAt(seqPos));
+                newSeq.append(row->charAt(seqPos));
                 if (i == 0) {
                     msaPathChangesNew.append(msaPathChanges[seqPos]);
                 }
             }
             while (insCoordsIdx!=numIns) {
                 insCoordsIdx++;
-                newSeq.append((char)MAlignment_GapChar);
+                newSeq.append((char)U2Msa::GAP_CHAR);
                 if (i == 0) {
                     msaPathChangesNew.append('I');
                 }
             }
             assert(newSeq.length() == newLen);
-            ma.setRowContent(i, newSeq);
+            ma->setRowContent(i, newSeq);
         }
         msaPathChanges.clear();
         msaPathChanges+=msaPathChangesNew;
-        assert(msaPathChanges.length() == ma.getLength());
+        assert(msaPathChanges.length() == ma->getLength());
     }
 
-    int ma2Len = ma.getLength(); Q_UNUSED(ma2Len);
+    int ma2Len = ma->getLength(); Q_UNUSED(ma2Len);
     assert(aseqLen == ma2Len);  // gapped sequence has the same length as alignment
 
     U2OpStatus2Log os;
-    ma.addRow(name, alignedSeq, os);
+    ma->addRow(name, alignedSeq);
 }
 
-void MuscleAdapter::addUnalignedSequencesToProfile(const MAlignment& ma, const MAlignment& unalignedSeqs, MAlignment& res, TaskStateInfo& ti) {
+void MuscleAdapter::addUnalignedSequencesToProfile(const MultipleSequenceAlignment& ma, const MultipleSequenceAlignment& unalignedSeqs, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
     if(ti.cancelFlag)  {
         return;
     }
@@ -494,8 +494,8 @@ void MuscleAdapter::addUnalignedSequencesToProfile(const MAlignment& ma, const M
 }
 
 
-void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, const MAlignment& unalignedSeqs, MAlignment& res, TaskStateInfo& ti) {
-    const DNAAlphabet* al = U2AlphabetUtils::deriveCommonAlphabet(ma.getAlphabet(), unalignedSeqs.getAlphabet());
+void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MultipleSequenceAlignment& ma, const MultipleSequenceAlignment& unalignedSeqs, MultipleSequenceAlignment& res, TaskStateInfo& ti) {
+    const DNAAlphabet* al = U2AlphabetUtils::deriveCommonAlphabet(ma->getAlphabet(), unalignedSeqs->getAlphabet());
     CHECK_EXT(al != NULL, ti.setError(tr("Incompatible alphabets")), );
 
     // init muscle
@@ -507,25 +507,25 @@ void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, c
     setupAlphaAndScore(al, ti);
     CHECK_OP(ti, );
 
-    MSA::SetIdCount(ma.getNumRows() + 1);
+    MSA::SetIdCount(ma->getNumRows() + 1);
 
     //prepare original MSA
     MSA profileMSA;
     convertMAlignment2MSA(profileMSA, ma, true);
 
-    res = ma;
+    res = ma->getExplicitCopy();
 
     //align with input sequences one by one
     Tree tree1;
     gauto_array<ProfPos> prof1(ProfileFromMSALocal_ProfileCPP(profileMSA, tree1));
     QVector<AlignedSeq> alignedSeqs;
     int dp = ti.progress;
-    for (int i=0, n = unalignedSeqs.getNumRows(); i < n; i++) {
+    for (int i=0, n = unalignedSeqs->getNumRows(); i < n; i++) {
         ti.setDescription(tr("Aligning sequence %1 of %2").arg(QString::number(i+1)).arg(QString::number(n)));
         ti.progress = dp + i*(95-dp)/n;
-        const MAlignmentRow& useq = unalignedSeqs.getRow(i);
+        const MultipleSequenceAlignmentRow useq = unalignedSeqs->getMsaRow(i);
         Seq seq;
-        seq.FromString(useq.getCore().constData(), useq.getName().toLocal8Bit().constData());
+        seq.FromString(useq->getCore().constData(), useq->getName().toLocal8Bit().constData());
         seq.SetId(0);
         seq.StripGaps();
         seq.FixAlpha();
@@ -539,7 +539,7 @@ void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, c
         AlignTwoProfs(prof1.data, profileMSA.GetColCount(), 1.0, prof2.get(), tmpMSA.GetColCount(), 1.0, path, &profOut.data, &uLengthOut);
 
         AlignedSeq aseq;
-        aseq.name = useq.getName();
+        aseq.name = useq->getName();
         aseq.seq = QByteArray((const char*)&seq.front(), seq.Length());//without gaps
         aseq.pathToMSA = path2Str(path);
         alignedSeqs.append(aseq);
@@ -550,7 +550,7 @@ void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, c
     }
 
     //now add all sequences to the original MSA
-    QByteArray changesToOriginalMSA(res.getLength(), 'M');  //path from original MSA to MSA with i seqs aligned
+    QByteArray changesToOriginalMSA(res->getLength(), 'M');  //path from original MSA to MSA with i seqs aligned
     QByteArray seqPath2CurrentMSA;
     for (int i=0, n = alignedSeqs.size(); i < n; i++) {
         if (i%10 == 9) {
@@ -561,11 +561,11 @@ void MuscleAdapter::addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, c
         originalMSAToCurrent(changesToOriginalMSA, aseq.pathToMSA, seqPath2CurrentMSA);
         addSequenceToMSA(res, seqPath2CurrentMSA, changesToOriginalMSA, aseq.seq, aseq.name);
         if (ti.cancelFlag) {
-            res.clear();
+            res->clear();
             return;
         }
     }
-    res.setAlphabet(al);
+    res->setAlphabet(al);
 }
 
 QString MuscleAdapter::getBadAllocError() {
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAdapter.h b/src/plugins_3rdparty/umuscle/src/MuscleAdapter.h
index c014c35..5dc183d 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAdapter.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAdapter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,33 +22,34 @@
 #ifndef _U2_UMUSCLE_ADAPTER_H_
 #define _U2_UMUSCLE_ADAPTER_H_
 
-#include <QtCore/QObject>
+#include <QObject>
+
+#include <U2Core/MultipleSequenceAlignment.h>
 
 namespace U2 {
 
-class MAlignment;
 class TaskStateInfo;
 
 class MuscleAdapter : public QObject {
 Q_OBJECT
 public:
-    static void align(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti, bool mhack = true);
+    static void align(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti, bool mhack = true);
 
-    static void refine(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti);
+    static void refine(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 
-    static void align2Profiles(const MAlignment& ma1, const MAlignment& ma2, MAlignment& res, TaskStateInfo& ti);
+    static void align2Profiles(const MultipleSequenceAlignment& ma1, const MultipleSequenceAlignment& ma2, MultipleSequenceAlignment& res, TaskStateInfo& ti);
     
-    static void addUnalignedSequencesToProfile( const MAlignment& ma, const MAlignment& unalignedSeqs, MAlignment& res, TaskStateInfo& ti);
+    static void addUnalignedSequencesToProfile( const MultipleSequenceAlignment& ma, const MultipleSequenceAlignment& unalignedSeqs, MultipleSequenceAlignment& res, TaskStateInfo& ti);
     static QString getBadAllocError();
 
 private:
-    static void alignUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti, bool mhack);
+    static void alignUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti, bool mhack);
     
-    static void refineUnsafe(const MAlignment& ma, MAlignment& res, TaskStateInfo& ti);
+    static void refineUnsafe(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 
-    static void align2ProfilesUnsafe(const MAlignment& ma1, const MAlignment& ma2, MAlignment& res, TaskStateInfo& ti);
+    static void align2ProfilesUnsafe(const MultipleSequenceAlignment& ma1, const MultipleSequenceAlignment& ma2, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 
-    static void addUnalignedSequencesToProfileUnsafe(const MAlignment& ma, const MAlignment& unalignedSeqs, MAlignment& res, TaskStateInfo& ti);
+    static void addUnalignedSequencesToProfileUnsafe(const MultipleSequenceAlignment& ma, const MultipleSequenceAlignment& unalignedSeqs, MultipleSequenceAlignment& res, TaskStateInfo& ti);
 };
 
 }//namespace
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
index aa55d38..fd7b5ff 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -39,20 +39,20 @@
 
 namespace U2 {
 
-MuscleAlignDialogController::MuscleAlignDialogController(QWidget* w, const MAlignment& _ma, MuscleTaskSettings& _settings) 
-    : QDialog(w), ma(_ma), settings(_settings)
+MuscleAlignDialogController::MuscleAlignDialogController(QWidget* w, const MultipleSequenceAlignment& _ma, MuscleTaskSettings& _settings) 
+    : QDialog(w), ma(_ma->getCopy()), settings(_settings)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223203");
+    new HelpButton(this, buttonBox, "20875107");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
-    translateCheckBox->setEnabled(ma.getAlphabet()->isNucleic());
+    translateCheckBox->setEnabled(ma->getAlphabet()->isNucleic());
     inputGroupBox->setVisible(false);
     this->adjustSize();
 
-    rangeEndSB->setMaximum(ma.getLength());
-    rangeEndSB->setValue(ma.getLength());
+    rangeEndSB->setMaximum(ma->getLength());
+    rangeEndSB->setValue(ma->getLength());
 
     if (settings.alignRegion) {
         customRangeRB->setChecked(true);
@@ -94,7 +94,7 @@ void MuscleAlignDialogController::accept() {
     settings.stableMode = stableCB->isChecked();
 
     if (wholeRangeRB->isChecked()) {
-        settings.regionToAlign = U2Region(0, ma.getLength());
+        settings.regionToAlign = U2Region(0, ma->getLength());
         settings.alignRegion = false;
     } else {
         int startPos = rangeStartSB->value() - 1;
@@ -133,7 +133,7 @@ MuscleAlignWithExtFileSpecifyDialogController::MuscleAlignWithExtFileSpecifyDial
       saveController(NULL)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223202");
+    new HelpButton(this, buttonBox, "20875106");
 
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Align"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
@@ -163,7 +163,7 @@ MuscleAlignWithExtFileSpecifyDialogController::MuscleAlignWithExtFileSpecifyDial
 void MuscleAlignWithExtFileSpecifyDialogController::sl_inputPathButtonClicked() {
     LastUsedDirHelper lod;
     lod.url = U2FileDialog::getOpenFileName(this, tr("Open an alignment file"), lod.dir,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
     if (lod.url.isEmpty()) {
         return;
     }
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
index 3d32aba..d41dff0 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleAlignDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -76,7 +76,7 @@ class MuscleAlignDialogController : public QDialog, public Ui_MuscleAlignmentDia
     Q_OBJECT
 
 public:
-    MuscleAlignDialogController(QWidget* w, const MAlignment& ma, MuscleTaskSettings& settings);
+    MuscleAlignDialogController(QWidget* w, const MultipleSequenceAlignment& ma, MuscleTaskSettings& settings);
     bool translateToAmino();
     QString getTranslationId();    
 public slots:
@@ -88,7 +88,7 @@ private slots:
 private:
     void initPresets();
 
-    MAlignment                          ma;
+    MultipleSequenceAlignment                          ma;
     MuscleTaskSettings&                 settings;
     GAutoDeleteList<MuscleAlignPreset>  presets;
 
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleConstants.h b/src/plugins_3rdparty/umuscle/src/MuscleConstants.h
index 38f00ea..2e42074 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleConstants.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleConstants.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
index 023307d..266464c 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleParallel.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -32,9 +32,9 @@
 #include <U2Core/Log.h>
 #include <U2Core/AppResources.h>
 
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
-#include <QtCore/QSemaphore>
+#include <QMutex>
+#include <QMutexLocker>
+#include <QSemaphore>
 
 #include <limits>
 #include "muscle/scorehistory.h"
@@ -48,10 +48,10 @@ struct Range {
 
 /////////////////////////////////////////////////////////////////////
 
-MuscleParallelTask::MuscleParallelTask(const MAlignment& ma, MAlignment& res, const MuscleTaskSettings& _config, MuscleContext* ctx)
+MuscleParallelTask::MuscleParallelTask(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, const MuscleTaskSettings& _config, MuscleContext* ctx)
     : Task(tr("MuscleParallelTask"), TaskFlags_NR_FOSCOE), progAlignTask(NULL), refineTreeTask(NULL), refineTask(NULL)
 {
-    //assert(ma.isNormalized()); //not required to be normalized    assert(_config.op == MuscleTaskOp_Align || _config.op == MuscleTaskOp_Refine);    workpool = NULL;
+    //assert(ma->isNormalized()); //not required to be normalized    assert(_config.op == MuscleTaskOp_Align || _config.op == MuscleTaskOp_Refine);    workpool = NULL;
     setMaxParallelSubtasks(1);
     workpool = new MuscleWorkPool(ctx, _config, stateInfo, _config.nThreads, ma, res, _config.regionToAlign.startPos == 0);
     prepareTask = new MusclePrepareTask(workpool);
@@ -63,10 +63,10 @@ MuscleParallelTask::MuscleParallelTask(const MAlignment& ma, MAlignment& res, co
     addTaskResource(resourseUsage);
 }
 
-int MuscleParallelTask::estimateMemoryUsageInMb(const MAlignment& ma) {
+int MuscleParallelTask::estimateMemoryUsageInMb(const MultipleSequenceAlignment& ma) {
     QList<int> rowsLengths;
-    foreach(const MAlignmentRow& row, ma.getRows()) {
-        rowsLengths.append(row.getCoreLength());
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
+        rowsLengths.append(row->getCoreLength());
     }
     qSort(rowsLengths.begin(), rowsLengths.end(), qGreater<int>());
 
@@ -88,7 +88,7 @@ QList<Task*> MuscleParallelTask::onSubTaskFinished(Task* subTask) {
         return res;
     }
 
-    if (subTask == prepareTask && workpool->res.isEmpty()) {
+    if (subTask == prepareTask && workpool->res->isEmpty()) {
         foreach(Task* task, prepareTask->res)
             res << task;
     }
@@ -153,7 +153,7 @@ void MusclePrepareTask::alignPrepareUnsafe()
     MuscleContext* ctx = workpool->ctx;
     SetSeqWeightMethod(ctx->params.g_SeqWeight1);
 
-    setupAlphaAndScore(workpool->ma.getAlphabet(), stateInfo);
+    setupAlphaAndScore(workpool->ma->getAlphabet(), stateInfo);
     if (stateInfo.hasError()) {
         return;
     }
@@ -275,7 +275,7 @@ void MusclePrepareTask::refinePrepareUnsafe() {
 
     SetSeqWeightMethod(ctx->params.g_SeqWeight1);
 
-    setupAlphaAndScore(workpool->ma.getAlphabet(), workpool->ti);
+    setupAlphaAndScore(workpool->ma->getAlphabet(), workpool->ti);
     if (workpool->ti.hasError()) {
         return;
     }
@@ -336,12 +336,12 @@ void ProgressiveAlignTask::run() {
 }
     TaskLocalData::detachMuscleTLSContext();
 #ifdef TRACE    
-    log.info(tr("alignment \"%1\" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms").arg(workpool->ma.name).arg(timer.elapsed()));
+    log.info(tr("alignment \"%1\" Parallel MUSCLE Iter 1 accomplished. Time elapsed %2 ms").arg(workpool->ma->name).arg(timer.elapsed()));
 #endif
 }
 
 void ProgressiveAlignTask::_run() {
-    if (!workpool->res.isEmpty())  {
+    if (!workpool->res->isEmpty())  {
         return;// no more need in align
     }
 	if (workpool->ti.hasError())  {
@@ -377,8 +377,8 @@ void ProgressiveAlignTask::_run() {
     ValidateMuscleIds(workpool->a);
 
     if (1 == ctx->params.g_uMaxIters || 2 == uSeqCount) {
-        assert(int(workpool->a.GetSeqCount()) == workpool->ma.getNumRows());
-        prepareAlignResults(workpool->a, workpool->ma.getAlphabet(), workpool->res, workpool->mhack);
+        assert(int(workpool->a.GetSeqCount()) == workpool->ma->getNumRows());
+        prepareAlignResults(workpool->a, workpool->ma->getAlphabet(), workpool->res, workpool->mhack);
     }
 }
 
@@ -545,7 +545,7 @@ void RefineTreeTask::run() {
 }
 
 void RefineTreeTask::_run() {
-    if (!workpool->res.isEmpty())  {
+    if (!workpool->res->isEmpty())  {
         return;// no more need in align
     }
     MuscleContext* ctx = workpool->ctx;
@@ -608,7 +608,7 @@ void RefineTask::run() {
 }
 
 void RefineTask::_run() {
-    if (!workpool->res.isEmpty())  {
+    if (!workpool->res->isEmpty())  {
         return;// no more need in align
     }
     MuscleContext* ctx = workpool->ctx;
@@ -630,10 +630,10 @@ void RefineTask::_run() {
     ValidateMuscleIds(workpool->GuideTree);
     
     if(workpool->config.op != MuscleTaskOp_Refine) {
-        //assert(int(msa.GetSeqCount()) == workpool->ma.getNumSequences());
-        prepareAlignResults(msa, workpool->ma.getAlphabet(), workpool->res, workpool->mhack);
+        //assert(int(msa.GetSeqCount()) == workpool->ma->getNumSequences());
+        prepareAlignResults(msa, workpool->ma->getAlphabet(), workpool->res, workpool->mhack);
     } else {
-        prepareAlignResults(msa, workpool->ma.getAlphabet(), workpool->res, false);
+        prepareAlignResults(msa, workpool->ma->getAlphabet(), workpool->res, false);
     }
 }
 ////////////////////////////////////////////////////////////////////////////
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleParallel.h b/src/plugins_3rdparty/umuscle/src/MuscleParallel.h
index 3aeae82..24f91a1 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleParallel.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleParallel.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,10 +27,10 @@
 #include <U2Core/DNAAlphabet.h>
 #include <U2Core/Task.h>
 #include <U2Core/GAutoDeleteList.h>
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 #include <algorithm>
-#include <QtCore/QVector>
+#include <QVector>
 
 class MuscleContext;
 class MSA;
@@ -47,11 +47,11 @@ struct MuscleWorkPool;
 class MuscleParallelTask: public Task {
     Q_OBJECT
 public:
-    MuscleParallelTask(const MAlignment& ma, MAlignment& res, const MuscleTaskSettings& config, MuscleContext* ctx);
+    MuscleParallelTask(const MultipleSequenceAlignment& ma, MultipleSequenceAlignment& res, const MuscleTaskSettings& config, MuscleContext* ctx);
     ~MuscleParallelTask() {cleanup();}
     void cleanup();
     QList<Task*> onSubTaskFinished(Task* subTask);
-    int estimateMemoryUsageInMb(const MAlignment& ma);
+    int estimateMemoryUsageInMb(const MultipleSequenceAlignment& ma);
 
 private:
     MuscleWorkPool *workpool;
diff --git a/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp b/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
index 4f4875f..827d614 100644
--- a/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MusclePlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,20 +26,21 @@
 #include <U2Core/DocumentModel.h>
 #include <U2Core/GAutoDeleteList.h>
 #include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Task.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/LastUsedDirHelper.h>
 #include <U2Gui/ToolsMenu.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2Lang/WorkflowSettings.h>
 
 #include <U2Test/GTestFrameworkComponents.h>
 
 #include <U2View/MSAEditor.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "MuscleAlignDialogController.h"
 #include "MusclePlugin.h"
@@ -55,9 +56,9 @@ extern "C" Q_DECL_EXPORT Plugin* U2_PLUGIN_INIT_FUNC() {
     return plug;
 }
 
-    
-MusclePlugin::MusclePlugin() 
-: Plugin(tr("MUSCLE"), 
+
+MusclePlugin::MusclePlugin()
+: Plugin(tr("MUSCLE"),
          tr("A port of MUSCLE package for multiple sequence alignment. Check http://www.drive5.com/muscle/ for the original version")),
          ctx(NULL)
 {
@@ -83,7 +84,7 @@ MusclePlugin::MusclePlugin()
     GAutoDeleteList<XMLTestFactory>* l = new GAutoDeleteList<XMLTestFactory>(this);
     l->qlist = UMUSCLETests ::createTestFactories();
 
-    foreach(XMLTestFactory* f, l->qlist) { 
+    foreach(XMLTestFactory* f, l->qlist) {
         bool res = xmlTestFormat->registerTestFactory(f);
         Q_UNUSED(res);
         assert(res);
@@ -124,18 +125,16 @@ void MuscleAction::sl_updateState() {
     setEnabled(!item->isStateLocked() && !msaEditor->isAlignmentEmpty());
 }
 
-MuscleMSAEditorContext::MuscleMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MSAEditorFactory::ID) {
+MuscleMSAEditorContext::MuscleMSAEditorContext(QObject* p) : GObjectViewWindowContext(p, MsaEditorFactory::ID) {
 }
 
 
 void MuscleMSAEditorContext::initViewContext(GObjectView* view) {
     MSAEditor* msaed = qobject_cast<MSAEditor*>(view);
-    assert(msaed!=NULL);
-    if (msaed->getMSAObject() == NULL) {
-        return;
-    }
+    SAFE_POINT(msaed != NULL, "Invalid GObjectView", );
+    CHECK(msaed->getMaObject() != NULL, );
 
-    bool objLocked = msaed->getMSAObject()->isStateLocked();
+    bool objLocked = msaed->getMaObject()->isStateLocked();
     bool isMsaEmpty = msaed->isAlignmentEmpty();
 
     MuscleAction* alignAction = new MuscleAction(this, view, tr("Align with MUSCLE..."), 1000);
@@ -143,8 +142,8 @@ void MuscleMSAEditorContext::initViewContext(GObjectView* view) {
     alignAction->setEnabled(!objLocked && !isMsaEmpty);
     alignAction->setObjectName("Align with muscle");
     connect(alignAction, SIGNAL(triggered()), SLOT(sl_align()));
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignAction, SLOT(sl_updateState()));
     addViewAction(alignAction);
 
     MuscleAction* addSequencesAction = new MuscleAction(this, view, tr("Align sequences to profile with MUSCLE..."), 1001);
@@ -152,8 +151,8 @@ void MuscleMSAEditorContext::initViewContext(GObjectView* view) {
     addSequencesAction->setEnabled(!objLocked && !isMsaEmpty);
     addSequencesAction->setObjectName("Align sequences to profile with MUSCLE");
     connect(addSequencesAction, SIGNAL(triggered()), SLOT(sl_alignSequencesToProfile()));
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), addSequencesAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), addSequencesAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), addSequencesAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), addSequencesAction, SLOT(sl_updateState()));
     addViewAction(addSequencesAction);
 
     MuscleAction* alignProfilesAction = new MuscleAction(this, view, tr("Align profile to profile with MUSCLE..."), 1002);
@@ -161,8 +160,8 @@ void MuscleMSAEditorContext::initViewContext(GObjectView* view) {
     alignProfilesAction->setEnabled(!objLocked && !isMsaEmpty);
     alignProfilesAction->setObjectName("Align profile to profile with MUSCLE");
     connect(alignProfilesAction, SIGNAL(triggered()), SLOT(sl_alignProfileToProfile()));
-    connect(msaed->getMSAObject(), SIGNAL(si_lockedStateChanged()), alignProfilesAction, SLOT(sl_updateState()));
-    connect(msaed->getMSAObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignProfilesAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_lockedStateChanged()), alignProfilesAction, SLOT(sl_updateState()));
+    connect(msaed->getMaObject(), SIGNAL(si_alignmentBecomesEmpty(bool)), alignProfilesAction, SLOT(sl_updateState()));
     addViewAction(alignProfilesAction);
 }
 
@@ -172,14 +171,14 @@ void MuscleMSAEditorContext::buildMenu(GObjectView* v, QMenu* m) {
     SAFE_POINT(alignMenu != NULL, "alignMenu", );
     foreach(GObjectViewAction* a, actions) {
         a->addToMenuWithOrder(alignMenu);
-    }    
+    }
 }
 
 void MuscleMSAEditorContext::sl_align() {
     MuscleAction* action = qobject_cast<MuscleAction*>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMSAEditor();
-    MAlignmentObject* obj = ed->getMSAObject(); 
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
 
     const QRect selection = action->getMSAEditor()->getCurrentSelection();
     MuscleTaskSettings s;
@@ -192,15 +191,15 @@ void MuscleMSAEditorContext::sl_align() {
         }
     }
 
-    QObjectScopedPointer<MuscleAlignDialogController> dlg = new MuscleAlignDialogController(ed->getWidget(), obj->getMAlignment(), s);
+    QObjectScopedPointer<MuscleAlignDialogController> dlg = new MuscleAlignDialogController(ed->getWidget(), obj->getMultipleAlignment(), s);
     const int rc = dlg->exec();
     CHECK(!dlg.isNull(), );
-    
+
     if (rc != QDialog::Accepted) {
         return;
     }
-    
-    
+
+
     AlignGObjectTask* muscleTask = new MuscleGObjectRunFromSchemaTask(obj, s);
     Task *alignTask = NULL;
 
@@ -222,13 +221,13 @@ void MuscleMSAEditorContext::sl_alignSequencesToProfile() {
     MuscleAction* action = qobject_cast<MuscleAction*>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMSAEditor();
-    MAlignmentObject* obj = ed->getMSAObject(); 
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj == NULL)
         return;
     assert(!obj->isStateLocked());
 
     DocumentFormatConstraints c;
-    QString f1 = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, false);
+    QString f1 = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, false);
     QString f2 = DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::SEQUENCE, true);
     QString filter = f2 + "\n" + f1;
 
@@ -255,7 +254,7 @@ void MuscleMSAEditorContext::sl_alignProfileToProfile() {
     MuscleAction* action = qobject_cast<MuscleAction*>(sender());
     assert(action!=NULL);
     MSAEditor* ed = action->getMSAEditor();
-    MAlignmentObject* obj = ed->getMSAObject(); 
+    MultipleSequenceAlignmentObject* obj = ed->getMaObject();
     if (obj == NULL)
         return;
     assert(!obj->isStateLocked());
@@ -264,11 +263,11 @@ void MuscleMSAEditorContext::sl_alignProfileToProfile() {
 #ifdef Q_OS_MAC
     if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         lod.url = U2FileDialog::getOpenFileName(NULL, tr("Select file with alignment"), lod,
-            DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true), 0, QFileDialog::DontUseNativeDialog );
+            DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true), 0, QFileDialog::DontUseNativeDialog );
     } else
 #endif
     lod.url = U2FileDialog::getOpenFileName(NULL, tr("Select file with alignment"), lod,
-        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_ALIGNMENT, true));
+        DialogUtils::prepareDocumentsFileFilterByObjType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT, true));
 
     if (lod.url.isEmpty()) {
         return;
diff --git a/src/plugins_3rdparty/umuscle/src/MusclePlugin.h b/src/plugins_3rdparty/umuscle/src/MusclePlugin.h
index 44c4478..7ee928d 100644
--- a/src/plugins_3rdparty/umuscle/src/MusclePlugin.h
+++ b/src/plugins_3rdparty/umuscle/src/MusclePlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,11 +26,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Gui/ObjectViewModel.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenu>
-#endif
+#include <QMenu>
 
 namespace U2 {
 
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
index a5645f4..7983d34 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,38 +19,39 @@
  * MA 02110-1301, USA.
  */
 
-#include "MuscleTask.h"
-#include "MuscleParallel.h"
-#include "MuscleAdapter.h"
-#include "MuscleConstants.h"
-#include "TaskLocalStorage.h"
+#include <QFileInfo>
 
+#include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
-#include <U2Core/AppSettings.h>
 #include <U2Core/AppResources.h>
-#include <U2Core/StateLockableDataModel.h>
-#include <U2Core/TaskWatchdog.h>
+#include <U2Core/AppSettings.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/Counter.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DocumentModel.h>
+#include <U2Core/DocumentUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/Counter.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/ProjectModel.h>
-#include <U2Core/AddDocumentTask.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/MSAUtils.h>
-#include <U2Core/DocumentUtils.h>
-#include <U2Core/BaseDocumentFormats.h>
-#include <U2Core/U2SafePoints.h>
+#include <U2Core/ProjectModel.h>
+#include <U2Core/StateLockableDataModel.h>
+#include <U2Core/TaskWatchdog.h>
 #include <U2Core/U2AlphabetUtils.h>
-#include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2Mod.h>
+#include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-#include <U2Lang/WorkflowSettings.h>
 #include <U2Lang/SimpleWorkflowTask.h>
+#include <U2Lang/WorkflowSettings.h>
 
 #include <U2Gui/OpenViewTask.h>
 
+#include "MuscleAdapter.h"
+#include "MuscleConstants.h"
+#include "MuscleParallel.h"
+#include "MuscleTask.h"
+#include "TaskLocalStorage.h"
 #include "muscle/muscle.h"
 #include "muscle/muscle_context.h"
 
@@ -65,17 +66,19 @@ void MuscleTaskSettings::reset() {
     maxSecs = 0;
     stableMode = true;
     regionToAlign.startPos = regionToAlign.length = 0;
-    profile.clear();
+    profile = MultipleSequenceAlignment();
     alignRegion = false;
     inputFilePath = "";
     mode = Default;
 }
 
-MuscleTask::MuscleTask(const MAlignment& ma, const MuscleTaskSettings& _config)
-:Task(tr("MUSCLE alignment"), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText), config(_config), inputMA(ma)
+MuscleTask::MuscleTask(const MultipleSequenceAlignment &ma, const MuscleTaskSettings& _config)
+    : Task(tr("MUSCLE alignment"), TaskFlags_FOSCOE | TaskFlag_MinimizeSubtaskErrorText),
+      config(_config),
+      inputMA(ma->getExplicitCopy())
 {
     GCOUNTER( cvar, tvar, "MuscleTask" );
-    config.nThreads = (config.nThreads == 0) ? AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount():config.nThreads;
+    config.nThreads = (config.nThreads == 0 ? AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount() : config.nThreads);
     SAFE_POINT_EXT(config.nThreads > 0,
         setError("Incorrect number of max parallel subtasks"), );
     setMaxParallelSubtasks(config.nThreads);
@@ -89,21 +92,21 @@ MuscleTask::MuscleTask(const MAlignment& ma, const MuscleTaskSettings& _config)
     parallelSubTask = NULL;
 
     //todo: make more precise estimation, use config.op mode
-    int aliLen = ma.getLength();
-    int nSeq = ma.getNumRows();
+    int aliLen = ma->getLength();
+    int nSeq = ma->getNumRows();
     int memUseMB = qint64(aliLen) * qint64(nSeq) * 200 / (1024 * 1024); //200x per char in alignment
     TaskResourceUsage tru(RESOURCE_MEMORY, memUseMB);
 
-    QString inputAlName = inputMA.getName();
-    resultMA.setName(inputAlName);
-    resultSubMA.setName(inputAlName);
+    QString inputAlName = inputMA->getName();
+    resultMA->setName(inputAlName);
+    resultSubMA->setName(inputAlName);
 
-    inputSubMA = inputMA;
-    if (config.alignRegion && config.regionToAlign.length != inputMA.getLength()) {
+    inputSubMA = inputMA->getExplicitCopy();
+    if (config.alignRegion && config.regionToAlign.length != inputMA->getLength()) {
         SAFE_POINT_EXT(config.regionToAlign.length > 0,
             setError(tr("Incorrect region to align")), );
-        inputSubMA = inputMA.mid(config.regionToAlign.startPos, config.regionToAlign.length);
-        CHECK_EXT(inputSubMA != MAlignment(), setError(tr("Stopping MUSCLE task, because of error in MAlignment::mid function")), );
+        inputSubMA = inputMA->mid(config.regionToAlign.startPos, config.regionToAlign.length);
+        CHECK_EXT(inputSubMA != MultipleSequenceAlignment(), setError(tr("Stopping MUSCLE task, because of error in MultipleSequenceAlignment::mid function")), );
     }
 
     if (config.nThreads == 1 || (config.op != MuscleTaskOp_Align)) {
@@ -139,7 +142,7 @@ void MuscleTask::run() {
             break;
     }
     if (!hasError() && !isCanceled()) {
-        SAFE_POINT_EXT(NULL != resultMA.getAlphabet(),
+        SAFE_POINT_EXT(NULL != resultMA->getAlphabet(),
             stateInfo.setError("The alphabet of result alignment is null"),);
     }
     TaskLocalData::detachMuscleTLSContext();
@@ -151,7 +154,7 @@ void MuscleTask::run() {
 
 void MuscleTask::doAlign(bool refine) {
     if (parallelSubTask == NULL) { //align in this thread
-        SAFE_POINT_EXT(resultSubMA.isEmpty(), stateInfo.setError("Incorrect result state"),);
+        SAFE_POINT_EXT(resultSubMA->isEmpty(), stateInfo.setError("Incorrect result state"),);
         if (refine) {
             MuscleAdapter::refine(inputSubMA, resultSubMA, stateInfo);
         } else {
@@ -162,14 +165,14 @@ void MuscleTask::doAlign(bool refine) {
     U2OpStatus2Log os;
 
     if(!isCanceled()) {
-        SAFE_POINT_EXT(!resultSubMA.isEmpty(),
+        SAFE_POINT_EXT(!resultSubMA->isEmpty(),
             stateInfo.setError("The result multiple alignment is empty!"), );
 
-        resultMA.setAlphabet(inputMA.getAlphabet());
+        resultMA->setAlphabet(inputMA->getAlphabet());
         QByteArray emptySeq;
-        const int nSeq = inputMA.getNumRows();
+        const int nSeq = inputMA->getNumRows();
 
-        const int resNSeq = resultSubMA.getNumRows();
+        const int resNSeq = resultSubMA->getNumRows();
         const int maxSeq = qMax(nSeq, resNSeq);
         QVector<unsigned int> ids(maxSeq, 0);
         QVector<bool> existID(maxSeq, false);
@@ -183,44 +186,44 @@ void MuscleTask::doAlign(bool refine) {
             }
         }
         int j = resNSeq;
-        QByteArray gapSeq(resultSubMA.getLength(),MAlignment_GapChar);
+        QByteArray gapSeq(resultSubMA->getLength(),U2Msa::GAP_CHAR);
         for(int i=0, n = nSeq; i < n; i++) {
             if(!existID[i]) {
-                QString rowName = inputMA.getRow(i).getName();
+                QString rowName = inputMA->getMsaRow(i)->getName();
                 if(config.stableMode) {
-                    resultSubMA.addRow(rowName, gapSeq, i, os);
+                    resultSubMA->addRow(rowName, gapSeq, i);
                 } else {
                     ids[j] = i;
-                    resultSubMA.addRow(rowName, gapSeq, os);
+                    resultSubMA->addRow(rowName, gapSeq);
                 }
                 j++;
             }
         }
 
-        SAFE_POINT_EXT(resultSubMA.getNumRows() == inputMA.getNumRows(),
+        SAFE_POINT_EXT(resultSubMA->getNumRows() == inputMA->getNumRows(),
             stateInfo.setError(tr("Unexpected number of rows in the result multiple alignment!")), );
 
-        if (config.alignRegion && config.regionToAlign.length != inputMA.getLength()) {
+        if (config.alignRegion && config.regionToAlign.length != inputMA->getLength()) {
 
-            for(int i=0, n = inputMA.getNumRows(); i < n; i++) {
-                const MAlignmentRow& row= inputMA.getRow(ids[i]);
-                resultMA.addRow(row.getName(), emptySeq, os);
+            for(int i=0, n = inputMA->getNumRows(); i < n; i++) {
+                const MultipleSequenceAlignmentRow row= inputMA->getMsaRow(ids[i]);
+                resultMA->addRow(row->getName(), emptySeq);
             }
             if (config.regionToAlign.startPos != 0) {
                 for(int i=0; i < nSeq; i++)  {
                     int regionLen = config.regionToAlign.startPos;
-                    MAlignmentRow inputRow = inputMA.getRow(ids[i]).mid(0,regionLen, os);
-                    resultMA.appendChars(i, 0, inputRow.toByteArray(regionLen, os).constData(), regionLen);
+                    const MultipleSequenceAlignmentRow inputRow = inputMA->getMsaRow(ids[i])->mid(0, regionLen, os);
+                    resultMA->appendChars(i, 0, inputRow->toByteArray(os, regionLen).constData(), regionLen);
                 }
             }
-            resultMA += resultSubMA;
-            int resultLen = resultMA.getLength();
-            if (config.regionToAlign.endPos() != inputMA.getLength()) {
+            *resultMA += *resultSubMA;
+            int resultLen = resultMA->getLength();
+            if (config.regionToAlign.endPos() != inputMA->getLength()) {
                 int subStart = config.regionToAlign.endPos();
-                int subLen = inputMA.getLength() - config.regionToAlign.endPos();
+                int subLen = inputMA->getLength() - config.regionToAlign.endPos();
                 for(int i = 0; i < nSeq; i++) {
-                    MAlignmentRow inputRow = inputMA.getRow(ids[i]).mid(subStart, subLen, os);
-                    resultMA.appendChars(i, resultLen, inputRow.toByteArray(subLen, os).constData(), subLen);
+                    const MultipleSequenceAlignmentRow inputRow = inputMA->getMsaRow(ids[i])->mid(subStart, subLen, os);
+                    resultMA->appendChars(i, resultLen, inputRow->toByteArray(os, subLen).constData(), subLen);
                 }
             }
             //TODO: check if there are GAP columns on borders and remove them
@@ -247,7 +250,7 @@ Task::ReportResult MuscleTask::report() {
 //////////////////////////////////////////////////////////////////////////
 // MuscleAddSequencesToProfileTask
 
-MuscleAddSequencesToProfileTask::MuscleAddSequencesToProfileTask(MAlignmentObject* _obj, const QString& fileWithSequencesOrProfile, MMode _mode)
+MuscleAddSequencesToProfileTask::MuscleAddSequencesToProfileTask(MultipleSequenceAlignmentObject* _obj, const QString& fileWithSequencesOrProfile, MMode _mode)
 : Task("", TaskFlags_NR_FOSCOE), maObj(_obj), mode(_mode)
 {
     setUseDescriptionFromSubtask(true);
@@ -305,22 +308,21 @@ QList<Task*> MuscleAddSequencesToProfileTask::onSubTaskFinished(Task* subTask) {
         }
         QByteArray seqData = dnaObj->getWholeSequenceData(stateInfo);
         CHECK_OP(stateInfo, res);
-        s.profile.addRow(dnaObj->getSequenceName(), seqData, stateInfo);
-        CHECK_OP(stateInfo, res);
+        s.profile->addRow(dnaObj->getSequenceName(), seqData);
     }
     if(!seqObjects.isEmpty()) {
-        s.profile.setAlphabet(al);
+        s.profile->setAlphabet(al);
     }
 
     if (seqObjects.isEmpty()) {
-        QList<GObject*> maObjects = loadTask->getDocument()->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+        QList<GObject*> maObjects = loadTask->getDocument()->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
         if (!maObjects.isEmpty()) {
-            MAlignmentObject* maObj = qobject_cast<MAlignmentObject*>(maObjects.first());
-            s.profile = maObj->getMAlignment();
+            MultipleSequenceAlignmentObject* maObj = qobject_cast<MultipleSequenceAlignmentObject*>(maObjects.first());
+            s.profile = maObj->getMsaCopy();
         }
     }
 
-    if (s.profile.isEmpty()) {
+    if (s.profile->isEmpty()) {
         if (mode == Sequences2Profile) {
             stateInfo.setError(tr("No sequences found in file %1").arg(loadTask->getDocument()->getURLString()));
         } else {
@@ -342,7 +344,7 @@ Task::ReportResult MuscleAddSequencesToProfileTask::report() {
 //////////////////////////////////////////////////////////////////////////
 // MuscleGObjectTask
 
-MuscleGObjectTask::MuscleGObjectTask(MAlignmentObject* _obj, const MuscleTaskSettings& _config)
+MuscleGObjectTask::MuscleGObjectTask(MultipleSequenceAlignmentObject* _obj, const MuscleTaskSettings& _config)
 : AlignGObjectTask("", TaskFlags_NR_FOSCOE,_obj), lock(NULL), muscleTask(NULL), config(_config)
 {
     QString aliName;
@@ -397,7 +399,7 @@ void MuscleGObjectTask::prepare() {
 
     lock = new StateLock(MUSCLE_LOCK_REASON);
     obj->lockState(lock);
-    muscleTask = new MuscleTask(obj->getMAlignment(), config);
+    muscleTask = new MuscleTask(obj->getMultipleAlignment(), config);
 
     addSubTask(muscleTask);
 }
@@ -409,7 +411,7 @@ Task::ReportResult MuscleGObjectTask::report() {
         lock = NULL;
     } else {
         if (!stateInfo.isCoR()) {
-            stateInfo.setError(tr("MAlignment object has been changed"));
+            stateInfo.setError(tr("MultipleSequenceAlignment object has been changed"));
         }
         return ReportResult_Finished;
     }
@@ -427,7 +429,7 @@ Task::ReportResult MuscleGObjectTask::report() {
         return ReportResult_Finished;
     }
     if (config.op == MuscleTaskOp_AddUnalignedToProfile) {
-        SAFE_POINT_EXT((muscleTask->inputMA.getNumRows() + config.profile.getNumRows()) == muscleTask->resultMA.getNumRows(),
+        SAFE_POINT_EXT((muscleTask->inputMA->getNumRows() + config.profile->getNumRows()) == muscleTask->resultMA->getNumRows(),
             stateInfo.setError("Failed to apply the result of Muscle"), ReportResult_Finished);
 
         U2OpStatus2Log os;
@@ -437,21 +439,21 @@ Task::ReportResult MuscleGObjectTask::report() {
             return ReportResult_Finished;
         }
 
-        obj->setMAlignment(muscleTask->resultMA);
+        obj->setMultipleAlignment(muscleTask->resultMA);
     }
     else if (config.op == MuscleTaskOp_Align || config.op == MuscleTaskOp_Refine) {
         QList<qint64> rowsOrder = MSAUtils::compareRowsAfterAlignment(muscleTask->inputMA, muscleTask->resultMA, stateInfo);
         CHECK_OP(stateInfo, ReportResult_Finished);
 
-        if (rowsOrder.count() != muscleTask->inputMA.getNumRows()) {
+        if (rowsOrder.count() != muscleTask->inputMA->getNumRows()) {
             stateInfo.setError("Unexpected number of rows in the result multiple alignment!");
             return ReportResult_Finished;
         }
 
         QMap<qint64, QList<U2MsaGap> > rowsGapModel;
-        for (int i = 0, n = muscleTask->resultMA.getNumRows(); i < n; ++i) {
-            qint64 rowId = muscleTask->resultMA.getRow(i).getRowDBInfo().rowId;
-            const QList<U2MsaGap>& newGapModel = muscleTask->resultMA.getRow(i).getGapModel();
+        for (int i = 0, n = muscleTask->resultMA->getNumRows(); i < n; ++i) {
+            qint64 rowId = muscleTask->resultMA->getMsaRow(i)->getRowDbInfo().rowId;
+            const QList<U2MsaGap>& newGapModel = muscleTask->resultMA->getMsaRow(i)->getGapModel();
             rowsGapModel.insert(rowId, newGapModel);
         }
 
@@ -462,14 +464,14 @@ Task::ReportResult MuscleGObjectTask::report() {
             return ReportResult_Finished;
         }
 
-        obj->updateGapModel(rowsGapModel, stateInfo);
+        obj->updateGapModel(stateInfo, rowsGapModel);
 
-        if (rowsOrder != muscleTask->inputMA.getRowsIds()) {
-            obj->updateRowsOrder(rowsOrder, stateInfo);
+        if (rowsOrder != muscleTask->inputMA->getRowsIds()) {
+            obj->updateRowsOrder(stateInfo, rowsOrder);
         }
     }
     else if (config.op == MuscleTaskOp_ProfileToProfile) {
-        SAFE_POINT_EXT(muscleTask->inputMA.getNumRows() + config.profile.getNumRows() == muscleTask->resultMA.getNumRows(),
+        SAFE_POINT_EXT(muscleTask->inputMA->getNumRows() + config.profile->getNumRows() == muscleTask->resultMA->getNumRows(),
             stateInfo.setError("Failed to apply the result of Muscle"), ReportResult_Finished);
 
         U2OpStatus2Log os;
@@ -479,7 +481,7 @@ Task::ReportResult MuscleGObjectTask::report() {
             return ReportResult_Finished;
         }
 
-        obj->setMAlignment(muscleTask->resultMA);
+        obj->setMultipleAlignment(muscleTask->resultMA);
     }
 
     return ReportResult_Finished;
@@ -509,7 +511,7 @@ MuscleWithExtFileSpecifySupportTask::~MuscleWithExtFileSpecifySupportTask() {
 void MuscleWithExtFileSpecifySupportTask::prepare(){
     DocumentFormatConstraints c;
     c.checkRawData = true;
-    c.supportedObjectTypes += GObjectTypes::MULTIPLE_ALIGNMENT;
+    c.supportedObjectTypes += GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT;
     c.rawData = IOAdapterUtils::readFileHeader(config.inputFilePath);
     c.addFlagToExclude(DocumentFormatFlag_CannotBeCreated);
     QList<DocumentFormatId> formats = AppContext::getDocumentFormatRegistry()->selectFormats(c);
@@ -541,7 +543,7 @@ QList<Task*> MuscleWithExtFileSpecifySupportTask::onSubTaskFinished(Task* subTas
         currentDocument = loadDocumentTask->takeDocument();
         SAFE_POINT(currentDocument != NULL, QString("Failed loading document: %1").arg(loadDocumentTask->getURLString()), res);
         SAFE_POINT(currentDocument->getObjects().length() == 1, QString("Number of objects != 1 : %1").arg(loadDocumentTask->getURLString()), res);
-        mAObject=qobject_cast<MAlignmentObject*>(currentDocument->getObjects().first());
+        mAObject=qobject_cast<MultipleSequenceAlignmentObject*>(currentDocument->getObjects().first());
         SAFE_POINT(mAObject != NULL, QString("MA object not found!: %1").arg(loadDocumentTask->getURLString()), res);
         if (config.alignRegion) {
             if((config.regionToAlign.startPos > mAObject->getLength())
@@ -574,11 +576,11 @@ Task::ReportResult MuscleWithExtFileSpecifySupportTask::report(){
 
 //////////////////////////////////
 //MuscleGObjectRunFromSchemaTask
-MuscleGObjectRunFromSchemaTask::MuscleGObjectRunFromSchemaTask(MAlignmentObject * obj, const MuscleTaskSettings & c)
+MuscleGObjectRunFromSchemaTask::MuscleGObjectRunFromSchemaTask(MultipleSequenceAlignmentObject * obj, const MuscleTaskSettings & c)
 : AlignGObjectTask("", TaskFlags_NR_FOSCOE, obj), config(c)
 {
     setMAObject(obj);
-    SAFE_POINT_EXT(config.profile.isEmpty(), setError("Invalid config profile detected"),);
+    SAFE_POINT_EXT(config.profile->isEmpty(), setError("Invalid config profile detected"),);
 
     setUseDescriptionFromSubtask(true);
     setVerboseLogMode(true);
@@ -597,7 +599,7 @@ void MuscleGObjectRunFromSchemaTask::prepare() {
     addSubTask(new SimpleMSAWorkflow4GObjectTask(tr("Workflow wrapper '%1'").arg(getTaskName()), obj, conf));
 }
 
-void MuscleGObjectRunFromSchemaTask::setMAObject(MAlignmentObject* maobj) {
+void MuscleGObjectRunFromSchemaTask::setMAObject(MultipleSequenceAlignmentObject* maobj) {
     SAFE_POINT_EXT(maobj != NULL, setError("Invalid MSA object detected"),);
     const Document* maDoc = maobj->getDocument();
     SAFE_POINT_EXT(NULL != maDoc, setError("Invalid MSA document detected"),);
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleTask.h b/src/plugins_3rdparty/umuscle/src/MuscleTask.h
index b571a7d..c529d6e 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleTask.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,19 +22,21 @@
 #ifndef _U2_MUSCLE_TASK_H_
 #define _U2_MUSCLE_TASK_H_
 
-#include <QtCore/QPointer>
-#include <U2Core/Task.h>
-#include <U2Core/MAlignmentObject.h>
+#include <QPointer>
+
+#include <U2Algorithm/MsaUtilTasks.h>
+
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/SaveDocumentTask.h>
-#include <U2Algorithm/MAlignmentUtilTasks.h>
 #include <U2Core/U2Mod.h>
+#include <U2Core/U2Region.h>
 
 class MuscleContext;
 
 namespace U2 {
 
 class StateLock;
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 class LoadDocumentTask;
 class MuscleParallelTask;
 
@@ -68,7 +70,7 @@ public:
     U2Region         regionToAlign;
 
     //used only for MuscleTaskOp_AddUnalignedToProfile and MuscleTaskOp_ProfileToProfile
-    MAlignment      profile;
+    MultipleSequenceAlignment      profile;
 
     //number of threads: 0 - auto, 1 - serial
     int nThreads;
@@ -79,7 +81,7 @@ public:
 class MuscleTask : public Task {
     Q_OBJECT
 public:
-    MuscleTask(const MAlignment& ma, const MuscleTaskSettings& config);
+    MuscleTask(const MultipleSequenceAlignment& ma, const MuscleTaskSettings& config);
 
     void run();
 
@@ -90,11 +92,11 @@ public:
     ReportResult report();
 
     MuscleTaskSettings          config;
-    MAlignment                  inputMA;
-    MAlignment                  resultMA;
+    MultipleSequenceAlignment                  inputMA;
+    MultipleSequenceAlignment                  resultMA;
 
-    MAlignment                  inputSubMA;
-    MAlignment                  resultSubMA;
+    MultipleSequenceAlignment                  inputSubMA;
+    MultipleSequenceAlignment                  resultSubMA;
 
     MuscleContext*              ctx;
     MuscleParallelTask*         parallelSubTask;
@@ -104,22 +106,22 @@ class MuscleAddSequencesToProfileTask : public Task {
     Q_OBJECT
 public:
     enum MMode {Profile2Profile, Sequences2Profile};
-    MuscleAddSequencesToProfileTask(MAlignmentObject* obj, const QString& fileWithSequencesOrProfile, MMode mode);
+    MuscleAddSequencesToProfileTask(MultipleSequenceAlignmentObject* obj, const QString& fileWithSequencesOrProfile, MMode mode);
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 
     ReportResult report();
     
-    QPointer<MAlignmentObject>  maObj;
+    QPointer<MultipleSequenceAlignmentObject>  maObj;
     LoadDocumentTask*           loadTask;
     MMode                       mode;
 };
 
-//locks MAlignment object and propagate MuscleTask results to it
+//locks MultipleSequenceAlignment object and propagate MuscleTask results to it
 class  MuscleGObjectTask : public AlignGObjectTask {
     Q_OBJECT
 public:
-    MuscleGObjectTask(MAlignmentObject* obj, const MuscleTaskSettings& config);
+    MuscleGObjectTask(MultipleSequenceAlignmentObject* obj, const MuscleTaskSettings& config);
     ~MuscleGObjectTask();
 
     virtual void prepare();
@@ -141,7 +143,7 @@ public:
 
     QList<Task*> onSubTaskFinished(Task* subTask);
 private:
-    MAlignmentObject*   mAObject;
+    MultipleSequenceAlignmentObject*   mAObject;
     Document*           currentDocument;
     bool                cleanDoc;
 
@@ -166,10 +168,10 @@ private:
 class MuscleGObjectRunFromSchemaTask : public AlignGObjectTask {
     Q_OBJECT
 public:
-    MuscleGObjectRunFromSchemaTask(MAlignmentObject * obj, const MuscleTaskSettings & config);
+    MuscleGObjectRunFromSchemaTask(MultipleSequenceAlignmentObject * obj, const MuscleTaskSettings & config);
 
     void prepare();
-    void setMAObject(MAlignmentObject* maobj);
+    void setMAObject(MultipleSequenceAlignmentObject* maobj);
 private:
     MuscleTaskSettings config;
 };
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp b/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
index ff68ba5..c812cbe 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleUtils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@
 #include "MuscleAdapter.h"
 
 #include <algorithm>
-#include <QtCore/QVector>
+#include <QVector>
 
 namespace U2 {
 
@@ -98,22 +98,22 @@ void setupAlphaAndScore(const DNAAlphabet* al, TaskStateInfo& ti) {
     }
 }
 
-void convertMAlignment2MSA(MSA& muscleMSA, const MAlignment& ma, bool fixAlpha) {    
+void convertMAlignment2MSA(MSA& muscleMSA, const MultipleSequenceAlignment& ma, bool fixAlpha) {    
     MuscleContext *ctx = getMuscleContext();
-    ctx->fillUidsVectors(ma.getNumRows());
-    for (int i=0, n = ma.getNumRows(); i<n; i++) {
-        const MAlignmentRow& row = ma.getRow(i);
+    ctx->fillUidsVectors(ma->getNumRows());
+    for (int i=0, n = ma->getNumRows(); i<n; i++) {
+        const MultipleSequenceAlignmentRow row = ma->getMsaRow(i);
         
-        int coreLen = row.getCoreLength();
-        int maLen = ma.getLength();
+        int coreLen = row->getCoreLength();
+        int maLen = ma->getLength();
         char* seq  = new char[maLen + 1];
-        memcpy(seq, row.getCore().constData(), coreLen);
+        memcpy(seq, row->getCore().constData(), coreLen);
         memset(seq + coreLen, '-', maLen - coreLen + 1);
         seq[maLen] = 0;
 
-        char* name = new char[row.getName().length() + 1];
-        memcpy(name, row.getName().toLocal8Bit().constData(), row.getName().length());
-        name[row.getName().length()] = '\0';
+        char* name = new char[row->getName().length() + 1];
+        memcpy(name, row->getName().toLocal8Bit().constData(), row->getName().length());
+        name[row->getName().length()] = '\0';
         
         muscleMSA.AppendSeq(seq, maLen, name);
         ctx->tmp_uIds[i] = ctx->input_uIds[i];
@@ -123,20 +123,20 @@ void convertMAlignment2MSA(MSA& muscleMSA, const MAlignment& ma, bool fixAlpha)
     }
 }
 
-void convertMAlignment2SecVect(SeqVect& sv, const MAlignment& ma, bool fixAlpha) {
+void convertMAlignment2SecVect(SeqVect& sv, const MultipleSequenceAlignment& ma, bool fixAlpha) {
     sv.Clear();
 
     MuscleContext *ctx = getMuscleContext();
-    ctx->fillUidsVectors(ma.getNumRows());
+    ctx->fillUidsVectors(ma->getNumRows());
 
     unsigned i=0;
     unsigned seq_count = 0;
-    foreach(const MAlignmentRow& row, ma.getRows()) {
+    foreach(const MultipleSequenceAlignmentRow& row, ma->getMsaRows()) {
         Seq *ptrSeq = new Seq();
-        QByteArray name =  row.getName().toLocal8Bit();
-        ptrSeq->FromString(row.getCore().constData(), name.constData());
+        QByteArray name =  row->getName().toLocal8Bit();
+        ptrSeq->FromString(row->getCore().constData(), name.constData());
         //stripping gaps, original Seq::StripGaps fails on MSVC9
-        Seq::iterator newEnd = std::remove(ptrSeq->begin(), ptrSeq->end(), MAlignment_GapChar);
+        Seq::iterator newEnd = std::remove(ptrSeq->begin(), ptrSeq->end(), U2Msa::GAP_CHAR);
         ptrSeq->erase(newEnd, ptrSeq->end());
         if (ptrSeq->Length()!=0) {
             ctx->tmp_uIds[seq_count] = ctx->input_uIds[i];
@@ -150,10 +150,10 @@ void convertMAlignment2SecVect(SeqVect& sv, const MAlignment& ma, bool fixAlpha)
     }
 }
 
-void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MAlignment& res) {
-    assert(res.isEmpty());
+void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MultipleSequenceAlignment& res) {
+    assert(res->isEmpty());
     MuscleContext *ctx = getMuscleContext();
-    res.setAlphabet(al);
+    res->setAlphabet(al);
     ctx->output_uIds.clear();
 
     for(int i=0, n = msa.GetSeqCount(); i < n; i++) {
@@ -165,12 +165,11 @@ void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MAlignment& res) {
             seq.append(c);
         }
         ctx->output_uIds.append(ctx->tmp_uIds[msa.GetSeqId(i)]);
-        U2OpStatus2Log os;
-        res.addRow(name, seq, os);
+        res->addRow(name, seq);
     }
 }
 
-void prepareAlignResults(MSA& msa, const DNAAlphabet* al, MAlignment& ma, bool mhack) {
+void prepareAlignResults(MSA& msa, const DNAAlphabet* al, MultipleSequenceAlignment& ma, bool mhack) {
     if (mhack) {
         MHackEnd(msa);
     }
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleUtils.h b/src/plugins_3rdparty/umuscle/src/MuscleUtils.h
index 3011228..869592b 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleUtils.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleUtils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -34,7 +34,7 @@
 
 #include <U2Core/Task.h>
 
-#include <U2Core/MAlignment.h>
+#include <U2Core/MultipleSequenceAlignment.h>
 
 class MuscleContext;
 
@@ -60,10 +60,10 @@ private:
 int ugene_printf(FILE *f, const char *format, ...);
 ALPHA convertAlpha(const DNAAlphabet* al);
 void setupAlphaAndScore(const DNAAlphabet* al, TaskStateInfo& ti);
-void convertMAlignment2MSA(MSA& muscleMSA, const MAlignment& ma, bool fixAlpha);
-void convertMAlignment2SecVect(SeqVect& sv, const MAlignment& ma, bool fixAlpha);
-void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MAlignment& res);
-void prepareAlignResults(MSA& msa, const DNAAlphabet* al, MAlignment& ma, bool mhack);
+void convertMAlignment2MSA(MSA& muscleMSA, const MultipleSequenceAlignment& ma, bool fixAlpha);
+void convertMAlignment2SecVect(SeqVect& sv, const MultipleSequenceAlignment& ma, bool fixAlpha);
+void convertMSA2MAlignment(MSA& msa, const DNAAlphabet* al, MultipleSequenceAlignment& res);
+void prepareAlignResults(MSA& msa, const DNAAlphabet* al, MultipleSequenceAlignment& ma, bool mhack);
 
 } //namespace
 
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
index b8cf906..b64dd39 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,10 +24,8 @@
 
 namespace U2 {
 
-    extern Logger log;
-
-    MuscleWorkPool::MuscleWorkPool(MuscleContext *_ctx, const MuscleTaskSettings  &_config, TaskStateInfo& _ti, int _nThreads, const MAlignment& _ma, MAlignment& _res, bool _mhack)
-        :ctx(_ctx), config(_config), ma(_ma), res(_res), mhack(_mhack), Weights(NULL), ProgNodes(NULL), ph(NULL), ti(_ti),
+    MuscleWorkPool::MuscleWorkPool(MuscleContext *_ctx, const MuscleTaskSettings  &_config, TaskStateInfo& _ti, int _nThreads, const MultipleSequenceAlignment& _ma, MultipleSequenceAlignment& _res, bool _mhack)
+        :ctx(_ctx), config(_config), ma(_ma->getCopy()), res(_res), mhack(_mhack), Weights(NULL), ProgNodes(NULL), ph(NULL), ti(_ti),
         treeNodeStatus(NULL), treeNodeIndexes(NULL), nThreads(_nThreads), uJoin(0), ptrbOscillating(NULL), bAnyAccepted(false), InternalNodeIndexes(NULL), uInternalNodeCount(0),
         bReversed(false), bRight(false), History(NULL), bLockLeft(NULL), bLockRight(false), msaIn(NULL)
     {
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
index a319323..a53043a 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorkPool.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,9 +25,9 @@
 #include "MuscleParallel.h"
 #include "MuscleUtils.h"
 
-#include <QtCore/QMutex>
-#include <QtCore/QMutexLocker>
-#include <QtCore/QSemaphore>
+#include <QMutex>
+#include <QMutexLocker>
+#include <QSemaphore>
 
 #include "muscle/scorehistory.h"
 
@@ -48,7 +48,7 @@ namespace U2 {
     };
 
     struct MuscleWorkPool {
-        MuscleWorkPool(MuscleContext *_ctx, const MuscleTaskSettings  &_config, TaskStateInfo& _ti, int _nThreads, const MAlignment& _ma, MAlignment& _res, bool _mhack);
+        MuscleWorkPool(MuscleContext *_ctx, const MuscleTaskSettings  &_config, TaskStateInfo& _ti, int _nThreads, const MultipleSequenceAlignment& _ma, MultipleSequenceAlignment& _res, bool _mhack);
             
         ~MuscleWorkPool() ;
 
@@ -57,8 +57,8 @@ namespace U2 {
 
         MuscleContext       *ctx;
         const MuscleTaskSettings  &config;
-        MAlignment          ma;
-        MAlignment&         res;
+        MultipleSequenceAlignment          ma;
+        MultipleSequenceAlignment&         res;
         bool                mhack;
         SeqVect             v;
         Tree                GuideTree;
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorker.cpp b/src/plugins_3rdparty/umuscle/src/MuscleWorker.cpp
index a4acc96..8d703fd 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorker.cpp
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,29 +19,27 @@
  * MA 02110-1301, USA.
  */
 
-#include "MuscleWorker.h"
-#include "MuscleConstants.h"
-#include "TaskLocalStorage.h"
-#include "MuscleAlignDialogController.h"
-
 #include <U2Core/FailTask.h>
 #include <U2Core/Log.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/U2SafePoints.h>
 
 #include <U2Designer/DelegateEditors.h>
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
 #include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
 #include <U2Lang/CoreLibConstants.h>
+#include <U2Lang/IntegralBusModel.h>
 #include <U2Lang/NoFailTaskWrapper.h>
+#include <U2Lang/WorkflowEnv.h>
 
-
-/* TRANSLATOR U2::LocalWorkflow::MuscleWorker */
+#include "MuscleAlignDialogController.h"
+#include "MuscleConstants.h"
+#include "MuscleWorker.h"
+#include "TaskLocalStorage.h"
 
 namespace U2 {
 namespace LocalWorkflow {
@@ -56,7 +54,6 @@ static const QString STABLE_ATTR("stable");
 static const QString MAX_ITERATIONS_ATTR("max-iterations");
 static const QString RANGE_ATTR("range");
 static const QString RANGE_ATTR_DEFAULT_VALUE("Whole alignment");
-static const QString RANGE_ERR_MSG(QObject::tr("Region should be set as 'start..end', start should be less than end, e.g. '1..100'"));
 
 void MuscleWorkerFactory::init() {
     QList<PortDescriptor*> p; QList<Attribute*> a;
@@ -168,38 +165,38 @@ Task* MuscleWorker::tick() {
         
         QVariantMap qm = inputMessage.getData().toMap();
         SharedDbiDataHandler msaId = qm.value(BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> msaObj(StorageUtils::getMsaObject(context->getDataStorage(), msaId));
         SAFE_POINT(!msaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &msa = msaObj->getMAlignment();
+        const MultipleSequenceAlignment msa = msaObj->getMultipleAlignment();
 
-        if( msa.isEmpty() ) {
-            algoLog.error(tr("An empty MSA '%1' has been supplied to MUSCLE.").arg(msa.getName()));
+        if( msa->isEmpty() ) {
+            algoLog.error(tr("An empty MSA '%1' has been supplied to MUSCLE.").arg(msa->getName()));
             return NULL;
         }
         QString range = actor->getParameter(RANGE_ATTR)->getAttributeValue<QString>(context);
         if( range.isEmpty() || range == RANGE_ATTR_DEFAULT_VALUE ) {
             cfg.alignRegion = false;
-            cfg.regionToAlign = U2Region(0, msa.getLength());
+            cfg.regionToAlign = U2Region(0, msa->getLength());
         } else {
             QStringList words = range.split(".", QString::SkipEmptyParts);
             if( words.size() != 2 ) {
-                return new FailTask(RANGE_ERR_MSG);
+                return new FailTask(QObject::tr("Region should be set as 'start..end', start should be less than end, e.g. '1..100'"));
             }
             bool ok = false;
             int start = words.at(0).toInt(&ok) - 1;
             if(!ok) {
-                return new FailTask(RANGE_ERR_MSG);
+                return new FailTask(QObject::tr("Region should be set as 'start..end', start should be less than end, e.g. '1..100'"));
             }
             start = qMax(1, start);
             ok = false;
             int end = words.at(1).toInt(&ok) - 1;
             if(!ok) {
-                return new FailTask(RANGE_ERR_MSG);
+                return new FailTask(QObject::tr("Region should be set as 'start..end', start should be less than end, e.g. '1..100'"));
             }
             if(end < start) {
                 return new FailTask(tr("Region end position should be greater than start position"));
             }
-            end = qMin(end, msa.getLength());
+            end = qMin(end, msa->getLength());
             
             cfg.alignRegion = true;
             cfg.regionToAlign = U2Region(start,  end - start + 1);
@@ -231,7 +228,7 @@ void MuscleWorker::sl_taskFinished() {
     QVariantMap msgData;
     msgData[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(msaId);
     output->put(Message(BaseTypes::MULTIPLE_ALIGNMENT_TYPE(), msgData));
-    algoLog.info(tr("Aligned %1 with MUSCLE").arg(t->resultMA.getName()));
+    algoLog.info(tr("Aligned %1 with MUSCLE").arg(t->resultMA->getName()));
 }
 
 void MuscleWorker::cleanup() {
diff --git a/src/plugins_3rdparty/umuscle/src/MuscleWorker.h b/src/plugins_3rdparty/umuscle/src/MuscleWorker.h
index e817930..3a338ca 100644
--- a/src/plugins_3rdparty/umuscle/src/MuscleWorker.h
+++ b/src/plugins_3rdparty/umuscle/src/MuscleWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.cpp b/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.cpp
index 47d6cbb..8ba15ff 100644
--- a/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.cpp
+++ b/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
 #include <U2Core/AppResources.h>
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 #include <U2Core/U2AlphabetUtils.h>
 #include <U2Core/U2OpStatusUtils.h>
 
@@ -69,14 +69,14 @@ Task * ProfileToProfileWorker::tick() {
 
         QVariantMap qm = m.getData().toMap();
         SharedDbiDataHandler masterMsaId = qm.value(MASTER_PROFILE_SLOT_ID).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> masterMsaObj(StorageUtils::getMsaObject(context->getDataStorage(), masterMsaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> masterMsaObj(StorageUtils::getMsaObject(context->getDataStorage(), masterMsaId));
         SAFE_POINT(!masterMsaObj.isNull(), "NULL MSA Object!", NULL);
-        const MAlignment &masterMsa = masterMsaObj->getMAlignment();
+        const MultipleSequenceAlignment masterMsa = masterMsaObj->getMultipleAlignment();
 
         SharedDbiDataHandler secondMsaId = qm.value(SECOND_PROFILE_SLOT_ID).value<SharedDbiDataHandler>();
-        QScopedPointer<MAlignmentObject> secondMsaObj(StorageUtils::getMsaObject(context->getDataStorage(), secondMsaId));
+        QScopedPointer<MultipleSequenceAlignmentObject> secondMsaObj(StorageUtils::getMsaObject(context->getDataStorage(), secondMsaId));
         SAFE_POINT(!secondMsaObj.isNull(), "NULL MSA Object!", NULL);
-        MAlignment secondMsa = secondMsaObj->getMAlignment();
+        const MultipleSequenceAlignment secondMsa = secondMsaObj->getMultipleAlignment();
 
         Task *t = new ProfileToProfileTask(masterMsa, secondMsa);
         connect(t, SIGNAL(si_stateChanged()), SLOT(sl_taskFinished()));
@@ -89,7 +89,7 @@ Task * ProfileToProfileWorker::tick() {
 }
 
 void ProfileToProfileWorker::cleanup() {
-    foreach (MAlignmentObject *obj, objects) {
+    foreach (MultipleSequenceAlignmentObject *obj, objects) {
         delete obj;
     }
     objects.clear();
@@ -105,23 +105,25 @@ void ProfileToProfileWorker::sl_taskFinished() {
     }
 
     if (outPort) {
-        QVariantMap channelContext = outPort->getContext();
-        MAlignment resultAl = t->getResult();
-        resultAl.setName("Aligned");
+        MultipleSequenceAlignment resultAl = t->getResult();
+        resultAl->setName("Aligned");
         SharedDbiDataHandler msaId = context->getDataStorage()->putAlignment(resultAl);
         QVariantMap msgData;
         msgData[BaseSlots::MULTIPLE_ALIGNMENT_SLOT().getId()] = qVariantFromValue<SharedDbiDataHandler>(msaId);
         outPort->put(Message(BaseTypes::MULTIPLE_ALIGNMENT_TYPE(), msgData));
-        algoLog.info(tr("Aligned profile to profile with MUSCLE").arg(t->getResult().getName()));
+        algoLog.info(tr("Aligned profile to profile with MUSCLE").arg(t->getResult()->getName()));
     }
 }
 
 /************************************************************************/
 /* Task */
 /************************************************************************/
-ProfileToProfileTask::ProfileToProfileTask(const MAlignment &_masterMsa, MAlignment &_secondMsa)
-: Task("Align profile to profile with MUSCLE", TaskFlag_NoRun), masterMsa(_masterMsa), secondMsa(_secondMsa),
-seqIdx(0), subtaskCount(0)
+ProfileToProfileTask::ProfileToProfileTask(const MultipleSequenceAlignment &masterMsa, const MultipleSequenceAlignment &secondMsa)
+    : Task(tr("Align profile to profile with MUSCLE"), TaskFlag_NoRun),
+      masterMsa(masterMsa->getExplicitCopy()),
+      secondMsa(secondMsa->getExplicitCopy()),
+      seqIdx(0),
+      subtaskCount(0)
 {
 
 }
@@ -134,9 +136,9 @@ void ProfileToProfileTask::prepare() {
     int maxThreads = 1;//AppContext::getAppSettings()->getAppResourcePool()->getIdealThreadCount();
     setMaxParallelSubtasks(maxThreads);
 
-    U2OpStatus2Log os;
-    foreach (const MAlignmentRow &row, masterMsa.getRows()) {
-        result.addRow(row.getRowDBInfo(), row.getSequence(), os);
+    foreach (const MultipleSequenceAlignmentRow &row, masterMsa->getMsaRows()) {
+        result->addRow(row->getRowDbInfo(), row->getSequence(), stateInfo);
+        CHECK_OP(stateInfo, );
     }
 
     QList<Task*> tasks = createAlignTasks();
@@ -161,7 +163,7 @@ QList<Task*> ProfileToProfileTask::onSubTaskFinished(Task *subTask) {
     return tasks;
 }
 
-const MAlignment & ProfileToProfileTask::getResult() {
+const MultipleSequenceAlignment & ProfileToProfileTask::getResult() {
     U2AlphabetUtils::assignAlphabet(result);
     return result;
 }
@@ -171,10 +173,10 @@ void ProfileToProfileTask::appendResult(Task *task) {
     MuscleTask *t = dynamic_cast<MuscleTask*>(task);
     SAFE_POINT(NULL != t, "NULL Muscle task!",);
 
-    const QList<MAlignmentRow> &newRows = t->resultMA.getRows();
-    if (newRows.size() == masterMsa.getRows().size() + 1) {
+    const QList<MultipleSequenceAlignmentRow> newRows = t->resultMA->getMsaRows();
+    if (newRows.size() == masterMsa->getMsaRows().size() + 1) {
         U2OpStatus2Log os;
-        result.addRow(newRows.last().getRowDBInfo(), newRows.last().getSequence(), os);
+        result->addRow(newRows.last()->getRowDbInfo(), newRows.last()->getSequence(), os);
     }
 }
 
@@ -184,8 +186,8 @@ QList<Task*> ProfileToProfileTask::createAlignTasks() {
         U2OpStatus2Log os;
         MuscleTaskSettings cfg;
         cfg.op = MuscleTaskOp_ProfileToProfile;
-        cfg.profile.addRow(secondMsa.getRow(seqIdx).getRowDBInfo(), secondMsa.getRow(seqIdx).getSequence(), os);
-        cfg.profile.setAlphabet(secondMsa.getAlphabet());
+        cfg.profile->addRow(secondMsa->getMsaRow(seqIdx)->getRowDbInfo(), secondMsa->getMsaRow(seqIdx)->getSequence(), os);
+        cfg.profile->setAlphabet(secondMsa->getAlphabet());
 
         tasks << new MuscleTask(masterMsa, cfg);
 
@@ -197,7 +199,7 @@ QList<Task*> ProfileToProfileTask::createAlignTasks() {
 }
 
 bool ProfileToProfileTask::canCreateTask() const {
-    return (seqIdx < secondMsa.getRows().size())
+    return (seqIdx < secondMsa->getMsaRows().size())
         && (subtaskCount < getMaxParallelSubtasks());
 }
 
diff --git a/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.h b/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.h
index 3606846..ad6b48f 100644
--- a/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.h
+++ b/src/plugins_3rdparty/umuscle/src/ProfileToProfileWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,14 @@
 #ifndef _U2_PROFILE_TO_PROFILE_WORKER_H_
 #define _U2_PROFILE_TO_PROFILE_WORKER_H_
 
-#include <U2Core/MAlignmentObject.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
 
 #include <U2Lang/LocalDomain.h>
 #include <U2Lang/WorkflowUtils.h>
 
 namespace U2 {
 
-class MAlignmentObject;
+class MultipleSequenceAlignmentObject;
 
 namespace LocalWorkflow {
 
@@ -49,7 +49,7 @@ private:
     IntegralBus *inPort;
     IntegralBus *outPort;
 
-    QList<MAlignmentObject*> objects;
+    QList<MultipleSequenceAlignmentObject*> objects;
 };
 
 class ProfileToProfileWorkerFactory : public DomainFactory {
@@ -73,19 +73,20 @@ protected:
 };
 
 class ProfileToProfileTask : public Task {
+    Q_OBJECT
 public:
-    ProfileToProfileTask(const MAlignment &masterMsa, MAlignment &secondMsa);
+    ProfileToProfileTask(const MultipleSequenceAlignment &masterMsa, const MultipleSequenceAlignment &secondMsa);
     ~ProfileToProfileTask();
 
     virtual void prepare();
     virtual QList<Task*> onSubTaskFinished(Task *subTask);
 
-    const MAlignment & getResult();
+    const MultipleSequenceAlignment & getResult();
 
 private:
-    MAlignment masterMsa;
-    MAlignment secondMsa;
-    MAlignment result;
+    MultipleSequenceAlignment masterMsa;
+    MultipleSequenceAlignment secondMsa;
+    MultipleSequenceAlignment result;
     int seqIdx;
     int subtaskCount;
 
diff --git a/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.cpp b/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.cpp
index 6fc39a7..ecb25e9 100644
--- a/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.cpp
+++ b/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.h b/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.h
index ab4523c..a60bf85 100644
--- a/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.h
+++ b/src/plugins_3rdparty/umuscle/src/TaskLocalStorage.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _UMUSCLE_TASK_LOCAL_STORAGE_
 #define _UMUSCLE_TASK_LOCAL_STORAGE_
 
-#include <QtCore/QThreadStorage>
+#include <QThreadStorage>
 
 class MuscleContext;
 
diff --git a/src/plugins_3rdparty/umuscle/src/muscle/globals.cpp b/src/plugins_3rdparty/umuscle/src/muscle/globals.cpp
index d28010b..8d68e85 100644
--- a/src/plugins_3rdparty/umuscle/src/muscle/globals.cpp
+++ b/src/plugins_3rdparty/umuscle/src/muscle/globals.cpp
@@ -229,7 +229,7 @@ void SetLogFile()
 	strcpy(g_strListFileName, strFileName);
 	}
 
-// Get filename, stripping any extension and directory parts.
+// Get filename, stripping any extension and folder parts.
 void NameFromPath(const char szPath[], char szName[], unsigned uBytes)
 	{
 	if (0 == uBytes)
diff --git a/src/plugins_3rdparty/umuscle/src/refinehorizP.cpp b/src/plugins_3rdparty/umuscle/src/refinehorizP.cpp
index 84f7da3..05b5d37 100644
--- a/src/plugins_3rdparty/umuscle/src/refinehorizP.cpp
+++ b/src/plugins_3rdparty/umuscle/src/refinehorizP.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/umuscle/src/refinevertP.cpp b/src/plugins_3rdparty/umuscle/src/refinevertP.cpp
index e9bd756..c0b8ef9 100644
--- a/src/plugins_3rdparty/umuscle/src/refinevertP.cpp
+++ b/src/plugins_3rdparty/umuscle/src/refinevertP.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.cpp b/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.cpp
index 381553c..822198b 100644
--- a/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.cpp
+++ b/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,36 +19,34 @@
  * MA 02110-1301, USA.
  */
 
-#include "umuscleTests.h"
-#include "MuscleConstants.h"
-#include "MuscleTask.h"
-#include "MuscleParallel.h"
-
-#include <U2Core/LoadDocumentTask.h>
-#include <U2Core/SaveDocumentTask.h>
+#include <QDir>
+#include <QtMath>
 
-#include <U2Core/DocumentModel.h>
-#include <U2Core/BaseDocumentFormats.h>
 #include <U2Core/AppContext.h>
+#include <U2Core/BaseDocumentFormats.h>
+#include <U2Core/DNASequenceObject.h>
+#include <U2Core/DocumentModel.h>
+#include <U2Core/GObjectTypes.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
+#include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
-
-#include <U2Core/GObjectTypes.h>
-#include <U2Core/MAlignmentImporter.h>
-#include <U2Core/MAlignmentObject.h>
-#include <U2Core/DNASequenceObject.h>
-
+#include <U2Core/MultipleSequenceAlignmentImporter.h>
+#include <U2Core/MultipleSequenceAlignmentObject.h>
+#include <U2Core/SaveDocumentTask.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QDir>
+#include "umuscleTests.h"
+#include "MuscleConstants.h"
+#include "MuscleTask.h"
+#include "MuscleParallel.h"
 
 /* TRANSLATOR U2::GTest*/
 
 namespace U2 {
 
-extern double QScore(const MAlignment& maTest, const MAlignment& maRef, TaskStateInfo& ti);
+extern double QScore(const MultipleSequenceAlignment& maTest, const MultipleSequenceAlignment& maRef, TaskStateInfo& ti);
 
 #define OUT_FILE_NAME_ATTR "out"
 #define IN_FILE_NAME_ATTR "in"
@@ -152,19 +150,19 @@ void GTest_uMuscle::prepare() {
         return;
     }
 
-    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> list = doc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (list.size() == 0) {
-        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("container of object with type \"%1\" is empty").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
 
     GObject *obj = list.first();
     if(obj==NULL){
-        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_ALIGNMENT) );
+        stateInfo.setError(  QString("object with type \"%1\" not found").arg(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT) );
         return;
     }
     assert(obj!=NULL);
-    MAlignmentObject* ma = qobject_cast<MAlignmentObject*>(obj);
+    MultipleSequenceAlignmentObject* ma = qobject_cast<MultipleSequenceAlignmentObject*>(obj);
     if(ma==NULL){
         stateInfo.setError(  QString("error can't cast to multiple alignment from GObject") );
         return;
@@ -241,8 +239,8 @@ Task::ReportResult GTest_CompareMAlignment::report() {
         return ReportResult_Finished;
     }
 
-    QList<GObject*> objs1 = doc1->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
-    QList<GObject*> objs2 = doc2->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> objs1 = doc1->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
+    QList<GObject*> objs2 = doc2->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
 
     if(objs1.size()!=objs2.size()) {
         stateInfo.setError(  QString("MAlignmentObjects count not matched %1, expected %2").arg(objs1.size()).arg(objs2.size()) );
@@ -251,33 +249,33 @@ Task::ReportResult GTest_CompareMAlignment::report() {
 
     int listSize = objs1.size();
     for (int i=0;i<listSize;i++) {
-        MAlignmentObject* ma1 = qobject_cast<MAlignmentObject*>(objs1.at(i));
-        MAlignmentObject* ma2 = qobject_cast<MAlignmentObject*>(objs2.at(i));
-        const QList<MAlignmentRow> alignedSeqs1 = ma1->getMAlignment().getRows();
-        const QList<MAlignmentRow> alignedSeqs2 = ma2->getMAlignment().getRows();
+        MultipleSequenceAlignmentObject* ma1 = qobject_cast<MultipleSequenceAlignmentObject*>(objs1.at(i));
+        MultipleSequenceAlignmentObject* ma2 = qobject_cast<MultipleSequenceAlignmentObject*>(objs2.at(i));
+        const QList<MultipleSequenceAlignmentRow> alignedSeqs1 = ma1->getMsa()->getMsaRows();
+        const QList<MultipleSequenceAlignmentRow> alignedSeqs2 = ma2->getMsa()->getMsaRows();
         if(ma1->objectName()!=ma2->objectName()) {
             stateInfo.setError(  QString("MAlignmentObjects name not matched \"%1\", expected \"%2\"").arg(ma1->objectName()).arg(ma2->objectName()) );
             return ReportResult_Finished;
         }
-        foreach(const MAlignmentRow &maItem1, alignedSeqs1) {
+        foreach(const MultipleSequenceAlignmentRow &maItem1, alignedSeqs1) {
             bool nameFound = false;
-            foreach(const MAlignmentRow &maItem2, alignedSeqs2) {
-                if (maItem1.getName() == maItem2.getName()) {
+            foreach(const MultipleSequenceAlignmentRow &maItem2, alignedSeqs2) {
+                if (maItem1->getName() == maItem2->getName()) {
                     nameFound = true;
-                    int l1 = maItem1.getCoreEnd();
-                    int l2 = maItem2.getCoreEnd();
+                    int l1 = maItem1->getCoreEnd();
+                    int l2 = maItem2->getCoreEnd();
                     if(l1!=l2) {
-                        stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(l1).arg(l2) );
+                        stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(l1).arg(l2) );
                         return ReportResult_Finished;
                     }
-                    if (maItem1 != maItem2) {
-                        stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(QString(maItem1.getCore())).arg(QString(maItem2.getCore())) );
+                    if (*maItem1 != *maItem2) {
+                        stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(QString(maItem1->getCore())).arg(QString(maItem2->getCore())) );
                         return ReportResult_Finished;
                     }
                 }
             }
             if (!nameFound) {
-                stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1.getName()) );
+                stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1->getName()) );
             }
 
         }
@@ -343,12 +341,12 @@ void GTest_uMuscleAddUnalignedSequenceToProfile::prepare() {
         stateInfo.setError(  QString("sequence document not found in context: %1").arg(seqDocName) );
         return;
     }
-    QList<GObject*> aliObjs = aliDoc->findGObjectByType(GObjectTypes::MULTIPLE_ALIGNMENT);
+    QList<GObject*> aliObjs = aliDoc->findGObjectByType(GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT);
     if (aliObjs.isEmpty()) {
         stateInfo.setError(  QString("no alignment object found in doc: %1").arg(aliDoc->getURLString()) );
         return;
     }
-    aliObj = qobject_cast<MAlignmentObject*>(aliObjs[0]);
+    aliObj = qobject_cast<MultipleSequenceAlignmentObject*>(aliObjs[0]);
     origAliSeqs = aliObj->getNumRows();
 
     QList<GObject*> seqObjs = seqDoc->findGObjectByType(GObjectTypes::SEQUENCE);
@@ -356,22 +354,20 @@ void GTest_uMuscleAddUnalignedSequenceToProfile::prepare() {
         stateInfo.setError(  QString("no sequence objects found in doc: %1").arg(seqDoc->getURLString()) );
         return;
     }
-    MAlignment unalignedMA;
-    unalignedMA.setAlphabet(aliObj->getAlphabet());
+    MultipleSequenceAlignment unalignedMA;
+    unalignedMA->setAlphabet(aliObj->getAlphabet());
     foreach (GObject* obj, seqObjs) {
         U2SequenceObject* dnaObj = qobject_cast<U2SequenceObject*>(obj);
         QByteArray seqData = dnaObj->getWholeSequenceData(stateInfo);
         CHECK_OP(stateInfo, );
-        U2OpStatus2Log os;
-        unalignedMA.addRow(dnaObj->getSequenceName(), seqData, os);
-        CHECK_OP_EXT(os, stateInfo.setError("An error has occurred during adding a row"),);
+        unalignedMA->addRow(dnaObj->getSequenceName(), seqData);
     }
-    if (unalignedMA.getNumRows()!=gapPositionsForSeqs.size()) {
+    if (unalignedMA->getNumRows()!=gapPositionsForSeqs.size()) {
         stateInfo.setError( QString("number of sequences not matches number of gaps in test: %1 sequences and %2 gap lines")
-            .arg(unalignedMA.getNumRows()).arg(gapPositionsForSeqs.size()) );
+            .arg(unalignedMA->getNumRows()).arg(gapPositionsForSeqs.size()) );
         return;
     }
-    resultAliSeqs = origAliSeqs + unalignedMA.getNumRows();
+    resultAliSeqs = origAliSeqs + unalignedMA->getNumRows();
 
     MuscleTaskSettings s;
     s.op = MuscleTaskOp_AddUnalignedToProfile;
@@ -390,28 +386,28 @@ Task::ReportResult GTest_uMuscleAddUnalignedSequenceToProfile::report() {
     if (hasError()) {
         return ReportResult_Finished;
     }
-    const MAlignment &ma = aliObj->getMAlignment();
-    if (ma.getLength()!=resultAliLen) {
-        stateInfo.setError(  QString("result alignment length notmatches: %1, expected: %2").arg(ma.getLength()).arg(resultAliLen) );
+    const MultipleSequenceAlignment msa = aliObj->getMultipleAlignment();
+    if (msa->getLength()!=resultAliLen) {
+        stateInfo.setError(  QString("result alignment length notmatches: %1, expected: %2").arg(msa->getLength()).arg(resultAliLen) );
         return ReportResult_Finished;
     }
 
-    if (resultAliSeqs!=ma.getNumRows()) {
-        stateInfo.setError(  QString("unexpected number of sequences in result: %1, expected: %2").arg(ma.getNumRows()).arg(resultAliSeqs) );
+    if (resultAliSeqs!=msa->getNumRows()) {
+        stateInfo.setError(  QString("unexpected number of sequences in result: %1, expected: %2").arg(msa->getNumRows()).arg(resultAliSeqs) );
         return ReportResult_Finished;
     }
 
     U2OpStatus2Log os;
-    for (int i = origAliSeqs, j = 0; i < ma.getNumRows(); i++, j++) {
-        const MAlignmentRow& row = ma.getRow(i);
-        QByteArray seq = row.toByteArray(ma.getLength(), os);
+    for (int i = origAliSeqs, j = 0; i < msa->getNumRows(); i++, j++) {
+        const MultipleSequenceAlignmentRow row = msa->getMsaRow(i);
+        QByteArray seq = row->toByteArray(os, msa->getLength());
         QList<int> seqGaps = gapPositionsForSeqs[j];
         for (int pos = 0; pos < seq.size(); pos++) {
             char c = seq[pos];
-            if (c == MAlignment_GapChar) {
+            if (c == U2Msa::GAP_CHAR) {
                 bool found = seqGaps.contains(pos);
                 if (!found) {
-                    stateInfo.setError(  QString("illegal gap found! pos: %1, sequence: %2").arg(pos).arg(row.getName()) );
+                    stateInfo.setError(  QString("illegal gap found! pos: %1, sequence: %2").arg(pos).arg(row->getName()) );
                     return ReportResult_Finished;
                 }
             }
@@ -419,8 +415,8 @@ Task::ReportResult GTest_uMuscleAddUnalignedSequenceToProfile::report() {
         for (int gap = 0; gap < seqGaps.size(); gap++) {
             int pos  = seqGaps[gap];
             char c = seq[pos];
-            if (c != MAlignment_GapChar) {
-                stateInfo.setError(  QString("gap not found! pos: %1, sequence: %2").arg(pos).arg(row.getName()) );
+            if (c != U2Msa::GAP_CHAR) {
+                stateInfo.setError(  QString("gap not found! pos: %1, sequence: %2").arg(pos).arg(row->getName()) );
                 return ReportResult_Finished;
             }
         }
@@ -505,11 +501,11 @@ void GTest_Muscle_Load_Align_QScore::prepare() {
     loadTask1->setSubtaskProgressWeight(0);
 }
 
-MAlignment GTest_Muscle_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
+MultipleSequenceAlignment GTest_Muscle_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
 
     int seqCount = dnaSeqs.count();
     U2SequenceObject *seq = qobject_cast<U2SequenceObject *>(dnaSeqs[0]);
-    MAlignment ma("Alignment",seq->getAlphabet());
+    MultipleSequenceAlignment ma("Alignment", seq->getAlphabet());
     for(int i=0; i<seqCount; i++) {
         seq = qobject_cast<U2SequenceObject *>(dnaSeqs[i]);
         if(seq == NULL) {
@@ -517,9 +513,8 @@ MAlignment GTest_Muscle_Load_Align_QScore::dna_to_ma(QList<GObject*> dnaSeqs) {
             return ma;
         }
         QByteArray seqData = seq->getWholeSequenceData(stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
-        ma.addRow(seq->getSequenceName(), seqData, stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
+        SAFE_POINT_OP(stateInfo, MultipleSequenceAlignment());
+        ma->addRow(seq->getSequenceName(), seqData);
     }
     return ma;
 }
@@ -545,20 +540,20 @@ QList<Task*> GTest_Muscle_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma1 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma1 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma1 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
 
-        muscleTask = new MuscleTask(ma1->getMAlignment(),config);
+        muscleTask = new MuscleTask(ma1->getMultipleAlignment(), config);
         res << muscleTask;
         this->connect(muscleTask,SIGNAL(si_progressChanged()),SLOT(sl_muscleProgressChg()));
     }
@@ -570,7 +565,7 @@ QList<Task*> GTest_Muscle_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
 
         MuscleTask * localMuscle = qobject_cast<MuscleTask*>( subTask );
         assert( NULL != localMuscle );
-        ma1->setMAlignment( localMuscle->resultMA );
+        ma1->setMultipleAlignment( localMuscle->resultMA );
 
     }
     else if (subTask == loadTask2) {
@@ -590,16 +585,16 @@ QList<Task*> GTest_Muscle_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma2 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma2 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma2 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
     }
@@ -607,12 +602,12 @@ QList<Task*> GTest_Muscle_Load_Align_QScore::onSubTaskFinished(Task* subTask) {
 }
 
 void GTest_Muscle_Load_Align_QScore::run() {
-    double qscore = QScore(ma1->getMAlignment(), ma2->getMAlignment(), stateInfo);
+    double qscore = QScore(ma1->getMultipleAlignment(), ma2->getMultipleAlignment(), stateInfo);
     if(stateInfo.hasError()) {
         return;
     }
 
-    bool match = fabsl (this->qscore - qscore) < dqscore;
+    bool match = fabsl(this->qscore - qscore) < dqscore;
 
     if(!match) stateInfo.setError(  QString("qscore not matched: %1, expected %2").arg(qscore).arg(this->qscore));
 }
@@ -651,11 +646,11 @@ void Muscle_Load_Align_Compare_Task::prepare() {
     loadTask1->setSubtaskProgressWeight(0);
 }
 
-MAlignment Muscle_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
+MultipleSequenceAlignment Muscle_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
 
     int seqCount = dnaSeqs.count();
     U2SequenceObject *seq = qobject_cast<U2SequenceObject *>(dnaSeqs[0]);
-    MAlignment ma("Alignment",seq->getAlphabet());
+    MultipleSequenceAlignment ma("Alignment",seq->getAlphabet());
     for(int i=0; i<seqCount; i++) {
         seq = qobject_cast<U2SequenceObject *>(dnaSeqs[i]);
         if(seq == NULL) {
@@ -663,9 +658,8 @@ MAlignment Muscle_Load_Align_Compare_Task::dna_to_ma(QList<GObject*> dnaSeqs) {
             return ma;
         }
         QByteArray seqData = seq->getWholeSequenceData(stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
-        ma.addRow(seq->getSequenceName(), seqData, stateInfo);
-        SAFE_POINT_OP(stateInfo, MAlignment());
+        SAFE_POINT_OP(stateInfo, MultipleSequenceAlignment());
+        ma->addRow(seq->getSequenceName(), seqData);
     }
     return ma;
 }
@@ -690,20 +684,20 @@ QList<Task*> Muscle_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma1 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma1 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma1 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
 
-        muscleTask = new MuscleTask(ma1->getMAlignment(),config);
+        muscleTask = new MuscleTask(ma1->getMultipleAlignment(), config);
 
         res << muscleTask;
         this->connect(muscleTask,SIGNAL(si_progressChanged()),SLOT(sl_muscleProgressChg()));
@@ -715,7 +709,7 @@ QList<Task*> Muscle_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
         }
         MuscleTask * localMuscle = qobject_cast<MuscleTask*>( subTask );
         assert( NULL != localMuscle );
-        ma1->setMAlignment( localMuscle->resultMA );
+        ma1->setMultipleAlignment( localMuscle->resultMA );
 
     }
     else if (subTask == loadTask2) {
@@ -735,16 +729,16 @@ QList<Task*> Muscle_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
             return res;
         }
 
-        MAlignment malign = dna_to_ma(list);
+        MultipleSequenceAlignment malign = dna_to_ma(list);
         if(hasError()) {
             return res;
         }
 
-        ma2 = MAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
+        ma2 = MultipleSequenceAlignmentImporter::createAlignment(doc->getDbiRef(), malign, stateInfo);
         CHECK_OP(stateInfo, res);
 
         if(ma2 == NULL){
-            stateInfo.setError(  QString("can't convert dna sequences to MAlignment") );
+            stateInfo.setError(  QString("can't convert dna sequences to MultipleSequenceAlignment") );
             return res;
         }
     }
@@ -753,28 +747,28 @@ QList<Task*> Muscle_Load_Align_Compare_Task::onSubTaskFinished(Task* subTask) {
 
 void Muscle_Load_Align_Compare_Task::run() {
 
-    const QList<MAlignmentRow> &alignedSeqs1 = ma1->getMAlignment().getRows();
-    const QList<MAlignmentRow> &alignedSeqs2 = ma2->getMAlignment().getRows();
+    const QList<MultipleSequenceAlignmentRow> alignedSeqs1 = ma1->getMsa()->getMsaRows();
+    const QList<MultipleSequenceAlignmentRow> alignedSeqs2 = ma2->getMsa()->getMsaRows();
 
-    foreach(const MAlignmentRow &maItem1, alignedSeqs1) {
+    foreach(const MultipleSequenceAlignmentRow &maItem1, alignedSeqs1) {
         bool nameFound = false;
-        foreach(const MAlignmentRow&maItem2, alignedSeqs2) {
-            if (maItem1.getName()== maItem2.getName()) {
+        foreach(const MultipleSequenceAlignmentRow&maItem2, alignedSeqs2) {
+            if (maItem1->getName()== maItem2->getName()) {
                 nameFound = true;
-                int l1 = maItem1.getCoreLength();
-                int l2 = maItem2.getCoreLength();
+                int l1 = maItem1->getCoreLength();
+                int l2 = maItem2->getCoreLength();
                 if (l1!= l2) {
-                    stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(l1).arg(l2) );
+                    stateInfo.setError(  QString("Aligned sequences \"%1\" length not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(l1).arg(l2) );
                     return;
                 }
-                if (maItem1!= maItem2) {
-                    stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1.getName()).arg(QString(maItem1.getCore())).arg(QString(maItem2.getCore())) );
+                if (*maItem1 != *maItem2) {
+                    stateInfo.setError(  QString("Aligned sequences \"%1\" not matched \"%2\", expected \"%3\"").arg(maItem1->getName()).arg(QString(maItem1->getCore())).arg(QString(maItem2->getCore())) );
                     return;
                 }
             }
         }
         if (!nameFound) {
-            stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1.getName()) );
+            stateInfo.setError(  QString("aligned sequence not found \"%1\"").arg(maItem1->getName()) );
         }
     }
 }
diff --git a/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.h b/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.h
index f4ca3c8..7028a9f 100644
--- a/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.h
+++ b/src/plugins_3rdparty/umuscle/src/umuscle_tests/umuscleTests.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,21 +22,20 @@
 #ifndef _U2_MUSCLE_TESTS_H_
 #define _U2_MUSCLE_TESTS_H_
 
-#include <U2Core/GObject.h>
-#include <U2Test/XMLTestUtils.h>
+#include <QDomElement>
+#include <QFileInfo>
 
-#include <QtXml/QDomElement>
-#include <QtCore/QFileInfo>
+#include <U2Core/GObject.h>
 
+#include <U2Test/XMLTestUtils.h>
 
 #include "MuscleTask.h"
 
 namespace U2 {
 
+class MultipleSequenceAlignmentObject;
 class MuscleGObjectTask;
-class MAlignmentObject;
 class LoadDocumentTask;
-class MAlignment;
 
 class GTest_uMuscle : public GTest {
     Q_OBJECT
@@ -52,7 +51,7 @@ private:
     QString resultCtxName;
     Document* doc;
     MuscleGObjectTask* mTask;
-    MAlignmentObject *ma_result;
+    MultipleSequenceAlignmentObject *ma_result;
     bool ctxAdded;
     bool refineOnly;
     int maxIters;
@@ -86,7 +85,7 @@ private:
     QString                 seqDocName;
     int                     resultAliLen;
     QList< QList<int> >     gapPositionsForSeqs;
-    MAlignmentObject*       aliObj;
+    MultipleSequenceAlignmentObject*       aliObj;
     int                     origAliSeqs;
     int                     resultAliSeqs;
 };
@@ -101,7 +100,7 @@ public:
     Task::ReportResult report();
 	void run();
 	QList<Task*> onSubTaskFinished(Task* subTask);
-	MAlignment dna_to_ma(QList<GObject*> dnaSeqs);
+	MultipleSequenceAlignment dna_to_ma(QList<GObject*> dnaSeqs);
 
 public slots:
 		void sl_muscleProgressChg() {stateInfo.progress = muscleTask->getProgress();}
@@ -115,8 +114,8 @@ private:
 	LoadDocumentTask*           loadTask2;
 	Task*                       muscleTask; 
 	MuscleTaskSettings          config;
-	MAlignmentObject*           ma1;
-	MAlignmentObject*           ma2;
+	MultipleSequenceAlignmentObject*           ma1;
+	MultipleSequenceAlignmentObject*           ma2;
 };
 
 class  Muscle_Load_Align_Compare_Task : public Task {
@@ -135,15 +134,15 @@ public slots:
     void sl_muscleProgressChg() {stateInfo.progress = muscleTask->getProgress();}
 
 private:
-    MAlignment dna_to_ma(QList<GObject*> dnaSeqs);
+    MultipleSequenceAlignment dna_to_ma(QList<GObject*> dnaSeqs);
     QString str_inFileURL;
     QString str_patFileURL;
     LoadDocumentTask*           loadTask1;
     LoadDocumentTask*           loadTask2;
     Task*                       muscleTask; 
     MuscleTaskSettings          config;
-    MAlignmentObject*           ma1;
-    MAlignmentObject*           ma2;
+    MultipleSequenceAlignmentObject*           ma1;
+    MultipleSequenceAlignmentObject*           ma2;
 };
 
 class GTest_Muscle_Load_Align_Compare: public GTest {
diff --git a/src/plugins_3rdparty/umuscle/transl/english.ts b/src/plugins_3rdparty/umuscle/transl/english.ts
index b7abb4e..0774d6d 100644
--- a/src/plugins_3rdparty/umuscle/transl/english.ts
+++ b/src/plugins_3rdparty/umuscle/transl/english.ts
@@ -11,7 +11,7 @@
     <message>
         <location filename="../src/MuscleAlignDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Input and output</translation>
     </message>
     <message>
         <location filename="../src/MuscleAlignDialog.ui" line="36"/>
@@ -98,7 +98,9 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="59"/>
+        <location filename="../src/MuscleWorker.cpp" line="183"/>
+        <location filename="../src/MuscleWorker.cpp" line="188"/>
+        <location filename="../src/MuscleWorker.cpp" line="194"/>
         <source>Region should be set as 'start..end', start should be less than end, e.g. '1..100'</source>
         <translation>Region should be set as 'start..end', start should be less than end, e.g. '1..100'</translation>
     </message>
@@ -106,12 +108,12 @@
 <context>
     <name>U2::LocalWorkflow::MusclePrompter</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="125"/>
+        <location filename="../src/MuscleWorker.cpp" line="122"/>
         <source> from %1</source>
         <translation> from %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="133"/>
+        <location filename="../src/MuscleWorker.cpp" line="130"/>
         <source>Aligns each MSA supplied <u>%1</u> with MUSCLE using "<u>%2</u>" mode.</source>
         <translation>Aligns each MSA supplied <u>%1</u> with MUSCLE using "<u>%2</u>" mode.</translation>
     </message>
@@ -119,125 +121,133 @@
 <context>
     <name>U2::LocalWorkflow::MuscleWorker</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="63"/>
+        <location filename="../src/MuscleWorker.cpp" line="60"/>
         <source>Input MSA</source>
         <translation>Input MSA</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="65"/>
+        <location filename="../src/MuscleWorker.cpp" line="62"/>
         <source>Multiple sequence alignment</source>
         <translation>Multiple sequence alignment</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="74"/>
+        <location filename="../src/MuscleWorker.cpp" line="71"/>
         <source>Mode</source>
         <translation>Mode</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="77"/>
+        <location filename="../src/MuscleWorker.cpp" line="74"/>
         <source>Stable order</source>
         <translation>Stable order</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="82"/>
+        <location filename="../src/MuscleWorker.cpp" line="79"/>
         <source>Maximum number of iterations.</source>
         <translation>Maximum number of iterations.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="176"/>
+        <location filename="../src/MuscleWorker.cpp" line="173"/>
         <source>An empty MSA '%1' has been supplied to MUSCLE.</source>
         <translation>An empty MSA '%1' has been supplied to MUSCLE.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="64"/>
+        <location filename="../src/MuscleWorker.cpp" line="61"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Multiple sequence alignment to be processed.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="65"/>
+        <location filename="../src/MuscleWorker.cpp" line="62"/>
         <source>Result of alignment.</source>
         <translation>Result of alignment.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="81"/>
+        <location filename="../src/MuscleWorker.cpp" line="78"/>
         <source>Max iterations</source>
         <translation>Max iterations</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="83"/>
+        <location filename="../src/MuscleWorker.cpp" line="80"/>
         <source>Region to align</source>
         <translation>Region to align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="84"/>
+        <location filename="../src/MuscleWorker.cpp" line="81"/>
         <source>Whole alignment or column range e.g. <b>1..100</b>.</source>
         <translation>Whole alignment or column range e.g. <b>1..100</b>.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="91"/>
+        <location filename="../src/MuscleWorker.cpp" line="88"/>
         <source>Align with MUSCLE</source>
         <translation>Align with MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="92"/>
+        <location filename="../src/MuscleWorker.cpp" line="89"/>
         <source>MUSCLE is public domain multiple alignment software for protein and nucleotide sequences.<p><dfn>MUSCLE stands for MUltiple Sequence Comparison by Log-Expectation.</dfn></p></source>
         <translation>MUSCLE is public domain multiple alignment software for protein and nucleotide sequences.<p><dfn>MUSCLE stands for MUltiple Sequence Comparison by Log-Expectation.</dfn></p></translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="200"/>
+        <location filename="../src/MuscleWorker.cpp" line="197"/>
         <source>Region end position should be greater than start position</source>
         <translation>Region end position should be greater than start position</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="234"/>
+        <location filename="../src/MuscleWorker.cpp" line="231"/>
         <source>Aligned %1 with MUSCLE</source>
         <translation>Aligned %1 with MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="75"/>
+        <location filename="../src/MuscleWorker.cpp" line="72"/>
         <source>Selector of preset configurations, that give you the choice of optimizing accuracy, speed, or some compromise between the two. The default favors accuracy.</source>
         <translation>Selector of preset configurations, that give you the choice of optimizing accuracy, speed, or some compromise between the two. The default favors accuracy.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="78"/>
+        <location filename="../src/MuscleWorker.cpp" line="75"/>
         <source>Do not rearrange aligned sequences (-stable switch of MUSCLE). <p>Otherwise, MUSCLE re-arranges sequences so that similar sequences are adjacent in the output file. This makes the alignment easier to evaluate by eye. </source>
         <translation>Do not rearrange aligned sequences (-stable switch of MUSCLE). <p>Otherwise, MUSCLE re-arranges sequences so that similar sequences are adjacent in the output file. This makes the alignment easier to evaluate by eye.</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::ProfileToProfileTask</name>
+    <message>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="122"/>
+        <source>Align profile to profile with MUSCLE</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::ProfileToProfileWorker</name>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="115"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="114"/>
         <source>Aligned profile to profile with MUSCLE</source>
         <translation>Aligned profile to profile with MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="211"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="213"/>
         <source>Master profile</source>
         <translation>Master profile</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="212"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="214"/>
         <source>The main alignment which will be aligned on.</source>
         <translation>The main alignment which will be aligned on.</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="214"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="216"/>
         <source>Second profile</source>
         <translation>Second profile</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="215"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="217"/>
         <source>Alignment which will be aligned to the master alignment.</source>
         <translation>Alignment which will be aligned to the master alignment.</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="228"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="230"/>
         <source>Align Profile to Profile With MUSCLE</source>
         <translation>Align Profile to Profile With MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="229"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="231"/>
         <source>Aligns second profile to master profile with MUSCLE aligner.</source>
         <translation>Aligns second profile to master profile with MUSCLE aligner.</translation>
     </message>
@@ -320,32 +330,32 @@
 <context>
     <name>U2::MuscleAddSequencesToProfileTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="260"/>
+        <location filename="../src/MuscleTask.cpp" line="263"/>
         <source>MUSCLE align profiles '%1' vs '%2'</source>
         <translation>MUSCLE align profiles '%1' vs '%2'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="262"/>
+        <location filename="../src/MuscleTask.cpp" line="265"/>
         <source>MUSCLE align '%2' by profile '%1'</source>
         <translation>MUSCLE align '%2' by profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="271"/>
+        <location filename="../src/MuscleTask.cpp" line="274"/>
         <source>A problem occurred during aligning profile to profile with MUSCLE. The original alignment is no more available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="304"/>
+        <location filename="../src/MuscleTask.cpp" line="307"/>
         <source>Sequences in file have different alphabets %1</source>
         <translation>Sequences in file have different alphabets %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="325"/>
+        <location filename="../src/MuscleTask.cpp" line="327"/>
         <source>No sequences found in file %1</source>
         <translation>No sequences found in file %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="327"/>
+        <location filename="../src/MuscleTask.cpp" line="329"/>
         <source>No alignment found in file %1</source>
         <translation>No alignment found in file %1</translation>
     </message>
@@ -470,17 +480,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="597"/>
+        <location filename="../src/MuscleTask.cpp" line="599"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="610"/>
+        <location filename="../src/MuscleTask.cpp" line="612"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="613"/>
+        <location filename="../src/MuscleTask.cpp" line="615"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
@@ -488,57 +498,61 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="357"/>
+        <location filename="../src/MuscleTask.cpp" line="359"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE align '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="360"/>
+        <location filename="../src/MuscleTask.cpp" line="362"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE refine '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="363"/>
+        <location filename="../src/MuscleTask.cpp" line="365"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE add to profile '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="366"/>
+        <location filename="../src/MuscleTask.cpp" line="368"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE align profiles</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="412"/>
+        <location filename="../src/MuscleTask.cpp" line="414"/>
+        <source>MultipleSequenceAlignment object has been changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>MAlignment object has been changed</source>
-        <translation>MAlignment object has been changed</translation>
+        <translation type="vanished">MAlignment object has been changed</translation>
     </message>
 </context>
 <context>
     <name>U2::MuscleMSAEditorContext</name>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="141"/>
+        <location filename="../src/MusclePlugin.cpp" line="140"/>
         <source>Align with MUSCLE...</source>
         <translation>Align with MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="150"/>
+        <location filename="../src/MusclePlugin.cpp" line="149"/>
         <source>Align sequences to profile with MUSCLE...</source>
         <translation>Align sequences to profile with MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="159"/>
+        <location filename="../src/MusclePlugin.cpp" line="158"/>
         <source>Align profile to profile with MUSCLE...</source>
         <translation>Align profile to profile with MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="238"/>
-        <location filename="../src/MusclePlugin.cpp" line="241"/>
+        <location filename="../src/MusclePlugin.cpp" line="237"/>
+        <location filename="../src/MusclePlugin.cpp" line="240"/>
         <source>Select file with sequences</source>
         <translation>Select file with sequences</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="266"/>
-        <location filename="../src/MusclePlugin.cpp" line="270"/>
+        <location filename="../src/MusclePlugin.cpp" line="265"/>
+        <location filename="../src/MusclePlugin.cpp" line="269"/>
         <source>Select file with alignment</source>
         <translation>Select file with alignment</translation>
     </message>
@@ -559,17 +573,17 @@
 <context>
     <name>U2::MusclePlugin</name>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="60"/>
+        <location filename="../src/MusclePlugin.cpp" line="61"/>
         <source>MUSCLE</source>
         <translation>MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="61"/>
+        <location filename="../src/MusclePlugin.cpp" line="62"/>
         <source>A port of MUSCLE package for multiple sequence alignment. Check http://www.drive5.com/muscle/ for the original version</source>
         <translation>A port of MUSCLE package for multiple sequence alignment. Check http://www.drive5.com/muscle/ for the original version</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="69"/>
+        <location filename="../src/MusclePlugin.cpp" line="70"/>
         <source>Align with MUSCLE...</source>
         <translation>Align with MUSCLE...</translation>
     </message>
@@ -605,37 +619,41 @@
 <context>
     <name>U2::MuscleTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="75"/>
+        <location filename="../src/MuscleTask.cpp" line="76"/>
         <source>MUSCLE alignment</source>
         <translation>MUSCLE alignment</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="83"/>
+        <location filename="../src/MuscleTask.cpp" line="86"/>
         <source>MUSCLE alignment started</source>
         <translation>MUSCLE alignment started</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="104"/>
+        <location filename="../src/MuscleTask.cpp" line="107"/>
         <source>Incorrect region to align</source>
         <translation>Incorrect region to align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="106"/>
+        <location filename="../src/MuscleTask.cpp" line="109"/>
+        <source>Stopping MUSCLE task, because of error in MultipleSequenceAlignment::mid function</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Stopping MUSCLE task, because of error in MAlignment::mid function</source>
-        <translation>Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
+        <translation type="vanished">Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="125"/>
+        <location filename="../src/MuscleTask.cpp" line="128"/>
         <source>Performing MUSCLE alignment...</source>
         <translation>Performing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="148"/>
+        <location filename="../src/MuscleTask.cpp" line="151"/>
         <source>MUSCLE alignment successfully finished</source>
         <translation>MUSCLE alignment successfully finished</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="201"/>
+        <location filename="../src/MuscleTask.cpp" line="204"/>
         <source>Unexpected number of rows in the result multiple alignment!</source>
         <translation>Unexpected number of rows in the result multiple alignment!</translation>
     </message>
diff --git a/src/plugins_3rdparty/umuscle/transl/russian.ts b/src/plugins_3rdparty/umuscle/transl/russian.ts
index 6f671cc..32b069a 100644
--- a/src/plugins_3rdparty/umuscle/transl/russian.ts
+++ b/src/plugins_3rdparty/umuscle/transl/russian.ts
@@ -11,7 +11,7 @@
     <message>
         <location filename="../src/MuscleAlignDialog.ui" line="28"/>
         <source>Input and output</source>
-        <translation type="unfinished"></translation>
+        <translation>Входные и выходные данные</translation>
     </message>
     <message>
         <location filename="../src/MuscleAlignDialog.ui" line="36"/>
@@ -98,7 +98,9 @@
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="59"/>
+        <location filename="../src/MuscleWorker.cpp" line="183"/>
+        <location filename="../src/MuscleWorker.cpp" line="188"/>
+        <location filename="../src/MuscleWorker.cpp" line="194"/>
         <source>Region should be set as 'start..end', start should be less than end, e.g. '1..100'</source>
         <translation>Region should be set as 'start..end', start should be less than end, e.g. '1..100'</translation>
     </message>
@@ -106,12 +108,12 @@
 <context>
     <name>U2::LocalWorkflow::MusclePrompter</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="125"/>
+        <location filename="../src/MuscleWorker.cpp" line="122"/>
         <source> from %1</source>
         <translation> из %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="133"/>
+        <location filename="../src/MuscleWorker.cpp" line="130"/>
         <source>Aligns each MSA supplied <u>%1</u> with MUSCLE using "<u>%2</u>" mode.</source>
         <translation>Для каждого выравнивания<u>%1</u>, запустить MUSCLE в  <u>"%2"</u> и выдать результат на  выход.</translation>
     </message>
@@ -119,125 +121,133 @@
 <context>
     <name>U2::LocalWorkflow::MuscleWorker</name>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="63"/>
+        <location filename="../src/MuscleWorker.cpp" line="60"/>
         <source>Input MSA</source>
         <translation>Входное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="65"/>
+        <location filename="../src/MuscleWorker.cpp" line="62"/>
         <source>Multiple sequence alignment</source>
         <translation>Множественное выравнивание</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="74"/>
+        <location filename="../src/MuscleWorker.cpp" line="71"/>
         <source>Mode</source>
         <translation>Конфигурация</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="77"/>
+        <location filename="../src/MuscleWorker.cpp" line="74"/>
         <source>Stable order</source>
         <translation>Сохранять порядок</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="64"/>
+        <location filename="../src/MuscleWorker.cpp" line="61"/>
         <source>Multiple sequence alignment to be processed.</source>
         <translation>Входные данные для выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="65"/>
+        <location filename="../src/MuscleWorker.cpp" line="62"/>
         <source>Result of alignment.</source>
         <translation>Результат выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="81"/>
+        <location filename="../src/MuscleWorker.cpp" line="78"/>
         <source>Max iterations</source>
         <translation>Максимальное число итераций</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="82"/>
+        <location filename="../src/MuscleWorker.cpp" line="79"/>
         <source>Maximum number of iterations.</source>
         <translation>Максимальное число итераций.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="176"/>
+        <location filename="../src/MuscleWorker.cpp" line="173"/>
         <source>An empty MSA '%1' has been supplied to MUSCLE.</source>
         <translation>An empty MSA '%1' has been supplied to MUSCLE.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="83"/>
+        <location filename="../src/MuscleWorker.cpp" line="80"/>
         <source>Region to align</source>
         <translation>Выравнивать</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="84"/>
+        <location filename="../src/MuscleWorker.cpp" line="81"/>
         <source>Whole alignment or column range e.g. <b>1..100</b>.</source>
         <translation>Все выравнивание или регион, например <b>1..100</b>.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="91"/>
+        <location filename="../src/MuscleWorker.cpp" line="88"/>
         <source>Align with MUSCLE</source>
         <translation>Выравнивание с помощью MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="92"/>
+        <location filename="../src/MuscleWorker.cpp" line="89"/>
         <source>MUSCLE is public domain multiple alignment software for protein and nucleotide sequences.<p><dfn>MUSCLE stands for MUltiple Sequence Comparison by Log-Expectation.</dfn></p></source>
         <translation><p><dfn>Пакет MUSCLE предназначен для выравнивания множественных протеиновых и нуклеотидных последовательностей.</dfn></p></translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="200"/>
+        <location filename="../src/MuscleWorker.cpp" line="197"/>
         <source>Region end position should be greater than start position</source>
         <translation>Конец региона должен быть больше чем его начало</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="234"/>
+        <location filename="../src/MuscleWorker.cpp" line="231"/>
         <source>Aligned %1 with MUSCLE</source>
         <translation>Выровнял %1 с MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="75"/>
+        <location filename="../src/MuscleWorker.cpp" line="72"/>
         <source>Selector of preset configurations, that give you the choice of optimizing accuracy, speed, or some compromise between the two. The default favors accuracy.</source>
         <translation>Выбор между режимами максимальной точности, скорости либо компромиса между ними. По умолчанию оптимизируется точность выравнивания.</translation>
     </message>
     <message>
-        <location filename="../src/MuscleWorker.cpp" line="78"/>
+        <location filename="../src/MuscleWorker.cpp" line="75"/>
         <source>Do not rearrange aligned sequences (-stable switch of MUSCLE). <p>Otherwise, MUSCLE re-arranges sequences so that similar sequences are adjacent in the output file. This makes the alignment easier to evaluate by eye. </source>
         <translation>Сохранять начальный порядок последовательностей в выравнивании. <p>Иначе, MUSCLE группирует похожие последовательности в выходном выравнивании, для удобства визуального сравнения.</translation>
     </message>
 </context>
 <context>
+    <name>U2::LocalWorkflow::ProfileToProfileTask</name>
+    <message>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="122"/>
+        <source>Align profile to profile with MUSCLE</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>U2::LocalWorkflow::ProfileToProfileWorker</name>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="115"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="114"/>
         <source>Aligned profile to profile with MUSCLE</source>
         <translation>Выравнивание профиля на профиль при помощи MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="211"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="213"/>
         <source>Master profile</source>
         <translation>Основной профиль</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="212"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="214"/>
         <source>The main alignment which will be aligned on.</source>
         <translation>Основное выравнивание на которое будет произведено выравнивание.</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="214"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="216"/>
         <source>Second profile</source>
         <translation>Второй профиль</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="215"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="217"/>
         <source>Alignment which will be aligned to the master alignment.</source>
         <translation>Выравнивание, которое будет выровнено на основной выравнивание.</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="228"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="230"/>
         <source>Align Profile to Profile With MUSCLE</source>
         <translation>Выравнивание профиля на профиль при помощи MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/ProfileToProfileWorker.cpp" line="229"/>
+        <location filename="../src/ProfileToProfileWorker.cpp" line="231"/>
         <source>Aligns second profile to master profile with MUSCLE aligner.</source>
         <translation>Выравнивает второй профиль на основной профиль при помощи MUSCLE.</translation>
     </message>
@@ -320,32 +330,32 @@
 <context>
     <name>U2::MuscleAddSequencesToProfileTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="260"/>
+        <location filename="../src/MuscleTask.cpp" line="263"/>
         <source>MUSCLE align profiles '%1' vs '%2'</source>
         <translation>MUSCLE выравнивает '%1' к '%2'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="262"/>
+        <location filename="../src/MuscleTask.cpp" line="265"/>
         <source>MUSCLE align '%2' by profile '%1'</source>
         <translation>MUSCLE добавляет '%2' к '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="271"/>
+        <location filename="../src/MuscleTask.cpp" line="274"/>
         <source>A problem occurred during aligning profile to profile with MUSCLE. The original alignment is no more available.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="304"/>
+        <location filename="../src/MuscleTask.cpp" line="307"/>
         <source>Sequences in file have different alphabets %1</source>
         <translation>Последовательности в файле имеют разные алфавиты: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="325"/>
+        <location filename="../src/MuscleTask.cpp" line="327"/>
         <source>No sequences found in file %1</source>
         <translation>Файл не содержит последовательностей: %1</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="327"/>
+        <location filename="../src/MuscleTask.cpp" line="329"/>
         <source>No alignment found in file %1</source>
         <translation>Файл не содержит выравниваний: %1</translation>
     </message>
@@ -470,17 +480,17 @@
 <context>
     <name>U2::MuscleGObjectRunFromSchemaTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="597"/>
+        <location filename="../src/MuscleTask.cpp" line="599"/>
         <source>Workflow wrapper '%1'</source>
         <translation>Workflow wrapper '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="610"/>
+        <location filename="../src/MuscleTask.cpp" line="612"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="613"/>
+        <location filename="../src/MuscleTask.cpp" line="615"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
@@ -488,57 +498,61 @@
 <context>
     <name>U2::MuscleGObjectTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="357"/>
+        <location filename="../src/MuscleTask.cpp" line="359"/>
         <source>MUSCLE align '%1'</source>
         <translation>MUSCLE выравнивает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="360"/>
+        <location filename="../src/MuscleTask.cpp" line="362"/>
         <source>MUSCLE refine '%1'</source>
         <translation>MUSCLE улучшает '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="363"/>
+        <location filename="../src/MuscleTask.cpp" line="365"/>
         <source>MUSCLE add to profile '%1'</source>
         <translation>MUSCLE добавляет в выравнивание '%1'</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="366"/>
+        <location filename="../src/MuscleTask.cpp" line="368"/>
         <source>MUSCLE align profiles</source>
         <translation>MUSCLE выравнивает пару выравниваний</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="412"/>
+        <location filename="../src/MuscleTask.cpp" line="414"/>
+        <source>MultipleSequenceAlignment object has been changed</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>MAlignment object has been changed</source>
-        <translation>Объект множественного выравнивания был изменен</translation>
+        <translation type="vanished">Объект множественного выравнивания был изменен</translation>
     </message>
 </context>
 <context>
     <name>U2::MuscleMSAEditorContext</name>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="141"/>
+        <location filename="../src/MusclePlugin.cpp" line="140"/>
         <source>Align with MUSCLE...</source>
         <translation>Выравнивание с помощью MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="150"/>
+        <location filename="../src/MusclePlugin.cpp" line="149"/>
         <source>Align sequences to profile with MUSCLE...</source>
         <translation>Выровнять последовательности на профиль при помощи MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="159"/>
+        <location filename="../src/MusclePlugin.cpp" line="158"/>
         <source>Align profile to profile with MUSCLE...</source>
         <translation>Выровнять профиль на профиль при помощи MUSCLE...</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="238"/>
-        <location filename="../src/MusclePlugin.cpp" line="241"/>
+        <location filename="../src/MusclePlugin.cpp" line="237"/>
+        <location filename="../src/MusclePlugin.cpp" line="240"/>
         <source>Select file with sequences</source>
         <translation>Выбор файла последовательностей</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="266"/>
-        <location filename="../src/MusclePlugin.cpp" line="270"/>
+        <location filename="../src/MusclePlugin.cpp" line="265"/>
+        <location filename="../src/MusclePlugin.cpp" line="269"/>
         <source>Select file with alignment</source>
         <translation>Выбор файла выравнивания</translation>
     </message>
@@ -559,17 +573,17 @@
 <context>
     <name>U2::MusclePlugin</name>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="60"/>
+        <location filename="../src/MusclePlugin.cpp" line="61"/>
         <source>MUSCLE</source>
         <translation>MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="61"/>
+        <location filename="../src/MusclePlugin.cpp" line="62"/>
         <source>A port of MUSCLE package for multiple sequence alignment. Check http://www.drive5.com/muscle/ for the original version</source>
         <translation>Порт пакета MUSCLE для выравнивания множественных последовательностей. Сайт оригинального пакета http://www.drive5.com/muscle/</translation>
     </message>
     <message>
-        <location filename="../src/MusclePlugin.cpp" line="69"/>
+        <location filename="../src/MusclePlugin.cpp" line="70"/>
         <source>Align with MUSCLE...</source>
         <translation>Выравнивание с помощью MUSCLE...</translation>
     </message>
@@ -605,37 +619,41 @@
 <context>
     <name>U2::MuscleTask</name>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="75"/>
+        <location filename="../src/MuscleTask.cpp" line="76"/>
         <source>MUSCLE alignment</source>
         <translation>Выравнивание с помощью MUSCLE</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="83"/>
+        <location filename="../src/MuscleTask.cpp" line="86"/>
         <source>MUSCLE alignment started</source>
         <translation>MUSCLE alignment started</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="104"/>
+        <location filename="../src/MuscleTask.cpp" line="107"/>
         <source>Incorrect region to align</source>
         <translation>Incorrect region to align</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="106"/>
+        <location filename="../src/MuscleTask.cpp" line="109"/>
+        <source>Stopping MUSCLE task, because of error in MultipleSequenceAlignment::mid function</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
         <source>Stopping MUSCLE task, because of error in MAlignment::mid function</source>
-        <translation>Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
+        <translation type="vanished">Stopping MUSCLE task, because of error in MAlignment::mid function</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="125"/>
+        <location filename="../src/MuscleTask.cpp" line="128"/>
         <source>Performing MUSCLE alignment...</source>
         <translation>Performing MUSCLE alignment...</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="148"/>
+        <location filename="../src/MuscleTask.cpp" line="151"/>
         <source>MUSCLE alignment successfully finished</source>
         <translation>MUSCLE alignment successfully finished</translation>
     </message>
     <message>
-        <location filename="../src/MuscleTask.cpp" line="201"/>
+        <location filename="../src/MuscleTask.cpp" line="204"/>
         <source>Unexpected number of rows in the result multiple alignment!</source>
         <translation>Unexpected number of rows in the result multiple alignment!</translation>
     </message>
diff --git a/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.cpp b/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.cpp
index 4b4b8d7..d6d348b 100644
--- a/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.cpp
+++ b/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,28 +19,30 @@
  * MA 02110-1301, USA.
  */
 
-#include "AssemblySamtoolsMpileup.h"
+#include <QDir>
 
-#include <U2Core/Timer.h>
-#include <U2Core/Counter.h>
-#include <U2Core/GUrlUtils.h>
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
-#include <U2Core/UserApplicationsSettings.h>
-#include <U2Core/U2SafePoints.h>
+#include <U2Core/Counter.h>
 #include <U2Core/DocumentModel.h>
-#include <U2Core/VariantTrackObject.h>
+#include <U2Core/DocumentUtils.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/IOAdapter.h>
 #include <U2Core/IOAdapterUtils.h>
-#include <U2Core/DocumentUtils.h>
 #include <U2Core/LoadDocumentTask.h>
+#include <U2Core/Timer.h>
+#include <U2Core/U2SafePoints.h>
+#include <U2Core/UserApplicationsSettings.h>
+#include <U2Core/VariantTrackObject.h>
 
-#include <U2Lang/DbiDataHandler.h>
 #include <U2Lang/BasePorts.h>
 #include <U2Lang/BaseSlots.h>
 #include <U2Lang/BaseTypes.h>
+#include <U2Lang/DbiDataHandler.h>
 #include <U2Lang/WorkflowEnv.h>
 
+#include "AssemblySamtoolsMpileup.h"
+
 #define CALL_VARIANTS_DIR "variants"
 
 namespace U2 {
@@ -183,7 +185,7 @@ void SamtoolsMpileupTask::prepare(){
     if (!outDir.exists()) {
         const bool created = outDir.mkpath(outDir.absolutePath());
         if (!created) {
-            setError(tr("Can not create the directory: ") + outDir.absolutePath());
+            setError(tr("Can not create the folder: ") + outDir.absolutePath());
         }
     }
 }
diff --git a/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.h b/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.h
index 88b0709..1925b2f 100644
--- a/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.h
+++ b/src/plugins_3rdparty/variants/src/AssemblySamtoolsMpileup.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
index a0d150b..89482fd 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
+++ b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -18,35 +18,35 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
  * MA 02110-1301, USA.
  */
-#include "SamtoolMpileupWorker.h"
 
-#include <U2Lang/IntegralBusModel.h>
-#include <U2Lang/WorkflowEnv.h>
-#include <U2Lang/ActorPrototypeRegistry.h>
-#include <U2Lang/BaseTypes.h>
-#include <U2Lang/BaseSlots.h>
-#include <U2Lang/BasePorts.h>
-#include <U2Lang/BaseActorCategories.h>
-#include <U2Lang/BaseAttributes.h>
-#include <U2Lang/WorkflowMonitor.h>
-
-#include <U2Designer/DelegateEditors.h>
+#include <limits.h>
 
+#include <U2Core/AppContext.h>
+#include <U2Core/DNAAlphabet.h>
 #include <U2Core/DNASequence.h>
+#include <U2Core/DNASequenceObject.h>
 #include <U2Core/DNATranslation.h>
-#include <U2Core/DNAAlphabet.h>
-#include <U2Core/GUrlUtils.h>
-#include <U2Core/AppContext.h>
+#include <U2Core/FailTask.h>
 #include <U2Core/GObjectTypes.h>
+#include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/Log.h>
-#include <U2Core/DNASequenceObject.h>
-#include <U2Core/FailTask.h>
 #include <U2Core/U2OpStatusUtils.h>
+#include <U2Core/U2SafePoints.h>
 
-//#include <QtGui/QApplication>
+#include <U2Designer/DelegateEditors.h>
 
-#include "limits.h"
+#include <U2Lang/ActorPrototypeRegistry.h>
+#include <U2Lang/BaseActorCategories.h>
+#include <U2Lang/BaseAttributes.h>
+#include <U2Lang/BasePorts.h>
+#include <U2Lang/BaseSlots.h>
+#include <U2Lang/BaseTypes.h>
+#include <U2Lang/IntegralBusModel.h>
+#include <U2Lang/WorkflowEnv.h>
+#include <U2Lang/WorkflowMonitor.h>
+
+#include "SamtoolMpileupWorker.h"
 
 namespace U2 {
 
@@ -123,7 +123,7 @@ public:
         const IntegralBusPort* vport = static_cast<const IntegralBusPort*>(cfg);
         assert(vport);
 
-        QStrStrMap bm = vport->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<QStrStrMap>();
+        StrStrMap bm = vport->getParameter(IntegralBusPort::BUS_MAP_ATTR_ID)->getAttributeValueWithoutScript<StrStrMap>();
         QMapIterator<QString,QString> it(bm);
         while (it.hasNext()){
             it.next();
diff --git a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
index c6bdd15..8b77114 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
+++ b/src/plugins_3rdparty/variants/src/SamtoolMpileupWorker.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/variants/src/SamtoolsPlugin.cpp b/src/plugins_3rdparty/variants/src/SamtoolsPlugin.cpp
index 0fdcdd6..7b63ff5 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolsPlugin.cpp
+++ b/src/plugins_3rdparty/variants/src/SamtoolsPlugin.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/variants/src/SamtoolsPlugin.h b/src/plugins_3rdparty/variants/src/SamtoolsPlugin.h
index c7e3630..8264857 100644
--- a/src/plugins_3rdparty/variants/src/SamtoolsPlugin.h
+++ b/src/plugins_3rdparty/variants/src/SamtoolsPlugin.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/plugins_3rdparty/variants/transl/english.ts b/src/plugins_3rdparty/variants/transl/english.ts
index 3bee86c..89552da 100644
--- a/src/plugins_3rdparty/variants/transl/english.ts
+++ b/src/plugins_3rdparty/variants/transl/english.ts
@@ -27,47 +27,47 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsTask</name>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="50"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="52"/>
         <source>Call variants for %1</source>
         <translation>Call variants for %1</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="63"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="65"/>
         <source>reference</source>
         <translation>reference</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="65"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="67"/>
         <source>assembly</source>
         <translation>assembly</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="73"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="75"/>
         <source>The %1 file does not exist: %2</source>
         <translation>The %1 file does not exist: %2</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="86"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="88"/>
         <source>No assembly files</source>
         <translation>No assembly files</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="91"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="93"/>
         <source>No dbi storage</source>
         <translation>No dbi storage</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="95"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="97"/>
         <source>No sequence URL</source>
         <translation>No sequence URL</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="133"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="135"/>
         <source>No document loaded</source>
         <translation>No document loaded</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="137"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="139"/>
         <source>Incorrect variant track object in %1</source>
         <translation>Incorrect variant track object in %1</translation>
     </message>
@@ -642,42 +642,42 @@
 <context>
     <name>U2::LocalWorkflow::SamtoolsMpileupTask</name>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="159"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="161"/>
         <source>Samtool mpileup for %1 </source>
         <translation>Samtool mpileup for %1 </translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="166"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="168"/>
         <source>No reference sequence URL to do pileup</source>
         <translation>No reference sequence URL to do pileup</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="171"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="173"/>
         <source>No assembly URL to do pileup</source>
         <translation>No assembly URL to do pileup</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="177"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="179"/>
         <source>There is an assembly with an empty path</source>
         <translation>There is an assembly with an empty path</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="186"/>
-        <source>Can not create the directory: </source>
-        <translation>Can not create the directory: </translation>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="188"/>
+        <source>Can not create the folder: </source>
+        <translation>Can not create the folder: </translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="241"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="243"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="247"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="249"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="249"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="251"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
diff --git a/src/plugins_3rdparty/variants/transl/russian.ts b/src/plugins_3rdparty/variants/transl/russian.ts
index 5272d0a..7b33b62 100644
--- a/src/plugins_3rdparty/variants/transl/russian.ts
+++ b/src/plugins_3rdparty/variants/transl/russian.ts
@@ -27,47 +27,47 @@
 <context>
     <name>U2::LocalWorkflow::CallVariantsTask</name>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="50"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="52"/>
         <source>Call variants for %1</source>
         <translation>Вызов вариантов для %1</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="63"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="65"/>
         <source>reference</source>
         <translation>референс</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="65"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="67"/>
         <source>assembly</source>
         <translation>сборка</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="73"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="75"/>
         <source>The %1 file does not exist: %2</source>
         <translation>The %1 file does not exist: %2</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="86"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="88"/>
         <source>No assembly files</source>
         <translation>No assembly files</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="91"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="93"/>
         <source>No dbi storage</source>
         <translation>No dbi storage</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="95"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="97"/>
         <source>No sequence URL</source>
         <translation>No sequence URL</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="133"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="135"/>
         <source>No document loaded</source>
         <translation>No document loaded</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="137"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="139"/>
         <source>Incorrect variant track object in %1</source>
         <translation>Incorrect variant track object in %1</translation>
     </message>
@@ -642,42 +642,42 @@
 <context>
     <name>U2::LocalWorkflow::SamtoolsMpileupTask</name>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="159"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="161"/>
         <source>Samtool mpileup for %1 </source>
         <translation>Samtool mpileup для %1 </translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="166"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="168"/>
         <source>No reference sequence URL to do pileup</source>
         <translation>No reference sequence URL to do pileup</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="171"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="173"/>
         <source>No assembly URL to do pileup</source>
         <translation>No assembly URL to do pileup</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="177"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="179"/>
         <source>There is an assembly with an empty path</source>
         <translation>There is an assembly with an empty path</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="186"/>
-        <source>Can not create the directory: </source>
-        <translation>Can not create the directory: </translation>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="188"/>
+        <source>Can not create the folder: </source>
+        <translation>Can not create the folder: </translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="241"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="243"/>
         <source>Can not run %1 tool</source>
         <translation>Can not run %1 tool</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="247"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="249"/>
         <source>%1 tool exited with code %2</source>
         <translation>%1 tool exited with code %2</translation>
     </message>
     <message>
-        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="249"/>
+        <location filename="../src/AssemblySamtoolsMpileup.cpp" line="251"/>
         <source>Tool %1 finished successfully</source>
         <translation>Tool %1 finished successfully</translation>
     </message>
diff --git a/src/plugins_3rdparty/variants/variants.pri b/src/plugins_3rdparty/variants/variants.pri
index eafb672..a6e7fd6 100644
--- a/src/plugins_3rdparty/variants/variants.pri
+++ b/src/plugins_3rdparty/variants/variants.pri
@@ -7,7 +7,14 @@ CONFIG += warn_off
 include( ../../ugene_plugin_common.pri )
 
 DEFINES+="_FILE_OFFSET_BITS=64" _LARGEFILE64_SOURCE _USE_KNETFILE
-win32 : DEFINES += _USE_MATH_DEFINES "inline=__inline" "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+win32 : DEFINES += _USE_MATH_DEFINES "__func__=__FUNCTION__" "R_OK=4" "atoll=_atoi64" "alloca=_alloca"
+
+win32 {
+    # not visual studio 2015
+    !win32-msvc2015 {
+        DEFINES += "inline=__inline"
+    }
+}
 
 use_bundled_zlib() {
     INCLUDEPATH += ../../libs_3rdparty/zlib/src
@@ -20,8 +27,8 @@ use_bundled_zlib() {
 win32 : LIBS += -lwsock32
 
 
-INCLUDEPATH += src ../../include /usr/include
-INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools 
+INCLUDEPATH += src ../../include
+INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools
 INCLUDEPATH += ../../libs_3rdparty/samtools/src
 INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools/bcftools
 win32 : INCLUDEPATH += ../../libs_3rdparty/samtools/src/samtools/win32
@@ -37,7 +44,7 @@ LIBS += -lsamtools
         }
         LIBS -= -lsamtools
         LIBS += -lsamtoolsd
-    } 
+    }
 }
 
 win32-msvc2013 {
diff --git a/src/plugins_checker/src/Main.cpp b/src/plugins_checker/src/Main.cpp
index f316d2f..e997211 100644
--- a/src/plugins_checker/src/Main.cpp
+++ b/src/plugins_checker/src/Main.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/qclean.cmd b/src/qclean.cmd
new file mode 100644
index 0000000..0a28dee
--- /dev/null
+++ b/src/qclean.cmd
@@ -0,0 +1,27 @@
+ at echo off
+setlocal 
+set rdir=_tmp
+set fpath=%~dps0 
+call :func %fpath:~0,-1% 
+set rdir=_debug
+call :func %fpath:~0,-1% 
+set rdir=_release
+call :func %fpath:~0,-1% 
+set rdir=debug
+call :func %fpath:~0,-1% 
+set rdir=release
+call :func %fpath:~0,-1% 
+set rdir=_UpgradeReport_Files
+call :func %fpath:~0,-1% 
+goto end 
+:func 
+for /f "delims=" %%i in ('dir %1 /a:d /b') do IF /I %%i==%rdir% ( rmdir /s /q %1\%%i && echo deleted %1\%%i ) ELSE ( call :func %1\%%i ) 
+exit /b 
+:end
+del /s /f /q Makefile*
+del /s /f /q *.pdb
+del /s /f /q *.idb
+del /s /f /q *.vcproj*
+del /s /f /q *.suo
+del /s /f /q *.ncb 
+del /s /f /q UpgradeLog.XML
\ No newline at end of file
diff --git a/src/qmake_msvc_proj_x32.cmd b/src/qmake_msvc_proj_x32.cmd
new file mode 100644
index 0000000..f1eeea3
--- /dev/null
+++ b/src/qmake_msvc_proj_x32.cmd
@@ -0,0 +1,3 @@
+cd ..
+qmake -tp vc -r ugene.pro
+cd src
\ No newline at end of file
diff --git a/src/qmake_msvc_proj_x64.cmd b/src/qmake_msvc_proj_x64.cmd
new file mode 100644
index 0000000..dea0908
--- /dev/null
+++ b/src/qmake_msvc_proj_x64.cmd
@@ -0,0 +1,3 @@
+cd ..
+qmake -tp vc -r CONFIG+=x64 ugene.pro
+cd src
\ No newline at end of file
diff --git a/src/ugene_globals.pri b/src/ugene_globals.pri
index 74dd518..ed7f5d2 100644
--- a/src/ugene_globals.pri
+++ b/src/ugene_globals.pri
@@ -8,10 +8,6 @@ DEFINES+=UGENE_VER_MAJOR=$${UGENE_VER_MAJOR}
 DEFINES+=UGENE_VER_MINOR=$${UGENE_VER_MINOR}
 DEFINES+=UGENE_VER_PATCH=$${UGENE_VER_PATCH}
 
-unix : !macx : INCLUDEPATH-=/usr/include
-unix : !macx : INCLUDEPATH+=/usr/include/qt5 /usr/include
-#unix : !macx : INCLUDEPATH =/usr/include/qt5 $$INCLUDEPATH
-
 # NGS package
 _UGENE_NGS = $$(UGENE_NGS)
 contains(_UGENE_NGS, 1) : DEFINES += UGENE_NGS
@@ -47,7 +43,7 @@ isEmpty( UGENE_INSTALL_DESKTOP ) : UGENE_INSTALL_DESKTOP = $$INSTALL_DATADIR/app
 isEmpty( UGENE_INSTALL_PIXMAPS ) : UGENE_INSTALL_PIXMAPS = $$INSTALL_DATADIR/pixmaps
 isEmpty( UGENE_INSTALL_DATA )    : UGENE_INSTALL_DATA    = $$INSTALL_DATADIR/ugene/data
 isEmpty( UGENE_INSTALL_ICONS )   : UGENE_INSTALL_ICONS   = $$INSTALL_DATADIR/icons
-isEmpty( UGENE_INSTALL_MIME )    : UGENE_INSTALL_MIME    = $$INSTALL_DATADIR/mime
+isEmpty( UGENE_INSTALL_MIME )    : UGENE_INSTALL_MIME    = $$INSTALL_DATADIR/mime/packages
 isEmpty( UGENE_INSTALL_DIR )     : UGENE_INSTALL_DIR     = $$INSTALL_LIBDIR/ugene
 isEmpty( UGENE_INSTALL_BINDIR )  : UGENE_INSTALL_BINDIR  = $$INSTALL_BINDIR
 isEmpty( UGENE_INSTALL_MAN )     : UGENE_INSTALL_MAN     = $$INSTALL_MANDIR/man1
@@ -85,7 +81,7 @@ isEmpty( UGENE_SSE2_DETECTED ) {
         !ppc{
             system(/usr/sbin/system_profiler SPHardwareDataType | grep Processor | grep Intel > /dev/null) {
                UGENE_SSE2_DETECTED = 1
-            } 
+            }
         }
     }
 }
diff --git a/src/ugene_version.pri b/src/ugene_version.pri
index 9f1ba68..6b0a3a1 100644
--- a/src/ugene_version.pri
+++ b/src/ugene_version.pri
@@ -1,7 +1,7 @@
 # This file contains UGENE version info
 
 # product version
-UGENE_VERSION=1.25.0
+UGENE_VERSION=1.28.1
 
 # minimum UGENE version whose SQLite databases are compatible with this version
 UGENE_MIN_VERSION_SQLITE=1.25.0
@@ -16,5 +16,5 @@ U2_DISTRIBUTION_INFO=sources
 
 # int version levels for executables
 UGENE_VER_MAJOR=1
-UGENE_VER_MINOR=25
+UGENE_VER_MINOR=28
 UGENE_VER_PATCH=0
diff --git a/src/ugenecl/src/DumpHelpTask.cpp b/src/ugenecl/src/DumpHelpTask.cpp
index 3e26e05..06992cf 100644
--- a/src/ugenecl/src/DumpHelpTask.cpp
+++ b/src/ugenecl/src/DumpHelpTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,7 +26,7 @@
 #include "windows.h"
 #endif
 
-#include <QtCore/QDir>
+#include <QDir>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Version.h>
@@ -248,8 +248,8 @@ QList<Task*> DumpHelpTask::onSubTaskFinished(Task* subTask) {
 }
 
 void DumpHelpTask::dumpParameters() {
-    QList<StringPair> params = AppContext::getCMDLineRegistry()->getParameters();
-    QList<StringPair>::const_iterator it = params.constBegin();
+    QList<StrStrPair> params = AppContext::getCMDLineRegistry()->getParameters();
+    QList<StrStrPair>::const_iterator it = params.constBegin();
     while( it != params.constEnd() ) {
         printStringToConsole( "key: \"%s\"", it->first);
         printStringToConsole( " and value: \"%s\"\n", it->second);
diff --git a/src/ugenecl/src/DumpHelpTask.h b/src/ugenecl/src/DumpHelpTask.h
index f31ae22..bee3dd9 100644
--- a/src/ugenecl/src/DumpHelpTask.h
+++ b/src/ugenecl/src/DumpHelpTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/DumpLicenseTask.cpp b/src/ugenecl/src/DumpLicenseTask.cpp
index 60e7049..e892d30 100644
--- a/src/ugenecl/src/DumpLicenseTask.cpp
+++ b/src/ugenecl/src/DumpLicenseTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,7 +19,7 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/CMDLineRegistry.h>
diff --git a/src/ugenecl/src/DumpLicenseTask.h b/src/ugenecl/src/DumpLicenseTask.h
index 03e304f..9b6c47f 100644
--- a/src/ugenecl/src/DumpLicenseTask.h
+++ b/src/ugenecl/src/DumpLicenseTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/DumpVersionTask.cpp b/src/ugenecl/src/DumpVersionTask.cpp
index 11227ca..cafa66b 100644
--- a/src/ugenecl/src/DumpVersionTask.cpp
+++ b/src/ugenecl/src/DumpVersionTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/DumpVersionTask.h b/src/ugenecl/src/DumpVersionTask.h
index d2739b8..0de8a79 100644
--- a/src/ugenecl/src/DumpVersionTask.h
+++ b/src/ugenecl/src/DumpVersionTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/ForeverTask.cpp b/src/ugenecl/src/ForeverTask.cpp
index 4218c57..82b0929 100644
--- a/src/ugenecl/src/ForeverTask.cpp
+++ b/src/ugenecl/src/ForeverTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
  */
 
 
-#include <QtCore/QEventLoop>
+#include <QEventLoop>
 
 #include <U2Core/Log.h>
 
@@ -30,7 +30,7 @@
 
 namespace U2 {
 
-Logger log( FOREVER_TASK_LOG_CAT );
+static Logger log( FOREVER_TASK_LOG_CAT );
 
 ForeverTask::ForeverTask() : Task( "Forever task", TaskFlag_None ) {
     log.trace( tr( "Forever task created" ) );
diff --git a/src/ugenecl/src/ForeverTask.h b/src/ugenecl/src/ForeverTask.h
index 4ee4359..6c56672 100644
--- a/src/ugenecl/src/ForeverTask.h
+++ b/src/ugenecl/src/ForeverTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/Main.cpp b/src/ugenecl/src/Main.cpp
index 4f53f2b..d393dd1 100644
--- a/src/ugenecl/src/Main.cpp
+++ b/src/ugenecl/src/Main.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QCoreApplication>
+#include <QTranslator>
 
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
 #include <U2Algorithm/AssemblyConsensusAlgorithmRegistry.h>
@@ -41,7 +42,6 @@
 #include <U2Algorithm/StructuralAlignmentAlgorithmRegistry.h>
 #include <U2Algorithm/SubstMatrixRegistry.h>
 
-#include "U2Core/TmpDirChecker.h"
 #include <U2Core/AnnotationSettings.h>
 #include <U2Core/AppFileStorage.h>
 #include <U2Core/CMDLineCoreOptions.h>
@@ -63,6 +63,7 @@
 #include <U2Core/ScriptingToolRegistry.h>
 #include <U2Core/TaskStarter.h>
 #include <U2Core/Timer.h>
+#include <U2Core/TmpDirChecker.h>
 #include <U2Core/U2DbiRegistry.h>
 #include <U2Core/U2OpStatusUtils.h>
 #include <U2Core/UdrSchemaRegistry.h>
@@ -157,7 +158,7 @@ static void setDataSearchPaths() {
     QStringList dataSearchPaths;
     const static char * RELATIVE_DATA_DIR = "/data";
     const static char * RELATIVE_DEV_DATA_DIR = "/../../data";
-    //on windows data is normally located in the application directory
+    //on windows data is normally located in the application folder
     QString appDirPath = AppContext::getWorkingDirectoryPath();
 
     if( QDir(appDirPath+RELATIVE_DATA_DIR).exists() ) {
@@ -168,7 +169,7 @@ static void setDataSearchPaths() {
     }
 
 #if (defined(Q_OS_UNIX)) && defined( UGENE_DATA_DIR )
-    //using directory which is set during installation process on linux
+    //using folder which is set during installation process on linux
     QString ugene_data_dir( UGENE_DATA_DIR );
     if( QDir(ugene_data_dir).exists() ) {
         dataSearchPaths.push_back( QString(UGENE_DATA_DIR) );
diff --git a/src/ugenecl/src/TaskStatusBar.cpp b/src/ugenecl/src/TaskStatusBar.cpp
index 6e7d1e2..01dccfe 100644
--- a/src/ugenecl/src/TaskStatusBar.cpp
+++ b/src/ugenecl/src/TaskStatusBar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,8 +31,8 @@
 #include <U2Core/CMDLineHelpProvider.h>
 #include <U2Lang/WorkflowRunTask.h>
 
-#include <QtCore/QEvent>
-#include <QtCore/QString>
+#include <QEvent>
+#include <QString>
 
 #include <math.h>
 #include <stdio.h>
diff --git a/src/ugenecl/src/TaskStatusBar.h b/src/ugenecl/src/TaskStatusBar.h
index 9d0548b..394ea0a 100644
--- a/src/ugenecl/src/TaskStatusBar.h
+++ b/src/ugenecl/src/TaskStatusBar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/src/TestStarter.cpp b/src/ugenecl/src/TestStarter.cpp
index d7087e5..a6a16f0 100644
--- a/src/ugenecl/src/TestStarter.cpp
+++ b/src/ugenecl/src/TestStarter.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,8 +27,7 @@
 #include <U2Test/GTest.h>
 #include <U2Test/TestRunnerTask.h>
 
-#include <QtXml/QtXml>
-#include <QtCore/QProcess>
+#include <QProcess>
 
 #define SETTINGS_ROOT QString("test_runner/")
 
diff --git a/src/ugenecl/src/TestStarter.h b/src/ugenecl/src/TestStarter.h
index 76498cf..cb33063 100644
--- a/src/ugenecl/src/TestStarter.h
+++ b/src/ugenecl/src/TestStarter.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenecl/ugenecl.pri b/src/ugenecl/ugenecl.pri
index 2714c7d..828d37a 100644
--- a/src/ugenecl/ugenecl.pri
+++ b/src/ugenecl/ugenecl.pri
@@ -8,7 +8,7 @@ use_opencl(){
 
 UGENE_RELATIVE_DESTDIR = ''
 
-QT += xml network script webkit
+QT += xml network script webkit widgets
 TEMPLATE = app
 CONFIG +=qt dll thread debug_and_release console
 DEFINES+= QT_DLL QT_FATAL_ASSERT
diff --git a/src/ugenem/src/DetectWin10.cpp b/src/ugenem/src/DetectWin10.cpp
index 1053ff5..e3c1383 100644
--- a/src/ugenem/src/DetectWin10.cpp
+++ b/src/ugenem/src/DetectWin10.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenem/src/DetectWin10.h b/src/ugenem/src/DetectWin10.h
index 34caab0..ccdae4c 100644
--- a/src/ugenem/src/DetectWin10.h
+++ b/src/ugenem/src/DetectWin10.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenem/src/SendReportDialog.cpp b/src/ugenem/src/SendReportDialog.cpp
index 3f58528..474843b 100644
--- a/src/ugenem/src/SendReportDialog.cpp
+++ b/src/ugenem/src/SendReportDialog.cpp
@@ -1,6 +1,6 @@
 /**
 * UGENE - Integrated Bioinformatics Tools.
-* Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+* Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
 * http://ugene.net
 *
 * This program is free software; you can redistribute it and/or
diff --git a/src/ugenem/src/SendReportDialog.h b/src/ugenem/src/SendReportDialog.h
index 9484c6e..2999a18 100644
--- a/src/ugenem/src/SendReportDialog.h
+++ b/src/ugenem/src/SendReportDialog.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugenem/src/Utils.cpp b/src/ugenem/src/Utils.cpp
index 80b20ca..c51df26 100644
--- a/src/ugenem/src/Utils.cpp
+++ b/src/ugenem/src/Utils.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,10 +19,10 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QCoreApplication>
-#include <QtCore/QFile>
-#include <QtCore/QProcess>
-#include <QtCore/QStringList>
+#include <QCoreApplication>
+#include <QFile>
+#include <QProcess>
+#include <QStringList>
 
 #include "Utils.h"
 
diff --git a/src/ugenem/src/Utils.h b/src/ugenem/src/Utils.h
index 1ffcc03..cef523a 100644
--- a/src/ugenem/src/Utils.h
+++ b/src/ugenem/src/Utils.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef _UGENEM_UTILS_H_
 #define _UGENEM_UTILS_H_
 
-#include <QtCore/QString>
+#include <QString>
 
 /**
  * The methods can be used only if QCoreApplication has instance
diff --git a/src/ugenem/src/main.cpp b/src/ugenem/src/main.cpp
index d6cf04a..1398c7f 100644
--- a/src/ugenem/src/main.cpp
+++ b/src/ugenem/src/main.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/html/version_news.html b/src/ugeneui/html/version_news.html
index 4f927c6..abcbb47 100644
--- a/src/ugeneui/html/version_news.html
+++ b/src/ugeneui/html/version_news.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <!--
  UGENE - Integrated Bioinformatics Tools.
- Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  http://ugene.unipro.ru
 
  This program is free software; you can redistribute it and/or
@@ -35,8 +35,10 @@
             list-style-type: square;
             list-style-position: inside;
         }
-        .features_list li:last-child {
-            margin-bottom: 0;
+		.features_list li:last-child {
+            margin-bottom: 30px;
+            list-style-type: square;
+            list-style-position: inside;
         }
         .sub_features_list li {
             margin-top: 4px;
@@ -50,33 +52,37 @@
         .research_field {
             font-style: italic;
             font-weight: bold;
+			margin-bottom: 10px;
             margin-right: 1px;
         }
+		li
+        {
+            text-indent: -12px;
+            margin-left: 12px;
+        }
     </style>
 </head>
 <body>
 <div>
-    <h3 lang="en">Changes in UGENE 1.25</h3>
-        <h3 lang="ru">Изменения в UGENE 1.25</h3>
+    <h3 lang="en">Changes in UGENE 1.28.1</h3>
     <ul class="features_list" lang="en">
-                <li><span class="research_field">NGS:</span>
-                    <ul class="sub_features_list">
-                <li>New parameter for reads mappers (BWA, Bowtie2, etc.) to remove "unpaired" reads from quality-filtered paired-end FASTQ files before the mapping</li>
-                <li>Support of different options for CutAdapt parameters in the "Raw NGS data processing" wizards (5' adapters, 3' adapters, 5' and 3' adapters)</li>
-                                <li>Optimization of the coverage calculation in the Assembly Browser</li>
-            </ul>
-                </li>
-                <li><span class="research_field">Bug fixes and minor improvements</span></li>
+                <li><span class="research_field">Tweaking of the Sanger reads mapping feature, based on feedback received</span></li>
+				<li><span class="research_field">Fix of a critical issue of searching in amino acid translations of a nucleotide sequence</span></li>
+                <li><span class="research_field">Other minor bug fixes and improvements</span></li>
     </ul>
-        <ul class="features_list" lang="ru">
-                <li><span class="research_field">NGS:</span>
-                        <ul class="sub_features_list">
-                                        <li>Возможность фильтрации прочтений, не имеющих пары, при картировании парных прочтений на референсную последовательность (с помощью BWA, Bowtie2 и т. п.)</li>
-                                        <li>Расширеный набор параметров для обрезания адаптерных последовательностей (5'-адаптеры, 3'-адаптеры, 5'- и 3'-адаптеры) в диалогах настройки схем анализа сырых данных NGS</li>
-                                        <li>Оптимизация вычисления покрытия в Assembly Browser</li>
-                        </ul>
-                </li>
-                <li><span class="research_field">Исправление ошибок, мелкие улучшения</span></li>
+	<p></p>
+	<p lang="en">
+		Any feedback and suggestions about the <a href="https://www.youtube.com/watch?v=lDovNM1oZEw">UGENE Sanger Reads Editor</a> are welcome!
+	</p>
+
+    <h3 lang="ru">Изменения в UGENE 1.28.1</h3>
+    <ul class="features_list" lang="ru">
+				<li><span class="research_field">доработка алгоритма выравнивания прочтений по Сэнгеру с учетом отзывов пользователей,</span></li>
+				<li><span class="research_field">исправление критической ошибки поиска по аминокислотным трансляциям нуклеотидной последовательности,</span></li>
+                <li><span class="research_field">исправление мелких ошибок и другие улучшения.</span></li>
     </ul>
+    <p lang="ru">
+		Мы ждем ваших отзывов по поводу <a href="https://www.youtube.com/watch?v=lDovNM1oZEw">редактора данных секвенирования по Сэнгеру</a>!
+	</p>
 </div>
 </body>
diff --git a/src/ugeneui/html/welcome_page.css b/src/ugeneui/html/welcome_page.css
index 3b58edc..ce6b8a1 100644
--- a/src/ugeneui/html/welcome_page.css
+++ b/src/ugeneui/html/welcome_page.css
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.unipro.ru
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/html/welcome_page.html b/src/ugeneui/html/welcome_page.html
index 1743139..1e0a419 100644
--- a/src/ugeneui/html/welcome_page.html
+++ b/src/ugeneui/html/welcome_page.html
@@ -1,6 +1,6 @@
 <!--
  UGENE - Integrated Bioinformatics Tools.
- Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  http://ugene.unipro.ru
  
  This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/Main.cpp b/src/ugeneui/src/Main.cpp
index 6033873..d230fb9 100644
--- a/src/ugeneui/src/Main.cpp
+++ b/src/ugeneui/src/Main.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,9 +20,11 @@
  */
 
 #include <QApplication>
-#include <QStyleFactory>
-#include <QMessageBox>
+#include <QDesktopWidget>
 #include <QIcon>
+#include <QMessageBox>
+#include <QStyleFactory>
+#include <QTranslator>
 
 #include <U2Algorithm/AlignmentAlgorithmsRegistry.h>
 #include <U2Algorithm/AssemblyConsensusAlgorithmRegistry.h>
@@ -84,7 +86,7 @@
 
 #include <U2Gui/CredentialsAskerGui.h>
 #include <U2Gui/FeatureKeyFilterTask.h>
-#include <U2Gui/ImportDialogsFactories.h>
+#include <U2Gui/ImportWidgetsFactories.h>
 #include <U2Gui/LogView.h>
 #include <U2Gui/MsaContentFilterTask.h>
 #include <U2Gui/MsaSeqNameFilterTask.h>
@@ -115,7 +117,8 @@
 #include <U2View/ColorSchemaSettingsController.h>
 #include <U2View/DnaAssemblyUtils.h>
 #include <U2View/FindPatternWidgetFactory.h>
-#include <U2View/MSAExportConsensusTabFactory.h>
+#include <U2View/McaGeneralTabFactory.h>
+#include <U2View/MaExportConsensusTabFactory.h>
 #include <U2View/MSAGeneralTabFactory.h>
 #include <U2View/MSAHighlightingTabFactory.h>
 #include <U2View/PairAlignFactory.h>
@@ -168,7 +171,7 @@ static void setDataSearchPaths() {
     QStringList dataSearchPaths;
     const static char * RELATIVE_DATA_DIR = "/data";
     const static char * RELATIVE_DEV_DATA_DIR = "/../../data";
-    //on windows data is normally located in the application directory
+    //on windows data is normally located in the application folder
     QString appDirPath = AppContext::getWorkingDirectoryPath();
     if( QDir(appDirPath+RELATIVE_DATA_DIR).exists() ) {
         dataSearchPaths.push_back( appDirPath+RELATIVE_DATA_DIR );
@@ -177,7 +180,7 @@ static void setDataSearchPaths() {
     }
 
 #if (defined(Q_OS_UNIX)) && defined( UGENE_DATA_DIR )
-    //using directory which is set during installation process on Linux
+    //using folder which is set during installation process on Linux
     QString ugene_data_dir( UGENE_DATA_DIR );
     if( QDir(ugene_data_dir).exists() ) {
         dataSearchPaths.push_back( QString(UGENE_DATA_DIR) );
@@ -262,7 +265,7 @@ static void initOptionsPanels() {
     opWidgetFactoryRegistry->registerFactory(new PairAlignFactory());
     opWidgetFactoryRegistry->registerFactory(new MSATreeOptionsWidgetFactory());
     opWidgetFactoryRegistry->registerFactory(new AddTreeWidgetFactory());
-    opWidgetFactoryRegistry->registerFactory(new MSAExportConsensusFactoryTab());
+    opWidgetFactoryRegistry->registerFactory(new MsaExportConsensusTabFactory());
 
     SeqStatisticsWidgetFactory *msaSeqStatisticvsFactory = new SeqStatisticsWidgetFactory();
     QString msaSeqStatisticsId = msaSeqStatisticvsFactory->getOPGroupParameters().getGroupId();
@@ -276,6 +279,10 @@ static void initOptionsPanels() {
 
     //Tree View groups
     opWidgetFactoryRegistry->registerFactory(new TreeOptionsWidgetFactory());
+
+    //MCA groups
+    opWidgetFactoryRegistry->registerFactory(new McaGeneralTabFactory());
+    opWidgetFactoryRegistry->registerFactory(new McaExportConsensusTabFactory());
 }
 
 static void initProjectFilterTaskRegistry() {
@@ -523,7 +530,7 @@ int main(int argc, char **argv)
 
     DocumentFormatRegistryImpl* dfr = new DocumentFormatRegistryImpl();
     appContext->setDocumentFormatRegistry(dfr);
-    ImportDialogFactories::registerFactories();
+    ImportWidgetsFactories::registerFactories();
 
     IOAdapterRegistryImpl* io = new IOAdapterRegistryImpl();
     appContext->setIOAdapterRegistry(io);
diff --git a/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp b/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
index e6a05f5..5f271a5 100644
--- a/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
+++ b/src/ugeneui/src/app_settings/AppSettingsDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/app_settings/AppSettingsDialogController.h b/src/ugeneui/src/app_settings/AppSettingsDialogController.h
index b137601..dd64b99 100644
--- a/src/ugeneui/src/app_settings/AppSettingsDialogController.h
+++ b/src/ugeneui/src/app_settings/AppSettingsDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,12 +24,8 @@
 
 #include <ui_AppSettingsDialog.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidgetItem>
-#else
-#include <QtWidgets/QTreeWidgetItem>
-#endif
-#include <QtCore/QTimerEvent>
+#include <QTreeWidgetItem>
+#include <QTimerEvent>
 
 class AppSettingsDialogTree;
 
diff --git a/src/ugeneui/src/app_settings/AppSettingsDialogTree.h b/src/ugeneui/src/app_settings/AppSettingsDialogTree.h
index 9253977..e1990d9 100644
--- a/src/ugeneui/src/app_settings/AppSettingsDialogTree.h
+++ b/src/ugeneui/src/app_settings/AppSettingsDialogTree.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_APP_SETTINGS_DIALOG_TREE_H_
 #define _U2_APP_SETTINGS_DIALOG_TREE_H_
 
-#include <qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QTreeWidget>
-#else
-#include <QtWidgets/QTreeWidget>
-#endif
+#include <QTreeWidget>
 
 namespace U2 {
     class AppSettingsDialogController;
diff --git a/src/ugeneui/src/app_settings/AppSettingsGUIImpl.cpp b/src/ugeneui/src/app_settings/AppSettingsGUIImpl.cpp
index ef5ccb8..5c12821 100644
--- a/src/ugeneui/src/app_settings/AppSettingsGUIImpl.cpp
+++ b/src/ugeneui/src/app_settings/AppSettingsGUIImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/app_settings/AppSettingsGUIImpl.h b/src/ugeneui/src/app_settings/AppSettingsGUIImpl.h
index 5dd8dd2..5fb739c 100644
--- a/src/ugeneui/src/app_settings/AppSettingsGUIImpl.h
+++ b/src/ugeneui/src/app_settings/AppSettingsGUIImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
index 4d57f1a..382e9ca 100644
--- a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QStyleFactory>
-#else
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QStyleFactory>
-#endif
+#include <QFile>
+#include <QDialogButtonBox>
+#include <QStyleFactory>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -35,25 +29,45 @@
 #include <U2Core/Log.h>
 #include <U2Core/TmpDirChecker.h>
 #include <U2Core/UserApplicationsSettings.h>
+#include <U2Core/Settings.h>
 
 #include <U2Gui/U2FileDialog.h>
 
 #include "DirectoriesSettingsGUIController.h"
 
-namespace U2
-{
+namespace U2{
+#define SETTINGS_ROOT   QString("/genome_aligner_settings/")
+#define INDEX_DIR       QString("index_dir")
 
 DirectoriesSettingsPageController::DirectoriesSettingsPageController(QObject* p)
 : AppSettingsGUIPageController(tr("Directories"), APP_SETTINGS_DIRECTORIES, p)
 {
 }
 
+QString DirectoriesSettingsPageUtils::getIndexDir() {
+    QString defaultDir = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath("aligner");
+    QString res = AppContext::getSettings()->getValue(SETTINGS_ROOT + INDEX_DIR, defaultDir, true).toString();
+
+    return res;
+}
+
+void DirectoriesSettingsPageUtils::setIndexDir(const QString &indexDir) {
+    QString defaultDir = AppContext::getAppSettings()->getUserAppsSettings()->getCurrentProcessTemporaryDirPath("aligner");
+    if (defaultDir != indexDir) {
+        AppContext::getSettings()->setValue(SETTINGS_ROOT + INDEX_DIR, indexDir, true);
+    }
+}
+
+
 AppSettingsGUIPageState* DirectoriesSettingsPageController::getSavedState() {
     DirectoriesSettingsPageState* state = new DirectoriesSettingsPageState();
     UserAppsSettings* s = AppContext::getAppSettings()->getUserAppsSettings();
     state->downloadsDirPath = s->getDownloadDirPath();
+    state->documentsDirectory = s->getDefaultDataDirPath();
     state->temporaryDirPath = s->getUserTemporaryDirPath();
     state->fileStorageDirPath = s->getFileStorageDir();
+    state->indexDirectory = DirectoriesSettingsPageUtils::getIndexDir();
+    
     return state;
 }
 
@@ -61,16 +75,17 @@ void DirectoriesSettingsPageController::saveState(AppSettingsGUIPageState* s) {
     DirectoriesSettingsPageState* state = qobject_cast<DirectoriesSettingsPageState*>(s);
     UserAppsSettings* st = AppContext::getAppSettings()->getUserAppsSettings();
     st->setDownloadDirPath(state->downloadsDirPath);
-
+    st->setDefaultDataDirPath(state->documentsDirectory);
+    DirectoriesSettingsPageUtils::setIndexDir(state->indexDirectory);
     TmpDirChecker tmpDirChecker;
     if (!tmpDirChecker.checkPath(state->temporaryDirPath)) {
-        uiLog.error(tr("You do not have permission to write to \"%1\" directory\"").arg(state->temporaryDirPath));
+        uiLog.error(tr("You do not have permission to write to \"%1\" folder\"").arg(state->temporaryDirPath));
     }else{
         st->setUserTemporaryDirPath(state->temporaryDirPath);
     }
 
     if (!tmpDirChecker.checkPath(state->fileStorageDirPath)) {
-        uiLog.error(tr("You do not have permission to write to \"%1\" directory\"").arg(state->temporaryDirPath));
+        uiLog.error(tr("You do not have permission to write to \"%1\" folder\"").arg(state->temporaryDirPath));
     }else{
         st->setFileStorageDir(state->fileStorageDirPath);
     }
@@ -82,37 +97,43 @@ AppSettingsGUIPageWidget* DirectoriesSettingsPageController::createWidget(AppSet
     return r;
 }
 
-const QString DirectoriesSettingsPageController::helpPageId = QString("18222955");
+const QString DirectoriesSettingsPageController::helpPageId = QString("20874859");
 
 DirectoriesSettingsPageWidget::DirectoriesSettingsPageWidget(DirectoriesSettingsPageController* /*ctrl*/) {
     setupUi(this);
     connect(browseDownloadDirButton, SIGNAL(clicked()), SLOT(sl_browseDownloadsDirButtonClicked()));
+    connect(documentsDirectoryButton, SIGNAL(clicked()), SLOT(sl_browseDocumentsDirButtonClicked()));
     connect(browseTmpDirButton,SIGNAL(clicked()),SLOT(sl_browseTmpDirButtonClicked()));
     connect(browseFileStorageButton,SIGNAL(clicked()),SLOT(sl_browseFileStorageButtonClicked()));
     connect(cleanupStorageButton,SIGNAL(clicked()),SLOT(sl_cleanupStorage()));
-    
+    connect(indexDirectoryButton, SIGNAL(clicked()), SLOT(sl_onIndexDirButton()));
 }
 
 void DirectoriesSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
     DirectoriesSettingsPageState* state = qobject_cast<DirectoriesSettingsPageState*>(s);
     downloadsDirPathEdit->setText(state->downloadsDirPath);
+    documentsDirectoryEdit->setText(state->documentsDirectory);
     tmpDirPathEdit->setText(state->temporaryDirPath);
     fileStorageDirPathEdit->setText(state->fileStorageDirPath);
+    indexDirectoryEdit->setText(state->indexDirectory);
+
 }
 
 AppSettingsGUIPageState* DirectoriesSettingsPageWidget::getState(QString& err) const {
     Q_UNUSED(err)
     DirectoriesSettingsPageState* state = new DirectoriesSettingsPageState();
     state->downloadsDirPath = downloadsDirPathEdit->text();
+    state->documentsDirectory = documentsDirectoryEdit->text();
     state->temporaryDirPath = tmpDirPathEdit->text();
     state->fileStorageDirPath = fileStorageDirPathEdit->text();
+    state->indexDirectory = indexDirectoryEdit->text();
 
     return state;
 }
 
 void DirectoriesSettingsPageWidget::sl_browseDownloadsDirButtonClicked() {
     QString path = downloadsDirPathEdit->text();
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), path,
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         downloadsDirPathEdit->setText(dir);
@@ -120,9 +141,19 @@ void DirectoriesSettingsPageWidget::sl_browseDownloadsDirButtonClicked() {
     
 }
 
+void DirectoriesSettingsPageWidget::sl_browseDocumentsDirButtonClicked() {
+    QString path = documentsDirectoryEdit->text();
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
+        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+    if (!dir.isEmpty()) {
+        documentsDirectoryEdit->setText(dir);
+    }
+    
+}
+
 void DirectoriesSettingsPageWidget::sl_browseTmpDirButtonClicked() {
     QString path = tmpDirPathEdit->text();
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), path,
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         tmpDirPathEdit->setText(dir);
@@ -132,7 +163,7 @@ void DirectoriesSettingsPageWidget::sl_browseTmpDirButtonClicked() {
 
 void DirectoriesSettingsPageWidget::sl_browseFileStorageButtonClicked() {
     QString path = fileStorageDirPathEdit->text();
-    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), path,
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (!dir.isEmpty()) {
         fileStorageDirPathEdit->setText(dir);
@@ -144,4 +175,13 @@ void DirectoriesSettingsPageWidget::sl_cleanupStorage() {
     AppContext::getTaskScheduler()->registerTopLevelTask(t);
 }
 
+void DirectoriesSettingsPageWidget::sl_onIndexDirButton() {
+    QString path = indexDirectoryEdit->text();
+    QString dir = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), path,
+        QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+    if (!dir.isEmpty()) {
+        indexDirectoryEdit->setText(dir);
+    }
+}
+
 } //namespace
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
index ab25319..176b8c3 100644
--- a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,10 +27,15 @@
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
 
-#include <QtCore/QUrl>
+#include <QUrl>
 
 namespace U2 {
 
+class DirectoriesSettingsPageUtils {
+public:
+    static QString getIndexDir();
+    static void setIndexDir(const QString &indexDir);
+};
 
 class DirectoriesSettingsPageController : public AppSettingsGUIPageController {
     Q_OBJECT
@@ -54,8 +59,11 @@ class DirectoriesSettingsPageState : public AppSettingsGUIPageState {
     Q_OBJECT
 public:
     QString downloadsDirPath;
+    QString documentsDirectory;
     QString temporaryDirPath;
     QString fileStorageDirPath;
+    QString indexDirectoryEdit;
+    QString indexDirectory;
 };
 
 
@@ -70,9 +78,12 @@ public:
 
 private slots:
     void sl_browseDownloadsDirButtonClicked();
+    void sl_browseDocumentsDirButtonClicked();
     void sl_browseTmpDirButtonClicked();
     void sl_browseFileStorageButtonClicked();
     void sl_cleanupStorage();
+    void sl_onIndexDirButton();
+    
 };
 
 }//namespace
diff --git a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui
index bf0b23e..8335f91 100644
--- a/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui
+++ b/src/ugeneui/src/app_settings/directories_settings/DirectoriesSettingsWidget.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>641</width>
-    <height>296</height>
+    <height>448</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -19,152 +19,202 @@
   <property name="windowTitle">
    <string/>
   </property>
-  <layout class="QVBoxLayout" name="verticalLayout_4">
-   <item>
-    <widget class="QGroupBox" name="downloadedDataDirgroupBox">
-     <property name="title">
-      <string>Path to downloaded data:</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_4">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_3">
-        <item>
-         <widget class="QLineEdit" name="downloadsDirPathEdit"/>
-        </item>
+  <layout class="QGridLayout" name="gridLayout_2">
+   <item row="0" column="0">
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <widget class="QGroupBox" name="downloadedDataDirgroupBox">
+       <property name="title">
+        <string>Downloaded data</string>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout_4">
         <item>
-         <widget class="QToolButton" name="browseDownloadDirButton">
-          <property name="minimumSize">
-           <size>
-            <width>24</width>
-            <height>25</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string/>
-          </property>
-          <property name="text">
-           <string>...</string>
-          </property>
-         </widget>
+         <layout class="QHBoxLayout" name="horizontalLayout_3">
+          <item>
+           <widget class="QLineEdit" name="downloadsDirPathEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="browseDownloadDirButton">
+            <property name="minimumSize">
+             <size>
+              <width>24</width>
+              <height>25</height>
+             </size>
+            </property>
+            <property name="toolTip">
+             <string/>
+            </property>
+            <property name="text">
+             <string>...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
        </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="tmpDirGroupBox">
-     <property name="title">
-      <string>Path for temporary files</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_6">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_5">
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QGroupBox" name="tmpDirGroupBox">
+       <property name="title">
+        <string>Temporary files</string>
+       </property>
+       <layout class="QHBoxLayout" name="horizontalLayout_6">
         <item>
-         <widget class="QLineEdit" name="tmpDirPathEdit"/>
-        </item>
-        <item>
-         <widget class="QToolButton" name="browseTmpDirButton">
-          <property name="enabled">
-           <bool>true</bool>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>24</width>
-            <height>25</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>24</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>...</string>
-          </property>
-          <property name="iconSize">
-           <size>
-            <width>16</width>
-            <height>16</height>
-           </size>
-          </property>
-         </widget>
+         <layout class="QHBoxLayout" name="horizontalLayout_5">
+          <item>
+           <widget class="QLineEdit" name="tmpDirPathEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="browseTmpDirButton">
+            <property name="enabled">
+             <bool>true</bool>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>24</width>
+              <height>25</height>
+             </size>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>24</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string>...</string>
+            </property>
+            <property name="iconSize">
+             <size>
+              <width>16</width>
+              <height>16</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
        </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
-    <widget class="QGroupBox" name="fileStorageGroupBox">
-     <property name="title">
-      <string>File storage</string>
-     </property>
-     <layout class="QVBoxLayout" name="verticalLayout_6">
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_9">
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <widget class="QGroupBox" name="fileStorageGroupBox">
+       <property name="title">
+        <string>File storage</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_6">
         <item>
-         <widget class="QLineEdit" name="fileStorageDirPathEdit"/>
+         <layout class="QHBoxLayout" name="horizontalLayout_9">
+          <item>
+           <widget class="QLineEdit" name="fileStorageDirPathEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="browseFileStorageButton">
+            <property name="enabled">
+             <bool>true</bool>
+            </property>
+            <property name="minimumSize">
+             <size>
+              <width>24</width>
+              <height>25</height>
+             </size>
+            </property>
+            <property name="maximumSize">
+             <size>
+              <width>24</width>
+              <height>16777215</height>
+             </size>
+            </property>
+            <property name="text">
+             <string>...</string>
+            </property>
+            <property name="iconSize">
+             <size>
+              <width>16</width>
+              <height>16</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
         <item>
-         <widget class="QToolButton" name="browseFileStorageButton">
-          <property name="enabled">
-           <bool>true</bool>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>24</width>
-            <height>25</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>24</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="text">
-           <string>...</string>
-          </property>
-          <property name="iconSize">
-           <size>
-            <width>16</width>
-            <height>16</height>
-           </size>
-          </property>
-         </widget>
+         <layout class="QHBoxLayout" name="horizontalLayout_8">
+          <item>
+           <spacer name="horizontalSpacer">
+            <property name="orientation">
+             <enum>Qt::Horizontal</enum>
+            </property>
+            <property name="sizeHint" stdset="0">
+             <size>
+              <width>40</width>
+              <height>20</height>
+             </size>
+            </property>
+           </spacer>
+          </item>
+          <item>
+           <widget class="QPushButton" name="cleanupStorageButton">
+            <property name="text">
+             <string>Cleanup storage</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
        </layout>
-      </item>
-      <item>
-       <layout class="QHBoxLayout" name="horizontalLayout_8">
+      </widget>
+     </item>
+     <item row="4" column="0">
+      <widget class="QGroupBox" name="groupBox_4">
+       <property name="title">
+        <string>Build indexes</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
         <item>
-         <spacer name="horizontalSpacer">
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint" stdset="0">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QLineEdit" name="indexDirectoryEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="indexDirectoryButton">
+            <property name="text">
+             <string notr="true">...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
+       </layout>
+      </widget>
+     </item>
+     <item row="1" column="0">
+      <widget class="QGroupBox" name="groupBox_5">
+       <property name="title">
+        <string>Documents</string>
+       </property>
+       <layout class="QVBoxLayout" name="verticalLayout_4">
         <item>
-         <widget class="QPushButton" name="cleanupStorageButton">
-          <property name="text">
-           <string>Cleanup storage</string>
-          </property>
-         </widget>
+         <layout class="QHBoxLayout" name="horizontalLayout_10">
+          <item>
+           <widget class="QLineEdit" name="documentsDirectoryEdit"/>
+          </item>
+          <item>
+           <widget class="QToolButton" name="documentsDirectoryButton">
+            <property name="text">
+             <string notr="true">...</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
         </item>
        </layout>
-      </item>
-     </layout>
-    </widget>
+      </widget>
+     </item>
+    </layout>
    </item>
-   <item>
+   <item row="1" column="0">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
@@ -172,7 +222,7 @@
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
-       <height>40</height>
+       <height>31</height>
       </size>
      </property>
     </spacer>
@@ -181,7 +231,4 @@
  </widget>
  <resources/>
  <connections/>
- <buttongroups>
-  <buttongroup name="buttonGroup"/>
- </buttongroups>
 </ui>
diff --git a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
index 5fd2c92..f1ae2a9 100644
--- a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -71,7 +71,7 @@ AppSettingsGUIPageWidget* FormatSettingsGUIPageController::createWidget(AppSetti
     return r;
 }
 
-const QString FormatSettingsGUIPageController::helpPageId = QString("18222948");
+const QString FormatSettingsGUIPageController::helpPageId = QString("20874853");
 
 FormatSettingsGUIPageWidget::FormatSettingsGUIPageWidget(FormatSettingsGUIPageController*) {
     setupUi(this);
diff --git a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h
index 6b1b95e..187d79b 100644
--- a/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/format_settings/FormatSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
index f7bf165..6529d01 100644
--- a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -62,7 +62,7 @@ AppSettingsGUIPageWidget* LogSettingsPageController::createWidget(AppSettingsGUI
     return w;
 }
 
-const QString LogSettingsPageController::helpPageId = QString("18222949");
+const QString LogSettingsPageController::helpPageId = QString("20874854");
 
 //////////////////////////////////////////////////////////////////////////
 // widget
diff --git a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
index 0d25244..c67f076 100644
--- a/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/logview_settings/LogSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
index 65f55e9..76a6ff1 100644
--- a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,7 @@
  */
 
 #include "NetworkSettingsGUIController.h"
-#include <QtCore/QFile>
+#include <QFile>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -65,7 +65,7 @@ AppSettingsGUIPageWidget* NetworkSettingsPageController::createWidget(AppSetting
     return r;
 }
 
-const QString NetworkSettingsPageController::helpPageId = QString("18222947");
+const QString NetworkSettingsPageController::helpPageId = QString("20874852");
 
 NetworkSettingsPageWidget::NetworkSettingsPageWidget() {
     setupUi( this );
diff --git a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h
index f35033d..8e279a8 100644
--- a/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/network_settings/NetworkSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
 
-#include <QtCore/QUrl>
+#include <QUrl>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
index e0f4561..bd78c97 100644
--- a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -59,7 +59,7 @@ AppSettingsGUIPageWidget* ResourceSettingsGUIPageController::createWidget(AppSet
     return r;
 }
 
-const QString ResourceSettingsGUIPageController::helpPageId = QString("18222946");
+const QString ResourceSettingsGUIPageController::helpPageId = QString("20874851");
 
 ResourceSettingsGUIPageWidget::ResourceSettingsGUIPageWidget(ResourceSettingsGUIPageController*) {
     setupUi(this);
diff --git a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
index 8257c01..a4372f0 100644
--- a/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/resource_settings/ResourceSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
 
-#include <QtCore/QUrl>
+#include <QUrl>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
index 2a0d71c..3e977bc 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,9 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/QFile>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialogButtonBox>
-#include <QtGui/QStyleFactory>
-#else
-#include <QtWidgets/QDialogButtonBox>
-#include <QtWidgets/QStyleFactory>
-#endif
+#include <QFile>
+#include <QDialogButtonBox>
+#include <QStyleFactory>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
@@ -93,7 +87,7 @@ void UserApplicationsSettingsPageController::saveState(AppSettingsGUIPageState*
     st->setOpenLastProjectAtStartup(state->openLastProjectFlag);
     st->setAskToSaveProject(state->askToSaveProject);
     st->setEnableCollectingStatistics(state->enableStatistics);
-    st->setTabbedWindowLayout(state->tabbedWindowLayout);
+    //st->setTabbedWindowLayout(state->tabbedWindowLayout);
     st->setResetSettings(state->resetSettings);
     st->setUpdatesEnabled(state->updatesEnabled);
 
@@ -110,7 +104,7 @@ AppSettingsGUIPageWidget* UserApplicationsSettingsPageController::createWidget(A
     return r;
 }
 
-const QString UserApplicationsSettingsPageController::helpPageId = QString("18222945");
+const QString UserApplicationsSettingsPageController::helpPageId = QString("20874850");
 
 UserApplicationsSettingsPageWidget::UserApplicationsSettingsPageWidget(UserApplicationsSettingsPageController* ctrl) {
     setupUi(this);
@@ -126,9 +120,7 @@ UserApplicationsSettingsPageWidget::UserApplicationsSettingsPageWidget(UserAppli
 void UserApplicationsSettingsPageWidget::setState(AppSettingsGUIPageState* s) {
     UserApplicationsSettingsPageState* state = qobject_cast<UserApplicationsSettingsPageState*>(s);
     enableStatisticsEdit->setChecked(state->enableStatistics);
-    tabbedButton->setChecked(state->tabbedWindowLayout);
-    mdiButton->setChecked(!state->tabbedWindowLayout);
-    
+
     int idx = langCombo->findData(state->translFile);
     if (idx < 0) {
         idx = langCombo->count();
@@ -158,7 +150,6 @@ AppSettingsGUIPageState* UserApplicationsSettingsPageWidget::getState(QString& /
     state->askToSaveProject = askToSaveProject->itemData(askToSaveProject->currentIndex()).toInt();
     state->style = styleCombo->currentText();
     state->enableStatistics = enableStatisticsEdit->isChecked();
-    state->tabbedWindowLayout = tabbedButton->isChecked();
     state->resetSettings = resetSettingsBox->isChecked();
     state->updatesEnabled = updatesCheckBox->isChecked();
 
diff --git a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h
index cd2335f..361ab52 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,7 @@
 #include <U2Core/NetworkConfiguration.h>
 #include <U2Gui/AppSettingsGUI.h>
 
-#include <QtCore/QUrl>
+#include <QUrl>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui
index 54cca06..9b2d08e 100644
--- a/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui
+++ b/src/ugeneui/src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>641</width>
-    <height>449</height>
+    <height>524</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -58,35 +58,6 @@
     </widget>
    </item>
    <item>
-    <widget class="QGroupBox" name="groupBox_4">
-     <property name="title">
-      <string>Window Layout</string>
-     </property>
-     <layout class="QHBoxLayout" name="horizontalLayout_7">
-      <item>
-       <widget class="QRadioButton" name="mdiButton">
-        <property name="text">
-         <string>Multiple documents</string>
-        </property>
-        <attribute name="buttonGroup">
-         <string notr="true">buttonGroup</string>
-        </attribute>
-       </widget>
-      </item>
-      <item>
-       <widget class="QRadioButton" name="tabbedButton">
-        <property name="text">
-         <string>Tabbed documents</string>
-        </property>
-        <attribute name="buttonGroup">
-         <string notr="true">buttonGroup</string>
-        </attribute>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-   <item>
     <widget class="QGroupBox" name="projectBox">
      <property name="title">
       <string>Project</string>
diff --git a/src/ugeneui/src/main_window/AboutDialogController.cpp b/src/ugeneui/src/main_window/AboutDialogController.cpp
index b7eadb5..776a671 100644
--- a/src/ugeneui/src/main_window/AboutDialogController.cpp
+++ b/src/ugeneui/src/main_window/AboutDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,17 +26,11 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 
-#include <QtGui/QPainter>
-#include <QtGui/QBrush>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QStyle>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QMessageBox>
-#else
-#include <QtWidgets/QStyle>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QMessageBox>
-#endif
+#include <QPainter>
+#include <QBrush>
+#include <QStyle>
+#include <QHBoxLayout>
+#include <QMessageBox>
 #include <assert.h>
 
 namespace U2 {
diff --git a/src/ugeneui/src/main_window/AboutDialogController.h b/src/ugeneui/src/main_window/AboutDialogController.h
index ec8f70b..82ee388 100644
--- a/src/ugeneui/src/main_window/AboutDialogController.h
+++ b/src/ugeneui/src/main_window/AboutDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,20 +24,13 @@
 
 #include <ui_AboutDialog.h>
 
-#include <QtCore/QBasicTimer>
-#include <QtCore/QPointer>
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QDialog>
-#endif
-#include <QtGui/QPaintEvent>
-#include <QtGui/QKeyEvent>
-#include <QtGui/QMouseEvent>
-
+#include <QBasicTimer>
+#include <QDialog>
+#include <QKeyEvent>
+#include <QLabel>
+#include <QMouseEvent>
+#include <QPaintEvent>
+#include <QPointer>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/CheckUpdatesTask.cpp b/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
index a642200..c39e873 100644
--- a/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
+++ b/src/ugeneui/src/main_window/CheckUpdatesTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/main_window/CheckUpdatesTask.h b/src/ugeneui/src/main_window/CheckUpdatesTask.h
index 2e06dd2..03f8e2a 100644
--- a/src/ugeneui/src/main_window/CheckUpdatesTask.h
+++ b/src/ugeneui/src/main_window/CheckUpdatesTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/main_window/DockManagerImpl.cpp b/src/ugeneui/src/main_window/DockManagerImpl.cpp
index 8431bb5..391d41d 100644
--- a/src/ugeneui/src/main_window/DockManagerImpl.cpp
+++ b/src/ugeneui/src/main_window/DockManagerImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,17 @@
  * MA 02110-1301, USA.
  */
 
-#include "DockManagerImpl.h"
-#include "MainWindowImpl.h"
-
-#include <task_view/TaskStatusBar.h>
+#include <QDockWidget>
+#include <QToolBar>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Settings.h>
 
+#include "DockManagerImpl.h"
+#include "DockWidgetPainter.h"
+#include "MainWindowImpl.h"
+#include "task_view/TaskStatusBar.h"
+
 namespace U2 {
 
 #define DOCK_SETTINGS  QString("mwdockview/")
@@ -123,116 +126,6 @@ QToolBar* MWDockManagerImpl::getDockBar(MWDockArea a) const {
     return NULL;
 }
 
-
-#define MAX_LABEL_BASE_WIDTH 90
-#define MAX_LABEL_EXTRA_WIDTH 20
-#define IDEAL_LABEL_HEIGHT 25
-#define MIN_LABEL_EXTRA_HEIGHT 6
-#define ICON_TEXT_DIST  6
-#define ICON_SIZE       16
-
-static void updateLabel(DockData* d, bool active) {
-    QFont font;//app default
-    QFontMetrics fm(font);
-    QString text = d->wrapWidget->windowTitle();
-
-    QKeySequence ks = d->action == NULL ? QKeySequence(): d->action->shortcut();
-    QString keyPrefix = "";
-    if (ks.count() == 1) {
-        for (int k = (int)Qt::Key_0; k <= (int)Qt::Key_9; k++) {
-            if (ks[0] == (k | (int)Qt::ALT)) {
-                keyPrefix = QString::number(k - (int)Qt::Key_0) + ": ";
-                break;
-            }
-        }
-    }
-
-    QIcon icon = d->wrapWidget->windowIcon();
-    bool hasIcon = !icon.isNull();
-    int iconSize =  hasIcon ? ICON_SIZE : 0;
-    int iconTextDist  = hasIcon ? ICON_TEXT_DIST : 0;
-    
-    int textWidth = fm.width(keyPrefix + text);
-    int textHeight = fm.height();
-    bool vertical = d->area  == MWDockArea_Bottom ? false : true; 
-    int d1 = qMax(textWidth+iconSize+iconTextDist, MAX_LABEL_BASE_WIDTH) + MAX_LABEL_EXTRA_WIDTH;
-    int d2 = qMax(IDEAL_LABEL_HEIGHT, textHeight + MIN_LABEL_EXTRA_HEIGHT);
-    QPixmap pix(vertical ? d2 : d1, vertical ? d1 : d2);
-#ifdef Q_OS_WIN
-    pix.fill(Qt::transparent);
-#else
-    QColor bgColor = QApplication::palette().brush(QPalette::Window).color();
-    pix.fill(bgColor);
-#endif
-    
-    QRect pixRect = pix.rect();
-    QPainter paint;
-    paint.begin(&pix);
-
-    //rounded rect
-    paint.setPen(Qt::black);
-    QRectF roundedRect(2, 2, pixRect.width()-4,pixRect.height()-4);
-#ifdef Q_OS_WIN
-    QColor fillColor = QColor(0, 0, 0, active ? 30 : 5);
-#else
-    QColor fillColor = bgColor;
-    if (active) {
-        fillColor = bgColor.darker(115);
-    }
-#endif
-
-    paint.fillRect(roundedRect, fillColor);
-    paint.drawLine((int) roundedRect.left() + 1, (int)roundedRect.top(), (int)roundedRect.right() - 1, (int)roundedRect.top());
-    paint.drawLine((int)roundedRect.left() + 1, (int)roundedRect.bottom(), (int)roundedRect.right() - 1, (int)roundedRect.bottom());
-    paint.drawLine((int)roundedRect.left(), (int)roundedRect.top() + 1, (int)roundedRect.left(), (int)roundedRect.bottom() - 1);
-    paint.drawLine((int)roundedRect.right(), (int)roundedRect.top() + 1, (int)roundedRect.right(), (int)roundedRect.bottom() - 1);
-
-    //text
-    int xText = 0; int yText = 0;
-    int aText = fm.ascent();
-    int fontYOffset = aText / 2;
-    int fontXOffset = (d1 - textWidth - iconSize - iconTextDist) / 2 + iconSize + iconTextDist;
-    if (d->area == MWDockArea_Left) {
-        paint.rotate(-90);
-        xText = fontXOffset-d1;
-        yText = pixRect.width()/2 + fontYOffset;
-    } else if (d->area == MWDockArea_Right) {
-        paint.rotate(90);
-        xText = fontXOffset;
-        yText = -pixRect.width()/2 + fontYOffset;
-    } else {
-        xText = fontXOffset;
-        yText = pixRect.height()/2 + fontYOffset;
-    }
-    if (hasIcon) {
-        int xIcon = xText - iconTextDist - iconSize;
-        QPixmap p = icon.pixmap(iconSize, iconSize);
-        if (d->area == MWDockArea_Left) {
-            paint.drawPixmap(xIcon, 1 + (pix.width() - iconSize) / 2, p);
-        } else if (d->area == MWDockArea_Right) {
-            paint.drawPixmap(xIcon, -(1 + (pix.width() - iconSize) / 2) - iconSize, p);
-        } else {
-            paint.drawPixmap(xIcon, 1 + (pix.height() - iconSize) / 2, p);
-            
-        }
-    }
-    int prefixDx = 0;
-    if (!keyPrefix.isEmpty()) {
-        font.setUnderline(true);
-        paint.setFont(font);
-        prefixDx = fm.width(keyPrefix.at(0));
-        paint.drawText(xText, yText, keyPrefix.left(1));
-
-        text = keyPrefix.mid(1) + text;
-        font.setUnderline(false);
-    }
-    paint.setFont(font);
-    paint.drawText(xText + prefixDx, yText, text);
-    paint.end();
-    d->label->resize(pix.size());
-    d->label->setPixmap(pix);
-}
-
 static bool ksInUse(const QKeySequence& ks, const QList<DockData*>& docks) {
     foreach(DockData* d, docks) {
         if (d->action!=NULL && d->action->shortcut() == ks) {
@@ -271,7 +164,7 @@ QAction* MWDockManagerImpl::registerDock(MWDockArea area, QWidget* w, const QKey
     }
     data->label->setToolTip(ttip);
 
-    updateLabel(data, false);
+    DockWidgetPainter::updateLabel(data, false);
 
     docks.append(data);
     
@@ -368,7 +261,7 @@ void MWDockManagerImpl::openDock(DockData* d) {
 
 	//open new dock
     assert(d->wrapWidget != NULL);
-    updateLabel(d, true);
+    DockWidgetPainter::updateLabel(d, true);
     restoreDockGeometry(d);
 	d->dock = new QDockWidget();
     d->dock->setObjectName("mw_docArea");
@@ -391,7 +284,7 @@ void MWDockManagerImpl::openDock(DockData* d) {
 void MWDockManagerImpl::closeDock(DockData* d) {
     activeDocks[d->area] = NULL;
     if (d->wrapWidget!=NULL) { //widget is closed manually by user ->detach it from its parent to avoid deletion on d->dock->close();
-        updateLabel(d, false);
+        DockWidgetPainter::updateLabel(d, false);
         saveDockGeometry(d);
         lastActiveDocksState[d->area].clear(); 
         d->wrapWidget->setParent(NULL);
diff --git a/src/ugeneui/src/main_window/DockManagerImpl.h b/src/ugeneui/src/main_window/DockManagerImpl.h
index 6e9450e..2730277 100644
--- a/src/ugeneui/src/main_window/DockManagerImpl.h
+++ b/src/ugeneui/src/main_window/DockManagerImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,13 +22,11 @@
 #ifndef _DOCK_MANAGER_IMPL_H_
 #define _DOCK_MANAGER_IMPL_H_
 
+#include <QIcon>
+
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
+class QLabel;
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/DockWidgetPainter.cpp b/src/ugeneui/src/main_window/DockWidgetPainter.cpp
new file mode 100644
index 0000000..421cedf
--- /dev/null
+++ b/src/ugeneui/src/main_window/DockWidgetPainter.cpp
@@ -0,0 +1,201 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <QAction>
+#include <QApplication>
+#include <QLabel>
+#include <QPainter>
+
+#include <U2Core/U2SafePoints.h>
+
+#include "DockManagerImpl.h"
+#include "DockWidgetPainter.h"
+
+namespace U2 {
+
+const int DockWidgetPaintData::MAX_LABEL_BASE_WIDTH = 90;
+const int DockWidgetPaintData::MAX_LABEL_EXTRA_WIDTH = 20;
+const int DockWidgetPaintData::IDEAL_LABEL_HEIGHT = 25;
+const int DockWidgetPaintData::MIN_LABEL_EXTRA_HEIGHT = 6;
+const int DockWidgetPaintData::ICON_TEXT_DIST = 6;
+const int DockWidgetPaintData::ICON_SIZE = 16;
+
+void DockWidgetPainter::updateLabel(DockData *d, bool active) {
+    const QIcon icon = d->wrapWidget->windowIcon();
+    const QString text = d->wrapWidget->windowTitle();
+    const QString keyPrefix = findKeyPrefix(d->action);
+    const DockWidgetPaintData paintData(icon, keyPrefix + text, d->area);
+
+    // Create pixmap
+    const QSize widgetSize = paintData.calculateWidgetSize();
+    const int devicePixelRatio = d->wrapWidget->devicePixelRatio();
+    QPixmap pixmap(widgetSize * devicePixelRatio);
+    pixmap.setDevicePixelRatio(devicePixelRatio);
+    pixmap.fill(getBackgroundColor());
+
+    // Paint
+    QPainter painter;
+    painter.begin(&pixmap);
+    drawBorder(active, widgetSize, getBackgroundColor(), painter);
+    setupOrientation(d->area, painter);
+    QPoint textPoint = paintData.calculateTextPoint(widgetSize);
+    drawText(keyPrefix, text, textPoint, painter);
+    if (paintData.getHasIcon()) {
+       QPoint iconPoint = paintData.calculateIconPoint(textPoint, widgetSize);
+       drawIcon(icon, iconPoint, paintData.getIconSize(), painter);
+    }
+    painter.end();
+
+    // Save results
+    d->label->resize(widgetSize);
+    d->label->setPixmap(pixmap);
+}
+
+QString DockWidgetPainter::findKeyPrefix(const QAction *action) {
+    const QKeySequence ks = action == NULL ? QKeySequence(): action->shortcut();
+    if (ks.count() == 1) {
+        for (int k = (int)Qt::Key_0; k <= (int)Qt::Key_9; k++) {
+            if (ks[0] == (k | (int)Qt::ALT)) {
+                return QString::number(k - (int)Qt::Key_0) + ": ";
+            }
+        }
+    }
+    return "";
+}
+
+QColor DockWidgetPainter::getBackgroundColor() {
+#ifdef Q_OS_WIN
+    return QColor(Qt::transparent);
+#else
+    return QApplication::palette().brush(QPalette::Window).color();
+#endif
+}
+
+QColor DockWidgetPainter::getInnerColor(bool active, const QColor &backgroundColor) {
+#ifdef Q_OS_WIN
+    Q_UNUSED(active);
+    Q_UNUSED(backgroundColor);
+    return QColor(0, 0, 0, active ? 30 : 5);
+#else
+    QColor innerColor = backgroundColor;
+    if (active) {
+        innerColor = backgroundColor.darker(115);
+    }
+    return innerColor;
+#endif
+}
+
+void DockWidgetPainter::drawBorder(bool active, const QSize &widgetSize, const QColor &backgroundColor, QPainter &painter) {
+    const QRectF roundedRect(2, 2, widgetSize.width() - 4, widgetSize.height() - 4);
+    const QColor innerColor = getInnerColor(active, backgroundColor);
+    painter.setPen(Qt::black);
+    painter.fillRect(roundedRect, innerColor);
+    painter.drawLine((int) roundedRect.left() + 1, (int)roundedRect.top(), (int)roundedRect.right() - 1, (int)roundedRect.top());
+    painter.drawLine((int)roundedRect.left() + 1, (int)roundedRect.bottom(), (int)roundedRect.right() - 1, (int)roundedRect.bottom());
+    painter.drawLine((int)roundedRect.left(), (int)roundedRect.top() + 1, (int)roundedRect.left(), (int)roundedRect.bottom() - 1);
+    painter.drawLine((int)roundedRect.right(), (int)roundedRect.top() + 1, (int)roundedRect.right(), (int)roundedRect.bottom() - 1);
+}
+
+void DockWidgetPainter::setupOrientation(MWDockArea area, QPainter &painter) {
+    if (area == MWDockArea_Left) {
+        painter.rotate(-90);
+    } else if (area == MWDockArea_Right) {
+        painter.rotate(90);
+    }
+}
+
+void DockWidgetPainter::drawIcon(const QIcon &icon, const QPoint &iconPoint, int iconSize, QPainter &painter) {
+    const QPixmap p = icon.pixmap(iconSize, iconSize);
+    painter.drawPixmap(iconPoint, p);
+}
+
+void DockWidgetPainter::drawText(const QString &keyPrefix, const QString &text, const QPoint &textPoint, QPainter &painter) {
+    int prefixDx = 0;
+    QString plainText = text;
+    if (!keyPrefix.isEmpty()) {
+        QFont font; //app default
+        font.setUnderline(true);
+
+        painter.setFont(font);
+        prefixDx = QFontMetrics(font).width(keyPrefix[0]);
+        painter.drawText(textPoint.x(), textPoint.y(), keyPrefix.left(1));
+        plainText = keyPrefix.mid(1) + text;
+
+        font.setUnderline(false);
+        painter.setFont(font);
+    }
+    painter.drawText(textPoint.x() + prefixDx, textPoint.y(), plainText);
+}
+
+DockWidgetPaintData::DockWidgetPaintData(const QIcon &icon, const QString &text, MWDockArea area)
+: area(area),
+  fm(QFontMetrics(QFont())) //app default
+{
+    hasIcon = !icon.isNull();
+    iconSize = hasIcon ? ICON_SIZE : 0;
+    iconTextDist = hasIcon ? ICON_TEXT_DIST : 0;
+
+    textWidth = fm.width(text);
+    textHeight = fm.height();
+}
+
+QSize DockWidgetPaintData::calculateWidgetSize() const {
+    const bool horizontal = (area == MWDockArea_Bottom);
+    const int width = qMax(textWidth + iconSize + iconTextDist, MAX_LABEL_BASE_WIDTH) + MAX_LABEL_EXTRA_WIDTH;
+    const int height = qMax(IDEAL_LABEL_HEIGHT, textHeight + MIN_LABEL_EXTRA_HEIGHT);
+    return QSize(horizontal ? width : height, horizontal ? height: width);
+}
+
+QPoint DockWidgetPaintData::calculateTextPoint(const QSize &widgetSize) const {
+    const int widgetWidth = (area == MWDockArea_Bottom) ? widgetSize.width() : widgetSize.height();
+    const int fontYOffset = fm.ascent() / 2;
+    const int fontXOffset = (widgetWidth - textWidth - iconSize - iconTextDist) / 2 + iconSize + iconTextDist;
+    if (area == MWDockArea_Left) {
+        return QPoint(fontXOffset - widgetWidth, widgetSize.width()/2 + fontYOffset);
+    } else if (area == MWDockArea_Right) {
+        return QPoint(fontXOffset, -widgetSize.width()/2 + fontYOffset);
+    } else {
+        return QPoint(fontXOffset, widgetSize.height()/2 + fontYOffset);
+    }
+}
+
+QPoint DockWidgetPaintData::calculateIconPoint(const QPoint &textPoint, const QSize &widgetSize) const {
+    CHECK(hasIcon, QPoint());
+
+    const int x = textPoint.x() - iconTextDist - iconSize;
+    if (area == MWDockArea_Left) {
+        return QPoint(x, 1 + (widgetSize.width() - iconSize) / 2);
+    } else if (area == MWDockArea_Right) {
+        return QPoint(x, -(1 + (widgetSize.width() - iconSize) / 2) - iconSize);
+    } else {
+        return QPoint(x, 1 + (widgetSize.height() - iconSize) / 2);
+    }
+}
+
+bool DockWidgetPaintData::getHasIcon() const {
+    return hasIcon;
+}
+
+int DockWidgetPaintData::getIconSize() const {
+    return iconSize;
+}
+
+} // U2
diff --git a/src/ugeneui/src/main_window/DockWidgetPainter.h b/src/ugeneui/src/main_window/DockWidgetPainter.h
new file mode 100644
index 0000000..f8efec5
--- /dev/null
+++ b/src/ugeneui/src/main_window/DockWidgetPainter.h
@@ -0,0 +1,75 @@
+/**
+ * UGENE - Integrated Bioinformatics Tools.
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
+ * http://ugene.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _U2_DOCK_WIDGET_PAINTER_H_
+#define _U2_DOCK_WIDGET_PAINTER_H_
+
+#include <U2Gui/MainWindow.h>
+
+namespace U2 {
+
+class DockData;
+
+class DockWidgetPainter {
+public:
+    static void updateLabel(DockData *d, bool active);
+
+private:
+    static QString findKeyPrefix(const QAction *action);
+    static QColor getBackgroundColor();
+    static QColor getInnerColor(bool active, const QColor &backgroundColor);
+    static void drawBorder(bool active, const QSize &widgetSize, const QColor &backgroundColor, QPainter &updateLabel);
+    static void setupOrientation(MWDockArea area, QPainter &updateLabel);
+    static void drawIcon(const QIcon &icon, const QPoint &iconPoint, int iconSize, QPainter &updateLabel);
+    static void drawText(const QString &keyPrefix, const QString &text, const QPoint &textPoint, QPainter &updateLabel);
+};
+
+class DockWidgetPaintData {
+public:
+    DockWidgetPaintData(const QIcon &icon, const QString &text, MWDockArea area);
+
+    QSize calculateWidgetSize() const;
+    QPoint calculateTextPoint(const QSize &widgetSize) const;
+    QPoint calculateIconPoint(const QPoint &textPoint, const QSize &widgetSize) const;
+
+    bool getHasIcon() const;
+    int getIconSize() const;
+
+private:
+    MWDockArea area;
+    bool hasIcon;
+    int iconSize;
+    int iconTextDist;
+    QFontMetrics fm;
+    int textWidth;
+    int textHeight;
+
+    static const int MAX_LABEL_BASE_WIDTH;
+    static const int MAX_LABEL_EXTRA_WIDTH;
+    static const int IDEAL_LABEL_HEIGHT;
+    static const int MIN_LABEL_EXTRA_HEIGHT;
+    static const int ICON_TEXT_DIST;
+    static const int ICON_SIZE;
+};
+
+} // U2
+
+#endif // _U2_DOCK_WIDGET_PAINTER_H_
diff --git a/src/ugeneui/src/main_window/MDIManagerImpl.cpp b/src/ugeneui/src/main_window/MDIManagerImpl.cpp
index b79b8ed..6a7a9e0 100644
--- a/src/ugeneui/src/main_window/MDIManagerImpl.cpp
+++ b/src/ugeneui/src/main_window/MDIManagerImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,20 +28,11 @@
 #include <U2Core/UserApplicationsSettings.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/QSet>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QMenu>
-#include <QtGui/QHBoxLayout>
-#include <QtGui/QToolBar>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QHBoxLayout>
-#include <QtWidgets/QToolBar>
-#endif
-//#include <QtGui/QApplication>
-#include <QtGui/QtEvents>
+#include <QSet>
+#include <QAction>
+#include <QMenu>
+#include <QHBoxLayout>
+#include <QToolBar>
 #include <QShortcut>
 
 namespace U2 {
@@ -81,6 +72,21 @@ void MWMDIManagerImpl::prepareGUI() {
     closeAllAct->setStatusTip(tr("Close all windows"));
     connect(closeAllAct, SIGNAL(triggered()), mdiArea, SLOT(closeAllSubWindows()));
 
+    windowLayout = new QMenu(tr("Window layout"));
+    windowLayout->setObjectName("Window layout");
+    windowLayout->setStatusTip(tr("Window layout"));
+
+    bool tabbedLayout = AppContext::getAppSettings()->getUserAppsSettings()->tabbedWindowLayout();
+    multipleDocsAct = new QAction(tr("Multiple documents"), this);
+    multipleDocsAct->setCheckable(true);
+    multipleDocsAct->setChecked(!tabbedLayout);
+    connect(multipleDocsAct, SIGNAL(triggered()), SLOT(sl_setWindowLayoutToMultiDoc()));
+
+    tabbedDocsAct = new QAction(tr("Tabbed documents"), this);
+    tabbedDocsAct->setCheckable(true);
+    tabbedDocsAct->setChecked(tabbedLayout);
+    connect(tabbedDocsAct, SIGNAL(triggered()), SLOT(sl_setWindowLayoutToTabbed()));
+
     tileAct = new QAction(QIcon(":ugene/images/window_tile.png"), tr("Tile windows"), this);
     tileAct->setObjectName("Tile windows");
     tileAct->setStatusTip(tr("Tile windows"));
@@ -188,8 +194,12 @@ void MWMDIManagerImpl::updateActions() {
 void MWMDIManagerImpl::sl_updateWindowMenu() {
     QMenu* windowMenu = mw->getTopLevelMenu(MWMENU_WINDOW);
     windowMenu->clear();//TODO: avoid cleaning 3rd party actions
+    windowMenu->addMenu(windowLayout);
+    windowLayout->addAction(multipleDocsAct);
+    windowLayout->addAction(tabbedDocsAct);
     windowMenu->addAction(closeAct);
     windowMenu->addAction(closeAllAct);
+
     if (mdiArea->viewMode() == QMdiArea::SubWindowView) {
         windowMenu->addSeparator();
         windowMenu->addAction(tileAct);
@@ -310,8 +320,7 @@ MDIItem* MWMDIManagerImpl::getMDIItem(QMdiSubWindow* qw) const {
 
 void MWMDIManagerImpl::activateWindow(MWMDIWindow* w)  {
     MDIItem* i = getMDIItem(w);
-    assert(i);
-    if (i==0) {
+    if (i == NULL) {
         return;
     }
     AppContext::setActiveWindowName(w->windowTitle());
@@ -417,11 +426,22 @@ MWMDIWindow* MWMDIManagerImpl::getActiveWindow() const {
 }
 
 void MWMDIManagerImpl::sl_updateWindowLayout() {
-    if (AppContext::getAppSettings()->getUserAppsSettings()->tabbedWindowLayout()) {
-        mdiArea->setViewMode(QMdiArea::TabbedView);
-    } else {
-        mdiArea->setViewMode(QMdiArea::SubWindowView);
-    }
+    bool tabbed = AppContext::getAppSettings()->getUserAppsSettings()->tabbedWindowLayout();
+    mdiArea->setViewMode(tabbed? QMdiArea::TabbedView : QMdiArea::SubWindowView);
+    multipleDocsAct->setChecked(!tabbed);
+    tabbedDocsAct->setChecked(tabbed);
+}
+
+void MWMDIManagerImpl::sl_setWindowLayoutToMultiDoc() {
+    UserAppsSettings* st = AppContext::getAppSettings()->getUserAppsSettings();
+    st->setTabbedWindowLayout(false);
+    sl_updateWindowLayout();
+}
+
+void MWMDIManagerImpl::sl_setWindowLayoutToTabbed() {
+    UserAppsSettings* st = AppContext::getAppSettings()->getUserAppsSettings();
+    st->setTabbedWindowLayout(true);
+    sl_updateWindowLayout();
 }
 
 }//namespace
diff --git a/src/ugeneui/src/main_window/MDIManagerImpl.h b/src/ugeneui/src/main_window/MDIManagerImpl.h
index cf41385..27c63f5 100644
--- a/src/ugeneui/src/main_window/MDIManagerImpl.h
+++ b/src/ugeneui/src/main_window/MDIManagerImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,16 +24,11 @@
 
 #include "MainWindowImpl.h"
 
-#include <QtCore/QSignalMapper>
-#include <QtCore/QEvent>
+#include <QSignalMapper>
+#include <QEvent>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMdiArea>
-#include <QtGui/QMdiSubWindow>
-#else
-#include <QtWidgets/QMdiArea>
-#include <QtWidgets/QMdiSubWindow>
-#endif
+#include <QMdiArea>
+#include <QMdiSubWindow>
 
 namespace U2 {
 
@@ -76,7 +71,9 @@ private slots:
 	void sl_updateWindowMenu();
 	void sl_onSubWindowActivated(QMdiSubWindow *);
     void sl_updateWindowLayout();
-	
+	void sl_setWindowLayoutToMultiDoc();
+	void sl_setWindowLayoutToTabbed();
+
 private:
 	MDIItem* getMDIItem(int id) const;
 	MDIItem* getMDIItem(MWMDIWindow* w) const;
@@ -104,6 +101,9 @@ private:
 	QAction* nextAct;
 	QAction* previousAct;
 	QAction* separatorAct;
+    QMenu*   windowLayout;
+    QAction* multipleDocsAct;
+    QAction* tabbedDocsAct;
 
 	QSignalMapper*  windowMapper;
 	bool            defaultIsMaximized;
diff --git a/src/ugeneui/src/main_window/MainWindowImpl.cpp b/src/ugeneui/src/main_window/MainWindowImpl.cpp
index 6b4a086..5261121 100644
--- a/src/ugeneui/src/main_window/MainWindowImpl.cpp
+++ b/src/ugeneui/src/main_window/MainWindowImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,7 +27,9 @@
 #include <algorithm>
 
 #include <QAction>
+#include <QDesktopServices>
 #include <QFont>
+#include <QMessageBox>
 #include <QPainter>
 #include <QPixmap>
 #include <QToolBar>
@@ -39,6 +41,7 @@
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/Task.h>
 #include <U2Core/TmpDirChecker.h>
@@ -47,7 +50,6 @@
 
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/ObjectViewModel.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include "AboutDialogController.h"
 #include "CheckUpdatesTask.h"
@@ -58,8 +60,8 @@
 #include "ShutdownTask.h"
 #include "TmpDirChangeDialogController.h"
 #include "ToolBarManager.h"
-#include "update/UgeneUpdater.h"
 #include "shtirlitz/Shtirlitz.h"
+#include "update/UgeneUpdater.h"
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/MainWindowImpl.h b/src/ugeneui/src/main_window/MainWindowImpl.h
index 6a2e83f..cb20d84 100644
--- a/src/ugeneui/src/main_window/MainWindowImpl.h
+++ b/src/ugeneui/src/main_window/MainWindowImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,17 +25,10 @@
 #include <U2Gui/MainWindow.h>
 #include <U2Gui/Notification.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMainWindow>
-#include <QtGui/QMenuBar>
-#include <QtGui/QMenu>
-#include <QtGui/QMdiArea>
-#else
-#include <QtWidgets/QMainWindow>
-#include <QtWidgets/QMenuBar>
-#include <QtWidgets/QMenu>
-#include <QtWidgets/QMdiArea>
-#endif
+#include <QMainWindow>
+#include <QMenuBar>
+#include <QMenu>
+#include <QMdiArea>
 
 class QMdiArea;
 class QToolBar;
diff --git a/src/ugeneui/src/main_window/MenuManager.cpp b/src/ugeneui/src/main_window/MenuManager.cpp
index 629f7cd..475e21f 100644
--- a/src/ugeneui/src/main_window/MenuManager.cpp
+++ b/src/ugeneui/src/main_window/MenuManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/main_window/MenuManager.h b/src/ugeneui/src/main_window/MenuManager.h
index db22e2e..d6d7a00 100644
--- a/src/ugeneui/src/main_window/MenuManager.h
+++ b/src/ugeneui/src/main_window/MenuManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,9 @@
 
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMenuBar>
-#include <QtGui/QMenu>
-#else
-#include <QtWidgets/QMenuBar>
-#include <QtWidgets/QMenu>
-#endif
-#include <QtCore/QEvent>
+#include <QMenuBar>
+#include <QMenu>
+#include <QEvent>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/ShutdownTask.cpp b/src/ugeneui/src/main_window/ShutdownTask.cpp
index 4ca4aef..ca40471 100644
--- a/src/ugeneui/src/main_window/ShutdownTask.cpp
+++ b/src/ugeneui/src/main_window/ShutdownTask.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/main_window/ShutdownTask.h b/src/ugeneui/src/main_window/ShutdownTask.h
index cc044ae..b2f7324 100644
--- a/src/ugeneui/src/main_window/ShutdownTask.h
+++ b/src/ugeneui/src/main_window/ShutdownTask.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -50,6 +50,7 @@ private:
 };
 
 class CloseWindowsTask : public Task {
+    Q_OBJECT
 public:
     CloseWindowsTask();
 
@@ -60,6 +61,7 @@ private:
 };
 
 class CancelAllTask : public Task {
+    Q_OBJECT
 public:
     CancelAllTask();
 
diff --git a/src/ugeneui/src/main_window/SplashScreen.cpp b/src/ugeneui/src/main_window/SplashScreen.cpp
index 46d2d13..55a940b 100644
--- a/src/ugeneui/src/main_window/SplashScreen.cpp
+++ b/src/ugeneui/src/main_window/SplashScreen.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,16 +26,11 @@
 #include <U2Core/Version.h>
 #include <U2Core/U2SafePoints.h>
 
-#include <QtCore/qcoreevent.h>
-#include <QtGui/QMovie>
-#include <QtGui/QPainter>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLayout>
-#include <QtGui/QLabel>
-#else
-#include <QtWidgets/QLayout>
-#include <QtWidgets/QLabel>
-#endif
+#include <QEvent>
+#include <QMovie>
+#include <QPainter>
+#include <QLayout>
+#include <QLabel>
 
 namespace U2{
 
@@ -89,12 +84,16 @@ bool SplashScreen::eventFilter(QObject * /*obj*/, QEvent *ev){
 SplashScreenWidget::SplashScreenWidget(){
     setObjectName("splash_screen_widget");
 
-    QImage image(":ugene/images/ugene_splash.png");
     Version v = Version::appVersion();
     version = v.text;
 
+    QImage image(":ugene/images/ugene_splash.png");
+    QSize widgetSize = image.size();
+    setFixedSize(widgetSize);
+
+    image = image.scaled(widgetSize * devicePixelRatio());
+    image.setDevicePixelRatio(devicePixelRatio());
     image1 = image2 = image;
-    setFixedSize(image1.size());
 
     dots_number = 0;
     task = "";
diff --git a/src/ugeneui/src/main_window/SplashScreen.h b/src/ugeneui/src/main_window/SplashScreen.h
index 5a43a21..540bc08 100644
--- a/src/ugeneui/src/main_window/SplashScreen.h
+++ b/src/ugeneui/src/main_window/SplashScreen.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,12 +22,7 @@
 #ifndef _U2_SPLASH_SCREEN_CONTROLLER_
 #define _U2_SPLASH_SCREEN_CONTROLLER_
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QDialog>
-#endif
+#include <QDialog>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/TmpDirChangeDialogController.cpp b/src/ugeneui/src/main_window/TmpDirChangeDialogController.cpp
index e600c51..41d4ef7 100644
--- a/src/ugeneui/src/main_window/TmpDirChangeDialogController.cpp
+++ b/src/ugeneui/src/main_window/TmpDirChangeDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,7 +28,7 @@ namespace U2 {
 TmpDirChangeDialogController::TmpDirChangeDialogController(QString path, QWidget* p) : QDialog(p), tmpDirPath(path) {
     setupUi(this);
     QString message = "You do not have permission to write to \"" + tmpDirPath +
-                         "\" directory. Please, set the valid temp directory:";
+                         "\" folder. Please, set the valid temp folder:";
     messageText->setText(tr(message.toLatin1()));
     tmpDirPathEdit->setText(tmpDirPath);
     tmpDirChecker = new TmpDirChecker;
@@ -43,7 +43,7 @@ QString TmpDirChangeDialogController::getTmpDirPath() {
 }
 
 void TmpDirChangeDialogController::sl_changeDirButtonClicked() {
-    QString newPath = U2FileDialog::getExistingDirectory(parentWidget(), tr("Choose Directory"), tmpDirPath,
+    QString newPath = U2FileDialog::getExistingDirectory(parentWidget(), tr("Choose Folder"), tmpDirPath,
         QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
     if (newPath.isEmpty() == false)
         tmpDirPathEdit->setText(newPath);
@@ -57,7 +57,7 @@ void TmpDirChangeDialogController::sl_okButtonClicked() {
     tmpDirPath = tmpDirPathEdit->text();
     if (!tmpDirChecker->checkPath(tmpDirPath)) {
         QString message = "You do not have permission to write to \"" + tmpDirPath +
-                             "\" directory. Please, set the valid temp directory:";
+                             "\" folder. Please, set the valid temp folder:";
         messageText->setText(tr(message.toLatin1()));
     }
     else {
diff --git a/src/ugeneui/src/main_window/TmpDirChangeDialogController.h b/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
index 8d8e62d..2d09539 100644
--- a/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
+++ b/src/ugeneui/src/main_window/TmpDirChangeDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,14 +24,8 @@
 
 #include <ui_TmpDirChangeDialog.h>
 
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QLabel>
-#include <QtGui/QDialog>
-#else
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QDialog>
-#endif
+#include <QLabel>
+#include <QDialog>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/AppSettings.h>
diff --git a/src/ugeneui/src/main_window/ToolBarManager.cpp b/src/ugeneui/src/main_window/ToolBarManager.cpp
index 1b4b038..db7e453 100644
--- a/src/ugeneui/src/main_window/ToolBarManager.cpp
+++ b/src/ugeneui/src/main_window/ToolBarManager.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 
 #include "ToolBarManager.h"
 
-#include <QtCore/QEvent>
+#include <QEvent>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/main_window/ToolBarManager.h b/src/ugeneui/src/main_window/ToolBarManager.h
index d345501..3bdbeae 100644
--- a/src/ugeneui/src/main_window/ToolBarManager.h
+++ b/src/ugeneui/src/main_window/ToolBarManager.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -24,13 +24,8 @@
 
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QToolBar>
-#include <QtGui/QMainWindow>
-#else
-#include <QtWidgets/QToolBar>
-#include <QtWidgets/QMainWindow>
-#endif
+#include <QToolBar>
+#include <QMainWindow>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/plugin_viewer/PluginViewerController.cpp b/src/ugeneui/src/plugin_viewer/PluginViewerController.cpp
index 2aea67c..cf64754 100644
--- a/src/ugeneui/src/plugin_viewer/PluginViewerController.cpp
+++ b/src/ugeneui/src/plugin_viewer/PluginViewerController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,15 +19,19 @@
  * MA 02110-1301, USA.
  */
 
-#include "PluginViewerController.h"
+#include <QMessageBox>
 
 #include <U2Core/AppContext.h>
-#include <U2Gui/MainWindow.h>
 #include <U2Core/Settings.h>
 #include <U2Core/Task.h>
+
 #include <U2Gui/GUIUtils.h>
+#include <U2Gui/MainWindow.h>
+
 #include <PluginDescriptor.h>
 
+#include "PluginViewerController.h"
+
 namespace U2 {
 
 //////////////////////////////////////////////////////////////////////////
diff --git a/src/ugeneui/src/plugin_viewer/PluginViewerController.h b/src/ugeneui/src/plugin_viewer/PluginViewerController.h
index 7144b8b..359e54c 100644
--- a/src/ugeneui/src/plugin_viewer/PluginViewerController.h
+++ b/src/ugeneui/src/plugin_viewer/PluginViewerController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,12 +26,6 @@
 #include <U2Core/PluginModel.h>
 #include <U2Gui/MainWindow.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
-
 namespace U2 {
 
 class PlugViewPluginItem;
diff --git a/src/ugeneui/src/plugin_viewer/PluginViewerImpl.cpp b/src/ugeneui/src/plugin_viewer/PluginViewerImpl.cpp
index 3f608b4..ce63881 100644
--- a/src/ugeneui/src/plugin_viewer/PluginViewerImpl.cpp
+++ b/src/ugeneui/src/plugin_viewer/PluginViewerImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <AppContextImpl.h>
 #include "PluginViewerController.h"
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/plugin_viewer/PluginViewerImpl.h b/src/ugeneui/src/plugin_viewer/PluginViewerImpl.h
index 2962e73..b9317d7 100644
--- a/src/ugeneui/src/plugin_viewer/PluginViewerImpl.h
+++ b/src/ugeneui/src/plugin_viewer/PluginViewerImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp b/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
index 25c7f3f..1278910 100644
--- a/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentFormatSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <QMessageBox>
 #include <QMouseEvent>
+#include <QPushButton>
 
 #include <U2Core/DocumentImport.h>
 #include <U2Core/TextUtils.h>
@@ -59,7 +60,9 @@ DocumentFormatSelectorController::DocumentFormatSelectorController(QList<FormatD
 : QDialog(p), formatDetectionResults(results)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222924");
+    new HelpButton(this, buttonBox, "20874829");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     setObjectName("DocumentFormatSelectorDialog");
 }
@@ -108,7 +111,7 @@ int DocumentFormatSelectorController::selectResult(const GUrl& url, QByteArray&
         label->installEventFilter(new LabelClickProvider(label, rb));
 
         QToolButton* moreButton = new QToolButton();
-        moreButton->setText("more..");
+        moreButton->setText(tr("more.."));
         moreButton->setEnabled(!r.getFormatDescriptionText().isEmpty());
         d->moreButtons << moreButton;
         QObject::connect(moreButton, SIGNAL(clicked()), d.data(), SLOT(sl_moreFormatInfo()));
@@ -133,18 +136,23 @@ int DocumentFormatSelectorController::selectResult(const GUrl& url, QByteArray&
         label->installEventFilter(new LabelClickProvider(label, rb));
 
         d->userSelectedFormat = new QComboBox();
-        d->userSelectedFormat->setObjectName("userSelectedFormat"); 
+        d->userSelectedFormat->setObjectName("userSelectedFormat");
         const DocumentFormatRegistry *formatRegistry = AppContext::getDocumentFormatRegistry();
         SAFE_POINT(formatRegistry != NULL, "FormatRegistry is NULL!", -1);
         DocumentFormatConstraints constraints;
         constraints.addFlagToExclude(DocumentFormatFlag_Hidden);
+        QMap<DocumentFormatId, QString> formats;
         foreach (const DocumentFormatId &id, formatRegistry->selectFormats(constraints)) {
             if (!detectedIds.contains(id)) {
                 const QString formatName = formatRegistry->getFormatById(id)->getFormatName();
-                d->userSelectedFormat->insertItem(0, formatName, id);
+                formats[id] = formatName;
             }
         }
-        d->userSelectedFormat->model()->sort(0);
+        QStringList formatNamesSorted = formats.values();
+        formatNamesSorted.sort(Qt::CaseInsensitive);
+        foreach (const QString& name, formatNamesSorted) {
+            d->userSelectedFormat->addItem(name, formats.key(name));
+        }
 
         hbox->addWidget(rb);
         hbox->addWidget(label);
diff --git a/src/ugeneui/src/project_support/DocumentFormatSelectorController.h b/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
index cb409f4..9460fba 100644
--- a/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
+++ b/src/ugeneui/src/project_support/DocumentFormatSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,15 +27,9 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentUtils.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QRadioButton>
-#include <QtGui/QToolButton>
-#include <QtGui/QComboBox>
-#else
-#include <QtWidgets/QRadioButton>
-#include <QtWidgets/QToolButton>
-#include <QtWidgets/QComboBox>
-#endif
+#include <QRadioButton>
+#include <QToolButton>
+#include <QComboBox>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp b/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
index 4053df0..6de437c 100644
--- a/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentProviderSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -28,61 +28,31 @@
 #include <U2Core/AppContext.h>
 #include <U2Core/DocumentImport.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
+#include <U2Core/Settings.h>
 #include <U2Core/U2SafePoints.h>
 
 #include <U2Gui/HelpButton.h>
+#include <U2Gui/ImportWidget.h>
 #include <U2Gui/ObjectViewModel.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include <U2View/AssemblyBrowserFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 
 #include "DocumentProviderSelectorController.h"
 
 namespace U2 {
 
-int DocumentProviderSelectorController::selectResult(const GUrl& url, const QList<FormatDetectionResult> &results) {
+const QString DocumentProviderSelectorController::DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT = "/document_provider_selector_controller_settings/";
+const QString DocumentProviderSelectorController::SELECTION = "selected";
+
+int DocumentProviderSelectorController::selectResult(const GUrl& url, QList<FormatDetectionResult> &results) {
     SAFE_POINT(!results.isEmpty(), "Results list is empty!", -1);
     if (results.size() == 1) {
         return 0;
     }
 
-    QObjectScopedPointer<DocumentProviderSelectorController> d = new DocumentProviderSelectorController(results, QApplication::activeModalWidget());
-    d->gbFormats->setTitle(tr("Open '%1' as").arg(url.fileName()));
-    d->buttonBox->button(QDialogButtonBox::Cancel)->setAutoDefault(false);
-    d->buttonBox->button(QDialogButtonBox::Cancel)->setDefault(false);
-    d->buttonBox->button(QDialogButtonBox::Ok)->setAutoDefault(true);
-    d->buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
-
-    for (int i = 0; i < results.size(); i++) {
-        const FormatDetectionResult &result = results[i];
-        QList<GObjectType> supportedTypes;
-        QString text;
-        if (result.format != NULL) {
-            supportedTypes = result.format->getSupportedObjectTypes().toList();
-        } else if (result.importer != NULL) {
-            supportedTypes = result.importer->getSupportedObjectTypes().toList();
-        } else {
-            assert(0);
-            continue;
-        }
-
-        if (supportedTypes.isEmpty()) {
-            continue;
-        }
-        text = tr("%1 in the %2").arg(getTypeName(supportedTypes.first())).arg(getViewName(supportedTypes.first()));
-
-        QRadioButton *rbFormat = new QRadioButton(text);
-        rbFormat->setObjectName(text + "_radio");
-        rbFormat->setChecked(i == 0);
-        d->formatsRadioButtons << rbFormat;
-
-        d->formatsLayout->addWidget(rbFormat);
-    }
-    d->adjustSize();
-
-    CHECK(!d->formatsRadioButtons.isEmpty(), -1);
-    d->formatsRadioButtons[0]->setFocus();
+    QObjectScopedPointer<DocumentProviderSelectorController> d = new DocumentProviderSelectorController(url, results, QApplication::activeModalWidget());
 
     const int rc = d->exec();
     CHECK(!d.isNull(), -1);
@@ -94,12 +64,41 @@ int DocumentProviderSelectorController::selectResult(const GUrl& url, const QLis
     return d->getSelectedFormatIdx();
 }
 
-DocumentProviderSelectorController::DocumentProviderSelectorController(const QList<FormatDetectionResult> &formatDetectionResults, QWidget *parent) :
+DocumentProviderSelectorController::DocumentProviderSelectorController(const GUrl& url, QList<FormatDetectionResult> &results, QWidget *parent) :
     QDialog(parent),
-    formatDetectionResults(formatDetectionResults)
+    formatDetectionResults(results),
+    selectedRadioButton(0)
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18223132");
+
+    setObjectName("Select Document Format");
+    new HelpButton(this, buttonBox, "20878944");
+    gbFormats->setTitle(QString("Options for %1").arg(url.fileName()));
+    buttonBox->button(QDialogButtonBox::Cancel)->setAutoDefault(false);
+    buttonBox->button(QDialogButtonBox::Cancel)->setDefault(false);
+    buttonBox->button(QDialogButtonBox::Ok)->setAutoDefault(true);
+    buttonBox->button(QDialogButtonBox::Ok)->setDefault(true);
+
+    QButtonGroup* bg = new QButtonGroup();
+    connect(bg, SIGNAL(buttonClicked(int)), SLOT(sl_enableConvertInfo(int)));
+
+    int size = formatDetectionResults.size();
+    for (int i = 0; i < size; i++) {
+        fillTitle(results[i]);
+    }
+
+    Settings* set = AppContext::getSettings();
+    selectedFormat = set->getValue(DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT + title + "/" + SELECTION).toString();
+
+    for (int i = 0; i < size; i++) {
+        addFormatRadioButton(url, results, bg, i);
+    }
+
+    formatsRadioButtons[selectedRadioButton]->setChecked(true);
+    sl_enableConvertInfo(selectedRadioButton);
+
+    CHECK(!formatsRadioButtons.isEmpty(), );
+    formatsRadioButtons[0]->setFocus();
 }
 
 int DocumentProviderSelectorController::getSelectedFormatIdx() const {
@@ -111,29 +110,119 @@ int DocumentProviderSelectorController::getSelectedFormatIdx() const {
     return 0;
 }
 
-QString DocumentProviderSelectorController::getViewName(const GObjectType &objectType) {
+QString DocumentProviderSelectorController::getButtonName(const GObjectType &objectType) {
     GObjectViewFactoryRegistry *objectViewFactoriesRegistry = AppContext::getObjectViewFactoryRegistry();
     SAFE_POINT(NULL != objectViewFactoriesRegistry, L10N::nullPointerError("Object View Factories Registry"), "");
 
+    QString typeName;
     QString id;
     if (GObjectTypes::ASSEMBLY == objectType) {
+        typeName = tr("Short reads assembly");
         id = AssemblyBrowserFactory::ID;
-    } else if (GObjectTypes::MULTIPLE_ALIGNMENT == objectType) {
-        id = MSAEditorFactory::ID;
+    } else if (GObjectTypes::MULTIPLE_SEQUENCE_ALIGNMENT == objectType) {
+        typeName = tr("Multiple sequence alignment");
+        id = MsaEditorFactory::ID;
+    } else {
+        FAIL("An unexpected type", "");
     }
 
     GObjectViewFactory *factory = objectViewFactoriesRegistry->getFactoryById(id);
     SAFE_POINT(NULL != factory, L10N::nullPointerError("GObject View Factory"), "");
-    return factory->getName();
+
+    QString res = tr("%1 in the %2").arg(typeName).arg(factory->getName());
+    return res;
 }
 
-QString DocumentProviderSelectorController::getTypeName(const GObjectType &objectType) {
-    if (GObjectTypes::ASSEMBLY == objectType) {
-        return "Short reads assembly";
-    } else if (GObjectTypes::MULTIPLE_ALIGNMENT == objectType) {
-        return "Multiple sequence alignment";
+ImportWidget* DocumentProviderSelectorController::getRadioButtonWgt(const FormatDetectionResult& result, QString& radioButtonName, const GUrl& url, int it) {
+    ImportWidget* wgt = NULL;
+    if (result.format != NULL) {
+        GObjectType supportedType = result.format->getSupportedObjectTypes().toList().first();
+        radioButtonName = result.format->getRadioButtonText();
+        if (radioButtonName.isEmpty() && !supportedType.isEmpty()) {
+            radioButtonName = getButtonName(supportedType);
+        }
+    } else if (result.importer != NULL) {
+        GObjectType supportedType = result.importer->getSupportedObjectTypes().toList().first();
+        QString formatId = result.importer->getId();
+        radioButtonName = result.importer->getRadioButtonText();
+        if (radioButtonName.isEmpty() && !supportedType.isEmpty()) {
+            radioButtonName = getButtonName(supportedType);
+        }
+        Settings* set = AppContext::getSettings();
+        QVariantMap settings;
+        QVariant defaultFormatId = set->getValue(DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT + title + "/" + formatId);
+        settings[ImportHint_FormatId] = defaultFormatId;
+        wgt = result.importer->createImportWidget(url, settings);
+        if (selectedFormat == formatId) {
+            selectedRadioButton = it;
+        }
+    } else {
+        assert(0);
+    }
+
+    return wgt;
+}
+
+void DocumentProviderSelectorController::addFormatRadioButton(const GUrl& url, QList<FormatDetectionResult> &results, QButtonGroup* bg, int it) {
+    const FormatDetectionResult &result = results[it];
+    QString text;
+    ImportWidget* wgt = getRadioButtonWgt(result, text, url, it);
+
+    QRadioButton *rbFormat = new QRadioButton(text);
+    QString name = QString::number(it) + "_radio";
+    rbFormat->setObjectName(name);
+    formatsRadioButtons << rbFormat;
+    bg->addButton(rbFormat, it);
+    formatsLayout->addWidget(rbFormat);
+
+    radioButtonConnectedWidget << wgt;
+    if (wgt != NULL) {
+        formatsLayout->addWidget(wgt);
+    }
+}
+
+void DocumentProviderSelectorController::accept() {
+    Settings* set = AppContext::getSettings();
+    QString selectedRadioButton;
+    int size = formatInfo.size();
+    for (int i = 0; i < size; i++) {
+        DocumentFormatId formatId;
+        if (radioButtonConnectedWidget[i] != NULL) {
+            QVariantMap settings = radioButtonConnectedWidget[i]->getSettings();
+            formatId = settings[ImportHint_FormatId].toString();
+            formatDetectionResults[i].rawDataCheckResult.properties.unite(settings);
+        }
+        bool isChecked = formatsRadioButtons[i]->isChecked();
+        if (isChecked) {
+            selectedRadioButton = formatInfo[i];
+        }
+        set->setValue(DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT + title + "/" + formatInfo[i], formatId);
+    }
+    set->setValue(DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT + title + "/" + SELECTION, selectedRadioButton);
+
+    QDialog::accept();
+}
+
+void DocumentProviderSelectorController::sl_enableConvertInfo(int) {
+    int size = formatsRadioButtons.size();
+    for (int i = 0; i < size; i++) {
+        bool state = formatsRadioButtons[i]->isChecked();
+        if (radioButtonConnectedWidget[i] != NULL) {
+            radioButtonConnectedWidget[i]->setEnabled(state);
+        }
+    }
+}
+
+void DocumentProviderSelectorController::fillTitle(const FormatDetectionResult &result) {
+    if (result.format != NULL) {
+        QString formatId = result.format->getFormatId();
+        title += QString("%1__").arg(formatId);
+        formatInfo << formatId;
+    } else if (result.importer != NULL) {
+        QString formatId = result.importer->getId();
+        title += QString("%1__").arg(formatId);
+        formatInfo << formatId;
     }
-    FAIL("An unexpected type", "");
 }
 
 }   // namespace U2
diff --git a/src/ugeneui/src/project_support/DocumentProviderSelectorController.h b/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
index 60f2d1f..eca8c2a 100644
--- a/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
+++ b/src/ugeneui/src/project_support/DocumentProviderSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -31,19 +31,38 @@ class QToolButton;
 
 namespace U2 {
 
+class ImportWidget;
+
 class DocumentProviderSelectorController : public QDialog, private Ui_DocumentProviderSelectorDialog {
     Q_OBJECT
 public:
-    static int selectResult(const GUrl& url, const QList<FormatDetectionResult>& results);
+    static int selectResult(const GUrl& url, QList<FormatDetectionResult>& results);
+
+private slots:
+    void accept();
+    void sl_enableConvertInfo(int state);
+
 
 private:
-    DocumentProviderSelectorController(const QList<FormatDetectionResult>& results, QWidget *parent);
+    DocumentProviderSelectorController(const GUrl& url, QList<FormatDetectionResult>& results, QWidget *parent);
+    ImportWidget* getRadioButtonWgt(const FormatDetectionResult& result, QString& radioButtonName, const GUrl& url, int it);
     int getSelectedFormatIdx() const;
-    static QString getViewName(const GObjectType &objectType);
-    static QString getTypeName(const GObjectType &objectType);
+    void addFormatRadioButton(const GUrl& url, QList<FormatDetectionResult> &results, QButtonGroup* bg, int it);
+    void fillTitle(const FormatDetectionResult &result);
+
+    static QString getButtonName(const GObjectType &objectType);
+
+    QList<QRadioButton*> formatsRadioButtons;
+    QList<ImportWidget*> radioButtonConnectedWidget;
+    QList<FormatDetectionResult>& formatDetectionResults;
+    QList<QString> formatInfo;
+    QString title;
+    QString selectedFormat;
+    int selectedRadioButton;
+
+    static const QString DOCUMENT_PROVIDER_SELECTOR_CONTROLLER_ROOT;
+    static const QString SELECTION;
 
-    QList<QRadioButton *> formatsRadioButtons;
-    const QList<FormatDetectionResult> formatDetectionResults;
 };
 
 }   // namespace U2
diff --git a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
index 006fde8..7c821e2 100644
--- a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -80,7 +80,7 @@ bool DocumentReadingModeSelectorController::adjustReadingMode(FormatDetectionRes
     d->setModal(true);
     ui.setupUi(d.data());
 
-    new HelpButton(d.data(), ui.buttonBox, "18222897");
+    new HelpButton(d.data(), ui.buttonBox, "20874802");
 
     bool canBeShortReads = minSequenceSize > 0 && maxSequenceSize < 2000;
     bool haveReadAligners = !AppContext::getDnaAssemblyAlgRegistry()->getRegisteredAlgorithmIds().isEmpty();
diff --git a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.h b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.h
index 72fd23d..c7ecac1 100644
--- a/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.h
+++ b/src/ugeneui/src/project_support/DocumentReadingModeSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_support/ExportProjectDialogController.cpp b/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
index a936653..8c5aab3 100644
--- a/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
+++ b/src/ugeneui/src/project_support/ExportProjectDialogController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,14 +19,8 @@
  * MA 02110-1301, USA.
  */
 
-#include <QtCore/qglobal.h>
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QMessageBox>
-#include <QtGui/QPushButton>
-#else
-#include <QtWidgets/QMessageBox>
-#include <QtWidgets/QPushButton>
-#endif
+#include <QMessageBox>
+#include <QPushButton>
 
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/ProjectModel.h>
@@ -55,7 +49,8 @@ ExportProjectDialogController::ExportProjectDialogController(QWidget *p, const Q
 : QDialog(p) 
 {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222897");
+    new HelpButton(this, buttonBox, "20874802");
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     setModal(true);
     projectFile = fixProjectFile(defaultProjectFileName);
@@ -88,7 +83,7 @@ void ExportProjectDialogController::accept(){
 
 void ExportProjectDialogController::sl_onBrowseButton(){
 	LastUsedDirHelper h;
-	QString folder = U2FileDialog::getExistingDirectory(this, tr("Choose Directory"), h.dir);
+	QString folder = U2FileDialog::getExistingDirectory(this, tr("Choose Folder"), h.dir);
     if (folder.isEmpty()) {
         return;
     }
diff --git a/src/ugeneui/src/project_support/ExportProjectDialogController.h b/src/ugeneui/src/project_support/ExportProjectDialogController.h
index 7211632..efb9005 100644
--- a/src/ugeneui/src/project_support/ExportProjectDialogController.h
+++ b/src/ugeneui/src/project_support/ExportProjectDialogController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
index 58d5943..37a15d8 100644
--- a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
+++ b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -119,7 +119,9 @@ QString MultipleDocumentsReadingModeDialog::setupNewUrl() {
 bool MultipleDocumentsReadingModeDialog::setupGUI(QList<GUrl>& _urls, QVariantMap& props, const QMap<QString, qint64>& headerSequenceLengths){
     setModal(true);
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222988");
+    new HelpButton(this, buttonBox, "20874892");
+    buttonBox->button(QDialogButtonBox::Ok)->setText(tr("OK"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     // doesn't matter from what position, because excluded fileName all path of documents are the same
     CHECK(!urls.isEmpty(), false);
diff --git a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
index 044dd51..0377da6 100644
--- a/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
+++ b/src/ugeneui/src/project_support/MultipleDocumentsReadingModeSelectorController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_support/ProjectImpl.cpp b/src/ugeneui/src/project_support/ProjectImpl.cpp
index c6ad9a2..69df13e 100644
--- a/src/ugeneui/src/project_support/ProjectImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_support/ProjectImpl.h b/src/ugeneui/src/project_support/ProjectImpl.h
index 163a7d4..0ba7ad3 100644
--- a/src/ugeneui/src/project_support/ProjectImpl.h
+++ b/src/ugeneui/src/project_support/ProjectImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Core/AppResources.h>
 
-#include <QtCore/QMap>
+#include <QMap>
 
 
 namespace U2 {
diff --git a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
index 81571d7..f1e2ffa 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,7 +20,11 @@
  */
 
 #include <QAction>
+#include <QDesktopServices>
+#include <QMainWindow>
+#include <QMessageBox>
 #include <QPushButton>
+#include <QToolBar>
 
 #include <U2Core/AddDocumentTask.h>
 #include <U2Core/AppContext.h>
@@ -35,6 +39,7 @@
 #include <U2Core/L10n.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/ProjectModel.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/TaskSignalMapper.h>
 #include <U2Core/ServiceTypes.h>
 #include <U2Core/Settings.h>
@@ -53,7 +58,6 @@
 #include <U2Gui/ProjectView.h>
 #include <U2Gui/SearchGenbankSequenceDialogController.h>
 #include <U2Gui/SharedConnectionsDialog.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/U2FileDialog.h>
 
 #include <U2View/DnaAssemblyGUIExtension.h>
@@ -120,7 +124,6 @@ ProjectLoaderImpl::ProjectLoaderImpl() {
     accessSharedDatabaseAction = new QAction(tr("Connect to UGENE shared database..."), this);
     accessSharedDatabaseAction->setObjectName(ACTION_PROJECTSUPPORT__ACCESS_SHARED_DB);
     accessSharedDatabaseAction->setIcon(QIcon(":core/images/db/database_go.png"));
-    accessSharedDatabaseAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L));
     connect(accessSharedDatabaseAction, SIGNAL(triggered()), SLOT(sl_accessSharedDatabase()));
 
     searchGenbankEntryAction = new QAction(tr("Search NCBI GenBank..."), this);
@@ -223,13 +226,11 @@ void ProjectLoaderImpl::sl_openProject() {
 
     QStringList files;
 
-#if defined(Q_OS_MAC) || (QT_VERSION >= 0x050000)
     if (qgetenv(ENV_GUI_TEST).toInt() == 1 && qgetenv(ENV_USE_NATIVE_DIALOGS).toInt() == 0) {
         files = U2FileDialog::getOpenFileNames(QApplication::activeWindow(), tr("Select files to open"), h.dir,  filter, 0, QFileDialog::DontUseNativeDialog);
-    } else
-#endif
-
-    files = U2FileDialog::getOpenFileNames(QApplication::activeWindow(), tr("Select files to open"), h.dir,  filter);
+    } else {
+        files = U2FileDialog::getOpenFileNames(QApplication::activeWindow(), tr("Select files to open"), h.dir,  filter);
+    }
 
     if (files.isEmpty()) {
         return;
@@ -375,10 +376,16 @@ bool ProjectLoaderImpl::shouldFormatBeSelected(const QList<FormatDetectionResult
     const FormatDetectionResult firstUnrelatedFormat = getFirstUnrelatedFormat(formats);
     CHECK(FormatDetection_NotMatched != firstUnrelatedFormat.score(), false);
 
-    return firstFormat.score() == firstUnrelatedFormat.score()
-        || (firstUnrelatedFormat.score() > FormatDetection_AverageSimilarity && firstFormat.score() < FormatDetection_Matched)
-        || (firstFormat.score() <= FormatDetection_AverageSimilarity)
-        || forceSelectFormat;
+    int firstFormatScore = firstFormat.score();
+    int firstUnrelatedFormatScore = firstUnrelatedFormat.score();
+    bool isFirstFormatEqualFirstUnrelatedFormat = firstFormatScore == firstUnrelatedFormatScore;
+    bool isFirstUnrelatedFormatMoreThenFormatDetectionAverageSimilarity = firstUnrelatedFormatScore > FormatDetection_AverageSimilarity;
+    bool isFirstFormatLessThenFormatDetectionMatched = firstFormatScore < FormatDetection_Matched;
+    bool isFirstFormatLessOrEqualThenFormatDetectionAverageSimilarity = firstFormatScore <= FormatDetection_AverageSimilarity;
+    return isFirstFormatEqualFirstUnrelatedFormat
+           || (isFirstUnrelatedFormatMoreThenFormatDetectionAverageSimilarity && isFirstFormatLessThenFormatDetectionMatched)
+           || isFirstFormatLessOrEqualThenFormatDetectionAverageSimilarity
+           || forceSelectFormat;
 }
 
 bool ProjectLoaderImpl::detectFormat(const GUrl &url, QList<FormatDetectionResult> &formats, const QVariantMap &hints, FormatDetectionResult &selectedResult) {
@@ -393,7 +400,7 @@ bool ProjectLoaderImpl::detectFormat(const GUrl &url, QList<FormatDetectionResul
             return false;
         }
     } else {
-        const QList<FormatDetectionResult> relatedFormats = getRelatedFormats(formats, idx);
+        QList<FormatDetectionResult> relatedFormats = getRelatedFormats(formats, idx);
         if (relatedFormats.size() > 1) {
             int indexInRelatedList = DocumentProviderSelectorController::selectResult(url, relatedFormats);
             if (indexInRelatedList >= 0) {
@@ -554,8 +561,8 @@ Task* ProjectLoaderImpl::openWithProjectTask(const QList<GUrl>& _urls, const QVa
                         }else{
                             info.openView = nViews++ < OpenViewTask::MAX_DOC_NUMBER_TO_OPEN_VIEWS;
                         }
-                        QVariantMap hints;
-                        info.dp = dr.importer->createImportTask(dr, true, hints);
+                        QVariantMap _hints = dr.rawDataCheckResult.properties;
+                        info.dp = dr.importer->createImportTask(dr, true, _hints);
                         docProviders << info;
                     }
                 }
@@ -807,6 +814,9 @@ void CreateSequenceWelcomePageAction::perform() {
 SaveProjectDialogController::SaveProjectDialogController(QWidget *w) : QDialog(w) {
     setupUi(this);
     setModal(true);
+    buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Yes"));
+    buttonBox->button(QDialogButtonBox::No)->setText(tr("No"));
+    buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
     connect(buttonBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(sl_clicked(QAbstractButton *)));
 }
@@ -821,7 +831,7 @@ void SaveProjectDialogController::sl_clicked(QAbstractButton *button) {
 //////////////////////////////////////////////////////////////////////////
 ProjectDialogController::ProjectDialogController(ProjectDialogController::Mode m, QWidget *p):QDialog(p) {
     setupUi(this);
-    new HelpButton(this, buttonBox, "18222921");
+    new HelpButton(this, buttonBox, "20874826");
     buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Create"));
     buttonBox->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
 
@@ -882,7 +892,7 @@ void ProjectDialogController::keyPressEvent(QKeyEvent* event) {
 }
 
 void ProjectDialogController::sl_folderSelectClicked() {
-    QString folder = U2FileDialog::getExistingDirectory(this, tr("Choose directory"), projectFolderEdit->text());
+    QString folder = U2FileDialog::getExistingDirectory(this, tr("Choose folder"), projectFolderEdit->text());
     if (folder.isEmpty()) return;
     projectFolderEdit->setText(folder);
     updateState();
diff --git a/src/ugeneui/src/project_support/ProjectLoaderImpl.h b/src/ugeneui/src/project_support/ProjectLoaderImpl.h
index 01afd41..87e7b93 100644
--- a/src/ugeneui/src/project_support/ProjectLoaderImpl.h
+++ b/src/ugeneui/src/project_support/ProjectLoaderImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -30,12 +30,6 @@
 #include <U2Gui/WelcomePageAction.h>
 #include <assert.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QtGui>
-#else
-#include <QtWidgets/QtWidgets>
-#endif
-
 namespace U2 {
 
 #define SETTINGS_DIR QString("project_loader/")
diff --git a/src/ugeneui/src/project_support/ProjectServiceImpl.cpp b/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
index c0f18d2..b5dc007 100644
--- a/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
+++ b/src/ugeneui/src/project_support/ProjectServiceImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -19,20 +19,22 @@
  * MA 02110-1301, USA.
  */
 
+#include <QMainWindow>
 #include <QMenu>
+#include <QMessageBox>
 #include <QToolBar>
 
 #include <AppContextImpl.h>
 
 #include <U2Core/GUrlUtils.h>
 #include <U2Core/L10n.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/Settings.h>
 #include <U2Core/U2OpStatusUtils.h>
 
 #include <U2Gui/DialogUtils.h>
 #include <U2Gui/GUIUtils.h>
 #include <U2Gui/MainWindow.h>
-#include <U2Core/QObjectScopedPointer.h>
 
 #include "ExportProjectDialogController.h"
 #include "ProjectImpl.h"
diff --git a/src/ugeneui/src/project_support/ProjectServiceImpl.h b/src/ugeneui/src/project_support/ProjectServiceImpl.h
index c8eb506..9bb06e9 100644
--- a/src/ugeneui/src/project_support/ProjectServiceImpl.h
+++ b/src/ugeneui/src/project_support/ProjectServiceImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,11 +25,7 @@
 #include <U2Core/ProjectService.h>
 #include <U2Core/Task.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#else
-#include <QtWidgets/QAction>
-#endif
+#include <QAction>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/project_support/ProjectTasksGui.cpp b/src/ugeneui/src/project_support/ProjectTasksGui.cpp
index e902a95..8456700 100644
--- a/src/ugeneui/src/project_support/ProjectTasksGui.cpp
+++ b/src/ugeneui/src/project_support/ProjectTasksGui.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
  */
 
 #include <QDomDocument>
+#include <QMainWindow>
 #include <QMessageBox>
 #include <QMutex>
 
@@ -38,6 +39,7 @@
 #include <U2Core/L10n.h>
 #include <U2Core/LoadDocumentTask.h>
 #include <U2Core/Log.h>
+#include <U2Core/QObjectScopedPointer.h>
 #include <U2Core/RemoveDocumentTask.h>
 #include <U2Core/SaveDocumentTask.h>
 #include <U2Core/Settings.h>
@@ -47,7 +49,6 @@
 
 #include <U2Gui/ObjectViewModel.h>
 #include <U2Gui/ProjectParsing.h>
-#include <U2Core/QObjectScopedPointer.h>
 #include <U2Gui/UnloadDocumentTask.h>
 
 #include "ProjectImpl.h"
@@ -485,12 +486,12 @@ void GTest_ExportProject::prepare(){
     QDir qd(url);
     if(qd.exists(url)){
         if(!removeDir(qd)){
-            stateInfo.setError(tr("GTest_ExportProject::prepare unable to clean directory for exporting"));
+            stateInfo.setError(tr("GTest_ExportProject::prepare unable to clean folder for exporting"));
             return;
         }
     }   
     if(!qd.mkpath(url)){
-        stateInfo.setError(tr("GTest_ExportProject::prepare unable to create directory for exporting"));
+        stateInfo.setError(tr("GTest_ExportProject::prepare unable to create folder for exporting"));
         return;
     }
     exportTask = new ExportProjectTask(url, "");
diff --git a/src/ugeneui/src/project_support/ProjectTasksGui.h b/src/ugeneui/src/project_support/ProjectTasksGui.h
index 72638c0..a2c99c1 100644
--- a/src/ugeneui/src/project_support/ProjectTasksGui.h
+++ b/src/ugeneui/src/project_support/ProjectTasksGui.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,14 +22,17 @@
 #ifndef _U2_PROJECT_TASKS_GUI_H_
 #define _U2_PROJECT_TASKS_GUI_H_
 
-#include <U2Core/Task.h>
-#include <U2Core/ResourceTracker.h>
+#include <QDir>
+
+#include <U2Core/AppResources.h>
+#include <U2Core/GAutoDeleteList.h>
+#include <U2Core/MultiTask.h>
 #include <U2Core/ProjectModel.h>
 #include <U2Core/ProjectService.h>
+#include <U2Core/ResourceTracker.h>
+#include <U2Core/Task.h>
+
 #include <U2Test/XMLTestUtils.h>
-#include <U2Core/GAutoDeleteList.h>
-#include <U2Core/AppResources.h>
-#include <U2Core/MultiTask.h>
 
 class QDomDocument;
 
diff --git a/src/ugeneui/src/project_view/BuiltInObjectViews.cpp b/src/ugeneui/src/project_view/BuiltInObjectViews.cpp
index 9faafef..4d102cf 100644
--- a/src/ugeneui/src/project_view/BuiltInObjectViews.cpp
+++ b/src/ugeneui/src/project_view/BuiltInObjectViews.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -25,7 +25,7 @@
 
 #include <U2View/SimpleTextObjectView.h>
 #include <U2View/AnnotatedDNAViewFactory.h>
-#include <U2View/MSAEditorFactory.h>
+#include <U2View/MaEditorFactory.h>
 #include <U2View/TreeViewerFactory.h>
 #include <U2View/AssemblyBrowserFactory.h>
 
@@ -42,7 +42,10 @@ void ProjectViewImpl::registerBuiltInObjectViews() {
     f =  new AnnotatedDNAViewFactory();
     reg->registerGObjectViewFactory(f);
 
-    f = new MSAEditorFactory();
+    f = new MsaEditorFactory();
+    reg->registerGObjectViewFactory(f);
+
+    f = new McaEditorFactory();
     reg->registerGObjectViewFactory(f);
 
     f = new TreeViewerFactory();
@@ -65,7 +68,7 @@ void ProjectViewImpl::unregisterBuiltInObjectViews() {
     reg->unregisterGObjectViewFactory(f);
     delete f;
 
-    f = reg->getFactoryById(MSAEditorFactory::ID);
+    f = reg->getFactoryById(MsaEditorFactory::ID);
     assert(f!=NULL);
     reg->unregisterGObjectViewFactory(f);
     delete f;
diff --git a/src/ugeneui/src/project_view/ProjectViewImpl.cpp b/src/ugeneui/src/project_view/ProjectViewImpl.cpp
index a586c61..e9e247f 100644
--- a/src/ugeneui/src/project_view/ProjectViewImpl.cpp
+++ b/src/ugeneui/src/project_view/ProjectViewImpl.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -21,6 +21,7 @@
 
 #include <QClipboard>
 #include <QDesktopServices>
+#include <QMainWindow>
 #include <QMessageBox>
 #include <QTimer>
 #include <QUrl>
@@ -159,7 +160,7 @@ void DocumentUpdater::update() {
         if (!fileCheckAllowedByHints) {
             continue;
         }
-        if (!doc->isModified() && !fi.exists()) { // file was removed from its directory
+        if (!doc->isModified() && !fi.exists()) { // file was removed from its folder
             removedDocs.append(doc);
         }
 
@@ -211,7 +212,7 @@ void removeDocFromProject(Project *proj, Document *doc) {
 
 bool DocumentUpdater::makeDecision(Document *doc, QListIterator<Document*> &iter) {
     QMessageBox::StandardButton btn = QMessageBox::question(AppContext::getMainWindow()->getQMainWindow(),
-        tr(NOTIFICATION_TITLE), tr("The document '%1' was removed from its original directory. Do you wish to save it? "
+        tr(NOTIFICATION_TITLE), tr("The document '%1' was removed from its original folder. Do you wish to save it? "
         "Otherwise, it will be removed from the current project.").arg(doc->getName()),
         QMessageBox::Yes | QMessageBox::No | QMessageBox::NoToAll);
 
@@ -276,9 +277,9 @@ void DocumentUpdater::notifyUserAndProcessRemovedDocuments(const QList<Document
     if (!dbiDocs.isEmpty()) {
         const bool severalDocRemoved = dbiDocs.size() > 1;
         const QString warningMessageText = severalDocRemoved
-            ? tr("Several documents were removed from their original directories. Therefore, they will be deleted from the current project. "
+            ? tr("Several documents were removed from their original folders. Therefore, they will be deleted from the current project. "
                 "Find the full list below.")
-            : tr("The document '%1' was removed from its original directory. Therefore, it will be deleted from the current project.")
+            : tr("The document '%1' was removed from its original folder. Therefore, it will be deleted from the current project.")
                 .arg(dbiDocs.first()->getName());
 
         QObjectScopedPointer<QMessageBox> warningBox = new QMessageBox(dynamic_cast<QWidget *>(AppContext::getMainWindow()));
diff --git a/src/ugeneui/src/project_view/ProjectViewImpl.h b/src/ugeneui/src/project_view/ProjectViewImpl.h
index ba5da36..c3daab2 100644
--- a/src/ugeneui/src/project_view/ProjectViewImpl.h
+++ b/src/ugeneui/src/project_view/ProjectViewImpl.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/project_view/ProjectViewSearchBox.cpp b/src/ugeneui/src/project_view/ProjectViewSearchBox.cpp
deleted file mode 100644
index 165cc73..0000000
--- a/src/ugeneui/src/project_view/ProjectViewSearchBox.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#include <QLabel>
-#include <QMovie>
-#include <QPicture>
-#include <QStyle>
-#include <QToolButton>
-
-#include "ProjectViewSearchBox.h"
-
-static const QString LABEL_STYLE_SHEET = "border: 0px; padding: 0px;";
-static const QString CLEAR_BUTTON_STYLE_SHEET = "border: 0px; padding: 1px 0px 0px 0px;";
-
-namespace U2 {
-
-ProjectViewSearchBox::ProjectViewSearchBox(QWidget *p)
-    : QLineEdit(p), firstShow(true), progressLabel(new QLabel(this)), progressMovie(new QMovie(":/core/images/progress.gif", QByteArray(), progressLabel)),
-    searchIconLabel(new QLabel(this)), clearButton(new QToolButton(this))
-{
-    setObjectName("nameFilterEdit");
-
-    progressLabel->setStyleSheet(LABEL_STYLE_SHEET);
-    progressLabel->setMovie(progressMovie);
-    progressMovie->start();
-
-    searchIconLabel->setStyleSheet(LABEL_STYLE_SHEET);
-    searchIconLabel->setPixmap(QPixmap(":/core/images/zoom_whole.png"));
-
-    clearButton->setStyleSheet(CLEAR_BUTTON_STYLE_SHEET);
-    clearButton->setIcon(QIcon(":/core/images/close_small.png"));
-    clearButton->setCursor(Qt::ArrowCursor);
-    clearButton->setVisible(false);
-    connect(clearButton, SIGNAL(clicked()), SLOT(sl_filterCleared()));
-    connect(this, SIGNAL(textChanged(const QString &)), SLOT(sl_textChanged(const QString &)));
-    clearButton->setObjectName("project filter clear button");
-
-    initStyle();
-    setPlaceholderText(tr("Search..."));
-}
-
-void ProjectViewSearchBox::sl_filteringStarted() {
-    progressLabel->setVisible(true);
-    progressMovie->start();
-    updateInternalControlsPosition();
-}
-
-void ProjectViewSearchBox::sl_filteringFinished() {
-    progressMovie->stop();
-    progressLabel->setVisible(false);
-    updateInternalControlsPosition();
-}
-
-void ProjectViewSearchBox::sl_filterCleared() {
-    clearButton->setVisible(false);
-    setText(QString());
-}
-
-void ProjectViewSearchBox::sl_textChanged(const QString &text) {
-    clearButton->setVisible(!text.isEmpty());
-}
-
-void ProjectViewSearchBox::paintEvent(QPaintEvent *event) {
-    if (firstShow) {
-        firstShow = false;
-        sl_filteringFinished();
-    }
-    QLineEdit::paintEvent(event);
-}
-
-void ProjectViewSearchBox::initStyle() {
-    const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
-    const QSize progressLabelSize = progressLabel->sizeHint();
-    const QSize iconLabelSize = searchIconLabel->sizeHint();
-    const QSize clearButtonSize = clearButton->sizeHint();
-    const QSize minimumWidgetSize = minimumSizeHint();
-
-    const int rightPadding = progressLabelSize.width() + clearButtonSize.width() + frameWidth + 1;
-    const int leftPadding = iconLabelSize.width() + frameWidth + 1;
-    setStyleSheet(QString("QLineEdit {padding-right: %1px; padding-left: %2px}").arg(rightPadding).arg(leftPadding));
-
-    const int minimumContentWidth = iconLabelSize.width() + progressLabelSize.width() + clearButtonSize.width() + frameWidth * 2 + 2;
-    const int minimumContentHeight = progressLabelSize.height() + frameWidth * 2 + 2;
-    setMinimumSize(qMax(minimumWidgetSize.width(), minimumContentWidth), qMax(minimumWidgetSize.height(), minimumContentHeight));
-}
-
-void ProjectViewSearchBox::updateInternalControlsPosition() {
-    const QSize progressLabelSize = progressLabel->sizeHint();
-    const QSize iconLabelSize = searchIconLabel->sizeHint();
-    const QSize clearButtonSize = clearButton->sizeHint();
-    const int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth);
-    const QRect widgetRect = rect();
-
-    progressLabel->move(widgetRect.right() - 2 * frameWidth - progressLabelSize.width(),
-        (widgetRect.bottom() - progressLabelSize.height() + 1) / 2);
-    clearButton->move(widgetRect.right() - (progressLabel->isVisible() ? progressLabelSize.width() + 2 * frameWidth : 0) - clearButtonSize.width(),
-        (widgetRect.bottom() - clearButtonSize.height() + 1) / 2);
-    searchIconLabel->move(widgetRect.left() + 2 * frameWidth, (widgetRect.bottom() - iconLabelSize.height() + 1) / 2);
-}
-
-void ProjectViewSearchBox::resizeEvent(QResizeEvent *event) {
-    updateInternalControlsPosition();
-    QLineEdit::resizeEvent(event);
-}
-
-} // namespace U2
diff --git a/src/ugeneui/src/project_view/ProjectViewSearchBox.h b/src/ugeneui/src/project_view/ProjectViewSearchBox.h
deleted file mode 100644
index 441c6cd..0000000
--- a/src/ugeneui/src/project_view/ProjectViewSearchBox.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
- * http://ugene.net
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- * MA 02110-1301, USA.
- */
-
-#ifndef _U2_PROJECT_VIEW_SEARCH_BOX_
-#define _U2_PROJECT_VIEW_SEARCH_BOX_
-
-#include <QLineEdit>
-
-class QLabel;
-class QMovie;
-class QToolButton;
-
-namespace U2 {
-
-class ProjectViewSearchBox : public QLineEdit {
-    Q_OBJECT
-public:
-    ProjectViewSearchBox(QWidget *p);
-
-public slots:
-    void sl_filteringStarted();
-    void sl_filteringFinished();
-
-protected:
-    void resizeEvent(QResizeEvent *event);
-    void paintEvent(QPaintEvent *event);
-
-private slots:
-    void sl_filterCleared();
-    void sl_textChanged(const QString &text);
-
-private:
-    void initStyle();
-    void updateInternalControlsPosition();
-
-    bool firstShow;
-    QLabel *progressLabel;
-    QMovie *progressMovie;
-    QLabel *searchIconLabel;
-    QToolButton *clearButton;
-};
-
-}
-
-#endif // _U2_PROJECT_VIEW_SEARCH_BOX_
diff --git a/src/ugeneui/src/project_view/ProjectViewWidget.ui b/src/ugeneui/src/project_view/ProjectViewWidget.ui
index a2118b2..0b456a9 100644
--- a/src/ugeneui/src/project_view/ProjectViewWidget.ui
+++ b/src/ugeneui/src/project_view/ProjectViewWidget.ui
@@ -51,7 +51,7 @@
           <number>5</number>
          </property>
          <item>
-          <widget class="U2::ProjectViewSearchBox" name="nameFilterEdit"/>
+          <widget class="U2::SearchBox" name="nameFilterEdit"/>
          </item>
         </layout>
        </item>
@@ -139,15 +139,15 @@
  </widget>
  <customwidgets>
   <customwidget>
-   <class>U2::ProjectViewSearchBox</class>
-   <extends>QLineEdit</extends>
-   <header>project_view/ProjectViewSearchBox.h</header>
-  </customwidget>
-  <customwidget>
    <class>U2::EditableTreeView</class>
    <extends>QTreeView</extends>
    <header location="global">U2Gui/EditableTreeView.h</header>
   </customwidget>
+  <customwidget>
+   <class>U2::SearchBox</class>
+   <extends>QLineEdit</extends>
+   <header location="global">U2Gui/SearchBox.h</header>
+  </customwidget>
  </customwidgets>
  <resources/>
  <connections/>
diff --git a/src/ugeneui/src/shtirlitz/Shtirlitz.cpp b/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
index 5aa29db..9ff3c9e 100644
--- a/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
+++ b/src/ugeneui/src/shtirlitz/Shtirlitz.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/shtirlitz/Shtirlitz.h b/src/ugeneui/src/shtirlitz/Shtirlitz.h
index b78302e..c8aaaf3 100644
--- a/src/ugeneui/src/shtirlitz/Shtirlitz.h
+++ b/src/ugeneui/src/shtirlitz/Shtirlitz.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,7 +22,7 @@
 #ifndef __SHTIRLITZ_H__
 #define __SHTIRLITZ_H__
 
-#include <QtCore/QUuid>
+#include <QUuid>
 #include <U2Core/Task.h>
 
 namespace U2{
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReport.ui b/src/ugeneui/src/shtirlitz/StatisticalReport.ui
index 8ed7f8d..56abc70 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReport.ui
+++ b/src/ugeneui/src/shtirlitz/StatisticalReport.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>491</width>
-    <height>67</height>
+    <height>74</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -49,12 +49,6 @@
    </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout">
-     <property name="topMargin">
-      <number>10</number>
-     </property>
-     <property name="bottomMargin">
-      <number>10</number>
-     </property>
      <item>
       <widget class="QCheckBox" name="chkStat">
        <property name="text">
@@ -89,6 +83,13 @@
      </item>
     </layout>
    </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox">
+     <property name="standardButtons">
+      <set>QDialogButtonBox::Ok</set>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
index 8b46f41..3992145 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -44,6 +44,7 @@ StatisticalReportController::StatisticalReportController(const QString &newHtmlF
     htmlView = new MultilingualHtmlView(newHtmlFilepath, this);
     frameLayout->addWidget(htmlView);
     htmlView->setMinimumSize(400, 10);
+    connect(buttonBox, SIGNAL(accepted()), SLOT(accept()));
 }
 
 bool StatisticalReportController::isInfoSharingAccepted() const {
@@ -68,4 +69,8 @@ void StatisticalReportController::paintEvent(QPaintEvent *event) {
 #endif
 }
 
+void StatisticalReportController::accept() {
+    QDialog::close();
+}
+
 }
diff --git a/src/ugeneui/src/shtirlitz/StatisticalReportController.h b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
index b52e54f..ae48ddd 100644
--- a/src/ugeneui/src/shtirlitz/StatisticalReportController.h
+++ b/src/ugeneui/src/shtirlitz/StatisticalReportController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -33,6 +33,8 @@ class StatisticalReportController : public QDialog, public Ui_StatisticalReport
 public:
     StatisticalReportController(const QString &newHtmlFilepath, QWidget *parent);
     bool isInfoSharingAccepted() const;
+public slots:
+    void accept();
 
 protected:
     void paintEvent(QPaintEvent *event);
diff --git a/src/ugeneui/src/task_view/TaskStatusBar.cpp b/src/ugeneui/src/task_view/TaskStatusBar.cpp
index 90e0b5a..4d9a7aa 100644
--- a/src/ugeneui/src/task_view/TaskStatusBar.cpp
+++ b/src/ugeneui/src/task_view/TaskStatusBar.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -27,10 +27,10 @@
 #include <U2Core/U2SafePoints.h>
 #include <U2Gui/MainWindow.h>
 
-#include <QtCore/QEvent>
+#include <QEvent>
 
-#include <QtGui/QPainter>
-#include <QtGui/QIcon>
+#include <QPainter>
+#include <QIcon>
 
 #include <math.h>
 
diff --git a/src/ugeneui/src/task_view/TaskStatusBar.h b/src/ugeneui/src/task_view/TaskStatusBar.h
index f2a4701..80534f8 100644
--- a/src/ugeneui/src/task_view/TaskStatusBar.h
+++ b/src/ugeneui/src/task_view/TaskStatusBar.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,19 +26,11 @@
 #include <U2Gui/Notification.h>
 #include <U2Core/Log.h>
 
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QWidget>
-#include <QtGui/QLabel>
-#include <QtGui/QProgressBar>
-#include <QtGui/QHBoxLayout>
-#else
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QLabel>
-#include <QtWidgets/QProgressBar>
-#include <QtWidgets/QHBoxLayout>
-#endif
-
-#include <QtGui/QPixmap>
+#include <QWidget>
+#include <QLabel>
+#include <QProgressBar>
+#include <QHBoxLayout>
+#include <QPixmap>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/task_view/TaskViewController.cpp b/src/ugeneui/src/task_view/TaskViewController.cpp
index fe50702..6088797 100644
--- a/src/ugeneui/src/task_view/TaskViewController.cpp
+++ b/src/ugeneui/src/task_view/TaskViewController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -510,7 +510,7 @@ QAction * TVReportWindow::createOpenAction(const QString &name, const QString &u
 QAction * TVReportWindow::createDirAction(const QString &url, QObject *parent) {
     QFileInfo info(url);
     return createOpenAction(
-        tr("Open containing directory"),
+        tr("Open containing folder"),
         info.dir().absolutePath(),
         parent,
         ":ugene/images/project_open.png");
diff --git a/src/ugeneui/src/task_view/TaskViewController.h b/src/ugeneui/src/task_view/TaskViewController.h
index 9bd0f41..f089c79 100644
--- a/src/ugeneui/src/task_view/TaskViewController.h
+++ b/src/ugeneui/src/task_view/TaskViewController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -26,20 +26,11 @@
 #include <U2Core/ProjectModel.h>
 #include <U2Gui/MainWindow.h>
 
-
-#if (QT_VERSION < 0x050000) //Qt 5
-#include <QtGui/QAction>
-#include <QtGui/QPushButton>
-#include <QtGui/QTreeWidget>
-#include <QtGui/QTextEdit>
-#else
-#include <QtWidgets/QAction>
-#include <QtWidgets/QPushButton>
-#include <QtWidgets/QTreeWidget>
-#include <QtWidgets/QTextEdit>
-#endif
-#include <QtGui/QMouseEvent>
-
+#include <QAction>
+#include <QPushButton>
+#include <QTreeWidget>
+#include <QTextEdit>
+#include <QMouseEvent>
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/update/UgeneUpdater.cpp b/src/ugeneui/src/update/UgeneUpdater.cpp
index fe008fa..a5030ce 100644
--- a/src/ugeneui/src/update/UgeneUpdater.cpp
+++ b/src/ugeneui/src/update/UgeneUpdater.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/update/UgeneUpdater.h b/src/ugeneui/src/update/UgeneUpdater.h
index 53f1d0a..54148c4 100644
--- a/src/ugeneui/src/update/UgeneUpdater.h
+++ b/src/ugeneui/src/update/UgeneUpdater.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/utils/MultilingualHtmlView.cpp b/src/ugeneui/src/utils/MultilingualHtmlView.cpp
index 3744d48..6be4998 100644
--- a/src/ugeneui/src/utils/MultilingualHtmlView.cpp
+++ b/src/ugeneui/src/utils/MultilingualHtmlView.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/utils/MultilingualHtmlView.h b/src/ugeneui/src/utils/MultilingualHtmlView.h
index 982703d..c6361bb 100644
--- a/src/ugeneui/src/utils/MultilingualHtmlView.h
+++ b/src/ugeneui/src/utils/MultilingualHtmlView.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/welcome_page/WelcomePageController.cpp b/src/ugeneui/src/welcome_page/WelcomePageController.cpp
index 90e7936..6307d96 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageController.cpp
+++ b/src/ugeneui/src/welcome_page/WelcomePageController.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,7 @@
 #include <QDesktopServices>
 #include <QMainWindow>
 #include <QMessageBox>
+#include <QUrl>
 
 #include <U2Core/AppContext.h>
 #include <U2Core/Counter.h>
@@ -33,11 +34,9 @@
 
 #include <U2Gui/MainWindow.h>
 
-#include "project_support/ProjectLoaderImpl.h"
-
 #include "WelcomePageMdi.h"
-
 #include "WelcomePageController.h"
+#include "project_support/ProjectLoaderImpl.h"
 
 namespace U2 {
 
diff --git a/src/ugeneui/src/welcome_page/WelcomePageController.h b/src/ugeneui/src/welcome_page/WelcomePageController.h
index f067419..d51a25a 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageController.h
+++ b/src/ugeneui/src/welcome_page/WelcomePageController.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
@@ -22,6 +22,8 @@
 #ifndef _U2_WELCOME_PAGE_CONTROLLER_H_
 #define _U2_WELCOME_PAGE_CONTROLLER_H_
 
+#include <QObject>
+
 #include <U2Core/U2OpStatus.h>
 
 namespace U2 {
diff --git a/src/ugeneui/src/welcome_page/WelcomePageMdi.cpp b/src/ugeneui/src/welcome_page/WelcomePageMdi.cpp
index b92f6ec..dbd09d7 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageMdi.cpp
+++ b/src/ugeneui/src/welcome_page/WelcomePageMdi.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/welcome_page/WelcomePageMdi.h b/src/ugeneui/src/welcome_page/WelcomePageMdi.h
index 341506b..ec68c8d 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageMdi.h
+++ b/src/ugeneui/src/welcome_page/WelcomePageMdi.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp b/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
index 198a9c7..8b7de3f 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
+++ b/src/ugeneui/src/welcome_page/WelcomePageWidget.cpp
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/src/welcome_page/WelcomePageWidget.h b/src/ugeneui/src/welcome_page/WelcomePageWidget.h
index f8f0d6b..5b7dcaa 100644
--- a/src/ugeneui/src/welcome_page/WelcomePageWidget.h
+++ b/src/ugeneui/src/welcome_page/WelcomePageWidget.h
@@ -1,6 +1,6 @@
 /**
  * UGENE - Integrated Bioinformatics Tools.
- * Copyright (C) 2008-2016 UniPro <ugene at unipro.ru>
+ * Copyright (C) 2008-2017 UniPro <ugene at unipro.ru>
  * http://ugene.net
  *
  * This program is free software; you can redistribute it and/or
diff --git a/src/ugeneui/transl/english.ts b/src/ugeneui/transl/english.ts
index 3c10036..10a524f 100644
--- a/src/ugeneui/transl/english.ts
+++ b/src/ugeneui/transl/english.ts
@@ -75,32 +75,50 @@
 <context>
     <name>DirectoriesSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="26"/>
         <source>Path to downloaded data:</source>
-        <translation>Path to downloaded data:</translation>
+        <translation type="vanished">Path to downloaded data:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="46"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="84"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="48"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="86"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="130"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="58"/>
         <source>Path for temporary files</source>
-        <translation>Path for temporary files</translation>
+        <translation type="vanished">Path for temporary files</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="28"/>
+        <source>Downloaded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="60"/>
+        <source>Temporary files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="102"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="104"/>
         <source>File storage</source>
         <translation>File storage</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="158"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="160"/>
         <source>Cleanup storage</source>
         <translation>Cleanup storage</translation>
     </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="172"/>
+        <source>Build indexes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="195"/>
+        <source>Documents</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DocumentFormatSelectorDialog</name>
@@ -453,17 +471,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="728"/>
+        <location filename="../src/Main.cpp" line="735"/>
         <source>UGENE started</source>
         <translation>UGENE started</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="729"/>
+        <location filename="../src/Main.cpp" line="736"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>UGENE version: %1 %2-bit</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="730"/>
+        <location filename="../src/Main.cpp" line="737"/>
         <source>UGENE distribution: %1</source>
         <translation>UGENE distribution: %1</translation>
     </message>
@@ -643,27 +661,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AboutDialogController</name>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="79"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="73"/>
         <source>Max score: %1</source>
         <translation>Max score: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="124"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="118"/>
         <source>Score: %1</source>
         <translation>Score: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="128"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="122"/>
         <source>Level: %1</source>
         <translation>Level: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="134"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="128"/>
         <source>About UGENE</source>
         <translation>About UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="136"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="130"/>
         <source>Have fun ;-)</source>
         <translation>Have fun ;-)</translation>
     </message>
@@ -671,17 +689,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="955"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="965"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1017"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1027"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1053"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1063"/>
         <source>Load document and add to project: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -689,7 +707,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="475"/>
+        <location filename="../src/Main.cpp" line="482"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Style not available %1</translation>
     </message>
@@ -785,17 +803,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CloseProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="63"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="64"/>
         <source>Close project</source>
         <translation>Close project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="69"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="70"/>
         <source>No active project found</source>
         <translation>No active project found</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="87"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="88"/>
         <source>Save and close project</source>
         <translation>Save and close project</translation>
     </message>
@@ -811,31 +829,41 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DirectoriesSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="47"/>
+        <source>Folders</source>
+        <translation type="vanished">Folders</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="43"/>
         <source>Directories</source>
-        <translation>Directories</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="67"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="73"/>
-        <source>You do not have permission to write to "%1" directory"</source>
-        <translation>You do not have permission to write to "%1" directory"</translation>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="82"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="88"/>
+        <source>You do not have permission to write to "%1" folder"</source>
+        <translation>You do not have permission to write to "%1" folder"</translation>
     </message>
 </context>
 <context>
     <name>U2::DirectoriesSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="115"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="125"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="135"/>
-        <source>Choose Directory</source>
-        <translation>Choose Directory</translation>
+        <source>Choose folder</source>
+        <translation type="vanished">Choose folder</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="136"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="146"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="156"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="166"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="180"/>
+        <source>Choose Folder</source>
+        <translation type="unfinished">Choose Folder</translation>
     </message>
 </context>
 <context>
     <name>U2::DisablePluginViewerTask</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="60"/>
+        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="56"/>
         <source>Disable PluginViewer</source>
         <translation>Disable PluginViewer</translation>
     </message>
@@ -843,7 +871,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DisableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1226"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1227"/>
         <source>Disable project viewer</source>
         <translation>Disable project viewer</translation>
     </message>
@@ -851,62 +879,81 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentFormatSelectorController</name>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="74"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="64"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="65"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="77"/>
         <source>Options for %1</source>
         <translation>Options for %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="91"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="94"/>
         <source><b>%1</b> format. Score: %2 <i>(%3)</i></source>
         <translation><b>%1</b> format. Score: %2 <i>(%3)</i></translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="95"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="98"/>
         <source><b><font color=#A6392E>Import: </font>%1</b>. Score: %2 (<i>%3</i>)</source>
         <translation><b><font color=#A6392E>Import: </font>%1</b>. Score: %2 (<i>%3</i>)</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="125"/>
+        <source>more...</source>
+        <translation type="vanished">more</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="114"/>
+        <source>more..</source>
+        <translation>more..</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="128"/>
         <source>Choose format manually</source>
         <translation>Choose format manually</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="177"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="185"/>
         <source>Not matched</source>
         <translation>Not matched</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="180"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="188"/>
         <source>Very low similarity</source>
         <translation>Very low similarity</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="183"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="191"/>
         <source>Low similarity</source>
         <translation>Low similarity</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="186"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="194"/>
         <source>Average similarity</source>
         <translation>Average similarity</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="189"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="197"/>
         <source>High similarity</source>
         <translation>High similarity</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="192"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="200"/>
         <source>Very high similarity</source>
         <translation>Very high similarity</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="194"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="202"/>
         <source>Perfect match</source>
         <translation>Perfect match</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="202"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="210"/>
         <source>Format details for '%1' format</source>
         <translation>Format details for '%1' format</translation>
     </message>
@@ -914,12 +961,21 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentProviderSelectorController</name>
     <message>
-        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="51"/>
         <source>Open '%1' as</source>
-        <translation>Open '%1' as</translation>
+        <translation type="vanished">Open '%1' as</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="73"/>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="120"/>
+        <source>Short reads assembly</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="123"/>
+        <source>Multiple sequence alignment</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="132"/>
         <source>%1 in the %2</source>
         <translation>%1 in the %2</translation>
     </message>
@@ -927,58 +983,58 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentUpdater</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="142"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="143"/>
         <source>Project contains NULL document</source>
         <translation>Project contains NULL document</translation>
     </message>
     <message>
-        <source>The document '%1' was removed from its original directory. It will be removed from the current project.</source>
-        <translation type="obsolete">The document '%1' was removed from its original directory. It will be removed from the current project.</translation>
+        <source>The document '%1' was removed from its original folder. It will be removed from the current project.</source>
+        <translation type="obsolete">The document '%1' was removed from its original folder. It will be removed from the current project.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="214"/>
-        <source>The document '%1' was removed from its original directory. Do you wish to save it? Otherwise, it will be removed from the current project.</source>
-        <translation>The document '%1' was removed from its original directory. Do you wish to save it? Otherwise, it will be removed from the current project.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="215"/>
+        <source>The document '%1' was removed from its original folder. Do you wish to save it? Otherwise, it will be removed from the current project.</source>
+        <translation>The document '%1' was removed from its original folder. Do you wish to save it? Otherwise, it will be removed from the current project.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="224"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="225"/>
         <source>Save as</source>
         <translation>Save as</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="279"/>
-        <source>Several documents were removed from their original directories. Therefore, they will be deleted from the current project. Find the full list below.</source>
-        <translation>Several documents were removed from their original directories. Therefore, they will be deleted from the current project. Find the full list below.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="280"/>
+        <source>Several documents were removed from their original folders. Therefore, they will be deleted from the current project. Find the full list below.</source>
+        <translation>Several documents were removed from their original folders. Therefore, they will be deleted from the current project. Find the full list below.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="281"/>
-        <source>The document '%1' was removed from its original directory. Therefore, it will be deleted from the current project.</source>
-        <translation>The document '%1' was removed from its original directory. Therefore, it will be deleted from the current project.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="282"/>
+        <source>The document '%1' was removed from its original folder. Therefore, it will be deleted from the current project.</source>
+        <translation>The document '%1' was removed from its original folder. Therefore, it will be deleted from the current project.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="322"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="323"/>
         <source>Document '%1' was modified. Do you want to reload it?
 Note that reloading may cause closing of some views associated with objects from the document.</source>
         <translation>Document '%1' was modified. Do you want to reload it?
 Note that reloading may cause closing of some views associated with objects from the document.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="388"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="389"/>
         <source>Reload documents task</source>
         <translation>Reload documents task</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="412"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="413"/>
         <source>Unable to unload '%1'. Unload error: '%2'</source>
         <translation>Unable to unload '%1'. Unload error: '%2'</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="419"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="420"/>
         <source>Restore state task</source>
         <translation>Restore state task</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="433"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="434"/>
         <source>Reload documents and restore view state task</source>
         <translation>Reload documents and restore view state task</translation>
     </message>
@@ -986,7 +1042,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnablePluginViewerTask</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="48"/>
+        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="44"/>
         <source>Enable PluginViewer</source>
         <translation>Enable PluginViewer</translation>
     </message>
@@ -994,7 +1050,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1214"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1215"/>
         <source>Enable ProjectView</source>
         <translation>Enable ProjectView</translation>
     </message>
@@ -1002,35 +1058,40 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::ExportProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="72"/>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="67"/>
         <source>Export</source>
         <translation>Export</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="91"/>
-        <source>Choose Directory</source>
-        <translation>Choose Directory</translation>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="86"/>
+        <source>Choose Folder</source>
+        <translation>Choose Folder</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="337"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="338"/>
         <source>Export project task</source>
         <translation>Export project task</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="365"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="366"/>
         <source>One of the project documents has empty URL</source>
         <translation>One of the project documents has empty URL</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="384"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="385"/>
         <source>Error during coping documents: file already exist</source>
         <translation>Error during coping documents: file already exist</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="386"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="387"/>
         <source>Error during coping documents</source>
         <translation>Error during coping documents</translation>
     </message>
@@ -1064,17 +1125,17 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_ExportProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="488"/>
-        <source>GTest_ExportProject::prepare unable to clean directory for exporting</source>
-        <translation>GTest_ExportProject::prepare unable to clean directory for exporting</translation>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="489"/>
+        <source>GTest_ExportProject::prepare unable to clean folder for exporting</source>
+        <translation>GTest_ExportProject::prepare unable to clean folder for exporting</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="493"/>
-        <source>GTest_ExportProject::prepare unable to create directory for exporting</source>
-        <translation>GTest_ExportProject::prepare unable to create directory for exporting</translation>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="494"/>
+        <source>GTest_ExportProject::prepare unable to create folder for exporting</source>
+        <translation>GTest_ExportProject::prepare unable to create folder for exporting</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="513"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="514"/>
         <source>GTest_ExportProject::cleanup unable to delete exported files</source>
         <translation>GTest_ExportProject::cleanup unable to delete exported files</translation>
     </message>
@@ -1082,17 +1143,17 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_LoadDocumentFromProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="574"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="575"/>
         <source>No project loaded</source>
         <translation>No project loaded</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="578"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="579"/>
         <source>Document name to load is empty</source>
         <translation>Document name to load is empty</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="593"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="594"/>
         <source>File %1 not found in project</source>
         <translation>File %1 not found in project</translation>
     </message>
@@ -1100,7 +1161,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_LoadProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="435"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="436"/>
         <source>Unload previous project, then load new</source>
         <translation>Unload previous project, then load new</translation>
     </message>
@@ -1108,27 +1169,27 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LoadProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="311"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="312"/>
         <source>Unable to detect parser for project</source>
         <translation>Unable to detect parser for project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="291"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="292"/>
         <source>Load project</source>
         <translation>Load project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="302"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="303"/>
         <source>Loading project from: %1</source>
         <translation>Loading project from: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="312"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="313"/>
         <source>failed to parse project file %1</source>
         <translation>failed to parse project file %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="317"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="318"/>
         <source>Project loaded: %1</source>
         <translation>Project loaded: %1</translation>
     </message>
@@ -1177,38 +1238,54 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MWMDIManagerImpl</name>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="76"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="63"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="67"/>
         <source>Close active view</source>
         <translation>Close active view</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="79"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="81"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="70"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
         <source>Close all windows</source>
         <translation>Close all windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="84"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="86"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="75"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="77"/>
+        <source>Window layout</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="80"/>
+        <source>Multiple documents</source>
+        <translation type="unfinished">Multiple documents</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="85"/>
+        <source>Tabbed documents</source>
+        <translation type="unfinished">Tabbed documents</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="90"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="92"/>
         <source>Tile windows</source>
         <translation>Tile windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="89"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="91"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="95"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="97"/>
         <source>Cascade windows</source>
         <translation>Cascade windows</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="111"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="113"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
         <source>Next window</source>
         <translation>Next window</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="123"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="125"/>
         <source>Previous window</source>
         <translation>Previous window</translation>
     </message>
@@ -1249,104 +1326,104 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MainWindowImpl</name>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
         <source>Application paste shortcut is triggered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="252"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="254"/>
         <source>Exit</source>
         <translation>Exit</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="256"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="258"/>
         <source>About</source>
         <translation>About</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="265"/>
         <source>Visit UGENE Web Site</source>
         <translation>Visit UGENE Web Site</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="269"/>
         <source>View UGENE Documentation Online</source>
         <translation>View UGENE Documentation Online</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="277"/>
         <source>Open UGENE User Manual</source>
         <translation>Open UGENE User Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="279"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="281"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Open Workflow Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="283"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="285"/>
         <source>Open Query Designer Manual</source>
         <translation>Open Query Designer Manual</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="287"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="289"/>
         <source>Open Start Page</source>
         <translation>Open Start Page</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="291"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="293"/>
         <source>Crash UGENE</source>
         <translation>Crash UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="296"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="298"/>
         <source>Enable Terminal Usage...</source>
         <translation>Enable Terminal Usage...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="383"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
         <source>Shutdown already in process. Close UGENE immediately?</source>
         <translation>Shutdown already in process. Close UGENE immediately?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="384"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="386"/>
         <source>Close</source>
         <translation>Close</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="387"/>
         <source>Wait</source>
         <translation>Wait</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="465"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="470"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="465"/>
         <source>Failed to enable terminal usage: couldn't install '%1'</source>
         <translation>Failed to enable terminal usage: couldn't install '%1'</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="470"/>
         <source>Failed to enable terminal usage: not authorized</source>
         <translation>Failed to enable terminal usage: not authorized</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>Failed to enable terminal usage: authorization failure</source>
         <translation>Failed to enable terminal usage: authorization failure</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="483"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="483"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1355,12 +1432,12 @@ Now you can type ugene in command line to start UGENE.</source>
 Now you can type ugene in command line to start UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="494"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="496"/>
         <source>Can not open %1 file. </source>
         <translation>Can not open %1 file. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="495"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="497"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1371,7 +1448,7 @@ or view online documentation.
 Do you want view online documentation?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="273"/>
         <source>Check for Updates</source>
         <translation>Check for Updates</translation>
     </message>
@@ -1379,8 +1456,18 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::MultipleDocumentsReadingModeDialog</name>
     <message>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="233"/>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="249"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="123"/>
+        <source>OK</source>
+        <translation type="unfinished">OK</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="124"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="235"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="251"/>
         <source>Select file to save new document</source>
         <translation>Select file to save new document</translation>
     </message>
@@ -1409,12 +1496,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::OpenProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="94"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="95"/>
         <source>Open project/document</source>
         <translation>Open project/document</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="101"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="102"/>
         <source>Not a readable file: %1</source>
         <translation>Not a readable file: %1</translation>
     </message>
@@ -1422,12 +1509,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1084"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1094"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1086"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1096"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1435,98 +1522,98 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::PluginViewerController</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="107"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="111"/>
         <source>Plugins...</source>
         <translation>Plugins...</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="68"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="72"/>
         <source>Plugin Viewer</source>
         <translation>Plugin Viewer</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="112"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="116"/>
         <source>Add plugin</source>
         <translation>Add plugin</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="115"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="119"/>
         <source>Enable plugin</source>
         <translation>Enable plugin</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="118"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="122"/>
         <source>Remove plugin</source>
         <translation>Remove plugin</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="121"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="125"/>
         <source>Enable service</source>
         <translation>Enable service</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="124"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="128"/>
         <source>Disable service</source>
         <translation>Disable service</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="270"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="274"/>
         <source>Select plugin file</source>
         <translation>Select plugin file</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="273"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="277"/>
         <source>Plugin files</source>
         <translation>Plugin files</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="291"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="295"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="357"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="361"/>
         <source>Select a plugin to view more information about it.</source>
         <translation>Select a plugin to view more information about it.</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="437"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="441"/>
         <source>Hide License</source>
         <translation>Hide License</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="454"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="458"/>
         <source>License file not found.</source>
         <translation>License file not found.</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="461"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="465"/>
         <source>Show License</source>
         <translation>Show License</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="476"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="480"/>
         <source>Plugin</source>
         <translation>Plugin</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="481"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="485"/>
         <source>to remove after restart</source>
         <translation>to remove after restart</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="482"/>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="515"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="486"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="519"/>
         <source>On</source>
         <translation>On</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="512"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="516"/>
         <source>Service</source>
         <translation>Service</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="516"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="520"/>
         <source>Off</source>
         <translation>Off</translation>
     </message>
@@ -1547,22 +1634,22 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="825"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
         <source>Create</source>
         <translation>Create</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="826"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
         <source>Cancel</source>
         <translation>Cancel</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="885"/>
-        <source>Choose directory</source>
-        <translation>Choose directory</translation>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="895"/>
+        <source>Choose folder</source>
+        <translation>Choose folder</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="929"/>
         <source><html><body align="center"><br>Project file already exists.<br>Are you sure you want to overwrite it?<body></html></source>
         <translation><html><body align="center"><br>Project file already exists.<br>Are you sure you want to overwrite it?<body></html></translation>
     </message>
@@ -1614,24 +1701,24 @@ Do you want view online documentation?</translation>
         <translation type="vanished">Connect to shared database...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="222"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="225"/>
         <source>UGENE project file</source>
         <translation>UGENE project file</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="228"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="230"/>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="232"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="935"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="945"/>
         <source>Select files to open</source>
         <translation>Select files to open</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="477"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="476"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="483"/>
         <source>The document with the same URL is already added to the project</source>
         <translation>The document with the same URL is already added to the project</translation>
     </message>
@@ -1640,57 +1727,57 @@ Do you want view online documentation?</translation>
         <translation type="vanished">warning</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="485"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="492"/>
         <source>The document is already loaded and added to project: %1</source>
         <translation>The document is already loaded and added to project: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="490"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="497"/>
         <source>The document with the same URL is already loading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="566"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="573"/>
         <source>Failed to detect file format: %1</source>
         <translation>Failed to detect file format: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="569"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="576"/>
         <source>File is empty: %1</source>
         <translation>File is empty: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="605"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
         <source>Project is already opened</source>
         <translation>Project is already opened</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="611"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="618"/>
         <source>New project can either be opened in a new window or replace the project in the existing. How would you like to open the project?</source>
         <translation>New project can either be opened in a new window or replace the project in the existing. How would you like to open the project?</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="619"/>
         <source>New Window</source>
         <translation>New Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="614"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="621"/>
         <source>This Window</source>
         <translation>This Window</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="625"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="632"/>
         <source>Failed to open new instance of UGENE</source>
         <translation>Failed to open new instance of UGENE</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="631"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="638"/>
         <source>Stopped loading project: %1. Reason: active project found</source>
         <translation>Stopped loading project: %1. Reason: active project found</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="907"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="917"/>
         <source>New Project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1699,67 +1786,67 @@ Do you want view online documentation?</translation>
         <translation type="vanished">New Project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
         <source>project</source>
         <translation>project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="109"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="113"/>
         <source>Open...</source>
         <translation>Open...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="92"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="96"/>
         <source>Open as...</source>
         <translation>Open as...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="103"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="107"/>
         <source>Open from clipboard...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="120"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="124"/>
         <source>Connect to UGENE shared database...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="845"/>
         <source>Save project as</source>
         <translation>Save project as</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="846"/>
         <source>Save</source>
         <translation>Save</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="135"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="138"/>
         <source>Recent projects</source>
         <translation>Recent projects</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="86"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="90"/>
         <source>&New project...</source>
         <translation>&New project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="98"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="102"/>
         <source>New document from text...</source>
         <translation>New document from text...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="115"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="119"/>
         <source>Access remote database...</source>
         <translation>Access remote database...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="126"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="129"/>
         <source>Search NCBI GenBank...</source>
         <translation>Search NCBI GenBank...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="139"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="142"/>
         <source>Recent files</source>
         <translation>Recent files</translation>
     </message>
@@ -1767,7 +1854,7 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectServiceDisableTask</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="192"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="194"/>
         <source>Disable Project</source>
         <translation>Disable Project</translation>
     </message>
@@ -1775,27 +1862,27 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectServiceEnableTask</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="143"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="145"/>
         <source>Enable Project</source>
         <translation>Enable Project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="152"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="154"/>
         <source>&Save all</source>
         <translation>&Save all</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="162"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="164"/>
         <source>&Close project</source>
         <translation>&Close project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="168"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="170"/>
         <source>Export project...</source>
         <translation>Export project...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="158"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="160"/>
         <source>Save project &as...</source>
         <translation>Save project &as...</translation>
     </message>
@@ -1803,12 +1890,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectServiceImpl</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="48"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="50"/>
         <source>Project</source>
         <translation>Project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="48"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="50"/>
         <source>Project service is available when opened a project file. Other services that depends on Project service will be automatically started after this service is enabled.</source>
         <translation>Project service is available when opened a project file. Other services that depends on Project service will be automatically started after this service is enabled.</translation>
     </message>
@@ -1816,88 +1903,88 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectViewImpl</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="514"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="515"/>
         <source>Mark as circular</source>
         <translation>Mark as circular</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="518"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="519"/>
         <source>Relocate...</source>
         <translation>Relocate...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="522"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="523"/>
         <source>Export document...</source>
         <translation>Export document...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="527"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="528"/>
         <source>Open containing folder</source>
         <translation>Open containing folder</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="468"/>
         <source>ProjectView</source>
         <translation>ProjectView</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="468"/>
         <source>ProjectView service provides basic project visualization and manipulation functionality</source>
         <translation>ProjectView service provides basic project visualization and manipulation functionality</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="511"/>
         <source>Save selected documents</source>
         <translation>Save selected documents</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="682"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="683"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="805"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="764"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="806"/>
         <source>Active views</source>
         <translation>Active views</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="871"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="872"/>
         <source>Activate view: %1</source>
         <translation>Activate view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="885"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="886"/>
         <source>Open new view: %1</source>
         <translation>Open new view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="900"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="901"/>
         <source>Open saved view '%1' with a state '%2'</source>
         <translation>Open saved view '%1' with a state '%2'</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="948"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="949"/>
         <source>Add to view: %1</source>
         <translation>Add to view: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="994"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
         <source>Open view</source>
         <translation>Open view</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="996"/>
         <source>Add to view</source>
         <translation>Add to view</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1115"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1116"/>
         <source>Error</source>
         <translation>Error</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1157"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1158"/>
         <source>Select new file location</source>
         <translation>Select new file location</translation>
     </message>
@@ -1905,15 +1992,14 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::ProjectViewSearchBox</name>
     <message>
-        <location filename="../src/project_view/ProjectViewSearchBox.cpp" line="57"/>
         <source>Search...</source>
-        <translation>Search...</translation>
+        <translation type="vanished">Search...</translation>
     </message>
 </context>
 <context>
     <name>U2::ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="442"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="443"/>
         <source>Project</source>
         <translation>Project</translation>
     </message>
@@ -1937,7 +2023,7 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::RegisterProjectServiceTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="327"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="328"/>
         <source>Register project</source>
         <translation>Register project</translation>
     </message>
@@ -1953,25 +2039,43 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::SaveOnlyProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="214"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="215"/>
         <source>Save project</source>
         <translation>Save project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="274"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="275"/>
         <source>Saving project %1</source>
         <translation>Saving project %1</translation>
     </message>
 </context>
 <context>
+    <name>U2::SaveProjectDialogController</name>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="817"/>
+        <source>Yes</source>
+        <translation>Yes</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="818"/>
+        <source>No</source>
+        <translation>No</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="819"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+</context>
+<context>
     <name>U2::SaveProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="130"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="131"/>
         <source>Save project</source>
         <translation>Save project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="206"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="207"/>
         <source>Save documents, remove phantom docs, save project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2052,12 +2156,12 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::SplashScreenWidget</name>
     <message>
-        <location filename="../src/main_window/SplashScreen.cpp" line="164"/>
+        <location filename="../src/main_window/SplashScreen.cpp" line="163"/>
         <source>Version </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main_window/SplashScreen.cpp" line="164"/>
+        <location filename="../src/main_window/SplashScreen.cpp" line="163"/>
         <source> is loading</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2082,7 +2186,7 @@ Do you want view online documentation?</translation>
 <context>
     <name>U2::TBoard</name>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="400"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="394"/>
         <source>Pause</source>
         <translation>Pause</translation>
     </message>
@@ -2138,8 +2242,8 @@ Do you want view online documentation?</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="513"/>
-        <source>Open containing directory</source>
-        <translation>Open containing directory</translation>
+        <source>Open containing folder</source>
+        <translation>Open containing folder</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="520"/>
@@ -2284,8 +2388,8 @@ Do you want view online documentation?</translation>
     <name>U2::TmpDirChangeDialogController</name>
     <message>
         <location filename="../src/main_window/TmpDirChangeDialogController.cpp" line="46"/>
-        <source>Choose Directory</source>
-        <translation>Choose Directory</translation>
+        <source>Choose Folder</source>
+        <translation>Choose Folder</translation>
     </message>
 </context>
 <context>
@@ -2320,22 +2424,22 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserApplicationsSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="40"/>
         <source>General</source>
         <translation>General</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="52"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
         <source>File with translations is not found: %1</source>
         <translation>File with translations is not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="66"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="60"/>
         <source>Illegal entry in translations file: %1</source>
         <translation>Illegal entry in translations file: %1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="48"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="42"/>
         <source>Autodetection</source>
         <translation>Autodetection</translation>
     </message>
@@ -2343,28 +2447,28 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserApplicationsSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="135"/>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="181"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="127"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="172"/>
         <source>Custom translation [%1]</source>
         <translation>Custom translation [%1]</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="145"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="137"/>
         <source>Ask to save new project on exit</source>
         <translation>Ask to save new project on exit</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="146"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="138"/>
         <source>Don't save new project on exit</source>
         <translation>Don't save new project on exit</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="147"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="139"/>
         <source>Always save new project on exit</source>
         <translation>Always save new project on exit</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="169"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="160"/>
         <source>Select translation file</source>
         <translation>Select translation file</translation>
     </message>
@@ -2372,7 +2476,7 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="453"/>
+        <location filename="../src/Main.cpp" line="460"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">UGENE initialization started</translation>
     </message>
@@ -2408,12 +2512,12 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::WelcomePageController</name>
     <message>
-        <location filename="../src/welcome_page/WelcomePageController.cpp" line="86"/>
+        <location filename="../src/welcome_page/WelcomePageController.cpp" line="85"/>
         <source>Start Page</source>
         <translation>Start Page</translation>
     </message>
     <message>
-        <location filename="../src/welcome_page/WelcomePageController.cpp" line="114"/>
+        <location filename="../src/welcome_page/WelcomePageController.cpp" line="113"/>
         <source>The Workflow Designer plugin is not loaded. You can add it using the menu Settings -> Plugins. Then you need to restart UGENE.</source>
         <translation>The Workflow Designer plugin is not loaded. You can add it using the menu Settings -> Plugins. Then you need to restart UGENE.</translation>
     </message>
@@ -2444,57 +2548,54 @@ Would you like to download and install it?</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Window Layout</source>
-        <translation>Window Layout</translation>
+        <translation type="vanished">Window Layout</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Multiple documents</source>
-        <translation>Multiple documents</translation>
+        <translation type="vanished">Multiple documents</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="79"/>
         <source>Tabbed documents</source>
-        <translation>Tabbed documents</translation>
+        <translation type="vanished">Tabbed documents</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="98"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Open last project at startup</source>
         <translation>Open last project at startup</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="92"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Project</source>
         <translation>Project</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="99"/>
         <source>Statistical reports</source>
         <translation>Statistical reports</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="134"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="105"/>
         <source>Enable statistical reports collecting</source>
         <translation>Enable statistical reports collecting</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="115"/>
         <source>Updates</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="150"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="121"/>
         <source>Check for updates when UGENE starts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="160"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="131"/>
         <source>Default settings</source>
         <translation>Default settings</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="166"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="137"/>
         <source>Reset settings to default on the next run</source>
         <translation>Reset settings to default on the next run</translation>
     </message>
diff --git a/src/ugeneui/transl/russian.ts b/src/ugeneui/transl/russian.ts
index 1a04e4b..8a3c748 100644
--- a/src/ugeneui/transl/russian.ts
+++ b/src/ugeneui/transl/russian.ts
@@ -75,32 +75,50 @@
 <context>
     <name>DirectoriesSettingsWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="26"/>
         <source>Path to downloaded data:</source>
-        <translation>Папка для загрузок:</translation>
+        <translation type="vanished">Папка для загрузок:</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="46"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="84"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="48"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="86"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="130"/>
         <source>...</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="58"/>
         <source>Path for temporary files</source>
-        <translation>Папка для временных файлов</translation>
+        <translation type="vanished">Папка для временных файлов</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="28"/>
+        <source>Downloaded data</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="60"/>
+        <source>Temporary files</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="102"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="104"/>
         <source>File storage</source>
         <translation>Хранение файла</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="158"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="160"/>
         <source>Cleanup storage</source>
         <translation>Очистить</translation>
     </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="172"/>
+        <source>Build indexes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsWidget.ui" line="195"/>
+        <source>Documents</source>
+        <translation type="unfinished"></translation>
+    </message>
 </context>
 <context>
     <name>DocumentFormatSelectorDialog</name>
@@ -164,7 +182,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/project_support/ExportProjectDialog.ui" line="54"/>
         <source>Destination folder</source>
-        <translation>Сохранить в директорию</translation>
+        <translation>Сохранить в папку</translation>
     </message>
     <message>
         <location filename="../src/project_support/ExportProjectDialog.ui" line="71"/>
@@ -301,7 +319,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="77"/>
         <source>Custom browser</source>
-        <translation>Обычный браузер</translation>
+        <translation>Другой браузер</translation>
     </message>
     <message>
         <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="100"/>
@@ -376,7 +394,7 @@ p, li { white-space: pre-wrap; }
     <message>
         <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="130"/>
         <source>Remote request timeout</source>
-        <translation>Тайм-фут удаленного запроса</translation>
+        <translation>Тайм-аут удаленного запроса</translation>
     </message>
     <message>
         <location filename="../src/app_settings/network_settings/NetworkSettingsWidget.ui" line="143"/>
@@ -453,17 +471,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>QObject</name>
     <message>
-        <location filename="../src/Main.cpp" line="728"/>
+        <location filename="../src/Main.cpp" line="735"/>
         <source>UGENE started</source>
         <translation>UGENE готов к работе</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="729"/>
+        <location filename="../src/Main.cpp" line="736"/>
         <source>UGENE version: %1 %2-bit</source>
         <translation>Версия UGENE: %1 %2-бит</translation>
     </message>
     <message>
-        <location filename="../src/Main.cpp" line="730"/>
+        <location filename="../src/Main.cpp" line="737"/>
         <source>UGENE distribution: %1</source>
         <translation>Распределение UGENE: %1</translation>
     </message>
@@ -643,27 +661,27 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AboutDialogController</name>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="79"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="73"/>
         <source>Max score: %1</source>
         <translation>Рекорд: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="124"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="118"/>
         <source>Score: %1</source>
         <translation>Счёт: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="128"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="122"/>
         <source>Level: %1</source>
         <translation>Скорость: %1</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="134"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="128"/>
         <source>About UGENE</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="136"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="130"/>
         <source>Have fun ;-)</source>
         <translation>Расслабимся? ;-)</translation>
     </message>
@@ -671,17 +689,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AddDocumentsToProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="955"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="965"/>
         <source>Loading documents</source>
         <translation>Loading documents</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1017"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1027"/>
         <source>No active project found!</source>
         <translation>No active project found!</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1053"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1063"/>
         <source>Load document and add to project: %1</source>
         <translation type="unfinished"></translation>
     </message>
@@ -689,7 +707,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::AppContextImpl</name>
     <message>
-        <location filename="../src/Main.cpp" line="475"/>
+        <location filename="../src/Main.cpp" line="482"/>
         <source>Style not available %1</source>
         <translation type="unfinished">Стиль не доступен: %1</translation>
     </message>
@@ -785,17 +803,17 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::CloseProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="63"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="64"/>
         <source>Close project</source>
         <translation>Закрыть проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="69"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="70"/>
         <source>No active project found</source>
         <translation>Нет проектов</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="87"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="88"/>
         <source>Save and close project</source>
         <translation>Сохранить и закрыть проект</translation>
     </message>
@@ -811,31 +829,37 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DirectoriesSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="47"/>
+        <source>Folders</source>
+        <translation type="vanished">Папки</translation>
+    </message>
+    <message>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="43"/>
         <source>Directories</source>
-        <translation>Директории</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="67"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="73"/>
-        <source>You do not have permission to write to "%1" directory"</source>
-        <translation>У вас недостаточно прав для записи в директорию "%1"</translation>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="82"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="88"/>
+        <source>You do not have permission to write to "%1" folder"</source>
+        <translation>У вас недостаточно прав для записи в папку "%1"</translation>
     </message>
 </context>
 <context>
     <name>U2::DirectoriesSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="115"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="125"/>
-        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="135"/>
-        <source>Choose Directory</source>
-        <translation>Выбор директории</translation>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="136"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="146"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="156"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="166"/>
+        <location filename="../src/app_settings/directories_settings/DirectoriesSettingsGUIController.cpp" line="180"/>
+        <source>Choose Folder</source>
+        <translation>Выбор папки</translation>
     </message>
 </context>
 <context>
     <name>U2::DisablePluginViewerTask</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="60"/>
+        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="56"/>
         <source>Disable PluginViewer</source>
         <translation>Disable PluginViewer</translation>
     </message>
@@ -843,7 +867,7 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DisableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1226"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1227"/>
         <source>Disable project viewer</source>
         <translation>Disable project viewer</translation>
     </message>
@@ -851,62 +875,81 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentFormatSelectorController</name>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="74"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="64"/>
+        <source>OK</source>
+        <translation>OK</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="65"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="77"/>
         <source>Options for %1</source>
         <translation>Опции для %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="91"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="94"/>
         <source><b>%1</b> format. Score: %2 <i>(%3)</i></source>
         <translation><b>%1</b> формат. Счет: %2 <i>(%3)</i></translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="95"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="98"/>
         <source><b><font color=#A6392E>Import: </font>%1</b>. Score: %2 (<i>%3</i>)</source>
         <translation><b><font color=#A6392E>Импорт: </font>%1</b>. Счет: %2 (<i>%3</i>)</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="125"/>
+        <source>more...</source>
+        <translation type="vanished">подробнее</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="114"/>
+        <source>more..</source>
+        <translation>подробнее..</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="128"/>
         <source>Choose format manually</source>
         <translation>Выбрать формат</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="177"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="185"/>
         <source>Not matched</source>
         <translation>Не соответствует</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="180"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="188"/>
         <source>Very low similarity</source>
         <translation>Очень низкая схожесть</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="183"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="191"/>
         <source>Low similarity</source>
         <translation>Низкая схожесть</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="186"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="194"/>
         <source>Average similarity</source>
         <translation>Средняя схожесть</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="189"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="197"/>
         <source>High similarity</source>
         <translation>Высокая схожесть</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="192"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="200"/>
         <source>Very high similarity</source>
         <translation>Очень высокая схожесть</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="194"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="202"/>
         <source>Perfect match</source>
         <translation>Идеальное совпадение</translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="202"/>
+        <location filename="../src/project_support/DocumentFormatSelectorController.cpp" line="210"/>
         <source>Format details for '%1' format</source>
         <translation>Детали для формата '%1'</translation>
     </message>
@@ -914,12 +957,21 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentProviderSelectorController</name>
     <message>
-        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="51"/>
         <source>Open '%1' as</source>
-        <translation>Открыть '%1' как</translation>
+        <translation type="vanished">Открыть '%1' как</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="120"/>
+        <source>Short reads assembly</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="123"/>
+        <source>Multiple sequence alignment</source>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="73"/>
+        <location filename="../src/project_support/DocumentProviderSelectorController.cpp" line="132"/>
         <source>%1 in the %2</source>
         <translation>%1 в %2</translation>
     </message>
@@ -927,58 +979,58 @@ p, li { white-space: pre-wrap; }
 <context>
     <name>U2::DocumentUpdater</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="142"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="143"/>
         <source>Project contains NULL document</source>
         <translation>Project contains NULL document</translation>
     </message>
     <message>
-        <source>The document '%1' was removed from its original directory. It will be removed from the current project.</source>
-        <translation type="obsolete">Документ '%1' был удален из указанной директории. Он будет удален из текущего проекта.</translation>
+        <source>The document '%1' was removed from its original folder. It will be removed from the current project.</source>
+        <translation type="obsolete">Документ '%1' был удален из указанной папки. Он будет удален из текущего проекта.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="214"/>
-        <source>The document '%1' was removed from its original directory. Do you wish to save it? Otherwise, it will be removed from the current project.</source>
-        <translation>Документ '%1' был удален из указанной директории. Сохранить его? Иначе он будет удален из текущего проекта.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="215"/>
+        <source>The document '%1' was removed from its original folder. Do you wish to save it? Otherwise, it will be removed from the current project.</source>
+        <translation>Документ '%1' был удален из указанной папки. Сохранить его? Иначе он будет удален из текущего проекта.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="224"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="225"/>
         <source>Save as</source>
         <translation>Сохранить как</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="279"/>
-        <source>Several documents were removed from their original directories. Therefore, they will be deleted from the current project. Find the full list below.</source>
-        <translation>Несколько документов были удалены из указанных директорий. Они будут удалены из текущего проекта. Полный список приведен ниже.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="280"/>
+        <source>Several documents were removed from their original folders. Therefore, they will be deleted from the current project. Find the full list below.</source>
+        <translation>Несколько документов были удалены из указанных папок. Они будут удалены из текущего проекта. Полный список приведен ниже.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="281"/>
-        <source>The document '%1' was removed from its original directory. Therefore, it will be deleted from the current project.</source>
-        <translation>Документ '%1' был удален из указанной директории. Он будет удален из текущего проекта.</translation>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="282"/>
+        <source>The document '%1' was removed from its original folder. Therefore, it will be deleted from the current project.</source>
+        <translation>Документ '%1' был удален из указанной папки. Он будет удален из текущего проекта.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="322"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="323"/>
         <source>Document '%1' was modified. Do you want to reload it?
 Note that reloading may cause closing of some views associated with objects from the document.</source>
         <translation>Документ '%1' был изменен. Загрузить обновленный документ?
 Загрузка обновленного документа может закрыть некоторые объекты документа.</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="388"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="389"/>
         <source>Reload documents task</source>
         <translation>Reload documents task</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="412"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="413"/>
         <source>Unable to unload '%1'. Unload error: '%2'</source>
         <translation>Unable to unload '%1'. Unload error: '%2'</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="419"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="420"/>
         <source>Restore state task</source>
         <translation>Restore state task</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="433"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="434"/>
         <source>Reload documents and restore view state task</source>
         <translation>Reload documents and restore view state task</translation>
     </message>
@@ -986,7 +1038,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnablePluginViewerTask</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="48"/>
+        <location filename="../src/plugin_viewer/PluginViewerImpl.cpp" line="44"/>
         <source>Enable PluginViewer</source>
         <translation>Enable PluginViewer</translation>
     </message>
@@ -994,7 +1046,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::EnableProjectViewTask</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1214"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1215"/>
         <source>Enable ProjectView</source>
         <translation>Enable ProjectView</translation>
     </message>
@@ -1002,35 +1054,40 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::ExportProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="72"/>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="53"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="67"/>
         <source>Export</source>
         <translation>Экспорт</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="91"/>
-        <source>Choose Directory</source>
-        <translation>Выбор директории</translation>
+        <location filename="../src/project_support/ExportProjectDialogController.cpp" line="86"/>
+        <source>Choose Folder</source>
+        <translation>Выбор папки</translation>
     </message>
 </context>
 <context>
     <name>U2::ExportProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="337"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="338"/>
         <source>Export project task</source>
         <translation>Export project task</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="365"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="366"/>
         <source>One of the project documents has empty URL</source>
         <translation>One of the project documents has empty URL</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="384"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="385"/>
         <source>Error during coping documents: file already exist</source>
         <translation>Error during coping documents: file already exist</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="386"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="387"/>
         <source>Error during coping documents</source>
         <translation>Error during coping documents</translation>
     </message>
@@ -1064,17 +1121,17 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_ExportProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="488"/>
-        <source>GTest_ExportProject::prepare unable to clean directory for exporting</source>
-        <translation>GTest_ExportProject::prepare unable to clean directory for exporting</translation>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="489"/>
+        <source>GTest_ExportProject::prepare unable to clean folder for exporting</source>
+        <translation>GTest_ExportProject::prepare unable to clean folder for exporting</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="493"/>
-        <source>GTest_ExportProject::prepare unable to create directory for exporting</source>
-        <translation>GTest_ExportProject::prepare unable to create directory for exporting</translation>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="494"/>
+        <source>GTest_ExportProject::prepare unable to create folder for exporting</source>
+        <translation>GTest_ExportProject::prepare unable to create folder for exporting</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="513"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="514"/>
         <source>GTest_ExportProject::cleanup unable to delete exported files</source>
         <translation>GTest_ExportProject::cleanup unable to delete exported files</translation>
     </message>
@@ -1082,17 +1139,17 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_LoadDocumentFromProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="574"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="575"/>
         <source>No project loaded</source>
         <translation>No project loaded</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="578"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="579"/>
         <source>Document name to load is empty</source>
         <translation>Document name to load is empty</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="593"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="594"/>
         <source>File %1 not found in project</source>
         <translation>File %1 not found in project</translation>
     </message>
@@ -1100,7 +1157,7 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::GTest_LoadProject</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="435"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="436"/>
         <source>Unload previous project, then load new</source>
         <translation>Unload previous project, then load new</translation>
     </message>
@@ -1108,27 +1165,27 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::LoadProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="311"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="312"/>
         <source>Unable to detect parser for project</source>
         <translation>Unable to detect parser for project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="291"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="292"/>
         <source>Load project</source>
         <translation>Load project</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="302"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="303"/>
         <source>Loading project from: %1</source>
         <translation>Читается файл проекта: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="312"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="313"/>
         <source>failed to parse project file %1</source>
         <translation>failed to parse project file %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="317"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="318"/>
         <source>Project loaded: %1</source>
         <translation>Проект загружен: %1</translation>
     </message>
@@ -1177,38 +1234,54 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MWMDIManagerImpl</name>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="76"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="63"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="67"/>
         <source>Close active view</source>
         <translation>Закрыть активное окно</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="79"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="81"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="70"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="72"/>
         <source>Close all windows</source>
         <translation>Закрыть все окна</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="84"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="86"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="75"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="77"/>
+        <source>Window layout</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="80"/>
+        <source>Multiple documents</source>
+        <translation type="unfinished">Несколько документов</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="85"/>
+        <source>Tabbed documents</source>
+        <translation type="unfinished">Режим вкладок</translation>
+    </message>
+    <message>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="90"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="92"/>
         <source>Tile windows</source>
         <translation>Уложить черепицей</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="89"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="91"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="95"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="97"/>
         <source>Cascade windows</source>
         <translation>Уложить каскадом</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="111"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="113"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
         <source>Next window</source>
         <translation>Следующее окно</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="117"/>
-        <location filename="../src/main_window/MDIManagerImpl.cpp" line="119"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="123"/>
+        <location filename="../src/main_window/MDIManagerImpl.cpp" line="125"/>
         <source>Previous window</source>
         <translation>Предыдущее окно</translation>
     </message>
@@ -1249,109 +1322,109 @@ Note that reloading may cause closing of some views associated with objects from
 <context>
     <name>U2::MainWindowImpl</name>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="252"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="254"/>
         <source>Exit</source>
         <translation>Выход</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="383"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
         <source>Shutdown already in process. Close UGENE immediately?</source>
         <translation>Программа уже в процессе выключения. Закрыть немедленно?</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="384"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="386"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="385"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="387"/>
         <source>Wait</source>
         <translation>Подождать</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="256"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="258"/>
         <source>About</source>
         <translation>О программе</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="245"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="247"/>
         <source>Application paste shortcut is triggered</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="263"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="265"/>
         <source>Visit UGENE Web Site</source>
         <translation>Перейти на сайт UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="267"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="269"/>
         <source>View UGENE Documentation Online</source>
         <translation>Открыть документацию UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="271"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="273"/>
         <source>Check for Updates</source>
         <translation>Проверить обновления</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="275"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="277"/>
         <source>Open UGENE User Manual</source>
         <translation>Открыть основное руководство UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="279"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="281"/>
         <source>Open Workflow Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных схем</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="283"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="285"/>
         <source>Open Query Designer Manual</source>
         <translation>Открыть руководство дизайнера вычислительных запросов</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="287"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="289"/>
         <source>Open Start Page</source>
         <translation>Открыть стартовую страницу</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="291"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="293"/>
         <source>Crash UGENE</source>
         <translation>Падение UGENE</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="296"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="298"/>
         <source>Enable Terminal Usage...</source>
         <translation>Разрешить использование терминала...</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="465"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="470"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>Installation failed</source>
         <translation>Installation failed</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="463"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="465"/>
         <source>Failed to enable terminal usage: couldn't install '%1'</source>
         <translation>Failed to enable terminal usage: couldn't install '%1'</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="468"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="470"/>
         <source>Failed to enable terminal usage: not authorized</source>
         <translation>Failed to enable terminal usage: not authorized</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="476"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="478"/>
         <source>Failed to enable terminal usage: authorization failure</source>
         <translation>Failed to enable terminal usage: authorization failure</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="483"/>
         <source>Installation successful</source>
         <translation>Installation successful</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="481"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="483"/>
         <source>Terminal usage successfully enabled.
 
 Now you can type ugene in command line to start UGENE.</source>
@@ -1360,12 +1433,12 @@ Now you can type ugene in command line to start UGENE.</source>
 Now you can type ugene in command line to start UGENE.</translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="494"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="496"/>
         <source>Can not open %1 file. </source>
         <translation>Невозможно открыть файл %1. </translation>
     </message>
     <message>
-        <location filename="../src/main_window/MainWindowImpl.cpp" line="495"/>
+        <location filename="../src/main_window/MainWindowImpl.cpp" line="497"/>
         <source>You can try open it manualy from here: %1 
 or view online documentation.
 
@@ -1379,8 +1452,18 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::MultipleDocumentsReadingModeDialog</name>
     <message>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="233"/>
-        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="249"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="123"/>
+        <source>OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="124"/>
+        <source>Cancel</source>
+        <translation type="unfinished">Отмена</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="235"/>
+        <location filename="../src/project_support/MultipleDocumentsReadingModeSelectorController.cpp" line="251"/>
         <source>Select file to save new document</source>
         <translation>Выберите файл куда сохранить новый документ</translation>
     </message>
@@ -1409,12 +1492,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::OpenProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="94"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="95"/>
         <source>Open project/document</source>
         <translation>Open project/document</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="101"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="102"/>
         <source>Not a readable file: %1</source>
         <translation>Not a readable file: %1</translation>
     </message>
@@ -1422,12 +1505,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::OpenWithProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1084"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1094"/>
         <source>Opening document: %1</source>
         <translation>Opening document: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1086"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="1096"/>
         <source>Opening %1 documents</source>
         <translation>Opening %1 documents</translation>
     </message>
@@ -1435,98 +1518,98 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::PluginViewerController</name>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="107"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="111"/>
         <source>Plugins...</source>
         <translation>Модули...</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="68"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="72"/>
         <source>Plugin Viewer</source>
         <translation>Управление модулями</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="112"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="116"/>
         <source>Add plugin</source>
         <translation>Добавить модуль</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="115"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="119"/>
         <source>Enable plugin</source>
         <translation>Включить модуль</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="118"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="122"/>
         <source>Remove plugin</source>
         <translation>Выключить модуль</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="121"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="125"/>
         <source>Enable service</source>
         <translation>Запустить сервис</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="124"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="128"/>
         <source>Disable service</source>
         <translation>Остановить сервис</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="270"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="274"/>
         <source>Select plugin file</source>
         <translation>Выбрать файл модуля</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="273"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="277"/>
         <source>Plugin files</source>
         <translation>Файлы модуля</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="291"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="295"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="357"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="361"/>
         <source>Select a plugin to view more information about it.</source>
         <translation>Выберите модуль, чтобы увидеть дополни тельную информацию о нем.</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="437"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="441"/>
         <source>Hide License</source>
         <translation>Скрыть лицензию</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="454"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="458"/>
         <source>License file not found.</source>
         <translation>Лицензионный файл не найден.</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="461"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="465"/>
         <source>Show License</source>
         <translation>Показать лицензию</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="476"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="480"/>
         <source>Plugin</source>
         <translation>Модуль</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="481"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="485"/>
         <source>to remove after restart</source>
         <translation>удалить после перезапуска</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="482"/>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="515"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="486"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="519"/>
         <source>On</source>
         <translation>Запущен</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="512"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="516"/>
         <source>Service</source>
         <translation>Сервис</translation>
     </message>
     <message>
-        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="516"/>
+        <location filename="../src/plugin_viewer/PluginViewerController.cpp" line="520"/>
         <source>Off</source>
         <translation>Остановлен</translation>
     </message>
@@ -1547,22 +1630,22 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectDialogController</name>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="825"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
         <source>Create</source>
         <translation>Создать</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="826"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="885"/>
-        <source>Choose directory</source>
-        <translation>Выбрать директорию</translation>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="895"/>
+        <source>Choose folder</source>
+        <translation>Выбрать папку</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="929"/>
         <source><html><body align="center"><br>Project file already exists.<br>Are you sure you want to overwrite it?<body></html></source>
         <translation><html><body align="center"><br>Проект уже существует.<br>Переписать его?<body></html></translation>
     </message>
@@ -1613,24 +1696,24 @@ Do you want view online documentation?</source>
         <translation type="vanished">Подключение к общей базе данных...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="222"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="225"/>
         <source>UGENE project file</source>
         <translation>Файл проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="228"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="230"/>
         <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="232"/>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="935"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="945"/>
         <source>Select files to open</source>
         <translation>Открыть файлы</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="470"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="477"/>
         <source>Project file '%1' ignored</source>
         <translation>Project file '%1' ignored</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="476"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="483"/>
         <source>The document with the same URL is already added to the project</source>
         <translation>Этот документ уже добавлен в проект</translation>
     </message>
@@ -1639,122 +1722,122 @@ Do you want view online documentation?</source>
         <translation type="vanished">внимание</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="485"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="492"/>
         <source>The document is already loaded and added to project: %1</source>
         <translation>Документ уже загружен и добавлен в проект: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="490"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="497"/>
         <source>The document with the same URL is already loading</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="566"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="573"/>
         <source>Failed to detect file format: %1</source>
         <translation>Невозможно определить формат файла: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="569"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="576"/>
         <source>File is empty: %1</source>
         <translation>Файл пуст: %1</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="605"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
         <source>Project is already opened</source>
         <translation>Проект уже открыт</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="611"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="618"/>
         <source>New project can either be opened in a new window or replace the project in the existing. How would you like to open the project?</source>
         <translation>Новый проект может быть открыт в новом окне или текущий проект может быть переписан. Как открыть проект?</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="612"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="619"/>
         <source>New Window</source>
         <translation>В новом окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="614"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="621"/>
         <source>This Window</source>
         <translation>В текущем окне</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="625"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="632"/>
         <source>Failed to open new instance of UGENE</source>
         <translation>Failed to open new instance of UGENE</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="631"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="638"/>
         <source>Stopped loading project: %1. Reason: active project found</source>
         <translation>Загрузка проекта остановлена: %1, поскольку активен другой проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="907"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="917"/>
         <source>New Project</source>
         <translation>Новый проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="909"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="919"/>
         <source>project</source>
         <translation>проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="109"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="113"/>
         <source>Open...</source>
         <translation>Открыть...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="92"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="96"/>
         <source>Open as...</source>
         <translation>Открыть как...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="103"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="107"/>
         <source>Open from clipboard...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="120"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="124"/>
         <source>Connect to UGENE shared database...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="835"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="845"/>
         <source>Save project as</source>
         <translation>Сохранить проект как</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="836"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="846"/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="135"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="138"/>
         <source>Recent projects</source>
         <translation>Недавние проекты</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="86"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="90"/>
         <source>&New project...</source>
         <translation>&Новый проект...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="98"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="102"/>
         <source>New document from text...</source>
         <translation>Новый документ из текста...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="115"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="119"/>
         <source>Access remote database...</source>
         <translation>Запрос к удаленной базе данных...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="126"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="129"/>
         <source>Search NCBI GenBank...</source>
         <translation>Поиск в NCBI GenBank...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="139"/>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="142"/>
         <source>Recent files</source>
         <translation>Недавние файлы</translation>
     </message>
@@ -1762,7 +1845,7 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectServiceDisableTask</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="192"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="194"/>
         <source>Disable Project</source>
         <translation>Остановка сервиса проектов</translation>
     </message>
@@ -1770,27 +1853,27 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectServiceEnableTask</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="143"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="145"/>
         <source>Enable Project</source>
         <translation>Запуск сервиса проектов</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="152"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="154"/>
         <source>&Save all</source>
         <translation>&Сохранить проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="162"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="164"/>
         <source>&Close project</source>
         <translation>&Закрыть проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="168"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="170"/>
         <source>Export project...</source>
         <translation>Экспортировать проект...</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="158"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="160"/>
         <source>Save project &as...</source>
         <translation>Сохранить проект &как...</translation>
     </message>
@@ -1798,12 +1881,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectServiceImpl</name>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="48"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="50"/>
         <source>Project</source>
         <translation>Проект</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="48"/>
+        <location filename="../src/project_support/ProjectServiceImpl.cpp" line="50"/>
         <source>Project service is available when opened a project file. Other services that depends on Project service will be automatically started after this service is enabled.</source>
         <translation>Сервис управления проектами запускается автоматически при открытии или создании проекта и обеспечивает поддержку прочих сервисов.</translation>
     </message>
@@ -1811,88 +1894,88 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectViewImpl</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="468"/>
         <source>ProjectView</source>
         <translation>Навигатор проектов</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="467"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="468"/>
         <source>ProjectView service provides basic project visualization and manipulation functionality</source>
         <translation>Навигатор проектов обеспечивает основные операции над проектами</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="510"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="511"/>
         <source>Save selected documents</source>
         <translation>Сохранить выбранные документы</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="514"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="515"/>
         <source>Mark as circular</source>
         <translation>Работать как с круговой</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="518"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="519"/>
         <source>Relocate...</source>
         <translation>Переместить...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="522"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="523"/>
         <source>Export document...</source>
         <translation>Экспортировать документ...</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="527"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="528"/>
         <source>Open containing folder</source>
         <translation>Открыть папку, содержащую документ</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="682"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="683"/>
         <source>-</source>
         <translation>-</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="763"/>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="805"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="764"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="806"/>
         <source>Active views</source>
         <translation>Открытые окна</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="871"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="872"/>
         <source>Activate view: %1</source>
         <translation>Переключиться на %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="885"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="886"/>
         <source>Open new view: %1</source>
         <translation>Открыть как %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="900"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="901"/>
         <source>Open saved view '%1' with a state '%2'</source>
         <translation>Открыть закладку %1 (%2)</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="948"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="949"/>
         <source>Add to view: %1</source>
         <translation>Добавить в %1</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="994"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
         <source>Open view</source>
         <translation>Открыть окно</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="995"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="996"/>
         <source>Add to view</source>
         <translation>Добавить в окно</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1157"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1158"/>
         <source>Select new file location</source>
         <translation>Выбор нового адреса</translation>
     </message>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1115"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="1116"/>
         <source>Error</source>
         <translation>Ошибка</translation>
     </message>
@@ -1900,15 +1983,14 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::ProjectViewSearchBox</name>
     <message>
-        <location filename="../src/project_view/ProjectViewSearchBox.cpp" line="57"/>
         <source>Search...</source>
-        <translation>Поиск...</translation>
+        <translation type="vanished">Поиск...</translation>
     </message>
 </context>
 <context>
     <name>U2::ProjectViewWidget</name>
     <message>
-        <location filename="../src/project_view/ProjectViewImpl.cpp" line="442"/>
+        <location filename="../src/project_view/ProjectViewImpl.cpp" line="443"/>
         <source>Project</source>
         <translation>Проект</translation>
     </message>
@@ -1932,7 +2014,7 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::RegisterProjectServiceTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="327"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="328"/>
         <source>Register project</source>
         <translation>Регистрация проекта</translation>
     </message>
@@ -1948,25 +2030,43 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::SaveOnlyProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="214"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="215"/>
         <source>Save project</source>
         <translation>Сохранение проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="274"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="275"/>
         <source>Saving project %1</source>
         <translation>Сохранение проекта: %1 </translation>
     </message>
 </context>
 <context>
+    <name>U2::SaveProjectDialogController</name>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="817"/>
+        <source>Yes</source>
+        <translation>Да</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="818"/>
+        <source>No</source>
+        <translation>Нет</translation>
+    </message>
+    <message>
+        <location filename="../src/project_support/ProjectLoaderImpl.cpp" line="819"/>
+        <source>Cancel</source>
+        <translation>Отмена</translation>
+    </message>
+</context>
+<context>
     <name>U2::SaveProjectTask</name>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="130"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="131"/>
         <source>Save project</source>
         <translation>Сохранение проекта</translation>
     </message>
     <message>
-        <location filename="../src/project_support/ProjectTasksGui.cpp" line="206"/>
+        <location filename="../src/project_support/ProjectTasksGui.cpp" line="207"/>
         <source>Save documents, remove phantom docs, save project</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2047,12 +2147,12 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::SplashScreenWidget</name>
     <message>
-        <location filename="../src/main_window/SplashScreen.cpp" line="164"/>
+        <location filename="../src/main_window/SplashScreen.cpp" line="163"/>
         <source>Version </source>
         <translation>Версия </translation>
     </message>
     <message>
-        <location filename="../src/main_window/SplashScreen.cpp" line="164"/>
+        <location filename="../src/main_window/SplashScreen.cpp" line="163"/>
         <source> is loading</source>
         <translation> загружается</translation>
     </message>
@@ -2077,7 +2177,7 @@ Do you want view online documentation?</source>
 <context>
     <name>U2::TBoard</name>
     <message>
-        <location filename="../src/main_window/AboutDialogController.cpp" line="400"/>
+        <location filename="../src/main_window/AboutDialogController.cpp" line="394"/>
         <source>Pause</source>
         <translation>Пауза</translation>
     </message>
@@ -2087,7 +2187,7 @@ Do you want view online documentation?</source>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="434"/>
         <source>Task report [%1]</source>
-        <translation>Отчёт выполнения задачи  - %1</translation>
+        <translation>Отчёт выполнения задачи - %1</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="445"/>
@@ -2107,17 +2207,17 @@ Do you want view online documentation?</source>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="446"/>
         <source>Status</source>
-        <translation type="unfinished"></translation>
+        <translation>Статус</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="448"/>
         <source>Error:</source>
-        <translation type="unfinished"></translation>
+        <translation>Ошибка:</translation>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="453"/>
         <source>Time</source>
-        <translation type="unfinished"></translation>
+        <translation>Время выполнения</translation>
     </message>
     <message>
         <source>status</source>
@@ -2133,7 +2233,7 @@ Do you want view online documentation?</source>
     </message>
     <message>
         <location filename="../src/task_view/TaskViewController.cpp" line="513"/>
-        <source>Open containing directory</source>
+        <source>Open containing folder</source>
         <translation>Открыть папку, содержащую документ</translation>
     </message>
     <message>
@@ -2278,8 +2378,8 @@ Do you want view online documentation?</source>
     <name>U2::TmpDirChangeDialogController</name>
     <message>
         <location filename="../src/main_window/TmpDirChangeDialogController.cpp" line="46"/>
-        <source>Choose Directory</source>
-        <translation>Выбор директории</translation>
+        <source>Choose Folder</source>
+        <translation>Выбор папки</translation>
     </message>
 </context>
 <context>
@@ -2314,22 +2414,22 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserApplicationsSettingsPageController</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="40"/>
         <source>General</source>
         <translation>Основные настройки</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="52"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="46"/>
         <source>File with translations is not found: %1</source>
         <translation>File with translations is not found: %1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="66"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="60"/>
         <source>Illegal entry in translations file: %1</source>
         <translation>Illegal entry in translations file: %1</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="48"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="42"/>
         <source>Autodetection</source>
         <translation>Автоопределение</translation>
     </message>
@@ -2337,28 +2437,28 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserApplicationsSettingsPageWidget</name>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="135"/>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="181"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="127"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="172"/>
         <source>Custom translation [%1]</source>
         <translation>Другой перевод [%1]</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="145"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="137"/>
         <source>Ask to save new project on exit</source>
         <translation>Спрашивать о сохранении нового проекта при выходе</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="146"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="138"/>
         <source>Don't save new project on exit</source>
         <translation>Не сохранять новый проект при выходе</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="147"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="139"/>
         <source>Always save new project on exit</source>
         <translation>Всегда сохранять новый проект при выходе</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="169"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp" line="160"/>
         <source>Select translation file</source>
         <translation>Выбрать файл перевода</translation>
     </message>
@@ -2366,7 +2466,7 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::UserAppsSettings</name>
     <message>
-        <location filename="../src/Main.cpp" line="453"/>
+        <location filename="../src/Main.cpp" line="460"/>
         <source>UGENE initialization started</source>
         <translation type="unfinished">Инициализация UGENE</translation>
     </message>
@@ -2402,12 +2502,12 @@ Would you like to download and install it?</source>
 <context>
     <name>U2::WelcomePageController</name>
     <message>
-        <location filename="../src/welcome_page/WelcomePageController.cpp" line="86"/>
+        <location filename="../src/welcome_page/WelcomePageController.cpp" line="85"/>
         <source>Start Page</source>
         <translation>Стартовая страница</translation>
     </message>
     <message>
-        <location filename="../src/welcome_page/WelcomePageController.cpp" line="114"/>
+        <location filename="../src/welcome_page/WelcomePageController.cpp" line="113"/>
         <source>The Workflow Designer plugin is not loaded. You can add it using the menu Settings -> Plugins. Then you need to restart UGENE.</source>
         <translation>Плагин дизайнера вычислительных схем не был загружен. Вы можете добавить его в меню Настройки -> Модули. После этого перезапустите UGENE.</translation>
     </message>
@@ -2438,57 +2538,54 @@ Would you like to download and install it?</source>
         <translation>...</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Window Layout</source>
-        <translation>Макет окна</translation>
+        <translation type="vanished">Макет окна</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Multiple documents</source>
-        <translation>Несколько документов</translation>
+        <translation type="vanished">Несколько документов</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="79"/>
         <source>Tabbed documents</source>
-        <translation>Режим вкладок</translation>
+        <translation type="vanished">Режим вкладок</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="98"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="69"/>
         <source>Open last project at startup</source>
         <translation>Открывать последний проект при старте</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="92"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="63"/>
         <source>Project</source>
         <translation>Проект</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="144"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="115"/>
         <source>Updates</source>
-        <translation type="unfinished"></translation>
+        <translation>Обновления</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="150"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="121"/>
         <source>Check for updates when UGENE starts</source>
-        <translation type="unfinished"></translation>
+        <translation>Проверять обновления при запуске UGENE</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="160"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="131"/>
         <source>Default settings</source>
         <translation>Настройки по умолчанию</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="166"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="137"/>
         <source>Reset settings to default on the next run</source>
         <translation>Установить настройки по умолчанию при следующем запуске</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="128"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="99"/>
         <source>Statistical reports</source>
         <translation>Отчеты о статистике использования</translation>
     </message>
     <message>
-        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="134"/>
+        <location filename="../src/app_settings/user_apps_settings/UserApplicationsSettingsWidget.ui" line="105"/>
         <source>Enable statistical reports collecting</source>
         <translation>Разрешить сбор отчетов</translation>
     </message>
diff --git a/src/ugeneui/ugeneui.pro b/src/ugeneui/ugeneui.pro
index 220a654..dccda8f 100644
--- a/src/ugeneui/ugeneui.pro
+++ b/src/ugeneui/ugeneui.pro
@@ -11,6 +11,7 @@ HEADERS += src/app_settings/AppSettingsDialogController.h \
            src/app_settings/resource_settings/ResourceSettingsGUIController.h \
            src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.h \
            src/main_window/AboutDialogController.h \
+           src/main_window/DockWidgetPainter.h \
            src/main_window/SplashScreen.h \
            src/main_window/CheckUpdatesTask.h \
            src/main_window/DockManagerImpl.h \
@@ -32,7 +33,6 @@ HEADERS += src/app_settings/AppSettingsDialogController.h \
            src/project_support/ProjectServiceImpl.h \
            src/project_support/ProjectTasksGui.h \
            src/project_view/ProjectViewImpl.h \
-           src/project_view/ProjectViewSearchBox.h \
            src/shtirlitz/Shtirlitz.h \
            src/shtirlitz/StatisticalReportController.h \
            src/task_view/TaskStatusBar.h \
@@ -71,6 +71,7 @@ SOURCES += src/Main.cpp \
            src/app_settings/resource_settings/ResourceSettingsGUIController.cpp \
            src/app_settings/user_apps_settings/UserApplicationsSettingsGUIController.cpp \
            src/main_window/AboutDialogController.cpp \
+           src/main_window/DockWidgetPainter.cpp \
            src/main_window/SplashScreen.cpp \
            src/main_window/CheckUpdatesTask.cpp \
            src/main_window/DockManagerImpl.cpp \
@@ -93,7 +94,6 @@ SOURCES += src/Main.cpp \
            src/project_support/ProjectTasksGui.cpp \
            src/project_view/BuiltInObjectViews.cpp \
            src/project_view/ProjectViewImpl.cpp \
-           src/project_view/ProjectViewSearchBox.cpp \
            src/shtirlitz/Shtirlitz.cpp \
            src/shtirlitz/StatisticalReportController.cpp \
            src/task_view/TaskStatusBar.cpp \
diff --git a/ugene.pro b/ugene.pro
index 59c32ac..670f27d 100644
--- a/ugene.pro
+++ b/ugene.pro
@@ -112,10 +112,9 @@ if(exists( ./src/libs_3rdparty/QSpec/QSpec.pro ):!exclude_list_enabled()) {
 
 without_non_free() {
     SUBDIRS -= src/plugins_3rdparty/psipred
-    SUBDIRS -= src/plugins_3rdparty/phylip
 }
 
-# create target build & plugin directories (to copy licenses/descriptors to)
+# create target build & plugin folders (to copy licenses/descriptors to)
 mkpath($$OUT_PWD/src/_debug/plugins)
 mkpath($$OUT_PWD/src/_release/plugins)
 
@@ -155,7 +154,7 @@ for( i, UGENE_TRANSL_IDX ) {
     curTranslFile = $$member( UGENE_TRANSL_FILES, $$i )
     curTranslTag  = $$member( UGENE_TRANSL_TAG, $$i )
 
-    #foreach project directory
+    #foreach project folder
     for( prj_dir, SUBDIRS ) {
         #look for file and add it to translation list if it exists
         translFile = $$prj_dir/$$UGENE_TRANSL_DIR/$$curTranslFile   # 'project/transl/english.ts' etc.
@@ -182,7 +181,7 @@ unix {
     binscript.files += ugene
     binscript.path = $$UGENE_INSTALL_BINDIR
 
-# to copy ugene executable to /usr/lib/ugene directory
+# to copy ugene executable to /usr/lib/ugene folder
     ugene_starter.files = ./src/_release/ugene
     ugene_starter.path = $$UGENE_INSTALL_DIR
 
@@ -212,7 +211,7 @@ unix {
     mime.path = $$UGENE_INSTALL_MIME
 
     icons.files += installer/_common_data/application-x-ugene-ext.png
-    icons.path = $$UGENE_INSTALL_ICONS
+    icons.path = $$UGENE_INSTALL_ICONS/hicolor/32x32/mimetypes/
 
 
     INSTALLS += binscript ugene_starter transl plugins scripts data desktop pixmaps mime icons manual

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/ugene.git



More information about the debian-med-commit mailing list